ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
August
July
June
May
April
March
February
January
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
April 2006
----- 2025 -----
August 2025
July 2025
June 2025
May 2025
April 2025
March 2025
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
14 participants
324 discussions
Start a n
N
ew thread
[greatlrd] 21587: Windows API standard from ECMA, http://www.ecma-international.org/publications/standards/Ecma-234.htm
by greatlrd@svn.reactos.org
Author: greatlrd Date: Fri Apr 14 14:48:46 2006 New Revision: 21587 URL:
http://svn.reactos.ru/svn/reactos?rev=21587&view=rev
Log: Windows API standard from ECMA,
http://www.ecma-international.org/publications/standards/Ecma-234.htm
Added: trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/ trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v1.pdf trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v2.pdf trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v3.pdf Added: trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v1.pdf URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/media/doc/Standard_ECMA-234…
============================================================================== --- trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v1.pdf (added) +++ trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v1.pdf Fri Apr 14 14:48:46 2006 @@ -1,0 +1,9627 @@ +%PDF-1.1 +%âãÏÓ +1 0 obj +[/CalRGB +<< +/WhitePoint [0.9505 1 1.089] +/Gamma [1.8 1.8 1.8] +/Matrix [0.4497 0.2446 0.02518 0.3163 0.672 0.1412 0.1845 0.08334 0.9227] +>> +] +endobj +3 0 obj +<< +/Length 5886 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4d0PAÄÆcq°¸j61trmEJ)HÏ)af9iPï- +gAHÐPa7'# C&ÏEhÈf4J¨ ä\9EbµjÀh8FDqÅXq*JQQRh +ÄlÜ9"LfSh¦(1NPÈäkQ©Á°0PÖñÙêðV:= âh²6X³9¼îC±æ Úð(m$Dôbë î Õý¶|h.ft;î0¸gÉÉ"\]w!ãìz̾¤kÝÛñÇ=þCñ÷:~~¿«KÕáìÑÑã·Ùô÷ ý_0?M«úÿ¬.#nж¨âÂàÀíl°«k,öÂâ ³«ôçºÂƼ®c°ÁðûDm¤L¾Ð¬éáªHÄAª¬ÙFN[¬Ï´bqC@Ã2+±ütûµqôs3îüq»p˾Ö3èìiÀ.ÛôúÃê³{/>/J!µË`Lò«s·sD'N0ë'4ïxjã¸ó»óý"PìíBNûÇÆq«é)̰:ÊÔ%$äIÏÕKQòE%Òô£"нp½&Ì õG².<ÁD½#Ö*ÈïÔU9[£Ñ«ÅT;é4%>SÖQ9²64ìÚSÈìÏ¡Å7KlÌ7Lv´TÛ»ðHpÝÃå{QÙÝqT8{¹[2O3?$UD×Õ¯D$ÇÞ7²K+VÙÐhAÊ*̼±EüÔa SLÕ4,RÈQzÂäÛ÷Õúý]vÛÓãßi4AÅÎêeNEåÎe5µMÇ^Kìäõ%<ãâCáèL²ybÙTNhn«]Ãß§¹ÎÃp #üÔÚ¦µjî<ǧD ¬ì°RKkOú;wZûîjp«ÒÐÈ:ò]Ívã¨IÉk¥Ëõ?££îFO¡Cîþ#çÑ^44\(_±Paõepl÷íOÏËy¬µ¿¬7Ö[xÔYÆÒÝmÄèìo±ñÞnh°wóìm檷.ù/ßiv\bãøxßìxW´5ÎnÃíÞàÉ83góPú!ÜßÍWáópÝòyªóSz/Aç:§¤]+rEmÁ-@¹Zqú§% )²~1DM&i067oy¸ÖøiÚñôGǹ¯(£þB1kdq/µ5º|+NÇ Á×ffI#ýZÈ&G\³Zm)5&¼ÆØÝE QA3gRÖJãP,3¬×Ë ÚIea#¬õ[`L_6lV}9-(ÈzÂaêi`.6jÕâÃeáÀ¸öÅlrwL¦72¬ÄK$cÌÂDÀà¿©ÔµIvÃëðRZF@×ó&ˤȢN0È$ãzN såݨêIBñBhÐ]î3[$ROòü«/$ÀÍ4ª¦§æì^$άäÁ9¦{Ì,WPr +l¡ru&ËåG-æb1>îdÂJZ4Êd,åòzVN礧Ý,éj«?O&8¼'\_*Ъµ^ãè+/I^MÊÊ% 0rª¡iÌBµ^<è'jÑ jJ´~,VdÒo e 1BæAU;Ùk9¥ÑÑQøà¯,.½z¼:fâIôîm1ÙuQÌø¨ðB)©YR d£¦Õ²ºOûªé-%K +F%¥CbrõèS¤ +&%¥s^Ò 2)Õn|3BKyQëµl¨gJ´W +\I)Ç¥´n²Tvdçç%%XÑÉת@GÆÅKÄcS¨ý2&îMI\åÔ>dõ #\8 Ä Û)7i;Ö!¨û[wlmzÉ£-}È·êÎ6µ».}Ñ··&L2B'uîÍ¼ÖøÚkºÚíº[¼7Jòf8´Ó9½wnéÒy +úÉó¼w&2ó~.Ár¸÷Òößj/Õä´×õIÜ6·nLm!.Ï_Vf¹låÅÀWBñ`¤ùI»¹Øní_¼-B"À6·^ËM ãö*¸D2ÜS>ñ¦Æ®8û.G1.S½Q?Kå0íÉÇe#b»up%¦&IE¾+ó1sb_8ôîã´½Q.VÉØ`\¦$¾È&úætËsP̶/J¼'²~A¹9Õ'\¼ÊUv\Ï!EêqþyÍCKÍsÕ¿Iþô*Lñv¨&çKi ôÓHIzwêlÞu&XÊ'M£ ó +Õ1êý=¦dIÖÚ@Mýwª³³}ª_éVW!¨41û^.ÍB6~·Øû:=m§µ¶ÖØËdHE×¼:ûéM¸aèÜÙ_cl Q·çÛvÀnKºöîùoëÍöZNþ`øp礩*àÛ·noôÁÂôV¸Wj|®Dǯ8ñà±_D[Ñ-8é3|lír.ù¼¦Ã:¾vç;\¿^qäÆé5ål¹ñ»Wʵ7jÖó éÐQ èºñA5CQÒúÒGÍR?(ÞÂ:k»êØæ}OW¼½ț./:ä+k´tÈÖ_aí)%vÛ¬³m>Ú±þó8&ómpËJ<oǧ'áxQñJ}øÒòÃÞ ´B2oòAvÁXü·Äëi0'ÿLt)§©ò9Î÷iæõl¡ÌÿH̼÷ë¿{»Ñì¼åõøé-ü=?Ìpô>_åéÏKÞÇÁ8#Üü¯a¨þ¿ªìi¿à·¹ñ.§¶t;}v¿>ý?F ~Ï%W> +cúóCÊÜ ïú3,&÷Ï.aõÐêfHËÿæ£kOøðPâË+N¢LþÌçÆ¸f2Ê+i-Ü.ðo#2mï@L¬þhèzÐ<ÁFðû&»oif»o;Hzb0pÈP`#¦#gAg+A(zTPx·ðk#§ ë ÅY +/Æ;Fʯ˯I ÇÁNýTÌ0¿ðêd®>Ð PÞ �ÜQro÷FñðQ¥² D9 +Ño5ñüq"qÐüï± PÇïÆL(q>P0ðü12ïÑ"±OèË1 õs)µâAðIqïÀ5¹Í1kqÕYDâêkPà°ðÝñÿQ°øÃ �;è×ñÜï±â:,1-?¨p\±ËgÓHx}1høwr÷±ÞÅÿÒìs!/²°[ñ[!ò*\r!HõR Ú±²(5#a = 1õ²G! L%N-±»$^¯æÿQ$ÂÅ 0r²/!¬£'£ÝR[^gq �ø Ä2e(¯ñ+mÁ|C ¯1û*ó+2Êò²»*¯ÈoCo*ò%2ÐeÒ*'g,ãRr2ò8B»/22m,Oø~81lå"RÆó ]2úÓ1Ì3o·-¬X# ~W42p-ò1S*q5ÌE!R|³,ÕÒÅÌDêh72qèï31Ó4s"Âr©4ó8Ó2cT6±7H«9ÓD#T$Ó¦&ÓY%Ó°4w#.Õ<R<%ÆÆSî!SzÊ+9;?4ËJcf"rFUésÊÈsó>Rc61³?ð¡=ìç>#R.SpÇ(EArAAB83ï´B²;í>}fæ,ÓÇT2ÔA Ô<='D1kDtSDÅcD»ôY$´´OCQ3®PL´\rÔattÿyCQ/C\M´58Tça.,sITaÓú¼´JsW9tlbÄkteIÆíEÈFAloKK~ÆçLÀÒñZ3tÆøôªH)ömOF«MÃÒl´¾oËEÅmK³K@MòüÊ4ðmQ¯LÔNt»ÎuK¯áHq[PÕ7"ÁSÚ@¯Kç¥KkNËËS´óEUíïTgTÈYuÓèv?2U\@1RÔEUO;ÕUµyTãVu_õ7KuBQVH3YT]Y3çV,\mãþ`S«T>Cõ?Zi%Nõ&5»Y§EÆø µZuÌܵmQÈI.Û£çCu~CÒ´¿Oè+]æYÒ§Cé`®øð#½=T_i\5KIÕg_hGVt]_òÙZL¢¶inï©Ícp[\¶'/ßbÔ©dUòvt\P@lt¾hgeva0Îv5e¯ ]öY5×c4_g;J(og¹\´JöC¶'¶^vPÕJ=25g¶mgï×T¤ vqR¶jÁUãjëkV¦#i°õ]VÌöåV¶I6[BìsmVãVÞ?æ>ÊÆv¶|£¸$Çj"Ì>OÓp.Åo·\w o=,?qvÝpÂ8;6ôîïÅkeª; EjwóÈIs#sÍ5t/rCqr¢»s£þ,z×T=-ê!7]t7VÍ÷gt¤Þ7'vñ3kwkd.ûZÂ8åÛwú7©këKxWK7FèFë±Oy»n× nñqWõ#'x·{z÷¹N´fäN´Ù V·D+·÷·}t×yðHu|jE~s·Õ +w§|§z׿9tËx7ýlv}#ÿÖѦ@>Q {×Ðøj̦ï~7;5VÆa7hõ#å$·ûÒK4øniupJ©lcWX´ødô϶[87A®W£Ó1!DÄnsØnux tã8u}~XyAXø¥uÝâd#O¦o¥zÄÌEWúA&ûxs¸¾o°å}«Ê@(GOÑv¥ã!8ëa·ôs|xÕ[6½ ;&ûHXä#y_ìAxû^VÓ¶Iù!÷Wøúõ¸CmÙ.F6§->p&·ðÂxóÇpÑOëËNx÷ÙH-¶ø¢ä3zùbG8ïÙxÕï¢ÂÆ÷&ØÛ +ùÖ£ç(¹ +ÀÂeY·¬ËäqùÄwkM¹DÅË>M·.w¹Ô5- ÷Ùåy²ª'J<fã-Ïù:ÉëcrPÇ:¢:h¹ #-@ùYÞÊ&®C)¥Äp³I颩7úS㤧:¦8ãZ8dm¯0¸÷YG§ti0×z@§:6xÉɹ§Zcµ¢.Ϻf« }©ä¿¢.@¥3eRoº¬w5¢Z´£ù½¬ë½nZÃvs¨×Ñ£$>KY%¦Òq9g§öq9o£d2ZrÛ¹°±§Ù˯ àtFÎzúª[¤`q6½§[7íJq9±³óm cE¨:°âݵ%»¬zûcµ·³ +«W''E+»OmÛpùñÚæR°N6¶ù¸$BÂ{w®j1¹mñ¹&,ìn2Õ¹òDÞW.K»s?¹Ë%¸¦elźë@ûÇ»{ÊÉ»¼i]Û×wºxEp¼D»Ñ¾ÂâѾª²Ëñ¾þà»nÛ¤öÙá¿*²D®-j(vç:£©Á¼ +:üG<%=Ã.ØâûÉÃìÏÛEd8æÈãðÑûxE{öt¥ÅRö=Z«.ÆRtyJ,\jG.*·rsù[ÇJrîØçûØWi^ô#Gêη¼èºÄsîν[Èv¡£zXç7u;ÈN_²úI£^ ù?7çZñÍk,{_ÄfÜ,d×Zd~çÜ7¤ +ÍÎp\¼¢ÿè° @|û MñÏX°-ðJû¡©¼fW 2Oå§ÍizÝ7ûRÚ=?mÝ2"}GÑ]J]Orý2b=W¶Ôæ#Õ÷{Ó%EÖy'Ó§×ÑÓ#§×k×çØtC-صµ-Ù " B Ï@!i U˾"Ê6,E:1Ì-"`£cì-Â`@d$l't(B ô Üà@/¾ �Â~Ò àÝÞ£bñݾ Þà@`ßßàb ÀÒ`Ãà^ á~ �Fnù=¤ Å=¬aâÄ+BCÛî+ÔyÜÖýÈ@P + +ÕÚ`Ä>rFĤ, +Ü%Eè¢äeÝ"ïß �À@$ h*ÀR rûí~Ú.}ê)´H ¢¥åb ç¢Ã¼¾¯ë>¦bf PÀÂéÞ¡ê^úM#ë]Ð-ârÇì¢íÕíÜ"àéîe:'Þïå^¡ï!.ì%_- è¢r + ¤ ÖÀQéóñ¢êd>'è~½ëâÞ.]Î!bíòàÑíjvyîí}Î ÿ¥÷µú Çú^/ Z~?Ëü?¡üâá¿ôÏîß÷ð1>l +`h(b3"#!Ç- &ã ¤p(2Fâ¤j(7 +Fr) ¢?! +K¥BT^F@ `PÖ7â( Äo£!Þ4(¦ÃÊsF#A®·]+c)Ã^6ÙkÆHÄP.ÈmÊñ¢i6Jqü];G"áÈÈ@3 à [°s0ªýÁGá¥;Çd2B¦[0 +!_ASt~ÇÃáã,}üiÇÙÝPÛ¥¡åJ(PA8 èi7¼Îr0M¦qRT5p«JIR#ȧ#1Æeç!_¼d7ë^+ÛX¿±d§mDz,LÊL»3[:ÀÌ\ÒAm<ÔµiÀÄ6 ðd 7Aqaº¦ 2ä +ÃxØ:¯bð¼hCs(xc"6í´ZÁ³Ì{ Ê1º.x8Ê7=£Ù ¼\³+)Ê®¨ÄK/ÀÜý? 9½[ü +L¥*J΢/,îÐà49Ãç:ÎóÈË=ÈKâ +endstream +endobj +4 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F4 6 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +11 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +12 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +14 0 obj +<< +/Length 5799 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4d0PAÄÆcq°¸j61trmEJ)HÏ)af9iPï- +gAHÐPa7'# C&ÏEhÈf4J¨ ä\9EbµjÀh8FDqÅXq*JQQRh +ÄlÜ9"LfSh¦(1NPÈäkQ©Á°0PÖñÙêðV:= âh²6X³9¼îC±æ Úð(m$Dôbë î Õý¶|h.ft;î0¸gÉÉ"\]w!ãìz̾¤kÝÛñÇ=þCñ÷:~~¿«KÕáìÑÑã·Ùô÷ ý_0?M«úÿ¬.#nж¨âÂàÀíl°«k,öÂâ ³«ôçºÂƼ®c°ÁðûDm¤L¾Ð¬éáªHÄAª¬ÙFN[¬Ï´bqC@Ã2+±ütûµqôs3îüq»p˾Ö3èìiÀ.ÛôúÃê³{/>/J!µË`Lò«s·sD'N0ë'4ïxjã¸ó»óý"PìíBNûÇÆq«é)̰:ÊÔ%$äIÏÕKQòE%Òô£"нp½&Ì õG².<ÁD½#Ö*ÈïÔU9[£Ñ«ÅT;é4%>SÖQ9²64ìÚSÈìÏ¡Å7KlÌ7Lv´TÛ»ðHpÝÃå{QÙÝqT8{¹[2O3?$UD×Õ¯D$ÇÞ7²K+VÙÐhAÊ*̼±EüÔa SLÕ4,RÈQzÂäÛ÷Õúý]vÛÓãßi4AÅÎêeNEåÎe5µMÇ^Kìäõ%<ãâCáèL²ybÙTNhn«]Ãß§¹ÎÃp #üÔÚ¦µjî<ǧD ¬ì°RKkOú;wZûîjp«ÒÐÈ:ò]Ívã¨IÉk¥Ëõ?££îFO¡Cîþ#çÑ^44\(_±Paõepl÷íOÏËy¬µ¿¬7Ö[xÔYÆÒÝmÄèìo±ñÞnh°wóìm檷.ù/ßiv\bãøxßìxW´5ÎnÃíÞàÉ83góPú!ÜßÍWáópÝòyªóSz/Aç:§¤]+rEmÁ-@¹Zqú§% )²~1DM&i067oy¸ÖøiÚñôGǹ¯(£þB1kdq/µ5º|+NÇ Á×ffI#ýZÈ&G\³Zm)5&¼ÆØÝE QA3gRÖJãP,3¬×Ë ÚIea#¬õ[`L_6lV}9-(ÈzÂaêi`.6jÕâÃeáÀ¸öÅlrwL¦72¬ÄK$cÌÂDÀà¿©ÔµIvÃëðRZF@×ó&ˤȢN0È$ãzN såݨêIBñBhÐ]î3[$ROòü«/$ÀÍ4ª¦§æì^$άäÁ9¦{Ì,WPr +l¡ru&ËåG-æb1>îdÂJZ4Êd,åòzVN礧Ý,éj«?O&8¼'\_*Ъµ^ãè+/I^MÊÊ% 0rª¡iÌBµ^<è'jÑ jJ´~,VdÒo e 1BæAU;Ùk9¥ÑÑQøà¯,.½z¼:fâIôîm1ÙuQÌø¨ðB)©YR d£¦Õ²ºOûªé-%K +F%¥CbrõèS¤ +&%¥s^Ò 2)Õn|3BKyQëµl¨gJ´W +\I)Ç¥´n²Tvdçç%%XÑÉת@GÆÅKÄcS¨ý2&îMI\åÔ>dõ #\8 Ä Û)7i;Ö!¨û[wlmzÉ£-}È·êÎ6µ».}Ñ··&L2B'uîÍ¼ÖøÚkºÚíº[¼7Jòf8´Ó9½wnéÒy +úÉó¼w&2ó~.Ár¸÷Òößj/Õä´×õIÜ6·nLm!.Ï_Vf¹låÅÀWBñ`¤ùI»¹Øní_¼-B"À6·^ËM ãö*¸D2ÜS>ñ¦Æ®8û.G1.S½Q?Kå0íÉÇe#b»up%¦&IE¾+ó1sb_8ôîã´½Q.VÉØ`\¦$¾È&úætËsP̶/J¼'²~A¹9Õ'\¼ÊUv\Ï!EêqþyÍCKÍsÕ¿Iþô*Lñv¨&çKi ôÓHIzwêlÞu&XÊ'M£ ó +Õ1êý=¦dIÖÚ@Mýwª³³}ª_éVW!¨41û^.ÍB6~·Øû:=m§µ¶ÖØËdHE×¼:ûéM¸aèÜÙ_cl Q·çÛvÀnKºöîùoëÍöZNþ`øp礩*àÛ·noôÁÂôV¸Wj|®Dǯ8ñà±_D[Ñ-8é3|lír.ù¼¦Ã:¾vç;\¿^qäÆé5ål¹ñ»Wʵ7jÖó éÐQ èºñA5CQÒúÒGÍR?(ÞÂ:k»êØæ}OW¼½ț./:ä+k´tÈÖ_aí)%vÛ¬³m>Ú±þó8&ómpËJ<oǧ'áxQñJ}øÒòÃÞ ´B2oòAvÁXü·Äëi0'ÿLt)§©ò9Î÷iæõl¡ÌÿH̼÷ë¿{»Ñì¼åõøé-ü=?Ìpô>_åéÏKÞÇÁ8#Üü¯a¨þ¿ªìi¿à·¹ñ.§¶t;}v¿>ý?F ~Ï%W> +cúóCÊÜ ïú3,&÷Ï.aõÐêfHËÿæ£kOøðPâË+N¢LþÌçÆ¸f2Ê+i-Ü.ðo#2mï@L¬þhèzÐ<ÁFðû&»oif»o;Hzb0pÈP`#¦#gAg+A(zTPx·ðk#§ ë ÅY +/Æ;Fʯ˯I ÇÁNýTÌ0¿ðêd®>Ð PÞ �ÜQro÷FñðQ¥² D9 +Ño5ñüq"qÐüï± PÇïÆL(q>P0ðü12ïÑ"±OèË1 õs)µâAðIqïÀ5¹Í1kqÕYDâêkPà°ðÝñÿQ°øÃ �;è×ñÜï±â:,1-?¨p\±ËgÓHx}1høwr÷±ÞÅÿÒìs!/²°[ñ[!ò*\r!HõR Ú±²(5#a = 1õ²G! L%N-±»$^¯æÿQ$ÂÅ 0r²/!¬£'£ÝR[^gq �ø Ä2e(¯ñ+mÁ|C ¯1û*ó+2Êò²»*¯ÈoCo*ò%2ÐeÒ*'g,ãRr2ò8B»/22m,Oø~81lå"RÆó ]2úÓ1Ì3o·-¬X# ~W42p-ò1S*q5ÌE!R|³,ÕÒÅÌDêh72qèï31Ó4s"Âr©4ó8Ó2cT6±7H«9ÓD#T$Ó¦&ÓY%Ó°4w#.Õ<R<%ÆÆSî!SzÊ+9;?4ËJcf"rFUésÊÈsó>Rc61³?ð¡=ìç>#R.SpÇ(EArAAB83ï´B²;í>}fæ,ÓÇT2ÔA Ô<='D1kDtSDÅcD»ôY$´´OCQ3®PL´\rÔattÿyCQ/C\M´58Tça.,sITaÓú¼´JsW9tlbÄkteIÆíEÈFAloKK~ÆçLÀÒñZ3tÆøôªH)ömOF«MÃÒl´¾oËEÅmK³K@MòüÊ4ðmQ¯LÔNt»ÎuK¯áHq[PÕ7"ÁSÚ@¯Kç¥KkNËËS´óEUíïTgTÈYuÓèv?2U\@1RÔEUO;ÕUµyTãVu_õ7KuBQVH3YT]Y3çV,\mãþ`S«T>Cõ?Zi%Nõ&5»Y§EÆø µZuÌܵmQÈI.Û£çCu~CÒ´¿Oè+]æYÒ§Cé`®øð#½=T_i\5KIÕg_hGVt]_òÙZL¢¶inï©Ícp[\¶'/ßbÔ©dUòvt\P@lt¾hgeva0Îv5e¯ ]öY5×c4_g;J(og¹\´JöC¶'¶^vPÕJ=25g¶mgï×T¤ vqR¶jÁUãjëkV¦#i°õ]VÌöåV¶I6[BìsmVãVÞ?æ>ÊÆv¶|£¸$Çj"Ì>OÓp.Åo·\w o=,?qvÝpÂ8;6ôîïÅkeª; EjwóÈIs#sÍ5t/rCqr¢»s£þ,z×T=-ê!7]t7VÍ÷gt¤Þ7'vñ3kwkd.ûZÂ8åÛwú7©këKxWK7FèFë±Oy»n× nñqWõ#'x·{z÷¹N´fäN´Ù V·D+·÷·}t×yðHu|jE~s·Õ +w§|§z׿9tËx7ýlv}#ÿÖѦ@>Q {×Ðøj̦ï~7;5VÆa7hõ#å$·ûÒK4øniupJ©lcWX´ødô϶[87A®W£Ó1!DÄnsØnux tã8u}~XyAXø¥uÝâd#O¦o¥zÄÌEWúA&ûxs¸¾o°å}«Ê@(GOÑv¥ã!8ëa·ôs|xÕ[6½ ;&ûHXä#y_ìAxû^VÓ¶Iù!÷Wøúõ¸CmÙ.F6§->p&·ðÂxóÇpÑOëËNx÷ÙH-¶ø¢ä3zùbG8ïÙxÕï¢ÂÆ÷&ØÛ +ùÖ£ç(¹ +ÀÂeY·¬ËäqùÄwkM¹DÅË>M·.w¹Ô5- ÷Ùåy²ª'J<fã-Ïù:ÉëcrPÇ:¢:h¹ #-@ùYÞÊ&®C)¥Äp³I颩7úS㤧:¦8ãZ8dm¯0¸÷YG§ti0×z@§:6xÉɹ§Zcµ¢.Ϻf« }©ä¿¢.@¥3eRoº¬w5¢Z´£ù½¬ë½nZÃvs¨×Ñ£$>KY%¦Òq9g§öq9o£d2ZrÛ¹°±§Ù˯ àtFÎzúª[¤`q6½§[7íJq9±³óm cE¨:°âݵ%»¬zûcµ·³ +«W''E+»OmÛpùñÚæR°N6¶ù¸$BÂ{w®j1¹mñ¹&,ìn2Õ¹òDÞW.K»s?¹Ë%¸¦elźë@ûÇ»{ÊÉ»¼i]Û×wºxEp¼D»Ñ¾ÂâѾª²Ëñ¾þà»nÛ¤öÙá¿*²D®-j(vç:£©Á¼ +:üG<%=Ã.ØâûÉÃìÏÛEd8æÈãðÑûxE{öt¥ÅRö=Z«.ÆRtyJ,\jG.*·rsù[ÇJrîØçûØWi^ô#Gêη¼èºÄsîν[Èv¡£zXç7u;ÈN_²úI£^ ù?7çZñÍk,{_ÄfÜ,d×Zd~çÜ7¤ +ÍÎp\¼¢ÿè° @|û MñÏX°-ðJû¡©¼fW 2Oå§ÍizÝ7ûRÚ=?mÝ2"}GÑ]J]Orý2b=W¶Ôæ#Õ÷{Ó%EÖy'Ó§×ÑÓ#§×k×çØtC-صµ-Ù " B Ï@!i U˾"Ê6,E:1Ì-"`£cì-Â`@d$l't(B ô Üà@/¾ �Â~Ò àÝÞ£bñݾ Þà@`ßßàb ÀÒ`Ãà^ á~ �Fnù=¤ Å=¬aâÄ+BCÛî+ÔyÜÖýÈ@P + +ÕÚ`Ä>rFĤ, +Ü%Eè¢äeÝ"ïß �À@$ h*ÀR rûí~Ú.}ê)´H ¢¥åb ç¢Ã¼¾¯ë>¦bf PÀÂéÞ¡ê^úM#ë]Ð-ârÇì¢íÕíÜ"àéîe:'Þïå^¡ï!.ì%_- è¢r + ¤ ÖÀQéóñ¢êd>'è~½ëâÞ.]Î!bíòàÑíjvyîí}Î ÿ¥÷µú Çú^/ Z~?Ëü?¡üâá¿ôÏîß÷ð1>l +`h(b3"#!Ç- &ã ¤p(2Fâ¤j(7 +Fr) ¢?! +K¥BT^F@ `PÖ7â( Äo£!Þ4(¦ÃÊsF#A®·]+c)Ã^6ÙkÆHÄP.ÈmÊñ¢i6ÎáðùØÖ8§áCqÛKaÊT<©P +äÁ\- ¥a¸O!åò㸴`3gc¨°h4 Pr)R2ݧcL¸kBáÀÐA¨ÞFX9U¹ÝïGx^Æär§|ÞDBܧ4èsȾ\ÐÒÈ zÛDJ ÃHÆ0HÞ7ä7ãÂ6£HÜ3¶m«ä³êBÉ££ Ê9ÃÆ20Þ9¼2 㺴Ú6Ïtâ·¡p8NËä¢në:bléÛâÇãGÀR +endstream +endobj +15 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F4 6 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +17 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +18 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +20 0 obj +<< +/Length 4236 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4b1RCq¸¸f2 ÆCapäm6Á"¥C¨@gDFr¡-DF8YÞ[F)R- A¤æt7"éPH!PÈ æK'ÅkÒa �nmrÆ³Ùø ¨h2%I\@S:MÆC ÈÈ §"1ÔÜc:Mæã °@s8Lf1¤ÆaÌæÄó0étÇ#yÏXtQé"¹§o;÷4Uº¥NfQ7p÷g ¡äa6wÆ~+|t2Æ]ÝwFGØb0̦J¥Z]HG²$ºjÿ'ÀRÕ£ÂÌÎàÒ6¹(Ú2ÌKR78BãÚ˨Èí¶-jÛ²L[V×¼#¸Ä,xÄ2ìÍO:þÀã{:Õµ£º;{"Ð4M# ² ô+|À½Sê«B T®iÚ» ^Ú Ð|"È:#¸ÐÓ ÐR* JÀ¡(Z¹ÂÜ +êðº!øÌÑ5+Sr@ÎÉ\°å9 áGCHèð:2<|á>70#¸Ò63ÑX@8*,HÄ602;:ÏApl½ QñÃ\Ø0l+ılhÈLóJ5ͪàüP©äNJu<Ëí{@X3z!b¢Ó«ý,DÀñ<NèÔP1°{^Ú£8ÐÕ´.Å1sê ï(æùHÃxAÀÆ:C Ü^ ê:`êùA8ù¸AÀÉ5ÐXÊ6,£ã1³uäÿaÚt4âáÅ¿JÜ V¬62ÈÍ ÿàa PÎ:#;17ÐÜE!3Uà ÀðàÆ7èNã¨ò37³Ñ#½çêñkÖâ/É®[ÓÂnò×6Q¢u6OAE=PYöÚmùòý¡tL®An¾@[63*#k]}Rìýqx×h]hÂ8C%ê:Õï'ÈÝõËÏŵÐòfmF/½>¯·zb=mQW¹ìÞÕ°5è˵Ê2*®ÙGÄ(ó~à°\ÃÎ$µ¬S%³QÍS^Ôh̵!I]~e2go÷.^á3lÞ£@åö)cj¢ÀÖ®ºê\£¡GÖ_ê³I U(B: ÚÕNÄà^y Ø0±Òn(`¥ÁÈ._hsx Zè �Êî¨Vò-A.yU7RxÃF(®¾"´ZÊWÄTü2VNˬ.l £7D8ti$Ò©Ãdϸwª1³¾UFuN¹ÙC|ð6¬õØ" 8¡Æ0ÓØ¶Od1±¸ö;ÓØuRc4æy²¨ÖУÞT"¥k'ô\àpTe` Ð ÜI->£ZiÃah4̳dl!âº%ë 83`ýÁè;ëèöÐÂ|2Æ`è#tÀºCiÚ6&ð 4#Ͷ7"è^ä¹MÑ �¤(pUE8@hÊìt[¢v_áKÂE9ÊÏ*Ú«u¢Ï(ìÌq¢fÌÆ±úd¢5CÌ<ô³ ÛX-åÜ fáäÔ-ÊÕ¼ÂJKIÛôpSdJbâXq¡¥*÷ÐkJ!qC# /¦ ᬨ§#,g`Q)¤#Á ªc8I �@£³Âf{`¡ç±$³µ'ÐK¾x HG%¦ë-ÝJH¤}Ù$\h(i¸_i0Ñ Ñ÷¿×Á«:+ѵl§µOÔÊLؤ_¦>ZfÁ Sª³Ög"$ ³§GHÓÖ²¡ §ÁÄÈÐ7´Q Þe2úzQ±êé^dC4amJ¥QXÏ À7Ñ!¦qè.º3 +©{];Ԭẽ¼)Û`!mÌ06ró6CÐ)ØAÆ*câZ"ܨ´90Cz$a´R8æx©y@º+B¨±_éi§åÈÆ',£"KÀLig"Nqeô +y¾ Īðshmr%0ÁÊÈpÄ7ªà²èKÌ.ÚµÞÕ]=¶lÍI[ÙÔ&´Y§âlI»m-ÄõöØÝȦNû´7fTËÚÉìRÁ»\;Ú`nC¹dÖ£&iUD`ªlÀ°VfÒ¨ì0¼ ÎyÂ1¾UaçEplR×ë*Èð7%|¢ ®B!®1SL<íJL80w¾ß ïítjõæ¾ÕØÈ0´8C¨l3(6ÒkÊÑ\b_)áæïåSÞ5CÁ¯¹88NZ¥Cg»Ö""oØÅÜ; &ñmÅîȹ¥þçk !ØÀ)î#OfÍÙíàm]^¿[.10lë1deë¡ Ý¹ãÞë-yËÒNßî<Q6¤V¹øäæÌñ[ Û÷³6rËåyâ6ÁpkXÓø$~Ü$Æ÷J`eÁ±Àîgæ³ìág¨9´I÷"½[¹ñã?xM5^צ.o³Ü¸¬];õÞéFãöÁÁî³ü[À?`ßÒaôßϵ¶í²cåéëj¿o¾i¹JÙq«ËÆÁ*NûW×W÷0òòëÌKëÎïû sO,uççõÁ¿ä] }Y¯â»«£êó§ õÑÐþËEØM["=Ó ¢;R"3(?(h¤Etß ØoÊþnUÉ\Ýï*½øKYñ¹áuPÙ$ðMàz²òò/ļ°Z¦\õÔ¿x â=ègê`dÌ« rål7§0î6ãª.èÏw¨vßcéJÏ|¯*I%PHËCvëF|þ) +5«ÒIÀ÷ îò£|çÉA.Voîâê.¨±F¦ 7\TÌBl俣¼Àô¤ ³Í¡NÂãZAåîëjDzGâl ëöòPB`oHxbtôÀl¸kn8«ÅbõjÔõÏ6¡rkÏ\¼ÀÎêÌ1@è-u¨>,lø&Ò<ð¢]ppP0J· i "Æ¥MBh¥"ÂhiÂc è#B}àP(À[²÷ÈFæø"&Ëñ k<õ`Ĩm¤¯pç&r^ðÜÍo 7f^@ZÖK¼I>%ðPàêÖÑ©VRQ,'þ'äC`ÍÉaí$`Üc'ÒG¾'' £a¥>:.} \0K¤6FðüV0ÖÖHº@Ì»#0ý9*½ðHÑj´ïQt¬ælìµï=æ 4PÏç~ûËü" sÂûÕä ¬Ô)H`Í �çCc@g1ÌêÔÚçþ}§ÞfclÊ +Hm qÒ?*zre ÀòsËÌÚ ¤1@ʹàæc"Qø«qüº0¶QªTck¢`°Åf÷rDò©´æ.ã)îó(5"¢Ìì¯R8Ì+îiºEëÍñ.VIBñJ +Úñ ^ªáL5DÄB 7"®ä ô>kNª±Jw¨-íñ& qÏWÃU KpôIO9 Pâ_¯g"âçt´¦ @3ð8¬aFÇh<&-ãêtô° 㸹Àñ¤g÷8¥Vj[1H¸KóÒjàÞ àñ.Òøòòtòø¶9çj䣮ðÐSÃ_0CìÜNäe ;ÓìÆðÙª¬Hå$~Íàkf<àª3)X¡ÒÉ=Í7ÿ`Ö0(^ 0çCÙÊò ¼Ã¤fÁ<°M@¤a*bwbúÀÐç/·6ìõFù*øFÉPâÐe× C:˪ÓÄú0&0 t)<l¢3øtÉú ÎB~9¢àK¾E4ÜXOd6Ñâ (qê£È]s%Fô¾«E¼3`é%G<QÁ9ÒåP³î |GTf'± b~nù+ùnSé\ÞSFðdôÈ"®pV²LýUö ûN96nÏ@Ð)(VÈÃBiS3xT2Ò,btdÓñBîãW¯d2mÒlø;`Y;[A¨ -qZØëÈ× èëÕdöC©3£2à¢ù¬M A4ê`²ò )jf ?súI²ø~J¶=lö'fmLlÛ/Õ_rÜ"!å¢m;ÎÄÑ:áàÈÑ ¶Mè ÀSc ±¢Ì°À¯Ö\)æ ÉfVifÖpMé¤YÞ± 6vexµÕbÇ �jh+JÒ|*(ÎDCOiôÎRûMtª_(F+ÄæîMSMaNéIQUæ5X÷ ÈTÍ$ÕXþoTSÅüUg<AãúlUÇl AlëÅmVØ üæq<rØB¢hOÖª*Ò±¹$2®ö0üî9Qf©%ñ)K <&1 PE£ñ%ÄZù÷×öå*&³0[3ívf ++vfv4<>#ÊFQf g#tûò¨O)7locuWuVÒõvÖ[vÚõw^Ù´1tÞùéWuCVg°ÇeÚÊ ÄF +æ`@ÎV$gÃpäcF>Wv§çðã �ÕH±(®JªV¯©¢ÜÍòOÅ|@n/Ve±WP +um6ÐjÓk &6ÞTfrw$]¤Kø¡îì«tgb¨CÃQïà @KJ3e_lIW �®Ìï¥íGÃwØÍ_ ÎR{íÂ<"ê 0åè#|c1d) >wù$Â,àfÁ0ÃwP¡g=Z40$_M8b¯¨Ê%³E ò¹Éd`¥²3ÏT%PíÎÄ¸Þ h oÅ6nê·ÓmN\I)càb$sk8ái²9êÒSÊ5^Ýu`àh°qÓ½cjË<à¤f> 3áf>¢B +endstream +endobj +21 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +/F9 22 0 R +/F11 23 0 R +>> +>> +endobj +25 0 obj +<< +/Length 961 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4r.Æ"è@Üd8bECl(T9Ix ´`.!ECB2à ±AØl7Îb1¼ä :¢ +Èi7Äq@u7Siõ¼ÍW9NBÚT@s<ÎSh´Èe3Tµcæo:waeêc4Tèf¼Üs¾'CiáCF#9í#ZU9Ì\ ËåS¶¡EäñIt¨Jd¤#m1ÍARñØi °ëo¡ôÀÂr¦Ë-ZÃshÇA@àuîU*×§¸o8X'CN= * (xÀe¿í·p½Öðl¸ ØP)+XÚ)ãÎ7 ëSO"ä¡£pÂ1:K*¦8cõ½£s@ÉA@ÞË@äÖµékè>ád¶[ô& ø +QÁpkØ1©xÞêx@2Ú¹) +RÎ:=jZ½ 1Ðì>ö0Ëëã+jÚ¶(ÃÊ®öCÃÔA.©æ5»£r91²äDñJcÇ8£2 ÁKâØ£a¸pÆÑãú{ +( "¸@ ÃðÇ5ÄBë;a ¨2¯ +ÍRNÊõÜD1)sêæAHj60Q1(ÃfD«xìé½ áÄL½@Ý6ÜgÒ^ÉÑxK4Õ8ÏÒ+µ41s5n7U/uV¸ÊXÄ:#`èª8äÒ¯uÐÑ^,UÚjÒ£zìAå´av®:26ìNÛ¶ºê;³k]®;±l62ÏYtHÓ2ÜC@µ×¨6á q ß,<ââ¸êZßã;9BWê<cHÛØ.¼âµC4ô¥Â/[$¹°J·¥nà4Cî Ì2®cõ8m~7aYÄZgm¼t&ÉÂFà§Ì.ú\Á²j¸¼æ¢`*[®£²Ã:µ_.8s<ØÜ¾O§V7²½¶?%uc(èÍ´>gvæÜæ7i]Àp TpÜGoÝÕlNsU<u<ÆÂÃ:¨1cJ|4ÍU2âé3Ôåq)xl4OÝ*8-j´Ý ¢ ¨ªôö$̤©b<*z AsE±&d®hËØmX¾@j T +¤ +endstream +endobj +26 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +>> +>> +endobj +28 0 obj +<< +/Length 2091 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" aãA +*àѸ`0ðBØ Z 4e FBá¸ÈgEËF£xYY7Le3¨ ¨a1¢y@c7[ÌRT5LÆCÊ-¾ Æó +ð*j0ÂæXi´¾;OJfSÐÓq§OÈâÈ Ê) + ÆSÙG¤ÒÈÒ) @k5 ñ2l( cw¼Ôuâí' LØ@S1HÐPo8gé Vï{®Ùv÷{eE¾pxsÁDBÐô*ÈPf¡uç#h¤d ªú/³¨ë;MKºØ<í£ÄÜ<°c|ô¸OÄ&ZLÈ'ª¸ý¿¡ì0ëÌã<C+ð,òE£tT1«³¶<Í,ÛB Ô$ô8¨¨â&Á¢s 1¬KHZé$\ÁBÀ4CK,ùJmuG¯¼xó·ïT,²¨#Lå)áCúÏ-0@7N¡@é2óÄÔ;,HJ§!× ¸4ÏâÅä2l¬¥,Сlò7#£²È@+#pÉ0O#¼¤ºË³ìç£æ<ÕUÕQÆAhg=Q SX§ÇöÈ!lË6ÈÒCO1i£åÃB÷¨p¬ÓÏ7 P+ÊO²S¾¡Eg[#!@ 9 î¤wÒs3jZ6(õÓZ¾Ä1ï`oCJ£Hæ8PÑ Æ4 ² � çã!d¤ë o£(×AãÕ|Ùøós_9Þ9]г°-eñÎi£_ý(ã÷ô'½L^[æù·0hy¶ceÚÝ¢¼ò ´3Û¥®QQþÁ¥ìSu/`TänìÎ"¢ 5Tlë2u b{nâJ ¤2áO.X³ÎoxÍ®Á¼5ûßú'~L9ÍnûP#è Å]+¥áfµ¢îÐtÀw7}ãsÚߢn+¯çë/xÜþ(ÁÈk,Î7¸¨+ᥱÓ\ nÐzÉØÓ [Îͦ»WMª,n@:Q)Öb& ¥é1è¨Ï£µ¬uðÚhwÚt`lä ¹ÖNí\0£c¤Ãb$¯ �î±ÈÁÛ´lhYLrK'*Ý AJyè&@ÝIpñDÒüHq)ÅVʦ¢¢4m±b-Cæ^<Q¯#öU`,K @Ôå ÁNh1)¡J,x6Ô.ÇI¥H¬ ²6¼ÿ(ñ$à¹Ò@R8¡3Èøì`r6¾4 »(=<µÎÞËÞ¡à:C4²\ª4Gá<(«Q¢-gÕÌkí=à¡¶îQÚÒX©eìºêþÁDßXMA¬DJÕêccq¢L©W3$ÎìY×pe£¢¡ 9| +9fmÙPÝ?ؤ¦bPÂÌã:_E}K³lÚd 39Æ4Ô3¸J®39©ÏÂYÉÑ%q_ZFL×ÒSabÛõÜ%ã0¥Å%a80§³:á)i"¥ð"f¤©¬ñ¢äØ£4ÈãkǼÎy~ +ZÑ+¡päaÏ(ÉcÉZ ªò¬P55~Ã%©Q2¦2jM ÓBXÓµ ÙÓ·¤9ÊÖÜÃpg&L:T+1\°)@ncÚ÷ êl=° V·&: ¢TòÔ×UkGÚN/®¹¡¶`¢ÎRË=Déª!xì02+½<Ã3ìaÓS@ +Å[T³Zndr*Fz躨gn°(uêàS +üS¸JãUKMU®IMJÒ·/EU«#W()fM#9giu|Z÷w\;Hµh¢NÆ6zÓÈ&Xòpæ½o%KÀjlöÑWTm)ŽËh°Xl*R¼=×pºö·ØÐWàe°5½¬¤¬Ö8Ff´p΢¥½Ú<u±à($8£ <SýÂM\¢Rɳ\kÊ\ÉÏl£2mêÀì¬LUñùù¿6Åv=kjgs3̹2§¦¬A1Ú͵\æ:²Ë µvËÈÿõàt½xÉ8×",qrC¦&%~ôbîÑÒt[zîõ ½xÓ3TÒ¥ïfmµÕV#>uvs9ÖÚj5ã¤k>_w?^»JJàBkµu Cí/AÊLkÍD¼3ÀoMVdËÓö6Ó8/©ðfSB-ý]ÙÇI}Aº©Ò +kaQM] ³V:ÖX'nƶ®ÎÚçûlíµñ·sFøÜ¯%`ª«aTø4"gB£Ù¥¤5AAÂ% ê<*¼·¦d¼µ÷JƬsqwß!V¯-®Ý|gx »ÎࢴíÌ6o2åà +lÞo®ÁAiu"ß´TA)D +endstream +endobj +29 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +33 0 obj +<< +/Length 2430 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢á n9ÆP³l&T9Iy0¸`9 rÑÀi;Ábh¤Z1 +Hz]* iÆ +á æn-ÇXYh5Ì Ñ¸`3N IR1G# ºÞ2îâ(¤h($Í÷aàÒ)¸ï¾㼠çqHÈr(9i PÖË W`°¤¨j±ç£9øºÁ#*WVQ×a3¨mÈ*v4´Î\%ÍR`e´°B÷ÃM¨¨s5u³E¹³Z +ÝüÜrÇ +2Ù^}Äz¯y,¦XPTPñMð¨/â89,ã´Ð¶-ªëµ,û¶î¶ ~®kz6>#{2ˬkâõ¾+A ¨ÁÌHÖµîû ñ7"ÌØ<Z$³!à PÃÁC `A1д·ÈxÞ6²«øÊ2DLìHç+ë¦Å <Õ¨Îä[¼ «Å¸@)É!@н²l«.'¾¬»Ö¾¯ã 7ªö83,ÜG0K ÓN4B;î eDQSç¥Á¬`±·Q¢ÔªÒl= Ç¡DBGB-Z0PľÈ$Y-ñõi[/LU¾A}ÒÐ= +èKPU7/ES¦¥±6o +Òߪ} ºÁlã(è·XÒè4Ðê} #t©q?vøPúÈ0§s]ðÇuݯp[x^W³ùz2l¸ÚÎ¥ìÊ¢ T¯ºI£wm§aªr¬0¤ýC-õscÁFAM¹,)5»ú (Â9¹NW®KîÚº®¦!KbJûoR,ÍâÔÛ\0R 6býsóôÌ®7Ö¦¾¯¦¨êc~«3T6mäWOZÎÌ¡ MnTZn½ ÍòÊÈÈP&ã Ã``R$bØóa"ÍopoaFúoá6ð7qZ[ª!Â5¨m'¹:6Äe3cêot1ëß2¿ òÿ>jËÄ dÊôÈgoZNßm µ®Ü7S>{[צô&M¹½Ï^ÝW`ËÜÀé^ôß¹T»äõ²ßìxÖàïõë?bÆô*ýMì,~øÃ¨ðÂd:Ù·>çt7M)¼&¦8÷Ðad¥ÙFN *iµ¯@ÏKtpÐ-7ÐÑÛ¬c*=5ö_Ì;P8ª¹Ç5ô×ÏûúOz6E_ ¡kP ˾È×/pôý:B2 #hf7GâóÀ9;´ð¤ùóR¯³À f á"Lj¹ºåJìA± ©"°Êà[Ø(ú¸·GÐ3ÁÕµ@qS ql@¸àÆ×3H+Å6ªö¡PÂD!2¥ ÁHh}dºïfMÉÓ+(%3^t Ð Küif+<Øà[K{þfa©Þ¶S.×v¯éWv`~*ÿ>)Ú*é1TÈ,ȸéÙ&Ú±¨b¬u˪Z¯-Ew¤·\lp!ÀÒq R)0&¼ÒH+àO©¥Ë+`µg§dQ_TmÕ»ÎòoÌc j±ì*ôuÖ +DË¥ÊÏÆ\MqÊÑóó("%#GÎUêäÕiz¤Mü£àXeJrnVÇê:ã©q?¦ìK d±Z]ºÆÕã\WêbÉè¤ãuÉ" +¶^*é«ñfMêÆ÷ørlMA"`h_ee¨Î ++MPÜ ¿à\_ìÖ(3)bÍÚĤiúD¬Ç®ÀµÙé±)P +äbP1tÍ@¶N§Y#º,(ÖZ¤eÌ::0ä·Æd)eD²òZZñëÛ¬ Æl£×CP¯2ðe újÅ£äÚÂÁ/Ê$8;¢PndºÎvÌíÏ»öРκ'ÒöJ ÅÅ*ÀëOÊÁBª%`¯Fj½¦ px/ +àì \Ajh9@äO¾(-üüpÑv¼â×1½U:Åæ;nDЩqÄåD¾3t±OÆ^AKïȸeîx +L¸pÉbö[ª!!öA´ÈÜÒqô»¸*X6DýD ÌVþ\w±ñ# Ðú¤·²àB'ÍB WH"óëKð÷È5Õú[¢x¯fôñb:3)à3/é¸nÍñºÛæVó§H[VZ´¡qm¸G'¢ò@u 8bWZ*É. +²Vqëv½4éoGX@¿ ¶G8ë^%¢XºAÖeÅoc¢]}µh0¿(×J§¢~&îSàÅí¨¶<ÇÃX ¨oQµþ û« @¦C8Ý»¯Qhh?¢3Î2ß[òó6¯Òxrxo¥Í®BtÈ̽qL½zÎ9FúÕ¾åqëq¹rvûÂ÷ã¨w-öYâ« �SÃM¦à[ïù#Ã×wPµ H1æçáÀ½²ëßuv +7§a§åи?DPÝÈí·ø{â]3_ì@¾Ã¦ÆÚ»(h.pæ/¸öùÐê¶aý×2Hº&üh¯N$ô¿(7WJ{O¯c-]}¨üqò6÷É×Ên½ÍH]kù°¾C?P ýTU·³§Êjª%ì¯$#¬¶º}ûæ¡9Ç0üO]}IÉù{NÃô³ +a!àUìcÜ?T ²¯Ö¹¿å{Éô~¤½¼wÀú|îîâlï/¸ïo¾Â-¶(OÄüØØ +Bêî8ðãl"ý Ð àÏöá +ÿÏéBòèÞûÀp+.§£ö>¤trä.@ÞXðÉ4ÄîG¦cDR¢B +endstream +endobj +34 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +36 0 obj +<< +/Length 2124 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" DEÃ!Àn9ÆP³l&T9Iy0¸`9 rÑÀi;Ábh¤Z1 + z]* iÆ +áÌoF#A¬,4ÍæPAhÂ\0Î'BÄ ¦) +b äo6 +FâÍì¯> + 7¡A¸R1À çqM" +Ù±JôP5J«&Fµ#¬22¥|fGlz{=¤©9NÇá° o´¡MÆàØe)ÎSᨠ߾6§×ÏdäúmE3eÆY¬åC£ èM5[jØÛ#¶ûÎëw¾ß0AO¤ô2R>Xj»ëö£<-*ôÈ@ö.K¢ì¼0þ¨°L#ÄS (ðü1îû(Ò¿Ð73ð#Äò, °¶ Ør¾ëÛ +£è2Æ¡C2`@"£è»!Hd ì~:DÔRþµ¬Õ²á¤ï@m J¡¢®Õµ ³Ñ'ËÛ2¯a #pÖ*'Áö4¬:â2ÈBá9¬èNãdó=ϳýÐiðfá³Í,¼¢ +RÀë¦c ÊG7»k'[.£85xå V!jâã µ?JªÄì2ôäO.E2óǺ#°ó&µ:Ö"CââáIK´ú c¡-í¨Ðè,\½¾îeÃ]Ê{!Ø©t¯d¡´¶ÄVtY0¡"ήµö½e-WʯqÌv!¸P9Ø-s` +#bØÈQ$-«îÀâ´î1Y9ÏÍï)ÚÕÿ_Ö^.À¶|ÀêµÖÊÒUʺ&0áfÇÃ#ï;¬<9vøßÄ7Æc+fnÈjÛæØsç#ÒÕÌérì¨:>®Âß·\°[2 :4¡mFéûf/©nå¨ÞÖ&¯}¿Úã»Ùºüj-=R«Á\1wCº¿0졾êv02í»Ez¸iÅø?,ÖM7NLÙäXÛtw8¶Wê¥Åë=Mÿ¯u³(×h0W< ¾,ö8p^Ats¿KÄôí3/Úu|ê_YêÉòÊ'²ïnÌÁ¶¾Æ¥ûz~éïåÜVvÌãyn±/TÊôY@!Oh7T;oçËÞ;¨¯Ç¼È +XQP}$ôF[Øy ì+Ó]ÃB~µßÃLÌûX Ø@7Íáçì ¤»Cx.ªSPC³¡(8(CgÁ<ÆM xÔR`¢&X«\Cý|&Z->X¸ä_+± F8Ëa¼¹Åx3LÌn<°-'ÖYÖ´%!²e¾^N*ÛÀ1ó´¨mÁwüú!ÒXÒÀFu(¬Na³7$qqTâÉI,¤Ä&OF´ªãÊr 6Vå uü9¤PºLí©¼4gð^M«ôrVKÌÖÔfÑÇñäC³· TÅ}-/ ,ÑlïÊl¶im%á¼,&aN»Oüì÷®3jÐtðS]ùÏi¹.¼ámHj|ÎJ?4¥òP'ÛìØ8ÍÑoOD*ýhxd¢¨TQ:hä¿1ÉX]C,óZÐÚQ-éTã¥îÑQä$¿NRDÓBÓ#[<²\J{Ë.йAÍ®¡/B²²ZÑÂTBûJØ &7ô<¡e´þKc [µ7Gв4µX±Q%b£U"u%jg@ÁsUº2$¢ë\©<ۨؽ×å^Óf¯¯RØw`ª<Ħ3ìSIA¡£Si©Íªt©å&UT2YFÓìÂõUþ_ÏÅ`í`f®pÝ, ³¥6ÚË[ÌL9µ.MªDaPb¤Mâ®ÎYEoí 0¸IZ¥¦ZbìGR¦i¹ù$ÔKܰÄùIÉm+±µX&4k2qaã7ÖZY*êÙ¯Ýy¶íràÃbQÐl¿²¡ ÅUé,ê¥)ýp+W òÃõNûâ,Ivh3+k÷a]ëbyï´#Hv©ñBF ê`º«x]fj ĨfWt½©3$Òº½00¶N¼3þD,¨MHö=d �¾XhÑë8g<¼Í´=¬u&ÒHrk2a)RA¡É¥ ¬,¯ésÝHxb4LimK¦»´^ HÃ=Ô^K«xIC\®}(]uáÆO íC¨ÐqôÎ:â$ì˯á^ÆRÖ7UÙä° å&yÑ }!¶ÔJêR¦©ðFØ·ëQR-ÆÙ§º;Fýj«6¾ÙYѯ¤\J¢E]²]¡°VFØ` '.³Ø!pìͳ8>ÒÆ674pÎÂÛÆ1$º~6fpÊ¢¦Xë)ç²:g®¹ûÏT4ô üÏ»X£jØ ç>°ÏU+Hxôû«A5Ä,ïiAN¥Õ¿å|°LâÉvwnÂ)D +endstream +endobj +37 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +39 0 obj +<< +/Length 2296 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æbá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶( " íDÑIt¨JA£Ó(h(Z2cAÍ,o/ adIpÀj3 Í*ÓyÌz +Fq2¤r(4RS®ôR» +" ÉC + ä#èè)Äãñ&ñH¶n¦ÓàY¸Æ=(²Q¥¦(J©®r_Ë´Mej[î#8UÔn(9eFW³<i{"Pøø:I°SÇÊp¦|°R0¥o¸.'ÊÁQîW§$÷3s'QààÕïf<}: +×g¢;.L5TÖ*ÏË`¶A£hþ¶éðP¹#ÎÓâá®+ïÂîcǺ/:î(2øÂ9#hR8a`A ;«¼2¹0ËÄò1Os¨»½/ÖÃ=ÏZúBâG¸A°l³5tû Tþ¤Rl&([ukDb°Nt¸7º(7 +#°ë)!·. 2üÂìLs*²ó4xù(rã⤯«4ü3¬ûøÑ'òfÓá¤ÖÐ*\ÙÐm£.M,Ö0ËÌTÞN3´è3 ++Û<M®Û,ù±òä DÁ4)T½30NÔê¬L*áÀnµ«2ûÉÔ f±Í6"0}K= báÏ!@æ·õHQY5-fÚ¶ ¤ÏYÒå¯lÔ«¨q¾Uk +11s%ÍÑúÒÐð °[²å¾ÂÜ,ª)²ÜO ËíKnYSµYøpQ1#.'LâÒåÕv8wpQxS®`+m@myV.³¿òÛ+XÁ¸@"Ô*HÉ×VkÉãΤ@_÷¶o|-YÑ *6´,Ñg2ä8ÊïY¤dæÃ³!2²àÃkä"¬vð;Ö¾?zÅîÿµ¾¦ï´HЫEóu®ìLQf8ú8Q0©+ªïÇ\fn÷¯³jFý~êÿRYÊÙ*§ hñµ.7rtõ´2ÄÜîÏÐÚ¿ð4½fø*â!]¹Ùã3o 5±mVA8v×ovÕ/q°¾í?>ûÆÑô7Ðqàj¾QBøÐåqú7¹ç{ÙP©BäôØ»Öb,ì»'ìÂëOñìþ +"ôwoô7ÀnúÝ#}¬Þ?b Cô Ë42À÷µÝ©EáÈ7ÒK·bl©êÂ(I 1 y§aýc`Îb/z p"I>@å3giBJçqëUL*UhQBheQJ B°ÈÑú|êô^Àÿ¼rÅVÃjpÊx] éN^J)|/ÒöÆÝ| Áö:gÝckò!40.Èâ±ÜSfu±iÞZÌ_ ¢EÈÓôéäùxìùëÀE@Ãa1x)ødÊ_ -G¸ÄÔÜ`OïÞFYK ÛW ÖFÁ,ØZåTÌ>É*àEL²~1Ê&¢¦@ñªe¸d¤êÜS^+¨Ä&Ã&å@P LIïM<àLeÙÌ¥à AxNÖ<[i Æ:z¹éï1ûÞµàjBz + Zdb²*Ì9ªJÉ+ÏàxcS1Ý;¡@ª"b¬NNKC17)£fJGÏx<Î UY´â@Ú{'¦sRiOQg-*gn¶WbbjQÇ©9S ª0N©Èªª Õ'¬Þkè9G£ÌHÂ'YÕE î¡(ª8ëpÔ´oNLy¿dG+3~¨Nd áÞÁR'),5p5ÌÛós@ðV§ð*3 + 8e0ýÊòîuÀ |EÞÕ#KZ{{¶nÔ»Ö§ËT¬$ß_d¼3Cbívl@¡pÈ,à2.öV8Ù fìì42å¯ê¯J+¥Zq7ERº¸Ì)Ñ)%ô½]ÃAìÕÙ]v=2Ã(.Lùtw2¹\êRáÝ],R°¶5K.ÊL ¡¼2TU+XÚÂ8a<+æìø@ +ú¢^Gi©]ì Ùä¶5pºÃxl(ìd.C`lÃØYëbã+14ÚÖcw*ßóÚGz§IqÄz¯ ò+%Þk¯LªAàÚàãÛ(nTÀã"Ã[²K5ÇgãöurYã1VÚ òfg}åºæº½£¦qÐìááLxÄ3٠ϧ»I±=-¡p#Ñ~fS1M\ÊEúg¡M#ì±ZÑÆ§Í · ¸Åk `w"µ¤ÛC5s#,>¥Ñe|àT°ht.¦$Æ®°ä)]f<ÂâõØqÃi¤7í¥¶Ç¶ÓTàmÍ·(@-ÆÕkn-ɹ)ÜL¥_cºðQiÇ-Z]³Ùõ»(Æ [ëp}ÃbÇ[ÜoÃóÁ¶Yq TÇ(ÁÌát°MHÕ4¡ûf¥EðÂW'¼èÙp@i¿)fTĶHA@p ¤17¬CsÆ|çYÀ^fȳ¹OåH²«±5ÿ¤º'eJϪih6lh"ç¼ÉÃ{*5j#¸ÉD.¼{bpsÖù=XAgÔX|»5±îQÆÜâÎê¡'¹Ö»=ÝPwĹ8³5²â Ý8í@ÿ´P¸W¡'ßNb|ômò©æß¼]dÖþó£f¨'8)¯r/p×P7Á÷Oih}¿¥ù¨Ð@*|Ö8IxÛ`Ú{|7R +endstream +endobj +40 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +42 0 obj +<< +/Length 2282 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fñ@Üs¡fØ$L¨ròQpÄa +*àѸ`0ðBØ Z ; +F#@Z). PH4a FCApÖqFFXYX0Ȧ39¬Þa;OF#q¦) +"¢.n!R8+ýæösÅAHÔPo9o´T-I«À«(Ôi ¨¤¨jåÆ2!hƪ4±fæa ¶u<ZóøKÅèh(ÄpÛüf(_©4°V«3]hôº}L×WF×g¶5ñ®ÛC³Ø¡½peÆ\xûû÷)ßùNg:)ÐÎM³ÚGLÔ*/³Z×»jÊÚ¡or¡òð7Êèß#Þ7>³¬çÛF?î«0ì@Ã:±;ð:ÎÜ-a¸@"Cîº1P¬/¹°Ûï»úÆÑ#Q@nÔLý;Ë#hñE¸q¬C �!QC\5³Qëù ò[;-°ERÍÉ¡È@¿0RÖ¯#DZ´ÂÊÇ3$ÞýÇíÒêHq7GÌá3AÂ&*ÃÃ"0@ÒäC(1 C(ÆÆLT+¯2ÒTCBÑTÙÒ1=(ÜP¡? µ>Ç1U~Tí �Xv+½U/µXÎÇÕxsXÑ\6Àµ´J¤Kzâ½.¶2óS¹KvZ±Õ®ý[/èsY[õ£7q44ªÚ"·UÐÅÚkÝÝeÇ¢Èz´Ipa5aJ®HÕ«õ85Ã>"Ó2ðê¡KÃjé-`÷eİ*dFF¼dÒÈQ×x¡=®2°Çáx½æ°b Êoh(EpÉ;ÀIèb<ÏBá¾%ßTP®cZ$Ï£:F-¥\>9§Åzp<õåÍ1Ã|öºc^ch<w}Þ]²Ûºö/¥íU¾§ 6x" ;åSÃlÅD¥Áͯã,°ñAÄ ¨LvCh9¬µ?Zb 9i×å©®é;üÍÌjß´ì=Ç\NÓÄ«=¨/Y@uØcò}®W:)pgÝmÓ¹-AÊ'¸¹pS-xÌ^xC}ÔÈ0^ãï|ÅWØZ¸õô@/bON2£ÆîèÉ¿zHà*£¸L &A@ħ¸oßuæý«F²^#08F0ø·wQq. ±.X +yK0H@Q©u%ÉNÁH94Cm¬§¢¥áÉÀjð/æ +Q!¼3eæÃx0 + Ô8ÅÕOÂøkVÙlhÀÒ@f¤I' ¢Ä"ãt1*ÄÆ³ + U ¡ÁF8 ãe ±ÀF¨ÙâleÑÉ«¢¤¥©Â%ÑqTÀW®ÓRtåµd§ÕÔ°ÕÉv!Ù7×8óÚ).:h .I=>[ÌQzKJus®Âã&;ß`BÉæÃÜ`zCʧ²ÕR¤°!ÚcÞ (A>#ó[ô (»W¤Zy¶d\·¬¨ÞË',Ë*qá ä¼Ýò1SÁ*Íwi6OÃFQrSM÷?*{Q{(¸* ZíÙ>M:Q&´¾r®ÝWå¹?&ó¼sí®Hx¾ä«Yò`2ɧí'd÷óÜQrg?hÔLð)ôîË"}Á6 + §Ìm濨Úã<áè«4¤Ø¥nöPï7[ôþ;Ð P½78HA,%ªÕËZ§ë «Í7fs%4Úw^Ub«há´m¤ö°¦ Ç2ëOËðJ_ÕGK¦ZUµrVQêøÔ0(lÈ¡C& ++;ôUÔÝ.(ÎÏN»B\,Sö^¥ ÏØ3j`Ñ/6'#bòüND¾VÕôú.jÖÄ:béUsò¡Ùïpí`3÷ &Ü¥yS½`¥Ô!,6rË#¬½.ªòî¼[¿soø¼g^.oYȽ±ºæ^`/(ef(!\¶èa¬S-dDÜÝ[Vä AU® ¦k- jÖµ[*ÛmL ÂÕ£ÚúÒ +-%³ª$C©d·-M\à×5îÉW{ Ä+5U,B3F ôáµ{±BÈ«ä¢FUÀ¶Ý%zjâ鸬»äóåÖR9%CÞ|OÉ©Sæ|¢]2mjù½*ç3Á0 §.Ãl¸µ'ðÌP®5q +X¬ÅrÍð÷¥£äÌLÒ YEËyî] qÊvnaúS2 +4ÕèÇd½ò¼½%Ç^0-~Àõ^9l¬¹¤Ð6F(IdðáÑdº#Ku2,Í[H¸åm«geÞ!YtgmÕ6GÉ;Ã#è ¸â¾=ÊaÖõ´¼#`ä=óáî~ÞL³z5|ëÂòëÊ Ç>iû7¶2á«Ð87íëÆ÷ IJÕ|ëEvr(au ùB0AÌô5Àüľ3»DÕmÔÕÎY+±ÁKmÈ +éï;:fb~«Ûãe2àAÒºeÎï¨ì.§²v%ÜýÛtÐé}zÛÐÇvòwKË-LN¡(ºõ~ãn{¦ðîûã¼ñ-Ý¿f_DÍDRÖKIJ7¯»¨(ð|;ÂïøQ|(^LÂ÷1àºïïQC}-Gðjiñȳd/jþgͧa{àþásû¢ãï=O¾ËÇÃÛ`VäQkG¢ +endstream +endobj +43 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +45 0 obj +<< +/Length 2348 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æbá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(ÂÄPi¢h¤ºT%A Ñé4- Ã1 æ7°²$¸`5Âæy¼æI=OÆC¸¦)¢ è) + +âmö7Q(ÆCyÜR2 +§Uû �|¾&(Æc²,¦A¢ +2ú*º.¢VK0Ôij +(£IPÕ5ÛîaÑài$²¶ÄQs]¯«æ[CÃirº~Dr3ås#,ßo=ÞÁx47Ê(óútä]Î 9-Ò(Þ:IÃ|ê¸Aã9{¦9ó ¡Ò'θb¯ £à+©ËLö<r +|BDl²ò9©Ïûm@IC£.+«À.\"çÀÆÂÀ`ßðd"q ±ìR¤J +#?¶±ì*:.µÇÔÜ@Nc À«<µ®K@!²£DÄÒ2#dÔ62tÂÊO´¨JÒĵ.RôUAÊ,³i �.Ê=>P!HjÒVkÛØÓ)Kýf*0øP7°bîÀlÐä2µÃ0íX5eWcÙ`+E`PUZ³VRÿKÆs 54ÀÔèáTeEqTL³ÂõL*·Ã2ZÓ>Dö¢H@Å^¾qc*2R¸Pý(ÌMÁ3FÔäO5[3NWu7:Îë2b Õ®º³=²òËF2# Ê"`Ò8Hǰ/LÂȳ.b>09ûdÙFUeÙJPbKäIJ## ~68Æ¿«¸i ÝÀ*Míã"Øåê,wÀQ,©Yã.2Å4<±ëî_´Ê6íû0ÍdvËìûK/¶Kè ÂVc~Ôps*7îÛÓ±*Àp¬½øe2 Ãz-iF;%¡âó=5û=ÚxS~à«ËÓ±1;2¥d½o?Z½u]c·×àQ>jö4#F¤_½'y¨J=ûËs (Û5k²#xê¤àIö|]d}/Ò FXeßÈ=>âX¤:UIÌ.çÌ ¡Åñ«àÂêÖÁÛ`¯ý+w¢üºè©ª6*¹Óke±#/D S*o?ÉQ°Ö0¹ ùÏíù½X8NUbõJ'b{!ò¾Fu]>Åû ¯Î)ðidNê¿Ô×P3!A@¿¥`[Ý}gèð¾ád.ML<¬ÅÐx¹0@ã+ª01|ÊǺÛÌ;pñ.®XÙà£úT²³ÃhbÉiXgpöDWÓd´G|LF¬nN0ÒFXmMü5¥(1QJSJZ¡kÊå¶ +·îª%IéK[¢GÒ-rHÓ«K||Ñ[68úµ}rÞ\Yv·ß¯Ñ6)ùC"aÄ7²ë2aø('²gÂ7×4Ó믡AÉ/¦ÜÀÓ vÁ·9 us6WOi¢ å´òSÖ^Mðêès(ÊI·X§föÄáäÕ(Á +Ot¤5SàÞ~G K#¬¥yí°¼^r 4Ry?JÍ-¢Íj*ѰuÁ¡lMÜðÊHB + ðÀÕcºµ9¥ý/j4¿²Fúõ*j«£U@ SVmMÃ(HoÌ1ÓâX%=¤ÈÖ£ÍÓ!R§p~¥É Wg»^ËÔpÓMõË#Ù`5µTà±'NEî ÞåU}m¡d¾@XÈ©¯BÖÓõ*ö³kXds[e£Tó¨ú:úáCltîÁ>cók!ÊÎä¼vëñø=þ¨W'kLùaéRÄ1j/\ZíO+%ÎÄÆ`nI}§FV²|Q®}»L÷^K0ï5L±uAаj¨Ùh«À÷ÖO|Í=õ¬ô:ðÛÕ=¯,þÀIâ¨PQÈ)½±_u~%¯ +½ßªPYân¿óö)Ü7ë#ëY;!2tËu3B DÃàÅYÚüx¯±óäÈ¢+0 zÅÅÖ¹|gK¯>7©Î|®xO¡§=ëDÓ¯¥CyCÌGw2lÍkóFjE÷6«ö ͶÀ [±{0¤Äº"Fô^TËI$9ðjDÛñp +Î2gfÌÊýÏVOIü§Fqåõ`i|§gfè3vE`0ui9¤)2°æm{B ¤45bÎõÉZõñ³7ï°M ¨¶rþj«'®:w°à +{ 0&hÀ ,§n4M¾Í|2%Ȳ¦åØÌÔ£g£d`9J :÷x}ºäQ2Dê"'µv²Æá+½GP"mT`R³ >Añ¢t``]ݺÂ3?`g7ö ¢ÚHXW.o÷älí>×í}²cöß+¨BûÇÈ}n¸EjRÆ`o áË_tè¢n5©ön¢|r2ÏÂN²!~¸0Z^^A²`ÁA/Û^]ÖáF/ýtÂve?d°vó_Þ§ÎnVסëèçµj)µ¡ +[ÄU _Pö$ðßÁxG×á³ê¨¢Üº£ +åx3¥zS³cRµZéo>!-×úÕ ¦kÇ+? àAG¶ ÀÌÀ-æxc8 0*ëL²³ðþÆyðl^TGFOL¹Ziâì¶«>õü4=ÜïßÐÖ¼`4Æ(ÄÇ ØÜ{à|¤ ¯_ÇUÓ/}{9î;¦¾ø°Ôc×êý§Áu´Q~G` ` +endstream +endobj +46 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +48 0 obj +<< +/Length 2229 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" FáÀÐ@7ÃÆc(Y¶ *¤â<\0Â9pÀa*à ±@´R-±¤Ò J¨$I2 £(ØÄr3¤ Åà ÖDk8 ´a/I'3±@Èm$#N° ) + $#MÐQsºÅ#@°@SÅQHÎÿ~»ÞowÛ® �b3J«.p]P5ãKUg mZK5¢e:O-ÕE×2ÇnØÛÕðSʹò°X¢¤ücÈ7ÏùC)ØSA_yF<ff ®ØE4;yx×GÓ :eKѤv{[.à`±¸l1"æÅKkÀP4;îÛæ¯¬TË /36ο CløO£[6/ÓÜþ8+hl¯ +.!;A@Ù®pÓîÐ +ú¸ÄO´Hü¿o[p±!mãüµ@1Rç2«ô`±Ñº KÃÆôËA¬t !D(¯ÑªóÇðóE"¾ÜzÆòO!=Ûúß!rJÜ¢8®HP9:Ì\þ1Ëê ºï xÈ2°ÔAP3ý PÐïÑTeGÌ4©!ÀbÅ+¬33B T¶-ÁÄû9RzòñTtÂ8àÛ+1Ô¸ÝPCUxìªaEðJ³ o?×O'?ÔE`ÂvebÊÖuéÚÎUäYê¨Cô·¦/] VU lË5Ãj'õݯGWÖ b1w ÓdÜ´cÚ*-}Âvyl`6ão\EÇÙx]uÝ·}àøÕ{5z½ÊÇ#-Eh¢b¾º ö|ÂË +AHrŰL Þ:»óäòdÓC_ÎËÞÒ«+Wéq,¬9^^ g¹ûÇ[ËÍ0»Ó +ÇfìVÇqlÙæ}³Ã¢lÔ" ¤FÓN÷Mi©>³~ÙNzÆRÝoêlßåé ÁÐt(ËBc.nºç6Dÿ{ MÌ<ÿË/ÜËÁ?4.2F5ç@Ås358Í\>øó|ãÂ6Þ´©HóÎ^¬¹ÐQºL;Q´áTçËh,-Âxº/ëy^f×ç¯Þ ¹Cßï:«ÕÃH}º¸Ôêq÷ÍÞEdÒ%Ðnz¹þÛÎ@æYùs/!0¿ÓÂHefü½wøô Áj|dü`pc5 %X«7ïÜQixH¤r¼ógé}0¹±NhhaV~f@ĺ(d +"<?0âH|õP+ÈåBF½!2CNÏ<¸X ÈD09N]H°tþ]Ìs9PÙòjú[馧Íö¸'ÞëèNôátù@K990uxÁÃ:ÈÔ0ºã0¬£{}QÍÝ88ðüOk}?Î2/«düÚ"ÂSªPÈe]È& äCvmê=4èãQuwr]½Å¸S'#êøôÂÈèׯBaêB9å´¸C²iQºIKsu%c»W6ÉMEÔô~f89 qùÉ9§A~Å:NÙß<d E]ÅLBäÃ.!#(Hp¡àÅãªÁkæ<º¨ó¯ç0ryJgéÙ¦|ѼöÉ4y.¤´Ú,2úMºI r!Ý+C¬rºîtðHËVøYb¥øKØø[`ù¦ìäS©øåBnrU#)ι©Ê'ÆéSÎQ«]p ÄC%c«UXUÓWÌzP7&9/5aBkó%t:¤è`^jÂÅ]Ð.µ9`àXö¼¥R lÖ°M¾lE¶.ÄÁÔ_KͲ³ÑYk5h°5®ÆYefPu²i0(äÉb´¾ÒW*yeå¯âó"Yý±Ì9Ê©+oí Â;÷Z Ýrýj¸ìåLàÞ¨xr´¦¥ÞºÁ ïBwÆKI·If³¹¥eÂßósè|WúúÕ´ÿ3LÏ9ÉØ¹PåUocS Jå/} +8ÁÈO,mÃ9T¾ ¨ 4ÆQÈP³^dÕ.©zÞÝòÐ)<²Bÿ&º*ø¨·ÄÒÚøÄÂÁw« ³æQã¤4÷SóIct©ÃàÚg 20YL¡<²Û +(Np#æ¬ØstYÊòêø&D¤sW#ÂÃwòUá6Ð¥ uÍ epÆGLÅJp)a®/°wñ/¦8ò8ùb¦~À«û¦²ëêÓ¹%«jËo$,#@T, xyj¦ÖóRîKpmIôþ9v2ÝJJóÕlÁ"A»´5ÎÎñ9m6³QÈÉÛI2"Ú>èv]ÛÜ:îLµ7@9OQè5ôÎÌÞy~"*ìx3$ZØ'ª©cAl¥c]¤÷àÈÜïmXkÑ·ÚùJÊzpwýÖÕ¨-_å¼í¶uÞ}Ü#_P¾ +«ä"f"Ã-Ë®FZ>Æaº �]ð(=½ ¸M¬ÃfM é +@ 8ûôb¾ªAhÏí÷ξÑ÷sB~nËL$ò-®dwOà;Ë©5ÓÕy¬{¨ÿ¬õò ¢Zkk>p §ß9 òçhóNÛͼ I0tbÃk[ࣤô¾3Ùûé¦òhô"0@@ +endstream +endobj +49 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +52 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +53 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +55 0 obj +<< +/Length 1459 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4b2"0Ôf.Bã¤,ÛR@.Æð³a) à ±ALR-¦3¡¦n5æã1Aºo9¢98&ÁIt¨JF"áÌ ¨D Ã1²f(ÍC!ÀØPcÚÇ#J Äd9 +klê«WA¢¨ds\DâXqÎ$p7GFÃq ¸m*GÁRnnc C&D3¡Üd0!Ìi7t§CA@WÜ ç})àp6Lfé¼Ü (æz´@I7§#1Ǻ þèÐéu&ÓnàÎ &kçS Ê. X=' +!ìR("ÈÂˬAº Ì¥Ár³I d®AP! 0³3&áÂêÛAC\ï¯ê +#0hZ1J$űȰdÈ@0` @`Â3²`¥b¢e 4®@Ê6©Íkç¨Al<9C¡@@0¸îK+ $ÊçèØ667ÄQ;|;-ãÉ3mk^ضcHÍ/Ío#|6µÍÄ9! �EÊËJ7ÏíãI«*Øb07!H$ÐO4,ù/Ña¨:?Õ2áÂʯ AHÁ½g%¦pA¥HÊÃK_¡ðü·.Ù,Àä9NeçØ5«jY#bªvjß7Î#s¾Nµ,Òµ3e2Ïã +n·ê1c(èRã=6\ÓqJí-.«EH´StíE% ë>¹ópÜ5¸§rN£EðÞ;xÃ^Ḣ9Õ¯ÜV0|Àp*3@¡ÌÍHÁ*3© g +.ë ¥ +'Pâµ;jtºïtÄW¿ñ§FáÂ:gQH«lÂW@)áxÓ â ¥_aªrÈaÀd!Èr ½6(ÀÍ8P#´1pÞ6:tHZ¨C¦ê½£sÞ6>O£ì9 )õçX.íg5õþªQ©"u¤#HðP93̦üäÁhf±VHV¡tõlÔ,õFuô è;¶-ópí;óÀ¥ôsjä·-.ö9É7Ã÷d¥j Á,¥+ugO3¯Yëºø_ «r»¹naº ¡¨p ÉÑqgƸ÷"}^yæ?æTDbeÄ plñ.-hÏÈ(¤ºPR[@7 Õi´` qF¬±¨P Ûå+ÌÑ\÷úÔ9 ~'Ç*Ç{Mg÷Cm +Ó"Ï9&éÆPq[vÆ&¦aÁ©m«A?Õ2 Å)´ ¸9kÁ\ÕÄÓdÒ¡)F5§£VäùHìò>×jù<Zkt9vd_1@&£¤Þ1¿8,r¤Ë¥ÆEWvÎéß°6A Dàeè9ÓF8ÜĬð¼PÒ"C%wØSË¡B/+çréK(Â8j Qrý×$£ÆõÔ$Ï óP7Wpeb ÜÒsSWPdO ùjÁÛR}d¹!ºà¸¿UÓjZ¸7-ÝS¿ ¬àÐE �ù,/º´uW±Ûʤ9Ö¥ ÀÄ KPdLldw´à¬Z;F~ZËm}F¼JBiÚ,t8µº|ë)£%} êO"!àP®`6%4«HÍõ%¤é 2b Ïý/H<¾ÅoE bpa¤´ÆTFN4Ì"0@@ +endstream +endobj +56 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +/F9 22 0 R +/F11 23 0 R +>> +>> +endobj +58 0 obj +<< +/Length 2574 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- +F d8H@3¤q<eM*ISxìg5²,ÓÀTø¦e¡ +w ¤j(4ÍÑ-ÚW4ó¹Ì@S:gÖïp¡hô! +CÆð¸Ìn.É£o9`aTK#SfU +µR$¬VaÌoC%Âhʾ8Å#AAØlÀ`°J@S¤®&ñHÊå¥Tk1اcãÆÂáÄxl7öki¥³ÛxRþ Èb.âò7 ãæ4¸¸æð6 #f"Ê3XjÁ°f=NÆ&I¢Æ @)¢ª& + �¤'a »%¢H¢hæ3 H¨5 Øhã(ªËàüD@ ÄQÐ B! +ä0²X7Î3Ù:Îãh¸rôÀ¶*r<èâ<ÛQ¯#Ôö=ÁÖ#Ë +\Ó1|õOëþæ(æ1CHà:/#tDAÊ| ¶Ð¢?Cj¿-!¬Ø Ð23`óÑM¢!]¥HMoË:1kÇ4XY(#>-O(©g&és8! �X½Â9u0@6ÔÃÂ3ØÌ7ChÃw¯k¨Z»»::Xa £Ò3 #(É!FL%ªADâëRcxí4°Î&;uݸ&JïexZ.8 hór½Ðý·®/XäÂáÌHÆ6^p8Ü3ä +ã¦Z~¢e ».&Ñ£¦Ì3iQ1£bô3°#8A(xJ½á¹S½}_xQ±é|6µzKªCÂ*5±~*ÉÛ;}ëb»Åé}Þθfæµ<çFÀ,2Õx¶¼Á^1°Ç|õÃó×øgU¸ãXÿf2dV%^Ü¿èUMÄD´Üü°G8cx HçA¦bnÍã¨õã¹/¦¾&s2çÒWèaGuÞl½öCÒûXæ[hnÈZÎX,5y(Úê2vX2±@Üëê ç<Â0t¶È2ÈAåD÷þCÈ,ɵ!DÍHvX¨°gÎ2çxîI6²s SÄi,=±6*axaëgêà"EI%墿¦ïÞü|" +%Ëèà³.E¢R p´¨Ee ¹V1EìûÜB3pá±ð@j]iË÷¹åô¿"$* ØÍ¢ähCìö¬²ãÝ åj,Ã2Q CC]â80æ Ä£´@a²ÐH#"´Å¸»ûÏFÙ<I7#äô¹r^JGw%D?kÑ4°C½×Ë °1 Ëàni Jè©,!t²2B[É6|SüÅÑZ`I)?%7°êSCÙS2Ã$ÍU³>V/ɦë&¼smËùMÅ[7dR*<ó®zÏh ØÅµx£QÁ=`ÍQ È-Ç Ù4ªVæ@j¹O£ëÔJD±Î«dCèîÃ^°u º#ÈY¢¿"zù{Á ØMJ,«¨ôòkJ¢`Ý<¥V):"}ÊÈ1'GÕG)Ú4¥99#`åI¢Üt¡ Ò£7K(1#e²F©ÐeªæÊ+U¥!Whé"*RÕ|~Tù £®å3´C`´)áf3*tnªk»:àxd]'¥T¤×t.UÙÍh¯É`ðèµL Lnëd» ©æ7dÜE»¦¤4gèÒ¾Ú )tì=³¾]Ã@M/ÅÁHráI@Q dùÔgÁM4lØÓÇóTa®2ô&¬Ð루}dü\íFnaü8§øä $C +´ô¹ÚºëkUÁW¬@¸[8h°`O ÁFP¼ c»5M2ôcA +xpÀà:P±NúX[íCoÅ^#ÆdÏ; +6T8¶J©ÕJ«Uª¼FEfvÂ%|!ÊÆò,}3X¸Ð#EX]KU\vÑçáë©q_òuÂì{^Då¡åÔ»rç3â%ìfj½¯2PbáÛ#$eZa<+Áj`ÙþÂk8Ë ¥±m*V¡,Ç9®Y7?Í çgiG=ouBTÌSÙû" �¦³w$á1%XòØOhr«¹à¹Ã¼ýÛq×;Ø:*$ý°D.x°àé°¶#¥ ·lÀé³Ý9 Ë@ÝêqN3$ /ÙÀèü»8 +%æóJÎi*óôÂ[Ër*I¬« ö¾- +Âh_ +$&P¥¹]¯bï¿»ºÃxÇã{TºpNEa1%¾øW·^î +'JÓI Ê9Ý®ÉÎ¥«ÀS×ZÛ®GÛÂc¦¬Ýç×0cF»gºÛúÜyw®ÉùØ+}B±½\Ç6$þð>3ôs"AM#É÷«L kÁþßù_¼ý{¼áÝÖdÓúh©ªDÝF©ÔéRêm �È=ê´\ì ++enÁuÊ+WL£+ÆE>9Æë¥¥` ©¾¾¯zÛ^}¿Ê;,> }±C²¦ÌY«9gM ´@¢Ò.ÕMàùÆO«`[Zârw¿Ó#¶Ð)Ia@2PÖþí·ös@è àÅïðPp1° �Ë~6*«7CÎ+/¤¯ f,çÎ#¼ë<*_ö&Ðÿ Ö:Që¾®+Ä34ýëÈÇËÖ4Ì(½ÃVr#^Q2Qâ!+±r(ö*0"|> böÌ +@d +@ävÉ«TðÏ~ñ^$8¦-@×gÚ@ àëÏðOlTÃòKIÄ J@ÈJ¬K`ÀÒ¨gT £K¨¦LDÈèByäªJà@àÏQ@ ðÆE·b +endstream +endobj +59 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +61 0 obj +<< +/Length 2919 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(b° @-J¨$=2 £°ÈqGFXY]9MRè(PB'ÉÊk&Ng3 Ê\ +Ò@l8Nfq`W'¹¸É *IÅA×g#MC)Èi7%CTf.£Õ8ààg]ÌàO+Ìæó¤Ó ã!Ê¥#)´Þv»Gz=,W¨A#ÀÒ)×éõDXxÖ<6õi-DZOÇá¤[ªÅKäi8 &óu&¦Êz¨¢È¯ ØëÁ¸l*ï*Æ +ãd³ +@Ê9¦Àn\ªâP¯*IºÀô6b8Ê:.+ê» àS¹Ð¡pl#Ñ;Ì¡k*!C7oÓøQ{î2¹@0½Ê(@6®K¢ìÃÞ6¤5+Ø4c7ò´¹Kãê2Îò»MCƹL³<ç/Cmôÿ)s¡ªHÚ¶«µ£^*ERu,Ëà)ÑvO`q"HK0Tºx(Ãè9²hë( Á �Ãì0³CÄ6¬-!NÁá/R¦Ð¢ÃÅñ¼FÔäO*1ì ¶4/T>2-Y$ÈÒ2$¬1¿xÞ6LµØß33³DÕ6MÏØÝ+£sõ|Khj£Pq©A \4¨ +u,ÃËzNr½bØã(]oCör&ÖíuÊ-«}µÛ»I ÁL1ÃC×+!d_ô×6Íóy:Cs´ñ Ãxå+Ë8e{/3Üû?ÊÚ/¯Mq²1µ~7P#.ça,4+kS@æ8cûuÞ2C½p `Ô´²v±Õ½ +R\¶¬Ws½e¢uaYV �áè6SF!÷¯J[Ç[¼U;g\RosÞAÂÝ$&àL/`¥Q=FAám\©G)®ÞkËñVóó¹ýOèw_7 ß@WC @;Ø»¯Ëj´è¬¤XËÙ|êIÖëÕÛO±?W¡ZO,yû¡´¢n4Zäû ¼;¥C:aWrðqÑ&%ðÒükáÐ06ÃYͺ£¨ +ù1Tð½ ðÂÈI¡0ÅhÕúV~.£fNâYÔeøØ¹D2ÃaA .Àä°Rí¡Ð@ä®èl 9¦PôÔú¡A¥q,ßÉÉ$r ¾V@5|á ¹ø¼|Q¯ÐàÍ ¡G&lÜ´s +Q9Éö¥UêÆFÌ¢ùJ|2\QS4ñl£±x#+@ûÖÖ0o¯É¨Át¦rDç5é>¦Ä|Å5±rFÄ$. +aÊ2DN|à':11ÆUúC e`Î@5îhpw~p9¡¸ @ SYwÍqI|ÇE �¯ òD'P&ÚÌÓ¶EN)+çEÎé¬8¸·ÞìB¯¯Ì¦½ß 7 Ö TïÆÎy%ié%#4»Uô5@PtÁE[ó @Ë=Ãpgs aM-Ng·IàÛu ¶9RìÔüß-îÈ Ìå±71ÏÙU('-ªVªI +Hd«_pn6OÔÏ&C)vkë6'ßG<sª¹«¨@AiÌ0¡ó·½blèZR«"Ñz2 u~«:ÁNXˤ`(±&`ÍXÃ{SJ,oóO-$§t®1ÏÆÓgØ5¡_¶Á Úzõ$:µ×K- ·Á¶\ ` +Å¥·r)e&åÄ8Ç"èb ¥%¶' Þ¤ÊqܧíÔ¦f]ýYÏ ¤sø7àТÕ[±Ví»¶u+B:W£ 2,6 iÙ«)´þ¿ 0ãõ´¢DÖê¹HkÚcFºÌÔcª¯7:£§© +À øÂE ¡<+SÜ´p(ÅÕ^>×ßÜ»Án½A;´À$Néä0hÌÃÚr>Ì9*ùà@s¯!<ÓjUNA¸7ª,½îa÷xÍ©¼«ÄWãÞÄ©¯Ìr33Ø"TLK,Dç+¯.ÖÌƬÒL°Ô5çôÆbïqú)éÄBã^mFÑ/_1LmÙWÚ{Sm=ªî¥·Z´/æ×RÉ[I9ÎÌU£õíWÉcè&¶ô4Ò wIcãÅÑÌVß9`Y´ëÞFº>GSV¸]Fu¤¦FMw:{êÂðW%0¨ófijÿÀQ~ä,nsð±Çxn#%íë ñ¢ÍÎyÝç»LR{4Î|»}\ ÀÞEÚ8h +õ1Ïa+nõÝ Ñú8 egÚøÑá¿HÜMpݧÃs%ÀÓ>9Âðh +äÕ +H)c;? �Ñ*Ô×¼®³såCPõVÖè|ÊcçÙJnÓý3W©þc«$øGêθ)^¸¤yT À÷J¦Y§Hdî* þaMIé¢çÓ[Y^àk �nÎ8z¥dí7ÀIêÕ×Í@IaäN`_ §vÖO»swÖóy/8æ2ä:É/ÞkÙ d¾_?ÔIï¦Yäün K±cv4âgnV/Ê(Ìxõ,5B8hOâ°Ð77czï-DÃ#RïÉÎ×Ìh:W GFõ\²Í �ÏÃt3ËFt°V<(Jä¢ËǬ#>¾Pp ÄÛ @C: ã +WD þ¹êòc:«[ÅSã²""pÊ:øÃ"<IÚ<LªSÔbcÜ> hBNlEP(UmÆÖÄ6i¦è2Câ¼,iëÍF Lñ8íÎnOÎIé" +¤ + £¤®ékÊJÊnà¢2#(*¿jê´&èº6"Ê0 +qRmÑW1f #(½l·Qp¾(´¹ +'Q(Fé¯Ïüå �ÀæFxúïn°JÑMTÊ X&FJV Iþ £ +ø±wD±«ýk¢:Ì:ðÑ!PÔ;¢ZD|!pâECÎÌ P©ðï Ãä äLHÏÇÃdÀbd{Ñè?MIA!Ò!2i nú:gªB2*:¤,=22Ã26Z )`Ì=ÒR:FÐßïÿ$"òN:Â`&àr$*p/´û4ûÎ0 å\$Òíäl0 ¦['v +-Óã + +çë.QТB +endstream +endobj +62 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +64 0 obj +<< +/Length 2822 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- #a@Z). PH0â2HN¦ EÒA¸Æ2§$À©¸Àf9 ÍSáȤZ2F"¹Òt&Ng3 ËH¥A°0UÄ\7 ÆcqpÖH5èÓxAÈË3 + *a2¨kQئEÆÂáÄxn0iÏEñºà1 + +gq¼às4Û¢#I4èKKÄêÆ°°ãW±KL®wæ ëw¼Þï¦Rç§Öd. +Gb¡«:Ϫ#NÒ*¨KFÔµmh@;©ztÚµórµ·jÛ|!¸P"/Cä4 Ò7Îs:Ñ)èc¨À®Â>í;sX¦«+É ®²ð½/óêü¿ó é@ SV³: ñ1hZy +ê9(Ü2a /Já òÜ¢pÊ;r¦ ±ãç< ³ØÓ,ÄÌ(f1Í,ñFëSlÉÏ@Â2+Ú: òÔ¹/LÉ3 ÂâàK#ê2Ôáp@$ÔÐÊËH)« +u &ÉÂeG#kHÂó=3Ïsëä¿XáP4ÖQ-˵5Q.Ës(@42Ë:,;DrØ<Ë+(ð0¶¥-vÝH[:LdãLO*KE¦áÍWiBÔ +xÖøÇ¯ Q ?¬ìHÉx`§a@YXº,ØLC^FÕûİXóÝb~Ш66¨µjÎT ×y,:£ÜæàI«nÈÊ8ÓÍ'Úclú2 3(ËuÕB}°9ôʸ@<:ܰq è9 ÷ý27ëòÕÂ5avH¦Å-ÒªÛûTÖ#Á²`$q¢ÈÔ7RÙÄBî �È««±¨@jûÃżyp Ñ Ë½c.@hôÚ«J<±Sm qЪ·ÃÐ9n1º<ØE¼ûÐÛ) BKËÕõ³·a!o7qÛð]ת+Nï|ÔXpò* ¡ Rzö_¢þþ2z`¡W¥`Æ^ÈFdÌqèw¤¨2g¤Ó°ãÐÜ«5GÌ\¶F"X~laðçUݹ$+%l ú ©,ïm³PLÑ.a¡¢ÿ �ÞcdøÄ4B i «1iö0ÎôÈ rcÌiË4ã²íýòrá +ÓV¯¬¼táÍêÆ(áCr[yÐ5Ïw¦vÊ1°Qì¨Ö¦z W áH"1X¨PGÔõÃò~ÝVàÜöÁ@L á8#Éh3¢RbÒtü¦÷ l4Ï8@déM¡âÙ +8pd£ÜCÍ"AYÛp qÐ>ÖÜ·fÖGµ)ÑÄòh9³yo4@Qßcóñ¤ÌH975@µEhëY}µ¬ gZÁØ0ÅO@*æ/IYêAJ(ch¡Ì7%Êþº# Íj%<»Ö«m£`75 æÙº\Z«aBÐpDê·j-«èhG# çB±p®EÅc#Cá;/pÄ»ÒÒ[̰B.g*e`¢uK ÜìYÓÎ#`ØØOBÉOÍå~éýH å*©ÀCÀ-¥AÊ5¦Êi-S¡ÜÒµ^©]qUµN´jjM§Jæ:o¥¡ÍW6zôéZÔ¯ËÀ©°ÐC8h°µòÃzW]Ú_L)2×ȵRÜ5UtHÖ¶²ªõí#BXE +<$à©Wá,ð5pIa²¸,êUBê¶ÖôÎÀxb Ùj¬®øR(-tܰu¬¬5G.æ Dóo'ÅRáß%±co³ù¢¥ÐÌÜm±«VÍ*Åoåê6EÁ§yK|eE]QE>³{ït^u7 Ø´2»#YYF륧QÓú"O 3QÛ;QF%·¶{C) <ä"Tîê ¶rYWôåyíëΦÈ:÷5(¢ë<ér±D1°Óptº ]0oV¯í>Bd¡ªVö/ éõ7ÙÜ`´ZYL!ÛKí´ëk[Çfߣtm4 27"!q±Ü9 òrÍhH7>ôd4+,¢nMãÑ]ðú'ÂEúÍuêä¯S³1¹¦ <ñ#fµ§¹?güT~®V(D÷TöyM·""~³l´òÑBõb¬ít£x8R ÿhõ¨ ;ÙÀÓbÒå5ʪá©:ìz2MpXÉJ¹£Éøë_l!Ïs.LZÒ¯ ù/T²]WH¬ÚÆL<8Å¡&dH¦2²_̱à¢À'&ã^ïÏ¿ñ~;OEÏ%ÞG>ñ·'¦\·ðmìíÄî«6q¢$Ý`o$³½ 9{Þûå.6ÅI7öÄrü=óÿôL»Ú0A#eã¤Û}Ðܼ<G;É:Ù"ÈI©Þ¢Â6&ªn:§Xëºtj«©h·Ìúë38wá£àCníÊ@à-nBqÍ-@v{IÀÐWë&*ÍâStnëH8Ù.=ɾ;ÌJàé2ö`MúÖô;KøU¡QZ:@à½öûìyC ÕüÜÒ°díÊ&óÔ,Y0¤=Þ"ÌÓÜaW¦TË£2fÌ'ÑÑÀõ7Íéº]òµ / �8êN°nÍ5`1ª_»éPxO ¯ßüîæHB´L§«aéh]oþ ¤ ¦ + ¾ÀØr¤ ÄÍê¸@ϼD;Iüopü¤,ð C¤>D*Dý®ÊÓèÔ'¨& üGP©PÕãX+-^'2=|ø¯î"ì85b"¸N.¿ÃĨ.:ç¤ÎR¬EêNIJ¦'*è²h£,ΦÂJàÞOÌ®E,À¬î9 +,NEö(ÊPößêª)öÁ +j¦â@XnbÃÖÀ eðKÆØ¡¦ä³°z«S0=øJ¼ÞyÃV Ò<puli +Üî%12IFÂì°FÍLupx·0¨dI)Ðaðøñ/ *ÂÌ£di +ÊÍb¶+Èm*Üå·%.YH*øÄµ 4ÜwÅÈKfà«SÏàã +t° LP8Oý&p¿4%î,WlNÒg.87Q»Åª-Éôl$¶Ì +ÖÁe¨¡FÚMæáª¦¶E<¶«¾\Éì Ñ[¥È@P_ ØP¾yË+¬ÍF°,A9 òP%Ã"}{!j*Tì\9Gó'HÈMļìo +endstream +endobj +65 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +67 0 obj +<< +/Length 2747 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(¢° @-J¨$=2 £°ÈqGFXYW3CH\ô(: çS9 Ai2ÛÌ'3]¼Ða:FSÒv2.×iæs0î7sèÊt:ØÞn:æÁt,Ñq:\î¶ÆTÂl6cE%CU41 T 1¼q +W¬å#)ÀØy&á±¢à ¸)Õë`¤j|.¢6 *íc§â 9ÌßË &ã®Þo¤Òæ£8xØd7£vÓ-Ô£²(9MÙÞN»`¹È#ämêݷûñ#+ã¿®[ ¤ê +Òl,NÂÂ,©ò!PÆ$L7;ñPP2Ã2ø¼ÅÃHÍÄ«C>0°cëA/#ÊÌ.ÌÒØ·.J¦9oûdOm7.²dûr8ɸpsä5t&ç¥èô²©&éÈgShb¬ÎØÌýo.= +`ü3ò0qã ½2Zº <©¾p<ä®'ÆÈÒ@Ä<дbCªuBº?|ª¹5Í¡ (ûÜ"JP}aKh P67ê6F,% �ÂÂ(å>Fòmn×¶5Ó *õà7óC¸Ç3®§hÃ)c`Î6):¨Ó¸Ý<3Øæ8/°ÒóI«Ýd\,{0Ñ)ª2% ¶ôà,Á@àÍ/¬;Æ3»s4±£ ¡hÈÞËÒ:ò;4ï(]qªò`,' j¨ðl¶¡ÊH_º-ªì§ùøgOia¥ØÇ²#pçÙr,ê"¨ Ë@¡À\§z cYØUªãq×6käÎwÃë$¸7K¹TÁÁó#§YB# ãËú*ö³¶!FOkÛ Ée¨X¤*¡p6<¡ qUUÝOï×Õ¥ás»A@îñxîdczú22+YàdNîP*._0Êò:P!¨Q>úÝW©Ö «\iÏ#|Î=Ç4Í ¹HÞ¸[õ:ëMÓ¶UqrïZ¤ßG/Þ üc^®Á5¡·ðºÁOGì÷ØîÒ0,{F9ϵà@L +a¬¢¦tèû«%ÖÝL �§éæHQ®ÇLÎC,ìõ]4G ÐÏE(M!¥0BÛ@,Iª hÖ`(¡ÈÍ&¾ë\cblËE²vÐÚ84#=-.°eâK<Jî(Äòbo#ÀÔR8ÜK ÒNu·ÆLÌѦð3)æ´·;%lÎ=¶8Ø$ôohÀØÅ¸³áûùÅèÞRÑv �{ä<X,'±ÚJ �("Dþfs8 W¦)0zêyPI&Ç((PÓ5ë`¤4ìP¸5D¥öA0* +WG¸'ç»GE ++rK"bÛT +|ÈçôQ`pl±°Içí(H{jæCG+)ÁS+ì:ÌѼÊ?)ä¹pÂ8 hDÚ@d£Ï7çÒ:¹ dD æ \'@@»*hD*O$ØàµiÁkªBpTyè6¡¬ªu¨Ò»:$óp BA © ÈBe_¬56VU´kAK=¶¾` ê RÒ¼*[Kß2¦®ÑµA'ö4«¢';>á'ð6|Ê9þPS tü*(%Sê ¡49x%W«b¬6ÊXtlD"xc\mÍt®ËlãØUp)¸mþTY»;g ¡ÂÓSÊ}PU¯°6ÊÚ[`An+»®öùeX{£Öª_k®ä^ëo.j¹ôº÷Ý2¾}ðo & +ìÍɽvÓ Å<eä7Pñ7Âofwæ øY ´ù`Swa?Ú*0cA¦Á°PÝ&ạËF6ȱÐò"µ·BÏ +Ãô }tÂWóf\Ín%yDz6ÜÅòvnI6´ÇpåÜÌ +ÅÈáPàÂÉrà(/5©ðPÄÐna<y &æ~O+© ë rþ˨IÇ©(ä" .qðW÷UadGÓ)ëзÁ,n"±±¥¸bø<t3>LrÅÜUøÈk¦5ÝÖ^Rßya7¾Ôvû;ÈxG ?Ó:ÌønP¡ÂíLÜñkÅaÀ'à¸&346Æ^1u¾u¶_MâìËXOÃgcÜrPß8bÌ~É=ÈiI¤.¤&)ñoî| çÛBPÊ÷Tl+ÚäWɹ¼\XV{w¾ÐåYDáÝdÔ§MÏg>° ÂÐÄ· kHÊG¨ÔbÞGÞÉhÙÅÛ}.â³Ò ê^+ªS?X¥¼âQë@ÁØýÑÚØ®æ=oÜç˳îNæ;ÃBÝitOWZ:.¨b¶K <fQ!jÃPï:ÞÊéRàl ÂÚõ¯mpÑkK§ZoQÈñ«þÝCCÇéKo¦-öÂC31©7XC¾ücIï_ó§¯C'Aê)L©÷ÊûÜ¡/uÎÚ÷¨Yç»ô0VÆø5¹È<8caL3Ê?ÐAÇÞ^¼FÍIÏ8V¦=Xú ïrÃo¦@^£}ÂXð-ç z,#ÙxÌC dÕF\ÓÕ3Ì£*fΨ7jÀäv÷«=ùßUý©Æû×®þg^õ~èßúfe¯²û`Üû~üüD<oÌýóB¦+#hèÎænonèTÏÊ´qï,à/îÀrr "þc²&àb³',Dl²Ì¶Dº ¾úåâò¬ÖÌ`[Äw|ûÂâÎ �Ïî°ÝnY°E¤Û'ho°V0mtÔGAL§¶Ï #pF|M8@í<cçÌÕ#Ä ÆPüÅ +wfUïÖFJñojf: \ð®FîÖY¬pe|³NªP@ +h^(ÎÀ`ìcì£6 ÐíP2ý¦.)lþ-â+Àîøú ðÒ%jÿÿϦñ0|wðêò òcöÇ®>B-¨|n6/t[¯2 ÎTðXxäzc¾§jzà +@ kR +&(ªÊãîwcPöâã#)£N Î ±ÑGzàæýhV&±HøK¥°LXOHñFÿ1éõïÿÏiæaOró4b +endstream +endobj +68 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +71 0 obj +<< +/Length 2763 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- #a@Z). PH0Æ2 £¸¸d5Ѫ£ ÖDIPw(NFh¤¨j¦¤%p]]E+ò»(*Q< + +IÌ@pµ[§C)È@s8Lf1¤Ë0¡¤Þn0ܹÌÂg2L\»Vn: &ã1¼äm0çsâëu +F§BauÒî5¼ÔÅÃqÅd©`¿N,L ²Ók¶Ûî7>×x½sïL ìbñ¸üO+fs{HsÓj5ZÃ.»úضm«nܳÃsxí7î +è©*xf¬¹NcèÞ9êÎ +N2@¸·®Û ¨n+)C ' ¨Èn ° ð@!@á0RA@ ª$w"»ò2Ér(é$¡@ß*(²¤4Jó£h@9£ê˳£pÎøÏà8 HÇ3á¦Ê²¼ð¢±»fÜÊ(ðɯ \,Ä%Lê66#x̤)I¬U(Á^&Nh¡qp³0@3£pÆú´¸ +âh¾(¢H¨ÑÃÍCdóÈ(É; õt 0ÍóçVMüK©îèpj"KÚýP¬Ð´1 CÌADBîE ÚÑÄé¬Ó:Cs4#7@ Ìß¡l«Í2å¹¶µ>¯/¯,¡e©¶mËM9¨T\°¬vÃ7£Ã8!í^¹Dê F%FGQä|Ä´ì¢2(ËHR`Ã6ËR59NsöÊÕögA3 µhîÂcDÜÈWÛRájJfd( f¤jö&èÝx²ÎëýȨapf¯;Q£¾W=VeIXT¦·~¡é¼å4æ åXQXÖuo'Cì={_±©ØÚ ö¸¯0Z#È'Ï£¡üðl®é*Â9΢}"mÒ@bá P)]÷ç¿DÐZ-j¢¨ßöô¢¢M²CÈÁáw*8rn\Fmß¿üCíZíÍiZ <îtr¢ç|¥_àk^Ú¹3ĵÞú@|=ó®|¸ßQ. ÃRÝÊ*¨UGÐÃ&@è¼ha!aH*P@ +g6Iµ94 ßpcfCö°¹ i¨íB®Dî&ª|¼°°VX-áúêTô¿h- Å7&Ìøàtop>¹áÑTê¥U P@yð Á¼ØÄõâ|`ü!±\9ØÄ¦+¢!2 :x´ÖÊyμ×f»¶w �³¿¦ýµç^)y°R°UsÐFE'ùÇä3¢EºL¿äx3drUç£HŤºÒOÄ9@~k¼RgÓû +å+9áËÉ»*ÞSýZ âÌVÌÌ\k5V �©"KÉúÔÑ$Ჩ&Ù$«² Ü ¤t»ú ¹L3¢@äür)ÒHÙG 6!óÌjOh[m3.N0óÃs0¯â<)O"¦ûÉ!tã@ébÜË0L +A) Pèø[È$p +æ¹V«PèMaV p BA ´3 ý¦®²ÊrU©à(\1 Ò¥DdÔO8*\d9dêb¤Y¢ó,=Ô7Ï%Y1µëJP¿çëcK±²bÈüãÐ×( Z Ê+WIÜ¢'¤åÙ©î2ÊþàÞÁzG¡É$#ÔvTÒ-ÍÜ9¨wð¨+ü5A²"· uN©Ì6ÃåÖY@Ê2®xÙ®ÕÏ.À»À¶áTéã%Ô1ùSá(!Xd^.äåðÁ·æè$98ýc¼y0Ñî>»ÔÚªLé¢T¦æº;¶aðB¾Áu0|R~3¸P$\©oÊ-ì úÉZ2¢)1wÀ<Ú·Ñk_RÿkV-½åDNË2ÍåÓß-Ø DÚgÿDg¾F1~Ù5¿Áñ¼mµ%VÑ6-Tá¾öÜðæ²Ëê*kF2!4<³05×FèÄwÎDqZòSÌQ¹,Üø9|(°+£PjXÉo+½0éÿäN#à v¯ ðxA 0¨«tãåWPÆö @²ò;ÉÅÞkhqo âÓïl¬&´Ö½ÃôF^SÑuSjÖe¤Ï}ïUøÏcSfölzù軲إ´lìÃs½ÓØIÕCwÝ(fÑ@¦ \l#RjÍi¯@ÐÛ ¶ÖvÝßÛ=u¸&HsÜ3pÛÃ^ðgÇN)Ïß?ðqä¾¥ËÙ¯N]Èâ<´$Åæ°duØÓíJ¸wNò»ë%k¦íU(;Ýg0Ñù6 úÆm¼VîQÊBèêéÃ|بI©dÇsùonWÞk{ R©}K:-/# ÖôºiBºx4±2zP)²Öê,ܨåê¤ÊÄXÛ^m,Z2Z´_^|={ñ5øjã¬+³m ÖÄÌä.æeerj¦ETeñîZ]gÎY~¹JôV ³ÝjªÚà°èä|ËÐK«Ü¯dKn¿ý¢ö4/É:#RÞCA3ÑZ/},Ù u-¸QòHWu$È4 ßý¯Î! h¾IÊü^±*|¨ +òçóK*ø®¶ +lÀ à @ÏÒâÏÖLäB6cbjÔäFjðïRèñBÀ¡Æ.Àd±+k±ë"o2\¯'ëBÐj\z¬ÊÇÂêxÈɯFlÐ@PFh %ÊËbdè%âºr½DÚÑÀêÇ(X-`î%N>NHK°I:vÄLÏØapæ¨@ôk®IBb2´Së +&çn&C Òu \¿èEå>ÐH°ÌÞ%6-éDÑÍìàÑ ¼»¢Uìuì"X/}@d +Ä{°¦a0ªýDÏXÌ«]´fP#CVC @KîâÎ ±~X`Ø3äÖ �h-KÆèü fl$H¬f^pN3àè#gÍRÕcíìÑè½ÍUðÚs.Ú ä`AÈfÔçä rãl ÎOãE!X0Í@?¯Ü +endstream +endobj +72 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +74 0 obj +<< +/Length 2934 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(ÇÅ#a@Z). PH4ze F1aâ°²$ºs$¦ã1 Þ=OÌSaèe2# Äe3ÎF[ÐPt4_.wS Ààl4Ì'CI¼Ü ÅÛͧ¡Ì@t7w¼]ðÃr¤ÒÁC!B«®Jærë æÏ§q8Ê.qøN[s¾`3ØlF+Íó©²ã62øIPÕL#aTù®MV©KÇ*íq1 ØE;q4Ês9LæRÔËö. +¯^ +#)ÈZ '£P*<©³Î,)BТèÜ1¸ì{ä0#pX/cì9±pÎÈ9#hÂè£A>í»úÀ<ðáÀfÔ¼ÉʶÕA@¨À®N³°í!0 Ï\<©ºs69Äq{ÿ àP8#Â6ÑK8£Ò3 /{¦¾DÃÀÒ6£h@7O+¼T7ÁÐø>S �t¬*Îàí'£PÔ D¡áª<$pl«$ªðiÇú²aJ¥V@¤·£Ü9© +S±,*²$ÔYABUlÂH*3¡ÇíèAÂp¬9`XL°¨) +¢(@;°,xÒ:ðæ:cÞ9Â#cp'¸CîÞ°Ýßq Â)´ÔÿÓ²5?$TÕTõMVW ݱ'jVá¥tÕP"Cõb46<,Vj&¢Eh°fcð[ÒØ ͶÿS¡RÔY¾/P@]Ugºb ÔÙÃ[Z¡®O \øµøÍ×±HË ½ö+DHömfg6rU]Xcúz#½·½ +ü¿pØ 2£[ÝB>|#ùé4ô §@Á¨g$ªÁ®}¨V1ÈgXky&¼©õT}]¡@ä°ut¢ceu^³¢ ê¶vaDRů[r" `UTd:Çhs!o!Ú3H"ìb9¦Êc5¨µ¡k.FïA¾åBò7 ãæÞ÷Ò¾nºuÔùÿ1«µOT2¼ Jv.ÕÛÔÌfù \'@@¸nl$Â(LîÙ{Ä6BG ÏØ;Saê´·²öRjÕP®¬Ñ>tKAó² {ÌØi25×3äÜ«t"ïàB"ÔØñ^ìõ#óäÉÛbI!¤ÿMXa²A×wt+YÐÒ$´p{~IÀÉ~\È(\R"Òêrö> È0ÀXÎ^ ¡äËTâ ¨ 3p]Ètw&]3F3:e XÆ2½¢¡° +á4/°B¨PJÀ´r4B1<hà ÕB¬#°(QEÆUÊÙ^|PNùÊ31BO ¡4 ÀÓj®»ªb 0²æÓ°9A\uMó ¿/Ó:ABÞdî¶vVÖy±éÞÄ`¨ôO3ÊVPÈXÍäDJNP4Øp2"¥lP&òF¡(ørÛ\¦AÔYælLp-H¤ÌÒpìÏ´û?)¡E!«<:ð¤ç øÏòj¶£P,ÄòNUà .í®N@(È[Ã# RÃNQÌ9Éì7¯ ñSê¤õùÏ´.¤é8bT:¾ôE>éäFniSâÄßôe½ÅÎ`ÊãH@Ì HèâúÙ<åØG´*ÑÑÐrÅ$#Uhc¯[2&dÐ[ÃL¥ðµ§"d$ho:!¼;0u +Û[" Q#ixÐQªÂ¸Û)ìTqLKtËYÔÎQUM©½8Ê¿à¬]f½Ì·!.© +2¯Éê¡dý±f¶ß(ñÁ$I§Z ÑÄX`*òÆäÚ> zãYôÕr¨ Í2Z;Ê,hÁ·!wìËRðÙLLR/¼1(ô3D«R:4Ù9Û +èT¹wÝÀÞC%ðØ9ÆåoRJ³¸ÀXÄz·èõÃÖ©7 `Go84½6ܯ×K íâ¾·^Æ/íÈʽÿÌäHô¤Eð1¨å!ýd8&fîWª\/ 6Ò»Tí ?çaò¬+v&¼Öߤ< ?N>Á_6ïy¬N4[qÎ:åƼÃa^&<àA,Àëæä¬3Rkõt&Ð-Õ �+$`G9ÉÊöÃ@-/E}ms¼W°W¥pp tDƹ(&TÏXFXÎ #Äò¬ÔwÊ6Fì,Áå¦/ò 5»pZÞ¼36ÌdúÌSì32äõ'y~ÌZÑå$YyódoLÛo²)§W¶kæSw,øµRZQ"`A^ÚZL*¢¶¬ÔSKR@íLJ#«æ/ÍéÁË5b´WW!¸uÊh4pMÈxF#½dæöäæÕ# Hx|-RË+Äb¯aDQ\]£l&¾Öc9PÈÓì^ $c3Ò@ßwò@¯~ÃÊÄóÙko &°ë¸Dȼ°äUÎQZ\.\nÑÀ-¨Qx)¿«@Ý"iÁPåó¨h<9ÈÃ%2äV{Ñ9¦ò:ªweñw©-ÌfC³vú)ôs]öõ·Î)ÀA:&Õ~Ñ:á(Wñ&Bìæc;í®ÔÐçfûÀäbÜ/5 Zàd Ö¬7G8Éñ·¥r®ÿB¾\?X8Eß³uÑÀ×Kô[ˮؤgØ ÊT¥ âÙ-b¨å¼öÎ ö_¥þ8íoæ2ÊVeϾ zïÆ{/Ê# e\´/êÑÈgnåD4ºýMº=F6P: ¤üEIG¶H¦øýhrÎÈjhzl&ÆfÊ/ÐwBöm`lþþåÆu"oðp Ñgqû§ClLÅZÑhWE>#Ç(#Ç,gÈ#g5 d°TdldçJ'N´eE¤§bWQ ¯ ¦¤©ÅGâxxg'JI&¢Ü\g ¦b?b°F+"nè£ e_ +'Ô}Ü~ +äþÆ$npÀnǾ!(èx¯ �N´ÌàçÔlTHËt1 îèBlJS1Zja¶&Vÿñl|g¼P¢àæ(1Ðfì0jYÏõ@rbPG/z¸lú KNJõ¬HÉ¥¸úÑ-6®¾fOîj<· |ItÜ*L09Lnêc-#éC#ê-ð©Ù(àÒÊO 2BÚñ Þdòí6´ �|õͼ%èm#Có ?hü #ë ìàî7> *t²NRHH É` +Y, Nt2éåoåÅt'VÊ!DIXæÍ^û®ãRÜdRçkH/µ¾µ@ص\JÑ<B +endstream +endobj +75 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +77 0 obj +<< +/Length 3125 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP-#a@Z). PH0Æ2 £¼@oÕF#A¬,.Las@P ÐW7fÃIÜt TÂ4¡ªC¥zW3¿Ï,¥CA¤æ 8NFièe9g)Òf¶áÎ.#n: ¤BHÇlÐæI¼î.¸Üà¤jt&Q¬¯Wʸh8+੽dÓct»mï«Ý÷ äa0Ùì^78õLѼ@aÉGSÐêrÎÍöó³Xgó1§3ÎÎ0Å ,xÈØ.IªSz߸.n*[ #0@;#Ø6Cï4@9íj»J¨l:ÎP04Ç´bH¦<bÆ1£`¸LR:(b©"Q:âv¨¡Hr>ê6<@b d½0kpÈûÃìà@+¢ø'¢h' ¾)"ß8Îb"¥&ª \#*0bÂ+ò¤â¬LðÔ¨ý¿¯øY4³¬(Î4£xä22 UL2NÐôñ/ =¥ÅJ{¤(ØlÆ+ (1LdQ¶rJ¢·Á¢%I&ÉÂd²&ðÁ'ÌKºÇU/èÖ3SPí¬èc= eÑϨQ; ·pA3Ã3 Ð 0L5Só:3CxÛYÑ0z¹GR h¸Ö .IÕ°_¯û2á �å<Jí3æõ ã`æE +Mh¢ízâaÎ(dJ`R|Â3³õ9NµÑÏ3\Û@PS:â¬ë·WÌ?¨KK8ÈêÜk*Ys7°_X²Q ¼#gÍSº¦ÖÒT[EâPìÀ°=õÇqì Èr,º¶Û²-&æj(È7¬8Ü7´/Ü9 Á ØáÈàËÅ*ª¨óz, o9Ê}Hc!ÔÁ �/;áy¬ÀÝÓĬʴ: ÒǬ>©`QB§0VYrÑý¤hRÎÍEÃÒÊ9ø#(ÛÃÙÔXm`Iõõ¦ÁÊÌúo¨Ýæ4î²h3èÖ¤N»4lϨ'æÏÔ+?ù �L¿x,á¼d[ò +t%¼ó3æZk+pàáÄGñ"pý7êóý¸CÀ¨Ix4l¥êÕz/ )ãÞâH©,Ä @EAWÀÔRCÎPaTìSÙí 'Ì9h¾a R +¡Ð¡ç¦èX¹ìt¡Î<ÆXá«Lª~CÇç0aÂ0A L" ÃdA¡â,¾Ê0A¢a àÆÂJX£8¢+è² Á(¡É ç\B,ôÒýetl#qÅý0àPeÅÒP«yM¥4¨ Ö¿Vo+â²JÔËyrØ ü±t3*ø¶½Ãs¥[Ì8Í0ãTÉdÞ&Îö°9 ®ENW + +TøP¡5Ð86è<;jáñÄ2Hø Ð æÍø,tUê¼g ý_Íp"0^ÁqWÔßÓ5´HAð B5(ת>"Är<oÔ|±Ñq3©hV§0(GnL83 0TdYóϳ¨0ÑBPÂxL!t¡Rª +ój4AL# Bµ3' !©æê¨G"ÃiÒ=ê±Dç±}"¯ÑeGØx0+ªY¦§=°2ÀÎ7©µ)¡ô"$fç0U¼<*Mi3XÖHQ>âxÙHøz¡0áØ4#Ül*TÃÀcL)íU0åCr-ïy®{Y {c´/íKjL~ a, P yËKF÷Ì,@ÂuÓ5-(¢_ BDx]Ƹ)ê¸#ÕÛAV oåþÀáVAlA}/¶bк\ô«.¶&PXQí+B¯&;¹ÿ?õ °~Âx9ذ.D8±ÑðÈ{aó q·d²fqÌããË pAD*0á´0(« +]éãBK\9jô©%){»8ba컵/(E U° A7¥X +Ud²!ØÈds:RÝ Çã%ÀÓ + <ù¶4eA ÓÞgO ãy ê+NÝañ7#EòÝ©LºYkÁÍ~gBÚk"Ú1pÈ·&hsâ5?î¢?èÖC°vJúÑÇS;¯êL;;rNYÍpõfƲs´¦ZéQ/Q´ò©Òû\÷¬Sæà` ôp½h{¹ñdçÔ7&»J+ ×`2ñ[x]=ÝCÈ2 K©ãæMnD\Ënrd(öÄù7u¾¬Ia],3®Q«¤jòÌCÊ 2Éc¦¯'ͦÀ{ö¨?}ð°1®áçÂuMDm¾ô!æï-ç~tø3Ã77$UÕy¥ ÑGrI3¬¬´VÛgÚ:Æô·[´°ç(d@oKj³k±£:Çù }Ö +lX)´Gα)X¥ +ZzKÙy 1¦$göx«§õ¾bé*¨ïÜõD@Çæ@È>Z¹w#É ·!áZÜÓ9ÿé¼ó~öÒÃÓ8Õ0õ]ö/1²¬±ªI¯$ºÒ.ø±¬øRbMIɦlæ«v¨V X9R#ºQfp¬ôª¢iz¼eY+0ö îök8#Þ7JÆ«Hþé@¨/8¨oúóâ0$kVôp +RÊDj¢ ï³èʳP$bCê"ë@ðj ª¡*¡¯ªÖð®Æ§v ¨ D¢¢¢å.ȪfPPu@j¤Èºã;à®5äð rªvÃ*~ÿ<ÿ¯;+ÇWÂ:©¨ªeÎõ)pª@òª hO_ê¸ðîW+TÏr´ª +ApÊ2Î5 ï ÊÞ `¦#Dùà¦=Cî¯o4ÿP>ÿÿìz£0éfBÉr±Àæ²$î\°! +»b*©·"ÂÜ®À´Ënµ|þëâËÆÕÐ5ÑX¶í*Ø@n!Kvlð#p´f&E®¸ôLs-ÍN:ÍG4L¬Ðãà^K ¥ô<ìØ( Æcä}ãWLÁ0ØhØ£² ÊÒD %Ps02äKçì¦îlÞ'¦, ã,ú LV3mF®ÊMmG³"0Òȯȼ0IÆðBqN±Qæ¾a«Iñj²-6Þj&#b#*,÷Q«® Ú!Eâ(® +;çâòÒsN*ÕC:ÖîÎJ`B#y$ëÔËâg%b»B;r`è2fRn E'ò(Rý¥ÜNpñ«|+ny)¥þ¹ªä²×ѶëFîºØ©PͱW +k+EÝ2'jß%rJQêJÀQé,î¨wEY0òÐOà 2å"rèÓe?-Ó|ss\\¼¦pÂ+ôÎÒÄ÷Ë#Åñ$-ªúÃø ÎylÐDÅøùãÓ+CðF¥XøNB;33Æ"ßG4ÉQÏ +05jc®Ú·§Î¬S*¸SlÕ·7'Uíü?Î(¥\ +endstream +endobj +78 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +80 0 obj +<< +/Length 2675 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶("° @-J¨$=2 £°ÈqGFXYk7ás@Uo\AsIÐÐ ·D3 ¶åv9Ý÷#Ðäi7ÅhØl6FS¡Ôän¸.æ[É÷2MÇCIÒe9dL'L&ês20Ù, Ç 2ÎâÅêäw0ÄãôRT5JêrñÄʽeLlv¬YÓ}ÐjEÛþ 1,EN<Û2²MÆô?$²7#èo6í2l&èÞn6D}N¾ÜÀR¨« ´cKîÁµÐb\Â/¸AC!0Þæðú§,DBáB⤩jhò!(Z¢¸a®¥iÔ)®s 9 +íd&¾l°Ê.àRêFÊ|t&àn %êÀåHN@d!o2~Ý£pÆÎCÃÜÕDOÛQ 9M̼H+¢øª)¢ý Þ:ë|H¸KÑq3CFjR©K!¼¶ë¸2¾ä»oʵ=«ëà×Ííäʯa;t4³,Û:ÏN*ê°ì¢)c¼Å¡áª<¡²^¤ÎET§ÁD|p°lDƱãiO©ÑÊ"! \XÁ°hªé-N¼ rbí¼ÁCÒõÃõú¡VÏîH+%Å"¹óÄ%òei'Ê2 táU G.ßsÉ3ÓL× 2zæ:cç +ÅÜsu7?yÐÒ3Ïèæ4Dí$ï<´#´Z:®TàÐÑÑytI ¦¡gRÔõLëL)F7½T ¢kuH-ô¥/K Á +ãøEÔ¨ëÈowb �Ü¡)J<uY¹ pSDÕ6eÐÜ7´a/9¦lÒgvtM �6%¢vMYuÒÈa|Ú« icL)ý¶[Á¸f£Þëv÷v"ý¢ v¨H}éÜ!¢8x.ûÁ ϸËÖXceXý¯eîwHðj³£¥ýáü~0qÝy>X£È-H.¢£ÑdÁx>×®E×ÛZ' ¾øøÁCåh/¡º÷ àt |uFÛü~ïåm2¦YÁ(श¸C£6Á<àÂCt Ü÷¢H +YÌ5eB ZñG&ä Å@Ì +!}, ÷½gl²ÖkòK$]}-gðñai/ )6ÏAÇõ lXÀÐP\ý# <'p@Ìd:IÐòDL°oW H¸×\ú¢ü!}îåÝFÿÞ$ì4(Ö c/áÁÌG8êõq{èDã°U¡RÖ¡Dû%Ó +aÑɸ¾¿\.$2ÈÅ#{cζ:>¢VÊ»$*Sñ dÀËehx½CtaêOjh6¡Ó (l>ç8ÀRka¹4Õ'µÁ pÂØÄ °£÷¤LÌSWĨþôÚKòñ °@Ø,Ô îÀì8øÃÎ9(bA@2P×"S¢©i ²åñ9$Jq9ç$¼\}zMÆjɺÑ/ lxÒ·Jß\+Ó.e<f³ØÍíG°c%Ýåûy¤nAJMJó&-S*LÙÓâѦMæÍpkMÜ 9®U:²ÃêËÙ3¬ÔÒ£UP SÕ£¶Òß9O¥Ù7"öÐÁ#¥1ê-¥ÆôhH. ÚJfê«pL¹4z{Ãyª=ì2ðì.¦¹¹vYP4oudTWâ8{ÀÑà?w) +£ o5çÕjÜw]õqy¬`gBÉ}aS"¾krC¹¯²Nàf I¸1 +ë² c[ÿ ðÀXlbàEÞ]U ^)e*íФ֪¥¾$Ã{`ÜÀ¾F¬å +½Haë +xXвàÌòC`S¡DDQiâ&8Ä¢<diâ<IoàÁH XôT±Z, Ò£hýyñ,£[)5U#poÊ«½,V¯¼¤` W áH"HsZcL +aÐÑt BHN +#OÎä¦Ê7Ë)»{êF"ì·óyM\¨r¨4ÊÆY+ªËÕÍ+ÇÍøü ®¬º£ +_4ÚÔÂi%ª¥raf%2³ÀeÏYðÆè÷5(©YGójÁSµýtm(eN`,L5f0ÉÜ~ ³ ìÝs¢uhÉðɱ°@sÉ|0ÉE¡V¯>Möe¤<e\ØìM¿7RÙ# Ò]¯}M}QLZS«wÝ9ï>ëç_VÂàŨL +Ö×#®o´vIF®Jf[ÀT\' ÞnýZ\¤[XAûUk8Ý*-T²WZ'ÄU5wüäÄîCaO¾ÝÛ÷FêM"ÆÈ´9¢¤Öa¶üÝus;'u¨¬«Î]ÐÝñ7)8|³!Ä£Í!®ä8+?¶önjÅÚóÐt?)íwϺ[®¤(ÛB2·ïD,0cBn»Ð~v/qÒ~;áu1èÌæn·r1ðÊsº@äÎÃÝìÎR²Ve³ÞëD±f¨1 2ÖÐ!F}%\TÍfÍôaËhä^gO_}z Ê[Y6ÿ|ܦØÝwüà¶äVgÑnufcr/î(yÊãSAGÐôÎa/;Wä¨Ç-Þ¾ÚÂ'à£æµ ¤NîÃÔ¸Þ1dEëJiº> Ìæ ¸8`n;G('ࢠ+`¾ `$,'B´ |eÐ*.Iä àÖ7E4²%à +l Pà@`r¿@sÀÑ0²@ߤ +б +À¬ª>ÚÄê6 N`ÄÜCÞ Ç¢+F¯ïf°$¾þq¢¦ºpùdÏ<Æp« +å ²@¨(°~7PPÈÍ Q ðÚüd + + +F"¬NC ¿@ª +¨¿;ÐÀ´Ð pè?P?Ä=0¢É¤¾ØÊ - +´Í°»`A°0ð1÷E> +endstream +endobj +81 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +83 0 obj +<< +/Length 2870 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$G +A£´@eÅäĨDLÁSL¾P'ÊÒ)L¦A#gcQ¨Ðd(* '1ØÂl:DÃy¼×t3ÎB ¸ò 6Ng3 Ê,O3)Àè ÀàÎyÎôl¹¦L!ÞvÇ3f¹ÜÂsШª º«PGÀ(PpÎè´S¤ÜgÕ/B¡ªF©ÐU4n4Å!{ÑACMÅc1ÅÁApSÌçAHÔx_Pkvªô¡¸a#*V§Æc©¸Æ: #xÜ= +R2©ª¡áÀfí«)¸P®â'"Ì´-Ahj!Âà¹.²ðϯ«û0Á03ð±K$Ê2Ñ[4Î3ËÛBÑ´;RÕµ{b¡ «o7-Ü ¯¨`û¦H PÏ Ì»ã9Ûæ¹îö xnAé;{' +Cô)£pÈð1qÈó@¯SؤºªG3>³ðý3ëÿ )¡Ó$At4Oóì¤&ÊÜ&¯ +JÈ)'ihDk껯+ÜRÀE@+¢ý3MÅó6P0\éÁïHJ T«R©À§µÄ½8ÎJôÄÖKÐâ¼Ô£ +IØn¶Ò|9£l|ÒL8Ãoò9´Ch@+{øÿ@Þ¥ãÊ̹wÀQ-]õ«Õ/:h f¶ÎÌùa>ÓT¤#£ £j¢èÖ8Ï.NÒüð©7HV&ÏÖW¶+÷A^£p@45ì$Ù ´ýn¡P^C%äL Ò¡@Ç?ËÐè7 �a º8ÌÈÚÖP&8#¸+h&º)sâ©¡ÃâO¨lø.°×ªÒq¶ Áá\@¥ésa(Øó¨"N×)¡ªz%²z¬ý.2ÛÒ`h-ÏØ!F!b¶09ãS¯¯dV«Rph¦°Þ {7Q¥p+§·Õ^8P" +âx¤"]þMRÈxÞ6 è;é ò81A ÅMËó).C8ÐNã5¸ÎÕó´r«Å !#)yO5ç½ÞÐ8Ïá0÷-ï ²ÃyP`6#RW8ð<à@y@|x+%:|ß Ã³X'F,Ì@Tå[T RËL2ÔòÌ%}Ï=øÂRøÁl0î#I¨ak8Õ=÷à " 1$7ÂØ^pÎ,3¡JsÉô=[o Ä0åYt*+)%þÛ2XH;Áô©²<&(ºN1°×t £¢r²\ý:v'X«in°ò±·6zÜ1v,Gb&D*krÎd°Ä?.û¤8,·[4Ó¹îVéAÙgôíIp1MÈ"ÉdçSÄ·gbà C(k©ÊbË)ÂA +h1u¦êåKtZ' +z(GanVàà쳤Yû¹7Òv$-`Ø ZíuÏ6VÂv#`lí¤ø¡òäÛn Ø7hÞÁ¸39#CͯsÎ-± Üi©§9Fç/N@AúI<iU(!5e´ÊZØHÏnNÚ¡&ð iÅ:tøÅÖþ}Í %Ùh*#¬.2nCë»aÆú_:Æf)óæ};ò챡جߤsVTXÈÙ#*¥4Óæ4ÚeRÙx+bß(g $î.È"Ãe´¥¥8öCqkxvÆÙÛjNËy¢VâÝ[Ë^bäE `(úÃá²B¸ fà(Uk9Vlõ\¥aÊYw75¤0ò¢Å® *¼Z÷R+íØP;ÆÉdÁ'h0ѯµÒu?æ¨Æ t0Â`A,À=§V[»#S5IN[A +¡$'@@X°y¤ �7tÜ)ðcÆs÷#±ÑÆ2á1[æCÆ9,ôã`Q¢HbÈÁ,e¬¹oõ)îá XXNaÅÚ.g§ dG.¬Z¸!ðczÆÖɳ|U +ANÓÑW¢BR +¡L$2ð ChÓhFêâL +±H@Øz<¸:àÂbu\ÙĹûWk¥¬µ TÖÚà=[^õöÀPØ|b6 ñÁ:>ãÌ1ZËoaͪx(^¿´~T á47ûem®\¬1g8.ÅW ÷0S =¾ÁNzÝj5^¦wJxO à. ïr¸<ÄÙ×!k3´MNn ÙÃ9g@Ña 2tj®u)3÷¥-Uس:kpÀí²©im«¯ D1A9,¡$épõî¢ÔzBeÇ4´É¡Ë¥(Ã;ë¿0"îô¥½ÞùÙìiwÎ ªãhO]IêE¹>ó-i7|Ky"Úzn áÞ$ï¥P`Î!zç)/.¸Ä3ðÀ 7¥¨$¿»Èdïoõ:ðüº÷xA¿y¢ÞÕÃwF²±É0Z °4!XÞ%.ãCªªÂQ|«pìK +Deê@z@G×ìF5ÂC6¨½zöiÁOòkñmÏ[¶DäÕÀdBëöª o·.àÓT÷fQ6êPöôu»¥ÙOûL5>4´3qºÙËv>V "î ôG ² @P/LQEnµXÄÔ *.àØ5FëÎVïÎû˶.¶îü³Cäòm¢bvkS.ÞRÄ'|ÎÇÎîO@ÜGFTOÞÂFhåÀ4ú&Ãñc Eüð0¤xKf[k`B*NÜ¢¤õûìJ@æ Ä3ȸJ @ò.ö/<{F3Ã..Ð48§È@î|Øâè_Bø8ä±TO8ÙïbáohÄhØÃ|-hà @ ¾Ãh\F\ɦåäb"~èϤ¤Æ¼¤ÆkÌþWbÝÎ×oΣJ1(Zø§ÈÇåÎÎÚýÑïÂ,ÑZsÏˬHmtÁïá¢ô èðf"9Dn/Q1e°¤°ô˪tuåµ0`÷N£X¬O¬ã^ `ZgÀ`Ó`Ư,Àä] à@ZÆZ¯| àÄ.îûMê þ§Ð Ò/ñ¶îÊ>òpÝNä|i&ÆÏÒíÆ£còQ QvD÷åÉ é¦` jaP ã|äìîåEºìƼa ½ÐdøC¹Bèñ±°9%®` +¦Åã<4 #næâèe¯bºB +endstream +endobj +84 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +86 0 obj +<< +/Length 2823 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT $ C Ñ<l0FâáÒdT"Mf¡¾6 + &a �C)´àt9Û-IàÐPoÂÏï"Îi9ßX+Lðk¶ÍóØ 1'< ÜÒt49iù¸Âm25ACTlÆL72ãLË-#aTh(f6 ó)Ed-®Ø ¥Èdz-!pP\Jª1æôC¤/ÙáspTä@3#HØ9 Á òª +Kîa»ö°+zâ¹®«»@µ ÃxèÞ¼&:ã{dÑahæ8£Ò3.MÈ9+NÔµ æ×¶-saxî2Î7É£ä4HÜ3¬ªc46)ã2ͳ¬ü¼´4-¨ h!<ê©n˸ 3Põ=¼ÖMÁ&¯´â»ijþ-1xçÆq¬oÌ A;HàA!¶Ø¶ÃÞÒ #Ø2 ÓÂW áÃô¬%ÎÒ®îµLä9HKà0¤PN»³Bèª77ÏñÌÏ3ÑY¨õ²*oëVWÔ"I`Õ¡µ®þ?ÁHrèÜ1Ä+[6ÊëTéøàÆË°ê9å£%'+Tu3832ÊÒÄ6@äÞLÃ|lº_.,Òç°kiºÎÂ_9S¬Y ³ÜÛ W*mW»Xã²CK;Ò0"Y=oj<æ ¬#^ZÓµk»£`à9VCH'HcÝg>(àdN®SC+xhÃoêN /FÑÅÕ´Ãuú;ßô6â-WÒæµIâ|2îIûV±RÐQOJ̲¶°k.Äp[ÊÛ»§ÛúÐ=8#xZÉ ²¶ 2M<´t,þäêÕZë)Ë#)Êò}ØÆtíR×¾±Úðìϵ @±¶T·X3õÝ 8ÀÞwËÓñACm1 Þáx2·øÜ9¾8ɯxhå}xzÉÊæÚb +¦¡^çʨhZ&9é ÷ÙîñÚú¾»!¨i¬ -bݪz#o訲UýZ¡(Q 4pÐô^»^zËéål\Ñã^h®{þRÁ4 °BpT +A)ðªEa1ÂFÜ ½_AÑ;ÜpX¡Ô@ëÃc±T°ª T¯Uú¯Nü²ÀYÀ +W$Eýµ~ªÎèh !¸È Ç �Í Ì% IT¬µn¥¾rHøÅ¥@Ê«bLîYÔÌ{NÔØ³@y8tFÔÚCPÊääcig¡»F`×Ù¨p볦H ²N5°"¦áº%Ä3õÄpäËJ +Þ-°lÓQ|¬p,5îxÚÊ=1Y¥Å¢}áÖ'ë q®SþPKO ´+pSò¹U.u»HÙ[9 7%ñ})I3+{ÆEðÊs82fKµ£`7 E:LdS2Içq¦fËÉÆ¡ÿ\K»´ �Àg¤Ò=8Î!ÄS¨t<p@\L A¼<R©b©Ô9X௴÷bÉÊjÊðÔ `þÁ©¤'0WÉ3U©ñ°Í×0;áÐ:(É)#T¼"ѼHAp2ªLªÙ¡HDTG.^ ò¡_"¿|ßÐËB{ÞGÊhEêâ v\Nk³Y+4/EáÃÃÊJb×i.ÅzHý ¸y`¦RO¦jjæ=E ÍJ(¤¯ §µÿи3|ò8Îil@¡= #Lú'²õ`EIv~×ÉþWA9MêöbÔ; +±æMÀæÐúÕAW¥oÛitìÉ +AV#sj͵ŸáÎäªTuÁS)ðTQõsåÎ2è¢1un½Ù¨ç!ËÊ`*j¹©à¨êè I&Zõe¿º@Njð4¬ �8s5gÖº1õp®@«¸Ý]jÒÀ;¡8»ªFV~ÇùK×FXÅq[ÅÅo+kñ¨CðÌ5E\h÷Ïãm"ù ýb1v,j¤¨C£ërÖeLÿ QÛíºhwÖ¸gÑ9 w¥£ÑúGLi+¥èP,VaP(6§H RtÌR\¾uø´f«b¹³$ 4-©,T³ÞûùÁ$ТBÈ].O±Z÷8©Ø4,U5äVÕ12KÇL +AÀ(nD&méÌF¤U29nÑ#ÀÔ¦4BiÚ*± (/*KÂøA¶yË[`4ò©E"DÜà|à¯2 Èo6dp©³çå=2Èèâ'A+àÂ`A +aLµgáÀÜÊÇ ÈUØó®Ðêù£rRç8Öp(å¡( é¸pÁ¸+¶`¡K=7vú¢ÿé G9ëpé»yì +@v®º;wpÔ{ð®¦â=ÔBD( +aP èb#dY¯¸NȯÚAàà¿ÏÂxNñ$1¼zè $8_BhË|4:ÊÞ?KÀþ ç² +ú +ý 0âr^a£Ïøö¨ÓwPQ0(?ºËD ±ü:诿&Ç®?):|Ï +¾EÑ)ÏÞpÓù×<çÚÿT?Àú:0æALâ¯üy3óõ¥gÄÙÄìè¯ �ÓÍÌ ÍôðO¬Ö8¼ùïÂ}mÔHüì£Å¨îåÏäæn²îçÖ=öÌ 9¬¤Ù¬¨ªBb6gn>ál^á¯â "þ¢¬v½Ì~ã*âc ¬P¤cªô»B×ÇÎÒcЪK*8½ï²¯ì¢¬,Jd]D¬ ä ¢é§jb5@@]ä^Eè^Êy Ð_ÆbÃkvcp:çë Ï êÍÅpB �¸:Àñ¯ë"ô6ü 0öm mgTmÂÔ§CXn +]qZxø¨oG0Ç0Çnã.x(>qÇ rIØx'F`£{$¼Û ä·Kxò«~ýb^ Gù'nw(vI<vÑdw&b6§xGpx¥,yæ2h&¦«hf»Ã9ñ Ç*î¼è»q&DeÀWæZ(æ@OnϨ ôH¤G¤6¢ÖÃb ¨6¨(<q²ØHN (V ¨^ððؤ\mòLCd¨þøv£m-Ö +endstream +endobj +87 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +90 0 obj +<< +/Length 2687 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢#J¨$G +A£xØa@#IP-*³0P ¨h2%CU1 R! ¨ÜDi ÕÁC pÀg2 + qÌèa7ì6;,G ÚÆáÆï'¹IëJVl +'# ´Êt23Æi3L§1ÒÀ 4ßoø ¼Í×Na¤Æa:MæíÇ +fÃ Ìæ.±t+Ó±DßÜèö{¢IÐåª;sü{1¼ämàpÂ<FFâ +]Hp¤2([.#Þ: �c`Þ1#cê:ÁcF:cDÖL*7ð»ª9ÃMpÒÖ3Lã<Ð4Chê¿Â9³íhÞMÞ0Súª¬ê¯*û²,ËBÄ Øp² ¢¸ ®709È,3¤LXpÆ® +²°)\&©º}³¬ûB{b:5¤v×0oªÌRé6$r«ïCͺ+ &"§0¨Ò|È Á°lÇ®2²°¤s0!ÈP¿Pàè:¹+Æ×8ÎK4½3ë^ö=ÏáÁP4çDγ°*'ièÑd +è¡É«L ûA!ê»ÍJèÏËÑ:øö@¸Ó=4µÓÊßE$ð@3¬ ~â{V Ã|Ôµ �ÑRÀà9BhÊ7¢tëtÌkXmNÓóL¬Ô²¼.`* ÌhkDÔ4Zë¯2Î!pºØ³=]h&6Z¸õD®ÞmPØ25µtåcò¿tP[FM¹µ.fLÐ U8:nZÉ/-ÍWV, ¡¢7"?\Ïé뮢®-¾éÄá S7N¡ �;Îdj<ïÍ+NÔñMüÀ0N;~Á1µçËÕÓ'k!Øf¿GøéªÜc}Ësä«63*AÍAnî9P3#HØëéÊØzà´%Ëxgxl"Õ*J¹ù6â¸Z¬c¸á P)3õûg¾È7Ai¢Èáô£ØØjSì_ÞgýMÁ/õ½}Ñ«ÝZÍÚñÃPu �ÀÛ·Ã`k0GYzÃ°Ô @è +è Á&0ÙÙ0Fi)Eâ<b&ò( ydqç8 ¼*=pPöA£ÛàÌPär`PIá>Â&EHï¹øó!Ëru8á¶gÖa.!0¶<ÂÞ Oùù#¡R,¼XyÈ5Q!Ĭ_ ï]¯H¥@(zKIÜ2äáðtV«úsÇ*ã%pr+¡§TÕY°e@S¥ðpÃ<«¨+àÉ*Â÷Dò¼7KH$sm§ù .]Z_¡Ê[ËðANQ +æÅ|yW4\ÓK"ôÎË\S á¯-ÙÐÐM!,"(S áT)0ØC, äÆ@ÊÈÛ+~RÈõNÜàÔ:Rh){Ó%³`Rc¨K¤"çø3£ä ãø]AÉ B ÞaäÆXi?Þ(.TFôåB +sL<¯ÖæX}'Ù!ß4?T÷+%Ó5N«$) �:ÁÐÜCys¹ðÊc%M¦PÍæ ˤX+íG=f~jD5g 4ïR_íK"õ6§ÅJü Tå¥iÔ$§ba:de-PgíE*Õti±·JBþT²L/Eì| !<á\¬Fðuã =¦ÉcÒqÜÛë×ÙBZÁ7¤¬ú÷QXY%¬´Tè]FÀõÚ/)ѧvþãÍRºYÍ aNÖÑÿn¬^ÛÄ©îLÕ5¤ì¾oê5Y8ãËnÏHd;CbVRA]³Î}i28÷.ó¨UÍ%Âfݰ¾v7<Ps}ÌÉN¨Á<'ªÞoåþÆ()f#Pê2wÆÿàÅñ« )½·Öb@-F´Ø³oâRÐ>àÄLI&+.+/Zcgç°¡!6å¸Çìå¦Âoòç¥/9sCs:UÉ/Ê?R#º.Ý ÎàWÞ Ed9zßZ3Xß$òÜR~qe%¾l+t,=É3<êÅßæcl%*5üHV®'TÄá `|ÝV&=+(L[{iÓo¾9eÜÝlüTËÎVJëL°ÇA ÀgrϧácKÎ ¯9WÑ6¶ª1BêlVæe¦N@´°n +& í%¥ Ø×ü¸zÀ`&C6çm;t±æÕåvìKµteöiÊ2^ +¬ÉõHm¦<¯|§3¨6!Ù +ǵ³h +°çërßE½VC©ú¥áZ림/½µw®ÿ20jc^^<d¯(Fªxõl,?°ô$¥½Ç¼ø| Ê/kÈ+&úäP!&EÐ=Ìê%©V¯5}ÄR3\vÒÜõBÀôpg5Õ¹ÅPᱯî''¥óÄtrùê:94 tx4]Í;Y/&{áÁFH îxí1¼"ÊGâ×ò|²¼KÌ®&¬9ÁX/`Øe¨'ÁÏ5ÑY?G¦µë¥Fhetgôl°|vÃèÕbEñ&ÈaøØ$5d¾ü+«¢ã÷«Ý`îMzY%Ñ)ôøÝÔjrùÒ;8ðcÑK$Úu¹Ö~| VX©Î>.ÐçòíR bØB~B6$`dg8hÚø~øæº¡¢¢fªn^6É£b£Êt!H#cºêLn*RªV¥ ¥î ïz¦åªc`aý*¨oD>Ïò©ÎÂÿS¯ÌØÄ®ò4 ÈþÂUÃZ ΫÅ&R ¦ �âB²nbp +©ÜY ~)È +p Èjì`©p«À +@c¸)¢K Ì ÊÄ +pêÊPîgâpOkø1¨`ÄKÀæ£Ì1>ÑTñÀ :@ĬQ,32 6' &6JQ6æÑP à'o¦Lñbc±N fN k@ +endstream +endobj +91 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +93 0 obj +<< +/Length 2775 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AhÄl.!Bѽ@j7 &³@TäP!Ê )àÈj4 + èe7IÆiv)¢QQ:h¸n7¥VBѼaJ®W¬+ ¶Ì4Ú¢°Âs9Üî·{Í0gI/·ü¸aÁÑ\D!%2°@*¯ë¶-¥Ü¨j£¤¨mî1¿ G5Q\R"æS¦W.s+ÎFBà º +æã&ØÒn: Ä!ð\ï¸mâTÁ +9ÝO¨ë3˶î»í{Âñ¼¡Îô½ohðÛ?nî'£¼î>!K~à©([¹hD_¹ApjÁq$¢L½Äñ¨Ä 6'pnÈ(æ1CHà: #xܼ(®!È%"ÈBBGA +@ÊCO !2äòPÁ04b®ªË@.Ó¸>L6©`R¨3Á;´Á²«©øÂòMê +#M"%áºIE0l+NÄ5OôöëÂîëá4Ct¼B©òÚ±P% +åEO!tr3£pÇ$ICÐ#©"£´ÎØE&2XkHæêZ6rx§ã¼üÃØ:ÌãÒ:LÁ #- 7Ã5¦ôÃÞ6pè92bô¦ª¡`/ªKPÎÍLh³LUÐPº®Ðójºã}Õq]Ö¨î4ÜÉ3så âã¦3ã¸ýÍt]WfNóxî(ñ}!Bë%dc`ÙcÅf@ó%x(rûÎQ1Æ5W=Óu/8ÎeC$4ØÖâ6C(ä^ °\´/Ъ]GDu¦c*9æÙÆìUî*6û!UêÓѬ[\§ þ!´í{nU¦nô#C¬ñ#ð¹{bÙudÔásÈ jòGrUE-òPP9ßc~:ØÁ Û¦Ah°ZõáÏb㪠+ãjÜ 0Î4÷V2; 9Ï7VÍhU4`>©TФ2û~èå Ãõ:L=M01FÌ8+Å|°s4L«-K>WZh2NOMö7óÄyÃS`¸5fôÜ{SVļ³;ra_ Õ6°ÒØBë]« 1³ÈÌh ëM<¸Ø¸( ñ·Â|b1?«Mhc´çqÈÀÔ© ³ØXËív¾ Ü×ÎÒæ:"/¼g¶Öêß ¹»Ã Ï´0É<@·TpTÊnSïL ÖÄ ÌSÜA÷g �ÂVuS+klº.PôÚx-F]¯äµÒå[Gmn-åÀ1I)°øÍ&áä¡xìñ}/È Fä!X`¯IÙÂmÓ +1R<2±äY IÑÝKÇ +âÁñÍ¿ÇãÝ _<¯ùÒ9)È(ë0´uÆ\äIXUÉ<äþuPâVóÓªK¯cm:ÚÍ0¾T)0Îáúõ^à~ÊàéC)t êôô¶ÙjÎ\à3#thå¾³V©/Ô3éIà8T¦x©`Z @9DOB+ËØ*õ^Ã*gfa<VÞÜM°m<ñ.30Ó%ÛdËeHF¶æà£bÅú8ÈvÿÞ*LëMe/ÀØzâ 2²4® ØÍ.¦x¼ã4NhLɯCÖx׸pIEÀ:0tÝå#&GÕ¨9P¸_ ) ÂXG +A<*òÊ A>L°þ²¦pгÃbB©2¼9D°Ð#ádËAZztÈ£b +ªÃX¨R +g>#S h +,Ú³§ÐZ)dÎ ¼&9k-;vÅ&«gmlHH !'êR ¥ rSYë°®8i¯æZ»Ên°s]HØ{²BxD +¡0"Äfùp/¼·òZÑR+ÖзEÅZß-7ÄëÝBõ}!í'7Ø/0lBE upäRIÃ:QÃ)æ§Õ<9kEÙìÅg÷µw9ÈG«Òñ¨°¨ +-lfºLÑSFF¾¹1T§f67óÒìü_LìªQKGIZ¾Ý<-éÎÞha¢ÕæSHØ4È/B8XWi®ÆFëbBy)ÀXbÛDʪ4ÆU: Z6U3¨3ZÕcÕ-óBz,$\õòrÅÎáßGaC1#uÊ)ü©ÖY ï»_EÄrómÒ92Ñj+lµy¸¦iça¶Å,ß˾Lt¥Ð²hyDÌ!ÅÒ\ÁÐ<àÐÄÇ.ó¶ÖÛ¨Âm)ÀÚßÜ¥)ô.Õ«¯Úí{< ÅÒÅÈËP[ð6wgØ<!r ¢´ZÍ<øÝ\Î8®¼º<¨ÛûïÂ-©ú?i°ÛýTþ+ôñscBØ àpMoª³LÓÇDÈÝ_"|ɹ8H©¹øZB¨_Ìö÷9ü°«~BÝJ²ùÏ VÌóü2ßÕ0WÛY?qîsDGüÿ+ÞL±fòÁ¹ +ÆyIgyYHè2'ÝAEd`AÂ1aDåAÄ{Híûï U)®AìKùÝö§©Öµ©P ·ã7k%ÆÊy°Bgä°! .g|ÒsW±ö>ÚÓå4´±ÄÑóÉÔö=fÐÜ-9Ú ¾¡ÓL©|ÿ[ôJ¯Àò«LrzoÃëÃcÍÕfø(ÂRhN«ÁíÚ\]åâ^op®.Ì÷~o~ø/ø¯ù,bA@èÎìiv`ìÈ&©þäúÇðo>D&úD°HRïcB9öðª¼G,âðä~ §òMÏ$îÏ,ò¯.Dgø)ä½Ð6w@¯nâÐD ðòbðR8`p*¤bFeE¨ð6°h2 ^Ã0§ÞÄz·ç¼WÄñîtð~J!ä²# �üñ4{Zã¯F6βüN»£¤ü/C/ÈupMèöîâHQ\) g7pb,Äzë0O R¥H·åN3 +ñ¯'8¢9 �ÌÜbCçð +0ª!#B#FF±Juàc P +`òÊ¢Ø{9/("ð!+2"²QfþÛ ÐlIwJWæÀ Î7GN6@fì3âÐæ"ü0ÔÏ" + À¨'C +î +m¸´#8º«è'#t +&dzBÒ-`Ì Ä +ìr/Qp +endstream +endobj +94 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +96 0 obj +<< +/Length 2540 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4N¥BT C ÑØ\1B £zxÔo"M&`©Á¤ÜtFc Æb!dSÁÐäahtPTN.Æ«qEzÀ-±Y,Æ"¹¸Él·\.TH!PU|$IÅ2¡C"ØF!A n9&ããsÆãî²á &·8ÈÉäéØÌ`8²çfóv +ÇdeRLRFaÎtu9Íç-õÓ«$eMx B)JdØÈd3æG#©ÌÑÕÔÖ¯Â)ȹ±A°à9BhÊ7¢pÂ6´Ì[¬Õ¡X×>o«îò¿k+ý ¤«.ÃZ @ú +âp!¦) �ԣɮª +6¡Ê÷$»h+¸â @#£¤3 àÎ.;Ñè@40£$r¿s>2£À¸È27|ÅPQ)Ê¡ º7Kóe1̳:¿4Ísls> +R°È;Ã(ïAËóS!HB$(Ø` "hB((dÈ註¢(«CôNHl¬¢ Ê9cÒ8KyH5>"("È@n§¨@jªH»)p +@ÊSs P¡6xª2rO¤êØQ,KCd5AKÓßtÙ·j)Áqi +£XíÞÁF2]â +#]:¦ æùOSýó}ÓðSbvv§)·5®Úm\ÝPP3%Þa å,ØÃ(ísáá +|6KÁ ÃHË ã0Í¡ê0ä7º§6±6d@¦ Éb»ªB;SÎXÖùzq ®óCc~®0Ø@;:Ísz®¯¬ðÜC7áp@Ä-á �¼3èª}6cNw9,ä6C(åt)滵.ÈØbyZ\! ¬[Ôð¹Ê½Åâ7PO`a¢ ¦ÚxN8Á+ZÚ·ä6M${MÂĦp#(^ôoï®úRI +phúÓ³tB é£Dlß*E« ,e]ç3 +Aë738Ô;_n ³°Îè+·iA¤0¿PÄØªî* +Ám½ÔR +e æ ß(E_9K8vàTY[v%Ï5³6kÖPnrËsÀrÀàjLeOy@3:bDJ¼Á8|ÜÓ¸eؤ¿0@ oAÅЦ¾ÖÓ9 ¯G(æä Úá1ÓgLñg^y; ¢|ØJz"Q;PÒÚherÒ*°ngep(¯é¦,Á."ñ=¹"¥Ä½QM±¦[ªöðUàv~H¶;Ç]óTuBE.pôïx-HiÃ5Ö¾ÑÄÂT4é&¾K?j!½êM¶&3Ô Nu´9>È.dä¼DÔ^¬d&xÅél»qT)p§Q0S`xºcOè#JÛ,I³.×E @ggnßÂO"á,'pÐ@Cui¬MvÆd¨ ,@·¨EÏGé´ì²ZEôyÈ£éè7Q6¨0a¥;oFby/°ä}Ýô]ë®°4Dm ©¬IóFª¡Tª]Un±Ê)¼*N)}1iU7ÖjÔÄõ³Ü<¶¤BÆn" id¿sÌ9¨ @ô9 ¥xö½Gk5çÔR½FÁÿ©`¢®VÈ-Ðqú <=;0çÓ?$l+²ô¡Ñq°ëÐÙùo ¦!8@Ó:§*ÃÍ T9&[¤ªçMêIØÒ°²i²xà sLW«öÞè TIäthÂhE ÁT'óKAÀ\¢Ý¤ãäÔ!23·;8Z@¦g´+°¡Í`¸²ºöÔr5±O(P*wz$ÒxH:¸¤àÜ+q*ÉÈrcÚ{âÇ/÷G¡@)ðKXÎÀ2s:¼Á« áÎä¤0wíÒH;4Æ2©aüu%å´Æ«ïµ¸Sãn=Çòúáµ: Ç©wÍq©5*¥ÒõNI5çº3cÔÐ~óÆAçynU+ìx+ÈW(ÈABÿµÑ$CÍïO@3h³ñM| ÊXN6%U¥Ï + ªmhQU/ÅY® D²t E¬©!j2*´HòØ!enª-_UÉèÈ«ÑäB ÆKbX¨á8gpp9 +A£aùÃRcúÒw¶ÞÍbîÅvo høs¡Ò¡¶h°O ÉÄ44ÎÔ7^ÈttÖlOªÇ-cQSÜý¸ÛM)¥¶ò ÓO[Niàe¨#ÙqÎ:ÅÐsxíg;ÚAw%}ÕØFaÇZã^l F5=K äà\*p~Âølt%ñ?Ç1+ +åS* +ï-Ù»¡AͬNÓ1}n©HN·×*°Âóv¨ªåñ]MYB(rlgFZiÍÚ6j×Ëd"8·ã- ×±¿¹n©êWhò +¥UÎúv¾¾îjå]^î +cC`¶ c %;4eF®þ´üÒ#«-±Cò +çL22$r¾=×¼÷À Ä8c´È)G<néßïÒÎÜË?;å%u"Lüö»²®ö4´á¸µ%ë¯Ë5ýôW@ØäÌ}',åy`'¡\^@¦PE q¬r0 #¥¶y$î!v Ì5BSfU í0íb[ÐüîäýG)ï> +`ò ÀÞ?çDmO^Ùâ.ðO#öðnà\ +æ^Àè&ªMâ.jDè +Gঠ+£$¤B pàê +p^ ã®'Ȭ)3üÀÜL Ë>:í²W"ü,"Æ,¢Î|'01P¤5Bº+ðÌ0BÎL°×0Ü;Ã$2,343<4Dõd>ÿB +endstream +endobj +97 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +99 0 obj +<< +/Length 2838 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C ÑØ\1B £zxÔo"K +LÐ9$Hdòtðf0ÅIÞnhtPTN.é5ø C*dòðb4md3©Èæo9\npB ª´0+ÖHªS$OC!(ÐB9Nf)ºÌça@S*aE£!¨Ðd(6g¢iÜu'M¦]mÓ+KKë+î×o¹Ñom\Øa9ù<¾m,gÑ.÷Þ^»DrqL ÊbÁ �jú>ÏÃô¸R#$Jؽa¨r¬:Þ6 +c(è+#pÈ7âbÞ3ô ¼<þC£ @!# Ê'Ã0ç ?d, +ÃØ:¢àS@È(¤!pXb¥á¢)'ÉrhAÁªH8f +2ë&ÉÌÓf)ÁëP2cä4 Ò·®Mt%¡2J"Rz,$!pe'¡Â=.¦ªðQÃpì?Äq,À°<=J£G¥àZè«a¨è!»2¯¡ Ñô ã0A м;XVIøïGD=^2 ä0XÚÈ!uTÉM\¨Ó¾¦S(* -UJÎèTIÍ 'å@éÛË\T2R* K©V¨\j½:)°zlÙÃe¹qä 5xépÅ<6\C ß`Zhfßµî¨= U>éTVõIS!u@QaÃÑ �¥zÝ8l¡Wý¶[´UÁqg,ó|Ý7^ wÌ4T{ºMï¥Áaö[7l"Âu qSàXQaÐË Ãpè0øv!^Bõ®©§¨P7ï)øçWÜYecf¶M:®b©u#Øú£mdjÛ2¯Tg#¢ â°<\àPjÁÅým%TaF´5Ñ_Z7ÝõßË«VíPÕLVÐåmXXR·ûn߸Õ^@QÂyþéè ´ÄxíøÅÜCÞ93ß Ù~!ÃX¶?¶=i6ìôëD§ºZ+à=m{åÈA¡#G©&2(»Û /,ß½Ul¸kr\OYq+̸0i1ȹé¸6 ÍZÍ}¬èR Õ¤W +è``ßÔQUÃ1¿zä#vÚ!«Înò1({5æ]¹R|zÒhë{:5̦Òýw*$ø:ôfUk´kÛ¶¶ÞDOU/ ¶°@Ø MõªÖô PeÐF÷IûYA¤2h ÛÐót3 å!7T\ô@w?7Ç|cãtoªà7APÍT À9&BåL£O=HÐØðÎ0tÒZÒh()0¤°)04# pÂ(X7d&Rx©(\6^7x#ÁqØãHõ8V w ü<±IPsÙ»L¾ÌÙ4檲 ÔMµ_ &ü."Lΰé;C*Ò\7ô]_4ÜÇ~]±hÞÌÃpgj«PÃÅ +{kÓÆd/ËC» +áL/@ÂB´·ÈßÃ(aò8Kx.è"´øPÝ$Ø¢¥ +HÆ'JS¦*¢hS(êðÌCpc|O:1F§âUáÔÎßÙ i&í&(2¥1&5#¨Ögô ê·ë2\Q +Ñln¢Ôêú +oqèÆÖ¦30A¼Ã/ÅÝRUUÕeÓqfVD|åÜò®B PZc>³1¹¼ìc ®AFVº_ ülx²uò(+)a\àÒáK¸)/«X1tîàõÙÃf+¨D ¼W©®W ý ÆpS ÈàO É´T¦±OjCxx`¶FÉK*§y°'7bgЦÂE +aT&Fò©«øhWN c_,4ϰðÀÌ$»´ÒâøQGA¥Î±U[!d¬£¾x ðÇ«ðÿñ"®wK÷]LøE7@åäBûÅ +¨!À8ÀÓ*Û²¥Z£'Íß$R>ß.ê-ë&3°*2ªæÍ& ¢Fó¿zfân§(Ê =°A9joRêp<ΫÕú±'¤þT{xiãà¡ q=foæ¦YU`)à|èi0ë¥qU\9ö+[ÃvCÉ´ÎåÕâ(ga¬(ïiª¢WÊehX;Ŷæ£SÀªõg*Â\È£ó6¸©ëç4±30í!ì}Áæ9mÌCtÏYï>å!¬HÀ¡_ÃÇ ©Bù'ª]±ðsúðQZhtíH&ÕK.KLKÁôJK*ö¦~t¤ohÕâÃó¯¯\ ·O>ß¾$-ùV(rÛtRbJк"íâQ;ßAñ5Ç7ý¼ãæ÷^@¼ZçäÏ´ã"çdgEG6ÜgS{ìdºUH 5rom*ø-¶aÛeì^ã+ od«L@ÊL×pË®5 ÖZq½í¦±|UÞ))&BDÒ~Jd=+rUÙ%+@Ò&¦2Ó87Úà Üõ' +# ÅRM\æ y¼vpT®¾Z×ä=ix¨Ê£ÑÖüåÒ©¢3ÏlñZZC>V¤Ôféû&xj¸lE aeÒ6¼UïNaÂÍ%ÆHìÆp0àwR ýé½l«®=×¾ø~Lp´ õe:sïXµ¨ª¶²:$¶h'Xª¯l/rDPRoxS|·ãà«fUêEÀæùÄØo¢ú`@Áï,Uçø².ò@îö]úïâ¯J¢H7ÚPä¼TÆÀPL8ò"Ô ä²#ó+xó&óÂ.ô$4N#3ïB-êÔ·PVOг/ +Bóå[pr[ÂskÀPk"< ZÖ N)ümcùíI �¸BCOnD©øÖ d§ £Â÷hªóJ:ºGV®C¤K ¬·¢dúþ.|^-øÐæ0ò j<åÖ) pZäà +²`OPÕÈ@n0Ë2ê0ÔÍ`Ë î''ñv1} *¨-¦cÔ:"p"Ã` PTæ0að`J +ºF´ðPâLb¨0Ð +`ò¡£a©QÄýbôH)Éøô©ädÉf ïÎÚ.Óé.ÂÑF?@@f<ã|$Ö/NDßCf + ÌcEÔ +jbÊIà'*î¯*öê8 Ü^` ¾F¨ptE¦òh0;Àæãfo&kôÝÝ&òræÄ='Å$q +endstream +endobj +100 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +102 0 obj +<< +/Length 1845 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$; +A£°¸b8 Fôá¨ÞDLÁSA$S*IÄ2,ìj4 + qÌèa7Ì£±M + +ÒÅÃxÕ^Z0R+UÂINƨc7®h!PU7eRLRFaͨu9Íç,+¼K2¦2B)JdØÈd3ÒG#©ÌÑ»å«9a@`ÐFV{I°às=L¦ã©8Âm¹ÝuÀ®P(Z0Ù`¹îöÏëvfà ÌçÞðr)C1u¢F½/B°Ø°P¡ �XNlÁðè* MzÈà2(Ì-Î Æ:xÎ!B(*®ª! �"=ÁÈ`:Âä2# Ê(#¾9¿O#`Â+ë +Ʋ ®£¶ëÂÊKËø`¶¬À&¢pªÞÍòÔí;ëÊô@©å±.Ò4 +ãpÉ,Jcpé?6 @ÉÅ0:SAÒ1ý-QÔ«Hò´µTÌU(f±µKÄäÒ-i#°â;³Éã î)Ä#dÖñ¼¯=}J§k*:.h¸ôüYuãKZOk¥3[Oë.WpôÙÚ@+³òeÆE"@óeK¡l~ßH(Ü¿/¬FiG*çF1kjFâ¤7 ¢2F¤!¸, ª2ôÀÈ7âàQpÚâ=\ϵ¹ æeme4VY}âX×ÕGÅþÿàLfEQÄ'¨: ÙHÈ: ´X7 (Ò3¤&$dEF;{0A9΢¨@4O®Î¯,ɹrà¹iìÛuÀÙx¡$ÉyÜ¥*JÔd¶.8»öþà"[ùñFU_v) ï|hÃ.pöf9jû»ýPAÂy{ù¾rb÷ËÀwuáÒtÝN½¨øú¨A¨k#N·®ùz¾Á±lvÑÍíT\³¶ìó¤í¹î¼1?½82»0ïB.ù4oý%t²MÆË<#Ýã*:(Ý&E ý%ÊPÐp¥4"Ä *Tµ×iÀÈÐ`ncB ea9àI],e¿²D � + h ügúBa0 +#f0 t³ +q@î-»vXË=cQ ¬E`I_õpBɲÀ2CÄÙS lxRæ2p±1+DçN")P*25£H])@áIÀ ÁÔ¸Â"ãS"ÐÞha pì0°nO1ÝÏp]hð¸ÌtsÌú;Çxà4|c¥L;,#ϸ@ȽHfÁÔÈ äÃlRñ¨óH N*AG7ç,ÝĶr¬Ô¥&'á<#Ã(xhêx°rH x¥e%e$´E$2çðOÿrÀÎ-°hsÑ,°~éÜÚä;Éj|LÉ xl °9©¥b2@Üи·0¡º÷_4qÍHbSäE6EZ%æ]Iç!±d@Ç& ,£³¡F\E9©¥|ÜRJRÎàÜ{ºlÓOaÈimØÏPÃÉ 0iéù<Ú%¥¹}ðßF+uwN2 t2Å0Á �E¦ÐÈà +¸Sá,ð8M á À +t +E»6ã³@õ±ÏpËY ãW¦YqCK\m7PIJ¬ «D¡ÊYifæÈ7x ºÏC{Chí(N á@ £/T !,Û;5mÕ^·484V)ëo«0s¡À8%3í[¸M÷ó^z¯dAÌ0zئxm±VØÇ}Cde¸ÁÞK<°épÓQn5rBý@® +U¢³º}QæQ]º¬bÌÛ[8ïìõ:%jnÆ1wí _ +Õv Y·Þ[ùYÃ-iÕ®H5Ä«b±;¸°-7YR«h¹¸g-ÏSè\$#º÷Àß(¬êCá1ðí')X2 ´:ðàCynË41¨ªgntÎÐîá Ëè°wA¹üR +endstream +endobj +103 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +105 0 obj +<< +/Length 2167 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AhÊ9AÅäȨDÍB!Âc:NÆ¡È. '1¬@e8lFaÜt âÐØi7ï&(RT5QÈÃU* +Ô#¤RX̧B¾ ç2à ¸)Ãb1T^<mIJðAAÀÂr0sfS +¦ÆÇÍcSáìÁC xÂZÍ'CF +H+ ò¡< M'Ê ¶ãue9Z +«eèr4¶[áÜ 1aNFSi¼ì³7È ¨)``ç&m Ä<¾£bþÀºÍK~1KZ¡pl¦IC0:Ó8Ï4 HÓ0 + +#5X×Á°fË*étç¶#nÜ·mëU¬rA¬gG1REÎd#¹Al*Τê:ÑPZØ ÁÀiËnB¹±¨è;о' îë¾ð¼o,xôÒÐb§Áª0áÄÍ2FðK)©I¸â¾"ø!b( *ÂH"l2ióÖ·NO;x¶Ã Ò¾¬«c¨²B.JÐ +øÆ2¢Ø278[\ ã@3 +¨ç:¨0«) DQTc¸)"p¦("'<iàcN!E>¶T1êøý¬+Ú¼·pæò®ËÅ\Ïë@¦:n¨Â]õ?spÞ:6* ;ÃSÓ1J4% ãæ1¯Ýñëcò7+Òç:Ç𣸠+¢8£ÓäüåD Ø8cÐ6#æ'GTY&1ùªI +Ý¿<×Ö2cM~^ãa_±à@:k5~7Un(«ÂÝ{{ ¹1ª¶½V! ákÐ6°(Èo{ Áczî0°¾Ó¥f+`Ý©X¾úøÊ3ÔkØ:¡dUd+lðµ^¯®£C8Ðêîª;ô! Õ¶=L"ù¥Úãs,»Oºòp"¶4/ûð2®Ï#ö; #~ 6AØÎµ½7ÃöýK½zc4"9;«ùáµØË`c's¹±Â·ÀfW0u°àóìÿôÎÚB¨¨îßæ¤¶ÂxMA> ôÊJØD !&ð + +á/À¨r×ät, + +u¦c Iâ¯èØáB×hýÊ%#e_ð( +a)ðÕQ HCfÉ%²6Îßk'lÐ 2¶ZgUxwfé"ÖsÙ"43xö4æ¨ÚEhë|vnj Gjªµ³È׺£m ö66Êf!²-¬96ÖÞÜ]«tnÈA¼·¶ú¼mîEÃ5Y^Ú3-áµZXàÍÑmUEíÕ5ÌZKÖ:I;ÅTëH_aI¤Py.®3D¶>¢S§@2p¦%Ðe¬à2¦IìA康*Û ph4µ)@aM,_Á¸É:iÕpFܶ9i±A8sKS9;°vÈÖKg:rì1yQ*t?-ø1®I¤iï á²æ½³>eè78VêY<CfÒÈZáË1Ó/ê ÃNáeôÌD=V{"°zÂ-̦:ÍÒ +*FÆ¢~[¥3sm¥£ ɰYCÁx òõ¥³^P8óÝ>V6(ícLÅËó%8ﺪ z6Væ,Ç3.³¨Ã4XT9gëôM·Þ¼Èaµ¹xբ˿ S á´1H}ê]^åaºÃÏùngä6 +}ªSIóXêIGmDXÎ.gZa\pinrIºÌÚ~ß]M`å=Ö8¤ÔÌð)@âyO±94ëAXËHbv+¯cðèMâÄ(¨ Ý\©g-e½Ñ@àÝEÁר\±±14°½Ëtø´Ycs.uÐ`FA<0hý>V6ö]àÓ'ý ®wÂëeüô©0 Jî¥hîD±0#e B-µ«e2áàkûÔ>!QA$)`Oà9[¸Në*;äª[ùj íOü3e_ ö:²Þ<Án+oñ Ë w¨P¶®+e´k_Àý«2º+d8(ÖL§ ÕæÆ¡0"pvxW'ͲtÓ 8Ó^% fÉÆRÊ ³ù Ì i{£4t-áá¥[>WªÁÈfßâØÌ!÷W W+º`2jÆÅ¹Fª6`Q6aw»kÃ5%¼Ùq qÎ:. ÂHB 8# <öDA®ø¿²Æè|Pxgv!|Ú +ó_æôØg ë´j¡ÂÒ"׬X¿Àì'ºÌ¶Ä¬ÈFUêÕIfñuów]r¼^KÞýT¢lphùÍ¥øÞ3 ÔߨnñĶ`à +ÖÃ`w/d¼±ÞU`µ® öQ¢±);*Àj ÒÂúÂ_KªÚÔí ÇL4ä©aEÔ³ïyt^#ĸ"ô`b A¿JÇWÝ©%W¹½lÂ+ÀÕmBý/wäºèbH + +endstream +endobj +106 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F11 23 0 R +>> +>> +endobj +109 0 obj +<< +/Length 2600 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$G +A£¨¸c#éÃIP4§r|R'J±¸Èh1 àa9M¦S¡ä 9¦3IÒe¶ Qøäs:fóqÐäo6 æaW:2YL^7l¶M½¬ÆhШªx¸l5 RéÃE\-KÈ£:îØ£Úo;a7â Àë3Ì|Dgrîó¸Öe<ÅмÜe<bs¸ì¤¨jU Ær2n¦M!§ìkk< Ê7ÊéOÃËìË+/¢à:AL#ÎôÂÈ\÷> »Z×¶(Ønh[l«¢@¦!¬`Á`-0 +ܸ.K£û¿+ªÚËíÈ7»¬ô & ãÒ=1³"9¾ì"1.ûTø¾m»r7in+ø H$B*v¡Ðµ-Úâ¹®«¼ý0«ûI<´OðÒ0`ò £ð4²Ê2KÊÀú+SB»5ͳ|â! âÂv¬ás<óÜ}??"ÐLÄɲxIR°@19ã£Lµo1Ì©¬Ï4ÍâtÝ8NAhj¥V¶Õ±ìúÅV2ZHõµÐÔUGRM*=Rö%7NÙMQµ%Lq8gkÏVÔnÐ2$BÉUÄA ·U}`ÝwV0d$b£{4â°) (¢ ¯yx¯ `6Ai%³#x&ÀUùlÏøÞ6MåãÖ9d @.°à6#Ê42"ì.!fQÌ8¤ÍM"<* "xH¦,bh' +»$Ò* H%µjÏ}ßdfzå?yYõK²8¯å6p7K +À?½DA]¶WÖa17JFkâ(,K hßsűg5ÃxàÂW¤BÎý°üiÚݧ2NJîßµ4ÓYÉDb76´âOÓÂø¸4ê|B¥ø¤MröDSXüÊÍù¼÷@(dbvKß¼ïg{ç¯:Û4üËÜ®ÔÆÐdx&"Sfò\Ã2ko,ú¶fÐÚc@§ò@æxK¨mR:ÂÚ`iHÉåÐ_P `lPHÂ'Ãyx/Eð¿.Ö®örÅYðÀ§À¼ +ëgm-¬*§0p Ië¦_®¥n:µfÀ×Ið\ÄPÚKn¡7JsÁÙ?Ȳ³CÝ7ETÞ¥ÀäõTxÀº!fµÍÃâYQ / @TsèЦVnêy/eô¿ ¤rÏYWáëÅU 03rðûÃ1î8ÄH²JÌfÁÌ£Di 0h 'Tá'ã¤AÊ<§4çS¤u°n;.C#¼x#ÃnUîJç8ÜtnͨuQ#ÕrÛOëy+Sú̱ !5U\¡T¿2ñKßeSÅe¬¾WHÈÅMéøjúr®y'L±Ç8!hÄ ôöÞù¶ÒÁeЬBIA1hb?_L+Îfbå-F¨øA@á±¹À¬Ñ3'ÙE'ãHâ²ßÁ&0s,ï©XcQ á,¨Õ~gÁ$(¤ÔDG7qôú®QIªÀÄâ¨GI9¶ø»É(y%eÚ¥u,<ÓC!¢Pn]» îá¤6 Í\ϸ ++wUä7W³'_bÀ'-¦d½ ZC1êJ'»Ës«P8t²OμW¢ë +Ó o ¢.AïÐYk ò¿Ô£JeÚX?ÒX»M Ä^µð¦Ô)Ã|문e9&FÚ0e]n¥;(ÀêaWáT)²U Rðæp#yD,JÕBë£p`ÑÂ'-©`ÂCa¾Ò³ ÉEZ¾ªa) (j i>¡çzÄKA 4"QÊ#ئürø4ñçå ±LäÓz¶`9»Ãp-ÅØÃ(5Â[p> ª¤`a\½Â¸*«3åtÃÎd© Ía¹"W(ä+Cbu G»°ú}xæBa°æG ÅÂIìa5K+à²Yk=[µ«/¢Ã+%fµ£3âÊ}HÒ¨f®c"k°o´¶4º×Ã_¬üÖVb'¦tݺ¿Z;(]®M~aÊÎ[?m£±V1@\Y_jímÂÄ2ìÓgE¶³¦è¤y®íùx¾ à9 +i¯@·/dx)sìæ2vqÏXlal113I Ù2¶LÈ HØhÌ»¡J(FÂØ/'f\%¯óAlÄeHMK 9½9zchià cÎ^¯²ÖbÍkCÄZU3úëtÚ*¬q´(Ú·®Ôâ³{_¤Þä`óá¥5 Ê9¢>äo6¬Àà¨b î/çñÝ·w_ýà¼AQ²s>{´AMt|åì·ï:>¹§£Ç4Ë´0sãæ>¡¸+È`»>Ð/¡b® }t|áÒ0îJ`S{üºã>¡Ëv¥àu¥[U§!azvê>2¥ÝPÙuÁV»{^;ʯG]<»øM)}o½ù×ÔN_!:¡ !4'·pÃÀt +]÷,Hx2 +ßüµôRïqN¼ËÞÜYËqõ¶¸Ûaãtï±çòÆÈÂ|ê¬G$$BbüofÎøïÏ /ü)@d)®l«LàÊ#t{ãzû/¶ø¯¼ªÏÀ,ïªÌiþè 0î>ΣXLð.ÀÞÏlϪ¬)b¤Â@ÐJ"úÐ<ïo´øpEN~Ñ-ßïÜ7¯tm&oû<Õ*4o.cókóIhü ÎPÜiÃö¥ ~þzæ,¨ëÍ ® µ ºüÊPêIêê«´õn²¼+ÆÿªëðlÈrÀlE0èúìYû°ÌPJüODü°VÌØ"«Ð!¦lùNà ` +endstream +endobj +110 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F11 23 0 R +>> +>> +endobj +112 0 obj +<< +/Length 2708 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* ¡PÈ ´b6£ÂѸ¸b4áÂHT ¹¸ÈP0¦ã ¤¨j£¤¸h*¯Ç¥°T¢Â(* '1ÂÒa6NSæp2Í&cIt4DsMÞw6cfhÞff3XkU°@oÆçÍØËuÂûBÕ»à£9; Úu9ñLY£ìa6L¼é?¡Ñ4ºüi ®N"ÈR,¨O(jMûX!PUMKÆ»ÿTÒc0âõ:..«¨à³, Ã{ÑÎc +´n+~ë4 @ÁÀ3^;¶c#Ø=Ï䯯ãò4p32ÆÁìû м2ÿÂæxà´°HÙ:ìÃóCpêÄ22à ä7#+¦;³1hÒ:04¤äÈòHÈ4.É\'(EÒ ½ëÚÎ3Xõ%KÌe ¸Â<°#8 ¼×ű¨à×µ|£JqK © +Rº©ÈÚ°©·!¸p¡kã⮫+øÐ&c¹!4z»Òh¥3+¯¢À0L#XÄ1RȲl«.̸Õ@äOìã0ý³TP@.4%AG,u ¢jstÞUôPæ.2å^lØé"%dÂVèÓoʸRá0,ÕÍt\5øÜ4#¨Ê63EX¯&u{¥×0ýwÉn«¯a0T x9±T%`K©aµWÓn°Uãiµ£¤â³Nv§bzÙ#¸ß +FÕ ,kYáÖtÂYënâÁ@ÂÂC¨éÅ£¢1wS´c:3Äs¡{aÓ|YLkýfG7¼©h7 +°sL+WÝ\±-W¬]³VϺmz7· ½U²âëøØ8cÕAº Õ¥F¹ÔÀP[Á*Ü.Âìu_-MßÄÔ2®[bÔo«zã¿òª`sËõ^ï bAÉÔª`¢ +ÞËØè:VÀ]Q©=í * fl4¶ÉM>[%<$ÎKF1½ç �_« +VlKÆÖì)Wï¼7|}x6ã êvÑñÅ6M±°- bnÜñ¾`Ç «¤¢d@¾0´ðbÃiêDð7"ÔÃ{ȨÈf4˪C¤º@«ÚËQIq-ÔHaKtyp©F¼âª2ÒzÎÄù6pPâÂj?!´#ß騾`û;îVÆAù+¦sà«gì0é£XeÌ*G|ú¡0Ý\qµìÅf+01Sܸ'^Õ{»±ßd TÄq*¾$D£b|QwÑýÏGE[ë¥Jf·è|3OÏ¡ø¬ÂE!Pò@¤BTEÔàd 'ï1¼rÔfÒjràÈ (´â«¢\& ðåDªLÀ¿4eXEW40tr 8A%Ô+Å×+Î+¶Ä$rBq¸F0@B IvÁ$"à¨$ô|*²DÌ"Her@6Åðå$¤Î¿cqCo3¥¶9r7AÜq#Fcý>çèT°)Êé`rFxÏ 2ólS¬zS KÉZI#Èë1ÈàÒÉáþYA°6ùÞbfäÞFrýêM9£@pI*¤71°7&TòuH²Å58E +4$àBÅmÁ=q£fZÉ\á½&öËê ¢´Öô¬"±j'ë<ͱa&0¦BÕ I +ÄL©c&`¬OVÇ:~èØ8+$ÜÈøSáX$Ùp&ÐbIïèÍ@îÃ¥Q:-Ô(Ãó¨´(ŰTqÃA²L0ËÐÒsîj\IÜ4;²EU@¢co©}$¢Ö3àÈ«¸n:mU(45Z ñ®SbWY"$µX8blNE¯ Æð7ܼ TPM°¶A, �`¥»3¬<2Yý;w!4)râ]ÔF`¦òß÷zI©a½½Ã0A5!¥8b¡}fýTf]bÀ°NßÂE6 æ¡æ ¡§ ̨áºÿP!©I%ïP<Ô 5!àÔ< +± +¾æ·µ' <@PSÈ{¸ð¢ ]H³°"¤@lõÌÄ$dôL§Öa0uÄ©|÷bûS4ÓÍ#IªØy³40¤ãqÙÜz6 jarÝêma°o̤4*ssVnÙùÇ9MÁp3!ì®G¨èÎ#°0PCGWFæmC´¦ÑGyðe¦6Üϸ¿æMMhRÚ{Ë7í@]À3!ûC})½¼úw U»îhÚh-ÑAècZàî¼ÐõñïLÛ¼÷Þä`mó§+6¡Á¾ðÜV¸([ p) ¯ÂYAÉüÁ $Ó p>ø(*Z± JÔA3¡ÓÂ[àk(ã¡-D3&êú7äüg.\ô.æ;oÃ-AÜÁL< WñîîüUoNTõ$µé6+ Â` ë a$u´ ²ñà4%2-wÀ]÷tî|»pôEþ|ïD©KoÕ̵E !ÂøõßÉw'ñÛÛÈo~¶ýòSª½vÈ#mÉ"Å"Ô³ç`_C2ÌR`ì)º+ö°»°r²uÖdÎï¥t&ùø°SÐGyÝ5F)ÆÕ¨Êiï|®¨½¨ß`fÀÏÈÜK)äÇbz'æ¸fÄvÈÏ|úRÛ¤ÍóoÞ/<3ï´ùÍê/¦/½b^µl:@o8OèGp6GF$JFF°(QEØ'p,pÂñ'.>%.!P+ÚÔ-FÌpuåEå¬kb9*I¦ [Ïî3àç$Ä¿ÐPÅîÌÊZ%*´«ÔÀcæüe^¨ äãý§ô×PXÌÇ lüd´âÿδû.tûjÂ^"éSi!p&"ÌL¦'jÖ±C¦$̽0,±AQZoªe«°3CT °sðÊvÇðpèб1æ@þBÔ2þL¼:kö9 Ç¢ÛW¯àaèrn£²å¶3@æçHnq¸i«ö ,rbkº"xâ~ÈѰO|ëà +endstream +endobj +113 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 114 0 R +>> +>> +endobj +116 0 obj +<< +/Length 2841 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$G +A£xØa#ÅäĨD¥%à +DÌZ®ás`Tàîi7 çq &Ó)Èçm·6ÅÀÆa9N1eôPd4íf뽺àt4pÆ3a¤àb7à\uêù1`L&»¾C%Ëf3BÓ±¤Êwºf @\L 0Ïiµ1"y»yÞNÆâ(PpШñ.¦8¤V:X'3wáìö¦âà¤]äNþåÅÝî3Ï8L¿®ÜÌ6£"27x@À£xìÉ>o«îÿ ãÉ7ëPî»C*Ð3 Ê9Þ<£ \R#(Rº°n,J»º"CñF+³pò±LV£¡q¤§$i;´«ÊÐdÆ«"p0P@9«Jî+¢ø"b ¤'!÷Kø!ËóÇ2Á¯´>ä ¡£ÎÐÚ¥®«¯3<ö¼Ãzä35â¡©R:ê£a° »AjÀ®&Ihh,i»<1Ç0î7·mÒ6@ô.5£Ì§¡Ò("' +p* "4áÁÃ+ +ÝOUT:7Ît(è6\'Eºb Tx©&Ó PP+bø,MB}i[WÕy_Jã ò62CÓeˤO!F(ÜgÉtʾé¹m +@ç Ý 3£pÆ÷¸Ãà2mÕ=6N·±DTA°\ÒH¥(¬«jí¨Ê4õ:'a¬îæÁ @1ãC¤èÉé\øÜô¨4³vW¡2*äùKI;1¾Ç«\~äRº¤J^enÚÈͬ«yäh2; j\eHpLp¶Àp¢K}ñª¼AÀ\аo; +Lê91Ò +#H-º"¨äÁªp\ÊIZ¹v +¢+û=w¸Òâøãê1Ô¦ 6<â{L9,òÅe°#§FÆ0& +b.ùïúðÃðñp¨rsw÷&°. +È.uvtÅ·£VáAvX&EÜÔS\îã_;§}-ÁöAJüÜ` ÔÁ(ÿWÓs@Ö0PÑô®3(ì]RËÑh±>¨û ®#ÎÆ +Gðä¸ +R̵}CsDÂÑáÀí¬ÂÃÊbÃiá<6¶Û kI,¨·¿"6HÙA'n Ý9r ø9[qç:¦¤ ÷a + 2~ ıE2`H fZ`(>Òúßíeù8· È3ÏéjC8Y`0Ô0ò¡CQGI·8 aÝ Ø) Pb + +å¤Â P® ÂM7ÁAÓ +'â 90Êã;~ð$By=/!a ±ÍÄ?å<x2à90äe¤Cu0:%Du%à4@ÖR9@`Uð(`&JxÄI.þtFÑIK»¨÷¦Xoqz@Él gÓ*¤s}È¢ÃyO0á´ÌzÏl`ya¸¡å)²J°1ÆØ4D®ÉÀ ËpªGÑ9´ÄâêÀ(K¹e´Àè«1tÅD8FƤéSw+èHÇ#NQç-ÐÙ´¹ +s £þ¿C`ÂÏëÙÏ 82Þª fB)èÑÀ@ò]ýF-$1²èDó s"qêÆ1.iDTʪÙe Ú(¾ÂÌÚzaåPÛ6RÁ¥9P0J£JªL×É ÞR¢¬Jê½/J Zò¨Ì]Ù!2ÈDgs@Èzd¥i-t*p²Ù,jµr%T?±2¤AÁí»Óĺ³©èõÀÒ{ª í(ÙÔ ØR}£ÒØÒ$%<0QeÃÛ^¯¨©@qëñÄ%È á(&0⮩±« A¢ÅÅA{#FëM(ÑÈ`óµ Rî`©âÙ{XsTu®aÂ!E ØÉÔÏQÑ4Ã%¡d©*{ÝÄ£5ô»å;ÂÐXK*ÚÄMö ê¯ÜÔ0°BWÐpfWÕ[3°9Í9/'»ºwfÔÜÎR_:ç{¶vóÛJϳÁ,ÆÒs7º5i9X×dÃLgs§3bÕÓëh;ÎÆ¨å¶¥ÓZ(gÆ «4WbìeDk#Óy.yź:6¢V.Zt ÖH9Úqt¦Òû+Mâý;°¢¬ë»#J=Mâ®ÎÏÙU jý©¡v¹bm`'-»·ÐõdÜ[s1MÓÑônN¿HÜþ1tQZè¥9Ëz.bTvD`(Û07ÉÈ{¯~édgoo0u .ô+îôXç Fðùç''¬ ¹¬;Æþ^·= < j3IypëH¿*!üO¸5I õHèØs¤q7ãÒÈÅâÓ¨ÃRÉåd8 ðêCæz`XzYÕr~ÀëåÞvs\gb½.$m@ òÅØ¯äcdÐs >l)â8ŰE,Ã\B5BbFãy &Î~u"pÁx À#zT}è).°3ÇäZ +)NÔªAHK¯!ï`4%ÄuHÒµ#Ã,rV4vÎ)Òx§p½¤=ø÷IûݽÁSºXK*×¼4Iì2ïÊ mÙµDÂd{àøR¥`PÉ BÒÿéº ¬ C)¾V©ÂiÊéÒ äÊÞ£¯X¾íÇâ¨úEúêÎïnIÊCê¡ +ýélëïäñ + -âB!Ì¢îb£ZÝHH"lÙªÿÐ Þ¦å<-¨ô³ +`Âêáî¨ÀÂçEçå¶ÈÈ<Ñ«ªë'|1¨ ä83 ëØÓÝàp*ÊpËJ3¥3«>8/"ÔY%¸î<í +x¹|Ðð¼¿+#z·kz·ðÔÌ9 æ<æYîFµ¯ò_`f¿Å²JjÁíÎ8ÃÂëkæs°Øg@Þ&Æ°ç¬ 8º¨ñjq@3¦]êÂ/ãi£¦<jq!q1¼jÂT×daÏz ÌòMÊÞà*BD&0_â|¬ê< àêYpµà£ï¾Á Òð`ÒÍ%în±¾Ð +@P,ì.²àÒ.Å/ò.7°éÐí ÐÛ1õÃ$7/`òò¬@L8Æ.Nhó×!ÜR*à_1ÙÃè¶¥N¿NfxGÂ|gÊ) +endstream +endobj +117 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +119 0 obj +<< +/Length 2568 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT1 B¡AhÆ6I£qpÄi2*&³@P e3 rÈÞc. +IPÕF#I)PÐPÔ\5"ºÕt@m:Îq¿b2fa°Êd"ÈiÆÌùyà@p³ñçS\ "Í&ìÙÌÞ ÒΦáÌA«ØLzC¤í27GS¡¤Þn[mà¡mÚñz¦ãò(*1' ÈÂm2§-·wd°jñùM±ß7Îc®U Ý1Kö麪Ê\*)®4 +ãpÈ±ïª +¸¿ +XªHÊ÷A^)Jã°4 -³¸ï<äÛ½s3 #+l:;L³063Làðäϲü©¤,裩$1 @<:£Áëy Шs¯©D<ìÄ,ûºï¼/@9 ÐÓEÁ`ļæ0í4£Çp§(ÇïÜëC0Üëâ¶6ÍðæGÒQ*ÀÊì±OòìO0LS#Ê22î+Æ/ñt×6 ¯DñSn7=ÃÚ0ÒÎEûÐne +HÄ *ÏTHP6OÑ%'BU}ºô\µQÒüÂ1Ìqm'J¸Ãu14Óc-:2ÓñKÕÔµ=S9h2=V© zô¢w`½¨{úÉ8Àa¤®'!4§l@¤ð´pæ¨j,®²$½áAC(¯A°bª\÷3[;,KJ:`! ÑÚ:ÃScR6VKEÍÓ3TØí´4ÓVÍ0S-jT##lãåù£/Ô#¥¸¸[ò}Íq¯zxAt®é%Ò%èð¨O7:ô*^Eì_7Øf£Ìò`"á^a(îXr]¥!k$9[ Î<Ý&[ØB ©\K÷êXkvºHF·xëûÆì¡¾Î!¬ÓP[×ÍúñÔ-Ç\0ñ8n¼jhíßÉâû®¯Â»V2>+*δt )'âêa\#Á¨b»üúrl^¡òùÊòÀ@!Q]x¡@ÊìâÉó_`P³í¸0®¡9tw@buAj!`TALuN!¨¸µÐº 4-`»D ©8lGííÖÌ +y0¡ÀÞºvÜÁÕk¬aÕ×¢:òoï\À¤BU PÔ +"DhC M$!ÄZ¢XU !:$¸P!H Ð@Sø,AÏ(!U`΢x(mp£$fW üµ· àq{\²ÆÁh [ZzmyD½¢æ[9_a9àª_«ouP©ºxZû]pY ®UZq?O,¼%EW]Ä?KàÇ |àÈê«óߣ«]D,½~ +AÈ(Ì¡,Ð@ù(L!Éli +@f,Êg¾@YÙѬ³ER@ÜdÖ7Eá¡T4PîîÏg!Ò2&HÏA �ª +R´ tÁÌÓѧS%§Â`@pCVYÐ6:4¦Yh«æhÎô<i¤ÒsÖgº¼à5#Òú9 @n¢PÓå@48dWÌü}tøÔ®G1¡ á¿'·k1faMG¬:ùRêQj [Kheª»uRê^Jâý2ÙJ©ta3ôÏ3庬IíaòÔ4ð÷Í ¨Ø».éw µ`+jñ3N9§ ,¿Öu["0&RúÊÃHbUæ¹Yò ¬2¨°Î¦"4¸¼Ö)³D=0ߪ£Õ.àÀU·l*³¶U8r9Qí%mսߨË[.[ܽW$ÖµXçZhSLÞ¾ØçS +h9 +º0ÑÜ;ªnk ÖíÁBâGhì;K9àbCAc+Û3ÊiYú, Ç®±Ü|ô¹©ý/²dtp +CÚÓÝwFê½v¶s¥lRðiZË%2×ø¤pu¦Îð;ߤàên ¨X8ᤠ->/µM'¬ulKî#cbON,¼3æ)¨¬ÒhïÆÁÁ'"PjÄp@4)ÃH¼ì}ôYÞ¹Om¸R!I4YÒrÞ].ç0cÌǪð( +êùÀ¼]²ÁÉbç<¤e iU+>ñ©Å<ÐrÂØ êT,ÜósNflÇxcæMô&iÐÙ÷7h¬à±3ÇÑáHé0ÙH4³@T +MiÅ·×xòn¥ÛëÎ 3ö¾ òü_Ì �±» d^/´1v²1ͪÇöd©f˲½kù±Ò¿çvq8S;ÆCK ¦³¶1!ͤå·~¶ \MObËÉ×ä\°m²mÎÚ[\&`ÛbM·W[·RRc÷ C îyÐ:'ÔiYJ.ÚùsPm§]·HH8®*éXßbË\Kw ÀÉÔ%µàîã5¬òa /<ÇóEêØ5|ÎàpQ>í© ñ~ÝCî)¯×éO¹?¯ìË»ìÕú°FæÀpP[Í|&AòÝÿФrMwAÕôæ¡" ðô=³Ç¡\éýù+á¬70în©Ýº½ñ±ÓÅ·RHgâ2Æurwâ\wTøû°wq^YªaxflOë´qg½$ä¬Y¾~?ê¹8*¿JmblóN"ëDtßoÕºÆE ÿb+¸k r¨âlLViªÁ)¶6äßzIÊg©ÐàIÖªr³«vÐJ&ð2¥éèÁ +rfrgª)¤ Q®æ´©^`Pnª2 ®Æiâw.¤Ê^MJ:£íí£¤ø¥ +TÒJ[ª6¦#&¯ðp¢<§¤]/ü%ìH©ÀèAʪ#g¸Jk¡- © :ã»î2 +ʦl&µÅÚPʸþÎä÷òÐ¥ZÿàC~Ý¥¯jM k±ìôÿbª¡jì±ÜÆêÕEZ*ï +äVÐ +¯-<AÏB +endstream +endobj +120 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +122 0 obj +<< +/Length 2105 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1#J¨$G +A£xØa@#IP4 CA@p0&Ó)ÐÊr9,5ã!Ìi7L«IÞl6Îç1Ф¨j¢0ªD4P#cqÀÎW%à +EdPh+ìG áª#!æ)¥dI¶h4Úl+%ä 4ÛMÇCM¼Ëi:WDÒ!$@cØ.g{ô.NIæs:Ù.|O^ÙwbyAÁØ9«ÖrUK©) V°©ôù|ü.!$& "(*8ãc¬9 Ïs<Á¡- +Ñ´¡à ¬µp³,:£Ï(ÐjB 2Nú5ªÒ¸ô¶kʳà2mèÒß¿jòÈë#8˯ìÂÁásHÓBp«PȲpÓ\; +Ç3ñE#B1:°×Em¤ÚÆiGÈ2 -àÞ7#`Aqèʱ4ñ:kì9 ®èÓ5Èê !ÁÀP[ÂHÜ)>lR i*4-24|º¯Ëñ{o1Fó«3Í3üÙ7Nè2ÎÍÔò7OsìÔ7P, +;"0èØ`4èWlW°fÕà¨ÉÛû¦áBDiØbá P),£¨ä7aJ¢3Ô«"M=ÐXaªAKqS9[¶ø@;M£ª¼ý=¨ê7ucÔ1»{·ã¨Øé¿UL|¯CxÆßkε3AêñL×ÍøÄåÏ«=[еýw^¡5Õa-v#¶\0YJÊqiµ° (åÀÜÈr!t¢º}Ø]Á ©Dyux×ÙAaX°lèFufçN~jo¢x«®Û5m,ï/pÜr BÝ{@Auî:¢¡¥zS6´"-»½ +¨Æ.àRàÌ#6/Ct6Ç+ GÇvÛZ6¡¹kZVªlá@¡@Êù#7<öJJ¦^P7 : Ç¥\*4¡vã«j±Ák$_ Ì mÚW7qµm®¬ÍÈ»s5MÕÍ3õä[ÓD +aä7ðàÆ\CK\¯áÆ®¦¤äZª)®``(S +¡1:§¦s¢t +àÁuT$ 0@ó¨ +á@ OR,n &CÈ}_tÀíÙ«ÌÌ"{ýWоõðUÛ=Z Íy(òøcA¤8+7ÀÓ £RqÎAv¨ R39 �l¤A©:k¡3 .ÁÒ(þ +"&*a÷6¼³AÁU&À( ¦+åXÚ:aÁÑ15%y·!¸<²TxYÝXW,Ê\µ!À8ÀÒÓòkUe¼¸9h +\(ê¤u|O)è¤É-pnBä8X¹-âØÑÄ rë¥.°(a 7°é.A@bÂ`å,ÜKä2EPÈÃê`11³ahrºájú`0`ï*ã+ÁÌ<2ÌO9;'¯péÑålí;Ç +OÊ2Áh2m^gÐ)¢¡ìÔ jm¸v2Ú{dI±$2|bÏEh×:mªøcŸ¸Os*Áz/åÅdz3ê +K¦5º|UÂIr4ÕÈó^*:07)á2Q#Õ Rª¦C¥¢RY³N¢C?WÒa®Æ½GõíZi¶`éQS¶L«®ig$4¨ÈA¶CØ)ѰKÖ%0°ÚZ"³M²¹8£åV«SÁ¸V¥Y*k#«¢²ÕiGTH¤ìMDÐTE6S´Ö53&Tª,zscéÜñ§«i0U¤Me©ý¯8¤ÚÖxMÙâFô¶àt[ËeÖ ± Eh9hJòø½Ké~Åüy3Òa*NwÁø;? eîȶC îë/»àÌÊàmÜZ ¶ÑZ<©+÷"8*Ôom# �Kaj<Sy"ãyÅÍì7ÐÞßÜyËáûÛd£Ip_'{}ê#ª°3º÷G!nÓevù7vF +fMÇø©âÐb Á¨0 +VÐtç´è`¯*LÜù|Dò¾uâT\ìBO¿Wäý �HÁOrYï>-'-2 +:L¼nãó&« EDb÷fC yFr}@äX)çG°´"ð h)yCIVÕ¼ÈCDNÁ9$: =,L!SPOkX¦KPØ0n3!7n¨%»©8.Ð\ì÷C Ì"wòäà¯ð^ +bß|7ñ ÄÉÀH¡L*Â/ÚÆ\$® õ¢Ó_2ä +N ·p·©æZL +endstream +endobj +123 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +125 0 obj +<< +/Length 2468 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÄl.!Bѽ@j7 %é4NI"T¦HC1È ÐB9NfئFDé¢á¸ÞZ¼Ìça@S*#Q ÈPl8ÏDÓ)¸êN0L·[¼¨*¦%ã +Us ÃâqcA?"z!'3c5¢ÓqËUc|¿VkzL(P}ÉÄB0S)¬/+Îè]Jª9IJàocq¨ç ¯ÁryH #N sI¸Èo;Íç#!pP$:Á »Nâ +#)([·áhDâ_¼¡pjÁpÐø¨/1\°¸¥&î0f¤ �î»ðÒ"Q,$!peË\¬Eîdô¸Â Ð2T,CL7áÀf %jÑ´¯Sâù¾¯»òý¿¡D'3IR*¯,@*NQ²ºâÆÁ]§! )àn½p@;#`ë2ÃÞ6Ô~,pï<¿=?Z1Ã(ð:Cʦ±ÌÐÚý!tÊÎAÓÏEKë Ép¼AQep¦«m+¡qÈP865A ´®©·êþдw"·,Þ¬Ð0¾ÃdÈ:'ðß§õ +¨Öï³ð`#^-ÍZ õae5e.ÍÌØª!Â=8ËÎ-¯1Ý8nMshrgEAt ù[H5Öð£jsͤÆÁº½H'÷Åôù·èÇ$ëh+ßTUC-tP\È8 ãÓK×ðSQÉ6`[+Ähò÷ <ó¹«q>"ã`3&C=mùufC: ½v¯ÖxáüZr=l#|Ëm_NÇSV ÒVq½Ì4COm]ëÙö¼ Ê.<§ýLÈ7ÈÂx¶Ó/Øv\nj¼XäÓÁªVFqaD#±ÜûWs}4[KÓ~ÍÞò¹j½VÇ5m¡VìØMÜõÄÏb AèE.¤ ¡PÍ]ù+WD×WÉl * òäC#$'Ð1¶OÝkÓv Ý1@Ⱦa õÇì6²dÞCb áÕ;W~<!pT1AØ8^@ IebBWʳ~!q § + +`%ÚÀØ~¨gTê¥U0t¶h6<ø¾?>Òb7á+ p¾HN1'0°5,ýÆ6Úô]sÔm ³¶U*yo5Ú¬pÈX³$bh ü)é5b#ÕÁ0»â¹L 6?²ÿÓ9Ù �E ÁR3I!ûÊ©ê´ Z¡ty|5ã*&|Ózçu¢(6 +©Ak Ñ.`ÈÔNô ´2°ÒAD¯BÌv¨cÇ¥Á¦ì/ +ìÕB^ìdX ¼1Ò!Ï !knØ_c~1¬ñ +¢ª12Ð0ÞÙ¸à1#h¿úB¬7 lÔû¿cÄùe³b:i»5~xcsÂèjd¢ÄR¼# "p=2×t\T²LºjÔ +zíjøu¬*i:h£QùMmü§)¢¬W¤ )Pο×ᱨù?ÀiÒþx2ɤÅvbÂ\kIJ)hn²Ìϧô¾!·Çâ:£§ÛêjÊv§¯ ÊUå©´Õ6A±ëDݲF s);ø ÀeGDõ+X¸ØAÌ·'UÔã±Tl5SUTU{¸Ôa/Zk[nWwT6Ö§ÓgÁ1 @ÈUúÁªU"ªSV°8KöL2±c4¢Ê~Ó*i»Y¶ ÐÊDW"ôÆðQ{/uðe÷Íý_[ïuç$Z»Rªþ_é®ôCB8`Ú+o3ÒFÁXªîâüÓµ¶Áh¿Ðb?`ÐÚJ ýIü7F é[sÈîà6jb!Ë �v´P¾E8§°<IMT ªô`µT"ìÄÏLh¢nب¤ù;FDÏå8Q5¨XÉBÖ²U¼SYZ@jL6 dës} §.â»×0EHDH{:·I"*)ìè°hâ.ög¨Ðs¹Î65çB'¾yCó¸ß¸¤»d.bÖ Ñ/X\&ö~¶Dyp¸ fÑ4ªÌHÈâÎ v!j¸ÚÚú¤$l&WP=¡RyÜ9Ói ÚUA\FéWÚþî 6Hé3å£ÑúÒ)ûIÝdFøNYÓU-c¥:2±. ÃD¨2µ®uP[P;pÀéÂÿôÆYû_Rݼ +h7 ´#ÛBxÑêÈ&Kp8E wMvëþZ±\%9 4A1 D*ë-Á·¸#ÅsË!Õ³.ç*Ä0òy_øg%,ïÁAZZ÷lX÷hC ´±`V¨zC?1: qË2 Xó11s9TaÔ)@òÅÁx3æë �Ïv-2`Ð<Mæ¶öç¼^®ï|ðð}í>ß 0ü¯X£Ì{±þ$ÒÜTôÔ?[ßróO Äòc&ï¾ù?'çaT)3Û¾`Ynjqô/âðÚ?âÈ,ÂÐoâÖ-¢Þ."æÿï~»ÃP1oãö^2,6Ã6ÀïáËãUCX5Ã$âCjOÅÃx$2còC¢:cª9j;-(PgÜ/ ÑOÌ8Àý@>.¥@Écü£ÞÄÀnF&B¢êB +endstream +endobj +126 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +130 0 obj +<< +/Length 2535 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢04N¥BT C ØÂÓ%ÔÚ9@ªÑr¤0©Ð +0Tàf5§c°Üf("Nf3¤àt4Í +FÒa ¨´J( ÂǪÃXDj7®ËF (*¢IPÕF#S!0¼lp5ÉÈK e:Í&ã!¼îL½Ëà§;¿àtA¸¸h4Ã5`¡m&3d´µ|)ÇSqñzÎFBÀêr7ü>3ìq>&ÉÄqØÂl:æÌÇ#y´@ö ¯x@;¶m¨î½C(ð:C@6£hÞ9!s8¾ Ð\Kç2Ì3Lã<Ð4L-¬;É -»i83¥A\aÌ]ÄNph¦¬¸à0Á°è2A Ó~¡¢À.Z!Â幩p`¤¬;ª h63c ÞÿÀp+lJ£èM°LÁð' +¡q,®¿Å..-!¸o!µ¸<ÉâxÌ3m 4qàh-U,DC.Irka(ô:-©¾/êû¿0@@1RØà7cK¾7JV$ª2Ðáhd¸ÎB0LH\É2³M@ÊÍp#hÛWPTB)1¡º;Q«ò-@[ ¸P=Jìü3o,4£²å<D£0Ò9sÝjú6x7oP 3ûØ®¾$^ïÎ"ñxͼa¢vìä#`ºß·úÖñØëâ,*WJ;/Ô^¯ÌÕ5Û$ÄtÍ]àøÜ2æ½Ô:']NojDQ#7M´(TUE¢×iR1'JÒôÈéªGl?PÒÃÄ º©Ã8ìÕ#V8àÇ7=a@Å@[3¢lrÎ:õõ_Ú-`ÚI#f3Bclô¼ØÄ7³Ý:Ûc¾ îö&÷¿ï»à@½3xö/Éâ\æÇRLÚtÓ¶2ü Ø66ÍÏ[ßuCÇËjc¦u§ÄS+&ê^B8®&â(°)È"§jÌÃJ~&5ÅßõfÍÛP5» Ë¢}³¾ +<ÎL0 +WªõÂûÜ{Ï �ô¯÷>ýP9ê9üWôËßãþgm´×@ +A<!°m ÜL=P(>RzsÀ Ï _4S +tº '`îªàc~g;°òA»Ë#m5®"0Çà|>JPÀ@Ò}Ã{Ãsaá9ö¨¢Qà1Y)´sZ×Ã*S +i:Ù ÅÝûÁo¹<xÚËChy9yH +¤$-¾È(s=N¹ÏÅh±xxWPL8Dy`¹~²6 +aT&F(VKxS?¦mJ ÂàrmOi0Í©ÜçÏT¦Rt=A'ð&¡çX±9De§×3Zݯ©Äqz³roH@ææºqD²9ìKiq.¥àT6LtðárþPòÌæ*V¢ççqèή?© �CÆiK<DÆîZW ¡|! O !P"ÚE*¥<& +^i5¦ívÒ°`CÁ<)T6pséM+ !:@OG©ÑËÓ ¢B(R!)jPN«ijÕÚVXE4Æ Óig@5TæÄÚ¸u§à_ +¡N°²3Ä$+W-}ÉÇ>Cp ¥»¬5u+CIöIà ç&å\»HË)ÄHGÌ«Ïzk¸×§xu)äú :(¢<©éù«°óKt !áC«lmà @õÁÐÊÌ̧ÇH>L!L)¶K D':²¿¥¸åkÛqØ9S½ú7Irâ¹ûÙ{§ å î½ýhÀ`ÖQ%ä!Ú³kTÚR¡)Ãpmû7·y«`dWcÒF+¸!ËÐOÙÝXk§{n#˧¶múÙÜ%ÈO;\[: W¿W¢;1j¿X%áÆÂÆV +NGe·ô# ì°¼JT v&á¦uNaÙ»wv6©Æ¯xRiÃHÉk �¼ò«©ÍsÚº¨0Ä EOè; +(¢ÑÉä%Àà±&°ÊÏBÆdÍÂÉH¡²îM»àİsS3¶xÏK>£ÂÐj.«7ÊØqáû9¢{<²´¹j×<¨mMÑ/:"GàáGàYغ¼Iòãv /Ù÷xV%ÊChİÿYÃ, áËÄáͤéJmÕ*;R¯¹p¼q$Jé¢"ÌZk-®'_ÓÌß1%@ÄbÈ@3)Äsu³³[áÔ_jÊ)!Ä<eÍy±Æâá#}¤[)ÄY¼>½gáÞsä9Þè (Ølb +pN-^·¬BmÔs¤¹R)Æq=ÊU´!4ûÈÔó»Ag8ÛÈ·ãßdÂoîy¿H¸7à`Áhw γ ¾iw&üçES �Â_q)Aøò}ñÈwVß'w²Ê·;èµü`¬ÁR¹DÞ Í²t<PÝyÝ:iV`9Ô(}3Zħg% ÔqÍGÇî¾Z»µö¢FÈÙ#Â÷K°<ȼ©kéz +à¤ñÃà®þx("4zCúÑF< 4¼XAå .ͤûIí|ÿs¦¬d;¡aé÷¯)âiÌßcñ¶"4TæFD`è à~`ÊcìÖsÉ÷+´»@eº@d$f#JüãÎî �P §$àiÌ¡pºé&j#Æ àÀÜÏ �pÆ(øÞÎÌm6A°lÉ hÄ 26¢0¦H4' h h<`Ð #Òqè â ðL^PÆ"vàGMgðäOº +endstream +endobj +131 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +133 0 obj +<< +/Length 3137 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQNË¥BT C ÑØ\1B £zxÔo"K +LÐ9$Ê¥"<¥<ÃA u9Íç!ئEDéá¸ÞY¼ËÆB¥zÀB)JdàÈd3¶G#©ÌÑu»Á +©®PL(ÊeK8´d5 ÃÌôM2¤ã ´Ë¢f³¡hÃ]gô:=.h3ÕëOD3aæsÚm·hÎ9^ï·úÕrgDrqL ÊbÁ ÈÆø*ÃÀ+¬Â @)£ ®4à Þ;ëÈ.Cà ¼öA @!# Ê'Ã0ç½ ¥ +ÃØ:¢àRú>È(¤!oØbÿ¢)Çi|} +àjpd´Á»"£Æ9 #è4ãrìÜÆÏÌr"~! \GÁ°` Á´%·ÊÚe'A@¨4¡ �üûAPdBP¤eAƨ4Ì¥J g+Gâ¥<°tò! ³A-0ê7rüÃA-TN:uÃT:P +x§ñT Y6Z~;ÒÐxO^£Àè9!l6®cÈ]A3 UY"èõîÏjôý`Ó*ý SR°C wC0mBL´=@N«MðΫSÏ£Ãn6Ñä 5í2Þ-àhßN +ü¨;åõU%áÅ['#@Ãè'Ã~`ÙJ§já0ÃÙU±m[ðËpWÉ2* +xfàòdçI]ô2P×¥GºmQ']Ñl_`öýài áØ2âcÂ:0f-`ØzýdbïA)øßÂW!@æ:.z +ZE@Ln£y3ú§ª0DÁkJ=WO¶¤kgöÝ»oÜ72·Ý ÕÏUkÁ?ê[ªÑ¶´¥tAD4©¿©»G=H+wÞÕûk¹î»¾ò7otÅÐ#Þ95°Ý|üMKÚá³Õq WY¢õÜx£¯p*>uL»znÉÐhFÈÓdÑI=¼é Ë}Xªíî¬% V;:X!4<³DP/½ ¿0ò{ì AHEôp% ä"vì¿¡ (YDz²°Èâ!«2\¦lî½$úAsÈw½åÒÓûjxOâ«·§ÏÛÌ-mi ã»-á°ø~1s ¬ñ0>pÂxuCÏ©B ý#°l.QèWãl =x`:c%í³£ã´¢Þz¨)-¼# p®Â@I Æ àIà5ÀÔ®ö+#ÔrA)p2d³ÛÔlj2ÉàW 3ÅÞä"r«Ô@jGÜ09V®çÖâL-$rg¹¸á9²|$BÐ`å\®W°¨K%¶e¬·;¾ÐÆHló]ÈlRün%rdê ÊNNM2@bUà( ¥f ùÎiÏbõ-Vy£yý-%ÀÅ#axc£*õh3R|xÏ)ç=!N5Ej\>8çÒfãÜ]6áø^A¨(fU ¹*å+T^j"&¹ÆB +eìUÃÔÐ)ï(%&Ú`tFO.f.ò~¬£æ\oÞÒª¿ãbZLaR0Ë$4?9È`0jQ [C\4ÐÇJ|O/ËiaQ\bó-# @OS{O æ(*u"!Õ1>AN±µdè ³¿& +µ2TDi¨u¦òÉöÙÂYØ71ñrÔ0Ä Eh)ÝE©¨kL=¶÷ÜËM°nÜYxd¼*7¬ÚF +.5ȹNªÖ¨¡t«E mlêVë®Ðèí¡ÂY"{µMmlL´JÕg«Àà«Í;IC}+Ø3bD¤Q¡H¸Àqbtz{Ñfq!$Xn«x©8w]|ÙS·«$²DÈ6Hd=#R 9%+KÞp¢æ 7a¹oKVMü¦@S)ÀÁѤ¸p`9¢H$¸àî¢[d]Î( (ç¢HL)»Y¤x;.VÒr¬EpV±Õ_9zíÔ»9êÈ6!Ä=;²t¿Õ0Wì¾£ö +=¬æ- Pÿ +1 +E±îd5¥UVÐQdß.ZÍö:Kb ̰¾%U5@ÒLl´Åo0fä¾rÎÛÜåBæ3Ôà]Ø Yè5o+ÃpoCÚ 1è ç£4uú¨aÊdÀ äñ÷³Èé#ìpBwh HõQ§D£fAȹdCç.9Cge=ßòÂ>J$¡<ZuÜeÝ6vñïß·<$x NT9Èà×¹Îx-«!´d¶èltVPÍ) ð|ÂA#º +·/_%Üö;8ÙUöU¶âÛ¥^9õöëò6ÎóÀ0STðCÇuºÉp5 ªpäj©¯$\S¬ñ`äÂq÷C[h¡ �,fÍÓd òx@P(î¥;8H +HÄs ^B+b!Ècv@·WHYSxy½æI7)Êç|'ôgOä¡L<íZÅx%dàɯö« ÷¢ô@$@®ÿw Ýç¾3 øÐ¢ýô;Öfò:ÂâÉxùò0 W¥H]¿D¦SªWK)m.¾oc²·6"üàÇíõÇÚ}¨»ºö²6Pcl°PîØ¯â/øêÀΪÄÎìjO.¸Ø``¼7˪UíüËÂæ`#n¶¼åþÙªÈ÷ h*ìö¾n´¾¢rà ÞÃénðcT[°LqG[Χ)d[¬DÄÉè`|ÊPä!ff fÔÄȪJÈ)¨mTsÀPÿ¯þùãîÙ¨ÌP)n|a0ÐÐRoi^qbæ0ZY0^ÄÅ}DgÌÄ"æZ"zféè¤<èî(ö*Åæf[ÀÞÀÈ=ú (, +/uì ëÆÔÂC,AàÜ=ðÿ%b`ÂÐeD@È»ÎÆp$þç0lë]ÀA°øÐÙöG0TfËæH+ ºÏ9²VñnÊW±vÖÆÖ$ÃàÝ 0t|ðÀHÞ"|LJ +rìÁ¦>ÁåòÕÇ@êD¦èÅ @ à> ðjоP)øn&ª©¿dôjæÍ |GF°Ýͤ< �ù +-¬b1»->Ô Ò Q|q(fq$Ö$\ЬÀm +0R²ê¥ d) W¼hÖq¨Þ}-<[ktÜp:¶ô_+ic°t&ªP£7ÇrF¢¨;qc +¤ +"`òé �`òL(ß$R"Kò&|¤bà§Í< ÄDò(a)xn--2ba.ebQ¼ÆÓ *þø©é +ëÐÃ±Ô ÅPG+õ$:¤bp%³)ÇÈVàÌo)=$»SE/#q ÊQ,`VÀF¨sç¢j.1Ôú4Æï¨óÎ4Þ)¯´G°JDÉ,«-ÆÉëÂà¯ÒöÖöÄ|vÎßd¾bÓ Mw25Qr|ðRòÑ$²Ûé ú È©*©0Ü¥éþÆé<Aêwp×*+vP)^Ò ÈÅÆ×g:ª6 ²eè7l"< ¸ÛÍÀ éØ Àª ?³ì°.&ñ +endstream +endobj +134 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +136 0 obj +<< +/Length 2540 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©ÀÌn.NÆ#a¸ÌPE9ç#¦ D¤th*-§ßãÕQ¬"5W%£ "Æ('ÍÆQp¤¨j¢¨ð»íFOçªuQÅ8l9Öí~a±Ùlã[U²ÜC¹ÎbÒÍj +§#)¸ÆeºÝó4¸NrÀEz1vAl³£¸ªôÊ("o¸esI¸Èo; ç2à ¸)¾o Çåóú}~ß~[0¼³jH¤hBhÚFÕSXż²pµá n·¾Hjá0Û~¸#,BQ8®ÏÃÐ(!õ®Ê" `Pdè@l5!Â:0Z¯¡"3H"ÌÀ,ê§@ÈL¦*³®ËNã\6 ¼*Áj¶ ò7 ãæ4¹1²ò½¹Ëó§*°Që«@C¶Ö¥ÁF±;â'èñO#Í¿a@" +â@4RÞ¿Ò4M¬©K "!«AÐ |&²Ìη<#Æ9 #è4²QªðN<:sÓ¬ó"Ö1acBA@¨4¡:¼¹âèJX1ïÈú¾ô{ôö=ÁM¯`SëêB³)⥾Hô!«¶B°rë]²V´£A@éj¼\; £Ö4àsÊ3(̹£2c¢æ2èÜaö¨Ä:ϰå á AÌ¡Ây¤÷àQMùÞ3e%sl«.hL%yY¶{iÚ·XlÎL $úD&C(ÎòÜn&õ]î¯9ݪS\Àk£\kk¿gßÀAàuàÝÛU´A¡ùy§Û¾«ðÈoxíVÉ!|(P0`Þ1çCÑõy*æ0ö¨Ââ<:çâx®/ãyV>9d8È\ §ièÑâÄW¼ÞÎèÚ7èhîþãG?;£øÚÛ½ÙǬáÌ{ÎgÛýî¯%Á 1qGá£0ÓÒõX|ádÃaÙvÆï"qNÙî3QdLuÕÄèteíø(OÈDÄðÐÞAñ8¼=B_ãhQo.hÒh=¸øÒ!Å>.Ü0¾àÒÐdjÇüµpÖÚBkÇ}°=ÓþA"5'h¾Cº´BR±8̹rª³|«Ù ô4Rpva6Pèpà` ÐqKÌÜÀµÇ(YÄe-LüÆ %AÕ÷Sµû að,µ0Ðî]TEºG6S&y<¨ ã¬|5@Ü·¢ßI9m¼7=væ¤[´O/O0·¸¬½LbpNï¸vCSÎ=P¥UBM( CETÕ¬ÇÐS\ +bBÀ¸¦soC¤N*þ]¸õ`V)! båö¾öýçÈsÝ0Ø|gË-uq +¡Õ¿s8CxsݨYû ºlT1Ð@çA +¡8`N2"½9_gk¢òuL¤/¼ÎJó@§!bUj`Ué´+2Þ\Kã¯2s".±§Zùʱf¾s d£bJ%* +©Á«h>kÔ¥ ¬N7¬ÝÔFÄ8Ç!ÆJz¨çEWI`ô 5¥/P¹¸(ǰ¤©ðÙs=¥ÓX¥â*!%h¬kb_©`Ì¡j¾'hmrvB0)`¡<¤pAØ.|ePªÙð@2H ($ÄJ5@T RTD°KE¡,¦f~mJkM©¾©7Í`*± ª'|×hQaIÅ»(öTH +áKE |oN\+kðïÕü<Á$70 äfáÈøX$0hnAçÁ ǼSîn#D\´pp xPP£6 !6;Ø +TãÞ3W(ÏÜÃ?sÉ!©A0¡KIVêrµVêå×ÙÊj¨ O6¬Ý#ÖMlQDÎÚpý©fV=s½¸¹wªÊm¢·èÈç+&¯²c²7äý#ôtuÏéØÇ'úÄû9º@yz T~ð:A)4#Ôl6ÁÈ6OtX(Ð2ÈO/S)#ÏVõO)´aiºUC ï ¼7:¢Cèâצ¶ê#æVÿûÆYRÜU·¬JÑv7-Ë{"å¥ä¾ËÆMÐ þk_´}^ÊfÇ*ª"+u¾¹\e@6HýóFY¸H4ù8tÔF÷ë VsyØ2»W¤sûîð71É5:D*Z¸³Á6Ö×4Ò¤ÑtæÁCÇlg·².þcs{.`^·ú_^ÓͰ °º¾]ÓMqN÷<þYC*£ ³àɳ8g\ÎMo· ×~¦ÚsìæwÚ3ß-WYpöµ¢SkÊZïleVxæå¾Èq}¾ó9Äûj2°Ñ&9t§¡ÞƧõpXsYOª³ãH eiéûvûqêBúØKxHh×Ü#78ªíùrf!ntâEÈÙÉYOhÞY×{³Æï¬ác}ãµ{sã$ïN q¡Ìá7ïJÖgÊ;Ý`TI±^YXÉkÅl¬¸]]~fl¬ËÙ9vþÚ AæKpÃ)ÇÂXu³OoÕc?Úo2ú6××2íø×°Î² fÅì´ú¿8ðZIk¸w¨S°/èdïÊOüéðîíÈØÏÕo /Zòb%¨îNw/LcMú鯸Ч@ÊõCÐGêf ÄZ¬æ§¯pýÏ �£Á8oö3¯úÿím �@Òñß&Ð)80ÇvqFQÎû®´1ð<®fd¨z gz.hrfcÚ@[Sf:@Úa(%(ä +èµÆî÷C¾ìèî¨vfjÀ¡NÔtƦc`îE®¶à +endstream +endobj +137 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +139 0 obj +<< +/Length 2529 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÄj.É£zÒdT"K +TÐ-K빸*rH+ ò<¨T'gA¸Ôp(* '1ÀÂr0L§C)Êúl0̷á Ê ;MÆCyÜ@a:1¸ó¼èt7Dó6k -Mç#&v 4éE4J41 R¡ ¡<b3Å!uP ÐWÉJª9ÝFChàâ¤1¨)\K»5²/y|Ѽàm7ó9TY°õMÁ³Ó41oG¨@õ3¨æ9Nb¾¨ Á°j )¡pn8*´±óº©K*δk á`¯Òø¿0ÃCÆ4ïc(Ë3 3Ð J͵ SXÂÀ¢*Iª½ Bü<&â¨.alįPÀ°l+ıq³ ÉFl»:;1ãæ ÃxÜÇëâöã^Ͷj* APc°»N°Ã À* £$:QCrøü¿o;ÒÌKò4ÍA ÍJÖ±# Ò;3(É9jdñ¨NĸD-@BÐP´I"rÜ'dAÀm/2²ÿ,ErÜ_/PÑ£3GÓ/3Í3\ÛIËóç:¶µ\ôì»sû½AICÂ.ʽ2vék¿Öhæ./{ÁÔCpÏfL¨OHÍÏýÂU2Ü!. TªÈôWÏÎ(ñ¹®z8ìáBW-ɱãÇ}´í*9ÒôËI/ (ÌÌåm¥Y¸K7Xz9âp*8Ãm7xî~%&Hÿäã.R¾ÒÕ]´öjÇåùÆ;çM¶y@øö%WhY hdc/Tèøn7¥b9¹Z$¼±ìÈÆæñ¿°ámÎȦìÕl´Ö+Ù½8£¸)Äé··¼«Ú{4ãC3®ðSÛðØß¥ñX¦Ô±B<èê4Ì@Ïmòw-;óeB +úûþ4S-Ûå´ëÍ«QÁp@'Úãô_\3 ï*É_ãÕ Ã¦Á³å³ Ø:Ë£ÃNÝ^x¤._¨R»ÔÏ(ÎÁ±Ãt·P3%åEÖ¸Ç4á8L+ �A +áÐO è5 "âyh f 9¯7êI>[`ÀdRCo«µ¯:h ";å}¼H pH !" pZxW P]©Ðâ^! É;CÈV°þ õtBT !X H.Mè7'Á7¥ÔÒfU +£T¬$(½ rºIZ7``ãu/ÞÞþãâ3~Ø»²OÃuKéðµFXó"áµ0ñq¹Í #2M !jBµ$Rh3Ò6G£wK$¡8)DY*B)5'£Ä² !Å÷~ú"© +AA"æ °3ÚY¯ É¥¢þ1o8$µÆ±°/ÌÁôÒ_Kû£k õá¸noà×\V1C°PJoL'kAè¶BÍ8a´4¾ç¢2O¨4H÷̬&~ÍÂQÌpP_Ã(a/¼2/M6Øml%6Éäë¼¥Hð.2« ´ÂD +Dð¡§"åcÓjH¨sVkCÜþ0+2ÄÞU´É +a"$Äh£#Q:(NJ;D´U~!Ì4X· È1g¬pìØDȸ%í°ðjI:¤Gcè.dð¬86QÕÝV2,D&Øp óy$ÒÍ®E �;:xaDýèjv'ø7Û2~!¸2, Ìß·dV¹6F´3Y¬ + x@¦ä¼z£hüÅõtÃÑTô �¬ÖX¨YQkA¯f-@dKìs|Îú¤Cyªä2 u}"Ô¸¯Q/ÐüÅ[pî[s:õ¦OEi=#20¯8Òº£Frµª"xf:õ":¬úS´pÿÕÐë~â±4tÉb`ëv}|ªx©t +qó/üÐXLtlqP y²êÈðÅXQáeæ +0˹iÞéee5æ2ë· :vÇ o·ÕB ÊÌQÂm+aSrÛP#'`öG7'^6Å3KGim:ö4ï©ö Tzì]§OX%j¼u ÖZÙ[!:ÙÇÙ5 }+¯ Ò¾,9¤dÙ«[qû ¶K§,U¾+ì,è¹o©Å ɪaæ]0ÜôñÂ;&¶ìÔtïy#×úT×Ý«A¼ÒpÆÛ Ëu.¦dy»8ìåó¦ËÔS'½ò¡Î»ïcfx § 5R¸4¤55k®ï +ø ˤ²è>"}¦t¹lôÃp@ÀUo#¸ìâÎ Ý!èh¾@nÇi;'lÍ@BAÉTÍ\Bºí^(XAØAL<¦àË5]Ö¬ot]×bÈ}ñO¾¾í=æÂ~ +f~®%é9÷öÔdÂJ0¡Ð ³3 +{ÔX âNøf[w]øXݵ.Ýz¾XôÕg8^DlÜÕ_`è«ñ[Ò ádá¤8<Ë zêû´@\5**îu¾%¹Ó¹Ónùö0éÙxYaV²j9£ã ØÀ\'ÐÈ(ÇæU0Ê,0äÚ¢¦Oþ¨(eúØþnv*{"©¯ âûSÎçÏõÙ¿g´"ýñéÉ×ÄûëjÀZ\!ÊO¦BÈÌ ¸ïnÌëÞXbdh%`FFßÀÈà òÊð4ÂôÞâÂMñÌ®%è2pPínâäîì@Xïg&ølòb¨á ¬)%ìF°*r.ör@Xñ'l^`RøF2ÌëÚ:ªNÏfocOÏpÍ´,Ö¢Ï|ø õ Æâ¬o8+ÂÉìÂùÈZÿT½*4³²>ÃØ_ä®EC +p@ÎN +endstream +endobj +140 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +142 0 obj +<< +/Length 2179 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$c + C ÑÚ 2 ÅäĨD(Ph+¡ªFÒa ª º«ÖBѸa#*WECA¤æ 8NFièe9 &C)¸èi3L·ó¡ Ê ;lFó¾c,rËårùÙÜZp7Í8óy»4g²YQ:eLqI¹]kWÖâuÉ1YCxÅ9 ú »cg£Âavº`ÒÜ5 FÆã/sv®A+ö!$ÜsÄ&l9Ë´t©Vε¾)Þ^¯ìÃ1SÇ2(Ë3ÐÈΨÂá +=í¢6¶ïÂæÝ+iÄÒAlë5ÁHÂ1mx@å±H¸AlhÄHvÅ8Chêä¸Ì¸ÂÃØÅÁ-+Þ*OÐ0¬C`ÊFlKZËã4XËÃxØ6368t÷©\¨Sjí»ªº³¯*\H¤¦ÀRp$ +âp/Bx¨* âjvîÂö¾¯ì½¬ ã£6ÆróDG1Øå² � nêã)<z´ºjXd§ÂFÚÄ ÄôðDÍ> äåkRáEä°ÕÁ3A2=jÚá\:HnrÊ¥3tá9;NäE=Ù«¥¦áEAô@ £AoG¿ÿJ¼'Spe=SÚ-5TQ«X ó|ßtü&â©EuÆ H¿Ô¤Óe²Î5 �qûEW¨h%Û7Î!ÎÑö^ £4:jO=Å÷$5cKZ¹ÜÅKÌd^ÇÉ,;6hw~xÎÍëz_õõ@Ðbu'Dª¶ýå �ܹæXíº.eiJÓÃgn¡Dn㯫"6kÕ±3{,2²@Ð=eSåá=Ç8W8Ëu6J2`®kkí9ÞZHP<WÏhú:ë çfÑî@ÆÐ1¬S®ëü O+=3.TÐF_à:æêú;x]:DA@óæØì>þRùë{¸k/Æ@Ìë»èVO¨ê?s²ûÞIß+@Ñê7ºÏõ-p9ü%ìnÞ£ûA!ÊÀcG SÂ>P4ú¿ÜS¼O%x1¿80¯á[B ¯I¤ÁòïPA !4'½Í,)ÊÍâ>ÇÜvN¥è:¥Ã8s~åèevè +é8 +ìhWÄ3¦íy±µ4Áp èm,µùÒaLi7p@Íj.1Î\9´DN:iéQ"Ç ¤ à!F°Ì1Mlaâ®ç5!ê$7ä) p  R!\#J IØ3 ä`ùHí<1©pæë¤2$ö-|2A¼:ºgq +$ +cFÍ¥¬¸@ÝIÄ¥á $@ÂJ ñ l @C) LÌøÌr¤i} ´¤cÖO ölÊ`¾ÞC +$+©,'(6*Ø7©lp8im&$"ê¬fýíéj \5¡9PÇô§h¤'4²BIIH´S ðc¡ÈÐç´cec3â9ö)'óz +a$-P Þi¡ô*I)dÂ`t¼ÓgM]èiê{±¶í6§øO +ATʶHVêH ©g2\TÊQ ¹2XfÇô9DgËJáË.exg9O^¢1®®3ÊØC¸n00CA!#4ÌZ¥,6\Õ> 9z0A0˧McÌé¢ °)6´K +ü%Õ«õ' ªÅ7ó"PÚIC'©ÓºÀ±SkêäÓµ3è¼OÀQXHsqNB2QçLë=§Îóq×0h3Jhb:óÊ9.LßaNP¨4ÞGB¡%Þ)¯h]A;) Þt# LÏ=íyÏ#ï HñN¤`\H$ú§ÅMüMQ\rí +â Í3C Ïı±f*&_(a)xn--b-dda.xn--)-4fa üÐ.äÎmq¯àìcfÏåKÇèÉãÀëÖC À§KôÑCÖ(¹ç©pW½â_kæ}ó° ¿$rþ2¤B0 YÊ0[°S` "ÓC¤ä8yøbú0 ðÑ ¸C,ÝÐNKyÎ.g+sÝû# ÂËà·l:AaxJ&=) ÈÓ ¢¥-5}Ót@!PÎf eÆ +À jQ»¯gm-ºivû®t@¥,RŹ6æÞÜæçGìHõ9#dºpPk§0¾XÎêÅ +Á)Þ ï¹ÑJX !ÏÀ¬ +i~ !+M@ÀP2!ú`ë}HÓÝ^Ä Ð@Í>gÞÐlßsï}yø¿PQ\aå´oáO[h°¦Y°p5ZB{i,)²y¾ê �Îå +Â` á¦stnÇA`,KnàC'cìÈù¾ëqÁzëýöPƸàeìíã´DzÏ +endstream +endobj +143 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +145 0 obj +<< +/Length 2940 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9SSÁØn3§3ÈÒp:MæáM#I)PÐTZ%QÃ$"á@oS¯X,CÊË Q �^I("Ml Þw+MÆMypP\ç´ \#Ú ·&0ÌåÃÅog¦ãæö 9N1Ó7,4¦áße´;û=qß°t0¢ìíûC£ÁÓ!ãaÔ¬.PÖ=fÚ¶íË>зªXà8J© :c£:A@Ä'Ã,XcØ6£ @½Ìnê3x p[ Kêâa\Cjæ)P£2ë +^£É³08CxÎ9#kÊ4»Îë¾Ý>èSòì`bÂPäÊ¡@Ü!£#Z×Í ãI#a¨ná¿íR\äNÓ À6»C(äÒìÄï32þ? ðÁ/8¸²@ÂhÂÙ6ÍÄúA¬"6õ +²Å,C©Ã¢éº«ÐÜú +c¨Äì#«ÇF1¸¶!@è7¾²;NÁÑC¹.$:ÏmÏ7ì?MjâÓ[W½¥á«ÌDq(AE×8ZIA'Ò oÃ5ì½³xÍ33´d4ÆØpÙe;0ßIÓ3wNMTõµ Û¸çSÎóÍÃW°3ýdPT$'C@te0Ò#X6Q(Ê0ÆØV³;Âñu[ b Éeods®K==¹EbP4ÙSN´¥-M9R#¡oU UVA:¶ÄVu®Ðiì}ÉIH©Ôé)BÕÔ$p3Ð+ #Ò1Flå3\Û~lù¯,ÃÉøäí.Ã+Äîc#·Å#dÉD¯ ã6Q¡<O'\ó@ã»é×3TËíkîÍ6ÈMõ³Á@®ÙíÓ^É$ÎÌWÙÆýdÏÝã|Ú[ßSð3_Äq\`ËÇy4ðZ¡ìj¾`2fE¨ë<à2cHÌK?v î@îHc ýÑ>WJéÏ{ªgqÍG:x#t\äMø7ç,e±«w-Þ6ò +PTë ñwйÕoB¹À+N¥øzLÐù#¸£àab¡½ðæ«o1î:úTiÕã<`äXñÖ*W¾LÓjB³È²ßô �öFçR| Ø;PiÈ4bÔ\`y¥c( [Sdñ]«© �ôã+ú¦ GPîÚfR^)$û{ò ¡@ÄÂCs«gìZ"»@Îém`jûÛìP~iVI°br¸_ $"Rxqr`ÈãY§¸00@V>Pü7õ0¤çtwaP+é ÂhI Á&| ©ÁÈ0j1MÐ@Mi¡ê ªùr2Ó �!ø¥½ ©(9à¢&~ûáÊ>GúE1äÊ«µ*i4BE +aP'ÔXsÉeNyÒê§b6$8ÀÂg +cv²¥ÿI÷kh@n¡A¦JA#©½$`R¸àCx¬u¦@@æÑ+¢³P@VpvѹvhA¹Ég0p î)üSUo1iÄO*Ýá *~ÂH á]`p($Ü©§Îº½'-RªYWj\àc¡ÉÍäLâ¨e¬ÎîÈV©d¢ù«±V1aXæùZiͳ2ʨ«/flØM!b~ü`8¤ú¥Pj$xj §Ö¤U7õkåvS׿jÑèKZzOi£t¼ùsô"ÝZ¢´5-ÚJ'xhu}¼ªÕ{Ò¯Xa ô& ß ãYï©Ð÷âýàBT !Zfè6½rCü'X°ª6r¥Û+h²ÑÍg·¬µÃSú©Q»çøÆç7\ÍN¢gÍ>Üp]HîK¹tøÖ_{4ÂpAErÝÛGym^Åàò[ �òä?{IÎB§¡ùUè:rdÄγ&ÉÖÜðRÎÊø{b ¬B¤ÿEgeüU°-̶ ÃË°Öæò\4Ȱ³nsZØï;[üñOI+ÍöÙä¦Ov|É9ÊãjÍÀî~¨·H&Ç t®ÖÔR¨æÏ°M[gZ¾UøÅXo}»Õz̺ܤë rÆ5ÕF*ð´ÜÚ6yamÅFÚÆäÔÞÀWýÊW4Õ]^¨lDÌùÖÅxü yZxPÊ^ä$l3{Ô ÕÃî°»°×)~¤s! ©F%ÝB-efí¾'»¾«bÖüÙ®çÐD³lß 0²ÂO ·H'NlÅÖ½>|üIÕ4n#ÒM>áQÔpCë:?HõNÓlØP ý $çÐGìÝ´ö°Û{}ýÉ»rB',óætÚS(¡ $ÑJÈYHñêÐrçȹ!Üü{¢hÎþÍÜ:îµì'zØÈÞ <µ$ðÕämíf.ÙK¡Á¡A¹ÄþVFE%nþ³¶òz;Ë¥1Yïú <S¨Q"eOèfXI0',H§È |ZU l-Ô)«g«<1Mf$RºbiPx©,ýÈ@©áIMp·q8¦5gÂÈqgm¯TrFÊrªØ²Å~â㮯Î;¨ +@ª¦gìtyehxB^+ÊV¥©¸tgÌGhè. Êhl Öc ® +`¾ +À +`@ÄJ'qãx}xÕÏÿãè¼4% æ ÆÔ.B:@Ø>ãÌ;-È®ïÌLü +`>òàÏ>@dM¨ !HT\v§ÔS¸^Cüç&@ð'ìX#®/ µP)ʺ÷çv}fâÉbøì¦Ö/¯ î½d¸sÂôDj°Jsfÿ(tP ¯ +¥ +°¯Ð·°¿&PùŲú*úqd*¢®0@nûo`,¨ü ¶.oÒýýã1¢I D ƱÂÑjý¢¯¬+}þ±wÀ±. ¯ÊÂØ e$<pîOÜ"ñ*PVd¨2HV;HZ +qÆofv>HZáãC?Ϧ$ ¸Ib<"³ÂJWd³¢Öon+ � Æ/d^ "x `Æ62^NÄ^¬Âz �`w` `+9`"$_Â,BsbÉêB!±´*¸ú¡â²#k?#)xûæÈ1Ò5ò àqR~ZÐã/ßqlúò¼ß0 +©ô +A$DÀ ÎI%Bö(Zcl °@ È7 +endstream +endobj +146 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +150 0 obj +<< +/Length 2281 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tàh2§c°Üf("Nf3¤àt4Í +FÒa ¨´J¡ U°Ôn]PT4D¡ªF¦Bax8Øâ;'"dF r9MÆs)$Çz4ÊæqÞw9ÁNs=Àèévâ¨l-fDmIYgÆc©¸Çx½; Ðçâ6ÁAÂ6ï ?ÑÉÄÍa@;·ó ã0@:3,ØZA@Î4Ã(ÝA@àñÂC¤)À ë~/#£%ÈD9ªKR¯¥ÌdË3ÓÏ´,!Ê *EnWA@Ð+·±Ñ)@RÐa¼wºQkª¯¡nÊ}¶#hÊ:£Ö2C#HÌ4®P<,C/üÈÁhi²tNÈ»öó»óÁ mÐ9ïÈÙ³O`Üó¼0C50cXè7\ GCd2 Ô3Që%JMPðîõ¼ð¸æ9¾ÏÎ0ÀÃ-K@γêC*Jr ת¢¬)á°lÅ !)Ó³*í,ápfµ¡ P)Kc¨åEÄ+òäÉ,B&¢cÁ nìz½(ºË04Ïë¾¼Âc³m¼ôÃ24ãD5O¯LÐäßÀ59 ³× ^ æ:cä9»`\ ôpå _C¥µE¼AëÖî:$4jq¡9aØ¡p$h±,2ÐZpP"¶xä9Û¬ýÀÁÜL=ÊÄ ÌX@ëÙþ{fGöxP'`¹ms)y¶i`æê¸@3xhÙnµgèZ®·x=VÛ2×kK°-¦/±¢0hÄ]ºª8¡ðf¶µ¢<¶¸Ò4àÝÔÎ#eüG%³¤a6¡¢·òj³ZpXn@8BM²õ¦B*%!÷n×tÝ@c;J(EôÁRl}̨æÊ®ÔHxm¸+Û ¥îá@¦<Ô çzwþÉÄ¢ü^§ÆêÁ¨c7¤]mã¯Bx㸠Îè7 ÂpDS)ûvè2ºI-¡³½Vp¡0ZK¹=õ ²R-¥½ÌBìßi}íErwèBy'{¨´ÊÔbfÕÁFªìÒºdjQvîäÛÀSqaËîq ¼~],Mã¥WÀê÷<! {`Ây½z CÊýA(=¡3âi>§ù &¾.¦Í FyËZ iL ë>±õMÇÐàß\(p±AÕR:ÑJw&N+$"ú¨aªbE©#äøT +)ÂeÍ)D¡ îO<o1Ìâ1¸o!ÚI( A§Db|Q*Äñ«4¶RúaLiLGTÙAi"\¥=9§Y4B ð3ʹáÕÜL~Ñ=D-àEsÑ!B¨1"tÇIæ,/dÿ+£QsXK ÌNú®?3ªvCû0M 5x©Úc¹C,ÃA¿s +}ÌÇÞU04óµäÔ%XS +á|)xR ¡ �AW\õ$tÍUeC5ëß +Èv%°e°Éä)¯ÀÃBÕÌã ÁlEr(#é¼×ª~Lp¨¨EaÌM±v2ÆØécëÐ2²&H¾Ù@F§L"ÔCÀͨ×S`íP|@¹¢B&Ò;K«PÅ5(\¹ÉùÎmMÅ)'À-/¾ +=JÊ©h4Ïé¹´¢Ý¬³xoA;K&þ + Þ.P¦ë;W£Vkª¦94óH)kóí0Ù$-#7÷Pç Í%6Ñ7HOÝ=èMöÎÒä¦Y¬¨1ª ä(öîÐw'`Ü˹£¼wÓ9àøÞ3È,(2¼Ç Bµ%ÚöÔöYÝ*¶zø"ÊùßHp}n$w´è´ô'²A¯ü_iÙ~p $¼u ²Ô[\¯ªAO+K!á^Ûjøùi|°ºuñfñ=ÇÅ/϶û)áª0A3¾Ö#uGm+ü¾øà7ã«Å?jÛ;XrVj¡AkQáWÞ´ ¥cRrÍ0W7y®´¤À®ê-e¾WÆDþÃt~ñàµ$ÁÎà¢.½4=ÒdHÔ8:Ë +ª²w^;¯X49ó;5ì~)3ó^PEd&Æ )7ÌuJ¦@ê=Ñ]¦ÕAAouj6rP© ç´ÔÖ}--GÚDÔõ@î¸ùq'IPùOKïÈP½§Ry§è>ÛX®)w0ODZ³¢ÒK+tBøT á@EàØe4bÓdô4ztåËj©Óo"D RS$éZ ÑÂxS !j¹SàÂÏ:¬«"+Ì(Ú2I 4ÕÚr þ-V°oOåw1U`¾VÉÒØm»bÍð × +äz¨bLSWWv8Ç}ð=îÀØ;:í±XZ¤j²*NNà ·>[0Ò»g Ë/ÆÏUö¬ñÙÛ¬½±HËZ{Sä0Fòy"Âö0ÝMàÕò·!oí¿¸.YÏIr!y )ݸðpéÂx\GHØ +endstream +endobj +151 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +153 0 obj +<< +/Length 2436 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* B¡A'¦£1pâ<7ÃÆQâ¤0)S@Täh5FãAÈ l7Ì¥sI¸Èo;h`Q +£HøÌn.ÀÔ#1 �aTG#RapÐPÄcahsÚ¬?7`£²YpÀi*Y,ÃQpÆÒ6Å3ɸÞp9Nwª.bIJÎE¢ZPB.aÃ=F»Xà±¼Òd[î7;Üî\ +äâ ÐW»#±IPÕÍRó¹ýv þ0+Îj:êúÂØ6ABÎè6íÈP"£Æ9 #è4ãs¾ Î;6"Z+¹ÊÓ¤Àªd bí@Ê>¯º +#3ÈLF0Mr<#»)¶ñ.K¢ì¼=rãGÏÐlèF-©"R<`ÆFpS¢Ø&ë*~£0ê7pÜ;)¡@Úº3õ +¤l #°Ê7»Ê¼È\÷³ë¦+AÀs-K`íACÞ»JqÜDý0A HHÔ0¬Á2§! Ú2(ä;óü63 3ÄõÐRxîC*ê3Ñê2ª£Ák> +T¹/?³å:NÃ(ÈS(áÄÁgÔI%H:Õ@P$ÓÌö3ϳýA×î@0§¼ÏeA@èß £`Ë? Åð7ÃpZ8_¨áN5ëÌGÝ Qr®n\·PɢܸI·¢Ó1ªÎJá³"c IJ, e\ÏpÂ9ÝQ¸çWFã(Ì3³mçcØ6Xv* EGájFè,Lmf¡tJcBñ'<ÙJ#SyCjHzª]ÜY=g! ' ;´"áP3 ϼ éBØ¡¯Oõ»QR 2;b0ßYßc û¸ËaW}}+°@1HØðaËÀçWzþý¡T!ÝgIyÉ_kÏ´©å9^̯¡s*5Mu á|gÚÛlwÑÛòÎ4oêÀ +L¡ÂÀ®+Ôi0A°xg@¥X£ÜáâTÖO"þÛçº*lm z.q\ä:^¢:)Üý¶öPß*NÐ>C[ ô8¯Ù×ôâ(&Õq>V; 0n }ëÇ»Þê1 Ô¦ xÚ¼-(Ü s¯¼3Ú¬øcB)1D d(E@¶%x,Õd7mh;µÄ + áÁ?ÆY !Î7!ÐÒÝì +300¨À÷ÀU +´\ÄmÃCõ¢úA±iàÔ.xéÃtwAÌ-ìÃxm&,-e_",$tÕ£ÌFPËøÅ`þ{ óÆd4Ö³zoÎ"D ENEáL\$r0°ÂxLÎ:ÉðzOYíRáùGª¶úÝ[ó:hM(æ¤Â¯`öãá74ÜÑC$ÉÐïÊeêBÈa !Ä<ýY4%EdE³E¡iØFQ£w]Ñ"&F=5$wdháêÐ~FÊÚ£«AôàbjɱÛy ¶ ¬sLà;£evåZíP¥x³tCJwZô=:ó8ÌÊ©YqD¢1NyÒµ£Ë¿¤à¸R÷´}.-Sjp©Òx§ªÁ+2Ó#]kõiÉ\é¸lÕÛIµâS*»õC^ +Ò£ñR*T %knq<5EDÑ¢¤±V>UUc¡zÒm}°E:§é\ZJ©V3Åb¬Ãla¥\+¤÷QÈoÄ:« ò3Ì:èCzÓÎOYhÊ+¸×WÂÌáßcî~Êa19BâÍ jÃù÷fj¬Ó])Y;:¤ ýÔ!aH*·XÛV(8«ØÆZÀkTý~'6ÁyTuªxCÌg +ìp¦Ü[u -ÞÝ@ò¿ótE¥|àÌ8ÞÓ]4Mø}yaðæCR)¨6-åA¨50ÝÜW×éú.L@4@A|ó À¦nK£rp-Žc %V5b42KÍÝ]£²f¦)Y28-¹ùIµò/¥ö]8yúûsWT¦ã0 al>%æàÌÜBXÂXRÞapË] àÁÍåXE2²ÜøY-Oq>)B¡Ï(\q[qÐeÇû2d,²DòÐÿÜsÌÍ 862]Oè( %ìÊêÂH¯v&9'EÝõ' >Iz®âêÓû#²3æ%ÏÈ?ÌD½åÆ%DÈ'Llt"ÊP§óvv[eI^BíXÛ]ʱª6é«[tdÇ*ê¤MY$ÜÜ« Êò)ÚF2ðü2 à@S#B 7ÚV½Ùs8HD<æ?Ê©X½ÃÙjãlø$AªWôE3C«/Má¾8 +*^ys¢ÕÛ¥æ~\nå¤wNþùáüEkÈOAê³mLù£nÊP6NÀÞi³ È)²éûÏL82 (U¡Ñn¾çØ(§¥´nbYZTV¦]i`DM\0°~!'Vä¬ëãõ~±!«þ-q¶iYte5qqÐ[Éám=ÊÕÐ4uTÂX]Dg|¼y¾C·ÃøyØÝê#~°¯ßܹd¯¢öVÕ;þ¥lÞWb ´×çÔx\=I>¥UZUöZSpÜÕÎO~ÕY9ãÌ¡~U©Å2ý>|·^U|o~6Î@ÃT|/6û^'ÀB~ü+Lý«Rh+Xý%§ÊÚõç8ö%àt"¶%'|°4LçêB¨eBdÎÈFöú¢`v(ËÂÆÃ¶=о¬2·GJÌÏ`PÔì>Käb +endstream +endobj +154 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +156 0 obj +<< +/Length 2751 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ A"N¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ðn.ÎÆ#a¸ÐPR2§#qÌSC¢ÁHÒ:L4T0ê°ÖÂ+²ÑÂ3 + Æóq\)*¨ÄjD.ýR§T"z +¥XqOFBáµ?_©ë²0¸ij¶ÅSÈÞr»^3wÌô:!ñðì0ÙgGuön> Êe³«Öv +Òh¡4Ý-_5Z$}=´³w}Ñ|s9nkU¸Ê9£pÆ2¸*#6¦!.*þå"nJ.°¨CZÕ«òNÈHæ+#pÈ7â°Ò9#Ø2@¸ ¦4Dä=E1[¶Í»ÌúG¡)f¤a°b°(bë=ë(pµ-¡Ì3 ðøî»ÀÀPA9ΡĬD Ç +ªó¡Èfæ=p³Ú*6rP\¾mЦ<Ãxá@«Êâ;ìxÁÂø@ïJÖ1sÜBx&Ôe)E"@®' Ð+ÃÑXw»³s>ò<SL§³¨]<±£d²He@ $1CHà: ,¤©E/uÑîU"桤îÓÓ Ï¸¨4¡`AêRé8Lp`õãEAMÏhÝ@PhÖL*©wÛÁˤI! �þ6ð @;Ü¥È9ÕÊ3#´Þã½T0ÃÑ8@4â#u3 8¶<£ÄGf Ã>IáuÌáAj«¬Wu3pCË}Ý0R6Õ#º5½M\,W_tbü×Ë@f¨(Øb)8%âê½É>ä0¸89(Æ4æÉÊXèÞ#«þ<²ìÌÛ~Î +i9Ûî×õ´÷6JÒkjÞ¸®káÚP]¨ÁZÐ@+<¹#EŽéWv08àê^tÝíF·×½kH%þ`:.Æu(^aX`Ç Á +¢.V3c½tvZsV#8 ÜIF®2k=Vëÿ7oyIùK A¶íûèÙ[-eìÅë36jÍÐë:ì2È÷W+a«5è¢7>h2#`Õ1¶&ÈBß;ù2!Ì:4~XlgÁ=(Ã*- !Ñé9Ǫ0A L"¸S¸QÝ4n-[ºrØTÖéÔWÎQ?w0nMÙ½7ê%Ð/Õé{¦Ö$ôÚ©Ø2°ùôåhb!æ[F¬¬ÄöV ÌXØ7ôOã?È H.øWAÆ-ÎUVëgjÔ90ÐC`dw«í´vTQò@'æFÔ £ó1§åPr +OTh"àÂ()'¯²[+ez'@¢U¥6È"Z¤ /3ã +e©¡5 �%Ô'õ Ô*Ï}~ ©¦hF¬æºÇëâTí)Ka$B¦U +©VI R«Ýùst'ldTêÙËÕJ©ÕKëE´%Pj'ü3J!ÍHÚÜólÚõÏ¢ÅXë%eÁHÿ9TjI3m¢óGSm)s;ù �ôô;¤ Ï(¼øFÔúãÓP_m)üéJó`zk$2²' ?J´þ30ÔÜ®9|¾ÕúU«EPc ý"yIçÒéÈÓNúwéÖ¨êܾv¢µRÀ°À:=`RäC3C¡À:Ã@æ rzÁ½î36@Èt¤Öh:àýDOä¾½ÏõRñr=t +,ÝeoX2"9rC"-fvݾΡPÖ¸6zõho°À0ØCk«èx°Ê_ÝÑÍ{zÊÃu* Iñê5:èãÜÃs ÁeÕðØ/ òJ׿ÔÝq§Æ Àbþ3ôSo®Ã÷Þü^2m¹¸7 Ai+_¥ÈØZ/[*\?©¤¸PZ£"¥ «õ²Ä wZÍ_ gí Û¸`Ê`·0Gpn6¶K~» +`þÃ=ÜM°QE«Tº© §÷áTljÄo÷bTÄ1²Y'Ý5®T7FìÞ &I.,m¿3LÒ¹QHT{âv9qCǦý( +oû%ÊÒõ³A¬bòÇ'P¶ÛPi[ÝÓÊÿâ}`¹r.SÉl¡3ZIØ7'Á\& ðB i¸Â×*#Êý²zöµsí«w®võ¶w[píݶÛ1#þ?ñSAæË]©.LVÕ(ÞCW01-Ûw}*ɬ¹nÖ\eÿnwî¯ß%¸0ð½ÄÏ2¿ºÿ²»+wd|Éî2ó¯Ð Í¿ñ)ïÅÕÚù1r^h¶À-IÀBH/}£kÚÑìM²6VÌ@gh «$Y)ØMó Ù$ð_Éîx7ûF6QÚ;ÙÀK0;ZϸVÀìbH@ýs´·&D÷ûpÃ5͹ü¹ý®îÅz7*ä¥ùP6Ç»ïÊ¡ßÐ ÐètÏøË69lAñÃiíèeoLØ5>dGÂC`t×ýqm.ÍàôT¾oYd^ìðToÿ»@Ø*¡i8\nϸr*-Ü=¿í ûsÐðöc·[íÏe?ÜòMnì/_$)ìªløyeAÃ!ÜRËçÂMçlnÎ#®>Ïì`wÏHÐ*ÌÎäl^FLòpÌ&¾ÐmR1ì F¤uDÏjîÞIHJøõ @ë-µ.¶/¼ü îaïÊÚhhæ-M'Ë¢.( µD¼°ýÊMâ1Êm`®þ/æþ®ÿ ÎäÞ_àr40T:à¦.)z (ðJxB:µ ¬5eæêæf4¬ +àঠ+²Ùml̪¬Bòr :#P!ÃPuåÊçÍþÎÙÍ VWCBòËc©ç#®ÚH`e͹hÿÆ4ÚNÜ ¢Ð£ÃÌ`ÃX5Ⱦrfª¤¢Ð>bÜ.¨sÊÿ%¦9 Ðt¥$ ¥v§&¦})è©M@êkÆÀà aKô2'¦s§¬ÒG²{jÂÐÆîo/wñ,Ðäj¦ §¬÷ëùÈfp^¦ p hZ èbâÑ0²9î¤òïe QhnÓ¨xÁiB +endstream +endobj +157 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +159 0 obj +<< +/Length 2778 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPaP¨dZ1AhÜ\1LI¬Ð("&#a®i7 çrà ¸) T4 ÃqÅ +Q\%ã +e{0Âæà©Èäe:NFã,¤U" &aÐÐe +h´pPâö2¿BðÜ=Ng.V±s½¢ÔwÌ9S<ìi7NfÃÈÈi9Øì¦AÓÏÇSqéÀ7f²§3©Æe9úfÁv2óÆSÔæey>IÓEF§F¢á¨Â§ªáÂÀ%XPDz,*#"`¦" ËæÈòî)IxhC˨xjÁʬCb¢LÀÃQJ¼xh!°n¬ä7CîÒ Ë²¼"È9" \Ca°p%èôTØ0z¾' ãpË®K¤-!Ã5"pô7¿ lªé$§1rpF/äiGvð ¢Ê3F Pö®«Á®R0RB&¢D&°h«èDÞ+ÁDô2#¢ÌÛ-kjÞøÓõ F´b(ñS/¦È,õ`î&K#=`øÖ¸¢Þ´%/QjhùÌJHÍÂ<?SjJØa¼¬Ö¨I´æþƽ ìë )àjÉäqQÝA@Üá@Éz}Üñ bØ@)ß(S;¯xÝ¡mÞ³Þ7«{_Ö~Q ÈCÁRY½1CôzLñ´É¯8E²rþªó¼n +cÈÜ7È6LHÙ²E'3Éú¥7m±H P$ +âp\¸MÐ;UmºÚ;Xc"ÞØì +1/ë¯ì;g³:ûE{Rï@4 +ëN߸ Òý3Y¼dÑÄ¢õJSqnh #¯,ꮤj¶¬ÒigíjµN#QYÄFÐâ¶®ëÛ.4ïÕ"Ø·-» +HVSL¨5=üáM@Ϋѻ0G@2í«ævýÍ« þØMzë=xͳí<ßÒùºdØ÷Í[[70Éxl?zË¡,Þ«í/Àܼg÷Ë)å +ðÑ¥|K(#L R +×!ivïÔ%¶:pdo¨Æ �¢oo â«eòÚ2*ÀÙôÃP¬I6ÆðRAD{ùÒ)×Á¤ðFCÑ#(ti´²¶ÙU±^,Yu +º%)QÙµçjh»w±XÖ©¥:mU³y`´&ÄS#@oéÅÓ6sCpy>&yPv ëÜ8âHFú| ç¼ÊW½tT'ø½ó +Ä¡\& ð I +Á*hz&4×0/à3æÓ¬d*2àâËý0uC£ÂC<m6¦zXCxsÑé-!¤1ªÐÎ}²`Û¨ý2Cu èbì°(ï) »°fB¤¡À=DçA\n}¢V°sÑäîÓ(gØËLDi¹ G9Íl'E )@¹8&ÔÑcMɽR'Ç&xYæ'¬8J|iù?¨M@ÐRpr(<ÿ¥¼úècÄ¡Ò2²C!Ç{ÆSÀ¦ÏC£ÅòêÀö¼Ni<'ÇÍe«Âa®UÆd}µÅ´XS1]kû.£MH5ÓqTG2Ð;gÒYiÀÀæÅ.}îÖÜ*Ñp¬ås!a¢´ZÊf§òYô.Ù`Îùáçp6@snºPé V¼Z 2 8õ£Í +5BP + ð%Ä&â];3LlÙÇ3 @ Ë)v(in¢÷0`FPIùHTrGj_QZx/¾[·÷[èát þw:*Rå2 ѳãWÃ8M ÖcáÓ*`oB&DÄ(8i =Qøü1tOÀî)2«çE#EëVóÐ9ÇæVád(- H p:VV9boÎ Ã8¦ê_Ë|~cÖpïÄO +ÄûfIÏßMã§ù¶óü|`Gz]¥ßès+õý3Ê£Ã4g5©ìGaÊëÓ½f-vî(¼8ÌÎ[-ÑMb-[DFe=<#µ4Q|n§|HÁ©zÅ¥µÙÈwh8òIØþN.]¢W6§ØsO©ý@¨;3v_¦ ÜCs:Ä6HÒ ßS¥¯nä·²ðJÌÁ=hè<·\2ϳª,ÀJ¸Y*ä+Õ#èâÀÈÈsdcÏ~,¦ì2ódÁµ3 y Ñ(¦G+'0L¨2²ÉÌ̦ÌL8/z&=ìF-ë)ä& í(wûIim5§îé¸È»ªÄ|8X¶´XÇ/©À¶6Ëϰ#km®å4 ¸<¹Ê×dgéPþðcûÔgïÏ©`¦kÕPÿW~éC¸E´å¶SÛÎ7>è^Ç fX).ÙÑ?[0r4¯Ñ·Ã¶iÖï6®Nká{ËÈ x$ý7yÖâÛM¶ÆéIÙ ÙxM:xbó0NFÿÁã®T;£ÚvTkmþÉêÑ÷åÃ.rÆ_2DãjBô¢k£¤:;(¦ã@ "4 úæì,"ÔH~§ L¤Øàn +|ͤ0|}p8Pù^Óc 3 Þ± ZªÌ ØðJ=éô jÐ8ã:ÍÄ¿ÃâCèo<>CÐÉ ´ÎNm|@àcê; ÔÄPe"BúJE: àÜ8â6D¬lÕLðf¸åòKMl£²¥:}°kð 9ªÆ9Ãé;#®MànNþ/¬Ø÷j2÷È wC °(çðÿOÀΣü·h �1îvóàAî~ý«¶C2¦@Ú(î-pÑ˰ÓÉÿ`Z4Ça¦ìýìÊÁ."1*.üª2ñOfH\[/È5Ê´z3>fG'þÏ0ÜE?dk'¤Ç¤5xNc4 3hÙMl>Ð^_+©³¥ü¥i )åÿÌ #ðGî%îÓ jE©:î7-~ T¬PÊÝ#ÐÔ¼°Ú@Ím$Öëóp)v£ënB +endstream +endobj +160 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +162 0 obj +<< +/Length 2711 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3'EÒ¡* ¡AlaAÄé²êÌm ÆUx¹RJ +Us)¸ kÎÆ#a¸ÐPR2§#qÌSD£AHÔØL. +D¢z®5F£pôÒf +î$3 Âär2ÁHRT5QÈÒ:Uüj.Ç82¡(Ìe Ê 4MÆCfÜÞfÚm<®_nw4îÍçq`ÓÀ7¶æSÁ¤æt9ý©åÈ9y¦ csÙ»ÆþÖCz¾i`*ÅO®Èò|[g6νÍH¿ 8h$oº¬!`¥1íâô.Íh¡#ap¥?hhÕ¦«+ºÏ!PÜ·mìQ7ñxQ 1HPä9C¼dÚ/(àÌÃHÞ:c`òÜ##Û¸³úñ¸8Ì:Ãé! Îpæc¨Æ1£ç)Ðò¼ë¤¶õC{à Órî¢ À]ª[ñ%Á:*B1ÀÈåÀ P[;Oà]D lÐ ¢lÈ72TO&¸Á áâ;Óm8ÜËc|¾¹³ ]B ϰQA¸p±µ¬s^¸7£ÂÊIÌÃ4ÎUú¥Aº\ÁV«û5á0ÓÃ|Ñ ® )5z§ ª(JªªáÂ,ár¬QÁ¢HIÅÚ-K`f£D»/¿°·+ +°èCRÆ+ðl²2s£nØ7 qÏ*ÎÝ7XccClm§Þl}ì·Èo}slÄ®2Ô·;Ã,«0ÎkÊ Ø+á! ©K§èÚFÄ!ùäË0dµá¨`È !ÀP2 +pè#F¡QSHkõµí»xÇ"g( A¨qcHêαÏC0ÁR4X²ÿ0xÒ©+jÁçÞX íÎ9Uö)3à9ºÛÊõ`öL0\Äp*²9£QØ}è ¸"׸lÐì7##8ШZÖU£ñàx^&æ#y×á·»wçâºÊ\¼§uup0u^9*ËÍó½0P"L#ä4²ÒÇ\Îß3>v];r Q^~ÁUË©,N^3Ünï$ÿ¬`]¸5O0YE ¤ÉÀ JiU+Ì\_ØeË@Ý)h"ÀO +>O´aù.0i"+ðS04]ÀÌÄöÃ,(yyÂ} +Ò²XK Å-¢s©å-M¸3<<ôÛr9q¦¢¸joOl8$=udôï`rÞ C¥^ç|D-!ßÄ"D;Pñ(ÄÅ£#»#/È �l~Xv;,PöÞì +ÈÉÓâb4ÅRË +¤Y Ï5%pÌV'Hè:²zæ1>3 4Ã4TeqÅ:7Ô;#br+d-Iö&PZÁ¸<ÔxBHBÓèÁC¨~HÁrZZÑ$ÝR³>i7@yáKgæÃX_3![Zá\& ðB`LÁ<! P¦$Òb!n¹>{ÁaÄl¨fb&¾a{AÃ,Í' +~¥º8v´í¤&¢=8J£Uô$óvð¦Þè¢ôd9Ѷ)*àzOQYÏYeDÆzUÁð¬>2Åß!´Ópa+d:- +bwTäÂ9*b§B)·¦ªiND·%Àn<³ ¦¹Ìú}e"È´k¯Ð´½2Ø[²`VPÀjÁ¬w©c: Ò`Ì©3q§JÅ_À5&2ÂË5R¢²i6hÕ#Dl á¾Õê3N:ÄÕÕ:çdí×ÀxrÓ³@6Ã=,ì;>à¶R[jïêÌEV¶¯Jèm*º54zÌ¥¨lÎë®Pò �à"äc\Í.Êu$T>ÒÈIJ\ÂÔ²uâ^L 2&k¤ .¡ëJ~¤T¥]pTqÑYÞÄgM#2S¦éP/ìT©Ò§_ÁU>Xwb²±dþ;[ Uí~âË2µùgV¹ÙöhZ!ïÃ;öSík)môئ:OÁ"sïÅÑ5çnýmlÀ2³'¦Í,åîQ;/h &Q®uÞT0\B k¡^¹¸Ü´ÐçC¼Sö¯OñÑÑ^hR*Dx9Ò0VFcdhVHNüì« ¶6ÐOf(5äíæALÇ(¨2-]4F¹F`§Y=h +5¶¸×Zó_hPîëÙoÀ¹À7âÂ4ñ(T¸ÌFäË%Ëã°elÎ?d¡K];© îÖÝÊBà \ö¨3uï¼Gê5¸oס³_è`PòÞkä[õOjU[ñYM ÏÞ³tcØ|ñ¡*òÔ<rùwråüÂ\ê´ÖMµýàýßËû§G9Õè¾³ÎüCÀá;ðûM|߯Π+ÅAqã¼lí/Wlô¼õ([hE-¯l¸ hØÃ3ïíÂáÏ[VÐÚCoT:q\¨u«ÞÕE0làä|ôâñSõ-Õ8hwê÷Ï5Kв "6JBÚC]y%tÉ,ÒÔiGl:á·÷#NÎ ä¹Ö?wº;IéUC:í$îP=ðDuwÓe}V¿P:+&dÚ7ùϾ(mü¢Ó÷¨:u>â|[d?ÇuÄûTÍç̺p¼ònA1ù4;o¤îR¨o¸HéóÕûÞêÛOÀ' �cÆ<¯Öýª2íoâô®ä°@ +ãlK$OG¨´ÂtÆ Ø`ZÖIâ|ÃÌNmpâîï¾¶Â^OéºS`Òã[NæG0"ýÏ4ôNÜþoN¥ª6#=¥¾Üí¨¶Y*È¥ "ÊéDmäôÐx·Bz6ì fÐI@Äm- L èM ò9 ÎIkå ÂÚ«ìðPdAÎàc_P-ïTz%bâÐòãFekÙ à ઠ+@ +@` +GÂYÉïpJFöö©¬]Ñ뾫á/®êËÆûE^þêK +ph¶1ì$¶8Ø7 Èà àÖìItÁìAjvQ0c_ÑîcjZÃáCnøé4¯8 Ç±Ï ÏêÚ +endstream +endobj +163 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +165 0 obj +<< +/Length 2300 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP ̧eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àP5sÁØn4§C©ÈÜsÑ(ÐR56¢Ñ*A!ªzzÁ( {Lòs&Ìa\Òn2ÎåÁApR)*¨äi%+"ê%B$[b$ Lâß§"HäPr¹ÝnüAÈPt4yãA@léÌÂHç:M¢Ónk8 ;çô'q`ÓÛ7ºFSÁ¤æt9þéËÒ9¯hÒ:Bè»a ü×6Íd©Áp¥6« +^)LP)²¬»2ͳ¯SDÒ4Î#RÕµ¬¡ª C¼>Ý·¡pb¸4åA!Kçº.Pêºîç;Näô´ ¤0À¸Ã@ì4ã¨æ62¼ð<O#Ì6=SØ÷> ½ ª¼lCô6 Ç-Ä@²¬2$ú>ÏÈý 0$AP`8pÞ;ï¼ÒòÅlª;#ïã@ëS£åP@1k«Cµ Rø¤Æ@R¦Fê\*ªºHÈ{¥Õ Þ,ËB8¶-ÁP"ÔÕ +ð½FúÁ+ª+l±P@YA»bÏöC$'>#,Öv³[×(á^Æøf£ÊýXìse¶`ogu8æ9 «Ì¶.+7c-§¯jÃ"vÚ/nª´~Xì|? æÏSc7ã\X½± é=y^Z"}bÕÖ½¡)%#Á¨p®_9q8K8h¶-î07" ãê8Nh JÆAoª¨+$t9 Ì yw)Ýâî×¢°ªéF~Pú6àVs-Ií®¯¯0¶âoF¨Øm¦±'ô~§ªë:ÛH; ãHÈÓyÝÛ +VÛÎyª×ªª Á¶}ß¶J6p¡@cÒ8 �s_lè68ªKGbCÍÊes¤Õ ص®%ì#ir,Ç>(t#uvy; |FûÐe;¦Ë3ãî ñOî4¤1¥$zýTa¸#äj_qAìÐèÖAiØÁ6%CÖ§Oª°0î é-©á§·Æ _ɯýãB`ßÔç1 Gý(dSGP*(K : b)Þ¬LÀ+ 0¾HS !&U(ÉØ©BæºÕH}ËÍ×·bÞÈé\oT>UüÓS.ÉwkscD!çBÞb\Ä8G Ä(röCAöî"ÃÕr R +±÷©@êÃB£EÊȶ2ü²~GºJNbSÇàöX7%,mA7Ðàv +d8a( æ«U|ËHá2Ä¡¦°('æià¨OÂK ¯O(iS +$ä ¥Ùù{®÷\®:¾ð´·µõËMFË.s°5´C/oµÖH£ä¤ @áG´üÓBè>QÁ¹ºÈéBäw$ШnæpHÑÞ°PÞÁØHeaha°ö#F +£¯1ȱ·&T9- âHÒu � áÞ¾´âYyí¡¸:Öik !γp¬}L¯®8ÐHæI{Bªdx±êmCéÃ,ìpj)3¸@à A°m«Ö±WÜc_ ÀàCj,M°2¶æà«V´½yGj½ÈÝU)ôE¶g E\0yq*¤8ÙS$Y©å �¤Ò\ªB¹ «gÈ9:A[©T´%Ù0bn½°HÔÄ»×3ÞÄxÒå#2.óiÞ#$lSt>õÑÚIϰ¾Ô«VDâ8\¢çXóïtCMÓ«õÑjºÊHDUÌ7GFå¦^®pNñÅÍáKè R`dIFSîC+ ÁÒe&tksýND54æ¼à¹£¡xk;a²~ª|"`d¹ o=ã ÊîCµYì².Û wÕ°¾a_£ØÀ0 ÂK=ÐðÓÒLHTYJïÇ:ko#{+vÉ\GåÙ]g%_K}êl¸f*9w©ÍÓõGÒ;&BÔ ôx§¼[OÔV1ÊÑ2ãk¥1ÐpÇ#(ä &§¨áÍþÃôþ>È[:¢':á¶[Í&÷&j ôÃ~S:R|c8N¡Ä:x/èV)`®,ÎòþaY÷6``øªù¯6æüâÛ:É$ÌÃ`l4F|3ä(e:u@µè¦ p7Áp3ß)ä{=UʲõÚ«fMݼ%ÐÆKY¥¨¤qv©ÆZ±Qã~/9O<Kräöo®»>qÇæªü0r=×ÉwnfãºbYòÉs¢Wµr¦\rn;|ÝtS¹çIÍýtK¸xÉèÄw3åÎAºzvìu3õMçÕäÔAPªâh: j¢Xú5êØ°qæ}¥Ùý¼hZåÝ®§1þö4ûqEÕ=ÑÕ/H\A£½=ÙÒ¥Õä_v)´½#vßí¥§~TÃ'%FbR¢QçpÊi"öe²[ Ým!N¬|Â*ó[u¥óÝCJi×eD +endstream +endobj +166 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +169 0 obj +<< +/Length 2750 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3N¥BT C N'LÆäq¨xÊ:Tá¥&f + FÓ±Üh9Nd3A¤ØdÐè ¢,2áqÜ\5F#1 `aTF#R!pÐPÆ60E3YjäümÌÆ!pÒ¯Yæ3%Jý>1² ¯äÜo8Í';!#¤å"Ñ,×=±ÃõB±-+ÐAAO&-VËq¸($ÉÄA ®n28qÐX ðøü¾~ð¤v)*²*VW.Ì©ÈKþÏ4S(C+[Z,Apdضb Ê9cÒ8HÞ77«à2hr â"±;¿¡³ �`µ ¨4¡ðý ¢3,Ĭª8¦)80És¤:ÚÚ·»âàS·òú Á³FÍ +8$º)kFhZl°'ÁJÐ3£pÇÃñÒ(è2ChÒ7BódñÀéSðQAÇ!Læ3#°Ê7Püö2 ã¸@Ý +v§Ã2ÑJzv´U:}M´àA:ÃxÈ0½µ 'R ã53M§Ôe.R@jÒ¨èZ!Â/L\Æ)|Ì ×Gn; Ô0ÕÔTÿO;¶ÕGK\AE1tÕí2 ,LßWÂãeZ[5ÍvW´mZÏe³QR»Þ4×TÃlà6ÅmsÒã/HQ +*1ªÕ¦ðÃ=ÔµÖZà®$6£ à7á ãhADT°Õ7#ffܹEd´°è7æqÀAr-ø~ +JÕáà .ÆQ¢¾FôKòÈGî +!̹/52ÜÆ<ÏCÕGZÜ{?¶E"¡{$`#Û;O �GÛvî³¶Ç6» ¬ºgºj&Í«í5ÊÌ£HìR2i«ï;ÜïBïüÂèÚvQÌî9Îã&·(üêÀ,ã1ÏAÏÁMB¹©Áðg +@¥;£ÜÞX1ïþ¸Ð½E #n¤±-)»«¨1#§£é¡bª"ÒøNrpR +`9PƽsM±nõs¬l¿WîÄ0A L"»wd]Ñþ3®õ +Â5oÕ7s\iP 393 óo/d⢧¸rA¨44àÓ£'Ê +r°xýÂ|Ü%3ïï$°_Ð9j!kA@Cf$¼ðÌYjxQð!=b×T<E$^j!IÉAk515rÔÖÛésp8zHÁR Ë$A; +µCð¦¯*PòzPJ%x#iu á¨Î Dv0fÿCa.ÎæB»È¢ga4TEÉár9±ÚsrnãkÈ=³-¢X/RA²¾RNÏâ<p:6µ°wÏäs'q(fDÚ{Qjizt §'et¨ùè|ñ ¡'Pï;jR>ï¬þHf|R@ Ðç~ÍLÐLr] F,ÒCËͤ7&óÝ`ä¹È²6hÒ ëÑb8l£:²P P¤í á©§E3Û5Z¹6¦úW/¢ª9+E@Í&Ê>î@Å;SÍ¥ Ù8ªÖzA}r¨,qÆ%XàVÁK©ñòIäi%DIÃP®ò9WËü².5>:h-1êÐdkÞù Y)ù9jrÇ]<¬gôÒ'âåg+wmÒÔC.Ä®åg¡ `¬:-¾(UÒS©íuvQ£4 @ëÓ40$7¸&U²ëq=YÅl¶½¬S·×_˹.UͲ$¨æhm 6ú8ÚfG$MªA²Ü\cW:.c§d-Aûà_¢·nÍÎÚ[ ýn® +ÅÜB¾VÁǯ$ú �Q§Å-xÚÊc·ÕÖõHÈ.¦uÖ¶XúKq:é<óÞÍkhaÁ¦ßâ8LËOY+-$IKiʽuÎÄ1³Yhu NwΨyaÊÉK8sÓul[uµ"øu%côFjÅÌËUìÑìû® ¡ÕÚ; �S/ÌþÛÔ©´¸ ¨#ü¥0cr8 �ì4&QÚ0aÓ¬À8!«¿xؾÈ0pÝqVµòXÒ¬ARËOj DuË Í¢Y,ÿ-(ѲTÙAúO;lºìÊÎàc¬çO²ÍÕX«¶o¸Ò`ëHt+ðäwª;êÃ0¿Ó \A ÷<Õ<K mL2OMp®Âüñ +)Pf²[b9 FfDS3%à×¼Xµ]CßÇO1ç=¥bh©íCé¾FÁ[¬i³ÔL/Àl,: hãË}¬h0UI4An~¡«s y(eôº{ +ÌÍ×mý©ÚKAbG}I(=Ïe +áL/0B`DJJdôgþÆzGêãiª¹ÂÐ4Øì´mÄßZWJÐ<þÜ¡C<¡Âñ±,ËÝOv̵l»Nò¢vÈWURz³) ð ÂU + KRA^|þ2#0eݼ7¨àä6b{üNZHjò§LÓ]s3.v%ÛØG â*XôC,èVl7+¾j.°É ßOtg1\á©¢¬Aìrò¤rÖª¶CÍÏØuų²õæáê®Ì¥Öõ¨¨ÝHP"mÔõ-ÔëǦâoêñ¯²l® ïÔ¢§viwéæhðF +@A©¢ç@hhÎþg°èzl$°¤HXYÆ®$ù¨åäæ$ +,©pòpn ªFBþÄ èÈÈÐÔMÄ.¯ÍæDÌçb÷©9ÇÆÃÂhÄe$îßf +})LNÐìRúßïäG°\2§â)éB3ð¬ nëë 24ÀPåÄ"z �,´ö`ÀA1,1I`(Ó r]EÎ"ìÆ®Ipãd1 ~ 1ñ ð`ædæB%ä²éjBáQA ¨6Ãp7P~êJ_Hç gº)p$Jnÿ8ûV cäs#Þ + äà@ £ê¢dx jN4rã©äì +q)úCè¢F@ +endstream +endobj +170 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +172 0 obj +<< +/Length 2835 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´c$Ѹ¸b4áÂ4 + rq@G2 ÆSÁЮi7 çråÉf4î"ÁTN*¤3i¸)JªA=K#xÒ)ÉåDXxÖH7¤ I0(aË,¨ãE<ã1AÊs1'¡¤ÞnÑhðR5*D²üEFbáÆ§K§®Öl¡ Ê Åc88O áRØ([دLàEºárº +0þo¡r²êÒ¸+)¸¼ÈP3£pÆÞ·ï �³oC£½@¸øS xÍ)â|ïºæDCèDÃqcÊ1#0Ò246GMðÜ9 Üp±l¨ÄNøÎ4ÃÃtiás£)ª¨d&Jr¬)ojP°%S¹ä0«HÊ9GÓ³¾0ÇÃ0Þ6 æ?È \ÙM, nô¡sr^øµOò¸Ñ*KÊÿªèã[½¯}.¯¾nèÓN³¼ò:Oa ƵàïDã$S%Cr<=$ÕtJ'53e*ùÉrl= ñýW]¿å �ª¦Ob¸@ÊÂÁ°´ëO²4pf£×MS¾KAVÏÐå1]TUø¦hÝ¢ MTëK+·«·|Óý~ÀXIy¨W²~ºßWcÍ³ÜøUê·ØK«÷Ó×låÏ/M´á¨`å@Í6 +ú-" Þ8fÆlãØx"¶ýjlÕ*)Úy~ UUdíÖÁ!HÄ},Ùd)'Ê#@1-#¸ËZÝ d¹ÀX/ÀAbÑ" T»{§ã@Þ9»ñ4PïÛc¥³¾Y¤9e×ÛNµÕõÇïnûÕÜO³+ÐT"æ¸á �)¤¾æ#âø$ "bÍg6TÿÀ3fÃTÊîc¦>Ù®¹ªçPg{ª7ã`ó¼L¢°Z¥ô]ßzïÃ\õÛ cJ!±$¸õoH¸ ZôEñ"¸¶qMf .+$úèÐÒ¶[ ̾IJ«s¡Ô9$ð@Øot)E@¡& Éa-à¸!÷ڹà iCHL@ Ó!wGÅÔ7ôv µ:3û{têÖ¾~và3<E9GgØsl§Á<·XË(F !H)¨x3×2&¸"÷ Û&fi©¾FVÎß<Rï)C÷àSL£` û¶hîã¾s®~ ¸.·H l)î1IËØ«ÇcªAFòîuÝu´3þk8i +@¹ø¤yÄcäD Iì_\k±±èØß²n]ýI§û'Àè¢s ²¢A%+OsÂÏ4Ë(4ÙÐQ9y~8@BÀT'ÐchþdËüY(vNðç'ånw-ñB¬8´àÒô.vʶÜSÃRÂl&Ùî÷*q>a¥¹GèÊ`°UÇ&<àR`s¥©yºQØ$_ì,Iðäø·2Q1áÏHÕ%Ké)säúKbÊE +Ô '5·7hSþ¡Q DgB×¢évQѺ{* ²u§óÊùé%&$¥$-9RÊoZÜ%2®NV@@å;£Á=ÔÓPDRõùÔðk´h©òÎ6³'Ë E +Rì4&¬Ö¥}å¢\ä+ÕhóLæÊúda?K8ê©'6ULÜ¡2mÿØjaA:>.aºÆØ4NgN* Ä IbÅÏCwEÜÚeÚtÛ#Mö´:4æ¡!²´ífÕ¶s·_Ò pèùÓ¨IEwY® ÞaÞK^~b¼{ +>?2àPQo=èféX]KDl+¬ñ®Ã°ní_j$x¬z L«ÛJ$i-e¶ÿÛð¾×jfMõN ý.¡×Éoß[¸ài½jÓÉàiÔ¯N/¶s7¯JSY-T°ðÙ»¥üÝ2 +5ÀÔµ¨×dòy#ªxâ}ÏÙÿ@_b2C9dEý&`x¡8WÈÝ?½X«V&pç<1efdeâ'¡±Æx_´Ï鳦²`d @R±ð¶È×IÕa"¤@ì&FÁ£4µK'¯L£LYvQ'. �¦èÄø:å0eWÚÄDÙF[\UÊÁ¡À®â¹dC!»$ä !ÍA¿,¸§MS¦+¾Ad<*î¤Á7¯Òõ`¦ö[@ìe4)ÐüDÒH 2#Æ®Z¥æ6` "-ë§S&]ºåêCCõ>@ çU/7¾^ýÐJp"ËtVFÇpÌç÷¼HÚ:Ã-ÓN´§iöuÏ8qæ_=¨oÔÆY3M!¹Ùi0ÝbÜcyYBü»±S¦x6¿]_ððPg 7hÀ &þº2ÈE hGpå¢ÝÔ(f!¢yìüÍu fø1 3Å[¶pjûy<ð0óC éG÷Ptþ:Eú mc éè|ÂO á0w^îø§ê</A +B C0t +OÞ£»ÍðõæïGe¼2"/@e !4Bùì}{ÓIÔ¸Cb^¯a<ü·Çs"dÊ©Õ$¼6Ê ¿2kÊq²6ØÜ£y4ó9e|sQú@2Àb*B8õ¥æ;K],^ÄC$:Hɧ¾öÀÊëÉÿCþklì¾Î&ÌpÊd$Ê ÚîÈ|'pÍ`[¨rÀΡ¥À (`t%~EOòzÎQ¥¥&Æ^,%6c«Ô]¥ü(&zÕ¯ÕÜA PÁæ£~Â.ÙEÌØ$mH2ÇêÎKpÕ©ÎÏܦ¥JmÜBZðÌAÀä'Y +|Ë'˼y/ �=¹ 0;o~ø/ÀC":fмÕð Û Åm +(\nXe +tìªèE/¥hÄ?B'nD±L iñ&WL+ ì;M ñ(°Ñ.2I¤+GªR¢^Ôð N¡ñC¿PøÄã$꯶ùE@I $FÜEd0q +KVqÎÓÌÚÂi*K1±´(g¦]£]ñ³¢ÄúO¨GqÐQìilqQ% +ðn¼úo«ELæÛQ»ljÄÎÆ«mºý PO·é"c¦ Ƕ¶ëXÎp¿Â#M¬\d>r"Ò;ÐÚÓÎô +endstream +endobj +173 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +175 0 obj +<< +/Length 2439 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3Î¥BT # C Ñ<l0FâáÒbT"RÆá &f +FcH\Ø8:¢¹¤Üd7Ä3A¼êl2S¹éù>0ßÄ#)ÀÃn:o&}ÌÊn:03Éð¦ESjQ¼RY°W$eJýgI³ + +äÒù@I'Ó)Ìæa3EлPRT5QÃU&Ã<õbZ0Y4AA¥ Ãä7ü)ãÅܱÏ7A[èW¥µZ½p Ã;LIÈ(a)xn--c^fw-+-mxa1da8eg.xn--ar-gda2ac £ap¤´kÐ9À²º0Þ6 Ü3°Â6¨tí Ú`¨£a¸q¼êãÔ³ ¤*©Øh§1z¶ë@4l°Ä1LÌúÇì!xæ4Kù"±Ë1£HìÚ²AVÖµífÚ¶íÈ\Ë(R Î&á@ jhg-qâà¹IcpÞȰ4ÅÈã+í(Gò 'Jú2lÜ<¾äÈïü¶-Óø@7Ñc¤ø±ã¤ÐÌ*adòÍpTêOÑòÒ0²4ÒÖ:Ãß-°\0ÈCïN?ã²7C|(ÊkÊè»/Ô2>C¸Ü½SH +S¨N +ZYXi6³êÔ]r½:Î"R²¡dxà,¶67Ø0QZá=OH]Ôµ¤4K]W¨ÈůMøolã]HCeq--xL �;cÆÂ1íÞ§ÃÐ4Ú¸ø<WºG_N"Òå.sb³áRVøZ¡á¥]zÁ0]ó ÂJØh±Âª¹ã^XÂeÒ· íòÊ +wU½Áàø£wÄOô§¼AjæjTÑdá¥ï¸âu|9(Æ4ÃL·h õâî¸KÁ£lâ;ÊÁñxP4 +ë}¾£õÊVwóÌkÕþ÷'Ïæ2ÉXçT²ZvÆ©!µa´Ö{cS/â(¨&¶h,601¶ÍÆíaض=Fÿ¿Ä7Ô÷n×éá \¹^,íW(( ªü2 w<Âà(¥ú÷| Ùr®\è2¾O2¼k¹xÂGN3°%ÌÏHFOà8, <ñ0bHsÛzå' Á (:áÐ: ÜÚs¼ (#=Hô¦ È@T$¯ýÌ6Ò¨FàI?ë1¥mC`,hÕÖÄ2¦"1Î+n^@ in#Ø cOâ%"§üXWÃ[=ðe^± !òAFHÐÝÅ @ \ÁÎ0F%½³½8æhI¤*FÊGTÿ`\A;ÒhD£ËÐ|N BAµ$¤D?zMv Ú +£jPQ@æB,8PüBc¢gÎ,Î@jg!<RH¯Ã6Ë £x(¡È9*H& qÇLÙ©äñÙ´hcd ÉNeÙï¦Ð!$ngÍB95t½4qLô9¨d +!£û ì!ÎSlN¸fppåEø½*§IÔ +$O AS¾|LVÚçù®6R1=Ǽøsâ|9ó?Yÿ&Ú%$f0i(U,¡¨¼÷@G- ¿V ¨k +*S÷"¯¤"N*F Kõ+d Â@̸Qr°äByÙ@á= @«0sBæÝ)åR¦TpIó4ÚC)w¤±*²6iãRÚ +à;Ì«ÎUÈC°o !º}]( w 5è²6cÅhd#ÆÁ+hÚiºWI×é&¬ÀTS¥nZ³'BÀêCz*Ë ¨î2d °³-a<tâÅk©A1°Ï9Uáy½ +Ý%$|°(bS}(2Ô}¢Ã1«°þ6 +IènÁt®µÛ-ÜaøÁN<ÝëÁ0¤ _qø±¼êÈ4e½XþW.¢æ´¬Õ°áWc¼©Ä®!¯0rå\ÄEäÔËH4ÆY¹2*~ôªÃ_{©»í*í?`ý° hå8QAÉø7*`ÖÀObªi[sø{.§EƲ7 ܨQY±4÷AñFÝbýñ V-¥Åö<@ÜÔö:8úBËyÒDà#üÏÔþK y5ÅZøla.V¶ý·Ô[0tmÚ0°`ÒÂÎ9ʬanúãÎÜÛe ùËÊñIörF§ðgÛ-E5IýÌ#ÚèPìÀ +5] ¢©89ÑsFÁEW¦Öâã\×§~¸Uç.jr» �ÍFÉß+`ãf÷ ®Ú äí=wB) ¤ ³ÁX tAOí8Â8ò^ØØGñ^TdÓßãxÇòUTãëO!ñ@ò¨HëAÌrõ°2Öêá\§öR®Ú¼ìdævõËÚ¦¦ aìMiÚÔY;.«®m¸\rÉí@è] ØaÐ9X6 ÀW6' p C¡4"¦ ö·ÚgMyiìÀ$x£yÒ5!V³M®ukêyDÄpg~hîyÈ×¹ü|½¥mlyãd´Ã¸C ªQoúib¹O0®p(ÿ+pÂin + þzB é¹¾L_ Æ\ÃÇö¢gàR¡Ù Ç>ÃmCÿ=HüVÅâQD½kÖÔ½Þûïð> O¥¬Î9ñpѵ à þÆ ³<ÒrjþüððÄP @ +g K<þ0$þ+ðS`å§Vè" +endstream +endobj +176 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +178 0 obj +<< +/Length 3848 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ Äc/E*TêkÉã!´BT +Rh +©ã)àÄl7Säi8 &óp¦G¤¸h*-©aÄpÊ¢7ªWì61Âef + +(RT5RÔèL/OÛªEB$ÖÎ(#N sI¸Èo; Úe7à§?¡ÀàôÐáuª£(Ö ¹A1bi&Óø¤r(3MÆ;Õó<1 + &NèÌiºyý'LàïµÛÄç1ÌÐÜ?£ Â:3®Ü7ChÂ6< #hÒ=£$ Ð' +¸¡ §!ÌTÖD΢³¬ab²¦ë@Pÿ@Þ9/(ÜþCã$>1@ÚÐD#Iãt<'É`Ò;8òþÑ)NX®Ñ´Tè%̬fÌâH" ⸠&"&¢p¨ã´NR*ÐÕº)Ì9¯ ê9¡rúÄÒ0 nÐs@ »m>9-,þØfñ[³!nQ%êÚ§#Â9-ü9ù6¯ä4I#c:7ÌôNùÒXPû¶ÍŶ½,Û;H´T¤Ä,aÈ`çÕ³MͳtÞ¢è9T4ü³(rSN£XÄ_Z'õµq]µäÚßKÑ+0ÏéÕB\S]76Íóç:ÎóÌöÐOµ +wlEQ;²)n¦º·"ÅY³1õEQ«ì4 #Ѿ¯Ç*>ã`Ù%æ²u ü¿oëþ;À0;$È2½ÊÒ¥êu@äÉ/WeË¥Ç,Özñ< @Û¾08è£;']¢6Óapj1±5eÁF)8NS¤í<O[Þ¦©ôIMelî1ÊýùCÑ#¥2é6Æ `ïµvYµã3v3|WA1Ó}ÂéF[_nà@2ØÍûGZÁ}´¼Üðc±E8iÓöÌtpîh:å·ÚDEÏ)=}H§å +MÅý7 ò7®l¼ÆiÎ?®î#a¨j¸óñrjmpC#ëLDl®' í_#»w§µ°rø±ÖJNJ-ÜPβ¥Ð*N¥Á5U-u};2r¸_ +a!8ÐHM !h"Bxé°4lÆu£ ÒzB³Ã:"TY8ûòLIFÖ'=ìëѹ¤yïªÆý {bθ8¨_b}ñ(fdæ\Ø\QìvÂT_}lÈ¥êó!y ¡<¤ R+©å@'ñíkQ½ÐhFP7 ±Ðë¿Èw!_Φèsáì?EÅàÄVÐqµHV&¤è ÔÏ4ShÑZ[Åé³×Kî~8°iÕSàvq¡6>hÖÆC9º0>çe)£0GOÙÍ(Èõ#óùofAé +ò£¨32(ÚÈè¢Õ$ +¨Þ?í%ÝäwðÒ&PdL¡cáÆUÃ@®xRÁ0Iðf"UZ36ä#%ÚJ@êñRz}eüR'Ö[<i4#- +oïÈ×˲£"ÚVn¾v&)÷7Îåb®l>ªx`¦ë±³QMÎG6çj;ûOõÿÏNjá²{LûQÜYÒE<VDþ¾»àé&ÎD';*PÊ7ÄeÁn«i?néX +fÈÚQµÎokqÃ8³äæéZ¬ò; Ã9ñ³2"LFZj@@ÕmÒ%мºµèp¡äA2R')ê¡¢ÈÌʪac=ZFÑú׳´¥ªÆã¢£VA-`ó0êl>æ*t¶bõRLàÔù#UD})èÏV +ÁŲh¶q\g9TjZõ¾O¢_|â7¹ö*ELª&¿5ɦʯÅü®MWªü0¬¨± ²ÆMê·E-ίS¬Ñ§Ø·ß±8%ÌnÍêê]1/ܶ_.æqàö �{`Ì"ðºö!¦,p7¥ôFÙ´Çp+!9¬hÖ?ßõïÝ <&ppªGÙ¤àÊÓ-B>iÖÙ%fÔg¹æºIM¬¿ªP%D«·¢H $©¥ÜGPPZ)m-ñ)%âõa1YäÅãCÌp ààªc IY7X1ÐæÏ +7G f®h Q+@¤B*ÔTwVÕ©µ@uÕZ³W<45 À§®s´qq«=m2¬V3ùA%ä{O7õK¡´@4ÑEÀPäCÄKKiCc4È4MæÊ=@kêÖf® ;íBµ³éYÓK~w-YK9i)à×qº58-Ñ¡¶Ä&p53Òf'Ko£|4ÆÜÞÏ4ÍkÕïÏDàpG ]åúonÙ ÛØ(!57g1 ä~ +@¤ôSÈyß=GÖüôQÐú)ä¡áÏRÉãàÝx¨0jY)c! +0`TAüÚEWJg½¯ óc³ÃA@S(8$MÔ¦ãìãdWé>c§qÖ2n;dÒy÷L74ò0¤BT «ÊLdB W¢!µp¦ÊÆA¡'ðªÂiÀ§µºëLG=`Èt¹çzókÎto<ºý¢ +^2zoQê¬õÞÃÙ|Géz§õ!ÚmÅÛ»o �)·Î¹iF7¼2ê]ËÌøÝyvñÂ/ÇÁ[9¥×ȯKøÄϾ"^§÷®~£o:±CÆþÓdåRîH%ÎÀ2ç.I(¼¿¢åÄlªÇæ®g,wPò@îø � ÆA`ÆØLÖIÄB6Y Â'n;«tYéYB¼K¬- b=@ÜJ+¦ ªÆÈZ{ì¬l, mé£fWÀÚHLÌ8$D|û`æßc^¡)§ c)t³â´K:n:Ìøk´v¤ÍClVìÚùâèA¦ wÀêJ° Ḭ̂ þ0 +îů:ÆKFòoqð2 ÄPÌ|Â%x 'Èòï3o×LÊíîM qIÆËkð˦ÞX > ÈB#Hø?¥Mq8$<QÂkP§ +©)R\C.5ð Ño(æ¸Êeð¶H%nÂv? àèÀÒ=ä>°ÖXÑì¥kJ£qp¿rPKÉò3 Äö ܱÀÂcr Dz:ÇòA$RH?î3DWR@*SÂ$NP -9¬« §¦þ%R²ÂsCå@¸ðjJÀÅ$F'¢òÔD �þÙmÙò[.0ß ò£²¬1]'Òì&jrðf<ÍLÅ)cõqL7d2!åô!Jcl³Ä61s!J¤TÅÆðþp1¼Éèà[iÝSq+BG6¦ng&v§r_1C +!âÜ(RPô À8_ñPÑ Å'9LE¤Ê\på1Å72øÏ2q$L82~¸R{/&ànQÞ3 æÂ +4?18jä¨>¼¦Ë®»+¶D1CrÚnI&m6ó\5óÐ?02kÛ2§^Ó['Ë$³&~ 8wÊaò òì1Ìx'2K°j o4Ë¡4KNClB³®w$A`Ø$Ã¥!AsÀLfò°ABê÷ÓÒêPS=ª0ÄË=ôHy kiÇ3¤¬WÄ=f>óö7ösÆ@ý`le´G<Ã(Á£2 ð@lB¤ d3´WE«¨ Ó¯t~-ÊSNuH°BSÕI$;=¬§1²1+TËDô8xÜi#ÞD|g òÄh²M?RËIt +Dë¯AóOMBuIt0*ò|bFÅQ¨i1WpÚ¿M_C¢øs¥J%ÕÇ«V&Gt|uíæoJ«!èû1-b6*Ó>$lOÐ_X'¿(`Ç$cáKQKÊ +â£Lu +¦jl´ÑMCÙ°Ù;Ò}¸)égTSÏT"8TBÇÙ2ó¢ÇB¹rÖSõ3HdÓ5ü÷éHàé=uþoåËÊÇ 3/(±DéÍy rW?ôQ/ [3-VAÙQÄ«£xWÃÄzűñÈ2²jÛËYã9J ß°¾ÈLîUCf§FvÕyå7F±FT* ª¾KUc¬l§ãù +nVM8okäÐBE±ÑE@eÖ ÅãâGIRÏd`Q-6LxÏÖ¢òè\U¢Ukê É]39GBÍ3>fÊÃû63>ÌÖÜ(ºf#chgÅØå Ø`ÞA¬ÌH£8W¨D66>5ÎWöV¶Å¿f´_¤ e ßeä%V¶E E'Ò»v»pñóu2skbºÑ|ÁfÿJBsvexåpï¶þè,-ª0]¦¾ë÷(Óñ¸0¶ ¤v ï ¥@ê +endstream +endobj +179 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +181 0 obj +<< +/Length 2621 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ød.ÎÆ#a¸ÐPR2§#qÌSC¢ÁHÒ:L4T0ê°ÖÂ+²ÑÂ3 + Æóq\)*¨ÄjD.ýR§T"z +¥XqOlãj~.¿SÖä'apÒÕl§#¼åv¼fïètCãaØa°n.GuÖn> Êe³«Öv +Òh¡4Ý-_5Z$}= ³³vã}Ézs9nkU¸Ê9£pÆ2¸ +#¢nB.°¨CX³´é"ºÖÈ-â(*;jZG¡)f¤a°b°j¼êa»Ý +¬IªÈ-!hbȸcbv L~¡Hb ÉØnH`·£èØè+ÈAl$ ²XÉ%zvÜëT)-R$¤»ÀÀPA9®\#¡¨b±B¸A ª¼Á¨rÎñS½Í ¾mȦ<Ãxà90*òÁÄ塨nôp^ÆÂé¢lÈÈà2(Ìc ä:ÊA Ü:R dÆÁpn!b#®4à @6WC we^F0űmõ¾Ì =Ò ³?#8Ño\Os^cÞ:]#mÖî¶mZ6k\n³">47¸HK¯áÜpÚ®¸ì7#$« L:.¸ ¸"@®7¦%dYHè(WÂàScHqáF?är½°2 ã¾uå¹~cæ¸g2wçöZ;ïAE´Êxh¶×½¢£d²Ò2 Æ9 #è4²bò8nýHÁ95;g, +] +¦;s®* (A¯ÊfÀÏ£8áÛ¯+G¹5³§ ÷)À¯Ê²Dó¸@3°öÊOëæºØ\@1íðÉl#¤ õØï¥é¡8çÝä¹8@0À\ ÷\§,¾ iim +©Î¥Ìuãf?/ìo½ÎÒ©ðáè#jâÿ÷l¥lyc'A@ÐY¢ÜoÈM´nÆAshM +°âÀAIVi07»$ñÙ£MznAÉ=bö eú. �PA¸4uvAÕê¿JEι¢¡Ü Ï]dbsqÆEÐ<×FÖ[>,VcRæââ}1¦Ä§´] ÁC°vMð7ôU Т´`T\sÑÊ0.ÎÓ¼wÏá<·#@wyO1Ñ-§ ^Ô±U¯Â °Î)!Éh^âQgaQÆA>(æO£ +À.HU®àóÙ¢Û[ 2Çä¶^\ <6pÂ^XbrA̸¬(*øo2òIgÂÙ\\n5AÈö^£cas2©R²X-:<:PS¹Ï*ª8ɲpëÝRÖe»õdªyaÍ»Týenx/ PàÃ-[m;Âèý%9j´±ýÁ Êt +>M>èãÞ¬¿.bPØ øÚ¥;徨M&àyëVt=÷'âüáë¼[! üDÿ K''Q£\bòÜ]Wê¼Ç *úè]°Eð$EòÉaÕhÏæ Ä8y9¢=x3(©; ¦,¼föôL;Al\±Ðá^+é"DQ6LìTs$ðL;ÆjUTcS¯G}íµCW.=Z@sä¤ÄµEQ'i6i¾·ð^Tʺ8(ü¢NþJY×pT9KQ-D¨Ä#WJ³Úqe ö£BÐ|Ëqp¢ª>1w: °YëæuW2·CYËÖTokeÀf86µ'!!Åö6ÈØÜ£xo¯äVWü*ltpìÁ©zbYSQXDó£baNà +Xå·3ìÏÁúWGõ" "F$ÄÊ RÏu¡ eåÆ!sM«¶sÝ1Qc,¸mDÒ2GH©-&Ю +MÌ© +¬àI=Ý*æ +sfy¿8Ð<ç 3®wÍ &$ìþÒâGú,4%@§4^^TgC¤¼ìnRmFMïe9dNJzO ( �]±ae{|·,æ«.ã¼Ç[Sª}PÄÎJ¥p¸s/µkÉm\CÀtj¹îÍ L +) @¤uÁÿ¤¨¹Á 3¡4ƺ°+ój§6Àt I¶Ô¶ó4Þ«ä!È´»JÚûgíݾÕwäÜÛÅ_-ÏÂñ~ÆW³[á$÷9RÌÙ½¶å£tnÍá½HÍ0!JÙy0¦ò³Á O23ÚY®X>ûsûû9póAåüW¹äº\ÏÓ©í]º®ÎF :iKù'döTP9C¢ÜxìV{lhx[fTJ°óû>Jø7͸ �<¿Ú)ëý\ðWÀóâA@bÝ[°9=?ëþL ÍU4'R +}µ¶ðc¾D¿Ôfé¯ûë¶û!Y¡Ûôïu²xúÞ;RMKI !Æèû_píݰxöoCg¨Ó´Â:¬cz(èJá¹p bßVéFGtî½Ûa=D-Z[æ¯ØµÈb³¯¬ö^øïweW<E'e¹1I2}û �ÓþóÚ`§ëDõ2¨On²It÷îÎí'$þ®Úíîâøîú®WÐ àê DNòH¢x <WMªø&>©¯ ^/¦¸/<<8Do Zý*Êýgè¨$¢ Ìð¨Ð  ê @ ТHzàÄ)Jw'¶'´- +êËR¡h ¦ +ç"®ìyn¶¢h~©ÈjªxYb´6ªªé)µ$M`æ +IÈfPýÀrøªÄõ°~)Þ +~CðXâÅ`¨²&0ÆaþÚI÷ç'ìùMÄà +endstream +endobj +182 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +184 0 obj +<< +/Length 3687 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AhÆ6I£qpÄi2*%à bh + Q æS¡\Òn2ÎåC)àèL2çCApP\ÙR5&n2K0a/æu±¤m8¦ãÐÒo7 +hl¥®ÅÕä.í?ÉZrÔ»¸¸eo³Ú +U?¡Âæà©ÉÊøu9beæi=EøÄy:N~3y@aO{þî'íëË!¾xþ»®ã +:>cKò§d> ë¦Áã`:CxØ,°¢Âá@Ñ+d¢-²Ú¦!«v!ª +Rìçj +ìÊ8kpda¢ÎAlq8¡`4î¢~8#Â6¯(äBÃpè0¯îÜ"ù °¹Ã0Ø@+¬ctà4»mSX×6#¶:c(ÈñÁ°|H ò9½#l;R¬HÈíÒf¦Hr+£1«â«bPé ¸/â(¨*¢À¨&¢p* °9cβ|à²>ï:Ërì1 Ñú'áÃD¬«jëF°,K$~EMÀÞÛ½¾ +kâýg03È,«;Û¸ f´RDÐ[kÍÖµíìÚ3u}ßµ[©ÂÜÏhäÝ7ú¸Ó9Ñ¥¶é§#ÊÅ=O|I9>ÏùMhs �°ÐLAB1÷/O°äNÚHÜkɽÜ7«'ra.$Ý»AGcDz2i×¼Ws ÖÎt¯Ü©+KL +v¦UEUÉvû+ fÊih+-F·ª¸n i-pN7Õ¨Ëqã²¹Çb0¿üôHjº=¤îÉxg(oK._³Êò̶Ó#Þzÿµ;P èØ6»PÚ¿/N¹L]dáêæc@ßçI©êáTÆÎ][ÚÉêVô1>1/ãÄÙ¹Kó?°ñ=@¼4ÊÀtC$÷ Wê¡~jP6(@èCo +m +§Ä5 P!å&¸Sá +`<¦ (ÍcâAPàbL¨Rjq¨ ðyôyåN3H¤êa8Cè +0owêqÀÕ1 P%A¨SVÁKÂQ8ñ U,¦*Q¦1@·&s%pBò¬øSVÊá]#ð[Ò2|íÌ»1¤rÝ¡É`Xkc¼è}\ZÑÈmÏæ¾ZÉ|r92`1pjCÁ©$É8¸ÇRL«$v5 �4 ¸4Hëç!Ä@,B ÆbåAJJú¤<ª,ì¾É×bV] �¥r°t; ú3ûYº<góÖöÐ@w*ÉäÞ*ÝUÅTMÖô iQÑ=㬤 +¨fÉi4ÙÃ8Á ®L lGæF¥$·YsÒ4'%ü1Ñ@ȸ¢¤IRH<×ôRÓÓ ÏUí2$ªMmi-,§ CÎÍ 3¡fLçÞ1Ôº×*rrå¯CGgʬ*+A§]5R£Hê²xÚRÔ~mÒÁ¸È:H«ÑÛÂ/ôJ¨ù³;te&PìYYú?±-¿Ù'`C}£Lý/TÌP1Z³MrE®\¼û/bLY1८¤ « ʨ9lr1×ÛJµoÑ � +x0ýNNÓÔ{rc'ðû¿söþ\sû@¥FvßÏþOÐȶiZæÓë¤ä¾OÈÂjB¯V?H.Ü©$sõì%5ºDûoi¥yÏAé=C\bâeJÕ9!ÊTTà·U*¦8¥à@sªuT3UsÈ ªÒ(aTJÚSæIy¬¯iºôR%)¾²D%Q[Ýö¯tL4×è S¯½ù°Ö!ÜûânÕ²H!¾Y`Ýf iî~jÙö¶]ò]k¶f¯ ¡jë;_£àáÙÖúòU²w¥áÞ°ËL\ÒrM<è$ø.ÀÖNÌyPÅæQ9rWpf +(rC!Ê[Õ¹¨×åùÉ"²ðLP3!»ÐÚ£°l3|µåÃ><í©$ô $ÐùLi4_ÐDlè]ÐÊIJÐ3 ÙdHc=RãG®m#©´®ÒÌ\«ÊÓM§ PêÍZ«urxÚ±ñ]«Õ~6ʳ[Z>Í<äqv!$¬ÈPpÚ¾T5JÕíÀ6Ö¥6X MvÁNýþx +-V389 ¡Ð> á+b (HæÌ±~##>B±ÐÔ,ã¨äÎêÎùæcUæ½*þ±h¸ëeØhÈp;ú71!¥6FÙ`¬õ³æB®¼Á'ð88màÜ9à®"½ +¡4( ú +A& ÀC }v0¡ÙLpHêáÀµ¾ÏÚ{_míýǹê)/ª9Wåña&yRßGCÔÞÌM`»ly}²~TÜg?4¥ÖÓ\õt%Å}ÖÛ¢;9 sQðl I} ZÜzÁAá iê²Z&"U13Ç4"o:âÑÞè*wó1FöM´|Cn§¾}âo%>ãrk~yq9Ú^Ã Ü lÜZª8c>Ý,f¼%¼Oµª¸Îb 8ï|Ìðê/ì¯Ü-¨")4HnÃPû&ÐÇ'ygxä´ÄÌú ðx äzÃÆÿü° �¾Ã{g `ʨF£23nì}²G ì¯À5İq/rtr#pj¢j/0,øKWÍ8> b+il&ôùå �¯å¯YΫð2 ÇEüGPUZ¼ÐØPD¨XJÇåeL0DÆØ$bªH°¶Ëd¼Ê q,ÜN¬+ +©ª!é±f6]oØJñOàÝ'h¼do0B'vþç· ë|opqHªN àì£Ô;e¤/ê*Qd¼ /°úñHq0âKÈdBø#ÐñV¼d4Æô¹Ä:Ï¢à¨zÄêf'fCV5ϰÄ#iíÐEÑk°¹ãìì&ølZ püð:tÀl}ÐC@Ù ÇqÂIÄÅ6ü �ê>)Ï,»øÊl\m£ +ìÆm!lÍ`ËÌ kÄùǾ@È;´AC¶Q¤ªdLà]E°ËspƾjjÁqîð®ðñöÌúkñÿ r%Æ ¤wH¡¯¡¥0²]ÐdÿâÿÒ !+ =£¸*¦Oî°ëN¸ëÀë`øãEb]/pç¼Q¨ ȬX#åk{S0ÊH¬/)AR¢\¨¥³2Q!g:³óiY2R?)£]337íð¼oÂÁ!rfÑ,ÊoÈI. +E È]sJà²rBkÅÍ*oÑ °Ð+jRþ°xPDep§äAO>¤ÅPäRè/22\ÊC1TÅ&²kq^T¬NÌÉ;²ÇªLåySµÐ +þ/Mï¦:6Ìm;¯q4 ªEÇË#°àý³.ýâ_RQ?èq9á3å,pi,¦¹s©!àP/¾Æéç14=¤üÄr7T ]3&êP¼^^çn¬)ô0Òïë!rüÒpÇ +MÂ~P¯7#57q8¬OÕ Å'âÜçBó åmT!"4¯j1ÐD\ d;OYîõâ.è`b$Ï̵Ó"ÆÈ + (ìôIñìGs~êOðÆÝèæ|±-Ex@æ ÆØE5O±:ËÒ;`¨ +@ª¨´êÎqþ+À7ô÷#!OÃvùmA1¼n!g¿5Q1QÖ£lDâ6,û? ·4Æ;r#"u(î²ï»(6ÐòHhn̳{Ó)38k]*Rp + ¿·9Å·æ{ÇÁ!!R5&Âþ äSTSD9â.I^ìtûA°48Ô×TsZc°¾¤¥!tâGçgDÐãC?rNn8¤`F,lúD°JÌñ¨ûD¼ÂÀç¥ÅRíÐ_Iñ)Tõñ¡$QýZ3Y?Â\(1Á2[g¾ ¸ÍvDÒBDÚ>UÆUÌ,m6ê:EÉVÓ}cÔù2ÖDÌB!µè¼CPu°ÄS ¤o5J°?M ¨Ú :ô4¸Ð¾ÐÍÑH¤çÀõ´ÎÒtÒö&.3bªJÍ<ÂÀÓð'î,B +endstream +endobj +185 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +188 0 obj +<< +/Length 3071 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tàl5 gc°Üf(!ç3´¤e3ZÆ)ÈÊn1Nb +F¦BapÐTZ%PÇGªÃXDj7®Í,)¸êm! &Ã!\Òn2Îç2à ¸) Tb5#KÄâcÎ7#¶"õ#±Á¼a"me Ö±¸ÐqÏE#ÀS{4NÆBO©ÕÜÿoºCï<"ߡ۷ 3Óy¢ *HxnÁÈn$a¨bX\/È Ì hÛ)@R¤§* Úª*ÁÂéArØ%ªrIJ,ʰbµ«x¦<Ãxà9, +Ú$jKÈ·A#0@iÅúd9á@'âcÖì´/+LÔ5M`P$ +âp ¿ à ®Ô=S"¨( +Bx+³òËH(.CÔ& +¤ ¡ B å9K7)Ê¡ �b\ðÐ4SÜúÖÌÉ5ýAд<ÏEQt6ÅC°ú"×Áª«°bã#¬Ê¾°Éî¥FpP"0Cä4 Ò7ÏûH-»áÄ25É$2 Ð2ÓÄÈH$Sc£©=/'^nÄóT¼ÒãVÖµ÷Ëe W\uúÂAf¬aJÊ#0êÀ[Và@¿³ëèÂ:0A »ÎÕã@1áî~Õ Øu¢µ-7{_Ò ~\WûsêC72çSMa«×:¾7HÅAÂ9ôZ¬NzqÑ#hËA{'aº|4-@Ù|ÛùÅ'ÃoÞ g£Bç|h-óH¼yö¡-|ëGô!@ÅǼ6Þ/ÎUM¼a¨iö^5© ®o²kê¯`ZíVÛÎɳ1°`ÞwN²8ÊÒ»r¾õ¾hvàè0´ñô ;`c·k$¢0¨æ¾ £"ðÓ£ @;eã¨ÊÒZ£J6Æ,v&Û¹9TÍÅP}ëËb$ɼGÚ¦Xá.1$Ôã¶ACxQM쾯yð¼Ó½ÀèÙpndáâ'`zô~Áü+ËÃ`b!5DÉÜ2fÌÙ¾BØD©A#o·¢Zô âôoá ?OÃC5 -é»ö¾ÈRý\gT½{Ó = yÁ(ÔCÈÌmx¯/2ÀÛ«½áÃ(xj!KCh®xô@Ì£Ú¼i\GpøñãKqÍaÞaAÞ=>Ö2ÇÞ<«é´;bªBSìw2MExÛ[¸a.´í6lÕ]c4Lô4ÈáC#/ê_¿·ú¾ej¨þ4A4í @9Îé°W¢£²âyÏB=Çר²É{áíBFûæ?f +"DfG!"L_Á>'Äa¡VM¥Å9dÜ sÏ-ÐÌ=Æ÷;þhLm3̤ÍOêF%Ö\_Yãe éD» +B +y;:çèzOE '±6HÍ`dp4T&Z¯I3ì(uÅI·-(ZëzðvyDeTIø:Pä§ùÊXg4§Ë«(Lw¡P0ÑmMJ½*ï¤xIáW9iäK!>T\l#:àÕöNZ'UL äULßÜ,3°Ýø¿0äý_¸n'ª.O:=¢C&!Ð<ðrNÙʹxHy/!z×üWï¿FüÐÌ»ÂØ] *).m½8ß^ÒÓGz¡±#-sRM SÞBÏ©?McQV*=°hi$Ú]·}²Íd©ÕcMÉe[½,t2³¡±¡Kúç5)Â,òÂUùÍsØ=@u +ãJa/$¦Àë-õëc/Ì&¤Q µ"[< ,òCIFæ!ª»ÔÒãÓgm9-«§§É±àÚl¬¥§o®¥ ØÞgu¿eÓÃ8`ü(ݯ$HLÍ«i,Ûc÷ÜQÐïî4 ©;±|Þ<ß;XÚ5N8ô²UǤãÂ7¹d,¬:³1yþÇýY^B¸/ÎáÓ'5/YE4Þm^Zz.뺲â¦(J/E±GØÛ¹Tº÷XVC»ò}nÆLsJŸºì["¨r¬þbkÀ©Ö%UÑ/eÞªÕz³(/räH©ÉZÊ©ÜÞ¢hÌw!!23skÖ ÑEfEÅ=ØAìíÚ6Ðufº2 Øz±SouZ¬°¤k8 ÚÆÿÆÄÁÆgÁ9^ªÿ{0tx Çö+¥pËG.&3¶Áè+mÀÚWtî¹ý»·<ªÑ¡V@Y«DgJIJc¢ñëYÚ©°]ô8d¯¸.¿è¼Æ¶Å·9¬aæå¬Ãäu_{ok 8f áÈ6ïÍwñ¥mÞhãzX_çÄIkå7g=ÜC¸yJcÝM4EÔÍL²ï¨ÔìÊeJFëÍ8g8£+<±$:ÄAgKGÍÎqtU~5üûpÊ}3gFé+yôÎMY«¥=½¿î¥Õ&,ËO¼>õAâµ>ò°Ç]¼H{t&1îSßBNÈt»&ÎNë©/ðr.érª^¬X³W@jóÅYͱ5¢[Â(r.AË_Ø(ï°çØ«øµöµ Ëqÿꬰ~SXHª>µÜ9à¹eû¢ÔR$j.ä.ì/ô/ÐÝTædý".]cÉ\8b¼ÎÀºoì߯¶7cz7â0âÀ]å8θû¢ã¨:ÀPÃð<R +n8B.AÄ BD(¤,C �" "ëà#c¬^U¤ÆÃÎìZP +`¨ +E< t`ee°îÀ +Fpår¸ÐÿÿOª#xÖpRûda¥¡ ØoÔI"AOôÙL&wÅñphëÖèÀÊLæe¯NÈl¬²¯®¤fTùQ4oÒ t_DR-§Ò_ëÂM"xàZÅ îÀÇK| ÈF.2 �Å´çÓ NåÊáØõb6mÍ +çq¡¦öã] jëo,þ)Îþ)ÖG¶¬à hZ©à~<f êM'ÀÞ§J¦g8ʦ"â¤ñft2 &¦Bv;¯F;ªN~q` +ÐîÍp-Ï^ãh² ö¬êÎëFÚIªDb±Úæ÷¦ôçÑíyìÛæúoäâT#Ô¢ñkðö¤oMÐedzÀò2XRK¢ûï9B¤$@nZ§gvæxÐ*êm(C7q +u1èËdUò¶Éή_+̨Pçô DÒ³íÒQ$è<u'²°é Ù!"û!q¤¤Òçg*{çÂ1k©rG$®ÜqnìAke&qÜÎ9òÅ%ÍôÚ%ñ')¡7Òæh Ë/½/OÁÂÐ`ò¡F)¬* ¯ÀÃ,à` +endstream +endobj +189 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +191 0 obj +<< +/Length 3252 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +âáðcj + +FS¡Ôän9h´x)IK¢Ñ*A!ª#z¥~Â-±»>Df7 ÍÁBI@t4D¡ªF§Baxpk&¶qAÒn2öæCyܸ(. +tz]=ÿW®d&B_Îc©¸Æt4ÍÂIÌ@s:ÌfSϨlî+¥ÚñÐ Á³DoÏh4FcIÈæõíÛzø/RÜl +1´.ô?MZåÊ0Pd% +cÒ:°ðÂ/J3Á¨nBapb)mÄç¦K2 +HÓ/K +PÚ6ÍÃtÜ7ûáÇ3¦Jè`*.`ç2L¢jÍ:n«®ì»obê»»Âpª& ã=è7 ïSøÜA -CPì?1vÓ©N8ªÊ¦§Òª²°ÁÂÆ#Ë]Jª1²Ð-Hâܵa@9C{ý¯U*0È*¯0è{Á°k¤g.º,Øí±#¾Ò2¥)K"v5bX¢º±ÕiR¬ëJÖÕa½Z!Ö/(Z¹Ër㮳ÉZ8µ»\°µã_Áb¬,¡SXÝfÑö 즹jHr +<«ÅâKo,«<¸,¬ÒÒ-Á¸h R à2 9#p&å¡FY¡`@$¯P9f# Rf&t7f¡ áMZ2 #0ó£èkpP:ÞPJÊ8¨Ë|«*= Ì ! ÒtŨíÖº²«FponØöýÅ×-Z)3 à9»ºm°UåtÃ×rÆ*6â»Rà6JQ0Bx69Uâ2 ·êßh5>] +¢H*¨Ò# Î9õwaÙ " 2âL@6æÂ` !b ¤ àønw¢qlV²ÈÎ|¼Íó<ÞoC§UÑ /N*õ=s×ö#H 7ðõõ÷}kÛþo{çøC/ÂMh2æaë°sXÛä<§óý ¯IØ í1§>7Hé@h|oåÙ>÷â!cövÎà:רïôx`² �ó_ãÑ/MgصZÖ*ëa¹6.ÞWÒS¦%¿yPp~A¹ÃæØ¾Ù_eEm7À©´G&d|¤|!Ii,ShçY[/tI8ÇXÌⲿ<¯Fm!£ºT,`Õ¤H:ÁÂ|0àHX!ÔÃFbE&2¨ÉFìØúD iä¬1$fKJ¡#OrvC%3°àÚZcolȶT©ÁÔ:ÑïöV)÷;gÐPðwNÀnà6º#¾ÊÃM !Wu +úZ#UÅ=`¶"ѶÁÁºÎJ& 8« 4ùÈ?'½m%K$Xsè"Ç(ÕðÂçÁÞ$ñXm3äð4zOÐn,É<R¦g©u)Bt®n´@\hËÙME +TØP%#7r½ÏØðJµ,PzL¢Å.Ò} +qZܧXð +cÎÑÜ|ÒÀpOèùéÔá6Ô\ ¥cX"ECeÊÈÑ3â|û2@ÐÖµÒ¢g >nZcC7Ã,á?±Ny!Q¢(2å +¹Q¦ûLé"6ÁÁ¡Õ-OI¡=Ñ +y;Áº"Úmì b6~DòHë>`UjÏ»HgTn¥ôs`.EPe»PVÀ¢ÉÊÊÞKZ® שIé÷/$¢vº1ÅKEdzi³&`¾ÈP áL$ @Âp IÀîòèim9¨±=m¤4µgáu¢;W!*¶Ãg.Ú½ ̯ÑS¸wú8,Úà¢6H/ XjËlt«M¢ò2æ|YE&eÏð¡gQ##w£ +|]7¨v]¶²¯R±Y´%ÿaI~[Í=µv/ûQWIý®ÖÔ9aùÎm n;O2`©û»ÅS0QZiu!¦ô¸Î¡ºWkh2b4NRa%vLzÅêú ûô¨PÀXÀÆB}[½q®=eqÆvùX\«/m:YHyjß*³"Ïs4Y941[ÊçâPDùSïLOH<8LàZCAÔ:ç½Ö +Ö`Ö°dÄ4òÈ`"eY?z Bö¥À5îd²JqãcâÎÒ ÍS4üÈWx)à ×\áӥϼ R)£Bý ¡I`3Õum·yIÌ ¸kÔ/ܼîvÙ©o2R6UÝݸK([èV½IºArÂw +oÔM¾ö4\ymµ7ϨGFð®(RH x*byʺ'-åG1µÉÓ~üE`^( v Ù8t`éÒzÆa°4§(Æm¢w²»8,Ð@ÏÐr@(Y=· âþè ãBó aDf-ѱ×}'ÇÎöòò·<·;ô6óýÕåqQÏÑ !ö?`æ#ì|.K[¶i·|7§<C`l³âÛé£+úW?Ïë©ýL 6]4I o7A]+¦/0bWö`AÐ3ì3ã5¦Á·{SiXçývØR¹ÎnFæå&$M¾å< «Bo\EÀfõ²2JFmáÃ6ÉDtô �<ö PÔdÔn\q`ݺ1EÃÍâøkhùpéLX`lòïvÖÎÌ¢JîFïD àLÄ +´l~¥0,mP1NòÐ +´^Âp>´ÐÊ`c*ì-TÎ.DÛM4¹&ìäíPȪÌ^ª¦Ð4§ïÎ2f:ÕiZÓ a �o¸¼®~ +½º`j*êMú4N0¿+ö¿«þÀ$ãÏêÿЬäÂE0§ð8ÔNZ¼î^%íN±K°Ãpj +Ö +ànÀf&NL4`DæÆØ5¢`µPUÌ$°©F6üâ:½íVÿ-èýÃDDB àZ@ÂBÉ\Ù°;pz>/è±éÌB-¨¦ï4/;£DïÈ `üIi- ÅF14¾Ëð` ®6 ÀóíX.Fq¹QT h= �´ö-Å ä¯ +"rîÎðéC¸Í,ÖlË#EhvÁ \B+NC¶JH°JNN-òï È@b\i+ÄÑfdCñ¤²±ÑtÿrI±Ý "Óªä» P I¼çë#±ifR|ÇÌÊÅÇÄÞ¬¾ Ĩo¨BbºT®ºÑVFpO ÈiÆøÎÎXhe¯)\ Ä àì±Û l-®QåicQ¼3dâòøÍð ¬ùÒ«! ï7¯ä¦<tª&"Þºëì +` + +Ð3mtà@ fÍî¸3A4Kì +s;3óBa30Fí + ` sNhËí6Óq7S_2ó2 ¨¦nr6qç(cöU4\¢â.dÎ/ÊÝÐqÔW¢¢iDT#'æñ¾Ö=¢î!`¤ + îú·d0PÃÂ<cÊ<ñ ñ/, +·dÌ=À@À úq°Z¦ã;bþÃÐí»&øºUåbVp=G_3Ú13ÞBÆ"èßch`Æó¬)¦â46Sb*E<DR¥Ð~ �]jô]Æd= ä/4RôV"`@µ.;ê~Tlú® +endstream +endobj +192 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +194 0 obj +<< +/Length 2820 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4'EÒ¡* ¡A'¦q¹j2$ ¡¸gY×%à Ön(gc¸Ôd()M¢ÄPo;I¦Stîzu¿ +»xe6NÆ(¦Þt½_08 æ >ÃÎ#yæ÷}Êà(`Q +CÆð¸Ìn.·£ +»9`aTG#RapÐUÖ]A§Âcc +Ìm ìá¥f·]æPJŤ\1µµ¢äÜo8Í'1N#¥q"Ñ( ççaaƾ¢& +NA@'â`@¸«Ã"7¢àP$ ¢(*C>: �K 6ðüB£H6#8æ.!ØR* IPZáÃj*h`)K AL8Ø2²Ü% +BÐÄ4¾CôAD2åÊñd]FQ¤m £z®&H$°Ã+4Î3Ò¤ +ÂðÌÆñÊ +à¡.幫æ*Nxp É\;N»í;B®ð¼lÈÆ9 #è4ëëÝ=¾ðû¹/»VØ?k`\¬$`»sP¨4¡òà.³ê⢠O ¬R5AtF½A]8z£_ k±"M+hí@À@3£pÇMÓ¡s¯#@0°! ²¤GÛlàÛsÝ+ZßxÂíôC¨é[GkxÈ7ÍØ"<øþ2MÌÛ; 1õ¦(]c Ûw½ª*ç:U ZIußÉ( pÇnøp¥X <4#pÉ% Õ¶VW/?dH]IRdÙN}= Õ v£rúȦ²ÀY5°³ÜpuÍÞkê7Þ÷@Z§ÙNz$Á 7£×|miö3Þ¥ý kçÔûÿÁbûÝÝå8»×´n¯9,y;°)P QMìèÊ2\ùÕÎ6 -xÁ£óscÞ1#!Ôû¨ÑyÄw0ÌÜôùí !ZP ÍskæÓS3N0%iï}9á d§sy%§ôxásqÖ£à2÷0ÓÓÄcw\Æçâ6QH\GÉsMe`ªõª +xá©@dÿÉXXa-TPaA x ³n¨°9¦à\²ì(ñ>¦¬2³poåý«²6©1dp! À¸A | �Nr +«kZÙoPj4¨>ÝÛQ=C,åö Üg9À5:i Ë187 º'§ÁÏ%çÒCxÊ{§(ZâjK(#=³Pª#ã5Ç«`¶T¡±äKr9æFG#)´ê³6æY¢®sÌÐÈ¥èx JÕ°ÈÏde0®i¡±cGé¢ôb{ÌGO0wÁ ¡deÅδ%ªÕAàÛHwV +Ê%>ò$qMy ÊdGÒÇ"P,.R5å@óõ$P +BM~KÅ87&àüf Ñ¢5>,ºÏRà~Ñ}ÆGUîAKlSÌy¾ì/{Ͳ¿7+é^HJQ2¶¨,öHs-!4~èhFá, �Û6¯æj` BHé©5¤<Ùg2JÅ%lACw. ¾G±X˹; ´Y± +_±SvBO ¡4 àQjr ä¿Æ¬lñBð ̨Tf|üTU^kÙX©A>nõB÷òp¡ò>¥BÕ2lªbX ÒPS¼Ô¡.!Ð:(×bÚTÕS È4Qj6&-H +!Ô-[kuo©ÈÖ¸e½~ÁP)PÛvpiöPÆÓps[±ùØïaj¼WbÞ[à@L +aÓUKQ!-QÉPg5Ch[TYÖHEjÒ 39Àä{'}UyWYqø6+¤Ù>8èe¿§ÿ§ójÎV/µØ³T~ RFÃg¨-.!µ¹8_/F£ áìaqUA?8âϦ¬Q(1Z{ŧðFTÕYR/3 7brÓ¦åé²Û±øewH<¶Ã(Û-Â@8ç0 +kXo'xH8gPQØÆ3úÑQÃM UÇ8Ä ÙVJn Ð +7øÓãTÀ¥IS¬©"q8:GSÎz\XpûdíJBqTÊ:ÐId&Æ}I©È`ÞÊ"lÅ£û=6®zPN»2 л>ÆÙ âÓéü_µÐ*T ju! +è2ǪYL)«p0Ò¢ÖCS2^wË*HpáY1i cUÜHv ]¨±ë<ÑË;RJg$Á ¥án-ê$¾r2 · @Ûêù-ýp ÁÈ1 "íM¬6ÆÄá5Riþ j{á3ãtÍ^& +8Îsãç^@ã{nVÊ~yW®|Áe| +Õ°Ò7 æUÜ¢37i:ÄÙ¦ÐôwÈC«c7 ¹) òbã÷va²~A.ÖØiuÐ1w8JD¹ßò:z(¹!ÚÜ!Á÷³® +lÒ»]Uè=øbôðu-æÜÂLkÓÇùÕ:üf¥?¾ªÁ´3ðÖ4Ìg}/ +yK;D7Æ;ûô �^]¾;7t¸ÕS¡ÏÖ'ʨ-f2ÔqäÛÜËgmuV#·%ÂìÛìi2fòÉÊ[b +ê0W×õ7+_£D1¹¾¯ÙÆ>·ù%jùPe$:¯ä\îÖkÌÉ+Ô«ØÜVä¾ �@@I8 ïªËlÆBÆb0)æÜÌtÕl GcÄÂL(ÂÏÎ{L"ïØ"ín# +ÉÌÌìdÊìTp@ûbPHjÍòÁmÎ V¬zÇàÞÈ,È£7%¼MÍàÖoÖ¸ÚÊ"Ø9å×gÉÐ>,º!,¾×Iûð R4ÍÀjÂ@Io-45 "! lîªÒ£lQk°7dÎ7ì´ÛÅÜ´ÜB5ð¶pÕI^Õ£Ì=Õ%cèðlÄêðÔs¨ÚD1oHØ +ëC ®gMÛ¯®ÛíCk^(â; PR"4UmÖMÅ.S*% +ë 18Ãì¢ã^60vòÈþßÈxäÈ%ʰzÏræ¹B¾åj´â �߯ÿÇGaiDag"'jvçrìçznhNw¦t î@}Çà¯æu +ÎHi¦5ñpñD¹àÑ ÈôÅ¢eªlì&¤q¾ì|*É îîLnîÒ®þvnÒ~ :ëe¶ è>&ä]/'[ Fì³" +endstream +endobj +195 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +197 0 obj +<< +/Length 2333 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àP7§ç°Üh()NS¸æ)¢Q ¤i%* +Dª8\2¨Z)Õë ¡APÐi9ÇSqèi7+Òì :¢AÜd6jÍæmF¨@w4ëÍçq´Ên:¡¤éÃÌΦ3æsÍÂ~¤ÊrÜ̼.6Ku̺æñp¤¨j£©0»ýLaPÄýÕ +°º° FBáµB¾=ïó&âÖ¶a@9Cx仯/Júö!Êê¢ÂÌ3üá»?ë +^Ȭ¬ Я+Îô½jXùÂèJ÷ªªºH¡À\¤° ¹°ô©¨L(ÀBÏ¡ðÛúý¢ñ +PÉ ä&·ã¨¸KÌô/qkÚKAHappÁÅLJ ©¬áÖ¡P"CîDÐàCä¼J`PJÂ8¨Át¡¨b²1Ïã¼ÁRE´]N±éF³Ëï@À1,ý2$)#pÞ8lÅ0½ Ð\ÂKL$4úñÒÙÄL$°Þ4GRc*9Mb@®'`®×Í¡ÜßX¯Êemƫ%y×Ô+aQnpÆ9 #>ÐÙpd¿Ú¸Ã¾¤ò?Ë&T¸Ë5w÷*Þ±|ô*¨"&³%Æ;Ü·<×6äVn+ÒÈeUSmD©û6ÎámH2Q£»2ë7³H@1RÁfÚµmÃtÞcÊ1¸HËp·: AÙ$®©xfÁepI2EÞ2lrþýaog©øáK-ðèëÅSÅ÷½jª_S»=DÒÇ«QÜ·®+Á¯{´*Ú87D׿ß2DãtS²NW²©ÅÆj¬U%°Çà «dAt¥f/F#"öD0ý¼GmÄÑGzJõ¢¥{öJ +¹ ßò �Î¹Üæmøòß.ªúÅ=ùÚàu=\V\Bv_ ÝàhÓÜr@À²tYËS½Q ßP)A!Ñb7AJvRI¥Î)²§ �¸+ +âçsÝÊH ¹`¾'~±2ÈYHEμd²Ä è®@nÐB@M¡8* B á<&4òâ¸t^.² �5CÐ î¹Dò¡¢2 0£@sÅ~=äÁ¡Næ1·1ÔÈÈÿ ÍYðÏjÜðp<ÁàÊclMÒjE%xö~[ágàÁ2ÄKA&ï}¡Ã=!Îðta84³lkMy±jFѦ9KÚiÀ3H9±»Ðd +akíX2¹«Ë[k~oÍvÃ6¦Á¶2p¿6ÒAÁ +eÓÈÎÝ%cgÈý· @ïb$ñ!mõ¿¨×á T²6Ùé%üê°¦'¦-,g¤µ[7ÇêâÌlmèðeCeÙ9À#®%.A´ÜæÄeù¡5½§¶´27Áéi:ÈS%E¤2FèÑ£OA¥TùüM3c Ì68DL +aáB®Ó94A¼1@Ânf1«À2¹ÀZFHäå:x¦{,ê'ú§K|Ù±` 1¬póY}²vH·ÌéLlÀ(7ÓH1CH l²áçö¸\á7¥±pÓ Ü7gL+£DÓ-Ѽ¬¬2Û¾w9¤9¶ÝöÄÀ© %%%é]`ÂO 𠲡Â˵9]z\6zhZ0êmm Ú5À6\`äÓîÄ'¤ü6ðÉ8×b²í00 ò«T= ÉDSÁú£EÞi0ã`4S ÔÖYÑÕ~Çð* @¨q(vRõ#W}Ã0f}g3 ÛAwÍpd¼@òJy¢pNÌ6×öÿàNi!°ÒÉeï®0kÍ:=2Ã`ð@8¡¬õ1Ê&\3e©)\±¯SÌ QN8 éGÙ-!«4; +?³BÂUàë1A ¨Þ]»»\Ç8ïÚ-[¥Aüã¢ïL`ò -+8xq¡Ôx>ÄÄ(¨lBO0Eß9¾]¤Lú~+IúþuÑìWæÍÌh¸ýÒe%£AÍW0ϬåØÝ ZêËÊÄ +)e½õ´V¬÷\%óE&¼Ìs2®ñ¶ÒVãèÜ~tΩª;`íµJüÚIBÄö¼ú»µAA¤sF;d°êjë)¦!ÔHé§Ý|wv*ᵯ`|C Ô¬bs ;ZËtä[sÐK½]@µ÷'Õ?UÓ|¯2¤Çz:Q©ÁHÓÉgá3ÔÊüoÃ$©M§$hãÔI ·Øâ±ËUY>PÈ#, ÆQóãpID¾CTÃZå 0~ X +TP ¡¸0#cÜ»¢§ß¼ÓðNB ©Ì|-Tóþ*°«UzÓÜ»ê'¨Ì+iFb!qf :Éxl:Eò.òüå]ýƨØoî)§¹ÊuÓ¢á¬\§* !$"{ÐÛñ>7ÈùAöpçßý +Ykm{ß}ïþòûø·CGÃãüó`ÿÐý¿OêýpR¼ü&D +endstream +endobj +198 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +200 0 obj +<< +/Length 3416 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4N¥BT # C Ñ<l0FâáÒbT"M&`¡AO& a¤èe&MÇRMÚ\ ¤RqT@h´ÚÅ©$TM$%´Êm½ßoøIØa3ËØ¤¨j££´h(c "<ü»D3G4CyxºFTmR·85Ó±Øn3§3ÈÒp:MæáM#R!yØ´KGÕjF°°ägªKF +½lPT4DlÇC? éÁ#cî±âR|Ä?IÖ¼ràɽˤ¥Jd/²²Ù%ÁÛ B÷½ÈS8©éO¶o^ó£pÂ1 BÕ °ðS(ï©¡º;¿dñ;ÈZl®/cÜ2=l»2÷Ã`PdaÌn ÄÚ¸±¬«< � Ï©1úpõ!@Ì:ÃåoXbÑ!ïPèôè0¬á �3 +v'ÃlV,Ì8@3CxÚæ¨XdÔát¦* ³Fñ*óPQ?½Tr×@(Æ4ÃHË"7ÀÒ7=jdñV=nt >,ófq<o,*¼Eq£3²Z>Ùu4¥ÂuP@8#ÃG,ã\ ÐÃI-8Á¶XPÁ0Å¥/ ølÌ-¥5ÜÈ2A ÛOc¥!:#0ÍY,ã%Îô=WUj>Hxpß_³Êó0Ls 9Þù E(LPôñ7ñòn`7ËràÚ6×xXÐ7øbv ~ËBbí åÁj³ÔêåèÂÙl}_Ã4çöýáh#â²!âh Â% îûȲ( â* "xÉÑ2zÏ @Rªê<¸høö^¦ ÙEæï¾_1çwòk +ØõPúÍ ·ba AL±Ém¥Ð^|'M`p»×Åqp@1,Üu^W5]ÓÝ$ª ÎÛÓd񾮱ìÕb»û=uJÜBÌ_h8 +4Σ^Ö{¬¸àlð[Ió¯VÒkͶ3§ëq-5b¬Õ«XéðZþHí<Pa¥D³eFÎQU(Uذ×h®Ý®«'ªÀäßàe¦eÚ÷ÍH2<áÀÆÎ½¢jøM²ºeKM¹>Á6SÔÿ" +aÊAãW0 yQ¥WÆ·³Ëþ\)é[½`P¸0æº �î&e¸Ü¹fN¡¦6ÆõlÛÕi éPØrÃ;NA©J2|K1é`«!+dî£èb+LµÄÔ5ó-ÖúÐBÖ&ö/ÃKËÇM`¥6ÊTÚÚmDöR×#,Î[°QI@PÅçsÀÅö©ÙvÌæ;aG@PðÃ)È9Jð4zËØ-I¤@гHjéU#¨|Ð&Äó:FÁ¤]J01*)®Ð)H§¶¬T QÒ˧åm¼tÜób bM«ÀÞ¬W 9a²l+Å)8-E!ÚOá¡@rrµN¥A\Sª|¼*xÝH(?Èÿ¢´°¦_5È1ÁyÌý\|?ÉÔ3÷ÞH¡%W# +¡:°Ö:Êà3éoaîDç¼µZø4x͹2>fS\ªù½òAppmUP.'sY˧æákmd¬ÎÕÿ@YÁ_¨sùPȺ6êI:?{Gª°Ú¸C[Ó,Ö8;PàcçDaAáSè]$?èií¦µÔ1¢ÂìU®ä©ßÈz:"&E¨µÔú#`PKáFÓLv¼GjÁ>´©Õæ7èBL¬ÅíÂP§z/PDH.IÂp¤BÍ®,sÇ9Y¤wÔ©]¢;"®} £Îä9¢tR*ñ+\Aå[Ûõ'H¼½ àÞÄ´9iÛWüþÃpp¬Iÿ"BrîM®Ì¹ßT[ahad¡Õ:%¼e¨Qø´úëÆì(H !1ÅW#Z[ÅkÉY0*dëödT t°[¤¹Fn{'BµýÝËa([ò%ÐeûØ¢xO¬h(¿Ê$伤ßMífÌeæGg!´kÙÇdî +#Æ ¤3Ë£XÊvOñ nd粪ÞÄ%hôþѺ<41(ÐÕ½4cK õg\©«@ A;)ç|¯ÎxTPâHê=IpóG«GØóåÊeÄ>½fùµ¸Vå �atãq3kÒÏÒ&D÷)§56²3\mM!f+üo ó +M: Ý®6Ë"Xð3²øHE 6`âð?Á¢ ¼,qÿiôß·çuÎ-X:o×±¡Â R +¡L¼³Ó,î<ÝsÀ94Þ-Þ6þYñÎ<0A L"±µÅñ~ÿRa²) � l? +6msQäoÝÂò¬Ôò,¿*<®ãeÂ怜c2´ñÚl?'Algp Æ÷ÍÊ4À ¡³>¦Àñx齦ø7à "%*¸]àD_s° Î× pð¬ÍzytÙ錄РçwO ÝfĵýÙãgLÆàÝ_$på ·}cxæØ!jå" N³à`Ghh ëOïÝDï +O¸ÞMõT ýñL7*0#ÈP©ìU`Rj ÎG.8 Rsk.O +i½ �@%Â:©Èff!¬ Ì×` MÄk¯^ðcLöCÀ`hðä6kàb÷àP +`òÃÀàgøé´ùã®àÐZ;o +F¾ïJ»®Ì~ÀP1C �0à.Bè.΢(Ü + ÚË&%0æ2c*¯Ð3ÐzÝðÍØNàÐ4.°gïð7b7Ã8C8Éä9p¤ónóЬúB2_PºB.:ÙD>o|<ÐÉÀÛ ®ÚäAJ¨ÛhÀ%¤îþÆâè2PÀÄPev¼ �PÅÖR ,Q"våQè<èB j\{l¶é'Ø7NÂñ^ê+°f¾á xÈb ëbpeÊçÈÑ +DîͱpÍã NvHÖ à¦ êµ¨Jêù±(Iz¯ÊÉñÇÎI&¾újxDȱâPãªhbîSÅ[ò07B2L͸&D¤þkh9rf±Âvzif§ë3¦TEâ¹ñÚ@¦ì ^Núf*°îÆòHBGÌck®|rÃ"¹äe|X¤Sn«$*nF ¾R íQ=HHR¨N (û!°¡(zP¥ZEoV3Pyïa/f# ÈI&Þ#LÌGï`fòMôßüó,¸X°¨à¢/ +â)¯®ôÊ,yàüÒ>¢Ê§*ryï°[Îm42©``³=@Î *i(täÄ@èRþ òXý(ÈðWÅæßàêåcåÀê ü¥ �L&) E&æ¦ +.÷/dox + §lÀ£>2&´/Gd{3¢{©7n{%@ù×Cñ#27ïˬ~eÒBÜÎÃÄ~Ö1AÉ! à²B+pOdE.|8cÕBª¸è¹<"rSÇÃ6ÒÃ*¥£-é+æ 3p÷.$[ÒQQªÐ(PÅ%4»9ñÌ9äî*{ONB¨C`7O¬:Á*;× ðïG^w1ôQCD*£¿q.÷HÃo#¯&ò¯/4E¦I3KNúDîàûPõE¥¯c24û2p2Ù*÷2Ô7¾ÿ#zòo`æøøïþjÄâ8t9ÃG4Â5<3WEB¹5ÂÖû£ ÀÎüû¤Vû§_6@â +endstream +endobj +201 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +203 0 obj +<< +/Length 3332 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ÆIÓQ¸qaã(ñRL +KÆ9[a,iÀ n6FôAR1¢¸ è)o¬¸êS¿Ï8%ôX)Ïî×mû #.rÁnâqSE£°0PÔeGÆcqvº¦1²YÅÐfA T5* E¢QA(@6«ûVÖ^(6[¿µ§#yåöà-¾§A@ÇË?Ï>óq¿Þp9Nzz7H¥¹Øj¶!hbÚ*èì +Zh°< P*"p¨ã(è&¬èèÅ¢àP$ ¢(*D8Ã)¨Ò$Hè2±l_ÆB0Ø0ã¸aH¨5%p0\\ +xP4ä1 El8è9J<EDÑDU±Ô+Fq¬o` )@6D¸ÒŲ¤¬7 £ð!㬫3Fì Èr,â8Ê`ÀP"¤ ©'´ñÎx©P"4c(æ1Ëè4ãsøÔ ÏûR0,Á(]0ïSP¨4¡$ ¢2ðÖ`T*}uAÐ3 ÌDAHvýdQÔèf£ÉDÝ-)$¢ì»ÂØAÈP3PCWV èè:Cpæ lÈ 3XAz_¶Ãà2cHÌ4£&7_õ^âXðªÐKÁÎ)mXµª·%Åh;@à0COUbä¶M!Aº %A*\ºË¬·.ÛM £Ö6ãÚj9]Æ´56^ÒàÊ;TÙ 1Õ±¼«}z»KØ6¸f3CxÛ·XP0do*bØÆ5cË*q\>#a5"A&YÛº´×¹d:æï8×Ò»k "ñ'ùþ¡3G>èy¬!l®¼!@Â7cÛá_xn>: ü Ä:Ã7rgãç߯¥ÊrýMÍÙ!ÃÞõÝÕδ»ófÎBª}ɳ%Þ0rì×c¶hHiÜâÈÙi*8Ú �çÚJ<w*@ÒÑûrEù`25Î9;ïá(öÉßêÇ-Ð6§àÒC« t3¯Öz×|HpÕ;vBbÜ$+zïeí¸PÈ!sê7mÁ#¸ñK³f!¼6H¯Ö4#`Ì?÷D¹ûÄÅ9<ë[XEõ:ûÝ/þäÕrñMíBEö× ä»îÁh3x Õ§»çã%$71 LÚ ðÝÏÐ 0Á°6ÖR¤hˤ¤c¥¢=9¨6²°6(PEr³Ôd²8Npªfûe_%àØ¥®·jÐ D2±¹K#×óa¨á/¹É-Ò£àAæ(ÀÏ1Á¬Xó1÷²ðP¡ûkúBªºÎeØïJ)¶¹¦ð Á6PËKy|³Ú¢(R»-0áP4ÖM¡3aýÍ ` ]¢tU`Ã:Ü[åYf©8ç'è]-@ÆÆ øB!@' 0HO À1='¾kå tt¦Ðwðûgúi!¶3sw5ßÔÚ*RÝ #.îÆ±6ÛX8-¤ü=;ÞC7|À7æÈ}_ÓÁ¾IÒ(Àf Ð)ô(ä§N +þÌàÒ¨ e~ľÖL ?¡Ä:ÑE÷QêHYa<&Ð%Yõ¤YSHÝÀÕï?ÊKXu¢V²Ö e7KmpRƼæma*¸ø +K _²Æ=ûu]Üùt³â#4RT:|Øh\ÙxíEz¨CbÏPV°+ì^»H(ùªâÊÖq^3×OrS¬&0}°üõUjÁ±-ùºPÄ[àsj2cÐd·£m>u·íÖÎy è(<äøõIPÔú¡/¡H¸¢ÿ^§úù?trß+Cj¤R¸AO )-4²µ»Y¬Öc©Òç2åd¡ÄÀ¡VÅì¾ÔKCèݰðá,by±Kxå䫱aÔ19N¼er³ý}gÌü÷´- oJæ| împÄéÙ9îç êK;vo Ö{´Mk8aNÀöun-jºÑz¡¬ÑNDØ0»µ+âqõJÉP1ÑXLÝܼð Æ.<¹f4c¦Íy;¤ØÖb0»LêkïPÍYÔç\î½+S N/=çÜþt ìD9sôSÊVÑÙ¦¾¸|FÛÖÓ²6®ÁyÈäÉ)åì}ÓÐ:R^õ Ø÷e[cÑ ÔÌ4±ãìWq äÿÂÚtm<§ðÖWomb¦Fìzu0诮¯ús ð£âµ£NBÉêÛ©jDmz# +AÃhp!Ë%ÛÇT²U>ÊXP´ÞðyñIŽf_a¼hézP5éì!7÷hR®åè}-{"·W:v÷ê XѦ£áÓÚO'BÁA«y4îª Oâ ¦ÈuÒñs°Z?.0(»1D?,üÂÛsÒN.¹Qg÷¢ó:]dú_OgèHßó¯×£cÏæ9R*$B¬GaxäìKxñÁr#¥ÖJB|_ëÙ'ÅìwÿÁ÷Awí¤ö(«\5àÐØ2®D>i¸(KVóCù8/Ä9¢@ã¾T#j$`*¢®úFþ¸ûæ.)2#ä>£ð?M,áãùc$#¤þ¯íp ¿D¤OD®ZÌG.J¤¾D¤NE$²Q'Ìè 9 "6Ç=ã®+âÑN-ÏÀn2 TÅP %TÏ:ð>9B+oê;C¥ÈIÂYb´®ºÓæ« Ûàèøï49 �À¿,ÄÃöÏ ZjæÖm§.0ÀÚG¶ÄkãFºæ(®®cì¶²ð#gðêDt,K,0ÃKëÞ{ÀnÂ8¯P!1=Cl+øeÐ,JI²âæä^ì +g9 +¢*"J¾Åâã°¡ÊÛ`rÌ©¼ê^æÖúýʰaò|lJÜÍÝÝlÝËÌoÐîÕê|ìè^+_íü ¢ÎmÊîîñzÎX©üá¯váñ(ÃönHãN8Ðo° +ùpz61D$d§gÄeÌn6i NN¦ê¥` ©Ñ? +ðF#*Ò ä¤ëéKppYQ=ÑCòH#p!#k!PnÞnâ¢â=èÎÅME"p6$!â;#m<Ò<¢ñ÷ �ââ¨jX=çP=^È Ð=æ0 cÞO å,¼DÉ +Ȩ/%]+ÃöR¦'öãã#."û"þ#Zþr+^#Åp7/ø7¯ü8CXìP$py$°L¸%R-¤±Y )}#o§°PB@ +à +@d²òRÇ,À×-F&?%ZH@PÀÞã°l rCñ?8R!'@IeÍãµ2§i2àe%ÐTåR°òtQÒy"ʾ@\p&{ïG % ØÜg,dMÈ *úÍç.Ì-ÐJÍ,fh ï(sxeËpä;Ï@BH{,ëäþv[í®³R;³¹?h(LbÄ~'À ðJÌ.òì'íjb´_¨ ÑhTÒt4 f:Ȳ#t?¸CfÕbr`` `5êª×fèCL +Àç¶C>bûhPÃ,Z^«í9Æ{=/*L.²ðof:B3ÃʨÀkÄ$ ÞÀÌ0kO ¢êÀçÒü +endstream +endobj +204 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +207 0 obj +<< +/Length 3071 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT # C Ñ<l0FâáÒbT"KF +LÌ0ªð¹°(PB2ç#(Ân·ÃIÂt4îca°æ :-¢¡ªF©0ÐPÄeGdõ1LÊt&MÇRIÐÊm!NÓ Àæ\8L4H ã!ã!¤+'K°Vë²Ñ¾É7¦ãâõEþLúÙs0í¸iÒa:Æki^HpNñ¾Ñé¦ #¦EFXÿØä@¦*ÂÊ7!¸fßIÀÞ;®KÖî®ûÒõ¼Où<JBoE Ð7»#$@3 #æí¯c +ûâ8Ëèæ¹k:Ìðä6#s¦Á;ZØâÒ=-£xÍ£ëãhA¼ëüo9nl®!@Êû( ¨&óæ7Ec +ú2sXã¬ZÄ¥Á¢)=ÏôÈäô¨]B$ÐiòppfõÁ¸h +L¸ê9M#ð£¡-"SÚ,ôjR«ED«é´¤i«*H¼®`éMÍtyC`Ê;q0ƽ ò@öA Ò<«ðA'>[©p¾N°Ìì;W Q,4·U°õ>Wà X[d£ÕdQ5æ·ôÍ4?-ʹYV5²Íq°CHÎ4;vŵn[ÖÆ ½û|ÚvLäÂÎ +Æ£sôöϳýPaX7!¤õF¸\R0P"CÖú¾ì;aÔù8A¢Õ!uVÍ \Úf v,Ârô2ãíj :ÔY$ó£e!Ai #¢¢J¯Ï9fÁ®r |9am23=T½òÍ:ZÊ×19eRhÚET¡Â-Zíx3vʲìË6γí4Ó5 Tæ×k°$a6¡ª§´j3õ·£ïU, °SÚFéèÛÌ]ç/Ü÷½ Û'¢R>~§£Sº4Ø" `PdÕ!UC½@c «¶ 6d3¶½"yFKl¨h°(neQèxc¹ö£ÈÜÍ21zJõ4WÚÑÜCIiouC:6ÔH!g á<&,fÑ3ÆóSN +@M¡8* +¡$'@@CK °ªBè``aáÌ9ò&@IÉÂ Þ iÁb\M¡À!Å$àjÛkn;¾öÁ,'æE¿fÜÍMü90äC5f¾2 � K'è¯ÀöØVʺjW 8C×HØ8R©ì¬¦¦ ¼(Q:9ÓW#`#]6fÖJGÂÔ©^7-5ÒUÒ5DÌËô. +JaÑ*¢ ªWhȵâvíZðlf|mAÌ8!ÒÒ)lÞ¸\¦rL!æÖb1=ðj¼lÌ Bx3:1ä|ÏO*qaR¸¦àCaHø³-&/ô ê£ S HAàíËŤÃHv3G¥ ½`fDdá7rPYADÒ3s,Ï£ÀË5CpdZ|¸D³Lð 5þ)°~?ó}Ég&IéÅ8u/²J¢ ?*U<¥LÊ|V6 ,`´±ªhK,® ô& ±É©5¦ÂZHÈ:ÓI ðb'dõ1Â|C0fB&y8ÒG~ÔßµrzUùÔá_Ud®1ºúÔaÄ:>µ|JNXñæêE^Iõ{¡F]#ÕòDaÞË)úÄúry¬ÕÉVÍZàÝm}@µ¼jms¶ÔÇ9ÃIÖ ÅâÀ#DgèhIIëÊ°Ú X]£ÖçÚsî]µêÒÍÖZKʽ¸[4"Ý£å®_å¥ à&`¾ÈP áN$ä{½Î¨»ú +.¿3¶·ß)åSîíÀHÅi$Æ|Ca8ô,P19i?Ë6¯~¨ +ålÁ ô7,¹<j»ïlì1nßÖ WK4ö3x}éùrFJ%ÀÖäS çP9Ú!5î)Ãf1C2Ä?ôÄÚÕeË\K¯å²wq?NlW¹ÈKåàÜBO ±('D8ñcαÓ&ÞtxLÕä ,qpûµËe=Ëç e"UHáM©wb³åyé®~zÙxf *²jß_Ka«ôOu@¶Â:®~gÞ½«5nyeQg²nÉ8g Ñ'PªúÖGÕ"Á¤ð¬ù#,+AEº¯»Ø²|ÆØÓM®ÃÐÎV'Ö*ÇXÒz(´9£;$l4ö ñEÔZ&<õã)lç«ÕtÖyìíÝo¸"ï;õ2¹'?§&ÁÞVóz,-ñNwÖ¥¢'À`°Ä[NÒDÔo^iÃi/ûgñí\~yqcÚzÖº& å`Ï);á6°iJ/P}ÏrÉ!Iòÿ0jû"Ú3Gò?H)¶¤¤¾×æ]²)»Î×mçàçà ³ÊghÚDn õL«@ÁEê«6SÄzÒ&þÛæ:q,\Ðãÿ04ïS©©Â¨ÏD罯5Þ|qñö83ïjK¿²=i´ÏPÕçäb æéCúÕóòÜ2,j&[CäëùÅ{ñãð£ÒðÃÂælÅ\{ûÕ½nZ> ϾÔzIS +§7¼k©ÐÆÂæÂ$ôm""éf+è%$g%.S%~S¸ËZÇçâ0mmØ¥§¾fkpWX%xð 5 +(a)a.xn--6ca9a"Á Ícͤb.;e|XþÀ ¦®.Fdªid\àÒb¬xöäö +þi®Ôf¤¯èa-ípâDÄܼ-Zï0-«Ôâì ÏDJâÚ^¢ì²Ïú¦¿ �â02(Üà!æp) *nxgÄTp&â*00?b¦{§Zè"jÄ 0æ}dõÆ¿ �ÆÆòofúLBØ8èÕ¨ûH"è!¤ç ©Éèêè03n´ n¸<n¾ì%xì>kPä§G rbp ¤zzì½Æl#¬È|ÅÇÊ|çªkÑ4dÑ8*®Ñeä¬*ø +gü& 0*.¦"ãR&fr.ª h*%¢ `¡ñÂ#P(FpZ ìøm.¼`@R;`ó%ª4S)hJDª +í*À®§(z£øî¤ñ´ê¶¹ÀP +@h\ àS#ùQèOîlr#eGîjª®Èäìôã¨ø²qhFUñ¤ùIH>éâ6*R¹P³±·#R8 <×Ry}"iPà°¯L¢ëè Ó +ùs³$I)« +°DÆ-.RÌãç¬{ ×tÊÊÉèæd|së¨1å*&,ÈÉÅ0 & «' ʤKÆ/âØÙ#´§i ÚD ¨¦/¡8 Àà®\p§ +ª3óvÙ Ù2ÙÇ? +endstream +endobj +208 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +210 0 obj +<< +/Length 3020 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´c$Ѹ¸b4á³4 + +(RT5RÃU. +ø¤.·a<Yí0R5*oG+µr¥3OÌ&ã%Ñj¶BoðKDiubO7«Uú +À0y¼¢ÁdiÄüàa9M¦S¡äsÎS¤Ìy,ÈÊe7fóyÈÈi7v»yÃ8ÎÓ©ÀA³7Eо¦Gª£A¾¨ñ xƳ7N|^V,@1'ÀP2À)ûÝ ò2±¬Xò;¬0@7Ï2¦¤j²°¡®!æÂ¾ëVÓ¥áÃVüÊ9¸®8Üñ¬k+8¾2+rÊH4©{âù ¨Ò#A#8ç©,>¥á¼w4Êàp˵Ë\Ø6M£lÐä6º+qÈæ4L) ºÓ#²í»®ûþ8ÐLÒ;FJpe§ P7Ï©úxÕE/+ÎÈ-¬Ò"Â=0Êû<1ËÜ>eHD,8¨°[$-tK>¸ÓOrÂͱëã<À0L#3/lª¹Ncè:S,ô¡¢â$0âÖakॴè\QQ«¤4ÏÞ묣hÞ:c(Z1£ é5Ò(æFháÃåYÊ+c2ó<ÓrH¯ë1,°¥û6¸c0Þ6 xîèáÔfG!ºeuÝ·zî/b(*¢& "8>°n±8oØ@4·Ú¸ÌhÐæ#Ô(:8#iNë-Çl,Ô<iS-á6ÕUABóVÒôSBÑÓ\z^ÓT_ º0\ÈF!wDT}f=ûÖ⸸"¦?äièfÏ×U`Ê3nr4ãt`î_ÑRÞõ"¬YéU%^4Uz®ìΰêFtU¡heFaÊ=¯âIªÁ±sÞ)âB$mÙDkP²Íîã½»· Áð£G¡ ÑØl=9ÈéïÊjÍO¦±G;{êýµ'>]Gµ>mF×wk5 m[õÁqMaM r#?Ý=oõø*hB$-Ø6¶Ú¨T +<'!0廲îÒ@¨Cxé.³ÀàÃF l¦Û ð(Op°¡ �Ánõ¸ÎHeO¸:`Ïc n1Üvòr<0a=WgÁL+ +=ó©å@b6Éà29'¯Ö9 +j/mP&T°lÙß[Ðÿ¢³hµ �D 09cæA@h +æ23)Ûªu¥ôÂXV~À) ×àß²{7FðßÄþÕ <'ÒÀ4*&ô1ë$&Ãrc;A8¸0Þ%Ðd-E|Ð }k¸q5]òàÞC4/ZoÕ÷¦ æþe|©pv.XÐU +aµ0¨%îá$'©<pU +<(P ¸ +efA¼6´÷> ¸á +"¶!TMÖÍu>O ¡4 àçå¨noh@ê¦}%l@ÈT¼Õ$W-åÄåâñ Â0Ó9*¢c\ȹ¹¥2^^B"ÇÂÐP¹|#Ê`IÅ9&Ñ +A{Tø°»*ªª^&¡'>Ãru¦tÝKXé*Íìáéj\rÎiÏ:'N\pOæc8 Á[ÌD.]B"¨DSÄÚXÓVÆÂ¸ ª± ùÄ!xk¢A¦ã¤ONzdËÊC#«K±0RxÂK + =ÊT³n`(¹vbÀ>.dº.ôîÑ6æ¬;Nl¬Ü {·Ljk«öµ +ÐÇl"R\).´¸ïÓ:¬Q¶ó.DÈý\÷©R0D®EÞX È80 ÍA²dýC¥70¦ò,a©!r:UA +I·2j-Cì^tÂSCiÁ¸ +H*Yðo\toν2êSLaã è¨90u»ã¦7ÃFà#1ùæxîcºoÞÓ6gØf6ÒÙtOõÑ:Ù¿ª6 íG£@ýÃ"7m7£r^jcÖ?!Ô3NzËÓÚAçAfË`cl*.W6%^9ðsh±ÉÍyµÂ ÁTÜ?É~5cQX +ÿ]Y01$+àWR¦HaPnÁ@ET,ÛáÇY1uÄ$_,L°°b9jª9qÀ{(í¬ ¬J �SD|ðÙ×Û �Û± +Ãûs}ìÜLÀ6Å[Өබبi? ÑsPl9= 9dÁJ{4äqðë)N;ºVèð@1|¦b®ù-\(Êmí¹«ð+[$Ì]´w6¹5¥Ì«n°PÃÌÞ #¼Í¢·Þ ôôvQ8H'ð´äv¯Iµà$P àíRsÂáϺ×@ÜTnºRVé˧DÄqCHp|â3õë×1( `ÀªµÏWd3í¨2(¸"èÔRiäiÎvPzÜ[Ú:ÄG´¥`A2õê¥!¼Þ«ØãÉ¢Úv]ê+\óºG'å]®P¤ZLn¶5¾Y${3±#ªä}aÕÎáÊ*}¦õ¡AûåwÄÉóù°ëE%õN¹TNbZeÉTÌòÌöÅèt«íD㪡ËòÈ+È(öÈjn8Èø>ãpeF¢§þ8Å´ô]EPl ^kzð0øþ6f#b +,÷ãÈØ8Fð¦á+øð \çÎÀàdè,RóìÝ v.,(´è0Êo(Ù.ëO0èíúCVÅ\§è27pÆÊlÇ"Çec¬MÈÆÈÀæÉɬ ¦¬p @Ê Êîû«üçðÜ Ä#`nÖÎÀoÂ"âØMêªÂþ"Ù0¨Ù-ü#`#>Ï @ààË 0Õïî! riððknÝ¥êmàooÞªdñT¯+O/º2àbaÄJéîÔõÖ0÷î!.I ! haÎâ§Ô n2ñaÀb �îNhNR XÜàb*$r#ÀjæBæjæîråMS·0û"drÜq Lé°Ø êN© +.± ÄqvÛ£æ¤ìnÊìñ¶ï.ÚîÀ@ï Ð÷íWÌL01ö "åïñçòF = ηO3Â/D|ô*+ø.G ®D"1 ïàêä"`¬ïh£RJ¹ì¾ $º¢BÈÉé90 +O%Ëdö±Â¨PK0eK£+,°hQðÜBú¢½ªRÑmâåòÔÁã"Í(-ò#n á)¼/ò/°I@Ä=bôŦ¤Ï¤Q+(ðäðxKÔãÈLº¦ðľg Ø8 L:6È>,¬L¬pU2÷'0nhJ¨¯×-o® ¼^2·ïfà£5im¤g +endstream +endobj +211 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +213 0 obj +<< +/Length 3350 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@àd.ÎÆ#a¸ÐPR2§#qÌSC¢ÁHÒ:L4T0ê°ÖÂ+°Am`0&uñu26N +IÌ@) c©¸Æt4ÍÙý åq¹Ýu"1S" &aÐÐeL¦ã¨Ða7 î~ñF#e¯°Alh5ÉÈÜ~+&(7Ρ«¡| ߣc!Àæ Tí±²á ''8gsÞã¹.X\ -àÒ: zäº3˺¥¬á²÷¾);&°!: @¨) +¢(XÝA8ê0N@è2¬ó|0Á ðÊò<Ïf#Ü£ap¤¾/û;Å3!@Î4Îä9Nc<ý'óâIðË)ÚÜñ «su7ïÈà8 HÇ5-Xà9 ã<R6¸CNÏ5ãàÕcHÄ4Í# òÞ§a¨P7ЩðÆÕ«N4d97±héQ4@[C3ñãD2.#(ä6#tfçB T3DdÞ#7·¢Fô©jj¢j*ª¸@È{B;¢É,0\-K`f£à9.ÕBô)Kú À¢·0Ö8j Á»¯1ϪÆsU-×+ÕwpØUú£_X°p§Ñº9f2uû¬«8kjö¸8cZ¸ËRÝQ8c[/(3¥^\H½0wuÐÑÕ§gÞ¤zbc,`2¯ð¸LGæâÞ8£râgyìF"RÓó£ºN|ë¡©_*:Yy=½iøqavh1àn 8R¾)sØ6 + ÝÖ8`ªiü>hC^ÕXWZÝùkاáºOáWp]!kcËÂ8O¶ì½\óå,*±Àm;¡zT°Fª:p#~ï¡yØ+Â#+¹1H Ïè !Ýò £a¿X ·Qíïþfëço¢z~¯¯ì·Ct3{¾ÿ´þ �×Äy\éÓKô¨,DÀx5 ÜP³Qe]É×Û¨i Õ8gpçÒæw.Ã{Å&/&V²tHT#hü÷¢hwÞ[ÍyïɬA_ ðx¬Í!<c0~ !¦ Èps5ð=§Ø¶¡½L©è23vC(dS¦¶8 Äj4FlàBæEY!2¨ý +<S"wÃCØPýÜ@\ +ëÌÇ,´ + ZsT*QE¿¨lù ÎIF$@Y¨n+ lrãA¼UáÝR@ÞÁehµ>àÏu~ÝJ) nkÜÇ e(Ëæh|z »ÌIúÔ¸e Í#w5æo¾j¢®sfTSJNFígT?rºyªwoáURõ?Ǽ]¢rß0LRG¤Ç, JKTÔÍÌðw34 ¨&±ÍL¹M& Ä¢Q'ÁÄ:ª(àSA|$ð¤,¥È¶eÍ ÐÃiF¨:Ù5èüÖÆ®iJQ* §G²)0 Ép2Hò¶&´W"Íl´92Þ<Úd°E +APÙuPiá øÖ¤Õ%Eê=rqÚ<VØø+8C + ;Tj[Nimpòåù tÛ3}IEº}Ð.eÐìínÀ?#+Òb±ÅüÓÚ(1r ±P âÌåt³9I$ô¢Rm\DæÔ´Á»|¯ª¯vwëü?dkðÉ$ ëíOÅù³Ûg浯¢UÙ¤ )§±òíK̸¶¶8ÕLàÃG§% E]'àØ ÍxdE5_ {J«ÓxocÌUܽj ÅÀâàÚædú¤Iɺì0£mpeB>UZC¡Ô gí=Ë=R<[ü÷ñ5 PH³'sð} +»ÄâÝQ5DÍyºTê¼Ð߬õ¥-Mîhà|DRîÈ3&6¹õDâô"n*/t(¡SèêÁõ¡Å&¶ïaöF ªñ[:ôOË ®"×náòµòPCñ¬!¢»©¥ÅëpºQ¾S-j¦V1øvªØÓdoÄÌ÷æ2ü@9;9Åxå: T<vF¥ÙCn{ê¢j&3ò÷ö{Ϫ_Ñ¢âoÔ¦¯P9Óðê#b8æýë{ÙêtýȺ2¨Lqìl¥ºÂÐÄqpAeÖ?`HîÌ4wËÁÖË\OðæÒý×£Ú@È æ5ä . É ¬~LµuÇ+$ORrÒ]½¤¿MzTA¿c|D¨»YÄ]-Õuwn¤ weóÐ}Ä,Zo¡ØÔS=À/o9'>ÚN¼&®ÞÁ|o®ÂÌèeáÈ$Øoî$8©òä \D¼t`((a)3.xn--kiqh/-oia44c>Ò¶¤õ¸¼`cóL®ç'{h´Ñ¿_ªé-¤ó«\$¶®%0ð#XÞçl|¯jPª%FÌ9O0A]F^¾ïÁ¥_ +uqáAꧤiÁn©ÓÓFu[ÁòíDnÈ1*;4zÜB, �PݸoçÏdõKêpeAôãêãÞÇuÝnEvo%ã-&ÔñÑM_Gâÿd«×"èvlX[í7RñÝ^§«em»fCàà\¤^¦ ÞíkÑ{*nÖ¢ËßecB&ÀEЦ&~F,c4n(ÆÀmºâïÔe Äeb0xoä¶`~ �¦¤oÍÒpP6Ð<ökNú¨&ø$fÀÚ"1¢ªûÌÒue¨mFØmÆànE\ºpG°@}ÐEì/':ýÀh!ç~rg*è0sG8_N¸úíXm#í ÈC ì àÒP2nð{§êzÌ"þgúo§òA  |'Æó.6ª Q0æ°CPzG©I`ѱ~QAÀ@¨(â¿hú¦Xo± +Ï´-bÎ6ðº`m¢¨N (VM°Î pÓeÒÎÈ8ÇPÅèx¹/Rk8lÕ3Ñ7̤Ԩ8BO¸¬êí¨°¼(Îå E0H²ÖVHÜÊ^ñi¯¬í¼ÍÇZMohqBжì¡J²lð¢,l¢«ëdÐ~ó,4óbÈê©nô)<Tho@¤eKÂ|¤êT¥%8ñÞÉ©¤DË!xB|ô4yÈòUY·¸ä;xÒÂ#7' "NA¯-¢Ì"æ1Àj=É.íåDÖJ¼cë|m0%!Í ã(ÎÒ"j6£¯@¤R<¤²>¥± +v¦ +©v° +f¦ªnPÃ#²ï-äPe^§ê¨i<¨ï@HÒ©¨|HÙ±ÞR(éºN]iôsCt' +Î*ÖÇÒõ/ÊñzæïïS#.@¾°H~å0Èû1 "ÉØôGë;.3²*§Ä ¼üÓ&lèBNÚ M'®FÄãõ(ìݬ):%Ä'2ës x!lÃ.*Â?)rÓÅéÍjjëlíS²BJ¶Ë?ò}^öÌ®}SÕ§ ì¨dõ±þË3¶²¤[òÇ$öy,o3!´Eäîã^cÄ2CäG Ál0ªl6« ë*ZUåH ÀÒ ê ´r ?}SîÍ!J³Ð²Â^Û´_F+ÏM(F¤2]£-@ä2)[4DóPI«îKdsfNÄñD3Ï$ IËÈàÅ5ó ÎÐ6" ¯(N¢øq5¢ìÈ #õË.ï¼CTDe_:³ FB&7Äà Σ¤2,ó +endstream +endobj +214 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +216 0 obj +<< +/Length 3518 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* ¡PÈ ´c$Ѹ¸b4á JģBäo6 +FqÊ\"¡ªFRá ¡°¸p5J+`¡¼aKa%ã:ÌÜ9ìg1ÐÐeá¼ÍËäNS¤Ìi226kA°Äa9¡zM#Ra0»ØÄp.$+ ®n2].ÛÎò2Æcx¤/ ®É +ÀÐsÇd-ﺽsåñÞjÀf6Lç>UßLb^Zì+ÎÚ¸ ¼ Â~86Ú±£(9´m(Ì<¸Ð4cCV³-xä¾²¿A»)ʰp¥ºì3).úl°3Kk04² ÞLÃ$: #s@Ì>ÃÐç?1(p½¬P#¬k,8µ3kzâ¹®¯³vü*¡nþ½Ì"¾Å!´ð§ã0ê7c Ò7ͨÚDRR&/¡k(8R»(@@PP7 ²( 7¾ë/¯a\N¥ �ä+n¤Ooà §ÐõPM&#ÅÊI(3î½£mòKÌì(bé@¬xQ3PXéÈD00Øò8@7*¸P2Ú! P;ÔQj«ôS]UP_AT#F¬ã=gmd:Ø6BK>1 ìµZ·5+{IÁ¿K°ÕjÁDQTeñ[ å+(« 4©1°5>òO5% çá^CQgâàU$07]^±x P6cYäÌPhß ²ÑõÜ×6¨Ò´Çåj¶°A Ë:@29ÈålAmÊ¡üWp×¶]bÁAYó [¬ùÃCvÊðö} G¬Ð7údï$QسÒMNm]äÊíÆÂRÍ[ÊñÒWò=^P®ÄÓ`²g¯Á[ C_ (ÉeØõ§9,l¾ÅÃmnÜ9îc¨ØÕIàqiêµ¶®þµ&·>f2qf|IoÂ6·=ü70õdT ÈUÛ ¨) +¢.Õm¹èÇ:æÞ6G¸Ûóö`Ê6Bÿ_öö¤½nª'ü¢CÏà ÊP«¨I4cdä°fO6ëYÃ@êr!<Ê=½b$u`ð $ ¸?àl éì5Áäè_£~É1þ?â&þÏÓýç rá9tÕ³!0Þá,M$r@ ÄÁD. ÐÁú²jþL9Îæ?õ% @C,áÌ9× CfiÀ2Á¥F¾bV,F°noàAUn *Fv¬ËrH%K%y0äÛséXÖ#a&RáË ÐÌü98¨äÓù~#ÇmǼz×°B ²Ð§(à7,$ñ˳¹LÔÓÈE `(þÈÖ¿Ap7!(Ó +BÀ¨"ï+ ìj6@øoÓ;±ÍòܸS!¸7 �"²**HÂf£~Q;ðÒj¥ût ¦c ð>AÍ Âe¡!ܹ¸Êýç¯Sè:\ìXS¸O !Á9'IòñKÜS*F �Ê*(j[zRª}$ÄÃ+ +år¡Ö7C(Éá>jdô´ +Jï6&Í$1YýÎ8LdcÈÙÐ:O)2ÍfNäIx2Êyb9Øn "£Bl3®Pê,ª×sÍÑPë,a3ÙÒeÌ»µoªpê;·¦JáÔFj¶:¦zÝ=²6LÏÆÆr)£¸*´³Ëùâv6* òû^ë¥>uâ´ÈuÙBÝeFB³ÄçgBÈa [ZÔØÌ¢=´¨ß pîÒ௵-§ê·W[©vK¢ý´zÒuJô ô^kgp´)ÀÊ®!Lj&³G"ÎA8Ù10(!3E )xxÌb, gÂy +q3X¥fáX" ¨V³ ¤dsxs6ì +[¨B}dÅxµ8boqëqï.*ì G Hªd» þ×"-\U~`ß©Yh=g^ÙÔ70åplv¤¿&$Q|ZÚe; 0APÊYTØ3eT¤-:#TXÕ-ÊÎVÿXæþiIR§.=|ÈYFïfÞ9K ùG§ëèc¸Y+±Ézl½62¦.ɶwq¶[`ÛzO ú¹°5#Îpq&Wö5ÝsW(º*eÚìÃÆ/kª.ªà-ëfµeùÕÓXhÒ×j7¡ÚųTô¼Ç«í½Ü¿%øÀ-6@B`S{˱¶æÈÒ01ªFzTþi` w¾6Ô£×ÁDîå: ABÇàÌùzÔIþÿ¹ÒÝÁFÅ!f¥'Vr@HcÙÚê 3Ë¢9M¢dNÉz}yûÓ¡'P_Åú"uCÕ¡2ýiüóxuÎI v!S.Í.ú$xV?Y `ÂZö-S$O-hÚTI´ªÎýn×öI%# YSûl)6t°0SX½þªÃ ¤+ì©2$Íìføû~&¹³kMãqÍo}믯j_Vï¶ìæ¹Nÿ<gõý¯v|ÏO# �Î}Õje øü\À¡Ê ¢M¢¢Ë pP£ �£ +ÊRCã ¢IìðUÐ$ +(`اgN00JJõZëhpçºHtþïÆOªl§Ø§jzZ +Üéiøó®þC|7èNöÏ8îÝmÄ¢ ÅT¯ÏðÍÏúØVÚfö¹ëìP0¬yÐDí¶M¤ÞN$æHÌ,2,Y +äK~ÖþËàÈn@ ` ÂÌè6¢8MM®0²UÐx?+£²Ú +) + +ªTÉ¢«MáeÌ, ä°ððÂkÙE£¦oÂã0ª¾¸ùëf®«vÃ×ìÀÛñ$¹¯²U>ÒHÁ ±K% Àê ¤zlEÖi@ìC0Mæ¢G$vÂËLÉL4Éò5Å0ú1²®¬ ÂQ- ò~ò)Å%ÍEN5¶DØ Re¬¦Xej ÒÉÍ.Âê3 �BÑh7çÚñs ¼«k±Í|Ø*Ö®áPÐàÎ B|YàÊå£0Ò � lÕÒ84+$ÀénÍ.wäZ+±,¹?J䯰©Ó2æ±*U-$%ä 16hªôDÑÞ¾Rzm(XK±q>uàË/&¨¬¸¥îÄQ»qÇ1ÆÓ 5bÄQìvqÆ´ îNQüÅ2T rlO*oqFâêé)-QªLr'²'0ÖYÐên¤-NµÒ +ëbS¦$²OÓ0³.â`êeHÍ,-Ë)i#jÍsCç0»Ñò´ +.tLGl¯L¯0&Êð(a)xn--n(-dja.3- ͱL»"Ñ6 +0Ë+Sc|"Ý+-#'°ÄWÂ@kÒâ¸èGGÒ¸¬Ìi¬2o +© ~" ¥Îî©j[7¶+y(å4¾KÛ±8l + `ÒfpñSØfqÄ׿Å'bà§iCÆÂÓâÅ ¨¬*ëD © Ñ)ÂGü[àrPÌppQP/6ó xÐ?2f÷|y)*q Ë-³Ï°!éGFªÛ +9GFò npp°bS9ó¢Ô$Êó«%ãC àHúDâ3mlÜÂÃd àÜ~=pùBÎ**«¡4zþÄØiCNg`-l5 ôäfPü3 ë-4ÅÔÐFã(1DU,ælsçRÄlÐ&¨ÙÅ+½#µ1Q$|ßlA+1(Nø3ÆÜÓ÷¯sýFʨz7f3%Æ; §éf³PqõFPR}?ô Îs!L}U¥AATAÆËBjwLÚØ¤0çØ3¤Å&rµE¶+áð\ñ±PëVDËø5D^õl® ¢w5¢ûZÕd5@bÀï@ù +endstream +endobj +217 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +219 0 obj +<< +/Length 3089 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT # C Ñ<l0 ÅäĨDLÁC +Øs§0R1 +-Ð(;MÆCyÞÝi1nF{¸ æc9ÍÃ)úc7Îûk¶Ùí&3 ÈÊt¾çcqAË7>1NG3yÈX 4æ.81êt7L'CNSy§cQAw>4LC)»re3im¹ÿ¬0ÜÅ4:-lAL©)5ܸaIW4Ûß:e9ì2Øl Âf:NXûe÷6¯¶O¥·,1±cpÎÂKææ2³0Í'êv FÒµSä9°æ>ì +Ö²ÃNÔ±ÃÞ9µ#KÔ1ÃhÞ;0® +R®úd=Ã9ØØ< ÁH¨5%NÀnh[¹GB£Â켫P*>®pÊâÄ(£s=mÈR3:}0ÄX Ã{0Ëd,Ã:,0ÒÇ1hĹCë`9ª¡ph $îà[($rZ¦ªË +à¹.¸NÇ£ÈÙ¿Ã(Ï ÏÐ#I �à®&â$ @6½Â3³Ûâ³# (í¬ÖÁ¼ª.+ëB'a Q\T ÊÖ54 ÐÙµÀÝ-ÝÃqÞaé;Y¯¬Ã1¾Pû+/oШðbÞ³)L1²8KÜ7PÊ]¤Zí_Xªñ»½ZºÕÈ #m Ô°Ë:ÐKØ@7¬®e»L´í°Ùu26 +#<hJU¦ÛV¾:=P +ôÂê.àST(Â2 ²8¤zÇxü}¶[Þø¾yUgÕ(6r¤ç¸z esk¤Ûþ§j¾¦¥Z²DëTºÛI"æÁm#Ur7%ɸÍU(cÆã* ã;#`ê¶å¢ÍmHVØ*A¬¡s>êç2: +£=ÔjY×Dª¶¶çÖêpN£Ãblx*cOiTÔøà6^º±Ø"Ó<ázåР´åWÎ÷D>ë¨Hxq¬"O)¢;} ÌÀto®8Æ,FÕÛ&X1Ä}N6;FV³qmô¤¤ðÝJÎxú¾GFøAã,¬¨WÞÍÛ[TEH$ýä"Ìü;d �MéÄÌ<÷¢ôϪ&E 7çJÞÃÚz¦9§äWZ_ÅÍ +¾CÄUQh#Ñ&±xåáËøJU>0¿Ã .NíhË[ÿ&æX `e©e»30ßT\?A\¶fúê]ó<U¹úÄò!áÎáÝIø¢4HQÐ=-¦<ñÖT`ÀEg¥q\Z°ìÇyhKI4s8d`úê6 äÄahsf. ¶£\ ÚR¤÷Ѧeo +e½´÷xßÙãV~mfJsºHÁaxî%1EÅÀMâ7?HGªqÐ1mlÓPÈG Ah2¸¨ìÜáÜm-¦Îè <«s#"x\ã_°mÞØxÉtÊ"dN?@çÊVälL ¨INëùr¥hCf(Á°7\NØ:(»C¥{"ÐÜ Ú²·'àÑ«?¢H¬ÒD Æ$2¸È K¡5¦OÖµSzrOÈÈ.(~ J}QEF  £ªU7ëUH½X®D Ç b®*ÇcõwÖf£Z' ¦ÔÌÙ©N# äÑJè+³Æ¯5f¾B`Cs®Ø30EÄ¿SèÎXkV 7*@ÝHÔT8R¡ ÎùBü¤|JéÀÏ +ä{uïÙà ÐÒ¬íÖa¶ÏJhHÁ$uÙD÷di¨ ÝT r +(n3\2ÊØ¬p¤? B*å¥$DüÇR¸B±ÈØ+/sÙí°övÖëB 8¢½YÚE|Êaå8Pì·ÖßU¥?¬p Â` ¿7ìÂ_ì +á8" *¬ .¹Yc6ï¶r¶Ú +{Mí%V´ôÆ»`pT* Àá1DÆv"«ãjnÁu¬Y¢%k®ºÑ#ØOkñ~¯æF2³µÓÑü0TªK|¤Ï Q?¤"VÐr c_ȼ»õz 3ÚÈ1' Ñ"]10!Þ/I2ÚYb2¬úÕ "\hʰRtyãd®°§ÏHáâ{Ì>PhnLh»¸îf òya¤3\s#Hd@PúÈ]r5 �T³BòÅÞx°ìÓin +6Q¦Öl⤨Ô+Ì5¶0uU¥iÎN*¨Ê¹\3å1§ZxréĦ?¸bAüÀV¹LUÃD?[kËvùýÈIa=îJ'<μcÎ{u-Îi8ËÐÜn+&À9$ÁVUÆÃ:o»ssõ!úKÝq7*ü|A;$+Æõ^0xùëMZÏ®Â{úJCÑ1lÍð&Chm£TQQ·@ëÂéCüÙäÊÆKb÷ EÓ*9$(;t×[6×äý9>Öcû`ö\èA©_vÊÅÉ �Ä1[Ó{xÛ!l´q¢o·9MGXO7u¹H&K»À:gt0á,Ï©½ä¤â&¶2p?äeP9þËZE¨%Èh@P÷¢ +$®@jMÒÈtë¤ ê=#PúChÃpKïFþc1Cû"ûo8Ç*Iéì'ê +@´mHï¥ð XÖÆVð¤öðíÌMñÚñÀäò$t/ìMÎ"ó0D<ÝGI4R>/V×ãõĸö/fwboæ- �|H +näÛètyÜCæý¯¦Þ¯à7ÇM&+ð¤Üpï°o4ûHûëä`ଠ¤`bG"aÔtBÛogðh9mø-¯,6° làÐó®§¡ ¯P /TöS +Cë + +ɼäLÔx ®Ê ÀáÇÆÇ *ýÐØúÐð*CµOóðêPï â¤Á¨êrná``ÑxÑÎaÊ^" +æ÷'dLÂØlÈìaç~ªÎ} &§ÏÜh^ÿîzbL£²(înÑ °ÕïªöØ2ñ0tC°ÿË>{Åè£8×c8}h¨4ò |2 Hà®B½*äIk¦¸â¿¢lÝBRÑ&,ð-Z0Ä(ðËøYP l£¢ÉÀÂë®Ã¤ +?ÌÐû.Ù%߬vµ@î À@®ì îð\ rZQdðM\ׯY&-Nâ$ äj<Ò£à §*²®à +ª +ÂÂzý2ÀýbÛ'9>@ØrÎÉÏò#2Ò2£NBS°ópæ?sãmcY-Pñ°÷%ÒÜî²ã.r+\2V2¾ð ¥ì Î ÿSÐ1¦gN%2CêS&!-ÉÒÓ4t¤¿3þàåóq¥)ÊéB´în-à¿4òé+îï'Æã63ík²È×òÍ9<Ù-ÀL +endstream +endobj +220 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +222 0 obj +<< +/Length 3609 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*Tê 5 ÆCh ©&*"¤Ð9 ÅÃ9àÄl7 + +FS¡Ôän9h´x)IK¢Ñ*A!ª#z¥zÁ(³X¨\ÞÎ(*¢1ÔÜc:MæáÊév¼BÊER(Òf3B Èäo;Äs.@e7LFÃ)@o Å.LüÈi9ð¸AptÒéîû«hÈPF +zÞè èoyM&îyÂtÍùv^ÿH´cÞÙ|~Ýí®ßrú¾áCj2¯J2VûÁp¥«- 0Â2-sHüè÷³o[v4 #ÐØ³P«xß4Ãê4´Î3ÎLØæº8ãHú-#zÛÆÃxÆ1®Ñh\R#)H[ª +&Éj«¤°p±ò¾IªÊJ8¶áP"¶Ãx伯r:ÿ%!Êê¤ÎLC(Á¨\¬$²à`¥¬Á@Ѳ#É*`(ÎhJ&ªÓܪ+«.òÌ´-A¬ÈÌÂn9ajæ3-«zàc,Ù/ªr80SÃΨ|î©é$¶°¥óúfÐÜ +cn6 j.àS"HËí%¤»î at²«Ý/`µMÌ!ÂÚ«*xYCxØ.7Z¸H`p*ø" `R°*!²Ýo(¬HCLÁRQF[T|¥*(X\Ül3a²òÌOÌÂò7 ãæè_Óv,À°Õ» ;JSÂ9>ܾ'e h P@4Y; ñ©½z¨ó©m4 +B(*PØ8Cy æ¼ìl;˳í"Ø4e¨[¡ dA¸p²Aº )âv9ãpª8槸ì6Ð1ñüái{Ý©¸ÕFJt Ò¶ySSLe@WY[ÃBÑæ+ìßEf¬-rÄÊA6õv +e³ <VLoQÂá bmvfhZ^ZýÐHߣ'!|+$ì¬ÀÎ3ÍDÒwÝC8Ò;8 �n>àì,päCÑ£Ck1 +ZY< �S¨l©GÌõ (n©ù/5îOëeò¾°àmCm.ô ̧9paôeÐÃÞZä:' ^¡gÊÊ^AÙ[ ÀEjdJZ2Äå êh±á¤Ù"C6×SQÏ8'ÀÝó`|QûŤ°Îñ¦4ä3CªîAÒ¬õã¨7«ÌêЧ÷§Ö$+nÍáïFøZßDfg¯]rèÖOá¸r0íCèlODQ¥%ð$¶äø +z Â+¼))_÷[ åHD$æ[KõxçAJ(<(ôâǦm<©¸ÝÃpÇfEé¡Z4-hù &³bCÈ`9гqØa:¤l¹èHnw@æuBI°?.æM> �Äëh¡Æ8ç $Ã2 è·TdÄjXÆYlt,;8*ÀÖ¨eÇWGc²ýS}¡¾ +T` gäòÍL7åÑSCÖ +~ûÜð-¤ÚLäKA ¢S @×Chp§Àêj$ò¢øFy²p±VýIÖ dP0ÌÒ HÉx8|PzY©q®7USjq;(#ø~Ì1·sv&ìß N9 �°2}5zIBä`u´HÙnvpe8¦èÓCv³!¨O©Õ@2Õ#gUѶ5غYÃ}igCI/]*®>=¸ÈÕû"¯N¹pÃì[Ës.§n=ø@ïS¡g �¬y&lÎ÷ni 5ë5!PÕÓ^kÅ0q½VªC:. Ã:nâ·UÂ0TÝÜ$ÐÉ |cÊ -;Ð" "VÁ\_%tTW1\db_¥npãÃ×g]¶9ËU÷S©t§·b¨z¤TÔéT VgÕuí®nñ[;ìlð RCpvá¦ä '÷KS{!°+°Èn3r ¹Ôö3R°Ñ(B·ò¼!ù)rWv~ZÊë#«1|s ñÈ;Ë3>gpî»Ó9máܰ ñÂæ»l(¡°Ó²Ä(ÃÈRs"%C×.<¼ ðbìYS,eÌÂ]Þìgo¾`É1d½f@k3ŤiÜý @H +á8"4ð®{Ä!5Âv±½¸¼7Äåss4@:&õÛë(e=ÁD¶ sÝí^ ÂU !9²g0h¤;ÐYªÝ¥!À5,@çä¶I¤K±vrÛU)©fÎüÊIô¥±à0«K½ì¶`b¨0°Tç=¬óþ®<àµcU4Uôh+q6W¾ËüûÐÌ-7AÜ4L±Ã¹¤CÁæ¼ìn9º²¡¦ËD%gÉÆ=GrA#8`!ÀeæÎYéDö/G ´KVSÐU_QjýtîÞúÖçp)J#¤ç¯>ãGWj)=rÂ=çáCÈ |2WõiA©óìÉHeÏH9ZNC½ Ùë'àÙöSØq=o^_ÔAÅaEa 2,F0 L³¹}²rVG,!Å 0ü¨íiAkXV³ò)}J¸n¡µ£i²;ÉÆgúU @3Èè~ÐØ§Îæî«jiäÔéò: (&Æ^4'ðþ«øMCÒõGÀ÷%¼¯<µ¯bP-È@ô¤(`û"ÖëxA"ð~j|lúãbÔ'ÏÞ¨+d/A)þ°V%É|ë àÎ h¦ ÊãÞ~ã6Í@ÙÂitp§ÃÀèú°`ûn2Cþ¨RÝ(,ü$cé"¯¶÷ïH/øÿàPýÜCôÿy + Ððv V ÍÅè*ð(0- `Ê(éÐ=0BÿÐHÃÂÔñÉTèìyâ´OÈô"²c6ÓÀÝl·0¹¿ädìL*<ª¨éè±böî2`ÌÇÞ ÊÞmë) { Q2-üN²jÇxȲäeh\ rÇpkÈRî¦|ªã¯°,»ÉÞ¨Þ½câ£éLزã^î<ÉÌ;Éb O¤¬ñ@;Eäcfغܧ̴õnñ§Òûѵ(@^ñà qȵ±Òý/¦¦ê}!Ã}±Bîì ²@èªâñHB[§ /È_Ðâñ»% h#mûÉ,Ëòüè{&èï<ÃÐ- b@PFúë®å¡ÉÝñ½qû°ô$¼ë¨Û èâ¶ñ&Hu%Ùp|Ðn& \Læ)Ö¹iÞC%¶C+ +²2îÀʶÇö§kr8ÀÅ2*a1¡'æ()îèÜCËãÊ êÖeçöw*.AÈDyj1*ʹñ"¨Çø,C¦!¯¢§Ó<F@ár¨Éö®(f#jÃOç° ²%o4|ôjõé&bû3*/É*¦~,Orÿ �o¯Ò¡w="ÖMÒ®OÔ¥ãu&æ¦e0o ÔË£zÄÔCði Ù6¯ ss8Ó@¦Q@ZÉ0Q/Ñ7.-(ió)ÏX#»*Ng°¤hØèÓâ3þ¤Ï¼áªªâÇÄõ0N®òüÔ ÔÿĦíz'ñùÀÈú +´³¢x¢J4ÊíCHìBDiu,AB °s,öòî¢Z%§EÃê q(²¯4ÿH¿¯ML`ÒY2'ðþt#4Q-2â÷§ä1LÁ#nÊ; ÊÍ,Ö¹3521´4ôÿ=Ë>³ÁSRïõ4ÑG%xu(FHSGÌÛH4èÔâ^çU: È\ÒItAòñhFcìÅQ04cÔü¿ïçPQ¬Ôà#±Jô·KT³Yä4MRùÂ9p¶ìd1'4îãçR,BÐÀÍ9Sj})Ö5B!c DUZ|&Iæâ´[;(@+'MÀOXµËl½¨¦QbÄûRO6òÙVôu»JÃ0o.¨à7Ä=LE$TFIbÄoÓè°´VmN'»díOKÆX +ÃF´ú}µZ1$:0;,%_Åþ`" +endstream +endobj +223 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +226 0 obj +<< +/Length 3359 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5'EÒ¡* ¡AhÆ6HÅ£qpÄi1*&0Pª0ÍfâÆt0çSaä ·L"y@t4D3a¤Ên:\,·;Áw0ÄqØÃ}2a¦Aów¼f3¼Ù}µ'c Ãg4ÍÂí7JI»hô·ÖÈQ6vºáE×[¤m4TJ41 R¡ ¡¥xl5 IëUÙuFeN¡¥f:!IPÕG#Ra|±o4]Ï Sj£WNO\ÍB ¸Â6®êÞ4±Bpª& c0½Ã¨ÜÔ5A ³á �lk4»@²íHܱK*δkjÞ¸!sÊó«ª6û:ªÂ¸ +Ìvô9KÖ$nZ©#lã<6ËhÏ%¸ÏRæÁ`èÈjÚZ§JÏÒpÑ/ãý #2üÅCÊÞͳ¬û3Ä£0Þ9 ¬4\¸ Ì Æ´²©Øj´|Õ/Czv¬Ú|6ÐôÊìáPÌøß ´#4¼9 ."L³<|ù¾©£ôcxÚ11T>3À3ð@:tH'A ÕS ø)"!q8É0 AU4%b¬Ræ+·ÉsBX' �Ðæ¿ÃÑiV¨¨"¬*èëä¾H«Ò¢#Õ%N±uÑw^%Ýz2ñ\ø' +Â$¨"ÝòôáEtÀ*SSöÆ7C$Ê2Ñ%-ØÍ8éEÂp¨Ä½¶2GO2âµ¹[÷gæùÎvÁgN#4êáiôC©Qwu£CQ%UÎ4å ¢ÐQ,Ð#`®ÆdC¸<YbàS0)tƪaÂ%cªG+»| Ó �kãµHýê£dK¤Å1&Ådò¿i» Ì8îL* `#²©*(=¸P4;QH¤3ͽ0óNXk2ϬÊ}´þÚS¦³®ÇhgXµÃÛº6Ê/b¤Ð@C $&@¤Bq;`ÔàyI«2 ß9Óqihϸõ©Ürï}̸@çô)ÕºTÚw&j;£îñÂl62× ©ÌQ ¨ `ýÕ£1 t$Y{@<Ð6¤Zú%D!Á¼°bøÁÈ7sï¡é¾£°ãÙß,çòBCÒøH#ãl/IÚº4aÿ@/¼ TØ4e±ÈèXñ×?pí +Cè>ÌT3jðÑÆ¢¦ppuWmdº`àCÀe (Æ"Hòû¬Ñu1´F +BO!1´¢Æ£¬'ŤÊEÈ&rÈÙ0ñû¬Öbn¬I×$ôB + À/¾BxVg ¬ÕS.èÉÔI#!ëª|`Ùl«7dè%ËÖd1 ( "Hüj<'ZG7 uÒûK©Oì6¸ûÔKk14:Dùçû Ùw7XªcCh§îYR¡æûºe8õCq5% æê +CàÎØeéÛ2H. /t¹¾ÃoèÎDŪldÙ!ÂGºCS'W]¡Õ ².VµO=L +î áÖ¼è¨=bo=èËõ.¨l¢Q²Âhä llÄH®zйjQ`B$+³RiM;ATêZAÝî +ªÖj¼Z*¤p@«S ËLÕÇÕ*÷åqû!À8ÕRÚ^nÄÂbBlÉÓý@ÊÌr!B£B+*òÊ£¯ GíÓCÂX/uöÒ@bX(ݪrBÀ"õhKÚº¹±îܲæN÷k¬2áø5ûìÛóÄüXBÓp(¤`¤à+öÂzET?8 +&×ÄõÂÉÃ@WQ¬@âÂWµÁ¸4ÒEè¿ +Mô}:Ó:\^¸Sá 4D!æ0°èßËÒ8ÈàKq=cq}KPìhãéHÇaìU£ºöÝLÊ¢ÏÆ:u»)´±¨É{M"õÜwÎPXô®Ý{c Ȭaàm 1XpÒÃ=8 +lRÑaÔPÁÔ¦ >càuD7|µ«TOáÍ¿Ï`æ,ép%4â/jlrTJÇã'VQK\yv]£ÜNÖyàùÂsAÄÍ$NAbðPºÓ)£ÐðéOr¬Ð,g>EHTd0s±_ã¯49#Ò5Héî 5¡1¯PæCb +sw-â]*MAmS¬cpnÕ{øªv¼%G]ºß !4(ÅÆB8I ð$©ßpq×waIÜ1¼5ë5)9j- ¹Ý¢}£giªGNäùg.ó5$ºÍ*í1\ësÜD½ªn½î$Ké +,ßø°mÌPxÑ:Öò#!d³±T9àÜÇݬÆ9 dÕ94;u³nºï>·¤tnÔïÍ_t¢ëb$6<'cÞ·30½ÔVÚ¤`Cá¬q*Lw\oü)wâ µ"ñÛdLí¢·AÁA@ä¨I^4z¥pniº¸39ÙSæ±²cÞÎ'|}ö HAÏWäbç¬Ç¶Þâ +{±ïvÜ~EÕÀïÊÜÛ ý¤c:`Z;àÌ4mØk"þõo4ûox¶ûïÂ6,/»hì;`¨¼äÆÇ4Å£ªøÄÕ˪yb¼«NÅ« «ÄTèDAK¼¼ û$gÂF¯ð%Ç:ǧDÙ¯£F[#K ¦,¨p `øg\ü"2b~Ïb9Ë8 ̧b=tbOã¯|þM¼!%ÒL¯ü®ùbÆ¢ªÿÇ$.ÞLÀë¬ß0yå`üìNVðÀÞE +%$Y` +æ +DH Q àìã ÇñD, Î èrÀvL&äÏ6ñ.2¼©ð¯ÄQ ¦±PâÛ/âø*¼þïÜù q³3ÒC¦Þj-ù§Z]0JÖ?j{ÄxÌ-]+² o@Hñ5 +JKëc ½p- )M,ô 3¢çàÂSÄ,«| %ÃF Po#G)²4jª2W +J54£ ¡ÔQæÑîÛ lØÆ@ÉlL¦ß Ì(Mi LNj@À# zéx r3,>Bè¶Qðµ%¾y£ÞvÙ(%Ë ,PÎÇÒÙlÙÀépp¦(M4Ï-øÍ,È8Ø{) +fQ²¬.ÂæWæ¹c~6jf0#lW2(ó8,¾8§VؤÎ*RÙ2ø,r,`ÅÞ¨u$à@ #QêÈd@Ô ZRe+5¢|ðÄJÄ (vº&.,3C= k£S&ÓÃy5]7cle\7 4*e;:'#ãël-D§"x'Ó137=£z'mÙ2bÒóKv±âO1WxÎo%»;'l'f^ss"3·7 %e¤2ò¼@"îRÓRe#;s^'¥kjDdÃjÐÖyÂú"b«.ö å.yr/P«(}/Ä1Qv6ß6BèSÃÉ:S±;sµAÇBÄbcè|Ô5c÷P/ëâ9Ô~Ò¬ú°Ð(L=±ÚþîðÎô8 èØ¬.ÒÌ«î|ÓòÓôV!6ʶÓç8'ÀÑM)¦ÓâóK*ÏBS@Ó>X"tt¢ÐÆlt~»´D0;HóèÇËñL¨ñ(Dê]Àôk ÞË"´À:´ÈHòD©àÊ ¤Á¢ +endstream +endobj +227 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +229 0 obj +<< +/Length 2409 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP ̧eÒ¡* B¡AhÆ6I£qpÄi2*) xÂ4W1¼.n +Í&ã!¼î-1ÎFC)È@) £!ÐÑw¼ '<èês2%øÊ 1NFS ù~ &a:ïD£AHÃU* +ª£1RZ°×u¥K ¨¤¨j£©0½8Ì\5ÖÊ6gAÛº0bÕÔÞ,Î1ö«eºárº]¼[çk Äï¸ µ´Ú¨âå¬Îð±ì&ʽmØè>I[ø ®« ¨¨ñ.íûÒ!." Ïðr×+*Úº¯ºB Ê9Þ<l(.àS´NÉz.å&¨@3£pÆ: #xÜ.d\<±°ÀÆ:LÜÊÀÌ£´6#8ÊÌ,«à Ãx@êN³°9pd4ÑC2ª!Â-|L+ɤ!²cè2Æ0<iG +D;¾á°j H¢Ä¨ÏÍò:+B~!C&8 ǰ¡C<¼/Rª2Êõ,²Þ°#L¹/T«Rüŧº~7£¼·.ËìÓ8ÏUR³*ò-µðRÐ @QÑ$ �³ËXà:ÀZ碰@þ/ôõIDôªÄ¬´ÈP3 òæðTóz 8ÃÀR6¦TQ@´ <o8T[OFÑö]>SrÅú ´¸T«`·x[IÅÄU'Eô,gáï9Gò%wåª#ÔÎ7"HÒDÂc@Þ:U¸P(Â6 K3±ö^?8d1Øbûµ-"æ:B;åØnaDâ9£îçµá>e*ä9'ú$Éz.¤éå:2êÍ Î?Õ×]¯ü¬áC#¨1,ìÍ. w1^WÕx@;0cHŨÍÙf"^5ÈLuª¤× Ô +3cÖ6xÐP«y;á P)2 Ü9ð.tÓ¢Ùº*! \u°dãu./>ÚÀ%KûGIõ}B'ÕDÏ\ãö=b_öËiÚw]â9ßÁ¸f²ªäòb9bD9è:@ó`9z ñ{ ¡ï«ÇBp_Z}/×>RëÉ 5Ä<"ë¡8wep¿ôÁÑps`µâg~ðª¬Tp«¯ö²ó +çðé@²FÝ£ñR ¡±æÊÃKZ!-cHó°Dí;rÈÎá³,äå:»ðnr@G2!Â| à50QÄÛ+Pã°TÑÌÇ Ú^(§)Çg 䣴x*`¢=Ù +#ûlO$Ru ШóöWA B"°n¾Âû»µbïÍJÆGØS)83' +DWPGJ|]g/t8ЪBpT¨:FÀØZÃXTVA`ÞC"6hà§$âÖÄæ �)ƶ¦øn3My²hsuEK-%§®ÀsUf§ *i:½9 +XcA¤84)! Á +&¨] mÍÊv6§ºEné)R waB¦CE¨àÎêoXs0âCI1Kà»,FÓ'ÈkLu2&dÐlAÑÃòÛáe]¹ë7g½i§s³Óè¤á7kÌáéëÉùDÇÕZ®_êÑ«z°V$\!¬î~p5:§])§zÑ×Ù¦mh M¢£jQ65·DÎuN½q;E°4T +l1Òqs£Ò:TE|6 Úm¨mi¥ÚÌÐÒÔei(2JÉhm$ú3.ýýU¾Ë40úXHÏnlcpvÆ´ÛH¥mÈÍCZß]ëÀb/l²Ú*`oÁÊ;a �@7Õ@v0bZ½1â íg+ +¤ ©QÚ,ìÊH:à9ÄC0ir%®Ð¶RÝx4$~ê+ù8/ó4Àâ¾úßpK¬>¤X¢;5¯bïêëC ¸ª ¼cÆÒRJ ÆÉZ5ìÖ;Èj¶ZĹ¹M/Ká}hXë¿/E¹ãèbô©ôa¯H¦ +ÖpÒæO:誤à íº8®j,ñâIa¤ÊÀÞb0^2ºÃáìQj/Áj¿-h2iå®8¯)Sòw0ª»âþ^Ä>dWX¥HÞyÀÖ;9¥Mç²¶Sî3 +`ò¬<Xm×Rý[°bÝ£©ÁËF¬D¨±± ÔóðdL 7ðEäM»¬E d¥ZfÖ¿Óõ`é뢶¶"ÅT<¥½×I½mó+¼ó=Ìd?w½Gx¸(Í<:¾!¯ÐýØT+b@f + 6~îËçï³á{ýEɳjÛ]±öÕ&# �E>dú9¤ #èþ/ï> ½ý¨ _á¬7IZô]¯i$DéGÛÒ¶S½trÇ%ÁØBq¨©k6zsJê²23;Ó¸L P©Húé Ül¾INùBõ ^=CB%2ët2ʹZ¥y¢ê»¬>®´áÇðß°?VGEæÄÞ#þãÒ^¨)Ïcº©62ãt8øºÄR9K¡@'Í´ÑÁÆÉWC.}IÊKY7 O^¤öZØý <þÃæ¹Èá©pÿó± @û¼þÍÐfD˧\]îTã§ + ^FàT ý* +MðB Þ,(Cá°#U ðߥZ02>oDB +endstream +endobj +230 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +232 0 obj +<< +/Length 2907 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5N¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tàr2§c°Üf("Nf3¤àt4Í +FÒa ¨´J¡ U¨ê"»-&68 ¨h2%CULÂðq±ÄvNDlMPG2fÄ o9ÁNo;Àè X樯ËÜÔsYgÆc©¸Çx½'S-Öä :f3©Ëjn:O`Ü 7¼#Ób. ø¯LöK@h©í; §&L¨àÛ/C4Î3Î +ipbÀÎKYÃHÓ¡6ÚØ»¯ô:0hæ/Pß(è7Åó<¤8@PZ¡$¨Øbn:h× +x' +³ÐÂpªØçÃ);¢c ä:ºï(Êü2ìËêÚ½/Xæö¯/|ÈòÑXë3Ã;æÌÉÊ< Ñpl¡PÈP<N¬îÌ#CAFÊIðÂ7{;?àR6C@P<Ð0°¡*9 SæQ¡F6NìVø¾cLW,ËrëjP/ôrA \ÃÒ ~Hµ$Êmg26íËvÞÂ}*âÁ´*ÔðâÀ¡¼>éc¼3Êó½3cLïtÀý/¯êJÛpi>ÓT¢SÔ iQ¹ ]mÖâ:¦ôu Í^+ýu ͽ?SÝJ¬¥þ¨XÊþ )ÛéÃÕÄqåq<R÷Ü¡ [ucö¿Wõz XAp¤Ô¸Q+2¨Ù#³3Îoê3Á¯tñðhÈ7æ/nñÜã+Ð6/ï6mqG¥"hæª*ÁÂ=£uêHÈ@pâÌ´kZÚc6yü#A°òLH\ÅÚÎ#K¿ÇZV Q).p'¯k09£¬÷Xå¶)ÚzÃØî?vyÇ!+Pà«`Ù>Ã¥Ý7ï!Í8ØêN²5lwDuÛfw²ÁÙåÙ4;:Î[ZK¤¼ÍH!PõÆ-"µüÚ§ØAHkMþI÷ßr÷H6ÁÈ)pPRGQ±äÏCÊR¥ ' �i¤82DHzÍÄÑÕÝ ð *¥\c$ÁLq^5liÁν1nó37ÃWã1 Ônb@5=¨"kqzKê¸C¼"o%=nôç!\a0¼ÃÞø`µÅbÖâëfeÉü±tsÌ;î^ S "*U �ø2Ü* Ø6úOÐ$1èh°w r[ÓH ¬WÌ Û 2dGd +*Ë6 °9>$øo'o;°` +)ïÝRäý{â:*¦!Ô`TA^<¨ÂGÞS¤F@S!¸7Ï ÏâÒîVCè)`³LȨ· ·Á@vEêD$É(^)º \'@@º7í'5 Ö$CÆyÊPÐØ%tSòP + +h#p32M)SÁ 5B¥r#è´t¦±jH%´·æ]Kºi«õÈy˧:O0¥3\Tò.IC±ÕLÔ`(³Þ¼ ¡©¢¾siUÖBýÈ(uG]4¤. + ¨m íI¾ÎÞ+©!µªÒðÊÙiò=³ü0¢µ[\¨l ©÷]OMuarÇIÊ1Ò<¶,W¦T{i/»Z ÁC²äùüC>ï;!àÀ¬¤Ò: +t<;ÔÕÉÄ Áæ°àêN\/K½:1göpÈág±ê Ñi<Å©£p>£9êÈÃ"èô2µÈxBí5Vº¤ólgó6`èÚSÖ>?»· Pª<[Ô¼êjèùµ÷!å°[ipÎM³`ïLÍUjÃO5³ª¾ö«3æ;/|ºVóÞké»5Û7m^Ôb6§4ÙKÄËáVÁ8!°G9t.¥ÏÉSªVÔÔ°)ÜKJda6áÕ¦ÀNÁÀ( �¢9¸ØäÁÜ«bjDïaR2k¨SU»*Bî+[wÚûa»+¥ì^vÒØ/Rb½9^ëåhBÅ`%Lçæ0PZݽYA 3>ËM®ãÕ Z2ø¹²AÏl¸MY·E¢\" +¤©õyó:UÊê5=[uYjÈøB`LêwµKÕèv°÷Ê [VC;«3þ{O|/[j¯muð16-fp¼(5ÝÕ|µf §¡PJx={Ê@s wµJ;Ú8BftSQâERW£5ñ.!Å>'_8ô9R±ÁÊxæbÑâ³ÔûèÔËQCxÂI¯¤´ì âp©± #'¦pêrG 9åÉ-2=ðýÙèß´{y pX^ö¤ûåËÍÁ£ eÉ4x×Àä¼prVªb¤¼6$D®_T²C+ÎL3в>¤I i%ä°6¬ÞPPæÌå%.KA¼<>ÜÌ嬷*ÿ§ªíò@N´2ÌY¦IëGsHH¯Rpî+àc6&ÔÜÊËôªmɺo(23JE¼òhÂ@C +¡H)ð¤# ÂT!8!YþSj(:ÁR# ÖÚÏÉù7â àÜç±áú§¤7JÃC=IÜ) rC)ø.Ò áîÂ& Qÿê%Ù=î»ù2úÏÈ$kèÐC*@ àä.êîàäOTõ\ïhíð£æ&èæd£â¤(èãO(PÂÒ +\.ì=Ï:o>é,1g|çÒE¨rŨb¹Ã\ö/gÌp¿ **Ä|&%° h[ÌÆdMd«¬*í*Õf^f+ÉÇra§|ÏÀeÈ Ò*Ë}-E°2%5ÀÐø²QèÖ¨)ÄÇLüð*¨F +¤)àÔk¤ÌÏÔÍòùðÖøjèÍ2ÍÃ0Ï2WåÜM `pè-Jà #êu/âj°ªfky ÌV#$P¹jNOï¤ùËB o , �p天/¢ùQPÕ0G1YÐæ±®ÀðÔ¦Nùæk¦¦>Þffj Ð »ÍÀNéuf +GªÓ1tid,t&¡àèÁ±ÍÒÖ¦Z ߪºÂcéÀ@CÚ² ±áÇÖ|£v«Ff|¾ ðDLþï¦ +5n½è=%`QäX¦c!æv¼ÄK$#Æ æ7 S°n"¬ ÐiÚsëk´°n³í.%Æý aã*û¯¾ü1TBÒ^ðvË%Á(.Ef½Ø»Òq "3 �ªh¶Í +fÉ Ïª=@Ò æ½©l +endstream +endobj +233 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +235 0 obj +<< +/Length 2982 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´c$Ѹ¸b4á³4 + +(RT5RÃU. +ÄéEl0s8 àA'à ¸Ëg´ÁHÔ¨]¾67P®µÊòïV¡M§ü)ÍE£âld.1H]Úñ]e¯ÅyK ÃÚ-XÊ`*66ë+TÝxÂ`Úe:NG1Þn:M&á3yêÌÂç£Ôëv;FîÙ@t²Y©Ã!AÒtù~c °ê2ºãô<OËè6#× Ì7P0Pø0íapn/jr¬)mr_!i¸c«§Á �/¸f2lºº½ý¶ì3Ý´ëȸQºã«äJ¾HX£Æ4<¸@9ºxÞNÖ4½dÂ9£$Z"ÌS#ìüMÀé5ºë,é;n ê7Ll(Ï:ÎóÌ)Áª8*kc5®"ó,2ïÒ@4Êü;o{âÚ +Al5Í4kr¶5´LÈÁc$¯£ Q&·,J(±ÁsÕÈ©BÀ¼CDLË©àn 0ÀQ8,Ö´(îZ¡®7Σ;[6ð¤0» -Ê£ÛUA0\¿Ån«wK(Ø7#$êÃÞ6»±ÚÒHcRñ +kPNßk(æ1CHàü^7cWqóz¢r(P&` bÃsh·LSx·ÒA¨jØÈ¡kW Cc Òë Ù%cÒ!vu®!¸q$.Ùõ6Ù ó 9&nÖ0j Y:¾àC¶7¼ë«E[â4kÙæ9ΤêºîÍS,·hÜ2NAßÔþò,»nÞ<Ñ"=Y.tÖ"u§6¡áªI[l¡*$Ò0i$9B4plÈ¡ ÃÐÖ2Þ"Mg$-CbÂ=ÔSR»d!Î@˼ÂÅblB½*¯¡è:w¤cÃq/ø°Ã¾ç|KÆ9£29c0ê6E¢}Ò;Î,¾ûá8*ÀÒY«½{ +A²'¶T/e·5ǨÌB],Ð$ÅÀ¶Ê\Û*!Éܰ¤B+ÿ<il?ä«÷/íþ¿óñá(F!0)X°3GîyÈP£WD½åº^ ÛuàÑÙ$ PC:ní(9Ê^!!j\ÐÓ@Í©%åËTBdîj"¹Øéq$§ :xÖ®¢uàÖ*ç ß -vÁ@Pt*@qÀ¸¾ð£Ä!ñ 3²8IIªJe½h9yús&=!æPQÅp)ÂrLP,Áy(H +tDr3<±N3¢@£ñ#ºòP"Yyª@¢w\¤ L<àÞºG/IÀðã!±#¥BPsdU +ALÚ Fˤ $'0¨`E¡¶ã +ÆRøL +*Ðs}K íËM(ï5#¼Öt@È=b|ÝêHN((ÇóF:òRv#ù.EdÌñ¤èÔDÓ(WËéc,)ß+2!NömsþRÁÃÂiÌíî+8³ [Ëd æLâÖ_ì !t4s¸Éá>UäH÷Le3Ó>jarUÌ7]ÁÅu ö;³$½"ª¬¢\:Ï'ç,æó£^Ñà-Ô¶ ¦*I¯´&l4ðØñP¶^Â>GùË(eÄâOK=¸÷8ÊbBØ®q~¡%Ü¥p®UÒ°tíݨh6ß?ä$ $ TÊ@âÕs1VÍáKdú^[èa¯"NS\çñÛU04#Êø&%Ô¿^h8ïø _Ü}c3ÊÅ6FÄ+!\5deb«@ 9¢Â+IÓEª=²¡²öÚJí@,6&¢M"åd-lW¡Î7Û2ÓY/!½T¥í#}´î Ñ[ü^w$õ²'Ðßpë}méØ&3'´jvDÛà +IãZ§Ñ <c`³p¨%¹àêsØít ¸"%óáZÞc_@"'8:hÉ`]5 Ù¢2HÏN,Ý5ôÍMí4S¤p,¤ü;Débæ ³KÎêãeªµd©ØØàãbêòíí·* +Àè-þPèµ Ï%©k`k±F+»A²¹×S®¾Îâñ,¨Ä&h T +A~Oª½âkqú]e|²výlaÇ6í`3 +sO9A+Ùru5D +¢ÙU³h²&ÉU/ñuwQqîI®*k¥sèëqÄ@ÐÈ7nªÉÍâbì"¬vÏN«MMí7$^0f$üÛ³ØîèGì¢+çñÛ¥K.1 OµRH\üáøQü1¨ç:3Ôiz¶U2ª@e7læª6bfv)wNsöÙïùôúp[y»ü ÀXºÂg÷á¬';:ÐÙS fHê_«Sƹ2ÉoZÈû½t;¼<ù<Óæ/4.L³úóúÏpb áá/ãÞU&ÕµU¸TíA;¥Hj··CJáþ¼Á:§îöéÿð6h»ªvþÈiNܦ!ÑþYcÅ#µ¤B5KJU7Èäâkl¢èIàcbC iÎfúÖÃá(£Ïà¤à¤BHJy mvôgæÓïþÉ0è#xÊPâ Âô5fD")rlàPàRZc[Àèà Zªº¾ +c¡ @ú úN1pÉ¤Ë �\)ç© �-ÊqX/Rà2°~Å`ìË#<ð¦ r + �ý@A +P[ãðøÚö`ó OÈC hÍ ®0ácP¥Ä ÁIÚ"éÞ§0R?D2ÛÇBÄ>/ppȧÑeó æî(ºGæÊuo¤"¸ÅMj9.ô«Î ®Ëî`KN £¶@îðP_d?°^N¢¸Ön¬xmGèÊiËVØ£`6Q*ßàèùà4àl JÈ"ºÕºSã6okJoÄ"[ üËFþË? �Ù± +õ¤ÎkgâçÖ]¨n¸Ê %ÂÚg Ǥ</"Æ0íbß#b¬84CNÌÜ×P®+ãz± �Q+K_+¼}qÞ? b/É>êìÆb,,y,ñÚ 2ºd4媬M%E5.ÅgÒ9RÆê%±Ã¥3ÃÊÍQdå$WQ/ ñ ð%2«c:ØÕ(CLv Ê+L:@æÎ²B +endstream +endobj +236 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +238 0 obj +<< +/Length 2342 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSqDD\3FÃq ¤e:NFã¦E©\4T0ê°ÖÂ+°Am`0¤ÌÁB=Àr9ÎEy̸(. +E%CU#¤ßªÃA>NDd¬JLØ8 +G"Âåt Qå½78¹Ðá4 &ópÓÕáqgCÔÇqÞóýs¡ÉÁ7B¨ óìvw7}5ïSÃ1Í@¨Ø+ér±²c8ò7-#LÔ/¯ÂÎ?zZDz( P8#Â6®(ä4m*òûA PZAtP ¨Øb)0NÉ,æ3lë>ÐÁ1 )@SV¿ÑÛ Þ2a ëÀê#pòÃØ:±¼©*¥¢hƪ*Á +§p³JÖ (ä93K«è¼Èó2n¡°l ÁªG8±Ì Τ»´Ó3ª24*á �æã2Ò¶ÃÃ(Ü1ɲ¯ Á"=Rý£t½J¬27Srúb¯ÁGD[A �VzÃNáºÒ¶ñ¨Ð7âà¹7k29XKÀAEÔËR8+ý ê3H"NÛ +]GP¡8«R¨ÞJ*ujÈápcXÏó'ÓAXt&"¿Ù8¥T°Í]UR´i +w}ã3â' wNL}AnbÓJ Y±Ú¼ëä!H`Æ9 #¤ê_6#ï"ôFgr'ïÈa8\Ìzc²b£¾¨VÖªc +ô¾W¼vÑZÍ>_HQËÇr"j²hóº£}&ʯ8Ð4c½¸ÜK471hboN&ÓïӺȱoFiþ_ÆZ&²þòíº|3 Îà£`Ù&î²98)ÛÚ7ûÉ÷=x Ðt}/Nâu7¿X$×TZäAÎ F\ +Á/NÕO¢§rÿ0wÑ߯¡H#ÄxÎMå$t,sÊC¯q°¤B(,}ç-ÕAÄøÃ¸n~aë¨:L +p¿_k¥ M02 ñ @W:é(;¤ÐÚO$P8 Të<Ð ¬8=®Ã{9AæÀZ!²>l´"D .@ÁÁÀ +ï\9®.¸óô~Þ;8@KDÇèmÁ×la|¢Øs¡/Æu¡dPq¶-âkPvR°-@Ðï[Z' ÉÜZÈéÿ6$Ñ$!4,&Ð:´d\4èÉøíq«rÝ©yM*,#®#uá|1iye<¶XP*ky©ªà£u5!ub[KzSe áá6µEYnÕ·G¦ºr+PXÉÇhK 7ÅÎG·µ¨âÔ\ÇK ß&[ØwkÁÖ4Èà岿ÈZN¹[@¢4Ò d + è)¥aÙÄ i£HÉ9+²Mæô0ËN]÷èBW?Äce$wI42ëC¡éHx7ÍÆ ßç Qj*)7:óΩ姴úÔ³¨{¨òªM¡³k K5«7fûs±tÔ·ÉkU¢v2j×Õ¡Vêå] z¯ÖqÓÙ¶êîÜ©Vnuî#»ÚýWk[eDøä·b**®ÍU'"(8]`Ñôzd,°)'¡Ðø/"Ú½ ê÷¸@ ^µË¸¶ã +.R_pEªbHè5`²¸°c_^°X:Å8ì1T+GêÙ§&´«"kì2©æÚ«¥Y^}e¼T¢X¯4BS áHPéP(Ç24¦Dåx7qÛàü#î7xa,(0ÁÃÎ6À¦{ì,å#1Ç1Äç;^ªÉ°6&ÈÙn®Vo )LËdCYÊÂØÄ9GÇ q8& +;×2æòM +P4:pùiÜ$9*4¿3C¦Iðb[Á°çj à.]7Eb:D¥rºË.7-²®ä£´ÕZ(×aC4q1Çe*NóÜÑßÎ!:àÎé©Ïp{h«ÝfY³ZWðk¦4}|w¸ÁLzæað6ÚåRSn%´¨ÔÊÓW �hÄ_SÓoÒgJFÅqP1? +yO9i¥ú �°¢´µ2æLÍ7sAVq×GìÙA©ó~ª:®ÕðWh ¼0ºSÎ ²\ûø1Êè,7@( 2pê¨òpF»Læ×A5Fp:¢ö&*¨¯åËË®Nª¢×hÈs NrËë«oÀÈ¿d³{m´î2èùæ¬Ù(¾r7ô4âm¹u¾Ïãª@6^áÿ?ÄQÚTh°½Óýѵê"÷Q§z¡Ó;Mº|ÛÜÊÐBcE§O¼ðpÂtp7´Ò0¤Üû �dÓ?¯µi쩯§å µÚå%i7R4´þá§uv+Ö}êÚnúû±õÇcò³V¶L2«¤Z¯BÀ¿ó"ÎdéñLíÊ´p®Ñ"è|ü8ÄD»` +endstream +endobj +239 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +241 0 obj +<< +/Length 2005 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ ÆIÓ¨1pâ<7ÃÆQâ¤0&sDx1F°Òp!NG3yÈSE£°0PÔe± Æcquú1ÐìfA T5* F6¦w5 ádq þ;%"¤Ð96q¶PS<ç¤çw£e$¼ÄZ%ã6#+Øq©WfºáAØÞi2-¶ûÎê\ÍæãÐ@R"ÊQÀ¤e1ؤ¨jÊe©Þ«:¨¿«BÃÎsd:JúÂÖ5Í´Ú6 Ê9cÞ: /¼ Î.":+¹JÓ¿*D Z Ð2³ðÌÒ³*¨hÄ¥"¬bIKbܸ.K äð>q³ ¿a¨\E¬è©!Ea×H¡, �:CÒò¤g6É«¬ê7γ¸æ8>HÌ4®Ë3ÍaÇ>Æ£2Ár;Ãl¤tâ Ë �óJQÄ<ý¯á¬-KDÀpBo$â6£ Ê9M¯é9<(Z¡á³jÌÇV¥í*Ư¡uP0®7WUàé>Z**3°k !räfÈî£Ðõ[Â5NÌ/ằV:q@òC«â¹Fu9Îc=C|Ð2`!ø#pÎ6FxÍ>·ØPËD<auÚý3ûü¨!0 +À6Á2,gÁÁpgCÞ:.V +ñ)Ó �¿7dô$« µ,¨xia@9K«ÔÚvug&| ëú·hüa¤ ÚV7µjOþBÐjÇHúÓU,k°-(æ9 ¯x̳æ5Ý 1Ât®ÓçnFÝ*l&QÃh²F¤éq½¿ªZªª*Ê[Ânä1bÏ-b8R(SÜï.ÛBöE Z10¨@jÄ1Z,Dz S'c{9¨äPH kÃëÊÀÙÙBÖÜ7Mã}ÍC»W;¢ûxhÁ@ÿ?Ju±Ø\¼cºë=`¨6 �íÁCêJå÷$£ºk~¹û6Ç<þ]?| ᬩä\u4]ª]2pb§3uhÐ⤸wÁBQoÕfô×¢ÐI +2rBjQf5$èjªA^V +ºj)Æðò<k`¬»°PÂÕûbÕd%¦Ì|)À¢7GhC²à ZùURÇY ६ÄXÝX3EËH1ØÛd)°fõ +Ch¥@dòâH)]«½æ%t³*b¯5Er+ðRABgM(a£YX)rA9_1£óQøÝdÜ ÛÉÙ[`jGÃÃ(,`s +-&ȸÍc\na +àò&¸ÖÄÐ-dÄ,e%)5ZQ¹GF5"ÞÝd@ó,H¬_;+¾ÙNÌÌè rѵvÛ¹bsá¬Ù0éÛË©i´ïÁza?ÔtÕ*Éý-²6j'h´/! ¼Hsõo ê%X+Ihþ|@FãB\A¯(°ÂÂ@fZÂrIÊ<\Ëh Ððý¿sçèÍL)̹¡Jª<Ñ¥sÈJ �CÒgyU#ÀÈêK*¸KÎíÜÃvb;ɯ,¾bÄF]ÒzÆàd|upö7úàA6/àæ¢¸>jɪϼܳ{#ä,s¹üS·@s"ªn9`cìà $'0¨BpC 4'3Ë8@C +¡H)ð¥u&rO>ôý·×ÁIÉ 2+oZÄXcèqkèV¡ªÅnåfg¶üÄVX]49Fµ²1ÒªVbçõÂäJúùQh¢VË:\*åí9&"l ¡5¡9¸¯Cyð¤å%¥|ÎÇ +¬Ú\CEáÀnªü*_NTê]£êÕ[«v½Ô íBJE)#¤Öó8W5 +¶äÍÐÓ5CÙ¾ôRýVBA»åµ«?ôa2ºús=3ÉÅ!p$¤G8x½RMÇÄ7&Xã6p°8¤Ê\L³X´]éÜ40ÐÉØÔ8é:®£~&>0 îo§ 'sÅèÖ¨L >ÑÞ[JßjX14.bûfé_¦m²:onéͽDµ¤»Øé*¨¼w[Áª°5µ×».U[âãkÕ[®Md9Z¿á^D&³ÑÎfsA9¶Âtàì3"hCç]k½rß`)Þ÷ô²vP +endstream +endobj +242 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +245 0 obj +<< +/Length 2915 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C N'Lãr8Ô<e*IAC pÒFT µÁ¿6N6iÝ0`8Ì¢éÐR5# åtÅ#!AÀX #ÞÆÖïy½ßoóÜà)¡ÑADX(eÂã1¸¸k#ß1t äe PHH ÃACØÀiào+µ´s~7³Õi¿°Mű¸cm¾bÊgq¼às4óM´ºD¸÷k4µ +̶ËI°Éí<&è(N𸠸"@®78(b¨)c¾=0â@,"# Â.!ØR* IPZáÀf ²Ì D>"D,@ËÀ£Ápl+Ã0ÜQE³p¥7më~§!2³ã'᪸è9ªë °NHdìlX2cä4 Ò7Ï4<ÍÊ=H¬øö´Ïf¸oª¶ ¢ Ð2\ZÍâ=7h|à +ª·Q E$òÒò f*li+ïÊ\QKBp0 "̶ԳÎ:ªOO$ëP#Çõ R 5=)<Ê£¬·Ó%fèVÉðÌ:Ãå:uÀÈ2WÓ^:Mã(íH£uÐ4Í éG2C ó¼# @7×µñ;X(b!VÖ,µì! «¤;0Þ;à2cHÍx\k11A@ó,ApTKVájM=Äs{Òr _SØhÚ±¶uFAÐ|ÛÕ-Óª´-HÊ6~A¬gQÂ9#l~Ú¥'¡UøiKÏU;ÔRlÕFÕi!¢c®,¶,´ Çp¯a9R-àP6ã&Ex\9åó}ß·þ=qã-É'¹Z{]¼¦*-(eÒêYÆCCõ¥Ú Ò6²½_C¬±²%è[÷²ÑÔÉ0mr2 î«´jàWMÔoEc $MØy®«RëUA¾Ö®@4låÞ9æXQºØgoÞhêãx÷ÑÏ`Ñ/ƸCÞdØ7°e ¾òü_Ì Òݲ8¦¿5@±ÖKrYa»7¸üγP.ĵκW[/¡ÉPþÞ(hxï%y/HäàK CvX[9Uͼ±;°±ÃðA´©ØªÁ 97ïÁÂïÚHda§µ¸ +rαu¢?bî³{两ü:rì ô9°R ÙTw'̱æ6¢ÖkHË©~]Öº÷K4ÎÖAFÇêKØ|A´0¯öPÉésø0×>ËÃzjKûE²ào¡Ñ~Ö2\Ó]á¸3°2wø- +àÀÞlWÐ7ÖÊX,|R±5Ò9D÷dun-ºIí¢!dk0[r +0tG² +<¾ ÌWÆÀhu KÉvçäê¼eª³E6hü¦ËßgLÐÄXv!ÖÀÂåòø;ÐÞ+ô\2FÝZK M3 û´*g0ûGtÉi¡Ã$~Cn<Sê>©Øa¡P (EZI ¢Æn*SHyX8¨ñ|.zqNXR +¨Cxå¢å\Áã!h×Ô|«bCx`Xl`-'³ÀäÆe0ô"ªÓzr¸B0A L"ÑæÏ2Þh-ª53#'oLYµ9æ· ©U*µõVe!h½ Õ¹ÊWæ+ª®ç½Núú*ºáÃ%'I±OKT.ERÅ.T êJh +(r@¡ÊºðóiùëOõ÷TSFá9:[j¥)K¤GÝÒs~ ²Ò²à¦3¤u 2h1a 0æi°f- ÐÆõº&TOd^ ]3ÜBy4÷h¬jlãZÊnvNÃÞv«y#*LÂëO{ 3 +-2Ó4^éé¨e ¥ìÂü"ÊKù};̰Î,AÖ5¨Öã`´3¥ÛÞ;tpíå(ºÅYàÄÅpé«:è¼ì¸wÍNò"è'ü +Eî¡eËHôÃæDâàËB +Ae !D,$*OixZÜIo1ÄP'ëÜàZ«LùQ4ÖSzqNiÖeÆÕtSö`ÀåE/ +̦oekÊ5êónU6ÃÔõ J ¬D{Îí#¹æúÛ[«~Ñü ¼UÈ |Áɯ9Üä«| +_õÊyÃ×%C#c¬~:@0Ä¿ánÀU@â¾ÝM¢G¦éö-&¡gû6V¬³s¤×bÉà/¶£Ñá˹ +èÓ¥%ØÛ±ü¬óDoäâJIi<c8z¸â,±U±7e&ÖöÎUo9\¥ä«ìfZ)t_¥¼²þ`Ì91æNÚÈÒ-bÍðj9»E;I±Æ5 0j<,NÈ^9\ë娮}X¢-ñÝJ}¿Î á<b$&ÐzBèm´TMÑj0¿£"GìrFM&£¨cKïBØÞ QM À<ϧÐAPtÙ{LW3³/ªs~«ÂÙLjûß#X2ÏY°ä¬ä3³ó×®J%²-.Ë`5í×ÉÂèc¢ÙmÉÀ¼õ²>²××åT áDw ·=²MÏÚöÆÛ#¼©sͼÝïÆÄ§*ãܼ¢TÓT9#·q§»wwçgÎßrI¿DdÓfj[¡þØ5¾@¢úûì¿ ¿ ø]¯fðlºà24O)¬ñ&ö©eEY#¯&¼nÃÃB¦!">þ ++Ì -kÄâÞ¹ ;ìh3£>Í r45/+|6#fCk So¤î$¸Ãḛ̂Jÿ +boö;cº;ï|Òªüo¨fòæ° wF2`@ ÚY@æHläHÄ 0à +@ + ¨lô£ìú+É )^»+Ûã|föÑäÜN xP¶ËˤÓP¼/ +ñ§¦G-Dí¶: a +¢Üsð] L&çPDídç%óF*[%"×%¸[Í&C øT`ØLY¥Þ^1ôíìõ(v`f +Ùæ2Ú&8mô°QðmKxh¢ÛðÆVO4áQl1(±*\#xê(ª .ÍÞkæÂlmè ÜØþ_ ¾Éb»±¬R,N0 Üg²¦L q¨²àÆ Ø Ê r0uDèàzð #`l1JèH.Ù ÝÄ +qXP¼âð"w " mêR#r(r-#1'<±CJ7Â:øN¦w0¥÷$ðÿ%cþiF N«` �`ÊÃ*e Î %Ö´j$Ôhüeæ(hFuqQ $eG6²Ôæ±ºë¾Æ +endstream +endobj +246 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +248 0 obj +<< +/Length 2385 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àP1FÆsÊhÌb()NS¸æ)¢Q ¤i%* +Dª8\2¨ êuë`0&¡APÐe +Jª9 ßéÃô .ÇÒ²b)¸êm(çpP\æ³»î5Ç:X^-Ç5Z.n +ÇSqèi7+Òì :eÄà Ìè ;M\Çrçu2#ÏÄcõF¯¤ê:ÎÀÜHͼë`d #20Xæ:cÊ9nØAðP'¼#(ä;Á£, A¢ð¢ hnÃá¸AÁp¥8ÉC&9áCÜïAÑ£tΩ-ð©*'$* +°\¬(ÂÄÒ$@h²2K2Ð`b·5d9.ëË:Þ©l»%0³[Ä(³(+íC²²s²2 Ò÷"Í2dÙAIÒl+«+*Ë ³2|¼@ÙCjâ3- Q®¬/¯H3>¿!ÓZ&ÍÈ|à-Ì<ª°¥ó½ +kbÙ¶ÍÄ#×Má^ 0"â6ã°Ë]Øm½ £ËZ×Ùv1ØòÐP)%V¤¨fJ°q'Ñu¢ÒåÑë@k& c\6 !<(^°Xä¡Cgk_1ðÞ1Ô JÂ8¨(*â<ËñÄ; Ì n4Jtoнà Á½ÒÇk&ÝÑ'JcÈÝÁ¸+yU(½¾ÂMòhl®Q¬mkv' ¥yÚ¶»l$ +âp ¸Ü2@` !b ¤ñ¶Ô$:"ê Â:-ÀwmÔ:ªdô*¡¤_ÖyFU-2>^¸Æ9 #®ìæÈ4п°ÝZÃÉ©^N·S!<2¯áSÈÊps¸³¶i¶¬Ù[váÇ xf*¨ã9ðÇ1l³3!ÈP麼[µ´2Ú8 ÀßÄ>Háè /Ç(Ì4Ï@ü Óøÿx²£Äú332÷ÐM5b 4Ý79ÔZ¶Ë6Ùà 8' Û`P_ùÇQpDhÁ5Gg89Ó0ù1ý@¨:>$öxHm37 @OàhÁa" è}_ö3°ÙÂãêiçzpÈ"F®Ã¹* *×)0NÝý+vªÕÝ|G£'òe A» ÌàppY¤^KåÎhgC/@¯t7w¾ûá»a´0PÄf H7Ðèkàmoó8ÜÁ%y$°6óöHt áµçâ*F¢%»Ñca1§PjT"º:°nEy#äú-"Êtbt®hȸÍÜD&»X® +Cjm#E6 q"ch¬0'\= /ùªyC 2ùF×a$&z¡¦6FàÒø¡ pÑeÊFì çº $ àÃ+R �[Ëï.Î4ÏIÒäLN �":ß]Ò·©§:è_ ²vK?>9¾ÓÎË«ñE(®/be*]ÙÁ9®ýGµàªÚ$ã;'\× BkÑk|!êÏlxáÌ@ᥡôwKªE À¦Q=V !F¥Â5FòíÜwJÔúó©/Dêà=Îz'ù=Û©T@LVJÉËxe.ÐdÀS%L´ÍÇ@ «»=°FÍ'8 }[sÙº)òÞ88 ñÌ·ë@ÔRª\7©6§TùÜTVMRÐÛ,ª¨UÅB*ç0Ыui©ÿLã0ÖñR\+*D÷gYE¯- �O@b óT2iÞÉåâ·3foâ| ´é<6'v +{] ¸6bÌÍ£5~VV#YtÛp R Û`ß;spnE2ÀZkÞ1)\$t`´á+Wp¡ÍøCjgWY d ˵´æR²r̹Ú`/U×Ú¨C¥ZCÐï1¹ä<ñuëGÉä,íÚÄ +á4/@¤B¸C $(4`"C3û£ià ðÓ"ôÈåhõ´9W$@aÚZæª,5Ã36ÇÀø¡y`Æà7Ï\ÆÝzø§L<Î'ç;Eo¢11~]Ýòåyö&r½·¿QëH~¤ÐgkO)xGàí"x¿o-_¯üÇx^¼8{HðÅ<÷±?ѧêë®ôdKÔ<O}2}A)Úz»ôí OonÙ!säàñ[ëÝÒ>=ÁXÿÐÉI%±*;#'B*ÅÃtÜ1n &4éYéÅØÊ6ú=ÐòLE"8.©£&¯m/zÄ#.uŶùõ9 (çÓ]È`(M +¡t2Cb'CÕPÌ¡ê`w÷ëʽ^ 8ß ØYÆöibåïIÊ×Oq§Á¨o º´qJÙ'Üç|÷eKªkCD'rV39µâ1á}ó9ùÿøõÃà@¿BÿW 9ðPJ +ôßI´ñÕ72ù;Iz\«ëûÓ· àB`LãõþÒò4`׳ÄË©+ݬ(G9zaL|Aó\§ÍÌ/9 ü\Whæ:ù$à´ SfuÈ¿YD¸;imõ¸Tï([ÿ¾ÃîpÄ'zVL¶Vìöàlà` @ÏÍ �MÐÍOËîB +endstream +endobj +249 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +251 0 obj +<< +/Length 2664 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C N'Lãr8Ô<e*IAC pÒe7FyÝ2Ä()N3a¤àb7NFB±¤ÊwQHÐPrÐè ¢,2áqÜ\5F#1 ¡:zðÌm¯ Æ!pÒ±Z®j+ÅI*qbÇl¹1 òn7f ÒthPAÔkư°ã#¬ËF +NôPH+M®Ûo¸Üî·s)ȹçôúÍsq¸aH¨54 Òµ²µÍ~î Áð«jëvÞ·ë\8a"£Æ9-à Ò7Îs:-:¨¬`ì±îã $£zܪ ªÀ+(Ü@1Ť:a �È,¡PæKj £xÈ4˰ÈK²ü2Í2Ю&â ¤ â$ B$TÐ2hL\$Ir "}@(Àêâ2ºÂ¥2Ésf¯Â&7ÒÜ9Ér"võ:|2#ÐãKú7ò<0ÖC,¯YOôÅ +«,ª6 +M.ܼå2ñ©5 Ïø@6Û¥±]0Þ9J3d¦·J«]FPS¤KÁpn2µöCâº.ûêû¿÷eH4Ã`ÊQ6Þ%¡izÔ ÀA.cØ6\R Î6Ma ß½¡^!ª #¸M1d<Ü"RõCXÖu¨éUU)æA)JØO&è%i#À],0J[á]M&8` +64Ô,U+ÙàPý¿»³4hhÁaB6.µ&pà¹#jÔúÖÃu½YI¹¢þãt¡éº|0ÚàÃܦWÜï¥ÖZÚõ×À»¢µM2º¨µá¼-£·Ó¸}9±Á: Ô:Csªà}pì5NènÇ< +ÕdëÊã&ÝÙÂO'±uvËw°áplk7µ;î<ׯ+>wóì`?,Yç`Ý·Ú¥ÞÙåa ÑOÂCpce .0êÃ!a:ÄÐV¡!å.P@ãÃ#IðyÊ´&¢µV5#8Ãê"½KÄl¼V"Æ m¸ XCt̹ºHêCs«Q¥ç;#P[³A®ÙêÀCjmϾkÏ �0PCr\o,ç¼×Ðô³Ò;D!¬,7²Â _ È 2ħZú"q©:ÑåÚ ã$m¼7-Ýß4 PéÅq90Zñ1e/ÇÕ!AÈÛgFoE½7v 8Bó&ð¾Â@A Á"0 *I ÍÉEÉRC`7(ÊìqC á,ðPÜxg«åÑ9¶é !ylmºS&`Í �»ÁBfáHRÄÁ3CÇ䣯_Ü"òpÉé¬H¤ ¡=ð&xnS1tI¬¹è=P|þ&pADÐN¡à:QSþ_Ñ¡³Å)Ï/³êw'D(¢tRó'ÊÊ~Ʋ¢Ú_TX+jq" +BÉ!Å$´âúJɵQUDÂÓ*ºM d2¹)tNÉá='ÄýN2} +òÖþ×ÒÅ!`µI¶¸vÎ*!.PPÀÕJÐÚ3E' V*çJÐ\K Ë^<ÀZ¯ÁÂÁ ù÷,ã ÎZIj-f£DJÛ[«}+®%ÉTfhdÏw(2&¼Wõm,óP(u[/à·*æiJáõÞWÆÄ 0)5T¥ö*Å×ÍKA<¥¾RÒYì9muÕ ¡¢Þ;À_Ã*aɰ0ª«é×b µ.ÜDgLÓâCS +íø^çÅiµ¨/\ß!Ío²Í¹¸Cäó£zRÚÌ=Ô6±,ÌpaɸuÉS,T,M>4Ù»I¦fõ]¼5òª{CC]%\rüÕKöoíÿ/¡ó¨0[[ÝU ¯6ú5G(¾yÒø,)ð±ä¹ +a¼:°ú·q{&Ê ±Þ5Å5Q.UÈ51r_ºR2¶Li+ÚzÕÙ÷Çr²Ý]HÏÊ©%ú¿íæRPgǶ×YÐ0*Xg.AHÕA¦ù×<æìeÁ¹1ÉX*âäÜ¢HÂx*¢iB|æâWsÐûºujçÆs â¤Èow«ÕHfð§ÄxÐmäÉs ó©Ù×´øÄ0gv 0®Muðâjãôëè �-ùbo8JH ¥ Uß°>KA8+àËÇÙ©¥â@¤B+S8`¡ñpM0Elìî[gº&<ÉÝzÜop~Þw î{ø7¼ß,¦{Øài + +ò,#½\r¤J +Af'ÀvdÁ&>-)³×W³)\Zس¾.ì¿c·ûF5=M·6*5QQÎÅëE8úTåéS@l!@id[ØÆ>DÌy#¤/ff¢µ´$ÜiÚ}yb!Öàü¦®VÊùS,ºDxÅ>\2oê3 +CrÂxpHT1}Í 5P2ÒSUêÍ£.É3 (ϨéjëûM%ñL¯!& öBå±ùâi§S8ç$åìèÍN¼ <1tùì]Ü-¢ ´Ðú;qDOÍ?´ÈëªI}Ý'{æ×¸HNåñPßuDßçÒ1ÚTõêbêV QFÂâ +BâIlF,Üû Üô¬ãíP@ã^"0Étf&z¨ä°¹mðÓ´9$I«´µ +dCúË£2½g©äÖ\Fd ÒdêlI¬b ëæªäÈ%dî~DÀÙîZ Zâ®ÁfaM<K(YĦ åHµB|ÁfHlÏðÔÊ*ÛíÜJÕgÜÛ#Äm-\ËÇÌ[D½æÌ¤¢s&I  Þ`ÒsÀV$ÐD»'Ê^ÍÌ<oS§rÕÌn_kõ +Â5âD&,®SB°<ÈJ`FìØ @+ÍF²ZgÀPiÄBp Ëq 0«ÐÎé¦#mÈÊÍHm¬ ÚþÀóçNBPgÑêmÈÒíôI«cT`I¤B +endstream +endobj +252 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 114 0 R +>> +>> +endobj +254 0 obj +<< +/Length 2053 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +fáò3 +FS¡Ôän9h´x)IK¢Ñ*A!ª#z¥~Â-±»>Dr7 ÍÁBI@t4D¡ªF§Bax¸j7JìR('¦â°Òp1Ì'#!pP\é4×Ûþ® ]ÔvPL¿'3Z9ÄüR9¦ãÐÒo7hÆ#!A¤çêöΦ3æsñiÓø9.²ðþ +ª" Á:#pÞУ8 ðÆ0¼Ï@@7§ÀP9C©øî4à Þ;Ád j +[f±;lÛmóá8Ût7?p@ñ<ËÓ é*j|Æ«+ l,aÂ<°6¢Ê³+Xh·+P"CÞ9/+ÛN橼©"´;Å(°j×$Äë6ÌØô¡tº¾Ëô,Å2"tüÑH(¢º±Ó¢³;®Ó]<aP!ÏϸZ¹ËphB-Ûë@Æ«ëRÀ!Ô:'D¢ôZ¢ ©ôÂȺõc6ÞãÊÞ·îâ¸áKö"£è<Û=¶ã9غ\¶Ó'ãt#t[ÁÖ:7-ÝÛ$¼I÷¥6¤µTòIc¡) j ÓtÐ5ÕM'1Ò3 P§pdCÂ8RµWJ|:!«pÖMÖD7Mw#]Ù]ûÄñ¢ø" `R²Yaº³Ê±¡3H"/`¬ ETJ½HÇ¡po2!¥WcpcXVBóÝPzmá5«ÊíWgÒP$ +âp{.Ëy_ôK¸Ã°Þ4¸¡HwÔî3TO!Q«*°hç-U +S°#ì1Mü¥´9U ¶0´RFamn9Íbaei£BÑ´=0vAÄÈ*Gö *^ûõ÷mðXÞõ6$§Ílæ:¬±«û4ÉïÊóÊp¬Ï÷qJ64C{='D|PÐC tö=ß³ÖF#ÞÃJ¡ýÄFh +ü=,hôêÓæ0¡£´zBÞ)ÖkiÀ-µ4ô#Òi骵'* LlkÎ1w<[QÒy.%Í*PA!0͵עGXÙZ&T´$fÐZNqýBÐhB»ÆnÏ%%¼³ó\"Ýq䦽@põ ÁÔKHÈ'n÷ÎñàJ 1÷ð{ãp(>GÐûê~ài?ÑÅ* (àþÒsê± ¾÷vüXè~¯åþ¿ø £P@)X°ÒàT$bÚ 6ZÑDy5è/&]«&¦j$£v*Ù_&$»¹b¹KùH«V¤×wÈT"!àØ¼82öÄT_Pv+³F¡~uF6/É;áJ/G×ΨL |åÂÁÕÄU(Ý£YNjµÏ'xbâ~PÞi=(vëVK¯àÌ,ãiͺ^S¦B'&Ô'Rià±u$Ö`Ùh źhµC·ªå+µzy´üécPÛÁ£¶Ð®duf%äV[¤.Ĺ&e;^«Þ/ä¡ûyUçÎW4Ø9SaL12¶¡è¹UZNu¯¿v@µµ:uà3¶´("Í*Íê´PÊÑÚH +ijriÐøHç]hU zVz·Û lM³,ùTÿY¾VbÃgÖFl!ð`Zõ08gr\ÑqÑtªÑKDOxVE1Ѹç纲tAÍÒ:gÉ?"ã«0,ÃØÕbÜ{t2NÞ;£E0&¢61 !Sk5NªkizN`IQâ!N;qðóÂøükYKj*)§Ü÷ óB +BÈaò# ß+JNëºdþú(iDL± �Q¯ Ȩö¯k-)Å>øfù¡´±úÛÆÞWs&´ÚZÜy£JÈ!`âë#úoNláÈnªêcÓ»6£aé1Í_Çhñ¦î(=èËC="V*5s± ØZLÈÏã]á(8ÿdÈê~OÜz �-uæӪ@dFiÁN3Îb28¬ùOöé&aáêS¶PgjñèRqéè·%£\¨1&0«Zë �³V´ \+¥x)FXYqBéöÝcQá(¸T ÍÓåÇtêê]£/=¢ßÄU¨1bgÓÊ,<Щڰõ¨Uª¡JrúÒ¬¦5*çA& ì6±õwOë¬ê'|£ÈCA(U·(×Îg2®Ú2¼Q$óG+î¶)ƶ®öÂØàu ·'ê +ï-ÚÊÙzz¸v}³Î&нö@@ +endstream +endobj +255 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +257 0 obj +<< +/Length 2378 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6'EÒ¡* ¡AlaAÄé²êÌm ÆUx¹RJ +U(%I*qMSºhÌ`("Nf3¤àt4ÍÂ% +FÒ¡ ¨´J( ÂǪãXDj7¯KF (*¢IPÕG#Sa0¼lr7Ã! *Ê("nç²ìb7NFBà ¸)Îçïø$n.8}T[aÉ륣¯.k7¦ãâô 3·!Üy<ÆCflÂs9Ìf ÐÊdÍ'CFpZ¦ ã6¶!@Èú/ô +óAÁ@Þ8°jø¢ Ø\»Õ¬ sZ:a²:ëA@ÆÛ Ãtü=o+à4ãpæ@N«%ÊÒ!Â$ë*Â0ôQ ãpÊ9cBì ã4pÍ[nÜ·qÀß+³oÐÜ2 ã¼®úLn÷¾/êû³ô2«ºòO9ñFËD2C¬E/Óù0J¤-9JºDÎíbÇ#-Af ÐTY7ar,KQl¸üG@Pb°¥'FSË'%RJ;hê9 IþH2èDsâOJc¨Æ1®C´6 D' +ÎÑN.Ñ0Jbª\:QHC6²Ü^Þ·õ +â)tJ Cé£^ð;nêóC(Ì7¼T%äСWX;TYK`Ù¥/OÞy´w«ä¹xIßã½ÍRÈÃj>áv¤¸µrªYAT©øl3Ú¾èTÙϹ gC(è:QµxÐ^¨±»1øjÃl¿UY4[IÉbLn`÷b´V!tdxgvÓ×{}[Ì:ÁãîUò°dnd±Ð Ã8 ÖM³èQÙ¶}£i Mjñizln* +B¨MlØ2úÐmW¬ÓµÌÖbMçî×7½a[îCÕÕ8+uÌìß¹<ÓÃ}kÈÚ)§Õ!j5ý!w[.ýÆ0& +|þ_½©¶¨©©ùº¯Õr¨2Zù¡í4 +"C9ùæÔÌ95 ```qÑ3ðD'E¸âôYs³fówÐU_YA á#ã#Á¢;¡¬4bÞßÑð$3Àh®Ü.Oõ>CÕ¤1d v¸«àûºO Úðæ[¢7Ýʺæ+XÄL¥E^ÒjOc.Uu¡X¬nØËãaLôÃ"FÑËP аÁæ~ûß(-¥±$ð +Aº0¼:EðÉ Üy/jú<À@ÀP2!ïDÁ¶¬ TB,$ ñ@Ì +!4LÒÁVjûÙÄ}Àå?DïËjÄÀ )jDCÕ Y¬:@¨kÂ@W Á)ÅW`nâÂNFô;ðÒoH;LÆÆRÍ¥ àµéLУ-R¬¸2ê]×ü³Ð ,q¼ÉS^fP³t¦{®Sà"T³?ÅÝØ<´ad@5PØIa:ÂàRâRþ;à¥Ç=§4ãAKr¤Æ{iléa1&DÌBe{qNÄ¥4ó/¥·9ODÛ¾'á,ÐDÓCüto4¤#°Ö+¸l í#;àP¢NF6$óòfkhL&j´:ßåùÌYwF +ìèS¶ ÅѦPÃ+=¡·8ù_{çfm+ú/£d,¿`PÒ\ËN©oùÎÆªEåÉåbMçrÜR=lUÐÖ&ó>ÐËXTïU¸Ð(ý2bÕoo4*XzZ]ýuxNAg<¤Cc{z¥L{ÚUPµ2¦ukcܺ ÿÒj§é½Õ æúÌ Pzýë"iQKÅVµtü-£Ê~Pe.r¶ÒVGLqÍ9©H¶cVÚ2£ pÖÖU+pðY߸Ü'P+ìÓVÁJÍ8.6 §Ø¨G8¥é(N§ÿ-§màÎðäO= É;úþ̬°eaõ5ÈÉKà ÖUÂá[ ÐÁ +¼ij!¹3º^ôrq#Çè¶+^^T +.èüïeËù1;*ýð,ffän3E)aB8êª8ÎÝ¿Á Vhà3ªà¤·J �C2,=,r!äO2P2Éi0¤Ö6Ârzkály"a"Ãn8Ði*®ñn¹ Ë_¬¢õ²Ðê^ÓÒWYûqAÔ!è �ÒZÉ÷Ó6JÜóú·=Î=b[ç)t.ÌY\QeÌlïpl1|e(Üj#i¾Óò§V@kö.Û,9ÝÆVëPÂjRW8F^P¸:Ö¢Vºè¼ðlÍÙ[iaD'S3N +m]Kµì 2@ºååbç¯v:È=½o}g^ç×e$s,ñ÷ÎÇß|[g[.äàËï -ÎêõÊäGáïÝÆ"=íãfoñú§(&5)RcLÎA0Ó¯J»k÷/ïrë®uÊA$øÁc8!É$ï&³dfmË¥;CÕùoÄHS!fKIù6Ù8kò·ÅR÷=¼þ[ßEéý«hì¿@u`î¶lÉ¿7ðtËá$9úObC°a !°0#Ûs|cÎ$':ÆRúyréh~1óaÓèä/ßt oߣ¢Ð.Ò#½%ìRzmìéÐ%äÌìqRx;Dg«ñ3 çW+e~¶îK»ù¶²HÅçXn ª +Àôjö þ ~ÚCÒ@ +endstream +endobj +258 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +260 0 obj +<< +/Length 2868 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9¦EÃ)å4f0§3ÈÒp:MæáM#I)PÐTZ%QÃ$6ºÞ§^°X (*¢IPÕG#Sa0¼%8r7Ãì*Ì("¦Ò²îb7NFB1¼äm0eÁApSÏà0ZJej3¨ê¦¶kÄj7 Íìóó1ÔÜc¼ÞÄ#)Ðêr7ÄLÐ;à!Ýy3L§/W¼äÂùÏ[Ú1¶ÃpÝp@$Ð36¾¨DÁ z^¥ Z #, ë~à"#Ð9jX\D! ¬`×%Áh¯;IÈàÝ#kÊýïPRA@ì0¬'(L, ¨&ä°öJòºï¼0+Èó=TÈ÷ /ãäÿ>/êû/Ë÷BAl9¾C|#:83³ìü?OäBP¢þBî`*MdkįQ3ÑcG#a´èÇôDê%ì¬Èã%RhA)ʬܴ Ã{å.Ëóß3¼Ô +0cf¹ÀÔ,ßGBÈT0KPh C´³¡LDÏRÎS®U>Â#anèZ« +fÖ#®ÊpUµxé=Öã +¶Ê/¥<Ñ,äo3 îðÉfEáfª GH\<7ÆöÉòþ:L#`Þ7oë}d¾U¤>MøAyÊó½3î<ÍÐSèÜ24ù^ÓÄôÿá³î'3/ØÊÿµðßRb.]c;Ë1J2 Ù¦n"YrÅùjyý½YÎC-b1kæ4ÌØÇ§=[\ +1'¨P2î)ûú½c|ûRu$£ÂIrÇÒHضm«nÜ·vËḮ=ºE+raH${Zõ@cKÕos½`¯xaÇé$nG1Û¦ÖJS¶:ìãpÏ>ØMd6X×Vr¤bØQqpc8¿ ÄHõËͲu;XöIÈÛÚ>[ZîiçÀ ãì2ä£ó½ù#$Aµ©ÌÃímÏ ÿ0ÝÅA\`Èq2+[Ë<® á¹Z/dî:4Ò?7Í©§0ÐÎék9èÙ:ä^á_»TbLзä\S¡ØpÃdmJq¬ÍÈ@HåNh.oMS@eSBÂФ-òS*Q ¨htI°2F@ÀõÐçWYiÀ̶fA@Rdéµ¾aJéQ"±¤Å" +â£Ð~@_ÚB$Q.>ó 3GIú£øBâ!Éhá@$r\¤gsðéÌHBPª dt.åa3ÔØÛ*Å;¡±0}ÙJoeìÄ÷35ÍÊôù}%²g2Ée¼gÿPdC}«ì®Vë_¡(;@¢=Â9! c:2`àÔ¡è@¦$CüFòHè|s&º(xº¹>R³J9K)Óc)Gì7Ä8HRTS1¨ÄªUÉ!×2]û¬G"ì_6È9àçaÄhC"6øÜUQ¢3,F:©^Ã,öóâÏâ&DçÔM Ui£8«G"Id,ÔµZ\ X ¶1bÚ ä;åÎ2Çâi9¢¦0ª¸¶©S ~y´ÿtr)#P ]ô¦5]UBHs¬,ø¦]àb oOy$àÊ``à@rÀÁµ/]Ðl½ø(à¤>O»JÇjÅj&ý'0PAIp � J¢h)!¥¤Ñ,ªDâ°!I\¯tS(²Jà1¦à )r=}²EgbciPHe:ßÇ9.eØiò«¶BÊV*×7$aÄ +¡$'@@ +ªÈLlû +¨w¡Æs~ÜÄr©RiLÿ÷êýA¥Æ;vµÜ²ä]±xXTB3Ýj(EîÍÀ@ܵÜI +eM{=[>£ �½ÆºÌú"ãóÑÚ*I¥Ög̳Òu©ÈKÂ[i©ù°>D#/æÜ½ÆF+¿M©õ/öé[ÓÉbU[-WéÅ@ ÿ²uÜ4ÆÁ°5Õæñ¥êXÍóå¡U¡ 2ÅFRâ)¿q;Ò4t×ßÁ7è ÂjÄ×jJ]çü1¹pÃOR¾ð§°èÐæÆ8 fH=w×4yFm2Ö¯2öVdî>ÂcJ¸AÎÌÆN,"Kî}ôÄÑ#×eMi˨UeÆÎö[Y¾~Äk6I¬©´-ÒÊh¬ý5§7B$¤VâI[ºQ?ñ$dn9S a0d\Fñz0F)ãt´3}µ#2Á³ñÃÓ\×âÛËe¯=fr;¶|ÈuµbZ+]ÐKSj«Õ;åV Ôzey±¬h+0òµþsιß<Ëö3ë 3YAÇYf±/v1äè3vypQG]¦"áÓ/TVá6ò¯l<\ õ+À¢Ð¿Èg·N¤á2»ëè ¯ ~nnÚ%µF\ö(SãÖBoëÅÇô#6ÛAöÉw²nѯæõ¿öò}ï@HîÁ6ÀiBc +]^ðÅ*~îU Óhû/Þfþâmí?mí+#(Èàs%xÈW.úwOiýA>Ò¢ìjDýGõD`áÏ]!anÏfnÕ°A6{¾3qõÖ¯ÃVkpa®¹WN7]§ x¥éèݦ½ñOpÔ¯B`ÌÆ@jcàIê´ÀÒýoÚ´Lµ+dd#ÀjµÇ6¶ ʶkj¶ïhòIöÀ ð÷L6Öoò¦/ÃàbÞ¹|«¢ô¥$ÂÏ¢1O¦Lp£o^S � Êûjâ®kԽܫ$R¿O"/nÀ/,*þµ.&,pNÁ°T..¢îM0`~N©OR©bàp%ï4GÌ@2íØ©$`l M&Åc^0ªßoÜÌl®è¶\mâ×~Í~ìD +>F ¦Yè<£4?ïü,ÜÔÏÔe.æÉÆF¤¢gÌeðq0xïÂÌ6Íj©È×Q*jç3cêlãÈd¦®VMÀ_%nXÀàl}òwÖ@®êBpØYä4÷:S)[n8T +ÑPâªC^Û Föh &ÞïrÀdÑJßäFÿ¶ôÂQé ôÏ¡¥BG +pä2ðèüægOÙßoã©*é"(È +¤ + >nÒîÌe#ïcÕ¬Ô=±4±8OQ`fqVÇH/ÇÄ: mã¨òÀ § äòO¯ÞYÜÔ²g2!!#7"r*?R.¨ÏjÀ0A+~sâz1ÝÊf°°Æ¡Tô/F?º0ePh© +"®â.ö*BKJ +endstream +endobj +261 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +265 0 obj +<< +/Length 3593 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6N¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tâ7 gtÁÀPC9Îg1iHÊfµSÜc2Å4:,LÂá ¨´J¡U°Ôn]%¼Þu7fÃIÀÄo0cyÈÚa:Ëà¤X "¦ÝO©Õëuû×nG2 +#N´Òt<ïtÚV³]°âE%CUHÅRäq8ÆF3ÈÆÃqÄC/^°S¦SqE0qkm×c9¤æ:/~ê *`Pá@¡P0 +pèã !Âö¯MHé¸4 +ÀítÁ¡@è'#l>2°j"" `Pdè@l ja +P©>O"¦ª°p§¨\½ìÈh±,0bö+\p· +cÈÜ7ý°¨2F¤±lÈF+LdIÉ#2;`PP*"p¨?ô ë(b¨)³ £+j»nê¿#odr*£:4´!7Ô5$ØR´÷>ÏõXè$½GRZÛÔ @!³í /LÈL$)òU*ªº~ý%Èë0¯¬3Ì´öRòÚÆæ£7MôÖð±r ÝS&¡Èh+3µ¨Í&+ +@ÊX36)hd¤õ ï<_SÕÿÀ0¼C¸nÎ5XÌZ¥G8J ¥ÁG¬6F,©ðR 3@1ÜCxÝ<ÁBúþâæAhn Ã(ï0\xª>øá&Jü¡y@P1âT0@38M@:ÌÃpÎö¯¬×ÃtKc¨à84(ÈTý ¡fÁÀoNJa dÕ>ÎåËþb7ùÞ.áX ya¾: áZfFÎ×[?sÈÁ¨\ÎÊ ÁkOå À@85;=!{Ëq·BÐò=îÎ_u=ìn,î\ØÊ¯gtp:j[Ó_=J}Âæ@1ÌK¹_û5* ã6 �½¾mÝêöÁEòo»ýDjZŸ4#~xuÁ¾;ú¿Ü[]A*:&<ÂܺûVJÑͼgK¬$í8f¢}¢uÉ×À@ÃA ½ìÂÜ[ +ÿ !¿. Ìöà|PÅëµSØÔDlOy¾¸ûó@Ð ?D¶ýÙ5_oèá·vöÚmêõÿCÈ ¤% õ4È`zs*V +¸ç<è s_nÖ©W^ì`Dh Ð)#'Üy3Æ_GUЫËy®ñÂ8Kaht á¹ÃÀØ_;a}*#´_q"sèá¾Døô¢ü-Ä1 �FF| +>ÙϤ8] uRqÙ±zí2D!·rª½¤y>.§ ÝqY)G@òÚd=A»óªÙÐ,±Éá8tßL¥2ǨáÙ 2úÒÌseÁ°Û ZsÁ}3M@Ãp-Eñÿ`¬2fpò5èøxfh¶âC8h ÜÉúߥyñ+Jj¢ÿ ëÄÑ4&¥Ê³8g CL7Á¹ðÆMnêiÓc$µ Õݲ¶p@*ãÒ?Z@ +rÒzT¾È` �'4y6³Ifh@o'lü9Z2|ÏA©>fYC[:ÛM \fÞT¶dú(Uª)òP¨x~(u~¸\ÐÕpì¢AyÆqNPQT©KrkTbÝM:Ä×õVWÇ8þ¶`Ø, ®¾Ú¶J>ÙëÌè3êu¸ä^ +ɨ,yOF"ª^/Ç1·qZ/¥3Õ[j¬ÎÓt}ÀÑ£·¸PTQjT>:'m©ÔnN +F\eÌê,¿E=|ÌÔòwÐú{¨mÔêsð´Èy_8Y"Sõ±¦mSèã4îÉtC&Cò"ËYo;âCöÿ"×ËÎ÷âÄZÒ.¶(Å%êT4WTIÁñB ¿§y¢$VueöCvÛÍm«|7«ìdëëÎW;T~SÂ71W~1jlçf±ßÉøGCËÇøqáðßod»xóeKÕÁL-¡iܵª[¾8Pä\YÔÕØÌ.¤ß6©dWÁiLS"s2ºbßÙ{©f§*âLt¬&^²-O/òâ\Ë©w/%ì¾ó®µâé"úü®âURâUasËd´aµG<eDóÜôÄ^Ú»XÀr~1ðGB(M +Ï`È a6áLäðî!&, ¾³ðïYæê:G9ܤ¾#VÏ*:a,Íd½ujÕa©h¥Ý¸¶Ó +cL©3O´6fík0Míå£èH!8"À8¢¨C«fòlߥtÎ_úªÃNíI^ +:ïMéú?©ðþ#ÕÕZ¿@¥LNò²öòÚD` 7ű¿$=lórÜ·Cß4®tAnCtǧb§uòg`>7ôXÝê<[·ã5ÏYí$^E3.ô°Ól4FéÞ8[Á ¦BýX§¶vìô$luüÚ=ÄÑ!Ô×aÙ%Îu αC Ó{1sÓºùzÓ5¶Ðhê¾]ÎÅéÙ¤CÎ^õ©IhýVþEÅ¿+Dhxú*<¡æ ûã¼ü$\*Æ/Ìô-VIHÆî3m÷)(>)XÇøîKÒhTóeÐsÉ"þ/ÐÔ÷0*1i þniVLèФè¢Fúì"y¨â> f±Cèg¦~øï_ì''gÎR Ú5« ³J¼¬&Þk Hkë~ç«Úb¬ðg'IàØ àĤà»ê¼¿cÝ.( �@ÚkÊϨ ' F¶jÄ ÌPfàWÊûq¼vµ+D«R·DnpµêS¥â¬ tà3¯FÿnÂÆ^ ÚdOÊp%¯è hxº +^ÍuÌJ`sñ<._pZãdýÄna°=Ïì9(L¡ + ì| T¤ÌÆê¡ËÆN_`® ¾ +@é +@ ठOå*.`Âåþ»È·èÐÖ@h3oÐ>%Þ f¦ÿo¡ÈÑ a{eîÂzPö?ðÿ DQKm+<G`vbÑ 2Né"gDÇ3 fû°ù²D +µ ò$¤ëTÀ-ÏÀÐÆ4oä}+OJ6±JQNpßQìÐ<efZeê¢ÊqFjÁ* �Ï,&¶¸ Ù/(N6sÃõ"*CF.@ÊáÐÔõ- �°zÎy°p#m¨ª~ÍàK2»æÜÞîÈýå?qzOO22àHâ8ðrç{)/mr'[4qZ 7*çzÓbº¬;6,¨CñèBe¬ó61°jÓc%bÊ= +àÆl \°©]0W8(~`%æÈÇjy"ìý6|ï|flO³P®nJðH0¨Ö^þ06JsE%Q¯!Oú½RúP Ñ*Þ :#SG*H$lî(s'îZæÀQ(ÿ+S:f²Y7o6Ë,2mEB|¶³¶ê,,ïôWhy;Tøq#\K8ÿïsDÀÊ6ä/EÈÌËwkBx2>¶Ko+RÀ¨V¡ à. Ú\+À¡¨°²úOxmâúê¹ ÅHJ@j=HHN 4¨mò¼É&®/ªÅ"z´±ñ±»´(9'QÎe0Æ`Ö¬Cþ¬0F£Âú*S#ôl +þ@(ª¸kxf£^)L1(·ë{!/meKk)7Tk}RiUtUlËOË"FJ$Ku0 à µ5S%Sêù2X¡Z`ä@ÈÕ S57SµmTµU `Âv ÜHyZ . +5[Dgæ7tÌkTnÿj¸ú_Èr¸UkVPÏæf¸4Fmë5gVæjl#`¹{2-u>2ÆøÄðÀû2ó&± Ðkô®mÂîT@È£¢ú©Ç°àÜ 6*Fã@ +endstream +endobj +266 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +268 0 obj +<< +/Length 2574 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b6£ÂѸ¸b4áÂ4NHdbùT&JÁÀäd7 ìa6L¢ÀÊc4&[©@h0ËÙ¼Ì :oÂEÑj +h´pTN.pºÞvg8XËäBI +x1×FÖïy½ßoøÅÞïÃyÂt2#Î@Ñ{ÍQ©m& HÅìÊQ¥KëÚpP Ä1^&Î!¸(. +E%CWN× EÃQ´KH¦¼*êH*, øÌ:Ãè4ãpvç¯ê¡fÁ¢ªÁËF+#Ãphè0#s} :hòì*`ï?ìëÅÀ¬²Ò( "p'Æ(û©R ´núk¯ ä:ÁC¨ä½Ã{Ø7îKæ{4hÂ8.±4V̾jß´lûC´«ÈÖÍ{a6¢ì¼/KâüÀ0L @Ã1SCËn3å9@è³3« Ó¹DÒº¯Ä8Þô[Ú÷¾2*ëI/ÓøÿS¡l@rÁpl0Â3l)CÓ> +[ÀòD±8A?E´e #s9tHνÃxå3ß<>3d&§#j§NqÍgPBZ¬-Lî)òÔáD¸Ck?·wB·ÔKF=®<½H×6éÒïò;nê)¼ÏCÕFÕ}UÓ APdH°¬.ØPåcD7eÙkÃÒ»¹³m¸ô;Jú2ÚMðÅ2LÃ\ ÌSS ? à6#Ë"T �e(ê9Å£=%©Ì³>m[«£ÎÐ4WSÅvV[ýÞÔ5B%è&¢ # "` b¢xá¢|¹OͽÝPíßÑN RÅJbVCMbÒsËQT3ÕR=XìduKÀÀO"QhÙes×CjµuYÖ{eÜþ¡á[n¸`˧zèß £,VÁ1ºä½ùÚæ½°lC&ɳ]»Eµí´Ãñ4^ºæ;ÅÌòWJ]Èø©÷¼\*ô +,9 Zhê}6Ê �ºD¾¤BFb)%Ö)ÃJÆUTçÁ!6@ÄË%wlß@vV®r»9ï¡ÍÞdgmm=Ð"Xn%ì´Ô®÷Z¡à:>f²²Q}}yúàÎûÛ<L4äEG¬ÿòäo-î M¹È.Á`Ó¢a*>°ØB¥S°É¬a +,v©!ܶHëâ´Y+¦a^<>Xo.<ذøa|»!GüÞ }N +I¼#O¡6ÀÕðA5LÍÁfçØ4tr:v¤L$bnF:ö4©XäcîÙÃ1 #¿DqÉç(!ë5yLàÓD'Òab0rM襨ah(2"ë[s A4Oö´Ëãâjá0@TDN4ò ! k½ è¢3K ´2`Êk SÌæ¶ÀΣû Á; +7JèX ÁÔöPÒQDE¯AIR9éI©DÇa@åOfÖ¥ljéÊY'UäÂxW Á)ÅèY't9æ «sÐeа;31Ðò!Û©¦ë[ôb@²>lBµS6ä¡ùÎê0ɨ 9:W«PΨɥ¢ôò#½FþâcKOÓØÄÃr\z&DɦZûaaaæXHÃlÕ;¨É1Ѱà|ú&WÆÊá P.8*@²Øå_ ÎÁ@Áê1/a"Ý[Èff{eIöà/ �ëÄ¥5ÁÅhák:DìH·] ÎWçBÁò7X©Nõ~z1Lä"æ\]C oRA]D¸]Cy~h./ÀòÎ@m¶XTÄéuIÉä§]Òßp£ìƬweH;Ñ!¯T#½µ¾HØ ]/´¯µ_¾ü«ú·¿Ö +`)G;)º$±t 1üSÏ +F7¥`Æ^ÖÓ1yl?±â«ýÄÛÀÈÂÈL f¼¯:½æ%a¸²²Þh=3P-L8éM{«T7Êl×{í^r*¯¿S[<(s'ì$éÀs²[Jfx³,ÞUÃ9eCr áÌÇ-ЦCm°£aÄZã9ÇÄq®XæÛá_e½Ô°8Øpi&-b¸Ó&AV|o3´-luxòjÂc£aiöÈy߸jM§J°:a7i¬p6 +yOJ(-93ò ôQHèJô\9QKèí9YRÁK¥CÕ>¤¡¦Þ:eK)uÞÔÊÍã>·à²ÎP\õCif:Ò×+OÓ^j×tl,U ýÎ÷áÇéy1®Ît·§hÞ½µ/}¦Ð¦ºÉ¶¦îFÛºSpéiÍ4ÎNfØnOiï +¿, J(Jf¢¡3²õõÝK]ÞvàÂV¤ðpg0³ÅáæØÏfVkÏÎñÇ=ÇU¹ãÕ=¢º×®Ûe#i ¹bîIé×ÿ«ýÍÔôæ¿<¶/V Ãv/h¶È<6ªkÊáwä_2ëK}§ö½}ЪxPÅ!ZíWT(`Õ{ ï ]Xø)Úé¾Zy{Ï5Æ[.@÷ìÿZTÛð`)bàfH÷AäÞ&H_NãvßJòûJÉÔ^Fç±;ýBú0:W ¡¿Ñ Ìõ$µ Òµëb@ÈÈNó@P +à5`ø ¤ à²` %ê ઠ@| æj(ôiþ{£Â/N£å$©TíFøöï"@£TãX à O~ø/0g¯rE|ù¯äÀ¤Hú,bÙLø¼©Ùã ûKØ ºûïÂÑ&tÈ °oÒÒLîýÊ8&åæ@ ®þÐRÿ ÊÿoúôàÞõ& `Ê+`¶PL +² ÄK®½=êÐÐãÂ@b(G\ Mý"4Òlý«ü§ +endstream +endobj +269 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +271 0 obj +<< +/Length 3278 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSqE2C;¦Æ"èu9b +FÒa ¨´J¡}U°Ôn]LÁBI@t4D¡ªF¦Baw±¸f8¿ÑÂíÄ3a¤àb7NFB!èa. +¦ZïyÍÁá>O£¯Øñb1ÔÜc:Mæá¤æ 9Lf3)ÌçÍ6:§AÊÝp¹cò"AÜd6døìHɶ0ßVKz˳+Òâ Á°l±8í#Lå5-[Z×¶-jÛ·-Ûþß³JPá* Ñ jÀÒ¬B£(êj²9s é Ë¢\ ¨ÜR¤¹]ÄÉ¢lźÁ �«Âñ¼¯:âë¨&к' Á¸q¹dÅl[øú²l¬ Ä*ÞMPÄÚḨTäÈ*ú\ª¡rpÉ!Cçº.&ADÓDî;ÏÅNS#KÉR2ß)ÒôÈÃV kÞø±ãx@1ÁóÛf>í¸@ù¿®Àà2cHÌ4£#7CklýLìd» ÐG+ �dõϰ£u@7È3 P¥ p[ѳ´[JF«¯#É.ÕA&Éõ4£U½2¬¯,Ð*<2½ªJr â*¢¬)á°jÑE§D¬Rp³Á¢ÐA@9Vb溲÷zöÀ"hª Â0HDÃ«×µÄ ÎË]¢2k⸦âʺ~êHÒ}(xkaP!å®ðZ¶Ë@h¯3îÚyfúS �éh#váÓm1¥pkP\°h~%DwAÑÈÒ"Â6 »Þ(UhǶB*7!û @dãk|<È Ì /£ÃZNk¥êJ®¬ì=Æ*z¶D²ò!pc®kÂó#Ð]Ûzù¸÷{ê÷ÁÆóçÐ`)¢¬*+B%ý<¿3ÍóÍÈÒ7<Þ2£0ØC9â +á@ A +È0ÓÄ $²(nÁÛhÏYÝéOcmD7S1dS<ÀPècF¹J£` »4/íźãéÐì>g)2¨zàÒÖw$Aà¡ôzøTK_~Nh2êºàÓ2 XPo?d$µuO/RÉ1¿%yX!Ì<0èCl 2-ø;6@IØ8'ÏPÌ&ÆâÄ`cëÝ;£ÞRd å $g0ÕX)µ;\ÂÉZ8¼wOë Íb@ð8GÒ®)<K×È +'¶Hs$ Ø5¾däÑ*`b!5¯¸ÔuýYJVçîÖÄ;ÒHÇÌÙfRÁÙûeú߸d áÜ<²KC ;4r¦L¶ÊtÈ=8n¢Dä¹Á¦Rq(×êEUæ´1A`äAküXíùeM ¥5(¢Lý90QÏô7Z² <nF¤Rö &-ýQ§ÿ8"ËÖFÀÜEõ¥ì8²JØ-1#¸r:¯ñü,euù>µ*g¿*?5iÔH³ L¹dÙAGRézuðADö ìpÌSåR¦Á4±Ðm'äTRs82èxo a<IJrZ¶2* !ÔVZ"!y%©×´¼KTEQh ìåéò>¡"Ôh[£òE>'xõà@Ho<I¢q9ÉIÜÿ2¸9ÆúL¥©0tV×$R©N¯.Z½×Úÿ`l ]rU·Xº l]?^Ñ y¤t¤@7Y Ah4LE>\˺±ÍUNzÏy¼:дgùÜw'¥¥1GðÔ@¨l:×FÀÌÛ´ÞÚ¹>´Õ"?Ó®«Ò8n¶Á>- msÊþ#r- +pmJâÃnÃ]%Æ 'Õ9áoAd²eúʼªÈ/z ÂͧdÑñ +EaI` Äû`² È)î¤8CX, ÊãíÝGµÀéwï ç¨o~õ%ZÇ0èÒ«ç·)Ü-HqlH·VÖÛÛ¥z~t(ж;d)jêeÅc½Ö6_]ù²'Ø Ìë¦Ë4ÃB¿¿jñcfÓÏ$Ä ³d9u#¶x:æ?óÆuç\2ÂÈ|°Râa#K^²à<½`n CN¨]é¥dGHº«V+|Ús}rÊõÐ¥±,tQËõe´li¨1Fzà|ר±¶Äô¼¾Bà4'ìe#>ÜÌ¥êOi¾ÔÏéümÓ®6¿M@5Á·¹ ê¦ÙjÆìdP¬é4Ú|é«Ï^Úö½mêFéîd»ïb^0bèMarM³²FÐ;KǪÖÅXòÂÚVîY¸-çüË}oÅÂDTç +©îø@ áU(4ÔãÒôéë¿LÐÉ<ÂQ;¦>ï%Óø-!ë|óLYµÌ~qV+¾8^±©Ç ò(Èê& 8§QTWØýÏòò9H§CkûXÑÊgæÝQ«µ*2Sd3M¶z&þÖ´6g]ac¸m?APucï[D²ñW³IsPibèp(õRëªëåìÝ·«+çNi°{\ò¨îIò~§æ{ TëÕ5yCbÊDì_ØO¼ýêñçùpÆMhn´Rô +gî;âJ³#ðH¨ÊÖ°Ëúâ¬qÅ$îH¢Iêã¸ÓoÒÀÜ´åªÖÿd£ +4óüÐ6f=` +¦;n÷-P:£¨M@¢àN.kÑíðø¯Â +)ÏïBûÃâ£'ú~åL_¥VæÓdYCÚî¤ÐbÞräÜĪúàÈ?@"zF"zààZ©I¬~2-:VÊâü¬§A �Õ£ÈÍãnî*ªs +¯åú%XFö$Ð +àçÔJà® À + ÅËtûð<ÂF`O �<ËXå$£É¦«Â¢#¨UðêVÌ\Ûg¬Dß ÀgãT®-8°°Ç¬qEëÎn¼ø¤4w çvi(B#°o¦cäjÍV3Ƹ-bÚa_:'°b.¨~8 h3ÈLoMÖ5 µëbüð¦$UCÐñ飱RÐ~]nH<w¦.)ñ£<qÔ» ,LG&P-fVeZ.Fm&êL/1fúoëû#'#F(ñÊk(>æ«krPk¦¾l ælgúlÆÐmEA .{(xn¦¡$&Ðð'ä¯ýK¢OãÄÀÈFe×,âÝîØàç,¨vÒ*"FpÂòF¦¤ì(ÇâNàR÷ÏÜÆÎtç8ÉeR,Xg@tDt¢*îpçXe p[D¢vJvÂï';'ò8iÅ0*Ç Â%0GH\yÇ zQæZM²`´F,½.5Æ|§Î}'Ö Ú}à@\@Æ~ÌP¦§ú¦è(-À@:íÆàR2îpR|w% r#hK+ÈQ0G È`mtðâ2«73vñõ$EìæäFòÑSçsÌÜýOH=hèÈðLNþN¤'ÓÒ]âLlÌïä~ùPOêæzÅ´[òðé.ËS9JHLQ~RÌþÔÀèc"YIBnÄÍ ýÈnhXqËÚÌíþ%²ò P0× ©ÜRÀâ´+B÷nÂùkJ·Þ¸E@üÏXõÎ-lJ¤Ï¤·ËuKT~Ð Ö:07>±Y2 +endstream +endobj +272 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +274 0 obj +<< +/Length 3342 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´c$Ѹ¸b4Y (a/É&ÓAÜÒn2ÎâHÄd(8æ3)êr2áAPÐi9ÇSqèi7x5 &#äy¦k=Ô@c0 # ×Âa±ëЦGFcXô¢¶ +¾¹ó~hÌl0ıÚe:NX¼Ñ»2àNû£¦èä)*©»*ÄzVRöâÚøÀaK®×ÆC8\Ü9êîô-&Q ÃâD3A¼ê6äºlâ8ð+Ýéàp:álÏ´#`A°oÃV¶5ê@¡JZoPh 6ÉsÌô @ +Ã(ð: xÞ5£À¸KZìÃÊRP ¼o+άHÍ·A ìÐÚx¾ ò|®·º¬\£)¡Jc#I +äT°½±kʸîKÆ 4,Pôå ád ùB¯«OµOÓøÿ@ÃÏðDíÂã}ì;H,?Èh f ÁjöE-Ä^ÑF1kÇ1Üz¶H´¦J¨nTHò%ê¯%á±·3ªÿÒ³ô¢¥áï©ïb´¦ÉQex«×ïpQ<0ç;Yý*Á¸h¢´¬«ÌV ÑLS:"]6xó,Whî(8£mW^u 8-Õ\ÚÊú®¬½ÉÍ89SÀnE" ¨&/KôÒ×D4àp]i]£f8UªÄtäO|¶öw¶ÊÉ7¸Ø«¶ã:+;0¸czÏ9cp<¾Ø ÈöOz©z% ¼ÕýÚ&b>ëahhÌV|μ5µq~gókp9êÃ.ã,üé#Ð?°îÝÁ# ³Ãxä6/ËY³ÒùÂVïÖv{] ;&c8¡ÕANk òÀUÈYÙå©\ß±Pe¡=áDdã3¬A¡hs'úö·èÒèwK款iNpÊç02ÍÄÒ7Ç7kÀè»ÖCxç.P°è'Ýê}FcÎð2«Ðb˰0ÒãêêoWÖÚõ¹Éb£Ò¯Xd@ïP3·à@°ÅÀ¹V`^9 Áå?ÃLóã¦AÞYAj- 8·¾]Á 'óÞRxX©l?`[Ô#à¡Cô ävÑ +xvc TI©}%ð° Èd!¹Ü0Zdq§2FPËBO£4ªÔ¹#s¼ 7Bà@^u %àÆÆó÷T/0ì)réÚ³$^*a¸×Ósî Ñ7Jåz#k ÜÈzìúÍ.ÕÇPàp£ 3G]6£Ê[oI%IX´(Á8åÌ©3&lÎ rå@á, Ã,»3vÄëáê ÊxÉYÃT¢[AÛo½Ï Ì|jdþ Ø?28äGÜbpð6W" w1üýÐêÞs£ 9¦%T÷P¦* ¢ �º'Nx(cxáåï p®øG¡P&P¦Â :£!±ª@óL @ðºB³GÌ!2 ô´+¤ÑC "44jÒ0Ò¾ßéénÐÕI5eàåZØ2ÀÔ5õôJhS9\³îÕ:8GHðÉR\Ë®Vé)ØDäskKÑõðDÈàðjI¨7S°*eö d-É¥vRA@RáÈ79ÆÚ¡käTB§lá´Î¶ÒÄÅÝcÐÛdËÑ®¶Û"£ tNÂXf·$ägÏùÇg·m +{.VF·Ù5af¬ºé½ �%EV¡]VG-p3¶9 åm¤F$:Þ®xEíý-³änÍß*е¡a/6IÔÞ»0BS> ½¶~öºõÅ´ñ<®ß`dÁù¸¹ P[l2WؼS£më ¹À¸^ݾ鴼"ÕF*4FÖ Ò§ç=tT|É ½JùkýU7VòáRI åBÀà«0qåaÔàdé0MÊ!(ÜVuçstìYò9½Í´\ðA5g Hzó"<-z°Í³Äµ¬C,¶$µI«b PâoÍ/`±î<À¸ü&B6K¦@&*|Ç a ÂX ÎH*ÈÐÆÚ¼7Ç R!6³3fÐÚ[Q0zð£[ÑögHÞÍ'«pöÄGµæÌܧtðD:!9à䱯§Õ+§êÆWÕþ<˱²'NÉd&Ìe>í9Íâ¶-ÔUwYz.E%z+Ó(½=AA �ô¾°ÛÈfj±ÎØhCyÂA¼<'ènùß=õ¡'3«Qfä8#<c¨?hI4?Å7f!49b§V+Öyëy1BËù«gÛ©C'ÝàBS²c*;bT_868¹l"avÎ7 +en2åV6îNSmUÈhR+½k '4碣j5Hz\ý(Póõ÷x¿AfÑ¡H07 Äy¢-Oy)ĪÁÓóyÌy:ï+|©9l#ðuàOá' ³ (áè.[_FnÚ7 ätrýgîï8ÆÇO`K$*æÌïJ®®RòÄNÂê¼ *)Â6;¯>±/Bú/Äl¯ª§¦:AÀdP `Ê.v2ÄO$xª.qæü¨êéêè �k"¯&OsN2"\)è$Q¯J®÷îÒbfjèï*ODøOÈl>.c't j²/XòO æMçØå0 RP¨èV«Ïá'.ÿÅÔsÉ,´°n&íNVK²eÂÀ,EµË¼{/÷Å&ïѾ<"T$\FdÉEQ ÇR*¦Ö®É.en,1(¾ddÀáR\bÍän*,¬åî(ò"ÂV¯ãO*<«²Xàöæ¨$zÃöc@èA¥Z fk¥|]¬nF^s:cð ¥Ê&&ÀÃÇ8ð0ý êáq+ ºNJg"^?WÐóy¦iÉ<jG9qo¦lÍeØWÏànl¯ÀGR®@jLÖg8õðoFø¸{ñƶ§¦Îi q§Ñ,óLN\«;osqB¬m°þ ñnüLæØÉ·= é^¥ÂØwîD/ |é>4 ÊF,òãÉ{£0J)ÉFðr'Ù) Oî¦H lÍq pbrc.¤7©°BÎ )º )¿Ne4§¶ï)ú'ÀÊ + Òè'ê¡c@¡¨d¢ /Ä*ÎaÂ4¥Ê,£8¿åª +<@îÖ4?NP?j`¦@̦ðQªnঠ¦ú` + +J¨ªJÈWп5øþfú(2¥L¥´ª.ªjªï*°«>Æ &ªñêäL¿, ʬ®¯Ë ±ÖßEgj½¥-¥êܬÀܬ6)LÈÀlî¾ÝëZ)Ë^¶+f¶òu-öÀë|!êZ+DS.ë¬SjÖàÐ9+¯= 6*ÒJk¶å±%@Rwçµ[t: Ü«ÅÂùcv(!-nÌý¥ºCÊ5bô ãâBÌc(*|iJ²(R£1¸%µCkÀG;Ʋ³ÄÒ,ÜËÜ!$È®n¾pÄÓ¿+ö¿§À2òG>ì|Õsô_Ü*bEQ¸Â/{IÙIT<t<¢ÄÍ-2ÝÍ8Å3àD¬X ì\ÆdÆ@Ç>ÌvßÅN`Ìsÿ¥Û 1 l§: +ú-S§2BR¬øB +endstream +endobj +275 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +277 0 obj +<< +/Length 3075 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$; +A28N Æäq¨xÊ:Tá¤Ên(¥çt±ÀPS<ɧ39@R1B ÞcШ¢,2áqÜ\5F#1 QápÐU¹ÐgÑÚ9]Bá¥^³[Ñ×J0TâÂ.ØñvkA¸Þp9NwbGHÎE¢ZT{L5 j}b )AA0¤E)I AL&$2XÑj¶Wrà Òn:fó!Ì6#8X +â)"h@;ä0°APÙÁãh¸aH¨53ÒΣm@§D#L+¡³¤Ü!²´®6M£lapdÝk02cä4 Ò7Î"ö8ìÚ9h¬ ç0î$h`&- +@ÊCÑ +#.LδìbN"&ãÞµ¯ÆúÃs$>ãMQj+³{®Ø;JôfÕK©³jèÜ1ÈÒ@@á?CØ6£ @1! 4°Þ3Ócxñ¬aP6È1×!@Å[Wj»'aÂåd§Ö x7³%] çiXã0Ê:s5`5mi×uí%:ì0n13p)µC+ah¤QIÀÄ:¿#ü7²4õA^uðÏ1Ú¶½ü2Á ÇK Â1aGÒ8n/¯àÒ3S£zvÙanYlWXzï^æ._ÚöÍf· +àI9øótB£+7Eà8 N/Òxm?1ÔCH6âs =ÌóK¥G!l´¥åBF²ûöþ¿ðË>l`TrûN×z]éj¯áÐt!mµXÒþ¿8Ó `Sè<Þ3& `XË>0¿-Óíó6ÊûÖöd1â#&'ÏL.c4Á°g´]ÚMãA».Úi¦yUR¸mª;rCw%ÊjøðßKã¿HÔ°ë [þÁºcw]lfÕ-P²õ&b8/KÎ'â,'l@qe ·6k¾îûSÕõجըxñË+øÃd¬&5üé 1°×jÒúxî:wR²Æ`Ò +Ò6÷H[{|Dáò>`¾B(N +«$²ÀCÊÃAÊh0å4ÉC¨sLpûµWø³Ö Sn7+H<ÁX¯5oeíÂuÙ +]Â[wM %ò +KÈTD6=8£½C.Ã-u0ÁX=éÂô§Ô£:QÊA#°Õïb Xï%g?g1 Ðxnq©@اVt ìÖB.F?CD Í56í¢Âó|@ !±CÀt ¼7°À)OI&'Ó8aÀ5&* ¤VòßÀSMÀÈH"Ûc¯&bÌw ô;fbN"0buÊn2SJU+%t°mëKVêa 49pdjÚ&8cÑíµÕA&A +n¦Ò©x¡ñÜAúi¦tÑÊðmýCÔàÕT!MíBeÞíåLa 7Pئò¡[jzIÃ#ÑÄ}.¶³²Nã^ ²n}&²7BÓà )}»éʨ9G'h¦J Éõwîý$è_Ëü¼û¼ %4©ú"3H0q:ér[¦ ~Ó:-!«´N£±¨lDkÐ9U!ÜrÕ?'ìüU òkUgaÈ6¹ÈûJ0-PwÑhQ; t¹ie|'õH$z³ +ê<3³=#ê¡£z. ʸ¢2á'ø2Ü-j!¹µÄÃybaLûº°^¦¥5DeYì;*ÚIÓiNÈúN9eOê ¬ iY5¥-P5©(ÔQÊ?S-z¼yJ«ºðgÑríðayV÷Âm <_¶Öà<Öà}ÔÌódðXî¨(X +<)@¦¨j{[±äß4A<jìþQàË}ñ÷ -P±á0ÌTÂØÂtnÑüD +ÂrTÅ´Úî¥#FKFëûfÁ@t~+ ݬp5¨-êêTU0ä©V81ùc´æ Ô¬2ÈxæÍ1u.µìíú >ÓUkLbief32²ÓTS È6N^}å¸ £Ôvø4ñ\$ð¦B-Á$ñP¥0ølxMǹqVýX@£"_ÍOQúM]Èpry1¦9m ÷8Ùñ5Læ2!Mm sîhsr¶WËÍt@QwN·P +%çYÏÒJ++´LÃ$²¡Á¤+æÜ±9¢ +Ûç9ÎdÖsvqÍ0IT/r6EÑÈ%³º_´Êe²- ?Ö?©ý6ÓñNÒÆèl´ÿzkmîs·z¸ ¦@aø7Øè|æ|eLliXÒÄ" S¯'|$&Ú¸ryÑ á·^g-ê¢õܯK¬\·Zü\7ØC²Í4;@Òr ¼Ñ²5åsm(³n áq¡Èùæ ñ°7AÌJ{¬èmþüö¾vvUãsäÏVVÐÙÝhôkÎiË~éfÅC#tr QáfgÍÝÂup¬1ÔnCØnÉJ{§òÊìÞ<ÖQÊU/)åN»2Å¿VnÁ¶ó»Zë}sæµíÎÙMÔ§ö²GäIC¹%¦ÛÓ²¹, éð$ioÂ`°`@ÁJÊ í]ö4=èd÷á¿àç2ûZLèÀ¥Úcæ!FPËâÐ;WC3ýêcVu{éî¥{òYíq¿8>%Övêë$¤"î¸! +à À + + àf´D6CªR±È®/y°0' ïï>¤'<AJé¯V¦ÏÒEÖÚB0G£>ònè oèdvÛÄ|HHBêí +¸:NÂ¥ê¦Môñ"#²¸ï(;hú|à¦ê½AͧiÒ +ÌßdØæð Q/RÐÓ)Èl ÌDi°IØoF*è¾ÕZí<SGZ.¥T £îsógªjª¿*®È´hl|ÕðÄ/ãW æòðÎKKÏDÈ,rmTþÊÅNÇ^`5ª,|KâKàÏE,TïSÀÂHÞü)¨øxÄÆä©áæâC"[C"Ón2Ç6?% âziRgHÌ>qHìÊT±ê\lÉàèÂÑçÈæ¤£ÄÁ¥'ÀØ2-<STy'8ú¡KüR`èZñÂðqÈ?e?%(·£"Yìñ T/k|ÌuÌæ¥Q FÆ$b (a毰³D¤LcöRr$DrUqèV (kF éqí¼½®Å Æ7ÊöZƱ&6 'ìÏÎõÙðèÃv#\öÎFè&Û¢àÛíÂÎu +þñnµ LjLÄM´Ç½Ì§% 8Ê8ÇÓ`ˬ¦péqQäTB%&Q·2N"`2jo +e µ2¸ÿTê0ÞJ2Kó*çZrÈT*í63g-2ý ýDLýº/Á ²þbn¢¦ê³p Ы0P0p²{NªàìrvìÏ®B +endstream +endobj +278 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +280 0 obj +<< +/Length 2481 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C ¼i¨S)¬<k$ÑARL +S©åI *r1FƳÊ`Ì`(!ç3´¤e3[)ÈÊn1Nb +F¦BapÐTZ%PÇ$"ëM]¯ØF +MPD2§C)èo6ÁH°@F4mF«Y®#èöÒqÚeÛ +E%CUHÅÒä8¢¨3#Ãa¸â¹%cg9Ù X¶ÑLÏètz]9´Shn#qA²x3ÌFfDÒ7l"¨«£xl좨a ¡ò3H"ã9 +P© +{©± +¨«$°lÁ0ìʳA¬Z¶Bx¦<Ãxà9, +ã$KÈÄl&ÊÁ¢¶+ɪÊ<!@* âh@+"p( !üõ·mT¯,èÔ !Ûâ¬êÂ" ï3¨$,KRä½08Øý? �A*1*ª ʸ@,Ô Ì¬NëÄò2ÂÜôcä4 Ò7ÐH®KëÉ.¼K£Ar²ì, x`,Ш4¡Þã122R´¥=PÏcjÕ¸T{ZÃѰf1öͤ-ó¼ Â~0¶VTÃÙµ´X0Q;ÜnýÌPT#úõPö»YeÛtë!Â{ <¼A �u`9 ËUøÜ:¥/Ã2ú¿°! #0Ò2 ß@ìþ£+] ×=EW¶ïN¬ôÔ÷[U¦ g¡ Ã|%Òt·d ÓNã¡>1äìå¡KèÞ×dVHæ:UcpÏ¿nøèÞ;gä6è9PÞ9/Ùµ`26<^é#Dj>ÇÒÊÔÓÐk&ØÐi®ÝU gS!Bî:£Ý!@x-[¢õÊ/]ªè]ØJ VÍâ ±¼)ÍÁY8+W÷ù#GÞî< +ä×g<¯´1âÛþ9£ºbcfÜ$æ`dp¶SÍûüÿN0ý@a/Ïèø1GØûs~-Mý¿ Ð ~wú?wó �mDÙ=4ðØÔTXmt Ó<5&ê!Su¤´R ¹U!vÇp ++rïYe¸ÕÁWD<ʶTXëÝT@ '+ +ÓGtð½ÂøféÐEëª$h)m-åĹRî^O1{o/¾ 5RðÒDJxñ0§¤ã¬e^i_Fx Cf¢Ã¥C¦0çEØht`hÚ1»&! +KÕ<eiû %°$KØ,=äü#r}e"þÂQiK!ÍD@¤FPh dBI +=ä.@R0ò,¥ººëD`a'F(¢díJÒ7<Èä#´zÒuÎ<Xe#éÚA3VATªÓê]KéØJiC +aP) �dõ¤Oõ?'õ � Í+èp&¼<+`ÉSó@ªUZ{#è9£ÜèL¦ÒIرó×YP±«H Û:xtI2gÃFÀÀ-а¡z]õÒÔU©2a²Ê",¦ )@nTi%ÀÄ¥ 4Ä£è{`9XÃCA !Éï3f6«fÑÐ'ÿ6Á@frðÜÁ{!@í1³wW,b <Î*¼óp.[ä"4µÄ}hÓtµ o[ëTOOÍ?0âceÉòGÉóz7ø$øäXRºg)ZD¦I!#B »8Í&ÊÛ·`ÍÜ»·Á$䦿JsRÜa² ¯_kÃÛbïz ·òÞ.K)¹%¹W>SU³0^¢GuäKs¡5ɶOúl«S§¶¶Þ¸4ÛxAà£ÖAd d5Ï7Üï®wUÕÝu5|o 'í°iâ rW¡á+iË{)ɶÅȤ¾â¨nøÊêR¬¢ú5ÇNÊãÕ3KKr. ؼ¢ùL¦ÁÈ{#¤¨øF)#Ë»)}ÈZ&pMrÕ©¦Ý@£ÚoMùÁÊÚFtHð2DÙ8í%§VZ4ïØøé)ÝÈN%¼ß÷rÔ³èt¡äðxýÃfn |»@è²2-mN¡ªaÈT2Ìt4¢ÖUDÔ,MrÚ¡\ÚJmF©ºò@È<^¼ÝN)Mª®ÅQ[¦ØRèT¡ý0écw {M |×O÷?gøsA:kùû*[Ó{0Òàhâp ÉÌ'V¸vâOÓÍ@¨:!¹³ù¾Ý4/v ÝF7ó޻ݿoǾøÞþà ·A©,iv-Ø!2MìwËFÈ̽U*ÇÓM/SÅD!äÂR)üS¨Uw5ÔjÁX°Sâ£th,2ðÊÝaªÇz¬®0g[á#«k¹àÇl4KÌ¹Éæz²Îo8Nª¬C¹XáU3K»Êë#^_ñ,4i¤G,-Ñ»3WçMv �§&³¦ �V%ÏØÇD`uB·î-¿²°ágÙ-!Ð@y±4ôÓ³àRO)>ëÓÞB9°êÓ¨ÿobûlÝ9lß%q«þ²N]!='õÓØÀØpu ¡Û`V~i2 -åtZß0zÈ(õÞÁ¿ÀÒCO»gÍUN!àl;o¨NªþN@ßþhNVÂ6-,$®.ÆOOnN$4äºIÆl¬Æ®RSKn2äÇn`¶ËTëÌwͦª,ÚËÚAB,¶èFFÅæâÀkðgУøüÄüüÀòýþözöoj°p÷G"÷¯èN$p@íê¶ äßúúJm0ÖB +endstream +endobj +281 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +284 0 obj +<< +/Length 2311 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=#J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR̦âd\4ÒÆcAär7b +FÒ! ¨´J}UF°Ôn\(PN7¢áIPÕE#Qáwº6ÎÔê£pØr2 ©ØõKWYFâá¤b3 +wÌZR2#AAäe7Ì·;®b Íâè¯O´ û1wY_Åc ÈA:Í¥ÁApR,¦Ã)ÐËèõ{=ß1¤Üó½#h(a)xn--,-0da93a.xn--3jh23jf-gpa07b40x ÉT5-ZºðØ»«Hd HÜ4ÀÚ. ¨0O¢è¡ *HxnìÍ@p¸@«èCÁR3K8¦)ÈA& +¢¬G-H1!£^±¬¡À\¶ÍÀP)#pÞ8cK.ëË¢¾:Òp@ÀFîĨ²¬îô.1k! âx +âH HAD4W¯cü:ú£pè9 .[ÜÀÒK¡40mK)Já¨r¶¾×OÐä¼L-Ëä9tàà: ,^» ÓtÀNS£¡¼¼°óÛhP* (AP®îzô¥"b*Lûh¼tdK � j¤÷ +½?+á`ï&ÐÚ|!@Ì:¹5ã#k¬¡Cý #Ø4N^¥« `Þ1áØÀà Ú18Á l¡VØ,áGzÜPÐQKdc-3¹vÅQ¯a«RÛ÷°PÊ] PZ^:T~!Â{<¬v¥¬28#ê6RN#fµ½Y.¢MRv ¿fTã!cGàµèÜ~%3RðPɹ÷=sÙe®á8àØút]F)ÒuÁ@ê9ÚÝ/Ïc]WOðG¨ ú*H×½ÈÖW~§@Þ;£³øDÇ5ì4î>þ8~9rã¼H4{ÁX4áã¦:'n ßø§ØwsïéØj äÙk½pJAê3@Ý#sÁ ¹ãü®C(aM!¸3»·^µ^ +xÑ~ôµ{édPõfdY«&oÏ©B6Hù[?ZÁ `äØ9Fk)('%NhÊp5mÄAW,àhÛÍd; ¸¦Øp uA¹5¬ñÓX§Y:0@ WÚvUç ?-6.qâSÙU¬áB R +¡Â3¬Òo*(õz¶¼¹sQ@ÝwEâ¼ÚéH ñ§8Fjèc9FõÇ Ûðr|ÎÑê)HÑ¢ Á&0FT°ù(* ÁY©f$%ÈZA·- ¸¸(2ÕÚ2Ä/ñqc УÊK!q# d¥B¬¨JØ1«Z;³-%µüM¢µ7Fðßê!Æ9N_ÇæÕ"ñtDr-Zle<¨ âzK*Æ%<¾ÒÕa¬"ÀΨt=!º£"Ar7ÀÉD(¾¤ZB©â¤¥*¡ìÕ*IFk0rWåÜVôÁ.SdLÉ¡5NÙN¢sØv´üeÁ½î �¥£hÈÀÂpD¢w¨¦ �rQ0i~Y¼µC)V[µrUÛ¨ÑbxÔ©ç1A#égÆVäµÛ *M3uWg5fÑ7 ìÌWhÆÎÈ>xÐyùÊ7É#³t,7³cêúC">Íñõ3ûLÁÃSa¾K9¬®;s×%M �³¶{v)'¡æñ/÷b.Ó± !Û ¨Kíª?pÛía?ì`20Ö5Co˹ÛfËÝ> KqMç?ZÕõ©¨ê°ª»^q< âÙ7Õ~ð<ïAF¡4É«%`Ô¼Û(` ø0Óêqð8÷rۤ˲øi« ÌV<vâ¶j#~ÁðLÛìaí2ÆÚ`KúøØ+2AÝ\(@p-B$ß&ÒÚɦ!pvÝ +¸ÒØ#dÀ µÛÛd¡À£»®}Ñ·rßKlèL£C"wÊX*åìlt)X"ãg{pí4qö0f ¯ë¡´ÝÎÔnÜ_ÐæÔYòfUÂNqÃ(-¸/ãNÚpS¤SeòÏ<éeÄ´Cµ8!n6«]²¡«ëQmRoµÓgßW´µ¶îÐÿ³]lh_ÁP!ÂX ÆÆô0ÀypÃ:gïUÜu¦:¦ÎVW®Û¬ÛqÀRP"yõUwXÄã0ìzviE|ÓÙL¬c¦y®ÏpS=^Pþ{¯¨bZÍúA.T»-åÇ&Þ-¸Á¤ªò½ñÌyäV¦ ºìBf²SYÌÕYJÿO(lá°7Ó~pNÅ8ç%ª´;5°O\é;hTÌÉF;&°¤oèoÚ¨øçµ.mt;_Ê£gò@0å øn¾ÑíÝá/Âî×â·#TÐPD#Ò%¡}@ÛèG]D;ooî;V£:AHºVG¡ *GF| +=txÒJSásxØ¿8ªgM<Ö`OÅc»$^ÎÕTꯡî +÷¹¿Xke¬êP7Òä>Ýi ×ðîÛ\Û D +endstream +endobj +285 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +287 0 obj +<< +/Length 3110 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9ìC)å6Ô("Nf3¤àt4ÍÂ% +FR¡ ¨´J£ HEÃ*Þ§^°X (*¢IPÕG#Sa0¼8q%Ù9&X(!æf²Éy!NKÑpP\çs÷ü8Åh: ·$0¥Y²CjTÞÏ?3MÆ;Åè@cÙÎbÖlå¶¼[á¸@f9Í¢ò},øNCq@9£hÞ;.LàZACÀ2¶p4 £äñAÐKàùB¡@Â70ÈÞ:3Cø¢¹¡Ä´¨08\ +ST°¥áZé%áÃZë;n7½Obôñ/t@ÍïÈà!lÓ8Ï4 ¦q\Z¨{²,Á@Ð" ;Ð8ªX%ðD©+&mZ.' øR $0£(è2Lä1¯C à ¼r@4Cc ØÍã0AA6ãØ7ïPÞ<;óìþ7H4=/[v½DkôÅaÌR§EsV(-s%)Í|7¿RC2ÍËëüãHØp¡Nc^760`×\ Ó(º %F¼ë',äá9<ó¬ï<Ïtý@QrP"<U6ôGóÚã@Òð?ð`Ê4ÀÁ°'$T("FÁºegÆ,¬³[Én ]ÌJpr°Òªk,Â0Ò9c¥À4sȺ3R=XÚ´-û]!RxäsN¡U^ Â`ÃãvR 2HÌÏ¥Á¨ Úu¯9ÛSÃÆÏt´=A4¡Üw-ÂÍØ¾2þ?Ãfv:?÷D{OÒ %Vu¬4¼n˶î½ÃÊþ¼oªúæèUT¡y'¬:C.! ¢ø¦""bXA:cÂ3³mæ·²Ç{=×nØcjMx© +&õ +¬+ ´!@¥;£ÓÙ8ëÄulJºÄ¡ìgeÞzJýWÂsËÒIÿM©ÝJ£Ö|=r®:pe²*s6+iߨ@9>8ÇeÞcóÌSÒ*Ê×ÚàÓI¯{A¸2½Æù¥|¯Á7^ìA¨7+®²îË5~ÀØ*^f- Ð'îËûa-ç¼Ó `xRàg7- ß �¼¢ ÑX39nU¾ó^âSqÎ@%ºX¬3ÍLÇ)â°r á«`æóªümE6P iQÊB#4Ã,a$°Z A@d'@4ÀfPco`)ÆB°Gp4XB �Bh Lqª>rª[¶F¥,G QÁ@S!¸7 �fPò]êáxH +á9rHhý $æø$ A Á"¨9ÆPÜ0á0(9Ð �â<Ú'x¢£ÝJ Ñ ³@\ Õü\5á&p xC(ÆpÚ¹´.¢ª «SA® +nÈyÁ"äi·@rrNiÑ:§dîm)øíXxi?Àª}OÀÛ?¤Ek4PZBN$$±)ªö(¥£jQêAsJFÁ¬º2Px×;·Õ0s.¥Ü¼¹6ò_ìÌ"°è 7¤DQJ*²â¸Ä#£5ÔÅÇFPOÔ)®æ «ÄÈrWÖBÎ*bÅäÍ{µá^)£jKi+X7#¹]ZzBJáVìÓb;KÀ0¹0Þ*r FÎ%$±n̬$OhsªÈ¶4|Ý ¶ÜÝÕR]A³³Ô[¹ß¥ÑBì»ä¤C;èmÈ{Þ/½Ô.N7 zI>8DÜe2R2´©*JÖ_¡õqÁä+¤Èý²ó*,-+Rs3&¨à÷ܶén-"õR4D`Ñ£¹×a +CêT;ZPH2\]&þQùà(ÜÈp>!Ú¡`øô +_jÖÄ ò(e²ªñ(°öDªñ?öé6°²xI7¢,ÉÌ#!àÜÇ^m£íÊßfÿåÖg6+Qgâ¡='ùNEßDïQçùËÌ8 ÀÒ×pxbC¹|4FÐJ Ð9dl¾´Ì:àf4HË#9w³ZÍ#(}Qgî©Îi´"ËpbÁ±·yý¦-¡pÔgÑDA·ýj©U¬:N×Ó0ég¶ÚrñÙÄLÉÚN¡>êSÔî} d×I ØÅù è®KÊÖ׳t«hj´ÌÕ±Aò·4ÞI*"`W¢Ê¶/°{ÛOMrñ6(<ÚÞóF·w+û �£+ W«C¯ 8?0èxε)j§'0¿[BXDæþð\snQË9¡°¹ù/0÷è[ã¤ï§Gàý,ÿ&¡%ð@ùÕñnn{ E*jÚ_2éEĶu*«¡¼1õ|ÌG¯¥'JlqöÈnÎX6Ý~éå¡";ªÂÁ¹M$«Ã£E}X9³À¥CXe£¾38O˼$g93ÕÕoâRÎ5nu×2õþ V<õYW"»ÊXGBè¾zý÷\)ϸcQÁ³)znXeÈå\wtß¼Jq@EâÚ&(°c½ï%ÀÆðYûyyþ'C *)«ì_LAà +h + à +@c òÉ.äé.æôØëº#bbªfjç¤N±n\ ÈríTà¦îlÄ ÌЧ2IP:éÌ $ª ç&ìHQdxÌOLØFì̾PÂì¾íD¤2ÿl03FVìf2௠éH íHºÎ àÕ¤$mG6Å +]bï)b¤§`$¶È¨¼Çz~xkÖxÀæ-ä¯GÊú#h1gØÒ`êh`r£² Ä»F¸ÆË^1½®ÎÉ'4PO>NãüúE&I �C«Ô½@ Àª (!b¨¨¬¢0+gzÇo Px9ì «FGü¯q1b bÄ.|2èªÀtðè|~Àb«,n=D@çâ ÞèR hZ@ +{Íá±"èl¯¨!(4`ö£\LÒ,ÝK$R Ú i¤«÷ àÏ!e³!ª6ÁcâÄß"¾õïbö`Æöªz²æB#X@Pª$ªÄ¥Úåc0g°nð_ð � +бQºa¥*IHJ&f-&évfNZ/i2 D É*f4 x +ÞCE²j!ɾÝrÃ+òÛ! 'É$ÔRº Ý,à>«ºG$èei:I>Ïè~HÜÌ` Êl<ç½ÅÇÅTØ©z:ò EiIÉ$jó ! DÅ^°RdG +X¸r$NjéÒiÚ @@@ì +ð@æJßÊ|V +ª¡rªJ¤ê$. +*¢ê2º»#Éæ + +@ ©ó5àګ纤rM%ÓãZ2óW5©Å;Ò¦V¦Óf§3l§olåºkê¨@@IöÚ*W2þ +endstream +endobj +288 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +290 0 obj +<< +/Length 3644 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢<4N¥BT # C ÑØ\1B £zxÒbT"M&`¡A ®N" sqd2 !0P)Èb!°ÎP9Ìv²a@R DÂäa6#±IPÕF#Gi0ÐPÆ60 Dâyiu 3´¥np1igyaÀPD2Ìg#IÀèi7 4:,H å"Ñ( § aaÈÎ9¬Ôj +½lPT4DÜ- äÁ#cÌOYÔËñäe0¤CIØ7®ì3.SÈÈ9 +P"ì%®ÛL»A¸f ¦ÀRp++Æâ2;&Ir.÷Â/d³ðý?ô �3=Pc ø®ÔTÖ¦éðÌ:ÑÛ7aw¼C +vhÞ2£cs*ëþ3oóþ;#pÏKióf³ü:®¥A¢ ¡ +b¨¡oú%ªj:É£ ÞOà0cÊ2u2ð®4 ¯¸A6Óo®&âH$«H& â;ƦNlÆ0ã(]Ïo2A6(ìP®EÏË÷O@1¬zÀî4ÊAÌeÉPEÃ0Ûþ0¨ÃNÆC<ôâ ¡£TÚªHÚ ¤ÐÑ[â°½ ÐÚ8 p@3/#l87C ̦ éØnX|¶î9õ-GL#Å_Ýq ôAyÈñMf>ötc3ÆDo2ÇQäjGö´ÊHitn^ÍUðÖ\)ô¯gJ£¥92Ý88D �(lÐYd!«[º,1_Øÿf# óSáÔ¼9!uªÐA¸q}PÏ»<ªDYDÏ寷};ÃDn9íG¿¸ùúë*o +Â(bìwåAWOÐåÔß§`r¤àÊ£ÆÍºm9Øñ²Ä4C««Ä7ôºsÅ/¬Å+f-üÝTÝ=~$Ù- ÉjÚÊ`ë´&¿CÞÑogÝ9«òº lÛt*µÏ¼ì64é´~ýNhjj>¤7àÒ×äxĤCiLÈñ5J}Ãpt ¬2Ë2o8!µ0êÃB\Äíù©Ê¿Øð ¥&ª_!@z«Ð¥¶á±¦i/éÀ[¾XÀ2t²[ÉÄ"Ç«g¥è9G,²ÒIòeèU}4ÆABF¡Ñ4 +huqy::èUD:v9Û»ïCýxaÜ4õ,ÆËL}Ʋ( +ëãBTU/:ã¨J +òzÍå 4R\ W,~ª}²Â|BÔãp()Hw/ÈlÌ=H>ÙÓáz dÉ>±IÑhÄEÂÒé!Û&`¸§ +öÃ3FniÊ¥ +\,Q;qL!gÔ¢ÄfvÅøu5S n²âI4ß%X#'°`Ù[!² oü½ÁUlqǨøÈYoÑ,#I¶ÑÜ¿,éÊò}!QeÈàe,&{qv8<èzô +u&+.`3% ÷º9ìéX± +E33² öÁLÑÅ* �bê«BBn ã]:³²e$·2åòY¶%Ø>Û¿<²KX»cp¦ð%LÁÀPÄ_ÛñKXȽ �Ä£[¡uªÂô6ãK·ÙróÖ!Nνså;ÁAc,¥7ÐmDÖz#-·6fÙÞH@heÒ4ëkõf_3ç3`$ô¢oÝddJ@¥[iae áܱFçvïTäZµràK7ãÀL)ä HÕAT%ZWdza¤Ô>hBVÝØW©wTG»DÙ ;»Ù´ÚºUÚA°7k*NئçmÝ3KSoNzÐéh*D©º¿ +añMyù?!Ö¯Rþ¶õ1ojÄk+!eTG±KÚRjA1¶TíP<I´3U �Ã$W~LµZ/Jô±³H¦ÈGAeÌ¢íÃS¦D¨;úæÅÎ.ÛÊhPàrA¤:và -ËaÐ'`Ø*hª<Øb«Éæ°§8²¥²ÎÁÐJ¿S;øîo+x¾¨KÖoØíJhdé5ñôý¼DÓ[½C'¡{ײ9u4BÄÖ=ìæÄòÏWj~¥C&µåëÉ:«÷!U*Å\¬"²VÙ])Ux¯eqò³.g@Õmd(³²go9¯6 ÌÙ +\T©R²Wsfq! + NÞå4Æ¢¢ÎóTáMy5F¥Rxl';ÛgW ½L"à&ÛqÁeäìÛ^ Mý%3ÙPïì<ç7ÇXðg<ãïR÷U7Ûðòõ£kÑ£}*×ÀvÚÕÈ3Ú¤¯8( ÁV·)ù°Ç9»Îæ ¡Ô#صí´(4Ú«Pä^CsÛ¯CoÓ¹71VOÀÐì2ç² >Ó½ t-Á±6A×é `MÓMa®Á^¦m´v`·l¼ÒMËÞýmbuÒ+¸å! ý×Ê«Uª½X«5jZïФî²óoGÕ íoA!ô2HÖ1¥Ì é×Mo®¶ü$o &sR7H)!ê¤ÉxHõ\ê5D û@Ì +!2°õvãÜ:7r»?o»ûr¿=áOïà )Üåìñ£Çn.ìkFòëü{*p- øD \ +`¨ `,G((ûÀ¤!jYÂÖ+ÂÀ,K(-/-Âà.BØ.Ì<c1zn6ãg¯ �Ùð -°& Qð@, ÑbÔZ£¬ò©&î¯8+Ú-ââ.`OR1mõÌè3ïÔÝ$4îðéîöããd)`6Ãp7Cx7Ħÿdÿ®¾:"¦²öÐЦö+ÀÂí&2¢8ª7 +MÀðõDÄB\õ0ÝÂ\»*"w+Çç%ÇÒ£ +GÆ|â¨m00'<ßËpNDÆ È?ÎHtÈlÒoÍ"Ã**>¯kpç³ð,É&"¥»ÌPª«Bth¹c~ÀÒ7*zAzÕ©³©HäèÎM¤Úìj.LÊ +?Ltâ+Á1 +B6[L ê±>tèT踮¸ç¸k*tk¸j¤bÀÐbÄó Æ²÷°ÉíIp¶½BõÐK#Ïl¨ê¨EÈ6J¨à§qÈ® ·lTÅ\ÎÍTgÂ2bÌ`ÏlzX14AIÎÏhîD¤æPk#æ=ÍF®:ÉqXJoA"EOÑ% +!É-#Éxk Ðsª´â0¢ÉÑÎøë*lÀÇFÁÄEtºÄбÊÏp;crÒJÌOÃBÔQ~¾5(àñw)-<e1M:»j\Òª8&ØtEB¬t"ÇË1r»0-NÓªî¾â Kù32 �$§F¶7J¼·NwKtÏ ÚÏó·Gô«hmÊ mstTº¬ Òé%Çí©ÀNSjFNR°eÅà¼ÊÙ1Êä\,Ä&PjâBENl|ãã2Î@ t¥6µrÈf° +î¸`§Á=*5Ë6iåú}Ƕyý&0ù"§8jþìÈæJÇ^/,âJ~Î'}4 +ÃTæ³c5²¢Ê³$®ò6²BÖ �ËI �ÞèPÈHÓ,zJ\Ùã0Ú0ÖÔ¦Úí²àM¸Ò-¼ò Á/$! pûonÊÊMd°ÔPa M BV¹bÒYÅ1IfZ«·< ðäØiÅQCàðJÒgJrnÑE~ +ãÃ;)öÓ±u2ÉxÑ'G4vZztãfqTCs:a +¨´reI Èz!ââl Al-SQ +#jH#¼Û(, ùB(ïª h $ ¥"uÍzyö̤î<S·HþÍÌÔKôÐN&í +ÎÎM$èÞr|ÑuÄÁµÉ&ìa ÝDÒbBv � êQ"K6+ ëLîªêê ëTØëÜëÏ! �µÃ¬ý¶ýí¤:Îý Ãj{OðÊðË·^èñsÃö6ñïÿ@@Ù®êì±ä;Ñ>Gr{ŦøiÆwjºõ6¦tyjå?T¸@ïA±Dú +endstream +endobj +291 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +293 0 obj +<< +/Length 4043 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQNË¥BT C $N'L FbáÄxn1£ÅI0(a/fráÂ7NF#1¤ò1àÌPa6]Eó9 +x4½ &éàÔPdÂ.Û±ÈÊc:# ÞÜ(9M¹1 Y\ïWÕòü-ÀÏ,¥ß3¡ÑADX(j2 #ã1¸»oQµµøF:fA Tb5" \%ûªt$cÓ¨Ã÷ãqâ;%² 7EI¥¤QkmÖ¼©Lòn7f§cÌRzhP@þ?êËt ê ®&¯*P´1CpèÐ+ÃLÕ0c ÒÇ2Â×@$¨  æ:#pÆ2 +âp ã¸Ü2Lø¨5 h$k®" #!´#`Î(CxÇ)"h@6CPàR 2ZÆ# )ʲºÈ³,`T®púÕN,Ô;Ä1KÅ#tWÅó@¡ +H\sDZø ÈcD#É-·.ËóÇ2Ìó¬IÓÔ¤J°©,N_@<ÌÓ5ͳ}6\æ9ÊS¢ë£üéY®Ë|Á6ª¼ +ó¦ñ¼«RØOXfÊ(æ1CHà: #{û ¢3òç¡ÈúÞÐ ÀÝ© §l«ë*e^ÐB Ð2=â¸!7£¢Z)Eq»´ +åW ÑAE ×Þá nÿVë q ÈAMàaÒÜ-r¶%,иÍÁ д0Èã&<äe2µWÒʤÁIxs¦ÉÂ~3±uÙwaÐ2Ó¡ �F^7HݺcHõÝ·z;ʦY!Â×i&¯«ZÄ8h£,|9È^ÎØZA¶!ge6ÒË[<¡E#IÅÃ.: +r¿½*Qª£(^Zò-$o# Ë #0Ó¸î¸FÎ2£f1ÝÑfõ½áÊKÙ{Q·êãGQä}̽aF >Ü=¥ö-ÀldùßM^u5$uÿî p4!!Å'årÅ¡.-îé;Ó4ïÃyl/\43xfzÎl7¿¸"ÜÚ} H»>¶dû£aÀÈë@jG³qΤ"&$Èë Iн¨'ø¶[w`Ø! Û!2àæØ`ÌIml`¾6ãTØÀlA1·Úlh2#nÎwâÓúÜ<'ɪÀÊósÍ%°çDx«,°Í,§XqS,Å6;sÂXÉæUËÄÂ×sÕÅà:°ê_l/¤3ðäÐÛÂf/¤:ù2õâùÌ«(@nL¡bÐÕUÃ:È_ò°#òXºuÀHDeÁÂ7GؼØ6¤)û5%¢ãÉx6d;°vðâÌonMÑ»<cÂû!P4é4`b +á4/¢ #Iè¥!SL ¸Jøzýãâg¬ia¡Ö?-ÚS dÌê0cZ q¯8c*_{ = åHYdÁR|κ;°Ó:°n¢)2iÂ|Zé ÏT8öõ#C¡ æ&)è ÔÞ^0ëÂÅ9)3Så³¥·_Ö¥JuôQ Vt'4#TK8¨ÏЪ1í4y � +ø9iðÆ)ê:HZ ¹ºA +eÍJ³2¬±ZP*®îÆS'KM+íQ#Âiñ?ÔZaª]§'öøÙÃyeñ2'Z¦VØqBÎtÓÐAÁ éÔ8¥WÞa|q7ð[ì¨JFvN Ú÷LìQºÞ".cT ´VK4¶(M +0 Þ&A!WúÎ]PC©±ÅÍ.fGl3`6f«:w$t°§°]éå¥Ç)ЮÞ$¡â4[.Y#¯àð¹*5)[¹¯^äEgÂÌY<åïóàÌpt¿s]è¦PØêìÇò£àxA¼ÔVBÃ>½æØy eðUÎû5¶»WtHÀ9dÊlq@ÉF3@Wm ªÅ¿EâìD·î}´tÎ)ë1~¢HG]3%uÀ·Ø3\EÄ)9lwm¡EaÈ "̹Î*õ¬UÍìç.·6êÞIk£abÚÃóÀkÏI7çÇ2æ´ÿÈ´è8Sºé#Õɹ>·å,>è(0Ê×8D0²õÌ'Ò¯^õXÍõjhn*º ³oF2¢³mBFæ\0À£J7Rvü+7Ùnùï]Ǻ$[¾¡ÇøaXF©MãVjë«Fòû_oT46ìØõÇÎÌ£a®ÎmðnÓ{µðvÞxsHQ6v7mÏ?o¨¥Æ¸äaÓgés Oö;õ¤ùÂoÐC¦ÑÌHÍ& +(rL¡ËL]í4²´áþÓÈP¼¢áó Ë»>ÑþRô'Q:ÝOCÂFÜv[z<óðj¸® ñ<éPÌ[Hxh¿²Êü»Jø"ú|ÝÉÂÞÒ·#UQPôÍ¡W?P47~¿'L¡ëð£dGØ^|7·|¸I;]mgë¡:wIã<Â?Nt@ê¤Uñlt^ðøB×áî Ì9Ãè=Jbü>,d˰b/åïÕÒhA ¹¹ïÓKýL´¬WC£9 9eâîå;ªï.¨7âF!ïBo¼¦,ñ �>MØÀê\óòÓ¥òóüÖéÔP¨åTýoÎQe@EöÄÄRÅ0MãäD4n¤c x ¦E ØLà@ +¤@ + è ÒEN:"efV®ÆBðzýÀÚmïW Ì @M0f kàÑp¹ÃU JIE^V,ØVúçh~ а ÀÓ +îÎï0ï þPî´CÌûåÁÅÊ\åÒ]g°îÎ?p>íPBíÄð �ªÚ¥²ü°V®ÎYMÂÑMÈôbÉ̺ä ÔoÀ¬Ç Þ ÂØX§íí|n˶oKª § �°OñNK1Rø,òã®ek,Û'PK ÑéhÖ£ð'dèòA$²³.ä ÞF¢Ë(&º¸G¤RMº+)TÇÙ"¢ÎfÚ¬+R0'4ozi1!K!¯!L|°©0nl +0 ÒÉ,sq ѤäHäÆ ÐÆ§\Úir + çS �xê°("Å ¨'¨lG£$r²Îq¼¶'¬ÎLE©õ,$bâª}bBÀæSó+1 Ñ£`Ür åÍÚmâͩʳ ê8-Ð×é6ØR°¸Ïàçò¶oS.ÒT°@É1`Q-£x²ß0ÍEàå!m.Ñn3ŠΣó¿&ì³À@@TÀÊ 'l2TÇïäµ§\µ¨G^f-zóHEjA'ÑøtÍLkNY!§Õ!ã;0§ª3Q7®È ÌܶClàí+2\y2ªsh%æµ,fLjr¾3fƳô¬fÐp£mhªGÝ9Wjj-î �©ÈK G@óírÉqtPPw¯ë(ê^ô +K)mê¯ê5)è#$SåE²M§xeØxÇ"³Èüìê´ÃRþq¹7ã 8# ÒK·´7RvÍ" B/BÆâÌÎ,S(gxæbõ£!ô0}4aÇh *Äopp �íªtY:T]!±"Æ}FQÇðwFÔ·G(5*ðèr´AÌ|Ý¢±JrÍÆ&éÓ; Ñ7 +Ä;N(lKFFbůK5f4( `´3LÝçiCÍ´K1 °ÊcqDÑsV¨Þæ]N´ï;ó0c:µ; �ær&3 S3°»R!YÒ`3,; æä§ �Þå®^é¤h¼ªb6ê¯JL±A|¢ÑX£BF ¾ +@ +à¤àF(³%ÈZåÒ¹³?\æêàäeõq±±4c;Nh´3§ë·]É.Ã:åѸn¹X³'â8¾MÐ` à ³4Õ%s°Â¶!6e[UÍ:VE"~'ÖJ'öPs6l ¾Cöl vxQhëLµ +i`Qi¤ÞüèÞN áAI[B´wj ¾ +`²DKÓ:SËXÓ&$VG5Ë7`w`6¤ùÖ`©Z ³läVl4¼¥Ò\×nDÖd> +ÄOo&^NM>ÌË\ÖÕA6d2·n6rÀ§q@éq Ó& ª +`rÓf ÓkK �0Vb@jÄÃÍ[ió:N;YÄgÂï%càºÆÕb·uIµoÃT7TWoåÍv]v¶ + +` +mö`ñ8ÈÔ �øîÜ!´Câ¾×)¦Tê 6]¥lÍ;³I!l,hµS¥{IG". ô°¤Ê Χ6 àGuÀä@Nl8OÀ@)*§2îwÀÀ³ü7úòëOu²P@¦x`ÉØ^0:tO¨·§R`A,é;SéMíøS?çx7Ôa[FqTç:þà +endstream +endobj +294 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +296 0 obj +<< +/Length 3126 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$G +A£xØa#ÅäĨD(a.Ò&À©Á$Ì F!¤äe1 ç#Içhµ +6ñÈd2, Ê 6NgAÞxaL¶á¸Âm»_ov4äa1̧CDæu1/·qlï2Îç2è\ ³C¶-»Þð÷ì +ä)¡Q+ +]LqH¬rÊÙ=PtÃb1XÌvC%ßæxB)¸Æl7ð"æ{A¢Ò_MØ#Aäá7iD}N¬@Ö £ZÚ ÁH¨5%Nhnh[¢¯«J²º +Ì ¢2¡hhªbÁé`Î"-Âc¶!ãk!1âàP.0º#(ðê¡%+!¢:¦éðR 0êóHÞÎ!4bï* ¦:C|´¼JÏl¸0§a¬ÊËhÂôó Pî {°ö Ã2æ62¦Oó@[57Krà¹CËn$±SØÀ ÒÇ7°sHP7¹ +° Ál 9¡"Al ÄÀS¯@ñÜ6¤CÈØh¢%L)õLQE\ÅÆÑÄuǪH¥Ôõj«¦¢ët¡) ÌÊ<c(àÆ;ëØÆc@Ì»;ÅÐ8Í,3/hÂKÑÞÆ±á?rL(ÂÎÝ÷;¸ÇÀµl2Ö%8ª'á4ò9Á²¤¤b¢J¯%Á¤éÉ!gdiÚÂ!@¤Ñ£óL¹H5_H´¢@nH@lYÊH¥Tø¬'Åqk·`Ç8XÖ@aeDÍsUOaåÈV¢åêÞ_EñgÆáJÑ¥Gd<á¨s¯è¹ã¦S~2²Z=³@;Mã¨ÊÈ+=Ê<³L;ùlc66â}ð×½L{ePAÀL80` !(ÞaÁÆ arH¸ÚºcÖ@icÙ(9L#çGv.ßõSáÀ\a=¦0nõP)½wÒØÝ:' õXnq×Hø¼ z=¸QÜÈàfµs"äã6DÊä"eëå=ð@ò»>¨01WÔÝÐP=!Ð&`æC8eiD)PÉ\M¥¬g¸¬IM°4E_IYmͪ*rÄÇTó"E ±+Ø:9hø2Äâj\JX7£@ñ {^¬xæò[È fD=¶ÜÁ¨tîµPf rFgïMö*pÃò-aL<àÞ--ÀUkÄW|¥0©ÀåM°B á<&[¡úFÁ +à@w>mÈÀ  R1 �:DäpÖAH1R%%$²¼CÄÎ$ÜòQ¢©K)åL«r¶WË&4MF ¦\6ÈOÌj1°$fzô`{}°á(ô°c.mjH6Û!^Dø1)Âô:DèTÃÂX¬Xz j'I¡Ì å&KH¯,rÂh[AU(@bÆN±h9*¹3R©!²ºô>bDvÍ6¦D$mQðhB¨Z·zØ-"âµ»yoiá=$øê]q ê\@"¾Sj¡Tk1RªyÖôßBÏDéØÕ.VÖèÐÕ%XÎÆ-ÚsF +JÆu²Rd¯PQÚÔY òûjôW$=Iì*¡ÒÒlËje\)¤YHMÒ´;:?OR}?JaÌÛÐJD¦¬m~g½¹Ð¸{0ê}|³úQ mJaªÉV"ÄOªCLÔÞpá+ê"{O³ÖÆÒD§A£s¬GA©=T L,:Mªeôí.èW´ª²¸PyÀQ(WÙÌÀÈÑ(~v Ø+Jï-Éj~ßgÌÅP_)rð@ÂgÚlUtóæl¥¤É(TÞÓl¸«©U¥Ô±'i02ÕÀb²¨4*mQ]G¦ÓèÙ.d8¸bè`om¿Îk9`Ñ8l¹;ß¶ìP] +¥Ä>KxN/ù4n9`\~SPp8ó9t'oñL×ùqJ¡3eLűpÄXáõ¢*Òu )Þ·\tïA¸(Dï@ç|'S9ë=µ¹UÇÎÎÎf,¬h>õÑ»²wqÍo¤È2L~iÒ'i¥_£/°- å2¶Â©¹8 ¬yåJ+¯*÷vWòôjÔµ²£Hì»czR×D¥mãSHGLWÎ}½@Æú]¨µÐiRa°Á¯:ÝA¬q*D~ôÙØö ²x¶Ð[jÉNEù·wòà-E¬¶ÒÜ {=Ü,oqnMF¹u*í¦ô)Ò';[Â7Ú'^&9:/s¾Vë|Ø:`ÜÑ_¡Úõ«ØªµÒõõ¬;·w³É&þêì§ðV±Ë ssài5µá×H¸ê¾uö¥çv®UìeÄño-ÆÖì@Äañ«.¡b:NQaTã|l5¹æoß_/öù2VNÞSñZOò LñÂt5*ª7'klõ§ê¹ª©^ñ²ûÏï]>V-iþX«NËk~g Ìxì^õm},©üËyjv¶Z£8¶úÍ1»øÒm¡©%+T'=*B¨E= ÇÁg&å\¹pæIÆ{àÝÕJø7#]cI·^\®0A L"öXMÙçi3_8c;ïaÎ쥻ÐPïÞzµñãyõà$I8whzǰûɾCîÐV¨Öíb0#å:viÒ¦¨îgâý§æê= æ �h"ïÿ@lðªN¯Fm(²fÊ^K,XI¼å +NabFd#tYJ ,.è H¨íÏôº'djÂÇ8(ÆHÊ`oÀuoÄuiÈhàP~Jxc¤0$húéþO(a)3.xn--fl-koan"$v t̼0@ð)< D½éO ÆN4àØn°{ÐíF! p+ç ÿÐÉïÔ*IÝ )àiä )èJiíìïðI¸ Òk²òæ¦Bpú½ðNZþ*%Àn² X+(VÉäÖúOã àÈRN$èóÅ&£Ô.íÎïoBñed¢ñlõY 0fi+fò¢·OB¹Å¢÷E¨_C@ÊO[ æùÄ +¹§`S rÙ-$â¥pðä(¼6õæjÞÍëd&½Ëàæ`üÎXç"ZÄî2·¯pçÌÀÀ¾Êñ¸;,6 îÂ#æÂn¢ÑªØL<ÌÆ'ÈÎCdÀ àòÇ> tÂ3Ò +Ëb6.Þ£%pó%Uì±Ú©ï"hâQÙ%U#XlÌg¦$&+¦ÉkxK²>ÖJÜpØpÍÊ1£ùÊ¢»otÇu"²vÃÎÈÆ`iÈVµÍ«ªlVíÉy"ÅT72ÚX¾&¦ÈU1Ë&õÒïÉ|¿ CÖP,C# &$ÔÎ¥ DRn*:*l'Ña! tÂ8bK8ßÈ.Òj ®6e²X¤ÕS{1D kÑá#:`Ð ò«k®(ëK¬Òã3^ri«¹3r,,Nkl|Ç(#\c/ÓÅ:î¦Ls¦WÑLfhÿ|úDÏNWG® DzXh¢ +endstream +endobj +297 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +299 0 obj +<< +/Length 2358 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àP1ãÊhÌb("FóÌSD£AHÒJT4Tp ¸ePÔëÖÀaJ ãy¸Ê. Tr5&~©*8¡VVaÈÈ\6¨WåÚ-Fshµ m s9Å¥#)Ø4NFSqËv¼g)°ü:»Qõð¸}XÞÔ2l¬6\Òa6Ìä#yà¸(. +E'<és<Í&ã!¼î÷¾,Ë6½3ÊX¤"¡\#Í6Ø$j³-ÂØ-èHRä3ÐõCæ2£pÒ:: +*" `R°*°l×B +ªÐ¡,HCÁR3+@§4NÂ&4êºIAÃbÆ)ð¸ÛaÀ\·az)#pÞ8cLb¼ Ë㪿ºðSíÇ0B8ðËs ®'B @#±+Îô½qTYFxì7##âÀRK©4Òu2Ô5J´Õ<Lhi-Kðe0·¯¨æ1CHà: ,ªï/Núë"󴻨o/,[fǼE CDôLWÅã �ÔÝ!ì| «"¹c ê9 Ã@ýË Ú0Ö¨Au@Êvû7 �9 Á Â6ЮV h©¼ªATܤªµ %B±¼(\Ì+{o\[9i¯ÌtΨiJЫÆ*25ÂËa@©wí¾7³Ð:ÝóP@0 Z1Eï¤ÿ@é:]ß}ÞöýáÛwÍ#ÕÞ7Û9á/æ"2^ׯÃEø.wHÎ4!)äBoÉþ©ØQ´p¡l]³Uf¼¢|T¾)VÊÂç)²Í¥ gÅëKö»ÐÑ 8¥Å±áãHð2ÝÓ^¼F ;9UÆôn6HAº¶ôûè[¿ð!qqdý@P\ç=ÐëÃw +0±¶&xèEËoì]NÖw`ôÛuí:к #Ó+ö7¿}à3Õ,Ð:PSP N ÃÉÖ4Eï´2ZÜQh-åĹW®´Ò¸0'e+ G`KÝOfHÊgúØÌ RMdfÑtºjUA¾8âgrQÌ9̺@d`ÙàÔ§dð°á2¦]Ø2Ö¹¥Aà@bµR¹³`ærÊjÆ Ý7`ggÜ6Ñ¡Fê3s¾G¢ad{½¢TöBð¬©BÓRI 05ÇrÇÈz`)&DÌqÑ©¾#ÁÂÍRé\Gª bµê±ãrØ÷®hçò9 ؤâªJ) +H +ÔadIæKhl¯!ʪU¹t½iDb¼¥0$î4n `LOG±æCiÀ¥Åfæ«@¡£2Ùäã$ìoéD/§î\Ýú +Dæ+ ÏÃÔòjëp!Éä»`ÜWy ÁöÃüû{|3YZ=¡9[á Ð4Ðsð|UVɼzJ°(Rò:8Wý(Ð1 ¨~Ý[D¤§õâVbïïͰeÓ oyK¾z`É ßúoG¢FSÌÌ:32vR +[Gb#'bSQp³ª KiaÔ1Ä0ç;aóq«wÙã[jÊï¢Á/J �2·CiË¥! 4R`ï\Wð2§÷¼ÏJ|çhæu.*gg±i +ÐÌ\×ñi* +®»*·Ø#~-3ÚÂî(¢H8ÖêA'¼NsVÏð'\UxþVƸÁ¶ú(áf¸F§j`×I#F¶/"X²Â8ËØê|Uf®²e{ÙÝÈ4Lü³Ìë+l ÒIÎbSÂíð½&¸0n·\70ÄW©ûsFàBå1$lÆcàÈÄøÍã,c¶ "é`ËÜÙ°ÒÂAâ1 |aW>BX©Qò2ÉÓ%Hò1zÍ~NTJgÃ6oMøo8'âs¼â°-Í»w0KÄÇ\h£²,V QeX¸BA½=Ú6¥ÆI.Yäh-è~6PS,q`á6ÇkÊ_½1È4 !REHè×4±´1RlÇ95ç$³d_2y3¦±Ó¹°ò/o¥d Ú\(5,uXm²Þ\˰É,O®µËðR¥3FÈìs$ì>ÜàÓ5lOÓéÏj¾éh,³av\f¨u^iÀa}VÛw¨Ð£¨Tò ±æK +}³ø/úhLA|aÉij]>¡l¯·µqÙUûýBÉé?¶ôAq´'Î]ê£àùàg=(íÚ íÖ¸`ÇH¿ýĸ°¨O#`hëà²üMÍÅîMʬ:ö*ç8j+ èPy>¦4«Oêb¶¶«®eÔùýlí¥ÖZ>Fº=èüÉÃU*ÕgS`®«ö + Öõ7], �&òÄHðþ3{¬m©Ùi¨lóC_ú«æ4Ï,h,=÷ª«G%+5Þv29,cÙ\¹hß¾ÜâÑ>)ÏÏ´vûóÉÙ©µ~78¯ô>à(çnÆ´¼¢x Q-ý �Å[ú4lñQ³tûvoû6ÒÖÑî]Îøê.¥Ç¶{¢¼[o$Z(òB +endstream +endobj +300 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 114 0 R +>> +>> +endobj +303 0 obj +<< +/Length 3339 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR̦âÒ¾3ÒÆcAHÊt:Ç1M +#HéÐTZ%O¿Gª£XDj7®AµñÂ3¯K6f +rbÔÆc2Îfc©°YÍ f(ÒgCI¼Ý®÷ãTeÍ&ã!¼î 4xο1¿ÎS¤Ìi2=Y³µÂâqùØãsåöÇC¼Ø. êõ»×oº¸\®iP¶6 +@±©¨È$é°C+Ú:ÁAÏhäñ³ëæ" Ô¢Ê:¾**jĪª)Á°p¯ëÈ©¬£ ,ªøh´²k`9BÏÚ/Q/è¬ÁÌ @Á¬+¬c±Absl2ÃôA) TS¡*dT«Iá£ÄJª¬qÌaP!½Z·ËHhAÃ+dЮ²ñ"Ì, +'%"á¼×'at©Jó³-˰úñ0D¤tF!Ä6@s,JÊDÒ)a@ô Ø3# Ê6³AP$ãN)õõaXd*î" `PdÑÒxc«&1arÝ 0T Rú#LS4É1ª@k Ãxà9µ´wÑ2]>ÀÑÕ=Ã(Ó|«V!pPP*"p¨öm`Øv ¸ ¸"9»g4îéÖö´Á 'â`@ C9 24ùþBÒ3Îȸpí4¿×ÈpÊ@pXì7.Õ^äöUeÙѤ!dçÕ4ùD¢°Â6£. hZ§ª¾³/SxIyS÷¤V§¶ÝÍMªmý8à!é;Æ9 #hÛaÔ?#¢øÉ×h$I%(ÒÁ@¨48Ô@¥õs!©â¦ÃV˶Mgå6NW«÷ÝRö0aÿã&FUl¨§Nû·oÐ@èfÃ(϶ÿÀº# ÞÝ;NÏÞ|ã(ñ¹ÌËü±þZ@ õ7sÜ|º¤<¦©.zïlACofjü̸¢ã³ZOã¼àCa ¥½=Z æäÅ® bB1áÜ*øzà Ã5§@ðSrNYÍ9ïâ¦éOý:öãNÈp !¿ÀòÙ=4·ðÞÚo þA«Ý»Éwnöh¼Ø9[ðJ c ++v¡²©¨>ð]2¥ÂWsaT,PºC(hÐ 4Ç G÷ÄT&ôèFHÌÁlTgáAC®û"øGº,gå-A@bw¯üéÌÌÌÆØB x2TÅ®FI¨û 1si-.B°øÍ{ÑJ½ `£a!yE d¾Énap3le5.I1 ÀRå°0nÇKb ç¸2¡5 +sw°áÆH¸mth áÝÞô/Aç<'Ô¶SP±¨KðáÖxvOè`´ó~æ²uB#9P ÁT&È®|u6ORcôêB¢ëùT¦ö<ÂP¢@~mÌ3?0ÚÒ±ðFc¼bWÁ²ªqÜG÷Õ)E\//yXaXÉ<Þ*ïÇ$iFàÑWx èÈ5'Ì2´ªBph æí@ÄNìe²n^Tg0 2&ª@ï9]IþRfɶ`Å4a!¸ ÓÛOÎ}¯¾%MRñÓ +ÒI ÜÈÕ)'P[%m06¶·¡aÔI¯Z±æªvboj.6o;Î¥¥õ%2ïæBð?Ä<"Éì×lë9\W +½¶ð<Áª»|W§áMFPø9øþû<fbÀw-%¼ç6èNî>ËiÌéÜBWþÄÃD£lÊ#ÆûLäip@"Z@Ì[hb&Ô_áö×îp0mFÐZÕ00+aäY`Å[¶á<;{ ¬Api¸«úÕr`÷Ý+TÃ"gü 'Ç*ÆÌhíxS1XvmÈsÃfOAeIø·Þì>¦°¦r ã[ +1d±m¿¾{¤t`m -$9Eê]$NÕÎØÌU WfLËJùR +â {Uï¸òµÀø^Wó<´Ø¨Íèl*õ6Õjä<À_9͹ ƹ´ßm¦j$p)>áÓ_µÑðh©Í'Aаùúé¿çvͼSͱÞåìA +Ë´\züdYÜFº^ÎEbç®ZÎtÝöPÜø°wÆó.Ej)ñ> µù¬OxQBß_ômjÚà)Ùª\ià®¶â n,ï5ö>¿ Òý32kµ6δ^à£[F,3jÆÀ3ÈUÍ+W-ð¹òFæ°®í1tÓcS\mj öÂìØ[gÃq°7*ÅÒÏr58m·[fÝ[¯t zdrꪫ§ é©¢¥ßjò©ù +¾à¢õ¶x)áÅðªæ;wÜlLnEy/[Í?Úús Ó%+6Z!k-¯¹ÀÍ:¼Quê<F2í«$rÕºsÇ÷·4³Ë½·µ\ë ù+yÉñjá0§?~è8«û;NÐbçC çjY³Ô#M¢4¾\Y©xV®6TÐÀô^%¿4A ÏzSméÏɽµÁ¿¸5Îò×õ¦;ËVj +í[:GPëy#o¯¼íìÏèðn¡¶].xðÎr¨ìMh¨0Òî̽Îо:Ó ôÜØ,t.,úÇÈû#Zûndlñ¢8ÉþùÎê Ö}$.¤cZî´~¢òkÀ«ÄtE= �¬®É¢i +öÖ f#pFØ6ã 4ïÎhJ9gÜtÂCäOäPNY.>ü«¤ êh¿®4>*hÙpÂ-ìü´ bJB3)îÃÍð¸PAhµnrAðÐcÎløB4cJû«Î·Òò'rÈO(ëÇ@,Èpì4Ó0Ói¬^Ú{(0¨*ôÃþ`Þfëd+î«Ç *êrb0c ï°ïÆ2N|ª(a)xn--1-zfa2f.b'ZñEQé#iò´j±PD1T*Eç¤Ðbv¥öMÑj`6§>Näòdö¤ú´E ñKÔS¤PT1!$Xv 'ºÅ*ÂÊsÇþV¥nW+$W0Xj +ôY@@ì«!²u%°Û¸! �,\N¬N]*]®âVE ¼Å¾èG+ѬRÅ`&-FaaxzObQF- ²dUðMNfÆIe!ÇöefZeæb`Îf¦è,Ð4à + +¤@æR" À ðqG¢ûËÐÃÊlÍ) ɲ¢åæë* A*ò³+f+Ò,Èë ãÎéÎì)ÂJMÓ_òRQ¶t ætgJ|qÌx1Ð(Qê¾r\1¼Héj¼èoBw0¸ázN«î`eªëÍUéÊøýX ì\À¯êÉ~ÓÀØèÒ +RåÏ9p9QFà;±©x +Â3º²Mä_ hÊp +ÉC®mÔÉ 2í<§¸UpDl0æ¿-êËNjãÍ;Ë®#8Ó SÁN°ÚS 9cÌ¥jZ:£¡¨£.îøc r)Ëîßdó°æ2ÞÐl¿%\ të |AÏÜÚäËçèDXÜÄ* 5©æÖT4ùé¼mÕ?/ìõ4XiXY/Ú(÷®®¢ AEi] éç .`MFÜòßY)FÎéÔp» �´\aÑ85´ÛMíÛjH¿£´¤ÕÊØ!ìzÛ,RÉ5¬ÅJàÒ§Ýn6î.B +endstream +endobj +304 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +306 0 obj +<< +/Length 3233 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÆ6I£qpÄi2*%à bh + Q +WÅ3)Ðl3NSiPÊx:ÁMÑ#RaváµÄs$]ÆñÒ7NDc©¸Æt4ÍÂôæ :Xös ÞfD=QÐäo6 :½Ôðb2 &a¼Ïe¦òFóÇC(7ÏâjÆäMÆýåÖäÍaÐ(;ðÌó¸»ßb² +hl ®É \(ó2 ¨½ ¸Ü2/ã;´²JX Á°p®ªÌ¥+ìÜ&ÉÂ~ñÒ´¿Ëj#hÒ¸@ªS4ª) # Þ·î&ÈB«r6T¼G\¨DJÐ Â9#júó5áK¯+¬èÊ75Ø ídÞCÊ9 S79ò´±-0c^ᬯÜX¶@ d ÁcIkÌv#¯°Â0ÌCÆHjCÿ*a.ÐB½'©$¦>ÏÂʳÏôºÜC!DÇK �kJ²5TITíe+Ë2Û»TAhiVÁºd¦ª¡Äl´Cy2.^ÝN.ó47! �`[<®ÂÁ½Ã|á¹öéj×dÔ² Ã(îÙ± ³pòµÊ1#0Ò2½×tWô\·®<¢kZ^Ϩ}BCT$4«kbªÕ`fã!b +Kèê9 ÃTþRØZ,.¹@Ьõͤxä®SëM\E´ +àY0ë5X büÀQì+iI±¶&c@Ó4ÞÄDÒ4ÍCTMæWÞvðê6O5ôÝO.7cxá½Ã¤Ó~0wËÀC¨Ì3<϶þ± 2ë£i<OxÄ¡@ËÈ;ü[Ä<½óæ4µ·'?X¡Â ¡dk_%ìæ« ê8[æ@B̨bUýDpÏAqØÜ&.q" `kcëkÆ;X3ÈXÛ<ãÓÍ4à;NÀÓµ-XÍjJõµþ¾ÄÕì»;_é7îqƼÍûÎ7cWïHaoD¿Ö`nAQ¾ÓV-Nз4ròTQ`/<À6¤¤[U1í]Úc0¯ûâ{ ù¦õ¼y#*euÕÇZ +hÌ5V$Ã@d(bâï 3?cÎõ*28É0(©´7§¦^ Ð +fÌAÎëT³äDZ`N5AA0 +´/ ¬FC,IªqY»Â¾È: é$Ķk¹ ÔªÇo +âN,izÅÒÓ ,b1¡< Utk +å4HQ¢kÀ «23¢uÚpN6D#ðêO ðp + r^dà°A,e +P0ÌW.åè-óÐR b0:HbÉJ! ¸`TA1ºÆF'£Z¡U6H#?+Ueì<5fâd-ÒÈ ÅTiJR+RÂ@W ÁcÙdb%¤¶ DÅQ&jB/>QJB\<!ð + ¸;ÀvÈúbÑPéEà`T!{Ié ¨è:&ÔÇJÁ-¥ôÆZj +i¼)q&NÈdÅÁ 7PáÆäM+T,û¼1 ÒW,ÊDDÆmAÁWPÉPØxºS''àÖS¯R]:ï¯Åê¾NQÌ9ÍÕ2$@ÏYê8F¼2¹ÂÆyÓâü~U92Ê4ÛìÍ]© �©Ê4YÎêH´ÉFµ î¾¢©Hñ"T7.¿R®gÑ4Ä'¤üì3¸wM6¬à&¥Î{ÜIï8®-w Zº³ÏoöÁ8ç1m #Å.6åÁPjÅQ! ¿zv¢QÃA3iBU#·¾~`·UjµÜ¡æ~ZeH0$¬eXdò3Y«=å\ÐdWn¿Në +Ê.õ¬ÚO>ÂÈmÛM©²gLê®å༬{®b26\¯®í°'gUaQ ¹ +TáéMOTñzä(@qB`CËX àó?Xâ²V]ºÃ<°clN¿1Ió^íÅâæßh²¥»³å5RÂÁ¬ÃäË ÍI8<ÖÜ|Jf0iìÕÙ" àiMÏa±¯ÃZìÐf¦åúÒâÒ]5»ÁÀ¶+É$D ñ 9aÕÎT<Üç%=3óìWÛà3.ZÎôÞyå°¶!´iðå¨b(wJ繿ê#ÎßÝ»G¼3ÚvÿuAÅ×~ÎTëÞ[ÎÞ×µÃ8½ ¤çè£ÃkxOn¯ 7ìÆæ6uA1½¤vÖm!ÂêàtyTéþ¡úgT« ¤ó¯z^=8êà ÔÃ¥<<mÛºN¾0äKKr¤xnæ,5ëð+ 0¾ÂO +¡@Ö@ó³¯.uøáºÓ^iMAÁ_°0®¬Jd¹Ãn¢oSÆm[vÇËóþÐú/GL/á óìz½Ý¼&ës^`õyËqç}@T ýuv®$A¤Áv2ÕòI«ëÏõ|Êâ×YKfe¹ÐP"]d9¯ �cfû`Ús`dÍØÂÇG¡°ømÃ5ùÏv$éS~½«u¸óÞ®³~)¼9LéN0Óûâ¸>ITlM¥Ó£×ïÇÔnM[íÔoÂÑ¿J´Âü\.ñ± ¨¥#òpö|HÉâîó¯B(¯DC<¯6J) x («iÞñÞñÂ0Âà¡ÊêЩöÀÞô¨ø)¨ü<ÄÆióªæÿÏ@ °g"0*)FâÐoéÖBâ#ÅC,P0FÀSIx`9kT ¯ ÎsïøÂ)ìFLé¾.XC(Bä# ñ&ïÕ/Ø)Ã*ò(t¬Ïè#`b`¦¦ìsoöfRBÏþ®ð!%H¬i¤¦ © ¦à@@à æêm¯Ð«Ê$våX°g p#`dJØÊà{*ä¹ò Ðö*Å2þ<Á+âPBªì·°p²@Ïàç&¨Â*Ày0¶+ D+ Vû&Â`ÈXEÊ^°êÎå~âby#¾¸è Ë0/«>å§"åµ³cLÇîÔqß Ú ñ®ÅÈðÓ1¦#¨üRt!â¬Ì.·¤rÑ@pÑr9Dà\ãÔÇ8ù �.rq,ê¾ ÖE\pþ`PÂD%F7ÉP&¥n8J¬¶ÄfÌÆÐægd:ìÒÅoböm,ÿ / U ÀðpÇ@¯ +ÄúÄ(¼ÁO" *qGq+ñP%#d`t¤h/¦Õ®.)Í'F[rxZí å´mÆô[±4hÂ6@ 9"¤/Q òÂBÌô.ñ P)ÇyeÔ@ê4æV,xìr °{ëÂÙìoãÆ@Ú9ؽçáëÚÝCVoé!Gn.,°Õ,Æâæk¤wq£nÍ~çj¶ 7ïAí"\îÆ»åù6ÑÐmL*òúÒkNªå¾åêAëÚáEøä ü, |cX =©³,4tíW-JþÞ³Lm,%æ'9¢j/P"àè=QÈ#0bÜ*¥Ü/Q¨ûe¹"Ä?m18ó1Î pÈÑ<ýTþ&þhàHïîeDe±Z°W + ûôÈÚNØ<󳣯î9M$`7´>5à +tfïkG>% +@ +endstream +endobj +307 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +309 0 obj +<< +/Length 2274 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Äh4 'tÁÄPE9ç#¦E¤th*-¨_ãÕa¬"5We£ &f +æã(¸RT5QÔ]ö¥N¨DóõJ°â6 Ãj~*¿SÖãçk@ÖÖ1;Ìæ-)LÖ± Êr2f[ß5LçaÑW©aDa¸Ü\2ë¤øñAÒs8N3A7s0Ì¥ÁApSÌÞs PÆF´IÚï»k;VÖ«Ë üÿHæ" Û3§aP!'a¨P:§ièè:2q+v·CDT2c\^2.Ê"" `Pdè@l5AÂ:· �*ª»¶ËO`±M -»r +cÈÜ7ϯ2öé/μªÁG®Ì|ÿ-/0¨' +-âë²bÑ c(Èú ¸"@î7@X #péP&:.Ccì¿¢þ4m¬©Ë *!²ËÊsb²,Á«¿37B#1CHà: 1K¼Îoã;ºóË´áÄÈÄÏâ£+(Zm0 ÐóL(3®UÉÝ0 È28ÛP¹<;Ñã¥9@1Qq@Üu=SOc«ÙxGÆ8Þ<zv 6CÉfàx+'OÝe!IÈ]tÙè3 ¾ £TÈJ¨"1p]MSE[hUëè["Ì%2 +Nx¯ÌPhðÜiÃÓ·£}MD0Ô8Õ_Ã.¸;Ô# Þ;Ó# 86lÃxÌl¡F0xÏcÐ[cÛú}«¹5ÑNmxÎçºëÕ@Þ6e³ ,Áþ éðP`ÛÈ%Ëèy?¨ã¹s)w-@ 5.Çô+ÖÉ¢ OÌê)tq,®0ë7®=gèíPf¬ZXc¦óë\zíO° Øë»ï#8[ÆÕ5' +4ÃN·¹n~ F`ñF³#«ñ³1Wt«XË-0@vlX4,Nur,\Ó1n8!Ð:'ªä#¤ZfjB A`$D å̺bîY¬ä@ÈÄCÑÇ êžfLÁ×BkTl©©%>dÛ3àT +±E"!» +!ÔGn±ó°eÒòèá è@e¡Ì:¦Í!| +4×ÇdpdTEP¾VÌ;!*H¹ùtNͨ4µ³ õÊÔõ>ïΧBå£Í2 `1(¼ã|§©6çÖÄäDy~Ñû®þJx4#IuÀjBFà·ä] rLëu¬BVjpr2Õ j5%S-èÞó|pÄ8Ç åÉì v:NdjÜyÓ^M¢7ºKm9è32ýhS@M!Àó7ôpCtà#°\g0;Ô¡"<%*K>m¿T®ýæúZxæ©p«ÒÏE1VL³ 3¦ÖS{1:}LÓ ?_éÞ*³@`ÞëA£¦z@¢S NÈE>(CP ¨8UõVìRK¦òÙZK°LåKð1`d±*ÇY+.Ïu¢_f` O@+£@¯\Ú\Ñ~FG·HjqvôQ7G^ÍnNÆÃC½J»;¤¶Ñ2jïa !r7cØo@vpÝ!XsYäÛÀÝo-²lÁf'ùÙ²FÕMXy+% oV>sJ,ÛP 3gx¹ðak i8רõ|®Qݼ§uPUå¼äáö¦ØØÁ@h-Á®>L×\{-p11p@ _¥°æÈÃt^b7©³> ÅC,U¶Ø9/WãsÁ¹#ÆÞ4ç%Ëv7=XrÅU×sÕµR++RÏáª<¶I9¨ÎN/MëxVÒ.¶$*º¢8÷ÈÝéÈòÎEuS«^dS®pRcxR;ªà¢´V¥Óí( +±ÏëFgsJKUp90èMÐ¥îT* ½àwA C~T8iÈ¡K&Û6Xc 0¨=ºovößÁT,ÔÍ&1^-ò\ ÍkÑ_ºÛßco Áø´;æ°¨¾Í:ÕÞ'¢Ô{éeúºÙÉXN§ÜfÒz-zá½/nY`úq@àCÀe ÌûPc77+Þ®³-§ÿ^v:ZTH½$±Í¹³*|u©?Ñ^KÜígfÁÌtÙZSƬihªtûuWÒÓKyq.{É8äSlTß ËnÀ(/ Y +íZè§õò;gyÁ8hHâsrø¡Î6&ÅïZ7=Í|oWûBHJ¡&+J}P%Õ7ALäÖPÎW¨m]@ÎóãV}$GHðoyEÍ)&¤ÍàÚºriÀnú§Ó1ê:ÓBjM»ÈÕ¥Æ9éÚ)=íGÇÏ LL*ÅÕë6ã}×ë +S*o«2 D©2¢a`A(@@Ö|ùòSá\(¤Bn +©àÆ®±#Àâ@9àí}¿¹ í¬VùØ +endstream +endobj +310 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +312 0 obj +<< +/Length 3656 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9âáò3 +Säi8 &óp¦F¤¨h*-¨áÄe@oS¯X%k½7³ +IÌ@f:w«àæe73ÆàÖ~mºÌ&s(èokºáøt9ÍI»s &a¼Î 1ÏÁ¾x7ºóûpÈPa7Î)ÈAÝóÃ'Z1ïø¦CyÜ]îøf³ïFDÒ8Ï@Æð?ðÄä®D +;Úô !K°¾¯é[Þ* +"%Á`¥2xd¡lÀP8 ÆÚã3lò<â Ô£Êj °©QA@¦ÔkbÙ¢àP.!Le0q®> +©¬¨`,°èf&Éø óF½À/Èîò8Ïjù5/¨@4< ÙEÓSz߸.:<# @5¼#¸Üû¯Ê*¡rµGpè`K1ë6ÚÉQ0`\±Ô7GDP4PC 69ô¬©`PfìD¦¬Ñ8Â9-èòÕ@PZApl¦P¼2¥J´@³ Ë|7ÏNÓcè;Íóæêαæ9Ó½¡i Î+;Z#i?E±{jØmiB=áõJB´ºLÕÕxhªjÂÊé # <8Q,Iµj6ÁÌ¥2pì£.Ç£ o\µÛÍgÚ6Ý^ ¡Ö`¶45YàaµËÖû3 ¹$òâBô3 /-¹w6Õ½×q8k¬»Öî=îóÔ4½]¬úÞÍ'Þ| ÔÄW)ÐúI;[°«gbðèp²Yµµq]hY%ÉjFìÛ78Zý _jveÖEe¬9¤zÓÚ¾·^ì7ÞÇW!=JÒÅj;øÛÌ0UcWaÏ?OÇËSFZ§&;?` .ïÔm%_³n<DcÛ¾Bò³ÛÓÜT �¬Ó¾ÈwPø-ǧáÅC` kËí\ÏUM8§e`Ñì~jU8g *ì6¤%â2HxÜÃÂèéb Á.7S>hS¥> Ñ> @uGÐ£Ó Nx8V¼C)íNÍùy Ðê&¥ +`²ü=î)DîÂop¯@ý]JüQ$iâ¥Vä B&çý2<âï|¦Õç§`Â@i@h ±ÉÙØ@!n3Á¤6¾®Ã`yÎ ¤¶2¦ Rl¥@«â°³%épÉõBYAjÀÌ· +!aΪµøb+¦," Ë3+êÑ´öQèÜFCiOÁØæG#ï �4°Î1f} â vò,¨9# +¹$¥E:¿ßì-`ÒNÉðr(¶9PbeYÅTÂÉ%Pó8¾Y°ÃÂ4Ú0³~n¹#dx5@ÒÎrÉ&Ai-`ÖvpW-!·G t«êOyTEçÔ$rL¸÷úL HãN1(Ê8x8#ÀÐÆQJjÌhº^- àîÁ2äª iHý90)XE `(¬ÉYY²z#" fD#JS&åF¡@Õ ¨Pª&f©¡:ÉáÌÎÒ¶!Ke]F1TÄEúj{G¡'ð Y«a®J¾0H +á8"&õK +L* @,XzAÔ3gJxΡÅOÁ¸1[ðÑpV t:#¤C"Hu ~PÊõCç #²m,P +¤dÈ8-¹Rî^S%ª¶¹ó+JÿX$^Y³MߥvÔ,9ç÷Mí Z«¯ +ñUþ)$L9pdãfBz ä(T¡?{KC1Á §ðÙsÒ:5 ²jÃd !< ôDvaUÃ=¢¹pî';F×Mkuìâeá9 Ë#=%Ès ¼:µPÄmC Ü;TæÔÍ'õª@uCK'Í8 ¼æÔAAÊFÜ9cSÐY;Î_ 9¥ZÊætK°uI S;°³MÙ2'Q@Tʯ+\ñ ab¢Në*A^̺^a,ø4´2©[kµ;3eÂtCÂ<om¼éxz±èÄðíì½Ï>x³=&·ÎÝ[Ë|öñvlj%ê¦1MÞN¥WCTnå«X>¯¡'YQ,õ´bÌpôööqÛR¿¯ì·P2÷àeSu¾á4 èrY¼NÁsqdàl8{;e#ÑÍ1Alxñ ¶ásAm9è`¡È2-`á?·ã~96ôÑ×ñõkDx +.%ÆÉÖ=~*ù]õðtÏ,ít(½¯¶øG»êS6=dûwþàà ݺ0}v´5ëA6ÜÔ~ZqYFÊZ}péhÀú~õ]Í%ºmy¦v6Tí´ã±ªÖ`{ûGÁ/*¨Ãx·ÍzµAp)ùO°UE¸÷-½¸ÊXE%6çyò~R× ß®¡öïFQÛ ä»sÃ&êÑäBD_ü[®¹3/#©êm´¿Ø52ÏÏtaUüþÊýÓPë^ ÙÙÿjhM?lxõZ g 9´ãlcµµ?¯r(]ö¾öm¥«ø}ÀÍ$ì"µà5³,Ãò Ú ìÚ?òÚ#òhâVå(? ÄW � fB3ÌX=@@5 �dpc²'dNÀÐ àM çi¨îÇ2õhºOlÒÍoÆÍÆBÎ#L7íCJ@cÌçª4àåª6éz ÀÊ[XÅǰÇ.jÑ(lEÍ<C8 ÅRÐVÚ¬n@-nTB$é +V +æf/P àÚ:,R:fd|ïÆý*#jüõ/<V¯@·oDݽdr¬ÅdY. �0Ø#h kCöÂirc<O£räDÝ Þ"ËüÈÏ:^*ÎôÙdÊ;Ê +<ð´À±7Cq0(î(c-qËcJ9æ7(5K@¾êÄ`ª +@¦«>N1«êÄ + ë42pïO¹:QP ¤OÑA$û #ò<AMÐ +äÃóo½ PpC\A#v'ãt7ø ôEkÃ!ÑícOÃ:±GÃéF8åó Å`ã ÀZCÊ7 é ¢êÉN`q¯f¦ñ +ÜÎùâQ$·(|ʦò®¨Q2:<> êì¨òB¨¯0}¥°#*À£+¶éB FóÔ½«&¾0ÎîÉDÀl +ɲÁOQD%æ6n²TÙãòÎcó&2g&±õ&èé-{!jL6gÑõ#ÑôÄ0èûlPûÐxñ ñpBæà@ äÔCä4ëâåòiû§¾È°rC²c=&*îàºÒ´÷²¸Deø+2ÉÓ,ÄÎ Péâgéì²)ð¦àJÐ-ÿED ¥7+¨ºò¶» buÃ;+¾£ +£Î£Ê@jDªH=êL<°,¥O:".²Kß<ä2X-<¾«4)ÑààöÈ:¹ ޹̧«ÃGA+ABâÌ:4 þºÑâ¸S <ÕnÄR4õ¶1 �á-pSe;5ÒþCÌT@E±Ç ¨ºwI¼©6)$¶#èª- rª¢â«%Àà¡Ó ʬjÊ©Àbø%JØÊÞªã êë73À÷³Å7ÓÉ:Å Ir°i2!àb°à¦± Þ±k-Óúh&+F³(#6K8³À@` z k@9fn +\µ+Vµ ÐØK` ® + +@ @tL¶5MUTw§LºTsÃ7©ÀÂH×4,t©Ç=¢ä.ì/-!?s¦!(J ôô×MïîúÄB|n³:@nDDT qHL»>O"ÇR5Àó]â~ÈÐÄè×]D^Ù[ZãbÑ.JÙÑDrüС`f¸ æzNeãÅÕyGM\ÂüÐîË¥)'Æ+lçQ°eGSEQ,Uàjì ¿ZQ Dse)ÆDgx×Î×cO¼Ø$ä Âõ§jýSÊi#OiuE/b.±äEGh-fEy?&$-o[®e cj¬ÈGBà"¶ïO°í-~H´ÑÇK" +endstream +endobj +313 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +315 0 obj +<< +/Length 2910 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT1 B¡AhÆ6PFâáÒbT"KFPw(NFhRT5QÒ:T43 ñH]d' Êt2¬ö) ÛJÅzÍhµ[12Ñ¥ÎOvCÖn(4¦ã¡¤Ìi2ÄCA; +Û ñÒtÕÌÖjhÈPa26æy¸ÂlÞwÆÝIÌÂg2tG IÉßMÆcyÈÚaÒñEÝAS[f¡Ñp¸{lg xÌĺ¸T¼ ·È± +ZÞ9O¢h¼³!D ¦ÀRp/êþÀ /JJ rù©ª p¥3b¼Ð´m+NÔ[lÜ Ð@à8Oä9è:C+¨7:à @í;óÀâ Ásþ»èn>lh³*Ú%Á¯¼£@ÒÕèÜ1ÆQûT:c(ÉÃ`òíhÜÕ¼î7ì{ÎÐÂFËÀêÐdųÐpP1 ãÀ@1m6KCÑ1N sD3#¨ÙQSU-$ÌH4A9 AB'nPP6Ìc{A¶,*¢)Äõ$£a>º«P- Ã{3µ£\Ö< 9.Ëóæ4 ô´Î7£³C¸îCX×Hê:ÉA3ÏÐ2»´2 ë P.3´ �Á"5c|!ynm:7ãIOƱ»RñÕð¤ðY5»Ô£!r4 CµôA>ÉYNZv¨Ù3T×;L Õeßxá÷¤Ì:ÙR3!$IRe»³AanÖ#Q\,5Çpf£·NÝZJ3 í|k¬ì[&¼%³ú'ÁHraSSWS|0§a®ûWN#jfvß b/Ë5]Pè`Ò1,có´öÄÏÀá3TB(°( â¨)äJb¦9M'J¶ÐËèð®c®íT\×8±!;T6ã%,èÒnÓâÔHØ×f6°@46ÕD0Ì«tÖ^(ð8;¶> Èíø¤%ÌZ&þÈã ýÊ �VfA@R/í077ba[n"ÄHºA²<ÿA©ÏÐЩ[ÃT Â%Ìk#Ôk§±r7B Úg+¥¡¶ÕèÛÁKq@%¹º66ËaÚYAÒ + ÂBÂU ;pêk+=4Êø°·ÃäY½®BøI Á$¬xG<tèD·Êk(W®Üú º[®¡Éw,o¢\Mà #Fð¦d)¾ &íÉ´'ãLk±¾8èÎ TiHÙO&~yánu H³¸.QL`dü oÊôU ]HIP%ÝD[Í=qD2¨5~ÐåÝC°PËøF^ D%øØA32ÓR0s>Yü±nW5º§Þ!Ý4Q:0äÊàcL54EvÐÅÌ6)´ÞÐ"¦U $øGÉAl D^¤:É)YË ¶¦ÍT÷ ª¡Qz<TRÕ7Ì)§¤Q uù.Gó4ßÁH¥þA4JCåhùDQÓÌ à "%çI ¹3<¿pA¼ !HhM +&¬½/A9¾òÕOP?.úÔGýQÁòò´?¥jx4!àÖ© 6°H3*Ðh + £b0ZÌÕùªõ`¬U7øI +ÓkLb+À¸3Ä «Eªµ%-p ¶&Õ´;hp¸t? ÜÛ°Ëo[]à ¶åu®Ö¼¡ú÷ ²[Ëõ6¤ÚAÎ×MåÈØWûw>Òò,0A(#Tlº8zy3Rè. @ !.FѨ0c¤¼ ÊÎÐPra Áp@×+³! ¹?Êïi_è1¿uöÒÔàcJ¥ áåb 0ï#Z*Ô +@D``ÜXYÊö \'G¶Ñ㨠+5:úrBT + Ù]ª5þ#uþ%[Z° ÆK¬90äC2«8êËãë3«@E$E<Ö{BUÏÌ/_G¯ìçDoRÙ7àÃI7ff¨x .s¦«RQ ^s·ç \2q)¢"QâñShôÓhô4® à`l|Û1ö¯åx4eÏwÂñ'BUiÝBxÒäêÅÖ sPì-,fI1Ù%nìË´Z¾eC«ZOÊ/ÌëIÎ ÄÀu;h+æÜ4$p[iH%Wi&¢SEÁC@[Lç9êVNúa¨@7³FyÃf^r¡ â«n3fjÿpuòÞ] +y0íÜTñ|ãÚ³X;àä_MÍTû7âLߪ3üЦnÕ÷ERJ&3»(®4¦;ÐØôèBq +λà¯iÌ·5ðÔMÏRrîÈ^¦I»}%ÐØê)¡ªhÚ*#DK´ñ¶µ½ÏÆLG|ú=EwÕö8±4êUR«Þ®z· «½puâÛ¡òÙüÖűâß"è¾BºôÕî,Ù}?XHò{ì=v-vXë ²ù©ÐulcÂ+¢,Ü%¬½3"ð/\}(ÄPáü;êHÓûWÅÏâðcÍEG*üCpyjÌ@¦ê>w8l2áÜ>ÂbÍjêèÏjòB0$KìòÌî°ÌÆ/~°À¦ÆÞÆÌpëB\«ï ÑC7 >ɨÊÍË @æ ËÈ¢Ì,ÆÝë¸,ÒÔ/¾/f®öÂ"¦ ¿¯vÀ6Lö5,üÐ Ç-Ì«8ùe|ÚJø´/È/PIÀèí%ö»äò¨áĨöo ÀØzäÎY¦:¤Z7bøg#´N è'k ðð'Ï× î磨mz§&-Ò¯äl(Xmî+m Ê.AðVÞi¡Í2J ljä°<h^YNzZ´} E¼aÈgt*;0²ªÖí¤æÄ.C#6.fRCiÈõ´jET+RQŹ iL8Ìäðù¢\¯fÀ¬Ó¬£BùèeQ3è#î!Ïq,°Q±4ÐiËâØ nÝQzwb\&"o¦þßCß5Lãr[n6Ìs#lHFíÍP?0]ÀÌQÐ_Ñ0ÔÉv´qÞ £>çÎê©QQàîpkqV>)fØJ`l¢OÆZKO iZØ Ëàñ2àNͼáå~] Pû2lÝ ªîÂ- +ëúéÐlO6ê¯E +05 +m9KÀÅkBúÊÚèjã(LK ÎÒ©ì.ª/~ +ªªòC'R¢®r¦ô«6$ú^õ²¶iïâB +endstream +endobj +316 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +318 0 obj +<< +/Length 2828 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +F´ñ¬ò3 +g#yÌæ-)LÖá Êr2fS¦G©Ð\4T² ¸eQÕ+öÀaK³FS9¤ÜP0é ÁApR)*©jV6$ÄÆ2A¨Ì\8 ãô\0I,ÓE¨en)àÆ)7©ËØE7ÓÂtoÞPg ì5E«1ÊØr²Ê°b¡«À 0T Mj¦J£©7J|&« ÊÈ@Á\³n8h²¬ëKöÐâ)#pÞ8cK +öi"Ç2mË(Ⲭ¼6+¨òÀ´-P@êccº2¯+Î2C8ÜÖ Æ@®'Àî7pvØ6LLÇBJu6ªÊÂIÀÂÊÎ,ç2ÑJà Æ9 #è4ï¤hıqºâÇLzþ·hä <3ÎSC$INôó¤Ö5ÓDjÆB":Ü!b$'ã £Ò3 #(ÈCÈASQUÃÁ¨`ÈrļôË®ØÔöz¨òQk@¶ÃAX2è6Ù+L3¬PØã¸ÐÀ¥÷eÜmQ6CÁr¡\î8`9vàÑ1b 6ÀV +!XHtÓ6Ú~;´Ã Þ;ucCÆbM¦¦ÂÓr§Î0ËyæÎ5®ä(XlMsðb/# ê9 ÑíYñË%!ñðjáÃñvSU 9%Óò|£)µ~åàUTU®uÚìÊ û£i¸¦$¢"B($âvJ3_·Û\pñp@7ÖØ0 çd ã¼9VîPÓYakv_Ã/;Ï×t@Ü>¬@[³¤ô?UµzÅ·Ö¼ïbÆû¿ð< +¿ôCÆ/ü#É\¯/[óO^tüXä ¨&w|a÷þMÖã(ÛC9fÆÅYت'×8yí¬Îëö·O^õÁRüø¥SKm?~<ÉÛ£IHáH)ð¤ïS¥W¬AT2i)-8&öhÑY!àÙK¢&zNiûê"èæJáb8µ,TKY$léø6ÀPHe(: +3H,U`Á$Ä6¬gQÛgèe?æ]K¹y/nx¾¼a!IHáH4ò.¤Á% +`ϱèp¡Ó-MfÝ +xoa#CB^ÖÓ>-Ï$ +8e4pPÄAl$𺠰OB? Aq-h2tÀR MPôªÃô.£ pC1<Ç¢ÔoCE@¡"ä`¢Ëdi±vÅö£%RHm^ Â` 2 úÆjÁB^L 2%Æú A±Y%°A1¦Bí¬¤9TÍ¥"ÐÂT2#ã±ÈDìÞ§ÙdÔsPjC¨rú,,Grúx0pXãìzeµÕC3¦øA-D C±vl4±Ü É,JÝç0Þò2OVá½Â<àæCl :2yCpg¦nó +Løé¡ (À¤êaÁ<=Oy^ÒÇF|tÿQ¬V<IÖTSWa ¦F[EXÚ##h¡öû#´r;Çà +ddtò²eì¨0.` ¤%ÍFYg`Ì²Ò �d¡¸:úèüÿhDiÝVEcÓ\*UöÊ»ncT.¶ aðtAÖg´wDyª²VUd 3`Åp9:÷ +®!DúÞa ²¿×«wØ- R¢ë°«$ ³ØêMerÔ¥P«væÑãBÇtâÞÓÔwïñ?såÅÒÐïeÁv !¹ ÌåChs¯Nh'Ƹæãª*,U4!_¡}ǽkby°æ!sâÕ§Q¿>qê½ð[Å2@îiZ4¶2,¨Á _ÎýfÙTVÐ%f½V u-¸]£qaL/ô¾[aÐ<à×?N8)sï:<zrho;Ï"êkNP¯øÏ6È[`M ¡|*P°ã¡ Ït3S?tsPZ+pØÍ-û úß;}p*ý=Á ÷õs®¬®¼¥¾ô?ñ(0ÞÓ4¸Ýrd.$e4¥±¯ Ñ_v^[xoÐ6eóáãW zvÅ 3N<pè2Ï£7¯'!õÉIÍØe7mP½<Ä|öÝ ¦¤múà¾õý²ÅÿgäM>FvMçÉZÖðÄCkåÓC,w¿ëºO©ºÊ5Å@ Á©1£ÜEü4£.¡\¼ d"0Wä »²&ðëÀófnòa}pÓa¾¼ÏõµÐÉC¤|ÏTÖ +/´ßó nR«¨EÚXt~±Öaaº.µïD×ûù[`Eà°OÊ^)ÙÉ\8rxðù]=a÷hsñk¡º ÈøO]Q!´g/ÍÁ^Ï;;M²²yq _'¼N. ؼ¢ø_WîØ¦]÷½Ç%ù`ÓÆµØÙrâUê7ò +íïSÇ^c çèhp'úDé¨$s_2Lý!ètlêfO ¾ +ð¦r +Ç=¼ËÞÑj/F>o! +¤½ j#g(Î1äîkÃ_J^jD¸GpA 9%$¸ Ù©ÈÀRLï&dú®ÐCD|¡IZÔϾPP tÉþ¬Îïb¢)¡(È«e`»ìPî` <kdÎâèOàkÅFl-¢b¢º ´µmª£Í°'í +Ðç¾êF{«äè© +yÎT.P©Ï~©lh®e~X%X¥Y%à %ÎúèÙ¤ ,eÈÎmL3¾4+¾È¥ÈCã¤Ôp̹êÚ b[0{°¾Î´¿+dçPåhÝK P^Å@Z¦`ÌÍñ$¤Í~ÛÑ$©Ì4³0µ f,+£æ´cʺb0ÈYæ/êÒ´JØ7k +9d&F»ÑDipPl¢º7p¾[Â[¯ú>Zúb KHý @ÛK´»¦ #¼²ª©B,àd[KÐÉf°C:m£nNM_J×-,×g·Äë(ØLe±HNd91. c®½¢^"ìd¤ R Q ¸/ì²Ü¤ÜhÐVåôGqi +ÕR6Ía ØÜimAæ§ÑÀ£mìß ôßȯNHdªêVéʦ«xëÎÀ¤¸q@Èe*â^LdHÐ௠+endstream +endobj +319 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +322 0 obj +<< +/Length 2394 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8'EÒ¡* ¡AlaAÄé²êÌm ÆUx¹RJ +Us)¸ b5sºhÌb()NS¸æ)¢Q ¤jl& E¢QA +=WÂ#Q¸EzZ0R¦`¡AäU8'C-ÄÆt. + Ôs§+Òí¥ 2I4 L"¤rI<ÀáLÝAÐÐeÞ=q¼@o;v ÀÒn3Fó°syÄc(xg4ÍÂÁã9Ãæ9ËÂs` ¨Øb)M¢À²Biª:O®ì»o«Àñ<3Ðõ=päø>O£ì2¿Óøöpª& çÃ1SîüÏà2£è< Í3P½¯bU Á¸p±ÂÈ2P»,:3Ó8Ï4 S#5-Zþ*êÆÙÁ# +'Íâæº¾H¤'O§Ã¨ÜÏÇð@î �sÈÙ"´íJ1JÂ*Jr«2¨!°lµé°,P¢p³!¢ØÁ@9Obî¼Ì+òÀ¢+Z°ásÁ£\±ªüÕ*²sô2Ñ:Y0 ÂYÁ¬¬Wp$xh F´WU8f[D«Ì¶C°2Ït<½ ÒM Ã*,-q`WH@mTÖݳPJd¯,³lèÊÏ´-À½ÑõJ!)Ü$a¨p°£´ü¦ã¶òÌ«`dà Hܧ¯ä:K" `PdØlÒaP¡,(CxÁRQÖbKb¦ gUî)àVêʳ}År +c˺8cM_Ö½òÃ_ÚÑk´õó&ê#Ê÷:cè9Pè0îP*ÞNG&èÒ Cu6£0èáâ¦æóïÃxáÌQ W4Çî3g@û #8ÑËó<ÚOÏòQ è: ãoI# ¼G¡#|l#ÔX@úpB§wXÉPÛqð¸ì7# AeÙ. ÆþoÖõä¼@KöÑùxHéÎLM9¨cÊ¥¸ÈÃk` "(pÆJBGÉ$§¾#h1 ® êÂM`ì=¦yLJÌ´¤òâÄJ`É(p|CsÙ>¨óÊB=(¬ÏÐOr;FòôîuÁîÁ¥C×Êä(xP!ÐóIóvAöÓÎzaØl çà1ØB{tG`ͧÓõl%-Ï êÄÊCh;ñúÃXnÁ9ê !Ð9â! |Ê@à]@7M1ÉF³X0b¡F>LP±º'l0Òävô; ø29CæwTJ'£9¤pT +¿0dÊÔ£rµ½WK`ÐÛ©&¥H(²WÈØÐ R(&ïMr6é0 &ñÜN"Äe �YFªhàe%ÒloMðÏCêuØ íüóÃ8£$f¢A½v|"2>¦òÃøãü·ed Ò ÞIñÞ=Êd$I±.&Ñ8¢ g\AR|OÐo*¶WSªxOàb<a5ѸÄo´ìõO«&±"ªÅIý&;uq!ØwX¸i ±E@[Q-E'Õß7xDçdv9êÃD>¯«·yÄaµ[§Ö\ç§K¹{"~¨SÆ# t¡â*á<ÖʽkE +±U£áX¨`¶:s(Ü>ñµÖêQD¥è±Ç¹»àÈ|"gö´ý> TOqînp2RÙólÁ&ÝÃ:j_ôæÇ(O?SSr1ånJ«ÂÃ]>¡Ú3U ìä7HÂFC9[Í&!3ÞÇ'¦2MqÓY¸Bª·,*omöN)Éy)TTÑcÌEë$زj¶û§5óäN`Étû¿°¼µ7%xrÀ¥Yµ ã -SR: ÷§ö×ö>X¹\î¼_£w:E£ÄP|&í©Í{1"ÒçÔÊ&Î2ûá1Óó¾ÙË,Oö¬eyOaÑ>׿Ã}@½Ì¾Î[lp)-äõ¸N|&®½yçòÂVñX¡ês=ßéVRe:ÜèyªqkMZhÆv\¡xÞ]ÇXë +ÎÖp9E¡õÀ³`Í|çÁ ¹MjÄ%«N.¤*k% °Õ÷ÈX¥bwCuíÐr¡Ó(ãB,WÛÈÊl,y¯JMÓsÃWÖOõHÙ{6ìú´@Q®Ìû>m¬sγc Ø«cÑz¸¦¶nAò?Ú÷æmͼ¬÷ÂÏ|ÂÒ˨g×Û°ÆNú0pÝ»Pe[ÌçläAÒóa(ýVLiå5mVÖô[ídµ ÕP[Ëo.ØBú/upÙ×Ü#µ6ç5âÕK¬)R¨´ÄÇ#eY©ªÿØØ +â-êV¢~ÙÛ*¶_D]´°{¾Úï+#½õ~þýºÓøÂf¹I¿ÒÿÚ»$\=q®UÎ×K]¸Þ/Æ^ ·òȳµv§öÅú2]Ò±7ìÅÙ«¦¿Ì0G¨6dÐXPR»LÉ5â,sÎ.¼fIylàÀYÓ?Ë-2´G6Ò|óýg¿õ²ÜKWÍj¢Ur®(k¦¾l/nyÜlÈ"î%ú'é°M<˦z @a8û˺ãB ÆB +endstream +endobj +323 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +325 0 obj +<< +/Length 3135 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9k)å4f0§3ÈÒp:MæáM#Sa0¸h*-¨áÄpÊ 7©×¬0 ªp2NR¹¤Üd7Ëà¤RT5QÈÒJV¸8É%H ¶Ä0ærá ogs«Ã<OÍ×±iÛx<ùíÜ@i2M×1¤Êdº7Ú.«¦ ÅÃæ¢TÚXeûÝØ(Ph;çÅ}NX 8ª x)K3nè[~HrAJ|<ÂÉøæíðÎ@Ê +âh¾("H*jæ9#<F: î¸è!qÈ¿ ¡Ô½[âÛ>pJjß ,OÅql_ÄcHæCnØAC(Æ: iDN¨Ð ò8#çL]7J ¬+ �khb!@¤2¨ä7qÛTÿ©l2º¨¢µ[ÇQA°kD$äÜIO°½³ÛQ>°uMV!*séCÑ!°h®-I-#I¬ËBÔSTàP"CÞ9T«õO`°¬UÅÕÈ}`Sm[Á¨Q]ÕìøÀOÖªWºª«¤°cV´²Z4µ¦Ú«mMÁm>3-¡ P2Ë£pƹÔÏõÀUwWÐÈ×G²rMÝx^UýéÐ ¤¡FªÙLjɾ£´ëhd®°Â6; ¤3ÓH7hZ#2Íèë弨¬#0q#ª6IDºÁRXE}\vAÍ×¾¶ òå}ºòã[UÄÄܹ²ª¥ù"jÊÃ{°iº.¡¤4b@®' �w5¨´¡Ýæ ªpnRoQÆñúXí¡òC/HrÜÇ5ÎO?ÐôzDÒ! âxðÛhËÒÞjFYaí·ÖÞ\²T Jçnð¹.²ð½j\ T\8ï䥹¾it +/À¡[R,CàÕ©r-=Û9CHiSçeÍE ÔA¸&ð¨ôOÃ0ubÅ佺Cxv8§r~C;ä¼3by 14 +6v¡ÆK¡e´Su È8dá¤B_à 1ª&+Yð(8P%DHPùÛS ¸HêArD)GÄÛäe_ª#~ç?¿°dG |egÙÍô#M[,@@ØôUÉbh¸)TØ +.3aÈë¥tBÃ@a3á±ÂÈ©Ò ½ lwÐaqT%iH*p.ͧ@ÈÊéè2? xÎA£ö±aðÿ×a^2¡¡¨ÇsûR ÁÿFFLΤíAÒâCÈ@Å$l.e@´(Ù¥#F7ÉIÁy#$Ñ5^¢5'Øt&zG&Y?!ÐeD1õ¶CqÄJñE1Ê·i%C&ÐGíB¥bxZF¦¦A¥á {G Ä»kó!û¾Aº'ÔÛ:CÁÕSbSàªaû@Ì3b8,À²if!\-òzÊG(¬v²½Ó¶Të(üeçÚ4ÌcÌþci²ÕvG:ªvæ²Å0¿«$]³BHJ`Dp¨Ä°Â%¯Äð!;uZXY1áM5BBx A@o²äþ¥Øø btøgXR^ÑÀT çÞÕV3F+©´õ ÚÐ:¹>îò¶Ì¯K«C®"r©Zc(¦´5.sI)Rdºg:ÁÞMÉÙïS§ÔÙ ÀÏV],é#¬º¡?ÝWc]±0¥8)*Éf¸¤v&Þ§ö¸B£ÏAD¾rTPQL¦¼ÐòæÉEæiá/+UZ0ÔÉK/á¾R´¿X Qb0´î.~¹æ©0ËöÃJ|ÃÉû?ÌõDÖîÐs(dA¢2V¥?j.þe)ÀÜ«^óçHfQ¾ª¥)ºUVp^~Tà �ÉÆ "1¬Í_Hx: ]ײu=.zÑܯG1ª]Þ¢FÏnGQ䡼aPíÎX>á¯ú2lØ;'ux¥{¨¨¨÷B¥Ú37im8n1D1ÆÃ:ÚG(3(Pj¡ÎËE bzɶõfýäª^»a¹âÙ[M*XaÔ6 P£ÊÓ¨öpO¿i»)]bCI<BvX¡3¯jÕ,%'ìdeÑÃÛ>ÁÁm1tÜwíLºøáµÀm7^]Á:ÚèñIVy½×å\aãÉþI*¼tb:§yÂ>`ÉÃ0+ÐIrà3ü¦hS3`éy¿µ[·-Õú ªIâËA ôr#±'Jé}2ôÞºç÷l ÏÏFÓgrýÍÐ"Ëu:ñätNB0A OMÌãË9tѧGó4¯ÍtÆÁÏ]óÍ?Ïv@Gk¡ÊnÑ÷E¯ËÖõ¶ÅòU!ê-øÞ$ÎÁ©êS.¥M©Õ>¨U/ó!?¸5Zû1P-äl÷ÚæeYC÷î 3»(G¤¿ÁAzïe[ÞîÁP4Zªul-¥¹Ü·Ç\AÃ#âPÎ<¼¸e +ûuù¶ÖUxô �a·'¬AÔ±&(v·7r£,p±ç +¬'$qK²Ý+LgÒ½ïпÆâôPTM7¦·`«Èþor>ÈhļýhiFÍm +- pgÆSþ ã#Ï7F´¦ÈlÀmVO:X¯VÖfç´ù j§ boôoüöXöF>ò"åüc(xÀ@SàÉC:ç*rç2 &?'zH ¤ ET à2êÕ >2Ïó0B îÀØF'|zîXï@Snï°Wh{âæ.¢îÊñhòpGÔñâ}¢§°¨¼Çæ½ÚyãÖSß§çP¸ºPÎâÕºßà"BjôKêønb°H©`æ¼ #º;í K4¶l/JKé$ë3ÈÌLJåâX (D±+<µ+V ZûLÜL#ÍV¼Â]Ðì È«ÇOð(61_ +fÀC²;q;Éê $¹Ìhº(¡(½nûmò(a)xn--mr-4ka.xn---3ea36cea �ñ RVb"þNF®^ÇÉä¦';i°LióFXÁÙÉÀ.D2°Ó r3ñè%é#ëö7, H@êKåDJ±þ;òNÂÀä TëDÊK±¨ÖLm~æ,ÕM×!Â2zæ¾ß4¾I'"È +¾Þݨ¸Þ +V¸f»$Kÿ$òNTb7±ÔËkpü¼Ëì&ÄE:À¨Ô)ªò[kSª¯¥:à (S²ºëÐb@ÞD1¸38KúJê +l§Ò©hp ,Ê#ÔǨ®Hæ6ä¿Ë<1´²/sb=Ñ× ÄFrI¼Ý,Ù,1ÎVb´Ïd"qeÑF1ljì"½íüVªîBnÂÒðÃñ³.¯«µ`äµh\«0 �¸K°·È{ Ï4Èìà3DW^ÊÆÇii8#j®þ%â®.Ä>ãN8ePPB +endstream +endobj +326 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +328 0 obj +<< +/Length 2915 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8N¥BT # C ÑÚ 2FâáÒbT"M&`©ÁHW/JDv8«CA¤æ ;MS(Æa:̶ó¡¢êw4ó¸èo¦3)¤íu0 +äÛ ÊB%ÉÄAM +ª" +ePqI¬ £ pÂ[og3 ÿ~7a¯Â ·bL§èe2¡{ºõN+I!¨EQIPÕ* +«PMäè ¹ñ+©Ìá4<Øß}2°¡`ʬÀÐ0ãs2Ã3:Îë¾Õ4-JÔµmk^ ø±«0ZÓÖ¶ëæº®ëÊöô ÃÈ@âO8Þ37K¬7£ØùÏ8ÂÅ21¼rÞ0, +¾#£:¢ j¨£aO¥¡\<3ò½c¢øÝ£É&®¬PÎ4íËá1s É2p(.x¨6ChÛ9K`Ë<¶ûèºn«®ì»c<øó=cÔ=Üø>O£ìü?KpÊPSÂòCÑ0AAS ݲbüí<OSãfÚ®®è<Jî6 ÍKSADó¯R@2£I?xðÅ£¤ØÜÈÖJ(R´ \(êO5Ô7dN@ä0â¼Â@¸Ûâ2 Ü`]RÃUv ¨Ø;#¨Ý0Ûa66u(Z#a h ʲº±,á2åÆÔò¾/¢ "Âx®ûY2À±@9n^àÓcâù¹8´¥*Ф-Ðù»ÏKéWp¨a°jÄîTº.ËÂô·²5®=ϳúë7Ó#Þ9¸ã#ÄZìR3ÒÍ cB]áDÕ!¤üûGºýí·» +1Í££7kË ;TÕmÁ®ò´Þ Qæè:N£ÊhsªÅ+±Ç®\зÉìýÁq` d´Q*)Î5º`6Æ*ÌÓEû©@UÌÂÞ*ø`ßß· +Ú´8hùÍNdA@Ð9ãw3¸áëù!ª¨Ý{»[ 6ÌÛb¾Ãrê612ÉÓ5@ÉvrFiR³v`èiðàªbû>§ÅLpÐzP Ð@þPÊCLmÆüàºÄ~úCAå0©f `Ⱥ`Þ±"ÓRÕ®A\Ú{ pt©A.ÀÜÃ÷2dìµRv Ír&-íU4^ ³Eá £8>!Òµ¡Ì ®ò¼h5¸ªeÑË-Cá¸Á«¨jH9Æ£e=æ +4§TîZtplQÌåÅÅ"ì[¢JndÓ@¤2¡ä ªQLÃô_Y_QGÆFÔ¯Â.OâSú±Ô3Y,´! Re(*£tpCxp[I¶SÁrîbê¬ 'ÄPØÚlÆx!¼11@ÚåÃò]Ïâht= ßY¶{ÃÅ N]¹É¸ç"ÿe$)4°×ÉØ2-ø»!$4bq¨ÊEÆÜ¤ðr ÅÉ:ö¿$£õ/¥ºL.Y4Ð L3 ë<7¢õzJ¢´]°Ç# !CbÚ¡çd9ðÚptBO4!=ZhâU:W¨6'´A[ +uvo±rP"\Eßw³ó¦ â_Zã ¸T-V^áfªU:ÄöAÛ{¬ð0³Èl«§)>ZÂö +p3(ÎÊ +ÔýsøM¯íþ© �ÄfNR'ÒÝvY0 ÁSÑÀbÔî @ðMÜ[PÃS ÓAÉ´KÀ%.A¤ÇÞ+ÏDhl¥rA°+³mÙô- òr¡=â¨é5CìÃpÙi-î! Ó[b§, ¡ç('ÃL;(àÞ¤M<!°r6Mª÷Ä +d +Æ/¨¦"e½T3ÖàÍv& fÊñÍz¸eò¾ëûÉ`LÂYCV¯[C&ÅpfÄ&c6o亣z:A-ºUE4IðØ(?1M2ÞÎ{:S¬öD\Ô2²íâ|²xÖÍ£ð0t² +Í^µC )L'"v$¢Þ¾Uc9gyP1##ñG\Äŧx2s¤%ì¿,±6©ôóLÀA:A5öÚÓ1ó d«Uoq3mq´ÍÑ`£ú1Ä9Im¥Ì³WÙ=6ÆnðófäÅE¢ãS^жãÚ@ÈÉǯ0ä0AÃu²¼Aey1Hµ\ÌRm9TÂepQqÎ[mYuæ + V0Ug×%t©û9f˵ÓyN9î8u}Z°ÚO?HôôcQdͯÒ;[Êh.# ÞÂÊ=T%ºêÂdM' u¹Ô ïDf|S«6ÐÀüØh¥w£Oéì¾:^áý6p´õ¹@ܨa«à0Å:Ép +o^27|Áe¬vú¹Eçì4¯Ø¡ +a|!0¡µ³¡ÒÔ"ÂÛ5ö w-ëtÝófyÔm"Ë£»ºÃ<£o²æ^æu· `Åí;px)9XEàkÚ¸ódK¶ÁrÌ8 e1áÈþÄTÆV}ê 7ø¢}IÐå½´}KÑ羦b_Îc}Ê(P~Ï"mÄ´CrÖ![Kã/¨rÄð¸RÇalÉ[5],9 vÃaËjáüO¹ÒL<üõ# ~ÑBOGÛ_ùhjØu²£¤ªnÞ÷×%ïÐÒêÃz¤®Ñvq7z¶ ûÖK 6asI¸%³ßMKd>ôÅïÆðËHëäì$z®Ì\ Âw'àï)ÆÒnÚ^ÞINâîÂf +ÿÍÖa2Ä ,]$÷M$Öh¤,ÎéX'f6×-xÃGÀêÔë¶éæÔðÎF §¼½ìr:¶îü¨¶ÍLæ'f¦cjR@ÊqBí¢p~Êj¦å«Ì¦i?0M¨èJH¹Nàd PåÏ&a4b#ÄÞøøÂx'ÉÐE«@Ö0ààê.õñO^çO6 /:¾ªNö#ÏB꾬¾®¸®R÷$²#Pìá)"áefg 0"zXÂzHà ËÖþOÿ@`êëìh.×ä?èÖ©¤obVðÔ}18/ÌOçÞÿ¬\÷OÆÞ$Ðß ìàC@#fwb'qÖj"8|Ö}Â$²|CbJeνH\j âä'£®â,ÀÂ*"î ! ÀÆC¥åL_@Rý¢_ÑÐ*l!J²Ö-&g <í:ÓâÞ +¤ + 9@TöTc&Î' Íî{Ü|'±Ô|à- �£`p4Qüf¨ ä¦ ä � ñÙ*ò#Ò#Çܶdò¼§ô§À ` +endstream +endobj +329 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +331 0 obj +<< +/Length 3204 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +F£pÖyN3¼æs¦kxÐPe9MÆ3)ÌSE£ÁHÔèL. +DªYHÆÆ6¨êû `0¥ÙóÙ¨\Ü(#N SÂt2ÞgBà ¸)5:½n¿bg7mvûI¸ìa6uÛ Óm¸qxü^ÿÏÜë:¥sI¸Èo;ð "¡ªFRñã1¨¸l1¨ÊìøÎgôRôÂÉ\/¢)¢# Xò<ÀPZö=ϧ/Êù¬Ix`,È Pÿâ$¤ó©Lr"hb¡\#Á°l É"ÀúÒδªëxd@7aJ|5§>î»ã¸ª¯Íèè«û£ *+(â¢hh¨¡ì²áÁREj*â©©óÒ¬¬$°j±¬¬êÈûBÔ+|Ô¹ +cÈÜ7ÒÃ1;Ó2 +ò¤ÓÉs1Âôw³í +jýBx&8Æ5»óÀí7ͨ+Á! � �9 #è4ãt¶Ä ÔÜîÊE¡)QS>+vQ Ñ@¨4¡1Rì©3Íó`V²pØ<WûÑ;1ë`p>Ï 6CUT2µ#ɲpëqÜ¡0Cc + éä9fIøÉKåpæ)â|Â;»£8@î¥øh°îcÊ1#0Ò2ð[ ókUûs¼ø 8¸£÷¾í´ãC¼6îõ]LxZ)ác Ъ_#á SlÓ¾×CJúÎ×óËMbtncPv,p¬tÓ'"R§áN¹¦Ê7öÂ45õðÃC+ @׬Â7Rc @1gÒÒz£xí¬r¢xÜ6k÷-ûÖ<ïáø£/Üw]çcøúHÓÄò±0[Ô çQíS,W½#|ßÁBûl}WýЮïoÈFÁ8%I¶9æ:¢j4¬×'âPruÀÌ£¸Ú³/uPQ±A0PìcM@ 7h=^£OiNÅÜ«6vÌAk3f2Ö_ZCh®T$Âh:têý$4)vÈ ~hZDKÊû¤<0¸aRNRî¹'àªa¹ ¢´ÖÚr ¡¤:²Ò ì-wmfÃÈLõÃp%ß2ݰgqÉïIJ |f¨3GÎOÃE # Då¬p&1(RnChawlíð$W¬cIÁÔ/çÚÀSO +0d0j PDlE˦òAEÕ{¹$=¥ì°Æ\':ÇJù7rè"xWKþ#`ÕÀG gÊpt)ªsrâÄÉ1rÅNö.Æf#_!2sº Ý9ÆÝþË#Úý&|òN¨Lt¡È7;ÀÈC°i0´1®S`D A©5@Ì×ß?¢*ZDpZW($Kpd¹5X¤`g³)`¢¼(¶Cjâ/"³°æ óÖïã½§Â`^Xrnñ¯ BÚ+<{nú¥pZa±eK&ÐÁÉs´ É°Ä Ò°e<NZl19dCÁÌmZXç ûd¬rGöÒ¢#ÚO½ÖÝ3iTñCOݸ°Ã½[IJsv±¸W`:¹Îiú§~6rúð oz0æ$±ÛÑl$ɯBcbýv4á87 �Ü È +òI~ÂÎÓÃiî+6°n`ès4þ4ÀÓFÝØe %¡+6a |µFôÂHÒkëë;½¶¥°AÆ{h}¢tT7Qpè¦â¸WÄÀPPìÃH &ú:FÀÑ`n¬s»Í9Gø:{&fá¹£fïÃ;.µÒôÛPn|ßN{/^hììÀ²¸l.ÃKÃj¨áêv3hçä¬ÛNÃ!SKîÖÒtk96äcòll¾Y@I¿òäuø +DÇ @Ò%.dkî-Æ0Í:%òk.!óþ Tή$»Ïu5ηDêç-ÒÃßvÑýÃPÂåBAࢠÌY.¨¶)+%Ìòñ¤åq¸ëVÝ]ÏΦP×yò¹Rt6óá ìÙåÔ;§O#FêyëÙ³¯ IA0"êzébàE¥§áç (ØÌ O¹.{<ºý¬¶ 0ÛÖÛ`SVb2¥Ul@KfþTæy(HÐ1ê PÌ 13~hæñªÁF/i[!l¦SÃuÓÆ9²PÙWí ¡qþ /ضU°ñás.0A +ilVòæÉÙX3OÙÚä0PÅÔåÎ9PIÝ+eäÙ·áwE ëRÚÍôLñà¯È%§V÷Oåv¬þ[I 3 3¯nÛÖ²#$Pä]jU\â+O.ÕßÅ �¨n:äíå Þ©ÖYwnë¾wïy#´§¨{µÊÂÚ.Eлô_Ù~08ø©~§H¿âªÈ5éÆ×»d2ùµÿ~úù(ÅââèQ×·E¤e@)H¯h¿@Bho¡æä)¯¾? éx&úÐÃ! ¥5¦ÔÞsKå'äwDøß $d$nüôÏú§õ@PR%&R¨ï1î&T.^¢+p"ïJòä<CtüÏÀüJÔ E|ÆXeÌ èÅ «úÊûÐB¡åuÀÑ + ÜüïÒ@RXâÿ¢ªóð �ynúôî4´0[\į¯lÐ&]ÏvÕJ +=¤i n qÑI®²%8+°Ô³©¡ ¨G¦ÞEü Pëdk\ &ÐÌ_>ðé(ôª'¡à@Íè$»*:j¦®ÔJ ¢@Ê¢,ª07 î¹°-h-l +ðôCÐgÐä9ë ÇýȲ®<&F´ñËLêæ§*üàáDhöÖÆv ªªÂüüw¥Ê©'w)ìª 67ÆvKT«gÚ÷ÈhCO �ÖÁcaËô°DAåBËj~Æ3ëPìj+»G* ñf«©Ú,oà´qX·@Q°j©¯n= jÄðð¬\Lêó¬,¾ðÌÐ lm¯ ò"k1âº3B¸ÑôDÎd(¥Hþwʧ~z(|ilÞÀª.jk~}ªN=ªÂ#ÑîÌÇìQä8@?à Ͱ îp à F¹* ¾ � �+àA,@ òÍ-ÔAgÚÆÚ·BP?rô òÞçå/#þ + +à + �¿ ÊQ0¸oáfáæËâñ®)¯ ¥°qZ4ãwmRV Z¶òa6òBLZ£U5l!ÑÆQ"_®jhèLÜîPåLâå ê grp¦ÆËèìkw-6ɲ(ì'«l¶Ê¥eî±¢=A,R¯. ¥+rÛ,²Ï- §-s,`12ã/Å>Óñ@Ãÿ/rû?ÒÖì +êìS As.2ÏIÑ@3+2ó2³IpNÅ2L_2Q3v6ò3|G%#+rn| Æv±×l2gsøÏØB +endstream +endobj +332 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +334 0 obj +<< +/Length 2754 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Äm`Né1 r9ÎG1M#Hé0ÐTZ%P¿GªÃXDj7®ËF +LÌ('ÍÆQp¤¨j£©»åJPçªaÅ<l9ÔüM~§¬ÇN,Ö¨b3 +wÌZR2CAAäe7Ì·K¶f ÎC¢ø¯O.ÂÃq¸¸eÖÉñÂèV4NåÐx:ÁH°Aå:Í&ã!¼î÷¾/RË3Ã6¥AF´)Øï;A hÕ5òÀ§1¨ [±Zl6A°bµIxP# !Ë¡@è(0PP7ÈA@Ò6 lY,~F)óËÅñÄgÆñwÇã|º¨ A¡°lÔ¨ �ªj!3@ªªîÒ3<¼-zÇ,±] «[r)#pÞ8cK*¯Ó¢¾ºÓ£.;ì,C¢£ÃñÐÜ:;ÌöIx)¯"a �w%T(\¨" 5PüUµ]XVU¥m\>ÏÝP7Uò u^@ÎÑ4ª§;´xjµûO©Íȳ#alÜ#1CHà: ,¨» ÔÀÒε0ì°BHÅ Eb@Ê[3½ Hb#©=×1pËUEñ¥Zµ¯6Òøî»i4Tasp¤ÃéÆ!ë|2Xdã¨Ê;9yôr:aÚ0P1«TÏÒ{ö3m`ËA¤aãà2cNª2; .PZ1²C Êø2®jñÒal·`̨Øb)8Ü9<^D#Yv¶N˳7öWN¸ÊÁOëFh²fá@æóa °Â6¬ @(#Â6¼Î6!»bHV)µ1.]ÉáSÇjVG×é¡aÃPâG µÁ c f©ó÷×ÒUà%ëÿT/Ãñ93éßz`Sºr>Nrô +(¤'?È@ÉÚ*Kí "\êp௹UñÕ(W !8"A0 ¿·úAQFL7Öª»YVÙ°1PAp13·ÌM»ÌX¡Ì<6äZâOs°µÔPÂûÏ0w§!ÿ@ÈCpu ¯Àã¶ÚÚZÈ'P¼(cóp/P1ä.Áº,F)fÑZ=Q©Î³ØÃ@ o±÷Ãöé»}е$<ç`ÇÚ;ÇüdØ G.l3ºÅO$RsîD 0²{&Ì"0P#§;&Ã#ªáº ¨ kÈTç¿&Àýb8c ¼1°î£{^!½7 å.¥ä¾ ¨4pÆÏq åðÄè·Á¥ 5Þ[N �hGÖú}c©ý¸eZÉb È~¾pwÓæfµÆ¥ :KÊ)I ä{X¡ûpÐÛcÌ|¡¢ÔQl¥ÏÒRÁÇôÿô AyZô- àÊÆõÜü{sýÐé@Üká;¦ ¢ÊvBÛ&#¢ÍQ«ê5 +ÜðfsÊ¡GG êÎQ½g!²ùo/ÜÚÑUn®£æ3SU;Mtí6Jz ä±ÉÂÑ -*ÛÒÞ\K?e.ÍO2.Àç´+¢¬ó"dì +o°~Ã-û6Á߱˩@.ð»ÍÉ» æôßqN9É9vjxË:ulüõNàæ»ñ§âÉY0ù=ù§`Ýè9v®Ï8,]ÒI¢pRYÄH'£ +ö?²÷ÕÜÝ»Kd S¼¸"f! ¤&´Ú&¥Ù°¥Fîï7úBW³1kpyJQ³¶¨ÙÉår-Êx>ZG´Iæ¾Éf«Un®AH;ÅÎöâÀP¬ñrÐsÒ\7ITÉV½×N/KbL8JÚ"k ×{^«Ý|ÊÇafÔÇ +^å%¢ ^=¤wL1¤²RÈã©ñb»ªî»¿HLTç *L²%È3frÎòªh<Í ¢D6Dî +¨!_ÖhU!ëõ ²6cÒÚ[[m½¸·0éGhølað¶â;%&×(93ì½ì8Lh1µÖ°YÈCSãMFu[<ÃdúAFúͺ¾ +¨£pa°ý£k<H-TÉ3ì¶5ù;õTñÓn°hh?Ìø¢íuR¶©ê«UÏ»=UA,è½·7ÛŲ#0Ä&Ư¬7Å8þÚVÁ[½[BÀmãI5X²ý¤lv¶¿ÝÚ³ÏÆá.à\BF¨=u5é-;çæº3C yiLõ%i5éæ * 0 �:í3\_ønF +¶ ÞÑTVÊ!°6×óDí{£½IA@hì +æy],.È÷»ÜâøW(0+;qÊïØBê][~¯?R]~Íxäe©X«æ÷Àìиáµ5Æu°Ùí"~&`Ö¨Z×Qáþ .Ò°t¶/û¹_,ÆÉÀRA|!ÀÂ\yEµÖß8écÓclCl-CHx¡²CôÀØÃ=}á°0ËÖê¤%}×1æú ¾Â@I0¯jè]¸ÒìôûÕQCÁøÑüGù¿GéϹeAGÖ ×´µw"²¾nl/tÒÆi|ýÔø Â?g:ñí¬ÆÐùâîþºPô à¨ÿ£ +>ü:÷-*÷&ý/øÚ £öhæò¯~ne_ ÊNp«broÊ|ã¶Ý É¥~oñªçÒõ/VkÚ ªh\jk ®>kÀÞMiîsmDèÞli¢þia +@¾ÿ`© +¡ +аÃnG0¼ü0 ¯ËðÈaðTýpZi0^8ί 'ë gÖiF°tÇÊäìÖâCcÅPôÌðúÈúÀ@°® Ðô¤£p71oÇ ÀÜÙ-Ð$éøâÑ3áq:T±'þòÆI 6#qQ©Ç +`1f¥P½nüPÐ/oØàF{Îä +$঴ÊÅ!PÆ6EÀÞ}àÞâ±}ÎÀݯÆÂæñF[òB +endstream +endobj +335 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +337 0 obj +<< +/Length 2286 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´b6£ÂѸ¸b4áÂ4Fúô.n +Eòi¤G"åB Æx5×ECA¤æ ;MS(æp2Í&cIþt4Nài<Mð 1ͦ#I»$i7ó6PÑ 9ÎFS.«Bl7 4Z8*¯ÔÆ5aÅ.¶ +YÅq] Ò§#YÏb6ÆýÁÈ\)*©»úÇ\7á|yEÓk&Jd»Òì-jW»íÿÁ¶CÆ1Ís$ì2ìË6γíFÒ´íKVÖ²¸Ü¯ðpÚÔ·j2ò8*¸¯Zx@1 ì°Ø¶m«<滦êÂpCjï¼/6òÄO;Ó9"¾RØ·.¨án?ëþÂ0ÐÆ±ì' +Á,Ó8¿ÁHÓCTëÌnÜÆc$:ÞÄ4HãDð¬`Ú;nìxñ,3¬ô=JÒ±«ªZÎ÷ïªÚ·²rüÁK;-À¬03; +ÆÎ£ +5áGÉ«³yÇñ +âO*º&q<Þï<X¼Ô$ö¦´\ø>B]$ +í*¾JÔÄMÀí?TÌ0\ÉAóDÕµÜ2ÑCctçX8´KCVË(¨°ETYMSçOMù?Ç×M!Ý"ÑcÑ«âùÙoË÷hRð³jK4¿lT6Ôj7:U5ÁTÕvM%W·Ö;Øk%qw×P½yÐ9ga`5Î%x¥e¸nÒÌ¥Àx=²Ø¬ÆÏ[<#5Õ-Å3ÍÏßÕIv ,u{FÕóÁdV:²ctZÎ5WÑ~eº«8ôcëæï¸l$9ì¯iè4ì½hÕSRÇf8µîü=ªHµÖödÙQ]í2<¥¡óW&óuÃò© h¬hð¨VÁ¥ +÷ +xdiç@çÊ:£Ü9êh7@¡|Ê,"å!ápáª9õP#÷b(BàP.5ê#)^*¡¯;",R6d±Ä"m$ yßKºwzÙÌÈw4¡!°È[3LÎ0êÃa:À\BÕKÁÏ Ì@dô3yÅ �{à¤>" +ù!LDÈwÚ¢_yV#EÁ@ÜÓJ~Îõß f@ux°7ÐPrµàÁùßüp7Àw*»æsD½õ¹÷B¥ #¯IÈ;`bî@EAÉA§Ë[yD@\ó£Yv!ÕÅܼq©±~0Ã'ALf¥ÓÆõ +älfDæ:Xì^A@CÌ9×t°4LÚÁÈ + *@¼!¤@3&2bF$ö D±"0ÂÞ|¹ËC2I$ àpG¡³¶Q»líJp2Ï\f +etA¬!²¦ÄÝÜó§u©Rç¸k4gEÊc!Ì`TAã³^3ͨÏ'NzR289ÆNì +|Ý2J 0òÙ¦~ÓXHI3 ȼÀ EæCÎ7¬ÂxLfÁH"`A2'Ó*{Á "0@ c| �ó=*(¨¤6ÅN)ÐR§ø1ÈöC5KF79Kä½o£fnÆ©¢%%CÒ@Q2isKa.åé¥ÔÈG$qY^ðÂÖ¸90g²cÕyönf,qý̽ s7ÞJìi"¼ç䱡ô@[ñ üÆþÍ©A1°Ïª4W`3'*ÃIÒ5NÙ*@yAi¡¡<FÅs@w/¡²ÊÎQll$²ðÉfFEÔ^´øU`îÚZË +Mm£oFÔ¹q _ y9GT:?, �§{Ô¹²z³êMW e¬æ¶ÑÖ×f ¾,*"Gâ¯#S^7 ˫0T5ÂõTÛ +ðCã´ùÃGÙ"®zò^¾¦íþ Á;ãÇñK%¾ñX«\@Êp ¸õû¯Æ<84Á@s3þ/ÁÀ6òv2EWm=æ(m/çVîDp2aÀ4glÊ`¯úporSÑW\]@ÈÑ·UG]tå¤.ÒS»w%»¾6"H)~óUÀ2E["䬦FÁRìáº× @½aYvôI +ÅJØ2{apmBÓöÕ +ð ¢C>@$Ö_îÄJ +Ah[wµâÄÐÊ»J°ÁF-×aÊ÷kèÅFÁ\Øv®¸üñîȰ×eÄS+(¾G%aÙ¾HGÙííhKý»·¶ü7ÜpàVÖhûj[A8*Ø05g,ã9µLf!¤6=4t®ZH¥«lr`zliØóãíÆróRËëªH7#r"»æ !$¹|bÒÂóBúd>4~9×ÉLS£ºA¾VJêÑ,eüÛ¶Øa!zDw"ѾGZÈOzÂl]¶{Õ~óí k¢h~lèòH^&óT©sñ¦¨5ÌavÎùã<ûü«ÌÏÙþé^ ܱ¨ÐÛBÃ- ¡à*Âÿ[£) ê®:9Öo\çt«WêMJ*è]·¢ØªcÒVî·»S'®¼ÍC¨µ¤Ö¦Y?! +endstream +endobj +338 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +341 0 obj +<< +/Length 2891 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9Î¥BT # C Ñ<l0FâáÒbT"KF +LÌ(4èB5MæC)pPH"Ä!X °ØÍÖU°¸)Jª1;I1±Ò)Å˱Ã1´s7¤eI((aÇ+ÓØiâÆcAÊs1'¡¤ÞnÐè°R5"D±üöTkFyi%haW¯ + +(Þbá;ø$lp4ãëNÍ|µÛEþ¾}J EÃA§Æ +çëuÚÐÌn ¦ÀRpèÜ1¶¸@:: ð0È ¯L7P\¶ÃHÆ2 £n:£Àè! B´1 -2Â×®cxï:Ê2pl¡I:²ü?Izdò9ÅkÚü<¦*Â#¤êóô³pP4#pÈ6GHÓ(,#<Âp¬ÌDÃd89ºÌºÓ¼t¥É/ã<J¼î ÜëL@È9#¼ÛFADQ.ó è1º¸Ä9£¨9®ãzvNL£È@76áhæ7L.8£tY7h3´Ä üÿA¿rZ¾²¬ëKÒ·=Óx÷±/d/ü¥Ê ýHêj§ÃÍ<A-x¥Ê¡¢,2Ò.[ðÂ3eÜ;tEDËS¡pl§_!VÁ¨hØòKBè¯vrÙ ·®ÛàåªcÙIðà0ÒjÌ2ãË:¾b3GØÙ;RCtÜ;#`ê×RöA,áÃÂû§x "¨ÔsTC(Í:´}#IÒã¥20ÓtìPTA9WÖ5kÖ£pÊ»àÄa9Bó]ÖÅOª;x^O¸Qfã,/IA¨Æ:Cr±î×Ôç:Ãvª¾{öé:\ +' +zx¤"¢w¢á¸Q_1ç5í92ü6añØ !ü³t°îãÆOÌH.ø@§´á ÄοOÒ4ÁpfÔ!b +K77{Þ8ýN."oØæ³Ù+Ífu¤9h3˰QßA>Nµ"¯3 Ð3PËÇGÆJ`EJ¸·ãÔ (r.ÉÁ@P¿ªlÑ#ªCJéC9¨5&ÔNÉêª'ùк7J];©Woì°×[G&,ÂÐþS°rqj.Â6Õù^)l&(Ù¨pqÈ +§6Þl.á¥Bðuh94 +²Ò ÏøcÈv2fUç2'¦V±¢\>=Ǽ ++Nï°ãDßaçø14h^¢ÝP@ '3(âÿÌ4xæJ<óLp5XI +?¬èõÁDb2Ö4)AkáÆ¤X®cdWïG7Û$ßx ¯Ií·¨ý8kìõï¦úSUGC%,à{Æh,Sä ¥kÕ3eyn´Ã Ò©OHx"kQ=¤ºóR +Às +@¦^ÏPÁLú¢kÐi÷?Bÿ 4ÐE§Ü<¤-]$ç)Ê""¸BqÀ¨'(£ÔáñðÇf 'I ùh +yVÀ9·¨y ôP+Õqðª]H ~á +T[r. Ø:p h1ÕÄ,©W«!6ÎËùZEÎ4¨ UªÅhÕv¯òâ\Ë©w¬Õ¢µVÊÜ« rÒ»W7iË©tÆTNPa*:H +X¤3PSé¬5ÆÀÙCln*<*cI*Õܯ38è$æcFqÔS² +äÐ,ö:D»@Q($ûÎÛhÌø1?õU TT\WO¡CuE +y¼)7Âh/ +.aCãá*ÁÉ¥¸é%¥Ö«mǺQ+?qî²'ñpÒÉÖ)U"2ÏÁþ#Øÿ¸¨ýmDì]ÜbN\Ë>ÉqnθyîeÎ@ÊÎ _ðJß%Àؤ¨r|ÁC¢ ¡+ÚÎïÄêÞ`ëz/U¯E%A;cÖ Þ#¬W²[)]âe0"E]\±µ¤²´:XN¶W¾ËV¬[÷&®U +¯\Ù¹så-jÔ|9´³ÒéZF]äkã8 \Å:ð@\B_táN·LÓvJÉD1¦Pî§(!!ÝSð@Ú=jÄùÞ± ð©I.bïªc6©THT6AÝbZêR\/R`ze½[üeÑÅg;ü¿4Fhçß¶K*Õ«*°¬MÈ$|Üû¤»P1 o|6¿ízñ®Ô[{Û/k;À +®ÀV§@ÞCal@7îÓªÖÙº:Rlñ4.TÁþÐÎv¿Õ;FN4À_!! PB`A +LB"ÎhvqðÀÉÙõK\ùïLXVïêL¿ø·ïëd| 88,S²]DίN1Ç$¨2N}É_qÝ= ëø(T*MqEp¤/)nbr:üÓ hCÓ!$ 0g4`Þ~>vÏyèdMa1&ur2½Ý¬dØ×ïOAE¹ÓFpÇtsX{rc£¤Í«:/ýÈüz(£GûºôäýçLºÿà]Y0R¾<sÈN¼gëþK$upÏ|²vPóJêFMã»fT¤³ ȧ;BczM¤§jC=÷ïå¶7BbÉ29*ÒÝÜzWö³ËtN¸²q [Æ3W§]@ÇÌÌÉæm¼àÍ Öäðå-8Èf¯"LÏ&¾*Ò%`,`Ê £h%J×Önbð,phBBêLGèèîÌÃ! +ªö4°ÚÜæb¤àM¸d«ßLúúNPñPHÍ, ÍjQ°(&Q¨,ë¢ÆJÈfoòòËÎó+À®ÊÃÀÇôªàB(Ö5èܽ/Xk26¦cmÆý/Úz¯²{äº OÄà þ>Ê©l%â*iæJ¦å éBaÊco¤¦4 �j§él épIxκ,äQ8Ð! À "òî¤ÍqzÏé@ùÃêò$iÆ) ço®äPTj°´ lGº¢Ì`êueR뱸 %QÒ'iúcY Z¥LÐ@P7¤¡vç +µ1·(/]Ä +Å,1Ó Úçô` �³ bj£ç]ǰ2ª|µV¨ + ê%zéçÒ"êʧ]®KÌÒ5 ® à¤êµ1ÁÀ¬¬jòJjøö<I à (ð +µà¬K �z²å¥! +endstream +endobj +342 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +344 0 obj +<< +/Length 2513 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9«)å4f0§3ÈÒp:MæáM#I)PÐTZ%QÃP!ã*Þ§^°X (*¢IPÕG#Sa0¼ Ê^3Ã[0 e:Χ#Üt(ÎfÍì¸(. +síI*]^0eB ¸ÉÃÏà4X:dBÓQÕk2úýÏk·Üî÷¦â)ãÁÎö`Üj^\6̹áÄn ¦ë:~3£pÆõaj:.Ã(ìÍÐ@6 ã8Ò1#`@1ãxä2 #pÂ:.a ¾¨¨ Z4Ìr§!Âæ²AÖ Óx½ Ás°Ð;n8 ÎPfðGÆØ6M¤\ôÈmóá>.+FúnÔ¹¡l{¥Áa ÃñG3%@ÏX@;C#¨Ê¸Ð4ܺí!Nàþ£ûö°ÊNÉ*¼íÄõ½¯xSE¾rû¿Ò9óCÆdc¤<¹ÆøZI ÇÌðÒ³/9CôADLCÂU "p©gI/¬´6£§#°£±A¬I ä:ÀíX(Æ4ÃHÊëCÍE8eD¦,A¨nRqí~ÖsÅø CG4ÕÕÅ3Ò©øà0CÚØ£]gZª¦9j*ªºHµ\*ú]aiÀP´«ÚaP)6xçZÉlÄ¢hªºÅÌ`@]OºÈÈã4¼ZôSr%=g\È$Â9MÉ+Ð +sh#áÂp¬/À[bζC7e¸[cd4-:®¼å +BÐÄ4¶A@ó¹Î<îÎWMÄ8Î4opþC¢An¿°à]Çq0é%P;ØÔ%ð79Þæ9ÀdnhϪ]u=ª×J½4õHì·®`oµKq'óvÕËØZ=d#av#OgÚöýÏ ÑGYþnO¢Z+|h:,ÍP8#ímóC/ÉyG4ÒÉM* ~Í$²² UÁ$ á¯Vf !f-©ü@Bàß8s`µ bÚ C!6ÎÚ#Z\$10E§0dÓtæ¶TîP ÉD¢H°Öß%0°¨¿XT!aU à`ÙftíSA@I Ê ½|A¢°G!<+I°:ØÚ fDÄS!4e¥R?±!tn +VÁ`c @S/T8¸_ØG0<ÄÈN«1Lº ìãð QòC"I øH +á8" � Æ¡O á0hC)Áj,º&¯Îh(ó&BGØÿ3¤DÑsVkÍç7&ôàS8NiäÉ¡ÚR@hcqZ&JaC(ëb¼g À¹Bì^#.ú]´©zbÊ4¬æ6£Ó*kLË p£.rUüt¨¤G �T s^«Ý|¯°@I>5¤ÎPÆÛcè9(EdÛá[#µI¦ctc/$ya îC oàPáQ[B/im¹ç*OÄAs´µ¦è#ÂX67¶S/c¬µ²A¸@ʾCr%PÈ\4W97Q=x`%¥Ñ°eÅ_ ƳÙ5e@dc¡Ý"ÉA¢õ<ɪª8ì)9§&qV®BøP+fqÚÇáÐaíÝÙÜÕefÙí>WháZ+t©é§+bCº 3V±9Zjª³ÞVnPÚ^ó_æÕrÇð [e¸ÞTÇÛÕDȨ9]o~ì/!¸3ÎÔ<³ ±)#PãÍFdlâC,nGHNæ:éÔILT0DJ-&Å2j²ÓIQÅpåÛÉÍmCÒÔ´}jeN¨QÕ$ùUKÛ²!aH*Zìaa¬3¾t +uíÊ. 8"G!{pÆriÊ2àuëÊa\üÉ,¨¡²Vù0KAVU@£4¿ +xwo{Î\!T,ì6êyrR³ xUÆ)tÕÔ*ì«UöpÊ$2$`,>XÐæoDè½ô{h » +Æ `ÑWÜFY±O`q> Í72÷¯5e³²²³³6£Pü*UáZu ¶ÁÊÜdt$îa·¹ÑZ°Ö5ð¾åldù ÐÚß+}ñÅY¸-Hö¯Ê8À&fec¡µ ¡¼;"zr \yDÎ×Î[f¹(%ÊiUäAF»µäÃɼXÎôÖÎö±mu¬õî¿Ø,Cb<ÅxX6^Ö(÷ª»Çavz}ªÁ:«-Æ^vþáIÞj¬`ùPËû29lí%8ÂúãXÀ0î¥)»·Rð¸·UÕ;ëÆuÛAEnئæmG×ðH.ª,ÛfmCun8*À¶ÁE|fnøÍCC|D˨VÕ[4»A½üh³dQÖé/Îö©ó·åGK~¥Ai¾¡ÖÞ§Õ[Þh¸y¢î¢ý£÷i\&_É?AÐG)DªQ9B¢ @g¢®¦§þ>õHgÆ¥OH.H ¦e£o&:h8¶/ô$fT\# � +çÎInÎåF¥¢h$# �p26Ê J%&Y �thzè<èϦÊ\! |#néRÖLÙȪè²Kh¶¨º¨¾ßã² +endstream +endobj +345 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +347 0 obj +<< +/Length 3149 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9Î¥BT C N'Lãr1¸ÊTᤩ3kc zl +Ì¢éØ(: +F¢I¼ÝQN®b8¤b0æ ÓnïÓâÔÄs<î7;\ôÚ)¡ÑkWØæ:T"KF1ÌÊn(º`Äb(!¦¡oËÓ ÝÏhi1¤BbKNfº¹QG9z¡¨¸iˬhºúkF£T.ë#<Lòn7fVfFÒa ¨´KõtF°°ÞÆÏ«):À¬á@â fÚ¶ãhà߸..@Ð@Ð2bàR " Ô÷©[æç9Nbä¹a¢:aª6¨;*Ò¸ì, ÃRÁÄò Ê9cÒ8¨Üã3H3ã!ÈìÉÏÈ\ý°fêê¼ ¾ Ð2ì>Ír&A\¨$í7/MdÚ6ÍÄ"Â.$) L°óß%©O¢8 9±Kôð&ZÎèÜ1È«°A Áqø@0§aº|7£¸@6£hÞ9! �8Êk³j< ãMw]Ls(ZÝUõÇYÉ[Ķ[À)3µ-*jÓÖ£uo\cÊ1#0Ò2òîÖK hÍS䥫ajÑ6Ô¸»D.·PSE ºÁª;8´AG,ý&AãÃT6£\ #0@=£ß_a9weÝdLL0âØÆBe+Ý6apm+_´ZÆÑ»Þ"ìbu%MfÖU¥l2× Ò6 ß¶#lçÒæÑkÁZÁÖÉbØõÜÉ 6C(ÝÌÎD§ç±É/, ç£aÅ,9þǽö'TUUdËfVMÃqñ÷Æ0ÝíÖÝÌÞ:yª§iï*¹MÚ3Ua Þ3Ánà2îUv-bÃ>h7§aÃܧÝ@å6X¨ÓÚÞ^r!Zõ° ßË/Ó#hÂ3ÓÝõ8>Ï]d{pA×îXÜÅ_òë¿<|ý>1íØöLwhÅVå.1íjV7¤õ]纼ÖZñz/M2/ �xoùe9¤Æ½ *l%&õsu3kX ø¢Óh(å¢tÅMÓímN¤,ö¸b¹|I2)Äð»K°lU¯X0ªç"³ÖB½aÔ8V+2L Õ.f,¦Cps|F÷<¨±Çh½å Y:L +½×Ê-Aü=èDA²l/çX×MèG¡Ñ,ãla1Üø&µ +tAÉËpõK?u4ÛC5 +A/ L +¹WBÁVX7k@Ùä¸K Þj]`0½@¦xðB¸ +p ÄÒ¸HÎYX +>8FÕ?5#9é7¶ARñaïÞCcòLA@È{"s)uLyï8ÅV«aª³rpæSË`T*$G5¤¬}:È R8ùOÒYJd T +Ì¿píù2M),]Ít ñe«ÀÜ«f°øÚ®ÙÌã§L7\lÑt«år¯â[ìGáÍJÆ6ÛprX¬¦+CHÙ+ dSµPÆìh|òȰ@p I$§qði@Á@EL9ØÅBåÍ>ôDýhUHåZ 4l'`ËSDðDsÖ¨ÏTU=Á¢ûèı´éWQÀ5Gf �èRi ²µ%/D 4hâ«W)~£ÂhJEHÊôRãñO$eIÕT»`ÒÙ£3ê<²cN·WºAIàâ3KmBIÅfá¦Òj¨2`À¢æºVÈA² �KFCÑ-Fupïó²Ïå<ç¤õÖd#kJQ¡çàJ¢.ÖÙɪ®N ¶dê Nó S +HÃÔ"BÌÌ`ü#ð®ªÉaì% 0°sA<:@áY¢á2@;ðÒ»AVÁ$7,`m +CÂHMð:¸áä¡LM1NÃXs'âEÃ.%Ââ¬Y±À*çãpAC;Dz d+]S¥Õ|¢þEïQʧun£QúAHqbÌÌEïÝl¢eD´´Ã[â`2<¨TÜ2E`9.b¨ ©R_g³ÈRX±O* �ëi¯YïpÓ˼épUxÇfo-óV< &^ �ÕÚÙ9o)°';yUùÝxnùéj¶¬ÝKÞ1m2nµW»R6brÁ+^É`4E^Èí¦XѺp«KË'° ÔÀÖnÎKûÉjå#ºLHJÁ2N>¢BXµ³NV®C o³ %0`B7&ÆlP®^BÓºz!ÖÝfªYW(þ ~·H9U1AÔò¤Yì¡q{ú»²* ²5ÆÂLPSx/|«ðÛÓ¤Èf1MßÀevæ5à(ÕÎ9v¡Üx³:TùÁ70¢vSºwfÎí 2Á¸5¼oò £¼VHsbü,W[â<QÒ¿¥Í"tγYÂ]ø¸Q3ÁFQÃ=+¶ú/u¾ãõù62Éû&ÆÐáßÁH¦Àl±µáÃð@¼ãf¼¤á·&&º¹{˨á| P!Ër=eÛËdà¼×ôþzY·ùÝß +Yã_40U4ü¹Ú-ngBº-o¶È)&í{h¨/ÅâÈ&à4'k((f¯¬LTÞL°fhY/d&Jíètî¨TåVLÞ.êìÉ&®ûÀb`rÏf& +|fJö¦dwè¼L + |$ÊgopgX0åÖ\JðÈ©\ÈïØOô/γiâ#xÅýÌ.Ëì^./\Î ¢L[OìF&qã_Ví£\.5îð÷Ä.F/Ã_Éøï¥ú0®÷@äW(THTOrúÉjiPŰöWãdãdSØx£¢[¯4kï:ýªÀÐáf®èEÏ6ãébóê8£Þý u +ºa©üLtÇ|ÈâÚt4¥úeæc¯p°Úöè(ÏDµìâó`dذ¤ê +À ñe +:«¤!MH½¾å.¤Cd(tVÀÂxp* Ç\\ÅÐ]@Æî-ìMðSHwÇèø($^)`a¨ÒMíP4íånt'v}Pkðrùpx÷ +Z{@®Ô +nÍ`Ò`ÒC �ÞÎ �¤>q¨yêã¢Ê*ðÂé¶ê ªé²x£HIÍÆÊ?î|'xÃhxv/¨8EÚxf¤.@P2¤før)®¨æj1^rI x<ý *6¥pÄe ÞUë[)rNoð-Tß2ºä°x޲鮥~UåÔT'tÛèÄ ÐRN@Pø`\ 1@üDä´é©µ&)¬ñ2ñÀæÉ°RtÒåʱÐcÀÄ å±Þ.ídW'0]bÝîS§äâÆRê.È´ÍëÂÎDNÎî5Â,+«¢B¬ +$³ª ³êÚ!#< ÜÃDºN³¤ +¡Æe³v¥1ìsEduEC q6Ò77}êmîêjxB7JLj=³ rÊ= é- ,ö + êð¹ +endstream +endobj +348 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +350 0 obj +<< +/Length 3125 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +FÐñ¤ò3§#¼äsÑhðR4 E¢U,2¨êû `0¥ÙÅãy¸Ê. T5*ª*18£WVD±¸mQ°K´[=¦×©·FcAês9JFS5¸h(2¦ãñzÎS¡9øuz¥ëHEØXÜoÛllS8 e6NR!¸(. +E)àéç;y¤ÓyÊ÷¾,Ë6¾3Ê`¤"¡\#Íz6פf¼^È!iºÐ!¸`·JpP# !»aCî!¾qDT2Åp®4ÉàjÐP7Á@î/4`FQ\[¾«Ê¨¬£l5°¬Ý(kå 0T Lä +Ð)í®Í-:°KøpØ1ªhD\·-ØP)#pÞ8cK'¯ó¨ÀºÐS +§KÒ´<3«È¦°ðP$=²CÔö½â@®' §áÂÊ"&¬8!ÓäoTã½AMÔu-OTÕuh*L`U7NôøúÔ6 MT)âuL9ãp6 #æ" +âx¥R¸6#8çb³S3§4Ó]êÔ5A¨kJ¶A¤ïÄ+e>·8æ1Wè4²²röQP3G;,;N5°£ÄÇ Ìò@ÊXÈ3¤¿©¨F ÖP[,¬ÀNJ¾ÞlÁ9ejAìðë ²¡ Þ1p9}S5KÓ¥Á �æ £*õ¾ÁßP:"íkÀå%_.Pù7Qþ²·IzæøãHìåïhïè] ¢x |VèeÁª8$|ö)yk«ðòr» <ÝA×PEÛ÷SN =M Õ ÕÚã ®?q×u¨à89!kÒ3n=Y±L°å¬m^á>¡· ;£»>z¨Éèïgìxc/¾1?óBZ¾°b#ÉG= ßá@áº÷7\üSÛô(e<¹Æ|xØüSA½¬µ¶FöÓu¡ ÅâìÃ(q®0ÜÜC o|7ÀدQÀgÀt± #ñ`¹X«3d I?íÕ +ÕlÊmlãâC|"PB¨L +& ¼0ÉÍCXÇñd,²uSÁÀ9g¡Q²ô6¦S3Wn%_ãàÍóg$®r®T£a²yÑðRZ+GaåHepmBFÀçhóW¯ ÊØ[el°çÉgàÝ;ÓÍ6àê!H A½½ÞËÁ®¤*-@i9;Ù<A>ÔUH PA¹°¶ùsqq¼:ÇH馫ªD¶29H +vÎô¬r89ðnÐüªW¯ \;7mó¼Goá<@äñ#qy9èIiÔÚ r!´2½Ù]ËUòäNzçM\¤4Âgh£#©|ïÈ×Ðú0i}¬hOÖ¹?ÏÆn/zeYöf{vj´6J÷Ì⪠Ъ8Ö§aj½Påíd4a: Ì¡ á®XÒ$c©w µÏ)êC% 43P*Ï Â¨5 Z,`7Ye\h3ßpÊÊÈ?§ûÖ¥³2=¸&f¥ECF<@P¦¦¤,¢Ð G1_L®_Æå.Q9êjõ_ ,ÄL}ïØò1 äKBHM +)Ü+ °½ÿ*òÆZÄ]VQ~ÐC¸x³¡üA>j"ÄxâlO1N* �{bXW *' {¯øC!$U¢â°¸rþ0Z ©HS(@è=úÀ{=ÈÕÚàjXÄâ6@Ø¥ÈVÑPiM1§æ¡%¤ÃVdrnKIÖÀØ ü¢n8Q®Jw ?æm\XͺY6æº802[×.æ`$¾~ïÍQ:×ë¢ÇùâLmWbîìà>fµ<ZJUî²Dàâå¸2gncX¶;{õ³eV9cLA²¨=_#ZbU¬ Æ©§÷WQÉ1Ìöp{\Â!M@Ö¹ ¤ýçRä¸gh t3P¶Z¸ÚéëÔ¹ùÙæú^{³G$7<+$¤ô Ã2HgóápÿUÑPÙ,ò4ªý¥´ÔqMÈ[r$õɨM|T]Ëö4-Žïì{H98åèÞmø36KPCÖóäÜ·×û(ÁÙÙÉh!êÏ¿qß1ËüÙÙÑoE¡÷fÔµãTÂTâ0á,NSÇòa¸×JbrZÈ þ<9rÂÜï¶F² C ¾Í%}ü +<¹ÛS9¶AÊË4Åô7*é]k´¼Z}Î×Þγðç!·]/µÌŽ;úàÞ¨m£ Ë9Ëò¸çÆjØpçq|¹ õ½jéæs®w9ÍFðÚÀaÁXsÂXNôáR¬¶ò,±a!¥ëe¤æì^ÇyIâsDN44;>Õ"ú¿YÏ ³±>:Ã@o¡±ó²6Ü%]ëÞ\BÀÆÈd·dsÐûí·áÈopeÐ4ðÊx×S÷uR+YêoL!L)©ÖÝ4k0t'¦i^6üHõÂçä Ú¤h"µä !0" Òqïú²x Ô;&z®»èò3èóDoàq}}ãÜüQÒÁyz+Vpþ®LQJãü{ï$i,=«}jDjï¼2®r/~ó®|¸îÀù +`Hª À +dt¸¦üªi/®ë²ëo¶¹,ÞæfÄýÎ}*âDýsmv° ,òð¨$j)fpk\çNÀ´¢ì?ÇÇM^£ g¬Xˤ`APâpø0ð$`¨ +¨¤tЧXd/¨ÁPFðPLßÁO§¾ÅM´è®^AÀríº~ëØ[åÂéåÙʯàêlÚÌå Aȶ&O<êhs Ð ¦Ð æ](fÐÈøÀ¾»`¨ ¤ +``© z.[AO°ëP{GçK\(Ûn¡æNßÅ» ªÚíZÑ*OkÓ 2PG ®vÌÈÇ©-±ï Äî. ¾ `»K¸ +ઠ+ « Âí²"Øvê>jI½ÑòÑLæc$?/zèZkKhèc¢èÂ;àrMLÔ ò0´`î + àÄ?èïà $mIJkæÒðZãæ¯oÈ÷ÈúÏ)ÆÙî«IcjvgÄj +ên÷ÒQ®äã1ø + �ЪµÇ®ÞÏÒ}),Íæà°CÁ&ªãÒ¯/×ÜïäS¬RtéÜvò@kêx§BìÃ1H?1°iªw2&Øàð°Y1¶2RÖ2Bk)# �TØK@ +ïUùìtGO4ÊV+àÙDBÑyâ2 Z`fò,R¢òÔüÇJPC&÷ÂÉw2±42F·/ ²»`»¦È-<dEJ" +endstream +endobj +351 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +353 0 obj +<< +/Length 3032 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9'EÒ¡* ¡AhÈ\4ÐâáÒbT"Sá *f +'#)¸è'9æqÞwYgC ¸Îl2 6ØgNfS ì@o:§+^X ÄÞlVK5 @c6l§AIPÕ*ÆÆ#Ud'¯.WKµâõiÁaÙÜø+B4§cºpÜp3 é§B`¾W$ò¼ìn4CEïp:MæáÌàe1LÙ«N$ÂtÈbM~_2pï#Ϧók¶Ûî> eÜÊÇÌ@R¢(ÀRªÜ·mHà«Jâ¼ÜÍ,ÏÚæº¿ÌxÞ3>ËRØ·ì4$+bø& "$ "`)¢sº:-t6Ú UF*50ñ=£HÏ à7ó¬Gêe +C*ð0°n ¸LpÊJ)ª j¨¤í2¶¥èZl' ä!P1'ièËF§ÔEؾLàZ zwL?s(ì4c(Z1»c Ê<=ÍUA }Ë#bðù-lL:9#jó¨²lÍè f´hTêǰzÀ4 +ëlÖ¤[ +[l7º¢Þ[°cO/Þi¬ ;Y#ªó2C£6=/;1.c ½êÿN³#e5¢rËyªÝÃzNîõ 0ä%sÉÒ ²)Á°ko^X´½ B%Í&MuÔ§]Ȧ)Gêüî¨cså#@3"ÓIQs¶3ètL#HSV>éV ¥?iZç¤ÑWæõq,N bØ9ÆÃÃÏÈî´ÃoK«-#8ÊôBZ)ÀrA*¤.^¹Ôä¨ÞÙõCQÔµ=SU~:ËÆ¯·-;$j¼ºÃxìÅCHÉP»¦âÄÂV"±î#ä9Nd4ç5]×Ò +`' +<Sj@±Ô»-µ#0Ø0é[k£rÖo^¯Â§ì;!¿[@4_º/¹Pòì| ¿[è´?;;»bvªÓ.çÞék#Îí~M¸PºÐÿ×ÒóCGl6Wæj 0j¼ Iðoæç1x0OS ZéD°lUY³2¶@äÃÈW|Ý3¦@ÌS%äI¼÷A©zø39æþjþYFÈ µÄJí]¹X{ïYËàÌÃ¥<§¨ö@Þ|ËÉn 36ï +`87«^Tº¸:{P;ðÄ[¡ê ¶v=ùkYQ î·3!Pu>, ^eã �W# ZÄ(Zm*>5Eö%~2*ÅË5öÞëîiM4;[1AÛkí ±¶Sþ¨¤TÊ ³8ÂôwþSí´0©"Ô±=SP4B¶Fòôv¥qà! �ÜÓ2hMLÁtBÀÊx8q¸GHìK0òòr2ÒØ3PÆ2¥Ä +'xtMªx¦Yè9J&%Ör¸Jþ=Ñ7X®Èº²Ê47 ®d3Õ h=¦d6¾8TÌÞ<nmÙ pô£lÌÌæLÊ%ef¦@!ìó6³ÕAGM<F¤^Åþa*L Ó=}X0ëM �Áá¡4;Çñ È¥ÙèJ&èvæû M)KiÚ±V¬éÔ`Ì*0æC®,(HT$áæª°öªàÌ:'¡äÐ@2(EH±;zò[n;^¹AL$$P8SOÐ4èòX*51òÝÐiwëuQeEÅØkh'CÊb¹2Ø©Wèa¦Ñ¤4§0Ziå>±õæEÛ5R¬r«ÄÖÃi «H2Ϊ®VÁÚGg²O%Å<D +3© à dâ Qù%¬8¢v³ä¨VÁïJÀÄ&èCnu&®.¢-©! �Ü,ÿ Æ2òöj6åçM7«yâ/G ëW`ÇM à'Ù÷3ßþ[È_èo6 dx3m1QÅ ÈãÀt¡8Æå?<xC7YĶI"ù2h,$©¡ Ã.ÐK«CâRFñFÅx¤bºñì+úH°k¥A(pݫԠ9,±"Piíõ ?Ô'P¢75\ë® °ê+Vn³¡ï=,·p3Móp±må¤ABT/¿F(¨h^QÄ©!²B4Bs*¥¶B!Èì-ÓFP6¸Ð¸k¢NÿGì"o¾HÑTÙ �Çmm¶6áu°Þèìg«K á<&¸ÀBg °4@ÆAÛ ÝP·ëm¢uP2OM966å ËÃ@æýCIØWO ¡Ó 3Ókh2!½ ¥R£å·0˹èÄö7>°eKLá+.X;6aPðk4Ff·g¢ÅÆÁñÐ(¾ ÐZ¹ðïQD£SÓC~ï´s>ïNíþ=5£á¸Êŧ2Û¬:f&¾ó³zÉé¡¶{yO.R±«iØÀ}Ocõaª©aa½µ}<- ã¡7ÒÄvmé3ËIJ2]¨%Ï g¤úF ¯OÁ ¬üL.>Jè¯#º;ï<T d+ð¸@P¸¨)©ðNðúMXðf,DBïd«núfb8ÒËÀgà~Ϋ/ú]CpýÜõ¸ÎK �ÿdÒWzJFôëO+T%ÃuÀ=°åÀP@0ÈiLhôÐУ¼ é¶CôìâÈ¥ãØ æ³É4X@R¥K¥P-ðäýõä.ð0pê« +ÀR¢æ`½J¤¡ê"¢d@Üñ-NÚ£op´z*êâp°øý$ã*Þè + �PbZÑ DñNîòL%<ÿPxön0N(NRï*`Ï&;ÌÁ¢òR®lIH;Ñd×¢ËFÕð%È.¤` @Ô?*"æ¸+ñöC Â>2_ѶðäBFÆÁ 1ðü 8ßEBQBú® §"ie $ n0¡K¼Ð«ÕÎòð°vÿ¤ñJdñòKjæD¨*ÑÒ)øGÎó ñÈï¦ã,FÛ.®×boîÍÆ¡-*Ç|Ïr`I®ÚííDÉnä!)TÞHÜN,ª=R\³ôË¢ +@ª°lÔìÚ®ìàÎLèÎÃÍcöËøÀ ¦dã jÐÎ:ëÚçÐW)P#`i)`PÓ 5)îhÚí@æí·*¤¬¥òÕé5/,Bê²ù'òü!0LÞß ôVÙpìm M¤²ÈkNk1îá2-J!,Q(ë/åI +pª«#þ,.þì~ïòñ`à +endstream +endobj +354 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +356 0 obj +<< +/Length 2882 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP 'eÒ¡* B¡A'¦£1pâ<7ÃÆQâ¤0Ç39pÀaJ§#¸ÊyMgå#)°Êa9H1M +"ÀÁCQpiÅØJÄgB°BFX!UQÈÔ\4qáéð¥Æ ÆXìÊ4Ã&¡E³ +1·ãäÜo8Í';í5$¥g¢Ñ(¥!Xq°ãQ®ÙlöJü.Ò(!ÉäÁÒíx½ËA\D +æã °@H½üL2à¤vS4Î)lûJ4NkA4ìZH:¡pb;*ûBضkZÚé7!v"£Æ9 #è4ãs¿ ÎC:9îj+º.@0«],Éd Ð2˳ê¨f %"jÙ 2o[û"À.<¨àd§!rxì;ã0ê7q<R2o:ò9¤(ì4c(Z1Å# Ê< Ò3 #(È #të;ÈÌÔä ÖÊ.ÐnîC÷JÉt +Òª=NÇÜFɲpä0£-9ÈXÐáÏÔù?PuBPÃ@Þ:xÄá@Ë j2áªÆ´¡p¥LËÌUë �ËJr0ȪhQ2c-$ÝÏÍèxÄ:4YöòÚ!Ø82sÝ:cØ6N£}'"ZE/&KƱÕmÅW6w5TïH=u, ëí½"2 ã¾QTl¾Ï4=?VcôýË *y#h ã¿RÈU1&Â~;©R¦X½£Ä´æ¢5LÏ#a¨i2 +¹,u5MpÜ9ײ)¤bÚT[¦w2»Zù>ηj¶pfĨVí¿¼;¹úa +]AEk[×5Ý úO :NÒ Ð0¾¶3br-¹|PôMFÑë}ð;åù{ÕH4§F^ÛdŰڸýÉÂKEgÖaáBÙám£iùIüã+ßô_CÖ> Üw\,%Ã÷V<ä «¾1Ç1ÍмÜévb¾'½ÏÎÈ_a0 0¦~Ct%Øû'eÃC¡m µ)&ñ^#xà3/ÐØÊg +mCL¶q§- +åÄ z¯CF¡Òä] uM³frá,@F¦UEÈWYfo@)ؤH&ÚºM¬ ªT *`0êÓèsiª �F!0)X@RD")Ñ ¸j 5ÄmXÂãCPɵC`ÒE8Â$ÈhâZtªÉ ;¤rÍãÙ¦°ÃE¢9¯C +ÌÛ´:nÂ@´ºbÞ M¤äd¹Í'J"»]ëì`¡©¦R +YZºeÏUMfT&«UjðTôÈT$ T*ÀPs,QáblsI¡!¨jè˼!ØôbéZ)éb¦#`T2! � +2Æ`ÁJv¡-¤#%<!|³6 °ª ¸ná¾8 +IeK9fJ3"ñvB æd-) +çÙé=gà!£ø![`CÌxäáÒ²Q£bÆxÕ~D³R#ÅIbUÂy;q¦B´îOd9IÐó´D(¶©ßÀU19ÔÎMÄbª;cèù*6ä¹)¦4å4 â×ÒJ¥\¨S]¿NR¨F¬rá,.1Y¤Pr +"|]® §Eî +Í£L%iàKH½ÐZòÓêP* BºU£µ3 R¶tÃqõP* Çeh¹dlòzC%hºªñ_$Kb úu3 -o.¦KlõvÓ©àSͦ]Ì9Z{»ÐjQ!Òý/Y$t æÕìn TRѶ¤2òäïºyO +Ýêv¢$AÕ˨h¿Kà +]XËä¨g)¬2ðÄCkÆK,úZ¥ �ÊÃE1|³ìõwh3©æ}haÁHáìÁðD¹7aã'QH,ÅX±q+¾çxsbH§ +Ää×yñQÎ)ò±=Û¼6¤9ÔmÖºXÖó +¬ �lÄæÚ§ o8-Õ t'ïÙh½ iûØúfµ ܽçÓ't(bH²ØãÂ^gâ·b6®ö Ó¦0h˳.ÏÅ%s¥)+©`ަܷÙak7ÏW¨SPTNªÍæ±XZÔåL;½O7nÏlÏñ@ÉëBèný³¶©ßH[±íê·î¡`Ë%,KKZàÁÝÙ¢Ìϥκé*·_j+wÈ8û²äµnet@ÄݹÐbÁ +×÷»x¾Ç~YWJ@R;k0ÅäÔU²Qî±;:×1ÙÃNÜÅD$ �à¡ä¡rçå¹Èݽ*4¾ Ñ-`X¶Ú5©Ì8:¤F°^ÑMi"X5ÄêT¶8#·ÎÜDúÏ{ØñeÐM§!â¿øÚ°*]Ýp ¹ÎëZ/Ê'ÑÌ1+S`LQO«½mEþ ¶bª@[ä6ä©ÓFP8§ °Obãv)K¼ª!ªOÆr4ÀKȾý÷Öq³ð;EÁ~_|:©Z0Q«}±Ñ{!kùøTjtöw Ù¯gf˺u.Ì0g$ì²ÀvÃ; JvÎn1f¼|ËÚäíä\ªx¿,B àòQÈ ÀïÀÊíÌÚ`ÇW,Lèîþ@@é"s,./fØ.Î@l, Öi©*î.$ù-¥¤Xß(~F)0Fú:kÔ¤ ÎT ÔøMÜSÀUï²d¶ùƸLFÀ³C¦xCh´$Þ´íl +Øf(]ÎÒÑ 4µOÖNï\Qïøüd᥷eW P°Â ¤òð|Z¦ènÐØxw%@Mh¼BeÜ#ºÜmʱð +P±I¥¾¹GÒå ¦ÞÞËKÆL f¦Íà%ÒúÍPô +¬þéhÃÈËî÷HädQhÕÖñn ¬EO¡ÈR+'p6)>±«¬¤8© å*_/¢P[êÆò)Gã6±QÄ£b×¥± ¤JÜ©n r év©~%ä*î¦ Êù 1MDîR D ÉIJÆâ):46-«,"¸"Øð_ þdâøn +0cX0ã0¢.¡}j 2¬X3(óIUªÌ r1Iß#1çÒ:BQî7£~8# 1¸9d: +ú +KT +¯$ èªÃò¹ÃìX¯R +À ò´ àÚ?£þJ +endstream +endobj +357 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +360 0 obj +<< +/Length 2943 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ AJ¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©ÀÄn4§t±ÀPD2Ìg#IÀèi7 4*$#¤CAQh? ªa¨Ü"¹-&6( ¨h2%CUKÂðQ±ÀÖc'"Aµü( +®&S¡\9¼íû¢ZY*ySS^d*¹µ|f:w{Èêp2NÓ0 2NÆZc¼öÏAÂs2SI¸Ìo9{Wpêî»ëXd·¢°'+40æ:C«¦:C(YÁ¡@æ8£Ò3 /1AL2<¯jTªD!Âãµip`¤,aC¼Ì·ó@À \¬8®;X¦¹-Øì ¬Ó8Ï7êH!°o"¦¾ sä0 Ê9Á à8 #ö¼Î¨æ:#`Ø<Äa@Ç>vÍ/ò Ja].$mCU#µÑËdø6»rÝÉíóC)8N%$ä5òØbÉËî{¢é¿óû +ÃsÃ2: ð +âh¿ÀÐ@!#ÁQ42cÂ3³H2¾ð¨AAÏϨÏ[QRý¸Ð!°F¬pÊÒí£lÜ7RszJ,нF¯Wjʺ¨7Bô<å:NØx@6ÏOcÂø ëÙBG· d#í!r4m{ÔhP7CV=8=ãß;Qî4»×CÂñ¼¯;Ò2½apï 3Úî Ã~?9Ïîíkæã[çæmÐ]¨ÔûF¦)È&¨É +¢¬Á¨n9lz¼©aKʳíXb-i + Ãq(kÈr ¢¼1[@h×+·¬o$²ÃFaµc« +äáCÜ2c¯Ít?HÎúϯÄò<Ï@ÜõHYÛáç1Ípª& Ý;®Ñ&¨lÌ)Á¶©$i¸Øë2ÐnÛÀP"Cñ¿Q4õÃìIÿ±(D¹µàß{rrónë2vøÊ~Çäùjpj"Dmưä +³{%¸!½å²Mf-`Ð&pÊt]j-v¾CùßH mJ9¶ÔË{«<¡ 9ÄS©w.+ð¡p\eØõBho<0Ñú¿t¤_Ñ $mà´Â hWà&%ÀÍböæ PKx* +A:6Á<9x4HS!ï¢?÷ [¸ F¤! +@Ì +!3ѯ½Êþ_ì"yàåÆ=(õA¸5F,0òÓCsi0i8á)} P`ÉLen@"p ëè!Æ@ÎnA¶ 23tâ,1ýþW 8!æ:)Ùs4-H1»âà\¡v?P¿Éh<áH¼q Ѻ"Ã1N!¯r(ñáø9Èâð^n9JYV¦etD¬H¢^aN2YXîQU±g0]ÜPç üGPvÓotjçRðs ÜþºWNW> Nµ¡´.ÒCÈRJæ¢ìJDð\FÖ)2µÈK@Æ¿ÅWÕb°të9É 1¦S¶YߢÇüðÐÚR0fS ©¾Ñ3¶ Yû¬P(m¡óÈ h r Ô:(ëV ÔT-*/D1Í`6,,¹¹ôܸӬÄ÷S:ÁTic +ÓZÙÈsM&\ÌÐÚW(>eÒÕdâ¸a)Á +ÕàÒµPáÀ4Z4ì¡feömÓW¿ß´ºy2ñèH¦Fãd¢)¯RdHë3Ѳs!ɾÒÎ`¦»æ0Rà]7Ô6¦ÂwÆ8Ë<ÄôSØÓåJ +U.é½ÜÇ6wÃÃB ´ÌЧIgùÿPá±7Ú +Á �Çö(z@ä8h¿Õ©3Á [y)z0eå\Zãw.M=3ʶNl[Í84 Þ=Û¨üò-ì¾*fGÔôÒLWºïe¼½Ç¼ê¯LAû§'P7+ä÷Bwâüñá~ *ÝäËTpmCdq¢ÅÈ89ÁÁàªD¾jUt2¬Ø1pôæÊív ¬ä$©£u.^**,İa 44ÍÅEÃy .º3ƯA"1°8Ç;Ù£À +Y$yÛ;#7 +é¹6ddK>S; nËgJå× 4hO À!ê Dë¥I ÁL*- C¢iÌú ô/´%nÓÜ.òo¤Æey\T 7²é`×ÅVeÉ\KuaóRñ]5XL¾ÈÔÌÉ£)N ÜHTÑÊ9ŵu£ÝÊmúÞ"Ðb§ÂF§å¦êØÒq?r?A¯c}BèFí ÖM +&º×zk¸å=vKL j¼¯29¨3'ëÎ +ó'ÝFðh^>q̱Zö±ë%#D)Ák#£¿Ðñåæï6#0Ãl©ø^}.ª«Nª êªzcæ.»NKqÔ +7_{:½Qv¨äeOyëéu +Î_ÖN?SrYL%ç»´ÜäÔ²ÒNÈpræFkØ9ÓØäêÐb3>O +¼øv·%±Y'Ì÷fÚª\«÷ +Ô8=ãÆxWGzbª´0°jO¼¾ÊÙ« öÊ â¤ ¹¾¦@üÊPó~¸¤f@¨Ö#X +'褤2Oöö¤xC* Ìö ®(a)xn--t-cga.xn--bda@êèd2PlpAÇ:B£å²j¶: Þ'h¼éÀZÃÀäȬäê Æ¬N ÄL`äPÞø ÅϤw Äi«|0¦k¶ �býðPþ/'X]¸@$2d £È°jjÎËtP �ü ¬øÃ2ÿ äíG;Û%nÂâ|?C²bv' Ñh¾æÉÌôâÃKõrã ®ãmôeãàlä)ômé¼)Ö s úþD2Cä\ Úõäià£&%ë5p_Ç* Ç ÃëàÓ$Ä/ å\÷£üÔ°©8Ã*bÃ<&]ÎÔ`ÐüàØ>EÈP¬óÎpànnxÃRAç½ Ü ÊeÚDª`ÏG/¢Uªµ «dðg../Ïã2ã0?¬FNÂò[££ã íàíä!)zlämò¸mö¸âØo+sNÍàì°)c»zP°XðµÍ1`å0Â@g&ì¬JÄàæÅ2hw.ÊwkÝ&8sÇ@¾ªìç\ªÙ#Ú¶Cú÷f3ji$,]?¬^ b³Å0P¢îKëj~±¤tV§|xÂxâÇíæ× +§ÞɬÍâª{ɧº{òNÊÊÊÍq&F 2âÄr~PêÌ(Ð +endstream +endobj +361 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +363 0 obj +<< +/Length 2882 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +FõѬò3 +g#yÌæ-)LÖá Êr2fS¦G©Ð\4T²xÊ¢7ªWì2=ÈÞp<Χ#¼ä\"ÁtºI&3y»QªÖF¾Ïk·JªA¦É"q1j3#Ãa¸â½%càQjÛTáFëy<7Æì5E«1ÊÚ.çFt;# ÁR8®:*¢å¡*|«+ lApbÍ;!¢Ê³!¸o-ÏÒâ)#s>9,+â¤[ÉÁBü>¡¢º, «:! âxÖ·mëhÛ@!@È2ÃX4à @<6É'Ê! ÈmPvá8LÇA0Z§**¸\¬¤>,¬ÚÈîü<üD+ÊÂcÒ8Kjö±4Zä1î¼bëÆl´òæ£Äü Ì Ð2cÅÅÊk¢%$uR<Ò~Ô¸.XÆ@èÚ¶ýÖ( Z±Ô +ZÏbBZo@0êÁQ¨@2H#@:TáÑicÊ1#0Ò2 ³<HUhUZKh¡X RU14±¤iúÎTÂÝ£(è¿à5YJNB¥eU5Ö^1Ø e!x½ÙU%¥vZrdÑT[¶ýÃqÜ·=¯lâ,UíJS°`åd.ÌQßÒT1æ¸ÃAv +¡©áp¥äIxacC*mácArl£ ¼9£bõ) ÊJ£rþ ã6gT[cv36ß/£#Vk¡YiÈî4eÌ«÷`ÂÁÜ£¥ xÏ4<7*1òTvíÜÉs]CÄaXf¿ÅOsÀánó !T-§ç»õ@ýèD¨Ó.8B¡pî`úI XÀ§ûUËzuù¼ +»[Þ£ÝÐD·àkÞï +ÏsbT>íMvãX8:.¢¥¾wYû;¡I¿) +a§ùÔÄ¥-èRÖXrz¹á¢6\Rý_ï´#4b]Û#¬:^a)̬¤6f4Ð Á¦PÞÚóënëÖ·` Ë>wuߥgôõÏÃÇ% Ìk-m"·«`{SpM6©(Á"ýXmIª/àÒÒ0¬i¤!R"T]³Njú.0b JûÐeâ÷¨n0 °¶6ÊÙÛa¦mÁɸ7'NéP2 ÕtÐPô¤ltÑ:>0jtA|íJªG¾¡|`¸ÌI§èÂò;]@x!"ùQ®k2óc¸n2¹°du¨4$¥ÜJx¹ �þ?d¤Û[|{e Ö³H(ìÐÀŽ·ì©fn°üÇßD]q.³Y°AÛ|ÏÒ*+µîXçè{°zZBÒ¼cÓri ¹%´µ¡¼ À¹¦õxÁp6îØ*)¼Õ N ì<NGÒôèï0¹YaalKÉÎ&Ó-CzÍ &g¹ÊrÐsʦJ3hÓyy*åÐÃd=gPÅeî¯Cu"³¸âwØ!¶ Á é,6µÉá> õ¥Äå8x×äT +cÒYVôhMáP" ¨¹Ñ¦UÐ ßa\U=à(¼â8 HôÄqÞ«Z®*l@µÏ©X +)ÈcZ!¹k9ÆìCp«AJ¡R9Å;'Óêªð4¥ +AAyÒ@»4½ÑSU:µ5:v,dé{¡&-Chè=e¡ÁezR09Z@@HXR +¡g2C+^ ë°98:ÍxAã¸X#Â-§ÛPw$u +§rC¨|[ðPCt4)Z rº*(Ù¡{¡tímØ àR«í¢hë<µ>Nê¸2ê]ËÉ{]Eô¿»q¬]É"·-c2FtmËõAÚTke8²£Ô.n Sʹ_, +OÙáÌ9Ç@éc5@~19/;xåAÄy ps6¼Ù/8|!óÇ ¨ !Ó¬qà(D8"Z¤n:ÉE&) f ³?3ou#ãZkÍ '@{' +ò7à¥5Úí"ÆOôÃ|â¨Å¼:ªu"%ÔJ´xrê´es �æ÷sÎ{ϪÜÕQãåDfå"xÕÜï,Õh©ÚKÏFÆZ` )£0t´T ¢á¾&ê¤.a<åõsðìTP5jêFjºÌ vvØ~jrGi;V1fõETv¥&q½ÜVæ©Å*H·â̺îx9ÍTS¿©ÒÒs&f@ÚC ¬AÉÒ¶¤éú»§%Ø7®'$AEY Álv+#? ü*øÓÇ]«å"ûå¥Þî¯ÇJ~m¨s} ¯Ç0ï;BÀÐY*åÓ<ÉÐ&²çB¸ø*¨éÂa;Ørákb6åÉL,)àyòÖfuï4Ò¤`õ5ôÞζûjÉïÞܹ +[DF¼Í¸?¦Î«©zÒêáÎíÝÐçwïÅú¼«ZôKÕ{/pl¾Êú_`Ëø~GãöÿàlÎ02sÙX(G ܬ øBÔ:Ì*ø«Ã4ÔéìÕOÉlBÜ,)èàÙï0£#j¾/î@ïpÿOtÆ@eê"Ùí8C-¯Ç¢è.Âð/Bø/à �#D4LË`A¦äÃr×ùãJ4åpËèèäìZöìÒ!,ÖUââ6CtÒìè-@rÎéÊ=g¨ÐäB¬p r|ê?Cù#þD@câ)-¶Dÿdðä÷M¢C¢ÔNÔDJDäRùPÃðùÍÀÔÓJF3¤¾L$Æ +à À + +`¨×Ø À®å±@ À ÒàÑ`@@²¯ Ì +mÀæ æ +þ + è¾ àÍxÅ1lõ±¿1Æ +QÏDÕ$àÿ-¯øÝ©.dOí:PC*Ô,òÛ%sÑ@í¼Õ¢¢& ÐÜåüð̱o+<3°ÈäÍìåCìå~û&ìQ.HaïÈnÉ®.¬P`GTkªkåÚãjé'þǸw Ñ1ÖÞÇCÒ2;/~YgP¸ó¦\©§FÔ0i|Ü`p~O,é IàÐMæ e¤pg +ö2LâlXPÐ +endstream +endobj +364 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +366 0 obj +<< +/Length 3165 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9Î¥BT # C Ñ<l0FâáÒbT"KF +¼Ì(*¢IPÕF#aTh*69E!uPÂ]PAÃØ°O)'CÍh¤Bí£YpÆG'ºIë×aÌg§ ÈÂm2§!§ +a ævHt7&íË<yÌÂçE :'A´Âk2N Úo7Ìf¿A¹Å.ÌøÆo6ô#§) +htPTò 5¨ÆÆ#NG#Þ¸Ç3Xº±0Ë: +´lRÁ f¸² +Ð`¤«Á@Ä!0c ÑHð2,£¡00Æ¡²$¹¦òpÔ³¬ûBÑà2cHÌ4® £hÅ7Mä*ÔÆ59άc¨æ2+h±ÁC²=kBÕ©@R2¡Êä¬AÏÄ"¾/ÌÈ9ÃÌD¸¶Á²31®jì®"£&2ïË4?oê*@ÑB+Ô¢KP,º\!¸@¦*¤Pº®óì"1 +cgͰ.th A«ªóWOÉó8Ï4 tcƱ¼s$¬qä} 7c D7Wrt¡)W* -%)IS[;òôME#TëmSAÜì»ÌËÔÖâ/à]R ²ør.4ÀnO¯²¶OKÒÃE0ð#q,O2SÜ!kÍ"MvÝ»¢;VÜx5^4ÍRÕµ±`Ù6ënÜ·më$¸wCåW+ é:²Ç Cùe£K¾7]wëÜ.º7yÞ°r»}@Ýÿ.£aÀrÇÓv¦¯Â¸Ò288tßg#|é2Õó¸o>³1[g(ÑoeG-´_ÞÖ®.7 (Ò3&µfUN¯½ºÂ +¾ÊVqs\ 2¨ÉCkX±ñ¡ ÉΠħ´RxnST94R{dË/hb»¢L>o¬©®Á¨k²&á@Æ:¶Ã+Zs1DÜÒ;4oõ÷ês^;ÏÆ=³ÅÜ·Jz<ýIô¯çú>³íÆJË" ËwÍ8 AºOÄàã^ST'©aF ähfA@oAÐ0¹4¢`gY+õµµ³ÚÁÂR L¼b¾ÍS!ÌÑÐh^ÐcapÀRÞÑSiìM¨¶0µÃ0u Á:9ãit"JáL& ðHC á8ÜH©ÌY`ÃCfêÄu¾¢\¸Hn^ °T«ÉÂ$)PÊPÐsÙSBb,È©! £s$ . ¡¿b\MtÊD'8ƪ ¥uÃa¸rá¬wFa¥7nÔ14râHl?Á$Ý¥yA"p ÐuÔKB`L4¦RI#Ih Ü~ZÉþA ä0E6Ç6;Ô@ß$yr$^J& +öN t,Ù@sm¦NôBhtãÅåÚV´Îõ +Ψs`¶Dd¨ L¤j{ I$¨|ù²X©]çI/ACªBK;ùmÐÂÚc¨}H +Nr»úr *£`à%E(Á@U ÇvZ!ÐZ A@i'u=PXÐÝ @¥B£@é#)KÄ>JNV$ªªi\d"R@Ì +!P9G +!ã¤v¢` *ñA#zyªGÌÊQàQps³ÖÏtE>fù?¦ÌH9(»/ø æZ«¡¦²ðÄ«t< "P ÚÜDÈ|ê-¡ÖÂØÈU¡H8¢ÖAxY'e§ÎYá(ªÝ-aà*Ð*e%m* +L=£1w¾Òa-àŸ"õl(a Ò³[{saü$[©Á ëáÃ@r +&=à,VR$ó ܱ¨AÉ'±WÎÝh[¼3³«ô%Xt4FæÿDǼÒikKm³L8 q+t@U·wU Á®%Z£2j%Hdg0ØÙPX.ldÅâ)¦IàÆÃ±wâPÇÌæ)ÅpjâCÊXÎ44(¯%踨. +R¯ÌF[|!2NPE¨®F/pñmoÀWT¼\zÅ ¡T8Õ«îÇeAA¨qµc$ä½6ÓZc-<=§ó%n?Ú~÷éÄÝÍc8JúfrhYjÄðSi²yª[*ÂàPå\L +6´<ÞþðC):í°2kIigÒ·L 5ÈO6ác#,ö;ÚOm)-£b´Ò:RÊ|Ùò[5/fôhM/,y63 FÚúá.@t[ÑLrÈýéN$vïÍû¬¡`Â|²±pm¿j HòN<]vs5é³6AÁabl%Ãc¨Îûfø¥âíñ´¿Wð(oüTjW;<êàwnwéxfKÂ9~ѹJáÎÃXÈu/9=/èm`¦Õ=ùf(à¹1öHhCozèô(TkårËÍ¢SHÔõá:ä TÀÎwÈi5¥5mTº|SCyçôtQê>_b¿~:µÐ='Ü +¡\ð³4ß,½óÿ󹦾ôâ{o20A L"øH×r¬EÌ¢6*q¦ ®òMàyPQ<¨róI»Î?hïAiþNöZ¦¦ +(:ÄúÞ·xÀ±#Æòeðº2Ï"y+,¤ ÏÖ_Îz¼©öoâMħ&.èN4®ÌNÀ¦ "F©bFP= ¬', +ÊÄÊ j°êÀ«Ê°ù`@Bv«; +*ÒÄQ*à®E¢ÊBKÔã*Râì¯Ê¯Ë iÈLô+RNð²cè*,³ �¼J^ýËÌþB)«ñÏfî%bµË` z`° +#18`R¹úÙ¬¤Ùâ赫^PÃL 1#à- +@Q[ ä¸ðR³ ° D¤ü(üºÉÙàd»Dr»«¾ÍÐÀoÚDâ*£äþ¥¨hâ¾½îx°8bÎ0yÑ!PPÐhLAD&%¦äjÞ°t5Ç$X7cP5CX×îd'¨®PÀZÒ\N0 Æ¿nh/j¬J:Y´o¢íäÛÀ`_" .@/Ø`¤C.ÝÒPÎ6E¬4´ÈîEw¬ ,^.@ Í¢êB>Úõ ²²:D×r/hÛ`m%2<`Qpõ¦¸©Uäö>r\VR`Ò&2Jò Æ.zYæþU Q«ÆømΧL'Oìq¾VÒÂ@Ç!.Ê!NÞÊíªîîp �SiÑØ¨ðDCRøÚ£ÀfíÉ#Gevácf7f8B@ Hfìc-b'`'Ç(²cw,²»Ä2'"¦xØ$B¨j®.ñÀ,)L,Ðò>ÏòG*ÂÜÊM×#Ì~^X+í!0N]h.Â#'y1ÅbÓ©X6#Q8fu(Ò)Cþr´i $p²:`:}<ES;òèÞ'ÈÃNcrcÓñ"st,ÞY"S Äã¿-cX æ¡Jâ +endstream +endobj +367 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +369 0 obj +<< +/Length 3122 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP 'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àP1SsÊhÌb()NS¸æ)¢Q ¤jl& E¢U2¨ êuë �(. +E%CU$¥`#r9 5ÉãëÓpTä@)W+¥Ûn1 + + "©Á4¸â¡ Ë,4¦áÀÞi7ßSÏ2NÆZc7öL§ æ 1 '`Î ÝÍ>vÞòÓ/J¬A°nÖ¡mxÇ%ìÊÊ2ÌÃ4Î3ÍDÒ4ÍBþ5a*AMH,ÏÃxº½â0& +n0Ò@̼(¨ Z¤Pò§- +TC¥ £ç:¨ë;Ó¸7 òS½"</Êó½#£Öö½ïæúÏ»òýÁsFÒ¯p6°Çapn,¸£.̳lë>ÐÌpÊü¥A¨\!º£7,0lFØ ÁlDª~Ý®qBâEÁHkRÉüh½áuA5Í]E([h#pòê#´7¹NüM9U#;:í½îÀAY-¢ò<ÏCÔö=͸ZàÓèûXÖD¾þ?Ñ¬Ê @@PdÁ¨j¨T,¢ã9BS¬+<CÜ5>¡¢¨õD0Jk!R ìSÅ®Û&UpAXWr#wZKµ»¹]VUü§aJÖ$²ùYrìLý?Êö¤Ìêan*Jv6ªªé lLb]ͬs£`b·(ä9 ãîÿÜÓÛ �läÔ+ ÉMâsÒ2ÌW*)ö8ãJläT +¨¯äᢠ*eK:ÓlåÐ P!ææ®1+v7<¹½¤\ùÞ¨úC ³#OQlN¦Ì}ªà*:¢Happ¡²ë0gAq4rÐW¹xP)§¾âãbyKÎ# × R ]6¨ú#°qNÚê®^¡@±23H"Ócæ«È¡:A¬*ªÇαúô �8ó&Öì½o½°ó«h·<Þ$â ÂJL2ÔäùNF|$@@d`°?Çý ÅszÍñéµr°ñè9Dn§µöÂèÓûä20ÆtLíVxüH»1UüáÉ¡8IŨÆJëP ɺx +ì`Û±Nè]ÆwÜÑd[®¤(PbæU2%7È:·HtzNXséÈ÷ºÃªNXo.Äî@Þ aK*¥sú"c8 É>'T!A®*ÁÇ[ÉL#¶H¿Êm!´¹7%q ©Þ?JPÖ7)Àá&z¼3ùH¼µôÃ$1:'Eð\Üü2j=§)0û¬·h62ðgU9?!ÊQÊPå)ähR²?«(õa;AÌ4ðê G>9@d<RLåJ`%E$<LXçs»¦pVÃ$]Èñx¨DÑÒi2´:3µ8ò§Lø¹ÔgbUm-«xl ¼;¬ÀÍS``éâbIzkM²HÈ?£(Ht ¡8/ù"l0̨ÈÛ=JÕ¡TH·@e£õR¡ ²!J¹U«( ¬éYÿVðáæzÕµ1R®ò:éäºA9QPÑQ åIéò¾Té©T+e°¯ÖÇUëRµÔ(N¤¬]lìªöD$N Æ-hªìX®ùn¡*ZJÖt:YðÝjlÅ +t¤4Kp «Êg¯iþ¦×çÃ.;)Má*Øu1*Q±³ND«#s͹³W`:YZÅ®Ä(.ÆÜk +rÌë¡bê]ÄT±ÈY«Ö®Õ²·ÞïY{ÃoÃÕõuÜx¦¡ªqbRöÔÞû®È±÷ZÍZUO R÷â¸Ù,Ä!ÐcÃAºþÞCY¯µ)!ôâ;V¹mmGÉ¾È )ÝXøtÅØvÍcwìÍúÇØoÀ»þ«Ñ÷ 1·A6Bk9a ÕØóQÏx=!±UÏ0A=] ±þ@ÃÆ´Db +¡ö D °å mfª®WÌØBòʵۮPbFÁ0#×QÄfÐiÓ~ Ë'S/få§Êÿ ÙsIV,Þ �æ§O'9Ç9È)øÂä)ìñ¸T ÒO÷Wa¦RÜÌåAÊ©Òì4ß"}(U WÒc*E¦¨]-Üר x6DsfQ`@j ÎîÚ½º½º3L´ìÒR/òxnCçST Ú»}-·ÕêÉU±q,ÓKNnöHzZ ²Z4æ3M ¦óôµ2Ri$ì`A°¶%%`;=ÔTOóK ++̵PôÇxëv+Oh³& �púa΢õRQá¹3@äãîzpëBbHHð)%k·)Ñ>ÙKyqR%Ú>Ø|üôA~`Ç çs\Õ%ïF¿¸~Öa98(rwÒ¼Sj ¯|îEP£×ÅÊÁbɱ®ú_§aÔ1·PçKÃgg;\ÈßNÆsåj²ìñÎàç¥4t÷¹ÉÈþðÞ'Ó{eÂÏýnc)qÉbÇuÈðõ3Æó®Ôo~åþο á¼GDÝ,÷àªdñüõPáÌ r«uZsÏÌSÎzh¹Ao®,å6K³¯¢¥ö>{EÛ¢µá±ÆBJ&ù-p^Ð}ÇmE6¥¤³üdì°=íbû"~JÀW �ÀÒVìêÕ èã©nïB¤üGæ¶æõ(8îÎTZ¯´ý`l)I²åÏ èjñdNIíø)®%í6µÍ:Ê"ö0c`$òö¢¯0o4Á®pM¸§dlÓév+m2È9Ë}ÇÖÍ\+m|QÈ äêíkÆr§4î+i|D©¶¯ö; �âÐ" �þ d$î:¦äâHæ¥þäãhàì>íoÎFâÄ$eÎ(«däf Çè¹ø+¬¾¢OeäÂC +p@rÈTOPïTå1X0C&°L¦#ÒX¯ +T¥ìúäÈXð.0É +,À¦ + �_Þ:@ä KîFj<&lLFp +QÀ ñÏ ±qÚ ñÞû p×(9ðæ#ß&å#òn@ç ¥ ТÌ÷Ï!ÑÜ'p%/r.;Ê`è2D/@Zx "§OèQ®/<ÀPæ¦j/ +.ÌâqæñÑ ñÔ +@ +I ,c ,Å&±,b^GCv¨oþËðÒ`á)úÎÊ ÂèF|f&ff§×"êúêG �HG0F?0kèXckÒ觨dmÂmfÚ-ànC¦n°ò¾*"æø0³NØ~Ó9$Å +¥+"®Ëò«n*ȪÈȰ©Ù9ÓJÊÒn6Î*³ â²*ë;jÊHP±bs;ÀKh¶Ë:*ÂïÃ,7: ÊÃì0ÄL¬¾å �©<&pw¢ +endstream +endobj +370 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +372 0 obj +<< +/Length 3249 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0Î¥BT1 B¡AhÆ2ÄѸ¸b4Ú*f +.l +ÎFS ÐÊH¶Í#Ôæh. +`R1 +-VËqBÛn9®kÅêø ÁÛL¥)ºó{¾äp¹RI¸ÈiµÎ|~k&o6LæóqHÏÇ4:(*a)U½µ µäF]»aÈpmÜ>.¿;Ðèö<!¤o:ç¹N63Ê2õ&.ï¤ Tb0âØ$q8 3°ÈãC1pÞ*$²\&I¸PÜiÛ @2 ! P6BÝ xÄ5B¡@Ǩ!ïð@ j¬¡h`!Z3H"ö=ÊSâ¤@h¤ fÁÄIÿ cHç6¨2G!ÒtÍOò8Ñ|h+l +' +-ÐÔ8Ñ/"@" "x%Eâ4aHvô½h+Ú÷©kÃ"ÍhM7#IP@$Q¤§(@r«àe,pl9cÒ8KY2=;á4¢ï @#ÒB;Q*¨d÷@ª²¯ Ð2¯ÏSؤSü¾h[xÚøË@ÃtÑkRÕõ2¢"NÞFIp`²Êàof,éÀ@3;-t7Wµ±4OåHÈJÓjÒ³5²¤IÞ¦J!½{^ÈP3-c(æ#`Ø £(Ú7CÎ@9cxÆ4²C @;# Ñ'iè@82«èĺ®ëèÌÖöj6#úµ÷úú7§aÀP9j)ðáÜkrüÚ (bªX Yíøßr´Au(¦â`©ª³uo7ö©µàJM~°"æÅ¤w¬ñGm Ñ`ãr oépqÀãYØÂ99+LY0³Ð @: üý¦lôéÑ-¼Æ>2´ !FÚäà6 #Û»°6fR÷O0=g\¿)¬9æ0GKHzmÔù@Ò§³¸·`aQn<^é±âÓ¼¢©XÐÆ:KXÜ:5+÷¢9õ´_û0#OæèKûΡÖgzAhch<Gc «C?1¨<¥ÆëËë6Z£´HáY[-eìÅ¢0 Pl/xWßZS,à¡3gDµ ¬o �dTÍÃsaFõÁxw¼xÐuüç`BÝ$ 8BwLɳ§KREh2Ê@kÁ<e¦¾dN}ÐÂ&µÛÒ`Ð0gâZ¡G¨CÞC{]åwCG �Éòü ËøÖ6§¥Ø"D§ÕOuBéüS5±¶Ôîl}V Ъ¤èø«@E\ÿø%ã»yaèv$ù׿\KÓ.vQñr6%£2®V\aÌ0êÃkð6Öj\¯1,|* ª]ÇÌ£Ç~ESbNºB"÷"&ÄËl%xHøU¢ø@Ëí~«Y{§Ó¢uNÂú^Ò!{à¶=ÄcMÙ4sÆX1ðB`S!·¹4§iºGI2¤/)¦pR þIV ++ñeÉ2Ð -¸XÄ ±dçPÂ8ÖY-5骦ë +ÉðADA¦õU d® U -A½ÓR¯ÊtÔÅ{2êBªI¾³e³A]p7Uêi2ϵd$gâ#VzJ 9\k2/'![SÈz!WlÎA@uµ´¿ÊÀNÐbµ9ÛHøm9<µ6®Ö¡` +-º¶AÚ56\ÀQ)EôÒr/F(ÍTn@R;RÕ ÉÚÉ'iÒ¢&ÖµS)Õd|5Ä%ļü©ÍîÀ¦Â/.nj-,V!:Ì(oß󧡸:Ú +Ô(Dj429ÜüÁ +åТPE ÁT& ^À¸(&\_B`P!H Ð@3 ¥íI®nUlÐÈS +ñ+./!Ø7@@ +¨(PËb¬Y±r¸ÒÇɼïfHë±U¥z Ì|Uå5-H%hÂÿ¾Se`+j÷ª¥ó6I ݦLý²ì²¸ÛàªFÈÖÒkWöv¯¨(uDçW׳$ÇÙ#zfø&IXiÆUÏáE¨õÝ;Z;ÒbsÏùÍ@X`\ ¬ÉìµvXÇ To¨òÄ¥¾K¦*ÚÓ¿æFh»W°Zë3þqÈ6 ÂÃ]zj¼Õ¢èïo`ÊEÓÚOúÐ 7@ß:Å4,Ы:P>Ã|ZCWÆP~89PàdsÎ^X :vó8 ÚPP8ò{ú Ò HnT¥ôCsµuν ï!ÇjÙiËW·0ëiÜ,zdM\é ÔÛzq¹FµÄcÏnÆôÐÙofº6kPØXð:u¦Ãâ½×¦ÏÐå~¾j°À_SØ) AõZNg¯v þ7w¡Ú±@Ïw÷ÆCß¼N³Ãx\Ü[*ñzN±k?Â.çð®±ý¬Ê6ËÀêÛ¾MLõADûäayV"6 ÁÏ«Éz-³·ï3UÝçÌ äù× +r¼1·%±ÙÛsnÕ8Þ<eý kÈEB=éñäÕ¥ìÊPùôN#Èù$1O2ÈÙøà?p@hÚ$ðúNzGbÐÐÂI ÜZÀí])Ò $[ïü¢Nûí´ó->²W&FO¬Ö@@KÆHelÈíDf#îÌýïHfQNàïÒ ø`ïàm/æÄÏêé.æb6ôÎníª´ê&DûÒÓ'¥æsOjêÊ^¦*f]F^åNÐÅä*M(1 Ö7ð¸pih>0²0É ä³ÚÓ +*xµD àemð'¤¸ÜíÒ¤¨¢ê@öê@èÆxÙ$*ÇÆåGÍËü%ÀjaÞO.Ql4Ã<Äf +èÖ`ÈÖe8ØÇðû(ëi¯¤N7ÀæïâÑe ÁîgÏànÒð7 Ý =Í ðàÑP%moqlP½8xxèÂÙ f$ p! å³ `ï¢É®4(yîüÑ F`roÐÝÄñ1þèßÐì%ÐðnÚø¢¸I_Q¨õ¨Z©±ÆÕ!2p¬¤jfܰ$.\lp Ô¡ ¯ô¥I"é#ê/jü||ÑæàDF4Í»ÀÜFe-`sNe ÝÀî&>{-Èg²×²÷If÷l² çëúzqÅ òVbÒ%òÝeÿ#Mã&Ð~*ðÿøç*æI (²É!&#«äx²¾¼$Y*Ò$Lú¨EVÍ)TÍð¥Æ¥³"°Ôª,ð°¾§Ä/°þÓ4ÑèúF®u +Éb pgO3`ÄeI÷l*í 2²E/óÉS¢ 0ÓZ ܱ-)+ NJ¹jzaÎÇ3A8oåSÄ òO0²!0îpas¥Ê`¦M¶×1<ÛPn©îÛhè,ÕçGA%ÿ4·4Ä»óR¬Ã +2²(ád¨ÓhÄÀå)sÈKêXszXä ϲD±ë¸ ÆÌ6¼ pg± h´DIB8½æ®ªî¯ P¯c*¯¬ç7PھŰX°ÍFª»BËB +endstream +endobj +373 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +375 0 obj +<< +/Length 2571 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KÆcàP1 gáÄPGÅQHÌPt'FSÐSD£°0PÔd.Gã1¸» SÄÛ äe PHI C Ù|z¡ #ÃX~<n0Ã+µûª<T§6¨¸ckÈ3ɸÞp9Nwú.zI¡¦E¢QAK«[ Úz\0 ÙABI¸è #o«áи($Èy 4^owÑ`ÊóC¨Ì3£¦4C+ú; ãHÈP ä.!ØR* Ló@¥´mKLê4R¦Ö¤³´ß!òÀÒ¶íËv´£ á(æ1CHà: #xÜæ0(3N³Në$(ã²Ã*É+¾&M +@ÊCpê +#-ªSD0ê + «r·½OÓÚ÷Ãë1) \«. ©4ÅêÓ$,Á Ã0Þ9 £!Ä7¯8 4u7½í27AãØ0txé-R)KPôè7|¶3Ô#,À ìî2Aj6´43ãjØ<M«B¼cArXNRüÂè °obOSàPüÔ«ô99ÛR«d\4à0CÚõ@¯ðçL¿ P6Ku½sXTØékK2ÜÏ[r@b1£§=Êm× Z¨å.\òü1ÎÁe%öd¶ % ÷æ:^®Uð8A¯5ëSö'ßö3 #eø2ÖÈZ®1»'cL§*Íx.1/ ØLÆé+"Q<¯@°<§ÝDìÆ2Z¼Õ+å7è9[:tÄxÆm¢66¦,!©v¬] cø4çu`7£nuã0@19eïn8ó\××iÀº3c,,JcXsüøÊd:ÖH,8P$ñÜÖë©)q3îV^M5Üë» ^¾Y}SjÖoÔR NWz *sÉ{ú!QOú·ô2_Åð1 #¥*8ÚþöVµ·áAÄîøØõàSSßÎìï<ìÀWPxÙßÉýh¡2QHõF¨ô»|0 FZ9¾xnåf¼ÆHg +yT*RjU&éû¦X/fòÓ {±[e·?ÈcSÄd0¦âúþKÂ!OôÚoIûÎmkÙ|¶÷Y +ð1Øzü±ò®WжTE] ÈîȨüKôMà¡8ÄFíóüMíÔÃÒ`WbÄPª]D@µ£¼rëé[PÎX;þ$`¸B»!##% ýW©`@à\ rnĸ·ÊãòQ祸Òzcj~#"TFTQ'1ÄR6W«Oèȳ£@fpR=AÔ9ãcúéIGQ&¦Íè9dÅ}ÿGe8uj´95ë³}ÞV<üg<yǺ>?xüð �§5eZ[q)z¸×äT| �S²wYàØ\F9o·Çç>ß´PlOî»9è0tX äåÒ³ÓËécæ3"è¸ÚIYá �R Bi*eNLy9ÂrB´å/¡ö§O$Á5# ¹´FÏTlp7 ¶ibÖ P¨êL¤j©UÎ¥V"õd0ã2*%/Mu7V6ëYaR§³ªzÚÓµp«Å®ÌÂÐ X2zQä)Â|ÃkµÀ ¼Û7|úJ&¶¥=1) ÆdÍ£;YiÙ¥±&¢åV³ ÄïÛÆFØa¿XÇáSrjE)"ª[c+i°1Í)ÄÃà|¡ö=¨)Û �J!æì$D0£õD7*Ö¤PÄDÛWIÃwå£Ô~¡ì-ãLwn¤ìØ]£< 1+´éåH¢SYÒû_û.èB1ñRBh äZµQTÍ{©ø¼¾×ê¸Sî7ÐĨs ô7Û6ØOIú¿AÎû%Åõ1}ZÖ¥,G +¥A1ÀÑÜ5DïàD¤¸B*Z²Ze±ÏæI8 ɤ¯FÜ©æ'Êpó(m¬ +àÉ,\"bïnIFtùl¬¯°Éø28 Ñ:£ t¶k~x0æ`Aa,/ ¤BH'Üä²ËµlÔ²Á="£Ùª«¶.?$d¦ú¥Å¯ÅÂ8R!gZë}r +à5k.ì HåFÆKà2/ �rù$T¶go¬í··uÀHÜ �;Íå³7®÷0;äÝ +ü\Úâ¸ó5ÿÜûT¨Î~üCgI)´ðpL +ûnknÀÁ°0-<Qr>ºÔøl 0¯xpýéËv ÅÕÅ'^1Ç5×"6óÝ º6/_!rÍí˶_\$¨z»`Û_ÍÕù&êäËà;öèÙÑúÿI&±cXk-h(N'<sÎÖ9.Èqû(5Æ }Ä''=7§øAÉcuEèôgÈ@qLû! 6³v-àÉTíܸsþæ§û«áÞ?°o®a¿@A ÁL$ ðBÀE'੸A®dó×Ï{uCÀe´8>Æ46ÑYJ÷§ýé÷ÜXø_/ `¾gεÅ{>¾¯ÔhõM/ϸûÏÀmeÆHOÊß²OPͬ ¬ í +âùæÜOêíïðñ.Ñàì %ZÈ¿OÈô$¶ ¯ù-Âo6ê¯î.´ðL°P/®û$ozßi +`² +nÏ ìü¸É/´{ÀÈ^.V^gh8ª@bNÀhÜI>làuÀÈ (Ì íBS`ð ЦàÙ NAàÞWFp ðv?ÃÎeÅ>ÿpèOüû èûð´<è2 ^¬rB +endstream +endobj +376 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +380 0 obj +<< +/Length 2906 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0Î¥BT # C ÑØ\6 £qpÄi1*&0P´a.RfÀ©ÁL²S*I¥ò1$°E"[ äâ¤ìf9 CA¤æ ;MS(æp2Í&cIþacS ´ài:ÍcÉÌèe6äMæã êsÊ &á_Vd7ïçc)ÈæiÑÅ4:(*¬.«*C¨âZWÆ¥rOcL'#f4ä ::Á¸\)*©{þ\7á|=rpD"%RaP¾P ¥KLìjiêø¿0Ã1SÇÈ2Ãê64£Þ6 î¸àÁ££>BÃsnÏ5c8@7ÎÀÐÂlë>6·j"ò®â¸ék¤«D66C¬øN¿³Ãè4q/nûÂñªfõFïCÔ¬ÇA®±§PR¦§Ëã +3CòÃxÆ5äÓ³cxÄ51#¤4 ðÉ6°;RÑ;WzO8f¤îB¼°GÐf¡nî×¶1T;Kû²Âb¾$ +K¤ ðhÝ=Ô"øR8®ð<JíE&1¸bã=i£ 1ç"Ì"C¡p@*¶ãtLÈL4Ñ5MtàÕ5ÜÎ7Óî»=c0±@AKÕtÈÆí å9HlZ(Â3¤¡®KÌ«bÀ&H P'[(u~ ¢2 à4Hf(¥{9¸P@)µc +È3Ö¤O9ÎRþØÍHÅ3Óìã<ÐUÃm(ç<OA �Þ^3Ë®0«sÈíZ ×þ)¸Î4:Î øj+»ÜWjpfë¡b +Pèê9DT5û®¡:¸"X×êr:*ªªm1ÒÃA@sLÖ'ç ¸N £ð*P§& ãÃõ¾1ôã¶2HÀßhLpÓ×Os鿬[TÒÀê1äVÍ ÙB}»KµK×ÜD Ï ©ßº·M®íÚ¯ÄFªvѵ9[o(n.é)nâ(å{¶Ûö#ôÜ:&EHqD r¾ùÜkGnQ 0Ê÷Þ`/?÷Æø_3 Ôâ _kc¥¸üÁ0 {¬0ZÞC3t/FÕy¼ôé/ø9g$IH¹VË`Ut°MÕ1 bHÛ°.$güîÁè¡oW`ݺ c +Hsà¤\ã¿èý@dCÜKèVñ=ô%"¤WÈC® B÷b[X|0Z +5òùÁ 8*¾ÆÙI¼%J0¢0òÏÃ#ìJ@¸8w¡ì Ð@núÜhG¡'ð#Gñ¥:¹ð,£@B JrZ3BÝþ²ñLH3(Û9çr8¼ÉIâÆ81 Ònoñ¿ç áóm¥RLÀ`VêbP©=¸ro1c.#Ùc,Üët3nGzHTô9NN§ ¡åærn b_`¡ðäMZ¢@¡á- aÚUnÕ3óJd)´0«µh&Pà_CAáÙ$SWE"~\:Où¼)ePAÃÌ®ÑÌ +ð2uLÜà ëvcIb¥J¦%ìkáÁÚTØ4dáz0¼¨³*P¥Ú®ÖbïIÙSlí<ÆJÌsEYQt½Òÿ_(m4j¦ Q]í|¤Ö'Äakâ~Ouñv×Ê*mhÃ-@µÇq*ýT9ì)á3ÏGײ¤tÙØÖÊVí̸§éÖ$Ì)ß1$#äåÜ Qt ̦?FðëÛíB¤*wÍè �=ãDùtÉÉß?ê%ÀȬ%Â|õ± +H*STm5¨¤.ÍÚ¿£~PDôQç-Èâ\ämZAùc,31VöRÐ7@î +JjV«ßEÂmg¶læ½ÝÚÿ[9¶ëÆ)ñ§ÕÜjyÁ^U/ÙÌ¿ÍjB@Az >A0)[6 +ø2e]+ËD¤¥£r¶ÚªUZ¬[1µÈe\0äÁR + +Äëu!Úül3>êÇ$ÅnÀ¡û?urªæ "òpJ$¦wdLW qĵ0ß%¹òø ${ïÍ 0ü²D#ϰ??Ûx×"Ä$deÅ[ó]ôR»u®J0±©2 ¿ +â±°¨ß2ÃbÙq*GncÜ}Qþè ´c#`óêíõURZLI¬á3 ¹ðN%«zubG¡Ø7÷õμ +ÏËcð~åî í¢öjBItÇNìÏp~Àu ¡ÒMcxQôàøLð ßçì´RèÈ \P: ò_ºfú¨h°Ö¦<ò¨,Lçá¦j AjMi±D4½Íó~èJ%v¢rñ©z¦áëT]ÈûÉ ogø"A¸¦~IÜÀz¯Ö{É$¸©LkYH9¡ÖMasN/'»cW-1µþƨ0ÂNÉêé ösÊËÁL*;,ø2pAàx²MP·(@kÚ0~¡Ædà +9YÕ×1C0Á1 ¾Q¯¥'ÿ±V«OHø°=Ú¾!´ËZ ¯FW.a@n¢ë©~l;»?@QÝbóÏйÐKJl":+ªâ¼>ÅJx6ôQni{,ïbÀÛ¨îÕAJ¯n:³¡ß0ã1ow^ ðgÎ$±ã®õ,1l«Ej¢2*©¨ì=Ö³ÏJGϪòî*f´xþ3C¶ãRPoTñd0OìOÈɪêçLVâò8KÄëâNXó/âpL㪠düJî08øïü[Ä OxØP<ðM,¹P$ê¤W@rJê üFÐ: +ä¤ç\D +EÄ÷õpVñЦ3ð^²¬b68ϸªÙî`L ó§L·¢:p¬L ê4Ð`¸ªýï7¨¶ç*ÅclbªÇ*änäËÖ1 �ºãÊc<Mærojl[%²æ%¶E.hĶú"º q@Dä®OÏ®¢7|=¦='z§\/àîOP@£AòX*tf/1 �0°Üñ°ZØH )È&J®:ëg ¼ÀÊÒñ£ªYÄT@¢jf&iÐVîÃ`A;ChvÍÊòÃ1cªð,¦:RYªt²`¹E&*±Zí/DGOfZòÐâ0±º£IØ*SÌbc-DRàØ \*âª*ð,öî9Ð6×%äÒ× h,i°N4nf$ZfcC$+jüâUP¼ëÍôú®ÉéÞìñN Ò{.÷ °ÛQÅ$0ªó%44²¥l + +Âà2%DÃP +endstream +endobj +381 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +383 0 obj +<< +/Length 2552 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +µ©4NF#À¸g<§Æ"èu9b- +FB¡êüS Hcá½VÁb²+@ o7E¡ªF¥`©µZ©P«ÖdaÈÈ\6XeÕ5¢Õl . r9ÎW»îLÂEêbG2 ãxå+ecäæpL¶c5Ï_ô<v£M óVÕ®ÖÛ#ìÆ°¢×mîÆcA9ajê3. P2C(Ü1®"ä¢L; +Å: \6+ZÈ "Îî +" " ¤,¼ b9qx@arØè+#æø» +¬úaÊàEïì0( !@ÂA@Ø»I+äD"´Ü£Á°d¶ÊPjÞ(k" 0T LûÆÁ¼ª³ÎÒ5/ZH¬FxÈÇpúÒûxbý?ò7 ãæ4ÁËòãÎkæÂ¸n¶ËóÛ³2¢DCÄ¢(@ÿ²D0Êc¤.`#Óñ$LB`Þ3D©%¸qkĥΤæôµQÔø:óãèP}hÆ9 #è4³µ#)ö"IBH½+¬1=»`TRÉ5ÍSU ý GÜH"½"ì0¨"6píÚÈ2o?½á@6VãHÇT uU3HXÐ2ó?p´Qs\_©FwVÕÆ/x×·»|A«^d¨^NÈ-ã²n,9#jíc²-¢Ê8pà7#t9 ßã®-Î*ÅýÃtÝÛVÕõC³®6`ê_Ú ®²L£¸9×£¨Æ»Á6[t ËZ£{Ölàá@è4IK0::hæi£36ÉàÝCxê:j8Ø@Ìø~#®Vïì«Òë6nìíÎÀc>ça@¯òaLÁã´£^xäº3# @1)ðóâ§ýÆ«+ ÙÉ×ï!Â&¬IS^UÝY{t·Æ±}9þuémh0ëÛlÇÅÑðÜ3èÈÊ2~áfÉ#à}ÁÌ49`Øð©cá 3%)¾=×ã%Þ+°@ÃKs.åî®÷ËtmN?-@Ëxb A¹½°RËMfLæ¶Æ_KënnHÍÂTÞhÏ21Y ØF +kÔÑ´]¦Ü¢æ]^lÍarT&sÈð4L&-Cè4ÞR!p!$3B6Èx^l'<¹/>&n×ÞºñtpÚ3Á\`mä³§Ðíãê}I¢0PÑÝ´mÉ ÔÔîbM;òð^¤jN'úP¸@ÜQ'ÔùVò\ÓsÁ ë$xôïcä%-¬#£Üéà³Ò ?A³¹"¢îhê!ÌI0Ç%CPIâòâÂpU 2"Ç@Ì4JNG¨ö.¨{iekDÜÅc|pZ/ó,EÓã 4F¸öëN驺xD±§¡$¨Õ¬³ÓúA=kLÿô µjÃe ¤ÉÔ)¤1@jãgdÚÅ\¬²« #îºP3¬Èj<PAÌm±©hrOt +dpt Ê· «Øa¯¡Ñ%£ïBL§¡â¥bÈÈð3èÔø&2×S8eM)¬&Ö®óè±§k$Ós«Sê@íåi¨e¢e0 ÎFkm;-Yw0«R¡ríbl]°*°$@@doêã\s.Â@jý`ºR']MGu|*Ssn}|A¶1ÑÙð.£bVa¡ì±¹qÂ}ɹjÀ^*SytGEÖ¤ôZ¸×ݰ¤ªÙ%¦µC×[/´7[ªdaT½#ÀÈE×>Læ2¡QÍ2ç±QµÁzNµÂÛ^¯~ÀªùzÃyÙÏ] +u«»z +&Æi!¦GîvKv �p¬MÉ'|C }AI%á4ØÝ-² +à;1 ÊrÃN²n`0Ê|´æ-ËV¤=tè*ߪSÎBÖÅÜØs¾mE©¼ æ! iÁ¥û¸k.qd$ؼѣR#Q´ Ù_°¶ì8úÖØ4øÎj\2^ËFgí¡µ ¤tyY³7gôÆ-jÒûT×Ë +Ïî;@q¾-M<µejÚk6ÓÜ3Nq2:P[f]o¯Jõc[µ2ÅÑÈ@Æ(Ó®ô0Y¥\ï¾wõ$ßk'P¶jÅ,~´íüÏ'6ÜsY6ɹ°êróP ñµå1 hè½9?tV8O½èÔ¥ã|J:Ü1é-( k|àjhhVd©:Ît-¦ürN ü°Øý¬YÀiÁw)Ú¤½>vµµ¯$yRT1Î&Ç[ásaÆí)9ö)Ù%ºI=L¼µ¿¼Êqìd^äõ>Î5àÜpm\_6²±ZÓlgâ£w=j£vîþc0+vâ:jfn+Ù¥³£Þ%&§)äihÉ §ØUZClËa7±bOÐ-y-âæ¦¯ ÔQÙzñ¶ùº8îlÊ }¨í¸¶wp ßÙTV9á¶ÛMþ'7 àÂñ[±$nÿ7LZÀ-:h^C¹æ7ºîúÙ+ñ{Ï:½CÊprñcw;4N¾òî.bÒc8ãÀîäË&Ñ +LäíÅ®TXåÇîæ$rþnjܤççýÏøâ @ÿç4Òcs,®2Ð +äôA �2>OLÂtÃ~8#ÃȸÄÊ1/f¨FìPêC*2ê$Á/;ª.cØ7Åb«f?/T?J¤îð¥dA$A°öÏd6KÊCL?¬ +F°fH øOΪ¾©j©£×ÍX;*@<«%BXK, +endstream +endobj +384 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +386 0 obj +<< +/Length 3656 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0'EÒ¡* BapÐPÆGÓ1ºF7ÃÆT¤0ë:ü¸a#ÍÅîŅB¤r(0.gC)v5§sÓ¡ÈÒe9#¡O(<ïÑHÄb(ºÝï7»íÿÂáñ"tðPe Kµâôt¾_ ¸CÑ(À¢,2ãÃ1¼rF5èVAÈË3 + *9 +A2Òê BU TÆÂáÅog +ëT²N-ëh·,3 + +gq¼à9#r¢º©°¦"È(A!!Ó©+©h`³¦I¢l¨' +Zæ(3mú76㸠&7¢ #^¾1Pô@ÃHäÉG0üB'£h0Ì@XR½!FûÁ¸på +"h²3|b"± #ȸrd²i)(J¬,KK,.ìKÔBÆ?lÊ6ÆÌäÏ$ÅQ`!Æ Ç Çqì~:RE´R\'Ê2õ+¡sêO.EÑ©L"¤Ç2ÑsL×6Íó?:NÓÄ©=Ô°´0ø ìÒDq+c$4Q\[/Uqkc´ÌyHH5%NUïQJµ$³-Ø#Þ72AS/Õµ|Í$VSdÝ8[¨+¬¥;*kÀîÁnÛ¼o(@£áv 8MÏ·h4¥¡ÈäPsÆàa³Þö,É +@Ê^¨3-|)¨pð]ƯÃ0ãDÄÔãÍù¨ß.,® $õ3¸®CiÀ@3£pÇÜáÛÌ@@0³Á �{m ·@4Ã0Þ9 £¸7lcpÈ2[ÞÄ:fY£ìÕoÖù¿c\ÝÆ!»>Ý j$Ëè;^- Rp0ð f<x͹Fùë4p(ë®pæ!|HÑÔ×[×ñÏ´ícg`ÎnûÓ°ðÀAâêúηÈñKÝ6 «Ê91Xã«Àè i(º^ÏÕü¹gö:V¦JhçÓèP^¡hhxÖû.öÐ`Ëã1fm)ò2y +£ù\qK.äÎ 2*Ð 'àd{Ú¨({a îÀäÍs1Ìh¡AªzUÆ8 Ê!H¡ïÃ\ôÜL/Rï-7Fìx FxÔ2|×ÒKapa9ðÛ3hmM±·;xxh1æ¡Ì/h¾_ña! Rº| +ÙhÈ [±è0¢á9MF Ùë¥jƶÂX{ D* ºHf\t;åÂÅ×ìÔd@oÏ5¯8¢bUïQãÅ·%4_1ñFbùS¤yW°§ÈÞÐAB±MKÊËòGPS?,´ Âä÷ô'@-¶öñ Ib&ÄÍ8 £)HàÄéAl- +¡f*ÄÄeì#`ÄøÐ|Ã0µ;Päíã¹foIÔ67VðÙ¤Ù^òÀ _Äï%q¬Ö³Wlè.;§R6 NTl Ì2ÑL÷wê¼s2ä@urh»W 4Zy1¾7 +hì³omõ¿Å÷ê ¼:ǹ@aѳPºj|"rÒ['CÛã} α¥x:ügô-ÐÔ9Cç2®¢IÎ;K ×;`ê§CK{OôÜj{ p¶ÒÇ¥ègg,êÎø VDr[mÆt¯º<ïNªLøÁl=/ýÏ+ÉËeÄ +fWÕò\ú«¸PDÉ´EZ@)±¬äæNÈ;Y XÀÙÒLcZÖÓ1@ö\$yªv±CÃQM[ϧÒ8û I-$x²µÅä% zR"~ÞÉÿ"!üºPæL:ÊC]Õ>fnýÁ<(~õ eͨ2Ú_ÅLo=º·w +Á>hòDk¢}2à4)+fvH5)6J˧7ý U}À h e¥_%W[{. ¨tÃð>y×é¯+¦'ÒÊHhO"$U|·"jñaÄ °òßøµ*eó¾²u°RÈ©© ËPÑ^éJ Zå£g4òµc"Há£Q¹öØqܲTñ¥'ñ ö&F8w²¥ �â¾q¥y;e¸¬Ñùóäq7ÌÀàfY$®¢¥©K5N¯<¡ ¾Kq\ÆÐPöe3áìH{&^c/5ôu«ØÎÇëúC%ÅhLÖýAG'ôǺºÒ9öê]Lÿ¾;JmÐj¶Ã/Kªª´¦<wEåÅW Ìã}Â[õ4vÛãªMz¸((¥ZZäàÞÙnË3z¢æÝ*m¢î£y§nAs»ÉZU P· +!°Qhªm¨U£RML/U>¦U1È|º«ËµW(Ó)ûo +˶g.Û[túWù<r >¾ü±· _\¶mØNE-̸Îê3^«Ë%1ì¬&Ä®fÍõµÆ-´=n¶l+ÁÀ5Û÷y5ìc±Çg[j¿!í~ü{õÚéΰ0= täÌü1ôÅäEÆæÃK¸2xxôeøù?Þ2 y5¢¿åh³çCcý`¥ç>y®y%t¶MØÉÌôp|Az×a¾GÝ{¸1iظ¾åüæ;~¾.ÃZ ÿ=åúùï7A½á½ÿÞXçãL3°2äùµêE×Öâõ2|7ôrK*¼L®Rë¸IºmöÎäOÎJX.0GXq 6`ƿίÏöéLÕGzn¸¤joXì-äìcDì¬öämÂ,ïÀbîþn®¨Ñz¦æF«2`("ÖêÆñ,/`-PÑÂàô �0"u&ë0*ó.̪Ö/¤»Ç:û®äÞLahÆbÚÐxCv&~gÌ×ÏX&þmØäPÙ(z¡ +¦: p¾'ì¡/ÒúÊÎé*"Þíh£tª°$îLêiòÒ)øÝ*¾.âBûú¬Íæ]¹èîÛËRÞMËfÄê¥`@Âò¦ÄuFfòO(òÇPq0hlNµÊf̧û +çî(%v\L4·B\fï /ýÏ<ø°[`Æ)¶@fïe}ϰDÏ´`Ñ)oã ¬)8¥bôkp(ÙFÈ4À@À,òÌ\ì©DÁ¬ØîÏÊ7ãÚ²0LKü. ð Pi14ý°BæBÈ"Ü»ÚJ±¼£®¢y"ôz Ð&þðæq)Kææ?ªÂ gdÀÌ k&2yG¨ àòh¶¸R$þæeaâ\è:'À¤©ÀØ ô«\¯è<g9Â|ñêz«®º;*%ö<CÈ(#ÅBÐeK>`fb"¨eÑ0ÐD;ÄAæPðt¼··$°äÑp¼_*ÀëîøKk(îë-f°®ã,z«{ gnòÀæf° ô,¸w%Ц`ÿ¯N-(F®M$q`Q#¦ØÑð¨Ññ» +*Àh!O})«°¡bªzéóïå0±ú¶Ri®C®M1Ï z&ã$G 2c2Ê3*kó8n2®ÖNBì1zª²ìõÐ|ê2÷7OÈè4`¨Ü1«Q¶ý«jýí®ýO>^ñ~ùkÒÉÎ2@Ç2©3ï:âç;3<ÿfã4l½4ÉH¦Bó6D íÒú«tê0©<îé=)`©³ÞP«[>e0Ä +ݯÏ?@ºs¡@ 2ó3`å3³¶ óº>̮̱zX4ASw=K¼ ôLX1ó(±ùÓò?Æeæ* êÓ¥2´qA4u3°_AÈB.l¦Xå wöÓRnÂæ>Èüñ6óJh³J[ _9JéKg9àÞ©m:tÃ3S±Gs´{ô}*J *ã¼_Â÷frèa2À-CæÈ2àMfö@J-rÚArÞdâúCeio%γºU+*/*õ4()¸*¢4aüaF>F#È? ³*²~ÂÜN9Æ´7ËUfH"òáUïw+úÞ)ÈÞÞÓ)9@`t¸|2ú)ÀµÓIä9'âó(RZX^Î;GÖ*"Fä²!XQê,q¢à"²b.1óâ2£.3#\3ª¥c4¢z5ec Ìv 3ZZ*Öv7¨285^Ft`q¶¡c9à:#¦7Õqõ,_µx`"gd«Sµ ¬ a#éY#ô?ü@PÖ*ÚÕ°AK[d7¶ /ê%¯4PPòdeQå"Re¬X`§$2`ò^ odÀ +endstream +endobj +387 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +389 0 obj +<< +/Length 2721 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* B¡AhÆ2ÄѸ¸b4Y (PU$9èS<ÎSi@Âl³Zʧ3)pPH"Ä!¸)Jª9q ÃACØÂ=ã%ñá¬<k$Ì#Yv:<T®ÎiÃ(äó3 +Säi8 &óp¦F©8tB%E¡äxl9ù0(a/ Ìà¡ Ê Áa78ÌE/ÊÂ¥¾wJ¼S³Z-VËuÀérº]¯ý.ï½oëTÎxÀ`¥+¯èd¬¦àRrì!@Ì:ÃdÚ;d5 Â1 Hæëp&::ÐðP7£hÄ2QÞ3PÂÙa �7xå#pA:ãÒµ¡ �·®#(\ì6è d#ÆÎº-¦êºï£¶ )LR6ånöç:D¤¯/¬¤;²Ð\iòÌaD9#jÍJÁhhÒÁº!Âò?¯ûÌç!¤:qÝG0è½#pȸGcxAI(ì4c([G-cÀé|Z:l:C±kÈorÖ9Èò£°Á°®ä³%$A³Ä л8p´`+-ã¨Ë3·SJÁ°fËÔ%«$d 0Lç:ÎñMH0Ò!hëÅuE$Ahf)ªµb? À°TiñÈÎÖkYTUTêÖ9 ±Î$M]Qd]FQ¤mÄPÂ9:÷>2ÍÝÇëd "=ã(u+Oò¦áÅmLiȦ,b&âp)¨$iã.¨ºD5`Ñhà2cHÌ4áã½5ÔÍg ¡00c]7K¾µ Ͳ +Uòÿ_vþwçâþ£i äúéº~ +6YÚ©«kàî2ÑãÌ[ekµ7TøØ6b#}N1Õ#pÎëí\fÏ·7 +¸\¬0÷AʨP0Õ°ÈǶqÖ@·#ÖIÆ£=@·åu´<*¨bË·®kÊ +Ê»¦Êµä¯iI$Þyë*Ϲcຠ¥4WàR¨Û; 1ÑÅ»Àð\Ç\ýaâQ<Svë$ÎÁMBlÓ!ôCAB>=i+TÝ"J* Ñ÷>ÀrSï#+ãxõIzÊ1<ôÊ®ÎÓäälèFy\-<§µªÌR÷Kêº úÚUjîíJ)e0ÒSÊQ*@Ê©¢«Uª½X±¥h÷cmò(\dI2XPnµªb9§ô,sB + .fãP0uA¸9Ár}QÂ8Tße© +®XÄ;ÆôyAè{p,ö¤Ræø)Z/üIwÔëòAÎÕ¡ÐæC¡aÍÀXÉU; ê>2pàÈøo¨ud»@Ƴ"=., +-¢FÁ 4!)/àóäs')bÉI-CÚ=IN²Ù>|JÐô¨$Þaä0(2U¡+å¬Ö[KA.¥â]lUeþØj$9²÷¤R`9¥MXvyÓ<gÍ¡7¶ÒAkKî¸7<CqMmÈ?è¬ØllJ²FÔ[d~n2I4Þhó}' ÝÀWÔiDBq(íŸ×1óc®T4¹w2æÜëm'Y)XüéC3^β¾·ì²vAÛ¡t¤½wîb2Ùabä+R00A"L¸ úEF³'Äp&GC +(rLn?B£ï!c8vÁHg++® Ë®»òw¢ñ8¦¿ÆK }´°ÏÆøâ lq©vNYØð04BË+(àü³2Íäö Aun¶Z0ÜðâÛÔQSl¹¤¶WNzzS£1Ü2»tJuï +?R»§¹ÆJî¼r¦sÈC ¹ Á±/0÷Ú^sUÌ!¸7 ë|Ö`àY©69õÙºóËbâ÷YÊZ˱x/I¿³pU«Á¹y³HÔgf9 ˳Zk͵Ä/Råb[É96+©·v1Ó\éãJÝ¢ÄèOS-M(-<ÒÛ& +-øùTý êT*Ú*Pè Ðî~:áѥߥY< +H C ó" .2W²ôIªÅw®t\&/¹ò§« -busYì/æ¸Ó³c*=tKÕ&çT¾ DÄÍ£âxt´¤Ó¥¬drÑ$fèl'au[÷¢9Xèí%Ü{«Àj³zEîY¹¤`òGláfw9¡áf¨9³nc@F: Q@7R"uü±Kâ×oÓÉhxÓ¬B¹;:é":ùéVVI6cVÈ£@èÅÙ*:Gøß©¦ !ÑäÎûë⽦VÚf×ì_°i?#ÁxÛ>æ²JÊnËe÷VÞXj+9 3qº×bQmR k:<.é:ã[íümlNä·<Ôvíí¿¸7 ÆK,§)1$ëgK[¥Õ´C³·jã-ßôvëʶͱ·ª;௠òÐÅ4_Eá}%ùÉ*èXk³¸à{MÑbþBé¸S<FIó%9j2Z0æÄ[e_pñ;Ǻ°sÈ`(Ýö +yæ¨1»àÇEì¾Ë°Ïþ×Ü [ ÂcbTÌ3Ù41ï÷«l{½´,"ÌOî Æ%¨Éè5,5Ã`~þ¹/8,®ð ¶/J'Õ)DÝǪ å¯>üÒ|)Òß稺 �Ï $S%6Ó ÑhTÍ@mçª9#PXd¾çp0%ÂÂeú ÜqÈCCd¡D¬º +K^ñ'Ø*ϯJ ç|ãÇâ¦m+âg_èæRÌ.n¬mx%îº!eúè@æ ,?MF!¨Ñ¢©þªÒlLW(7i¸c ԣüÖ#¦Lh gN]0´æVNbDØÈÙ0tMm¡ 8B`¨Ò ÐÒ¥ßMÛã¤ÂEèç +ÈP®zLÃ#½Ä#sÑBqHÑÏ®Ù0]®9 +çfZ',s (OM,' àPÙíß"zgñj7PB +endstream +endobj +390 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +392 0 obj +<< +/Length 2552 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0N¥BT1 B¡AhÆ2ÄѸ¸b4ѳ3 +D# Ög9Φ㠤¨j£¤t¨h(j.ÆH]l-K«f3BæÀ©Ààa9M¦S¡ä 2e2ÆÓI¸ÊsÍM\é£ æsIÂlÇkòQ§A¯;O:¤ìj(7ï§Æ)ÜôËÅyÏiµ6&Í]ÅÈ£C¢ÁHÔL.ê-»ÞotÚ°â~À×kðKÍhµ[-×ÏÌ=+Òø&+ú6,&ʲípÜæ¡ ³^:³áÓö¦kÀp½¸p¯©¸P* +B¨°`FmCê£l7 Ó@æ¾îØéº¡pRð%O`iÆ,`P#"`§ ¡¢ L-3(ìÖ¡hÇ ²£ÀèÚ¶ò +ÊѺC ß"4,èÈ7ád.Ô5Mc\ØGî¬á<CCÊü:2d´C(Ý'¨"ªAʦ½¯zøÇié2CËdø xÔ3£ë7ÃCê9ÉËzâÄ®"/h']ØfÁÂö#ª²*$ Sâ¼ÔR²Áv¤aP)2¨ä7t£Â?ÊX"KåÐö":Á£ÄÙ+é1;ÄòW6r!xÀoÂ>Êêc ÙQâàP.7Ílþ¼·5/à7µý`ÞXQ!c¨Æ1³ãÌ:ðÓ7ÑC¥½pOðR¶:®bÔµmk_G6 3CØ<2á#+¤ÎÎÙ»X;RS,Ï'X¨«ªØ½ÒªOMctÚ::÷Åô£©/øjXhRN¿6 a®lë*º®áÀríôþh§ÒÜ7ÍùGäùKk[¶û@' +¢`Z¿5qµXêùÎc/éfÙñ¨°'ñk6ÈP"KHåpÊ¥ûu×Á×v£@jÚºGzãl'Bn¶óÍÜÝ{ÐtV0A¬®÷jH®ßWuÁ¯`@´c[nÖ¸hïQCvIÜR½ÖÕÞ]WýÙwxQÒðöÞK,/0Ï9 nÞÕÓsälâF J.{O!gZL¸2t #pwKïLÝ46ݺ⠥39zîÄ©¢ fD@uúôúX. b=`jé_ÔWyÖ]Áã|°Ã ¡Sö\Ïà¿§»Á¡0Ë-f÷ËC á0' ¤B0 æR8Lj»i"C&Ø y· @Wñ aDRö iBqerH¸ï¢óüåN'NW +ó +¡¼¯Ç8DòYÎ9Â8K Ãw-år·È$ Ûs^*Æ¥eóÙ;ò(Ng¦['1 ¡2b +\xfÉ9È0ÆC0iiF`Û <O$ííy)$ÞÃE¶ÚîZ¼È!Mm®Ë¨ÌW`v/xÅó9gØaLÔÇ$ÞбÊ'ùR§°îÜT¤6èZMd2!ÝÁÄÑ)´Ý)¨ð9³*N¼Y#09L±|˳B2Õ´½ÿ.X]xåÙÇéý dÄÜ%êIÌ)VDÕ $f¼åi¢u*´"$¤drð¨b/ê©Àlñè¨(¢óºxOÖÄjMæÖ@KRyv8ÞÒ3HÁd¥¨/r¨]p0h3gÀ6¡¹DÐÃ4ÃqשLIÌ:]Hx5F¾8HúgX8ìNR¯Ú¹Wäg¬%fÚ;YÐ` AÈA !J@¾JjÚCн ¦ÔêU¡àÁÕ jÈXPÒO}¢4J¾cäÅ¢ö½4k¡| 0¨B°EQ´"P¤NåqyG© ÄHÑg5lI²Ê;ISà'Hð Ì$îB¤;¯qÀƨدåþÀ!¡ÂxNÁ zÃ&ñL>ýq 4Ä·ëbà ãhK +aBþ¥ÀdGIî747Ö©Ï+p ¬¢PÎä"z²`$¶#,*aÁ4" îgVà E®^©¯3*©8DsÏÉÒ0¢üþV4EΨø_M~Âý a)ðª!;véòå«Û^ÂYÌ0ÖG<9'Ñ -ù É`!¥Äu7õ6\Õ8G03u]dÎb¯NÁ» àÉ*©!¸3ë" ¼e+%â}rpH !$ÍÆ¦¢¼ÿ`ãU±g#Gi'H1l©¨gSÅ.¦XkM·inmùÛÚè)xWG �õ·c+;½R +Ù(3ê¤÷æØZ;þó/5ÐT¡ct#¸~[ÝÛ&MÅ÷¶Ì77rE¶x%àWïâðyW,Ô@ØÄ`¾eÄw55:3SôWHGl´ýAs¨l6Þ®ª|ÏËSH^¹^¹%Të¼kóÕôS{f¼NûÆM®4àA='Äplzv§Ë¼Ó¡Ðn§[!´ÉLîØÁÛ7Ñf]!Ë©ÖËIµ}®çG÷.ºh¡Y;Yý;(Äð¦Y æÃIÒñíÍèÞñ 4¾Þ£[ííŹ76äð¥qú\9Ê1%ÝvÜç[+¸¯|¦Í÷vÅÊpZÛ¡rp¿ó÷.ç +#»zÌ-}ö2¦§ïÈ -ôCn|cF¾FOÜ ¿«þÀ, +L +ÀâÒoØN$Õfn3¬~Âì¤ëL; �fûµp:È%L¤î¨ÈÏÐç㯨Ò×TÅL® ÏèboJù.Þ直ÿ®âpjÿ6fÊ ÆÈ.ȧjÐïo/ÎãMp r²¯è? + ÂàêÙûÉÀýpLÛ«÷Ç(þм²æ/ °¥ å%.êl² +endstream +endobj +393 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +395 0 obj +<< +/Length 2403 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´b6 AhÜ\1LJhÂ^0¥ÍUá 7NHdòa<¤_)ÊVÂaR ñÑAPÐi9ÆaÔÊ 9¦3IÒeÀ säo6¦# ÈO3'tÊa +h´{67áuÍlÚp(µÛmårI8O+ÏøÂûÀàð¹LV3d°çsI¸Èo;çÄïBo:õµ:¸!PU]¯Òí«e¸¿¼ßpÅ" 4< ÆsëöÂ0ÌCƱì&:³°íÍÚ2¼j3Êó-ÃÚÝ·ø®*¢À¨aª@ã¿ÎTıp# éA«®ì²#(ð:B-b!(Z(Ø`"hz£Áª¤°j¢ ¨,r#d*,IÈb ÁyaP)£ ê9 ÃU ¢2!È$²£ðl+Áª'¦«P$Á J@Ç*d¢MêÚó¦<b07BàP.4 CMtR ©È в¬)ªÐ?Ãê1læ3£`X # @9L3ÊÒ ÊÜ)¢5BÍ4B2b: % ¢cÔLv¯A«ehÑñ33S9ÌxÈè,P@20ØÑ(Ø2ÁãtijM1ÅHqüá!GÒ,$HÜ÷(,¤§* ¼Kaº£.9LÏ$ÓPÇsÿ8ÍÓ +¡OPÑâpÞ7BÄok_?~àAt¡Â¬GNJ¾b!!²ãæÌ4¶-x7V8ÌФæV= ä¼éDHØs'JjÈat})X5?|ë¡I°nÙàfŵè8DB²¸m-à®0§IR°ÙLkM`R@\H±t¸¯!â3B }Mæm¼fÒ77A/À¥ÑþpʾÅ#pÞ8lÏMZî¿8cÛ ªûEN³h PP; ãMÏÅ+KãÓ«] èÚ"Þw¨è9Öã^9×^ø@| Ë{bè9}?]u·î?¦öS ¤³ êS8fîµ àK/xkU}µæBØK##ÅéÙ;FT +Ò~/Æ,§RÝÕ1µOÏaí?÷º¦ÁLc&J£WJg¬«F±yL(þ§Æ 4Éù?(a)xn--\)0-v6a.xn---tfal2¸0!Ä@Âuèd`(ª<S¸8)fѵYÉB6ÈV6Æ Â u]E£Jpú EñdF°å'Iûê^Æ\6.³DÃqÛ4qJEéãÚÙÆÁmÃ×T|3SË ChD +zp T½'âù«÷Mtv·QdæIÐÂåprK �oPE9/"Æ" +sì2¢çMtiõÚ·«&øgTÒÊ:h${á}1ÎCc +â|ϹS9½!Pàc ¦´>Wæùà˳4Ã!Y[Ñ,ziùþ¼"éÏk¡uIièòöA 78ª÷'d²bFÊ@QyçRtñZ®pÅCDwA3S@è-\PÒ¨z&êJÂMGB½;iÊ«±RIiCÐOÆ/ �¶×;T3óÁÒø)ÌþOi- ª7A| 0¨B°EE¸"RðZ +D% �Y¡7z»o²ZÌPB á8ü$¶¨m!Ë@VÚk.AfE\¯;j5IB¶êà +TûÚôEDèÔ"Àaî0á77ÅGÁ ÒÜk¼P Æ~=Ö²*-e}''ã¸w¹á\ñYLæS¦n±ÆÆÈ=Ùd˰C a¹ S|ÑÆ¹ªÓ.TVís aÑßÝ{³++·D'kÈp Ì`oê±1EvàϦA¶åÜ¡p¿@Iá &f çkl¹-odÔUéòóµa§eLV£¤¢~æc0f:U.ÞfÈL$4^N&2½9ÖÜÔX2Yù¬ù>²Øa˹~=ãòPX«¸Ñ8 *ä8âFNùÒÒçkÚôÆRÓyWN£g¡a|Å%2Ý[ûn¯ÎìÆ¼g¥/f@ð:I8þ@iF]åeo×9kk×C.ðn!g³Æ£WÄô¶î½:(É{áüºävFÝbÀvV±)àçZ\+Ì9¡4yð)¥ØPxdÀ¹»S&ÑÔ3'lÃí³.®Þø@îÜ'JSò,¾ÌZüSsHi¯shë|®vS +ê:30õe ïY#Ýs^mÍyÀ¤_RÙ>Òz×äü.wðÔYP9äÅÊåήW¦èl¿AÍ»õNÄý?7u,ßÀm �ojÐRRæÜºqo7¶VËÙ6¬í8ÇÞ»àÏæWF×ÛålÃÀî4¶Ýy;yfv5¸#yÜkíO¡µ~×I½©u¼kµ*tsÖï)o}ÈÕÈu·>G»0ñóß¾ðnÿø¢ºã¼{« tn«1ÞÛ«K>!7s-çØ'Rx Á³@öÚÛiuêN×_Ã'àÔÏXÌÏØ +®ðê£öþnºµ/î;O²õMÞ¬ÌÂâ.`.¢î/"ö¸î¶úÏ>Ï,3 È3£´áCH4ÃPg& +endstream +endobj +396 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +399 0 obj +<< +/Length 2969 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0'EÒ¡* ¡AhÄl.$bѸ¸b4Á¸aJ µÑ ~6Ndòa<¤_+IÄBy^v6Æ¡ Òs&é@s8Lf1¤Ë:0ÇsI¸Èo;Îb%WV(4Ú°â[Iì"Æk3ç\°¸RT5S4*Ä\7ázzÁ7Zí¶ûÎêF)I¤YØÈn3ßoøÅãqâO+ÌàÇ# ´Ë¶ÎÁ +®G*Ýp¹] +åB)`¨aª>¾/ÌÂ0ÌCÆ1Ì$2³0Í<(ð:> +**ºbÒ8´¬ªËV¾°Í»rÁ¥!¬ú ¤i;P²,£V!ã`Þ9 +C(Ì(T£ÊJjᥡD³¹ �Ã{+-Ë£ ÞòAìhä9ä5EÈL4jáFÈ"}#ÅRÔ ÁpJpãÐ +ºÏO°¤)¢3¹KÃp@0ÒÒÃØ<xÌQÔ %°£\pÑ>¡||´Ô+²ÄQÚØ·TSâ 8Æ jAc<SÛq$OѺ!VEo¬*èb¨4eR0̬ÑÙs_9Vfë¢-Q±ì Èr-}$ÎSüIñSvQ0¨´§ÔÐÃNqøäÇ{,ÈLã +v§Ã"þ8 @2+Ü7 òÄÒ¡vACË)¹+Ïe QcHè4áYnKOfÙ3%73ÕýÇ?©¶r7+OZÐãc ç"H× +zÉuÓ}G uZ%´Rã7SÅãqj$$¼o~Ê: +cÈçGÓX¸MçfØHi]zÝ ©QkFÀ36gcE03¼y<Õ6ÓbcÐËe¼üð±Ã'J[ÜöuìùöÒA~mÚEi}9§ÞZé`W¼iÜÐÎ5ø²kÜV±`yâI¡Ï¢Ö=÷Ã$ëFM3äø.òïÁoT1S°Ó5ãµ #I»ÖöOyØ'j¨:ÞGÝÒÔû³xËäÔ<õ6¹0é gýZ �æÞÛìx Á«göXPl`H79D[²[ ñAà@úßÕ±:6:Ì{1¤-8bÆ¡£ý0 `Ã2pÈu u0Q S[-δ¦ÅcÊô${ +Õ}Ü ¡üAfº"²P^".%ÐÇ `ÑÀ. I\84W' çH!Òã6ì^ä"Ê<SÈè #z@BuQï^qÁrGhèBMôwæ=É¢±É"$KðHR $CF¦ñ$é¤\Éy.¤ÉùCRD¤OòaJa+#à1+ ÝIØæ×µÀÖD°ls«ÁG@ÁÃpc1òúH§ùDæ# Êá^k%÷iFìÙ$Õ¡2%b äÜeh +$(7dj¹Ï Pà +[©®0Rí|Å¡Àà®pj]!cèÑ¡¦SÍI±C¥x9²ÊpH@rUAån!ä7ðàÌdzoòJKMY1gÝevL I¼Y]ÚczR(ÞÂ@D`4@ÆßAÝ4ò WJ~´ õ SÝtÕy*ä3]¢ey'¦Êýú17Àà ¬T«%!´·Æüð¬QOzÀÝýê$×ÓØ92xØvDË´F Þ²X.((g%ºt]TOÁ¦yÖ +Ç#@ ´ ÈPÏ<v, +A¼f ¡óa©3C¨"BWc!Ñ-ªp%þðÏ74·[ ¼±^9@É"¨(SiÖã\Ìò)ÂhDôaÃ(dpã'ï °sCÕÐÃø3ÝCºyf²ó0cÃy6Èuf7y¸ZÌÞm,!µÎÕ=w @±Ú´µÂ¸Û= 1vÀÜZŲ£tõYÆÂV±|Ö®<[O|0pÈ{º^iÐÒü:KÙ~H(rfeÔWY«¡e8âD%VL{ X¢'¼ÒËsKÔ9Tt® e'K½b /z³ÜPauÒÚTöõÏ?}·s÷áÅD]±vºÁè[ÍuÀbE:þÜÖ\dCÔ pª·mtkoem¼¯îvÏë? É0|qMÖ±@¾ ÊdP@{ ß N:§Ão=Ñ%ñëÂ{f3Æ& \»mvÑPà9Ø_Á!ÍdDzG1[mÆl@u\iñ§æÊb»ýg7/_·#»É¦ !áotøl0À3àEº`ºAM+5]'ÄÖTþD䥳WåETËQ"ämQg¹¨U^cªÍ[vÚº¯ÌÐQ(#?DôîXt|SålI¥:ÉÇzÔÍVfÊIc'È «d¾7gõÊRô ÓÛãÓDk¤>VÕêEëôä)©JsNÕ; +lîKyu¥ìü O£'DI$kÍÉÄH ¼À9m$cB)¶\õ-ÒZN©IK^p-3´ÖÓÛ4®ÝÁ¢+E*¼µ{ø$n¤ùº·RêmO/ö'ÔuëU|)Ó'×µà@-@øÌ` ùÊ ø, �®o¯Æò"©¶¨oÔêJ0øJþýÂö° æ°k +Ëîüþ¢.ëïð±ä¤\ÊôG*Y+.ë2Nô§ônùNÍ+Rk:P¢|Ûlè(ZÓÄ ÆÌÁ®|KÈc|çÒAàÑ,ÐGìðÀ`ÐÈÊѰvbºNÄñ +M0=4j,ÒÌ&Ôy ÍäJn°F@p¥ +PÒ$Æí\l(Ümí& +*Þd¬KôLÁäJ,Ìðäôç qm¬w²{Ë<N/2*BÂæÈh® ÁÊÿà°3d¤úvgl#Q&W$´KØ^Ñ +¦O⺫e¢¾QiéúDZsæN Àê K¥<U ÎÒ°ÕG´ÂÈwçÐ8lÓfOæÇFΣ ¦7ìËï 0 kMѵOµ©´[' +´¹#¶È2uMº pæÎU¢*ä?È0¶øÝ`ë¶2«¼bñ<gäAæøìe ÔÈîQ$NJå¶ãRLÆNLLî42«¿hg2`Mìröj@-ç(з p'E.$°ãlÁñýò:¿§Âå@Äb£^1%Òb Î=Hr0l2äfH×.²ò<n4`´Z±ÐncÈLìb6N¤Â +endstream +endobj +400 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +402 0 obj +<< +/Length 2979 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTQÎp(Gáò3 +FS¡Ôän9hh)I +C«ÑL$Z!GõJý[c0@P f Qên1 &ópÒsΦ3æsÏ4ÇAÊév¼0²T ;MS(¸@OÍNG}9Y³Úíîú1S" %CUIÀS*%NV¬Iøm°KªR¦Rsiµ-à 9Cx伯nòþ¥°Hº¤0Ðb°n£Kâ±%ìÌÊÍ#í»«ëÁ)¯;ÊÄʸ\¬Â!ªÖ¤¯hø>ËBÕ¿a`p^®c2ÜPÊÐ5ËÒ)LÁpk=ïj/²ÓêèÝ»ôG')$2¨f +Hl¬q°p³),¤²Î´+pe2ǰÂ:¢jè0ÁHr )ä6QÒ(RxH² Þ9д=EÑ´ÈQLH,¾¨¬ Ñ"-aª¿Æ6È Ì Å&¼Q4Ͻ3Hs5Å¡Ol@cÇbò7 ãæÓÔòcâL+)ªÁºÖ±©¬î ¦ì¨"az2ÐtèéD #`Ê.` !b ¤×¨Ê'#mîqV£wè">RÓ( mR ÂHßÒôÝåz^×Å×v Æ.aTE` ¢ÂeÖ4V¡¢7WYYÄk>#P"5Ãä4 Il¯°<([ȽÁ4«|,°Ë)¶ÊØA ÊvX¦Íªdb7@Þ% yà9Qkö¿ +* +NÈ1ðË&ùN·BÎγíFÒè[K\Ý'ðA^c6ãi + håâ¦Ë¼²[Û* Ãη0ìÈonòÛijÍ2ü'#Ò5M �εÆ<uì(ì4µ¡hÆÒPÀ餡Úë.!ò¥¿ÀýZr4#pÉå¶Ëªî2øR Ïî¹<@Ñ+¸3Ì: 'èi*~ö<qZÛR^»6µ Ã3(7)}kËl4ÖwCEÍÚÀØ*¦t!¯¦²b[e'íÅ¥ÂÆ Ñt«5È]X(â¨@äi@N +¡0&ðÂÊkÜ- ¨¡·ÂøÉrpBˤ°`ÚÈ-A N<d¥ svÊPÓÇ0PáWnva¼ÔÀWrÿ]t +?Ø2qxÐnµÒ Òr ò7¦ÏØ#n)¦CdY +¡Ü3nP8¦ù(¹äKQ4åE ¤R<4E°è"È4MÁô½ø¿Iªé°Õ;ó37aÀ7ݦ9º â§3ÃÎÏþèc"LÁ»5ƨÙà{Æv±Ö<(Gcìfé×´èßaÓ¦ôæÃ4Ðza´8/cE5dõ5ÂdÏlð&tó+Øç¼#9%#DD7HåÝ;gcªqµ²îÛÁL<kåtBO?Od'æyÿ¸9¢Ãc¢J`¨O¸( IHÐFtY= ØÄ|ø§âY}-^¡2i6×Ùº.¥ò hzK¥Z Naàd +ý2R²'7vÃKpïöÇóÞ×z¦ÑÚ@æxu ÕÄ©"zOéÃ'¤vãcì}ÔPpÐôD%§¾FEOsÏðPüMÄNzUÚ#Ñ!]GD*±Ò©HØü/_ ÂQUðK)t*|©qÿOYhj%¯¯ÑúKJý`,õ®Á@w 6çq©1?¦ÂÓVÚÕ¤¶êR¨HWdµC)åÜX=íte« ,Ff¤VHÆß6}ÌAmað¸7ä^E^kí0ôG°5#òáX)vN,dEÊÃ¥Þ¼o·t¦Þ·2ªÝ§ådu¾SOòrÖÕ¨5F°×s5^Ã$ûè¹<¿!üxâ««ÌyÏ@2½'¨^´3ÎÈæ¾¡jÅ +¶@§±åݺL·HÉô|Õ¢´·úi=^ÅùÄñuðUÙ(QÖäã3ZkÍ8µLK |[ <ù+[M!`½Ã7qVÄAn1n·ºß\q x2jÔÊ÷Shë±®:ÜärÞ\ðÕÎ.8ðA¤$fUµù^]aÊ·¦3ÄrëTumuÍÀÀ ],3c*ùÒ_åȪ47ÕgHÜèmÊá#1XeU"ÀfÍL9ÍK4¬Oú@x&Q¢L0q®XWYPâÛðÓpßC͹Væ¬ç¸ø5Bª³6[<¬ù©°æ*BaÛ$8_2´$ÞéKï°al÷º[ÂÊxP <éO¦ÕþáM&´ÚF +ß«ÎòpGW©çd\XHU$V*â2Xùú´{ÊÜè«¥xöàDúð ¨°8á¨Ëtc"øòÒZYlTk}È÷Ê#°ý©Ê ÔÅ£cLs¦sfEà<ÇÜØç¯¥ø¿,Ê+äw&ã<$=¢6²xr˿ࣣ³ÝÞÚ �y#Õ®®NdZ³k0oIU!'ê"ð»ì5µlUh4£îKDWÀénÙ´Ùé ¾Þ±È¹¿æÃ¼ÖéBå\ Á£é¸HgÜ¥ÏvçíuÛe¾ÿOÉS"½¸ lÿIÉt}ÎïÈ9H°Üâd´MÔ}Hîz²7(ÞhìÖ6hì®jÖ)3ªúëÖì¦kI3Ê@×hHýÄÐþhXï$*®ø«pi&¾N'¸¥êÉ '*רÊÖÎHÒhÚ{àU¢¬ùÊ; p2=©°H² ̤p^²¨ÏôN¶j^¶Æ&xòÈkéA,*ôpå°¹ ÏʰÏÌÇÌ d{:EhÚìÍrùÄà\¯P6» ºéÖiÆiË ÐJúǯïÈüË §=(.@P®§!K5«4qPP@i ¨ëì*ÏD¸ÕTµ"ÿ-& dCM.øfØåïKÎù/2J4«¹ÈÇ +þ°1¡§º§ºê#½«ºVQÞgë¨å¯ÌM«ÒÅ$ðlñâ Î;ê°àÄPìËî hÍüu-ÖÙoJÀBÞÀ¸ãð +)ðiÎJL©tï«HKqPh£bÙ M +LÄkÌùgìð覱äÔãVÏìl $é¥ ¢-Àfo¿* Pý+*1*àQæ*(+±¨!*/,e qÆ¢6©°&#*rt¼qHS"Æ{JÑJùNblÞÙÌù±)2ÇMò*òîÈàï6X§(jOn¿ÒôÝ$£ü@%èio`i£ä¥Äýäòô. +endstream +endobj +403 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +405 0 obj +<< +/Length 2955 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)õ¤Ì8,CYÝ4f0ÎFóÌZR2£AAäe7̧1M#HáPÈuv£Ç êñÑ °XX»0 o7E¡ªF¤bécN'¬ªÓ¤ca¼n/_t,ÜQiÛFZÁAÊlߢ èe&N0¤r(4òEo+D``¡?$ FâéÔb3lPüÌ*@´úT¦* r~ª*Ê Á\³ Èh²,Ë@`§8!jܸ +cÈÜ7ÒÂ0Í;þH²$¨ÄÌ«&Á¢®Þ3)t& @'â`@ã é:Lz.@ñ"0&¡ �Æ)t +¬½×27 +Ç,íü&ö-¯zàãcä4 ÒÐ;ì: ËL²HäXÖÁ¤`Ü z Ð2ÃN¦©2âÀ(X3±ä}(H2Q*ÒÌE �:*SàSå3hc!i´Úë=4 ÃØ49¥& ² �Ü2G©XÒ;0ÝJÂÎmJO´ºÕ Äõ ÑáD JVÍS?Ó*Xh*ÝY3Q±!«y]Â969Á AaÃX¤ë2O µ±JCá �Óe£ @;6v\øÖY~khZRYÒÃnfØÎYfCc¦xãÇÙ°Ä<é«Ks_( f¥Ó"OX¸º£R^²¥NÞìNºUµ}cYW;^WÃ74zܵ·¿ôë_/*¡)Ï<ÒÍ )Áâ!Bð:£Ý<VßAEV]JIPF¸µ, ÔÅÑ50eý²T[=é)ÈFý|uûgØV`æ:lë^>r/üÇ5f +ª"â=VÛ×Dx\wîÇö±ü£Üm{mVwÞþZMö[¨Á~G©y¼Ï6ÂÞ£mKfÂ&UQ{ºtÔrMÅ897*CsNq?6ç^èP¦P&à +µR|з×Xj@PÃ:G´lZkqðL92à\¡v/é¢þ`LåsÐ|Ç(7D¡ �Õ¯¬ ñiG ¨m'¼6æåZ0 ñÆ98ê½#¹ØG¡B@ R_J<K¤ó Ø +´6> +ÌúSì~ Py$P¢A(Ôáð(C(m¡øï$ +ѸÔmÌËíFèæ=G '@ÆÑÒ2HII1'LzÑÂhF¡8*Ð |ÄrýÛÈ2ç1ÕK`¨ø¸pã)}¡0(¤Bh A °×tXâÚÎP¤Roø& Â\½382 ¾&Ä d`T! +f ÊèT!A@ä'ú$sòs©äjèÐR¡' R¤/7 È)3Ê ÍH'GPeoAÍ£ÎÉÝ<'ôaµ*¥ww$ä2*R~ÀÄVå" ¥Mt0Ñ0i$9-J8Ω%ÉUÞÂ+QßÀögfÝw-²«¾vàöÁ¹1}MÒÃd£Ñ8R§]^«úÚ¥N!%ù,Èæ¸}§]§<ÊOC"Ì ìQq´C§kCp©A¥i´5Ök})gD°k +À[²5^o{XÖÞ¾ë¹H}S©x°ª¦tªr²G?Ø#_W&ø"Æ-u<§Ëy¬ÚÈómYJ×[!Ð7³°ÈC°i0@¶T0ÊÂæÝÛÖmþ¶·s¢HÀVÏ ÓF@ÝöÑ0ÆùźT¸°¦Æ® ©¾YÝÊÈueøßu¦hC$Jc²+»nûëìñ©ª¶wÀ`Ô¸¾ÔåÇFPEÏ9ê]Z"míÙ,8ÉMö$aÅùüFËñ[6¾§,Z^VC½ËfÑ-ÞÁ �ÁÀX`eÀq0Já9ÊO6ðZF×Rýdã+£+¤,LÝ¡³:óÖzk$ÃÀº»/ÜB®Î³ É÷aÚ§¬q-®r Òóg{:Þ¬ûùyïñÿ@Ñ ¸K¦2 ý2£!TnÖ)òÜç{d2²ÿ²¨±0j¼,É>ÕùÀ9ßD;¡"ú//öNsm¤OA¸3ÞÖ¶Kýê¶,¹kÚçæáq*¥úÃWÄk_²ºÈ×N|#£qÝØzJ3¥Q!A8RÉÝFLGÄ[NϲÐÂNÉè ÅX³fÈÑïøp§§? ÃìþªÕÛ<kà y·XÉLmÌsñǤâhÍ9«5æË7 ÑJÈùux9|º´<}pU©×.·}®Ä0ÚÿØT/Ip} +¹´Ù3§Gi¼jW¶-oz©mv® vÉ\éÚ§¾RØýÂì¾ÍKtýa]5f[[ï~oÞ27omîc}ºÉ_rð ¢þüh#õñe~`bú +8Þfã¸ÃÎcüçrÊXMJΰóXÝ!m´0î¤ÖûËì¿8ç6Õîmíþ- �4îü1õè_cáø¾;ÙLÓ6=Q`³uò+o=eã(Ì(¼p·°WG¹ f¬¿;'Þ{áuSÉaNÝRa¿¨¥¶&¼}vËë®aàæb-ðÐ,%É"ÂFê}ªtµê|¨ ëä¸*àdºdØðMFaìâ4¦XeâàZ¢|äJËÆÁjÎBòäâµmÎ9mr¢¸"ú8oÎÚ-Ҷض¬ÖRÄöÈÏãäæhJÐPþ§ �}8ßðùÄ]FÄL´»B¨`ÃwKüE¾ ÂZ°¶YªFcPn+¬!NlÃü^/+ àÜXmÊzïìºË* j© + Åô" ¸ï´ }ðèÈ`ßJÞ)6{*´pd«©NQhq°:MÄrJÎr,:Gôô®".ÊèjÈ,áìjÚR¶Rü'^A@noÚØ.ìT®ð±mî².úçvû ¿ eÍV`bÐj½+`YjhìÀ-ÖGöÀG¢zp8¬ÐEÇDH¢jVBØÛ&ÒùÑsíLxÓâ|Þ0q8 æ¥Î1ÆRÊ}¿Kn'§þ1q®&-ç +ñ ùQ¤ùn{o³ â~. ØfÑàÖK¦\NFk1¼³êz!g¤I¬Æò¥ôëk(£A"¨ÑR@ÂñipAÏ®BD±fè2§±q&E®HB#ÇF5ÀA«Ø(³*J±Òª«r®L_dZ¬(iN-fâæ.¢î/"ö/¨xÊÞ±Éd QYC<4´oÉB +endstream +endobj +406 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +408 0 obj +<< +/Length 3407 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KÆcàP2çê )¢ èM2$aHÄ`(4.tJ0( FBá¤xn3±U1Ì@-°ÂFX!UQÈÔT2 AǪ MN1cJí~Â0ÆÙASETckÊßÊgq¼às4Å8MKLD¢R·25*ôÖh + ¸r L"÷Åè2¦T)=ø"qÚø !ØR* MH¥´èÛpéª0R<µé lì Áî¬ J<*;íâÒ8þ"£Æ9 #è4ãs¢¹ªSL:[ª£Ã«$©p`&Pâ +@Ê@p* +#(1ªdôõ®ëÊöø>BàS$Æ.z Áº²é¬2´Âé»vèÜ1Åqh@ͨä7a @Â7@3 ãüHÖCæ2µA°Ar#Id&Ì@Pd2K$© +¾?c+úÿÌ\ª© ÍIýj9ÐD2®UUä|è\Üäÿ/#-9xê6S#x¸°qaé!j6 ,Ô;íº.,à +x§ãÞ4Ã¥¤|ýy§ãé Ã8@1Å«Õñ|`Ã¥@7Z �3_82ÓÂ|ç#áÒ=0âô-DÈîH@â8ËLS`@4å6¥lÐ[z.y½}sA@È2°WÐɰ¢£?o¶ítMÁ@êä`¸¬_ÉUJªµU¬ ÐQh#+Û-°Rì¿L6PµV6éRÁEÎS¤X7Ú¥o'ÁÐcYÂ$¿É{5¶å*«UÌÊ!@¤¼ÏSæ´Æq«§ºíphBêû1¸UÉrü²^ êÖiZåÙ+½Õc³jg2LÈV¹ÑÇý,2¶YK4 ç:ÒBÀO«îz9£ÇsÙzÌSðϬûy'©ý DQWíÿôÓTáOuzCo Õ'eT!®¶Û¹àK ݼïRrcL©á´XJq$u$åº<öîËÓë(rë|DP:é$ð=´÷ó.f ÝÊ'´ú¨L å×S[é«50lçÈë6î$Ý8Ã\EAÉF¥D°!»"®ë#¦m +±µUäZÆÔ7mµ×dÌQFÙ DRÎÁª!/á&0æ\f-`й¶7ÃU1QEDqA¨1sàÕÐ¥cÀØK³¤¨l©J:$ R,hFÁÌkGÅ¥ºHH¡kE´·Âè] !}/çÀ!3 �¹=ÒÈÀ)j%¸ )f]ézeøsEå}(6aÓ³Aèý +e3(Ï%ÖcoÓ3@h !Üá ¡ØÞçÍûD@ áSr`ÜPT±HêHg:cHx7u¹4Ä8L á ÃÕ.$ÈÇÈñCÌz,l¨Z5ÌAÃW´T*SÎzf¢SPCT(G ½Jļ{FmzRj1J]Ô´Ó,:LÚ[B¨e ÊmG!©£PäéÎHzXÓ!\QµÅÎôA<%Dè¥èOïssú+ÕVÑúAUé©ÕôÌY²m©¦Gê ¬fK¼ª5 FàH87W ÁÌØa_ODBÄózôdO±Èøìñ?}h3Ó:jÍic lIðÚ£CËa! µ-bHg¡y* ZH¡d£ë¡u:``WZkbà>K$TõtuÒZA*UĸN|MmÅWUtÜÁL`Ñ]ݨ³rÐ -u2Ãea¤3[þúÙ"ü_Ò¨»*øÏÎAS7òå?;tôßf®å0&K°ì¨2úÉH©l6 Ââ º + AÉdþ|[àh´¤¸píaØKÁ±¥i°íÇhRý°*¿ +*ø_+èTÃ5¶-Ss"®°ÝÛWvau <! Ø|bxnÕ84à5Ì_ÙͬÍì*VÿîÒ¾°pÞa§m)A7M5Ö¼æì-dw±jÞæNÙHbHí=LCDJà.kDËÜVÞñe*"Îe+¤g¢ëqÈe¹Bçå)_a¹³ðÈËm¥©¶ãé¤ûk|fkdærOYÈ7ð1d;ví»Àìõà§béÕUõ2mu`®¥1.Èd;É«M¹Ý¼+VoµMôÄ×½t²&ÇÁ¤¤æöå=+ýB¥[5á+qö³IÛ"b7ólt|(2Ù$Jôëè.< k LðÆ°¸Q?á¤;W£ª8bµ6©«_Ãî< ¡½¿B¯øËÂÒgjC©v§dåpáUnùÊk´8¥½oJ_l!|ÛDøûõÆ_Ð3®¡Æ¹å¸äA¾Õ[lzc + Û +þ[} +9/eÖ¬ï)³á¦ïýÏS×óÛ½îªÂ\!\XºÚõ@=ÛÈ9íÃaw¾ímØ»8m]ý¬{&Æ¡kê AÈ*u¿8öù¨<¯_¹ ;¨J² ݳpç'ê¾|SoAÊZC*\® +^c&_l6eÔü³xÌ)þsF¹¶lï&þ¤!óËuëq<kß¹¼¥/×!xÙ[ÚÍC5`æÍh@ÈÆXÞ8íØé¨¦Møoæ¤e³Â»ù÷òóÓfÌávv~l/òg®.j+øu®`jêkÍ) _JTðÄÚEÁ-æÏßF¼ùäZÐÂVÜMȼÆà®DÝ +ìôÜUï¢)¨Þc$ªöMM®Î �Ûkà|å¶'î¾â%.S.+ �<%²µ¸äZ®N.R®Vå°°åîðÈ¥¾5#Íܬ<»çêXObxP.èb\Á¤6èíþY¥éEàkf_ªzgÐ×ÂêG¨ÿ§Ã¥|zo0·Âënºä®¾¶N¶° pä±~&@íëÓ§êîéÎö﮸FÝðV°*ðÒFc¶ßfè,¨ñÐåG¢òG²Æ§ºò§í/4Çâó¬[,°LôÀrõÈõnYàØõâ nö7QOpz²÷|Ì%¤Ìhnø¬ÐW«Á/OήÏZúM\(ï±I¤GÀdèϺ½ìúü �T+vú-v·e´'Àò0üîËýn#£$¼-àX¨iZP E5ði1aeÂÊñhË ù!(ø=@ $üQ6\>&kÌû@m¢Ìþô%é!+5+ýàzØ îg¦º@Ã(ò²H.ÿþe/þZ/Ô~OسþdËo$çÏ* �6Ù/ÃìBûÞÓ$úQ ¦Ô¾FR÷ Ü n0²°¨Ð@ÈR&¢>@=¼¿RÒRñ0bòÌPÇÆ·kâC`NÏï!¦îŤ ¥ñ*Dì¿Ó3Öhð0Ýò)Ç3ͺª/Hto©Ê!'hG0gÂÐsç( fr'&²ç,ï ¤8ÉLrCÚèµ$«ý²ò&kÌ$ðl(ÞqU%Ã0ÈÐxñlìmHVú0~xêNÂéÍ à·k/Næ·nêzq<ôNòFl¾%â/' Ýó¯"ó´¯S½$ÄìýñöòsÎ{æ^e3Ô`P8[ôÊD%ÇH&: +꺼*¬2ÐRHqNð6¬èo¯Å³Jè.)òJ|&L|4-41=1×=nêQ}.ª×e+³ÀÔQ �êûF3²ð°aAtmAÆBÇBh3B±nòCTCbm½LtD±2ßBQoG:fÙ:±LÞ4¿Ò5L1ÉD¥¬9G0Þ$I1jO´Æô8}OÚ³´ígÞát âPýf0ìóöØJÔ )ÃO´ Kµ $Lõ*«ÙMt. TÝRáCÅj +endstream +endobj +409 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +411 0 obj +<< +/Length 2598 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)ã9ÜP2 ÃIÝ4f1NG#yÈæ)¡Ñ`¤i*®Ôb¸½^: ÔëÖÀa~ ãy¸Ê. Tb5"ýK©ÚpSú¥Z±PFBáµB¿-´ë²3E¨kmÆÐæs¦khÐPe9MÆ3-Þó¦Òo਴J£ÕÄa¡a¸Ü\2¤kì6\Øo1MnI¸(. +E!Øe:I¿ Òû½ï2ͯlò( ·»áZµ5©#`/#Ç¡i°Ú ¸Z )¡@ -ØØa@Â<¿c£û7oøÊùÄq(Q ±LWÅñ´dák¨È¼( AÂÁÁ³V)«r«ä 0T Läé´*&Ì*ª®¬ÁÁ½4<LhhÙ,Ë@j-Ãt +cÈÜ7ÒçH«ÚûºÆ;*8í¨[ÂÆ%ÐÀ¨È¤ðÐP! âx +dvþ?Ð �ÜpU Á¸p² +"ÃxÒ2SôYPGã,9}ISUP@$"pY + YP0Ã#î*#î(Y]AÖ(*u}`XO'aÕ¶è¤"bx¤"\1ä!]p@4à @'£h1 Vpè9¾5Ë5/:MÑPó+M4¡ØMï$99S³vúcä4 ÒÊÈÒ AºnÅD»A (Ax Î?"£`¦EeV±êæ:*áS«ß+Í +¦«0@3®^lÊ 9@6¿4d~ò(ì4¹l£Àèiðødivrè!Z§.ÐØ»ÈZ»xÐ-y7>°Ò,Zô4n£ä0ïÈäc 4ïÎo4\6Àðo.G*piÑWý´Ã6?96GÃñ<[óÇr®¯z©ªÈRO´Ò)Òk¯¿M±KW¥Õ¤ú×kÛ÷.GxïÀ / ½<EÊ}Ü5ÂÐÒö[Û}FFaò!ôæÐת½Wä-öæÖa|ɬ*úÝ®2JuO¢ålÁÖ_~nhºG +Óún ÉæêÝÜ~ Á;Â߸'o%g¬ÞÛ®(ʽ÷Bàd"s*®"c»¢}îò3·èóT`toíÜüï]ûÁ.ðT³¸L^±¥'CÂ¥ +Å"´ç¯Ã+ÚpÑJ*8ÇÁ´eÐаnóßÃítlg0 ÛÔ!W@ÑõG¸rëÁÊÀvdøP´mwM< æxu !ïÞIØ5'ÁÁc8Çw! dFåÙFÕJDyzn8:ÃÖLHO,É)(AQª)M>õÇÃ*è]A¾4 ÑW#ñ~S!xTcNm2RÁþFçw-åÌ»ö_·©Ã%OTò ã®Asó¹Ì?@eá<¦2lE±PÆÅè¢~°º(pTÀR¹5=S$bÁ¼âAVG$ÒªFjÑG¼æv3±ôÄTª2f4à2b°Éæ°4¥IÅàfÂÔ9å Ç\Â4Þ¼«î, ÇOr\ã !äÉ7ÒK©sÕÑÂÅñðlIÓ¶DèÙç!inVJèwGáì´riþÉK`êÎa¿n°ùrjÝ]oP)Pä+uiç=òÅ´Á JÛ«ü?ʬó°Réè¼êë`0}Ô»&ÝcÛ>²í;/fC³¡Òf4çp :kéKZ +¹W �Ö¸³¼0Z6îÂ?Ka ëãï¡má=½WA �,¨!K®kiªv19º°\Ku«ær¨R.Ïë**¤|ÖU ìèÌ¡¨LqÍ&\iS> ÅØ´sbÊ=UCŸÝÐÞoÎ Ã8§ä³òçgÕ¨£êmV1qñ÷â$°:¿ ̺£q®BööϤ8 h2D!s +QHt +Ð;¹\& >AÐ"¸ãç3tÌÎ9Ì2çP[óÉuÏ;>¼´AR½! �Â¥¤¤æjQ¹:2äðâ~Ãxxë<ÐObe8ÙI)J\ + ywκ5ÛeØr.áL$ ¥f×òhdîÍ9Nd¨EÀ*iÔ/pÖÙaåx#çµL¦¸0}aÐA³6s¨xvô¯`jÛ£ï]0Ki³¤ÄÏyõ-%J©ÕK^Ö / ¦Ð ßú;ð-¢ø2ÔU'Ïx+0TÃHzVûË>zÍ! Ýy Rµ^9Z¹3&irrEaÉU[æA©ÞÕóv4¹»]ís¨&âí¿ÄøàÊú¹£¼kÝÛ¸;Öí.D=]ö±¨ô¼º]²¤9$é(êuºÖ'iM«(kðë¨ ¡s SKU^ìUq¬83KÊÂá÷z¼îk5+Û&LtbkQyÆzõä5ënÈä;@ÌÜ3Â-¦îBÝS nÖù×ÓéblÏSyðòᨫìC ioz;;¼Nn6äù÷îõðdlVX¨ç¼VxïQ0½uѽÙd%£=5Ñõ Ÿ&}êUͶ×p;ÄJyVØ[§wâÜÆÇú]TxÝöº|yð)æç*ð+ÜR/$Xo(ä¨H©®²_ P]îªPÄ¢âȱ/2ÄýdÈ é*êç,²yà4êr)ÈLáÇ&O «x)cViK,ʸà¥ÇhØÀäÙ +¸2é µe(çèl¨ô¤ä.§ ÆÛp*í¢ ¨ðt¸Lqð¬N5k°óÂkMÇ¢Zí0°xmV Ú¦OðøÈ²ì0Tý"m´ã®ÖçC¦5`k/¦À`ñïY9&óÈ>ånþ ɸ9¦vÆq à9#~/ù¾ÑMÊñ£!OR í~ø @øj^ B +endstream +endobj +412 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +414 0 obj +<< +/Length 2825 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +µ©4NFC +ðÎyOE#)Ðêr7Å4Z<$ C!Õø¦-Ç#ÃzÄ-²K<ºF7 Íí"I@s:ÌfSÌÌu6ñ èh2ÞèÔ5> ÅÃ1ÄJDÚ,8ôÚq?#ÝJÆ)Üào9§¡pP\쯰l2 ºHp¥Nv3Ìq³b 9¸Æt4ÍÂÖïy +äò\ ¶ @;Àá �¡jôB!Ãò² x`À¸LÊHÚ2¯/æ7³Ð¨AÃKFÁãpè2º8æH.kèµP~2È-@:ÃHè9¿â£`ShÛ0*he¡º<©üÁ1/Îëp²LêÙHÎ4@ÃAôBr\|;A/ÇÇñ´p9ÇAtßLápp¸¨hÜÔ³M¬ë>дm+NÔõ&¿Lð¯!»|ò81:9rs é:¬ìTîãn¦CÂñÅ^Æod°÷ÇO£ì¼Ib ¤*¯ý=-L,4 HÓ5,öÙ»Z «^ÊTÊ*ª +ª* +º²Á°g2",ËBÔ¶Á¢Þ ®B(ä9:ÒøÚNJk{»°hÝUÉ*\ÉFù´ÂÚ^UUê©0¹x@¬ÊÖ:X*RÃ.-jðk aP!â (ZºËxhA1ÅCÕUæbê2Âchðl á..d PP)¹Nc[ºn«®µ[EiµIõÅq]»9Zý·IoÙþ)A¨p²g[`6CÍFLÚÖµxP# !¾ muj;§ÈP8'¨Q[ãÎÕsÓcÎînoCÑô½;£Ôî¨" `Rµ°ælMì¨*È>¨ Ì Y_ÞÎ1f°kd\~{Ç`íÐc¢hÂò7 ã !6s¡¬0Ö4ã¨i`ûÚÇÇ%ÐPý? @¬ÜûuwX$@ à c; û#XæU³ Âcÿm*ÙÛº¥t + , $Õ ©$xl°xÏ;#ý@ÆHp>ɪ+æ®ÖL3\~xjc 2¡/!eàª[éfÉÝûŸ �o®÷ÖÈbÄFP´Â$lN0Ò6¥ÈTd%Ö3ÁÀèî ú¼¬T,z«Ï)d('Í{¢Yø>¡Ò$%D,ÄHCiFGxòÂÁB:) FJÐaHé.T#ÃVKj´µ©P eHd3¥)l¡ãAÑÒðÆee!Ý- Ä B©$ègÃeáæG¤©£l} dݦxäãÁé°1¯ SKë²ðàCaFé92¤àZ(.<Ì£¬]I«2â¾ÌemµÁ×rÄö}r8I\LMÎrIVßD>òÒ*ja+Óô±t¼ÖË`SMPÄÈõ ÎÀbSµl8BhQ +©W_é¥5ÌZä"Øs tôX$¿!H¢µc09Ï óIRð@Ì×ë7Àe_ÁH8ѵXjFÙÃH¹£8[êʪUª}Õ8¶'ý h&<ö¯ 8_`è|ö¬k&í¢"èºÍKñ@Å#iZlH~UE<·U +àTêtÑSpWåQ£2 dÈZ 7ÆNù-KVm2]!ü³úèuBÉ¡4&ëÕ8F¡ºh¤¹PbDÅ>f±Óëé.¬*!í¯ËêÛT«Â%ô4õÝRêö¿XD^@õ? ´y@2 !ÀØ å ìHó.<W¬0h28>¥Î ãp6b2&éúÎý~ à bL(O)ï + ,=h`e*¶LeêaBשT¢eê§L¦ËâA*.¸õoÕßTfªâG³kqiºh²?9\¹Ð +R£abrªX åÂYVe)U{¥×hü-%¨j¥5z©mò?_²bßð=±ÐÑ7ÕV¨P2¹RDÝçXÏywBÕÉ#W@é])'ÁçYûðúhF{6· ¦Z\W×~Á¤ú±fK`Xôt5Çvö +I q¢= ºäi¨0þT>hû-b#H/z¨Hîû"Z©·t©!ÐÿßE=}ÆøÅnfDj U÷K÷ä¯/ç¯*òÆÌuÁ³l#ç£Zë]«½½@å4¥ó¬[¢AÚðî}]+Åw æ¿E#¤@²HÔÒ×D¥6R²XKIqxiG¢U¢f¤¸¿²ÀíKÝa6´0æ AÛÑ=öÅ.×AEpvîxOÖN²ämæÅ9éC~qHÂ%RÎ&½ÆjÚ¸h¤6ZmújÔ÷L[}ÖÙÛFý®cfnP4vðÜhãum´C]0U!Ó)Z¯h_ Õ*kBy<iýÆ;2õBsôMAÐ"é ë§'µÛú°ä +Mk«´lgé,<s§Õ»/\í=oötÆCûop +˵íÞ»÷¶Ñx ¼Êò` +yÍîÃó¼ðí2=íD:"#â|m['×mßOd`¨ê²ÇÊ$fÄïvÀÌoð¨È`X à@ +Âð PÈ1 £ º´.¾´`bÆN~*ÏÜ`åÅNÔhÀÈDtþÎïN1öDK&~§ + Fj$îðJÔjÞ7¯£ÏÍÉîX"F&M2o4Ì +'í"îêj©°£Éo0Ôþãv7©ß L5jXYi2½Ð(.ªôÝmШ,Àånié¢iªévB6§ä¿Ì'ðÈ.`kÈÉÀ@Ò\ÜjØË>²hª£ H2IäOÚè*º£1,³-¸ mæÅ'2ø,"ë âJE´AÄ:cQ$®R �ãØ: �9± OD¤ ¸Ä)¢ èñ!ËàW-´³MºöæõM 1ê§-ÍõqÑ¢>r ,G `³ ±A,âÙe88ê%6é°KÀ ÄI`æCP Äå ðåe¿ä¦J¤,æD¶RK +w +endstream +endobj +415 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +418 0 obj +<< +/Length 2820 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1'EÒ¡* ¡AhÆ2èCqpÄkR*%£Ä©3 + +(RT5QÈÃU* +ÄC¤.´ +Øó1æe:&S¹ÀÞr:ÎFr)à¸(. +lö)·ÈG+´´b0ºMfóã1ÔÜc:MæáË Í&ã °@c7á̳ Ð˳7¶iØÄd(ÜnµÞ&ÍMçíl½AAÛ Ã:üáFïÇÙæQ(Ù[¥º "ªFwZÌPP'IÅL«.¥Ahh£¦ª¡Â»¤é°c ä:µ ÊÃ7n0ÈÚ á K0*ÉpfÎ>«Â\>jûì( ðËúÊ¿ëxe¡I<©KÐ@8#Â6°(äHh3Û®` ¢hØ(1¸\(!°rª$I"·¦MdÐÁaP)5íç(¯ôe $°a¤qôuR°pP$¹C(1¸ãJ6²µ²å4>rRh°Rp4{'ø¿0Ã1PÎDz4Ö¤Pkz6aËé%½2ѬÁÈQµ S¦ò5ã`Ù,Ï Ãn¹â ®'B%Àî·£ªÊà à ÂÝ·c<BÛMËß8ã9Sµa)¨h$p@c3´¼n Ö êé\î°Rò;A½]¼!rÛ\W Å1\þ'Ã`Þ; ®¬î~ÕÝÍÛg Àõ7¹}ôÞ8Á ;räU`¬b÷A i:NTò*Z¹ÙUu%«ÐÐÜ ÒЦiÈåaÍc¨Î+ÆûeCY]¹Ò³R1ç7Èäáç,±±íÐB>¯.án×JÖpe<íë 8SÃ@9ÔCISp6.*>¥µm´gÁéõn¿°.ýxılmÉEò%Lá²¥tÕ¡jDe³m¶b ¤*µ. ½4ÙÛ®xkÙjÞÙK>ïËö³s¬·¡Þ«JEÔÂ0*×\ðÅÚ2è0èħ£Ïè_ý¨Z¼pbTB)§µ*-{®} Ë ´û¤ÚÕ^GtOÅ$ÇJK»¾u)=(¥4ªÜ¸i áf*tW»:oëìãuüm¡¬:Íá×1@äÎài<QPi«s*¤Â8|àr ¡ÀsVkSêÜÁ&0àÌ¡pÀá È(XË(v]0Õáà æÔEe¸K(eÀ×9Þy e;ÊhãjKh1¥òêòeUe &To©É:DîA@EAÈç÷j±b àUuGAiê=H¶´}q«pJEù¬¿ 4KhB$ÊiÍ´'26 dû$rÌÔøh4 X2sÒ\ò©P"UÊÙ^B¨3R`ÙóKX(ÕÌ=W¦-ÙªP§<XÄóWæ@É=Ùz a!$<¸àA µFË)KKg#3IyÔ- )·ÀØUÐw'kH8°jáÚQ¿FÁE´|ðÒ#ÒB)@ÈÊébTSå¦ñBuÅQ R)èL*0¦!A`eÅJФ¾ù!àÆhÑ@òxpa¦S<éP%UÊ.¾Ï;`¡±M¡®j*oi4ù¤!à:ð 1ªT2ÀN¡¶¿.Û jÅü,Ø+c$Ý á´È´* aA<'ÀA[è½uô¸Çï^kÝ}±vÀØ; +xű6¼XÛ]jÏY¶VN{´A +a¤=[+/*,u"IÐzhUjjoªp§Õ["Ãõp=éS9+äÕ']M¦Kk+Åê4=Ã)8j*g4 V¢õh+wH";80Ó +¡0¾©JAõ«Ë,ÒTA\EÝåö>×âߺç\ïóÝjÀ(µâhu %Àà¯0Õ¢´Í2Õ5h´ò]à¹Ø«9ñèã.ÜXua¼iG0¹ÞÃIÅð¦:?S¬¸Á·IÿrAPZÝq£ cáqÌs_ DnèÖbͦÿ¥Ââ $«ãÄ.5PÌLT8É]ãªäÑAJÒOéë¼ã]Ó|ÎÜa4¡ÒGú FÂZ.)Ç~oCÈHl:հܼ¢¨o lx¤7öß) +(æÉ6XC1 º$4øuqñëW®¬"NÒàé+AfÀ×Xm³*µ¡¶gNdA �ïngMì½ØÎ2\i �CimMå»öÅÁ¶Û礸7º²[óon vÀ([bdú¢X¶æßÁÈ9èVÅ£Y³lÕÍ!°ÅcÜ}/ùÖe@Ó!$6KÖ1l"a}Jåë>×µSÀÉ|Ü+ܰáLwi0Íï»ÉpÖ¶7<V%LRðbÂÚOËÍ »H)¤ú³±hæNñQæ¬0?éqÏ9ACð~æ{åU5g-6¬iÓçV¯¥ +u$/ÒCÏÝûÕLþåçåúÏ#½o$E PaëcE5·w:V/=¦TirªIm ÞÉêuéé>u#ewpÝa.µXz¤w^ħÙÉÄB¨Õ*ÿÌoAUîíÎæa>çÕÊþÏÏôÙ@&=#9¦üìïúzÖê/ +ÛÆbêeëµwåâűßXëZ®ã¸ëæ4;ø®² vë Ê¢QñZGP' +ÚÿDþëeÎdÆPn&æoïænÆf6Í®Þ+ÁF\fò`Rë0*оæÃF[êþ°>,ñ@èi+0"¸ÝÂ8d¨6E¬õnZñGUæ®.ZSïsEJÆNÈ,¯¶êÌ.vIø¯ÒèÚ[yh滮Р¦Ãä~{NâèL6@p,û,ïd$ï¤,Iï á'ÅÆ¶ÖÈ(ȽÏ,z¼¯®ó§°HîFôLÑJGDð|ÌîߨNeT èÌ,ý +Ð(9®¸aèc s¡bÈíº«£ÖÀjlìm/ǰhºä°mÇÎâÒã/ÖÎ<(æ ´ò,VgÇØHøT(þä©äâÊå)¹Z¹JöââöªNææ!é<)¤ðOID(ûë¾Â¼IÎ!)`öÐä/IrÑïVKKLÊÎ! f*! ±î#ª`Þ©®)¶Ú§.»®lwPâ.¼i`9Ââ#DÝôZ®E|«>&ï¼pb +endstream +endobj +419 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +421 0 obj +<< +/Length 3269 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KÆc¸`0 M§Äa<§F"èV4NóÁÈ á< ç#¡ðt.·{Íì[}¿p8<.)¢QDX(j2 #ÃqÜ]©Fbmr2Á¨$ +F¤Úi)|z¡@ÞÔáú¸Ã@4®×ì# 9¶ØF7 PÂèy7Î3IÏ1EÛÉ7PèJ( B$1ÈðØq¦©W¦³K.n + +äò»/ÐàÊ0à ¸ ÆÄ#pè Ò6Â@,ÂÃh¸aH¨5%aj6 X¨" j^´9Á@'âcþÆ@P#,<@ðLÁá# °¼3 Ã3$B(@ +cHô2ÃñFÛ·*ZÞ9:¢Ë¡«ÁªÂ>K{4>Ü:¬"£Æ9 #è4ãs¾Í Ï´=2óÐò½ +ÛÚ®Òå ¨ú Ð2HËKj°l¼ñ[æ.°,ÓO >¦Ê°r§¡qdÔ³¤Ì,S#pÉL³-½<ñM 59AT èÜ1Ïsèæk°@:Rá �°î7×Ýú;Ul @0cÞ1#è2Øã¸Ó~`ÔÀÈ2áÊ¡¼ 5%sî&ÃßËËÍã0dä0«°Ê9È^°àe© !ÀPï:Á �ßÐè7è+dÃØ:Ó3í׿ÛdÓ]ÒÖ×.[ÅT¤6Ó2½¿Y épËo¡¤Î£Ñ6a×1m!^åíU%wm ©AJ|ï»8@<ë¿{ß0è'ÃxîTÌM³í;^Ûáíþx3ý YR «Ô»ÝÑÉ#m½@ðj_hoaiÓz&¤i\-Lx»fù»¢ »\*vJú¼VûToþظ +a *D¡ë8µ¨t¡fkc,BüÞ4t @GºUCÙн÷ò°ß3}+Ý£9vèæK2L¬¡Ï²ÅN}V(_áÀØ0Ö(p aäÂ6ÇTÂòbáÌ-â&çªIJ>·¦àÝ#`á[Áõ!ªªhÃ-È6÷W¨Ì+¸Â^$ %õx¯5ëAKË6Ð: ܽÞ;[Q©5@nÕË?0a¤3¡Ô¿°t^íøÀóp÷Z¡&)@ ÂHN +}fPb $c°3¦P¾ r«Ò:©á»c×ó-XËÎdJ0Ð:Ê]æRìüFÕèt}KÝÿ?B ã&Íñ ²YÎM7®µóçrm."¸"¾<ép&#NI¨5e0(åÙ3N%Ì)hëåÓÜYߨSÖGJ¼9.ŤLzà -Áå9VÇjñ &8¶wµR®}x/)Asð£øjf¨H0¡"áÓª@¦?»æ$ Ò®°ÓdØ-á GøLÈb<À ÒTº\iÛVkü6ðîL@;ÖALÃ¥5íÔT4±V;Áªá¬µt!E`U²VjÑZ£Âýv¸:DVéTY*)t1ºBÌÊé÷M|QtêèÑnS6®kfòÓM¤þE´iÝ~Oýî²H)7e]ó7Òý¸T +AT"àÐd¼ +¢UJÃ`Ñ&ºíŲ6éhO¥¹>yTy~¶ëi2)Ù};Ö®g"ÒXCeUNaÍ[ää43v1®{EUK[}R²Ø+;6M=-wOAKY¨2üXH,£HKÝyQ`ÇF,Àu£mëÒUn ö%2Ôc©÷ÂẠó,Ã{µ®Èieá»@ᥠQßòY~³¥CNà ;Áã4Ô-]Iî[x4` " ä`îÜDPUAÈñ¢8é¢zÍõ(èe±BG½oò4î5 ªJ¯Óak:&8`Øh-¡¸Hdlu *vÎÊyè2É Ám,{0<9u¸bLXWB!¯iÀÏjæÍªÎ¹àU^¡¥Q¹ÙG%Ëæû¨-§Má%Rq0MéÝA¶ ~ØfSSvèg!4$x±Po< Q¬5ÖØÙ@mæB7y¾uäLäIc$=Ùß&ç®Ù}:çdíÝôyËúIÎRG»uð?Íu³©ê +hH>lLÐßDx*méF¥5஫f£ÄÂáÛ$.IóY!¥\:pÜÉ'%k=3ÁÎMÄmÖ¢cª~SªwO1¿{½Ýò¡È¾`#höp_DN³H«8+bøYØNɲàÖa¦ÉÓ©hº4coúÑdªzQi×5?Õ9³-Úâ37¨D¤±ºd;Ä¿CDWêü[ðìÒÓØcìÖ°Èf&ûÚ,]"b¶¤aeã±wºFxÒN^kË¿¬*ùo-1vÇmhk¬å{aÌP2HMMÕû*/fJQ ^êhA©IT63iDU)ïã}K÷É]OÚ߯~9L6r¾Û%ð¨w{Å0U×ù Ê4¶ÔÛ*𺺪îëÁhlqøätãã@NYè¬ù fGPú'Òi¯JϪuª²v´BÊbll'tü&ýå0`Ê»p¥-Ïë .± �8*´ó/ÐqOòöåé¶ü°XZ"$ÔýVùlÌU +áXÚgÀU¾% "¨àQí; +EÂIA®µ²#¶í¨¢)ÂG(wÂEE0hj_&~/F¬~0æçø"ÎêðêOéç¼9Fì®ÜëmÓP[Tî°k^ïHÖfS(ä¶êÖô¯Blï$ïO¦ +¯0xñ`Þñ°&N¯âò$ð¨Qkã4DÈRKÄ,J¡%d&æÍÄ j+ÄÉÀå)7§ºÐÆeÞiRhè¸é^¹Jâl\ÂLêê<EËBPå5 I¸ì +Ú¾iÉ Ææ-Ê8-Î# ÃÉíàN|êÀP±º VßºÒ ö颴W¢¾½Ïò9gÅ (ÁÌ ³)s'º³àhTÔ×¶KHíñ"ÓËRè®ÂÄNðÇËq:ô¬V1<lîôªb¿*h¦Àܧ«ñä¤ðàØò§Ä °|¼^>'Q/¹'Bçâ.ræòuJ_ªç쫼¯Jø¬ª÷(JÒB+S*Ò¿µr®%.N+t?#ö«-É% Pµ °[ hb +ñ-Ư²â¯òè¿ñRõ/·lÖE¯}$¨XE± xù²62:²Ê2ÂK5/òDYI$Ó'%?%q Ø®âÒµ©{1Ťó£ùòjÊm!«r·k{/«UK©\¼écIjº'_¬fú̲÷pr»ë^üò¬,ñÝÑ 3v%ÐE%P¾JbËï' Q3àyqFØÀù.òô®ÐôS?dõPlúÄòoä}ÌÁ +ÁMìücN5sÔónÍ2$Á³dÂ,&x1;',2Ãl;4£ëSVë%+'ÅQ@Ŭ^Lb ö¤ìh¸ðìÇòÆ8Ç ÈEÎÍÑøKñüærLì9l0màÊR.lªÊàå<©´PnÒ.ðC"È.F,ÐÅXÚ +endstream +endobj +422 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +424 0 obj +<< +/Length 2370 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8TƳºhÌ`(!ç3´¤e3[)ÈÊn1Nb +F¦ÒaêíF+Õ㢽N½`Ù 3)Юi7 çryÈÎ\"Ás= Ñi4ÄSÆ£T)*¨ÄjD+LÄâcÎ# ãqzü´ad³Z8ËM¼PÓECy3±ÚÖw»#Ù¿¯¢A°0PÊ #qtj1¶(Eú3H"Ý·ªR©¹ìr~ª*Ê Á\ $phè&áBÓ +cð·cÈÜ7ÒÁ°ÚFß)h²$¨ÅÌ£$Á¢®¤9« +\$k*Bx&»¸ï5@!@È1µ$ @ à:5 �ß/m»rªsü$ Èa¼î:òL&Éò§*ÊòÌ·.ÒüÃ1Ð3(RÜ7L< +ßÁ + Á0j²ø+a3eÃo¬<·#1CL¶4ãsÐà Ñ\F4|bÈ£@jr· +ÇA`ÇÀPP* (AD7lLY¢r7OÜvß3R3º(6Ô<ÎÃÕÍøgfª3jh³,N",éðÌ:°¥P7LHì¾@2£°ÒÀÞ#xä24èÁ%cMçx4 �¼7`Þ3ßcÙ~ßø{×ð@:X¡ Yvj¬)L&7Ö ¥_Züæó[ MµDÕ¬Ro× Ì¥¡jÜðÍ hÂ5àÈd7´D\MØî P1ÞKìMTµøÓ/ë㦯bX Çc x×åä(ÛP8U}ØÛEý½oCÓhé +lç{«j7KQ ÌP\ ä;Gµ]÷µð8/ûýSô£¨ä¿P!-4?l7ß:9XóN·Âø;6)øºßÀ ½6<KN¹{:@î2¿ª0úÁRâw»³oÙp*@6,g«:¾zþßö7cíFoÁôC»plµmvÊr Qê4ª£r A¡ba&â .j|òpèìæh¬ÅX£ Á ;åØ×r©^Åú%àHXR +¡ÿ1`ê±Hf~¡åþæDC.¬6:0áCùaÖ8X! 0!¼å2¬ã`j À«¡Dr¥¤SdAÀP]þrJ°#-ÔZcU'V Åì0X '*Ë$k.8)" ¬rêi`$$ZÓJ.Ⱥbð^ã´Oò.4#°hË®4~ TY.c}d`2iõ^GÛÍòè:PmáðPÁKT ¤³>hM;ñüµ· k&ÄÚyýyÅ9læÑó²{ÑBèHûôþHÈÌdÙR°:FéÉÏC¤´ô;*U!DhÂ)å¨ Vp $cî&¨ü"p ævoh²LIÁÕ¹DÙ²ksPÉ!$Jfkç �-=tWÐÞ(`3¬ÍK«ÈñDæ£YQªUNªhô1^DËzIIUÒ=¢(ò¤h<1ÁW¡)@Ò$Яµ:n¶jÝf%\Ê¢NÒÑÚ=\Õ9Òpÿ +ÇE&eXP]Î C¥3^NÚmZ®@(ús+bRÓ%«<O¡â¥_+4/ꮪ[5ÔÚþàsw¹@ < @_ ¾%<GóR_2i!ñåËç0ÎI¢èzaÌ70Òßûù¯û¼Ûv ´ª1¤.s¨u}§vÊMZpjR/úÂÂôÒÌï!úM@á63§ÖûmeH¦ÏBÈX+geN RÓú®gaöx ø9PØÞãü'dõ{ðêd �RÁ gçX»[Rm~6ÎÚÛ|b + vý© Ö»W{";±ú ľ»5zQøyÍe/°dTYKfe¥¨e|GSª!3ù3Å«ÌAÊ(CÕÝeîÁ¤2·ðÅ,G1WZ«3_RÍV«6ÓR]J¸°VQÂNVåoIÌ"´ÍBÛqD>l¾HM]¤Y, ,«k°å±ÃѯYjp6âÌÙí»Vñw®<¾ �îæeûD{3ÖiÛËÁâdÎ7ÿÜ»à¼JY<WF& áKU°Õz3ie8×v¶°Ù¨ÿÃݵ¤BÚ#DÛØröűDÁ8©¢ÄZ9/î½µã,gÖT#ZPl¤Á½>´ §ëÈ0·ãí< zkÖ �2 ¶òâ\Ë©w/)¤½Òÿ,íÿé(¾[tÉmµ§¥ô×XÚ´MQ¬ï»ByÛÍèB¹¬k;X>²¼fmÐ$´ÇKpÎñ!ÑUJa®hqN9 Bò°Lü/oËOA8ZtÉ×Âgp-a<¶M:&Ï®¾ÂwûDÓí<ô´sØöòPýe>çåiÐÊßJQZ̪k^·!A2v(0®h¿e3h"nÕ}!¤}ÞªÍnß}-¥ôÇgÔJiÁBJ§I>-ºÂlè,0N +ÉãbþîÿJOIO àLD¼ÿ¥ø +endstream +endobj +425 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +427 0 obj +<< +/Length 3297 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NFC¤ryOC)ÌÆr4y¸SE£ÁHÒHT2_bbÐr<7ªØ,VAÃhÊd!spP o:(RT5RÔú^3#IPå2Ó8 e:Í&ã!¼îO9Ëà§O©Áa)JðäqJmìrñÏ. Æy¹ÄüÃÄÓ`5ZÌ-4e/öf¶÷ ÄãräSÇ/çµN\*ÎÂí2ÂÌÎ'-0rèÜ1¯kèæÓ!P98ÀÊ;4¡L2 zð=/£ Â6CÓþ 1hPó@9/cV9cËDÃHÎáÂãxÌÑ*þ£7Ȥj6¶P;pÝ;ÌÀ\ilòî;æ9ãÒ0,k0´2DC)CC$>4c(Z1Å#(ð:=2cö:jt"R³¶Ê¨Nû:4 �µªj6°3lðô´¶<è\ É-3Põ¡Oj÷Õä7.ã.Þ·îÄü¹/ôcI Ð ÁqDÓkxíó9BP¢ø7àè:Ct.ÒZ+¨ê6P0@â£Ø2ñ0ÉI ¨È\¨ô¥-ʶ-bÊË)t2ïYc´V:¡`@;MÇ9TÎ B5Ϊ¥E%¥jûÌoÓù]W*Pá¥4í^mݲK[ÊB0+hc¤Lºà`ß!ÇQ`ð̯@ó=÷36e6 0¿¸O"¯ á̲[¤âõØ:ꦼv.Þx' +|6lÚUéEe#ë +ZîÐ8³PÌ4ÍÁ U¬îj¯ Ø8 +{:kÚkÞáv(PbªUT§*Z©Ê +ÅÖÁ¤¯ �ZÚòàb +N©ki[×&ű(«Æô°hê+¯YXïm ¿X¥OJrn®£²¥ûì¾´§áLiuð¼E [¸QfßµÏÐÝFYõ± Lz¢éE±ámÌ2WýÍ Hþ¥«_m,hìUÊ)K½*T±Û1½[Ýð ÈÎÓh }ÊpÐü sô~Ð9È<vªT)]àÜ5S´ð¸?gôæ+¸<Å.$)W±Õfg_ÒÖL¤,)PÿbüI4¨ ÅFÍ rL!Í·DU²´ÖªÁ&0X0FrJªjP +³+$¬Ìdʳ¤zGRÝXEAÉ8 �âúcªfº2¹hÑÑZs.h©e¡f-©§Xî\|LàµÖbÞ Cô¨LºÇóW s´rºÚlóV °ÿÂö¾Sð3e æRÀ}ói¥Ôp(k-m®ÍfØ[~S|ÞÎ^ +läÓÉcN¦}¹ÇW30O÷ÄNK ³É¡ÏC©°j Ô¤ù¢å¥2:QPPåp-è@R8ü¥8ÄðQòxJþ¤R QIÝ] +à ¦ÉZæ$É$ä¶¶'CF(Ìs£inS¦CpoÎ#Ëi¯.S·¤xH<X¡³Á\' ) � P C +@1¯çpX°6Çå á$&Ft!ð, ²¶^ÉZ«)¬µ³6Øà/éÖ× � ¬2ä¤t.Åà½,úÝ Oq"òæÐ\W.Ü^¶Ð&+>ZÁDʨoGíåsV0ÍuASµBQ¢irÝÅÅ;?+Ìé³WêÍC;¡PÀJÁ,@¶p9? ¡¾fðùèëHM 3"f²xOIòË'å-¯ +IØj~¥},c¡±ÕLáu=@36<ÂÞ � ¼÷ +ü66ÈÃé²8O!(Sa9g>^¸&cÐÑÎf¿8)Ù(R¦0Ø(³ÓgjpæqKR F ÇMN/k3Ø7¬ÃnRPäOIøsn ɺ#V÷Â;BQ9¹Ô óZM«·B/OáM x×õ¦ßüpôÄ(9 ºè²µ1FP6¾4Û§ÐÓ>{K`8!ÌbòÿÅ- 0ÀjO×â\ktCÏ $¾ºI{ ðy\ 6µ9£`Í6)ä³o-;E?L¡À6Áa ¦2&ÀÃnS¸òRÐ#Æ«çSZkÔ×OÞã@tmM± áÛ¯nük5UR¡C¦è0OmÂ8k-Éq_qüÊß~\C8ÒH)&¥®I¹q¬M³Þè¼ WQ`ÇwVëbðà1ÙÈ+Äc+UsÕM@oÞØOca¶®²'}ïU²ýbÌÃâ|ûn§}À ßAÆÅMÜw×âüß®Odè +6×9[ºð]|MWËýf¨Öø ,4°Vù6:lynШ®Úo{{Ä9!Ò _Ä JíôQDþ¡~.!ì?_QÔÄH"Quq6'ŧTÅn.Åþ7Ô#MÊ«P¸ I5'ãÇëÚëÇQ£àrÝ·ögmxûI§¢¼ É ûâªÏÄ+@n-£¼¢º`P-kª£à TiXªB-bChþeöNʼ/îí#2¼ð´hPî +9©µT÷®ä÷ê hÞLàÇÈÂéâ\Ï +~®æÑÆÄäîiÓ +5ÉôÒî¬Ð`ØJ Íúª¨$)@d¼Ë ý¢ì"ÒÂÖÌ& +Ìf ÊØ*hª^þ_À§ Ðà¦Ðä§Äþ?¨j"0+äs*V*ªª ªnæÏÂêOÆsb0&8®çEÐÒ¬Ú.JÎ*Ö¯è¼ií."RÒ/úcî¯jú¯ðîEpÞ #ø^±+R+f² Àê ±z²"è1ãu±ë1 Þ «xë>¼èJøkJ´êm¨X¶v±±²1`±Ñ·+1qÂ1ÌÉÇÐÂöªqÀ¦ ´ë ô±£± Ð +¨Kñ2ýPlKbæ.¢î/&N»ðC©®PJC"Ûp;§ÓKÜæ§&=ëæãæx1f\mð²y +X C +ÔâÉm,ôm×*.í%´h1oNcÖmæ^hYFFÄlJÄåJñ$ÈÆÉf.ŧê[`ÆFpƤÿ'0@P¬w)¹#Âx,Ñ©(È6cªÂ2ÎÒÌJBäÊ,¦ääÊÐo-O<Ë®<@yäHÌdRGlÐþ²~ئó'J#kÂjÇ ^¾mÁ-ÚqIøÑ(a)3s.xn--qi4l2h-uvaC."|FS@De°D¤O0dY0§èÐ$XNÑ4*@p]z;ÂÑQÊq2ò6trã(XS>8P¬®-ª¹/rÈçq9@Û2ã`qÞúYeF + K �¦be¶gjÊC.ŰŠØ~údLÔ.`t½íÜ]èð<hGp¾ñÄ\NË0q2C+8à@¤xª¨êÎ`Ø\òÐè mÇIÒ¸3+ðÇs;2ÔNl3BèNGà_EîÈ·GE98ñ;ÅÐC$Nöã;4)Fìt6(ñ8´2x47C´>ÈgwJu23D´* lÒ:É~T|Ç$ys7KÓMJQHIçtyM-ÜJtå4ÌRj +endstream +endobj +428 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +430 0 obj +<< +/Length 2504 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1'EÒ¡* ¡PÈ ´c Æô!¸¸b4I(PS1MR¹¤Üd7ȧ¡pP\Jª9GKª£A¤J[Fá .»Ðf³yñÈÊt:Ç1àZ 0ÙÄiØe72ó0èh2'tAÃv4ιMXÄPw³ZúªvÚͼÖgsÞÚÐu1XÎæó]ª¢Q ¤jL&y¨Y'®×ì6;-Ók:Zí×Ó§wëÁ#cQ úµ-afRÞ®,Ø0c(æº*hh»A¦§*ÁÈf¿«¢l¯4íHæ0HÈ0@³{LÔ5Kê ¯ ¤(À±&*<"-¯jêø)PdA¢ï?Ôp'Ãè9£ Ç@#|H24L1! +³BGÎXøJJ]¢hÔF!líF!°rª¤I#ñ¿oøP3fÚm°¤Ç²,¢®®¬Z"Ëò+¼æÐcJ +(ðIIJ7/:Øõ®1SÞëH+Úû>ñ£Ã?zÀt¦ÉÄíHØ7ãKÆÊ³¬ûB4ì×¶-@Ü<ÍÛ4Ø#tGkC2òÒ¹ Ê9YöíÒÛ-XdWTMéµr( +[¿[ɲÄ:µ,̳l³ðèн4ZE¸æÛ÷2UJB4"pnF÷¯TO%Jµ-RßT½È4¼¾o`À0UúÆÑ) +ª"°Ù|Dm(Ó, ç(À£æ3£c'Ã#p9¡dGÝ9p@#"`¦"á3È3|ÙkÁå:S!1Tó>béÅ9#l"CÁ5]HÆT/K#@l *É;$Öð7Ã.³ÕÎÃ6§ó^Å9j*ÈGOÍqÛ?Ð(åí¡´8ÌÕE¾Ðh7]È;ç)¾pÀkÈÔõOåb;ò·OEQ§xçS=#Ç +~>7åcúw«çzøï¥Ì¹"{Z$tÏ<ðéß·ñô£íF±¼sǵPbòÞĦÉÜSiÁá¶·WYIùpÊáÒuÌÁ_ ¤@R A@W+îÁh0ö ðf ;Ë[¶A¤"¥*£b`ÈA Bä{l 8¹4Á¢DtM©Ð§ÖÜJ¨1tå|<àÞ= O½©Gv¥é¤l6*ñð(\' õ²Ñ{ "0@ ciÈà°z{Xá¸,ÈB\Úeb*m±TxO ÁîG'¼[£¤vék°ý!¤ÒcJ¨þ � Ë"s\rQ¾¹XØÜÈ m @ÀXèÔUQL" `ÆHpÄ7E²ìüÒ2w\×1/Ë0e>ÈðÞiÖSîQÉ¢$²gШÄqy*ð0Ù£Û9kêÄÄ'ôOÆ`ÍLéÆRf*s½·Ç¨}ÌS¹<ߣ*bæ2cüH9 1дÃÓD!°ç¤ +gâYË~e¬2ÜK _Ì Ô*´TÅÞ¦×3nþ}ÂÐxc (,,öv' N\ëxØ PZéþ: +0éÏ÷%A±Qdé$©±pQ&è[ðSeaóÔ#úÒaÏNà¼ÃnwjOAT"µC �pZA95ÁØ#)LÍ/eçsNYͧ@ÉjîPªF`¡/å;ªñH`Ø!: Y¨4cÔÆ´¨òªucVSe>t.ºm5 1¯tÀ± ÒÛ#8 Ãø·©¡!¤T^k0 IÉA)4-JÁ¦¦¥Êüíî1 +zÏr½*ålÖÚ¬AC01 Sð]#kuÄ¢d¸Ël2÷ÕÚèù)íßêJβÛ;kûð4A$ßcìQ¥5lé0çàç¶$æ½ÐvÈûð¡À×bw=ÂTZXÇ%ÓMHf á±_ pd¥À¹j(ª2:¸S|»µX/$V Z®oÁû«=%e<5¢ýÖª{Q@(Iæ¼ S+ ¡4/BpG $)Ê!î3I,/À¤4ÒÊ«L$í¦ôf °°)¥ôÍõÑZ3Oj¶c«µI1GN@¦¹}7³kЮBSºQZ?Ùi.2®l6»ÓÃr +]·¹¢éíþjnáK×ÌAg =6zÍ¢\ Ѿ@±MY;*³¬y»Wëak0ÏÂ(ɬo.BVJÙ±5¯ûsûæ ÁÌ»1k¨8n4ðvG/a<?9ìÇH.Щ;Å/4ݸÙïÌûoæ<¸VIJͺf[2f´ÔävÙó@@Í ¢´vÒÚoOßmMªµ|A¥I»gÄb0R$f};XÆL{¶£v[{ÎôÑ4[ñÜ´T 0Qáqn7¯¾þ]6sÚ$7ÍÕ/ö¼ tÆõòºVÝheuå9Ø»0Üí[ÎàîñziF Ë"Kh¯½àó=l{2P+^ÀîcÑÃþ¿Ú{op½Ö7»iòÝKé[Ù[íÝ øÎk¬ýh-ÚOñ°5 +JFl=8j{7Ïm(<Á Sù`±=@Î-¿8(ðøþIûßïþ!þÈRo(X¶H^!1hÆR Êm2äÌMoìÇö§,ûøÇH#h¤òP +hªè²îàômÄôÈp"%çíIиÄhÚërýÀäé0¨î)D °ýå¨,ÐzZ©`UIÀîpÀ I( ïÞæ<0vøÐI: ³ ÜiÀ à À¨$¾L$IãÝ +endstream +endobj +431 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +433 0 obj +<< +/Length 3116 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NFCÄryOC)ÌÆr4y¸SE£ÁHÒHT2_bbÐr<7ªØ,VAÃhçC@8e +JªAKÃbá°Þe("Ms3)Юi7 çryÈÎ\:-& LWùIScc$x$üùÐèôº|-671l6]]¦ÛqºÞo§¥ãêFâáÀÎâriâ~3£pƽ¯£@9¶¡ � �`Ò3·2Þ xÌÐ ¡`ϯê2K d¨hÚØÂ¹éC02£°Ò1¡hÇ£Àè츨3¸äJðr)OÃö¿ PP4Þã5ð\²ê"º+0JÚî ÚâûÍïÄò¶íËvÞ·îíMIJ9sã¿lº\L ³üM¨ê9 Ð3>Ì7°4MAñJñS±¢1tj Ðê1 (ïC+}h;B#ªêG,;˪½6)Q¨\ sêÇ0 Nôï[ÛCʬÒ>o"¡i¼ÅLSTå<4.6XP3qάE,¢.ü$¤Î>*kVÊùëÓm #,217oH}ó7Qî+hºØ8 +{p:`võ+ê¤XB*ªª* +º²ØJJ*9Bе-pg_>Á@¥tÓ¶,í1yøA¬±¨è@Xl³2v¥TPÞc¹4c/YóeËK !ÈQLÝZ!QOïðØ7Åü%À Ä7×ÀÂ:4DdÐï»ýÙÊoÕ¾T±-¯UEwçOðc¸[^C-yÆ{Æõ«?.SgHvÉe2swØP»±O<_7qíæ·ïÜk¿ XÑÓR@åWoÕߣ:vþf¡%ìïE mPØöe,-±þÛn)-1u×Uè* +B¨ X>4f4ÊcLØzLaÍ �;@pÑRKM÷gÃ&A °?ÅÐÞ_F!0)XiWºXg¬Ù `@VqZkåU4vL Qþ-e´5hCrAÍì¾sRÖJ[1 u¡Sé Ô Åô2ÂuìÏZ p½¡ÂðnWÃdi �4°QáP.A!@0ZÔÃ1o¡T]b*Wæ"$µÂר6OFI?mTâ7ËnHsÌÚQìPÀ±µ³ÈH {7|ФԣæÂsNzý_ìJ¨¦ÑNGV3ôSK#Ý{ì#CjÈw0:6&,¸WRí¾9${ÐFxðûÍX8)Eh¶È U¡Éiåä +h)ᣠ¢! ¢´Ê¸4KD £bYB B +"Ä.1nC)úwÎ,© ¦2(ÔµCÈn áÀ9¿èÛ|1Q.?àhDadÇñìËÈM3k²Ö^Î +á8" hW70rSÄ}Bq0 ÁÌ(0Ø8jp ÁÔ6Õ éNH;f3-<Åhi$,ÖMr£aÑA-Ê̸2ê]ËÊ/ÓÉD¥HȼLé5âÂÒî3QËÊåjY 1©/-JeME^§ +R¾ì¢Ò?GDéÉ+º'íÔ ^À( ´Í9YÈfý±l¾ØjCq Tç dðÞ* &âxO}Ï:Ôj9åQq]5,@è!JæÉ-mÍ1\w¢ã ʹT ØÙ+Ì<Ï'Ij~ê ¹³¦¤Rfsíw÷Z¥@Ca ¦ÕÔ¿ã<åÃBW.³Ü'?o¯Â%y¡Î³ Q<Ä *¨'m_N%©÷xnÊ65á0]çlWÑ`\ÈÇÞå»| �@©Wì¦ßÙìF%äÆòp[zx8'PMÒWHTP E +a,*ð¡ý»ªfx7 �a 3ì´q´´:7 gØÈ +/0d½ö¹ßcÊióa¯I\EH©O³]©0Qe.Þñ¾òsròÆzn#8 ðïðî"Ä;7S<O±P ÅáDq_ÒÉ_$A.$ßf¦¾ºªýLZÓË$Nç7Fí®0Vº¶:õÊåÜ¿vncÚ4f¬Ù³Û>mPá³¢.á; 3¦Ãt±Gpm@AÛRÒÃ1fª®cÝÌFh¸·2Ð}åJã½ñpoŽÔLêuмA,uÉÖ9->2b©¬V2W'×àsa¬>\ãúx¦yëc殾 X4\y)UË5%ýY +Zep77ßLM±v2ºñ | Î0Ccº%¦ Õs;½7'ÂàènÄø#±Ý± ¹övc¶9>ÅÛ5'Å5QöT};òüÌí|ViZ"í f¨ÊwæSEZt>jMRx£ªû×Ý1@Ãça¨QSÑ̪ϫ<.>ô¾aá¼ÙööºCøèûX¤DVïz÷%näÇV)ÜY +w¦ ¬ûåVEþ®hµ/|nÊ:)îö£¯ï¸°/xKxùæÊ¥®`E¾I$Â>I%ðh&-Dz¦ì ¾Ç¨ Ö_§$eç`èÈ#iÐ ËF Ê j +JïJ¡ONùHºNB#.ïçGn¢à¦£*6£° �¢.È¥¬Ì<¾êºÅ#`@«Ã¬Iý¶ù/Ùâ¢1â¢o^äz®bà.BèÑJò/ööÆ ç¿ +&¶÷Ø!ïX:+:®6|Ì;èj²ª[jK8åe- f´ØÀ/ÆdÀræ¥.µÄ:I ÜîάSíU#8ëÓF& ÐN°¶â|Ñ&(bÆ0mân*ÐÉv£ªô{ +ø$fËç¤Åï(_ ÈÞK%úÅ/<å®Ô+ºHO �âÄ$ZÄíââçrre?n+§ùÈ&YÀn>¬o¥¯ º¤)ËæÊHùì7N¬º¼S ÒzK¬=×%2ARIZÏÑX%pcR*r'Îma£®bløÇ°ÏÆÙ ÐÚNóN<åþƱ¬»éjL@y Ø¿ö[_ bh±.ó"jÇ`AË`CïÑJòêc±åL:AdBàèa Ò@ëÎøèX(|##&f¢à´ïdjh@j®:¤PûÂCó( _"¶ Øá-<Çî>M?3w¦^mQ$³Ñ*´&K¤o«RÞËZ@1>/«b~&ör~y$4ÔØç?'ú@ÑX\1`Jq×®ìLÎô²CXä.ÿ&p%éÖÀQÑ~ÛDf£REVÓaìöJrB±¬üîlc%{:±tñMpd>¯R6y+ã¬>ÃX$.Ø'¯=&2´~:R ³<¶E £ò(ïz´C÷Íü @ +endstream +endobj +434 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +437 0 obj +<< +/Length 2922 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)ã9ÜP2 ºhÌb("FóÌSC¢ÁHÒ8T2]¨Åpz¼t@7©×¬!Âû3 + Æóq\)*¨ÄjEöST"q=BX¨ #!pÚ¡_èuù Å¢Ä5¶FcAæs9JFS5°h(2¦ãíxÍÓi7àTZ%Qëað°°Ün.â¶8ë.Dh4 sI¸Èo;®fÒ¿ÚtÁNc4½/R¬AÀbª" ñ«ÌPó6ÎÀK +8:ðRi +x' +´iúª§$mph$m,бë2Ð �Hbãû Ã¢î¢ *H{Á³Y+Ð@¬HCÁRBn>§4, +64ʺ³,Nú¶6!£gJthà¦<Ãxà9.|¡ <Eï © ¸";Òõ½¯{âù¾¯»õNÓá �;S&¿ÜD£Ñªdá74ª¬ä¨¡ÈfµSdôò¶³è\7-ØP"9Ãä4 ÒÊIëÊ � Á»a �¢ 3а¦)<°¼±ÅGÔÏÞúI£ôþWëÝRpÎ0%ÔÓ ÆaºIÀ@3®e¼ÊPém£³½\0½Ãeð7Ùd3 +«ð1Ç# @;Ô¯@1£c(3½£>`¡@ߨ'ѨQß¶ Ð"': 6ái¡f#ñD%8 ò2è[Öì§¡ �öëÒ¯jÛ düjÛL|Ì1NÇÓÂB;(g¡¤I¶¼w{k7Òôé_ªcP²`O[Uûf÷b7"¥Ó¿^qz3¬Á<0£(èäM¡¢ªE ¬×ä Æ±óCFï~^sùóÝ_D|¼v*,<*^³AMxGª +Û wË`ÇÐR cF/Z2 ßO ÒòÖÁz �ò y«ep2^OÄ6VCt§(3( íi¬é|97*e$E åÑ¿æôËÃH)Gá¹ñ¶b¸Oj< ± 6eàñÍ7~Ñþ<£ðÿüQu©&·cëÕAhm;ºVóúÒáÛÆUáÌ`8¥±7ÕC6@ô@ÈrÐS'ÄæVÍ\nËâ#å%ÎSB%µºd@Æ200PÃ*±h^ Æ&°Ñ*Å4éÍ.ãV³KÐ,ëHRÞpârÑv +<ÌvB GX±ã`ÈÇSUGìþË×Ð*A,^C°VFÉbe/z!Ê`@¨L ý³'ã\{ªhQ9¹wJètìÞ¯úbpý³0pBZìÓñÆ_Iç`( 4vr/Ä*këD±æâÈIò¢GSÁT0Ö[,Õå¦×¦Æm.1ä¤SöD +Q»$dÔ ¾8sN$ @4ÆóÒ(Ñk¯Î836kG"c#g°ú"Ǩá+ÍÑà$o®ZÚXcg]?sn8PÂêYáΤdªÈ§ÝT R%ÉjÓ8M`«ìxºY9P'uCnÆÔy¨ÄbÇÏתc½ªõfQWò + nP®Í3ÃÝmöíQǶèά%±¨9ÖJÌ+C* µÅûVð@Î,»eP,'zù-_$g§ÆÖfébËÒÓ �ãi2ß<Î.Ⱥ(¥Åj¬×0D]I`hZ-1pi3+z!L½÷,rªVV¯ÁfÊe#28µMá¾ ç ÒUÚW]ì[Ã)í ªh1¡#zY·CíLÁ°P ¤¨ÓÑ$5HËrÓ*¦'_F;gLm²kQ¯£z¤YD2¤ Qj?IÆñɹ4Á@SGÖà弿3iÎ;g¬ÚOs~_Ì-S2üÑ¢êR T%pfíT±K¥& Ê0 +M¦_I MB'$8)<§ºZ bP9ÅB(eÜ÷:¦sàL_ô²7ÁcìЩlaP7 5µr«SÊ4+I&®¡¹PD(2µz N¥O¸kàÒж6u Û`ÇCñ²nÍV»A\ ¦Ãv¨rÚò÷ <&Ê¥ï#wÌ8õV8Ä]lµºå>²ÅºmC¢j÷òñ`° +ÌZ!S¬äÜ»bìsi±»ÁNS§Úæ6KÄ;{5j²ÚT;wѺVÓ¥hÑPöÅxüÕ$ÓQ®!Ïè¢Õ¤¸v '5Ös°åyó° Íe¥ªukºNr^ÎS>D#°uHfð_*+êz¾>Ù ½yð7ÇçuC#ø¾¸Ò"×!@FëÈö¼x ~Ôe} +¬¸/áÏݹÂ(HÝÓ |ïÌZ}ê°´iÒìLizcUsã¢Ë¶n2Ù äPEÁÊ MIâHn«ÝÖ:K¿m¥oÎi¹¿K°÷)ôþz÷Ý*JjýóérðàÌ;çIé~ßEo¡ �}^MÙX;¹ÈY/O¡ãDº 9æ\ôâ.ovM8æóÅÆ hêîÞñ-¢õ¬t䬵ãÀ&¨~(Ì«´vͱ˾¯ÉÔ×<4oø@òåöX' v© +mÊZÆàñnBñ¢Ô},Ф±¯S.´2.(ëªlÎ. ° +AÍÂÙ ÈØExÉb:GkîNS)þ«n\æü¡Î/ÄûûÆ^IÌÆjF¨æGkàPù.ré¯ü«üâêZN¯ ë.&ðNâÈÀ,ìÈOE,Êïã0¦î0>V'¸îFîÆdïôïØÀw¯ðbð¬®ôj\^QO2@à{/*î¨Jó#îónøÐ �(nõ®L%£¤ªÐ$ö(J ÆË´4ãº&1Ð[Ë"E¨=è¤û®|û ÏühNu1ʨoòp¼ÿíè®vÐ z`WKQÇ̯omp^bY)f¼ð&<óIÇ"§½-vñ1GpfµËÌ~Ó®0ÂòÂÏElªÃoâÐRËô + +ÖÍh lDÆ#Å(ÁÃ-$qlÓËÛ$íB@ª²X¾ÄøËô."æ.®X.# ÔÃP;'ã)(1ç(rJßÚß@nz ßÅà¶Ãå LB7ã8cP9#ÅFË*²r0Àl$ãÆv?íB +endstream +endobj +438 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +440 0 obj +<< +/Length 3267 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KãÅI *r2çáÀPC7E# Å< + &ã)HÎnÑ(À¢,5á¸Ìn.ÄTîmr2Á¨$ +F¤Â¡Ala¨BtÑá¬?"7bFÚýOc²Ùí"á®én)MÆóÌÒsÀÑsòM2-9ý*Üxl8ÇÔ«ÐL¬¼a¢²ÞÇA\N "´Å{¾ßËAHNSÒü7êû¿"ä1¿á¿D /á½¼sÚ÷¯hÞ2¢àR " ÔÏ´*[HÕº*PÖ² lë·C¶°,MÂp- +¨dßksö9cÒ8HÞÀ0NZÑNRé¤(ã¬Ä*É*\ È Ð2FÍ,¦#aʸè$®ï¦rä.ø?ï=1INj¢ <Ù7Nì°ð%Ëb¬ÉøR 0ê7r,k0þÀÏ# ÃX4Ã(Ü/s2LÓÒ>A¸o?ÍòÓÃ@ðLñ290ª!»¡6Íé$·DÜ2TÎUP ULJ´Ö¤±YK¤ 7Gqó]Wõ£AN§XTBr®0Ü3¤¾ °ÜÀ9(Æ4ÃHËdT·pÊä°h5S]¡tª2Øb4TlZQRÏ5Vè5s&ÌRÑháô$h®+·2~8#Â6£ Ê9È]ÞÌc¨Ù"ÝtÈËMÒn8@8 Ç}Ôßdà3-]()xg_áÎö#YÇïòÿØÚ^ÍB¨£9,o®aP# ã6 4; �0Õq3 æ½`ZW +ʰǸMbØûÂP,X\é[ aýc8[ì[pX×)nêæCÐ%B~6Ý/ Â63È<(ðã¼æ2ÌÆîçrá¨Ð}ßÚåÂíÀNÁN± ènZ E 3ruënWGOxZ\"î@ïZ ¬ÿÛ3MUuÿWBo'`[XshîéÞånÁJ¨32nl=v"ÃR^L7¶ÀÞËÚìmïN)æR¼×ª÷_-tÁÚ»ßK+FAë¾ô°ÔÒã=ÌYy=7(ÇA£{DÔð³öRÊÙk/P" sQ'Ø'ð!<# Ô%ÐÐϳ³°{/ ô§óEeÁÉß©8Û`O¨¦¬¡rYyOÌ¿×JÖ]9[ÐíĬ(z±D)UI¤ÈÇÆü]µB0ÙüG§Rè`3`¦$9¢6lÖÈqHÞ&ðÂY-`ä¨Ä½"Ò`R¡Â/´í 41@åã¹ö%tv~ÑâF«Ù +$cso°*ø&"Q(7 ¢N@4R1dúS©è²"Ø ^vÆÞÀfeê¡Æ\äÖiUª¾C?æèã¬[:8Çä¸ä$wxfHYw³ò]½Evb§dJ9w2ÂLP80òNp¾Â<$df+J±!*>35+ËâÈá NhÔÒ¢#ê8Èq.ÚL3µ,OgC>ú6~ùþ(( oÖµºß& Üiî\ìQ â&U¡bE j&¤WÒ¦mB¼¦)ná¾4ªx×LK4ÖwÈ©s<©Ôô§ÅåT ®¤%F«º[ÔºñS¥ó yHÝ44 £jXÎà86å7D* Ä7¸ÂØjÁyA½P&*!ö«Q)òl|MÂ˳ö9c4fÌáv)¨Î =I,ÞBe^áòj§þøWÛ-dXD· JX®$Ìê¥e¤ .Iº(ðÌÆZC¥óí&¾ÔRt¯rQ# bR¯wÙáNeñ:½Ç¥è2|)ú>.Dm2qæ`:^ :pU 0)PByø_·È2ÂMÈw-«àòDn YZM=C£uH§(mHåïLðS !4(À p¾T4F|Ià5'çÄÀfÆù9ÉÐdXdµ¶¶%Éà7Ë0¨¢^±µç½*zOãÌ|2ÃOܳ»~§²É9,4äÜóòNlº?$}ùNLVþ+ýsL:}ºÖÃEóVXÀ *1ÜUªerÏ9ËBâp>-t%îk1|>nýd6A¦ÙxrÖÁ¼1;ÐíIH WTèÝtüà÷à±^pnÁ¥ä9k¨ÉKè2N:)BîK9vt!9#]h6غȮí JcÁ´Jæ-Ð^# pC×Z̼àÌZËÌãRòõÔ=´EoÝl2¬#jwËľ¼ûúSe¯9Hñ{ÿ.îh¨ÅDB¬RAr%ûÊïï]´\ÙAß/02VØÒ*×@;ë²îl9ÀiZá%c OfÈ4óHÌÐ;¦\Ì£6gL6Â{]I4êåÛz,3u,ë7õ(áCr4&Ù½É?¥-Ý·ãáyZÀóÔ{9§?è+\ù¡@@`eÁÑ ?'B¡H4pÑã#A¼:Bâ"q!ìTy6è{áç='¯qO:ÿè£Òd +Àà½ÒÝ8bîÄZFÁaáÛÎör9¾B?H=#í)Áï¾D{Ë pXøzÓ0¢¡Sxçd3Êõ¼ûû £ñ2ª1äÆÁIª|ã²åÅÒhV¡ËôÎ"ýnjý®röNö¯à Ò.²µîÌ'åRjv`Ø×(O<e@Îml7ÀP0@·Å'ú@êR+Ð XÊ£v®k>s«;ïôQ"öÈ Òv`ÒGÌì]¢ðÀ¢ò^ dÀ×èGfgFx@ +ÆëÒX¬ö?) LøðSYJ¨Z¯oî%í.Fè$w/Úwà@@ÞQàÈÃ08_*S RÌ@ó¢~é ÐyOñNþ/þ¬âFCÂnÊUBÂa +ö ½;ðfOÆ$ Ï(òÑ' ª+ÁÖt$ÿ¢9Ê Ï6ó¢â¨1pk:ol +ÜCl1ÍT<P»^üÀjEëbPõðÑÄïþiüqÏhÌHæbmÕQ¨n÷ §ÅQñÖ@¼xÞ,´\M,oblFèÃPéÄÁ#àYî'Ðþ'к¥îB4d!Q¢;ÐÒ)Ä´qïr +¬§ °î²¤(h<L.b.ÀS#ÒQQâ EƳ¦ø÷ÌÉÐF1¡7ÕBrÂz'à®KåF  ÊgÀÈÜ @ÝðI!UL¬c¦ô$bÔeÀ@Õp©¤ö"RâYbp-'Æ3âT%HÏ$bëTëÍÚ+GÙí4í- d-NÔKÍ'KÔî/®îm¶î«æahFCjÒ§1%d¹ ±Ô¶°¥+¥Þ ®L +ÙånÊâ_3N§³\UÒ¬b`ËÖBgÀfz?æQÀØl{òÌñàYL:°àsº¿QîèÜãÍ!Ò6Òh:ómÌÉ-¦rÒâËPdQìç°< ÏfèÒùqº© @%üwjÂ$ øf¼ë2¤¨}ÍÂÙ®]3ÚM¨ÚÎá; xWO°Ûì.Mt:y&$ÜùB±þø05*¸¡EîÊt@¯ ß@Þßüà º-£"ô^ôî$â8züçnh +*.<@#÷.àË/2öR'¢VîB +endstream +endobj +441 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +443 0 obj +<< +/Length 3363 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2Î¥BT8Âá ¡'¦ctn1©I((a.fRÑÂ5(YÝ4b1ÎFS ÐÊPF}´Pl<ÍæâÜ,\®kÅêù~ÀcowÑmÃÂa 4:((¡ãxðÌoF#1 +F¤YévùpÒ)¿Þ7Ã1°¸q¾Bá¥n»_áo0TâÖ.Ûuw²äÜo8Í'<Ýo#ÝC¢-üZ=Å#ZzrÉf±×¡s`P )âp@+"p( ,J溮ã{.Á°£p¸læ: #t01|J:q$L £xÈ2HvRTÊ Á¸pÖ +"hê?Ð@ÐDÅÁ¬ÀÂ4' +м3 Ðì?Äa©+Epô@7E, 7±4]10Ê3£[G@Pfæ( j©H×%ÏæcƱ¼rÛ·*Rà·Êzª8Jã¾I\:N{zé:°dª®Ðf½(æ1CHà: ,ÊÎ ÏE=Íú*õ "8ÁN$ºcA¿¢ Ð2£n·©(eã©O?:Sò¸ÁldÌB0kg ¢5miHÛ Zë#Lý! ?[dÊ<àw¤\t]Ës·jødZ×üxÓHÇXBר6 ãBãxä0Î .:®lCµBÃM`0Hô2Öh Z 9¢!ÂÏ?P*ÏPаÀè¬x[¬Æ×f)ÚzûMù{yÞ«éf +x `ÙfjúÞµ®eV`Ü2ûF\Á ÁÛåxðçf ã7fh·-¡}a¥67òîÙà²%7%kh᪮!ÌêÌê: Uàê bv§Ûï"°sJév$ýY ;øe¹|½<q`AÆÞYâ4Õ^1ã]ë²Áò¨]r"qâ?càU²ÅcAñû&͸®~\L0Ä£-ëö^wå>µÂ;¨ É=RÄ»Jòjj !Çþ];9UÖE Z£4fͼ¹¾§Ð¨t à1za1>r$É«sFduËm"'L¹ LS`ݹ§ì qõ?áï·0@Cc ¹00àCiÏQõ;¥îÎ!,M0§ÒhñÃÂò^þ¡VD*}O@0²JÛ»î{ ;'ì+æ¸:ÐÄ_ôyϱ¾ÀõU8.4ÐÅáa» ÜhðÚéD2|_Øa§Dø£ß´$²hZºÑØ)Ï l¹ÄR&</§xÁ°65§´e³Þ#Ç0ÐÊ] .:BÈ'Ô!ßDïe¼2·¸;íaåPÚ¸ickÈ: Ú]CKcoöl2 �ò¼Ý©·e¶P)Ϥ÷Bf] õ[ËVÂÛ1P?Çý ÔjèT® +ÙöRY32 òTÑ*¾Øêcz¬91 Øÿ¦«ïn$D¨å8uBë£ðro¦$´?'ALAq [ÓDoIzn/PÃY\ã³l=Y´!; jµÏg +ädª+ú-#Õ_4T)ZY]zLl 3¦1JÒ¤+U2\Eê² }MÉ®H)£ú£ÏA¦ôâúºË~%Ò£YÔàÚýi-,ª4ÙKÑ[Ñ:(E(¨ûcä~Bk>¶`ÏTÊÂ:Ôs1YYm@¢ÜÇú{rãºÏ³ÂDß3ÍÝkû.¬ð²½®h¥ÅþØ4aQ5VîòôUZð«Sv`¢Ê'Öú¤§zÔ1J»/(!ê|tZ°ÆKµ§}WÉt'pr +Eê¦-Ìé¡>©Néñ=#Ô~ðÉÄzPïfaém³Õ¨1Î)λ1Á }=I{³1Ö<ÇÁ 3¼Wu5 M¬yÕQ®±³Éé@]!$Ïá2³eW£e¬Âæ§RxC!l¯!äT`¹u)êÝÐ\ػʼ0?Lôâ_ÞÊ×'=_Ä.½ºâèe'ì÷â¸T6þ/¨@®²Ù Á ±æ1oæ¹Y¥>×`Ñ"'hNC9+ÊRà$X4*î]xb Q@:.'K/$ +±UÑl@¥¶.hÆâÈ]^N ëéH+¥&oT±Æ7Àкª§ìTTS ®UññÀææ'`3³Å+-ŬۮÅCvc-¹¸>Öê½#мYaÈ£ñ$Í +à.ý·÷µÑ#lÚ0æÅCdÒàqIskn-纸]&)k«]×ùWÁ®'²9Vòçxï°Æ%µÓô²ñ§=Í#ïçHóÃ,êøÆ x·í1mOdßiäaòpê(Ú˼093 ÛKµ(¿wÜ*`°³H±`Né?;¬ænÐP_Û"ÞYbÂåy½Õæù!Ó©ÓïLvªîpnw¥%·bÏ|è-'À{àËR£#½ ßÉnïÅ´ÝÂUWEÖç¨ù/ää%ÛûNÞjw{ê`¤Ä|pÆÕu9ùf#_hm°Ø¾Æ¤ZYFTÊ©R>ûxËcºoõ Úå]òC¢lNÔÜ´?òna$;þjÒn`Ò'ojЮã>cFòb´Sb5I5æÐ6M66ÎèêÏ<8ôô#|4IòÏü¨(;&dTàP;£¾<#ÆÞÃÚò#à! +@äýíç À ÌK° +ÀMhö +@ÒàÑ D^ À àèÅ|JĶjE·äO0ÄÚÏíJd,C �-Á0¼å~ô¥>õHT°NUTU¢eð\0`Wob0#/Âüªì[jòÁvC¾J[¯fê#ÄÔãC ToÔEê÷Hrq:¦Ìþ0Ð^Ó 8Z'pᦢò¹mfc¦? Pd&FdªxÕÆÒlè4fær·Æ| &hEgÆR/¨®©¨´éKð£(0 Þkë3 �îÎmQ\m8n @áàÈ+0®=g ÄèM_ÈõÀÜDÐ^ÀYffþÀR ÆâehÑ2® h©íyÐjñx_CÙ¢s¦urè9 §Vs Ý àçH%ÀoRi%¤%î[2dÁü[c +0§'Eö>r°ÐömhƯQb* k&e +аÒNëÎ¥É* o©¹-æåÃiÉ/nióm¢mìNë- ë×,®QÍNpª§¬¯#®,%6,.®Ï.D ÐÓ0Öç2NñÂ#ïxÅë®ÔîÓ!ò"&~¬ÀÇ!Î g+DþëD ðã)ü*ò1Â}è8|ér.ÈBl +Ö«É jßmyj5¸; ,×6Þ³¤}²ßàPÓìÊ} ÂÔmJΰoéÐgÈÚѪ1ÀMi*ÒP*H z~¯¯2±HñªD"5,g:Ú¬m¦ ëgÄk:0î)òÛå+æ#`azÝOÖOÝñîñr;ï1ãVïÇ89ëÂÅ'Ìà³ �ìqW5dê× a'²Ä¡+9,º-1þäÖäNHUNÌå-m# ðêÃN,Ò|òòÞIâ¢2æê¥õ.Ó`:~G¥*èfE |w£ÒÊËRi!ó%tt:EaÅ GoÒëqÓE¦2Ëà@ìTäÎQ4.×FÜîäûo:Ü?e.7ÂõD¢ÈÜ@hðÏOeõ @ß S Äó&þîpB +endstream +endobj +444 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 114 0 R +>> +>> +endobj +446 0 obj +<< +/Length 2772 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NFUÑpÖyO3¼æs¦kxÐPe9MÆ3)ÌSE£ÁHÔú\2_dbÐr<7ª)VpÀa +³Á.x ÐÊE6 '¡¤ÆR3à¤X ºt¦R¼ØyØl¶aÊl2éæ#QÆtÙíE%CU $ÐSFQ±¸Ðo*3£ Q·éõqT®Ì¸käðxBÛ&zI¡ + +DRSÒ)"¦ ¨f +PlḆ>¡£î´-An·Ap¹ +ðä§Ã,@!HdHj¿Äb: ñ0P:Ã$\¿DIðÇÅ1\nñÜÃ¨È JÐ\#Á°r¥êPj¨O \0( Ì ¬ö) ©2*ª£«) lJ²JÎÉp-rb·Ê¦<Ãxà9,3ë;ɲ(« Ê£¡ p@+"p( -ÃHÓ +C|i9ãÙ#pè Âbö:6õm^7 +õkWVÒ3 A[VÞ:xÛ]Öâ¸Ò2@XÿP<$®àp¡<($¬ûR¡E7 -`¶¡Ý¨¤±ªlÍ2*жÍI Î,k-+ +Êð¸ 0æ1M[Z7ÈtB±Ô;!Ñb®¼ß|³Éð +@Ê]lZö©Èn!oêBmrÝÔµ:ôçÕnC)¨}®ø¦«BÈÉÈZn´§áHrÑ£4á5#xÆÝa 3év¬:C«:°5ØÒÖ-PôÂØu|R¯Ñð£×Ä¡lV.µ8Ê2(+æªaÊl ÁpÐeI{?J¾¶ÞÑzðÜÀpHÂ7ã¨Ø0ëûÊÛôc'B:mvª0GZäl~Ád¢µ£Îxùåyn0,QÏýÉÝëÔò!r¬óA%é7¢c»EÒwMöl@2/uoQó÷xüÄ ÌfH»þÃD¬U7]®ü² º~V¾1OéC7¼ÎÜrep $M À®<6VyMèOå¨bÈë)<e+åa×`)6©(SÙZÜ{ <ïhBkÒ:Ð1¦ÔËXË!eAµSþxYíä·9Xm°² !(j9ghÍÒ¤|ê¡¢ +bs gE®9"}âÉ?i& ç¢øA �F #Wj¹¡x 0Ó`K¡Í÷¬î·.æ`¡¸% +Â{ää9C0yiÈ.Û`v4±û4ðÞ¥Z(w¹¹ÐäçÃsz2ðv<Ù¦$]!À8¦§VU!È) ]SVª½©«%à\%a ̯h1È9G1TÆøâS^£¦|³G@lÖK¡ ¡¼;"&Þ Üä®EÉʸ[yµÌ 00ÕÞ¢HJò+Ñ$XVIÍ:àf¿Áú9.ÅA8¢Îyb +,¨Ô¦Ôjø%p g¾Çôí¥°ª`]¿~®ÕÛ±ùoPÖ£ü"iáöY©«yO1ç:µ.j0 ݤǢeÄ1w1Rãh4f\,¾53%RÍN1¥9Å*ñ%53sÚMxÑÔàom(#A`=N¥£J²êØs«¦Ü'P&¯v. û¡ôN¦¤ÛS)_iÑ$º@ +(r.³pRxf¢)Yb@H'j0xìX( ÓRÎ¥Øþí +e¢I¦Þ¢8ÅÐ,£´·-òh˱x/Eñl£`Ì-µdVÝ*Xeá#A×Bµª0ÊÌÕTn8fÞtÈósN|î³ÐÎQZ"HAJzçÚ£bШ8CÂØêÜNàHä%'häYWJ º´ Ýi 3[i.è/£ñ\ÿOIñ?( +Jþ!$·ÝRÒ=9jg¦K!ðfâT ¢¦AÁK¦bDÝh®]`ÐÆLq}¬A«úë0Á3e¼UϨ¬{z²¸ASE d@A2CÔÆòn Â8W(fÅaµMev-æ9FÑcHiUù*:dYj¡Ð;»©²ìËëáÈ6¾ê®ýeS¨cá'UàAâõ&¼phǯZLô=<Ùdا}»ÒQR;%J¤ÖìUÒ 4·HºLÁE3ÿ@äþ{Nbêw£®4â)¥xBe^Â4[7/í¡¡®ÊÞh#[¶6³¼vCnl»r2ýÊÄ÷0¸Ê2ThÛD-h6æÚB^ª²ÎwcÃ)À8J +>ö1¹_[-íT* ªu|د?Tk-û´æëÑ í9H))6ùV¨Á&0qRþ^Lù ÑB»EÔpâ8ÀZûclñºã£;qûÑMP9#Å»Ü7?Ò1é|)3â1èõ¿c¡ +f¢Û®Áw/%ì¾û¿VïaÜw®vvÁÏcrìn¶^úß|«ÆÖ} Ó!¡´D_¯nXÁã $*GÎ@¸m+%ËÒêH¸êôÎÛsYîWGÏcq}Oö/ã |5çQ ıSî¥ÚÄÉ*}Psp}Y³×ÐÛ³úPlË._¾Ô¼(M©:ôf{¥Ä¾6l.Ë7°SXÎOÎÊð«v)ízøg,ÏÃòÐ +ÆÝMqÂÞ co¼õ/ÂfÍîa§¨¢ÏßcðgëÆÓHøå)k`èæ¦|ÅNU Ît#t`Îw +©Jî �¯ò ª¢BÙnÈ<ÏÌ +ahÂ#úx`PjæÒmcZðJ +°è&cgÊn ú¯,àPýD?%Ür&ÃÌÂUFw\F°aPø|ès¦¼ ZjÐ÷jįâ÷ê(ÊAî¤ø¢Dµî0¤Ïë¢ÎåäRO¸0*ü �°Òîj«*²ãöà å4 rÇ3% h8\-èèJ~ ¨zÅ +` q{épmë2v °L0y¿ÊÜ§Ç Ê6æ¼n±n7 1Ü|PgÎtç}, +@¤ ळ1ºsàÈí&B +endstream +endobj +447 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +449 0 obj +<< +/Length 2480 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2'EÒ¡* BapÐPÄc. Äâtêf6(#xÌBTÊn(¡ãIÝ8f1NG#yÈæ)¢Q ¤i*¯E0Qhõb: Õ+öm`0¿LÁB¡ Òs¦ãÐÒo7FS¡ÔänÌt$RHR Tr5:¦ÅäÆNDO¶;;Ýö- l»ùn?#Á4¡¤Üv0 &A ¤G'us Ìæeî]z½.¡çê7Ìzc»´¤ß©A Gþ(*º² ÁÈdÊ +ÀæS$-(xj¶!`k£ÌC(̶CÜ2³*î¼¶³ôÀ"ê@Â12á¸\)0ZÄ23'£è2ìè¤3ÂàP./ºöü¸êjG)ßHiAK1ô!-¡ ðøZTØ» ¡D:Hãrð¢ *-ApoÐ8p¤°ª±¡ 3H"ü6ïÚþ°J' � +Ô²FÔÔtÇA³Ñ7p¤, +cÈÜ7/;¯H3ÜFta?£ªËÇG¢£$:à @+"p( !Ò3<ó¤%;Ï ÖImX¡ Òêµ2 ¡Ët¤tú¡,áHTиcÒ83Í`ÚVjejÁ°5ÃèØbŹ¡ca8,¨Ê]ͪ©¨ü*8}4\6ë%I."Ka°lå¡yjÇ*¡i°3,Û:Ï´#hÞ;DÁ �PÆ2 È^ Ѻ@ñdl*iZc¹¯qT£>£-ö{ß¶½tÚ9µà7QÄÂæLly¾¥°¨o ¬á64Àк#ÓA°`óº³w(Jxb/ÙoçGÒÿ¸2Pà7ÕÌön:n3¥´7m2ÓÛ÷,ÀÙ]aK¦7nmSÊ!Bä°Yf:ç²w? �¡93óÏiÊxy¯ ã¸Ýßø=·ìÒÚjeÔ8$ÃìIi@e··PÞÙs -Ê6v¤Õ a:ÆaÊ \ª;Ì4°tÃ2CM9³»ì÷{(^IQz %4rªWÈ0²Á$ÆXÁ¦.tÒtN«ÐV[1Tdä@_©y¬öd´ÒZMñÁ³vøÈ#«X&Iw`ÐÉô4Æ àª`R¡$ðÝ!Ñ1ȶ(¶ÍÑÚ "PB2 ¦N×N°2Ö[+"h¦qÕjUU$& +DÊE)Ä2e9*éñÝ �I¤drLÑÓTÞ8 =NQ´DXØÂ|áb9GHìzácQm-PË®`Þ±¥\®^¶Ý0#%Jâøj½Á½!ìqØzÕc-¹ +ä]´x¡X®gH7Ke �FÊË̬Õ3RRHÖjMY5ì»NCtoÓÖ2otâ+'XÎK<£T ,CØhN±Ø;Gqjªy3]téñ0ô ôt#N5$Ua¡UÅÞË8w;U>$q¡4ÐâDÑ¢X¬Y3¨¾phè5±à¤ÊÒI1fq86±O$`Ð#dqX¢`@Å2.Jg¤ëjNÐ!=DúçIÉ#BÀÅÚZJ='ÖåëPT¥C*ÀæyTu@À#E{T³ÑSªV«U|£Óò&1B.Å@3ðå )ö^xO d¬µ¥±-!jó¶Bä[,;0çtèYºË²¶Ã+?9ªèdtÝÎËO^»µ0¦Ò'Ô«jÞ':èVkÂ<cëIQH~ÊÊ4Æ;r¦ fjH f SO`Ç1ùO¨[GmaÒàÚul$ìf¹fª°øÖvç=@wrXÐâ¬FO0æ²·FG¤n-Öàj`¤rì)Í-òo.|7VvÙ¬ò~_¦^·®³eBI#!.P2í¢B'@HÎ\A3ÓÙë}¹?(å3±L[¢§í<¸ÇgyÁ\ù?¸4os4}§jBïTÁho~%Ö²^mdC¡Ñ}h4Y çõ·å©-Ëòcð((Àö#Ö¶k£YFÂ2"Ë'_ Ù 9^6XäU¬MJY56brÄ÷Oc®ÖZÛ]Ú³U<XyÎàb Ô9ýÉ4fuiàL#¥´1Ønl¡?<,dy×"ÆØ^0ë¬çèÔbÑ&L#Â.³ºUJZ0È ÕõO+È\O|ù¶Sí(ß:ºB +âKùÖRPh'[§ËÆï©kÃÄ:âv¡1ô'zês´ªu5Ê©·Q6¥¿úyßJ �;#óGYÒ-jÁkk¨àîëÑJgþ¸¥é̹"`½©*¦~«,St±©ðÙ¤E¬¢qJ$2ÙãÌäå«Ó©¦6Ô3ìv¬·!{\«vü{öÒ>j@ âräàÜ qRÌåà QKdUÑÊ9¬hä A°8+¹Ê²Ï Òü?¿*CÉ*Lð`H²![ØØK·Æ[_|²KZÒ[û º)3äJKç5¯X× D¬!]âsAÍÅû` d®Ñra÷)8yÄÁ öníÑ7eüÁ¸É§mÐ@Þ3`Èþ¸3ÀþíjǨ¼dSXöd&ÎËd+-"ÈnJXoXLÄJ Z7¬!zHzgÉvÈ@ ¬: iªm¦ F æªë)ÈQ@Àl&eïNõ0:7t +Ìæ^ô ä£:4ÆFÊ,:ìíÐÏ äÊÏ Òÿ.R8Ö +endstream +endobj +450 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +452 0 obj +<< +/Length 2906 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTQÎp(HÅÃ9å8f1§C©ÈÜsÑ(ÐR5:W¢8´"C êû `0&«Æt$®FsI¼Ü\"IPÕG#I!X �'+Öï)H¢H¤j(3q§÷,n.6û( ·0Õäìc1¶Gs90:AÈPp7MÇO'Ên1 ç3)@bñ Qó.ðãcøõ(äú2ã@;/Ð@ý?àË #0Òú¿£+8ÏÎbö/ÍZ! \$H!ÃVÙ¬I{ ³2.̳lë>дm+N¾5JZ®aÂ$ Æ C´Ü Cxº.ÐP +pÞ= @÷¾/0üAïÜ2ÿÐõÀÐ@éAt BP¤-7ØÝ´ÍB ¢ Áªjz¬¬$³¢è)+\¨,¬Î´Aph¶+xP"CßÃÍDÖ0´ AR°èè@Á¬Nȱ±³&ÌðË>GêBþ¦PJ^ +½_UèjÆQá¢=I7KBÔÓ`tðæ9 «D 0«ÂôÔD2RªU;T£Á²Þ$´{±0ÍñÛD¨Ê0À±°è)_-EOÕÝ]/-ÑrDöDbaÌh+dH)Á@¦¹àX ÝPB*+4µÚ«ªHkL°\7 Ì @)´5M`XJÍÁ¾,ÇYXÝ6¦)2Ðà97 aW;tÕ}Uc«¶[zÏKì+"p( !G²Ø + 'FM~KÃp2ç Þ8pïc44ãGâqp7 Þ6´AÞ¾O÷5èZ*I9úmõL8â¤Æ9 #ée5F¦]%×±*ËPaFÖ,zef¤ÍÏÄVÎ$^U)¹ä»¾>ë\z¬©$Æpqe»îXrä¯vÏ=¡@è0wë9 /(PË©¼qôó't r¦\ºÃÂ}h@é¹G4 +g~é¤:À Á¼ ¸ ¼õÆ_)¬6ݾd¬£pÑ躥AG|ê=#$Åpdw¥õé.`Z²Öf¤m¢õäòÌ( Î(8GÀ'E0¸¢8M¹6I¡ÂÚ\ÓjtBa +Ìæ-@N5>0 á2ÃýÓT$yÇòÂPZI°]A¼Çäa¤WÍJ¨£¦ö$aÌF¾Ø}¢ U"è^cÔQrÎaÍØjïÈ#(ê �Ñc-&®OF@å£BIÚ7VPNãI*ñ-"é0©¹V9°Zî$uñæ=ÇØ4yòJQÒº«e¤ÏFE~(·åóÌ\ÒËY ehug°1@à@l 'Ú?H%g5t&±Ñ«÷J¢ 4z¬ÝxºÉR¤ÝkZ%À¹%ïå^"íá" Ñ2ªug]í kÃ?tM ÒV$°Á 5|o!dÑuÇTµSjuOµ¤?<#_xD]vQ2DÙ^½[Ц»CT-6tÔD2/JʪËuÍ=»5ª|ÖÂÚ-«uoÃ(b-I¤u,Ã<J"sK10 WÐ)ªÏMë7NÄÁIelÁV0£bñ;ÔaK±÷ü)<8áàcâOèu'ú!Õ¼ +O0C Xyí2ì¡FZÓXÉtìÑ3ÊÎà +gΫÓJV¨°+¬Â´ÊÅec³jY¬TeD×^ ¤ª¨Ú:xXL>µ® "âC eµNå }Æ¥áXõn.üÁd²¿®Ë¹7{AKT-^\j² êÙ#zdÜú~mHã³v¡ÍÛ»æÉá<XheuTÊì´-ß:ñA&È9à¹+¼:¾EÒÅéyo=é½aÂö£É^×N{)2Ö[¯5c>'&÷gâeà<ð ÃlRÈeñÖ ÖS|zÌ2Ñ2ã¹Ëé§1@pÚz§Ô}íÌÈ3ßI/;)'7YÀWâuÜû#NQ¤Ä1ì¹ë:¥Ä1¾íÒÙÉ*Cb¡eÓz/ÉIr(zðîFSè¥?h"c]Hó54äÕÇUkiQpÖ:y®¢cm¯GÐQO@ý$ÖÞY2 +ûV}]*ð0mØsƪàbuÙL`¯¾Ô;i¡,~À'³gMM²Ã gSu9Àì{æ9:ÕçýªK÷)gúúÁùÿÑìÊY·¡¤ðmo=ÿÀç]ÞtÊGÇ9g + +÷J h;z&nPhUèݤSaAÌ7ÀêY@T¸&;AÆ#)@9±üº®±É²6¾ÁÀM×Y.m%õfEűövk³ê<å«ÊQé¦öÝ×ÖgCPȼ.têÓæ}¥0ï0eáÐç©ÃµtäÐ4£nüPhsMdP,ï»g4z?¨.[O3ücà ýî³Iäúò\WCr1öù¹ögoúºòæåñó.iÍ,ÿ !סGÎôÝ`éÇÊÞÂøW6ÞÜè@¤dð-ë«ӿõüÖ3bv0qzîFw3ź¦Îí¼Húï$Éc÷MPþp>KJ'9ûÒ¾x¸g6½'Û9¹¼âÎ0Î8ËÎ<CDt¦+zl!*X`d|ª*,iÂÒDÆ<-Ê87¤¢¤ *®k´ÄÊLøâÖ¯N¼²-çÂrÅÄ7Ïdè#AO d@ +@à æøe �Îãö Ïÿ 'àÞÞàäÐãHND¨ÕiNÙ+"®Ô2¨KÒ@åø`lqPxÅâRMn²%X¼P=ìô|b°EHþ¨º$ãæû Èõ´ÎlÃðÒeøÙÀ + ãfù°NqðÊ §t0WP¦Êj + E©*Â&Y^ØÊS <T &¤,Hl*Lf|¯h¢3(ë ÏjKêEù5 Nö^³ +@ +I>íÌê~våþ@ ÉàÁ fª$-p$¹Ð(à D 2ZjÎZå²pÖ[ÈjÞÒiËk¶#Å2Rª¾lç3$ +@æêÇlz_`@ àÌÃèn¦%ødd2ò"2ò&°gD°¢aæ"#±ñ×£ÊÃ2¶2 +MËTµ\[ à¶-bëjeíÄZb¥·Æ·Ëg¦W +gK *Ã$ë£Å¤dFªqk«F©P>®ªLQDXieèKÒM²Ë¬z½ëâ æ¿NÀn«ôúc.¿NÓ&ÀÆÁGòn +endstream +endobj +453 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +456 0 obj +<< +/Length 3129 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8Æ¢áî3 +Säi8 &óp¦E¤p¨d:»QáÆõxèoS¯X,CÆË Q 0 n:NG3)èC6^ +[S¡pP\ç´*7 Ã:SV +äÆK5c/ ͬóáHäPf:¶×³vtb2]¦Ì@aÏDã)Ü@cÜq@9£;ÈCÈ@þ6-xþ?ã6û£ �ø§Ðmã`Ê/Ê"¡á¨n¤ªpb0{¤ê%¡h»)¸P9 ¨Ò3 #,41)èó"»ûBѰZÖ2®k Â`Ê3Ûlá4.+J«£ÆIp`¯5¡c:ÏÉhT¡ª¡2F¡ËR ¨7Ðé.8"0¥:ÍÄÕ@ Òc°£H2»Z7 +CHÎ4K-åÁPH hFô¤ÏhÇ.Ûß³²SG4¡¤N¤ì3p7 Þ6ÏÔü½'Ás1µMdj¯;IÀ\ó=Ó8¼áBïM QHv6κxÌAÌä;¯,<:DJÀ¡Ö¹mY´QV&±Ðà �ê6/Oëîü¿xÔ/¬ãHÉ]7]Û +ÃïìE5GôH¨Q#æØ80CÞ6;½°Ã Zú Qu^ómB +TëKW´Í¹bÍÞTu-rèÌ̳ªU|Ö15g7Që +×1y<ʲ½;-ë(5P'°2¥(¬0@6£º7XHÆ2áÚhäFÕÆìae³ XÅÇÒ:yÐ4½ÍÈÛѽãf|÷¿MÍÑagA7MSOkyÞ±Aqü2Pj®1ÅýÆ1ª·V +ßçú9£iÕ?Z)hØmÂTÓ6©ºWö ¬8{ÖµÙVcº[j¤`µvÑÉQ»cJ±,_Â¥[zO¡.´õ¡fpFL'vÌÛ9[UÁ5´îêà@.eкټw§½8źXS@a¨i,7$^ð3U->òÂÜÉ9Ú±v2Áxc§ùH ÞB1HkeMS¢iVL å·ÒH[òx-¨2ÜA1ì:!Üß kdXÔ.bÈá{äl?C%¡ÁOGÔ24Cå{ÔÎ:¶BI ¡@&P¤B8I á9´ ÃÄ,_°a=Åô6Nåré^È6ô$©p `8eC¯Ò Þi³MA'ȹ$|i¬áuH$âfQ*På= F¼YÓÅLD¸ó] Q8zTU,µìjcLdÓT ÁT&É£$¤¤ß¬RSYCiy1ôÄRB)A0ÎCþ+ñañÅ²Ö "üa LxЬTk0äN7ãBR¶,J �óï*ä 6LD9&©M $G÷Hà¤Â¯CL¬1¡&·bó +ÐÂqá!3Ä C JQôB'VJ*T`Î,BÍGå!.! 0æMØf-ÀÐ%âãé;j->6Dëh5dlGeB,)aÜ£xoj õpÚsò¬À)MAL2¢#meSí7ç$V#K9ia?*¥8S*©+b±mÎ-bÜò@O'uò½"¾NÎôhµöÏ\0PnppCYRÀÔ´&éb! �ôN²ÞÊÎ#«Þ·*ª·#¢ÒUÁrL<¸ÀàÝDio`*ÂÛKï7L ¾ !»`ÈÓV Ác ÙÜB pYÄ¡Þv§íqK¬Æ³z, ]UÝ_S·}Ëeú.eԻɬ%+*88ßaèÚº~Iå½·õÃÎ Ài/¹.ÁRîãÀxÔ¨Á´7¯ÝSä¸2µß8hv .<2ølCÂÝzLuaLY> HÑ! eÛ^â'ÈÃG®TÄsfF¶-±©Êu?R}²µ"qS@Sæ¤Ôç$?üº@p`á6âÃeX1W³^ìlT¥-̧ÑÐQ"ò-2Fk`)JÀ¹,Å`dÆ Áñb=¶hý#0 r÷[û÷"¤d\É1&þë³P(BÈ,îrÂWܹá-%´Cß²ìKÝ}0Q¬ÃzÖdé 3,ÐßsM@Mf¼ÀräÛ2swWpm.ÖAlã:zvsé÷0M!Ö{'»:Ï#.8ä÷*Â}ÏÙÿ4ùuárÐéBñ ë*4ª^ò¬DWRf·íx¥H6Õ"¤óoëÅ©iÜÀÓu®ni°c§êÌz}A*ò¨[ÐTjRMBKƨg=AOr �&È(ýJ&õH£³Ê¨29[(ßKy×eú®¾»W¯^ëê°c+b/·.M4ËuSSa=ÍæµVg¾Ù&´vÜÙÿwk(nÊ) ÎXÂ[Á~t[¸µ×½¿p2Ð.wŹ×C즧®×» ¹ÿ]wãA¼HVòÞ{Ó²|¥ù»:)À¯¨Ç¯>-#¿.Â.+ø¿Ì �ï^ÜÞÁ694íÈÂ+H´ÌÀO¬0ÃL8ÃÌ@ +@ÐP:Å΢m¢Nªó 8#g �PP @ÉyÀ*ÎÜl(ʨÓ#L $èêÍ<#ÆiCÜ> �®<`G§fm*ãÐeoXií8¬Öð s¥j-Ö©<Lç Ø@䨧£ÞÎäðJchAoþ<Í.fÍtÉv¬þ<Ð`ÊÐ `6 Âq&[0õ0 YOØ4er¿o´ïø#KÊ"Ën2eõLߣËÒCîOÞeDä*áBª0@¯¨^+2&1>ÕhòGL ç ï!Ælg|6fhí"Ðöíçvåµ ¢|uä< Ä3DCbò"¦ÐÉø= ÐÞÈ(a)xn--iqtdj-sha9f5yqcsa2c2f6afc.p3 TbÍ©`Þ@ýO ÇFt°V¬pZÿp^i.!éË � Â4Æí+!L +4Ç~s%J2ï âÞnÞÉä$ãà ²p(òLîGN3táCæáÞáN%,eFâ¬ÐÕdÌã(ãM\è)>ß.DRÄk.M +RÒåu-©Å®h_îlÕ®rªàç® ªH6ÓIøÎF )Hàä îêZÿ+Û'ª,-â©(Pl9À-èÄìjLÉ +UòÁú»Ð,Øâîjt¤±$§ò¶ïnïÊJ©Ï <Ïo¡ +¯àÜ«jº6Ê¿'+_'h6µLv³j®0tôoJ¯/P¯ÃÄ.÷7°Èå #"±ã\öä²´$Ô²&÷ñOxËï@Ï ¬ +endstream +endobj +457 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +459 0 obj +<< +/Length 2841 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ¨Ì\8¥ Æ0ñ(©&%ãHQRh +cå>`(#G"(¤j(:ÍÞxÑhà¢,5á¸Ìn.ÄU#:r2Á¨$ +F¥Yi£ØÂ=QécÃX~Dn0Ä+Ö=f +-CpÆÛ + +gq¼às4ð4lüED¢´"C ú~\0YlâI¸è +IÄ$@G2ÞowÛùpPH"Ä!X +B(*PØ8C¸aH¨53í +4¦©5J£ZÎÓz;Ë +ÆÛ¬ëJÖ7á"£Æ9/ Ò7Î[9ÐêÂê+Ë«¤®ø`7 (AB(Ò)hd(«ÊP"&¯àù/ððûAr*©¡¨\µºB¤¸«Â»á r ¦ëB~3£pÇFcâ9¤chÂ6 kÎÌOãÜ3Ñ´(Ð0¼ã,ü6 ã[KIÔÔdÌæ8<£8@ÌñÜ ã4©ëŶA@È2ÃHÆ2 £h:£Àé k*ª6²tºÏ!@æ8£Ò3 #(ÈC̳ò£Ã·¡-ÈÊ?Í)G2²Å·Z7ÎQ"È]orJW4tĤiÙ<ÿÁ7q4Já°bÓßwø@8#Â6¾#(åï(éB}AqÊ*N) ÊÒ Î)|çwÀ0Y3Üê³aZRPæ:C¬þ:Ô50ãMRØcËÒ¥%JIèá@³¦7U!v$Ðeð«MìÍ\6Á6Ä-¨ihÄÔNÅ!P)>:ûÁgÔxÔGº;¶°]6¤DÝSÃs&IÁMk>OÔ_ËW:îý'Ö¢pª& $âpAmÔµ=SUµmä(Ú8Ëþ)"h &½7QÕuKÏÚ4@ÓÛÒº®¯F¿ãzÚàVBÃg7¡ÂË~rRP'÷Þ =]eCIÕe]ÕÐ+Ïä¹gÓlêÔ±`uÏ´íËXd 5騬$VÜÜr&7ѼoMüæ/F^àÎ H%P#"ÜY³IA9WðË[#ûC&¡þ?ó" K!qÕ'£vdIÁpD90Zß1m ÐÌ'äZõ3^Ð`£÷jÁ$¸âà|Kò};'ôÈ +Oú_ +A7&(¾îÃ*Oåè¾F0ÝÛ^ÅN@S±V°ÍèÝʸ2`¢U0B<'ÏU½Rx Ö±<a¢G$B5YJêJx]Ú«Ö0¤!³$FÊP52fUÅ»4g �[X4î*]Àfå Q17ÊÐà#qDFázؼO +AT)A!d8Bh¡Ì4ÜKU>Á0'yµ7&ð* +m£@ ÑZ 0¥?ÈXÿ¥È46&ÜÚ"8þZä9±#p«¢DÌèýÂDè7@Sp §$7(ÎØ) +e\³62õ×|àX:ÎIÍ:'P(L³îfCxLJ 'f±U$U÷IÊO.na?¾·8 +|X0È¢~§hµ×¾ ÁTAh¤1Z¢ÂÚ[yÕªúOIý(ÐreZr@¢vNé·7[5] e RrPYéòîO5¡´VfN Åʧ°´+ó6£«þ¶8hʹ[:m¹Eiça§³D¯,¼«WË6÷ ³cy,FFò#&dJUhâÙHØ7-V×Yß^)£/MVYÕÞ¢'¥I̦©©æU}ISUCÕ +Z!:ÉF$H8Z6 ñ { ÊÃpì1Ý5qARvÌ7U¼Ê.Q?ïDÞCbßI9]¨Õ·ê¢evZ#ªJd! ¼IH³PSôs¦ rÐ};6XTG5ve¸BÓýBâHcà3ɺàk|kÁÈ7L§è¤¢Ç`c%¢X1S°½½Ù,¬FWðõ>Ãþú0c/ë Wó¾RE'ôªDU_:pÕ24F½Àb¬áy§Ú×î<¿ 9KÎu+s*µÖY¥»K¥ØIVO¹De$Zò©ÿW +غبW²´ÃÀØ^ �XBãBÕήeõ¹ìô¤Åê~Ëd1[X3$dpÙ§\k Àè!±ô\ó> dJKFbfç_]w?#¾5; e:#e΢³F Óc±iAãÂáQLáEzÃØ#"Ǥ§ÝkD@ÕÄåÝ^»íõw Î:KxìUÊQ!àâò×AÁ 0Jç2@"Aiw +ÈU¦E&÷0 ÃJR=MãFQs2Ù0Úópâ¹o@7)jgÜÌuÊMí +8gãµ2mÆ>=Ëæm±ËÀy[ +ï(\ÎÕ8B !P&ÃÔx kÌ«P+¿nJÖqÛfç½wÎü¼ xFABA´4®Ã ±ARXeäô§pQ +¾P:®|Øia½NA0¶BÅ]·° üMíñX>ßOo óë²ò'x wøTðñÍ57õÄåÁ(slyK'!ö v ØBxÊ(8ðªz'³ö¡Ì*w Ë>m¼*êÚý³ââ7bÆjI"Òì � ,¢M¦È(ß4¸íÊ8Ë*mð^ï\Φñg¼û Êûoº\ª¢ÃobÄ òË`,o¤ÎL}mSçÐJ¤È" ¥f4kæôWezWàZ<¥v[ ÎTP Ò`#~Ieo°6¦ÛÅøøeÞ ÔØ¤&g¦b·jâËVcæBz¦«´Í<ÔÄHD,B¶6ìÄy +?e$þàPzNb'êÎ'ÂXSÄQ`@d WÅ + +Kl= +ì§0>®oäOê[ TG@hØïêz#"µ$ôcf; K\zÐÜ1.Ö±ðåcDÄZå²[eºÏe +þÅ`V@ÈSع$¬¦Òkm +Í0)«¶2 +pA Ï9¨'%ík·ªt¸Ì'èÒvÐV14W9ð ðÀ½ NÚ.¨) Z¯!M<ïîñïPGIx¼QÙ¬°©êiL`G+QÎ3ÆiÏíB» +Z¶kÚUìVë&VÏhSÁ@ìQ`êE t^iFB +endstream +endobj +460 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +462 0 obj +<< +/Length 2808 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2'EÒ¡* ¡AhÄl.$bѸ¸b5ÂÈÑÂ3%ä.l + $"ù@L/ÉäÂyH§;F1APÐe 4J4A¥CATápÜp3V©*ì©`M$3y°Þr9%CUI âaÄ*O[réÒÎ(2¦Ó)¸è 4èL&áär0Dó4$l-1wæqÒc2èzCxéμ}éÐØyÑév4ñ¨ÂMÖR¶:üPr2MÑÈ3Ã;®ýô2 Ê=*`bÕªø#é¨ù¬l²À´bø¤#è»/¸d¯¯¢´ÌCR1n¬µì2ÚA@ÄÍ3óA°ÍBBÂG¬1Â|Ü·o+Â7·Ã¨Ð¿pS6øÏÐêìÁ"aph¬°£É6/¤pÊìj Kï° Ê;:ã(ZêOC{=7̤6#*8Ã8Ê9;ÃC Øb'ÃÒ<7-ÄåRªm1ÓtèXÑ)¡Q(<õ@cUOuTè -U9QXÖá@Ì4´ ý{PÒéõz9 ã½mTÕnm{MSeW ɰ¨àµ³bN°$í½`ÒxØ:£sC\ÚëâV#¨áAAkt37ã>7Qî\îðOSã±?º£-е¥EãHÙ,L �Õm,l׾ºÿx<HàýxÐÓ(sºÏ Ôu!~?Í cd;¤c@Þ:þ"OMÔÿân Ï4S¡LJ䡨j²É@&ABxÄ5£è.àS )L^¨Á66Q».û0ê7mYÝE»¬%Ûº'Ä, �@¨¬<Lå h±t°c®ñÝVÃM!1H²$ÈõÁ �ñ²ºúÇ3¶:nÀæ9ïÃeO<n6±Ã1J|LÈIv÷3-B¡JÃp è»fÝäõÄù~ÞUë4èÑtuöÿÀæOâüF|ðRN«t¿£@hªE(³ÂõÏð.ùðæðÄi ÕbUS:id«pù;¢öCV Ï-°\Ñ¢Þ,nñp·Ç¬~^Ák{h%G½çÀoFæ>cú[ÃÒ3 õùGÃú8*Àá2.pìÆ7+ÎD!"Ã2<X£¢tãðç[%v1X;fGAX|æZ1B´y1HÅ8ÇBbÃr¯2WfI +à4,¯N39ò9ÃÖ ïº`Ì¥¡¸? �>Á$ @BI Á'¾HzcÐ EuË Nòa#s,Gµ×²ôÛd´6¨s åûíµ®Bxº^Ê¥íÜ9Ç<UºÔ ìh2w(C ;V4²zÁ÷³Ø4X*H +D>GTOÊ5te±ðA0* ÂÂYdb»Ql²@q"å|csA¹0 +yfÁÀ9á#©£ÖGr:£èLÑU +a!êÀƧ£ßd °íf÷B yPJP¤B3Õ3¦~O6àw6(´r&-EÄ"ä|4:NxOIÛsc¤8Dd¡Kß( +äVÊ´ÎUJu!,hXÌã2Ësîf4:ÐUG&Íxw^HØ2 fFgD"[ +qh'ÍùÀWcÆ!Ù8¦ÀxSQ@sPA4«ö*èBÈâ[ ¬«BúGÐ*ÜXcDa 4ÉHeY 3B=«gYy~jʼ)³©)x � rb¶ÖíàÁrp¾SjÏPβùÿ¸F~× !¿a¬<ÀÏË>Ab§q¦îÕ/áÎâ\Û6qÛ}®5ö-Ïa¸TUOµEAKèJjÈw»oL±(ÁhIÂ8Áï¨ø+x«E ½u6ÇìihA@iPÛ?¶; Á9¡Â3Ó[µáT¿f'¥Èú`/£Y-I.%ã²ä¼Å +G2{%@H +a|! ÂxN-óØÓRps*ç0É´ÛPÓj 8 µ=_pÊÄw8Çÿ)à +ER áL»Ò`·3ù¡Kº ¢[= ¢FÓÁé(D oòÌÅ,16ÑjC!º:jìªÕì)B_´³Kú×BäÛVteö?c<=+¨Ñ` +Ù9msÙ<£àßXè·¡-¦ÞÑ;Fî6²CvZSd·Ý1¦ÃPîºÉƨ Ô$ ¬ò76û×mh=m¾µÉ?õn}©¸s +Á)@÷3Ãs3mÍó¡Î\ØH ,rl,sUçÍ©ÈØToZ£.fÉ3d �Ó5Ñá'ZÆp sFi )<Í&¡KYËTÄPnµìeÑ[Nm´¶¶ÛTqnmÔöx<å¤~°7:/XèÕe,¨ÉÐ9iÇ3 nt6ÁÒ:góo#~îI½ÓB/M@2kÒ½¼W×{2C¾ïìÁ'Ç;sr ¾¬hK¨V8'ÖBvìø{}xänçbi`å¯rÆ/ÊÒÄw쪢O~ +Á-Gúþgö´ïÀ]j'`dP07Àè!é^+Ç/ô¾å¢ÝSFÈi²èÔome}ÍÖ¶fͤ:m2:szêÓDNùHÈ ÉF +Ä2*.ðB0sÈN§`ñ +Hd¨ÒñP Gï$¦æò¨ìll#`rI`ÿ0ù ¸v'sêØ´JܪNI8É@CzxOt¦".:Ï¢ ó<G*ª +J®ÉoÊ ê}\[Äí$íiªíÇÆp +1dF¢¤ªe(Æïh¼en¢)B@R'¬'©âV þ *1¢)Ìjªo*ª ÔÊ(0T£Oª@Uæê°0Ðq0fªÐS +R¥jZò-ÒògZ¦P¯°Râž>Ê~¨*¨«R +pün¢.j¬« +´Gʺ*¿Ñ&°¬@/J8°Bɧ:¼jß)¢®M<®§ð7IPòéV¼ÊwÏ@C +pâ °'¢ÈÃ0öp?qtþºî04Hbªr+â`öHø¦hûç+þËâV -´ê¶HÄ03 +*t �rÇlzRà×ËäV$ô¥£ðZ欤Ð>,Ù%f6ëöRrúf@ + +endstream +endobj +463 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +465 0 obj +<< +/Length 3140 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AhÆ2èCqpÄi2*&³@P ®h2K &3 ÐÒo±âeÀÎe9 ÆS)çc²GS X 4SyÔØd¢!Øe:_DCI¸ÏÉJª9c +¥CAC8ØÔkV«¤L¶`ÊO1¦3¡pP\è´R5&ªÄ6½´a/I +ÉùênÞ[ÍÂîq ãÁ4òþ\OÆ0 aãY Þa˽9àQsÍ>°P)3¨ä7aJ£82"È(A°ÁÈfð¨Ns é+x`ÃIºº$ÌXê1c(æ9ºÃc²®ëÓ¼XmÊbù +R¸ä2£(¦7C Á°ó(,Õ +¬+«*Ûå¡q4!C¬ì-Ë@!Q# 5Í¡Di:MÃ@Â7¼ñ;.sdÝ;°L ÐÀ-¬Bþ1ÈòHÈBô7±CWÅñf°JB 5*`b䦪¡ÂÙDRê®ÈÒC3%ɲ} )8-µJ¤2úGðí[!&±3ªë»3Tá9/âpª& åtâ;õó¼¨J6ôP\ö°mͯ£¦û?phþ/ð9CxåÀõÝ¢hª $(ä(*º È"º'.-¤á Ö«ÃkÛvͱn½i lK.þs¼ÔûÈkxaQ# ñx[ 1NßXùÂ8 +;pÞ7t5CÁ ]uÖx'B#0ñµ>ÔbnHoX)C¨Ú2ìËpÝ7Ƥ#bP]Ë~¨ì.;á¨pçãÐäDãÑ?0ÝKøNµ(L S7 Éâ|'tF³<Ëð0P$§Q§¡@ÉÉ )æg#·À" `SÙ¡c}¸Þ*Hè Ì ½^<X¬ówVõÀÚäd[ÍÉeBò¹Ó|J°Oq_ýÜ!êçÏHi,ø76µb @(¢wY¢Âß3¬P¦:,»ö¸Ò2,8¥ipRböf $§ÀÒè è(ia Á@:(ØÛ)ªbí¡»âHëØ9:MɪòrGP¸2y ·ªÚê 1X:P²¶5@ÄáÜk*½¸ÇÒúÍú¹béC `0LØûβK}ü0 ;¿wòYà p9)¨hb#Sz`ɨÐÂbàCÁ±¥r Ñé2m!øp!È0Ól^dXnÎóøÊ£¢ ̪ÔPØ1UG1 .¦ìUÆ2¯9# ]KÌz4ذÈ誴äÖM ºPÉutQ^Á¢NÉ3õ)¦ñÏ*Ò6Ê©Y+ÉyqÜ1ÌQtÓ¯áCÍ$î^üÔ,FtºBÖCa Æ$9©$ÝÙbdd8§äåZÀµâÀpf©UrbRôq +ìî²½E e(v-fLëýØqñ+ °d~Hé +k04ê>÷âfÄdDAp,ÑÛ±Ñ+¡5¦ZU<Âfî{Olhu5=?ÏâË@(ÉìÈÇ.éUBÔaR5ÎÞ +í7ÆL3$Âë!Lð Ô :¢àtÌÝ*bWöNBSáM¥]¨ún>ÅXÃ'Xç¬÷1Ô9¤Çï@ÜÓiø¶âäbÔ,ÆPÄ @V]ͺ¾L4ºÈ3Å+³={0õE¹ß²p.K2 A +a!#·¶õ®òÕB¤¼ïI 0((Ù¯â/%{leYïEËF_ìXl±¦.zV[Ve 3TÑD«IMˬ}-$8ðe©ù¹Èvá]Cn¥È«Úë@/YM«V4ZKó~íEþQJ!"Àåîરvl9ÑGiá÷h$aà©wWqßmÑð\ É#tBëqÞ«ÙÙãÕ¾`ïËijwØûß+·ÞÒß«OmV+ÀJOÜ[Lé°GI¡Æ8¸ qkð(Á4cðMºéÙU[1²»7o#dlwò^I#øýf PºàÊ·iÞׯ{ïòomêæíoŦ¿4Û¼ÖsixÍåºÄç<x¡?géÖ|ÏꢾÙPQ(6Ç?CÔ taÃVÌY¥´%½}æ}iYØn1Ø2jãÜ·BøI ÁNÏ4ð¤BhEpÒøn=aqFhÝÖ:ã "«¡p äÊJÊKV4µiiÞdãÕÁÑwJ`ÜhÓÊìueÔ9£ +Yê\'¨îi1FJ;/PÈÌÐbá +=©Å§ñ]ò°8bPÆ_Ì:E¦"YÌzY¾á$òC pë¹dD-¢qHfáÔ1Ø,g·@+°a=tüo¬)y¡âVÊÔjE5G¬×ÎÁ¼í¦]±U<£4ݪË. +Ïm&¶fNÒC5!K%»ênQièª+H6g|&7¬õ¸ß°.,6ßYÚÆd{0dÎ ¶éÃ'Î=§æ Q*ÒDyç´Î<ZOXZi3Aй§~&e~²åÁþ-Jíq0?Þϼîæ#ᦾòÕÑú9+Gwø&¦ðÏNPyE³£´«¥sÇÚPÌ/ô.nDRøÅ(é@FÌD%ì Ð ÚITk£2¦Jâ Ø¡.h÷ ÂâÄó¯dF~¹äÒïØ"l{"0v(|-H8mLB)|?+¾DÒJlønJ,`òåOoXæ}òÆ"ÄÚlШÂ,xüç¦CÂF&H&/ÚhÉÂH¾ È*öH0ð¨Æðä²lð¤£ÐcʸDÍHð3NéöðL0äö2ö&MbMÃ:î ÚÎÕibc:3Pö öª"lè9â GË*ªéÂh:£F&Í@(¸#7 +c£òN8¯L2U¨¤|.TÏÐ5CòDbH©fÒºèB,(IïæZË ©P¶:%_EưƫÏô¬òP@P´à Þ}ªÂùwèR<Cò*1¸ñ,0|±4AhÌo(¸ñH(a)xn--edh-coa7b.xn--p,ah#-pka0lo6aqb1q òjðBæ ÑÑ«àÝQ;j40¨Z¨:#Ü:¼PÂãv$§æ'ñk¯¾:¸M´ôÙN¥oòâïøÜ¯h1ËW%̨b tÄ oÞÈEsÎñj|2F&b'¦ d ¦2!+Ì*¨fxqpåÒ?FP#þ@$z<ªFtËÜ`M¦)¾hÌd2)ERE,E\F¦Q`zb¨e1ºU#e"¨ÀJi#+Ä9'·#ò%/ü«¤Ìë²KÅ+dþ$ó$ýÑ3ªN®ÆEÅR$RõÞSäFP0nôTQ¶²BÐ3 Ò|±7(2A"gÀ+²õ"Nm¾Z0Àr#Í"B`*JPrdS4²âSI§.²#¢ïи2x-hÃd±*<¤ù1oO$³{&DôOýÄï3¬øS@ñå&R¥/9²ç5'¢¢D)£o× N?³¯³#3f)§#ɽéI ³w<µ7Å8¦t +endstream +endobj +466 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +468 0 obj +<< +/Length 3086 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)ã9ÜP2ÅÃIÝ4f1NG#yÈæ)¡Ñ`¤i*®Ôb¸½^: ÔëÖÀa~ ãy¸Ê. Tb5"ýK©*8¡V¬TømP¯Ët[âÑjÛF4Aès9JFS5´h(2¦ãïyÎ_iX¾Aa¡a¸Ü\1ÅÁ¸Ü}$C' å",fswºm&þ +±0©9hÈ Ê6£ Ê'CPÊ1àP./¢û)oÈrÑ¡oò +ô Põâ'D(3¤ûpdñD4òCÑt@Í3«>ÄÈ2Ù<¢¤ ´¸ª©É_©c ´O3l-l¸@@Rãä:c@9ïç:³¸Q<Ïsìþ3£Âð¢ *H{ +Á³[KØA¡R3H"ÎDo»LÁ!*tÒÔ+4Àdï+i#e6MK<Øï·Mà¦<Ãxà9.} ½Æê[±VYl*8íËr[Ml +ïXð,õ>OÔ$@4 Ä* +$SB{Ón[ÔMÃFËsÝ/ '"p¨BÞ4à :W\±T´t0Òâʪ¯X¡»ò×Úmq',ËDrW³9cÒ8K+G¯Q´´YnµíêÄ);Èä¨4¯ú!R:¬-ñóÿ[´EÁEÊÐiʼà¤?Ð ¦ÀRpø!@Ì:¹*øËC:£Ü9î¤o!Bê4øfú7Ûèé¾;Å}8Â:(@1î®V6! #/>2£°Òæ £+£0èAk½Óêpb/Ñü9¢@>,HÑ"à:« ²W@Ç¥>zçý>» +Âó$û(P8#Â6À®O'Ù8fñÃé#D¤2@hßÑi=g]ØvXhËÚ³XZn"n?KÅ%W3ÔH5ëÆÁI: �d,Àµ¶Ödè[.u§9úþà] ®-p:'ä[Ã.g,:94çcªtµÒ:gQkz~μ2%Hy/!äðr-C`ŽçòíïsAкÂÇØù˨da>8 Ã7<=%/7¶ÑAC`¡R³rÕ^qäPæÊÙè1ºrâÁy'ÜÃ"x>ìxzQõ§àh `|v$´±ØDÙð)m/ñ>Dì_}-ÝÃ7ÇÜI¶%»hx®$ôïÅh 11®ð¢è¾þÝ´xíl#I4*ZåÎ,-°ðå'!jò ½Â\dÌ'Ò±ñ¾Ya,P JSÈ2Cp!s òþ8ÉÓò¼#Ú,NïÍ[ÎEqfs'3eDcOr0åD0îxhkè·^àoX¸7OÀ[0AÁÜýàµ8î÷¸i °&"c(d§Íw@8® 5£ábi¥t.JÆwecZo8À`"N ¥Ï#iÚ¨Le/1`T'LÆ0±«L´ép8mÑ»,fj_»9*,ígÙBÈÉ6u@£Pnâºí)à <Ù"}>äÕ¨µ4=2r_-]q ö´õkÃ];àÂr$Élõlñ~I+6hö ¯¦±i¨1KkÖ²@æÇlô%A¼>à¥ëImæË¼ÒNPlqá¦Ç¿*M0A 8$qQà@Z-}/EÑÖ0× ¦2à7z;t0¬/nP C, $R@Ù}Ali|ÁÞ4ÏâÕXöÚ±Àj%¼´pT3Á©Uõ®æAPÙ.Kl¹fVû·6êèCµH&xKHÏ í÷NYÈbê @À¸ »&22vw ¸ï)ï¯.À2QÎ0MÁx6O¹©5"&4 +ÞÚL;p0û7ÄT+ÇI©&-@¸¼cÙß; o¾cѬ<çäÙ~Óqù-%BþÀIDKÞ .9ȳpXl>zÔf -F &KêQá3oÅÕÔ ªr&ÈiPÇ¥ÃÓrC Ù¨äFÎæc¶«jeûªNÕv~;^{ÒcZ¯¹Tk6ïI¡ZwâD8¼ Å`Mèdªí6âà\¡v¶¶¥W£EÖq`̦- 2×ì£ï.«w4ñT4Ølër»7)¸Ý§}H Ã8©¸ã¥çç:æÔxcº ô¼HËz:#'¡pþmU×#MéÄ)áµ÷?R§èYâÖTì,J2ª5J<ýyU©Vn4F0¹kߤòYH(Wëa¬^9|0àÈÅ`cæT[htݾ×ðCÝòt§½¨¥NiiÌÿ{M§¤|c +/ÌUвÖJìQ-öF1ÆMIF7+si¾ÏË(äñ²Ö_I;½y0,ëWßVU¯F£8¿mÒÙX²Ðøh)â6ÈfçäËcÓ4ên �»o×åÁ~v÷ ÿu1¦~cÝ»æYÚÔ(jqÇ rG6@sï2~hÎüOÈuJLVêÜþZÃdf{Ë¢Ççô¤(iÂ6VdzÕ¤NEÓUCôB´)æIØÇÌq&ôƯÌn(Îér~Ixu¨ÀÈàm<ïtú¯®½Bóe �Bv¢|ÎÌf¤Ð(#h¼l ܦEâÌÂè ¢('fÓo.}Ç uP2Ìøi*¾ì|°ëº @º`èpØï¢6*Ãù(´? ¯$DZw +iiT{ç©_0¶0»ìdi0Ø ðÜéPÄ,O+ ªÍ©Ê aÌoúo +¢¹çC ÚüÑëѤ\×M8fn5 +D �ûM¶ûç$× +s`È>ÞÏËï �Ò©ðp© ©Ì±ª`Pªª®*²q ¤ÑBcDUh{À¦Æ g4)°Ü äs¦ðO ßÇ?êO¦' §ù!åã쥮·ñ²Õ/¦+º¼ÃȽ,RÖ Üâ²ñ¨ÞE^ìä¸,B.èÂÒä#òjâ +æÅêìÚ. +÷jö÷£N>ß$MÊÁ±æÂ e +13&Ï'O+·'»'Î! +`q#±ÂÅnoM¼o°ÀÆÐ(Ïñ÷$ó±qñããà˦¤Äx;ðÌ;ì¢Â¢¾9G]$ª<ýl¬ËξL¸OÓ²`wæ¡&G.O.?ðÍöC¾18m3 ËïäÎfìαOSo1±ó ªJÉbÐ?Nø¥s>¥ÇºEÑ2 ç2ódi á4ÆdOê¿DBê +endstream +endobj +469 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +471 0 obj +<< +/Length 3003 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTQÎp(EÃIå:("FóÌSD£AHÒHT2^`bÐr<7ªWì61Âû4 + Æóq\)*¨äjMöT¨`jtúµbH6 Ãhõ]PÖä'6pÖÚ1;Ìæ-)LÖÑ Êr2f[µã7|¥ßâõ!«Ãq¼r®±KñÖlO+Ìæó½l¨1 FbáÅ'X4Õëqrñd´²Ú> Û0( !@ÂA@éCrxIàjAL":ÂáBìa@л¨¨ JÊÖÁ³Tú«p«ä 0T OR¿)#DÈÊ»jÓNèpý5á£b³£ªèbÛ·!@¦<Ãxà9.lR½:#¬ê:Ì+²>[¾ý±¬z ¤*b@@ +âH H@Þ°DBp9£Ð.N* ´ I´ÕC欤²¦6p +9,7B#1CHà: ,¤P¼ Ó*3°LÔ«áÀ\±Mx` +P* (AO³jtϾªd¥BP ãÑTeHSÄÉm U²Ü$rñNO + ¡i½`ë^2qBÁ#A§©øÅu � £àcÊ1#0Ò2èók¹ËÕ´Ï Ô÷¢pßA¿iSÕÝ`Þ ªÄò1£¿r9ê6WpÏâtIefË(Z!Âû%' Ý á8 #ÀÊ6aC_½ï»þ7ØÖ89ã¨äåã¸þB8=¢Ôï|T¡£»)U·Ðh²Ú2¥dËPàpÝ1XÞb"¶3°«$i|ß{1JÈÚ¶×£p@äu°®0ÒãÜ2 ·ÅZ̨î6eø= áôhÐNH:n[}¸ûxæ2üpª& äuÙg+!f*ªÕ:JUØùBÓ]!ÿJ¥Ôä]Ïvf4;c 9; Ýf³Õòd¡hfqÌ$g4ÿà$sË)ݺ%^¬Jé¶lfàÝÀÞoÂ8䣯ÖÉ +®ÐêÁc²O <ö«g¢Bxb L:.ÀRø" NIEgÀxamEÐP»OJ¡s¹Sæc ¦0¯Çë¦è§ãâÀh.ð °bnI<D¡ 8eG¨ü$Ôÿ\ʦsi.¡"±;©^¥¶Rúa!ÁEEÖ8 «(Ö@vLB á=úÇðƤ@Dj\27ÀCpt0áI4HZ^óH)Î&³á7¡0ÞfØ L:å8fÒ3²wO °+Ï!f|E8§£Il`¹y³´ç0¦"AÊ'I3&tâSP3Oi¤&ÕvoÑ`A9'4è£S®vÎù÷=)5# ±wDdI( +ðOA?|ÿkÔººeM(Cõ +®dPðÑ3gM£Ô`8N98'M oRIëIé-êSü§a¢3ðQB RHÊì§i°½ ¡ì¥ÛË¥OÏÐZOkÆÌÏaF){ÒHïãóÐa3P\àɦiι`b!c(,êÍ´» è] S²Ã;'ûA½mÇ&9ao=&;aªnÙ;ÃÅSC±ZÊ9!bè5¦¶Ä¾âbÎÅc®Ì(2 ÂÞ£.T8@É4Øg»ÁÀ4Æ[oQR7ØÉ3(eL°@ʯpe¡Ê ð»1lw +âP6ÊÙÉ«P¡1±åîÓö¿·x;¼ez/cqÐô:=Hßâ¥üdÁ¹ý´ºb%³1¶ 9ØHGhâO´òÆ»å¥R®l 6®vâ³Ö~ß7¸Úãµ^È6$Ú£ïr9É6·ãåî9äuszpe4j°~``ÀónJh/´ QT§=V½etx3+ëø±;¼C*aL²_}Ãyøä]§Þ zo8Vâ®{R°.h}4âo¾ F`£pjѲ8lèÆmnA@f.µ pæ¾D¸6Ö°£=/uÝ(µõøP óÄ.Rò=®íçUPæø/¾Õ[,ÝR'4.^Ö·l·qnBáofèÛÖ±ÍtF·®Ç.¨êjó^jà6B«NüÌS P5ÊÍ*Ýg ÷sóάðuìY¨ÖK/ZZ\z¾Lc9×2ýh÷Éï3Ús`;ÞÜ+Nèa[e ĵVV¾ÄóïNÑ/_*<Gwté ÞûäãëܹÊa]FVÇ¢,² +*ØdâÍÃ4kmcºZðéggú ÝTƪðQW³Òï¼%²å~Â~mä:ð¾ü o/,ñ§eu,ÇqçE¶Úâÿ2 Ý9¦ãæÓöiï.||ÐñÌ}¿²ðà\ðÃYko±÷í¹Ì·Õ ;fxôبñ[sb:§O¥õ{Þ0bxZH2`Ç@©ö0Ö¹¥Jí©ïªÕwDpÊrotÛ|ªx¸wëK¯¯`©ðÎàÆÄd|ñÁ0ká·}ÁéíUqíÈ23æZÛ+× º8öÚÙÇ»GÅ Z6;oø,b\C^"ë¬_à®Z§¾ï¤o//¬¢O] +Ŭ NVü^a6dè»ÌÈMºZÎØ<2¬âf'r"%JãÏ%ÉÎÈmæ6Ú"¾í|B)õ%¬j¦®©°`ØæX¤H5PdãlÒ´¢Pñp×)¼qŬûî©ů +Gt5¦ &°] ìó°agüÏröéÏ«ø]Åë¯á¥ô&,ðtb-Í~¼©Þö zqØ-~Ý®lÜÏ*2®|áÑA¯(çÒ;&6A ¬9 ÈaF.Ï'Ù îi ñä¨/®ÈeÎzMPcöÆ4¾Æ9úmÔͤÚÔzp|çQfÔ.r@¥¨û×-v×®u$ Î.to &Tð±¤"óàÞüCäÆtÌþǬ 1qæå¯¡ÏÖ£ðÍpfñ,²þ«<þð? âJ§þé*U#p^KNF*Ú²èu\.ä¯Ilv©p¯£à>mt.>ø ªô² +x§îÑ'\abNà �|£gÐ}GØGÜ~¨eçðb +`ŧ. +È4jÌ? +Ô,,#§>¢â.bêìïî¯h#ÑÒë �ÃQ¹ÆX|*dàÖ¼1À Ø.tÂëéÂéJjÔ¯³G¢Èqæ¸ÒÔèËéÖöKÂÀÀM29 �À'hÒD6[Â= ²þÀÌ]ÉB +endstream +endobj +472 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +475 0 obj +<< +/Length 3362 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢"N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8 ñÉÝ4f0ÎFóÌZR2£AAäe7̧1M#Si0Èuv£Ç êñÑ �XU()MSС. +IPÕF#R3´±'ÚÕiÒ1°Þ7¯ËFK5 h8¶7a¤Ý;¾E7Â!,syâÞLQÕ 4ÑEÌÇ ¢A°0PÊ 6¹Ôb3 Ø¡ø!T Md¥ Ç¡*t«+ +lApbÌ8A£ J6¯ºà)#pÞ8cKÃ6 fÆ¢í¸@#̺à¬)>; ãHÈì¹Ã+ÀԹà @, +c Â9Ä2L&x°"Ã$7HÂ̱-;"H"¼¤'a +3°& âp5 +XÂ6µaÛZ×Ç!jß? DZø ` b\7HN´Ú7r$¹#¤·.Ó#ß8Îcdê9NóÌ÷1m¤¨EÐ2¡+/FìÊÇ,ðËPêÞï°cä4 Ò7¹ñC@TaYì8¡Èh+i"³Låp±A¼W" Ñd Ð0Ñ0Ût¶¡EÑu¨æ2Çã¢v }þÈ:°A ã0@8G²àæ÷8Æ4Þ6âØ@0§iî:THÎ4HÃd]6TA¬)p`³ÀPQsaµ;ÅEoj\´ª4·n³«0PíR"RÕèH5ÆV¸iki9ŹP+5ÀÅ&°À@3¬ d=;¹0<ý îpìIuÆÏðÌ7Cn/ á¸xê8drÎ Áÿ¾#¥ø68èÂ6 tµÍf(xpúë?¨L¯6¦Ös¶]R*ð¶m¥W;>ÒÒØünþ9(Ãâx¨éhT*âã"ó ÇãS>z|äÞäNôAj¸¯Ææî¹ºir î7÷¼V)"~'63 #ç#DÚ« hµ¶ü$û¾tHÙé>I )&?f®RÐu.8~ýûX)ÄÀÛ>&rfÚiJ0#@g^Ѻաx/×6¾ØóêxO!Î' JYÍVAeºWrWK0y¢¡ÒBé§@èZçà " +»EºÏr^nµ«Aô"ø" ØhÞ + +3÷7"L+ ,×b`a7-Ú¶ÔîabðdaÀ82àÆä]È-yOÁH& �ÄïÃ[¶ë 1[êaLi3¦¨ÂÜéOËú¬ ZFÁ7t¯}ðÄæu`¼c!k0PÞôyÄõè²g ä(iíÆGÐQHÓùôï'XëbÀԶع&1ÂgÂÂb+Ä×üfáÁ;¢(E9do3ª*hAâáªÂ|\Ðer©-Ëæ`#îa¡2Bþ]fïaíùÌB%£v&æË³?Ä]Â/µúú'£E#sÞKxÞCkªL1Üü×ö©` #lïlò^éPøt¡Ê¸¶¸ua³8*üH¯¢cÍæM¡kAïò¹ÎÏ]<p!lT¸òÿÖù.n>&kLÀÌÐVT/Ál©ðØ#}q<ÕÍmÃ2 T) m[ÌõpGÉK%/вY'W) 3H¶5ø1ÝAÖ¨pºAö´×,yiP55ÅØÀialàÎ`ôÊ;ø7\: +-w¶ +yØïÁk9e"ǸgÕ²(ãs9-tC¯/r¦!XNÁÁ>c3).vÒ[Ê_·PjY¬TË\Ë«3 ±<.¨Õ:ËiQc»³nôÈw0ÈØ½Âbõù×ûCtËô\u¤ð;(¶%Ó´½2à>&SJ¬Ñ®Ô¹"$äq§9ÀíDÜÂ5Ú\AÔ3kGW!JJ9ÕYà¾Æ`j^)mpÑv/Ì-{§ì·òm£ÌlÃ<;ç5yÖí¾RÛOL'ì0 ^Þóc²Á·ÛÃYmw³4 ìBZ¬_ÝØeyæÅ§c¢§Å°Ð8.9è:ðÅz&×Ò}ë-ÖÏMº[»z á´7òÉÝ¥Á-XR¿U C£Æ¬ ¹· �2s¼]î Jéb¯ÄÍôá4Lsl¯)z.½6 ]édѤç¬å©`c¸AçFã´³#ØUd}ïǰkÁa¦oH÷ wyRmn÷à?}¤.âtµV +ý`ªylÑN ıã?Sk8K½lÔ¢fUiNL½wìsÍÀQ.»ù¼¯r¶h}aI+ãä*i(OÌmÅ4Á + è;~nÜ$«3\ßNTçM 0ekÛ{ ØÂ§âõí5 jR6Ü*Úó²< ñ7ÆÎIèæ<È(eû;èTç7!÷óf%n|Òï<C¿Þp²k1µù»³yÀµ/8O¦¶Aëþ¾_Òùq<üª^ª@;ÞõÆõÂßÑu9\wxCÐef]ÆeKRÖÜ!|×è ô÷GhºÉªRãjS§çcÇn§WC)lü µû 8$ªÐB®*¨Ø¨TĪç5|AAxªUQëxªh¥EÅ¢FBª&8ÀÔnNkÚ\¦dNXw&.]ì~Dq˦ú@@« Ä0j$aÆ0J0ÙÇÞvîZ]°@Úyº;Ç¢ôæ2ºfwR{ Ôìm¦ínâoÆ3ê¼ûGàs &ûëæ)<ül0D Ϊºì/rãF°oÊ»ÐU¯ÐV^F°[H.epþJþàP ä.gäç + ÷PÎ0Ò*PÖýª-ìJþ0ãè¥|.ä.ì/ôOâ/ã0npÕpü2.ZC(jBPö(§ +t§|¨FäüÃh£p$hØW0"8ñ +*z8Àr9# +Þ; Ä<.(eÅ ¬ÃÖ Þ!Þ,E²>Ǽ?P0?®8@1s © B© 0ÑZ#Q8q,WBCüCÃ@D$FD¯úEmc'¸\öçã>@_òdàäa ¦ Î + ôu¯`ªß%@2^O¼Ä²JÄòP³K¾gÀú9#Ònä&ÍÄþN}%` +à +@¢Çñ5 Ò º%Lu²ÅÈR~ �Àß+ Õ+rº¾Mà¡(`#êâxRÂOcÃ?-2ÖQñ¦ òã+2èêä.ÓJþ c-Õ- 3ä12ç+³/2;/dÔM + æÒ#1q± 9bÖöBÐçÅy%eX?ä^20(®BÊ>Ë-(»Ö©-¸gÒ§0ñpÿ弫p£îî妡&:ªqDHÆB¸I 'àkyI0@ZÊ)xoTÿ²ã(¬þ m9ÉÊ&|uÒ+®í-÷ãh[ �Ê+ÆÀjÐÌ'g¹;K¢´Gäc¥ÊN°ã +8¯`\-ì)Ȱµ¥»'èôåF|õD©°[#íA6¤È|` ÊLbóÇæ.ú*¨¬G)²*&| Úw±vP'IàcBÓ3M¼·R°Æ<p Ç"h%ë<Åêë|à[MËF|àäï¨vÑ~fAE jkÓG(ø|´²p,Õ9oÄ0T$Óô +´*(ßCÔÜ9Ôâêì¨\æWO4ûOtÜÄDù` +endstream +endobj +476 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +478 0 obj +<< +/Length 3716 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´c Æô1¸¸b4á³4 + +(RT5RÃU. +KâPºØ*Q`Mçc)PÞE<ÁMÓ#R¡vù¢ê-KÆ»F;BN'æc©¸Æt4ÍÂÐa¾ÄK æa6ÙgÁAT)¢ÑñÈN.1à &:kx½_/Ø,&Õ¦¸#÷íÊKCY&fÂ,O3)Àè 4ùÍ9ãaÔÈeÕMÆýaä 8N[)Óì!mkÝð§ªÁp.à`Ì/`à( ïXé©-ë¢nÞ)ʰp¥®¬ºìºìIËòý¶/óî2½+#î9?£¨ä75O«ñ +ÑV7µmháÍêÕxæô´-Þ'è#4²ÃÚ²òÓp£-MâÜhÚ®ÆÁ±L D% +BÐà -ë"êÍ«º¸¡qbr³!@ÒÛ!P' +¢`-¿D&IÒE1·AhfA0\BÄsë±8.ÔãCÏÐÜ2tÄ!¸pÌD¬¿8¬mÑ2À®â[¬ÈTb¢ð&=kèÞæ0µûè-îhêAÓ´ÌPLÛ:ÏÊ! 8Ùf0ä7´ÇG'´ H6tT,ÊuõHÆ0¿Ã&D óÑQõ1`OBª¨N°P,NÖ¢\*öÍr®»¬ª8;¶è@ùaؼ ®t;>[K³æàl«$ýCÙ=Ij¼EïädÕãF44(Çz> ^;ßt°Ý îÑÂÒ$|9´²4ÖË$¼n¯ ¼O<õ÷µð2È#`ó©ÁÆÇ²èQ$%`P9£f¿EeiVÚ@¬äêõH±@V 3@ÖɳT¶Tã +q[HËhg8W!c¥eÌã=~´{m˵϶ðÕL7EÕv]Öhç "ªMýÃ9È¿U;û(mÞru%¦Æ/´G²#åOÞ'ææH4î»cZîÁ? ÂHN +å!à Ar)µ¢6Uqk¤:ôtÖ[øt'ÂgÎë Éc*"ºC æuówVPIX ¬äÀâdYaÅÊ"&ZfÈe6)éf Ccj¥;hÁÔBxÆ*(¥ä½"¹µ\ì }µ ~Òÿ+9PÄæuq2G¨O¸( àWúZÖ o)Äl§ÙÌÐ<»gpùÙ»¼ã¼ Þà_Á7µT¨p0²£åîþc]xQ´/QÏBAnFµº7`ÌÞ½¾Vühðx<ìÈ8ì ©|@¡ÁàÎã¢ò!´uLXe3q,MÌ9£>Þ[«_NÏýÂ^æXó¹;Ó+$¥q¾àPGI³8 �$X¹WÔ ò{ Ô 2nWe ê§hP[ÈØ9o}Ó#á³è@ÇMö �J/ÅãY='á+ð¤ älO¼¢ä"Bìü>-æERX + Ú½Fa!ºRK xwµhû3%5CäMM ¬Y® +½Zeá¹#êQß$Çb£TÜfÒZ°êÑ뫱5%ÙXÃï>õÆÈ²z&ºUËÁÓÈà ]Øk!ìb =d̪lÞ>$Læ¹9 ¡ #fO£ñN'ÏY2"8 döÊK^Û; ¡ÅÝ4·R«Ý& ºA*Öä 9f hÒ#I %o^4²¥£Ò¼algÖ¯6ÖËïö uw°ëhïär 4ÑÆÐÇgÞ½ +Õ[ÂçM2è¬'»2=äûrësKY¾ñCÁ#$uäJ¾68,÷Ì)æÜöaq Ó«»+·QÉxù¼\'µëxiDÕ_ö^¹Ïn·Õ"`ËeÏ«?E`DyõU Ì`UA¼í¶fJ£4à9÷x«pûm±V)ø·#EÛYk a20x³×fpBg<lrÚÎ0ç³L|KN-ÈRhÑ£LµK§ú<R ½©9UM͸¯ù;ãq*0.Á;£A¶,Å +&#¢ÒÃU¨à%2.ufo1MBø!aQ9ÏÒÈtgTè!$nuÎÛ¸I¹Ý¢(z¾"s>´úM "¿@twTPb/BT +Kmµ^q¢»4µlú1µ6Ñ\ª ¨~öXX°mõ¯w7ÀkÎÐÙü4«æÏ³-ØD÷qÞzh´qÝXóWë&WfQxËØJÁÝËe4Ë +q$Ï £Fþ7ñ +tF9CP\ÅÓ+ l5IIñiÛH¼ìçãæõx¨ÈPëÝd<õ°ÜÌ)Ç¥ÆhðR£CgaÀ(uSL@Ì +!߬Ór §9øïp¬f¹æ{nÞð@«qPÃÉó ?tj:DtxúÝ4«½sá'õ#;1 ! _PÊ@v¬Ê¢Á°óÒz`A#=A¢õ^³×{eí9PTöèMòüýWôýäL÷GF}éï§|à·¿íYÜIÝTá3Ó®¤G<pD>9Ìh4ó<<$j$o| +&u|¤*@îåíPo ÎÝDS&I.DV3Jæf-Ò J%àoÂê`ÞqP/.1v&TÍjP`RP©2x²eÈ Æ¬0f& àÎæØ©nUæºK¨+¬'þ¦²ypg öç¤ÊvÃâG +Ì8 +Îm¤ÌÎ'~é`n% ÈBp#\n Ænë¢bf,æ /^lx#ht½0Ähf]f?F¯& Åìì§ +Îɲ ¶y)¼sà +ÀAdV +ÌÔÆÈ!P¾Û[°Gð,©n 4aÑpÑ G6º-r`ÑÉN_(èRªZ±PÐo°ÖKV³itë8)FsFXÌdTtæ¢qÐ»î ¶ÊÞÒÄl\EȪ^ ÓJGÄëCDß JV¢bÁÐ +Â0Âb ÖÙ$äúêÕ§Z}J¬Þâ¸"ë?~#î§ê®gð'ù®@å¬[ å-Vå¬åÅ&T"`ÒQ× uFÀè¢hªÆØ\Fåê§+ª¼GÈзÕm«¾Âñ°ihÚàÊ)R±, m& Ë%æ&UþUé¾®©gÀÒH6~eô ê èaKÇBð±×îr/ æhÕðDAÌTÐJì¯Çqð:0(Ò2,-&Ïä¶×¦ÒÌwBª¬-,Â/¼ÇبvÇìRtãÂsHU(ø{géçN/p_R$wÓ1RÂN2¢Èq%1$ã$Cb2Í¢ÁÞ¢GOÓ(XB_.-pIÒÚõ2à¼ÍpZ§¶[ÿ¥ÂxÃT ê´ïìsDÄy +Òô×°ï8rÒMÑèû¨fH,xSfÄòlᢲÜÓCÞoè #Kð +¬ÔLcÍ"ö çO3hjѧtÏ +Dk0RÖDÀdÖ£j+yÊôf 8* BO¼ 2âZ£¯ó0¥ �L÷AGö½Ç µsÐìÔ`|¦ò³¬µk|'Ǹs®ÕÂâÖ dÁÑé?GB¤Ð#Ç.¦04ËLò¥2C¦lSoDKÁ"ÂjrÐjéPnD«gEEô¦óFæ%2m¥8Ö4@ö'"Jý3íRîKV@Z @ +âÈÔ#[òz|±/;ãÕPËPTÇ7¥üUÄ4äa �itcQ£U{qÁaÅ_RY2T{'¶{±çMäé<f¤÷ñ ò`U +í)ò£%GÕO3¥5@!núAÚÉÞwéäïÙ-¾ñfÜIøÍvGòÝjïÏ6ÿÂ' ÛYñ°ÆQ-y:PP*YV¸l³½DÈ2y +@ª«öKÌfP¸)æ:c%6"Ã5bdAóÈ,Î(#"Ã/lª>C9¬°ËL¸µ&¦&¿ìÔ©Ítà +`XünýY/Î!":fÏAYéìýàiZÈÜÒ¡[$ÿj ï9#AUÅ4-ßVüOhoÇYBH£Fko<ÏÞ¯âdn-2ãgãµì»6©[©äå8ðÊ ô4²N.wn}Ds` `ÐZ?-¬B9¥¤í" +endstream +endobj +479 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 114 0 R +>> +>> +endobj +481 0 obj +<< +/Length 3249 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3'EÒ¡* BapÐPÆGÓ1ºF7ÃÆT¤0 !EI([`,s`Tàd5ÎéÒñAØl4fQHÔP,¯ãôPtqÙ¿F3â¼ên2`°Ø[ö"F``¡<oã;Î `°C0ª £©6:`ƪ0 Ô!;úÌl.PFã¸i\¯Z$ÜQoªÜE»áÀPS<÷£IÌSÜÈ÷èJ( G¸ñÑkUR®Í,²{` 'â`@»/ÐÊ.@!@È1°HÜ:`Ê3& ¼pÔ() #8Ñ(! ã è7¢àR " Ô;apn5 ?ÐÁc£Ç@ðLÁðô+Ä488IQE&ÃqDUEÑd +°À,,ÌH¤At!Ãp´1% +ìÙÄ1+Ecl+# è4IB@Ë:ÌÑ|c Ò òÂ÷ª."¦ã¹/ªDΣ¢°º*ܸ*Ëbî Ê9cò: #xÜó¨¯M¦>4àö :8ÁT¤jÒº²ø¨4¡Ü·ÕäÁ»ß :\µ&Q伯pD]eÑ/RnriÇjý®X«ý-Ñ6k×u¡« Ý+E±v̲o7 qQPiLéO|ÚñËö¶k0`ÉwÑ5åq´rE _lËì«.̲Ø"¥Áº¬×ÒÇê¶' ä0á �ã4B:¶Z$L7ý9HÓ«¸¸È2ÃHÆ2 £\:£Ã=X¬Õò!`F¡p±ß9#ùº[®Ù°ÙBc`ó¥¬|²Ü!|.¬3ë8@0¶\ Ê7gÃJïÈp0ÏÏpÃ:q\g¸bãåÀuÀƱ¼sXy QcÙ9f7ª¨ïj]KNo_¬mþ[÷g`ØFAä_I°!¥Ù'صô^(UææKÑjæÝõ·e~[ê\¡¥Ï ¥¡j®|Pr +ønh*¹¢ d +3HYE85ÂÐC³qpŲz A_Ë$7°q`óát5·6Ñ;V Î@18¶¼øÛ£|Ìpî±âÞúÒún1É,õêñÝã9wÆáC6 +l±®$,BÊïÏ,¥5]çd_Ã)µïàdHÛË{fé<Å ¡ÍoD*%rOë3afDbsA9)1,ÿ"ó98áö½²]ÙÖr.p0ÐÊÜsríÿ¼`h!ÔWàÝiFÕ®ö¢{&L¥3=£0Ê-gßp1%ò$¶è 0Áb}RÎY!Ü4§ø0Û;mÁÊÉ&ù`+O;ÕÛ%¢+Ôx³QJå÷áÔc VÈE×ã£åzÁîÎiÓpO*ðÆB4ZZ±tEòvcØa®ù)"9çåbÒÉbG7æÌ¬Î+§Y:^ó\ ÊNJÙ +ÃÊqkGÂFHé ÑbйÂÌ7Cؼ/¢3Õ=â~ Gq¢ OXIó©ì±óº;ååDàÍ뮼ò×QN{Oö4zLdJí,H·J-ÌÐÕ/ÁÌÿ¡-ðýCû +P á¬jÖæA Ù$Ë ÜãRG GH3r +5k½¥6p#,µ;yQ@P`£XhuY/5jpªº> ÀØWª»¾x[ªÈ $}¢!aH*T#`Úós|:6ÖÃ? P'µàå1Ù¸6âÐÌÀ@L +aÛ?+ñ,Yï±§JhH +²Áy/Ù)òª ,鮨7ÉH¸^¥§=ö¤ù¹T©ù`å\nìø»æöð©cÔ«Þ`ààè,#§{Nº ¶tï0äÔÃ-0A¹ªÀçî=÷6\Z qj¯õç5wª£À¦ãe Psì ÇM¦fTIT½%Ja[×V-³VT¹Mþ r0Ò4ÉbcH37±l +YÀÝL6Z3¦&ÏæÀ@ ¤½2h5ª÷Èh©é¦¿ÕRXÅFkÔŸ6xÜ(£piÃÁ÷BÒK²qÒS§X·Æ¬8wÏ ãigòQ9~®/¿¥Lä£k-]Jü´L#UàËS:GMF ÈÑ=§Ôþ TSK.Þ¹;¦i¬î¾i× 4¤A¯uþÁ» Wl]²CFËÈ[Mx%ÔxÓP9ó2kº÷À ¡nÅ»þð@Yº é¶ÓBHßû}oÅ]¿Î)ºFñ©; TÊqÎÓ*siÕBvÕÞTÊ¡Um¡óÅ_|`FÉ÷ÕúÆCÁ%ät:f|Ð9<¼.àÀ¼·©G ¡µ6ÆÜÛ.Y6Æ\SIetªe©j;ô,n¸ÍYVïU<ÑýÔʰ÷,´gµvFÈúÁLÛ6M¤Ë7ZªC-kl·Þ·Pn a®Ñ=óÎZl«Á;&và?_å3èeÙ¢r<ß{¡v¥Êq£dÝÆ¯&©÷"}Ý*ørr ßUà wçÆ1ÅØ'=m:BwJúE\kB_ÂxOÛ¯r oÂ*6c(oé~¶vÒÚÛkoê µr^3¼#³Æ×}¥ OAªRdKJÇ2[_Vì²MªGÆZïBXÇ +ýJ-J(,àÀàíêÎÔ`墪§ØZîÞ©C¨«jò$$à èhö 椬$Ëê⦣ g" ðq¦FRE èÈm\ë¨þëª0ðóøÎP£>Êäpg*DKîªêèX¬ª0ì%æ8æì°®eÚônuè¦\°*©y.ÚÊ@PöìöG*x(²© �Mè Ïì¿æ`îØoU `hà@Rð:øæ¬.ðDp°¶l.òt§¯gsçXqo¢|ZBª²oû0Ë ç¸½ävGhr±'¨Âb¨|͵'¢ÖÕÏöy ½Éb9ï\çèääJ¥tG8k©|¯uUаÜwÑ í¨Ê*A'ûè �LÐhfà È0¥L¬JTë,sÑ®óN`åF5Ï«2 ÒÈ Ñ Gè&#G¶ÖPè0eG1Q¯U[gbî¸û®ünäÿ¢Ì\§õdm �nÌÀjî±¾ñâ ²ª=I � pôµÂ 4ê!rv £B �Bq"îîEfhæ Z/Æ|ÖÇ6ÃæNu/ £0(2VûpçQhp©§NðY°+rÒìë¼é® ÉkF´3(v±Ñl£BÀ#°üKêrOîÔ§ÓF{'|ïYâafE!jJrÆcQ{}-± ´â $ÂWÃ)h,+2Sèð¾+>·)ÔRmPVî\ÕgõNgÒrYoºt +x @åt¦¸f¸«¹ ê¹`@¹²6º\sÇ6Kªt°»K¹7Åæâ«8-(TcU+Ì:SÃ#¾@³ËæÃëìì¤Å«öÕEv!(¾9ÓåÚÀÈW&7å@-&âéd~¥4ÂÍ6ÊcÃtì>¹DBìJNEOô&å+:´.Â0Æ|ÃÏnq 2 øp¾óÂìþþOèeILǬpH-ÔÈp$^ +endstream +endobj +482 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +484 0 obj +<< +/Length 2993 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KÆcàP2ªO)à r0çAR1 + ö¡Aês)LgAM +"ÀÁCQ¸iÆâìeLb3l0fA Tr5&[%ñê&60 aùQ¸Ã4®×ì;ñRh +Ú*£V^òS<ç¤ç ¢é$zdZ%u»5¸ðØq©W¥Ã~(;Í&A¾âF7ß°#¡pPH"Ä!X ¤"b @6.!ØR* M#L¥µ-{Xì5M¦Ù¤³¼(Cİ5më~àªã¯" Ê9cÒ8HÞ7::éÂS´Ö»I +8î±²J·íÜD¸@®4£p@0ÊCxÄ5>ØÂ93â¿¿ãHè9Á 3~0¿cHÎ4 ÐÐ:Má:ÁÊ8Ø2 È\ G-"Ø¥5 ܸïå>¡DÂ((R/ Í%ï*˲H,ÒìØÁÆÒÇ*z©â|/ó}W²H<£apÓÕÉD É@è7%8DËA-D3.\#-ú\×pæ80CHÌ4Ð#ópQu% : dª*å/jÖ5»ÏTõMT)hk`òCÆðÉͶ¸ £- ¡hÇÐÄÇyÞ·½ó;N³ùb°×ý ¦¡lÇ6}£i¡xCÈÖaCø1áÑÞÔ±ÁªVâÑ b&UÄF.öA£»A@©~©ÁEÉxã{l˶òã)N3z¯ãHÜ3Êr°'A´1¬o½k;/3¯üð9°Q»Ù_eÁn\3(Í]ñÑÆW£{hDe0V#ÌÛ,èÚ7Ñ~~î]5ce÷½ò¼ù]ô'sê.®¦ÂΣè¶L¢HÙ¤DÝ5lÃ|³8Apg¬é4 ÎO«`1ò 뢿{·!ªa«[û¢'FôGÔBïLÕ¡·¬TÁ°4~ÝG¼Ë:)TÒÃê:,=ç£ó°NáS7XÜ5d÷ÀP(¹ÿ!$óàÒ5ÐêSEÁã1êÍPjËÈCMAÌ9ÓP4Xt7342}°yøtGL´ +biZBsÎÃ*0jx¿eG4 UÁ¸#l.@Øy`ÐEາP\é1)ªD£ÁAÿ.Ìp9H0PCiw% RÛd¡}ÆÓaØ5<S.fLÚï3æ8Ómzr8`j!Ê´p¡@£´0(9(æåËòäxÇøXKQåz&àÌ r¦ pÎÐ( l8ª@dIbZiÁ&5¢RV°aç`nLkl8O%K=!3 +)'¹âè`j3µ`ðè¶Ãlþvs7:l&vp¤> À(}¤Nt*3B¡D@#H �³7Òèø J(MþR +¡L$° 6hAQwíIéRcÍsò~Ïí5FáÎ D NÏ¥=Tþ Ô:*9©H5ÿË,¡¤´EN\ÀÔLø¬ +Q ä6ÎÛ×sÍHöĦ*«çµ.´ºªÆuK`ÔU r$^ÆÌ&ºV7"]¯[J,3rß*@hsév%7¹\u })ÔðàÚneÌÁ3@ÊÍMQ®(°zHÊ´²óÙv¦£#E jQݶ¢Ù¤hdv°àZ F(KD½æOlMI¨{vÊîS/f4ÙK¢¿o Õ(Ø5º¡O&ËÍbª«[·4aA»i+bÔ¶V?zY¼=Sév-Äñ`tS1Ä*Ò;ñ +iÎyç§Òu¬xȽû«hÁ¦ ÝpN·;pÙ#¡øÐÑfqc¢Î¶uÅÚ(«b'!°7ÛW8 Æ¢ü»²0g¸W%dĹ;Ó'sáÂ$Ýn*î^îu7®è¢ +2=HôÛ¡Oú!¶èìÚRájm¹+Fô«¥ÙõeÐícÕÒ²WZ �ã'ÚcAÊÕ +Ì-yÙ!½,4_ÕÜæ»+VæÝ¬@ÒÆ¥Ù Ýæ×n0.½Ð(ÞYÓ~¯¾ :Ù=J´Õf6j5NôÙÐS«ì·/9׫KPØíU¬W>Õ[TÊí·X;mÕ¾3g¸©¯C§3ÍÇJXà+>®~!k©qFÈ6Þhº»é}¡5ÝSWtj]ªf5B±£fíG߻Ѯ[Jd]ó__õnfâ9ðYü«Ë3سֳÏN3|E£L¯Ë0ä)å÷«NÜKo«kí{ Ü5[fZ1Á8MI½ØÓºf:3móÜÀÍ2nÙ·'¬ÐecrÒʽ¢ \Ø5xd|ÙqØbÏM2sÍFóËA¯=6{µYZ¹+"ËqwÒðY2Ñ?êzë®ízo÷8¶ÎÈÌ ëVeKsÙ¬Ñ^˪ï.¹WbîKÁÉ][;!(ïâãÜÔ_½< 69Áî#+EX.Rþ»é0l,fGíäþÄJL}lÑãsWͺU»èWû¥|/ðÿíºønöÖ¢c ÒÂØãÖQÎL FH0qMúïàÙîæ@@ÒëxÏà_fVòí^hï´êªèÍÎìgÝ@`ìç`Ì®'íät¤ÛHhf#f&! ®ä0åMƳJTPNçÎÈ´PXÊÆ¢rTÎ4kbÆÚÆèRÜBÜÏBîýâ~d `ÖwoÌ`Ü̯/ÞyOâñì%lù«°hóªèN +0|¥, °P}¬*:ð¢ínlæF]ÌÒ ìðêâã¥ò¾¬lD �øÎ«ЮC£R2ïW,ví|É«¦ãRG¨Ü.ÅË4Ð* àÛ kÄÂd/Ã.7¥² Êd*VL¥ øXWàÙ0 LÿQ^)n#°ê¾êî )ù"6,phD �?æð/`Zä'àLÑ¡Åúº2)ª) +Ñ>@±B½æCGX+PxRÇ£:É®³Ìó®cM\ì$ZQg L¤ÏRlѤ¢Óânæã.g Í~äÄè^} bñÀóT,2fðÈ@àÊPìïò6ÃM&oQ'qCþepbW¤¸3®ÚJ@îL@ÐMdÆ^ärÚú )tæ*ª1 ï£P¿c:gxw$¦ÞgÓq0ÏH4£¦ûfºâÐGÆnÌ}`¤K~DHB/®°î<èV ²ã&IbC fë~Rô6 T£,MH3'è;1?1GèU`\{rÌ¥3#.À +endstream +endobj +485 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +487 0 obj +<< +/Length 3224 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3N¥BT8Âá ¡Æ\4Ti´ñ ã1ARJ +SêI*p2#ºhÌ`(!ç3´¤e3[)ÈÊn1NbTq¸Ú9©)è ¶Â0HìAAHC* +J¨ ÆG骴éÚ?.É×òãHVl6³k0¢Ð5¶¥â0§L(6[óyÇ4 Áðtç¹ÎwµÑäá`X(eÆÃ¸ºD Fb Ä"ý3 + *1Ú©j`¨5Jª¬r°õÁ\6)l±¬«8j ÁØù-âò7 ãæ4°o +#$p®*(¬XƱïPhÇ,Ódܶ«*NÞ' �Ï Æê #pè ÂÀà¹ËÔ¸,Ëã¨!Èx¤ÏÁ ô!H4ë;[&ºR|£)ʲ¸A,ËrìË0Ò³$ÀMdÕ6MÓäê +² ¨Ã6 +Èà2γFþ¿êSKÀqªêl¬1´$B»}ÁðÚÜÆ9 #è4ãs¢?ªjEh¼ +ÅÆëàP[(°G 9%IpQ:NïìS[KPj13ü$ÌÝ@R|0à AxÄöÔT¦"«N ÐC1³EÙEÝ× gÞvà+O¤ñÒ\Õ&¶6¦ 3Á!FeËð ã0@9Ùã*þ±Ü3 Ð2Íìâ¿`ó£`Ê1.1YèÐ!zP:°ª9Ê3Ë5CÁ,èék°ÁkL÷7SÔ26¹\ä·ö ¢I{ Æ0.`×¢ÔaÊ£}_ÃÆc*ZÃb_;³0ÍdIxn ·ÀA`[e² `ðpb&8û8<ññE·ÉܧËn-³/¼s©ðÆæC$³µ0Y½^19V¥° )ïXè:×Eô¦Þ8ö}Ø·õ,¹ðSÇ!× pp×vwß1 \ã9ÐLs(@8#Â6ºä9릵Ýýï~Ô^é¥1Å¡ë8Ãpf +ë")¥ÜÖzÃ/HpÒÐ+{yà´°r +CnnmÔ#§Ô¿zÑ æÈµY£6o`2PìL +nZDë°ÒÜyÎ#8V4õuL89³l +r&ØRÌ»µ,¤ùø?'èýs ȧâ~dôÜóZ#Å-!urã"Ë_ÌLç1PSõ#áòxóÛ]Z¸êC8äôXÒ-,.<FÄÞÑÙ´t®ÅÍİQ_õ/¯ §¼PÒða»IaÉæ¶¨*ÊÛpl!½®GâÒÃ3ýOÄ2³6Ttabí¹DÒGëׯ'¿¨ã#áAæÒBÅοJ«Uª¾M8hG!`<Z% Ð'çrûß¡~ÐÒQ ÚeCZî6ÖÚÁh59dî}<yçû<mHê\ÀXn;P89¥º gøe'o2e< F !0&#à¤(R¡'7Á åÌtäå8·IeÁÄÌw4YÑ6U +A 0ÖL2kSÖ©6ÁM(Å£z)ó¨S)kBEÒ3´Ø@a Hê¢å VeÕr¨ÈäLá$KdõÍUÓãâ«IìYï:ækX1°ÂInSóQ9*µN wheú � c£´àñ>K§)ºÆtd´½~r Üò$AZ0o¥Z¨PÎy¹öeP#|3©ÚSwOB( ¨§´IxÌíójPlpoée.äåPèßÅÈ6Ë*üRÚ_R}°$¶w%ªR>@Äe'¬©x±¯~MK6ãE¢/îí®?iëU¬GWh¬ÌN\KÙØoÏrÊe¥Ü:4`ÜVÃ&-o¢û B$ .gs3¤MTkðµúàâ¹x¬Ü:3]Hl¨ ¢]¤Åh¨2 ¡È.PfB¢\áîÜÉ»--û GBùÍ Ø9å&Ìt¡e¢K!ÙÀÈu)å8ÅXA¶ãÒ¯Û}¥õ¾-ìu÷å µtU/ùPÍ,6óÚýBÙ÷_îd^XMaR.¸pÁÂC+ +&G P¨eU×:+r©Þy �þlÞÎ-m¹ä]±x/Eð¿óïbôÂ+#:Ç3üáÒÊuOPAf i bãä8í¡8(ïÔ(ðÓk):Ojmm°»ãþs¼¬,Ô<~ʨ5zçgk{¹- � +A¼` :[öñÓs~ïûãµÏ<ôgqÝð>Gа`Ê~Ð +?NÌìju + +¿ÅZÏîÔ' 9CZ±e¡ä@&¸®ÚëFëÍ Ê¬dÔù°#Íö2H©m=ûÀTrRJYL%ļ¦îØnSAÍX°B'2#V_ÜýP$>8&Õá%HtÅ&ÚfìêeK©ÄÓÐméNiÖü^^>³Ç"#a¡ªyJÉå ½f³ ´¤_2f¢înHÌÒffE¼Ay9N}1b6v¸,¹KÝ~o5¹}àiÛ&}Êhd2õl<_ݱmú風9j Ö÷»HôXJko.zÃb,ÓÝ%ùQæfå¡ §»Z +A!Zu`uhÕϾþH÷Ù~o iÄÖfûòí»}¾ø/)Z(Û¶ðdyóMÊa¤á%·ö¢`I\fú üiJxƦy Pyb|¬Ì" ÌÉ&Ã0ò£8í/BCâïJ_lÒoR7°t*ÎõǨ§hÀÇ´êpJõÇQ0pøJî¾/®Ô8Íöõcä +v + +I^ÉàmÎÙ¯ò¯ÆBç£8 à k¾ ʪûf¨n'vK@ʦÈÞFR)ÐÉÚÓbTëSEüòí¼¢®zªóºìmÀ½nfcOtö <ø¦¼êÀoÜi¦ ëÂIj¡§?"ä ¦Õ¬h¦ú«Ä$x(l&óè$HæØI,TMd³ b÷£9n62cçHðöOO©28é8ðÐÞx,tŤ¶~JdB/±Fkëz`pbõ¨ÈW°lë@PóÑöì$`ïG*ÏN«@'Ѫ¨,:EP#¢k gDòîY ì`ÂDM³m¸ïb3ÒbºñòZ¨6h>+Ú, d +@à ¨@TðÖºäÄ0§ììâRfm×çåæÀ°Kàäÿñ(îìÓìîA E¢¯Nv@ppBÃm +ÁþrcMvñÂ<ç +ôÝný¦eÄ6øìÜÄÈf& °(c j£¬d¬HܬJ¼8æÿ Jû £=lÜ*êñqãTs$fÚ*Òä`Ô+QÒ¯ò,Þ `>1ïF¢¤¢@[ +|ÀÌ/¦¬ûbv/e¬¯&DÈ92±ì¯õqC3qVÇ;Ë㣴eó!àáñC(ß8 «g©dã´¨3¤ß8òÓ£¢l +L© +(ûëEòKEB HYOJyà¨ã+&ͬJÎäÓR¿ÎôõÜòb*o +Ðâä~ïÑ ¼æÒ¾F%CðFæ0Î2?ÓîW.@ï%z Ô XPÞmV-¢Þ."æ.¢î/&Ü/sPÖÒµ"+ @\pâ �Ù +êõ[O9!Gë!D@Ù"&.á` +endstream +endobj +488 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +490 0 obj +<< +/Length 3120 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ¨Ì\8¥ Æ0ñ(©&%ã:ôÒÃ/I&Ó@Èj7SéâÈÊa:HSÁ¨ Ó< +ÑHÄb(0'á`ëw¼ÞÅ·Ûø·Âáñ8±A$Ý2g2¸±è)¢ÑÁDX(j2 #Ãz»_Tèv(EÚfA T5*a¥ñê&60 aûq½§c^°Xºâ¥sn7ÈÀPS<ç¤ç¨£C¢( -Ç#ÃaÅ +¾t¸Á#Ê2£0@9êÓ Â3BH¨&"@= " Ô*Á d¨Øn!b"»Pf¶ #sNÉa|1 ¢¤2oT*8 T`´-Nòý/Êû +ãHÈ: RH|bãÉQ¬nª,x$£HÎ4³âK Rs/I³Q(JR <¯#Õ!È©È,*x Ï4x( Ü2ÏR±"Èð¶Oô Ì<x! # æ( #ÀÊ6Ot|´´K`( +Âx"'r59´å=RÈÑ,N¡ÅQ`©,ð¸³èAÃpì8#¦¢qH\ºQl Xè Ò¦41²õÑ2LÓC*"p¨£MEQë{ß5µ>2UD6FWQDT@vQbcxݰß)PØ8ظÙxX[×!kX6Ägm[ë»\µÆ83à ÒÒ.ccÃyä®#¦9.{ú¹N¨é¤£h«»e»ëz8òo0FcÒ8N-G ¢5¤O»ê¾o²¸¨pÛ-NÊÐ@8¨4¡â0Ê[§*êÛë_¦¶%¾ÈÜW Qð{N×ÃÈäWÅâRF^ÑC'fm<-ä¢ ºQÎÀ6Êérçc+Mrò" Ë©¨~ê¥u|jèÜÓlظA°²Â\à ðw9ÁCÒ3 0X@3 ãÇsô!t6¸¿r±K¦!A¾uùboü*tÛb6LJ,Kn}t§PÐþÛS)¦Àãj,æäî br+h)Ó£`Bx,µ¬@ܼ9§wP&b:B¡%Æå¾Ab~r/ ¼ æõtÏõÌân¡¯y¬ÙÉ;îàQs ÉÍÃPË˹-PÙ7@TI]ÒÁÆØ x7ëZ.¤©â$Êe¥Ác¢È3¥²F ÜQÄr¹Å¯ ^cL°¦8H"¬Dc«ÃXø÷dïUÁ"Í£úk)2ts!k÷xlþFÁÓ,l°5!KH$ìYe±!#LK±á 40Ѱ Ì9½àÃà |'åÄq¡ã¦äÁùBj¤+gºÊßbS5zNÑ;S+[c¾nÒ¡H²és%#ÚntôCj5p2ö§fR¡TrmJ¢ìTd¥v9S-eº×[$¡'4Ê;Ëv-ö:E¢ÃØ×MùÀ:8ã3#p65Èw>¾WÚ=ð®8°Ãm-g3àÀÚ¸m]B,x¬ëi¸i`AA0eG<<¥ Ò$@)'Q'Ìðì2ÃÚ7Ü%1)®dÕØ!:]7Õbµ¹¨E �µÏ§øK³ØbÑoTªÕä± +Ò¨ÈÑÜ<ÒEáÒå 3(5¨NCcä6GÒ·ÙhËf"5*mN©ú+¡n·KÌvÁ¯°^LÉ4üý3ôJ®ò§-Í)HÓbJA8µµ¥N~VSÉMe´lÛª/PteÌÛ Z-<nàÉûX·¸hìvÌõÉÎûgÀ¯ãÔpRLD~0 È Ç¸¢Ð- ÁÔ6)µ'¨l|3)DÓª_ðrz¶eM Ë4h¢pºBÜ3»Å±= hK¸»¿¤S({7Óo?Ñ8_ô.#6r{,F>Èmm±`ÝÔú-PÁ¡^¨õlá¥Ëì4s ÂäG]köJ62é¾ ÍFïvßDkÎ,¤%ùw'R°PÏí4P± (còüü»29ÆÑ´?yELu«íDrÑymW«êKS¡¤0Ì6¹Ã¶ª1ïá:ô±oAÚbPZT`}+»¬ËÃër´b|çXAC=Ó*ÖHzòôhbÃÓHàªbíÆbÌrãϦ7k*[·qÉÇ úíÓÔ¹öê5Ózt4Ð`ÉÛC]ÐÂý}3+Çl¬[<Óä[ïÕoká²²PUó®wݶJPsv®d|ØaÖó!Pß4FÍZæis:¡¿jz!Hk¢\ÀL×¾ñCtÙÓZYRiM=¼Óz:é¬f×8R¬³Ä*zÛkn?$w J©ìëøå®|ó]¯rÆ<4: ¥Ì\©é.ÔÐcQÍâÌvãrç»mã\aØ:fÍÙá34kCÎÎo8çÜ®ó³þ°jãX-htPCr|'¾@BÉâÜzqêdxKæÕn\WçuÝöò¶Î4Á4éç·fNÃÜàôðêÁè ¯Íîàá\ý¤7áJøÃe¤´ófrÛyÎûK×3º¿Xe°ðf¸y¨o·¥bâ`X#éî^q5õëÔG'ëð£ìºª^§«°ê·EÛV©b\§àËÇ>½à àÚÊNàýà 01@@ +eF¾ná'n¾£àn®¾«È*BH*¦¨! rnî@ �ã® =Ͳ@È0fÌ1âÆÐ55ãbôt*ã¢7#v`@7À85©FOivûn£®ÿ£üiõÄüãÎ=#Ö=¯è<pïìn.ôbÇ2jïÅ +8xe¶CEºfgÐ( 0²zEÊ �\è +]qN]éM×fRÌöȱ(Ï9 +s +ñ:¢?1G±W$©(QÆIêentûf !"2ZfòjÐøk+×¾fÂlo^éÉ#ìôOò0Ìù)Rsì|q ΦBÄæÊü/;#`*qÛð¥/Ñé ÞËüÀ\y(~íBò >fì/"ñá nÎm jbB´uÎöçH2ÈÐÂ. ê»?Èl ì}'ÌXî@Zb¤l ð\åË-{l{gºtJHm +Lv $*r>8ø Êø`äÆ VÕ²bÂó(ãäÒ8Û¤©#ÍÓ¥LãËnø0{ÎÊÑJZjÈÃ&|¡) PÁlÁäÂ,&*ÔË0ÌÃI8¡è~AL4ų,`^ÐÉÍíÂ1GHM²jA/ .Äl `®4ÊH ÀZøO'òÕÒ-%=-j[+©*è0 ï3H/lß0GÆí +[,®äúyHìoqÌÛð°çÌÓ iÑHª¦òsì/´çUjõ0± R ²ÓÍ8jÍ'ì rúÝ®ú¡8`àæ1©9-úÀB +endstream +endobj +491 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +495 0 obj +<< +/Length 2786 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3'EÒ¡* ¡PÈ ´c Æô!¸¸b4ÑÂ3 +g#)èe"Nf3 ÈÈa1¤#IÐÚa8ÁH¤¨j£¤t¸h*. !RzØ*O`vK1æ 0W[¹À@t4Y²FvhÊ 2Zã)@w4t·Q¨@n73-ÈÇg×NÆ#!A¤Üt78\M!çNâbîPI3ux ?,Q»^4J0*1Äb¨^âK«Ó( £C1vZU´ÈÖ ÃJ³,ãhàÝ9 Ûz2·í«tãA,ˤÃÒ62ëÒüÀ ¢2¡l(d Áf©±¢À +p[~'CT:/Kä6À°q + Á¼F!oäX@²¨ä72ãÐÊ9 ëà]ðû¦Hx`)ÑèpÈ1Sê"Ak<a7ñªú¿ÇGÈi +O«jËã]¿ãé(9Îã4Î/(à3TbÞB¨Üß#|)Íê+°Ï@a9¢hMll ÈÒH® jnb!@¤2É2Xæñ¨³m0"Rõ:Á°iÈ+Ìø«ªûê*Qm8ÍGR/$IM-ÐÃ"ä îÍɬ´CÀÎÀ#K²9£ÆËvØØê îàä;C,î9× Â¨&Râ KÇTÊ]NHüçQT2±¡¥¥jU¯ VHØi[W@9J~òXXN=!°fÚAm¨ùÕìr¬)i¶F[ 8Þ8Ië5"Ò°»/y3íG|£HìË6£pì0K\8-£Û^Iì» zvæmî+³¼ßÎê¸6ÛËzÃ0Ò1-u`<¸Â;bζåW,oèÉÆÖ6ãû@c|¹,ú¨ËÆ)¼uõªÏtá+²$W¥éºÍ%°8ßHõ5Ôu(@¤BUVhæP,Ræ9 µØÌáDÙ^ù}*©Y!b¢¿=e!HÚ3 èÞÚ¹ÐÊöÀ+î]p +4DÒþßê-& ÔÔQi¾ÀôÈê,èÙJ°ôÜaNÁ!$\ O@2yl|0rÈ99e%ûPà):Ç @ÀRYG¯´ðjHáB`gÊ¥@Ì +!w°|<hðÃÆ ÍgHVóa±yYé¢Àòns-N°35úºË ½æ;@`í¨t-0ÿ¯4þ½P@aá$ @BI Á'B E +@=¥DH #K¥H÷Æd@D +á<)Bv¬Éß !L4¤àw¤PrKV0À9;`ÕVÊ ®Ù¯²ÆO-f-¥ÄºäͺÃ@tOb4yG)eÔ¨A@6C-4Ï,ÕgñâkJILI(P NiOÞ¡¨²=v8$Õ'ÖlÕdÎåT¬IÁ$»pË@ Ñ/'Èi@Þ:8klTBE¥Ø4£!f!?HK=#30ÐIÏ*̪a°9TõI%ôÞ#ÓõO(`ps¡ÐÒO{AARvqÙÎ6D +è DH©#¤êV×)cÙ±ø9H? ªÜ2,'ÉD¨ªS`ÞNÇiN+]®H )NApA´4ÌàÂéÃQ)pB¬n`Ú;û;Ccal Ú!:tG¢ª9YË Y°5ÎFV6`¢£óo"ª) +E³úC^B 1 gW¤l° ÀábÃHh@4ØÔx]Adµ2f©¥÷gIV á$"¬ �u®Â +²(* â§3Û^":«vÑçJdT#*d-aÈ4 v29Mñ¹ôxâB§*ÌvÒ²ÚIʨyò»õHSÓ¡ðª÷³Ãx^RTÄ6䪢dQyÚºÝ4«°Ês2ó ´9´Çá(Q(Ó0j.Q^à´ãö¹\Q»ÊËÉôçvi Ö½ZËÍk¡kVÄãg:]ÝÒS¹5bÈC©Q©'. ÔÕz 6Õ05°ÍNÐ(PX[©É),&n_CAÂD¦ê*¬ÐYts$øÒzR1ª"beW9:¯3f|ÑÕ¢HQ¯*¬aB$6C.º]QÊÖúuL#ÀióÅfª÷âÆnAjT .ÚúÏíûhMª;Ëuk ½ÅÕ_ê}8Ù»_¹7þ3Øb¯dôärÅL«SâjÛÎfçdî8û}L,ò?¨vKÏ'ÎÞìí´tæ÷GdCë×kUî}ºRKT%f"O8`Æ·nOªáù9g¬Óõm7é)£R3ç$1zz³xÚ|ÙßÐí~Ûºûw1ñÇûò¤´Õ.XPpJDÿç 0D1K°)ê»k\b_¡õϹÿ7h- ´]-¡HSÂC¨vѹ ÊÛò£UAª[èsnnã-ÙSàüºOÂ3àZ?å6æÖ#ÿI»ùYÖjÎý9ÀÓ.GݦZwëì¸p)§%´ÓÄrA3.pÜ0ÑM>3ÆÛ&§SÊxK±ÙoÏ}à;y8_¦Å°¤Ê~æ¸ûøßâ¼`rÐM ØêC¼8Í2Ón¶×.N%÷4h#ì¹(f,lí¯Ï`±'~ÔÝb:êÆn¸0¥F Íöç È»ÀÜ.¯@0ÂYîpܸÜîhoP':mjbéÃ?êb±<mì6xüxÓM2Àê ² ÀÎËC:NæÂ. ÒlZ5¯;#h6Ïêk@é¯Î;°·(\#ÛË~½ëã¢ìëÌÕÐj8e\öpr¤HØÜ*ðgbÜ rï¸TPn 8ð;cC4±ÚÝcí¡ãÀÆ p@jÌüþCDÚ@6ÂÞ©¤£êNª PëXýÏáïç �d:÷x äîÅT¨=·ÌõâÑãºÆo,¯ e0è(¹ êèå`é) î¢On¨ë.°'¤â-¨æî¼Î@Û+ìK°ÛÎ~âdzÞ1r¢/©èñG P-y¦ÃO +3 +4ïs¨Øâ +endstream +endobj +496 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +498 0 obj +<< +/Length 2811 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éPI!PÈ ´c Æô1¸¸b5©Ñ¼aK«£¸Î7 +ÆaÔÊsç!ÌÊt:MÆqÐÐe'CiáÁÜÇ#y´@)*©a* bPºÝ½` + ±ÉAHÔ¨^`d.,Òì¢Ã9'CÓp1ÍÛËÑɾ7_oøú-Uë`îj ´+ó= Úi!Í3£'¬¦ÈÌS95°ØÆñé´â~f4Msy£2aâôapl ½ÊÓ²,¢ÂBH¨&"'Â{ÌÕ=ÀlÞ«`úAâàe®Úè2î^³pS<íA°{Fï 1sW³hhõa§*ÁÌÚ«É$ìÅk;B8#Â6®ã(ä!n\}:@T>¬°Lí4Hêð<Kª»GÐêõÁºdì,Nän&O¨ÜJ´°:KM̲9;ãrÞå0Ké«¡²C3+xc'Aã¸Â<±ìdÄô¤níÉóÜ´ó Ô Ðb̵îµEɳÐQ<5l[OCæØ®¼GM)Ì«+2à:Âä§½á@ËG@ h®« +[;b;TÂkT8Lû].CcÆ;¯C8u µóªe$62[àûH//bx'ByhÄá@¨åÚôݺámøè¸_kÐÈ4tZô: õÓÆ3å`A* ½ n£ä2¸ce9Hõ\/WC½a kw#w äÐÕT0í¡ká£Å¹YV³òãTàÐ2at6§iºzá1sáâ⸾3ágdöEä£N_{°(¢-kjßµQñ&;míe𠳡@ýK"xÄ5V ¸Lãg]HrO øæ4 ã«öÀ°ªìãæ7ÆS«Â0ÖîBlþ».=D4äU^÷ª_à=ß5ChÄ l+¯¢MËí>$Wb!@¤]Ùèn<®T¤»Â,fÈ©!àlJ¡ +ÌÛ>oÞë¡tg%H\¨h[á¸üÕC×WL ¡0æçÃb\ ê¨90íÌ °|Öc¼Êù0¾§ÐDâp }Ô4ô>;/Õ=ð£ú "³ãÈÒ<GºxGb7+ô ´Ò +rù(òµBDâ~#ÑN*VàB"ÓôEÞ)Æ ` +Àµÿe 3?t%¾4ó,`<l7È4i#ª£M'V,s$C)»¦ênîa|°RÒÜÊÙû¢à¦\£ÂR¡yLæ^i1eýo#u2å ³<Çàd +°tNÉÚL'q1$é]ëÅi¬g^ÎT$äv³ DÃÒ¥åøD ¸ hRt|é¥z*I\ +\/À +hj窦^ + ÂZ8_8AMVÑûG ;¤ Þô¤ ¦b~A0* +>+ø£ LD>* àlÔdtà!¸7'`*¿5R<Óx8~QÙ= PÅÂpG»ÌÚPÉݸHB(M + �ãÍ¥1.䡹ÔÜÚ6èNG65®5Í + +í^ +ìaÇ@îÚ0e°vÃfM|q.>¾yóP¤%FoÅZŹèEO#E×8RC«þFº¹å-F,ÂDP#´P{Q¶ÍÓ6ïÕ-5²ËË[59ÝÚ¿CàÔ¾luAK ðeïºH:ÈvQp]\»ºtÈØ2JÉYjÝyÝÍéL)2,5©YJ°3>ÎH÷?É.Îéâcvªä2V®ËJ"é´&Þ9¥;U-f48YËö·7qí<°"àÆ»NO>Yù{/ ^~Ŧ»Ùá$`!IâñT¹Z}} P)]CõÄØª·E«ªÑi¿¥ü%ÌÀ¡}æ¼Ê¸¡cÕyJáæh[áË7Fñmˤ@ tÏÕEC«nNÁêÙ§$Ä/nX¸Ä¢¥p/¤u!ðpY1tìFÔ;æ[¹ ®ò ^%4,k^iôk¼5íÇ*iRÅ£iW.(BéÃoeð½*ÿ`K¡~7q ZPÓ~{# +q}çôÃ\ÈwûTB2G²wZzM×Êý`.P3©e<`|I|UmA¨\ÀØZªmiÕ`ÙÖÔÌñW+* 7PÚ.Õ*b<¤ØÎCÍ/Ð`1ltµr"/Û *øè| ¢¬]èÖ7«~4ñ©01àgÛMÕËtÿã©ýêÅH%ã710 Wḯ)RZ_]¨,»°v}f+~"¸'´n÷ÞÉÿqêÝ)5º¨kg+¬KÚÎ4há8Ìx@ Îg½+¶ö§ÖH}àL½NæâÚÿóÓ` ÷v£Áý^§érs½2î÷ÌJëð}Ó7³aþ¡k ÉÇ*Añ!]S õxá®G['ãæ¾ÛDÍl låé¿¶×90«s5æÜÉÙ½_(WHA@yøxß î h2ãUÛ°óÃx¯ª-ÀÄOÂæ¡RJªËÑ*ªZGðäÌjÐÚ0ã3X7%>¨U(Û2übÍÖ6à°fGúè<H¹m«cÜ«ªdÀGR ¼G:{.¾®ºpñáèáNáìèf"æÃãíÎöbhjçHxÏUF.àÞþhþKlþp¨H¡$>3J|ì©Â6"gú£UÐB.¹èÜ«Â0¢ºÿ*ÈT¨ðI궨þ}0v}¢0ø¬i¯úD +¢ Þi*é2hjÛ Fº¤¾$>¬O0°¼èä)p²¢ïêàäH˼$è¤ +ÐÅá°È©pÌ¡ d¡c¨¡ÀRû%Î ~^ +f(e"Ùpûªx5QÀsËl·#4*¨$ÿK~©Åª ¦ªjªªç+Úp¤*â6«ªAnðU òVlJ èHf[xë8B¤.C § ¤ +¢a +@'ø#% +Phër¯¸R®¬6ë& êÒ'f½¦þ0@® È/Ñö]1úûÏø¯R½§ú0@ÙÀÎ �!£!âs1æóëà øår8 DÎñ#ëI ù" ÒÂt6±JB +endstream +endobj +499 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +501 0 obj +<< +/Length 2915 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4Î¥BT8Âá ¡hÄj. f"Ѹº7 &0TàW'±Ôf0$3y´àr2Îfy¸v)¡ÑAT¸n7 +UÑE~ÃcÙlöILÒz2M¦9ïyRÑÂFT®N òqv3Ð1 ØsÖ¦S¡å¢fsxMO©´Z:Ý~ÇgµÛÞ7 ¬ÖpaÐál+ Ôd9ÆÍ"©ÌÊdÜ^¹·¹ß¥êâí]£Hào9&ã§-)6üÀ+.s>®è@! " H# â@ (¤»Stço(Èàï£0@9ê1ä3ÁTB çÃÉÄcÁ°|# ¢ÈÒ6"@Ê0³ìæ7i;¢)â¢*ÂØp3ÒÖ7æ-"ì¶ü?Oà@ÿGð +÷!à ÀðL ðÄ5.OñG,ÄÒ<g%P(QÒL!C(Â2FÀ©kâü3ÔκøÒú;h" "Ò:bàP$@4X oWá]°p¨¬käøcçbXÖCg ÂeN¸×t¬'" @6µ9 ÅÎÓÀq>È2?Òt o©h Ö=¶M®ã¼.4ÂtG«õ×QHu,?SÅ¢WVÕõgZÖõÍw^ÐPeWØWÅõe6e©ZVkçk ÖÀAm[õÁqb7,r`¼}°P<^8Í,'Þ°Ó_scà©(b¯¡hj]©a²¡©è\jb¢K=ê[¢Zúw¨1b"â1CHà:.s½ ÔÚ"¨#ÚÒ:?hØp¤lNrc?Câ Ð253¨iªZú;ör¦Tr'UC¥YqÖX$Ó\ª/Ü¢Ov)z0 fê.HÒ2Ë]ÇUaÛKh@0§iï#ASø~$²; #ÊÔòÌF7K5@Ìø2c ]ȳG)NG[HbõóþÑbJôûÏTu rÔß]Èy!5>í Â'6ÍáVî}Á¡ùl(ÿp +Ù!Ôó<h +_x(a½å¼õô^n ë½¶÷C+ß|(µñ'ÊùÜsï¨ >ÀÈ3(v Àcr,ÍýCä| -s¬)Qc@pd!6ClÑc !ßÀÀîÈh ÐÆ]M¨xE¡ÐPPã©>§z°n +D~9ôÃS°]*HÕÊÄCá4¼Tñ, ï7ôZÁEÐ19¼*,;ð¤:B@èõ£cÚÑÀ2Ç(pñÈF}mîó= Þs4u¤*"ÈðaâÄZQr/(×LîBL=úO$ÍpìK¹~H75Ø«HÇ6çSêY!MeFLÝ¢c©Î°©;ØLÎ&Ìó ¥5D`12¸ÈB'Z}kÊ7ä#xpwáÈÐd!#k£ñâp)ÅGafy!¶Qù·KKHuÁÛ>zD +!Ëè9sËÂD§ê¡©ñÏ5¨ÊÇn±Ì9¤#ÚW ´.vOØ.HvEÁ÷ª{¯d0Y´ñpu ²kôLèlZð00Ó9Rmhàb1Ø<ײ}KÃz#mкËw!e0ATMפ+(a¦¡¼znõ)¼Ûg»BÓ'¥hm² 3"ØÞHrWaÎW<Jà|è£)¦µjè\y ´1¼-\õTáä<ª^mÎOvp»A7éü$ª_.g1Km58¥@\ûótlEûÔ©ö~ýÝ>îuw¶@o4(+·w67+»®úiãû)àÝP^¦Èç#/\q-CÄÚ|U¤EþKÆréPC U& ì2mZÙ¹L©¤ÖçÐ0ª{ +é½ ïØÈgL õ0¸¡3N9 +æIq«ª¼a+±Ïêâ©q~%Õ=.ÆôL7wäst7ûM>fAKuf'¬g¦sƤúù;¢ë}±ý;È7è\ìx0 +áÀwµ"PÎ}a1nªÅòàö¤«Â²Td< +Ý +ñÜÄ.ƱNbOÊë ö°eh§0p(¥Wâc»;ûº � Js.JDN"ÿex×BÀg(FÒËðÆ2ÏܶR,¶ã %O<5|®ì0Üë娱:XÄ[c\a¡86Ìûuèð(ëöl*ËLH)íÛ jyV +H åv3§>ZlwÓ(T²ý@æn´Á +I@Èk¨æ¾ùsLHpË}y$¤$ ¶lÈi]T.µ×¬:k°Ë-ÃLÁ6[5R¤Ù¡Ïoð'daL ¬wVÚm ¡·¬>,|Ë:Þ.¦º¡ÕÆo»oþOú~|ݨó|Áç~´%ªüâûéÌïȱA³¦K'#¼*_·o.£ klY}9oÒ^"ªFÇ +ç ~&î¾êÚù×Ôº?²`ÝúOÓϹýµôäòK)üWÀÌ㪪Tðå1¯4Ï;4lïÒHq½t\1妶?[.äíbmøòRâ=ÛìK«¨åZÂA |!óFuJ �á»`>]÷q]/M²SjvP ¨ zì¸Md«Åa¾¾bÿA¯9µy<Hm{mz§ÌÐïî?OòÓ +so@¾Lù¯ú Z«¤JJrúï²¶¬ètܧö +ïËü LdÊè)x)çbë'6'Ï\ã¢àkfcð/ hÑfêFñȰ $L +\úÀà +äYÎð.¯Þe#¾Â§x6âx îÈl¬ØÍ Xop>Gr«V1ç ¤þ¤Â¨'Ͷ> Ò.àWe^íäx@ + òªó&}ÍlðFvçë-I?$¢©Äþ¬ +Î +rÆ¢&jƤ²kbÍÒ$8$ЫFÖ`cÃh×o¸æmZG �*o @½â8!îpC>ll®ç¨r;Çlw¼ûK¬ +Ôü娴jæymtäÞ£*7Llúd)LEg´.Gn Î é¶Ov;ÌÀ¬úw±h·#l ñ0S16iñ;BqF"ïÑÉG'Z^@P äy*!Ç÷"'b/ÇÆ¿ ðOà.®>Ô÷=¦¯Fµ ØkæÂleFk±W k!bÐg.@Z +DJmo¨6˨w"ÿ0#ª½ò8ngÅáäôlóÎ3NCåv»O`jîÆ@æ§¢t%vt2ÀÄ`v¼Gê`¨ æÝ Æ bLPà ` +endstream +endobj +502 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +504 0 obj +<< +/Length 2598 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KãÅI *r2çáÀPS2¤ès*ÈS±¤ÆeÑ(À¢,5á¸Ìn.ÄTÆ#1 aTG#RaPÈ Æ60T!:xðÖ1#Jí~è±ÙlöpÆ×·Ï&ãyÀæi9àh°èJ( B$1ÈðØp7Ë)Pt<¦C)@s:¦3 èa3%Bi I'ä)"A �RªH£aº² Ð`Ñ·A@+âL@rCH¦4C(vå0b£:2É|&î¬Á@'Â:x¡ g "¸Ò2DNÁ T% +'i±Â (Ò3¤åR4cCQ¼:GØ0Ã(ç+Å1[nî,L¹ ɰèc.£ 7£tH³T`ÂðÌáktC;£29¸ãxÝ4O²M. ´% D(6¾4ù,ÍQrI6Æ1kÇ4¸°(£`çVBjâ2T A$ÔÒdK5e]XVC¥i[KS\Òt=c`ä*oÐ|9eÐöu68 ãß=VÒk2°l*B+Eè@ù>³ðý?ôÀ´Ôí²#¾ð¼o+Îô½okÞø¾o«îüð PEÉÐsGtØÓøQxaWöþ¿â8ØÄ62ÂòV´ýpf(Zn! +"«üdãLî6[£¶·Æ!qA0]ÍÂWêÊf÷mßÞXf}_ïÈócËôB`¡°áoÖ¶É#F¦"x n×B ªÊ 3Ð@¸.K¢ì¼/Kâü2@"a ½£p°½½w ÂÏ(:rÛÐÝHG;ÈÊ2«ÑóÀ¦9q¼<,õ|nÜzv*_¸Ä]c «ð*¬D÷ÛÂÇ2qÝðàx^4È&o37³ +Âx"`à;N£§³ëNíh>OàèC~gÚ"àSµ© +SH¦µz£úµÌH¤j³jv[-Tõ + 0cA¤8@Ò£ùmÅ,æsTtN[#ÀÌó"W2_ÁP4P@ìÛa¦~E0sº±Þo Íîö_Kû }Т B²Ì_áØ%èuFÍÉÌ'Cá<È¡9ND»ÅÀa0)GPZÞO!â ǽ"ªI=°<ºàèÏt%qÁÐÆ£x=¡Ìñ0ÒIãuÑÄÀ$HRByA AÕÊoAÃP_qv8°Çl>)¦(S7±$ ªÌ9â F R$b j[«8rNnLA7æbIO%¶3iJ$'ÄYÁ@bJÑòMÞ9x¾[d¾)$ 0ÊiQ*¥`sgèÈG²Ã9~!°Gu»paXS¨7h± Ðb;K|3ȳ@[ÄP-hîаQùCK2[#¢<Ånîq#°MLwOA=E`PC0f§²A ROÍ/'óüâ«Iõåt$3.YHA«AóM5µ#¼ä½FÎNÂø%¨f´rÌ&e>åOKPæjLزÐÄ0sWg(ª&ÒcNYO*eZÂS©¯ÎÙþѺ´{'öÇpäC ³º¦J +\°)õ}O©S £2IªCn¹Ú¨p !áV½é?Ãxu3)ÀáNe b§²hÉ»y¥Wú?H5*²i½S¥«ö$ú,fm[&:´¢ê.*TÒg@Bn' %àà±ÛØ ++|è®Sª-& +êi5 G¸ë»Be5³®:ÁÏû +¬=¶5ò¥F(ÔàE§mÞZPÃiáCqA®â¸DÝéÔ'µW#Q.2ìy¯:<êj¦Ñ¨7èV¢\A¤"··f¸×¨ùJãüSü7PÚ«ÕíG¢T@ëàyÞ<P µ¼Îê!£ $HZ±jå -1æ ¤ß)WóÍÇ/A21&¡7N*ÚOñ$¬uÑ¡ãϹÝq~1<ÁϽ£:©ïz3'ÐÜV¦Þa8uu¯ç´÷µÌ«u´fUü%D© º'8 rÀ.Ì&0a¥*ÅkB_ÅÙ¡Þî +bæðg!8Í5ÊS÷!ãdÒËIGõ=cÀao8®9cø¿òeÙ¿Ø)ý²6 ¦Pi1À Ãí?j?Ôl×¹BwC^¬EBÂÂ$¥D]õÀêfA ϶§U5-Á +wî¨æ÷B ê · ;\;¼ä8Ê,çüÁm¦ýO¸à¡ò2Th0ÌÏ2&èpEmÌm':ÍZ>êMvnؼeº§ tÚZL0ó5T¤á<0håßX æÁËlì|à¨AÈ{+"·ý¤Ä0ÛZsniíøh5"ÄËr¢ü²ú_ZÐâ»÷Ô ÃîAåWbsâ[yÏ%revðÇ.Óx¦Àé<×Óu|©ÞOÜ2ýÍí"^çg ¡´^³ ´ã>BwÍÜõÞ½âÇÅÍ©»ä¥.娮ÍÒÃ<¼¶*³5<Ͻ.÷±ÕÈH(ÞÐ#n Ð0vM·Æøèiòæ$®nN¿¥pI¯ºëX+Áày°l¯ ä3 ôÚéPÐ/ �lÖpiÔrà®éàIèê î3$ô@3)æS,ø°Sì@ª#k&«É,hºÈð¤èêélC®´OÔBÏØg@þ/æC ¦ r6/ôOøÿÍ -¯gpÞÅØô£J~£T4ÂÄ*c^$r1èöGH7ÔA&N`¤.-îæIbä(0ã#¨ ®r2Öæg0ÅÌ`°+ÎtÇnøÊj0úrÌæ=bþQ \ è°(a)xn--9v-uma.xn--hda' Jþ@ÂJ@ß +C + +endstream +endobj +505 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +507 0 obj +<< +/Length 2420 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)ã9ÜQºhÌb("FóÌSC¢ÁHÒ8T2]¨Åpz¼t@7©×¬!Âû3 + Æóq\)*¨ÄjEöST"q=BX¨ #!pÚ¡_èuù Å¢9lÆÌæs¦k`ÐPe9MÆ3-Úñ¾R¯ñ}-ÂÂÃq¸¸eHØXeØë.G'ËæsyÞ2GÕÈíÝá¸i×âåÃ?ÒÎ×-â +iÚz:+{:cDH¡@Ҹ㢠*H{úÍ`p¤È@¬HCÁR=jJü¦)ÍÇ-2®¬¾¡» <,`hÙ¬ÈËî· Ô<Ãxà90ÚòëÇrÃ;O\«$`P:#Ê28a �'Âx"" )Û0ÍKJ ©Îâú"LLzÌ" +âx¤"'ak Ò)#ÐÊ®ðà*F@TXñÒÀRp& âpa¨hÔ#H®4 ÑT9õ]ZÆ<*ÍZVÕÅt·ÔB@Ê4ã@ébUUbÍLÓuÅ<W¢Ø0²£°¼ÛO2?Öå8¤QMz! # 7£u¯TÝ;ÊSÕßOIÕî6K~4²: tàu:àµJ2#lïSß}ñÝ]k[ÞÓwQÊ6yPä&££XÙ8Ò,åYf]fCitÙ#bu6B¨ç5èunn ¶øs^zf28.µõ^PeHÔJ]SÊ¡ó=ϳýAд=Põf»JÉe23DÕ6Ótá9N´ñ=Oõ �N! x1 £M¤0Í;¼¤ì6Ê2"! +" +tMî6.¶»½°ÑüËÊ +E½² ?i¶mÜFãÅøØò 3Í3\ÛÌúô@ ÁÅP>ÊôèÆè[H½LÃMô +scÂ7¤4@HÈÁ` ~ÉÐ7sC¤ `7à÷ Êý`/`TZKQkAø3ÀSP!Ç(ÖÄÙ¸8oo9X6¸'aT02,(s à¤#Z¡ÒÊxI6 �ÀàïAd-}Å8ÈÚ@UOáPW|ÞMið%©°@¸RJAp¾¢ú=Gfª£ò Ùj<èÙ9twi»á9à`nudö´°uRÑÙ#|ÂÚI|P4PAH1M§bì;Îmoå¿Ä$½C �ʰUÁ0)ÄØÉâjY¥:Ëå9ɸR '5:ÊWy. ̯Ù6& ܺ¢h8C°ß7cxeh¯ Ê sMA4i¦ P)à¢I,YRBñ§tÕß'esm ݵÀ`Ç/$¬¬-@ÖaÑ'ZM 9ÚÌND MòÔ4?`Î ,! %@ÝKÖÞ)Ú 8*s ý$'¥ãÅÊ8ò¡3LR 3JIM/%U ) bWæÚY °~KãXL}'ËU +{Ju`ªÐÐÆ« ]ªHÕÖ·é1S#´'%^R:KIÚs¯¢}YøÌðxpÙLytÚÍ@ÞàiÌñMöRH@@rSäá°Ë´áÇa¨ÓtÁ± +¨ÊôO ÚÀXUrKÚ¤}ÁÊ'®Í¥XÀbkí¸ ¬®Ö£pZÊéP¡àÆÕuVh$BµÅ¼II| Iq[¸t|°»7·H©%&¥Öx´Je`RMÌ^ÄÀßc¡º\TJx â¡õ&:öêt§»¶²³£yZvïãznã.õsl¯Ç®¶×Y0¹¹¦ Ë +Å!]r=¦°Ü: +òf5_":D°-mmvæÃTÏ»cÄ×YSlo2²¬sSÛÜFA f¬9Æá:µv¢&)Átdpkn¯ÇMò½×ëÕ`Stû¶&Ì¥EMr²c\Jt7ADCÃ+4ÂÌMgÎABUMT±d'uw¼³ÈÚ@Ì&r2¡Ë>O �´ zÑÊgí<&üá³sYÍ:¤êúòà8eJõ· 9öSféMeõ³;MÚ+IC9ñiÓ{ ±ÈfT JwÞ¸,ÎÙÖÛy본výÓ1Õź!¢rV½¦úþxj Ã;R¨ ZtçJR·÷)h ¹¿¶å.¡´7¦Íȸ)Úp !:³.. +76éÝgê9êÌ§ÇØ!Ã!§VÑ2JgÁÜ0æÊ[`ȧs;|ßå?éÕÔ_UÐ#úÛö\K SÊ\ÀY ¢äi;E4e{ÊØ ÂÁ¥.TÄ4± Ïõ¢nÝr{NÐï)CwßrJ\ÌRäeVϪÊ,y²Ö·Ç· ¢_VKÔ¯3#wj¼ÑW|ÇpöABúîüËýRÊ(ئð¶çÄSCv£ÙØã)N&°x¡<%XéL;®Éà(;;Ëû-Ëì½;æEY²û®ïF«U³»+N!ÕÏT°â¶yd¦`AçÃOcôT¿×lk2}µ ¦ôWû×`@aÙ1¾~òÃýÒ g ÁÏV>òÄRèÊÖÁ,hªIZª¯Ìd̨ ÊÊÕï$ùl̰ k°MÎ.NjªvØäì~Ð8ÎJÔÊ9MPëä×2íXC +endstream +endobj +508 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +510 0 obj +<< +/Length 2814 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´c Æô1¸¸b5©áÂdT CA@)*©aÄ& FÇø¤.¶ +KÆKPB$ ¤$F'¤!¥hµAHÔ«|cy*r¼¢Ã?9GSÐêr³pée³ÚmvÚ]Àl.áYÊmæ»|Ϧ¤ès(OSfÇ#I·SCQpØo2Þ^&wã1§dÌÚíBÖ1 m`N¨ÌsuW+íØpá|Ù,§Hd{²·Á°ÀªZn'! �0CÚ2(ä.! Ök: zÌ1#X3 ãÚ0L8¨ª8¤iz§*ËìÁ\#Þ:"Í hAEÑÂñÄÁ �2ÃHÆ2 d®8£t¯9 ÏÚ'$ +û:½+ìúɶLÐè®øb;úð½@ëðê4c|9 +£èç²sÂêAªì³Épf«0ZsÂ0*9,ñHQ+ÓîÜ2Ä!ME*Ê|ñIPÕ 'Eqm]5ec(ÍAÂ!`¾¼½8óóBÐãöè=@SØ $»sý.÷¦ÉÂB#̧%W²Ú2±¸hÌ3J6§¾zºú3ìÂ0ÌEFÚ-½%b¾Tµn¬ABÑ´8ÊAÃ{Y +¼ ß2ÜWÜïh¡ón?ÞvÈPû¿7Ûû<ÀýJ¬Ap@$É#ÂÖK49JX6I£»X3°Â6µ@tý©Î rMÌüH//bx'Bx!h±¶ �qCpì>7D2ôµT~'*É£<µÁÙü) +ÃM;QáC£.#CÍÊËZaªÛ1óâ±J£@È1ÊÒÆÖì°¨ð:M3ªÄñhÞ5Çép¾)ú~««ë:Øn{ͱlä=,ñ}hSÒ± @(¬fE_ººÚì´ HÓ5F¢GE¥qð,â¿NnsÎôÝ+éJYðÈ;Bx¡ãÚ!kdô=ºÓ°¤-LÒîí\ r\HDС`ZÓF(qY%vTrUJáÌ1 Ò YV¼4¢8°ra)E½õ~¦©×ckß±ãl©>ÅÒÁÈ8yiø9Õºè%äx8×\ÀÔböðT$Ìp r±ìh § ;hpçñ_b$]c0 $$p8¢«"@{Ø:ãJ®¨z ¡XàêY VQ ÃlÒ%°æÃ0u ¨'¢`äÎTI1ê0¢ô |>woÄBelm!ñ2$elqÑoE §"ðEAɬçuÁäVeF¢¡b`.uä±àÌåQÂ#ÄBë7bL³$I÷r.ð4%+Å0(sKФC2(kèY0ÉhÆAºé2¾4Ʋ;\lPÏ 4(Óaxs¥PàéD8T áË%º'EMa¢Ã0Q SªçW褺ÄiÆû¡Ð ZRsP¹ÒÀ§h5E +ªD´1RtÏüê1 ÅÒ^HA¨ B*â±¥²Â!ÎI¤¶³¢!ιz LðL<èàìÿ_ +fÐIAò|}Ó)²þÚ° + rAI&@Ü'Àt±©$7Q ádÁ +á¤2û0@e !4Y @»XYô>¤0×ÜÛ2ÕjWÎ- + ì4Ú²Å`Q j£RA q\®±¢»ÌúdSм+¯l±=Ö,øñ/¥]ùZ}a!ÇI÷ bfß<êhr +$Ìv)<4³BMA¥eá6etCùgxð%t²Üö®l3£^¬PxtSá¹F4r eæô÷^F!¹a&Ñ!@9X1Ç&ò¢¦Vò!Tª³Ê¨£a¡P¢EM+m¨u·åÜÎI,½Ìq4 ¶ *G$ fGKy?àî +iâDÌÅÃLp©UXâ[$¡!ªD,©²¿(rÁCi]üWôÿººêþóiq-Þ|ï¥õÒçy~+¬Áõ< ¦È-#¤p®é¤ö^c×[GP²#;Ù»¦~ÇÙÆÉ5F/y®6ËÙS¹W©Úì2Ks¬® (²°#WCþfÙÖDúk}-Q +W;ªúá|àÙ°¿({_ܺ6~b PPá·4ÏÎÿâÜÃdc«<ãJ^¡¥n$46C!¬F +¡jE©±¦¯I±ë5g0~ÅO¸«ÞUnöL{ÚòÍ$ïô6Òñ+Ê Û'Ö[-çéþÑ!X× N¸ïÆâ¿w÷Y@5é`Þñ}g¢nQ'é@Àõ`7g©ô5!YS»ÊtB 7ɽÑ)²Y»9glõ´æÐÓ©ÿ:Äɤ¯ä²QºØêtø FªÉ<=°AÞØÐ\;È\vÝp �42rÔB¡ +Æ8*Ètu¼*!gÞ!Yc5Oã1Ö<Ê!ÈÖàìyM¾y= �Þl/Áa¬ÖtÏ»OO÷lÒÀ¡fjïa)ùæÂÞ`àâÉá½AÈaÙucò¿³8Þ×Éë¼ÏìA0 0(Sk[ÌïBðïÄAæ¾ìÊÏdt@Ø Æ oÚFÏÞï+º½® ¯ðÿO<:ëÞûïDí¢Í �Ìý tàÐ8ÀËê°hê´¶âHvØ"êÈkÍö§ \b bèöÍvZ +è"êì"êð# ¯Äá£êøK«dB¾(îHõB +¤ + CÆ8É(i, 4<m©F´ º:¨¢¯¨k~ IP\Í. +¹¹ÇR s 3é®Tðê-W(J¾!/»¢ùÊ>°x§P~iâm¬iì ô øÅP®N¹P b®/0p¯¨\8Ë +¤ê( Ȧh¡"FºJÌAÊv2âÿd¤õd¨ª*¥ü! +ëê ʪlЪ鵪»*»@ÑC1N¶*ÊÔÜ +ábÖé"@û Ê/À° �à³$l²6³ гîF´M#kr`¦K$òC&k?j +endstream +endobj +511 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +514 0 obj +<< +/Length 3003 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4'EÒ¡* ¡AhÄj. f"Ѹ¸b4I(Pi7âÉLäc ryH 2ÊDòpR; TÁ¸h2ÓEÃqÀÎ[¯äò`¦t9N3AØt. + BÐd1§3¥¦Áb74ZM5ÆYÕéD{\Òd:6:ÝA Êi3±o;1ÙØ*ûÀpx\<¿®Ôò·þÖϱ¶Ü;»CvûÂíZí¶ûÎëwæQÈÃL. +ôOò(!l¨(!°n¾£I"Zý¨"¢º#0d¿!`5cä4 Ò7ÁJ£ ¢2û!È$²=£¡ �ã¿/ªü*±lr +Tz! #£,Ì´½>Q<¾A« &AaG:ÃÜ2Knj "©O»¤È³$p:Ì{"ɲ¬»2»HjDûplLn¬p3:l' ª6# $9 ãm? Þ:¬òÈ2ÃHÆ2 ´ÚÂ22ÎKP dcÊ1#0Ò2ͯ!)¶A!Doá9ÁüÀEÔËÇ®C@ÄÔ/¡ÃèÁ!ÂÄIòñE0Jjëä0¬Ê9Sã}W ܼª£)íxÌ÷@ØÜóï0Í»x^qÍÚ¥QôR H°4¸Ý!Q¹ i[WÐé^vQaÇí Òt®ML 9M66ÔCtiÔC¥23UU§WVºáÖê¦1ʤ Ýu'GRZ]¨^:eÙ@;Ê£FCê9íWÈéY8æ2>_6Ã~iäPðÝÃù;8´ÍSfÐÜívvZ!FTÚM§gp9&MÊØlç8#E©B U2ëÓ½î¯V{ Ú°Ye=ißm%þÓÿ SC}gVØÖEجm¬ N(&À«¦a®³Úºb73«$~|¡Ô§×Í÷~îtT+0L# oQrxëf¾4ä[Ý{S5æ58¸XÊ" ¾Åâ÷#þMË䥴Å`,c*1Gwº¾âþJeY¬¦ÚÃ`oêØ0Çzß#4`7fÖdCu2å3¶ÅF©Nóks. ÍÆd Ù= DWF {Ö¤=D>¤Æà2:}hôìw«VÑXyÑ (=T£Éô`°A9@8BbáeÏýAF\ÁÌkÍuý½ +[¢_M VCfá¬7Pæ&C¸zÚÚb±ÁÑR*gÒÕ|Ï` Ês: ÷?·ãÞ´?l]Ô?°Üx Êãql>`dþ#cúM´¨¶(MÓ\ u´£e£íëS~pC¤ºp(Pja&'+©< Ø] !é ÉwhÞPgo1&GCHl¥¨sñR)È«Þ;Öy`Ö`JÀq*ZæÜܱ« I9E )®?9btÔL¬SLZ4XÏ4Ø¡Ð:^$pZ %YB*.UÌ _¡ð/õ3;d°¥T§I¢ +Ñ2]?åVÁOj² &ÁxFAÌæÌåK8V¤b² +ô77Oáó4n ݲs"¥§óx³ÖHOpÝ>gÙTôÏú´JëôÖÑ69 ¤èp´6»æ¾ë+}JÃÊÒ«$== q$1÷g$QËþÉ/ÐÈÌL>YÎ]ÈÄà¢*ÎáÒ¸°G#k%fSuÓÄ9f2d$ìßq ðn³ÀÊBÒiÙð×ÐåuIó?³è(j¡òyL¬`åiVdO ¦ÞjÚlÜ)!37§bãõ«¨.E¢ÉÛxéãyÖº(4XËÛAÕªÓ%kS#zQ˹JL«%>TIJ +c<½PÊ"pçËpXó CAöz°Ã ;¤ù×%PÀ+aó¶Ë¤2Ó¯ìHY ߪGbÌh:@Ô¿âW·-¥ÁâsmëKêaiL8¢¬ÚVÄw·Åz cSéi÷aMn«L2pfq®7ºpÕ]õXè3'4t2ªºÅ]é7xàCÅìKMû4aw®®NrÚÏ&â 0©.`ÆçA2jõPÄ£ÍcÎpë^!HôHæ ×2|Ã'ÙÀ4ãfýáÞmaäèS¬Ì*S! 0jÅ}øe5Õ3ÖWÄÿÊn'F@hFójÕµ-ܯ·6X°o Läà¦^,9ÙD×)¸bÀ-+%e¥iîí¼K@¶Ì§ïµ¹ýìsêëc&öçåǡäM¬è5è µ¹«ÖÇ7¾WHðI®À¬mÊ2% Ç'#kLK½î:ñðâ°÷°r-7ê+PûzûP\ä!¿ªÅ'2àÿ SÃÏG'ÍݹÝ6>pqbá$$²ÚÃaa¬3ª (9UÍa@ÌÜ&rÉÿå²N{3X?§ÝAU'Ý×»²¡ÝzÏ[몿P3íÄßCDÝ2w&ª»Sç|õ~õ2´ìPxo£*Íû&äê«d½¶i:u¸Xë]s¯LÃ'üô¡iÎ{©¨ aµHo©£Ã%Së°´.?jÝ!åîsjmUùÒ´ë¤Û·½ÞyÓæehq®GϬã2Ë·he-ɺ2¼ +âÆÛöL&(ïÀ¦:qÙ êÒÊK[L¶üæw¦ì§xæmî ùÀ±2Ä´Gþ$GªÊ è§K À +PÏC2Ä´@ÞÜLXdï¦á(V½FlÏ8ªjf +lklèDÔm3,5 ÆJ§bá- íôRMÄ&Ð×C2Z`ì ê¯:H$6Z �&ð.ÀtHe´@¦ø,Øzæ' ` À +`¦¸l¦ `^I*¢^¡á¨ +`¤` +@ +`T© è+ª ~ ¦Àü¤t\L¦ + À( ¥ÔQUZGÞ¸@ 1ѸpÅ + ©ºô P?b2© �> ±"àq">]QT +q2ô_Qü +R¡Ñ@nÆ` ÑYì ãò!"B@?j!J-QE @""F? P{qô ÀlÜý©#îª âz +He`©% â®/Äh1 +£$z + � +Pøêv>:?éf?¢?D¢jª£"J}¥Ñä"ä(Ö +C$V +ÊÉÒE"/-D\(#ÚbüFñ +ôÐzf°«*Orü!`¤ + 4Ìzù'tÛå2 ÆVàæe& d ì � (Ùã¢B +endstream +endobj +515 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +517 0 obj +<< +/Length 2805 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTQÎp(®WFÊpÌb("FóÌSD£AHÒHT2^`bÐr<7ªWì61Âû4 + Æóq\)*¨äjMöT¨`jtúµbH6 Ãhõ]PÖä'6pÖØ1;Ìæ-)LÖÁ Êr2f[µã7N¥_X=© Ãq¼r®±KñÖl@Ât! ÁApR,̧BÓt1='Bi¼È2½sà#¾o«îü¿oëÿ ¤¡\)-`hÕµ¬Z^ï#,©²Î®ë`dÜ#èáCìù¿1 P!'ðØ±´¯§"+|fƱ»ð4GQâzGálþ?ÒC¨¬ Á¢<ÍT8À@¬hCÁR3p¤Ð*,ñ44ÎÐdî_1<¶-»r +cÈÜ7Òæ¨¬Úù :l,ë¡îÈm +L.üDƱéªnÈ#pè +âH HA@ÑÃôõAP ÜÁÉXZáÄR" ESUÕµ}bøÀ²t\?ÕÕy_Xág0ÝZÉõÍbÂ>Ò:³Ú®ÚøjìUØÅt8eE7B#1CHà: ,¢ïJ¯T»¤êSl°«Ëð±©¨È Ð2Bè3È#U"H]<x½ZZÕ¼±½°k3K]H paÊdñ:I<1{¿S§! �JȾO¦[Û0f<½æ VnVxM´LE:"~!@Ì:¹X#(9ã° Pûà#(íI!P7§Æ÷Â§ãæØ@1 # Ú0 Þ3qÞ¼ ±|Öìî{µ!ÎÛf¿ã°Òå £(:£ÅWn È_ËÀãG7οýÀä6Õ.f;éêz¶ÀêDO«¬}k[· xî8ÂRaÎoúH̹½cð\%ÊopP2¸ÝÍ~C{·éb6@¦c)åè#È£ÙêkÏ00¢A£#BD6VLkÑB&!jÁyØ(nw¬iÀ@ÇüÓTÁ]m5uµ^\f¹¯Àæm[4M¥R@uÂÝv À;سq¬qÎ÷ßS2®Z0ÒHei!<žÿÎ/5`áÂÆ}×ä?*æ¶æFU �eC¢PÆ!"á ñí9r �ÿ`ét£¶PD °ñ%]a /CÉ?¢ö2Mc¸"vñße|hIC*Þ"+/0ª1að!Å'dýÝCå¤È7S! 8b 1°@Hx¡±¼öþ¶ ÒbH.Äç3¬9·Bø_À?á0SÔål2Ë¡cͰk7e +ËzM© �³'t8&5.\ëãÏ*`M ä^ÈuUsLæy®æ<]U!º98eÒØTNPíéÁª+EèÈTa|' *B¥ 4º[ÒSeôËT¤ÒèL*ÓÏÞb¼ç4¦¥6s3d¦Ðê!'tóá4v<§£Iªv9éÞãçåUð9ÇÔR +{B˹>Á4׳¦S"Æp¢yÁÔ7)BòÓ0L9Nàh ̲f̬;`iÌݳºâÆ& Vv(7êrUx4)ÞÅøPÐÐ4²1³ræf1¶Ù×ͽî:; Þ[ÄIò:]XdëbWe]¼¬¢CÍ à1MB ZÖ9¸-åĹZÙm +´d]Þànµ© °É[̺ZuOW>0jÞ}ò*«â_cºm¯Ê7¼ßq5À9vxçÜrh¤0×¹³#!ÖmÐ?h1#2ÐBp.اc> SÒCIÜÜ2¨Á£W õ·Àp1n¥| D !µ$S¤¢Ëa.£l¾sçÎÂ+b] B4>EÓIem)¸2§ +0ÂFª§ÅàF*gùC(fÆ¿bR +K0EØn´¤`¡ðkîj¦Y¡+ÔЫr°VHË/¹0á£Öu2°$ j°Wá6ÎóY4JG@ÂxLÖKY=kuÎh Ùß^kí°FÄ $ PlL4¤ +V$&ÈÈNôá={ 2Dmß=+}ºûÄ+õ°oý²SÀëc#²¸¡$°aHq¬Ju¯B9JVWµ¶×äFhÓ4<rÇ;pÜÛ¬!·7j(LÇÉ»t÷kh¨b´Xq¯ï6Ï,2/.ØÃfÒad¤gìcpì\A½»*QqÞ*³dOÂ$A3ÆmRdu§!ÛãmM§°2¢´ªj9?æ7ÀÒßîÛæÛfÎÞvã¹ëc¯°8«âËI~A$ðóÂSSNKÌÜ÷6NÛá4`)K¬ô¤NWú¦âº lh'Pë¡×R¨ÐsÁöÇÀ©ãÇSãÅíåz7áeìܹf �«§Läêbäñà;À±ú±ÀÏßÎOÍL3sQÊþ0êk7unÍÝêã8g^³ÇXî(öN®+l!N¸ÙÀøt·îc R" shôxÀ@nÁëÂ-êÑBßÔåÒe² ò¶04»O0ÅÂþÔ0F+N^PúÐäÞÖîo®ÞÀPgTûîêöÂÂÏfæ:n+²·gâoOÖoK|.CUg~p~ÛJÎo'ð¼FÆ6°² �iÎ9¼¼ âhppò}P^l Zå.VÈ,°Ç0xÎ|ðvºhLéËJõÊìãMNòîb2FqÉæàZ.þ �i$ êclUI· ÈJìÏ :Q>ñfõ1t÷Q¿VZð%~ Óàèw ðïo +WðÎc °ÔpØ> ïhæp Ü.p8æÂÙ*"¹tF0xäQ¨2¹±.åÏûKx ðÀoÆÅ`ænh` +qüt²rÒ9 ÑÎèÍ!,(Ñàp,kÚÃB¡:ÊÄÃkø.;NÀLbÔLfÅæ0rãÃ"ÁªyôB +endstream +endobj +518 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 114 0 R +>> +>> +endobj +520 0 obj +<< +/Length 2700 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8ÆÆ³ºhÌ`(!ç3´¤e3[)ÈÊn1NbTq½^;©)ù¥PP'IÅAIPÕÈâq= V#GåÙ;`4 Y`ÝpÃc6³##`Ê^()N#IÐa8 &ÑHÆ÷9Mæá`Ãâñù<¾o<ÝÑéOJ$¡øÑ ª(Â2Ø©j^¨´t«+ +lApdÖ%zȳ-p\ªÞ)#pÞ8:, ¦I£p¸) 8N è6¹PÚè:Cp¸ * ²(@4Chàê#pè ¸Ò2DÁ1L@Ê4ã@è.!Û:ÏÇj°¨" @'âd "HÒC±%É®\ ð«+Ë"·.ËáÃ1̳<Ó5Ótá9:¢-¡ ìÏ@0ÐAJF×*ª®¬½¡Å5«rÜ·p:·GÆ9 #é(¼2 Öì<Y]Åìr!¤B¡bÙA@¨4¡ï Ü,ëÉRc·'»ò§:]è(l^vÓêû$ô µ×=è[p0êÀZn@9¸AÓvvéa Þ3dW`@18·ö>8£Ò3 #(ɹ¡P<Úµä¥Pn¦8mwV5ã,/hª7Æ£«Ì´¹/`¶¾B!aªáÉ:̱XL.!ÈP0ÙÛðè:Nþ[vðìé±3ËÁû©ÁpØì¸²nd¸Á½e{Þ_¹ÐÝËcXæ¢AHp0sÒ}»oØì0¨Ê!yv§!ZÅ ¸b²¥ØÐS³@ѦOö Ãa¦Ý¶mõ +¾¼uÒ8#Ã'îgæùÎSÌ(îô÷Êü 8`¡hdøaÊ=C|_] <w¸gºzÙyÙª4¦®ñ Ê8Gþ +[ÈlD*1|eÔzÏaí6hÍÁSAÑçÄÓ| Ï´«¶7èó¼b+Ë.µÚÿà )Àå ¶Eò±ÎIsýGãÄÀÁLkå1´tÕ ³Ïj+ ªWÆXØcc®mÖ0ÞÇÎßeÎF"²ÐËS2Ïr·$ôÝ=gị̂İd P1ðùt¼DQËì:!uÖßcM Ðå¢! lòÚ°()¨,7s1-4&Þ+ êÞ³#Lµ¸;0Z êqÕÆ<×{sSzDáÔ7ÜhACþ ô2·ðÞàe»t½70Q×lis-ü0¹È³Âã ÝÒÇNpH un´2¦ÆÃ o/ÑvðØÎæe)LÐÎC± +@J°c¼]&`ÍÉÁâ\=Ò`fO§ � Á© F)1g +¿x¢Äè*çmpeê½s `ûÝO>7ÊðS,}1v·Ýå˲DîÒ;@0kà1µ*Âå% lu&@ÕàÕ.{25½)ÀÀ¿G+X}JboHXK ×b£¦8^i3Î6ÀA:R)z«¶v6@CM}QÕl1ºÝ],ôj]%z)Àв,S_RÖBk-vîÞ\ÖÕlµ¸(\!H¢ +_É:"Ä ÂH{¡´ÐuÜÛ¥¬Åéº6ð_dư¡ØLhl`oà¶qG´îí9r×&m:Ç\Ó 0ÎEÝPÚB(V² i½ i²qF=µõõ®+.øåB£»ÊïJ;Á/Eê½éðWU-c ®Éî¼5jôï×äC·# ?éLCsâ +áø1rYHT +AUT³v?BÌ tcUû`5eoãñÝhVM^«»(¯°>zÏK@Hx4´ ""äLj¸Å[¼%Ca³°ýßã¦ëßú¶Y6ËK0T+¶ÒÆCZZÓÒ.Ⱥbð^åÐÇ.Ï2\ÌUñðÏq~¶ +irq#fªßÖÕóéhàÀÞ¬ PC dÑÊõx¼Þ³<íõòóz'àýSøR �çDþxqGårj BnµYh}¢4KHb^EÚ<Çè%§çÕmM£UjÓ/ÃJa0(<ev tAÄPKqy?'Y}F +ÍòÙ¹ñcê%´ÖhsYëF-íÆ¶ó)¶$ ´£^ïa¢ºøc}ïFë%{Õ!sjýÒ¬q4IÅ,øíÈ%.^8Lg;Ámú¥ÌiͯW:.s Þ°Äji)4Ø'WbCGé1}ÖcÀà`i}.À»7Pä^.&£Ü7~«(NôéÝ'Ûò)Ëó¬®' �ß'`Öcø2|hdµôÕ»º[:cûÉ0yHïJbÂvÄÍ´ÎÆwªd¥ÌfqNߺãÝê§ f +K,-½ÿzàQÍâÝ?>µ·0 ©°'ÓúP!Ï#c¯ÞÜÛà9cuÆ<ÃD¿ì¼¹ÉÖçíHA4/`fÂH!8#ª]gês¶¾²©DÈ-éÆ¿>VãvJØ{ïc+Í\f À)ì®Ú ËkLu/zxËZâ âLÎï$Ïn06ê,)<¾dä'~ÜHLM\õnPÄë"Å.Zåê¨wè°sÆ<Æ, Àê Ä{G*õİMRgOô¬*úÿåä"4¤n0 +}âÄËMÓl¸ËÉÅj ð Òô*ãÙìͬ߫$[-øÎ¤ßàb¨â°âä,à°#."æ.¢î/$ô9í0J*ìDW +®"#ÌÎ9Ä"³Ôå.àÚ éã éma RT¢þÈïÓÍô²cD*M4Ó© 0¸ªC CÞ) QÉ éMÏd=ÔÃØ4"6@ãè>ÍxöCú?ãÑÐÄÿ¬Îä\O̪ÙçÞq.DDDáÐÍ ì¦ÜS`AÑUQäíÖÝÞí äíMìßê`fB +endstream +endobj +521 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +523 0 obj +<< +/Length 2958 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NFCxØÊyOC)ÌÆr4y¸SE£ÁHÒHT2_bbÐr=lØ,VAÂeg + +(RT5RÔú^Ä¡dIvVI + +FSi¼ìe#_N3¼êr1Kà§?¡Áa)z$©¬±Ìåà +m8¦ãîú 2MS¥Ô@a {;¡äo6Ïo°èa1xþF Ð@4o8ì0#cðý{Î6 ðZA@Â8`Ò1¿«àÜ9 Ðt Í'ðÑ *þ£4M# +¦ÁèØh!x\+ æ:B4 +2ÃÛ4 Ó¡pnns Ê2n´§áHrå!<(äÏCãÞ4äÃã¢x|×*Ãï@ZõLÜ:ÁkÊ9 ³#ú2¨Q¯pÏA>oè@1·P$6ó½)üP#4~ Òãë/ÎS ÌöK«|à°è©DiìK°3&(hÜi k(5ëC(ÊNÅ?2¿ðÜ7¿ÃHÛ!Lþ6!BÚ¶ôÒ3?ö,2¨çRM#5Niü xî2¶ãYg6µ ±¥èê)ÂU 1Bp¬/¯° µ2P÷³ë2 Î=k}Ö1jÕµ°ì 6¤Ð F;Nã½yÜcê1¸#æí ^%ÂÐÆVw,ñ@OxÂ2CÛÎ +âh¾# âp¨!#¡#;;ÁpmÎKðHà¼m¸Ù|B UZÖëÐó ÉsC³¥Eh"ª¨±*¢ ««) lI,ZIÔ¶ÁÞadò7ðÞÐHêk¾Û˵¬µþÍ>² 9m<jÉÝ-r̶vpÝ7ḽSÒóAs~¦µÖ>ؽ®Û» ]§+ Ú¶yæ9ñu#uê½á¿/n6Þ+"îþõ¿óß ÂáÜIhqh¹Ç¹PCïAÍË»öòÙSs¦!ϸMy%àÀ¶ð_U+¾oµû?WèVÁ$:¥x¿ö +\ïf@´ÙbÞ¹Ü.°5Öh"b ¡`@Õýç àã§!2ÊîMû»8¥u 0ÊùiumdáE¸Düq$Lx0\ +QZ"@fÿÔ5éMÅäü9©ü#%dÚO²$MNIuÈ) !p-*ªE_PdD¥7ªºÚ)EiárG ² BA3kDÑB3M c\'p2¥#8ezÿ¨Î¦V:@5Ìr/ôJ#ÀÐÆ÷HtM(`!¦4àA#,V 2,PCHg Ñí¬ �_þwõBX`nü+ÎÕ>ÂY +T1æO»9Ú7@dIKq)>=:zBÁ aUó%ä,ë£ô24xCXe áÖPªÏàrÔÖ*f 4 +y +CE/´ªR¢C +æ®SÐ C c ódk @) @¤ÊI!Û°-¢´]Ѧ8lfãM +}PÈCu%ÖL` &ð7lXp ¼3Î*ÿà|¸10?, ßÄ¿,³ +Â91K¡v/é LÈÑȬIt`Ò^ÁJeÛy_ÁÕ«Cܱ ¾p;tÊï5Äε$²ñ" P àÉÄÇĪÙKË;ó¡{%òï Ï*bJüÿ`ÃÉPÇÉ1$²Ò{ZëX%d 3©0¦ã:×"ÁJ» ç +2Vv[A»´®îê¾yLí4!æy±+%>¾6 (x8%éî£Ìó<G½ç0f¹Ô`m¿×¨ú_t¹~hBá ó°fäC´ñ¬1fä5Þ¸ ònÀf +"ÖÔñLÎ 7WA÷1*I°Ç>ߺ{g®]oDA¾] nìÍió¦uá8Ñ äjÃßðpeîõýKY/3ÀáVi<ÌHà ÅÉA§[êZ¬ö-ÙgZ ;u 9½½6}Âøà¡qô"hÊsWIfEªñrgÕz¥zjÈÁh4" !|Ôxäæt2m×^)dÈ|ÎgÃýC«*YwâZO¥jÑgwFíZ?+Æ C7jD:ÈOÚøËw?Hîj¶FwtùëL&«¥ 4ÎËþ`?í¯è ïðPÌSÁþÜÚfeìöãAÉJÃ[§kN«ÇØ2`4Û +ë\¬;S÷ÜðHÆe Ê%ä ¯ÎÛ:CndC:WLd^Äùé¥NouúÝúÎôºøKÖáñÌõêM[î60®ú$½^l°POíjÒgÓßÍkÉîµTà´ SßQ6óå1¢^¿²¥aûW<Z ìùì4zCL¶Ú¤yθ#W©SE_¯£º&èØÂ{ùôyÔ1ú[2Ö¡áêó(öÊ"(¨ÓÍ17²9|Qíh@ÂÝàǧÃk}¦t÷ âÀ-!á �èþÁúGsÅÿô~×|ß>µ³ùµÐ{$á¿T{ìêCÌ{6¾»/2`C®Jà%°öRȽ¯Ö@ÆÜD¶Ü}Eæz/ÚTÅ"U#Ôð/tÞ¢è-nt£®Ö#¨öñ ÒÍ$ Vò¨x@jÁMÃÐqÜóëFÅT)ä$×P|dÏÎB¢°cc\ßo$ßÎPª,÷Î8Ì rêÄö]lbÆe?ÅB@ËÒ¾ü#:ü`èü¥æbOÐú ýf$ý£öQOæîoðÿF$@Â[jðLzB0Ö£ÐËoþñ"j` ê$¼äÌàåßü6 X ¬ÏÈÀbÁ.\ÐOKîÛoE#Ø\í¬õCæüp(3°Ó>n+æë "¼qÌÍE`ß0Hç<íÀ +à¾` +@bz+$¨"üFڵਠ�®À à +¡ bèf'ñà[qÑ + ÑáQè=$.Hüï±ù!ÑþVî>J· ñç#¨MUQø'ÑÏÉdø+´'1¶ À +@ñ Ih �À %brR^Aòc&i"(7"rpà ª ²Vã#ÔÒ8Dj01c±`¦ àV*"|Ñõ(±û(²A+q½,Å,BÑ-qùÒÛ",2Ç$^Mo-2÷-mi 1·Ý0è'±7 +endstream +endobj +524 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +526 0 obj +<< +/Length 1805 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4'EÒ¡* ¡AhÄl.$bѸ¸b4I*pF+ʤ¡HB'©ØØb2 +±È at» +h`TN.pºØ(Z0)UÚýL ÉvÁhâ?=ÎÆ7½79z¢Á +©hÃ2,òAV,åa¸ÐQÊÞw7{Ý0ePÌoøkJ0¬×ECA@)*¨äa* EØ(TÓHÊß*l +'2IÐÂl4ÅYTÜd2¾ã)æè:H(¤¡nÂè£îçº.ªÀ¨#´L½=C¦:CHÖ2ã¨é@*D(¥A¨\Ìã/BúA¢ó§Â9#hÊ:?#@4¾ïÃ"Hã0@:9¡ �7Ñ8Ó#x@1'a¨P2Ë©ðÒ÷>@:¾ïËöþ¾czv Þq +S¿µ#Ê9(Æ: #°Ê6!p@ ÃÈ@7JhôüËC³Þ:¹Ò@É%HÀÑ%Éò #MRÈÃà8>`@;¹´PÃZøå-3AQQ #¦ØÕ5QEÙkxQ(9Ö,:VkJóëDÒFí3åS<³-¹Õµp4¿´³0B0&ë ØpA0ÛÑ-uXä)ÈqC§E¤^ÓßL;ÅÁô!H@1Á×@A*9Ã|jJCxØ6 ã¼3EH9< °P]ÂÓ¼n;)"ø$"¦"£h¶Á¥7ѵ" #+©hÊ+´½¥éA½§Ü À¦,«@¬h:Æ!¨blǨfw&H¦$ "2${fµ· ¡¨`iòÞ¹·»#fhFú¯x&ðÛv;0¶ ¯IÓr!k~Ú8YïªÈÕÌ +£FçÚZ©«sº'qcbw~uõ·iM(ñFÑïïEc¨Ø:V°xç-!G #3ãßÃxæ4Oc`É{c»vüíP2¸<áEx2¿$xsvÁ6UÜsP:ÈTðh¾Yà*HØ$J& + +)÷;d©P;T¾9Ê9 ¤3òÄØ¨bc'ñ±´¢Øû!dl¥ @øP +A!¸H@Þ â9A>$ ÷tÕK$QqT)ÅuÁÑè]©`Â,bYxÅdkå)Äè¡£e±ÄÆÕãèR !8#Ç(É£Ì]!<%Ç#äÇrÑn. F¯%ã¤=umÉaXQ¦r VøÎbW hþ±«å}oíáHJÔüc©T*´µ wX0&ãrÊÑXÁ´7¨©¥3Q4DëX8AÄ®R¤Ç QØ`$9îD¨Ý¦9(1w°%åÑa¿  ½È<¡*^¢Tߢ (Ø¿XÄ!{ÁbÌa±)©5Ò9Ðá2 Üáád*!ºôÂ`I +&Äù(VûÂEæ§$üc§I³SÑO)E Á SºcLÂ`Hìè#À XªÔô&¦êY¬tÎIÉZoX)ÍGªá~OU°ÂY®ÊSLLó=ÖIðv'Ð3"VUP +h$Þ óÚ @Â+þYü²e¡F¡ á´1$C:CW _C¨iQAUâAlü¸¨ �³CÈ2FN\K6 lf&Rã5¢Z#IRáʤêÒ_im¹È2/»À¢B 1 +f©Y_¾÷ä$ß»ûxOØ +ü_«øÊ¯®¾Vå¥nQaÚP¨ÊæÈ`Äc +`2d9®5·@h®â/ +(£³'Ô^ìC hhå!c®R@O.^¯ÒAKëBgõ¤ÄÞHX¡(ä ,mFY ÏW²¨TÉrdôlÔO,ÁP$ `Z`¦fÁ<'f&×D +endstream +endobj +527 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F11 23 0 R +>> +>> +endobj +529 0 obj +<< +/Length 2897 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éPI!PÈ ´b6 CzÜ\1LIpÀaK b1|O"JDáIPÕ+§ã.¸ +%õùÇe)ɤeºTWFR¥þ_)ÊDRÛob1Võ W$ÊyzhÊ¢5 \nx˼£T4DcI¸Âl'# ´Êt2H)c +¥ÃAC½f)vÍßlFÃÌèr#ÍÇBvôËĤÂa|ªÀo$]ï7¼å@i9"qÔØlðFÝ©2°äÚá | ã4ضnÐè<0pñ)S£È'ðj© l¹zJ®bªm0f8áb +Møê9 ÃR¢¨î*ñ¡È$ç¢ÈBB#ÊM 0½+ÊÓ_ +C.<8å#aÀb¡=)«!C+ü2».ظL3#áª8ª+Ü3£pÆ: .ÐA4üù@Ü2 è7Ñ4,B*cÞ7Â9¶PåN8#Þ9C3 ¹($I¹õxA ÑH@1appJ±d¨\Gt£L9HR"#NT碲PA'£µpæ¤,/jü';C-RÌ Õd#q-¨Ý±4P¡µçÊñyØ/=kbaQ4 ãæÇ£4pË?¶jgËÕhiÄV½lDÁ¨i_ rü"´k'CPË?Íóç/ °sX+lRq,T¤3uC«ÐjIy¬®é`#ÂxËUAÑXÞu Å(ÝyoÄ &põ«ÚÒnF¼n§Aqd>£hR«Ö xRØS¶t ´í{h·î;ê:ná@æ(pRn[ Ç!â`PQMhxmXÊôM( ÌÄHLßYV¶æúÄK}Ø +¤à¦<Ã{ªør+Ãcf6Û6ï«ÌÉ®¾6£ A½£lÚ:sx"tHÈ1Ò` )@ê@^»ºßRN"Òâh Àû® Ì7zþ Ú(TßÔ 2$¨ºð¸kE +)ª AÿâÎ -¡³Wbz !2C oM´½wÿS{Fi (* oï]J@ MrfMîÃp¨CÀt ¦ý¾6ôK× +ä8PXÿÖ°¦Àø dJ +H, +`ª],Áv22ë¸4%Q^¯ftRNä2@æÐpPià¬õ¢H»ZlpB¾T^dv h¿dNBëL)ç´(¼ÎCÕ Ìµ9F¥¡°2 5ÅÂc}OêN)å8uTGõN +kBfÉI´»6FÔëuìëPÚ¹ÊiV-('Ü,RXáÊf+&îOKàÐ÷ç*èìZ:kNXWd-¯to ñúPa3¤&d¡Ø40ÊCII)¥1^ÂRâ_6ÁqÃl¢r#èôSp©d¿7ÆðàY3¤)xjKØ¡b¥l,%êµâýFÉïBSJLJ\Á± +g±¢>®úó/bÇóÏr\ê3`'à¤þw¨knÀá´àP¥ÔË:ÍÈ]kktÓ +Ìd ÿPû´ ( a¡ÇÉ4?.èÑïBä,ØÓ 9ÐéNjÀÌSê8 +ò¿:aÁû¿Òÿ{ÒdñT¡ù%õB~,Yk=85æ»2T×M«s¬2º0ËyS+r>áÅ»yJ%ÚR*? 9p%Àl áÝJpÑCCE¡Á¤;1ùL¨øe@bÛ\ ÍI§å,õT"ümh¨m?ÒÒÔÖ-*d^P&ÊjÒëjDŧ´)\{ICÏS¡[,(P:¯óÅI:U¥^ 9ôP1p4&²ëW + ¯ÀDÿ + +Øn5ê9\Å t)TØ/ ªÀWر?¨]j¤Á8}([ =luµ¬VÜdio+ejÌ0 @Ýz¦CȹYR¬6,@ }Ðùø¿0éäÈeÈÒSòyW³ùIcÉú +4±¥9¿8Ò<©`b' g[0êHäsËuRPeä,öS¥V²Tʼ+ÕC9±ÓO¡Sᣠ+n¾0ó5rt¬µÞ²ú ÆBÀ·Pæå§Ã\ÇA(2öõjÐ&êc ¤XÍÞ}覼ë;ëû£b-¨L¯@m1³/¿äs_N»d +6¶ØáPSm[ضMGXÎh¼8ªr+lýx¿]f³3LFkáüAa$!æ3È®¸SEÛ_ O~´0aA¼:Ìúô¥êÅl®SQÒº¤ÊÏ_C£an·Ì]ÆÂ¬Gs5õ/|z;<ÔNuÑS0ùÔË5t,´ +=ä[¦¬r6_£ÆÛç¬Êó´,Pâ=~\A0X7h9I®Û#Í3_ ²Ý6rE³Á¥ ¬×nMý¤!&¥¡M[)¡)Å^õop$Nv×Ú%LßÑaDó{ßQ3Ëð%×æÏ¿À~¬uòè+NcàÔº§¦¸¥úÕgàÎðbü10ÍU7Â9z|ÙÜlcü-´@B¼> òòÎC<×Y[¿),-<'$¤þGåÌ·ÈÙmõÌn±ìtz*ôÎÒbB (¾M6h¨oÆìø¿ÎF"L1KDz¤±0cí:ûè±Ê ²dÃnõoîÕâ9r[o¿¨¢BÏZïC¦>Ýí~ËPÀ@£ ÊÐïL ãî»dH2bäȶöïHú ¬åí +² + ÐtØÊ¤ +§'°Ãpôý)èuHÞuGZ)D^¦BDD*`vG¥ +H$xOx ¬GJWb9íúhþ{¨ÊN6äâü qPé¤ >zPh látÕJøÐKì*TR NNTÍSÅ@Ãl(ÅTìîØzÓ(>ã¸'¬BΦ×/0* ÚÝ¢®^ÏÍæ x Ëxý +Üw ܱzRåðlÎ@ÒBLäÙmäÏE8z¢#¶6¯Vôg¥ñÂ@ÊHx8%!i½±¶/<aª<Þ`Ü@ à¦">*Øw®RøPê\ÐüQ �¥ñkXx¥ª"éiÍÜv.1ÅÈÏñCHØVQd!)2ZïQ¨ø`a +afM&!)IrrIÇ®Ë&BæÑe(ýïâå/è{-NVå¥Trb +endstream +endobj +530 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +533 0 obj +<< +/Length 3407 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5Î¥BT8Âá ¡'¦ctn1©I((a.HÊ0P¶¾0X¦À©ÀÈn4ÓFAÜu6F#QAô3Å#!A¸é~à81Eæö(4 &QLôæ,]¯«æ#Âa³Â^|(_Å,®cÐè ¢,2ãÃ1¼rF5Ä,ÂèAÈË3 + *1 +A5AÒ)×éØ*Capã¬7´ºíiÖ±ÍÅá ¸cqÄ3ɸÞp9N{'6Fè)h²$ëÀAt!Óz¨«¢ÈlÌ®ãh7´CÚȲc¸ ÆÌ ¦* +A ¢pª&Åã0ÝÐÚ(C|NR¼AFª¸p¡b"áÈE"¤ ¡ �0¸r¤²Ê¯,ËrìBC @!"`!" +/@ It>'¢¸'ñÌvC2â`Þ3ÉÄx, +kj) 1:*£Àè&±Ó'Ê2«= ÒÔ¸*KÀU 2@¨<¸A2ÌóL×6ÍóA9ÎµÊ +ç).ê:Êzn;në¬/hpò%®«Ð²-«zªøo2cä4 Ó?ÿ©Hr!¢¸î#¡ É%Ò&/M* (A;9®²¥ªÂ°ëØ|Å@ITt5^üçZø´RO`ÌGa0ê7wÔ0cÜX°ë6 �CDà.57sØ6ºN©âÃó°£h]K +ü¬¸Så`¬øe@b¶XcP¤:¹ðF$D£/k_øß¦9þ¯%Îòµ§»h@ãÓn±¥ë8°È2Õ¸ÊzµcAÃxåÔê¬7O¦hºn9j# ]Ë&ûâ)¡FugÚâ£NÑÛùáF¼j±ê;û/ʲAº½Øôü²ï9¾äqPkÝ3HÍÜoâ7A«rðÙö°{aFMYÓ(ä3.)gprùÛºsg©Pçt/Qä¦.òQò3èÂ"xjÉÙ=wa}0êë¹PNx9´ÓÃxï}k¿u´[¨1ïõÌ ~Ò*GjÉ)H.,>S ÞûrªýÎAw?$5a=¨>a¡;¸Æ¸Î +Doh-1Æã{Ëg«ì7B7êת÷h%¢ÀÞÌÀw +Ü4:0ÊÞv^áëÀgèZKïPA¤7;PäS|mæÉ§¡Ê¬Ùÿ îH%BaÙèqª ³ÐÝëB-NNp@ßõÅ,Þs."Ã?!è2Ì>³C+rîr¯ óBi0zCi$£ªú °ÝÜG0Ùc»9gqí6õ¬Úä:ÑU_AÄS;-ÁÏÉbLl«(ôC*/Ö( ܱ^1Z^*ò§ÍX`0µÀàAy µÕi8ÙLÄîâ=R)ÒCSHñ$áÔ)qÊJBÊJú +|ÅóKjúrä ¢wÚg<d|¤mî¶I\zwpüÒ8Ý(Ëé´1¡³$ÊADÚ¬P&Z3dùÙ +] صAI<Óc´M}Ü6¦Ù:á45¶v¾dí«µZ;G«MjÓÜa¬ýÔ`ZTU+ Ý/Ö¦$YÁB-MÇ*öjÓa>ïeVEµRè2K¦]Ö´*É«r¢TRº*ï.I:%źéË$ááGR¤2 +¢Sî°ého_e»Å¢½,)ÅwV¹Ï¬¶æñ\Z©ÕJ«U·nÒ§*{ÿ£ÒrOJ +DCoª¸#g0¥"ÑTÙ£rMS°n¢8ÛYh{A©a¡"ò[CT ¸smüQzÑ^(Mq1r¿R´ëi,q³`.%`dkOÝ'×Eû[f8U¼Ãe¡u¨ �â[A+xqU|¹p7LyA +b½at#(âÂÙs²VØØTg#)ßÐ2oY>e0S à tÖÑäçµ[Àçõ<?£ +¥£¼r²ÓÕ2PC*ÇY0ÈÌaZ!½rqŬժ÷Õήi8qÞPV �úÞ«nWÁ 9[¯ì)[àªb½üðiòz°:³Ðêq³ 1ì鼬ò)Í[lÃ,!À©x:ÒÛÝ +MT2ÅÌÿ?MwÈNÐq@,V¢ >Âç» ä=õ_V©¶5@ì÷tF»Ç·]m×+wqÞ-mÓ{Y¥¦ßý¢1d1ų»TvCÌPtܱKO~ÜVD¡YVP¿N Y +J»gEa)rôt93沩¼¸ª©µæ\»t¾A¶mvo5Z£Õ³#GM´°2ÒàÜÙcxd3{y9Wk n ÿ]l0ì·¡êãDñ#/¸×á¼ó䯷_«Ð7cT¬öûX=ºË{3y\%qá .[Y Kz®SÔ[íÛÎ@à [,<¦ñϽ·(Öß³t× ¥2²¾-æøìn]<|¬rÑrçÅåel¯Z:³À³Ûèn¿£sÚ¹êì~vñÙp Ìî9¯¸otú Ó.ÓÚ×Ê +J×c¶¯¤ ½PæPïÊä»ÉN®Í(ßÚtæ¨Â þ ¹ê¾²Hè÷lf®È ¨I¥~g¤«fví@Æjg@ØúJ[ ¼|Q¬@¡å$ïï6 M È,`ÐÀ@Øi(Å À[fPà(Ä~HòÏ+^ê´ÇPv#x`PP}ähp§RõPrÁ¨®&# +©B É + ^°ÃìÕFEô.àËÒø Àû%Àû Ä*Cªs/ô<ÏÊ=eÜ.°1- äI 䳯®NþD`Ïê!´#lÚüN$P � +û£¬##rqCÊ,PüÂ8^äd Zý`Ì.(ÖM¦y +"ñ>#2*¥Ðö$ÆRå2çã0»-n¾@TÀU pUe¢û"F*bª#@;±<ËõÀjyê �k@ä +àÒ¦3ã`S @æ»Qø 06cj pW±@¾*#K8£C9cmJËc±ñê±mbÜCß%â>cê>ãó!pצþq<a©r,CÊ à @åk Ñóf¦CäBDg3 1/Ññ)Ò + ôò¬k§âBe: 2jd<NX(.¤ Q'ò(ek rË!RDDHDÒ±*2§*²/rµ*Rºl2þY`¡.D\å.²ÎZ¯«O±$#µÇ4/e¥Õ% ¬x¢±é'õl=0oG JæË:¾ê2¿'(¿(òÄm侬2óè8/£Ð/lu¼i(âò!I~p´M\_I$hðÈ6k +þ§ÙÄ&z¨]¦Ø¬ªMÈg®ÀzRÚÌù`\7,õðÚÿlT& +¦'Vu© vdVMúoÍÏoZð¼Lsq.R1y&ocÌOêÊsÞhâdlbê·öØ ¼¢Îò àÄi ðòk&·æX7¯¸¸î#@åÒ(8c ÓÊ Ñ*rõQ^.¢=Àr´¡ ŠʥPPÈl Ç¥æ¤ ÚvÇTV Â23Ö!ĨÈ4Aç +qsão> nîôXMØÍäô*ôä§- + �úºíò/H ébÊJs¯=GnI«fÈ´\hgli â´À÷6/à#$@tèòÓ+ÒRõrÔ¤ßY! +endstream +endobj +534 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +536 0 obj +<< +/Length 3294 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* B¡AhÆ2ÄѸ¸b4á³4 + +(RT5QÈÃU* +KâòØ*Q` %sIèh9ÙªL.Þ4#×IuB¥6^L'# ´Êt2v +ÓµÛpÐA¨¸p3 cBѼaJ¼òä3FNù~4ÁM?HèÁCapÔi$Õkj\Ü9 ùæé< ýù;ÊDó6lÝ3æp'sA¤Æhmp&¥2¦Öx¿ ÐR¢(ÍØà©kâ +×6ê4àèÚ2mó 0î(l!k«¤¢À9ÉúvÁÀÍ« 0`©)ª°rÄ)ªñ ÃHäþÃ4Ð0°K´è¤r»B ¸¹©Â~¡)â|ÞJÉøÊý2Ï8æ!k"Í-P:Ü +²±%+QÓ"6!¶ëøç!¸8Ò¤A6É¡(¹éøàɲ¬»2û!C91¨³,\·´¡µÕ5lLȶC¤ä!È3« �6DTÔNhC!Bº.¼x@ïWcÂñ¼°"Ð9ÔÓ$Gzº¯²4üð#H«zã �»!Ø÷ apnG¨cUIkºk¾UÛêýBÁS40âÄ!¼ÿV«°Ã ²k!_ÿ`vµ\Ȫlõ%I;Sxâx8ÓÇð¾J~=¢³%Ó8-´-àA-²ëªYö+¶%ùZ'ðj©$ÒµMmÇÝ +¨4¡þµ@¤Ë£Ý;Ì&0D®R$(â<îRKeÚrÄö°#0ê7c Ò7³£±0" ¤*¡c6ò/¨îþê1c(æ9îCdÀ$¾»Ðé¬ëa Á³o¨ÒÀî|WÇr¯%ã|£zA¡¸º2³mze´êpi©ê¢-|7Ç÷47=lVÄì²l´¡Ã*iv»_ÛÀË_Ô×y]{Ùè0bâDͯ>÷aGzøP!Cêã3þÈÊÝsÆkÏ!±7Bkg5èyõ1ÐPöCsÛuéj@bIªézNÍJõUÙiÎñðd[@G Ýþf + F Åù7è aA§²âûª *Ä ®ÓZBÑÀ¨"Ô÷{àÏÚ4WfÑJ´+²¾æU( +aä7ðàÝTè%äÁg]±]M)7ÂxRNhm a7A "3âñæ=@îb?R*<G A#xfÁÌ˸ °O 1í8`dÑ[è±trHVBK.KHé �Ùׯõ"Ù¥@â(ÂpcA¤87fñ_©*7ò< P.A5e²òÆYVzfgfæ,§®Û£ì*Þ°Ö0q yÈ^+ikbsrnXΪ46¦X:M0Ç%áÍxÚ(A@sa6IõEÁE <é©¶ùÐ×H4êA ȸÚÇ +ê%/:HI ÊÉÄ+TÕ½fµÁ¼Ê +DPÅÃea¤3¸iï¢GÐgAS#k¼¥0IÞ«Ú¢%¨r+ tdã<¥ýÑ íú¸"ÿ:½!GÇöD«Íd£ðG Z(d¤æs©JT*¨±µ �§´««*tj*3U"¥TÊuäf\ó+ÉUM@.$dÉw/.ÇVºI[¦H97`Æêf@ÂNk*]M±4årëe¹u¼6W~+l3?Ð7¸+Åd¢.ZiPíbLÛq~¡¶ÛPÄC9 Æp3¬ê®.j`±³brâY]¿¦,¾RÊyRà üÙOHÃë{W[e_%ÍR¡%%e*1:GPëöW:'¤üË×x¨Ê,¿Jûaq¾6°â¾`K"|¦ + Ëhs.eÝ8OIÚ9ø2R¶±¢]Ö«ÿ§»¾OÖ×S$Þ%62Qy(ᨲYcÖËÉ0«ôS[BpU 2»&*Ý[¸nHuXª0pB0¼ûiÈ È¹g1l.T,§cÐqBmè2Q#5]ÜMIº'º©[Õ O5 A´úg t3*_½ùøfµ Õ(ÃWríòl2xÛ7pÁt7ÕÁP¾¶çz ©öÓ¸:Ûîf´`b&`ÀèÍ?E±«À1Æj¥UËE¬`*Q0[nÁ¹<sºA»Ð§· (pVm>' ¡!ÞöæÞQ{qÔýÓ»{ªâ¡ú´Uõ^§ûLÚÞý_ÿ/W¦o+ ÆJ3X+"o¬Á±ý{ýup#Ë×Î9Ï7 +ÜóÃxÛ:xf_©^¡½Æ5(÷0P I%k¬×\âÓ]%)ïx]E®,8Ö[ö<lx=ª&Bà°=íuëu|SÕñTUtÓ½{Ê×qxâ? ~ßô~ÁÍüWôS_ãþ¶Çá# Ü[&ÉîÅ®ôÁ»äïËÖϦ ÑÌ#'+[Àg¼YТBÊoà K oõ_À¡ßa¯pîÅÙäLV¥N#êx �õß1 +ö«oÅvb£<{òq3ÆQç£dÛîQÀD³³ÛqÔ\%ö ÀÎ +Gé©#ÌtP¯g ` +@ à +@@@àÿ¯ �GÆð0öèñ'Ú1Â8é¢iªÏ-BæÙîXIÈ+ÉÌLIÒÇââÙ".Æ^S°8ÿð â8i«N%ÚÍL¼ëØ©ËÞ»CðÓ �ÔKþ¯íØêÇþØ<I8?FêåÎWJ[-²í ]m¦Ü=ÀÊÚ<àÊêº]L®_ +ëbâ)Ü1âð è¢wÊvÌÖ:>Q#0N¤îÜ_¤ô8pFlÿ0>Në<8H~Ëe0§Í àå Sí2µ«¤Ñ ª]|Á>)Æ«ÎÊ[nÃÅlÕjÌÑ Ráq áì°OE*Aðæ¢ñpÍÐÃHe0¦+|Ðf{#.]lwÊY,Ö/0øÑߤ4¢#oNÚ ÁªÄTV¬IåyÃÄ<°ë@@L´1bUà`yò%-jOBª1LÐP *2¡§Øjç +\¤XFZà+x«nCFV`PÆÌx?Ñ(ÇåÓ$2>2 Óqà.µ°ªèd¾q*e âÎ Û±ÑË,ÐGëjÓàkK¦Õ¨¢û¦~ûíd|âpìZüí|-ªØM%o>þOC'p#1/ñ$¸bƼ+Æös+ÎÛräâcË.°.ãÝ®VÒ£©Å"Ò%àW@Ä#³ÃþHä,&Ý,p*Ï2-C]%®Ë<cþ~N5$HF»'Äò~ä1Í!Òé«úPêöÒËþ¸å}pêq&i-+å³{æ%ê½ 3 ÌÂ&O!U9Û$©$làÎ@èªé ¯' v æWRú3«Èt +îoQ¢O©.D¦íÖ A5Ï=ñ ÒôÃÆ3NxmÀê³ÚÕFûJûÐNØ#hèwIüç~ñîÕFO8ßÏãïæî"wó-bð%FéG3GmdüïIæzü¦üï1Ï"~§î'öøþq´O@§pÃLw2ªmÒK0'°.Hhx +endstream +endobj +537 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +539 0 obj +<< +/Length 3099 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5Î¥BT8Âá ¡'¦ctn1©I((a.æSq@Èn8ÓF#1AÊt'ÎÆ¢¬ìn(: +FeÈPi¿®Â)Rw=2ÛyË mbm~r2Á¨$ +F¤B¡AP`4nv²íÀÌl.nã¸i[®×öû¤Ì8³FÆ6]ì¦y7Î3NO+¯ì©qhçÈ ÎÇ!¡¸º£\.p ®O)ëÔè6 #s +ılhÒÉ@"a £H0¦4C(XR¸Áª,á">."Æxª* «0" Ì +BL{ý +Kf¦6ÍÂË*~à°j¯¹Kxæ9ÎΪºö"£ÆÇ Ò7°Nü¨ð©Hr ò¢³ûÐߣ³f" à¯%Ábæ @¨4¡¤×¶²²ª²ÄÆ +ôf¶ò3ÿ �5? +E@4´mç9M9éðÌ:Ãí<%kxæ¥-=(õökr*T5ËäúR1´q +ä} HU >JíØiCÚõ +O^7Í~²Ì7Cl9;Áî9 +9¬(ò8R·¸Ü:YD9Kªþï(ÄÜ*F"÷ Ü÷ +Ýc¨äÔac`òc(Ø2ØÃ(Ézác~J(í¡hÇ< @8#[!ñi+ŦØv-~é° ¦éÔ«)ÊËÄ3n0s-EñÅHFxÇs×E6ãµ¶ËF>UÚZ÷äiö9#jÞ2Ar§Ú6½>MþÇvÒ0Ì7ÃñÙ· @h VõЯ©±rkzo{îþ9kl°Z8³rã8óâß^vçcHÌ4Î9¾YR£xÍÝC¨Ì3p }ÒÓV¾Í4Áå̹OG"ÈõDU@Ì'i#j׿¹ü4}à*}QÁRzÔKìÚN/.ã£âm ßIjÉí¾ÐpûÖÁñÉϬ[ã~h, سB¨Vón¨ÍÎ.·ìôTkEíSDÜ +[PúärÚ=GáQ 7Öö×Rì|¹¸»p¥È(i4:¬fL¥Vk5ägr³bÃBI9/õôÔÜIwñgµÂáÒ¸2rÑ)ø(Õ¸ *HU(& x×:Ò ÌÈBëësqܬ ^«,'Plj+~P0nYq°7PÚñؾxÁå ¬¹T½Äg±e3ðêÏ2Uû'å2ͰظvmÍÉPK¦øà:FÎDsɤ²¦°fA( +E¾PÂÀ´:[<ç¥BPj¢e&ÕüÉé¸èv!±É0@vCp-D!È7¡'lî¤ÛSÁÎ*ÅÆ°Ãdiax,¹÷?W«¿ ,0î¡EASs¡¥XRÜÇ7©~g(s4[¤.m ¨I° ++'_z8Âyä!ô̶ÕNOH +=1©ºt&78BYÊ(ÎÄÚ^ÂühÀ¶mbÒ #( Ïa®½ªl §9P ã¨4IÃáê:>xør°£®QÄÒrOP>¨Jb-"¾Ï,9]êEpÄ%É YQ¤$©P@ +¼® ÒBUIªZKX?I¢Á³X'ØC!ÀÃÅ*ÈfªDɧ5 (ÕÓ3 *E¤5.fÙpf J¬ê¥) ²j{UÁA×;'lîÖIöéº"ôêËJ,Z4A<'Ãö[í$Spð9Z£¶BA +k ýó!P* 0@/M¦aMÊ f¦b`ÉDÙº¥s ÎMDêà£SºÍ¶pVqvëYR!BÕü¬cO£±À¥º¬ædZ£´võÚV«AB¯î!ö¦(xl;o1@PÉD¥Àf 3Ê6Epd@èqJu)(`¡Q°²åÒxòùE9æËÃ#øµ¡¢Ö\WÀ14ÈÉÖRkpÀ9À`D8V^KJëSØdæÉq²Î <X:óe6`Vàoqà;jFøß;îoµø¿Wð)é%6WÎ +.|°G(õâS`XÔCá#s¬ÚLªÎ|iÁoF»ÍlåAsÞ¨(ü§§4ÌA2SIFÈìò&ÅBÈ^³â!ª6<¨À%¤öÓì-,Ç¢ÊãclÐ0éhmP È;à]!µÖ.õþ·©!§\ +±»tªäæ6GÔzÙ®ZðµÉ×Ùxö«è +àwÙo.©jö´BÕSò)ðâ8µ ¨(oÒâz&·Âo°÷YRøuZ4Õ·ÓX_{ò/Ýýâ +fë§áÉ:tû +*Ê EB Tá+B L©NβØ{/´»ÍVN6¢ÉÌq×@¯rdÍLeÂ`aA§-&_c^È2Ñ¿C{ + �^lñ¾C8y,å/Wì¾>[~¯öoßÈÏ{ÁºÞx£[9õaæõÚkð¢ÂÉsTÇTz°ñ¼ê)¨Òù·Ù¥+¯dN<bVú+¹Í¿e'EhÊË."^è¢* +* Æ Ê4ç ìÐèÆZÊì®À ¦¯®J²6¶¤D¼¸¢2=|ÆÃnük>8Ê^¦)øJhºêÎ"êÒÆÀÛ¥8¼ j@P2¸*¸Jû°@$L;¦¥pN« « Þ«jº«êÂÊÆp®ýÝ`b=¬j9,T§ÊçФÉ*ô¨Ð6)þ*(*Â80§ë:Ó`o"´BiCø'fÏ¥´ì'jÀ à(¢´âùÂð)²p%ðò' e÷ÑBÿÂútñ ä¢ü^3&Âð@d~ܧcF·)Ü5CXC]E¥ËÀ"4=ÏäL@: ´#Ìbù#ðPHhÀ>ãò¼àéhøNàò6A$A¦ÔÂ%b"n> sCê¼kËQ¨f¬_qG ñAÄ B@¦ê«þ×£ð|ÂéÃ#p6£~"ËlF6¤ÜÄÄâN`ÒN¥øýL[_ÏÀÐCMÃäÇh®Uâ vq±¯àÙpÄâ²3nLÄXP I>1Ætåh±ªÑÜ_Ñà`i®b&d¦NÆi¦Zeðj/ò¨k +O:3B8î( @`°E"mNl¨ÊøS`çmÚá..trJ{fÈâ°wGtã~uVðfó$±(ØñÌ«(qiJ*PËf¦n xîøt � Þg~`O vò^x¬î àîYoxr;Î@Ff_êÈ +V|&ìsI`FöNÆJËf0(Eöe]pgô¨Î +ã, +æ +bÞ «Va &ÉåF_Òr¦Z¼R³¡rÒ úN4ò+`B +endstream +endobj +540 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +542 0 obj +<< +/Length 2765 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´c Æô1¸¸b4á³4 + +(RT5RÃU. +p©El0*eK ÖH]ÚQ`¼#°¹¸*sfÚe:NVaÈPi9é4ÇK&¨Pd2&3(´Æo7hOMqߣéEsFÌÐ ÖYL'3ǼΠ&ñÒlÐèõäiØLë5 +ÞYÖ¹^Á,Zܪ٠ÃÁ.#Jºî¼¨Kãä8.c: +C¤ê>¬#¦A¨\aË=ê[ P*³lë>ìHRpRó)¡¢6**6§À+°ZÈÓää¬ËCì¶¿+\*oôq,";A¹®|λ²"àP.0jüBð´ø®ì£äê£séÁ �R::zÁ ÌZÜâÆÌc c ä:¹ã«ºQSÔ¶%èò&Ô<¡áªH*ªF«äÈÌÀf-P)4ÐÜ9Åj2Õè²$ÆXÁCG°p¢â¢Lÿ«ªû䱬´Sï=ÈUmL°%ÀÒtéÊ.ÃE+KU#Í"ÿ5dÌË'áK23M3[p×;£¥|Ô¸-[èá °Þß²Î.CZ6 ã¸[4A Í®Mó©ÈØdø)ʵƦ¬ªü4ãF.96 7SôËëij>çlèH5·O¢Uç#ÌD:I<tJM©vK:mnKÈäÃyÆë̼Phòl'÷äÕ͸¡bª"°Â6£(YÙѹÍ2Ó;uÃL9Ó æ9ßcÉÇ{9íGÅ8CKyÌné- f!gpm*íùÂ)ºð#SÒê7S1'SÕ5Xdé%¥XöwÅk!×b£äߨdF^½Ge"EÉÁlhG¤I@ܽÒÕÞ±þÕ@]©¡ÂªÛ¸°+@p^«Ñ= !½w&UàfW Ê+ÙXF§¡÷ÖKãTàÝh<¨Ú¨S4400l!9¶Ü÷ ó6 óABQ4Ò¿xPAp81e¨·ÖdPª³ ¸âÙa\- áà ¡£¨A¡ �BéÀ¨'ç*¢18¼Xâ£|Vê7¸U Tf +aä7ðàÍDjKkr¬Â²§/EZ)&j| W áH"T!d.4PÆÃPP C¡ÉràåL«¡2pn% +a¡,¸Ù³ßé©H¤UT2é" +$g|87I4ØÒ"²~£¤QïZÅ l't "ìjp¡¥JùcãD¶]wÃÑâ4üC`À´>ÜWëtD¦¤:3Är à5¾ùÇ9eG4ö@Ë8³-Ããrlbc&Ü7cD Ha'ùÐf(ͧ ¢:7 +¥£¶T:töiPfÍ×ä8Vhxp æL:Áj$Èr籸ÓÜòm¬y6*wkx «Á°6QsÑ)¼G87óRtfrÔFèì»4ÚÌ (k©Ï7ìt:Û9hÅ©u6Yxn`yAR>.ªÕ\¨!°êØãqÐo¡±PðN}¡¦(ã£ÃNç:½Â«gR¡N¸æÀÙFnmµFP`¡rEî0(¥ã£ÉÏKx3O«z}»&«/$¾pÝn6d]!êdPUa¸&ã8g¢»éB8 kGÉíÀZ 84Ê÷ÃÒó<Ú\öðÄ>¸ÃÊ/³cLX)eìH/¹ÖìQÍò*Ïõ{¢îØÍ` &ÀÜÝcÀÁwsv6ÓdϽ¬RÖ¥Xc-é¨ ®[ìͳdýUúTJª²j<Zkͳ~&¸$ÜS w~pdá\F$vÑ øDl 0 BTá$À¨BI ÁÁ£Ênñý³Æ¦ÐXZKEjr¥A¿H +$´ 5ª."PÍúc¬|2=BsÁ¶·ÒÝdzXk4¡eÍÈòêÝvAs3gTïàÎáí1N)Ç_'Dð!hbªú¶epÑ6T%E`È Ñ§på¢Jâb¼ëbBþ¦P¶%&Ò UBóðg}Ål»× û\ýud ÒݲÊäëALtAC¸Cd!ºê6@¶« 4Ú5Ô:DöZ)f;gDÖÞ¾49Á¸çneëÚo<¨Ù6ëhy6¾ ÛV¯mz,jCsâ|WoÄ´Ó°¡#)^\S?c?ÒPHq·¢ÝP«åú&K ¹¢à4¦JͰxÁ �ÃÃKÍg©ºÕÚ ¡õqdNf·ZídØjX<§ö¯HM +kB8D 5 Î×JËuN®1¨6À`bÏö(ÃErñ/tRC»ÉØJÿ<M½o3J:'Mà{ü\eTäzséóäǵ[R'mÞMçÛ&°íØS©òyÓÀæ@Mþd03ÁJÁj+)¹Ö{èOM^0'M>ðÒ~NÉB çÐÞ×ÛYMMh¢N_¸`à;£d¶CRÍGÛG +Ðɬ| 㪠tp§Dëç g$rfúgxú¥BϰbH=-ä/ºy©ºzZWGªzàäý Ô|.¢2QÅ^î¶}Çáè?O¬xP6H*+Ü}/¸IyÏÂ0NÈÒæ �=/ÞLYÏìj§Þ°tHBH¤#¼} ²ô,ûäÀH¼z`3 î'2 +¢HØ Té0?&(êm(ð¨ô´¨ü0v.z~Æ^O k ï»èQÈ» h,¯èBýäh%ðDÃ&ªò9£`p¥*RíPf +Lð +@d½Ì$N#x® ÌhM6iCÑ0qF¾g1A±¢j±@Þ²ªûâïv}ª AÌó°B yPÀPî ïvJÉpBþg `¦ +¤Å,Øt¥à¶Cs ¡QpWp`ªÐQpêhj1Ùà +endstream +endobj +543 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +545 0 obj +<< +/Length 3624 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5'EÒ¡* BapÐPÄc. Äâtêf6(#xÌBT + Rf +!pÊwNC)ÌÆr4y¸SD£AHÒ8T2^bbÑêÄt@7ªWì61Âcf + +(RT5QÈÔêVY¤äH ·(0æW3îT2 ÁApSÐà°¸ Ð\6ê¡z˸c_Z'Æc©¸Ç{¾S¹Ï=Ñi0´ÊÀÒ×*s5ã9doê8.Ø4ÒuzÝ~ÎÊ,»¢ò:.¡ +c¢ð7ìó@ú4ªbØi.¿épd²º!@è7£8í£°Ò1¡hƾÁ Ð@9(Æ4ÃHÊ2Hݳñ8kÁ»Ðõ%Á¿¶, ǰ(3ë9É.×K¯òZØ@LÈà0¶£hËA �l2ÊAhfá¨r¡)áp½Ol0è3#$sDZøÝ ;¼øê:ß@;pY!£dI4UCÆ5ãà7I y·5$~6 ãæLA°Â6¬ì8(4¨Ó*ê̳-Îa4³ {ã)MQ*û¿6âÅI2³c1É®ðZÕkü)ªØ$Tàʶ7 Óxß\Ì¡¢ØØ(7]GRä»o¦Â9c¬ôïFà IÚê`j..SÓnã ;Ä8L×sÂ$WIK¼7£`ØÏlIa}&TèïYãd :X@1Åm>;èáÆdcTæ}©ê«®2Au +G#켸ʲ÷6ÎäËì"N]»³"_ajxnBÛô1¶Ýhi1&éôï<Ï{EJ7ÉÚg(o¤Â*jƹ÷óû +B(*Z'C £1WÓ¶K^ Ìc<:ºã¨äÎä5 á]GT³½bñÝ©ö(É¡ÁýáQߺõðÏW3×YO¾¬e`ÞÌ ç¶vø)Å_ööqð ¹÷mQñ ¢{ö5üfÀͳ7fôß¿eÊèN1ÈeG1ö§$0PÒð0@5S½Á2zP0 Òy3ÐQÍÁPüAJ¥4øT§P)ù@"Tu²©SÉ¡°°dCÑ|oî¡ÁÀfè\3ûBè£ÃÇï7o¬Å²ÐP`að^#30[©@]H±9¶çpä\aOMadBvOCDo +Ï0×lecQïñ.¿âNU> áÞ¬å _*o,,·ÆÅÙÄXQqjÄuôGs¦N,â4Æ·,¥ +NA!¢AºØAcq ?Öq ºÁ`ðJÅèrdÑÄøíi)] léÙÉ6ËÔ ¸üLH¨ +Ò .30ó¿¤4ÜÍ}«½È@¨ÂO +P'ÒvâIX+Å£B ª Þm Ï`/¥dP(pG^eJ)ìæÌ ¼ÂI Á&PD( ©ýR%ýX%ä!õG¸©6ÙÂh²%t4YïÔà¯33cËäÑMðB`Cu.®EÄnºS|®CrÂK: +i¥¼¬Í©¬ðÆÏZ# FáÍø³âê©Àt{Orx$¶æç±ÕÑQ ZÌi5¶;¦`Ñû¿ø7U£:ïØèlT:EDfJ¹Ü36¬"yMäºÞsb]É×*ÚT(2B`Ü%ªJÅelCa:{fÓÙÞ¡Ý'Â[Þa'âGT¾fS*g©å2ÈÊÈι¶¶¸ïSµ;)PdY*SêPS¬gJTÃ\é2Cu½aðÛ§L¥¢êÑ +%E(µ^¶Ý²wIfص©lY@KqN<¸Bäø;PáaBOó&"ÆGi"¼&efH@ÉKVEJ¬/[Ù²èò®¸Níi5OxÇÀyUa´7¼ôVdö}ßHVÀ0KH®>ÙVGæ] 5¡]KBÉÈÕ¦ÂV¢ã¡µ]Ð Â)˦(}?¨5íäyåêj1Åû@Uê\ߢ4NÑpo±à(s eJ`Wñ_ìkIµKU¤Ü¨sÆ8ϤÀg +Æ®ä±õg÷ÄFtÒË>¸3%ÿèR3t7C¼°ný® \ +²ÂÂl]ËXÅ2Øe¦µGuû5¬6YU1æ E +S~Ô©z<Sm¡¢ÊBðMV2~Jsì Ëh1È{EÿP(-q%: ;-Cúrþâ¡ëó|" BtÞ!)á£MnæeHëAÀúÂ4=PÀ5J S2 ÊwW07B*Ä#Vlë&ܳ;_ äí3^rYÃ}qãwÔh#2CNØ\©¬*W-Éñd*¡áS 9È'eä/~Sn"RvÑffð]²u@¢¡"^þq*<ÎÐ9ýñmÆ7Äçz*]3[]«Æé¬ÐZ®/>He¢.HeIá«UæC:\óSìvg:¡¨`ÂÏC¥yFêÉM÷ÓußüeðpÎõ%4 ³¿ÉÙ·7?âülYñð«Ìt(\rԢ˫ªñ +qÖläÚvVoÑP° �¶;¯KFT\2eIìÝ«ZÜ.}à ÈQÀïw]A·Öê°þf&ßiÚë6Dâàj. + Î)3K¦ +dÉîÒÄücFü¨¾)àjÐòÕî¸ÐîÞãO&ÖÃþ¡b|x,TfIå@üºz|Ø}o×ÃfÄ-d«D"¦ò´î¤6%xO .HiHg¤êJ<jjîH ÈóhDRÏ<ôò®#cSRýÿ +ã"Ñ*Öêì/&@g´"Ø"&"ÊmNóÆ|SåG¦YÎ Îý<Þ°eBÿÆîÐxbþd&0nùºÊPãäÿ +RÀvP �Ⱦí\Þªâéip¶îm¢Èþãç6¶iÚiÀDÀDå&Ìè¥dNZsBb``ëÐà&p¯¨dDó¯>±EVWÀA1fjØ®]mpg¬ ç ÍÐ+P°ÐÎâÑQ nsjÔm IàHQ®j8 é;±Wï`Ê%¢:Ê>¦ªä´ñRgÞäihØX7LÃ|;@ÓË/ç +8ÏÒíQ¶ñ»Cap¸ÄZ;He{L»úq|Nzí Árø®ÒßïòÅ*rठ&~ú©Úè+ +ûHTÓ-7$E,q9" + ªRXýª Nþ-Nþb6sìK°?øÎKÞΪ0àn2x Öælh`õ©îñ j)ØFdhXlsd±dÌöPâ8pðêÈÍeNè6¡¥|,Ò¸®Å%¤ð/´°äö° >OÀÊIc¼ØÄoJþO;(Eê¹&1qgü}¨"©¾éééÎ)ͼ3q+10wc¯eï©çK11¸íÐ3²2îP;+Æ3h¥HTðÏÂ÷2§rÄA[iS%3%&±LõÕ°^É$md-ÔýSª<OÁx¼ç,Zr\åkX®@VËØäèÚôjdD(QPp9PpÓÄ +3«£%4 Cª:âøIëÖéNàÎáNµ@k¶öÄCq,ª Ý!ÌÔ¥¥Ì+®ÌXJQµ5Îî¼ÛN Æìª&Uj¢N¿Gtïý +æöcF¢çHѱD·&¯&N&ÚOólú"4²¥å(Iã/Ièx �kl3)löMàþÓàðïî+°=9꽬æ¾ì£*6Ë0º3V#ÅÒ8C+Íj\¹ªeJÏPrÚBÎÚdà¬m®ëñ"%L,ÌñDøh ìmöñ|ÝrÿM +¤Þu#ÏÝ9oà¡RTð +¡ô÷,î£J9Aî§E¬Ø¦¨ ï%T²Þ¤m7tCPu+±Ä,òÂà® à¤u hßU Pº-qD.üäeJco¶FòT¶82J fBs¿0¬AV+1N²Z#2ôC;ê^Et o´"ÆÔs"Âcf£ÇÀxo @äIE\ È;ÄîË1±X jð_V§NNÓâ'ÈY~~$ö0S-Ct»O=ôD¥Á-.¶C¹Ñ£%HÙ%c)»ó"Ó6@ÀV©v@°û±T +, JöÄC¢B +endstream +endobj +546 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +548 0 obj +<< +/Length 4188 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* B¡AhÈ\1Pôú,5§'Cxèh2 ÆSÁÐ@l4ØÄ{¸@i³MÆ3yÔÜt2bÆa9&=äe:NFâàÈd6O31ÊdÌ§ÈÆe +h`TL[)UpP ¨h4ÞÌÆÌ&dÑu6f Æû1ÂuÍf÷EzÀ "å2I8L"9¤QÏ ¡*©Äf3iÅÃqÇ©¬%ã +UgÔ1BæúÒIaöhäa*Jpl$CX+!@¦Ä + è ;Kòí ¢2 À«Æò¢²p˰Æ: #xܯb /¢ ((: Î +öß.Axþ ÒÍ!!BÓ!4òJ¾üI¡@! Fý¿¨L8#©xoÄ@SÒõ¤¤"Cﬢä)?PÌ6¥A \¨T!Ìù§,ÈèÀØÉ4¸ctw'«ÐsD¢©ºPÕL/P`ö&sà`¾Qæ:0TT > +ÍFlS»¨è8«0à7kR7È[FiG´v0º80ã²åBÊÔ3,¿è"F§ÓÜÅM@ë[4MS`é7B°»÷9À´ñ=S*|²Dn¨ä7«\Ò8Mã¯-Ò¡l<¨SÄÔµje¸ö¦¯R_A F9"ø®'B )¢¶2Ä; JÚ Sú£È'ðj©$ñ(@¨4¹Ì¬§!p§r@g$LC7wýÏ-N²%êÁB#Á°hõR¹þõá£ì9£>9q(Ù*Ñ5¦ÿK`Vú»Ï±Ós,ÏD\W$áCZ¥Ó;Ï1÷mìôIEP@ñ,Z÷F,HÎ4,Ã{íF_£¦Rýå®iÄ=8A ÙÈ@HØplZk¡Äz2iRHÀëÖ¥9pÈr!«¢¾>´£½xa ñÂtTÐnY_#y¬Cû¹¶p¡Â§×v´ÐiÚhGuÖéAP!Þ{`[¦Òh/,ðÊÔR»s{me5§ÖÞh5Kå==7K*â êÕÁ%Tka¼6<* ºâBi ¡X,t¡Ê @ÂðdPQ7¥Xf¸Ó{ÙÎ:'×¾B_ 3`T7ÆIIs5oÍñn¯´û*CJP×PROð5L:´H2'ðB.Å ¨ßäWâ0ËÁKòV±xCh^o£T2Ñb6ÆðADs!¦r[«G'ÀÈA BéÛª®©Ö:ærSüHvÒ%3;ÊSß +&ì8+ !@PxO -EÄÜ<*ÌAÒf« ¡QST³A²ì¸ÁH;nFCÌÜl¥5³aÉ æ<É .r ¡4¦¡oÓbi¥PªsB Èè9Í È i¨MÙ¿8U(g Æ!C¥üï,ÖÌàA9¼ýAL8ƾ !å +ΤâÀdE<S¹v©¶Ê +`O9Ä.;yð +&@CS2Lú @i4× VoN £Fgí(ª +À'PÛ nTvNÔ@âåå%V :bCÌý¬<ÁrÓMaÔ<@iÔ¾WÁ¡Ü06$ÊGÚÑ¢2!ÿ3nxrÅÀF±Þakéé²e<qÇKQÓ0@b\Qèz£®Tãe¬B +Um&6úã«W`C¦¢÷hÛ¢tz mZK¡.HËjJÄIÑ9@PÉx·ê¡Ï*xÄ_] +£ [Ìã.WíØ>ëDÒkIPð7m-˧g¹omÝÜûê·ÑÞT1>ò KÃ0i¼á>PÖ)ÀáOÒm´M=ľϰâè]Ðp 8E¸ÚóùpPSdÊúµAh'Øc¿l´iOTäòSLßN +AºEÉþëF#40yx3PÅKXg^eØÌÜf/ t aÍ^[×dñ}ü=@ØÝJã¡ +hIÁc¶ë|Q5§Ø ²(° ¢ôbѪ7xl¥ØKÏy Z +1o/i¸/ÌR¨ï&·¡Ü·*«Ö«L +ÏV*ÕZ+ep®V?º÷ ÍËrþ¡3²t)ÀÔ\UãÆhÖ·5ãúÑ<PMRP\ÄiFzÈ^¦^Ñ|0å½ <.vCrÑ i3ãqÇÕ +½ÎêÅky5}ÓX¨8ETeÝo§uã>M~³p/k à|°Ò×8M¬ôį8 9ÓéÉdÐP³xv 8QËpçËWW!Üè%v²y/´ü@Ýâvg»e0ÅRË1¡ÎÕ{vËî<×%æÎKd+Ìew _0ñZ �QÚh Ë#íìÖJèaåx-YjÓªðCjªE +)^ð@AIpûE-ãÏeieºÝ;æÕ´ +'¿U©²Þ0w3vLÖ 0iÑ6}ÇqÔ,Â5âÈà8ôCJoÈ6ï0Üó·ÒÒÿÑç& ü;è°f `êaÅâx_Ǽk±Z#Ñø£ò¹Üyk¯0EÐ(]ÓMÉûÅ7TíuÚdqÔN.ú{KO>¾ÐÝ·Ù`¦Lp/?Uï<èß+Ôx @ ÌêËÖÊØ¥Go :`tÝCà dÑêBÈØÉ à¾c¤ + �ªùX'àÆ- ZQ¢Ê8ÍLÔE-ÅdW,) �p*ñîÝcµ¤GlÈ'Û ¾ à ¢ + '@ÖëB,-æÕL®l²Ël¾/È9 �#ÆK+þ´bÛïì/oð̺Â0°óÍV05°ýÄè)¦xÍ<ø +¾ã|ÊÇæêÃkNó*®b0¹°TýKAÔWÔ1ÄîÎÁ¯ãø¸àÌÅo «Dóg¶¼LA/òVú3p¨OûNBHë¶PþííöBòî0Ó Ïá Ï±×¯ÙØB#Àþ-&Ä`b¹í¸ÀÑ + «Èz#b4ØÌÞùÎ$ú'Kak¹Å*øm"%ÔnyÌÔX+§0oé¢Ö8 e F åbòUKv»¢úBêËæ"0äNËÀÎÊhà®Îý mûÒ£© O~{cÔóçQ«î¥\¦ +d2øÒQh":L¯a´Äå-"öªì/àØÅ(a)xn--tda.xn---pga5b'þJ£YþYìX8îÒTl¼3ïC|î2ÂÜðÄÑc¼Ý/"/ävÐÞsRÁ J\Õ@ÆG¤ÒDì3ð¡®îF$¥Ã2, 24Ig@Óëòï£Â"ô,ÑðÁrtZÆÇÍÒ¥ª^QJÞ¦rp°X×. +j-£3BîôÄ0ª<Nâ¡0mÞõ¦|ÐÁ²TÒó/f/4àÓ5"ù #4Äã13Ó&Ü÷4M=¯ # Ç.ï=¶EM4èÅ5oImóñ²ª¾Ìá6 ®¦u³ï0¥4¾Q¥8ß8m8æ +ÂõÜûS?S¤1¨-ÓÁóÙ;,À6 Gdª1 '3ÜáEk»>nCÎ=6s¢óo*Q$C³üÍÌB¹9¥â/âÜBxÒ´÷´l s9Qk@ à #ì"ê-l¼UbºÿÖÂÌ ê /Bw:rø/ý1Ã>V½CÂòÌZàJÍ +Ql5ªÀ0S(Fî{ÑÝ*ãÞ.Ê^.PåNXÁ`dÂÎjûTç �ÞùB¯OtvZÈÍ(Æq¤.DêU/¥Pê¥YDyRn´2ÔÔí+"Y|=B:Ý¥±0ÞOFûQ³Cë¬hÜ+µ~H ê_Hã½="È¥²FrPÚ óÃBÇ"óJWϽ¯ÊØQÙ±ÊqÊÛG3rÚÅÔìhãt �{2¬ªîF ½`Ü«Ã}3G<ÝE®KñfÃïBJÑðÓlÂ$3åZ×àz«ª¿Z¶@i¬l¥4¬í ^P@Þ ðW+"¯håRì.Âá3YTGrü´TV ¶NíU£7.*kæó5¿*2NÔÍÅ0ÂYI¦¼äx,)^ì-+¤|b1ñ4ÂÃ5F+ÖG<¢¹dÏVöP·sã/µ*élÖÖö©Zs(Si �|.RÁ³Ørò5:Ó±h"ýC³A$R¾,v /¶ ãÕ sdÎó(Kû7¯ÏàÒÖ/ÂC5t_EqÁ[OÐÏQµÂ{v°úÅÚ?¦ÂÐ×4"÷ çC¼Ð¸Ã3ê×5s ¦v?ïwÇa1§ö«?6N¯S>îÆºn@ä×»Ä÷uý}Ñ27ÙrMM÷.ą̈ËÙ<B¼4FßuÙÎ+$sG8+ÀÒÁxÑgý¦6' ÂYÄÒ0·Ùf8`È+ð B¬¡2¦Ê³Yolx!ì?woÉ(Lz¿ÕÍz¥4ÏÏ´4 ZÉ AuÂÃ{)/9Qw«ÊÛaæ b5<ÄgWÖdÇ®ÖV7·³yæ ©Pc[mÅWdvdÖ{fZ`wÑ×·Ã7®Nócw +~þã337~)LpÓq3_\B´FQWI!Ñl¢sȵ#ìå®Üæ%ÎurÃ=ìíSÐ SI%Æê`,×68#Oj×ÇkU)z5¢üËÕ,38¥QNtÁ¬JÀòb"û5wýj× uU¼ êé1K%æ¹F|·à) +endstream +endobj +549 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +552 0 obj +<< +/Length 3584 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)ã9ÜP2ÅÃ9Ý4f1§C©ÈÜsÐè°R56Wj1\Þ¯@ÔëÖm`0 &`¡APÊx:ΧBà ¸) Tb4#Kµ)r$·#ÉA'ÆqA¡Ñß/Úx%:a#ÖM2b.c-Íg3Ú MJ EÃ!Þ¢TÖ±²ì ( 9\î¦èYHªEL¡ Ê 3MÆ3¡¤ßä4Ä3©Æ2câ6hÛÂ)½SØ÷/Â4spÒ7n´©¢©ÁºÒ »,sºØ² Â1C(Èã³,Û:ÏÂëãÀJ¸sºî˶Dz,¬ªÌÛ!Cº.ÏÐô2C{Òõ#£Òý Ã|¬þ?Ð:¨[Üð<K°@;#`ê2ïÐØ7áhÞ9@;Îm³ó½ãè9 #pÏ6ÎãHÈöÀÍ«Ò:/Ò"ä@!Ã#¡i³(4 #8Ñ9N´ñ:Jóã÷?Ð4ô÷S£@é9«âÞ)tx¢pâ «+ +l-A`°1Á¤É§BÔ-¡ÞâRåF¨rþ¥¢È£l28Á n0É#]¸bsî2Ö Êk·µ²¡\!7ª««! �§ªE´£hf£ �¶D 2¾pój·HUin^å¼ Öp\`6#¼Â;ÆSk5c|Þ9eÙç#e:7g!b:F®oF·}ia0hJF·ºa ùÚv²ã ³ Æ(á@éìº&Ù´íiæÚ:mánâ: +Hp ôá¹8Fé³oQ_1pã(R¸8©»³Ê{· Ü8é¯b*H}ʤ + kg(+ð 0T M%g WZos^_(îJ×dö¿J`Ø@¦<Ë#æüô¶6Ác¬+°ð]pßÉ< L¶B ®'B AºÆ.ø79B@!@È1À¢` !b ¥¡U@ÊÙ«ägH;F¤MI¢$vA@B á<&>6vÞãp¯ ξ§Øû ~OÑû? �@* +a¥'ø¬B£³2yð>'ÈÑj/ô¾·Úûßó~¯Ü)¿Îþá$np +àêQPbq!+¨¢Â +Ñ!æ4íÑù^í| �1o¬ÎVNÅe ÍFËÀ1Ŷôø \Dm«,C¸LQALqyưN$8FÉòC¶(r¢± ÈÜ¥pfÑØQè ä÷ ÈúcÈ[àr ª �Vĵxg !4äb ç¬ööøf<æÝ°áÛá¶- ɹ%)¶ +ó6=iRÁi@Üë)5*¥×:Ç6QiEé8A#jhõsÊYROaeA´¹§imÔsIªc¿Ì|ò2*{GÉò 'Ý{RØ5â}8[áú¯-A*`æ(c=A¥ê¦e¡ûÌðè¡e ¦l +j¦¢ÂG¾o6|©¨3pðÌ#ïRÁE9§gÒÍðÒ +[¡(±²É;´;RÌÓo&ëwV$LÖ¢.}ºÜw: 0ÐIbûC +XJA¤6Ðé2%f°1¦ íQóæH!ôBå á IZ'9½" �HÙÉ"d«!Bl4Ñ=ÀQ#² Zt¥£Ò¬ùÙ �0N§ê³:ú{Ͻɥ*¡BÄæQ¯ºÛi=©mPF×.ãK$ô îOâij #6awÒà4(+VíÉ«å8(Îá°{iMËÅ<Bj²þ³EèÀRÈØ0Kα#÷Y"B'mv¾0hB¨z?]ÊhÔiE*Ô±=XÇrei÷P2é°cPõ¥D·Â´\ë[!Âf½Ð: +¬Ú+ X @[1Ì}6Vz¢ZkhN ØòÔ3¸p-Ü9yü?xñæ%ØÞTJ¬ao® �8ýNZÓªäDtjìÀûU.ëÎCWÚàen<ºM!Í)Â*ܰÙmùÌõxY¬ÕïIf 9XÜD¤*BsJÕËÐï+¦Qëh¯>ÍY L!æªñµÌ{³!K¢ôg-åð¥-$¨*V{½°gÊÀ;.YÝyYPyÙ$4·m±-.£6ä[_é£èBwʳèC¹Lé¥5Bö])ÓÄÇRWv·n鲤ô¦Òݨ^кùC 2x5æãF¥cmijÖu,Õ �Ç}pJkL H¥Áù¦BM'ÞiÎ95CÀ-!àüÔ ¿µuØbª ûj ·ÁnÇÂZ¤ÊM~q+×Úù\FÑDZ)ÛñkqaÅi¹AÆçÙ¶çv¤Q@ª%BÒʹ9¹/ÓÍJÌðØÊWbb¹¥ië>eÕ9¯^Óµ?_Ð¥E°L¡æWµî5Ü;¦À;<5ëM �?~ ü¬>ðpbÕzJ³b¿Ìz'¯S|ïé¼øqäÆ ébAÚ((§lºífsO %ûµ7â|fbcñëùlþ-0Ѷk./ö¶GÍöOî7n«ÝéÙ=¤ô¢¾ÅLüjèÇ$üÍÔ&ªÉÚöMJó¤Ü¶óã¦î-ô<î RI/ô¯Ïø?@ + +®L¾¯ø-,eO§ÃäÅ« /o.Vd1Â.£C¸ú/¦POª®°*`B|Omj@êZ÷`@ÀÅ\=ÎÆ ìJ �ãÞøPT-@+²¿e(ökjÛ£\/r6InPëê ë§Jx¥ ̦¨Bþ*ilt\êà6JäíÊÖ£¯ojϺn @üßß ý£(ýíy 6Ò¿¢ÉÐó ð6ÈåJ]d +¬Ðü/÷î¢êov檬p@P«K¢üä4à®òëð í«¼¶AªôTªG ç°Jø +NL¯ðÓ°Öùf:IØËOhô°èG¬¼m¦F® ¿ëÉ¥þ:¬£Âäêv@-ôå8äïÈLcÚ<+ ¸,JÀò àêÊrd¬Okîø6f'`jp'àÚß±ãö êçnz©¾ d¡BöàËnëmÛj._!$È?ØkñÞÆÒªÒê¡ �ܨ°S¤ìªÏ0:cªú¢ú¦ÙPxÝÖÍOêÀT ¨·éðàBbд*ͤK$¬ â©Ñ �ÀQÞV Zd8GI&,-¤ÖÐñªìq!(0Ù*pí£PfDö±k EÌiGp^ÈÆ^Çx*2:BD{"ÆxHÞ"ØD.ä¾/Zg¨þ"æ>!&[¯îÒ¼àh+Êõĸ?ä@q:³òøV ÆÌò¬8k´|É.Ñ3LÑbÖ¼Q(â°} ìòÑñ&Ù®Òl¼EÀÈ(Ìs¦GÐñ6- Ûr'ÌÞìÄLÏËm#nÏ9pq0nó-¶àc6%ÁÆMäâð äÔx® #®²ÀjôTcmCÞIcÆßl ë5>1¥>pe),*Ý#¾U jÌS <Têß4%óÒ<É$@:@kÙ°¼ÚSl?³pKäTÑCEÇ2ïìЦ;H$ïÐ[ïÖû.´1ÆHóΩô I£Ê<êÃå6ä½7T(º¬Ù9rÕ8kVµ³¹CÄ4¶E~Í öÓ·t«#O]C.aJò6T®¾DA`1è¾Ð$*S(¢î%ÈXg¢GlÜ. �Å×P^"©2b©2¢~:G~¢ÂÐ jFæàæa Êaä@b&&b³KS`@cÕ<YÂ-QѾÂãÃ(PF¯4*F)ÃL÷9YsÉ#äN£ÂÑV¦Â)³¬nÒÞbC0g¦!+ÖD| +rrFÇ\U}\¦|ôìGDL! ¨u¶uàÊv(dv¥ePÕSQWQDwQ³4C¨Ú,Õºx@`ï¤yhyu0»óN[U8#Õ<ó1TTEO£( + À¨hMÍ^*È0@¶Me Óàæ¥c^à +endstream +endobj +553 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +555 0 obj +<< +/Length 2702 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´c èBѸ¸b4áÂ4 + +¤qP@G2 +SÁÐl4ÍÅÁA C2à¤v)*©aÄ& ccôN'ǰñ¬o0IkHñRÁ9±Éæ(f0§3ÈÒp:MæáM#R°ðèJ( B$1ÈðØr33²`PÂ^0¬ØCAAÁn1Xj`(eÐ¥¾lÎ()ÚmvÛ}Ææ(¾ö0{®în8ïëTÞuv¾Úl'áHrèÜ1¶-@9#@::°Ø: +๠£(Ýc@Â90`Ê×mÇ Ãxå £à2cHÌ4£ @2£°Ò1¡hÆÙ¸(a)o.xn--\ k-pga8fsb09a3ao0oo7y +§*ÁÂò%еBïjäº>,æî1 óö¯ê¼ó<°ÂKHê9 Ð(ëFQ¤mGQä} HR$.ÎÒ44÷C°øAÄq,EC1MD¨û¿3;DÜ!Ho!Q?GòÐpSR *ÚëÖ<9C}MFD5!ÕÕ¬ãÆq¬oÃ0Ã#pÎ6:ô4:ºÖl`ëIº '·`Pf9!ªdñ« 2éÃ`Â3opú1ûB¿RÄØ Ññà 7kl¦hz®J¬ ¼Kÿ¹©xl¥¦àRs!£Qd ã0@ÙºÃzxF±sYC°ÝDÃ5Õvx¤Ù Þ3.¨ä!p®YÃy}pfW\%Qãml)Õ4îëê9(ËuA³¨Ð×Û( ¨&«tÎ*KHî2ÃÐÊx§ãßfæ¦1Îs7£ á¾ß#xæ4ë8úyQäÊ¢!ÅÃ%µi`Ò;m¹Ö©Zíð.«¡´µ6ù¿pìAæòõ0Â7G]ÃÌõ:´ÕÙú a +_ú诳l->[çY;hR7-´Çq î7h¦WVÇYÓh:vAÇkLO§ Ö@ÄîÏÈê}pÈ5Dº?E^QÑ?c e]ªã½ÓÍÂý×xQ$3Çå¤ÎÉRçá⢽øO|. wÁ)Xoå©¢×êúÍèYY²æ`Ònè¸pPas5fìå³×ä á>dDô£ÄoÝt1tEÝB?¤ë+0wP(°¤®ØI«Á_0"ÁA³ åÁ6ÖlZ 9ðÚ*% ²2PàÃC| éäT è:]Ñ0) Æðb vFãò^çL ðK(E +L£¦ [t{k)¢¬B ¹yEÁ¤=$D4¢ÕÃòUé:ÈDõÎZ -»¶Á ô +t&P (0L*S½É aða¡±HøÑÐt6/U¢ô(÷< rÆT¨¦î¸.+ N&°´Î +t®p© �©ÓÁv° ¦ÏæPäÄP IÀ¾HG B +Ph©sOr|£©_?©®á¢.εô%ìL Ë1jhZGÚ$Ã`ò7)d\P°o¡ù$viܧÊe{QBs2ÂøB!L"ÂÈ\:çZv° X{§Ô° ¡ áéjï]d"Ô?N »ÿMLALVO +P'ÖFÁ£$¤5U´JÑI§Ü±x33P;$ð¨<À¦´-ÿLt²*Å +Dã s©5!Ö3nn¨j@LãsNÕ;î`TæYèbzmTRybΣ}q¦OV=n»qUlæÕEÊÄ$ ªyª4öLÕRÁ_S]¡8' P T¡ÑÓ& Éõ§BS^ÕPÍ6¦ä$e¶¾¹N)m':5uµ7?x'4VúÄèþJ"âpÆàÞË[ìf¼ðúÅËÊäÐaïÊ4¢b èg1û¾ßWsÿ¾é Öhbh·¶þöÝtÙ|¥ ·Úü_«øáèø1¬r&¤½Ì.à1 ¤¤6â¼q æH¸Ç¢ükñf9rξbä¼;=ª¢ó´<¾Ì]&Hh'Yðwxñ#ië5eMÚR\ibÌ¥ôâÕ f;À³ÍëÜæt£Üö6pÉc"³¦õ#T ìÿ¦"a_H~"|$äÛjÖjyûèéRÃ=̨2daR20ßód¡$#16Ãú :4&VÉrNímÈo¹8ôà<TO²9A6ãO +¹mw80«6#ÒcEL às¡ 0æCf¦pX:'4ë,SÊÆOu?ª¥¥G¦Ê;cÙ ÝÒR²;ÜúÄÈ[gh^¨ø¬°eK^.6µ£sâw@ºgJwn jDPÙk~N1üå¶HUÑG]-Pú³¤¹ o 8muÅ8òTéÖÖenöäeìêìv¦¦å*ýâiý)&.ýÜëxä*½uc9]zËw +>3Ìð庸&âüM±bcé(«Hê¼a bhq1Ah4?¾çCîGã¯Í¾D;ï&BAéü2k+§DóÒ·éJËÓYòÂýB^=éì6³Í~:^ë_ ùBÅOk!T(z ¼QE%ØÃóm1£`@2`\2¢0\ÈúÞC6Û**ÛiäÛÀfË@HÊMÈLmþ8-Ýb.8b:!.C4ûKâ:@dÙ»ÍÕÐ!@b8Éä9c63£>4°85 �<ÂÃJ^oN:wOÝØÝPMB<*<%ç|ÚÌõPhá°lü"I"H¯:Ù §ð^?¦ +Þ¬ôèCBÇ:ÏNBà î¾MLåD àRebõ÷§t¢C+ ÆÈ!àl0 jl9ÂN"É C£ÙðÚ"1\ÐûC8pê*Ð= ÄÀàppF]ï7аݴ �äÜ \.ì/ômMq +QÀAñ/Èö½~ÉÊ)QÑý±.âò/bú/å)B +endstream +endobj +556 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +558 0 obj +<< +/Length 2660 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5'EÒ¡* ¡AÆ\4Ti´ñ ©%)õ¤Ì8*ã)Ý4f0§3ÈÒp:MæáM#HéPÐTZ%QÃõxî*§^°IìÖ! f6³¦ @d2&3(´Ç{:OA ÂsMÛäìejub 9°ÞrÜëµÑ Ó°â +§3)A}¢ÁC1pÐsP Ü ÂFùx îh2ìÌ# ÜÒn3îuZÏq Ñi4Ú¸¸bàRØÎpR* N²í²jdò¼ïLAhh#¢F©Áp¥;K +\ïBq0d«ÌÀP1 # Ú0 Â97 8ÜÛMK1£ î2½-@6¯c{:9 ãkpÙ9Íë~Ï´-K7C \ ½|£Ðn¢2ÁëR +r¨ùc{|9?ð/00H[¢Â»:F²¥®Ì' �£`:=þhxd&1 PP9(Æ4ÃK*?2»øÕíþ"@08Û7Ëy9Jc ß/C4Å=:Knj© ç;°ÊAtÊñÍ,D,@P'iè@$Îzý0YvÚ\ýER,Ö9[5´Â[¶ý¥@;´Àj +j§ÁHrmÜ7¸a1'a¸P2ã8n-UxîÙ¾´£ï*¿RÃæ>Áy\ÒÎÚ¸*CÞÕ5ð)S7Î`æÖ#°Â4Ä6G7Ø@ã]f÷èc(Â2Kb¤»EÑ«Ê÷d^TÇn)ÉG4Ð5¾òótá}ΡMúÀ¡6`«!ëi¦ �øfãøÀZãißçãúcJHä6½ò?³ö7K9 ß4û+SùÆùmsWWãKnù7råtKì»*pb¢÷ª¬¬*· +Rê9 Ãclî¶Û¢ªëÆ!²Þ\$!õ°]nçxàªpÍshé7µv³~Ü[ÿ ðë°5DÅJk9¯µ ÆXA8]ì²ÕX«²9Îu«pè®A �=1pÊût`´3¬ê9m*t]¹¯7¸ø+0ÄYlkÁ¹Ü!&§{ÌD§uÀ¯´nbw `Në µý¶ôç þ{¦¼7¨Î¸RQ0ÙÁ¨8¤ÒìUêÅYÂElè(v.Ía;hªÚòAiùàI2ªU̱@)Æ-õ*g^qWD½0`r{N967¾b# Ê);SXN/aG»¨æS$³à!2YáÉèuK!,r)CIL½PÌ[A£G +4¹½¹ZÝ¥{á"òÈÆRDKQMaH#$gcs&L()_@ :Ä= Ër\Ï¥;¯½nqìkMË¥¿ÐÐÇC ;` öPÊ-5g±6:Çû¡ÂÖ5DTÅWô^ÀQF裤 nù8 A7y-BÁÀ¨)!/ÀSÁwóªLR VëÆÈ0²gNÐMå£S7¤®|SÄÎB µ:f¥}{¾Ö~{ÍcúÐ!ê*å-0?á!^ÐÈà» ä:À¦àe@@ílEy6´ÉưQ²¹×ToJèÅzð!×àÇbçH©SÚbIùÌmlÕVÕVt.ÅáGÖak°o}7ój£Á+p$ÍÃ=!úÂWjôÖÄ£eݸ>g°²ì@a .ËÑc«,H hÁ°:¬ÓÍTõÃÜ|!4cõÀ7½»êU¬·2àÖRíÓ ðKÐlC! rkþÝ`ÓvÚÀ#^§(s,Aì5 «Û¹]è½òzgÕè»w6q«°§¼øâSÖ{\: ¤+ßÜJ¯C£ +×/ �àû³vÌíÝrØNðÞ;ËÃÕ òöûÅs\_lú(îþ[uÊT²Í'hãXg/©ðsAIG¹¤NC¿² +ÈVQ!Ý +6QÎÏ%àì 0QÄ +C£¢Jf©>Ä×£oÌ«pê,èêèk°JÀ4fmâæ{qE&'ÏÆþäÞ,Há¼Ð`zPºJ3ØdìHÁ AC= ä©KöÎÖYÕQ¼ÆÙøM ¡|*P°eýÔ 0î¬ÍSbuscÖ +f3Ä;X©¥-Ľm 'ÀnÔë7¿7ØSe úN9ÉBÂÔ +¬Ü¥ý ÍY48RCÀe qÔeíPâéåÌ[½±â²´_Â¥¡Q·5i=VcÉÎȱ"Í·ÉÕ:åaé®ç×Sc,aeh³ãfÅÍ«G<ÊÁÈÚ/g±ýt~9:JÌpF-ÿ +ËìÿA/JE¢%JÒ¼BªwH3oZÚtå#Óz°mìJ½/7Þõ¹DzÞLég'bí} áf~e\©&k³<;§E³ýÖ¢Þ³ã_qA%2$5ûÂÁå[ áV²#¬ÂV^¡vKìÞnO©èª/Û¯ÑÙ?Ù©·Z@á§Èl2MGñBþû©cy-è +s0ùEX©£µó+)èy¶mnY¾ÛzÎ~iþõÇüÈ2zÏzÐo~ШFÐë-¾ºï¨ìjìúÃí¯%ÇÒùÍ8}fÔÓë´¼®àÉæ¨´´Â0+|¸ï£2 êð#4~ðÂþñ @¬¯ÿÇÅBæItãpKêîi+nì®ôyMþªâ8«I¤ é¨É°CÒKlôïéb·r*ê¥vUPBå¬èxF°ß p +z`&4c&æèÇ. ð¦JhJl!X[§Ò§¢,JªÇÎ[ wÊ! dJ§6«,d-ê¶« æ«éXçp{0ñâåÉo¢hë&Í1±*ö¯ Яë5âQ + +¤ +endstream +endobj +559 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +561 0 obj +<< +/Length 3434 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éP!0¸h(cG¢q:|¾=A dqÚ!*IC +´x©4NFCÄryOC)ÌÆr4y¸SE£ÁHÒHT2_bbÐr<7ªØ,BÛ Àa ´Y3\ÞÒ("LfÊv4Ì¢Óôèe< Ì@a7mÌw³±@f×M§lu9L¹ ˹2'sI¸ÏÂØqw&äûK§Ôêõ¦í~Ä\ ¿Ñ©j}/ +ÅÃ|$¨DÚs)ШìÍÊ.àRSÖÂ) j?\§°¬òrmÃÐ!@Ä@Êô°!hh Á°`¨Øb0°«(²é\ÐÊp9S¡@ß"'í3^9 ®«|á·Ã4 ÃÚß ã3nîÉ/TÖ5ÎÈNÛ4Mä¢×<â8ÒÞ·+xdJøc7¶pÈ67Ótá$Hál9MóôÓ5ûÆòcÐÀ=ok +¦Åaph$¤vñÐ ÇAL÷£a j¥RÀTnËtÓ*¦I´~'çE$TB +TcÆ\*3,êèÜݯËZ8 +AF¡Tz¯![T²¡ Z³Øá �@1-{m,ÖíôË5Ìï$ÆßÊr¬®:£ ß|½M©t ä&Väp^!DÕ Ò´O ]°^a¢ nSIøÄ:Ã0Ê9×:)ʤĪª@¬+A �ßl!@¤þ£Ü9×8ì1lJ*Ä1¨îtÅ»$üØâLµ=®¦¨"õKöþ¿í/À°>8TjlÂvun³ tgCIûc¨ÆÕc6QCKd9ism8èÚ1eañ=^µ88øïÏ1ßgÚ.\õàóÕF0Tv¦¸«4íaây.ßÊû&êdo°BÁcc3÷QTPÜ7ÜÝTÆÆ»Üq¾¬~@Pêc`ê2:®¼â' +¢`ìI¨Â½¯°ãhé7y[ϱa'eR!ø÷X©ü?È DïwBOýw½Â~²V[ð7. ç' +áË«®1Aü\ti<¦VÙksÅ)3VfU7!ìä$XÍ@[å¡¡ÐhÑÐ AÈ7& ì£0j¥L5V²GqòÅ*¡c-q}°¥P²ø[bd.Ed*rÚWüV Ö[A¬@.A"8ZÒÃ1oÈ,µ¥J12'ö´ Aº,m~+/õCt[l±³©ViQalfàвFªeOBÀà¦å²ÚÏò\;!4þâ9êA¢´¤º§1 �À¨#×%$`fÅFXlD¡b2±®Q¶{@S/<83ÔbKf)¬Hb®#[¬Pý ß\m¡ÒVBñ, HÙ©å(X +6Z ?Tó³Ý¹&Ì#aÌIHcLÓþkäb¶Kt.Åà½,ÙÁ g^' ÕãZ°5FwÔ)âL&ÄÙSnvÖa½7çá¾öqÎIË9§<Ò#¨uÅ<uÞÀyÉçM÷Ȳ ÌϺÇR®VçK ´¡©%²¶ÛÔ �MÊ#¨½(ÖKãC×X5 â¸~]RsNNÎuC<+ÏcRÁqÀI½fpĹ aªªEþ¾êÀ<¥~âSºO`éÅBUf¢&"PçeEU¶`ÌbFYL±U:§áS¿)ÊISÀÆø«È5V.ZÐnOÁMPV*A#Ñb¡#6×e7[4lãñ¼ 0Ùðêl¢^§U`ØÚz¿NÓsÙÃB'!IæAMOÒà=pr·Ö% +JàC+Íáÿ¹1èÊZ1³hñí*ÐîQvGâK¿Í>Ü©ÆÕédæ¥ÅF2Q\÷ Oíu4PpD«4-²²YiðÜpSÂ`ÙL¶£~² ü6Ð]ÄA¨8ãárD,)PyÂzPGP䨤ãwlîZ À§è|_ÃKLÐ@Á³«ÍZ/ñCI±"Ë8Z/³ÇgpnY&k,ÃpÑ ¢xÔËÍ'Ë.~sb:øí#Ô|9î#È&ÓJÌf2[MÞ*M'¶Éd Z\§Ib©&1 qEË[CÚFA¦.A¢Pä +cØa!NËe³6vнOjp¡vZLDSîÂZ å×5 ¥)RñV£yf¹Ú[ç9h¡Çòã6göBjnMíõv@ÆÇF# Kõ«Äºx ¶áx:Óæ}ÏÐÆ¢@BË¡L$ @hÚáH §HNá@)ùø*pPÜJÑ5~ ÐA¹ìT& �h çOðÆxaq¶Mq®^¦lÇWç>³f c45sÛ óhLA!¾-Æ6§ÛÛO©ùqÔWEèá¤ô°ïÓzQë]TòvMw½Y¶tfÙØ½7ôÕ:BlR"î^`¥:¿ ÄÜd¾Ø ÁX ©dmô-Bÿ¬JÅÜ6íhÉ'½øæGеºñ2²ö»!»³óCñ:'LÛ~1ToÉÜ'¤ü9 �{ 1áRpúzÔpX×xöe4óa2m!ò°Åʤ¶ áÂ|ï¡ôÕ_4쪧h&¼(dd°gp2ÉØXîNå/ÆûF¸/ZÆêì'àà#¤²§27N æ àØ #øÍ¤pò¿`Ê ¤9;ï¤#^<kö7dià à¤àå²Á`¨Ò¢ÿ Z]`gÎ~è+?o`îOd¹(Bæx¹ÄpÚ (F ¯k°û +¸ü¼æJïÏ P®)¦¸£<'£ús'´@à æ +s&ª@Z4ÐVHD: ØCD l+:_ �/âÐtåêæNhæÐ|l¦`F)~2°G²®O^ÚNâ|°kö°b@b÷ÄCàØr`ÐpqY@ÇµÆø`î¿Mº8F´Kj´è6Dd<ïNO0´·åÖ¸OqÆ+ ÄÄjOh#I©XñceÎEI15 ^Ó±RY »Ç 5EøLzNÏéñ|¾J®Q>.àÊ}äsR'Àóp²Poµì Jâñ<ö, =n°¦ÖÌË#0ö°ú9`Èê+0,w FbÏ"sîrÜN ¹!¦EBÈEb=2 PÚcDQP0Kdü'ãZ\§4K@Ð ñrj$æE¢C +²SkÐ ÀómÎ -$®b£ D~4p(L¦Vrf46GVM§Lt ( Æ#EXd¯ ,X=åÖ>Ï ¬¢pgTc(ÒFźü/ Ù¦8Wb ñÐX6õÈ qpù² س äâ Dâm*çÏËÓ÷2¨,pKDâÀÂ|D±7Q#æ`aåÛ È 1A!qE ¯m)¼º1"D0H$_ïù$ÊFq°Ñ éÐcâ8#0÷N ,Ç=C/pÞJÐ}R(7Óu7~1 ¤É×òã3òânÐ1g´2Íþ2¢5³¤Y¤Ç:±*Re%032J?S¶ð2U;¢¼#²êÒK¡;z»Ï+2ø»ëʼk´K×pë=SH²+öîQx^c} q>ãsf§!Ó ÒÊÐò΢! ñCHCÞERæxòdw³I%7Ipï3°5sX²3\r²3â³{rf¶g³µ$ó¹?ç;ôòý&ü¥ô¡=Ò ÞQrÌÿ¢Ú*2G.Ô.tùBÒW9,$1Ô7=¨æ¢zb8aÓ.{ cjp¤¯&s#rTVêÇJÖÿ²kOn4 Ä&Hb¤97qt~)"9ClÿH4ÔYêTaMc}5ÅÎÜ +endstream +endobj +562 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +564 0 obj +<< +/Length 4218 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6Î¥BT # C Ñ<d7£qpÄi1*%£ bf + Q drzÐ*O_ÎFÉLèr4åÁApSf´AHÔ]¸kUb»¨´a.æRÑΣ5ÏÇSqèi7aä@d½ÎvZkã`±Èàq¬Öó9»ß¤:b-8ÊP(d.«ïîJþ_;ЧäèeÙÌÂ¥@s¿àLþCÌd2&3(´Ç©ïá'Æò¬°Â6«#Ä÷,Kj´·j1á°j :k³0ì/3å1NbÜ \*ª +JêË«Kª¬² +ö6®øä -ô2CxY,«<¶7@R®l£¨/+Úúô°L# (íËÇ,ÊÅ©²ì»mJÓµ!;g(<´·DA rKîG1Ê#b(H#0°ÅÎh m¤»8dÎ;IôkÇ2xÙ#æ:Ç#Øî'a¨P2Ô©õÔÁ ʦA@èö§relóW5«ÐÀ0UtäÕ@ß86Ál SÄNÅ4{,ÌEÊÜ ÒÀħµBx6îÕ#uE ý`0l+#C´H.KЧ¸KHÓ5 èï£èÙØ5b1£e²]ûÕ7`ÊÁ<¯åz?Öktdð Ö3Çå]×)èàk<B³1(CCs~K0sè®»«aelÒѰÃGVB9ápYö£Ç¡ �ÎÃxÊ7´©|Êû<`R1ñ44X<Ø7d¶o£Nª{j8DýqPxÇCïàTD\Âì;¡Àc`Ä0cXA5a H@9G#¨ä7S]µo Èxîö×¶-UoÇYK k±RiJWk æ8£Ò3 #-D"rÄ:0ßð°! �6 ã](>PpìEl½(,PNãÉ+`ZûL^I{¤¬¾ÌKEI.x`f¤Í +®jMQ &ölAâ[* ÕÉ(ðPâþ2è4³0ËÂCPðd·plÓÀy-HJ×ÁD*mÌÂ÷E /7èDÀ9Ô®3ô,gVÂPHm¹"ÀäÎr!% ¸S¯T©¯¯a³¤GØÏ}O´26xO«U®ÐÓ.PÎÈre@ 1uÍ Ùc1\+ä- ð*°n +DTî:CÇ<sJp½HÆ}b³2àÝÀÓ0Ó$n*JH®Ñx0ñ-(F cá$e^jJ]µ0f}¡µ"ÒiãÇÁð*àÞæ» Ô9½§^û^"â=IMy8¯ ¼¿I ̸bäâkTå¯éê¼ë¤r¹Kµ52Û* \Îl]pÒ+½HÒGU)dS½ýEhXABrÚ.O©?cI) *u|Í, åA:YUÓe+ ^+¢ÆC8h|5 Z zôNä£Ç®Gé ÃVø&áÉfÅ1E³²G$ fgaè*ùÀâÏã)]í0Ë5Ë;eî"*ÍKºó¤/L¬Eé1§ÁÑ/©9oåZÀEÒÁì)Ͱñ|ShÌiÐ)§ +P|D²hf¬ì¸O©ý@¨5?ëFQpúeXºâ-%?lªuOªF¶Ö*ÞUª±4êè(z(¢D¶«¦¼ìxwd1I¹$={¤Ò.¢4$ÞªS_Ìã!Ë«MsB0ÆÄk aûU_1ÒÒø+-`å 0°Ñ¦îX Z; wT'k+K¯i-±Á;¤ï&z<Óµ÷¯ÀZÖ¥B×DàÝùÂdHgÞù<ïQë=Ì|ô>Çà2¦@ë ;l´0 ʵÌÐÛ9 ȧztry Ø8XÙ8ëv"ÔLNT&о(X +àÇÀõ×é®Êw:WrÆj§$ë¡X$¨³£oInTOnôÀTª¾¥óDÀ,Û£Dd·r®Â¸(st£<2e¬'Á*¸»^ÁAC¡2àÍ\Ðb +µváÏH¯â- H©#ÕRät%¦Ù6·+«cÂqcè ow²x¹Ó S.PO§'eSáú)ãF×vzéܰ¤B-q&ªmÓÄQÆIF¹ $væÀri æ åáÿªR¯ëò¥®ZÚ9¬3MÁÐÚ]¯"¹ZïÓªu»t©*rhÄXÃtÀå,TÇ¡Ð'¾ÙgH\òÓTí£¶Þ®þÔÞ.dÿL¾ÆÔPãm^½!Ð Ò]À»/^â§HéFÌ#÷Ít$s]Xýy`Ú<ÅǤ³³ìïê§©Ì>1Ú1TI®¥P9Së÷ÍÙn ë» �ó/£AS{ï@Ð åû/gí-ÇO¿ÝBdȤnúVn²f¯^dãY k=@E\^mÝ}°½ ×àÂØØ6öçãRq,Võ§7Ùj/cëý¢xÄ<jÖÁh=Þ±nÄsß +ºä3+h©Ý¡¥<¯ãr&Ø".ù¢:®DBDüÈ �ä®xçήûIüõïþ!/ÀQmXµìêLïpÔ¬÷r%r""{`è¥LǪˮW f pnbÇqÇâ#Ll+-Ê ý° Ü ààâ æoo cÐzèâqc ¸ +dj>Ô|0Ú v ` lcm=-Jù/ºÃ\ÙÔ°ýIëÀ< Æ0a-{ +ü2p¦Ø2"ªOpF+,&à¼iüÕa+<°P¸çp¼4ç±ïì9¢6#®lZÊØ.|ÀÈrzgXcÚ] �G\pü/cL¤x\ÎojH]#lâ©1í*êlÔ±D¡ç6ëÜ. ÃÈëB´j|VJ.dqd{& ÚKÈÈÔ¦å¢ÀÇæ>£îºãõ¦hÂ6Ë �9°<)®4tfÜÄ ¸1Ø> ÀHv/lg!çÊèâ«ÃHñâPü¿¸m±Ë²Ðc)´Õìî#¬1ô' cúâBÈÈÉ,Ê]øÇQÿ(e6p©fbͬÞÎ ¨ Fb%t®©Òº +f24SFO/ï £l +TúÌtÃCæØC¾TPbW +A%tá/ò|2ÈåÉ,ÊH*;&CÚläl<Ã)âÉ%2ÆOøhÒ.#ÂB²Tò°÷°ÿ"I/`'F°RÎáìLä lHºb\ g²:ÆÑâ,ÜTºàãÇ3=qÈ¡)£Í'æÏ³}f+81´ÉÆSçR5ÇÏèqjSc ¦` )ÖZÌ@dâNJæm-ÇJ¾| �g«#ÅDS§Ì Ã\|jó9s°VCºH¤hO²%LVŨ·fÆTA93?¥4bÃT»¯L0âÍX%ÑòîѵlðÜkðç`G# Rïv#Tå%Fã �$DFD³_:ÍÀÂÅd|ôx»4;"Bª¡Îòr±^?Qch5(4G:7jðh7.E*¢Ï5äz=3ÚcÍ$3§bÉBàÜ5§ÌÉ44Äli>Í7RÐf2ÄWT¤¸¬ê ä²tӯɡ¬Kôv\¨ÔG@Û(,éÎê9¬¨:îÍR!Pá!´ìãêËjÒý($å5?å>Raf xf/,5FZÃåP¬nÖNôm*tFdJGRTtªN nñÌJI®w!qÝL5XÀr/LÑZ±jrq +° é©*V£àhTIÚ +,£ ã]ôµD´¹fmTÁñn-ÑrLÕ½ÖÑh#BGD" C'%äEíªqrôV´(©éÈÒò¨k^ ÏSNI* Â0#fÊàØ4õ(,ä4f|¨êÀÌHÜæiÞl¦Ê®T LE[³<4å3Ñd2qÓÔè8©Êzö;ôô|6¢uãg#UkdccZ?w³1Ìn +}²V|4$5mØvÃ^vÉÖdöU^ñÝ+÷µâ!L$d/ X4¦±ðkM°R¬V6bÞ§ÏlÀÝo¦cnl%+¤\¦l*ÉP7©liË,ü>uâ>Ù#åÑ/Ötø +ìþ5ë¬=vifÉlÓoG0zÐ) u55«°hUµEó\po +l<´Ù% Ê=ÊtìÀX¦'iµÈ¬4åNãõh5><ÆÎ?Gf4ÅÕ_íÊñY3#ÁtÉ|D9 dj®=H[å¼'æ§ÂEÐdeD<T1ëy¤GuàQoõð|$jUãe·ç*v³þå-_nÀvUAå"7l¾J·V 1kaT]n¸¥´Ðt( *,£"v§k Ë"DI/g°UQ!>>¡®&85³Ö,RËÇ».E¢ûqÇMGP'â©L ©ot+ð~Öírôçq$ùp¤ù¨!-úv6XñTñÏ ÝÆ2G*Þf.>ô/F¯KW«NH8ÈØÌ¥Ðûñ#¯ +øÞÕÈ`i¯øvéC9Ñ<-b6 .¤úù3bß°9ð<OAFFüñt"à°þ ¾oæoìÿFݹX-Ù] ùÀ@~lYl/8ä8¢B +endstream +endobj +565 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +567 0 obj +<< +/Length 1654 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KÆcàQO)à b7CySD£°0PÔd.Gã1¸ºýSÄÛ äe PHI C É|z¡ #ÃX~n0¿+µû<T§6pÆÕ + +gq¼às4îô\´3LD¢O2·0µ*ô¸`0ÌìEqÐAo¸Üî¥ÁA C2à¤v)*²Ù^oCåç4U=,l趨Cª°3{bÙ+úÒr"£Æ9 #è4ãs¼ Î3ê9¬û£ü«$®°`6 P* (@ø>H(¶)LÒ? »Oäº=CÛ8±ÊÊ{À¢nÙ'ã0ê7p¼2(ä6»º9Ë@1£î)6 CxÄ!s46ËG;6ÒT}ë(=K³ã$ÏQØh©)D @éøà0CÚ2Ë£@à̱Ð0à Ù};6ÍôÌga@È2ÃHÆ2¨n L(j©0cj34z^ìPID¦p̺<;èæ2 ¸ïN3>Óôü*/»øÃ?Áþ5n°hÅE²£h¶áÚ)SHÜá/D?¹qÓè\¤aá-Z«¶83ê1Öcç+ e;o ÓÌ>`é?¬*IJ&Ë3¾¸HoÎñ´=IË÷G]Ø\!D,KCtf§xé}L@;#`ë£ë¨Ë0ÞúN¸ì|Å/Lµ �ìmGPr_?XQ[3)§9{Ã"<>íÉH Z#a»HÅ£uåØú³hÚViÚ¥TxÖË£mÕ2üJs3÷Îá¼Ö3· "ÚªÚ"ÍKù[qN »³ ÐÈÊu +×u·3It*|dvÀu/áêÜ}64ß2Ôõ±æ¹ +áx®_øídÉ )|+x¨\#3cÁML$ è2E=°,:)CÅ¢\¨©:ÒHU +±Iäªk\cã,ðµ"` +) ¡Xhfa(`¥V&Hl (^C7~^KÙDæÄ´bS1Æ@#(_ +DuåíÐ@ !èªma¸7FðßCÊ"/ö/λ¶EÁÐ< X sÉè* E +Á4'È@ÖùU©È0r²BÔ|*j|9ÅpmBÔ2å,BØCgEBpA ¡.öì·5°H P¡<,`á @Úãðc +Éxà!l¥Â@,Òú`L rUåDBÙ/L°å3CtÏ/3F],8ô&¤Á¥J¦[Dâ ¼èU:f´Ä3m/U¥g +ä"p!<EP¶Ì`C(lÎùIð7ì¡He·B¤2!= +-*Ñhôo=*Qõq$ÕlÆ +ù/NùâÍhÛ;´SÛLãðr `3@ÑJeÉ9¥Ävʸi¤QêwKêlÆ +a¨Z«9N» ªÁÒ? Íõ¢â\ÑÚ[Uêe"È@3æoM*ίÏYyXéå>l(µx *ýn©UÂÊÐ}sÅÖJ±ëu +<Y%K,!e|0ÞÔ©El°b@¨Ð³ $ô/h¢ãhÛ}ÐA"d\§¾ <>DèË£}AC + B-ú°VA!ÃàÃ,=j<0(0¨®¤c×rï^ øÃÍã»·|ðê ÷DÀIJ2PràHÉ1mÄF±$ +endstream +endobj +568 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +571 0 obj +<< +/Length 3260 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)õ¤Ì8Fbáî3 +Säi8 &óp¦E¤p¨d:»QáÆõxèoS¯X,CÆË Q kìi1HfÄi6oWBà ¸)Ïh08:T63ê%MU\0ÂY²cQÌ.mg¦ãêø 1MÃé.æã¡ä 2k¶Ã%Üíîóþ_iÈÚ4Ìãtò½Cxà÷7c\ ½òдl"´ ʲԥ¬¢FËMk^س¬ûBâ4«Z^!njNÖ6£Â6¿s¡ dÁºb©ÁpÂEIpc ºá@Òò¼ìàݳxÌó=T øË³LäfÀÂ.*® ÃI0( ãé¸H4I ©íDRÕ³l*Hò&tôôÍ#¤- ÒëJaÀ`åCtËCÏÙ´\LNNc00Ã%'.!P§1ð¼çÍU?7R¨$nEÒÃ3QÁÉ"#8' +¢`ó=ÏüöØZä¢XAÑô2a6Öc£Ö3ÁRÚ'fáÀgSÚ,³Y,ÕmC/)Ñû«FÚ60Ù¶»r:7,ÞphªehNÑûB\Õh~Ôéö {¹ÁkoßÉ«1]ZÃK\ºOï âÜ7X³Ë?I2«ç, νã@ÃÀ3ìÃ{Æ7ð IoTéÀ!â' Â"iØnäìÎJòç#fvô½Ùüò/ zäEs^£ø:0m?¶°;ÞÛÐT2ÁÌ �ªfYÕ8[hº4Øå´TôkÃn\ðeO~ C)aÄêLpÍa £Ü!@·Ð ÂhÂ<½ �å=ÉÜô: ¤thQÒu_QAn +ÈWÜüó[a î!Ú²ý '£ áòøòôn¦4oçð½ÆO<<µå|Oø ê9 ÙÆtZJ¡´1ÏâÝYhõè+'¿ÕÐq¡¥])æè)ì.åÑü&@ =éùºVÔ°d˽¯¦ýÁsÞh¥É¤4 ÔQâÒ1mY<µ· Øó¹åj¸öBYɸ6Á°ÎBSòÛÊwªYî7Úøâ5ó>´«Cë&eY©Ò®S¹ø@"b· +²}æQøBvÃièO0Ð ]Ë!å°¢ûyŵØsâÑ:>K¢¼_ñ0(ÔýUèL ý?ÈXÎ=Ãè ν¤xß!zÜhÊ¡ÆÒO +%¨°råÌ<küJVêÃk§ !¶ÁøC,Û(c<¬xáé=j +( ¨ +¡Øhá|" (R'`à¬9¤ÿÑblûÀÔÏÁõ 'Ü÷ÐÈòwå" eüN÷4üf<ô +¡@&P±>Þlþ3PöjP6-A[ë¡'ÚËhµò&pØõ^¹¢mä2EÉ8¼LvÉ´òAdlgàÔ+Yd)HöÂÿjâk@ÂZ`Cyñ©$93Pç"*CTd=i0$ýF²%T¹£ÍcÖ<¡è÷ùzp9W@ÜåL'Ä¥ªð& & Â`U +$'ÃrwbÌ|ÿÓTþPF1Z~<A±ÜÄÙètfO½·Y +çj d«â³S+Ãã|²RK'Ù#bÉåûJ'^ìB¶_@É¡,Ød ¨lÖ¶Û^¢e¤vÌï?ÖÔ4zaò·`¥lÕí&pÚÁF>ÝC¡2ÎwWC9î<ªèõH2^s7d1ü»¦ÖxÊg Øauxïµ<¦ö5½«õSTd áÑF£¸ ýFµ¾·öcçP)u&#tÒ1V/A¨àAäöV¼ç1ó¡Í7®lj¶¬ºvâÉKS¦±°B"×ÕB®ï @hOÌËÙ&÷]®ÂÔZÁÔî¿´¯ +r6º·YQ3`D=Ú*Kii<ãA´îÝT¥ò¢ÞXvà 2ÐÅ`dwÞCr2ÙÂYB9¹rú^*àÍD\Ȥ36hÍA6<Ü¿5ð_ëT9g@éÜlL ´þÒáLéºøÁ[S'6äÇ]Fu-ÿW" �ÿ±¨ �åÆR;íÎkÍ}¯1ÜbJhAï¡T3<¡ÃÎ$ÞüÿGs0P²y'9LüÐØòcôÿj}é.öAðË.¢|a¼0=¹àÊzʳGk Þ'Òôòè[aãVÞ(l«vÑÅ>ÕÑf¼Ü:¥#1lFÀ¿9>.l£3p°@gU¶<Ä×J@íËË_Ü×d9Sn³p]®#3uµ#Wðï tSn¢õ§ íû+.NOÜʤÃËXÙiqÞ!äðpzÚâ3¥\ /(e`Ø:í®òø8h:æÀñÐÒåÙeÀ×ûk=¸e÷>@µ #ܾ+¸O0ñ©}t¾ÕèËC¹åÅ/gS gÎ6éÖãÌ&±G¥ +ìjÀdåf¶åªPI+rÍRåvjþGp + ίf£Î ´n#ð+ Öh®ËOÊ«FTMm®.®-jÙÇ4ñ*s¦ä 2ãÎò®S®Ùí&Â'vêÇ`wð3nsÀä +àÒ{CJ*í!ÐÔD¾î0)dxgâ¶[ç ÒÌÏ ß@hTϰùíE-~ù*¾¦,zåêâ¤x!àl$ÚpÊvïC2 ¦ÿôÿ4° FàlÚÈLð Ð"©ùû +Åh$ä¦,çC9Ôd%i»Cß8<ëØ ÕÄË`y-BC°^PÙ¯Ú ÛÝL +18`Ð~QÐ.°'tùN®)Ϭ)p Ð |%ÈÞ}Ñv'аÀH{*@*ðúvÊñc òtóðTw°æ3êÉÊÉÀÌÖ Î0PÊ~/âbIäi ÊWK^½¦J?îæêÀP$\7Pgt.§<èr É4CD3ÒbÃØ½4¬Ä^íHÜ$ü> ÎWM檷$Úº +*;&l&þO äÄoÒSÆÔ;cú`Ø àÆ jÝ#ô Ö3^S²T@äúrj¼®*¿FÎò ~.t/ÔæbffjÁ&z{E¶Fç,)² PvÕ �?RÊÓF4I²ÔmÊ¥¶]%ÒS"Ü.3yQ*..$ªÄÀr¨á r"r (.JÒÎÉ%3«ô-¤ ø`$Ò¥4®p±sP²æóV@ É5ÒQ,Ób§i%¥°£: + �ü¦Nç\ïLê +ùcGѸH»)C©NÄÛoÉî ò +©%Î7;cºÊi¬È ¾ï³ÓÀµË`ð*Ù+ê£ÇÃën½>À}Sïo( ï,ï2EêÈê· ÔFN¯R?ÏBÇÔrèùÏöäÖ91nºÊ°9â¼5OrtOx÷Ñø\VÔ@5 ÌG0Z £úXRªâ ` +endstream +endobj +572 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +574 0 obj +<< +/Length 3255 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´b6 AhÜ\1LIpÀaK§$B| A(JE9ààq ìa6L¢èr4NÆ[©@lºó0æu8 ç#¡É4°¼n8Ðe¿]qàe9¡yñM +¬«#lb8¥×R Ìu7Îy¸@c707S¥Îë9âñ ¤¨j¤0ª\7`0 FûIFëÁ^¡7¤ó©Ðáíëv ¤jT/¼2H&^Y®ô@0°¡9#8ÜË3Ì0CÂ<¿ãs.¾¨ä7oapf¨Jr®Ü!mÐZó«é9«ØÜ:£PÎ(Ü¿¹a >nÚû n(OãvKÖö½ã¤¤Èê`ü?H¤J¦ÅW.¢pª& `A·îâÈr¬¶í¬FÜ«±KÕ´15³á_ÆmÈÁPCJÓLÃ4æ:ÀØ7ôöÓ@Æ0Íñàß" +SûÒC}6Ê¿á ã²kë GPÉk&½Çc3&6Ó#â´3QPTRz½1AD GÍCAY ÆÀìiÊîÓ¹$6ä'E $÷hh¡eB2½Ü/¬´¼!ª='Dò ÔÞ£- F´qmÂÚ;°ØpÉD/KÍ(JQX"Âhº®»³{;×ÀhßrûwZ.ä:¸Pµs8âjª#o%<Úʳ+X-©ä@§Ëè»/Òø¿07Át ÑNXÍI1Ì$ÊQW p9 j$jÚaøM~Ùù@QÍq³U#hÒ61*9MN#jQÔy@àò˼ªÉ%7X '"p©zñH$:§2ò·nLrÿB«êêÉGl«.éÎ!Àa³³o<[`7£!pÈØK`UÑnOcÜøcÏ@K<ónAÝgXà 0ñ°ÏY4l5Útºû¥ô°;/ ä »L¢añ'?gOMï¿FÿFéФB+,Á<)@¤BHT1m5¬Si6iÙ9PÎøSgí§f\NsH/%í +4ÓsA®;.õrÒ^Þzy_èv¯#4æñø �0aÈ¡ABä)Çâ ¶ÖnýªÑbìe´}È +_uáCãüÊ#.±bCÄWL,¡Û²nXAdð*P¨KKBÂ4rïÌq§a¤3#îgÑj9l`ÒËÚ8ÁÕk¶VB y4àa#pæjelƼØÅSlü4s]d¢;ú áJ.é"0Z~06Í~Y Tá +ÒÐè6+ Ùצ&ÜaûF.²VKÉ®i"1%%êPÊ9J)uè880Ç)ÓÑh `O!hæFæ¬øöm ¹&<ßP7)0Âeç EîsÏÙ<ôôÔ)ÛÏ 2`ÈUQnÍ*CB),ÄnT6ÍãcÃÑV'´½ÓYHqg@ V +ÊÎUèòU +`0þƳäS\öfÈ.§ ºàÀV-Ph'âÚÈ( +M0ÀÂyÀêbDJ|*FIxq¢Zò¬¦l Øs54Ü"¹RÇO hnãæ#Äï*ÃZ~^rèeθîNN¨97äfÑà <¤ýÔDy$O (Sï´Íö¢Ñ£º2¡NàÑOÃĨ(ô7¥CÛC)§BHì3·½!RE\ii_¤3Z!ÓÄÞÕy±ÉiöÅ@gKÓ½$ZÑÙÀÃgH HVܶBl«ÐEdXÇ`c9²î]"~ÑÌÐr é©Þ^ç4l£-2æ +nÝCKuÌAÃ0pÀSvÎóh~èùnÑêFLÆÛ#6_Cu %ôˬ)$ mëÇ1ANȰ6¼ vÄëýCp,aºù% ï×nI$pä\}dʹ#²ÄâÒ ËÎ_¬ú´ý5©«rba;`¸·Gz'ÓcLs%F"¢Üíe\¬å6RèÙi}H/ªÞkÐfMÄEûâʳÁáIu®ÆxSfÐZðÖ~.Цӱ¨1RÚ²4âê +u,q¤1¡búõ£[!0PØbµF£GjÄ43[åÉÅÊÌ9ÖÉ¢§ i 1-éù"¬¶£O§R]¬²,7hÂZÊÓÔ/EÔä@ÔvÚ佸)%í¾A'âJøÜmìyYªfkÄܲݿF¸<cààÔ³0A×Ç +gCÈ. +Êdðí0cXò~C9ü®LsÂ'$/ºâ¯1¸¤uÊK[ÖcÃaÌßÍ¥¾¬EZ°gÌÅ´heÑøC^a<+ âûËZf{¯Íµ%&Ô[Ø|ÂÂ}°m®ð¸2+Û=ÊÌD< ôlzTÛKÒ7k¨ÆÓ2sõ+¯8uSf³öX½7¬7lêèís²ÂW»Gmt¶âÒeëkm¥¼"ø½W£A£$¶º½3IiN¡~:áCCþ²µ\NÎ%ßp¦KÂx1á"ßâ)]âÕc1eÇç¨4Éò>Ò÷'"dTVGHÀ7}Óuu¢+/üÅûQí»áÀȯEðx©ødðüf@CÀ\ìÖ0ÌãR5lçOúD¼åBûíäû«7¨¶Íh¼õÂmÌà`ÃzÀèCÀ°2¾Fäâü +`0&éäÔ Þ¢à ÄAÀä/Lö Èýï¦!"H¤:-Â0¤n&+0ââ28MRô àÈëÀPKÂfo¬,ý$8(cÀ!ú ÌY¢;/ÈI/ͯÐýB'^þÎä,"s "®þÏð +`òð à@5ï äϪååm(w Z #/ Ð¥ +ÊÂà À ¦l°^ + öâüÐà!/Ú̸øPîÊôPø%´[ :ðñ +KPú.úâ<+>]P+ÊúZ*þóÌrßÌ12éìÚ_¬zú^Úªn4%f§R¸ {p¸BW#V¹\NÖ"|õ¼? +®êö¬ÈãÒ©m¶ ïä²ìª³¯ÐzV$R «Tðé~$D@vI`tæN±â'%¶¥8^RG¦ª/ àñ¥¬ ÊÓàܸ¤zð&þRg.îv,åÑÿs!¯2?$È£n=2-e:S m Jíëé1VèJ¹Ã2¢%ÇfÎË6ÊÌþhçÖ©ïfØñ©ðè¬ì' ÐzàÉ(MbE¨×-T/qð´ÀZ-Fe}R ,0d%0Àæ z .KE +óB|LAt@D (²äÆ@fâ$ë!é-R (R«|ad9ɯ&¬*ëxJÉ hr%£emÕ*Åî?*öÌàrrºÓÒ¿ .Ñ\¡.p0¿Ñ,¨óx\6ÃpDÎg02ë#¸´FËdg$«RµkRV`ÜÊè§®5R5®]81!>,ÚKÂmåÒæhß&+þë²LPMl Zoæõ@çU% 0CÀpñÂ~oZ7¦T¸¬? nÁ3¾o-¤Cë>í·.ð&´Ì»@Ô`¨ ·Ã`2rMC j8oböW¾nP´B +endstream +endobj +575 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +577 0 obj +<< +/Length 2264 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6'EÒ¡* BapÐPÄc. Äâtêf6(#xÌBTÊn(Fáî3 +FS¡Ôän9hh)G +C«ÑL$Z=XõJýÆ0`&`¡A8Þn2 %CUIÀS* +GA«Öh#aÈÈ]@KtR¦Nqiµ-à r9ÎWÞzÿKÁEêB6+ Æâá&Á²ÈÙ²lÆk9Ðr)´ý&§äÔV+B°Ö7"ØØªqÝÆæ9 «Ì·@Ê9£pÆ2¸+<§)Læ¹nhnç½£\ºï É @º¸HX£Àè"£°Ó£xÈ2ÄñLW¨È:(0Ã$ÅA �92C6ί¯$¤n\¸«)él¬o:Ç ¨´ лØê£@jÞ(K 0T O"Ñ=2Hµ/XjhâG3¾nÔØ ÁòýcÈÜ7Ó¯3 B+Ð! å:DâDJ Çr½Ð =%iRªkKºÐú6ËB`êTaD`9cÒ8K/;U«õä¢U/Z1!¨iL½tã ¾¬ ¨4¡¾Â¬® ¨"WÔâ2Nv\PàuuÞS)º áô¾¬á � CxÅ·uðSÀp.©ÁF^0Ø9îm_é.*4¸[°áÙÈÅ;ø=n¤¤øèZÇ £&ÇAº2¸Â9ê1ÁoþF6ÚݬCXÞ¥ã&_ø*#`¯,ºë°¯ïöHÇ»8غi±;[#é´¦0«¤Uyv`4H0Ë ¡¦ý!Z%B0îÁ5$üàè7ôØ`tq¼e £.:±p@:å&Dáw¹Ø=ý«;Ò¢}?~vÉsË~²£puz×a¦©Ëëÿ7¿ASØ>fô¹Jºp á¥Bf )9½á^R¨ ¾å@¡,yo*ÚÑ áq.eÔ»ªÇ"ÁVh`ò²uñ2ÌÙ¬çHfm½¸6æÏÉp¨IPÇÞÇkä« " __Q-nÁ ;g2Kãh'"@A �°n +n'Á8XÆËàz@ὺ¦àQZ\WÍ%¢%|Û#ó$mÍÁCäÏ$+Ffú%±ÄäÁåØA#Ý)àÅÚD0Ȥ\.Ñz0F(ÈÀ`cl`=\4ÐLÕ +»CËÞ@n¡½7çáÉø ÅáIÌ jÕ{¯ ´øéÜ3. -)«ªÕÀĵ¯4iáö[àÕpÖV@Ì͸ÌèB¡AB³LÄ2@¤0-ü #äº:E0pÄÑXSÊDÖ)LûceL²Uà¤×4Ñ5àl8aá@ÀPC;«iÉä'ÄüÁ ¥*ÙB?TJJ6\0e¥8,âr©¢KùDU +áTªTª¹ì»§ÉÊ^FZ7Úkè|W1a@¡L(zÆk!e,ɹ.fü»4¸*¹SgM%-%`.ƹW<ªñE Ϫ¶sªé- °7äBàb|÷rEy¨¾fäg¦)ZXH¦û¢©4lj/È´O¤Üt¸3 Û,o¡Ð8[0@ð4Û2ö^poVùé37«Zªñ¦QàpÂ\»`q ÇY°áÊ×´2¿¹ä¥Ý¥·Î°J'fíh4s¡"¤ðômÃÄxÏå?§kCÑlÉê3VnõÙÔ·{u]zç/HÉ6êb/ÔØV ùoEÒUÂiVW*^h`/c©Xa0¤ .)¸q¤\=îõÁÜÂV;P#ië-¡è¦Á±rÖWL¦$öãS �RWEùq´Æøãcuîî@0Q-cæ]ðè·eé$n+̲J'{$ÁÑÔ¹½¶hoÛ!³5¡+4æ,Áji"ÙJKÑw/R!Èì%JÌ+Á±tÉZG¼Fp%qÀÕ& d¦LNlS©¼ã2ÎÏçh¡l9JVÊgaÒâbÙðx`8^9ÕùY¬ãÚºèJÏÄv÷Uë"ds$:WñäcrïGFèüéL»¸OFÖÆU g@â÷®~BL(ðO +DìzCpyf?wÍmÐeAçp=¾fpT¨NÜílÎY÷`_!@( ¼¤n=ÀåÀ3öôÙÃ:M pÚ¯ãHdá ß c73Ãé/ +¡Owñn0NÈÒ¸ã¬ý_ÆZAy×ë±3¹h +áÒ qB OÁ$ 0§&^²U·HÛ-ÁÛaÍÏ ¾V_:OÁÀ£§u¤B(MÞAd¾àn yÜ¡´áo à ]»½×á¶ �S°eyÁçâd¹ÜÐe@m t=sóÖêÂÃaª¸biÉ.¬9D@C(rHEeÍ"ôMDJaÓ`16M +endstream +endobj +578 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +580 0 obj +<< +/Length 2263 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* BapÐPÆIÓQ¸qIaã*IRL +KÆ¢¤Ð-°I¸*sÏ)Ó ùæc0¢%E£!pÒ<7ÅØ:Äf ´¡#,Ì*@¨äjM1#ÕN<5ãã Ò»_´á¦sEÀ\1¹cäÜo8Í';å7$ÏC¢( -Ç#ÃaÆ*¥^Z¬iE´Pi7kÅè¸($bAÆ,x<Fï%äËðùf"I¸à:(b¨)è0à; ãHÈB|Á¢àR " ÔͳªZÐ,Nj¢Ó*mJH:ºì,<²¶°dÜmØ2®ãÒ8HÞ78«òäD@S9Î[ºl¬»!eA@¨4¡; ¢3@¥!¬¤¥"j³«ÌCRû2)¨j´h\ÕºH6ðrèÜ1È2¼§ä7ÐyEA@Â1qàæx@0 ËHÓ!CÑ#pÂ6 # ò7ï/LnÄ6K£ ÑG£8Ðâ !rä¼¾³sa£ +¹¢¤ö´|Øörô=9ÙhØn1óLÖQ£ä0£(è2Om¬ë$ê²Øb,^µ¶såÀ ©Íu. 4`Ð0Ã%qNSØCQ4ÈZ1ÈwXð:XÞ dL6T¬XshßKS,M«»ímL<è*¨êq,êÒFnðás]UØøÔOÒ3 4<²íODHCv3cNXênpnÔd®O6?¯øè)#Ò÷xeÖZªh;xqà)þwsÝ7]ÚáȨ [ylMêÛßÔªí»;N ã59ceA[ãÖü Á o:^Vôǵßq¸7C£²É, q;ë3ãY,Jîânyîí§ãn7]eÚ°epð^mrA\YnI*®Aµz¶§ >pÔ³äî¹ûÇ˽åô¸¢Ù¬(h··i\y¯ÌwÏò 3|+í®D,ÌI fµîð[bä]ϱä:ìÃ! o@ zÀX HeX%Ç@Æ=ËO/ñáAT³àËdÐm:ÁäÑÎÒý'ï¬'P¿T/is%Ó)nt`º"p "$4H¤ÅCPÕAª/6ðrb8 ).¨#wq%DtHéS\q*u¨Ûh1|§z@8 ÁùD(nSQk)ï âà Spe<éÆ=D7^UH;d«ñ,A'Ëq?ij¤Exî¦Õ s-G ¡M P xR +ÍÇ?&8þKoé|S½-¢È A²^B9䢯i®Y´ØF¬dpptÉu¡76ãßZ¢Tvf0ú¨Qðv]r!Eã?lb4訩¥#]!Mm6±¼ÂÇ$Úxr/:=ÈúscúP*f$Û§ò¾dbK(ª¶¨`ç#ÔÔ-À×^CÁ¢Í(ñ²¤ÞbDfY>¼d¡báOΩvUµqì N÷»R«3ðØxw<.ÊB~z¢`éùÃgV_ðññ/ÒrÂ_JlÂbÐh}s®v Äf¸ ʾ·PYñ\>NÍZÐâã +aÿjÿ`B×! +l BxÕÁÉ»Kv.«dí[<L81À(xA áp¦۰m< ¦±¸Ø �6Òv%Ûn3·n@á¸G +líLÜâýt%Ö»h#ÐfÈY'Ò7[Ʀìeæ¶åâÜ«¤ Hm¼0Ë Ò +·iT9º +ÍZçrì ÷Ù:ú$19¨ Ãj\á^¼±6ÀÕ°£Õ¨-¡¹^%ØT:<u´åxü¤¨+z5]P« §´9ɲ£©W �èxÖ]´Ôl'b¥B)<ÀÁà)X0Ä0(S!6¸Â|^Øá [%àB©2ÉPeÌÉ)"tKfa0#*ý ¾57øà*F_©9ɨ¢Â¬òþ`fÎ,ªâô¨tÊ!NÎ(VÀà¶¢UA 2$å«8 Èc`áËCvj; a9 °ÏN¹ !"àê´Vé¾2rBHNµÏÐ ´zaYv$¸®}¤2Çtn¢y +¸(Ú®ÍéHnø¾ûjQûºòáàAµ°6.A/ÆåÒü?îÝß´x(r¬]sñp~ ÈD +ód"fÒ©öFh¡°2>LïÎÃ[Û¾isåv +Ú=dªy7¯»" �Ë^i Ï?¤w¨m¤^LÈ]usiÖºà3ê=L+¡.ÊëyGMéý«x qÙ¤2ûðôûÅ´Àh¼Û¸o®}ßzßAâhì3êü*Jg¼q®Ú6t ¡A¢UZ=ã}õ×:mð5 9y^áúwXPà®Ç®_{¹{/4c¨s¬ÈºÜô +endstream +endobj +581 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +583 0 obj +<< +/Length 3504 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6N¥BT8Âá ¡hÄe Ѹ¸b5ÂÈAhÂ\0 &`©Á¤Üt! Èm* 硤ÞnhtZ`Ø\3êcpÜoa«Ã +ÅDB)XOÊ^Jª1Ga¥Äé¸Q¨æµ-ÆXlb1Ð@E<S±¤Æe&ÌRà W'sqX $x$Â(ÐD9NÆSPÊe³ÒyÔèpïu2¡K'´Û|^O1@Þr:9¸ Ì]kèÆãv'$lx:îË.ÊHÜð>!®öä7ÃHØõ8bx¤á7-ظ³Lâ +#) °¤¢qB\©kðp©Èê¬ ++ªPp(ØdÅ`6cÆè®°Ü½(ë>¥!Ê)+¢Èòü +¼¤G-@`ÀA@¨4¡ç ÑBDèU+ò¾Õ2 dô6ðëxCó\¥7©j¨`4êcÿ<Giz²¦éðR 0ê7kªï5)Á@ä2h2a �Ì4®£Ø4C 47VÃpÌ÷µô!c@ÓRÒÔÅ~£]X²ø£h¤Ñ!Ã1QXg2&Ë"Ü4×CxÏNA@Ä7`P9£á]£ @1)èó~§Ö¥dèºc^7ï +ã?WÖ#¢³º¤êYHÍM8[&+z^ÏxéRàV³;7DÀPfÁWD ÓgZ7 Ôÿ@¾§8)x]Ûl%»oÇqCMH@uÃ0å@Ê<5mpÂ6¶DÏ4ÐQY*Js ++);®Îé â + ©l#ø mI¢Æ¯0,uÊS8à0ZÝA ,YRñ+nSÅ 8ÉÓrv/IqXO¬á U÷xYP*¡ pï4lÇ·@züÕͨVZÂ&Ŷ5=ä[=B+ h)̬¿»Ó!Ïðã©çlzg:²üÙçåª÷¥D|ÕÃëÀ7/Õr./(:afô ¹.ÁPd¨]¯+Àð 2+Äd»þcYÝ;çyó(6Z}50P9å=Ƹ÷kÀÏ¥¾3¤¡t% ÐÛPNm1ù¹àÞÇØ3øuO9¶BX3íï)· +`40дR¬·I'5aÍPU2Ãëa4Fý½Bß¾ÌѼʷW*í^¬ò̰ÃÅYì{ò°aÜ"½Hbd5h)CÇ ìʰ3lÒ +³éàÒt?ÐuÂ=Ö+ËP9E`éz ßd,>-XS!Ê|]F¡ê´Ç&¡´8v@¶%b°õ;ÇQnðųÀ¤K@-®d̵äÀÓ\umÏ18@¬¥k5Òh0²zÖ`l°6e}äáfîĽ²¹FRãè8°6(ôjÏqðÎXâ/ÞL1%Æc´ØÐÇa»/= j_Á¡¦w0¡óļ`$\B¹?)0¬fiu0ØøJ;Ò«ÅnêA w¢<ýo´äC6÷G{'Ë.]ÂÆH&Ø´AIĹ¡L5ÕÚÊgj# +¼â¬WaêÁ_IµëUtjuñc)¸Þ±+ªÀ£ìvk2I§t°#`ÌÑT£BBY°Jø.U£ù\?óÜÔUzÏ.CaN ¹(ÕEIù5XqS&nª¹+ªè³Ðª8áÝ40û[+ÊÁÉ'+eJ§ØPr7kéÉ>C#)RÁçBÈ TVJTY $ÐN +¡0&sva¹\W8Ûok¼q·2ih¯ Ø©C³E%ªôzjÓõ^ ¸%0®©¨°µ!I)I¹7òÅa®ÕetV5Æîrl#HÔ¯7)SÊ¢Ka03ÐXz6¯íg¹Ó^M£¨Î;)RùèûY©±fç¥?ÖyEd:« ++ �A¹Æ)×»Cpu ¡Ä)×RÌg¸Á8PÒ§×Ö`uLz¥Æ3¨ ò(ò¦£)çPbôCLµpæß¦Cè&º?)9'¥ `63xsúûîd/Í¿wöÿÚV1[j}Ò ÝH ï¤W-4¬0Øë]n]x86a �|$ྨFÁ)Mä Ó5ÌX(0kL!oÒ_PéðÚ]; +äãõ $çJ¤ê|/¨+ëͪ,ÈûÂÜñ4"ÍÁË80è vl5ËH:]d©]°u\uJY£ËçªsÂSJ*c*ÒÏø¥â*PZ6%{HCÖªÇöÛÍXÊÈyJi4쪥¨4Ð +}3w4ÖÄj +Î ;u¸6T×2ÙÔáçÛNvâÏjp.¿Çç´¤d9Z±+Ù]ê8Ý^´-e¤Xä;&òxFÁ°2gnRϵ ÆòM2îÎÁ"i^»¥ïN &U.ÖM3p675ÔC¤*Ïõl[*Ô÷RMÂHF »\ÙÍí¯b÷<À[bl` xM +RoXW0äÑfÚl^ÞS&ÃC¦Í{Å0]ûÁ««]+w¯$ì·¥Þï·ÑCÎß®îájô¿w7ìxgØTn.cb!@áJZÅcî¼)&uà»r")°ýÛbO¾Wj²;f`KÚNþÚOhð$æ 2môïRõo8ñ<³È¸& ðØ +tô + ¨ØíÙmINo`T Þ;ÏfÁäÒúNÝÊ÷¬ÞT ÆßàÊt.F¢j¢Îh.#`n-¾ã$üHíâ¸-KøF¯ìýFö¬ïØ @¡.ú©²±®Äl^ê ÀL¨$°l¾§çÇ +èVË@ÄiÌZÅí Юh>ÉæÉB¿P¾¦Â0,êÔ&»+¶ P +T¥u +6×"ª#ô'5¾2+¶õPHÚPNc\ööð^»ë úpÛ êWNgðÍðZpÇnµëz¶$0Z)ÔuPfN �{ÂÏÍXÞNßlàûFÈg®Ï0öü#´«°ÂÐ �ð0TÛaòeLò +£° ¨°"âN\E&fE±übêB¤HGCxGä/ä0 b ÄX² P#¿£*"Hä`PcIökâÀj²'tÒäÓ,e¢Ó¾² F,Û\Bc"êźûëfÉZÇ¥ Vu@Ä ÌÉ.ÂQ ,àÂ,Ð^àJüêS±¼å6H ÚïÂv*$àÍ(㮤-xê(¬u(ætÇÒ2Jn*êrÉ%&\àæ^àÂ2Â÷öV¯u¯^ã**Ú±Ú@ÊWjA àuvÚ*| c`»©w)¯¦d\ 7l2édègDYO _c¼E¤Bå2½Ächå«ë\(Æq)~ÆÉ00%¦d£¬t¥\ ÀÞÂe1OþV Èu\ø²Ë"+!àPe"",YóÜÃÄ¢)Sf´-Ãn`æRÀÙ2ì£314D¤Ó@¬§3MjðeJBô I'¬a GU>q+ïc:âdO 26EÄç jÌÅk$¥!MH60kÃÞÎ0w##²7#²>KdlÈg! Âî(EDËDD¯D`FB¥.Ã쬴U!2a!6´bHàBt �³ÿ.Li#D°JÔz! +@4ÿ¶©Ï5rü8ìvO²û)#å@C¨ rD/NàAOÀè±@Æ Èd%Hu Þ¹ Äp ä2ýIHxÄZ$c ¿§Ô¤L2rLÇ!s-E;Qvscnn¶Ám>à gfÆ´ØÃì$@@ñq6+ÂSâ˦BCñúEä¯ DÔ¿«øLâzR!àcK P +`ó< �sNL5µTòµe\#z V9ÀÈc^X`¨,2CäB n +endstream +endobj +584 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +586 0 obj +<< +/Length 2171 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4Nc0ñò3 +Säi8 &óp¦G¤¨d:¿ÄE¡äxoU°X¬ÊÏ Q � PG2.gcIÊC0eÁApSÐ`ptÈ%xsR ë,rñoi¦ãêù,ØÄqÞr6zÆáÄo:<¢ÀÊc4¶¢!i¶BçãGìP2¯Ê3BѰhdÁhÕ9)s(¡2îX`¡nzr Ç £a¸h¡5pp`Â- +§ øà0CÚØ£¶í0ÀÂ7c8: ìèZ§ ÊÜ «î2¨¤apl(R0RÉ,ÎxP1¯ Ê<Ë4ÎÃØ:³xÌÛ:ÏÀhT ++"bD°&³Kº7ËÜà40ú Á¨n¥O¡k'Ð\çE¡_ÆslúÓÃk¸ºNéCM³{¸ï<öòMîû£ @12b8·W¨ñ¿62áCúÙ0þHa¥¨hØc,A«XðØ6 㻸3L×RqÝnΣjU,:00#§ZQ*KI|ÿ§ô½BÐ÷¤<ÒQm8f O©C]MFh9TD²e*Ä!Å©~E¢ ¤$Â(¥B'ÏØfÈÐ4»W4ØV#¥f;Tóèû6¬àÈ»çOÆ£^ èÚ1F¡t8 +U¡I°³2"b@'x,Ù´f,Õç9ÝI%h3Þ4 Ã}À3!Ø@¾U7á»\ÝrfÕ&i©ßt¥JÖ¼³EÆr:CukÞ¨TGã÷ë) È*âÂ* +6\®3>%Æï^xê»ôÕÀ:SÚj¼ *k]8¾)"$}P²¡§9ØÎ[mÚÇ1çO> à6#Ï}'x3òIôÝGæäbwZ)'næZëí>ÈÃíÆ´Òîë|¬9áfBúHC!5âÙ£õvmÅü³ö÷J3F/À@5üäVÔ:®REdñpk±¡41ªÿ^Ú±FPqª5dÖÛéð0*B`E'ÔExì¡Ø +t0$}>x/¼·âIû¦V?xdéí| +æ+X°À0c¹Ð-$¿;¥ ' ´ÊÔJ¤D$4Ú\+µgÐÄ. rÚOÐp å¥.ØdN'lò*%¾TëI;H@NY@TÈ#!Ù«kíúFHàR²d©©PÒÃAê;L4ÉùB£Äæ>GèRÉá!+&X6¥Ï"¬f¨[µ&dÜä<PÙ2`ZR²¡B42¢XÍvÓ"æÔ¶f'hÍËù'ÔäÓ¡ß¾RrØB8P !`"À¦ à8@àÏI¬Íçºri=þ¦ê9g:ÜÚËù *àprÒ|ÍÉöâSU+¸ø~¿1®¡©9bâé¤ud=PC(sТTRH2g(ÛPFÔzqÒ #HÃxg¤²^R_$øIsl¶Ò÷Oé[R¯ó]?febËF8Æ:èQ4yjð~ eUG¡³F'=I,¦ÅPiÕI½¦ðÂPa6Ð �æF´µ§§yn Nj39ëFÓ>ª4u7Ùgr÷ÑÙt´g@'PU +a"Ô¬È!SlEOi.ÚA3lOiï>'Ì1%Úfè#ä`¢ÞÐ Btð" ÙúMZlhÕ̪i¾ÝÜ|c¤AºìÁØ}[e=Ü·Á6¶M<0W:õXÛ.ð>g9¹E:m%7ÕöîfY*¨Ç°Ö¾YÛ,G¯n ºwÈï@ëm*-»¡ °GÙàÍåµÔ_Þ9zÁ +ÌíL:ÄÐZ=nÎä:h¯É»á*Q ã<®Dö½qX¾ôÏ$ÀiUz#£hdºq<NÕv®õâ0_5¥kV³[]!ha Ázzpk¥@sìylÀLóZàTz ç(^kÙÄæUÙb¸Oü»èüæT¹´æUmóMgÍuÚÇe'VæsιÝhV9PÔë+@ XݰùJZÂËä¼§x/Fm#a¬Â;ZY¿£lÐå³Uu¦;O/í@Q£®z çÊÈP+;ÂL¢)åèmhÏPz ²+Ä÷egÛknmà'ðnä:W)²A9a0$ / ûâ#äÏfÊKÈ!4 ÇJ×J/³9 ½[ @ܶWÛ'=fÚm~ªÝp qãI¿1d»PÑ!ÑÊ9`Èæ3ÆÔÏuáój û_µGîTäz p=.×Ü-Ü@} ¼}BpG$õGÄþzzV²¼W§§¬Nª;èûÅ[ÕaHGel´ÑF_ºGaéw¤ Vçm¤ +endstream +endobj +587 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +590 0 obj +<< +/Length 2110 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢N¥BT # C ÑØ\6HÅ£qpÄi1*&0P´a.RfÀ©ÁLZ"$Â)P¨EÇÇAPÐi9ÆaÔÊ ¼ù¸êm1NBy@e7F-äÒnÁa3ÉÌèe6Ã)Ó>. æZS©Ë1{¾E4:(*¬.«(#¨âZIìb öi6LFËù¼Ül<à1Ø;ùÊv4ú¹3¶+y;äôÙß+åÌó½äg.Æbù9ó¤¨jPAAÜ23m*òê/KbÜ"Ò:0Ä)"ß"§ºÃÀ\û? +ënÜ·apnh[¯, +J¸ ¨)¢) +Â(Éfº®ëË`¿;ìË +ñ,[5cîÀ$Ê2Ð4Î3ÍDÒ<aÜÙ¨$F·Jczß«oãV:5zù"8®;å¹®{¢4ºlÓ¬ì;A O`ç?/Û¦OãÞ¼áæï?Ð:@lÔ -kjßÁð°¸ÃoPËQhÜL,O«)¸P!â`)FvA¨e 02þ9(Ç<J8æ:ÎÏÀÞ6R²m¶:KTÐu8Ñ;ÃÒ<£eÈÆÌ ¬Ç2·}M PQOnÈË/@\Ú½Mëüâ0¹SÆNÎO~ϳøÒî±tÅBÖ/ÒZ,4õCKÿEãK/ ALÀ7<'Á5sTΦ3GEä\þB´oUÃPå_¾ê]ç[EÃ'íUV'mðg®ÖN +ÍÙ¶xÍhß½ü¯#Ã,±cÂÑÁÃd*KÃAm1¾Sq3^lÚLUI3^ÓBº¯çXðPó àîËø#b¼-\Ö5Ã(ÈV*`d§¨TÍ[é\:*EáE>!"p$Â<x¤êëÓí§jÚëÈÅLñþðcK'EBH# âp©*á¿_?v6]©kW;Ìȯ.Hä3»ÌüÁ ÝL=æqÏ,U×F$ãªan®Ýø¿²Oðæ31]´6ìãÀm]ë$nó<ÐPËÝ'`ÔGâóyîÕRGø«{-íº÷×cn|®( + E +Ï*,"xGA«Ëb9Ú=óà¬Ð ñB8WË,m5ºp¿ @P`Ò&C'¡«.3PðRHh +N]tVùS4®! ðæ@\*Ä£[Ð9QÎ~M+?à6hQ¶":+þ¤ "úñ$ÆU9#T})¼+0oâñKNòPÜ× Îm®µ2UB¸8nDÄÊïüd +> h »TOQ=Ù½¤lÜUòR-9wXLdËK0}Ä#$f +¼"<Ù!å$mÀÉã´ÒzP7FAh3+ä|¹¶!<% ß ð¯¥ F !0&@°f`t»+49(pÚ^C2Ü è¸Xvîà¤.z)ðéÝ`_ áT* +8NÁÆ1:ËØ(B-dG¬ö§òÝÁð¤ÖWÿ¥¢á&¡`[ÉØ4`â¿qLØte%üåðÆÙ_Àµm^)¼=Qìr;Ó¾)p à7]áÁë2 7ô!ILll¨7ÐFç(ªË½ÔRð¡ +Å£yöN p±ëD¼pÚÃFR#,a&ÄkÊTxUß ROµ ÑÃÆ]ºNe|ÌË6 +9f @b)"þ3gµ®ht¥ªq|:²Ä(NÕXLuªBüÕp\áͳ6 Üî$¬Üp¨ C ©öDÈbi-ñò`Çé bÚ´7S&xÀ¦d(c 6I¯$¤p)àÙÌWfa>r~PéÎRßqU*FñÎO Ã+nå@èZð^(ÉPA°1±Kå:_â¥îÀ$øÅ×;oÀt¿SFGưfÔÄ)ÖÞù´¬Ç°LÁÊÎ \åÌ©Åò$0ª+@ ÕÛ´Øy;½³£ÚÌ«mmὸêîÝSÉpÄ8¢üã \<híñ{ág"ACr.MÊâ'0æ°¤ï85Ö «%!ÊÇT7ÖºÛ[ïVYGv¾#ç C@á$ bÙ¥Ä[ÑqC6ðÒÌÒ°GZåvÌMb3ªÜ^£zÊê/áÝÉ=WN0ʺÓA~ñ+ôvTÉgÄ +_£Î5ýZÕÛ"ÏÀª<Éè;-pcÜ(iÚir¢Ó5x_ +á&µbA£ºG4d³ßÍÙ¢[ @²[6:=õeï:Nb 7VìF»ûTÍ@vî%ë.C=Â÷G[ÜN ê¸IWð¸Pnòµ¶Þ)Tú..K¹unèØaJºdhï*=¤|ÇXÃW(ðgÕ@Ã4äñÖ['7ox[H! +endstream +endobj +591 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F11 23 0 R +>> +>> +endobj +593 0 obj +<< +/Length 1864 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éPI!PÈ ´b6 AhÜ\1LI¬Ð9&IÄR SDGqAPÐe§cIÊ'9 uÀÆa8LFÙÐÒe9ÄÞmÁ8cy¸@o3ñÞl6Î÷Ã8ìa6q³SE£«êÈâ)uÀPÂ^0¥× Ó¡Ôå}2 %CU4b2¨aTápÜp3 ï,2ù8c&[nråt»\Mú³q¼è 9NyËß{¾ÅÚú4¨'@î +x,¬/ �è¼¾`òü1Û`ÿ@ êf«ð¸&""Iàl+zâ¹ÂOäú>ËÈÚ0CXÊ9?Oãbÿ¦±C¶/À°<YF ài´"ôÂä.C#Ì Èr,>IL/âH"¼!jÊÑıÂËËF¹/Kä;#DÎ)@"'¸`§Ët!9Bs¤zøØÊ2O/Ì<þÌ}¸*m7&Óó¹4ÍtB¡¤¦Î/E +Ñó¸ÊR)LTÄÊIQP¾± +'KDaÅ[Ë3¨@¾Òú×-¨ñí»ªë»*ì&";¾ Àk5²ÙEFõrñ.3ãÈÎʵk �3Ó8Ï4 HÖ5ÓfÚÛMËwTã9Sç:³¥m:ηo»ôÝ$v[Ò2=kËÚ÷Ù¯µá ^cu«>ÄB¢¼$ p»ñbÎd¯WËKËQh¸ìà30fgy2¹½3S±Nz/K ¨ Â86U!ÈnòhÔduXKmhÆ:#pÎ6OswAm>¥×ºÜÒ'Ä''$isF7^ Ðjy®]·úÍyâÊ'A;$m5vפ¾û-\Rò=4ßäJöõÊÄüÅI²ÓÄt|PÓ<Oªå"u9Æ÷¼rúÓ¹SluE=Æc-téJw£ÉÄ9åG5¾E)U[C͵yó·wYÖ¾Aêúþ®Þ·é&uOv_Ö¥aØ©àjº+ãtOgæ´Þ|o$ml2¸ÈÙÉ^x¤å` ¨YK9i`Þ �üÀ3 +aÌI1¦<Ȱ#*eÌÉiæ|и³JiÍI«H5L0õÐÄMÒÝ~ +q¼0ÊqN:cG6±Ö>uBp' ÂB-! ý8R§WjÌQÉl1[zC2áÔ:ØpilÅC(Âz]2\ ¢tN¸0@&gLª[2f,7¸CÀejF¿@ÝCDrYí(ÐâCI ¡Hå#$sG9q12ºôJü£3qÞÀdÆâlÌÞ<7æÞeò½á~*¹¨z/ÀÅÿ¼èÆ^^r é +5ÆØÞ#s2²b#òc×Ô¨QýH¯ åë±@¢hÍ2àÁLd3Ðý˧4QN+Åe2&RE>g6É &Ôeì8G �Ó|D':à o AÂHI'ÖëHæzÄÉï.¢¯Å¼JåA0àC +A|Âp«¡TSÐZ\9/Ñ9F'Ot.ôNǤܦ +ÈTADeñ¥"pܪ)©)¥óa¥-cmmËÆ°Þ'å:í,£%Ò¢`Ct¦ÖJ¡V(n29¸·0Ë7*ªí:NZ=©³YÊD ¢FXêå.lµ1®Ñ ¿Hý§àSÁ|,ð²XXPJDPWHËùø4¥ð¹ H\¥+1JJCCä´)Ò©QӨĢ^g(¢°Ñkj(¤µzÀÔÕ£Zà ¹mÆæÛØ·¥Ó'¹õLí{;-¯ ð¨Bloú/Ûå˨b}V§&LéMA¤²ÓY[ë9èý¥(¸Ghæ§y³ÚÓÒûS}©ÞE3)ßÕB:QU,(õ C<j ¡Ô6`àÝÉ÷~áa6Õr&-øZs]!fb.Ä4fy¥»Óbà*ÑÇ2ãÐÓÃ.%¾çÁ/èC;áP±?çl«*s¨c.ãìÃ(x©ØC"ÕL)w®} Ëäù}!VU/!ÆHÓiD¥½A¨ÐàæÃ¶J.Æ yò ¢ +endstream +endobj +594 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +596 0 obj +<< +/Length 3258 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7Î¥BT # C ÑÐ]FâêlĨDLÁS¡¾E Èò©E"#AAPÐe§cIàs:óÐçq7LFÃ(´îe4ÍAØéo¸Üî·Ü 6MwÒì 3Í×áM + Ãa¬*TRk +Fóai3cùÒtqã æeähNBÈÓ£2ôÌc·dæ,e¼'C¡Úpär³7,q¼@c9L>QIPÕ* +©{QÞd7MàÈȳËBѸ£Ë¨ë4n¸Îá<ÌpîÉ Ï«î)SX×*xp¡mN+ð°+2ÐÉÚÈ3¬@¼/KâüäØºlkÎ2Lû*˳,Ü @ñ».øÌÒ¨#RÕµ¡^¶1 ð8îJþ0kÀÚ2Àl{çIÎø¹nkÂ;#HØ0°c,*û)r7+C¡¼?-+kj¼*ÅRvagÈ,f¼¯kêþ:ËåÐsÀ;¸cÐäÓ««æ2¯ñü!2ÒOAJ²¼²«Àå=PR²CD¿Iλ2¹Sg18$½ïWMÓ®Íx¿ºP³ðýADbÏÉ#ÿÃ2¤9DÅ®â/Å+=(¥^»Ó²þ9³6ÀØ æ÷¼WÅô¸_ý»'VR5ZòÃd¿Ä¶á¸¶$Á;9ã£Á 7Øë3£àù<°¥WöõV r¶q(¾)Q·rxáåmÞ4SCÊéÛ¡p@$¸2æ+/ØøÖ¡;/ : C¨Ê*#˵]ÇQkøÿ +Í»;Ï3ÜúÐ/ÿ<3 Ê7³^&çeh0b )(h5IbÄM¶%l» Ú#e"àP.;è¤!|jAÀrQnÿÛ!ùËoèO2¥Jl¦ÐÚq] QÆî¼F##lô4Õ)Ës +PW -âÊGL#|äé8 A/LӬŧ9}ñ¨ôô1äkõ¼EÛ%¶±mG¦n{«³UÀ{Ó/WuVj±«$s67íÜsº/Ï Ê¾bê3s®}å»CúèÛ+Ì|¨]¿?çA à;Á]¬q%_»Ç|Þ°qËÁú #ë Dø3<ç ôÔ YoºÄ:A¯eê!fjÔgi©nw^{mhì¬6ÆO®Ò-2¸Ëa3ê@ <'¤øaaÓiKþ ¿GýÛÃúo8#:Aü �Cb ô ÀÂLìC Éͳ@vÒ&Bç^|x°Ü<$Þd= Ï=èxêeblX1Íî,V0²RjN ¸q(Amj]¬ fRüß«v ä·¿³!&cü ³fHMÈQÝ´þB(IeÞ@»ÙNçªPâ +ËK,¥¤@dOU64bÜr¨pOü: £h`ye`¶c°ØÔ¶CIçFÆXè¶ØÆÛYâ÷ªððàkCU¡¡7ÑÔ»>9X2Å0ùÊ )8aAU¡¦pØêR`~ÍܸQún éÊld´Z'"R® Â(R +Á"²:º/9Ià65gº|Nxr;¯]2Ðê¾ÙpGd7¡SLQ4%-üHB&Dì`0Î ªg$EÊ@2$ �¶þ¤A@R:Ô9àæ× |Ù"ÄIÐ[0@ à ¶s " C!Â|HÉõ6`9±ÍQC·,áù9Eà1dÓCbd9Ä:ZË\¿qjÏs¤foE ¶&MY·d"=²¸ äYÈ-g«%¡´`ÒÓ) bíÃr/¾Ãß¹VC ´"¸fÛÛÁ¨3±¸îhó±Oþÿ:ì .²ÀÌàa n¨Z" ph3 ÒmRO) °ì·;Íl#ìpVÚÇmnæK>®\K<çGz;¹í.«<8:,°qóH)<Nçß³P η;g �BEM³ùã\BIsbåìqp3sðªîe ¦8?=v_B)9L)0ÞÏ®FÚÇY$ÚàE nÛwd!#5²|ÚâA2Ø V#J8,[qn1²Äd¹ÜIcqÝ ÕS ä0¦NeÔ8C¬©mpæX·Rs»!ªáZ$úSüôt5Ö°×îH$@@d× R ü@¡¯ÂùríXKvÁ'ðA 0!øf¯âÜp^Âx^þ;8H9q¼UpÛ8§½ð>á&à£q-Ê +.s>¤ôK]Ù&·~"ûÈH;e±Ì*Æä· ×¥q³ÉlêÞeÅõ¾±¶ �!z]úxr9t¬¸Wó²Kf:é±ëtÙk)àÊJ¸'$Gî¹ai4Sñ#¶ÆqÞúX,'uÄá&÷ªÃºgQäøêïæ¸Fû´Ý?½*/P¶CPoG¶À° f^µÔNpÖOu!Ø ÷à¡7ªç Ý1ÁeìÞ ê 5ãçÚÈwÊóm%P8x²VXKÚù<ö Þ¢ru,S±Â2/ïj;´Ze~ ð9dÆÚÕ@P2 þ9ø İĢeThJ ÎÆ@˯ÂÊD¤" Þþ2vÏ4ãòýh"#°üÏâßB¨E¯~ï¯ð2ö§æ¢ÿ§øÂ¨:ë8ü®îpbî+¬Òo>ÆMìóPÚ6 hp0 ÂjKê¤ÄÐ9äÚ=Çù+úCG[ í® îi4·0²OI"Zèϧj¤£Â¢gs]NC mö@ �¿N<\¥³îÎpCT6ïDt0a Ð0 +/BüÉ*Îø'ÀR Q¤ÖFt9Q\úÝRO¯ ÄØòQk .j)p Ä Æ ný Þi)×.Háî"âeF ¶Uþ9JM/:ðâ¿oÄ 6ÆF PíÍw ègK°*7mòbÜúcÁïÿ¤.ÀاÐ)BâµFo¸T �ý²ýHøÚ°VÑÞ¶'þ6¥"D]"\Fßþª{âàÿ@ÈÿÞùH%è¢ÉBúe\g °ÇèÂ)¿rD5:#'2N©²6è󶦣x=ð$ncçbøhË,J®ÚúÄE$ÐhpR O (,)1O z°l$BèÒçÈ82ÌÊJ`orغòRù¢¹ +` âÈ +Å +`ùGƱ¾Mõ(C ºjNUPº'7¢ÿEò7@¯ò#«CPs`nç Ê ` ÎêÆðÕ}r0ýjÓ8@Ù7dÓ7³~R¦Ý§6 +ògò¿B 0nÛÛI»L²Ûë$³îÜkJ)µ+Vµ¬)³Êl8ʬ®ÃËnÛ¬ ð^Ô\ʸßGñ.¨2YËîc1>r°*þPIBQX2ëØ½Âþ +¤ + </"3P:ëç/ä òs`3C"ét&/ B®®"ÞÏÞ»J%ÀoF¥±UCñgTC>@ÎTö$B8sñßðúr¡-!Hem +endstream +endobj +597 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +599 0 obj +<< +/Length 2519 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* B¡AhÆ2ÄѸ¸b4Á¼aJ 0æu1̧3êl(¤¨j£0ªT46 ÆC8¤.¶ +®+ó8$ü¦e:LFóÐ r7Ëà¦íx©0»ö 0âÜN,©aÛÆ3¡¤Þn²S¸ç)H¢á>æe9Í'3-ÄÒtÜî÷»ò1Sáçï#N {Ç¢q? Ï.O/c1 93æ¨3BÑ©`R,0°X@£ðlapp +3¯,hÛ¡s´Ð»ë¾¼Ì+É<ïJHá¤,îC/i,)Ë쮯Ðbû0¶¢Ê3?A Pä×(«ÊöîÁ0sÇ¢D ³Ð=O{Æ,B; &cÂ3¬Û:¸(Ê5Íd×6³JâÉ2 ÌÍÓÐ@"cÂ8OìFD®ð¤½ °¨pîÁKÌLHiQÒ¾ýIP)xÞ6ÁM #bë *=OÄ$¬*É kªjêÝ 0T Nܨ¿<¯fÒtº±1¤5OG£ì1ô)#pÞ8n\¡)Z,ÅRÂ/-űN«É#æ± " (ATUUec< ¦* +A.4ã¸à¸>(O¸ PÞ1bØ@#`lèwEÔlhRQe£0WÁ¸jÀ¡¬6ó[5ꯣð`XÆ9 #jÛÜëÌ¿JÐmÙxR²»Zêò²Ø + AJq5,ÙÊÓà×6WVTI£ jAôÇ{«ª¾bæÁdÚ6ÍÀà6+S~ãêõ£C¬ÑÁÀ]LªMV¿{6 Ë«®ú5ÔI}'ÅmëâªI³8#Â6²@A.Z°çTÕ}0â:½ gSÇôI@ACÇËxØ÷n0áÃ$F¦ª¡&©ÛÂÕµµ �3n&°¾QШcé0»rPØaxk³ò|¨pÒ,2¹LM4 îÏO¿êÃwFãÃyepÁí;Ǽà3dåt¿Ì½S (bUÈÒÖ¨0^naó Fï©2¯yȸ7ÀÉÑïÆÖ¹Ó`ÆìkDl¬Ç0k p%àÌ¿èþá% «4PUAÄ|°ð¯3SHâqb LlSò¡¨-T)W U#n)Pè +ynÕaR 0ðÂha¤6PÚÛ.p²ÆòÃùÊnâ¼sjöÁ Ëð3eëR#?&fØkJ8b¯ßt1AÀH(Pà3.A½åÁó`ã{ãzm}ë'(dæ=ºÅd5QM,öTÓ5ç/Câkxþ¤`èo ôVê9¤VSÈð4%ukK`X!f- ø¶òâàû0 º§Î9³M£DäÛSldÆ·`êlÚ¸7S¼é»à@¡`iA(Y ÃnÊlÊfL³S)<,0B 6>HåÄIØ@p"µ©ê»Ôø`ÀIú£0q6ÑòÎZSIn.µ¢ªDZíôIÑDó,ÐM¡ÄÔØQê@ÞN$7Ð7E8F\*9Rä @Ãxd-`éåðp IM0 àùV¥@NBPá) á1 ¡b+@ÓJgX$Dà¢ÇõúY¾{¡BÏ @ åÀÎÒElÃP\G@ÝC'oÒ +¸312UþU=!@( sIã.}÷UÇ3xnh ay +\CÆ×~+^9_VÛ}è¸ÁTì+Ý| è8àâúFSvT2NVSJÀ[ôÆïÀ×0Ù4¨T á"¦ïWºUÇCâo§B:¶úp-Âz³¢ô üQ0M¡6Ï y>p(M´ÊG ÃJaJÉ»[HøªØ`gÌbéÌÞ§s3ì»ØÈm03¤ÃEHé%%ßý<¥;©è9¦Æ^ÌZsQÿ(U¢TE¦IüÍVú-MÎûñ<ùKÀd©Î1.&¯uD!{TáÑЧã3±W(ÜgE|°"Bëá,I73J+ÍkIMNM®§*ÙÙp.%ȹèDN'UÍnÐ<¨Y^Àr-@=¢4* $²EFeÊõ@Ëí¥ð½DÈá®#Èz0PÄämlðÌçþÈîB~óp û²WÛLh}'00Oß´&=Öz8ìÞOV](fÂ@Dr22ãÉ97( àC2Ã+"daGì7Ö2põëMø}®¨)¨ý³ÛrÐiå»IwÕ% á´üæ´pGAT¥*ú3£pt±sM[Íô·,£p¨Ñ¼I Ñò½ \ïHZº¯éP6õ\¶ÛVÇAÓ[pÊIjwÆOÂ9Ø`nÌ2R(PïpôV#$B÷2¼Ì\Ñ/£Nz1bh´ +& ѰP9ïn@órÉcà´åÿÃÍTþ×*VH§Y[Éà%V%ò.>BS,¸|#±^`µÛúÁÐJÀ]IöÚ¹MòÙ ùý÷íï,*Ðt È>!H8¨"èËX ÂÊ®ü}Âîh"ùv}orî �Lü +ÈÒç&*¨÷ÎäîS°ú r#Ϩ(x-ÂÜcxÈXkB&Ýbbã°¢$>aË¢ÎZr fP>è죤þ¶¯Ô900(×J"îÎlPó*QÆÔøÈä5¦j 4 2 +endstream +endobj +600 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +602 0 obj +<< +/Length 2658 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7Î¥BT # C Ñ<d7£qpÄkQ*%£Ä©3 + +(RT5QÃL. +Éë@¡¸a#¯ÁByN#ìö)n ÃqÆåKº×)64i§aÈ æt9LgC©ÊÊ) y°Ès³jEK&ÇTf4¦ã ´Ë°Ôjæm¶ÏkÁMÇ©ÐA¸ÝK)Þc:ïÇNÜdéíMüÞg; eéxãȺ;êþ(¦EO1xÚÆªhZæ²!¼¬-ðÚ1£´-Kb·hd¶1ïÌ +ɯB#®'7¯¬ °êPÅ*Ê3¯¢\«Ë6ï<²±0dL¼2 ï#ÁQ,(ª®0i¢Ø¦éðRÎ-38 îPé¸ è7pª& 6¹C¶ð3ã3otlü Á ¨pV»E°ì?È$r·±ARIPÒì¯I¬;`6#ÀÒ6»!t7í @4¶w>N§Ãó-s±Q¦?ð<&IlìÌ/NPÆ6£$Þð¬²Øå47¥1LpâP¨4$ÄAÂôb²®õêà -ªÃPè$+EÃ0"í.BñJTm &:N @8MÎÚÌû ØjI6ýâ®P7í'³!@Ô7W¨Ac4ÍÊðKöE÷~ÙV©Ïph ]°+/2±í°½{r²·õëB ¡¢'\!¹ÃwOcÊ1½CN/|¶·ä´aøI8¬ÖéÌ ¤Õ7AuÏkÄÓ²]Qôa°\2á³!¢K:Àk¸]S)àb +C+H9 ÕCO ñ·ÝÌ}Æ+Õ¦mÆßc0ê6i <G:Îö¨möyqé*ðÆ.àSsÈÌH\§ÅTk#²ålßD74cHÞ7 6ÿÀ@;6"Ê3´ÓTð»Á �ÀóÝEÒ,ßmõY0µÿ +§äA +\ݳNÔë»tïJ'wåA×ìÜÛx¤ùã¼þª!3§ÏX(yÆè0 Â(R +A<)5§NZàKblN6FÌëA³üIÄ·Äݰ4TíèPäz¸¢&EHq¤ :v9åX\a´1?Í'ÆeÛ+g2àÕ íÌ7Tv bu$0æ[èfTàÐúgoâZèp±9ÄÅÁW*>8.ø·bú8p«±°0f±º,<0sãª|ÉÚ !XÖ +u!`TA[Ö2ÃXÒëAªnñ¾Ç4¢ÝW\y!L<àÞ¤.õÃHèÊâcl3·.àrWó²ÒÌ2» ÛvÖã_QÒ3ÃhÔ 9Q,J¤Ù¬f¥JUMæ=C~ÓppYÐ]ÁÄÉ9¤i.8r6F¥*vÓF �å ±i5ùN(Ï}ðYæ ÍCi°_GrÖ&C°isïD1UF49Ê Ëá± ÜC»õ6AÂz''´»OåqHªXY¡}0k<"ìV«"M²'#M :L°M}¥TB²Ô �jL`ë;Î]>/4¢¡ºjh2U´Ahcyil<àêØ¹Ï,hìDsvú_kJ_Ï©¦¾#dXÚ{ê´mæ>¥Ãb7GÒ÷R£"!T9Þßmµtî¼Rê|²ádªØ>õ.éj¯E½$õb/"§~ËJwaµ¡4Ò¡Ðó+4ldâplÖQÅS/fkóvê É&L+\-ó1°ÐYeÛfrpöQ °ÝãË{o¯=Á#w¶$dP¤RAW[;Tv +¨©è¤°×6çCÏÍÒ®{ÖA]ÔgYºn/¬õw.îæÎIFKòKWÐz¤´¦ +.ʸ¦Ê¸ºjÈzXâ½ÊöÅjÙlá0ä|Î(e!ÕêÚ7¿ò£9Í>oìq£Ç·7¬OéUÊ Ë_,o½=4üÔ bI£ ©O"â<Öý ÒÌaԲܺ¥hfw|4MÐY ¡¼h,¦¤Ü;%ö!±$âTé"±E ÅQJu#.ñ=¾Qr³áëh¯ X]²YvÏc¨ÃñâKøãô²¦HDnñÔи¤N ®ÙÙ.À"<ЩÙÒ·Òd³¥vôøÒ4» ' $ô lÂIí´e\± +:9W`øä¸²H3c³wL0Ë1f8 +8FÆL+´õ%&ï(èÝQDÚv3voÎ|bnÂݲ:hfR,!'ôËÄÐoãÒ{Oõ?Jþ4ÖÀ9f.î§ü/à«gWröǵ¼RjðóDÓµ¢ôfâN>Eç?Dôÿ-kéYdÇ×? ¶Ì¢]ºÝʤû¨q^/z¦KîÎQåP¶R.®3+å0`l ÓèOÀHã9±ÃÇÓíüp¦(-ËùæR Á¡00צêaÓ'`ÔÿO*ÊY ;C©mÒÎTpÖ:3ÀÙ¸"êL + þg6j¹tæKÊM)¬÷Wyöìhr±ïm§¯P-__EíÚZ²sëRµ`ʵ @µëb©ìÒ_KjÃú&b¤ðm&½¥$õkäëdëÀÈ¿ ºO¿¯Ì¦ofl +$ ül¨(00ë«bä7Ë F@S>{ÇÀÙÈ`Ú\ ` â#l^æn.Þ×LFÔ&Ø.ð¤-qÆrÎØÆ0XsC²Jòôâà*¤ûËêO ànòÁ +ç"Âø :˧ +¤ + t¦6ifúÆ5ÐtY$Îýf/ÎÆÂìîb l1L �LîçØiE´!ñïéÞÙ¼Õì±n§~Û +çM¾Ü)i +Ý ôÑ0 nÅq8[JͰ/Z`wC¥` õíò +endstream +endobj +603 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +605 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +606 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +610 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +611 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +613 0 obj +<< +/Length 1119 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4r. FbáÀà@3EС¶ *¤â<\0Ir²¡Þ((&ã¡È 1Î)Îa7FQ¼äd2§Â1ÈÞm +J¨$= +JÅ£pÜr5 %ÓRf +HdÒ j¹ÂapÐTRÆ.FöXÂÁoF#AHëL2q¦àÌl47nÖ+ Äq`µ\dÈa#s'clTA£ |Æ)Í'CÕDÙH2k¯ÖA¸àg¾íqì-l +-ÆÅdZ3XÒ2HxÛiJ¬æ?ÈÙípðN&yQÌ:Ã!,P4£`à¨cX2chÂcCÒõ½«2Ð*4)BÞÚ4ÐèÃHØ¢¨êHÄ ¡¨PÍD¡@@2 ã¸Ü6 ã + ªªº:AöLÜ %«Û¥Í3 mØÊGJÚº#+ëÚÁ£3]AP`Ñ(5È2°/l8òdó¶Îc!Êç Î3§c8@ç4ÊÒÂ$L=9O`ùÎóÄöúEJ@Þ7#hÞ:ÐïTy5QSl²òKñ=&´Å +7'ô ÊrëÉxn/óË.¹)d0æ;©Î¤¼Mr°,]RæÈAKº@]DÈXÐ4¨Âèà*}a5ðÂ1Cꢬ6`Ò1W¨óTV-J6KÈÆR¥Ä.K Z)E»E˰dÁâ-§hl7L¨Âh¦+Û!Ðô@..!kø¢²È" â¡\æùÈdgðA yÅHIY¯} Ú!ML +ÈÞ.2 +xæ: +ct8¦d£fFq§£mÚã¹çù¶£{®Uéþ¾ ìÃxÄ0í9?¶fºà(4ÐÒñ»ÞØ0¸i> +Ú!ÉhûÖß¾ò:å×m¸k+äN£Î0umÒ*@:æ ÉtB¥)êcØ9áf0С<¨ ¡uܦE6¦ èڥÇ7@î»ñ n^ôU!ƱÄÁºA,£asÉü¡G2à'Ì9£ é@¨ß°P½Jcþ �º<hÙ7f ª&ÆPZ p¤(WñJX TùÓwRqVy¡RIm;!hI8OGéøpÊ¡£÷IÉ¡øôÐ/áÞ"AtÊaãæVH¿ÌC`l bÚ)¥%~íÔ(cjÍýX¾]ò^ =a+@n 0p6@Ö gZBZK Ê +ptpR +endstream +endobj +614 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +>> +>> +endobj +616 0 obj +<< +/Length 281 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4r.Æ"ád1ÂͰH¡På$äáÂ$T1ÁR4)*¥ØØÜo +*%rØìÂPT;Ì# ¤u2Zq ¸3 ÆYÄè#aÌ. _$4`P HÒ9¶v0×` AUaEÛJgsIÐôe9&ã%ê¾ °Ï¨qAPÐi9 +gLYÂr2&ahÈgMÌ7N(Äl¨FZ¼Ì 13æz¤Ü 8·ÇC.Ìo9uXÍVdÍ2ÅØëäȧ´of%DÆo;b8àrìgCÔÆt4ýXâ, +endstream +endobj +617 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F8 8 0 R +>> +>> +endobj +5 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F2 +/Encoding 618 0 R +/BaseFont /Times-Roman +>> +endobj +6 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F4 +/Encoding 618 0 R +/BaseFont /Helvetica-Bold +>> +endobj +7 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F6 +/Encoding 618 0 R +/BaseFont /Helvetica +>> +endobj +8 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F8 +/Encoding 618 0 R +/BaseFont /Times-Bold +>> +endobj +22 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F9 +/BaseFont /Symbol +>> +endobj +23 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F11 +/Encoding 618 0 R +/BaseFont /Times-Italic +>> +endobj +114 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F13 +/Encoding 618 0 R +/BaseFont /Times-BoldItalic +>> +endobj +618 0 obj +<< +/Type /Encoding +/Differences [ + 0/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis +/ring/cedilla/hungarumlaut/ogonek/caron/dotlessi 39/quotesingle 96/grave + 127/bullet/bullet/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger +/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/bullet +/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash +/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/bullet +/Ydieresis/space 164/currency 166/brokenbar 168/dieresis/copyright/ordfeminine 172/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute +/mu 183/periodcentered/cedilla/onesuperior/ordmasculine 188/onequarter/onehalf/threequarters + 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis +/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply +/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls +/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide +/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis +] +>> +endobj +2 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 4 0 R +/Contents 3 0 R +>> +endobj +10 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 12 0 R +/Contents 11 0 R +>> +endobj +13 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 15 0 R +/Contents 14 0 R +>> +endobj +16 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 18 0 R +/Contents 17 0 R +>> +endobj +19 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 21 0 R +/Contents 20 0 R +>> +endobj +24 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 26 0 R +/Contents 25 0 R +>> +endobj +27 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 29 0 R +/Contents 28 0 R +>> +endobj +32 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 34 0 R +/Contents 33 0 R +>> +endobj +35 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 37 0 R +/Contents 36 0 R +>> +endobj +38 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 40 0 R +/Contents 39 0 R +>> +endobj +41 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 43 0 R +/Contents 42 0 R +>> +endobj +44 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 46 0 R +/Contents 45 0 R +>> +endobj +47 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 49 0 R +/Contents 48 0 R +>> +endobj +51 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 53 0 R +/Contents 52 0 R +>> +endobj +54 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 56 0 R +/Contents 55 0 R +>> +endobj +57 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 59 0 R +/Contents 58 0 R +>> +endobj +60 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 62 0 R +/Contents 61 0 R +>> +endobj +63 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 65 0 R +/Contents 64 0 R +>> +endobj +66 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 68 0 R +/Contents 67 0 R +>> +endobj +70 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 72 0 R +/Contents 71 0 R +>> +endobj +73 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 75 0 R +/Contents 74 0 R +>> +endobj +76 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 78 0 R +/Contents 77 0 R +>> +endobj +79 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 81 0 R +/Contents 80 0 R +>> +endobj +82 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 84 0 R +/Contents 83 0 R +>> +endobj +85 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 87 0 R +/Contents 86 0 R +>> +endobj +89 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 91 0 R +/Contents 90 0 R +>> +endobj +92 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 94 0 R +/Contents 93 0 R +>> +endobj +95 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 97 0 R +/Contents 96 0 R +>> +endobj +98 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 100 0 R +/Contents 99 0 R +>> +endobj +101 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 103 0 R +/Contents 102 0 R +>> +endobj +104 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 106 0 R +/Contents 105 0 R +>> +endobj +108 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 110 0 R +/Contents 109 0 R +>> +endobj +111 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 113 0 R +/Contents 112 0 R +>> +endobj +115 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 117 0 R +/Contents 116 0 R +>> +endobj +118 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 120 0 R +/Contents 119 0 R +>> +endobj +121 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 123 0 R +/Contents 122 0 R +>> +endobj +124 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 126 0 R +/Contents 125 0 R +>> +endobj +129 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 131 0 R +/Contents 130 0 R +>> +endobj +132 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 134 0 R +/Contents 133 0 R +>> +endobj +135 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 137 0 R +/Contents 136 0 R +>> +endobj +138 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 140 0 R +/Contents 139 0 R +>> +endobj +141 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 143 0 R +/Contents 142 0 R +>> +endobj +144 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 146 0 R +/Contents 145 0 R +>> +endobj +149 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 151 0 R +/Contents 150 0 R +>> +endobj +152 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 154 0 R +/Contents 153 0 R +>> +endobj +155 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 157 0 R +/Contents 156 0 R +>> +endobj +158 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 160 0 R +/Contents 159 0 R +>> +endobj +161 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 163 0 R +/Contents 162 0 R +>> +endobj +164 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 166 0 R +/Contents 165 0 R +>> +endobj +168 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 170 0 R +/Contents 169 0 R +>> +endobj +171 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 173 0 R +/Contents 172 0 R +>> +endobj +174 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 176 0 R +/Contents 175 0 R +>> +endobj +177 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 179 0 R +/Contents 178 0 R +>> +endobj +180 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 182 0 R +/Contents 181 0 R +>> +endobj +183 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 185 0 R +/Contents 184 0 R +>> +endobj +187 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 189 0 R +/Contents 188 0 R +>> +endobj +190 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 192 0 R +/Contents 191 0 R +>> +endobj +193 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 195 0 R +/Contents 194 0 R +>> +endobj +196 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 198 0 R +/Contents 197 0 R +>> +endobj +199 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 201 0 R +/Contents 200 0 R +>> +endobj +202 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 204 0 R +/Contents 203 0 R +>> +endobj +206 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 208 0 R +/Contents 207 0 R +>> +endobj +209 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 211 0 R +/Contents 210 0 R +>> +endobj +212 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 214 0 R +/Contents 213 0 R +>> +endobj +215 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 217 0 R +/Contents 216 0 R +>> +endobj +218 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 220 0 R +/Contents 219 0 R +>> +endobj +221 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 223 0 R +/Contents 222 0 R +>> +endobj +225 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 227 0 R +/Contents 226 0 R +>> +endobj +228 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 230 0 R +/Contents 229 0 R +>> +endobj +231 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 233 0 R +/Contents 232 0 R +>> +endobj +234 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 236 0 R +/Contents 235 0 R +>> +endobj +237 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 239 0 R +/Contents 238 0 R +>> +endobj +240 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 242 0 R +/Contents 241 0 R +>> +endobj +244 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 246 0 R +/Contents 245 0 R +>> +endobj +247 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 249 0 R +/Contents 248 0 R +>> +endobj +250 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 252 0 R +/Contents 251 0 R +>> +endobj +253 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 255 0 R +/Contents 254 0 R +>> +endobj +256 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 258 0 R +/Contents 257 0 R +>> +endobj +259 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 261 0 R +/Contents 260 0 R +>> +endobj +264 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 266 0 R +/Contents 265 0 R +>> +endobj +267 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 269 0 R +/Contents 268 0 R +>> +endobj +270 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 272 0 R +/Contents 271 0 R +>> +endobj +273 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 275 0 R +/Contents 274 0 R +>> +endobj +276 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 278 0 R +/Contents 277 0 R +>> +endobj +279 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 281 0 R +/Contents 280 0 R +>> +endobj +283 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 285 0 R +/Contents 284 0 R +>> +endobj +286 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 288 0 R +/Contents 287 0 R +>> +endobj +289 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 291 0 R +/Contents 290 0 R +>> +endobj +292 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 294 0 R +/Contents 293 0 R +>> +endobj +295 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 297 0 R +/Contents 296 0 R +>> +endobj +298 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 300 0 R +/Contents 299 0 R +>> +endobj +302 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 304 0 R +/Contents 303 0 R +>> +endobj +305 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 307 0 R +/Contents 306 0 R +>> +endobj +308 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 310 0 R +/Contents 309 0 R +>> +endobj +311 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 313 0 R +/Contents 312 0 R +>> +endobj +314 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 316 0 R +/Contents 315 0 R +>> +endobj +317 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 319 0 R +/Contents 318 0 R +>> +endobj +321 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 323 0 R +/Contents 322 0 R +>> +endobj +324 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 326 0 R +/Contents 325 0 R +>> +endobj +327 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 329 0 R +/Contents 328 0 R +>> +endobj +330 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 332 0 R +/Contents 331 0 R +>> +endobj +333 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 335 0 R +/Contents 334 0 R +>> +endobj +336 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 338 0 R +/Contents 337 0 R +>> +endobj +340 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 342 0 R +/Contents 341 0 R +>> +endobj +343 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 345 0 R +/Contents 344 0 R +>> +endobj +346 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 348 0 R +/Contents 347 0 R +>> +endobj +349 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 351 0 R +/Contents 350 0 R +>> +endobj +352 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 354 0 R +/Contents 353 0 R +>> +endobj +355 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 357 0 R +/Contents 356 0 R +>> +endobj +359 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 361 0 R +/Contents 360 0 R +>> +endobj +362 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 364 0 R +/Contents 363 0 R +>> +endobj +365 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 367 0 R +/Contents 366 0 R +>> +endobj +368 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 370 0 R +/Contents 369 0 R +>> +endobj +371 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 373 0 R +/Contents 372 0 R +>> +endobj +374 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 376 0 R +/Contents 375 0 R +>> +endobj +379 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 381 0 R +/Contents 380 0 R +>> +endobj +382 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 384 0 R +/Contents 383 0 R +>> +endobj +385 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 387 0 R +/Contents 386 0 R +>> +endobj +388 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 390 0 R +/Contents 389 0 R +>> +endobj +391 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 393 0 R +/Contents 392 0 R +>> +endobj +394 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 396 0 R +/Contents 395 0 R +>> +endobj +398 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 400 0 R +/Contents 399 0 R +>> +endobj +401 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 403 0 R +/Contents 402 0 R +>> +endobj +404 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 406 0 R +/Contents 405 0 R +>> +endobj +407 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 409 0 R +/Contents 408 0 R +>> +endobj +410 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 412 0 R +/Contents 411 0 R +>> +endobj +413 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 415 0 R +/Contents 414 0 R +>> +endobj +417 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 419 0 R +/Contents 418 0 R +>> +endobj +420 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 422 0 R +/Contents 421 0 R +>> +endobj +423 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 425 0 R +/Contents 424 0 R +>> +endobj +426 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 428 0 R +/Contents 427 0 R +>> +endobj +429 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 431 0 R +/Contents 430 0 R +>> +endobj +432 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 434 0 R +/Contents 433 0 R +>> +endobj +436 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 438 0 R +/Contents 437 0 R +>> +endobj +439 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 441 0 R +/Contents 440 0 R +>> +endobj +442 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 444 0 R +/Contents 443 0 R +>> +endobj +445 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 447 0 R +/Contents 446 0 R +>> +endobj +448 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 450 0 R +/Contents 449 0 R +>> +endobj +451 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 453 0 R +/Contents 452 0 R +>> +endobj +455 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 457 0 R +/Contents 456 0 R +>> +endobj +458 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 460 0 R +/Contents 459 0 R +>> +endobj +461 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 463 0 R +/Contents 462 0 R +>> +endobj +464 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 466 0 R +/Contents 465 0 R +>> +endobj +467 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 469 0 R +/Contents 468 0 R +>> +endobj +470 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 472 0 R +/Contents 471 0 R +>> +endobj +474 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 476 0 R +/Contents 475 0 R +>> +endobj +477 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 479 0 R +/Contents 478 0 R +>> +endobj +480 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 482 0 R +/Contents 481 0 R +>> +endobj +483 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 485 0 R +/Contents 484 0 R +>> +endobj +486 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 488 0 R +/Contents 487 0 R +>> +endobj +489 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 491 0 R +/Contents 490 0 R +>> +endobj +494 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 496 0 R +/Contents 495 0 R +>> +endobj +497 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 499 0 R +/Contents 498 0 R +>> +endobj +500 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 502 0 R +/Contents 501 0 R +>> +endobj +503 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 505 0 R +/Contents 504 0 R +>> +endobj +506 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 508 0 R +/Contents 507 0 R +>> +endobj +509 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 511 0 R +/Contents 510 0 R +>> +endobj +513 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 515 0 R +/Contents 514 0 R +>> +endobj +516 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 518 0 R +/Contents 517 0 R +>> +endobj +519 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 521 0 R +/Contents 520 0 R +>> +endobj +522 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 524 0 R +/Contents 523 0 R +>> +endobj +525 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 527 0 R +/Contents 526 0 R +>> +endobj +528 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 530 0 R +/Contents 529 0 R +>> +endobj +532 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 534 0 R +/Contents 533 0 R +>> +endobj +535 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 537 0 R +/Contents 536 0 R +>> +endobj +538 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 540 0 R +/Contents 539 0 R +>> +endobj +541 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 543 0 R +/Contents 542 0 R +>> +endobj +544 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 546 0 R +/Contents 545 0 R +>> +endobj +547 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 549 0 R +/Contents 548 0 R +>> +endobj +551 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 553 0 R +/Contents 552 0 R +>> +endobj +554 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 556 0 R +/Contents 555 0 R +>> +endobj +557 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 559 0 R +/Contents 558 0 R +>> +endobj +560 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 562 0 R +/Contents 561 0 R +>> +endobj +563 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 565 0 R +/Contents 564 0 R +>> +endobj +566 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 568 0 R +/Contents 567 0 R +>> +endobj +570 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 572 0 R +/Contents 571 0 R +>> +endobj +573 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 575 0 R +/Contents 574 0 R +>> +endobj +576 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 578 0 R +/Contents 577 0 R +>> +endobj +579 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 581 0 R +/Contents 580 0 R +>> +endobj +582 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 584 0 R +/Contents 583 0 R +>> +endobj +585 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 587 0 R +/Contents 586 0 R +>> +endobj +589 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 591 0 R +/Contents 590 0 R +>> +endobj +592 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 594 0 R +/Contents 593 0 R +>> +endobj +595 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 597 0 R +/Contents 596 0 R +>> +endobj +598 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 600 0 R +/Contents 599 0 R +>> +endobj +601 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 603 0 R +/Contents 602 0 R +>> +endobj +604 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 606 0 R +/Contents 605 0 R +>> +endobj +609 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 611 0 R +/Contents 610 0 R +>> +endobj +612 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 614 0 R +/Contents 613 0 R +>> +endobj +615 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 617 0 R +/Contents 616 0 R +>> +endobj +9 0 obj +<< +/Type /Pages +/Kids [2 0 R 10 0 R 13 0 R 16 0 R 19 0 R 24 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +31 0 obj +<< +/Type /Pages +/Kids [27 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +50 0 obj +<< +/Type /Pages +/Kids [47 0 R 51 0 R 54 0 R 57 0 R 60 0 R 63 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +69 0 obj +<< +/Type /Pages +/Kids [66 0 R 70 0 R 73 0 R 76 0 R 79 0 R 82 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +88 0 obj +<< +/Type /Pages +/Kids [85 0 R 89 0 R 92 0 R 95 0 R 98 0 R 101 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +107 0 obj +<< +/Type /Pages +/Kids [104 0 R 108 0 R 111 0 R 115 0 R 118 0 R 121 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +30 0 obj +<< +/Type /Pages +/Kids [9 0 R 31 0 R 50 0 R 69 0 R 88 0 R 107 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +128 0 obj +<< +/Type /Pages +/Kids [124 0 R 129 0 R 132 0 R 135 0 R 138 0 R 141 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +148 0 obj +<< +/Type /Pages +/Kids [144 0 R 149 0 R 152 0 R 155 0 R 158 0 R 161 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +167 0 obj +<< +/Type /Pages +/Kids [164 0 R 168 0 R 171 0 R 174 0 R 177 0 R 180 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +186 0 obj +<< +/Type /Pages +/Kids [183 0 R 187 0 R 190 0 R 193 0 R 196 0 R 199 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +205 0 obj +<< +/Type /Pages +/Kids [202 0 R 206 0 R 209 0 R 212 0 R 215 0 R 218 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +224 0 obj +<< +/Type /Pages +/Kids [221 0 R 225 0 R 228 0 R 231 0 R 234 0 R 237 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +147 0 obj +<< +/Type /Pages +/Kids [128 0 R 148 0 R 167 0 R 186 0 R 205 0 R 224 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +243 0 obj +<< +/Type /Pages +/Kids [240 0 R 244 0 R 247 0 R 250 0 R 253 0 R 256 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +263 0 obj +<< +/Type /Pages +/Kids [259 0 R 264 0 R 267 0 R 270 0 R 273 0 R 276 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +282 0 obj +<< +/Type /Pages +/Kids [279 0 R 283 0 R 286 0 R 289 0 R 292 0 R 295 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +301 0 obj +<< +/Type /Pages +/Kids [298 0 R 302 0 R 305 0 R 308 0 R 311 0 R 314 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +320 0 obj +<< +/Type /Pages +/Kids [317 0 R 321 0 R 324 0 R 327 0 R 330 0 R 333 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +339 0 obj +<< +/Type /Pages +/Kids [336 0 R 340 0 R 343 0 R 346 0 R 349 0 R 352 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +262 0 obj +<< +/Type /Pages +/Kids [243 0 R 263 0 R 282 0 R 301 0 R 320 0 R 339 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +358 0 obj +<< +/Type /Pages +/Kids [355 0 R 359 0 R 362 0 R 365 0 R 368 0 R 371 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +378 0 obj +<< +/Type /Pages +/Kids [374 0 R 379 0 R 382 0 R 385 0 R 388 0 R 391 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +397 0 obj +<< +/Type /Pages +/Kids [394 0 R 398 0 R 401 0 R 404 0 R 407 0 R 410 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +416 0 obj +<< +/Type /Pages +/Kids [413 0 R 417 0 R 420 0 R 423 0 R 426 0 R 429 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +435 0 obj +<< +/Type /Pages +/Kids [432 0 R 436 0 R 439 0 R 442 0 R 445 0 R 448 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +454 0 obj +<< +/Type /Pages +/Kids [451 0 R 455 0 R 458 0 R 461 0 R 464 0 R 467 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +377 0 obj +<< +/Type /Pages +/Kids [358 0 R 378 0 R 397 0 R 416 0 R 435 0 R 454 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +473 0 obj +<< +/Type /Pages +/Kids [470 0 R 474 0 R 477 0 R 480 0 R 483 0 R 486 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +493 0 obj +<< +/Type /Pages +/Kids [489 0 R 494 0 R 497 0 R 500 0 R 503 0 R 506 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +512 0 obj +<< +/Type /Pages +/Kids [509 0 R 513 0 R 516 0 R 519 0 R 522 0 R 525 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +531 0 obj +<< +/Type /Pages +/Kids [528 0 R 532 0 R 535 0 R 538 0 R 541 0 R 544 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +550 0 obj +<< +/Type /Pages +/Kids [547 0 R 551 0 R 554 0 R 557 0 R 560 0 R 563 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +569 0 obj +<< +/Type /Pages +/Kids [566 0 R 570 0 R 573 0 R 576 0 R 579 0 R 582 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +492 0 obj +<< +/Type /Pages +/Kids [473 0 R 493 0 R 512 0 R 531 0 R 550 0 R 569 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +588 0 obj +<< +/Type /Pages +/Kids [585 0 R 589 0 R 592 0 R 595 0 R 598 0 R 601 0 R ] +/Count 6 +/Parent 607 0 R +>> +endobj +608 0 obj +<< +/Type /Pages +/Kids [604 0 R 609 0 R 612 0 R 615 0 R ] +/Count 4 +/Parent 607 0 R +>> +endobj +607 0 obj +<< +/Type /Pages +/Kids [588 0 R 608 0 R ] +/Count 10 +/Parent 127 0 R +>> +endobj +127 0 obj +<< +/Type /Pages +/Kids [30 0 R 147 0 R 262 0 R 377 0 R 492 0 R 607 0 R ] +/Count 190 +/MediaBox [0 0 595 842 ] +>> +endobj +619 0 obj +<< +/Type /Catalog +/Pages 127 0 R +>> +endobj +620 0 obj +<< +/CreationDate (D:19960308084243) +/Producer (Acrobat Distiller 2.1 for Windows) +>> +endobj +xref +0 621 +0000000000 65535 f +0000000017 00000 n +0000571688 00000 n +0000000182 00000 n +0000006146 00000 n +0000569634 00000 n +0000569743 00000 n +0000569855 00000 n +0000569962 00000 n +0000589803 00000 n +0000571776 00000 n +0000006287 00000 n +0000006367 00000 n +0000571867 00000 n +0000006445 00000 n +0000012323 00000 n +0000571958 00000 n +0000012465 00000 n +0000012545 00000 n +0000572049 00000 n +0000012623 00000 n +0000016938 00000 n +0000570070 00000 n +0000570156 00000 n +0000572140 00000 n +0000017083 00000 n +0000018122 00000 n +0000572231 00000 n +0000018231 00000 n +0000020401 00000 n +0000590517 00000 n +0000589919 00000 n +0000572323 00000 n +0000020532 00000 n +0000023041 00000 n +0000572415 00000 n +0000023161 00000 n +0000025364 00000 n +0000572507 00000 n +0000025484 00000 n +0000027859 00000 n +0000572599 00000 n +0000027990 00000 n +0000030351 00000 n +0000572691 00000 n +0000030471 00000 n +0000032898 00000 n +0000572783 00000 n +0000033018 00000 n +0000035326 00000 n +0000590037 00000 n +0000572875 00000 n +0000035446 00000 n +0000035526 00000 n +0000572967 00000 n +0000035604 00000 n +0000037142 00000 n +0000573059 00000 n +0000037287 00000 n +0000039940 00000 n +0000573151 00000 n +0000040084 00000 n +0000043082 00000 n +0000573243 00000 n +0000043226 00000 n +0000046127 00000 n +0000573335 00000 n +0000046271 00000 n +0000049097 00000 n +0000590155 00000 n +0000573427 00000 n +0000049241 00000 n +0000052083 00000 n +0000573519 00000 n +0000052227 00000 n +0000055240 00000 n +0000573611 00000 n +0000055384 00000 n +0000058588 00000 n +0000573703 00000 n +0000058732 00000 n +0000061486 00000 n +0000573795 00000 n +0000061630 00000 n +0000064579 00000 n +0000573887 00000 n +0000064723 00000 n +0000067625 00000 n +0000590273 00000 n +0000573979 00000 n +0000067769 00000 n +0000070535 00000 n +0000574071 00000 n +0000070679 00000 n +0000073533 00000 n +0000574163 00000 n +0000073677 00000 n +0000076296 00000 n +0000574255 00000 n +0000076440 00000 n +0000079357 00000 n +0000574348 00000 n +0000079502 00000 n +0000081427 00000 n +0000574443 00000 n +0000081572 00000 n +0000083819 00000 n +0000590392 00000 n +0000574539 00000 n +0000083953 00000 n +0000086633 00000 n +0000574635 00000 n +0000086767 00000 n +0000089555 00000 n +0000570268 00000 n +0000574731 00000 n +0000089714 00000 n +0000092635 00000 n +0000574827 00000 n +0000092780 00000 n +0000095428 00000 n +0000574923 00000 n +0000095573 00000 n +0000097758 00000 n +0000575019 00000 n +0000097903 00000 n +0000100451 00000 n +0000594500 00000 n +0000590637 00000 n +0000575115 00000 n +0000100596 00000 n +0000103211 00000 n +0000575211 00000 n +0000103356 00000 n +0000106573 00000 n +0000575307 00000 n +0000106718 00000 n +0000109338 00000 n +0000575403 00000 n +0000109483 00000 n +0000112092 00000 n +0000575499 00000 n +0000112237 00000 n +0000114496 00000 n +0000575595 00000 n +0000114641 00000 n +0000117661 00000 n +0000591393 00000 n +0000590763 00000 n +0000575691 00000 n +0000117806 00000 n +0000120167 00000 n +0000575787 00000 n +0000120312 00000 n +0000122828 00000 n +0000575883 00000 n +0000122973 00000 n +0000125804 00000 n +0000575979 00000 n +0000125949 00000 n +0000128807 00000 n +0000576075 00000 n +0000128952 00000 n +0000131743 00000 n +0000576171 00000 n +0000131888 00000 n +0000134268 00000 n +0000590889 00000 n +0000576267 00000 n +0000134413 00000 n +0000137243 00000 n +0000576363 00000 n +0000137388 00000 n +0000140303 00000 n +0000576459 00000 n +0000140448 00000 n +0000142967 00000 n +0000576555 00000 n +0000143112 00000 n +0000147040 00000 n +0000576651 00000 n +0000147185 00000 n +0000149886 00000 n +0000576747 00000 n +0000150031 00000 n +0000153798 00000 n +0000591015 00000 n +0000576843 00000 n +0000153943 00000 n +0000157094 00000 n +0000576939 00000 n +0000157239 00000 n +0000160571 00000 n +0000577035 00000 n +0000160716 00000 n +0000163616 00000 n +0000577131 00000 n +0000163761 00000 n +0000166174 00000 n +0000577227 00000 n +0000166319 00000 n +0000169815 00000 n +0000577323 00000 n +0000169960 00000 n +0000173372 00000 n +0000591141 00000 n +0000577419 00000 n +0000173517 00000 n +0000176668 00000 n +0000577515 00000 n +0000176813 00000 n +0000179913 00000 n +0000577611 00000 n +0000180058 00000 n +0000183488 00000 n +0000577707 00000 n +0000183633 00000 n +0000187231 00000 n +0000577803 00000 n +0000187376 00000 n +0000190545 00000 n +0000577899 00000 n +0000190690 00000 n +0000194379 00000 n +0000591267 00000 n +0000577995 00000 n +0000194524 00000 n +0000197963 00000 n +0000578091 00000 n +0000198108 00000 n +0000200597 00000 n +0000578187 00000 n +0000200742 00000 n +0000203729 00000 n +0000578283 00000 n +0000203874 00000 n +0000206936 00000 n +0000578379 00000 n +0000207081 00000 n +0000209503 00000 n +0000578475 00000 n +0000209648 00000 n +0000211733 00000 n +0000591520 00000 n +0000578571 00000 n +0000211878 00000 n +0000214873 00000 n +0000578667 00000 n +0000215018 00000 n +0000217483 00000 n +0000578763 00000 n +0000217628 00000 n +0000220372 00000 n +0000578859 00000 n +0000220531 00000 n +0000222664 00000 n +0000578955 00000 n +0000222809 00000 n +0000225267 00000 n +0000579051 00000 n +0000225412 00000 n +0000228360 00000 n +0000592276 00000 n +0000591646 00000 n +0000579147 00000 n +0000228505 00000 n +0000232178 00000 n +0000579243 00000 n +0000232323 00000 n +0000234977 00000 n +0000579339 00000 n +0000235122 00000 n +0000238480 00000 n +0000579435 00000 n +0000238625 00000 n +0000242047 00000 n +0000579531 00000 n +0000242192 00000 n +0000245347 00000 n +0000579627 00000 n +0000245492 00000 n +0000248053 00000 n +0000591772 00000 n +0000579723 00000 n +0000248198 00000 n +0000250589 00000 n +0000579819 00000 n +0000250734 00000 n +0000253924 00000 n +0000579915 00000 n +0000254069 00000 n +0000257793 00000 n +0000580011 00000 n +0000257938 00000 n +0000262061 00000 n +0000580107 00000 n +0000262206 00000 n +0000265412 00000 n +0000580203 00000 n +0000265557 00000 n +0000267995 00000 n +0000591898 00000 n +0000580299 00000 n +0000268154 00000 n +0000271573 00000 n +0000580395 00000 n +0000271718 00000 n +0000275031 00000 n +0000580491 00000 n +0000275176 00000 n +0000277530 00000 n +0000580587 00000 n +0000277675 00000 n +0000281411 00000 n +0000580683 00000 n +0000281556 00000 n +0000284546 00000 n +0000580779 00000 n +0000284691 00000 n +0000287599 00000 n +0000592024 00000 n +0000580875 00000 n +0000287744 00000 n +0000290218 00000 n +0000580971 00000 n +0000290363 00000 n +0000293578 00000 n +0000581067 00000 n +0000293723 00000 n +0000296718 00000 n +0000581163 00000 n +0000296863 00000 n +0000300147 00000 n +0000581259 00000 n +0000300292 00000 n +0000303126 00000 n +0000581355 00000 n +0000303271 00000 n +0000305637 00000 n +0000592150 00000 n +0000581451 00000 n +0000305782 00000 n +0000308753 00000 n +0000581547 00000 n +0000308898 00000 n +0000311491 00000 n +0000581643 00000 n +0000311636 00000 n +0000314865 00000 n +0000581739 00000 n +0000315010 00000 n +0000318215 00000 n +0000581835 00000 n +0000318360 00000 n +0000321472 00000 n +0000581931 00000 n +0000321617 00000 n +0000324579 00000 n +0000592403 00000 n +0000582027 00000 n +0000324724 00000 n +0000327747 00000 n +0000582123 00000 n +0000327892 00000 n +0000330854 00000 n +0000582219 00000 n +0000330999 00000 n +0000334244 00000 n +0000582315 00000 n +0000334389 00000 n +0000337591 00000 n +0000582411 00000 n +0000337736 00000 n +0000341065 00000 n +0000582507 00000 n +0000341210 00000 n +0000343861 00000 n +0000593159 00000 n +0000592529 00000 n +0000582603 00000 n +0000344006 00000 n +0000346992 00000 n +0000582699 00000 n +0000347137 00000 n +0000349769 00000 n +0000582795 00000 n +0000349914 00000 n +0000353650 00000 n +0000582891 00000 n +0000353795 00000 n +0000356596 00000 n +0000582987 00000 n +0000356741 00000 n +0000359373 00000 n +0000583083 00000 n +0000359518 00000 n +0000362001 00000 n +0000592655 00000 n +0000583179 00000 n +0000362146 00000 n +0000365195 00000 n +0000583275 00000 n +0000365340 00000 n +0000368399 00000 n +0000583371 00000 n +0000368544 00000 n +0000371579 00000 n +0000583467 00000 n +0000371724 00000 n +0000375211 00000 n +0000583563 00000 n +0000375356 00000 n +0000378034 00000 n +0000583659 00000 n +0000378179 00000 n +0000381084 00000 n +0000592781 00000 n +0000583755 00000 n +0000381229 00000 n +0000384129 00000 n +0000583851 00000 n +0000384274 00000 n +0000387623 00000 n +0000583947 00000 n +0000387768 00000 n +0000390218 00000 n +0000584043 00000 n +0000390363 00000 n +0000393740 00000 n +0000584139 00000 n +0000393885 00000 n +0000396469 00000 n +0000584235 00000 n +0000396614 00000 n +0000399810 00000 n +0000592907 00000 n +0000584331 00000 n +0000399955 00000 n +0000402957 00000 n +0000584427 00000 n +0000403102 00000 n +0000406449 00000 n +0000584523 00000 n +0000406594 00000 n +0000410037 00000 n +0000584619 00000 n +0000410196 00000 n +0000413048 00000 n +0000584715 00000 n +0000413193 00000 n +0000415753 00000 n +0000584811 00000 n +0000415898 00000 n +0000418884 00000 n +0000593033 00000 n +0000584907 00000 n +0000419029 00000 n +0000422238 00000 n +0000585003 00000 n +0000422383 00000 n +0000425304 00000 n +0000585099 00000 n +0000425449 00000 n +0000428337 00000 n +0000585195 00000 n +0000428482 00000 n +0000431702 00000 n +0000585291 00000 n +0000431847 00000 n +0000435013 00000 n +0000585387 00000 n +0000435158 00000 n +0000438241 00000 n +0000593286 00000 n +0000585483 00000 n +0000438386 00000 n +0000441828 00000 n +0000585579 00000 n +0000441973 00000 n +0000445769 00000 n +0000585675 00000 n +0000445928 00000 n +0000449257 00000 n +0000585771 00000 n +0000449402 00000 n +0000452475 00000 n +0000585867 00000 n +0000452620 00000 n +0000455924 00000 n +0000585963 00000 n +0000456069 00000 n +0000459269 00000 n +0000594042 00000 n +0000593412 00000 n +0000586059 00000 n +0000459414 00000 n +0000462280 00000 n +0000586155 00000 n +0000462425 00000 n +0000465316 00000 n +0000586251 00000 n +0000465461 00000 n +0000468456 00000 n +0000586347 00000 n +0000468601 00000 n +0000471279 00000 n +0000586443 00000 n +0000471424 00000 n +0000473924 00000 n +0000586539 00000 n +0000474069 00000 n +0000476963 00000 n +0000593538 00000 n +0000586635 00000 n +0000477108 00000 n +0000480191 00000 n +0000586731 00000 n +0000480336 00000 n +0000483221 00000 n +0000586827 00000 n +0000483380 00000 n +0000486160 00000 n +0000586923 00000 n +0000486305 00000 n +0000489343 00000 n +0000587019 00000 n +0000489488 00000 n +0000491373 00000 n +0000587115 00000 n +0000491507 00000 n +0000494484 00000 n +0000593664 00000 n +0000587211 00000 n +0000494629 00000 n +0000498116 00000 n +0000587307 00000 n +0000498261 00000 n +0000501635 00000 n +0000587403 00000 n +0000501780 00000 n +0000504959 00000 n +0000587499 00000 n +0000505104 00000 n +0000507949 00000 n +0000587595 00000 n +0000508094 00000 n +0000511798 00000 n +0000587691 00000 n +0000511943 00000 n +0000516211 00000 n +0000593790 00000 n +0000587787 00000 n +0000516356 00000 n +0000520020 00000 n +0000587883 00000 n +0000520165 00000 n +0000522947 00000 n +0000587979 00000 n +0000523092 00000 n +0000525832 00000 n +0000588075 00000 n +0000525977 00000 n +0000529491 00000 n +0000588171 00000 n +0000529636 00000 n +0000533934 00000 n +0000588267 00000 n +0000534079 00000 n +0000535813 00000 n +0000593916 00000 n +0000588363 00000 n +0000535958 00000 n +0000539298 00000 n +0000588459 00000 n +0000539443 00000 n +0000542778 00000 n +0000588555 00000 n +0000542923 00000 n +0000545267 00000 n +0000588651 00000 n +0000545412 00000 n +0000547755 00000 n +0000588747 00000 n +0000547900 00000 n +0000551484 00000 n +0000588843 00000 n +0000551629 00000 n +0000553880 00000 n +0000594169 00000 n +0000588939 00000 n +0000554025 00000 n +0000556215 00000 n +0000589035 00000 n +0000556349 00000 n +0000558293 00000 n +0000589131 00000 n +0000558414 00000 n +0000561752 00000 n +0000589227 00000 n +0000561897 00000 n +0000564496 00000 n +0000589323 00000 n +0000564641 00000 n +0000567379 00000 n +0000589419 00000 n +0000567524 00000 n +0000567605 00000 n +0000594405 00000 n +0000594295 00000 n +0000589515 00000 n +0000567684 00000 n +0000567765 00000 n +0000589611 00000 n +0000567844 00000 n +0000569043 00000 n +0000589707 00000 n +0000569164 00000 n +0000569524 00000 n +0000570385 00000 n +0000594636 00000 n +0000594695 00000 n +trailer +<< +/Size 621 +/Root 619 0 R +/Info 620 0 R +/ID [<3d40f33acbcb0675a828d2c1b7e7953c><3d40f33acbcb0675a828d2c1b7e7953c>] +>> +startxref +594803 +%%EOF Added: trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v2.pdf URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/media/doc/Standard_ECMA-234…
============================================================================== --- trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v2.pdf (added) +++ trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v2.pdf Fri Apr 14 14:48:46 2006 @@ -1,0 +1,5111 @@ +%PDF-1.1 +%âãÏÓ +1 0 obj +[/CalRGB +<< +/WhitePoint [0.9505 1 1.089] +/Gamma [1.8 1.8 1.8] +/Matrix [0.4497 0.2446 0.02518 0.3163 0.672 0.1412 0.1845 0.08334 0.9227] +>> +] +endobj +3 0 obj +<< +/Length 5876 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4d0PAÄÆcq°¸j61trmEJ)HÏ)af9iPï- +gAHÐPa7'# C&ÏEhÈf4J¨ ä\9EbµjÀh8FDqÅXq*JQQRh +ÄlÜ9"LfSh¦(1NPÈäkQ©Á°0PÖñÙêðV:= âh²6X³9¼îC±æ Úð(m$Dôbë î Õý¶|h.ft;î0¸gÉÉ"\]w!ãìz̾¤kÝÛñÇ=þCñ÷:~~¿«KÕáìÑÑã·Ùô÷ ý_0?M«úÿ¬.#nж¨âÂàÀíl°«k,öÂâ ³«ôçºÂƼ®c°ÁðûDm¤L¾Ð¬éáªHÄAª¬ÙFN[¬Ï´bqC@Ã2+±ütûµqôs3îüq»p˾Ö3èìiÀ.ÛôúÃê³{/>/J!µË`Lò«s·sD'N0ë'4ïxjã¸ó»óý"PìíBNûÇÆq«é)̰:ÊÔ%$äIÏÕKQòE%Òô£"нp½&Ì õG².<ÁD½#Ö*ÈïÔU9[£Ñ«ÅT;é4%>SÖQ9²64ìÚSÈìÏ¡Å7KlÌ7Lv´TÛ»ðHpÝÃå{QÙÝqT8{¹[2O3?$UD×Õ¯D$ÇÞ7²K+VÙÐhAÊ*̼±EüÔa SLÕ4,RÈQzÂäÛ÷Õúý]vÛÓãßi4AÅÎêeNEåÎe5µMÇ^Kìäõ%<ãâCáèL²ybÙTNhn«]Ãß§¹ÎÃp #üÔÚ¦µjî<ǧD ¬ì°RKkOú;wZûîjp«ÒÐÈ:ò]Ívã¨IÉk¥Ëõ?££îFO¡Cîþ#çÑ^44\(_±Paõepl÷íOÏËy¬µ¿¬7Ö[xÔYÆÒÝmÄèìo±ñÞnh°wóìm檷.ù/ßiv\bãøxßìxW´5ÎnÃíÞàÉ83góPú!ÜßÍWáópÝòyªóSz/Aç:§¤]+rEmÁ-@¹Zqú§% )²~1DM&i067oy¸ÖøiÚñôGǹ¯(£þB1kdq/µ5º|+NÇ Á×ffI#ýZÈ&G\³Zm)5&¼ÆØÝE QA3gRÖJãP,3¬×Ë ÚIea#¬õ[`L_6lV}9-(ÈzÂaêi`.6jÕâÃeáÀ¸öÅlrwL¦72¬ÄK$cÌÂDÀà¿©ÔµIvÃëðRZF@×ó&ˤȢN0È$ãzN såݨêIBñBhÐ]î3[$ROòü«/$ÀÍ4ª¦§æì^$άäÁ9¦{Ì,WPr +l¡ru&ËåG-æb1>îdÂJZ4Êd,åòzVN礧Ý,éj«?O&8¼'\_*Ъµ^ãè+/I^MÊÊ% 0rª¡iÌBµ^<è'jÑ jJ´~,VdÒo e 1BæAU;Ùk9¥ÑÑQøà¯,.½z¼:fâIôîm1ÙuQÌø¨ðB)©YR d£¦Õ²ºOûªé-%K +F%¥CbrõèS¤ +&%¥s^Ò 2)Õn|3BKyQëµl¨gJ´W +\I)Ç¥´n²Tvdçç%%XÑÉת@GÆÅKÄcS¨ý2&îMI\åÔ>dõ #\8 Ä Û)7i;Ö!¨û[wlmzÉ£-}È·êÎ6µ».}Ñ··&L2B'uîÍ¼ÖøÚkºÚíº[¼7Jòf8´Ó9½wnéÒy +úÉó¼w&2ó~.Ár¸÷Òößj/Õä´×õIÜ6·nLm!.Ï_Vf¹låÅÀWBñ`¤ùI»¹Øní_¼-B"À6·^ËM ãö*¸D2ÜS>ñ¦Æ®8û.G1.S½Q?Kå0íÉÇe#b»up%¦&IE¾+ó1sb_8ôîã´½Q.VÉØ`\¦$¾È&úætËsP̶/J¼'²~A¹9Õ'\¼ÊUv\Ï!EêqþyÍCKÍsÕ¿Iþô*Lñv¨&çKi ôÓHIzwêlÞu&XÊ'M£ ó +Õ1êý=¦dIÖÚ@Mýwª³³}ª_éVW!¨41û^.ÍB6~·Øû:=m§µ¶ÖØËdHE×¼:ûéM¸aèÜÙ_cl Q·çÛvÀnKºöîùoëÍöZNþ`øp礩*àÛ·noôÁÂôV¸Wj|®Dǯ8ñà±_D[Ñ-8é3|lír.ù¼¦Ã:¾vç;\¿^qäÆé5ål¹ñ»Wʵ7jÖó éÐQ èºñA5CQÒúÒGÍR?(ÞÂ:k»êØæ}OW¼½ț./:ä+k´tÈÖ_aí)%vÛ¬³m>Ú±þó8&ómpËJ<oǧ'áxQñJ}øÒòÃÞ ´B2oòAvÁXü·Äëi0'ÿLt)§©ò9Î÷iæõl¡ÌÿH̼÷ë¿{»Ñì¼åõøé-ü=?Ìpô>_åéÏKÞÇÁ8#Üü¯a¨þ¿ªìi¿à·¹ñ.§¶t;}v¿>ý?F ~Ï%W> +cúóCÊÜ ïú3,&÷Ï.aõÐêfHËÿæ£kOøðPâË+N¢LþÌçÆ¸f2Ê+i-Ü.ðo#2mï@L¬þhèzÐ<ÁFðû&»oif»o;Hzb0pÈP`#¦#gAg+A(zTPx·ðk#§ ë ÅY +/Æ;Fʯ˯I ÇÁNýTÌ0¿ðêd®>Ð PÞ �ÜQro÷FñðQ¥² D9 +Ño5ñüq"qÐüï± PÇïÆL(q>P0ðü12ïÑ"±OèË1 õs)µâAðIqïÀ5¹Í1kqÕYDâêkPà°ðÝñÿQ°øÃ �;è×ñÜï±â:,1-?¨p\±ËgÓHx}1høwr÷±ÞÅÿÒìs!/²°[ñ[!ò*\r!HõR Ú±²(5#a = 1õ²G! L%N-±»$^¯æÿQ$ÂÅ 0r²/!¬£'£ÝR[^gq �ø Ä2e(¯ñ+mÁ|C ¯1û*ó+2Êò²»*¯ÈoCo*ò%2ÐeÒ*'g,ãRr2ò8B»/22m,Oø~81lå"RÆó ]2úÓ1Ì3o·-¬X# ~W42p-ò1S*q5ÌE!R|³,ÕÒÅÌDêh72qèï31Ó4s"Âr©4ó8Ó2cT6±7H«9ÓD#T$Ó¦&ÓY%Ó°4w#.Õ<R<%ÆÆSî!SzÊ+9;?4ËJcf"rFUésÊÈsó>Rc61³?ð¡=ìç>#R.SpÇ(EArAAB83ï´B²;í>}fæ,ÓÇT2ÔA Ô<='D1kDtSDÅcD»ôY$´´OCQ3®PL´\rÔattÿyCQ/C\M´58Tça.,sITaÓú¼´JsW9tlbÄkteIÆíEÈFAloKK~ÆçLÀÒñZ3tÆøôªH)ömOF«MÃÒl´¾oËEÅmK³K@MòüÊ4ðmQ¯LÔNt»ÎuK¯áHq[PÕ7"ÁSÚ@¯Kç¥KkNËËS´óEUíïTgTÈYuÓèv?2U\@1RÔEUO;ÕUµyTãVu_õ7KuBQVH3YT]Y3çV,\mãþ`S«T>Cõ?Zi%Nõ&5»Y§EÆø µZuÌܵmQÈI.Û£çCu~CÒ´¿Oè+]æYÒ§Cé`®øð#½=T_i\5KIÕg_hGVt]_òÙZL¢¶inï©Ícp[\¶'/ßbÔ©dUòvt\P@lt¾hgeva0Îv5e¯ ]öY5×c4_g;J(og¹\´JöC¶'¶^vPÕJ=25g¶mgï×T¤ vqR¶jÁUãjëkV¦#i°õ]VÌöåV¶I6[BìsmVãVÞ?æ>ÊÆv¶|£¸$Çj"Ì>OÓp.Åo·\w o=,?qvÝpÂ8;6ôîïÅkeª; EjwóÈIs#sÍ5t/rCqr¢»s£þ,z×T=-ê!7]t7VÍ÷gt¤Þ7'vñ3kwkd.ûZÂ8åÛwú7©këKxWK7FèFë±Oy»n× nñqWõ#'x·{z÷¹N´fäN´Ù V·D+·÷·}t×yðHu|jE~s·Õ +w§|§z׿9tËx7ýlv}#ÿÖѦ@>Q {×Ðøj̦ï~7;5VÆa7hõ#å$·ûÒK4øniupJ©lcWX´ødô϶[87A®W£Ó1!DÄnsØnux tã8u}~XyAXø¥uÝâd#O¦o¥zÄÌEWúA&ûxs¸¾o°å}«Ê@(GOÑv¥ã!8ëa·ôs|xÕ[6½ ;&ûHXä#y_ìAxû^VÓ¶Iù!÷Wøúõ¸CmÙ.F6§->p&·ðÂxóÇpÑOëËNx÷ÙH-¶ø¢ä3zùbG8ïÙxÕï¢ÂÆ÷&ØÛ +ùÖ£ç(¹ +ÀÂeY·¬ËäqùÄwkM¹DÅË>M·.w¹Ô5- ÷Ùåy²ª'J<fã-Ïù:ÉëcrPÇ:¢:h¹ #-@ùYÞÊ&®C)¥Äp³I颩7úS㤧:¦8ãZ8dm¯0¸÷YG§ti0×z@§:6xÉɹ§Zcµ¢.Ϻf« }©ä¿¢.@¥3eRoº¬w5¢Z´£ù½¬ë½nZÃvs¨×Ñ£$>KY%¦Òq9g§öq9o£d2ZrÛ¹°±§Ù˯ àtFÎzúª[¤`q6½§[7íJq9±³óm cE¨:°âݵ%»¬zûcµ·³ +«W''E+»OmÛpùñÚæR°N6¶ù¸$BÂ{w®j1¹mñ¹&,ìn2Õ¹òDÞW.K»s?¹Ë%¸¦elźë@ûÇ»{ÊÉ»¼i]Û×wºxEp¼D»Ñ¾ÂâѾª²Ëñ¾þà»nÛ¤öÙá¿*²D®-j(vç:£©Á¼ +:üG<%=Ã.ØâûÉÃìÏÛEd8æÈãðÑûxE{öt¥ÅRö=Z«.ÆRtyJ,\jG.*·rsù[ÇJrîØçûØWi^ô#Gêη¼èºÄsîν[Èv¡£zXç7u;ÈN_²úI£^ ù?7çZñÍk,{_ÄfÜ,d×Zd~çÜ7¤ +ÍÎp\¼¢ÿè° @|û MñÏX°-ðJû¡©¼fW 2Oå§ÍizÝ7ûRÚ=?mÝ2"}GÑ]J]Orý2b=W¶Ôæ#Õ÷{Ó%EÖy'Ó§×ÑÓ#§×k×çØtC-صµ-Ù " B Ï@!i U˾"Ê6,E:1Ì-"`£cì-Â`@d$l't(B ô Üà@/¾ �Â~Ò àÝÞ£bñݾ Þà@`ßßàb ÀÒ`Ãà^ á~ �Fnù=¤ Å=¬aâÄ+BCÛî+ÔyÜÖýÈ@P + +ÕÚ`Ä>rFĤ, +Ü%Eè¢äeÝ"ïß �À@$ h*ÀR rûí~Ú.}ê)´H ¢¥åb ç¢Ã¼¾¯ë>¦bf PÀÂéÞ¡ê^úM#ë]Ð-ârÇì¢íÕíÜ"àéîe:'Þïå^¡ï!.ì%_- è¢r + ¤ ÖÀQéóñ¢êd>'è~½ëâÞ.]Î!bíòàÑíjvyîí}Î ÿ¥÷µú Çú^/ Z~?Ëü?¡üâá¿ôÏîß÷ð1>l +`h(b3"#!Ç- &ã ¤p(2Fâ¤j(7 +Fr) ¢?! +K¥BT^F@ `PÖ7â( Äo£!Þ4(¦ÃÊsF#A®·]+c)Ã^6ÙkÆHÄP.ÈmÊñ¢i6Jqü];G"áÈÈ@3 à [°s0ªýÁGá¥;Çd2B¦[0 +!_ASt~ÇÃáã,}üiÇÙÝPÛ¥¡åJ(PA8 èi7¼Îr0M¦qRT5p«JIR#ȧ#1Æeç!_¼d7ë^+ÛX¿±d§mDz,LÊL»3[:ÀÌ\ÒAm<ÔµiÀÄ6 ðd 7Aqaº¦ 2ä +ÃxØ:¯dð¼hCs(xc"6í´ZÁ³Ì{ Ê1º.$Èò9½l´öÎr³ ¼\³,h¦1¤q)J³¨¡ ¡æ9Τê +c«ú �Kâ +endstream +endobj +4 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F4 6 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +11 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +12 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +14 0 obj +<< +/Length 5802 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4d0PAÄÆcq°¸j61trmEJ)HÏ)af9iPï- +gAHÐPa7'# C&ÏEhÈf4J¨ ä\9EbµjÀh8FDqÅXq*JQQRh +ÄlÜ9"LfSh¦(1NPÈäkQ©Á°0PÖñÙêðV:= âh²6X³9¼îC±æ Úð(m$Dôbë î Õý¶|h.ft;î0¸gÉÉ"\]w!ãìz̾¤kÝÛñÇ=þCñ÷:~~¿«KÕáìÑÑã·Ùô÷ ý_0?M«úÿ¬.#nж¨âÂàÀíl°«k,öÂâ ³«ôçºÂƼ®c°ÁðûDm¤L¾Ð¬éáªHÄAª¬ÙFN[¬Ï´bqC@Ã2+±ütûµqôs3îüq»p˾Ö3èìiÀ.ÛôúÃê³{/>/J!µË`Lò«s·sD'N0ë'4ïxjã¸ó»óý"PìíBNûÇÆq«é)̰:ÊÔ%$äIÏÕKQòE%Òô£"нp½&Ì õG².<ÁD½#Ö*ÈïÔU9[£Ñ«ÅT;é4%>SÖQ9²64ìÚSÈìÏ¡Å7KlÌ7Lv´TÛ»ðHpÝÃå{QÙÝqT8{¹[2O3?$UD×Õ¯D$ÇÞ7²K+VÙÐhAÊ*̼±EüÔa SLÕ4,RÈQzÂäÛ÷Õúý]vÛÓãßi4AÅÎêeNEåÎe5µMÇ^Kìäõ%<ãâCáèL²ybÙTNhn«]Ãß§¹ÎÃp #üÔÚ¦µjî<ǧD ¬ì°RKkOú;wZûîjp«ÒÐÈ:ò]Ívã¨IÉk¥Ëõ?££îFO¡Cîþ#çÑ^44\(_±Paõepl÷íOÏËy¬µ¿¬7Ö[xÔYÆÒÝmÄèìo±ñÞnh°wóìm檷.ù/ßiv\bãøxßìxW´5ÎnÃíÞàÉ83góPú!ÜßÍWáópÝòyªóSz/Aç:§¤]+rEmÁ-@¹Zqú§% )²~1DM&i067oy¸ÖøiÚñôGǹ¯(£þB1kdq/µ5º|+NÇ Á×ffI#ýZÈ&G\³Zm)5&¼ÆØÝE QA3gRÖJãP,3¬×Ë ÚIea#¬õ[`L_6lV}9-(ÈzÂaêi`.6jÕâÃeáÀ¸öÅlrwL¦72¬ÄK$cÌÂDÀà¿©ÔµIvÃëðRZF@×ó&ˤȢN0È$ãzN såݨêIBñBhÐ]î3[$ROòü«/$ÀÍ4ª¦§æì^$άäÁ9¦{Ì,WPr +l¡ru&ËåG-æb1>îdÂJZ4Êd,åòzVN礧Ý,éj«?O&8¼'\_*Ъµ^ãè+/I^MÊÊ% 0rª¡iÌBµ^<è'jÑ jJ´~,VdÒo e 1BæAU;Ùk9¥ÑÑQøà¯,.½z¼:fâIôîm1ÙuQÌø¨ðB)©YR d£¦Õ²ºOûªé-%K +F%¥CbrõèS¤ +&%¥s^Ò 2)Õn|3BKyQëµl¨gJ´W +\I)Ç¥´n²Tvdçç%%XÑÉת@GÆÅKÄcS¨ý2&îMI\åÔ>dõ #\8 Ä Û)7i;Ö!¨û[wlmzÉ£-}È·êÎ6µ».}Ñ··&L2B'uîÍ¼ÖøÚkºÚíº[¼7Jòf8´Ó9½wnéÒy +úÉó¼w&2ó~.Ár¸÷Òößj/Õä´×õIÜ6·nLm!.Ï_Vf¹låÅÀWBñ`¤ùI»¹Øní_¼-B"À6·^ËM ãö*¸D2ÜS>ñ¦Æ®8û.G1.S½Q?Kå0íÉÇe#b»up%¦&IE¾+ó1sb_8ôîã´½Q.VÉØ`\¦$¾È&úætËsP̶/J¼'²~A¹9Õ'\¼ÊUv\Ï!EêqþyÍCKÍsÕ¿Iþô*Lñv¨&çKi ôÓHIzwêlÞu&XÊ'M£ ó +Õ1êý=¦dIÖÚ@Mýwª³³}ª_éVW!¨41û^.ÍB6~·Øû:=m§µ¶ÖØËdHE×¼:ûéM¸aèÜÙ_cl Q·çÛvÀnKºöîùoëÍöZNþ`øp礩*àÛ·noôÁÂôV¸Wj|®Dǯ8ñà±_D[Ñ-8é3|lír.ù¼¦Ã:¾vç;\¿^qäÆé5ål¹ñ»Wʵ7jÖó éÐQ èºñA5CQÒúÒGÍR?(ÞÂ:k»êØæ}OW¼½ț./:ä+k´tÈÖ_aí)%vÛ¬³m>Ú±þó8&ómpËJ<oǧ'áxQñJ}øÒòÃÞ ´B2oòAvÁXü·Äëi0'ÿLt)§©ò9Î÷iæõl¡ÌÿH̼÷ë¿{»Ñì¼åõøé-ü=?Ìpô>_åéÏKÞÇÁ8#Üü¯a¨þ¿ªìi¿à·¹ñ.§¶t;}v¿>ý?F ~Ï%W> +cúóCÊÜ ïú3,&÷Ï.aõÐêfHËÿæ£kOøðPâË+N¢LþÌçÆ¸f2Ê+i-Ü.ðo#2mï@L¬þhèzÐ<ÁFðû&»oif»o;Hzb0pÈP`#¦#gAg+A(zTPx·ðk#§ ë ÅY +/Æ;Fʯ˯I ÇÁNýTÌ0¿ðêd®>Ð PÞ �ÜQro÷FñðQ¥² D9 +Ño5ñüq"qÐüï± PÇïÆL(q>P0ðü12ïÑ"±OèË1 õs)µâAðIqïÀ5¹Í1kqÕYDâêkPà°ðÝñÿQ°øÃ �;è×ñÜï±â:,1-?¨p\±ËgÓHx}1høwr÷±ÞÅÿÒìs!/²°[ñ[!ò*\r!HõR Ú±²(5#a = 1õ²G! L%N-±»$^¯æÿQ$ÂÅ 0r²/!¬£'£ÝR[^gq �ø Ä2e(¯ñ+mÁ|C ¯1û*ó+2Êò²»*¯ÈoCo*ò%2ÐeÒ*'g,ãRr2ò8B»/22m,Oø~81lå"RÆó ]2úÓ1Ì3o·-¬X# ~W42p-ò1S*q5ÌE!R|³,ÕÒÅÌDêh72qèï31Ó4s"Âr©4ó8Ó2cT6±7H«9ÓD#T$Ó¦&ÓY%Ó°4w#.Õ<R<%ÆÆSî!SzÊ+9;?4ËJcf"rFUésÊÈsó>Rc61³?ð¡=ìç>#R.SpÇ(EArAAB83ï´B²;í>}fæ,ÓÇT2ÔA Ô<='D1kDtSDÅcD»ôY$´´OCQ3®PL´\rÔattÿyCQ/C\M´58Tça.,sITaÓú¼´JsW9tlbÄkteIÆíEÈFAloKK~ÆçLÀÒñZ3tÆøôªH)ömOF«MÃÒl´¾oËEÅmK³K@MòüÊ4ðmQ¯LÔNt»ÎuK¯áHq[PÕ7"ÁSÚ@¯Kç¥KkNËËS´óEUíïTgTÈYuÓèv?2U\@1RÔEUO;ÕUµyTãVu_õ7KuBQVH3YT]Y3çV,\mãþ`S«T>Cõ?Zi%Nõ&5»Y§EÆø µZuÌܵmQÈI.Û£çCu~CÒ´¿Oè+]æYÒ§Cé`®øð#½=T_i\5KIÕg_hGVt]_òÙZL¢¶inï©Ícp[\¶'/ßbÔ©dUòvt\P@lt¾hgeva0Îv5e¯ ]öY5×c4_g;J(og¹\´JöC¶'¶^vPÕJ=25g¶mgï×T¤ vqR¶jÁUãjëkV¦#i°õ]VÌöåV¶I6[BìsmVãVÞ?æ>ÊÆv¶|£¸$Çj"Ì>OÓp.Åo·\w o=,?qvÝpÂ8;6ôîïÅkeª; EjwóÈIs#sÍ5t/rCqr¢»s£þ,z×T=-ê!7]t7VÍ÷gt¤Þ7'vñ3kwkd.ûZÂ8åÛwú7©këKxWK7FèFë±Oy»n× nñqWõ#'x·{z÷¹N´fäN´Ù V·D+·÷·}t×yðHu|jE~s·Õ +w§|§z׿9tËx7ýlv}#ÿÖѦ@>Q {×Ðøj̦ï~7;5VÆa7hõ#å$·ûÒK4øniupJ©lcWX´ødô϶[87A®W£Ó1!DÄnsØnux tã8u}~XyAXø¥uÝâd#O¦o¥zÄÌEWúA&ûxs¸¾o°å}«Ê@(GOÑv¥ã!8ëa·ôs|xÕ[6½ ;&ûHXä#y_ìAxû^VÓ¶Iù!÷Wøúõ¸CmÙ.F6§->p&·ðÂxóÇpÑOëËNx÷ÙH-¶ø¢ä3zùbG8ïÙxÕï¢ÂÆ÷&ØÛ +ùÖ£ç(¹ +ÀÂeY·¬ËäqùÄwkM¹DÅË>M·.w¹Ô5- ÷Ùåy²ª'J<fã-Ïù:ÉëcrPÇ:¢:h¹ #-@ùYÞÊ&®C)¥Äp³I颩7úS㤧:¦8ãZ8dm¯0¸÷YG§ti0×z@§:6xÉɹ§Zcµ¢.Ϻf« }©ä¿¢.@¥3eRoº¬w5¢Z´£ù½¬ë½nZÃvs¨×Ñ£$>KY%¦Òq9g§öq9o£d2ZrÛ¹°±§Ù˯ àtFÎzúª[¤`q6½§[7íJq9±³óm cE¨:°âݵ%»¬zûcµ·³ +«W''E+»OmÛpùñÚæR°N6¶ù¸$BÂ{w®j1¹mñ¹&,ìn2Õ¹òDÞW.K»s?¹Ë%¸¦elźë@ûÇ»{ÊÉ»¼i]Û×wºxEp¼D»Ñ¾ÂâѾª²Ëñ¾þà»nÛ¤öÙá¿*²D®-j(vç:£©Á¼ +:üG<%=Ã.ØâûÉÃìÏÛEd8æÈãðÑûxE{öt¥ÅRö=Z«.ÆRtyJ,\jG.*·rsù[ÇJrîØçûØWi^ô#Gêη¼èºÄsîν[Èv¡£zXç7u;ÈN_²úI£^ ù?7çZñÍk,{_ÄfÜ,d×Zd~çÜ7¤ +ÍÎp\¼¢ÿè° @|û MñÏX°-ðJû¡©¼fW 2Oå§ÍizÝ7ûRÚ=?mÝ2"}GÑ]J]Orý2b=W¶Ôæ#Õ÷{Ó%EÖy'Ó§×ÑÓ#§×k×çØtC-صµ-Ù " B Ï@!i U˾"Ê6,E:1Ì-"`£cì-Â`@d$l't(B ô Üà@/¾ �Â~Ò àÝÞ£bñݾ Þà@`ßßàb ÀÒ`Ãà^ á~ �Fnù=¤ Å=¬aâÄ+BCÛî+ÔyÜÖýÈ@P + +ÕÚ`Ä>rFĤ, +Ü%Eè¢äeÝ"ïß �À@$ h*ÀR rûí~Ú.}ê)´H ¢¥åb ç¢Ã¼¾¯ë>¦bf PÀÂéÞ¡ê^úM#ë]Ð-ârÇì¢íÕíÜ"àéîe:'Þïå^¡ï!.ì%_- è¢r + ¤ ÖÀQéóñ¢êd>'è~½ëâÞ.]Î!bíòàÑíjvyîí}Î ÿ¥÷µú Çú^/ Z~?Ëü?¡üâá¿ôÏîß÷ð1>l +`h(b3"#!Ç- &ã ¤p(2Fâ¤j(7 +Fr) ¢?! +K¥BT^F@ `PÖ7â( Äo£!Þ4(¦ÃÊsF#A®·]+c)Ã^6ÙkÆHÄP.ÈmÊñ¢i6ÎáðùØÖ8§áCqÛKaÊT<©P +äÁ\- ¥a¸O!åò㸴`3gc¨°j4 Pr)R2ݧcL¸k3ã Q¼°s0«s»Þð¼]ÆäDç|Îw@Bܧ4èsǾ\}ÐÒÇ z£N9S¥dÈ'Ø4cè4ãp@(CxÎ9#hÚ4Ã;fÚ¿Jâ(¤&(ä3#ÊÃxä +ðÈ7êÓhÛ<mÓ>Þ!À\á;Óî¹ SèÆ �pn¸n+9qô +endstream +endobj +15 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F4 6 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +17 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +18 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +20 0 obj +<< +/Length 4235 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4b1RCq¸¸f2 ÆCapäm6Á"¥C¨@gDFr¡-DF8YÞ[F)R- A¤æt7"éPH!PÈ æK'ÅkÒa �nmrÆ³Ùø ¨h2%I\@S:MÆC ÈÈ §"1ÔÜc:Mæã °@s8Lf1¤ÆaÌæÄó0étÇ#yÏXtQé"¹§o;÷4Uº¥NfQ7p÷g ¡äa6wÆ~+|t2Æ]ÝwFGØb0̦J¥Z]HG²$ºjÿ'ÀRÕ£ÂÌÎàÒ6¹(Ú2ÌKR78BãÚ˨Èí¶-jÛ²L[V×¼#¸Ä,xÄ2ìÍO:þÀã{:Õµ£º;{"Ð4M# ² ô+|À½Sê«B T®iÚ» ^Ú Ð|"È:#¸ÐÓ ÐR* JÀ¡(Z¹ÂÜ +êðº!øÌÑ5+Sr@ÎÉ\°å9 áGCHèð:2<|á>70#¸Ò63ÑX@8*,HÄ602;:ÏApl½ QñÃ\Ø0l+ılhÈLóJ5ͪàüP©äNJu<Ëí{@X3z!b¢Ó«ý,DÀñ<NèÔP1°{^Ú£8ÐÕ´.Å1sê ï(æùHÃxAÀÆ:C Ü^ ê:`êùA8ù¸Mó$×Ac(Ø<²ÆÍ×ýiÐÓ Jbý+p +Z°ØXË#6þ@61C8ê0ìÄßCpHYÍT3Ãß »£ÈÌÞÏDöB«E¯[fX¿&¹nkO ¸Rz+Ë\ÙDJÔÙ=õAgØ{`]·dOËö Ñ2ºb!ºùlØÌ¨uõK³õÅã]¡u£á¨ëW¾sgòUÓ?ÔCÉ5¶0öhÚF¼Ýéj|8öUµE^ç³{N¾Ök.Õ(Êvª»dü' SÍûÁrï8Ö±LËG5M{Q¢²Ô %uú=xÈA¶Ü:9sͰ#zÖ¥ªZ¸Zt"ëªMr PZÿL*©@ÐlFÖªv'D¤¸"ðHûÇn¡ tÁ@tå. Á`Zû¿°½ÀðÊ×@$æÊ+1ìIl®õrc5t&87eB·j sª¨1ºÀÅÚ)EuÐ"´ZÊWÄTü2FLˬ.l #7BðtI$Ò©Ãdϸw1³>EFuN¹ÙC|ð6ªõ" 8¡Å°ÓضOd0±¸ö;ÃØuRc4æy²(ÖΣÝüT"¡k'ô\àhTe@ Ð ÜI-¾ZiÃagç4̲ôdl!³%ë 83^üܹè;ëèöÐÂ|2Æ`è#tÀºCiÙµó&ïÁ 4#Ͳ·è^ä¹MÍ �æ¤'oòUE80hÊKìt[¡v_ÙKÂE9ÊÏ*Ú«u¢O(ìËØq¢eáÌÆ±úd¢-CÌ<ôM³ PjDÛX-åÜ fá¤Ô,ÊÕ¼B:KIÛìp3dJbâq¡¥*÷ÎkJ!qC# /¦ Á¬¨¥#$g`Q%£#ÁÔªc8I )U&Â@£³Âf{_¡ç±$³µ'ÐK½wéHG%¦ë,ÙJH¤}Ù\h(i¸_i0Ñ÷¿×Á«:+ѵ§µ/ÐÊLؤ^ü¢>Zf¿ ýSª³Ög"$ ³¦GHÓÖ²¡ §ÁÄÈÐ7´Q Þe2úz1±êé^dC4amJ¥QXÏ <:0Ó(ãýlkð¼7Ñ!¦qè.º2ú©{]3Ӭẽ¼Û`!eÌ06ró6CÐ)ØAÆ*câZܨ´90Cz$a´R8Öx©x@º+B±_éi§åÈÆvcã"KÑ4øig"NqeÔ +y¾Äªðshmir%0ÁÊÈpÀ7ªà²èKÌ.ÚµÞÕ5¶kçÍI[ÙÔ&´Y§âlI»m-ÄõöØÝȦNû³7fTËÚÉìR¹»\;Ú`nC¹dÖ£&iUC`ªlÀ°Vfʨì0¼ÎyÂ1¾UaçEplR×ë*Èð5 �¢ .B1SL<íUJL80w¾ß ï ítjõæ¾ÕØÈ0´8C¨l3(6ÒkÊÑZ_)áæïåSÝõCÀ¯¹8y8NZ¥Cg»Æ""o¸ÅÜ; &ñmÅéI¹§9X iÆùLGrÐÚs34nÏojêµúÙqlgY#/XuXpð×tnØÔèEÎ÷WkÌ^vÿqâ´$ÚµÏÇ'6gØnß´}41³]+Ìa¶ÚÆÀãöá$v4ºSî s<3g<AÌ ¡Ï¹è2ÝÈtWûÂi¨Bð¦½,tÛ}$¶åÅ`¢éߨÜÖ·Hr7´^ u¬·â½ýúþfþ}·hèe/LWZUûxuãMÇÊVËÍZ^5ùRwÚ¶º¿¹^`_X.w¸kùS¯?<¿ øÿ úÖ%êõ½XàeU<'ÏöJ.À¨Èrj¹î-ÚQAùCE"(˦øFÃ~7ópê«þJæïxTëÁÚÏÅ©'ï ¥ûÄ,{ïHxn¤Lʲ,VÃzyCãN8¢îñ§xHÄD¨ñgÈòUI¬´7n²g¯à£Z½$kïxï(7ÎzåFüî êk$j`pNõ¥H¼Ä&ÎNh1ëÌI@ú)`B<ÑÊàL.5¤^î´¤@@7¤|:)Ȱ0äþ®_o#ôg'OJË(´ãj¼V/TOZóJ÷ºõ«Ìé>¬Ã×P 2ÆÏmÏ +×éè«pÔ!JPÄÐb&X" l&6&0ò4'Î(àn±7zIÞo`b"l¿ � ÄÓijQ\ +¾öɳÏTJÚ@Zöîpgï ¬ÖñãveÀäd»Ä#â_s ème%©òÈ �HÖ Æ0}qÂrp±X6xSàéã¢ç±Ã¸ê@3do¥c Mdk¤Ë²3Ö)ÃßiNñ0S)ÎiÎË^ó°<iãHäìþwϺ¿Â"0j/°Nm0<B ÷ÑøNn)D64q©NM®ÇØ}È>)fd6Ì ñ¢Oç¶_m¢ÚqÄép9g;$(£·ò§¨%&2 +':¼Í ÚC«f.Àò#j·«£IÅ F6±î:&éLVou$/(+NbÎ0ï02()LÎɪõ#l¸Nä¤^¼ÑÅd/ ¯åê®n4ÃTLD 2p2*îA`ÒCæ°äà«§qêbÞß^õP/T +pøÇõP5PÒ· xÏDópÓúöPG",w+Ja°>?S +¦ax æhÃÂ`RÎ>0\§OI Þ;èFp¯SUhö¡å³d`°>ëd¿9&® á< M/kaóvH:îþ=<5ó>ÍÄî&N¶(»>¨>íªÄRGêÞ´`CÎ +£2,sÏ,³wд c ÀÓP1í¯)ðè8¶3é;ãÑ<#ÐkÌ<*FkóɱCê@eò¤'q$/¬½pûSlÏTj;wBDL ]pÒ8C¬¹ê</ 1åÈ4@×BsÄÊ)?gJ/9ê <Ä(×ã)î»äSHÈ döCm*< ×9¯B4mKÊ´[Ã6Rs Åó.5 >ÀðØÇÂu&`zðÔ)çäà¹ïè%>Íå4H¯/Jºæàa5K$ÏÕVï^°ãsdìÔr~Ul4&1c0ge@c (ÒÇ=F-? ¶®åâ×¼z»V/b:83.Ê/ÈÈÒN/ 6Ï`vFÎ䦿 ÷]5î7- ÂZ&Ö#±JéÌM ,Dæð+6BÚb¥ QZÆ=a+dÞâs#ÂOé+TÈ~ N¼¶*6.ÅXC§¥$«0HçhdV2K,É«êýe¢`@è\cfvkfäÞEmëàcgH$W[Xè½Vpcþí �«'¢¢äD4öLÅ!?ÕJ òB¼NnÞÄÑS4¶îtµV®`cUiqàPüeLÒIíUoäùÕC8©|_ÅVs¤1/ ÖÃ\VÈ̼VÓmj ¨Îfó¾Ç-*&ýI: "¡kr>q*ïC Éîãujr]¢ºÂbðxZ1ÀïòZE¯p n2Â`Ë2å³>·d`©ø¢·di×hÓCÀ3éR<¤e@ÑR5AO½*dòvÄöNõWSmUmE·mUuÍHSMÏ5uXd9`Efzìv]¬¢@äap¬håbHæz7D4cåwJ~q'ï0< @ öþDnölW¨})õ¦Ò«Tk䪥jú-Ìß$üWɤâõi6YPÆ ^ìæ«6ÏI²amÅFg �I$¿JH5FQ´)j<5ø¬:´¨6UñDÄeOþ'V|ø*"^øÈì®ø^Ôz7xµ÷Úå®wîÚ#Àr!\Æ1"Óç}(8Ü"Î`p,QvxØ>têsµCCAõòÓ(úl¢[4P+tF +[#9\Õ@UÖ,ìKÈTéÖü3dè«pË6´ß¤Æ<"H6±ö c«(µ:£Uçm·T ^ æg;°ä6¬±`CÎ +F_SÊ=øÔcÀ ` +endstream +endobj +21 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +/F9 22 0 R +/F11 23 0 R +>> +>> +endobj +25 0 obj +<< +/Length 961 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4r.Æ"è@Üd8bECl(T9Ix ´`.!ECB2à ±AØl7Îb1¼ä :¢ +Èi7Äq@u7Siõ¼ÍW9NBÚT@s<ÎSh´Èe3Tµcæo:waeêc4Tèf¼Üs¾'CiáCF#9í#ZU9Ì\ ËåS¶¡EäñIt¨Jd¤#m1ÍARñØi °ëo¡ôÀÂr¦Ë-ZÃshÇA@àuîU*×§¸o8X'CN= * (xÀe¿í·p½Öðl¸ ØP)+XÚ)ãÎ7 ëSO"ä¡£pÂ1:K*¦8cõ½£s@ÉA@ÞË@äÖµékè>ád¶[ô& ø +QÁpkØ1©xÞêx@2Ú¹) +RÎ:=jZ½ 1Ðì>ö0Ëëã+jÚ¶(ÃÊ®öCÃÔA.©æ5»£r91²äDñJcÇ8£2 ÁKâØ£a¸pÆÑãú{ +( "¸@ ÃðÇ5ÄBë;a ¨2¯ +ÍRNÊõÜD1)sêæAHj60Q1(ÃfD«xìé½ áÄL½@Ý6ÜgÒ^ÉÑxK4Õ8ÏÒ+µ41s5n7U/uV¸ÊXÄ:#`èª8äÒ¯uÐÑ^,UÚjÒ£zìAå´av®:26ìNÛ¶ºê;³k]®;±l62ÏYtHÓ2ÜC@µ×¨6á q ß,<ââ¸êZßã;9BWê<cHÛØ.¼âµC4ô¥Â/[$¹°J·¥nà4Cî Ì2®cõ8m~7aYÄZgm¼t&ÉÂFà§Ì.ú\Á²j¸¼æ¢`*[®£²Ã:µ_.8s<ØÜ¾O§V7²½¶?%uc(èÍ´>gvæÜæ7i]Àp TpÜGoÝÕlNsU<u<ÆÂÃ:¨1cJ|4ÍU2âé3ÔåqhxdúQ>3t8¨àµªÓt4"bh +r¢«ÓØ2¥ð«Ôu-a3%sF^ÃjÀ(àÄj T +¤ +endstream +endobj +26 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +>> +>> +endobj +28 0 obj +<< +/Length 2271 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" aãA +*àѸ`0ðBØ Z 4e FBá¸ÈgEËF£xYY7Le3¨ ¨a1¢y@c7[ÌRT5LÆCÊ-¾ Æó +ð*j0ÂæXi´¾;OJfSÐÓqG'å3ÉÎæmߨ3ØÒc2Ý©¨)E0¨ +#*M n÷È]´ `ÃQ¥ØqsLlÃ!=âs)ÐR5 #aAÈÊe)öÅÈQv:Ý.Q « + +BÀ£R)ôδ!wPÕ)(#|à"êÊÝ/ Ú¨«ãã+᪮±*,8`°¹áC¢</KÈø®Ï«¬î¯h +ä0ÄϰR½OÛQP$ÊbÊ`7¨ð¶Ð0Ü·pSg8P|ä9I,ç'Ð`®:XP+ !lN »Êí;c®#;øóÈ-dÀm$·²[8²3 )²ÌÎð»ûÌôF/cÜøFjûKCÀpÝ;N Ào:KÔ¤<Î0&åÂÐĪè.ªñ +ÁLN2Ư P »ÛRºÊS}71))±õ\2c ©.2ûáÕbdKñ{ÞÐÙKú9 +ëê9 ã%#`Ùc°U¨ûRëj¨sYB UÊ0«`²0Ðb PsÍ-õ538Ê!ÕÓ3±Gop×5ÜÍGѵ?;~ý¨x+Ù>¸U_3á¯6¡â8Ͻªl°aEÞÕ c5;(Q¿¹ �½£P¹ÓZoZÚ-«r^µóuÔÒÖS»`äù¾¯mührëÍiº *ADsHjÈdÁR°9 +kuÎõ¾Wrzlä±V8&(O6èó#'l@ÅTPQaÈîÙ°ËÉêÜîÅO&ðßojåm^¸L}ðAw[¸tãÃÓòQkáÉÇý"&ã&9ÌÑ%¥g;OMÒþ»þGl]Õð}wÄoì[s7ÏmÂOä¡Ù9¼©à¡Íù;Eµ;/û½ÂtXhQøi)iù´7®Pßáæ ¨GO\ÛaLðú¦¸ T"iMl´®Ó¨3k«Íà¥éÜ[ #°!ÞPIZ>w¼§]á@ð§Xlît8}hPèAÐ@C@_È¢£Ö¡ÔMf¡è%Ò`PB(&pÂ{>e¥øC°n¨4jyö*ñU+Ädgp1D `ݬo¼äC§g¡ëævî>Ð`ÌDL+U³cÔ77 ÚÈ7Ò÷Á©01d8Itèä¦Ã¸u<_GrHPeBh/u¾ÃdnA¬}åõ8uë!yÐLâ¹ó¼xp&¢YÃøøáãñ¹NrHÄtdÑc¥Xé¦dNÃaÀ¢¬²ª§<ß]JAÎ9Á8§AÚ;g97é:ÃðDóÎ9Ý>'«ØnÂ|Î9äè©ßmÀÌ¡)¥Ý¿X¯"8ÙïdM7±YeS=r=HO«©%tó,ëÓj_81Ríá¯L#F=Lî}G×;iÌádAUi5zå)ìÍvó=ðKze.äwf!zÌ'ãFj;<L/dÔPÔ%"qÎդ˪ùýægI£jÖ¦"lhß"Äî«($è¥)C$ã´{ÒêK8à\¬ÖÁT¨÷[ªr¸Ò©Me0íz@¢{40ÆÃå+?³vtS¤OQ4¬Ö|Ú¬Q,í°ó¢ØÏAm¬¶ÕZ[lÛH7F zB¨N¡Üмäv]¥<è¨.ÍÙÛ +¨Oaûݤ&g¸¦±¯D5@½è¡Ð:6ìS£°ZQõó9§8Á ÷é3ßÃÆya@- KvÇI&ý-ä]q²´FË¡¤}Y; ûNS°È¨ÍdÁ²Ö>á¹dáþ9ÖN*2Ci.äã<,.t«-ͳxÍ¢|mêc±pï Ix /£mð Ì«ãÛ[e;8¡¨öç]&P<ÙH/ÐÐÔrgj=îVÜSräIX§#U4%KwÉqJX¾ZY}}¹³Ü³Ì;Ïín]LËRìCY^IY¨` %UÞ54¡Ý2Ä2M':-ãÈ%ñL=suÉX¹øÂvzklLîY6³ÓÕÈ3D«jy®ìêöÎ7ÇBló~;Ëj¨£¼î«'ºú3ä-K,ÕÅNó +äÄú©Îâ\°ÑÝ1#°Èî¡¢Ù²É#mp¤ó6n×c5Ém!P´ÅÊ$iJÄOì_DûùíCqEµò¼: �Â1FöÕ + ÄC<ÇÀìp eÀíor_G)¹÷L¥àq?ùUä«#ÎÉÏ0Wä-`¤ ɹõÑgö\ÓHHrJÍþN§X«0«J5\Ïx´¶ÈsOlÙLÚï¾úkàЫõ~ÔR0<µ»ëhëÁ@2ìÖ]ñ¾ÖG/]eG¤ëÅàùqæævò¥øÏ}×÷»´íã4;y6!ìOpK®i~ÅÜn±ûW^yË7¾nØ2àp²SñÜÊì8l¬òQÜÙùçÔ÷mãò7¢ +endstream +endobj +29 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +33 0 obj +<< +/Length 2036 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢á n9ÆP³l&T9Iy0¸`9 rÑÀi;Ábh¤Z1 +Hz]* iÆ +á æn-ÇXYh5Ì Ñ¸a1§c1 Ü@G2#QA,R3O"ÈPb7NFB¤l(¹]8ȰA ÃoÖïy½ßoøC)Ædª#¨Ò2_E(´¶ö¾\5ÌõóТØ8·ÜE#Lµúõ| Æmó)ä'ÃÆKxrØ%´]·Iö¶Qº"¡ªÇÞðQ;!¦Ò¿aÝY,Öí°rà±³ªÌ¯ÌóŲ¬¸>»Â®«éºÄ=/[Ú÷«/bÙ ³Ê¼ëÈ,+JÖ¢käîΠ!»!@Þ2¢Â3ºL¤»°ÌC¯#Í ·ÁØ÷*jÝ ¾²nÜ¥B¤Lß7 �ìã3.K +ºcÜÖGd}o =É3;äú>ÐòÁªøµJ0°ÒÊN>®0¨ãÁrT4Â3Ã|Èðÿɬ (7rúİ×ÑòèQ/ ÇHÎO+"tÄàÒTìÏÒkÔi» + ºø VÊ0ã} WÌ´e;M#|ÔVõËçR´A ÄêäTÃ2Î#/2:Iû̯v×[ÕÜ6ÜEq9WWL u·Q:#6%ÃÌvpP2PÂbÉ/ m'ôDrPªÇÇ´ÜÑ5<·(tÌãNwFY;ÂuòÎÞOj· ý/ÃÉZL¡bhPÙ;0ô.B2ºBó¥ÆVj9dó&XàYs|fX>iæïÅFàh!ÔÕµ>2Kö¹¦ëÚC°Ö¥¿!lÙöÓsN,Öz¿ûñ9:5ldQ¹1Çøðs]-Ã\¸EÏ&áM¿È%PÚ01öæÇÁl½kÃôÜOS^]ðl uü¥2\Õ¯,¸ÅôÍhw_OOuSÂÖ$|¾9ÌcNÐËk¹À2F2Q¬äÇx½È(CxÆVµªþxQ÷W©é=´@gtA7f +Ã{o¯ÿ0~À×35në;ænêÙÓ{dÝø²C+dN}ºZèàÛqÚ3¨a\ Ź +©Ao¡%m¨¦.Ý K~GA¹BÆV¬Ól1SHië°&ÜëD<vù£ 8l¡ÈÅðä´"rfîC'{ ´W{eº/è£c¹i¡±ÊÓà¤i ÐaÆØ¦§"¬+س!$¦Á±ÀZ@¼(5£VC9(Á-£L< xIà «dñ±êÅH= OÌ7àØÿ£ .L¶eù,z +%B¸d0·bcóyPòè7Ëù0N r¨p[A¦Ð �r'.£Â2kfLâø^aÐ(A=DQ3¤æOHôM¨9+£n6ànB,*!ö.ÓÆy¢ ã»ÇP9¤ÃDWÆvÏBÏEÄ ´n³äÛÅvtËX7$a®&ý9g=¦-Q§ÜýËñ-6¦gq*Ô±õ²"W§Ìºäx7DB[¬EÞhòp ÌÒø]ló]3eÏzI±âuÞaèB2¡t,"Î äýT-Zu´Uä"[lû&´¢.ã])ô¦V +¶í¦Tî1ý®L`Q2Ê1_S + +,;O±1Åj\7YnmÀÕ^$ý"³ÎôcU8]k.µÞýX}kÖ`q(]´^ؼ[ðJÙtQÍÆzß yhÖùCV²øq'I~\9<«#Aí}ÕºôʹE +>ÿk³5uæFW»UhYÓ/ÍYÊÎæ¹/âMZ5ªËùuT}¶¾f8*ÎäqfúcóÁ_øð2å7Gûsm4ú½¶¦²Oãÿke$ÑsVeuòÅà(_Ò¦×4 "3®X8ËÝ`Ò)¯êx @P× òJ¨EbdzEîò® +[V3{9àpBytÄç_ �(,¢=ä62«øÒ8½¬¬HòÈ(Ëeç.ÓH8fQËùbéërkÊláådAB¹>8&w@Þ±Î?Ùäf¯K¤fÉvUgåÄ*w¨©*Á¢o;!LFÎÆW<bÌͧ¦ ½-°¯ÂG²±\{ÖÝxú³ì²6ùj¹¶Gtæ-¼ÚÅÈ}EX&nD /ÐPÇAC{äÏweÁ¨oVue¬àAµWÒhÚºæsÑ·õxƵÈðpp7B`Ý[!Ûêýº©7´´øo\A£ÿº=ÛASä×¥¸ñ¨¬ê¤ÐrD÷CL»²'ëê)D +endstream +endobj +34 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +36 0 obj +<< +/Length 2291 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" DEÃ!Àn9ÆP³l&T9Iy0¸`9 rÑÀi;Ábh¤Z1 + z]* iÆ +áÌoF#A¬,4ÍæPAhÂ\0Î'BÀ@_6 +F⸦2(9 +F"MÈPt¿E4P(iY êòzø(P5J«&7£EÖSf m6:a§vÙHR9`b=êöC×.#aA¾}{9GNÌe<àé0L¶'^°X¦xìK)Pææ'ù±¦w?.Ìzr}N¬si×\ðW½®Ãqs9L8¦ÇÉ^ÅOØÜë°P8£sr%ÀNC».{<è¡nȲl«í3Lã 4"µ©»úõ¶È®/¨Êú>ÐSæBðs¾ÐºH#:г.«»pÔ< ¦²¬íD@«s`ÙD¡ö"¯AD '«l «³êûÁqvCpìjêG«±³.ã¼°<IP¨ò¼G(½¡@£JÒ\¢9?ج0Å2«r2¿sþØ +aHjØÅý<¸hf£6a¼º +T ÒH«G8-ª¸à¶Â27 +z2¢ �»0È0ûK"MTâÔîQUD*6²¤%65]d·Ì^ÃMe? µÓ¯^Mô×aÔV+ÌMSUÙËÐe&Þlê+KêçY¸¯Z[uµ¼êÌÏ/ÜÐÚv&·mQeÕmu\ùúñZÛ°Û×uì3_ÇøX` ]ØÉD¸wâò½ßRåz|úåXÄ¿ãx5Éc÷>Dä¶eñß¶cà8Íp82©ÑÓ4²fÃØM2Å8 +c(ÆÀàÒß«Ü2;*ì*8`Ò1)õöl[&Ì +c®á½/xÉõ:Úþð¾*) ¶¦!(ZX¥ÁuM\ÈjÎÈm2c8aH</JE¯)øP0ñTX1ð6ôS9Ïc·.{ÑHK#M#XØbo®këy)¯c#~ur¾½g¯lyº¶cvâwz1s|ï?át1ü;âù-@#ÅvÆcÃ/pP;JþâÿùIäÃ1z6oÙï¤ÅÝÖËöz 4ý 'ÞüMã2®Â ÅýÀåÍ©QÀÜ0lTÚ[ﳪ2ÖÃCC/ͯåò_À1^gÌÀ¿è*VÜas.'ªÁµÊjS^kEyÈ4!wÚV[×ìFe%ú¶f_J8ÐB< ìT&uUßÚ~pMú¿(r^ßÔr¯þ ü ɳ 0.9Dåçãö?Áù¤Wldw8ôã*Û O´ôóÒ¹Á8oØ&AfÈ^Ë©8Ì9¹<eTP\JXüo^©8i09'° +$dÀfÏÞ¾PfùÙãéFfa2%Ù+åÀYOØ*· ª%ì¿0ðÆxð6ïd£éé!a5tð¼ Mô¢ÒA8/5E]b®uà¢WOy·>ñ}Qoø2¿Ê¡YÀÒd56ú + xñ´$æ²Á° ä9M§¾)Tn´=[̹ÓE'extb4ÌØÝ¨ùä ¢ÇK'ÍÓò¥ä'Kô²T77aÎiiå0\nwØÂãõ9î»0å-§. Ú]Á¥´rÖ㼦 ò¡J¦ú*¬h¬uNÍ]!ÊoÍzD+éÍIL¢Á<C#£Ä®>ßÛ°za£0à~ìssõØ»(]¬±}¥ÍU Ø=2°ÕÊÄUfl ³ ¡ºP;1?m²aÀüDÔ¢- ²NÈ1ÛÂì¼ÝÕhs®t¦Zß;Yp¹ä¯{5/qa£\Òk¹ÖS9¨Úov]Y£*TÛ{/Ê`»ÛïrzwÆB_JÿKh⢶¸¾ºmGWeZ +ÁÊÀµC B?Î=_ûI[-2â¼RèÕl9¿/umK0Æýʼ1à;ËjÐísÍäA=¬e³SñE C~¼Û"ó áÊÐK+çÃÇn3ãùpTAFCÈ¡ ¨%]WRRÂuI| ÁdÔga`Èå+@ +1ñ?È#Y +Ø ÌÀÈÙætosdùÉy¿*+̬PrÄ´u= I\]:M¨rg@@{ÍíÆ? ¡¸£ê~ÔJD³J¢Í1?tÜEÓ±"Ôuæb}ÈÅv canÜE«Qé|å¬&Ü7Äúê2~ ¼ÐÙì,g£I¸E+< ·UçfMt»v´=¢lv¥Ìú¢~ÛÜàP»¶Ï[]¯I0rÁsî{bW-y!x2+²DØ"ÄH»ÒÚPÀï³öus>Ùðkµ4Ê6'i§7ìòUExQ»qÆtÚ4ýdoÖPãô"PÅÇÖAQ&òÙ=<ß®¹ohz/yøÒĽXÔ«ò^NÖ{@'Ö_Ç áÑp¶FÀÞ2Ó lMÔÌduÂ6êÍ÷W¨%ÎW6àõs»Dé*ã¦skͼWgUvq~u¨°^}^ËÓ±~<Ëó¶ÈQãó_or³c M¶BÈläPLuÀ ÞuÜûUÞ©çN¡IXkJòE*ty%Øéw4ò¸oáêé/Ï|0Ë:ºÔÄ´a7_%`y¥RõÖsåG +¨ ñ^3¬ .RqB¡8z'ðPE `( +endstream +endobj +37 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +39 0 obj +<< +/Length 739 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æbá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶( " íDÑIt¨JA£Ó(h(Z2cAÍ,o/ adIpÀj3 Í*ÓyÌz ++biæ) +.÷¤f(3Ò[ð o<SiðA¥~27Xì£Q¥¦(%CT×.ÇÒÆ"ì¤Ék-Éð¢åb)Þ0b è)¢ är7¦ó&Pgô2>`mÎÕ¹C|·G¥ÉY%ªm©[î#8AË·î #F&pÕÅuÙÅ2&ÝåÿŹ,s¨È;¶Ê¦l¸nç³ôêºá£LɵnòØ-ÍjäÈaHr Þ7¯l;ã`Rä:lÉÁS0ºsAºÍ$$ì»p¬4ODQ#d2ÍÄZú*Knã±| '£,3ÄréJÑë±²iÔ<Mpf®É¯JÚ¾°øÈø¯â£â¿Ê#Û6Í PÂ)#Ø0c,ìë?ÌL?)À¯Ka@pKám%1Gó#µ,ÌÐÐh¼Í»j'·@à2Î!DÚMáDTÚÐCôþMík@T³óbô*<?&3týY¶jMnÞWOdTpøpEè ¨,ªä·Ã+\!U(4Tï7-« �2ŵ Ì4ø 9(kÌ ¿¶ëÈÖM*]]Þ³^2åçzÌ7¾&³ËnúÚ à> ó¸Q\6¹@Q ¶±TXÀÊ-ÓÝ)a"ÿ()3¬Á+bg|ËWå-:4Ö3_¶¸à+ êÁeÙ\ü¡Å>+hp=*Gh" `R +endstream +endobj +40 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +42 0 obj +<< +/Length 2706 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4b2"0Ôf.Bã¸ÊT6Á"EC@g1¼,Ç)Jágx!lPSFâ)èiEùÈÌPnÎÄA +4QAÌèe6F#E><9¨ÚÊsJ¨! + ÃJ`Üf1\DXå4`.FX!UA ÐT2D¡÷¸¼d@6o1 ÔP3 g0øà e: #FËPjÕÕp¥£ÍçZùÊÍhµ[CÀÂñi\Õèl7¹t!rUÿL*KÁSm �\1ÑÇ+ 3ɸÞp9x¼Q!³C#çæTÁ°Ônl:ê¥Aí$i +¢H* ;R×<Ú),íÛ|³dC Ðë Èà2HR* Ok ¾."Tã¢q½¹¨l¦.s<î ÁÂÐ"Î1CHàêCö½ñû¢h°üȯàdÆð¬ÐÈPX¨4¡W ¢3ÊÎ0ç¢b ;(#LÔУd«ÂðÌFßñL×*Ns¿³,;À&Á �ÉðÓ(#P2ChÒ7,á Ï4ã5,×à0¬Á �CdÒ3 ãt6 ¬þ¬0T6õ¸Ajîb¼!ÃH³Ìm(¡§-`år«ªÐd)Èl®vXÛfÄPØAX×WuácHÌ4u4L2 Á �cCv6Ì:¨ç4ÔïU-LSTàè Ü"»O*õ G4ßÁ Þ9½69}(*0ô 2Á3Ô2áÓHã½é W#xÄ5'£ ]Cº¶½¨t|õ3Í,ë\\9Ö·åü4¸GSU¢ 7¾pijMé!1³ÐQé,KÍQe¸®psNÓÆõ[CÛOØÃÝ|@1V%ïYTößd ã½F3Ó£-ÿRbµàØ:¬áÖ©i?áÈnÀÚZ¾³ÄVìq3Â8)Bø¦,b &B(¦'¢å4n3ãÝWY²§»=J0ÙT-¥Ðk>§g'tÛú¨©q÷Þ ¬U³Ù_êø?'À³ÁØ tNMЫ§&xn 49 Ȱ a0e¤ö6æ ©v«em~PXcJ'¥O6+B7íMÁ;cáVía>£´MkÁá$¿Gó-`äã?ÀÐõ^ã×+ö¶Hag*x±`[ +`eb +¹80¸rcI 9È8p¡¹s0mCÕ¼AB' ѵfu7ãBÄUò9v^C è +èÁÁiB1,8hZF'),fÙKê`híáù4(#öj{î 8¥ìáÁú)Ððlv%*±á®80S.HG;FÞ}¦½y7ÇÂÔ**¤*¨¢¶FÌÍnç|»uÆÇÔËY¡ÒX¶G:ªUfU¹X+ ̲¸hÊñ_,¥*jZK®w5Ö¼^ý5«8³K8l\¢aL>P¨Ã# *áK¢é4C¤áÈFÇ-¸áäÁ8Ò¡!ʰi+A@EAÉb h¢¥±Kr襲ó)!5 ÉE6âGÎ!F²pæJi*êH0 îJ³D´(tÑÔ0û*d³Ðé¹R)ÊZ AËýnLNî<T5IGSj/Ê8ÉS*Bþ0ýHÄ´ËUAµ8Ý5¤UTê@Ú®ÃpãJÉ'¤£2æJC&¬ �Ö3:[!q.e0àprËëº0&³Ó^jE#¶ê¦§ô£,$¦;¤Ðc¾Ïå<ç¦&Ùº|kMlu¶Ö#½TéT'AÍ= ÂaO^AB 8ç!gÃrÄC¨5 �,Á¼4±PU}h2¾h|Pà(FWáº^¤Ü¤U2ÜRæGéUS¸I"ÜÒjOõ÷V×-Ï¥l§ÈS ¦(ɦ£7ã2Ϭv®É +¨Éf/= ½@¡CM¼JáÑvmÙó7g1 *ðèÙ + -&´åµjj É_{Q0'BÅ +¡ +Y¥F± ñJ,+_FL¢¹>ëÄó4õÖ¤À"[801ã5Hje;¢Kb:»úN±}}f{7¬Y:¤,ï<ê90 U{dPU^=©sjëcÙ©³@6+B] + ´)yÓÁ;dÄÙE ¾ ´^zLt±ÞýI:ª5Ï | l¤ +ÞI2ÏÉéÆ^fRÁZã¯©åæµhItNÌ׬ìv!ñnfOk°øÝõe-B6g1Û.BãYKÆÈÙ8ë{GòD6H:;ÿzݤñöë³Ò9(ªÖ×k Á¤8½pèÛb°¾©Ì:9àµCi¯a +J²²TÍj7:ÞW{Ù³Nç'~¾ÊeÎæÚÎQWX¹í® ·ºÀÜ2à¥]¾ò:q;Ûedõ%w9ÿr +2 @¨Ó-á2ªõLÉ-2Ñ4 +'º2w;%YÛ¸iߣWMÓñýZ± êŹ_¹9«¹$ÈÁjïË+¿¦¦t¶V¢Öâº`Xà +ºÈ:,/õ ¸Cÿs~[£/:û>ì(3àÚ6 'ûàøëNǼ¼iPHç,æ � ÞæÒß'î~|M¨Åc³ÒûìÂwµWÐËy.åÓHuø´m{ÜÄeï¬a°¨ú*%Î*( X×k4X@gH¡GþØMx à¤æÒ¡ÇÊAnNÊÄÐG\¢ä9év¨vvîð¤ÊÒï&à }à xÏhÀ '"è3Vÿ/öT©ÞýÏàþOoFzçK¶üð] Üö **άM ® ¿ +¯ã +ð³h ,ï:ïÎNXåäààª(@M(¢à`PX@ì¥`Èt æ'T¿¥î ÀØ(McI$mhT ÄTm`tENå&©oO@§ðb +°g ðr @îf#þ#³Îpüd° BåÅZfÎ8eG 0ðt)üM0& ¬Þ"Kï@¯`Þ ©î"pæGrÈðîFRÆ*hå<dIÉÔ_^l¤aðBMPB +endstream +endobj +43 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +45 0 obj +<< +/Length 4745 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- +F ÆcqpÖIP¢ÖFX!U§ª5:^ÅY³ÖëµúpÄ]#Ù*дlgZkªôd2¥Î±yZ¯ËþIRÇFkÅj÷} F#<%)gÄ1YÖs!Ãåv +ÅKÃjhöÁ\uùûÆÊŵËÛ4»ÎÇgÀÕ PH4e E¢QAHA´cã"á¤x©&MÆ\ÓÃ8OSâÊpÍçSqR- ¬0¨Ê£©*Z°ª!·Cà¬ràÁHâ<®«{*½9+ûw +AhóS1kó¶¹Ä³$ÊAÍ Ì³hü+Dp{FAÂÞ³7®<]·).3ıLÈâß6C0å ¢3 º²&¢C°Ç¿rêJ¼O"v $â:!¢( û¦ªê +@Ò9´ Ê:£Ú4Ã,ø4Á çAÑÃx@7ÕåQÃ0])@RÖ,á»Æª¢MU$ÐÀÎˤXжÑ4?Y×±¬¤Û²5xL5Ø2R?bV°Üm\+²BÁDM äI0ósm!áÅ»Èör[kñZ2£ËtÅ-º³¾ë)¸hÁ»óDÕ6 +s|ã9¿¤OÔù?@4>:O}#IÒ´½3MÔ5J7Ôã}SU©m^§[!Àd6´HÌW1Û¯eõ`E÷fÝÝ[³k=eyõ_èc¢f¶5£g«'ÞÌêWu¿c Xq¬ÈÒâ¦Þn}ìßµöé&ó¼oLÐ+Ñ Þ;AAS¢;m?ÓüÀÕ¼k>æ+mÄ,ðƶíßÄêyÄÈòë>é:îÈs=P³ñùXq¯ph:¿RÁu/\îkgÕÝÝ¿`¶^Rµèlî¸ía¯¹íéC̰ªõ'ØÛ7â"O¸pêóN /ÈQP(dôùõ°Aø[Ý + £¨Ø: #ØXÐf!:2t +t:©ðÈüÜ +¬4DBÂ"d#Ä`PÔn!P5PdFÁ 7I佯Á4ÜO)+Là(4 � cOÈ;È£Õ@ *Iº·pNiLiú&øªá# téx¸îÏÜ¢fN"+$è"È +gG^*¬÷æÚeî~+¹¤ºãS¥-@¤sïÌcq(Çw^îc|\îÚ?¶3ð1Ñ^çQµC²uÁY©ðÃÎô^Ma} @ö^ÛÝ ä@jÃTëèbOº©ßÃúú �\?¥ëä?®X«$;XêH2É1¤ÂG f';¨üBÂe3æfyòfC`Ùd:Ò¶"CðÑb=>±$D¨ýP¨~bÂ×f +èëÏâ^sÌmtÑêPθQ9$)óüFÅ ] Iѹ-aÓUHZ»ÂïÝ)ô»Þ$m1}HâH AËA¾p¶ãÍ8[ëO9³ãC cORÙ¿ph\ +¹j¹£³. E±ÆÓz°bý +1«ÈèûV£Í#Ñe Îl¬ô]§ÕcøD(ÜxZ5»ó!k1ªî&¿;Û �mZêr´8 ¥ aL+¨ÂA÷äJà +PªD¨µü sAÒ¢TizêEJcRô7ø©Ã ó1;ù®EÄoÀ¡¾Á0HôÝI~Ñù, +ªñIPk#¤«ó^mXªÚÂ77¶V÷Z¯¡×ªÖ»Ï}k£ªÏ(±;UÞºZ±»¼Îc5µÕ`°#<¤8"Ä6I½iÆ_/"ÇÞy\l¨êɹ;glý¡ +vÒÚ{R`ßµÉöØ@ê¥XªæÝÛÕ=pjZ¸·±öBÈêüªÀÌØZ@ÙÊÉ´!ÉßÄÕòx 5¤Èå~Ý5qÉk'ÕÌFèÞÁ7Ï1æEìmÂmØ©¦åX®i(O" p8'BîFjÉ5T³¢¨wrÛO½ûHVHï½4.üi¤W2µqÓÙÃV»®Ûs(Êø+Sæì)á0:¢Èd«L,]3±§_°¥O,ӰϦË6ÂI àªÉ +dûÅPp ñª%±ùpäCt9A¤:hÄqÜ~J +¢èH§§´ëÛÐù Z©©jz:mÙÆPMò´µoÓï½/DY:øQ9´,ûü^ÕÀÁâÙ¼Ò#5ªiv×êkµö¿ÑÓ¼mûNͲ¶fÎÚKjÜy¶Í°bxåHííÁ¸·&æÛAucÙ î.ï1/yn0ɽY6!ý`gMWxÈ8ê·¿»wÕçV¬u«°/ý?Ãpë]£r± +H{áä߯ �¼-î8ð9ä¦ÈøR¿¬8§×v òÉ:öñXP6îãîSê¿9Ýîvt} PW¨^NÞ ¨ßWßÞ¡q^D³Re}Æ}¦üHê{:+V;üZ^û¶&ÌdyíÜN +uñºÍ0ß?(ºòò¡Ù»:sØðO{ýòö_KÔö?oõÌóìßáû2Ýò{ö¯ã¼?ò|_çÆ¯µÎØc<rkÂܰ¬B&hd³¬ñàÅ`® $ +¸µJpµ§Æµï6ÛtMÈ Â> îTíÖÐO>R`Ø B +ôî-«$b6F¨½p^Pd몸ei'TC +ÌûoÌEPyï^v"¨îP¿E +RíþÆq.Í ïjf%zl>ÕÌèdùMa Î+ïãdÿjbÿ¬6KÂ6C2¤Äå`P ÆTæNR-pmìÝ +âr²P«N %{ÄøF ±L¬hP? Ñ% +°þê``ϫүF¬*wÓÑDÑHίÎë c¯ ¢b"í= ,<H8Ä2ØÂ à +L à ð*~gÌÛGà}¦)Ö~GàèÜE08ÈÓLt �:¾ê¦ºç¾$´ ©IÆk¥Jè KÉ @*cH°f, gÂfQJ1;d É!2.?Jí% Ñ) +Ò,#g2âîEB§$NæïR8#GU rÃFÕqï´ñ(a ñ-ª?Fí´ópTvèOÕ%¦4 1ôQÍÉÀçü²L*ýc²0rÂ]²"=,òÇ ïlîñb²Å RPý7#è]±1,ö¡Ò\ËM/ð´ÕR6ìÒÏ0Ñħoù²f%ñb 2äÏñvzñ ( + +à¤&_äóE �üRFöRM¾ +cÅLUÄ2¾W¨ª$Qw/Q,²E-0YM9®ö²+8ó s ³9ÓÒRÀdt®f¨þS"3¸«30Òó:óºãsÀ `ðló % gnpå'Ó3R 3Ó@µ@rÚóHqª~SYr¶bóbóg6©ÖÈ`Ò¹Èó{¤ BF&çy,'B§h.:²ã"#õCs ;nåCGy#4=0òÍD4/.A>Bo ÐÁÒMD4e01K1m$oÂ9S 3 _Rhb`7-Òt%q} �Û?å="Ü ÚSLô TÀqôÝàÇM Ø¥+Ô', +JÓhç! gO49-9ÛOÔGñcOÔQ/¥,Õ EÔ(&,%0¹PbÜÂTg +29R-GTîFÃ.KÄ3 Ç\el@<)'tIdÙI +ǹ34¨òT¯K2NòçTÀÅL6´ÑMHM K@táN@@R ìEzY«ü¬8©'ZLµ9RPC%Zp DÕ [¬µQ,Ã<ã[QË%[0D]%.Í^/=&5C25H*EÛ@ ò~¥(>É hµ£þªS}Nõ¢C-!CÏaÄ.;P$Tz#¹OR×\60ÒÈ4T#%[ð]a©Ö9RvEdõÛG6#eã1µ<ðU@ð&NEê³B `)>Ú {m æ¶.ô½x �Yf^ô]!.*0"/[V-]öºàÔ=:6ÂLV>Ô5Ì#Ï;-û]vºõÕëCëõn³Õ11^võf/fqX×UEgïCpUZ +}h ß`v¢=àËj¬6°b5d¥Y®Ùb1uNÍl]÷\ìV72¢þGUç tSm÷ouuÕZ4IG×o[\6ïd3£nóÛf³ßóâDwk'*'2ë7q¶{DÔN µHª|W,ÛV7iàÉsö¦ZpT×.·OE÷ Kv¿8×ëOö+v+ô&ImWým®íó/µ¢þË]Ëõx÷yØ;öù^×1÷ _H¼[p<g¶{`{ {ì`±7K×2R7Ïs¶ O¥t7Ù}ÃÜéU~rAPÿZ!8t3×av¤ï§"!)Hý7uQNÙy;Q_£e2Kx¤üd$B×ÍofÕBkö2zÂ| ÊÜ0î?V?÷kWP!5ù ZÃ6Jubt;[p{¶50NåV/uËQxévIEãeTÊ6µsâ¾õ¹²&(¹! Ö]]Ù.Ê×4 >$0eb/ziÄQx +¤ ï$ àr?¹r©R¶L¶e5%ô ê> �¹@Þòë©}mÇYéã^°±æ»T<on¥zæE˧áí ÄRPÚÃâÐnùÙ}ë¬GB4)÷¬yä, W®R "@~¶'øÅ"ª¦?§V»h]«½I)ɤù ǹHUu6-ØbÕ¦íbÙ§Rí.µ§Ù4û [ÖT3bo#É #¨:¯úõï=ÎM&Y5Qâ8Õ¯>Ùl +¹]yk?Û Yõáy í¦W â]zò?G¡Ù¢(¢hu¢Æ:ÜÞ H²è6>: '@Q¤Â±"/z?U4æTúU¥7è¼Vwi³&¹:qµ§ÕõÏÖAmûa¨k%µ}nñBåg·8¨þx·¸±´}ô9C Ø¥«Ø< Ç[®¨+`ç`ÙÇ+¸åEæi©ï!;Ö¡ûl¢=½÷ÿûéY3¾!Éx[Eç!-ò? \&!<ZoDU¿¸»xP³+Á;ñ%NÍÁØ!#¨ßÃq)ôfóâm²oÍÄz¿gT àª`£ï`Òéi;»=»H>©Ù»å?¼%¼Ìb;Ñab +endstream +endobj +46 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +48 0 obj +<< +/Length 4790 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(b° @-J¨! + Ã!¤|gǦð°ºr2Á¨%F§UÕÅÕ¥z[X,VJ J/i¬G#jòßn¹¬pJ¤>;V¼Ûk2ÍÆU°d8Û«µû +è5¥ðÅ®µÆgqÚ ï¦Å_ó;-J©VÑ6"ÑnýºacëNçw½¯UxMfp.Ý\7îVªéA¯P¸h*-;âÄn£Fòp¹0*o9MUß.z +ÊùN&â«ü ¨d¢@Ò9°Â6£(@9£¤: Ú7°¤&8£(È#tGCPä=,Ð7£\¤©jj³6á¸b +«¤Ô¶ª ÒG骽¯ª«6¸ºÌ hÃ8LÝÈóÈ Ï\} *¬»2ŰæµÒü,L²,x´!À\·a bç9l|¦á£óæÓ«´ñ3MDå::T]<»(í¡tð¢´Êè-䤩Zfãîü¿oê"@""b`$¢H$ + g[áDÁ°|# °¼2C#HÎ4 #p@;ÁCÑfØp Æ7ÄÑÂ/nr7xp«Þ¡onФP1HÆ5ÙVe ðÄ:¥ÈàÅj·åý °í3Aã`@3 ãAk b¤ ~N£dY Å!@Ës ¢è^ϲ,<:«F0ÁACØhë¸ûÆâ Õ6«8@èܯ!ͲÔëÔ¾9-¡"¸L>Ã5ë¼È2J®×+ÌMFºÕ´.vç!nÛs7êá»ED3TVüàÏ{W?γ½Bo-v±ÁÐ +? ³ëÔk´».Ò¨½.óÝ-'N½ÉÅéOõ!fçOÀPý?ð©T +µUX& "* "h[Ág]APdg_µÁ fÒ¼¼=½åÕw@¦WÐÚ0N*6pê6Z @Íö(ÃhÒ6_·È2XC 1Ĺ +¹Î@5çD ¯Z !òe!1Pä +Z52 ÌÇ»à+×>®°÷¥7bOßHtè m,àÌCsY(¿dLÑÑSa)m1%þk)Yä0 BÈMã$iB ÂW#ÑfÊz4¦ÓQj`(§5Sn {lo®a¿fåZÜ[O%°Fª{Y¢mQ SäX*G®75òéU¦:8:HØÛbátdeb;ÆÆFZOO-¤E3S#KmÅ«ÆÂ¨ÒéºI)$¯#¢Ô$N·¨ÿ¤à9*@àÝJ®åäÚEP²VG·ÉDe®Í1Åæ®J®õ«<YD¥Bn.ÑÞ`èÐãÍ5ÑÖ86§ZÈDu2LY²cërS"[¦i6%üÇ! ÊD%ybÛÜLi²Iô¸zæ1Îòf^J=8§TÃÍêyÐ$)edé9ÒÁ,·[3(ÉkÒæÑ(»1f¹ë:De.Ê4ô%ü£FjYdäfäy7t9¥çÞRnñ)cÌÜ 87N ²8>ìÕ+¶wéV°®B T +ؼuw(yoB¨¼Ú ÉrÖa¼õ´CrÓZ«]-¥¸¿úÎ Áè®pºÊ<^ +xû¯¶ÀZ$a9C`×¢F6àÔIáAôÛæÈ_§y.Â+dN÷*¶2Ë1Eý(²6zQçg,¹È7éÉÚu(ô³µÇJÕRg2SÜÙ2;§7GfËJ=iÕ¯§h©¢ +a\ zA¢¹©êõ,ÀÃ*%[!®¬å¨¡\/KdC +"<4FÏF*Ø+6 Í#³)IÍëòØÒlýmÆÅßUb,À·þÏ&<DíþÀö+_r¤aí¥°xoa{S À¸z×¶Un)}ºsÇÐbÁ©47÷Sð¦Ë �fÈØ3f!Y_37ÿ`m844N +GkLl¶a)R �rÕ9ÙväÜh¾ÄÖ³eÒf±Â9º]<Öir·tÌðÛêobÛÍ §¨øÜGºOªüå8)0¤B-Ò!X"ð4¥×3¶íÕ6 Zò ÈÕ¬Àç!"Ç· dzCzÊ[Ludoâ¢;Åe9C£¦]2óó)Y +â2¶Ã×ÖEåÍn³ÌF»^OÌ]-9é#¸â²HÛĶ®â"³¸vævÜÜìâ;Lþ}¦× îkÜh©®ÑÚCIiM-¦-p"§<¸ó ^Ôøåm<zúV²YLyeëk鮳ÜtþcÒvÇÊ©ólËY8öÑÊñí¯ lZ¡*zþméá¹ÜvÛi"CùÖjÝf;<Ó÷¼qiäÏéLCÚÎ4EÇÑaSFèý"ôNx! �ÂB\/Tðì|:|M5,/·G:ç%4î[9~NïÆÃbòï²çð5¸R¯G¹W"åÇòkømÒ7æw;ó|×;Î^SÐE÷nzÅjRº.»éS¨ß#ªïα¥Âë·\À.Äò²-ÞíHOTcUÛûÍî`·ºÝîñX{Òç¾®ìÉ!´¶ÆÁú©¯ÂýFaþß×å~4õþÃgó ¡òñy/¨G\gBç#ð Í|ï=fD8èc®ÅTÞXõ¬\é`l8=£èuÇ´v@Z@ê Îfh#LÈ®.אַ±@i©¼ãìül "¥oü« Ðò/9EÐTã04þKLÀho%4òË|ónW¦òK')0<ðtÃjA£EðVÁP¤§LÉ©g rÎlÿP¯ +µpð.ÅPõü¸C&jvéð%T à +@Ò¤@¢ÉO~àä$cämHYËÞ¯&Ô`î°%$Öíï¢â_"°(2u*|'vA1F � 嬬%&Óî 'Òøq`E¦ Àb!PÐOÀl<§ªÅævX @Â1hõ.0ÖN1zT"^MvDH ç£ÑpÝéGç²%|uQQZ eå ޱƧX'à@ @ &6ÖÂ[ËËmq]ï`oeæ*±`Þ §¾\¨#ñþ%opб<*êñãqêî'¢¥-'`]¤â®cæ^hgj¦`uϦÖ*åî²ïÝ%«&âÌÉ05ÒlNn*Lfåd~¶w&Pb]ÀNb(bNϼEn!í)O`h&â=)R6V4ÿ*PÇ+ o&0oòh(@l!íÒ"<O2²/ÃC-J-ó)éù-âÜÍRär»,òïÃ`õ7PзätP§& l§®¸ ò!jÙ!±nÀzÈ'cä'ñǬ¿s3qÊ×Z¥G^Nì³)«+'G¸Ê)'ï%-²k5sO(ÆsJÊ2åré*3dÝ/%*¬(Sz!"5+O%+ 6óg&sI5lÞP'³a8Dï9ç-:*=7cu6ó#Ó°Ô<ó¸Î§/0rÝóé(*Mr¨Níéç±ofê`Ò¬§¸t P Î Æ:DDn7 4/*¢ÓÔd yA`PhÀà å²h<â&@ àW«×E¨ÂC'¢`p$H12Î u#/@vM<¯%AÔ;exÕî" ¨ +@ª¨ª ÒhE.''b ÜÕÒ àÕ®$Ö ?ÍJcåW*°ø*Êàky'LSY'ÏÒó-Îe9rGå)4Ú! !StÈRëNrÆ.*b OR²-·<2kOP?L.s<¾Ô×P®QEH³µOõqµ"»Q5,qìñ �@ÆÅK>À +@°úàH(³ý@ @b`¦PÓ¯W!B@ÝBa¦?X`˦<4h 4<±*áDÊâ]ÒIEr¬7ªQfc È}Hrb Øï òÕrc ÖrAt®vhæXÍFDícFqãYÆKÓF=d#tܳRËæ±Lò)³§`,ËM2N"1`â/N²Rv`s³*´ýbôé8µ8õ b67ÒËa»<µ¶QR8kÖ-`öSQjNÏö[SiëóÐÏÕTc <ÕNõRÑ ¾êtª +k ¦ b!¨òK¦ ¨j2Nþt¢ZÑ;$ÓäVôu@µzàÔATªôõ X,1CT9_>!gà àÈÎö¢©NÊåk³ä'eõmFH¯4YÖÓ_uJTpÖ4wG´²cU æ uã$§UU0äg`æZÀè[ÍYKfcÔ«Jô}H4µJT»%wdè'cÇ',¿v4é5¶awmOtÕb Ø36'73O wöb¶4òwP%Ùdmwu¥Wfu.#'z^1Ö-{6\³<÷§{ê[SÓgC=fè÷µLÆ ç"ê`@~píi¨§iôV �ô +³Ó&ÔékTС^'öÅW&E@¤àÍ=XÝBn Ö'ûÕGæIYµZ6ý772Ô»õ·tø4dX`ν`ȸ^D ê öòù×F'w3[^ìDU_TkC÷\,²ÊN+ d v²¶'wzøxóib¯x4íxr¡0X¥Ö388·c£Plÿ·yL +U÷µ:X¬²¸ß;7 1sÁ8å|ÌÝÊcT}Tc{ ¶ °~.´k¢x �xk8$vºzjv_U¹^ ôBXZ£- p"tQZâp1_HT@êZBT#Õð¾ �x·qfµBbÈÛYQà +~ Qyjnz9Yh ¥ì%ó_D0T¤Dç^³ÿ WN~t¿¦|ئ9Xw3¶[1{îð\ýuøÚPWdLÖ)sMvôÑ«aN¸±5ókN%¤»(µ'£'RW¢Ì£c×(·ÂIzCvM¢3«Vlº9ͤ¥§Vj¸Zs¦Õ;ÎéÓ@g=Ù +uV¢gn¥9j×õH +ऺ¹32·'78'ÁX@XW k»AÔª5Ù°¯VçCx=_¶ñ#ÀQoZño �yÚuÙbÑFBª7 xBTnBµr7RY üanð © ÷ßI_IQä ©JÔ±uFAKÌâÒ_â«TºN±8¡¶1a3h¶itáa;sbïãÅLvO¢=·ºY)º_¸:;d²ËTº|±2Ê[`£dze¥z3¶æË¹ÚkÓ§»8Å->±{·Ø¼½gé¸Å{¼ÚW÷¸[ÖQ6iS éºÏ¹;ß×Ígz$Ö÷ÚÐzÁú + ³C ë6±«ÕÒ(§¹>ÑËlÏ?|»¸)9¯X¸3Y7Y_ªÛ¯Õ««Ñ}%òѹF1dB@Ö ò@ß$FdG,@@[\8m<d*ùàÏôWéÕ葉¸µ¢ +endstream +endobj +49 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +52 0 obj +<< +/Length 4151 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- #a@Z). PB,5áqÜ\5Máat äe PJº¥ªÕë5Ú5hA_°ØÁCi¸Ðqh«V!# ¸g[·\V( Äo}Õ/6¼³a£ck¾*Õ B«ëä3 Ù[MêÝ·çr]ã.1ëuûÔcÐë´ÖÍ«k·Ôô¸Ën;}d¨ð´W}>g©¸ápñV)¼çnvM.ÑÞæyýºsTðv<]®8*I&PÐTZ%}aú¦ Á¢<*$ÀRn "f $â:%¢È'"£RV½aÂd"%ÐDPh "¢ S°¯j!GÁ(\PAf §R|$ãpÞ¯pSÀl Ð4a �|¼Iad +â|56D|®9 #Ä6²R¥²+èd̨Ѳ@ÉÂe£Èk '²Ñ-Êò̶7ÓE':MÁ@Ö2#Þ0C%97«ãÊ0hçUµ4Û7c(è:Lc:¥ ¢äGtS.ËÃæ4ȵÑ5Üï<Ïsì_Jk³!µË´ìÚº@+½´¯Aøÿ8¬ã¢Èºh½Çn7õÖÉ+··rÐíÖîº×{vÆÝLó¸Ã2÷ó䨲÷Öò·ÍîâaLʳÛKëÞ+Hò0ÌF:êÞ2ãomù{d >GÝm¶ý9N0cN÷ ¢3ä ¾Ò&ºÛú¿¿aÂ7$±ÄÅ0t! +h' +¢ ¤'å©_G\ H'jBp©iÆ*¼h¥ñATdH2#Ö2T'JºÓ´¬µ6S»ý;/Ì3Ë3Í3\.'µIhOr%@ÑÌ-w@\ô5C +DÇIr`ØI÷KÓ6m)ÉÏSä¹*Ö£¥SÊ"ª"÷M3Y à£?^®Jä¸õAºeº hÊ7²I-Ï8ÑVË@Ýe òXr_2#lâx]çd<÷ßkWÔiDø .µÀ]Ü +F«¢1äÇZ6L t³c ½¤<E¾¥äÂÙ<"[r03[¡5aê°Ã!\`,Hä¢;À8̱ Á Üs¡ù§1óB¿bAQ +"1#ÍOI7.*&p|HK<!Í2ÐÖÉ ^%D¼÷R¢A8uíH´ä"SBhO +¯¹Ì@ +"FI è7Å$á²Xpn7¥×"fwa7%àäôS +h¯¹äþA �aC:fnY)%°ÌCswR¾X¦y± ¦vNIK@WòéÞp`åÖ70Âho{!)ðæxl(+¦ðI\: òå$µ~óU禤U¨c á¹Y8Y#/\${SdÌ%"Êñü+òq2KªM³FiÍPË5æÈd$18MéÀ§äÒÑM¬Ùp'Z¿¤Åº)y$¥úÇ´ +b896ñ&Ä¡Ô)« +A'è+]R¶nÍùÃ8Ó%«X§ÃÐjÆA»æBzÍ*I{/°V¥ÁuÚB*yf©P6"¨×Vj%§Ö +·âq¬Ä&HjË}kQ5kz]t]xWvTÍ%z¬«ü£WÉ\ Í~flÔòEöuHdc"ñýÅÐ A£4Q±4òÂRE8)¬BÆ È!G¿ÐM§«µ#YNÛãj9iRT ¼M©5'Èt«E|ù׿ âä qîEg»TúåÁksweοwB¾]#¦±ÆfGKrf|ÿOYÛrîçK¾}éÖW<;èì© 5tíz86»ÌOc²T9íJÐcW>PZBK A§¤¤a«©æ!Y5ãW*au.ø¯Á:¦À+ÔFÅX²2búÐt3Ç^±CXS1î8¬½d[kí±ïÂÊ«J<Pp°ìãúöÐrF[<'Dü "ê̶+åÑ^^±ÌîÈXÈ~,¬h(1. ÆÇNÒÑEáRÐZ&§im;gÄóZzÑKRÚ#;l[s¥§Ví¶ÌÙÞMÃIÅ¿%[#®t¯qªJ%Éï$%ÕZ)ú]÷GmôÖ nMÿ©'f¥f®´4È<gd{ô¥·p¼À¸9pçÉBA +áëÙ¥Ö-*|s f^§(´±=D䣱ì4Y +d£Û·î°îܾr¸ +Èûøcë 4à°Ùp§¾qvöe°÷ ,Äo Ac_|ñr·ÆH¾K;ÜV!æ>~¬>mäx£räS£ó²GÝ .ìôYw@o@Ç`ÂxN È$ ®ÖeúQQ½(¾Ð BÞöÍ6»ÂJôà7 /mc?Ô¶ ëél"*À )ÚbT?»øxºÛAÁRtëT 3`Ñí¯¢è1çOSºIî¶µ-Kt@:Í @YDsÀ´¢P,>þèB"úõñ{ÃHdY»1¦ � HÍð§tK)Wâ%sr¤ØiAºY½ëè&··ê\)³Ae÷DÂ÷em<½û¥BwÛü:;×|SIwêøtÎü6¿°µoó@¾-A´¢PQ'Û£´÷_Kºíj"Õd¼§àÕïξdOX~îÔêítDª¢×ªbp* êéÈKl /pLv÷ ÆW-°¤º+àéíÆØI ,ζ·Ü£ÿ+ïËÿÀ +®öï®ÀpoJo¤ cE +×ÄÓܯÊúé|J©¦ÜÜVÊXM fsDÏr÷p°EÔë ´ø/jèzmÚ7*æ<Ø4Cr\ÌnÝ꺯æ9ðÞÞê¼0÷® ®$ PÚNÈͱÊÑ ¨¨W äÎZåýJ@14®\àñ æ4ñFå&_@ R=¬æ²zÎîj%Ð`h4Jçkr¿çî´à¤¶ �lNÒ® B\ëN¸A°&úíO.Ù´iàîD îðJ¯Ã¨µB\ðPî¯Ìñ+ñò(»±îù �8¥{ïH àôïRõoZq 'Gk«ÎLÅppBîF ÀÏoøêa!ðÆ Å;NÌúá +nû.Ó¸¯¿/ÆJ±ÌÖérK/Ú¸( ïä!Oèµ§LQ«Zz®JmMmPq/þp'°w]*qÍ3 fäz".ÂùçS©Ð0L4d"Ï #/}#c'òfX+Ì}mEm̺ÏàCèGms°r,äßK*ÑÏÅÃ/ÎÈìÐ+pírXUo %ë ¢¦wkß²á# ÷å0Ãé]óÅ,,éB#fà\"1æÅÐßn96åÑ7JºÈ3{7kl¼ 37.Éc[9ña.ͳ©¼ÝiB/«6ÌcØ^s³»,»;³ÊÎÖan=S¾ÍSÂfî`±îdÎË&ÏÎ]#hâÏÂ^³¤à1jËb ¤Ic@G«Ho`lësMr¤ºÕ©tOèøotLpÄ B4iI32ºéDÐ +âÂF©äùñø +w/ ÜúÐ(r (àê)b ©6mÔ dÓ:%¾Þ4ÏSª*ß§Iñðþ.ô³7ó=½IÓ¡KjÒ2ô¿:¨i:æ_M3´¯S¸MÓÖ9¢>t¸¯³SÍN³ÌÂ1NSâ+`iOá;OsÚ2c>æ}?Nm?|nt@´piúרì}À¨DX +"pØw§~MTJ©åH Ï~@Ê àÁ ÜÖ@ꢷ0fQ.QA)e"¬/ äøYU÷çU] ×EdRS 0Ô cC9Tß ã[¥ÑJ´Ì:Jù\T˹9Ñ9hM¨S]µ¾Ì£[^Caó¶Íµå8Èy[5Ncy$äÇ.843½6#ÎD:Ö `·a5 +eöP"b>¬ésó¦ \q??ñxÏèÞ'Õ2)¤.CTAÃs)jMqIÃuQWNµµt¿Ç© KÐò PÖyXdÆÞçî¦iõ8Ä ´TEJ@Úñ¥p Ô5´Ëü7 +ίPãlâ^>Më]J\ðÙmµç<UÙnpÈ®^6ñm3¤5öúá®m_j¨ü/±B*QZ°ê*ÒÁn³Ýr#G.4rê¥8.ß`cOqÆãjùsw'q«÷$#Öõ^ýt74WJÌ£½u1v +Õu·Mw _QqtCytÊLÛw(Æ_yT=Ö1Nf?8²ÓDèd"qEÑB4 +`ò¹iBqfÄéਠ+ Ψ¶¶½Y&ñ¨²×ê\ìo£%®ÓENÛ( +/ÑÈE2w +0{òs"n4ÂR8ñ3ì1èTÑìòV~Ͱ4k|'Àv@äôkRu4xp¯Òù/×ÏÝ[/âä¢/ªVôXýÛ%)¯÷C/à g¥ëï$ |oí.ñÛd©¢¢¹SFD~ʧª. 0K/4h¯ dÓUîèVä̰NLÅWla 7ç0·ü lû¤1M·)Ͻ²o2HÜ �©qðò ÃYP~(í{Cma-Ô¢¾{ §ØvL¥MCår£´Kj6(À °ñ©êMôD/K ¼w@¤àñDªU)¬:) +endstream +endobj +53 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +55 0 obj +<< +/Length 4230 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(¢° @-J¨! + ÃA¤|gǦð°ºr2Á¨%F§UÕÅÕ¥z[X,VJÎ_´Ö#ÃÐ\3®\.@«c¯Z-VË v¿aÂ]0ãýã{B±×3ÃÆµêÛ·`óÃ1¤Þ=yµÞñÌÞªè5µ1Zln;·Üîö:{~§e©U*Ãav1ª»l6#¥Ëæñ½NrçÐh´g:ÝÛèôøàÄouØóW;~ *^ápÐTZ$ð@Ö.ÁÆ#nRJ¦pbz Ð2pÊ;Â:(ä70Þ9(2£Ö: ã\R§¬ÎPnç +«zã;ëªîǪ¾/ÌÇǬ;Ó !ò´ßI!Ë)#FòlÌÈîó"ð4*Ç ÇO<¡-³íh\×ÌKf6¯[ÚæLw$L¬ã)«O;3¾²S»ÏÔöÎ\ºÑÈAЮÝ;¯óʹFKLóîÏÒ"ú+NÃ'ð5AIºr&¦( "ø¦§(¦%â&)Ví¥áÂd"%ÉÊIV (¢aKâÖ!aØ©V¦áH'Á@3ÑÊ2EîÜ j Ð4a Ã#xÒ7C±$Yè9`c8\ ÂxN©*[¿RÅo[M·\#ß8ãB£Û + ã61 # Ú0Ò6B8Å}»w¨ê9Ü÷zDC*¦B¢éâ1DUf£½ð6CC=×ÀRä,á ÂíBkÛr¯¬¬³>ºÊ®¿°Ì-EêÊhF絯¬ÔÇC<[Né'Ç#X×p[ä×·ÍαL\+=;m.bGAZÛFá%ëüµ$£Ò«Ã/r´1>q´KËÑ|Îîû)ïÊýÓº'O¢õ×j9½QU?WVh'¢"×¶lØè P!X""8*Yì5¬ÚM® ØôT¥áÏ pIø:¹ÜIÃ#Hð28Þgð¦Ð£L_¹ù «Àz+E32dÁ@m ïô ê'^! &pCl !5½Ö] +é9}k! ΣXZ µ¢¤`ì +xkr.eÑ ÙP9-ÈVÖØÏ«fGàÚ"·ÆÚjQs5È7fÈÞtLÉ9¾¸ÄzèÔDZîE׸tÎ×¢¢CqqE2&óߢ¬^N±4$W>] ëOÇ^&GgNæ\`4õÓ:×PctDÒ@#Õ.ìü@NÝ äôB¨v«Õ³ +ä<§ òèC·¨BK +$&XL´Õ|r°B´ùɼE!h=÷?ä mfð 2 ÜÔ 1éUKø7*¯°¿öQ ¤º @ + àuÁ¤¦óåì: éBFÑ(iepɦt± Á´ØXÐíq®RÁÚÌArÕõF8[9¡!ÄúB¡±Æ6ã&Û¨|cMüºH*5E$eLÄzÅÈ×I$¤ô:998éC!¼w1HîÓ +tW3êÒSçYP$<mqÕTë#Ô˳SgõPID%ʨ5,ÎúN<Vô¥Ær弨.ß,òYQ\D·{ïC·_Tô} ¡÷¿=2pp~ÏâhÁGþ +Z&²¦ºÀâNZÀÊW¨#Úè²rA¸;ç´$ÓÂ_MµÃHdBSñh±þeh öÚÊMÁªÖ£Á6knbrE¢ôðëÛûtÝi©JTàEÊFä©-D(W6äQÚKJîÇMFëSu)MB¡`Ö`Çz´Dó§·ËÎoLºVþò«ß|dEß¾¦6ûÔ* ¦¤U@]QÕÍW+ÅA 0¨0hK¬ÓZÆËÇi« !׳.+¥h6AVàr&âí +AT"¢PêÙ;±346³º³±Ë/ªûæÎÔ@Æ»ÃpgºÖXÂ8Ù±ýj%ÆèÙl.Æã\n1Ô¨(øUòÚZïe²#1Èì6ÀkY Á~/¹WY(2ç¶ÈÒ:@sdÏÉ,´Dgí �¹ÿGnZ>ÞFb=¦"~6òjÃsè9&ïí§P£ÙUÏÚ¬}\z¢þÕKOV* ©uÞ¬1ºÞÿ;£$]ª®çèU Ýþ$ø(§p¥[¶°A ØO'cì-¨L;\*ä´åÖÞ$¼ÐW©_"óïÓyýßÊ%vÆ,^cÄV>¾pPÃa ÁÔ6ÎoµÄ+2JÞ Aaö{k(Pi¤"Shã·i"6í!¬t/·wB,$nGH÷,¨nòºTâ9¬j»ÇsNzܧ¿gÆ{Ôuúí(ýü8m2 º\éÿõzOØØd pB*Æ ½"N¤î Xe° á:Y J˦½xÀÂ7k{~¹îWZk¾O}p@$²æP½×Ë,ðÌD"!°Â»àýV`glföą́2°P@¿vá ³./F] BܲÈk²¶9|Búa!¢ ÀÉP zCÁ¿&ð o%ä¾î»Á½ ¨hzÏ9ç´á¬íÞþ<ªg:¸LìÀÀòâa§ÝcébPÕIô@èô»·xïLH9PÆ1z 4Xôï°d @òü @ñ¬À#ÏõÆ®î&#â¼ ¤pø \F\_bñP �_ÏtGöáN JóÅüh ýHP«Ï@Ð&ó&h¦fÒdl¸C`@jEâü +¤&DPh +Æ$áÄ:öåü¯n`àÈá$0p¥ + ð2øä&OIl^0pópÞ(_Æ �.î-¿Ä Âþ.òíèþÏð,§¤PÆE,p`f^ Ø àÎeð¤D`Än `è(ð¾æ+PÉ%þD쳩ó ÊãHk£ «N -äËxå¬ +0ÒQ¬ ¤Ñ¶ÓÄ®^æJeq¦¦Ñ ÈÓkì2àÖ +20âÑëútK¥ *¿èé£=qáãÏcÖ¿ê¤À'lÀi,Ù¨ÑêÚ"rÃ"íNØÃnÞk/×¥ +à¤YmÎ'ÄÝL¦$¸ +VűJ Ìbg"Ìqq/$øLÏ .жCoòÉpøZÐýÄ Êì³%òbóòi&Èú®%z@ï'²~ÉR¯ÍÐÂÎ@hÎ ãjùtÎ~G®B!.93è¡1ï-òï£ÒøJîbÓ.²á/Ç» .íDMxuSº«xr.ÃÖÍ|èâ«2£Øs2¾S +,í>±×4S;3 ^ëCðØçhªëåBÙ¢29ÐU � íÆ¹*¯®òr,jÜMÌïÑ$óxèYÜ_l>9±ê%Êý TO¸BÄ1äBߦQàP `Ê Ä î4¥ëO �.%,S¶,ï-Lõ-6*¤M.b0媢Íå.$È£äAñÀÓ«¥Aó5k±BÒuêeCÈÕºAò׳V£D+K4IEQå3ÔN¿'UF E©ërëª!æÖR"i97-¨ +y7Ó +Sò0`²Uà $¬C*Ó s¦^S«>´Ê,í 3¸Å3½ÅðöI¼ÆF<ÓÑ=@å=ç=ÅK®Éæó"ÀjÄ6 æjÆ??hk?°)g¥@ +ZoDrÊ#ä c(ARñ«E5RT2¹M%RÒÓ´/RõÓ´7TK¶8m!CõMS4#£¸ Uë«V.p59VêkVæ½ 5®¹6 À~ l[꺲H0 +jô +@ +>E²îPWG² Õ¢ïhfïµÎ£$!%Xa/:pT �Btð d/¸endìf P óÝ^hxU±ðv.(\ Ű9ØEµÞ õâügäJ± Î--+ig-£[ÕFæTh'Aª3iXÒ&Ýi*æJMiB+±j;Wà!%EBÝh`qD£) U*;¥½lCÏlEÅm4V(öÙl˼uVáF6×lµSrÙøò$$Óp3uZVk2,ðÖ/p]¥ß<9Fªÿä@áÎ Àp\H b( «0¥Ü,¢ ïl!SÈÃ@À ÀÇ � <JË ÒLov®!vT ÏÞ¯wt·zE/höÂ=x×apo:ü7'Ð-7¨\74-è&QW½·ÀFK7Þh Û}?P,R +tøö÷ïx÷wóåã{É<fsFüøý0\ýk-ÔÚóïûv¸!@Q9B"ª¶«.M ".ä²òæNQÖuô$!SͤØi±Í3ÑJe¸vf»2ú<踬9N¬vØ«kæä&øÁRxÉAmäê3«x£8¿±ìÒXçQºXÜ;XáTø»ï5RqØö1¸û4ÇÂQÖ·Ìv GuëÍì wVÈ!uÎÏH qiO#ÏP²¢z@ +¬í`¦W ¡Jüc²ubøª÷]</QdåFPa_©À³)ij[JÕôl¹ðºÆÐ fY wlq°Ë ¹K!AMY©W´ßg3ø ü¶lób¦´)â +endstream +endobj +56 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +58 0 obj +<< +/Length 2606 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- #a@Z). PB,5áqÜ\5Máat äe PJº¥ªÕë5Ú5hA_°ØÁCi¸Ðqh«V!# ¸g[·\V( Äo}Õ/6¼³a£ck¾*Õ B«ëä3 Ù[MêÝ·çr]ã.1ëuûÔcÐë´ÖÍ«k·Ôô¸Ën;}d¨ð´W}8Ò¹ÚapñV)¼çpu7&hïóyùÎå?¹ªx{>Þz A¤(h*->ð¸â®©£!ph +0® IBx Ð2ãHÎ4 IXZ¬ÁÀf sb¡pz|#"`¦"µ#F¯a% +1XdCpèʤ)QTX cƨ QDQ$ÈPÒ9pÞ9 £Ù £Ü4Ã8çE +b²¬ì¢Ý±¯#ܹ®«¼ìׯôòö²3OóÃ=P¨Ò»?»æÌÑt#>кÔKÞ¼c/M!-/NOm³qDR,»NÀ¸ê{ óÞ,¡²<è²..ÊVNº·ZÖõk½LÖ.³O`RË#ÏTW¶:[Y SàÏú¿h*ê(! ¤ &ðJHÊ $ñب)b"Ê<â +Q+¢* 8O²1`j!|£%Áÿ*Ið¨) +±àÂ1Hì0,· (c#c¾2Ù,cí6òb*Ei~*Ja@Í4ª¿8arþÅùâ\°$lGÔxäá@É4ãöAK°¦SÙ´JIË]¢w+f9Úgù2è*úRêøâjqsßHÏ1+ã&ê)®BÍDU}Vã<«¤?q¼Zö¾âu%C¨<ªÏÇÑ%GóµzøÍUí1ÊqÍçS=ÓËÐmÏaµõÍ7õ?KËtéÆ!èí|£r¶Ëß + %á÷RÏåU]w!=òK·ÐÅ\PÖçgà£Í?hû¨¿¡EyµË&»üôQéµ}_wá|HØ~_o×þ-oôl üw'iïÇÂo¸TÇiý;ز޻Ëʵi"µÈrÜ[Géï-æ& ¤@«¥u®Ò¼ô^Í£0æÊßKI_ù0@BxU +°¦B[#}líñ´¨É!à +Dp¦B&î5àÜC»%j¬|6PÊlx1¢@Èã ÊP è9+$8ÆÊ+,lÈ2 NCHd QÐÊPàtp꼨]úJÎ ÂW H1w>ö&QcÂ/æPn¡%b ÒÐPÉÉ~dÀÄФZr ÁÎ6Ai6} Ñù?eHÿ¼_:äH@$fºÉW¹\HÁÁøiPÂ(®ò(m +9ÈCs !º5ÀPLZ³Ql`fß"sf'É~7 �B¢mE¸y3=$ãô?2NÊ0q)KKpÂVL²}, 4rÔ" äåáIfòúL0äÄao$L#7PNDÒyIªK)T$zJV%'iå@tÚWËkNÁ(tü90[-Ã3&¢>²ÊPRjÔZÓV£ ¶bMK.ÅZTÖ÷2ÁERô#UjøÉäñ $@hÓ+ä¬2 0è +kt +é°#5@b +bEHá 7FÇyÎ[ÀÉöKE*® ¥&NÁº±WYù¼Jªh,åe9õ¡~ijÎ_`&(4©¦»Ød?°D +á<)@@åÅ« Á6[@ç;°o3ÀÕ[qì ÈPiu]º÷=j=*vMýRï00ò#¤I¢¦¿ED·/B¾ªÖ_TÝ;§òÂå+]Û;JÓúaFZåÃ#kÓ}Ð@"hCaÈ<Ë;³Bd¥XË}pÆ«`õs«b·JY"¹ik彯îT[½þÌ6Ê®:Ò¶%"iHê®hÍ?WÄc;å}/¶88üzséE¡y.èþjh {+& @ aÊÁ¼6$ÙèoÑÚ5ÀØèãoÔmq«µðÓª2¨ÖáÜDZn/hèºHhÆÓ"¨( +á/`ŤÄfHòdáÕa¸:ØuTëd)2¡-V)ýwiT"¾I[kÍ{L/0 máBªDmì82vWÜ»' ÔS>Öà 1 �Z{o૽kÎøß{SMÁ¯{¢ND÷Näâ 8¿±ñî@Íù>ßx»rscÊtàáî̸<ßq5Ï8îÿçûܹmÓж¢ô '0(6 Ôí$Ø5ÄH!ʦ¶ß¹0-e¡5P¢Ú¸;:ÍoÎÅÙ;5î»[ØÈÛ.]ã;Jm³ q#¶ü +4'Dx±µÉá³yÆ9páÑ_¾A42È;G~p¹2ER%ñ~ÎmR|0Nì}³õµñ×|¤Ëv NÈ íH ÜöÛåÜ¿r-ýÕFZ²äïá¿Àø9¿Î ßBöú$<<ÂÇÂØ6þLEó^sÏ7B£¯Fô¯ÞõèõoìõÏð-ömôì +o|ÉïÚÒùï¢äEöÑfÐiïöó kxíÀÜû´îÜîÀÎûÀ@Þ d&8Ä4üÊðD% ¾ôÉDcÀ öëHàfå/®î/EÐ`âZÕNÉ @£Üi Ê`òøÊNÅLÆÌJZ¹"fô'K4#¬Ô³¢¬§Lܧ|¨,¸lîÀ©i@W¬Bò«ªNËêR|*VÌl{ +^ͺ \Áb®ºÖ êÚàÊ®/R®¾ E«º,ð©B¥ç'M_pën +endstream +endobj +59 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +61 0 obj +<< +/Length 2349 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(ÇÅ#a@Z). PH0â1èN¦ ÅÃpÜcS¤²áÌo§ã1àR-©Fb9èS·ÅÐÊmÌÛ±ÈÓog:E*E£!pÐi³²uo9`aTL#S¦UÆqªÂuøÖ2K7ÚeæsáE°q/·ëmäÜo8Í8ÊM. +FjáÑPAHEÃ,¸Øq«ØÁSiÄÆÑ+AqÐAu»ß/ÆÜ!ÓÅãæúHÜ3 â ò8¢àR " ÔÔ5JÖµîò¬Ù¶º<<Ézvß8³Þµ8«kÆä®AP"£ÆÃ Ò7Ìk¬;0°ðCNû¸ï¬+&¡q#ÚÄá@¨4¡# ºíjBêÚ¾ï +"jà=κ.Îjú¿¿¯øçAÒQË JP3£pÇGèd4/ðÒ2Ñ ÁÚ0Ðu0Cxêû@;#%:#pÈJHÎ4`@úÒ<£`çW ã0ANÊ#°ÂÃSCAZ¯ã+êê1ÏZ:à îö')"Òà Ú{à6#ÈËSCÍwOoÒÿRTÕ%l7K FQÃÞ6Ê#}x9k¦1Ö· �!Ó3²áC¾'J Òªa²¶¡IDï0IOMÒªí*HbîË«"Ë&ÀÐDd1䮨«A¨n§cO ®$(]¶Ö5øÃ|/Ãt¢G&Yᢠãyóä9ÁÒ3Qvy]ÁwÍuô)ÒÔí)WØC$b4´#&#'Ê9+d\gTå<®ÊPßâ¾3½=sd´ ¢·àÇRóÍÏ(Á`Ø7ÔpÎWÃ`ëYZ2m¦5Ù¾ùÅ/bÀ'B )/)Ðcº} ÃÓJ: Ë«kv¶3Z£PTCG3]4ûè2t>ÏÉÎ{íË`ÃHõq Ú8*4½¯n!=ß{ßø!·'ø½/Ojº¾²æÁÐzJ 2ª¥XõÕ#ÚTÏu³gÀø«É|Ï¡õ>ÃíÀYa(@ÂqoÀܼEþKýyiO:¸ÕØi±(ªVÚçx¯£hg `,7V.d`b ¨5)Í5§»@PÖá´sMn=ؾôT°Aò'ΩÐ~Éß$ú\ëñ&%»pìÚb'ñ,0ª¼/%ȹ¿NñßÛÊyý0ê +ÁÉ{/Ǩ§_K}o¶9¾ø5ãËÀ¥xÇÐÐþd)yoùç)é"`t°I"²`³îw`"ðª`Ea0%a cóÆyòQ¸#Þ´SSÆ AªPÏ rSKµ¹÷&¥`B¼}Q¬D¢ÝâjÓqI5¬HÃìV +QJl:(PÆHc j½K=ÐCêîPÅ lï3Î|N ,9Q¦XòѧóåÊϵ-@§ýØ79öê°¤+ +fI4 ¥ùCºð¢sè:NÚ/<'Â{3®ÏÅ5?Ã-¨®4%Bá&ìm#½ÄIX3-e¼¹rôY~¡æ(RÄ [6f[ˤÎh+ù¦©æljeY·T&ôLZI|ö¸³å9Kêý4V¢Óú= M;°øOÚR¬= ì % +ZûhsË¢6 +|SËF'm£nfHzA'Û,¤ª¹ÆÃJQ¡¶*cLé«ÒÙÊ)Q,ýK¨V.£Oêh*i5æ7G +øµQ=Vw!&pM¦ Gïj¦ ROEw¦¨UuP½O¥Syà\0 "¡zñTu{q5õ&µ°®ÂýÔº×bí0`èa¥ÉWÞoÕ;~îr9[]{³vêíÝ»òaÈ)IãÑF+¨¨öÞèw½Ózï0mùqQ0¸ËçÿÀ7W`Rû. +©øÁg»*«å=à MxedÇí=ZÑ|/d ¦NR.Á6Ýd¦H~(¼äÜX°ôÆyø³D+ÕaZ|EòÅù^u¥Ò*ÀÂR¡Óx[s<¡¬xeg4ös 2û+ðÊöiN®x£#B±±}QÆ3ç¤2˪YÚcJý,³}ÏúAè]«Í76Å'±zÞíÒGKÀ_¦´æºIjG~±¢Ö>ZE5°ç Ô²þ ÓãmÄ}eí´-Å°ÆÆwU³²-TÕ³ G@áo[93DáÛÇYU}3ʲC03¨/%·¾ù»ìÄëý1uçP¸;Ic«®b$'0 BI Á·@fHwíââÚÞõ¬êä\ÛZØ«µàyÒRºæ-õ½)ix£çªpfñÁüczðñÇxÿ!ä|Stc[åµ³^nbåyèæ´Çs¦ÉÏ/ƤOçWÄþ¸ø4鿏k?ÌAd%HWäRÔ+ðf´z·åYJ �NÀ¾[Wp^ñ«ÉGzAfí૾¹êú/5.é3êLðsãq¹U+!½ÃîYmÒgÐLI1úÀëì >âÜøÀÙðåóO }gH¼¸÷GkƧÊ0ÉhÈï÷tiÈz¥c?vúg}á`&ò"Þ}ü?Æ5½Äm Ò3#É>. ý{Ñë¾ � +endstream +endobj +62 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +64 0 obj +<< +/Length 2405 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP-#a@Z). PH4e F#qpÈj3£U#A¬,5Iq2§Å2i|X&IÅBKF£qÀÔPT4Nb±Øu2g)Òf4pgCF$Úi7M§Shèr0Íy8ï2ÎúcI(.¤R¥u!uò°T¯Ôl3\ÒÔ(¶[7Öïy½üÄâñ¸üO* ËæsyÜþFnÒéÍÚ^TÒg46X(¨*Îç¼m¼¦C)H¤ëÈÜdcÂ0ÌCÆ1Ì$Ï:ãÆ9£(ÜÖ5ÃCÖÙ=Ï7Ë[ê,¾ïËöþAÀs9Ð+£:[(èÁð&ó=Sbö½ï·& ÈlÀDè@îë1#ä95A ãÒ=K£ÅAãxØ6JRt/CPó ¿üÈr+¹ð3¥º°d'Ê2«+Ëã+ÎôËrì¿0Ìs,ÏJ\Ú9Mè$rßÇbÀH ] +K <+FÕl Ê9HÇIÍ4°Å7FôÔâú8TüëPÏ>ÅrUÕt%]*VM:Vðí[×5ÜÙJMSeLX0Ìtú-«Ì �Ê2ÅÏJcqÓ759ÝWeÜÞ5,?E^QÕùCþ7`x,'hW#¦Ká´Üå +@ª&R5âÖeéTàì£81ZÑih[uÅu^R·öXW8¾"B¦ý""@dÿ @7Khõ[ø»Â ê9d#5#¨Å £ò:1#Ñ'4;ÀäÁÉØ]ð¨çw*¶+Â¥áÂdÜ·i|lr +Áí;^Ûß{æ2ó½´ýÀBøßl\KÃ`m¨5&¼_Ƕ¡ÃnܦË;{§(*øiëÛ �1.92ä·}Úò9ïìØ´PiƼshòJóãËö vs;.Ð[SÖmËíì½·ºûáBlyò¾wÒôÛ°vNÃGlî +º~.ðÛ?ctðá4ý PxP!0$p îD«ÉS±uÃkB¹lcÎj[x8ðàCªX!¹ÃæÊÃHr}ÏÁù9èäË1brÇÄ´ ÕÊÛ;H:°WÒ �Cd?d¡Ð7nÓ@P(Z(3D5öKÕ'F`Ê_Ú^yÏAÍ3¨Øç,oB@9Dá Â*;ª¸òÜü|`é¡1édZãÁ¶»Þîͤ7Þ,ÈBhO +L(§Ah4ÀÍÆ§5%ঠ+Ô6÷i{&} 0GÅ_D.¹ç¿Ø§."³õp~-<46BâìsL0I4£¦¬×@fbm¦¶K7ÐlòÖËx7.]ôCô´4à ~¹r<+ 32Ñ8I_aBM sPjû ÓönÅjÞÏ+KB!:<xép!¸0pÆcÈn sα;á(!Ð òà( ¦õ[m*T*»×~K§ieø´§ ¦ÂPxáP*óø^°2(9ÿO8Û&f²U7¨µÎÄÖpéH:HùHÖ&(;¥sþ]<ª±^<²oD]oõéMÝ\N¼µÚV(Éó^Þå~KÞPH + C gSÈ 1rt[[dGð3À¸å +0 P"ÄJÚݲ?nÁ©¹ ÎÞà©pí8(£LÒPl®Á Êæ¹:ìt¾rá �EP¢[k:Ê(f¡¹Õ@§¦Ã¨cfH9á ÙI&"p¶àÜ +VW/Ë;\}Ù¶6Ì2'mí¥º¼¤`å[ÇyêÀ4¸ÇÎäܰisЪ¿Ý`S± +»ØØ]àoxEj!àÖáUôA@NKÖãâT1Æ5¶ØÒß[»zU½á$¹ó\|®H¹ !¥ ÁmÒ×8å«t%î«L½×Ãe;ºDFWÏd¼»VâÜ¿Ò`ØC>8¿ß ¼-®7$üªÇ¤óÄ2wënp2¶@¡äpPAH3AY[¾¸¹B)GüÚådMÜp5É% A2 E33`¬ÓªHNlÇVõú¼¯¬K4ιðc þlÁdì¡©´qÒX2oy¯D rá+ð¤Ø%.TìÍmMq1þ÷j\Ñ2¦ßÜdxí'À3¦µ¹´ªï +dxi¬7olÎC·ÞTÊÙ`㫺 Á]«G0Äâý\8=ÊNíy Úïr¡¥DÌ ×AKÏ#®Á4)Ú&ó/Ævãpq¬ÝÇ +/Òû§!ýos3Ð1º7NòíÌtyÒYÈ9 Ï4Äî, äÏÁzðÆÃ{~|B°QTEtt^w¶, +Ô@¦òðFï ÷xWÉýÛå¤U¯¨*®ÑL^þµØ&LÁÃaª© í|`ïó«ð´©_G|BêôÖCÜætk²Ðí¸' >Áðú·øë@À¾i¦ù ÀÚ?ñnÍããSBìÏþ øõªO=$¬ DÂ\¥6¿-2|Oøªê`ùOýOöo&FUC²L/ÏÏÒ\(Ù" +endstream +endobj +65 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +67 0 obj +<< +/Length 3356 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶("° @-J¨$q ÃACài¬U*¬<k¢¹0*n0ás@Tüf0"Ú Ìb("FóÎK¦£Ó*Z%XÃP¡ã*¸ÞµdNfVÁA8Þn2 %CVV¯]WÄaÈÈ\6«Ér#M²ÝpÔÜî£Aös9JFS6èh(2¦ãýJ¦ApUd:Ǥ¡uä"ìf¬oSöViÄÆ×Êåó9¼ïK?QÐÇ¢zXðÔf.SöM~ÆÊ³"Ø<©"z¶ °`ÝAp +c* Ò6 !jäBc&!CÔ8¢ÃÊ(¡aDR ñP1Ãñ@%Ã-àÒ6 $3 ÂQBþ訯 Í£V5ÏʸP"å 0T Ló¨©4ÎĺÔ5Rb6?ÍjA)^ÝJ à¦<Ãxà9.{ Ê.ª&íVµÁ£ÄÿÀ¯:Ì Àá@ª$ A°».@®' �,: #0óQH"B¤'u8Ú䨯.!ÛØ®àpµ +#"ó&o@ì7# @!"`!"_X1MSõAQT $6c=Yu\MV¸)S± ËbXÌâ*Jï"s='¼wÕ7NÓõ ßS_Wùc½ÒÛBª´s쾯>¡3QKtÔMxP"9Ãä4/!°3Ë«=ºóëí»¡¬þ¡tBrÑA@¨4¡0*Ò¦ü!ʱf¦«= ÊR1bin@?m¢%p£Ã« Á\2#£!0;ò9îChAXWã\ éUüéiºøb±®È ìÚ³&ôbµWö Ù²¤ûµËª¼¼Î8#Ã_îCA:ïü-ªåÖ0Òäî �»^êVHb&\pÙo àòì=®àaÇêalø®óH#\ËW?EÚ8;F='MÔv`*ÛU~ÒZëÛfé©wÞÑBª} 8ûCø\%(ÏÙÓWRêëéÄåGÑàÐ{D)ÅWç+~'¥Ø×Ô(4í%YÁÁ;@äüAGð<Á6V i3e¸³@AÝ&$yå<ÈRyË~ ;âÒ (N¦!ÅFQJµ §PÊ̸doùÂà`imÄ4x0Þ]t.e¥B ¼9íMÈÃs¸dY<=\& õjÂk9ÁÌ0s2³Ø±÷®ÿÞËéå¤ûà+b«ÛÂôôYø3r.*¼ØT[9H"Agi#íþÆE*$¤VÊâM :Ò]`p íñÝ·ðÞöüÖÀ8ÄiI)ÄN&¥öHÇ@NS9ä&J5ÞªÞÞ8iÇ-Õ¶ÙQ ÄèCæÌÞ\Éu/!4V8E²1]K ïü9;Ðæc£I2^j:Ê>¤Þ%ÑîéÊiT°OöÛPdb§ÒÈf@\ÙU+´XIf°¨YR¡Òî¢(âYßÃaê8HBéûN,Dð<èm,´´FÌ´épkêQ¢2ùøL¸Øè°(ªªdG +PbTÊ!¹¡¸{KÃ%1 ¶¼@ÂsHaå Jõëà-¯Ô\«µ{Ñàb!5ÒÚãëm³máAU<`Èb§.'0T£C(xAɹ-hÕ*#´xQðËÄÖìl°q!Ùç}hlò;=u#@"¤DÖH7Yq^µw(ª+[5$Àr¥¡Òíè¦ÿaÛ¤w1í¶Û¦í jÎYæÔÛcô¹ÛɶçHæ§3NIàæàéÌ µbæÔòp3¡ðÐÏw"y´Â52^ÝJK¤Eq®s9{ ^^Ä^T7 +ÇÈ [!'¨dîÔ9»wsmA½wïaé¸,tK~55¡´\@q®->ð°6»>* ØÀh®J ´t°V×lN ̨hJCEùÊ=kÊç¢Tòp]¢Ø(Àb¸\×ÓLÊùL1aº® »7U:%Czûà²P3k?6Ôlís.q¡? FLgU´ai:(3I}YfLâéÊ¥ å½·Öþ¥Ö¨ÁÊ.èÝ<*Ø[Z ræ>Àj_vk|gcC|û ÍìÍ7³ÜN騷¬÷ò6§s5§WWV}rªw?È£8<ÃÑoß[GùQ¤ÝŲ£Ò«T7>éwyÖ � ØYPáèÁUòvÅq¬¨2bÍ0áq3´}Þ4üáx¨wµ¤=ÐrÇw㢸¶÷tµ)à¢u9ÓO·ã_èÙYðè6ÖXnÛ»{u§6àûùgK;ûZ.à¿>ÅÝY6!EQLʤÉ× íòëfX2*8ñöº,8y ªþÓ7XÂjä:g9©&¼ÅówwJÒ|4ÝÅí¿SÿM-F5w?¾ªòhjÄî·ÊÙùÈw·ÞbO<L!½{þÂç¢rX´wÙïls+_W +Â,¤»0éLsN¬}>´bʼºÊl'áùås¡üzðe«p¯`p7kvn èT)DÎzç|N°Õ"¦ h¦È¬|¬.ìê¡íjÎZ%îírál¸ä (ÀE© Ï'|ã,ü tx@Êoz-xþã¸Ãª&©ìââ *ª¯äßHF«CRgÐ>¼HVÿE.ìOúïþ? �,B"ë½.Hbå +¢ÐèzÖ¨.uâ¥0ZTpb9O¾M"²*üN Ü)ÊÈ/ ÞÐâCìÆz©O ÔÏÞò½ è,ÛM¸ßm¼ÿÐê p¿0ø êRp +SPh$/o &¾.ªø ªY Ê»ÄìIRüg¹ìé*ÆFç°efÚn±*xº1~*«¥ÏléBÎäô&ï' ¢rûÎÛyÇNÊÜÅÿ¶8^uqcq ¨ +@ªª4£<¤éñfŲ +qøk¯KcÏL<è§8ý®O´.Qt.Âð/BøNãÆnü¢*üðz#`Â"HhPà2Ã1æ2¢·!·!Â0j,"2IGâdÂn¦R7|c8c.9#ñÏÄkÄõ$ü!x*äLªh²T¹oßd>¸#>1Òjh#f|ÒÐâì$AÄ H$($6Ïà àêKB`#½d& d|DÒÔDD ØerìFã.b.²îRó/dÄ IG!⤠(åDª`$³%©Y!b³!¯¢CCø²l@ âdÈM'¤ NäN8f¦)výÂNà(nÎ%¦Z¥&À.ä ½rôRÅ0U¥Àbçº°ÚÆÌQÅàó8Ë 9(õ9e~S¡*ò\é&3N|d"B5¤Ò*¦Q"ãxeæeÆ`mÛÓq$Cº7òPÔ§) +²qMVÿ Àé8³9_Oùô `r5Od<±È,ó4®1N¹ +>j`Â.¦ü ÔLµM..c(chÚ£êìKô¥(ö§ >?pbÎDÐví®Âµ@èëVçævBú¥+Q{¤Äø/*ÍÈMd,HÝv èü®³)Ðn´¸£à@TÁLFÚÆT Ç9N9 4 +OG{*m^ã±Õ£ÍBñÆ¢6áLF×P �®åL=^=ØGÝFhGîãf12` +endstream +endobj +68 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +71 0 obj +<< +/Length 2143 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$c + C Ñ<l0FâáÒbT"M&`¡AÊt"Φ#al4ÍeCI´Ê\"IPÕE#Hé0ÐT<j3Bë ¡hÂ]PKhð¹°*pr¯NFãèh2 ¦Å´êm³æ#)È@oÅmLøÚi6ZfS¼ÜdÊÎÆ#!F\ÂtºS73 ºéB¢C!pØp7ÀÖ+X©Ö(7Ìy!èw2xÙ|ÉÒr9ð8¦AÏk·ºÝð!pÈcЦU¤«i; «fî£ èÛе2£xÌ,ÔÌPLãÈ2 °rÒ5 Ïð¯h" +'hf#hlªa¤Z*$ S °¢¶qXfÝ2(P)2,æ¹Ã¯¨$À¢È@o¨Cæìx髾°¬k*Ïrà¹DÈ*ò¡kàp©NÁÇá �Ã{È +ÃØ:±*í))ª;¦ +6øÄ«òÁMPzÖ¶ëç8 ËÕ-*¯îû>º° +¨¤±¬|Ê2ÌÃ4Î3ÍD6´3PµMe×6 hÛ7vÞ ý¤á¸®:9nkYL3vÆ:î˶Ó;ÏÅ^¼¯;Ó +6ïmøRoû?Øbý°J\û?Ç×"¹°<3A ÓÂp® CPd;4ÄTIVÑE_E¨^Æ!g°f¹©"[ T$VIP9C{Ñ([s\¥J¨¾<K(ô¹/_o¬wßõ �hE¡ª@úÌZDYÈaD¹`y¨æ9 ²eª +Ä1ÐyÃVÎæè2Ø].::ºða?iZ`ݧ^¨6 ¾\yýÇ"¾¼jZîVºVH5ÎÄÝ·O³UQ +Úz4§a¨P1 !P5§a¾ÐÝ;¯j ÝØèìá`AQ}Ò¤f}Ô§GXõÃoc³»²" nR-ð1¾þòìü2 Ì O¼ò®§©dzÇpiÍGÚþ[Ñ¹Ì +yP¡À9YÓì!ÉY©·ÖàJiTp®} #®¸O +AáòØZb Áи`ÞC!riÄ )µ:¿JäPqâ#!Ój©Ð¢4ø}ÏÅ¿sÑÙZ:i{¿ð Ãr !À:lõ JToib7ç ±Sd)ü¸rçp( +`Õ´ÝÂ2Scdp§¨`IÊÙ]ÈXFÁKgeñ ×ñÿTüºnO4~qU( eO!¡4f¥Ñ7Çjc2é[l02ÉQCstZëRS PlÛ\V8Ò¼:ä%h.a% ÊÉjw(Üöê È~!@à©3s Ê!ä9¼)3KR GF¨ó2ÍMAxùLiX F7©#äQ«< ¹N)éáØzäà Q $?*`È\Dh'Ó^)ࣰo] ÑÆÇ_ +0~<wQ'¥²HPo!áþpêÕ@Ic%u}iR àÕâ+EpDØb`.Hå1$»$¢RtXoj7È»Á£ rµQ¥s1.élrg0Z=( qö?ªª2)õ@:T¢?ìðÐ"CóÁÂW°u +ÇkEC¤9§T9¥J7GW)¬!C {C©ÚD6Nã19¤±¥k b'd²ç¹h¸µ²HêÀèlÍ_KòÁÓVuàeR°öK e&eÄÕ8Ǧ_L �EOº!"ÆET7ïâªÕyVY \fLÑ@vsXÕ|["µ¿f Jãª*8§g/@¼:!ÞO2£;Q¡ÆË|;i í¶VÞ 7nÚ8SÆzïÙ×ùnÞÌ p5àqÐýÈÔâFå 2+¹´ÅVK¥Zn¡Ö¼âwGÄ)09ðÙÁCÆ'®ýÙ<ü@±Íã½an=»ü_´|FòWÌú 8Ó±ûÍÄ«Xö2á<Êö7ÀH X¬íù¬±s@ðdàU ¢0Ê ÁÛ2ªLÉÈ&]BXO +AL+¥¸&¦ææC3!ñ 6ÞO¬NJ*K¯Ó@¿ �¢SéW1®S×^壦*í" ôH³eã\_Gì¥rJ¤M w&õ´à×Å7(L¬Ü4Á~-¤79jÆLg6^k˧ï@2F42 ç[ÝR+(«e%Uù/ +|Ö0:þpHs¥Î¯:CI(ý_©Ü?ÙÔμmjÀ¯$ÎÚXÈOn¶Á6æîä{*ìmÒÅôÞíd;½«2Cîa¢Föz¢øïÇdÌÙ«7±½h<R x1®×ÑÓw^ÍS7Þ¸XQѲ/¿0Ëjm¸Ýbå,[¯;ÖûYh^ +nÌ5êê]ôã +endstream +endobj +72 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +74 0 obj +<< +/Length 2559 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C $N'L FbáÄxn1£ÅI0(a/ÖæéxÂI6 +c¤òL'QA¼ÂdO®BÛ¡¦x4¯"¤d(0"ÁR9ÂL·»íÿ9bO"E£(àÒ>3´uÌ@-¯ÂFX!UQÔ\41ËôÔê +£ÕìÑÊÝv¾0i9Í®61·kFäÜo8Í'<åu$¤ï¢Ñ( ×î¬éÃMB¹5±Ê&à¡A ' +b 'b((a)&.xn--3ca 4LË.." ØðB0Ò6¢pÂ6¢àR " Ô ®n5 °Þ4kfÉÁpó?Ð@Ã@7c¤EDÍÓx¥7î ö©òsL¹ l«îá:N¢Ô¶Á²»b Ê9cÒ8HÞ7<¬òô7¨r ö"³»á0¾Ajã>ë `!Ò* (Rtà!3«~IéD^¯&q»Ápk5DQ,NÓ¤?Åmu,äý§! �:ÃÛ7@:c,j: ð´0´rÍhÞ2°à\ Ñ562t?jWõÎ þ«Ol\6*Îü¥áÊ·X¸Ò: jáxZk[ÕÈæcÊ1#0Óm 3 ¹RRMȪa²Ø×¸!p¤Òîx`¤¬aD.9Ã6=TO=#SµT%Å¡oÚ~816¸è2AvB/* ÕJPÏà3¥$áV4ÙqÐX½2þcxì9ÑZ$ç·Óü±¥çÍø:MCpÎ|Ïjã @1Íã Ãè6f6 Yx1Ì7î}ݱlKg[ óVÎÄÚë1Ñ# uæ¡h ÅQfw»¨1£f7mC'ØVf*6ïç3¡ +ø.Ê;ß}Ò! Ùìím]®fa4c?éY=Éc2hÝ×b'GÂAáEC«TºÄí+¡U[ùëÔam¼°fü¬[K§\Õø<È£(ÛÀö|/kÛù7w÷ºGàhÞ6ëSô<°èw_hmzOÅê¾DÑÁÃ9*ïï 0ä3¦úZ²tɵ¶ÖÞ+chA</ðêÛZPɽ'Ôçðet 00Öí¹¯Ü?~ +L-`¹@ò|y5e¬ÐÊ×TYì*cÕ +lzÑqðB¿ £_a°ñ²ôjÜP!P$toDì;ÒaUTn¡Ì>¨àécÉ!ÁGuòÐsÌî5Áp\÷#Lb±1V²ÒÏ×hQÑO¥aÀ¥Ì(¢øOÃb [A62îíMâ¸"bÊÑQÍí4RT ¡qA*uE¸"¨rÏyr¨7YhJÅ{+dܾX*i°õ³´#f:j)ÖY®g6¤`Û£j í¡,¥³¢<I7ÄNƷмÔSñkÌÔþ 4%¢ uØÙü¾W«íüZdTï*ÕÍú(ê-ÆEeL:4Iµ-ªf`]õ8Òe¿É¦{£EÑÅ])§?HI:TW²ÑÚH44i§ðpL§±ee2öb%Dî³ÁÏÏ9=ø4ñ¦~FÉÄ +(;WSuH8ìÐVzf¾dJkѳYOÜÆ±£êÐ0ÞÀ ]ËÁ\¶¥t¸dfOa%ãq%§IéPÕ@hùP'<TÒÒu§Âc )<Ç:*µ +NÄ\âòBf¢äü)©¦±àldêJm*¨7Zs=+àÄUbcâ ¿_`¥yÌ¢àÁR-`4XàÉ©«HÖV#©_AÃ)`6u}/ÀêçsmÍgÖä'2¸Í¼6;õUgÕ®N~ÕÚ¡xCD}R6U¨0q±À BøE +AH' +FþâCýI1ó]x¡(¢WF´z/F^ö7kͳöÔî-úÄsbô3mQÃ=¹DãÚÐ@©gKgBÛUp[QI·aÏ8SÈÁÚ»G=÷=\w%Ü9P§:(¨6VÍ0h- ¹Õ©|fSظFü¯³§½4åÐGtR.ÑhÕu¢yeäþr¯ cá^eͲa¯°ÇÃeqí¶i¨kç¹µD6d3±³¿· :fÀ)ÚÉ}ÐYKïd¥Ón9Tض¯ªÈ`T!ãCYÔ¹9LD÷WíÖ¢ºÈÊÊ<ödÁäcMäç0h66²ÑnëÇm6¸-ËÜ7`¤®Àk«Ð( ¤ðç{[cp«VMIÀZit?i«Ùi s¦ÏxîS½0µa Ýû'+¥éM©¡I0á4úøÛçnsIh(¤ÀØ1-ô±¥kµÙ{e}°\89æÜè·oÝËÏwF×åg®}ºýV¬ïpÝÒH&áÈE§[°r^yé>Úýe]6ÀÛÂ:½â¼Ó±4ý¥Oõi=ç ß �4ßè"Ñïá3¢äpÊC«£èº{bl`éØ9«©îõ÷¾û²euZe_/²FCïÁá¤Iξöß òa¿jÐìeá·Ì| ŵiTtÿaÑîÉ|ï|ÃÇ À@¶ÞbÜ`)^¸8Ê/ÜCÛq µ>Ùé(¢¦Ã$T¿lÆcËú¢·ì8"ÂÐÇ5&P%<"¨) +L+P@f«k´üÎ4-o-ëv/c ©h xß«ò1«È;doIooÉì©4 ²4-âJcZ5ãbf6§R7%H´¢øRøX5cK0¶º¶çÆ;cº;ãÂ<iÍo¾Í¯Â#B ùË©ü?¦ªÖkíVÈxà àô +@ ¦ ®Å å¼0åzà ÀìD,xêù` +)ÃæcD0`ÚAF +°üæLB +endstream +endobj +75 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +77 0 obj +<< +/Length 2682 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢#J¨$; +A£°¸b8 Fôá¨ÞD*pL(I$â¤î21 + ÞwhT@TN.ƪóJí~Ãc²lãQÀ¤e9NGc)ãs¥ÅÃA7y¤V.²áÎeDÂyP $ÒĨj¢¤tmÔAwG7¼Ýj¹ $XÊeB 8EÑÌ&Bi¼Èu6KRZÎg¢1§¢N0L¢Í@¬O$;'±@Ârðó¬¸)×l6ÛÆx¨Í' HÜ9»òبè[j£ahD]jhqÁp©¨·¡¤F*/¡@f¡pdÄÒ"1ä4 Ò7ËØ¶pò"Q",êhjÁ$¦$È`Ç 1)HØr#©;43ºê9Ncè:ACï5¿H4¢¤Qê>ÎËâZ§© ²¼Ã¨Ü1ÉRc³>a Ê<£ê:1ðÝOØ4c 3U³û¢!s@@7<3HÞ3¥t0Õµ}cY¬4#º*KÃúÛ£ty<+SÒiIä7ÃHÈÆMWBM¨ShàkFZìã~0®Ûºï×·B +ÙMôDz«ÿ1[W @8=õíP9W<Ó} ÓuÖKA¼ëx«Oôöµ½¸HÚù>^!~bjhd³Ôkm2àØCàñaw-:0àã}Í}<Ñ´;RÕa09´Àë×Ó/,óøÿNìäÉ=áÓTÙ}âS6þ¡YU°Î³÷£3£píÐí¨dDQ&ºýçl/õ$0Ò2 Í`×M#LÔ5Mf:h4r`è0ÜÔí 4ìoÜ:o#xåÀaêXd Ã(ï5sÁEWVsô£.Ì4Ûãw-ÌHøÍÍt?ÉÙêUÚiïkmé:»<dû²oÓX½M÷A@Ä2ÜÃ<Õè ,1Í%qèsâM4ón2ó¢vÖ Úz~I÷']ôUgQcõaÞ¡fdìçÈ Wîq÷\æ:ÆuI0¬ã *)Mɰu¸ë±v`13êÒZ¹v2ëMâÂËCdmeD´¶ÀÙ¥8¶îOÐza¼6Õ>bæ®õ}¶TÚãn%n¢vM^Zj+u>õÜøpfÎ]N¾ n:°°°Ú¹ähoT0ê:wDMî00béó Áû¸dÐ¥ -éT¾§ØKìp\æµ +qP7ÅyEPjGbÂq±#ÆÕ:GneÍ¿x"óëÓeí½Õp_{꯱³w%lÀUJ6¤åXwM +¬73©GÙ6&AÄÜáñ [ËqÙnæn®aé¾wÒÎpU 2¨T´bji]C5ÔÖà6*ÍxÎ#v6[pwmõµ%DFסÚ"þ²ø¼æß0aQÅùtût»'Ê}O#á`Xtìê&§B¢ ,E`©aªé½$0¨#¤+¾y.TMµùüVA²7á´:ÓpÄNâÜK¤øÄ¾v&-«a 0PÒd 3"͵áɧBA¥QR¤ÅBß,#|ÏÞ{PBZã ¬e°º ®Ò«^¢óoº& !ß3f%P¤ "cê ``HèD0°AÜ+®`È[Îjê»1Hyb ÙcU"¥Eë dFoò½þ) ïi{2µàlnë)[fYJ°ç@Ctí%M=k××Å+«mhºMzûW¸e<Â'þÀiK+Or¦:ZuS8Ücr +û©PØ jÂ<Ô7ßrß{]¥g)TÀçÎ{ÞáM)Guy9@ð@0 +sAå}NúÒ �þ'M8öcb§ö¬#CD>nåéú¾wÑ-8waâ«R +o-ÀصÓx ²CW0HôÎïò~"~áÌ<¡ã ò. £àLa 1 ƶm®Ô «<0ÇÁÐ)åÕPr&)Ãy$T^f/NPiIxs,dÁÆ 4i]bk¾qÑûª5J©Ã%M-èèÊÌ&ÑÐCX!9¼ÇqzäÆM[5cb qV´üÇÉô µxoµYª' ɱSÞM:; `I³UC~¾èÔ@¨|"ÂÔ¹#颾¦²ôÙY=låé×#~î9¦E1ØÚ%yBN.¼f~ë)@GI0*Sg-rRôràJsuN·óÄCy¿sÖÙ«[PÁp3x¥¯°Tørõ² ÐXÓ^¨¢aÇ(H9*ÛÝJ=µ,qfs4Q.ãÔº¾Xò°§rf|zÞA;£vSïbÓÆõyºÊ:òÖ£Ðlj%{ÐÓeIáuKÁÌJÕ`ƨ?et1uÐø©g1NÓNüÓ®ÔM×/"ÛÝtº¯ºWN+ø¼P¥6` y¾¬J_Cwh^9.E}r.Pæ-ùßg½§PÀðHà0*×&êÊPã{s2ëÜÁÙ®HÐPoâ}Å[,Å:®g´¾üoºãµ s>¦8ª~°+åS¡MæFaª!¨M6ÔRGAGÈÝ-ØIÂ;ÇY:³>¥tHER¡KD ¡(>êy¯¡1>õøäª/Nògë§ -,Zý(Ên¨Î°r.pí «ÀÐîçȰM#æà BîCÆ\§ÆùFh¨ �çü}¦#²1%äLxN¹FàXÃ8C8Àà +@¤ ã°oõE,pQVééHXNêúéäö¯þê&êΰÇP|½pD.!`¤ +£ öö¨*Y/~â$(ÔHA%Vù{À@ ç&K~1#È|ZýÌS +`ºEöú>úOÞ!1 úï&KÂû²ûæXü$x2oÈ0£Ç4Ä«ZýÂ&þ.K$`þ0m¤fQÅèj¥b©®to' ¦îkØ®äðémÿ Ä>#¯éàÐ&òåÇú+G6q¥ÆS©Ã¥<ùkú>lÁf®¢B +endstream +endobj +78 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +80 0 obj +<< +/Length 2882 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AhÄn. aBÚxÄi2*&³@Täa< ã"¡ Êr2 ';Q¸æu3&3IÜtL¦ÓyÈò :ÄÃyɳ^MæC©²Ó}ï§#©ÀèeÃOSÔèa1c,p¸SD£¢tØàâIY +VæÉÒZmbq¾ðf7MÆM6¢TK +Urr4Ú{IÀÂt4ZÝÿÅ¢ñù:©ÄkÑÛE# ùÌÐa9MÆq@Üe:鈴iÀäß3 Ò7ÁÎÿAÞ¶ ã:9-#NðNB%îcÊ® Ãh½*ÎÝ-Þ¸®kªî¼¯kêþÀ>9/ÂÒ0عºðÜð50³È*+l0å©I¼8§dIèd§ +ùÃv̳lë>Ð-È@;+`ȵ²C´G 8ЫÇ#C.jk%'2b ¤ºr°@á mèï³Lã<Ð4Sè<LÉ3M|ÕÈc;O²Á)ϱ90î».6²Óʼ°ËL`Â0Á �Ñ-î4»ËGKHÈë4ðν.îÛ} µ*xd¨A]>)JÐ ¯ÖÌCÀ`òÓ +ReYb:×ÚR<5"Ròhb4ØbDU£DݲU"Ð9lÅ+7+mf¦ÉêüöÊ¡ ÌÄ-8X¯@â:7۴Ȳl¨éÈIÎ'JzÇcäø/ëãÑ>ìÂØ £qºÝXËÃýI #%°1EìHæ<ÆKÝþ#ÊR6p`"î²ëª¤®Èà¨5[Ôçb Ï:;½ÿ~¢Ê3I¡ QÃÊ9Ù +8¬¡(^®"Zï $!pe°jz:à6Â`ÓfàP.!`@#-/EÒ/Ý7QÕ +ï.öAHSpñZ¯IÚê'à¡ÐºÞѵm>ÞØîTÖ½8Ré¡O: ¬[2ÁN²V£(0¿ñìð]Wì{AG¹ï1ÂE^21ßw¯Áþ?nB¨s!ì¦Ð@ÀSg<``ò¹BC ´@ÌxȽq¥-¬5¦¸DÞ ºB:mmç¡Ç¢³×r L<ÐàË[ ¡¤»ðäá"!ʹp@ P#ÍξDVÏÃÝáò¾rôé@I ÁL*Â* + %¸:À"àR0pÜ=EC+ª>Eà1(Üù@eu �¸ +@M á*ÈÃóß~ÇÇ:hÎãLkaê)=ø÷T²CñÌI :c R"-EȽ#dîò»è8×ÚÛÂ!06H´*yдÂöVÞ@Dpáød}Dqñ]98× 0O.a'6ó¹N¢S?GÁc˹uO'ÎWÿ$ßÄ«v`vï=dî{ò¦;\Zúý0èÀ7#>|iÀKU E\ xX*±¥HtjÖrÐ!kI8³_!Ù³ß\ø8ƬJä£g*CIÉg4wæPC¸{{Á%quQò\ÜÁÌâ6+düÊb6746Ó/BÏ×[ä7GäáC`uLçÍ:±ØuA½Ô¤ÓgÿÙèÁ@w ÌìÖ¤mm9$²HJ;KaX7i)jNdb£K¡rieþÒRIÀT( ÙÈÈEÕ ä8hhÊzKI£d&Ø3s-vË!}`jÓ:Ì̽Tô©Ãe.Æ Ð/âblk±ðù;àf * ;¥bY¨Égi$<DÐÚ; (Qbµ$æÕÇ\Õx Dð¿À[wUrW½ÃZù(cÉãW¤¸Oé ¯ È7Z_ÂѸ¯ÜÒÓZ0¤](d¬Huëni5¼m +lÊ<ÛnÕۣɲ«¦oÚumig¬¾9Ô°CpØW*éWj¤ydfH8SmËN·prúÀiée§× +¬-rÀQ2æçX ÖÄAÎÄâ% -p °+ñ~UÂÈÄãæ®k%]Å%ijà@k)¸|µT½23|ñaï@µ+5â°åÁ»QÂÕ$%gÖH¿ø.¬Ç>üNëDar +¹AɨlÐZ[uæ'×8âZr¡ÊØÚíüèn³Ý¸Ñ'M°p'M´Ús I¹Nöt®H#`Øk7bÓʰüfÜu2Ö²7 °DËMì~Z uZ¥ü]¯)8GuÔOaõU0í2ä8hÕÖY·ö»´î22ÈöÓG´æËÊAË7`}gÚ½õ²\=9ÂKÇÓnúnM§1ͽ|_aqÝÈ âä¼»1i˰©¨-*îX_z3~y>ÉCR%Î;cxKj2¼ §=j0ß{/YT½¦)ÿê#K*&ïp¥§y"¼Ò°w¹»>S02¦V +nèyítûÝ®×Ú¯G,åþìÀØ`:zm±Ù!!>a{3v;wa«¦¸~¸Ã¤Ú1=dÑ×\Csþ5ý4Ø6Búµ²=äìí8`¥vN;ËûÕ¦E-ÌM¿aÞÿx$rìKe²ó>ÍÃæè ·¶ÀDÈxüoðm~ÑÚsܺçGàÏÛù#ßÍ®\ +)ò ËÂØÉ#ä-æ¶1W¾+½¿nÖâ;Ö²ÉMI®F1è95ÿ$iÍ èÞ/xúoæYâHÜ¢¸C&!Cè6ÍÐÝM@ªÌeÜ Ú¶$¬Ò¦2âØ¬hÕ`ÏTÍ @ älEn_ �joäÊó +ô/þ + 0´Olâ^´p'0aJ1-î鮯BÍÖ*Þ|f~]ÀQ/ß%ßcþÍÉ¡íjYàrñJÿÌÿéøÒo + ÄnL²Ðkj mÎ?«Üp¯¶%âËî°¤bʺàÒMD +ÔìÝ +ϰ°gð½Phû)jɼQ:¢m,|¦¶üæâý$ôk&ä æ!èB Æ+F©¸kÉxüy0tVd6ý4&òo`æo¦þp'-·Rïp +òOê"ïîNâ6ðÿBòïtºuO.÷iæù±ÒðqÞu±ÜÛÏ´·kÆÊxÀpj©µ/øËqàn¬éò? Å÷BâF¸IÄ0b*BN(¨,/¶ /»¨J � hj èn/âÜhQÁæ¸Ç'OÜÀ ¤ + ¨ºèÂäØ + 0 +Ô× ô + ¦`Ri"À +endstream +endobj +81 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +83 0 obj +<< +/Length 2828 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4N¥BT C ØÂÓ%ÔÚ9@ªÑr¤0©Ð +0Tàf1Sº`Ì`("Nf3¤àt4Í +FÒa ¨´J( ÂǪÃXDj7®ËF pT4E3ÑòF#S!0¼lp1áÊI¥PG2 +#yd2®G2à ¸) Z iõZÀTøÌu7ï¡èéu2®B¦d@aÜng1¼Íßsú=3pÓíîDÓyêlùÎS¤Ì4£#Üø;ο´L!á²@å²Af @Ð$ÃèθN#F¥AÔ&);°2jK\8#Â6¶#(ä@È Z)¨@ZáÄ&ÕÂ,¬*Ì3Pì A@R6Æ0Ò¾BP£BðÈé¯î,A+Q*ÊIôYF¤dcÚ1>C(ÒøNûÚ÷ÃSPÆù PÈü<³Âù¾¯¼ñ=?¤hâÎ Çô¿¦+ÈÈ4ãD)r«IñLÂ6ôÙ¶¢t_"Àè4´Áª¼'FÑ@a%¡b¦©¼ÅÔó4âý?ô ãäð7-Ûæ:ÃA ãè0½ð\ /=õY Ób'a¨P7Ý©òظZ Òû-!Â; ÕºætZ1³0Ä<uN;¥RÐÉÂ-ShæÔH1ÔѱUCõe]N¸Ô¤{3Ýný±1 ï}|î^7[wfVÞûm|6½ãÍ]fS³±Ýé .£pÏqÞaE˦7£âÏ/ÑÝ[!XG«òÁ¬¡i³¤Ù/sÈ4(ܼ?ð Mï Þ9(ÙX£@Ò3n÷¸Î#¿ò¼ù)Áa¢8ÖígOÔ5iTüuVká¥_²e2IIáh×+*|6ÚÝí¬ß:«;}\`)û&UÔléÓ +Qß9@V(Ø7ü6ù3ñ[ä±DrA¸hålM?I߬>Ôv¨Æ½[ï~"ùpûð@;#`ëô\ÎöؽPØL*Js¨©ª¢¬ + +±¡ÉµÄ<LIP1@Ʋ .à¯wºTÕÃj' \»EW¡º/½ 7h` +íá<.°èy!»æX§Ðû �qµuÏ[kã>è7÷d|Zihಠ¨ +Pcoy +¬X[í}í¸àªcõ4Ý?zÿ + *°uZ Ì%*hüË@Ñ l¡ÈÚ çY$î y` 1 ±H¥<ê@N/A=øøi_ìÒ ÿ �ÁÌ[¢ù7GD¹I &OÊjVt$B,nTʹZQæhM ³ @ ÊéN5q ̬ R8/7hCkffiz �tgõ +ý;WpH!!ò"Q lGA¬(%¢£@ + QîpËÇ,d bê¡]s9ÏÍ/4äÜÕ! ´kxg4#¤O`|º æÐÅNæö®ÕúÃXÕb $à¦Na*VèoÁÚX"l£öªÔ=×äìke^¬W7`t¯)tØÃË:rP[&ENÔPY¹j¨¥Ä¹Rî²jdÐ&jAéÎKç5¤VI ×$C6¼Âb±ôFå^⬵֫ oé&¡»Âr4Ù,SÍc¸²n1ÛOáÁÍ &|¥Nî0ôpÒvl9\iï¤y=Ý])ÎK»vðPÙ`dÑï¬úÝPæqÊ]9 qqÊPVËW=47iy'\¦Ë*2 ´´À'°£l12FByßKÈmo1º@w9kðÉOl< í£ß¦:jÆw¨ùFÖpgF ÎöBö +p°4Æ&ÚÕ[rn5U®»È)gUÜllxw &ª°ºIDJÎ㽸ÕvKE[e&!E¦K: e·+óc¢i à21ÞQiÜñ³v»×ù¤eM$ÓN22ß@lEä"¬:ÉçuÆV²Z«£IÎÉÛÆÎ;ßá ; �^2¨FÒà·6Ôö°ëf«`¢ôØöôyòQÊyU£E ¢eùm3D'TQIó ©zµ¸a0A¨CÍ ºÂçiO ÍEÛWA¤"üªr n fuÚe@ÄÁä7¡<ÀRT]Ciäí-=~]æðÈ{;?¼yn%Õ=ßgyQrìnéôßç1uQÆ5þîFø±b»ª"¡0gØÈLeį̂ð]Ã0x;\Û*0ºU7á¼#½Ð«-W ½<JFTfôQÛ&Ó]yO±º»6f_U£¥oÄW»ÇP9¬È¶µç@Zö¢ÃÆ{Ã=ùÇlÙ3ßÿ¶a|Dn\Èfc.óÍl9jA½ÍìCÄ_°XwÆÏ1öÎÄuF¹¥bôïÚC/¨ù¿ÔÆóÞ¹³¬UËZ9Ukº¹rþºsªßN¸Î¯ÍCâ.@®Ó×cå~ ù?x.j>£Ö&}\a33uõ}í¡£1eÛLø +ÄAý`'}²Ófùá ÜâNðÜÅy'Û ¾î`Üöë4IK8ô³â0`\§¨ +´¬&uÊÈGh( H(þü&,Khª+lN|-J°VE"5Ëèé)Ârn®rîN+kåoêi æ®þç%ÌXWL|m®lX¼ýÎío²íȦÑÃÎÑíJ&7c Æ äàôEb°Cf« f°^Âç`blâFþÍfVP2(î+2¦©¦é@dwi@( +P¨`h0@i+/îH"°U¢×rÐp5ÉT ÉY¤pñ)j!*N-J|,*µ j¨©Y æ Êäv$dnM(¶)5i:±)¯ËtäÑ(Ñ0ê*"F£qAê~ckP%æ%àP ÒIð=èʤ¤bÑ¥ +TtªZª^¦*fÐìù:§; iÕ" t,â*¨êjÌʶqËl_ɳíilB¦l `¡EÀ Ãz®ì¯ +ô¯Þ +à +@ÐÈঠÏ#r;#àî ÊÊ ¦ '@e ¬Pl + +î +K*s É,³À +endstream +endobj +84 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +86 0 obj +<< +/Length 2765 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C ¼i¨S)¬<k$ÑARL +S©åI *r3ÃÆSÊ`Ì`("Nf3¤àt4Í +FRa ¨´J¡ HEÃ*xÞ¥]¯ØF (*¢IPÕF#S!0¼4qh¨[( i1L&qpP\çs÷ü #ÒX([I2Ö }j7³OÌÇSqñzNb ¸@e7GÀß´: ænäðo?2MÆi¤Æ-6m bÉä0¼al" cpî Ã#²ícØ6°PÄòÐ@9#è2®ãÓ +³kÀÛ³K⡪ § ªhb).*P²¥áÁoàÞ0\£°Ë ã¨ÙkÐèÙ»Îë¾<<Ã7Þ1Â#¨äÍãL*B®Ð@ùÄastÅ¡pnÓ¡q^Ê&l»2ÍÍkûDÁ)asN 8s&Î PP4 #t5< ÍêIxbP.3¤Æ' øá �64;£$ õ=4 £xÉ%¡dÉDËò =·Ôf!¨nÔÎT +â Ã'c(ÏF0 àt%+ÐA*è'/-AÔp¸à2cHÌ4®UÛ69°¬7Ô]Ý^ÅEll_ÐTËxÃÚQÃX]ÁÎìã<ÐX}&aµ8ÐNM;(Â8 +cHô2Ús«,+$Æ`n8 ûÿrHo,´; 1ë·Sy37{TÃd·ÖGS×vxAÉø@Ï ø +D«ìP«qs~ÅÑ`ãÎtÝ2öû/DÆ'=!SàaÁmÙm{c(6ÍÆSkev# dc´ÅÇf·¦êºîôÍÁðu¤écfhÂíÁÒüxòC+ÁSÌCL£úØ3潺p&ô*¼E6ô!£#^7eÚQPd÷Iÿ»,6Î÷2S 9CgU Ë33ÈZ,!Àr_Û3URùk¼ïz: øl6µkøÚ]ïh3Í^0R R<8SÊ«¸$ä§âÆdJsjS¥ ÀbZ@RTIyE/xòD1%pÄ¢Æ$¦±;!guÉÞKáÒ°b®QÙ=)9PÆs:a±ô@ +ð¦ÃP@ÉÒÓý7o»@r¡l* XUUáYÌpHèÁB9 ÀEIh98<£a$F Å3E!q+,' Ë Å°x"o4-Õ` #¬@÷ÐÊé +á(8rÿ¤¥R F.ÊÂ< [aÑ8¨Ê¯& É×éa! |`TAyZEh 9, Òa)Ø¡K<ÈXP3äÝéÚL¨G)NEåH ´â½+ÌÆ 0BAa,LÓmCpE *ÎnÚÔ%.CÎY9É#-+l +ÌIçkE°\·æ]K¼1qÄÇ9Q ¨àMÑê1'Cì[Ss-¦Îr)z¢ÆÜ±*?æó³dË6ó0Ú@ÞÎØ)R`¢	ZÂZKÝ/ zÔì!{jø¦ì~Ó÷?È +n!ÂAÈA 5ÄðìÁ ÖBÕÖÐdÌ«kµ!¤8{Ai︪fáh3$@ÝB>VW£ëVHá3Fð '¥s ̽iÛê± ¤%HÐÝ®u3<D#nX³¬Ë´7øCu )}%4ªÎùá@'ôHbSzY5Ö±¨ÅM*~-.èä£[FhØt£«ç¬6Û%Ý][q3µDÏCç]+vÚj<ÑÏ`e¿-F´0ÂßÙå .#ûviÞt§©â0ÅMoÐ}g`éï,0dV=èzÇ˸&d´á)PÒ)<Äh·ðR AA{-á²ÇÀÒñý?è'3ö.TgÔù¥tÔìÈm#§+>NV8¡|) ¦(Má,¨O&é© �õ_gPÚ :Bð;S¬á»/¢rÿHÀTäÅN Ñx½Ð`ÌPuÙÇí)?ZZvÍ4ú¾{¯0ÄDÝG ¡ÁìÐòD¢,G*æk]D¢¢zC ÷*@K¤âÖ$hªwÒÝ7<A#z~¶Fµéµ*ÕÔóûTÐ +Z®Nt*>¼MÿçÏR.r¤bÚ²ClÏ k=$°ojNI侪·WòGêG¹µ[zEZgk7Ó`l¤¶¤S]Àizð2µQçuU¶ 1uå0pR{Ù@3ÑD¡£ºrOóD«Â· l ¢mY»7ÀTáÑûÄ©Òmé"^Z¬;X±r_<én³Þ|ð}¸¥.äáä"Ì Åj=êªpÁ°H !;7Â+MA'åT+ s A¸8s¨fÐá àÅá©»ÈÒ}êãÄZê;«Úd[i©r. ÙÈÊ+á?iìÿì)mA¤n6Y}¯*n| TªÆ¬@Ðnãå_RY¥N¿PÖ»kT`ÿ$$ÐàyBK! $¶m9²ªaIòkÑè~*ª0t �ÿlª´i~´)¹ÆZç¨ï±.X¹C1²g H½î0b¶µF^ÀFÒY`Ðïo°´gü«\³oS&Àlg®\,]Ô]@Ï<K絛®ýä¸ý#6û¯¾Yíh¸cì <hgâP<eR'ï]Z3 ½oò9ÀìälÿÅÆÀàå É/ +`ÏñOvæìELlÀ,ÊÝfd%æ4¬D<$¡¢zSÇÚ\«G ߯OÇÞ¸ø $ÄJ8E§`TÇ^ù¯Ø<Óðöç\v`d +¹Ð¾m×\°n¶Åç§0YoðËúQå9++ªî(DzG£Ãbäµ �Ü Út¥ê=&Cp`Gä|O,Â)«Òf d:`;*X$UqjöÚöïrpPy¤^¾ ;#ب~.M~sMlÙmtaz]± (3H;MÑÎ;h Ùo$ÙÎÚòã&Ï^ä©Vó¨Îë-@HØëÏx§Ü¯VÕ`qíò¨ØËÌ +endstream +endobj +87 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +90 0 obj +<< +/Length 3905 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©Ä65ÒÆcAäo9Å¥#)Ò4NFSqÊsШR4 E¢TüTzª5F£pä´`0¤XÅãy¸Ê. TR5Èâq=HgãR»_Æó)¸¢D2´#1AÊt# +GÙ§;AwÄ¿`hpB,2áaÈÜ]#ðÄÚü"÷3 + -& +¨ÓiúÊeNª)Á°lÁlË +ƲP b´¸k`¦<Ãxà9,Ò0Í:Ú¿añÌ@úHË3 à¸)ä9¢à0¯ÂàP*"p¨¢0Ø0ã¸mFÂ>ÍCû¿/ò£2»*¯,t8jÔ¶øÆ9 #è4³®ÓC¯»ÕÄQIÍH\#²Ûp2XP* (RsH¥¡0óð<Jx¨"EÊâ¸â4sÇ¡D'CkîªaÊ:ÒSØE«Z³êl²'Ã0ê¾Ílè@½@Ê;/á �@7Á Îh@6£hÞ94LÄ:£°Â4ÈãØÏÑ0Û¾Ú3 RTÏé]Ð-ÑQhS¥"ÅOwÅ\H²<P0#éP,jøb!upGcÃlZ#AÑUPhÀÁË× +ESU²ô²½Òãê9/cpè6[£HÏ +¯c \ Í©[uÈÝv(Þ:à8 HÆ0Ü×°è7°Ò9¨Â6ZöÍ·ncÈçh£A|J¤©J©+Ö(Ý#?*Xç/ Á × ¦º9 ÐÓ¶ÂQÛN2 +ªÂÛÕu1®u82ÇÔþÙ8mÈ%ISRY\ÿËWn>gÂØV%dYVhé6Ãq\¥Ï°ÛVàYÙ£N¡c¨Æ¿.5°ÙµÉê7BüJs¤ª×?êpj<ÐLW.)»ÕßÏ{øb¹¥·ÃMì/9±·©]>ònÎ3Þcëçú~äõ_Ã@¤¼Ôo_hLHD¶òâ\Ë©w/,Õä2@âa}ÈCÊ»õU¦iüöóQzD×p@A¬{fà§Ö"« #7ÀÉ¿-óRqCa;/¼1²z×â(1ÉÚànü#ÄðQ"1ÕÇ$Ç2ïÂa;±^(§)-Z+øËÁa±7Ø¥"h(yC.£ºA à·× zYî§Àù ¡]opîB øZÁBB¨].¨.£ Êu"éÞ¿"¶mÑq'V` $pÂA Ø6DF¿åècGÉ!$D¿F(Í@îIi5¶4ÄÁÄU2Ð à,¼Á±M9|&ìß! &¦Â¤eKnåÔq ñ`O¹R)#@A3¦´í²xÏYÓ8'Ôg®rnMê!;'rLæþI#øÜ É L)&dÐ`nϪ8ÇÛ*ßx3zòLuäfª÷y¡Ä¨änLZR¬*Î9û0ð)£l(C"éX-8LÖ®)M 0»EÒáÈ5E>æÑ²f÷'¢/¡DÀ9úh£¤(37UaU'ø uti¡¸2:ë°-: 4îäYª!a¯e°ï[ eëa:ÚÊ·¡ûShçDTÄ[#ëLD=²t +ÊXpeÒÉK£ÇÃ- kA¡/km|&O°Öçjvª*ªUÿR{úQü ¯^¤.=§®íð|H%Ö¤Wbíâwd]ß â«ÈaÅܼΦFHä íï"ÎDßKÕ}¤)SwdþGoíÞ¼0µ§³]ï-ç¾x*F¿¿°%ûÂR*úÝ[³xëÔØÃLóRG /²¿? �õqbĸËÈøQ*)´"àæí'&ohIY¯RþN×ó×¥¡Í3¦Èn¥â*jÁ+ݼï]í5Ùrãðì<ÅWç2ì½z3N!ËpÆ`b93 ÿÁ_1çLÝ3ÎËYöeàe^Ö(;÷ß6CU4:{)Ú+ç=¤4FÌÌïJtåeQÈ̵ÃCVTx1¶uZp70\ +¡. Ù@ ¡Ä:l_cW´#ÐBøM áX" D-%3f5õS*`53cl´BOH!$*],³Êp2=fü'¦î®bÝ[°fcw3Öj¼ÄwyÁÌs dl<À$cuïì쿯ÏZWoMÿ»ðîÝFÒeèôVúÅ|O.âùÆ7ãWo»ýñõwÓä]Æ¢ FBÉOÎX³ [·BøD)ΤcëÖm¤ëmpи°¡mu8Lë8zë^kæ¿°XØ»/óÐÏÍ~;ÜHÃõ»¸VÞ]¸onÉø#³³è!¾ssìÛ¤ç~ߥ0néîÿ ÷ú;ÙLømüK}5ZcIxîD üW(GDïSråIåäa"·<Ü·[Ù$ 9ð6tàaI?hB{î<ÅíÛ= + Ñí³+Õz±æÄãZt\er m&ÊqfúÀai!µ0äÐeêvaÅpÜÎ?-¦'ªëIÒmÍg0id¦Ü÷LK°wxA¡GcÌþ«\Û+btí¸ëÙbÌìoDøNí,ÂàÐR.ÜßãMù¢$îÐ$ÀÃhR.ÏîÆ#9/âPî¯6ñ®2îPDnò¯ �ó4Ç:åCø,»oäÈ +70 +Ù Eãø @1°ø¨k `^b¾ª¸OQ(~èÏ úO¨X®³ûE¨ ð·.¦õ@¿ °F¤d*¯§*æX8®q ú+,¦ºkïÐ ðmnCoJä@fíZÞDÄP.àRäÑ; +p<ñÎ1FæpJïîC1SñVÑN$8P âÎ>#°fònÐ:(/ÑgQtR1xäÍóç×î]ÄõjüEÏPùqë + +L ÃtPnk/×-v×~³ ý + ¾Ü-ÆÜ¬±8ÌånÞØàÑôDKîãnRæúá0±i!°Y 0Ç1i#dñzòÒ&<Ò3nAB¦®X¦íD»`bîKq²Ù n +íÁ +Q>)ðª@he!=o|aæÆ{R^<ÒbKfæÑÄÖ±ÊhQÎêÅÏN´ç à¨ér À +4Ãį%ì#ò"¼,Å,O+ p>ñîM-µÁÒÜïL:áç"±üñ^a5°dÞ4÷üÇ0}$Lù/¨A/èí02Pa1%l %«æÕJò@ä_2pö¤O²í qjJRï~Iò#)Ó,§ü))Õ`S ±Ê ¯¢úgZ^Ðæû&[Eü0öçÛ Iå �Í)4Ùq¢Zñ kÊÆ[±)Î×ÈLmÏ,#d@±.ÌõäL@ÃÌ@ÂÌñM-W<ÓÁ/LâàsÝ=c,¬÷.S¿=á/s¼rRÉ#q-¤ò²MÒï$ ?Ò5$1/A2 jÿçèEþRðù*à à + +® +*~2r4ä?2MC5O5&~nh^rùÍn^ÀÈ åB°êÐMN² àÚS鯸ʢ°«.lr¾Ðe`ÅRÉ=sÈÞ¬L¼ÓY=R óÛJäQ>ñ>T½.ý>ÒñLtÀÐRø="!10NäV64ÝA.TÙN=AÓ"1s&DR\DÒeC õ\ëð¢mo +@»3Ú{e&TTqtYW=53kn ôti4xi´|[4ØTûÔlE¹Iòùm!1ý,õd¾ ï=s8ciVsÅ.óW{!ðM-rñVôÒ½ub{3 1ÎðòYnó´1#tÁÕ§ìõÒUPZôcR]¨U½C+´²»Q¤Qòur´ô8lT÷°»5!(^!-ÔnO9HoÈr7°×6¥Á ÐØ\q«7«;Ä* ÀZK põHKT¯Ô/(²HþI ¯èæm°ÕeàU35Î +À³VÂ*.IV#,öuK5sKsØ(öY0A5>³×/?n#/£WÄÅNÌãZ£N´ùZ²åjô÷$õ·OÕºD/E%Ã1fvj4ERf@ÒÆ!% �ð×aÎ â^Ôx ÌjJʬ%l¬upvúË5sUt·6p¤H>ñqûgýrõqWò +ä×9hÍàwCiVáCiÓÆñû<3ø¤B5×3ud¯vpy>Ôª#ħ-R8ò[Y·aj®Mw§hQZ*ä§tÕ7[3Á×tNzwTåÀÈ3+ç4cÏq¯ÄJôPøëÎ~:`86ÕC`ÀQasu~«~!¦kg§~¶ÂþCª°%² äÚÐÚæPÛKd`fjhÆÔa¨ +endstream +endobj +91 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +93 0 obj +<< +/Length 3362 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡*E#¸¸k$é´ø º-U#,Ì*Rêu +:IY«Ú+uÐU~Â0CHý¨1PkªåzÀ + F¢á"£cªÚoËv �öhÄD\8^áÛmÿ3ÈÝq¬Õ®ýÏèruM%«9±e*9öc Gµ÷üuÚbh[z¶ëè.¿[ÄÜé³°H $ C!ÑPAx,Ê4º$À©DÐ{;3pTäM"Kå¢)H$ÂH¨Á¨r Ð4a #pÒ: 0Ò=°hè4BchÊ6ãòc(Ï Ã @: á89 ápR¢(ÀR·±¸d¹Ís·®+?¡+Ê !4ìs|ÃI k&°,HËhÌÉÔÊò´Ò·qãdKk1º4تºàMlS7!©Jce9£²§/)r*é9.3êð½K¬kzÂJKÈçM®ÁQüù:Ésý'+2T»+-Ó3¼0<´u0ç·t½RRÔ-OD¹U;WOÕ¼ê ¢3° ¡ SÀï"®âñ²AÒ¤R\ø¦B£Ü>ïȾ# ¤RÈO¨'n#ÁnÁÊ÷è @el[Uõ o;öd!uØÈ õ«/²÷%¤Á°|# Á �±|ch¿B0,¢ @0à A?oëÿ �µ³mÜ÷ ÀmGKXèEÌA0Ø0ðh®B8ݸô* +Ân7ÃLh7E æ@Þ;£°Ê9~ xê6cÚ\0Ã0Ê1ÅÐü&3£vØ4ãt4:DãxÌ;ä Î9#nMv¢n{.Ù¢%Ò!y¾ßç¸Þ¡ÁháÄ6Bxæ=Âcê9+hÙ:2jÎücxÉ {Dzñwn8böë¯C¼y©Ý°ñ!5ã¶ÞúB¹.³rË£ÙÛtã`Þ1B2¸2@¸ù5ÍvíKì"¤ï +sß~N "¦¢ !4´P@;n¡Ñ: +%Éú?eÒj#}']æ¾ÄÒ AÝ~+.5ÒÕ![Ë!PpPhYÈ\$ÌÑî½÷Âøß+ç/^çßá¢ÿYi(~ +AÈ(lq³?ÐÊèAÞa®Ar\a"$ø + %/¤F\ +ºõ àì¿(Úq.,ÉýRØ. äð¥å#C'àÇ !à8wBá¢IÙ)C|cv¸0ÊC£[kÌr£¼Ì!·~ +@Åì JU> ¡£R#(g>`³*Ç n¡´1J¦õ(# xs ¿2_¥¬pDqÊ:Gc ö®oM-9`RbDµÔRà9o8Òç¦ëôQï> &QBv À '·$& +iaq^ÉdOJ&ôb,$3>0È×`c°X:Ào0©ñ?Cò¢ ó:£é5`i;ÄÙ] :¢Fà +päÅxA;¢ÍYè*ÐÒ >ßbõæYÕ%Ò% +!²1P¸CÍA/PoÎò~è ½nV ÕÙ0Øñ,M±vh¦$E(o´½×Û-_ìÑ1öXf6ÇmLsñz¹-}³ñ~¿X¨`YiA¢¶Ð3ãhÃr +Ρ´êë¹\7zè¼/.Ê e@ö¯UÄHÃnA@R¡ÑÓÝ®k½WïEa=4 cá¾úÙPZõ_% ͵W=öÛ»= bý©µQþXÿ[î.^ÀÒÙ Ãd°}¶W:Æ.KyEg~®éþËøt§ðN +¡9Á@f'ÔàÊÝ\×G+åüâøÿW³ÌÆWE¹RÇ©âhF»Þ%/Å(ák§le©Y)xÍ:DPCcC¡Í¸Æ¨r Ì¥Óê쪡¸<átlmt1;Ù9h©Ù-xßËÛÃ,c^µ@\¹¬¥Ì¶ø²Ü¾ë¥Z,.P¼Ù²áìǦ,Òi¼Æ×,üQ¨_&£Âv2ÎB=oÝýFMl7åööÛ>n¾ÒCç<ë5}«¸n×Y塨¢ÅzïRÝ/ªsM>z¶àaý¥¦Þ²5ç\a' 5í �U l9aÃ`sF8ÛaKÜ¿J/ÆBÌyî4kç 5©5`Tç¸ �XPxAÓ;·½³tNuk³ëÁÕêõ|ìÚñvëßu6ßÞßåK ¸õÙk}³®vß/³[Ç(ߤö$±¤,a¡D*ÔòÃZ( +4¸F¼uÆòÞs½zo0 ½ P§¯Uã´C'7Ð_hB ++¨D¡ÏsaLwÀàÀÁôìѧNn¡¬õµ{Ø:ññB:d¿h='»µ£òÛ@CF$߬sÁ (klCDnnp»xÀ½èºNº%¶7(6Y ×BÚï´ +¡º1{{-îvÅ Ýׯ/{ÐIKØØ¸ùùz»P($`Ò`HÐ +d l'0ÞiF@óÐØ×u¿ÞüÜÍOs;Ké¤ô|¹p\»²Lá\o,.ºXúÆ$~M*2òO¢úeìó +`òh`àdî«îå"ìõ¨b9®þ´ +à +F4öÔýÆØ|°Cf4 ¤*ççÎgÒÓJ"¬éºW@ý/¿ Ð`0d±Oþ)P½ �bæ.P:`ä àÒ0,³P0^04õÊ"_hhfJÖD³EêÌÍPöJ0M îcíAïޯ͢ÂÎà ÂXÉ ÀÎâÈ$¥ÉFE©«Z +NôÎJ,"D^´çë¡Ë440³ÈÚÆ%ìe¨ )¤oq$lr ÏȨê'ç½ÉTI ôKþÏe9,þjÜgPcvf-9o °|¡ghB ó»°ö²Ï +ø°ëðñ¢Hp:HÎоIwfíËð¿M(î¢ôðÆï'¨2¨? +H¢Á±¿Âè1H´GÎÊ<ÈËïc õ.] §Ø2ä«©!H÷íøÇioéî,$<ÆFvQd\v±.àêlD¥Ñb^^îÈýJ1Éæ©Zã±FÖ ø\pëÑ Ó'Æ· ø4`ÅòQÆß̸K4#*Mçm? 1³#+3 Â_!ÎêÍB5$MÇþBiorTgÒZgg>as&F&²nn¤1'Ry'âÃÍ,2Ðq$ˤ(oq¸ ¤rÄ&+HkQæò!£*rÔ Ù k.èRàÝ+aÒæ²ÜïçR(ÄíÙ"ð-Åt±8zͬvNu èÉ ÈF&ÌAq8FÇ h"5Bé01ÇÊñQÎ2~-Ó +nÒ¯*#o¨9ëîîäQìÞ}òõqöGMO`ÍðL<kÈú +àkÏ4 ï8óÉô/F¤ÓîG3òÀEÞõPËhö+/ïðt®(ñOÅÂ#£ Oc;¨#ì¦$t&`Z°´9é ÀË ÒPsGô¿X÷o>'ÔH@ð¿ïä)â8.9¯òHöI¯úëQÉAÍAC(¾ì=«ã³åP ßp+°/D02!6Xc!%ù2ñªÀÞ &<ö ð| ¨& Û1¬°m(²èõP¼ Ô¡QQR£Rp}/ä +endstream +endobj +94 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +96 0 obj +<< +/Length 2492 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©Äj.Néc1 e9ÎFÐÒo7 +hTH)GH¢Ñ*~=UÂ#Q¸ErZ0LlPAAPÐe +Jª) àccæT"cÆ l7&Â1¤ð\9¬åöÿ¡ ÃqÀÏO©¯L¦óã1ÔÜc»^ìe7b¦^W°ÙÓ)´Þr<6&£/@@s8{M&cIÉFBI»ðýë0½(lë>À 2Nä+ìÉA@Ðò ã:ß© PdaÊ; l"Õ¹Jò\¬)²Èä0¼ Ê90ä7¯Þ;?£8@þcú2ÆP"øaAÈ\´[%Áo ÃÎ< ÐÓ)8!,²Mk-³p2Mf DS Ö2{bÙ£sèÛ·-ÜÚß4êÎéë,2 ),\G.s »¿Í`;»p¿=¼RóÐ̯jS#PÕO³>²[Ú:=ïÆù¾¯¼OLH4à0RãµP[¼µêýB°0üCÊÉ¢ÇÁH]&!ÈQÆq¬nÌÀ ÞIØj·2|ó:õÓý# Ò@å%D²h\¥*)¼O-ÂëË/Ì4}7ØÈâÚ3´QÏOk@7VT8À¸S-QÖ¬ÊÜûÙUü:¦ ëÕsÁ>OͳqàÖ\áCÑ8ÝÚq\'k³6ÔdÌ9ׯ¸qÓ]»Ò ÇÔnƼ<ÈYänã.êÏ8Ëc¨äê»#cÒø[åÔ SóU÷*ÕxäRÅÁ@Ýqû`ÂèØ+z£YR§"h¢¦ +¢¬ÁF°«°ic9k4@µ3P)ºä7w¥ 80Üh@ÃìBU!ph±ØvZ'//ΨöÆ*_"ª +pj÷½Ìª\ä_ÏD"ìï?S¸ غ0¯ÀÃÞè@j¬Jlo¡;Ëåã߯¾OãuÞÉ¡¬ç±á¢ÂXË(2,àÕëÐÃs®3 hºCG{hÕ¬Za_±| ý<×Icíw¯ÁÄ'ôSÜq#Ne¢Xî\Òge!k lZ/5ËdÂÔ + �I9ÿAÇBJù:¤3¢@N/Ñâ'ïݸ8vÐ;EÔ) � )þihn5AwÄEàÑ Ð¤ç!ÛB¡T$à¨O HÜ L 4ÓÊnÚbaDm7Q%$° 8ÚI¸'dü¡rSRÍ_¢9ã9(àätsOýÎÑËyq.eÕL:§»!_®vÊEÃÇB\Mfe²cDø#yerLËY8 X´j,ò5E0ÖvÇIj,` �u xÌilÈ`LM .û eG@s¡¬«J0|ô¡´`10¯áauÉHÆ6çÂe½æäÿI¦nëö°¸*7~¬á°ÉÔLl ¥[,äÔïf,ÎÓGÉ#¥§ü´ mÒ³YÁËeuZv2ùÝ-Ô$ÓÅFçë1^AS}Þe=Sùùt ÅѺVÌê&µ]C²×Á¸ß:S%G媬|ãª\¼ºcèMpû ÆÁ ç9ZðÌÏÚ¼nte[+FÜPQKA¼³´Òÿa¡TG¦QðÙó A¾[£ $ìôJÌÐÏxupH9ÐØYÞµQ%TÄ*ýaJ$m~]¥î¾$8kê²D µ±6Ø[+hÏòSx$9`´qŶ¢VÓ ®QË\#ÐBøL á%0em!ÎØ%=ö' ¤î¸òq> %Ìë5 -³;7 $Ûu<0l@t¦sG$'GBIqdSJ¹Mr"ª¯²Î·~AC[À7 +Ú²z¼Éá>N©&G%𾯣x_ÕÑÜC%mH|¬æÏ £}ks´#K`æÌÔoEU]Õå¬s2§ YUöζ¬W}O<)¬ò-ʹ¨Ýc �×_£kÅO;ÇpúÜÝÙÛ=köØrpVÉÍ1"&åÃyºâÂë³(ûòÊÙÏÚ¿Æí¦F¶}Oöf=9,Ql7À`iùèÜìA+#M¬¤Ûp ýîÝ@ wͪZæ¹6Hë_S¦Ã*É HÌ8AD[¨FalrÊ&>bÈóª¨&,·è5éb1XÉcCñªSØ'RtYäÚ¥'¸ m±þ@î9®ë741Sq*G'0j©|2+ð¤$Åvæá1°O =À6#Ȭ ªùÔTÍOMolíÝÃ^÷>ê +;¿yïi¿xàæKÚ{XÐvùݽRf¼ÒÓÖKqp.EÑÂpù°EæÕnªÌHdgµ¸¥k}s«é.æËTOàU[«:¦ í)Òë@¥!å£ôi3.vÛs!'`ÝuµKFèë^pydìû[3'¼CÏìV/;èaïþÔìà«éLû¹"ÄZ9`X]Mdɶ¢¶È`æ¡JÓ&â¾î)Êv»LØæKÐÓOî§->ø)ÚñÀÊø¯ìXÕÍ&ÿÔB¤û +ÐS4= Ê ê ,¹ã¸\p,xCÃØ`bäæBEÍTN_/~9 +¤ ÷#0ñ¯P%*Å0=àÒ àmKbSC·p¦7Gàç` +endstream +endobj +97 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +99 0 obj +<< +/Length 3000 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àQ#sÊhÌb()NS¸æ)¢Q ¤jl& E¢UB.Tõ:õÄ0I +@P l7&ÂAÜd6Kà¤RT5QÈÒJV¸4 JáÒ6³3ÆA⪾ë`*|{e´R²a¼ÇÎçô:=.S{Ö_àXÖ¢TÙ ¸üÃ/d¦à©Îôr(9\®íèÄd(:¿_¹£vп@Â9npÒ0+x;/È@ü¿chÊ6ãòc(Ï Ã¤ÿCÃß#JìÞ¯.áAp!¨nï¼/#$åÂ2ë5NÊnê 㲡tñxdªpb¬ÒZ¿HkfÆrCȨ2r¸7Á!Ô´Õ˶Ѥ®ÞµTÚ¡³+<ìo+Ç1Üz2Çó«±;È4äñFÏ4½¡o[Úç¾x -.éàh ÔòÞ:³ã,S¡kÞ9'xACðÓ@xÍZ)UÃ0ØË Í,P߯nµ")Áq#¡qª^ò̬«.̺ûDÒ4Ô2 !5Èãch¹R\´R-Ëvß/H5! ¡¢6¨T£ +SÂæ9ÖË¥mØÓ]À+ÃrQ̰Ý,«â¹®¡ CxYY×p/U?u@æ:c9èÙ%[Â2eªnò&媬+ôÛ±ËÌâØÁ@9b£ïÐñc°Êë±9°k"Ó&rÈaaDÎ7¹C¯-Å£Y¹®Ó\#Êûiygk8d´¹øf+«Ì¶Sø¥höE¿Dil&Ãê!´¦µ2Z»ókQ»5årí±¡)&¦ðj+bK·áoçrØ&°R÷`Ql hÆ5ââ?fv²nÍ ¨ÜÌwx¿tÍ÷]àAåø¾;5Ý JÂ8¨Íª!Ïh +Ä>( Ì Ṵ±fy¬òô=<û¸Z½l^îÛÀ¦CpoÌ4¸UÚSNiÆ3 jFÙ«naT³°O !-wóMH!8"À@MBf¤²&½Á¸8J«ì!ð éxä¸Cá,' 0¬ÂÕC kP&A5 BhQ +l,Iq!+ÃXnó×ëѰþ*Ä(±Kì)Î?ÎéÄEÏØÇ¿(þCýB0äCt (ê´âH«jA&ÀräNA2Z *¤è×Ëâ+eDÄêäyLê-Ù0ÀÞÉj'ò¶ë ù»Xðw¦åJ\Qq(6$zuQ. +ôÁ,p(d¡¸1È$FÐ +&ÈMa¡àR}ÄçÞDªô²ª_!T.Ãea¤3©Pº¤«ºM$6ï1ÚÒOÎR!Ùz Ø ¯pb¾eiænLÜÀPaBH$9èÀîç|åUjR �ÄCxvå°»u6¬j7©FH +sÃd¤t°*B)[@>ͼLéÐbBóÎL¨FZ.QÂâCcȳýeºVç-Ö3¦A¶©%8¥vl%¨Éé[(%Ìa©õDçU6S*)$I %PÈa !Ä<|Cj%DðöwÎ �vo¡ÐAL¦P<7±&(ë«Ê³¼rìk¥1'ª±RÍ 1Lz»y.ΫHpè±ÒÛ%{eDµ`(§o>R»Ð¶îî·Juw}fO- ÷ÃCOl˲ Ù5UåTöZYSg¦¯(Ôç3®vÎúnõ0 DPj÷>¡ËµQ!@j.B}¡R +§:!D¢ÁL2»U|!tj,ËC£6`aáÎæ¤«)2©@ÂIµYX0z)ÉÀ â6²ô0ÆÃò·áôXEOæVÎ ÚgÕàn¡¶Öt!ìÐDfé^Ø%af¡l²6>øØüI 3#O~:3§òÜykJ- ¯N(ÀÐ@ +¹\®R¦Å#«QaÜËR²¾-<w,r)¬dƹP'.®f4¹È²_Ìu açÏ& �çbµcgÅ2É6R¨´ yÎPáhÅn%6· ©8â<vX 2J¶ÒàÛV²Î! ÄVÜÃráö×K.èIÙy.©j7`é6"L +pPÏ,Æð/;?VknpÌ k +É´ì«_~R½ûÏ!` n£à3VÐøÆ~¦b´X'¡ �È,Í4¬ÂúÖ3[m;!\Åß_°Ý ì÷¥¢Xûä$¼×=¼} +AVc6\¼iÅYT©exÞÖkmjû[/4^ ±ohmm4"nmy½â !Ë[è2b5\NÙ +¦X#Gg'î#¾`fé½öøß>31BTIQÖ g[EÅ9«q´ÌåµWeso½Ï$WêbQ}Ç˧{¦^[þ �s2¨g; Á;Ï6¦øsôù·ç²ñ@NçðØë³Ü +Ú3^¥Õ>@Êù¢Kê/~+³Í &¸½º:÷ÌHÈ{üÌmÜ?ø xBÜ6Öú/Iî¡ïþ?Ì4pØHÐ:è^Ö+HO¦ÿOäê +@êöÊdõOòþ ý �¬í(Þ"@tmﬡϰ/¶oøhü T-ïìÖ.´ÕÂj¯ òlHr ÖÀþÀîÿ ¤ä �¦<ªÀ`ËI»PZâejBÂy Ît°h¼«Ä(¤I /L'ëÒ° ²Ïv¥*M ÌþïTyîvF4$Z>&DC Ø Z¤2 ÒÈ ªr>äL¤¢#`djn0 î4ì �,ËҢɶÐ$AF@³eH Ò `ËÐ àÞ7A¥J¤Lë.¥åT¦Cx@¤GM¸b¶mj¯ jw +°ÌîÑe-.VÑãÈÄ£h6ëik7Ä¢oWí; d= ¯0¤Æ¦ÔFB<¾Ñ&¯¤úYé`I° ïn÷DdÄ»¢>7$±<N +C)¡qKàÓ1VU wÊ?1gQjñp ÑtpÍÎÂjç`ªôp·e+jõ¬üre+)ÊÇ +ù1ö±Û#êÃP~Ç-°QÎL7MHU¸ÔåTBåhç ì ä.c7ëXrb ܰÊ,°âÝãâbæ4Âèï`éë.³ª; Üï&\è°9â,HæHë ï®#"Ôê"à>Bêê°¸00bë/Ìël¶2Ù%Ïë#0äJ7L#&@RT¤Ð >Ìà@çÀØè nRÆl/Ðnã¸"òØËÎã® ûn¤h+.Ò<êòòð0h{¯Õ4+`2®Ä´/zB +endstream +endobj +100 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +102 0 obj +<< +/Length 3672 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©Ä5ÒÆcAäo9Å¥#)Ò4NFSqÊsШR4 E¢TüTzª5F£pä´`0¤XÅãy¸Ê. TR5Èâq=HgãR»_¦Ì¦â®Ò2ÛâÀ Ù; + æ# ³8t4Ý £qAäX çôg}CȦØPÒÅ!MàÞcÀÐàX(eÂøºF5ÄÚü"öÁR42*-ËV©ª)Á°lÁlË +ƲpªÒüò7 ãæ4°HÃ4èsj§¢±{â2 Ì7@PP; ãHÈãcæ»#0ò.8'H,!»{¡% +xÆ.!ÛBÑ«ÏÚ6Ù¿B ?p`¬H P! âxb&B%Ë2Øó.¼ò`#|û;hÊ6ÌE¡1lÆb¤×Að#¬ª¼°G°â¾CëXP"/ãä4:ô°h4Y±°[Æ¡¨rÊÄuQ²éã +@ÊLm"JÀèØpÙ)óRhÍH²;-:2XQ0Y¬%nĨàrÕ!sX6²ìË,) ²È!ÈP3«íd7Ê:a �69Ö_ÐÒÎ7,: á ä½pÖÖ`aÊ:ÝIÆ"0CÛ¯Ap@$ÖdTÂYùrªcZó²æ[tpRwdi>O6e0ÕÞ¡wuc÷Xir¾aÌÍ + +FQ¤÷Q f, £z÷7ã:¿:ìèÙ`vXØ0c @4Ün½ö,:ïñ@AKcN,Ðk*ÎM9DÝc3VMÚM-i;v¡uå7t}$Ðrö®õ¸©f÷N£b5©«wf+Æ1ß|~0§aª|:ßÃZ2.¼,ë£Æ$9b²ñ8V|ù¢ÈáeÉÒ¥*J®;HÆ4yØ/&Ãá9'u£Â8µi-Åá;DÜK¸fݸú\jà¾Pì^Ч¤f¨ß{~cø3³ö(uØ9ç/ Ç][G#*§;6S±½Ì#ÐBúOJ)M8°ÎuÜÐaA¼:¸æ0Æ\ 9!0`äö! °ì!ßÛ;vÆá_D0Pê;bh88ÅüÅØÌ\&¤wf» ÊÇ7Þ73öú¡Xe ¥ð:vdoN=~CfërÑpñ¯¬DÞABQîõähZÖѬ!8Σ«=gìT94&ÒA¤Ë3#Us4î"_[à¥f5bÒ)T!Qý§6 +h±!¹ÈB\C«?YhIfÒAõ\äv·Ò¨Á¯à¡ê9 �ã'(Á8 9/Ù¤f£qÏæ8[â«Úp86Î(àoòRHpóSHd*X* (»eÀwSRL'[ªroQÇ%ä! !á½0Þöìü0 �c LµrÙÈèÝ*rÎ1PÚ o/îm-?æó+#`Ï5Êw.ßàâüÎ/EÀÝ;ä4* »ÎæÆjmPª+ÙÂX[0(h¢¼È"Ø£ý®uÕíÖ A¨CÍ- ÎhPú#fçbþgæ1ækåm8MÓ:ÃFg¢,G/Ê&h1S"?'êf:vèªñNUƳPzï&)Z Òõ9cD v²©ÒéfXLKøN¤n_±æH8èm k=>'EÏ$;Xj¯2ÉEÖy!g.B©)FaéPSP«ÖFÚò¢7 »¹&!\ÄdcÈFÄ@;fX ¦»¦ªZªIx驵6½¼, +AT"ÅÙi©IRNâ[~ºi±66DÙ4f ô2å2}dï»hxýe¼·°»Éè)ãÚÐ3 +ï&N]/StkÁÜ4Öyz²Ä_ËW"R@qÞMÉ!ë´å+]]êÁXÖÌâ cLû¬@Æ¡L ¼ 0°r¥U0.HPä[Ã)¥7q\"õuÑ¡f¥,;¦ÊÌῦM;ÞÓTá©kbÁÈt´@@[Kyq.eÔ»ö_KþwÆ'[aâ.¯5ÑB¨^UÓ;¦f1¥¦·O;Q½§J4ÙèaRÃ^oÎ >8gãÓ¶ Ao'´ÆF|5ÕÌX$ ü\óúø +@(ömç±ÍfS¦ºT,ö±Îý7°)T¢FQ>²V¦RáÔc¹ñï#yQdfV¡ÔJH6p0ºO@QÓ®¸O +A°pX¨s:áT$ਨFÁÍHé®>¦ô÷"À¤e +jT1´á°åªVªõbú·5ܼÜÈój}dÐÔr8gËþDݬ®êôP˳N*Þ;ª¡6Éoti-57 y¬ÅíUo±p39é/<çÉDáê{prvqO$#'ÉiePØfxbµ B"{IkÔ,§\9¾ðÇ{Ûf\@fÛMª2ö±tÜWrÎëmÙºsËâZ|ë3ÖZ4+lb@M áù¿ÙmgíìßÍÕùýcÓGmɲÖk¤é@ì.ÆúãB>iðó)ÐÁÖgidh ÿ>Ëáèï$»nhiO*#,ë~F×âöõjÆÌéÂ6¢û¨§$|øJïRŨ|Î)@¬ë ÂòiJÿÉÂúI3Fðâù©L$PÑ Æh@`Åø½J¨ÀÚG ¡& ì¸aÞálè®à@ÒÀØÓ æEÂáÀ)ÏÀ\èÂM£ü¤ ×'Ê\8ËQ=±±ãQFBÑ9ñ"# bGiaî/1q/1qQÐÿ1X{h>±gFF1Kq cG@Qtü"-õñXãüRÎl&>8Á/úq í.Ü"xfîèîÅöá£Û±ä£ãQS1¥Às"FR!S±Î=Ñ©Ò *²±U*±5"1d$q}½ ²8"Q#ò/ ~*¤Ãßѹ4ä²gòj)ÒPÑs%NÑ&kFqÛ""1T"ºçŰÈý¦O.¦ \"ª×¤+â;"¿ ò 6ÜGÀb\2EïÀR%)ÒÄLÆIÒNY'4Oàéô  jÆï^'Ç*ÆzoD¨¤l±éúm'DÐeH"Ìò3à@Ip @pÆ8½G¨olèïÐïÔý¦ÍPý&²1ñ%"±Íòók²'òO!q§³{r=!RAÃ[8²sR!%y6ñhæ!öâD-71[8°#´¹rá;Ño(3³³¹"Ñ/(íhÃ÷_ÓºBÒ¿-0lÈâ²sW5§æz,/ôôã/ª ï@ÀPôkØoC +F(ÈFÒl?ÎÍåÔ ¥,´<µã ÓIz@ð¼Ó.ÄÐêî³ �,R*$ÐÎYsNHt7$HóM5 Ð\.B!èD*¿*Ò°µ+*Hsþ ଴¾6q?0:"ów9`gM¢óq&ò2)ÔÙ³=Ñ[$C NqËM%Ñ=uOs%³%ôÖ7³Å n?¢;:ÑËyQü aSÇPÒ!Äl?S;´ßòqOU fñRr<Ò1µ=Oµa$1_SÕ :³ µUI7UUÒç'òTu?QµXµgSUa>CSç)q>51--*kdýTËLò¼ÕG"rÄ!%§cRmÅDÖk2Ú"òßZpPÕSô«~y&ÈÆh¨D:ó:ø*©K"sLÓ0@È:æsTANd +Xlh-BȬÊÀÞÊÆ4;bócöo`éb,þµò^¸3Àî´c`oèÓ Ïî:hö*BhnÇ!¡0ìÉ É$ÞÉ2¤ÐºUæ¹ÈÜ +å«Ì`4³UKT +0-òô^ºèÏ"¦¸RÑ)æÉU?iÇöp/æ`/J¨2(®oµøÍÉÒ=¢ +endstream +endobj +103 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +105 0 obj +<< +/Length 3096 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BTF#)|xn3²Aº-ªÂFX!U¥Sê J©VV-ºí~KY*58HÈj.Õë"`*½ÇØýé{µV«ëvr³F.æ.þ +j£%>çg½ZòÖìÎo;ÐZowܽ O\bm(cÅ[p-xÏcÄm·]Öc5Óïöu~_YnA ÒHT2ÃÅxc! Îâ4ª#ORL +µY *«¾M I@t4D¡«¤#)HJNðb±¢X=Ocæ2âò:£øÿ ¢3© ðf¨A"¤ô*°jf7ÁIÈ@8#Â6° ä #@7 ãpZ=£Þ#pÈû¿! ô6/#¼¬G½q;ܼ¨Cå à2cHÌ4²8ħÃÌàÊ*#ÿ hÊ6Âïü6ëJ`j"SûÝ/*¡jÅiÂXñ6 Ü¥;¡SÊAdKi|º*Pb8Ø7CØ)¢ÙYbàP.4L3EÀlñD1ÓW½´¨nøÅpî4×lx0¬¦Ú°a½.´¶á³IYtkÃõ £xä<ÉRd:>òã½:4Óò=®: 1è]a"m¨\TDYpt¾ñ#Ór !º~8+c¶:ceávÃ(Â1 Ô#ÈÇKxÉ£,Zv¬Þ!@Ëm%x5Å-PU¦º¶QyXä2M±Äæ3NuíÏà»0ý@aÚ<# ¶§QôAVaæh´Ô#I]w^^c'ñÕx5Þ:ÉùãÐÁ½Á,hûÕµÒsQ¿CÞü ¿µ&É`¾ U±5`ùÖU¥m\WUå}`lP×6XÖFÑU×7¼Ó3%:0ÚÔÕ©Jh6«²¯Gg.k°% +BÜÍ×À¡t?Ãvv_dûAvn çBÕѬ¥öÒ^E)Ü åédY&M¸iV[ùs°.EFß15fþÂ<ÿØ9Ô.ÅàÐnÌþ;$å£DqLq²»C(sÕ9Ç3 ?ybçr +ÐhmÁÁ +4ÞA#Àb!yqP ÒI!Ä0gè¼õL²;D\¥px°1#`ØòrP¬BhE ¡|'ðBC!H",$ªpLg(ÞÅ|O8(+ +$ BáÞð)hªÚUsD à1 PBÁ°0t^ÆYtGOqw©ÔA +Ë + ¹r©B¤ FÌ:dÖdû)`¢J/ �$ñ3°ZÅi® >Êõ"ÂÝ¢Ì>kLü, [5S +W}aµ%àPâÌ[ ±x$`²cÎp¤ÂPpS ´g×éí> SX§ÃH#?§¼P^Á@tÂ9ÿB§Õ5¯öÂØrî!®A ó@é Bj'Fà5+¤°P¥Ð(-¼¤sÞ.pca¬þ¦tÐJro*-¢5ÑRI?éì¨ÆTúK¨ÕT4ÔÊ¥Pº~A"+cñÔìëNý+YñøV O+Fh/ xI Á$*úAÄ(ê_Êy#QÀn ,[de,«g¶ÜäªP À 7×äèøÉRSWZÞ´Ó ê4±PPÔ&@ÀÑU®D¸«{ +]õðMåRSO>\s@Êà` ÛjdRrGXWdhtHk©ïI\+[®Õâ½WÆû2\ËìêU讹ÏÒHóp4]Òç\_ÏåØÈÐDãSYCÕ<xà|Ê ?),ðáeu(7&*Ñð`HA¹yÝpØokÐ4ÐàÉWØ`8%P®¥àÍCbJĸxI¤pÑá[ÑèR|7A9 ·dð¥0b +Àt¡Ë¸'©ZµdA1ÔèXáLa®*m «Õ~°^ubjÎÅê[kèÒþV®-¸å¬¸® hdì¼7k¨VÕ²ÿi¶ñ»/;X}¬[àIAÔ1<¨lºùRSYK.Ü´ÓºP̼3'¥Yd\'ú´otÙÉÔçWWÆzQñ¸ÕÐet6 r©7ã ¶DÈDOiR²]$Nî+'h¡æTk9\"$SØH1GzÍÏÝ)w5ë èeÙÁh(Í«Yv®GÛºd͹iÖQ*[ Ñ[ Ú{t¼`ô7mf8y;T¸6ötÁ[kÜí<vüz.;ZWñ¾.ü+d +ø2Ôs ä§×aNÇUB3ª¶éÁO2¦G;ÀÜV³S!EaæXüÛä^kÀv¹$dv +rÂ'A/30òs/ur/Ys&ð}&(9 W ñìrÀÙÔÃ*¾ '@A Pë ÊüMò^SËy4|ãߨä>Ë»I"5³·d^á·ÊgB6gD*ÃiÀø¯W¬Ný¹ä%ÌÄyéêªD§ZðÐ!L@ñ¢rNgK|¿u¿9«ù®èsiU#7%ì7 _øREOsz~¤õLîýg #`j¤ +Ël@¹Ë¨¹ÎôH +ÑÄÒ ä$ÌMÔMÜ^2ï>ëB'p´ÔvÅPÅÏ'\è\#bòS l},þPd`FDhFÍöÿ&`Ï@ürÿÏRHÕÏÙ â}¾Wk Ð)¦Ø«ÎÍÏÎÿð öögøçÎ ¬2#¦/zÛ£Úø¤á®Ë0,ã¥ä°ÌnFð@d#ÆÛd¸ûcæû£÷Mböã Èæ/ÙïÞPlD¤@ÆÞHïïïò®' n£ ¯#ðþð¤ÈI±r&Ý e§µî^HL¤ÎM$ÖiLÔéNõåC+ZbÆ |Cj;Ã2¸%¸eåGØÅÄTãæÔ D LÑ-ûÑæhôÊмv©Ìõ𥠫DJ' &é¹É ÓIv³ Z° ä'«0n°BfmGI4f@@æTµg cÄϰV1+ �*ÂCå -%¨jÑ_ °Ð%'' ÉCô1 þ@jÿrjP)ͬ¸Ùg.öNgÞçÎ:n#b/§®èFÜ/ÊÀPÜÏÒQBð,Ì<,!ïkÌß r¿ Ïm,OrB³Þçîä®èáî"ân*Ê0H&dãÿO¤ðJjúíëãç/Íõ+Ì~Oͨ¿t¬Â>Ȧa§rÛì¦Â`'ðÃëéñR +`Ðù Ü nª)®<@óRëÄTè) 0.Í,.Í,b>.è÷¯-D 1®ìïõ.NúÝϦªÞ{+} à M3p | +ªô +b +endstream +endobj +106 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +109 0 obj +<< +/Length 3105 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1#J¨$G +A£xØa@#IP-)0P O'ÃyÂl)Fq¬¸(*IÅBà¤RT5QHÑÚD41L&]£1¼¼]#*IAC>©\óXùÞ �àt4Í +F£ÂïÑhiÅ aaÈÏ$¬!y¸ ¨h2g¢ eõì ±Å3 VWK1°n4-÷[½ç_±¤ìÐ߯WÉË©ó($øÂn2yyð«ïL\Þ/{¾«Ê³+ZÚñ®ËÂôô/Áª8ë$ïNí0ê7mCT9ä2ä7ÃHÈ2@9¨ÅÃpëR7D Ð0(Ê9Ãxä6pßÆÐø\ý5ë㤿°,&°Ì@Ä·á°nõë"¬è3,ØfÎ!b +C,b9Gk\£:/Ko) ¸nÜ·aª²ZÊ+0"ºã´q$5CÑÀAÍãr) +¢(@4Át21Fc¨Æ1´c46Á MC¸Ò9¡e4äS´ë80& +b,I³ªý*ÊL,£+±Aãtà>,ÄâLC4ßDÔ£N9sa!ÈjÜÍÀ]gÁ%@ÀsP'5C-~ó ÒsÓb0¥,YAÅL³%B³1k3a´Ðq8æ9 ³hÌÎD~2ÃÄóÜTîÛ]3ÝÖO̤»hPÕåz ×´|ä!G<fÒº6¡¨pÇàÓÇ2Û*XdâàÆ4VN<N;ãâ*H|ö¹0h³HAA¿ôxÊÁR/WÕcçýÁ¡¢7å®=a +cÌ8u~?:?¹Ó<OSæ°1A½ÞKdz!éCBÞ& +¨ (:ibê3.¡Ü©apnZp³åC°ß!kPÞ;òüÊçÎsܯD3V\6Ò"ßô¹÷í3d7úÚBáàûµ©¢3\ÒÐ4M#MFðmCݾMgÞꬸx]å'ߡºl-åÏépg!¾0Du + ÜBɲÕF1ª [¢0ÜC(x°QF8Q8n ¬qtZ<*]I)³Ñ@btaª:1È9´ý²DDµ;D-3´ç_àhwç1`8DÓ÷BçÔ8" Ãâ?I´#þ É©'T ¡hG)C Í 6¡ù¤ö~TɵØDÃâp¦øÏ¨ô +z !´4ÄD¦£d:np4 äêI*IåGUöod«Åj `PmýÅàlT߸(^ðõÂÒ2GÉ@#nÖ¦ZdÓNvïú9À qíצ3)Ì '0G +&¹ÌfÀ¢·`Øu³zAðÓaPà3"ta?T ©Ò ³vù<_©ì=Kõåó£õµ 2ãäÎ*N²3À¨«%âÄ5g:ÄÌz'ÎRÌ'p +$ÅÆ<L¨HØQ-iziç?bâ¡Í|Æ2|)$ð&SH¹#äDL6IY.¤Ê5qÎ8¼bR>TÄ®ÃTåL«¥Rö2é,ßÄA1àÄ÷:yD(1k4V¢IÁ læK¢ �åPoV´7©]_à¼$DÀÙ #Ô bÒú"µ&{>¢¤à9`R"#ê¾,®B~ ,FÉQAÐám,6PpP-«còØÅYJyDéùÙ&»Î*ò¡ª(öD×ðá=Ñk©@!¨Â@B +¡PKXUº$-¦NÑãÒø3é)}hC T*±ÄõÖêâò3Æ8¼¦ÔtÞjþyì Ä,¦úß³×o±m&·Óý ÕUÃwÉ\Qgì/ÌÇõ)cõ(6AVBEKv+-: Hý#ÍigÈe-ÐØHW9¶^VjbÙî¤T»jOJdƶüÙ\blÛñ²jq͹9F>EË0Bêõr«äõ%ER`Õx5VïËÕoéôˤw½h¸Êé5ì#D¶ÀZ^ð¹ÈSóvª^eo£ÏV\íbë"qéöÄSÜMN.\¹(ìÀC8a-Úm|¿6ÍD#VP»R �> L$¸Ë«¤æm®'FH)8X¦"¯ ÝÓÆEt.É_V±RÖá³\«(ªÄçÅIÓÓ_¥Cìµî^TblzÉ2w.¨¹¢XFoîd%,¨soë+9ò´þ +¸ø>TÓ¼)3 jʪCO$E¨8ë>w6æúj³öÎr¼¤øÖåhfÓ ÜoÌû?Y#f-S4zÚ)Mkuo®% {äO8azcÜ|¤;LÁG;þ{mÀm¼%³Ø¼tÁ]]u·¶#`£cj*N½¯{vpìó8¥ÜÏȾÒ×¶t§ý¹ $i¨ÇóH^wÊÅgS4Ã2id4°jÆg®äÛ`XNÁ>´úôFQe¹õÈ2û{ìÚS -]ÐÖP×Dm³ E\L´½·Öþà|:sñ&ÏžRùÈALo/PàçÊ}]´õ2ÿòÿ RtÅu v¢v'fE¯v÷è²ö ú¶à¨ æ-пÇûLûè®B¢ïGª0OÄa Þogº4 Ò4än|)ìG좦Ç}cnçÞ9gäߣ¨B°ãeåð"Ê@Iè¼#IDlCLßl(#b`ó0^PpÓ"ü`ØÙO&+ Q¤@DDH«æ î¯ÃT»ÀÞ±àÄMÀî¦8 CcÀ Ìx( `æòÌ(hÃþ$1 #ë +ÌDÝÎuC è âZ/D¦©¨ÐÈðDÊÈ©¾Î+5IÖ¤HÌ([ÊøÌ°ÿpè"°ðÒDëd ïdD"v9`îÕCQ 5¤tG@Gd@Ð@æÕ#£ÂÇléHÉ +-@+«Æ Ñ@@æ Ê×1ß°uQ¸B» +oÉï®ýb L¢+©§Ðñhæ 8{I¸È®¿ £$¬än8 '± Ø. júIPÖðT :S$Sé>ìè§HÆÏ¦Å-ªË Ê Ô¼cÂD¹À@ %2HÈ='@é%?'éðH.P ÀæÆÍóífK K1`Eô>àÞUA~Çnþ¶MZ'`dp ¨ú¥ j) Hµ0ýõ ²H 2LDD@ÈÇæ'%Rr¯`GÉ*±NâG +²KÐÒP"º + -?ÍE@æ f"Ñ&2i®® ¾ Àª ŠμDVò¤åÛ)&,êy(j1Í +±Ó-cÓÉbV@æ1>òÍ$AàÂT¢ë§.àÖò|×1¼I¤ +endstream +endobj +110 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +112 0 obj +<< +/Length 1723 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÆ6I£qpÄi2*) xÂ4 + +)ÌÊ 3MÆ3¡¤Þn9FS¡Ôänì¥@t0Íw#)Âi¸vó¡ÈÞl +Jª9=J#xÒ)ÍçDXxÖH7¤ I0*¸0PJ ÈÌf5ç±ÄPRº]®% +F¤Âó1h ê³ÃaÈÌ\8Ïk%à +ôÎ('[̹W/Êhvø«=¤ia¼lqík³»- £lÜØbÞ (äÇC¢²®J9è*!dé¾ò×»¾ðÏ$Ê8ï<÷=K8õÃ) l+ª ³®Ëúÿ¾0f9ak37a P2®kZ˸È36½)¹ð³¦7 [[+îø 7c 8jÊ9#8Ê.àS¼ÒNBHJHºÏ»FOg-¥ánïM¨f7aë :§¸Q£u"¢x0#\¨Ó#b®#Á¬¡+BæÁRN,ÃÓ³Ó¬Q´a»pÏîØi'õªÇQà¦<Ãxà90SÎN\§:ʨ|.ѪâJíë +¦%héGÒu3NͰÞ4pw8D¶nÑWUÄöøÎá£9aÛïÓabP¶0lÕY!@²cÒ8-«}>ãÁÖ²/lJr³Faañ@;Åı¬÷Ä VÌÓ®§3êʶ®Ë« ÕvI7{6MÙS}J bÐiB´°RØ·/4£²Ê¿¯Ã@Â7bÎ7Ú¢Î1®ÙÈØ<®KPÜÄëý:òD4LÌÅëE^¡ -XOåÛamÒ·Îê»ÚPf1 B.v;m3Á rÎX*QµâºkÂkÁ¬kA¹Îìhéµ0[ek(î-ý^¼ûï4% À;ü A,å¼L&ãʺ©Fæjð<]Uóõ¯o^Ò¤pv7Øá®L"ÈòHÇ%Ún<àÚüWÆ dë;ÀË%º +ì@ÈøT^ µ7Wë¡ Néä0rWë3¬ÕCuL`))U0¨m%X±)×|¨¤`Áë»#FªßÀ.UÁX+ :'_ÍÉ=@@ °6{&½í·µ²ÒÊY9hBwûÛîB¯ÀÛ½rGSú +¡$'EÒ]! =TÜáñ¶$Kí0*Ã"KbI4Æ.RCíxqLéCõ¶òA&;ì 3çÖëx9f-Å<Í£!a®2ÀF|ÆH#dÉ£33¸j×ie¼Â83_K8n!$:&º`#!l*T:66Ê8nm&!Î0òC(myѱèC·]?&äl±£~7Í7Ó "ÍgAø pSÞÌ\2-ÊÒæd8EÆX de rÒþ`¶q'&Y³9éMä@. ÓU½0lñÑѾw½Ç÷^Ðqr, 'YaD5Ð)¿&|=/ÍÜEC¢;Þ/ $ Ê +jFI +UóÄéÁF$}ôqEMFIH^b! -¼ôÀÛι>ëzjÁE ¼ðjAàèÿZÄ `ÂÑ|/(0ÆÃUf¨¦c¬ ¾ b ÌätÚ«ÄyjÏZ4ZP%(£8ØóCGf£¼µÈ¹Bê¬þ �IÍK¬!¶zàɰðæÄX±ÇÔ)¶ß©OIýHË4ÿ g¦U9ZÄS®}¬µ¶º]A/¡ Ó±Ëw(ds¡Þäp@Ãea¤35Å1E¤¼AÀ0 ÂK¢H©tPZúRJS¡^Ù"oæí>¢è> + +¤tO,±¹iß*ÜÔ® ú¹æ¯uA` ½Ó¹`æC=e¤È �V @@ +endstream +endobj +113 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +115 0 obj +<< +/Length 2553 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢04N¥BT C ØÂÓ%ÔÚ9@ªÑr¤0©æSq@Ìf8 'tÁÄPE9ç#¦E¤th*-/ñê°ÖÂ+²ÑÂ3 + Æóq\)*¨ÄjD.ûR§`j4Ú¥Xq@FBáµ_©ë²5 kkÆÈæs¦kXÐPe9MÆ3-Öï¦BsÐè+Õ°°Ün.Guò| ¼Üu6'3Y\Òn2Îç2à ¸)æS¡ê¸¹C£Ôö>¯»0Í/,ê) ¤kkÀî£X×+ËǬ0rµIxP$pÖ»( A¡°lÕèjܨ+ä 0T LÜÏ´"ªª»¸ÉOb±M f-Ãt +cÈÜ7ÒçE+Êöé¯ÎÄÁÆÔc/21ÒP! âxD3ê$ +¦%Dôp<éAmÀÑAÓ¨r»I§6Pì¦ðJÍØæcÒ8K)/4ǰs;±4»a¨n´,TÞÆ¦"£Ê* (AC/.ø¥£rÀ"ÃA ,òÏ/X× 6UD/´¢´¤öPfNã"ëR² ç_0¾e|9(Æ4ÃHÊ2}~̺U£jªn±tåAZV²õl \¦âq'ÃÂ9#køäa7xì0HÈËáN9H°}G¨% Òá¢Å]SI¬·8C£þ7LN7լС® &Ã3y/Ü0Çt Á¥Zb) +¢+ó^Õíí} àÉe¡_æa A +>oFçRCMP´j1¡)!ëPZ¶-ËäºUÝV¾ê.º/Xj©}+ÌdSȲl¯Cáü ÉIA r°;z 3(¬´ÛoÏ·-Ûz7·îâ¸îKæô³oÔ°U~¨¸k VýËÚ²ØÔ¥ÁÔd"¤p«WàÖá¥ÄÚA=Ãp2ªØê/! �¤ÍË9weMG97¸ú0vi +¹²ÊýArUy ],¥´ºÞª×j ©=¤Ô÷`CÐò§DìËû©ì+à C¹ð?!0(0¦ ¡Ì=C àJþ?!T$à¨×Bo ¡µ¹ÅDÜø.Vm oÂxRá;@¾Oº f®:ÁG#âêP&ç2ðß¡`Jv3*D©0n -=2=§Á5- §r®ÛsXIÒ²VZÍYäCø£tä"¸BÖñä%¦å¡g×W<a!¸;ðÖs[j¾'Äù¹f!Ð<äã`f²fâNht]ëÞg ÌCoH0ÁHcWî| zÿ^©<*È °b +L±N )l +¢\ ¸ Éæ¤ÚBÀÔ @ìY$K²(/éTÍÞú YÅ(!¢¹-¿ ¡2T`)A³°60)Tí¹«àÞ¦ +ë(¯âà¦àaÓq.¸Coµ Ù= dãȺ_AiF`ÞzÂñ,«C<«,ŶåEØz*ÖÃBi?Á%¦´¡zÎÂñë\¼6ÃäÁÒÀ¦Ê¨ÃëC±k}f@ +@E|!ø¬BÅX'ÜPPÖÙs0 Y:¥aÖׯZ'H;§5y&DKètú1µªRFÈܾX[-J4%Cå¯TäX¨0KÍeóæ»Ê@æ*PlaÊ/7/`n¥áÁpÛ`¨f.tæßÎ5æËvë|¡kJGlx8Uq.FBì½³vvÏÅ`§VV4íµ ÚÕ+ë[UͱWÖÍu^ÔîÜ¸Ý ,bÄÈVmÌ27:7áq«3²6Vá In)3+^p4t¶rYhXǺËd.ÄÂA@/¸ © EÂÕ5ÚpÐ×½«6ù|15òt +u/8Þ/=éaÖU;^X:ðWô¤â¬ô<PæËÉ7ó ~qMºU|êù_v2Ñ|ã{©k©_NY½²Ìão/]í7½·_æ,Rl0j0Þ<v¸Sö¿ÖþfËÿ6(a4_,N½³fsú¼ ·°s²Â6k*el±h P á@* Ö(n^Ìw:Úëa3«Ê\¡ÖÚ7ãà|i^tæÛ«xÉéÓýÙ 9¨<«JS[czMqýÛÈYÂôjK|µ[aغ¼k¦Y~ón¿¡%j k îSâ[`l-cÀ°N²áÙ¦ÂXE$íIo¸HlÌYÛsÍÎFÛs|\®`E}~3ÕSvRùöåGræÂÁªúI³s¾¶õ1N\O-AÃ%dúzê{ÕºO}@ û£`ª Ü÷ó^úÆ@Ndv$_!È3ÍCÏ^Aá6ÀÚ\éòüWÇù¾ÝzB§8ç|D°¤ ÇÄ)VNºó«0 þ¿x.EaØRîpÞ;ߺ$<l¬ +Zt1ñ¬ÙÙ¨ÂA +AP$¸sÎÁj7æï æ=Ñ1½ß¨ûɹlú·ò]/JiÇÏÄJgÿ³u¹}®6ã^Ú ¬æBñ-FâJøïÔÙøüöä ødïpNºóéòãäläî âl.ýO>kBòüêvô®mÏZõð ªOeÏlßæjõ,NNF÷/ÚÏ.¦?O~ø/Úø`Þø¤ðþ.ÈX+Q"¬)Æ@Öïöî.Øá,XíðåEÇ îòÍiFjsâD\ðê �ÚTï£ÞðN¶JvP]íØ§0Ñ @A äö`°Ðe¶õÚ+&*òeÞaMäÀh +endstream +endobj +116 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +118 0 obj +<< +/Length 3480 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQNË¥BT $ C ÑÚ 2FâáÒdT"Mf¡hÂ^0¤ÍÁSAP/J¤Â¡$E,ÏÃ!ÔPT4Nb±Øu2£°Ây½ ¡¼ài1Æó©¸È 4¬ øèe99ñ,ØpÞÍfSÉÜÞrË/GAئEUcZƨ8¤Öká gg¡ªF©0ÝÌpo ð¸(2È33#R!}Aþ(íWé5¹E~p0&Ó.|äcC(62ãÞÌØÞ-Kbܸ,«< Ê<ÊZ6¨R÷;*[¶ù¹ºò1 ãxè7GLXü0»@,³7µmk^2Ðê¸Ý*Íè\ê°'D"´bx&"p¹+¢î¼¯kêþÀ£Ä`:³ñ³Ó ðjî¾ s++oÄòIÊ=¥Ohbà;¸Q¡ðý?ô°%=ä¦!áDt»ä1³àA¿Rþ9ÂÈÎãK[NãóÙ7sË&UryX7Ò¤¬ø¸±Cù!kȳ-* +âH( âx¤¤Î½/ó 03"HÐ0ça #xÝ94£+O`3# Þ;ÈÇ%×ÖC2R º iJUKMÛ®Cð9v{0ÍR.¥AÒ¨jQ4Ú¿F9Æ:<®kõRµ1ÓE= T-öåd4¦)Õu»yc¿<^dôfb8Ͱã +m>ý¿²ÀµDÆÚ*sÚ%5»òÝÊ'\Â0 °¼3 Ø\Z9ÅñgÖרôÎß#}ö:_¬ÐÞ3Op¨DÖæ³CLî9!_ ö!Ì`8Ë`ã§©Ü£´ÚÚC½o¬âþä)b($,É3/Õy×¼jÇ¬Ó PÔ/ÐαØ2Ïqmç07ý #'3â3Có?7¦Óm|$`CY>CLÂ÷a<Eý|2úhY$Ë)¾pÊÎòeá §u$ÐÙ(4jYE5´Ïéÿ^¤3£Ä4´B ÀضFëTÓ°-D*¨OÉÜ.Á%Æ?tbÏøaÈ7^Ã@aÆ 6~eéð17T´ÕS@ 1ÇÇ+õFí©@jDÁê. �D3¦¶Ï`{Ygºxô:$½ª2'ÁU¤= Ø0#ÁP2©ÒËT+ÀÌfA@R?¨eÄÖ ¤Î¡"GbQB* LHÈUÔixO¯ÝJ&<[gV¨Ð®fb(p .Ñ-Q.É×ÌÎ1Bî$!¤0hKØT +AT"°r úçÖ ì#¸£±Ï/èßH±çì¦B%tN¼I"9%Aäðç' ;$±úS)åH hX¶@N_Á|ö¥$};ÆCP:D âü¤Ô)ª¹2ÇCA¢¢ +4òÇlÒUw9(»ð"ÊJ=)kUØâH¹à * Ô±Òó¨gù ¶0Ò dTéÕ 8Ò^¹xÆiûT2Tº&¨m Ä»@ÂÃ\¿tÜ9¾°`,.öÄ`¡`Á(@¤ðR¢¤\dÊ´U ÙD'vg4A3D +}LiG)¤Ò¼ ©í_ôÉzU*0L<£Àà¾êªtj«ÑÉKH¬åB¶ÃêrO á0Xûa¬E`Ö2a¨BK4¬ÂÄ>°®(N +¡4( ï-½T2òßYg!H Ð@<¦Õ§8>X¸(¼79ìAwÊóÜì¶½·Ü"\P0HPÁx7áAë-¶ 5¦ÜÓ`fo-ݸRâ%õ*.H(Õcàüu=3"ªZ¯vT=²·!X, *µÙtÛ+ý粩ÒÌ91à@8·r]LêïOò&ÉdÉM, -4ÀàØÁ,Y{°áÌ7£eÖ +Ã<¥Hß@×:dð2_3ù`r3\¶Å>14¿]NøhÀyÁ ]u+k¡íPAn¿º&à<ä\μQVr:6Èí5^J7&Yç°äo¥§N¡æâ#L.wQ¸AjÆjKëC8;ÇWWsâ¢aj¤0뤫@´2TgXÌ»¿¥,¦ICTÆcbzüéÝ´r1.'Å:7oLä)l[GÐ ¼}à¢zÒxÔ7Áv®ÏRVñt´ +Õ"è �!°6$óènoÌÅ9ÃÎÞy©¸ø²Ô=ª²Ó³[ͳcKHÒ³5Î5¤î>IųäÑèYCWHÀÅbÂÎÜC³Q¯Å÷¸dÑDð÷GzÒ#Ñ¡§G°Er¶Ëª@Ä©´n ©ògqß©KrbÊ9á=gDæî»úÿaìl_¹êòÿw1? äv®fÛ`ýKvlYqµHÖô§ ßq®Ûâ¯ÎþúsN1ûyN®Ú¯ mÅAÃcQ`óËÑO÷DpÙÈûCsàÇÐ=vPÚ(Ü8`yËÕIûÃøè} ò÷âeÙ)ô¦r»(öÉ<l¶úOH;j>¨*¯RöH*¹K6)®Ú7ÄBî în&*`õ-?ôæG4'ý*üþÐæà jª éFÛ.èò/6½.o°ì^â/2ÏüÏÐÏɨI° êàýdû*7"b8N®Äî´½¸Ì+¦Rä,Ìì � íN$ç �`Ç �0D2a¥/f:?$X¥¬,Z¬1M>;í¤ùÉÕÉÖ&®¥jÀѯ=-~§ÎìÍù Ï(N\æd}mâ4lÞîrVïÊçïòXd úc$_LX¿+ö¿«þã|Y ePøî.EH®HÈ4cÂö&<¯AqÁk¤à+lñ8áóÖqFëÉôM°>,~,.ÓEý O°Zd#Iu +qØëlßâÎqæøoLÕéB±pçäê/×®Âä0eÑ×Ì +ÅN¹7мàéêzâãõ å@PédX9oôéÄû&hrA)Àï.öÒð ðo +Ò.Ùë(Ó +¤÷ÀlüÔï%ÌIp/·¨ _-]nîJÏÞÖÎ6÷<ø5 MNî±ì§íUB{ä'í&ï²z`ïÑR Òxñ)<Râ© )Ñ.ÌMG*ÒØ¨úÃ÷#ÚûLë p·ÆÑ!ÏÃ,Rv'ÎiëÍò^C&å°ïò´¼2ñÆ]rä¢í4ï÷"÷³#+ÏØlÑìÙ +É*§ àpSOJÜm"Tx£0A ï4άrLv·v·I +Rìäªä ¨|ú¢I4é;¾Êª:"ì°ñÛ!©Në Xê ¦ùí\àn=ðz;óu +±Ý$2däÓ b$%R ^ ó©7©´Ó>±È7¢Õ¬òÆÐêÓþó°¯"2RJøQ#4^ýe ERÎ&£íA¦AåJ ÿÉì$§f¯0È·>ó®$3uñÞôã$i?¬ó01"¾T£/GiºV£22`ä ®¡ 0Sõ?§D1ÚóÓ|ô&M*²î¯Q!Ò!.;.oàqx×Í^¤snÔÊé%# ÐBa¯ÿâ÷1ôÔHô*o¼ñò8ÍR= ÇIægJ m$-.FO¿tXTfÁBSÉGÐ3ræ³ÒâcôÅL96H÷¨¿M5û5#«@Ý$S8rÑ$˾;ôîAex1Í �¢øÇª¦Ë}̸QJ§Ë7Àh¨i0¢òMwSp\"ë¬Êê² +endstream +endobj +119 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +121 0 obj +<< +/Length 2465 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©ÀÌiÎéc1 r7ÎbÒÍj +§#)¸Æe9hTH)GH¢Ñ*~.=UÂ#Q¸ErZ0R,bq¼Üe +Jª)Ädq8¨@3ÈÆÃqÄC+]¯ÓsSqEejKÅsI¸x2ðT8! +CÆð°än.F#1 �¨$K§¤ª4Ú~¶Sª)Ãa°È\1ÛåÆhû+S¶¶cÈÜ7ÒÀ°m+Ô!ͳÚ1Î\Ȱhø¤£6*"p¨831@(b¨)d=chÈ&8£(XD@:1¨È)xî.!ÛDÒ0¯CR÷Âo[à«C(̨Ë+ËdÞ7ÎĶ# ,ó Ð{ÒÇ5¤%C³Tì°Ü«6* ,Ò©hL õBï¢*#¼32ØD®;É71!¤ð£©=¯RIðÌ:¯ÓC<c Â9@0Õà8 HÆ0ÕCp\ Ð!OTÍ#pÃ\ÈAÕHÚ4x@: á4P¬BSÏÛF2áF± PÞ0hÞ2£`ËL-GPÏHZ¶O»º¶åÁ,³ ÉIÐ-y°¶Í +QÏÝ'q¤m3ö» z±!«°èÑuÌbMÌì ¦Ë"|8UãÚ2ÝY)Úz{Vv ~~Æ7£mh2F1ÍX:L£pÏì4(ÏiØ66^ ã6¹±8ëWWu h`Î ,^Øá¤éamrÏçn_wîáuûÜ8ÿ`ãXSÓ6 Ã3r "HØÕ8SÁÀjÔTv#I7!§Håfæ89#HÌ4°Y"úxóµÃ~{¢àÌÿ0ÖõÍw^×âJv¼º}fAV}£åèz[ xUxÎ:åãpéc.âì{ [@RxÁÅõÈï;Ü<¹] wD¡#/LÇ!Un9²5ÄìêXJ 1½E4ýàZûr@á7Æ +Kby&-è¡Ï°3})$ +£Fèæ¿V<T}§µ· +}mõáÕ8l %¢£¸âRFk@¬È*ò4/°2ªðÆ C :êxç"ä×ù9xA:"øú¢ iËP94"¯ +¤eeNLtYH¤¾5p K)ÌÂw6Ç¡T,uйRvaC¸sÊ@¼ óBm)ü§<¤ÔË®ÈH5jaÌ<ªÐÊcsÀB3ÊdCLpBHãR§a +DÍÉ`èe°mrê:ÊJÆß©µäjSR%X3%ÅbWÁÇ)ñÕÁå\qb#l§%³ÒÁûÈyQ®6Æ÷Ö«k¢BËù"¤d¡ÎhÄîÞ¥;¯ó9u.ÅÜ`NwYz?Rk¡ÔÞ1¯ÌË_üèsª:E-zµa@ @ëW.¹ô¾°ì«ÃLö]ÑÞ<Ë%K"ÃÁiJÞDÄvºÌ»Ê li'¤ R¯>%8³óðX �(.¡Ò6äsÜ£N59ÁË©¬0âjoÌXpUb [Y¢µ8ªµZð(a)[jl/6.xn--p-bga"Cjë]¨ée¶ æC.Q%_ f +{ÌAÝÙËLÛÕ¯/eÁÚú~«mnöw%nÁCEVÉÈ7 ¿èc$ì¤BNa/P¤z0Y9ðÈã<£«5a(D¨Uóu¯eJ±²¤º +@(±¹åVôÙ6=s"µÕDôòä¸T¬Áêû[bÑÜE»'ämâ+îN@åÆfÔª'£Åú©ãë'=|V ^«0ÜÓ'ôgË«%vC*ÉäÅ3¥QÛ¥~NeþN6+ uÎü1¼àËìÌìZÆË<+3E4ûhñ¸:¦y<ãchy °Ð ÕHäSÊãTdàßÌVù`Ë2!, Þª.ûò á8Î4Vf3«Éϸg¸vAAiÐ ÚðêRlôÏJ¢X-j¡½ØEWlçÝVA¾ÐÏ×Ý£&Ùô26sVY'%«¬úò»Êv1X>W¢®âÅÖGb"p[¸2@ún + ÖݬSͧÃlßÇæÑäA|Ï9Y\y´Ø(ÏûWAm~ZôÈ<»Ì·§¦àmm«rGôºÞ¯ÏQçgÚðlÍyÛr"4ÅxÌCjgÜ{¥Yu¦µlªèÄÜ0Ô-ÃÁN «µ4+àa«(ü¼80iþÎpPÒµ/ àØoöç,4ÕJxnÑ á£6 QIçÚá@8ºY{mcíÙög²Ì"X=¸&k·Ö_@/ï< åC¦ËZ;66í©Ú´MNÞve{7¢+îVD.S·nX¼ÛR3¬Ö$LÃr×x¢xª¹P¼µlº·ðXMÂZ`gøûi"Ö[Kyq.eÔ»·róÂKñ~P¹!$â k± @Þ¶H©Be¢¶mx#°_/Û]Øo׿Z@T 0àÀ롯¬+%gÚ-ÐáPsò9ËléTcÆ´; < r+ãäýïà½ÊÄ>ä¾@A¾Ê:¿/®.N$cÄò¯eJgdHþÏðE+ Ë º@±àÀèGp_+¦±à /í«ù$vEd\FbHF0³T ÇFxIFÿ` +endstream +endobj +122 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +124 0 obj +<< +/Length 3399 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9báò3 +Säi8 &óp¦F¤¨h*-¨áÄe@oS¯X,CÊË Q �¨j£©°^8JAnLa$Ë sI¸aÚÁN{AÁé`±ÜgQ*jÁZÙxÂfÉ©S{<üÌu7ïWÁ¤æ 0»¦ãMèÂlMÇCä@p7íNyÁâ0ÃIÂí¿pÈî»ëpd?Ã`Ø2Àp0P1=Ðpèͳ¡hccÈæ:£l+ ¢x |FÁÐØÂ9>p)Þ3CÚ/Ê+X®A«Áp¥9Ms,³31{>дl"%ð»"¹®;b HÝ ³²[Ò)`T J*2z\-¨\l2Ã@9(Æ4ÃJèBlàÈÿ/Tì³ +?/Ûúÿ¯cp]ÀìÓ9°4áLJã5Is)+I@ 9£´µCc+|и3jP¬.lÕ\Lª7§ój6Î,ìï<}P;/c¨çL5x*!H« ¶Zúp6µeûP/ôþ?Ð ÜeÏGÀ#À6UÈ÷NÃÈ7ô¨'ÃF ÊlĺßÓHT\¡ª¡\5ÕØP6ô!£ ÚÕÒò X°µecràéÛï|åbN¯{âõ»ã ßEà±ÓiJ)$lLöÕDÛÍÆ7£kÂ2¯àÜÎCk½øÃ|írÑ·E ¾_ÒV ÑbTäVú-sQ¦lÀÝÐ7õ|¿£a¨o39-c\Ø[am7f!HrXSjÄ%9 ¹#¿¹ùåÍG]4Nïéͨ@;¶£&éh9aÖiµ%tP@1j¥$ ÂzóH»ñ[9rsÁ³ow}¬kYæíÌ/L#XnÖTvßî]LÁy®h¡XÆÚÙfVú]´¿·MÌ!º^Äo²;¶èÝ7}aîJ夸[QÌ2 �s²Ãël©B Á¡AH í+£fmM¹¹7fõí²¼qN;â6%M+QN1®XX +êðR&u'äÖ\½vMMV7{T0t<*´§ôéã<¡¤óô×ݸI}-`4$¸¸b})³q²Auož8HjI9.dî,hmC:wH±)CvQ|]yLCôsÕ6Jeª¸²«^[ÜbjÍZ¶Ès`"¹JËò¸¥¼¼]gÎÅÒÃ1²ã_ACá ùpæÎÚuD@µ"ihOÃ!< RèÊõåÚò �xPuM¬K±> ÇòjC98CzÌqÏÎ,H|C9 ½Ý(³þ!wÉþ!dâÁ<' ë5PqY:uÎÔw TI¬É5¾ªÁ|a¤1 ¸hÁD8¢à 2äâhn19éw¨ü(ëWigt}[!Ì56ÂgsZiÔÙc9Ý"ÚåTòг)9ë RqT*ÐÓ<Ýë¬ø©@hüD Å[:ð®BøQ +¡$* +Q:*K@¶W\.Oð«0sÄé]úÁÜþ ãcÀ*/ÂXMÏ'-`ì¨g?-X<¡¡Ë*èCâÇ:³Ó Ó>¨AËHØÊAp6kU\ ÐØQ§&JRl²o¸Ygãb¤Ö³°"D°ÂTÝAQ"w¨`\V +¨6åÉùZS.-Ô¤-B[tíN¢&EJé!àÊò£ëGû~cqcàÝÒV@LÈM*+åøµ3Z°ÙkYºA¨ZúÓ{ç¼zlµÈ×¥q®@t¹W2çW£_åÔtÒ13«g <3ÀÜ"y ΤëHÔÃG¤BðÛGXëë¼é8@Çw1N¼7üæ«ÊUÉ!XJ:öºÞ +IkÍðV¿r*þàØbf*ªÚàUEZ@N/æîØLÝx³iT¼× {9d,×Àµ\ø\B2À¶ûbÜ "¨Q?[ò¡NÑ%B°eéÒæÎyÓd]ǹ7,:l[²ó~®;ã|ÏaRÎ8´VbÄ µkÏøg¹ìL3ðx<»MÑÜðE `(¬ÍxU¡´¡mü2A5N LKLÙy +®p c´#Y;ý®H¾»árl ÆO á0]Ô7`wfè"p$ð÷Ü:0Þã]s ÕÖ,iæ à;Ò±óKð}/¦É 3ZØgZ͹3Åf-X¹RîîËæãÚã �,þ¶LMéX¦5Ë·[¡nÏãD5ÿuoøXá gàs üïíCĹWÉë 2üõ,Äd!ësöûÇgt¼PÄú;Qæg²àMÒ2_Ãií¦Ë·Ûèó~ö6-$Nv9óÂLN¥PG²ôd²GÌß<FOiöz6-ou|tJáÜ0¡¼S¢ºò妷ÞC{ÅðëL<ùKß|üw¬´àxM/Ê¡ÏhBD`ZkGNÀï¶öË2d¤÷k²÷Îxø&J²L&¸ dÄÐð«4þÏÜþhÉ,Gº£&ÑO%v,MöüãªíéÖðPsðYÊÃÌ@¦ðFÊR·`R'Àób~ È»f\l¤|pªC$6C¨h@élÖú¤PD@õ`@G-pkçH°¢ êÐí+,XqúpÀPÞ^¾"F&PVhÆÖÑP> ®à¤ ¦ + +@¨ +à À à® +eÖ ïÓ +¤<ò"ôïÚýäDNUÉnÃ$TȯCì¦8Ñé#0¤ÏÑnR ਠ+`³ «B P+[ +©rKË`,QT&üet¶é«frgoLEcæ\¦ àå]j²?«HY&?d:ÊÈ §O$ÊÌÌ%h&*äìíîN¦hå¨#æYÈêiäînq4vf¨N ã0¯jú¢G~gq¨<êlgpÄeï³ `ïNdÙS¸hc 1JCÕ +È^cÔ +DÊêâ + +@²± +q +` à®ÌjÌIf¤N^cÐò%öé"¸#¦+j2hÁꧯXDÄ í' +äJþ¬¯ç, �Ä à`ÈàPärШýeåúéàn¢>Ò(PÖ;òÜ + À[ ßf©%¯Ù&)È©°ø%&Òx| +r(RØÒ#)S§V@dê¨Ãþ.) +Íb¤éîÀJLÜLîâkäÄúç¢ìGøãîÊ!DtÂ× NHÑÞúÎâöâ+¯Ä9NìÁ<æ.ø7FVO »hg-þÀ |]èjcèÆpêí-C-b=õ4£k4ñI.Ó^HÞjäRþé}Å©*lzËèFuï1²úOòõ-ÓRÌÐ)555ç¨*f2bÔëlÜÂÞ¾¬þÐ0ìf'7Ã×NÎ!/ÌÀó$®ÒF§Aô"NéÔ*êÍ<+TZu":³lÔÓpÕ TmX\BÍ`XÃÔ³yD®ÉDîÌ1¢ÀÅ¥G 3`Ò·Fp"ÛBªÛW ]G2%î¥CÈ@Ä@Ø`è$3b|`R@à ò +fD8tä êêêLÓÂ.ßd~ßÅPàÞsTé BÂêBäÛG®®6+àVn+Hn.ã't¢tFní +"íE¨5Îíj ä>@AMÔàã ÇNôóO \4 tñ+ .KÔþB +endstream +endobj +125 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +129 0 obj +<< +/Length 3369 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©ÀÌh5§t±ÀPD2Ìg#IÀèi7 4*$#¤CAQh? ªa¨Ü"¹-&6( ¨h2%CUKÂðQ±Èß +T"M,b9èA9MÆ2YòS:NRà ¸)ÍçoØ q.ÓêABÚþFc¯F±Ù¬Þ|f:ìî÷¤Üd4÷W`t :f=ngÓìv¯îéÌAâ6¦O)ß0÷O2vÂ9.ãê6@á �ö¡ ³ª°\ +Cæl² Þ;Ás5 Jv¤v1ÀÂ6c|o;ÏÄݾÃHÌô=Pxòãì8Kæý¼1½ÏT9¼6= ØkÍIóÞÍ/ó@À ¬ê{PÕ2k^ضm«nÜ·më~à³Î"8ṡf2ʧâ1»kÔâ¿Nn( Á°j $ñZ]GRPQQCE«á-T²È«W2ì̤1ã ËX ¡¢6DMELe_SD9/kw �Äú[¡@Ð0ÌͼÜÑÀß'Íáã¼1?A �ÊO½¸ÆÂKé7¼RÜáS°\׳ӿUi(¯%ÊÍ.Ê¿Ã,³(XMµcV(5CEáuN×s4ÎQ5¯£!¾>bd°Åö´lµØÕü77.óì÷ÙJá*7h!uPbRÕúp;HcÓ +ÂX¾&B¨¨* ât6¡¼:ìÛ²/Zî¿°¼·ßpÌÐêû]xà@ýÓ,5²ìü �6û»21£ èî /´²:£Ý.K#à2ÓMÊ6!d>¾U!U×yÝÕÒÈÏÕäo8̽d,ú:A¿efy®mV ª8 ¼L¶!q¼xÝC8eeÞ8ásIå);¡çµ4ìó®åÆ2Ê2¾Ãõòqüö2ÎôÂ̽£Üïý¥Øõ-pÆø_è(~Ï èÑ +(T¯ g¢éÌ:°8ù^iy`¹ÜuDTJiO"p©PpS°3T �¸9À¦¨9"¤@Å P4: uí.ë ÂÁ{çÈî98v½©I'ñhª8nj}§ªPpÌK9ʴ溶¤ +êUJîe-¾D¼lß{JÉõ&ZÛúk`åõ;¸>ZcÙu?dm ±¸<oA"¢Ç Q¢µ"ê`ßoMÕÊ7̲¢,)Ð5hÉåVX^Ü!Wèõ(¡b©1íá9c ࡽ +¡AÚ Â¸NPïJB²âbdLR&8Õ« _æs ÐÆ? +QZ¡%'·'øBdlix3¿wâ·à8A¦x¤ìÓ)ï`rÕ)¹@£fdýG´ºgjNòÏD#>âa´ªfàt¼¥z +εÐJA«õqgÌú,tKÝ07¤Ç9èHɽM©Ù*¤2#1]ª¨ÖÄÍa®ÊH¨CxoLðyEÂHDBJd%*À¤èT¡Ö,Å Cd8Cr áÊ©ù/6b !WÁ±aªôüÕåÑR¤°F©¨ÔúU*Û1±.K +µÁ¬6-Á±/ [e:Giô& +ÊÂ&k¼1jÛU +Ì4bUÍ]HÃ\ ovIBÔʬ¨æüò ;NmM«¨ÏBÚ¼wâc//BÍI#å¤G¯¡k5¶gúÀ(! åOQòk`AÁÆÖn/4¼ ¡c©ð@ØI4ÕP¨F©Ô! dgL¯e*¾Üÿ p4³ÀâÂ]+1U6)â ÞõbÍV»aìòïY¤lÚ5s(O á0'ëÆãm½Á¼4C~î+¼©Ø¾ØX³1ø:ê"Zp¡p.Eл8}YðéÃõ¯¸Éq4½xIܲ3FGDÒuëÈ1Hw2bg7³±ëQïr +)©ólaÌ0×£ê6)2Ð@Z³V<Ò¾îüK Ì1ÃÃÝ¡;»(xÝn-Pr|r´¸Ó+Kø&Å?§Q9#t${5½) öZ:°ÊÃC [jÕ«t>ipÌ1º=>tyÐ2V="΢Gczhv-Å>Èx2NÏ5))Àº.:Ìdú.2¾'Î!,Ãà[ºNëÖróvºs¢®JGٰٿÑoI¹©ìû\ÏJ]â±»ZF9jè3w¡º*Ïözkò>ÎÛf±Æ7¸ë{wîøÜµxnyFgJévñ¦Û2oâÌG©1àl=HÕ9,ø¸tI¼i.í.O^0ÆÀ¥Cà@Ѳ [®p¿"äxj ¸D8N[ 2Ü¢aläE³àͤ*[£FÑ$:Ùqg«Üáá +AT"ÔÅO¾ÏÝÀiÆÓÒÝÛÔ½hó1°Ìâtg\ÄD©»Ï9ïgQòm¡ôHeFÁ= Â/`/Ø Þö8GÙj"Ø4æöÆ'u}-^±VL"Vv#vr£{þq2µÙËü¢Ø~ú±;dßþ®û'¸ÐP± âk~Ö²d²êT +r0K6@ü¦b¹ðb' Ü%è vªK,^©kôèF¹B6$fn®mÐÝëJâÌçú)cX&ÌXàfG ËØ-²d¶«O@·CÆËÞN«ä!²È":¿J®Ü¿«þÀ/þBÇâÇÂÝFJ¾p&)¯ôÈÌDì( +l,Ã"ûìØ0oÄï*Ø]ér÷ÏÒ®hg,fƬZ¶ð|éÒ@² +@Øb¨ÇÌnV"&DÎtG'ȶÀèµü·`Q Ê<qpDÇOª¶ìÉt- ú-Ì.bêS°Øß̨ü¦+âE¥Xúã,3 �%nÌPìUËaDÍ)¯0ÚQ®>{)À$Z£4Îï\pXà -"Ã2îFô]Â^åò_o0ÛH|]ÅJOA&wænà6ÆÖæþ@ÞqÌÆ4FÀ¨é ï£*|xj± ¢Ðìñ:"Ín-Å®g ¶FðrX& %È×$ àÆgÒnG¤Ú$á h]0sZ@ò7h1 ¦|;ÇÚÜøoQ¾_ÑÆÒ$ßÇ)lßÒC$n¦W.¬>` +oI²í*âx)¾Ìùñ¤z1¨1¬ôïýF(E¶Î¬îÅÂ}D¸\-èl`Ã&Äq È£¼ÌæÆ=¥ä ÎCí1ç.[v|ZrbèÛOêFÕè@D¿.òNó &Ï'¦ç(Bî=²i5ps1ç1Òù(S$cCÆ a(@h_©ý&¼XIJ}~M§ÊÖí@ ¡ XÂmð >t¦hð1øööĶn-jñúJeÃ6å¼M8æÆÕxoäxlmMmEÂBszC É>éÎÄg:ÍDgÉç;Iî5Èý?$~!-ntMMó>Ó>VGóô'Óú×þMÀÞàÎ}fãH}<]$±ø`£2o'DÅêáfö $ + `¶ +LVÅ}H& +tH#»AÆ8«(}KDä¹:)ø0r¤´¸ +N¢GH¿òÖ%¦^D¸~ÇhÈ Àê §Ì@&òV'|atÎÎJ%Æ[¤p¥ÜMï\ÐÈäK£rAö<®[8sé8ĸ;4gKÉKJ A3¯A;c\ßÔî+òir,W,$ær} ôc@ÞùPB +endstream +endobj +130 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +132 0 obj +<< +/Length 3273 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÆ6I£qpÄi2*%à bh + Q �ALÊt%O&#yäd)'C)pP\ÙlöL.Ü8ª!WY~ð0 !spTäÌu7ÎyºÊ1 +fó¤Ês×ìN=ÎË[77ó0wd FÂÓç Ã'êf3NB¼ÓÁ28Æþ¯Se¢Q ¶«fZ3¼³,åÞó$*_ çÅ¢®³-[*¥Ahh¼.hòÌ©K²PÏ*¡fѧ@àÃ#jþíøèò<ãò9±jʦ¶#[Â0ÏxØDÆPÄ6¡sТ >Ø"\$¼«È"ÂÞ@JÖ½Ëz 4O«>¨¦rSöþ¿ìdâɰ4¡Êª¯"«*Úõ,¾Ê³DIPÛ¥1Ûfà.ûp0»óÀíÄn3xä¹nk0 ¡1"Aá5#)ºö0¼àÒ §A1aîÅOTÉ0l+TlÆqð¨<¶£Â6 Â×#à6 5VÖÓÕØÜFmÔ ;S_µÁKÓ'=°@fáª+/4À#¯ïì`ÃˬkÌ*DÆË¥áºéH>Êãñ +*3{H¼a ØÏÝPÅ0óÔûÅTÕm» 7<N;\6ã Ò36ÍÃÎ26ãHäð¼µcª2Ã~G65hïù`PóßoR '¯}þ§Bö¹m/¶ì_S1SÇ2(Ê£äú]l¯w«aÀo ^STÖ Ñð×8ùª¥èê¸QÐ;ªÞPÍd9¬Lhâ7¹¤h' +¢h'bXXÞb )ï{îÿ¹65»Ä)b& +%Õ翼â'a Ïy^à::fÃæÄ +RjÒfmàíY¸èóÂX¿¼o[æüx"ÿ( " &oüWáqw ®åÞÎ+ÏM;þF9.¶;µ¨]¥#ÙÊÞ¸¬µì¡¬© l¯zL»A¢+äåi@fÔ¨1H¿Pä³fëD·b$`° $ ¸ lÁ«õ +ýI&ÀP·CF+ ¤.C&q$úðÈØn î±H®» õõÂø&¹Êd2a(< ,])T°£.# d*æ%TÐ&¡ áÌ;öïëì½ú2&ýö!ïæ9FIJÜM@i(¡È92¨"³áQ1º %84CàëöüÂ4ÔÐq1#>Ô£o~ûÇCÿ£Êo`¢¿ �Ì9Ø4iì3odkpbGA¹" Hè.Já +äU ±©÷$I¨3.$x%h3(39L-0p±K\' Þ]fÌÂ\ëaä'!×;gxT¡à:;0@ÀSù#iÁÉH¥Jx!gliÈ"P$YDýe)$fði*Ìæ*²¼¾tiëò-H©# ÌÆ4DvmÔÌ&D@h)ê§Ôü1Íì'p@ ü&80¨ª=(Gõ/äßéØnA40údÜÔòÉFA ZA9fH2¤Û7¶dÀi:ÌB/L«Mâ$LXg EäÁiÃ?Ôöz!ÐËPC¤Óì@nÖÀ2Ó}yö´³#{aô'µTØnf,8>7²jí¢ºË3&è±]ËqY +\Ù´Á}Äd!f®ÏKU%9Å)æÔÈ]l §Ã_Ó)j¶t »!,ä3äŬÒÈ{ÀÒëN¯vÝ0Öô´t%Ý©ÐÜO +ÄY +à+-¨oÒÐðÜUqæZI¼ÚËûuLÁUT@Ò¬ä! Þ°T5wÓâ_àÚò°6ÔZ%àä)rr§ÓÌ:òv'ÔD'é=¼ëtu ;à; z/é·vô;hur$í*dý2¬+r &µ#ÄX0Ÿ½×mÑÕj®Uìµ#ZÔ´£º¥ñzs¼ $È^H.ÖE'Î@Pjèi ¡Ô6ã)Õ¯3ij8æõðg]Â<¶Fíåïñ¼TñTso£K nªÐ§PÚwÌ[±a¡£µqa}¢"KðgiÍÇNöþºTw1R7Ô9Uy:4¥!ëìÔN4XÛQÓJ¢k +¸'TëÕdC| [d6Ý4¬4[ Íw?BilEÎ&;z÷&R¬Ô1uùNkg0³Ö( ¼MñdRÆï$Ë_ë£öB3ykÞÜ 7ÐS1ÀæFp\¬STáí¾ ±f×Êw z4í +%E¨ýÙd/J)͵L2 |wØçe!ËL:Ǭ-Ö [Î×µ¹·½r Sp6½À ´3â|±jÈLËaìTêáû¿mç§;7k³I|Ñad\¯F·]m7Nút¶1Ûì¬ÁV½AhQçԪǣ1ÒÆ$D åµ;á4¡°ÙQÕ¸gÛÝÕUUtʽn`FçtzÏÓÐòa«óÔ@È+v+ �dù@ì2v5ÑY¯Yã$¤^*¿¥\#´P2@úV¹+8b*© 4D,_àpǧþä¨] nêr,NâFNkzün¤FTíXí^ìÏ$ÕíS î%MàÏ¢+k>½£f6¦HP#ÎÊ ì½ën¾Mö"|øféª(ãºÄ*¤ªêâ6d~ùn»ÍïäB8«îõ ºuÍn4àØGÀ8àä˦à«x°2Ü +¯Ö¢n þ¨ôø3þ)¨IÊôJû +Ä¢ä~oà°b0Æâ ðúÑ +}б Â0 FÌ^,"ýJ$ý¥ÖâH*Øô"¦ÑhÔÉÆe¦)Ð@@ÊÉáü©ü d4@dÔâ^§ +ª¡ê"=pàÎ*¢èâHãgãÉX°@b¤¦¤Ãh¥/þºñYñ\! �X½Îpý �Ã0a1Ø£è÷é ®jê®êófÂ.¦ �|'ì2âÂà3NZ»&hQ¢@4ýlRH>ãñj½+JsÃPke^åò×^Fð@ý äÅffNÞYt¾-ôFEßJX¹K#b®#Ë þàQ!Nß ë`6åÅÜÇDÖÑ$¼\7È&Hb% o0© K$Ô¢`jì|½Íñpcl²:"õ|oènàÜoì pÃ2~D`ÎäxBñî»ÒÌâýmþÎ ÎòÆÒÌÏòбVÍÍkÛ.+÷*ò¾gtdR öëóÎâYpâ`jÞ2ú%J`Ðû ,@òàÂó0²·R7îrõøGè¿k2iÙ2ì¸4ð¶¸Ì&d ZK|Ì3á& Z(3ì\ZèàX'·ÐÉÎÛ>©£à\Z²jÒdÍ6EÄZ ¬Ô&ù--:gW:Ó{)í¼ ZU#fdÜ%hÍÛ/åà¡Cq¥Úæ]3¬¨,fÀìtZ;ààû, fE;+mÂ7M4í¦i*ÝH©ú'9nIIxÚîêÀã¤õ´ZIþ +endstream +endobj +133 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +135 0 obj +<< +/Length 2801 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ìi!ÓcAHÊt:Ç1M#Hé0ÐTZ%P¿GªÃXDj7®Í&uúvk Qên1 &ópåo¸ÜÄØÂl:å%CU.67jB$[`)8½ÀÚ6NæIÐ FBIÊnÍ&S#(:dúܳÐÂtÕuÍæag(g4¹úSIÊá§Ì§pe8sÌq@Î<®ÓLÔ2Ê88к¨²¤Ø6Aj6 +KjÆbÇA@Â7 Ã@1 # æ@ïæä5p\êO¶ép`¬pÂÖ ¸ ÀÚ01ZÒå²Z|:§aÈP8J)ðÞ´@å,'Ã$HÎÊð³-ÌIô»¡ár±Gikrâ\N°7ã8Ø2«$ÕF Pja¼Ø ÇÃu ·,²>RKå.&làææ¬üB:'a¨Q0ÔRRxIµ8A/ìèÒò<Á4DÑE;Å¡+3¶ÐÐ\6%´CÂúȧiè]fÌθóC½*2ƽsmRν2¹Óó¶ì'rÌÃ,ÜcCT]wê8>´¸HÜt¨AoÓqLøòܵSTUMJþ4whé<OWûºï²|cı<S\Ó«f²» U7*´{Zl«kÛ.½·[®]ùpßõ �<ÏsèAyÞ±}fwõ?ÜéöugiöÄ8r4.¨Ä2½c>9wü>äd F2D-[Zmn×·*|âÈ Ã¨ÛËtn×á# Ø£mEN æMQÖHÚêÛ0ÊV#òî£h@;ë<«¼÷O}£¡(Zø©)Ê'Ö*°p§Á¥Ä+ÍÀh±oy:ÌHbµ (ä9Dë¦Ê/]R/è¯ ÁÌ @(pe½w1óvÈ ÌàËÓn}B÷u¨^¦ö*¿®©Lwº§oLZqßú¾~FÀKpfKtç3¨¯ÁLu%(¾½7Ô70d ب0rw #ðæÀK>aLï +à)Ft:B òxaEBxRÜ0F)9º8rù$fÂ?HÉ ½~àÔ$²H7]Ì츢 +C ç8(`:Ml¡ dCà ¨UêÄ7°3ä320@¡Ì;ÁרOÝO ЫGä£õ,Î&#wõÂy Á¼8)·KÃÍÁ'Z7 ¹¶ãøÆa`K1l2 ç6¸p^#Ó«ðþ?WÜ NR7w"E;é¤x(>áÌ1 ÒÑ2É8`z¤ ³»(ÛÙ2'j[hùÛ¡°ùc6ǾeL«¼2Ã`R)y¤Î©ØâSx®ô°hà(2ÆbhÓ>\ÕV!¸ó å\ÙàsÒÞÀjL[ZôD²bp¦Np Ñ?C«BÌÉUÇT0êiÃbIkÁ¼;)ÄBºèy$õÀZöÁrXN!,t1á8R0Â"É3Pr¥°3"u°hÌèaÀ6S¿L ßWG@ýQ Þ¾éÂ_T¹PÐèlj¦`ÔRcWCc?ø:zÞ«(nr84ÅpÝ4NÊÄ6źòeqÒ È¶´$ö!8 Á"k@ +AÔ·Jþ`TºÚgj&@$Ð ÂT +rÞȶÇdXE!'¤pG¨!ûH ÊõÖ¥ í ªM8Ì¥2<"ÐIÁ$ä`ÄñÔ9áÑ5õ8¥3©9XÀdX +àpÓ³sxýó2ÒJjªY@ðpÝ>·è`'RÈgà ?õ +)# 'ñ³Q8jî#hËEa®õtÆiâó8ðG#ü¥Xk&ØâÜ^Y/êÒ¼ ¾óÞÆa²³ .w{:¬!XÕ8b]XS§Ô$«µí75¥´îØLêêTU R«¦h *y(àÀßÛ-½7nïÉ62[ +1³!¼±Pe)^k<Æv¢v¾áû?¦T4Ùükù©U2{ahÆò^kÑz¯`N9æ iÓU,lR±ú;`K¸rS'É'sѳ¯C.GÑqæ\v +{3+ÿ4j9è4CV:/F¶I0¯ËéÃ&çÈ´}*ÚúMÞ A«rn°½¬iUTöx%ÓÜ·!¸W¹cÏ!Ï9ªÏnÉa{-]GŽ/p<϶é.ʽ$þAÍ÷tï±e ÍýÂÝDÓS¢k½"/6°3`á_½Ç÷ 8ÙÕüËÓ5½up°`ØÕs¡æÓ¤\ÃXͺß:sZöÆI&þ¡(©¨Òñë×Y¼4´heÔíâîí»¶Å\ÜÜÄĵ¬ ÓîïÚ@nÜSAW¤qN?OÚëéØ>²Øesÿ{"N):I#º÷e~BðXéeJ ÝPi4`lc0*Ù½ð!¦=Ff¤*wWÝx:8êªÖ~Ã鵩jjPA$÷}åÞ7¯yÈ?S£Xüì ®aÕÙ(<Ãwô#=®ÉÃÎâÈ +Á;@×õÎÁ¹/&¶,ª'Þ¿æk z +, bíx,Ò¨¤ÏÚýàjþ$¤¤ÊJã=Àêïòeÿbÿ �9/ä (ÍBÿP:½/û �Npüð^°¥êäàG @d>Ä ÒlplÕÐqðCHp+ Ï=D«ä¤ý-ÂZ¤ãî Ä@Ö´9 äÿÐw`lPp¾åIr}¦Ü¿éúd0wnräBÀôÔ-y �ɰåé>MKVÐÆÜ|+òçÌùGZÇf!%{I)bÁ Ôçú çþ( í 17" q@iR>j¨E N,~$iB/E|Ñ>Q®ìiÂØ ç:Rè¬HFø-vÈ Î©" ÇhÔäz@Êì q®0}qBGhÎ<*qbäD&)"i*Wgåhxå¨!¶ªrmÀ +ëpÞs¨\ +qÔõÚ + tÈ k +endstream +endobj +136 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +138 0 obj +<< +/Length 3234 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9iÃ)å4f0§3ÈÒp:MæáM#I)PÐTZ%QÃ$"á@oS¯X,CÊË Q �^8É%IvRf̦ÒYòS1MÅÁApSÐ`0ZX%pa*k,3=mj7³ÏÌÇSqó{ïgc)ÈèsȤѦC${&ó%Î)<Ïμêg4Eb0è7¿ÌØÒ9=c乨È4Ã;Âñ£tõ½£ú¢ hn+ Ð4ä":#¢æ!lÛ:Ï´-`jª.KZ$¸ ##d6c@Ã8 ¥IV¶0£,d9J,tâJ¯#Æî + )°·+!q"^ȱ42ËÈÌ4½Ï8ó=Pì0«87Ð8ñ<9.³»I²Ý$9<b@ãë³? Hô>D1 HËbʹìÀ* +B`V @7ÀhÃÌ1ëPÕN0Ë&5éu^Ö28ÖÛ<{87 ñpéH ÃÙ±HÄ<À#KÀ麮¸ÜëL1\ÈTÎØõbÍW4i²p £¨çAøË_³°ødIàpT!nίÎ(\¼å^|æ,5@e:³Ðá>[× �4ß¶ÚóÑA8]uf¸ðôAX V2×cif_NýAÁLèOÌî\ +]<ËQL»G7WÛtãKç«È& âiùpÝÑLÜÑ ³åNè@îSÕ³]Ñ:N1 òxɯâ U,5ªó ½£°Ò1³62.Û çt>wAr:Û³³B ÌmÀG(Tv!ÞÈ=dÈâ°ÖÚ¶íËvÞ 3L¤ÒJ0jX#ÆÛñ±ÄÅÑL0n«bòXض}pÝ7ôÃ5÷#äc^z٣˺˱Ë_Öè@8.Ãl4ÿÏþ#$apmåæÕFpïB÷Y¦Å# ðµºZ¦màcF.io¡PYSDlÙ¾7æÌÌ .zᤦB¦1R)Ð ªrH 3beÉõì¾ËINeµÔPðuKeÐ'²CéQ"±$ÅÐ@¼Qé$®à³IÉ31/¾Ä½ÎÂe¡°7pZ¯l ȥΣH ñ¡Ôòãq¬$à̯ræ`Hê4-¬-H6#4hnR,G8á#B® e<ÐIËI²¹¨E SÂz,µ 6s´{[Ĭ1ÇÔ£ÊR)}HØÚ#|qY`GôC &Je¶Ð³÷éc¤XÐRDvOAæ 4æÑj/[é0'ôZè7 +±1ÂtËBH !]6TxeO0æúbékF{®ôÙçøtL3Nw´f`Úà ³æ}Åéý@Hb dËPE9´èTóªv,¨c@IQ-´>êCTR +]¥RÚKBÔ]Â6zp{SÜE(1Ëe.Û0A±>¶ÎßÛIà´"A$&r"GLjóÍi ²b¢«Ê¢°ªuRÎ` 5DÓT@Ã)T*Q*ÂT© áI°´!ÒÔX¹_5 ÒrG!áA+É¢"3£1$N%xTû¦2/:wâöaÆ)ÒB»BmuC ÐÀm ,Yd,Å µX["\õÀ¶ bÚ b:¥Î"dÆ,Ù>'Eâc$ü5g×='dõMýª±:D¢Iû#ÎñÛx§mÔ8+-W²Ê%¨n@y¡¥YÌ -Ö½EUÔ!âÄB9Î#C_5±³Àªk +I¡Sâø_VE¿L<@àÉì¹{j$á³gÊ#e!Íc0BHNWWÜ8_¼oá¶7!GW`Ï`e1];e7Àî¾ÞL5 +°ì.( à\¡v/ ÚæYtléÇÂsGYªF&læ!f.sȯìL¬ÇU;²&F¿a±Ø^FìLídf¤ùdÇn}¸¬¡keñnmKfK élÌ~ú&Ö1û +Í]SÇÉ$äü£¥ía«Ä{\ݵîß9}im.¥óü&ó²B ûÒÒþånéÊO*ÄL¯)ç=5áC.Àâ`-rA^¹ûÅsÍ1:¸k©Ý¯M¶P=»Ñì k±+ß&}ÓâÍm;Çt÷SLæ¦Òz¤Ûm5vO¸(LhÊÞ-Ð&²³ >Ô[[YºªÐ±7^é@fi{v/# ã¤Í+hîTðp¸íq¬ð ë̱äXÈÑh£¯kجmàeh%üy+½Ö*âÇJÜpäÿ£p¤Á¬ú®Á°¨³1®Tf$UâÓw2/-êe±°°xIÍ'¡L §/\þÖø;»oHL¿«OrÿM«¼±méG \@ÿ- µ:EÔù°Z Xa<÷¬îòºsyFÝBSÆ))Ñ$ÇÙÒQËI@bO ð,ú>u7Ck}ÔÊk¹³¯·ßzî[M¬|L«¢µ(eØÅÖ°m<®Û´´S«xz)+Eí-Vª¨ÖýoZ7O^FJO(nkôÉ �VHø¥Isèøøöhïú°,hïhøù¨øEÐøç>î +L¬Ö/Lïî¸6 ð-ôT/Ätn_f,ÛNdìã&ÎnrÏTÕʪÿ%âʬrů �¨äY Æ0Gî f. Æv_#` Ýç)Àr¶®ÌàH®nP0@%6ù>ón\feÞäN ¤Iù ËÍEÞ²(| oس$ÈϺc*HCn°½îÎç8hÜô\%ÆÔ4éGêé¯bøiMæê¸ój!æ*w¹ã10fôO<#þ¬B~ªÏó§HC3¼ÀµÌ¾°KcÂH@fG¢GlÓÂÒÀñ0²k*Sêïq@Æë©l±+´Ó§´Éå¬.Ë©ºÌ@d ıÌŠ븫¹$ðq:Öh"ìmHD+Ûf4yä»Ç¨v л£lzgfzËÄÃX½d¬þgÒ +f¾«º¿ÏrÀ2HÀl +ÅÑ6ÂÕ¬SÊÂL(ÂÃ%[¬À ¼!0¾1È L·dùìÚ-ìVÅ ÞÅåÅ¬îÆ«¤³Ñâ¼ò[#MÇìWRDv2>ÊêR äËq²¯ñ¶Ã ÌE^#r]*¬ÐÐ@P-(dÍÜÍâæ.¢î\ÒÅ"cÏ#,ãPÃòªVðq}B äð\yòß$-®ÆcíéIªàPÀý@R>'sNÔCºÔ.0ô&`ò`@Ú%,ÙÊ'©2új«6°Ôðl¨ÖÓHûìØâ`2ÊæÊ0 ôú ÛÔî0l#%Þ^/ão ¯èÏÆípîiNtÿ Vè hê¦øIÄ\ºS$ ²EÅFFÎ}0@@qÚÄ}®bÞ°¾íE÷AN;@e§Ü¨÷;¤R/gã;ää¤e ܤº.ÀÆj)1 +¸x +Àæº "pL>£î x +endstream +endobj +139 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +141 0 obj +<< +/Length 2622 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ A"N¥BT # C Ñ<l0FâáÒbT"KF +LÌ0F¡s`Tà¬K/ %bI\# Âr2Ü®IÜo¼/WS »sºßÎ1AÞn;NGC.öbÏO9ö Pt4Nb1ÔÜc:qâè^G¥Óêqâ Âl9ÄSTAÍg6Æí±Ààl4Ì;.!Óu½Ã +htZý61Rk=Y¬h»u#³~yÝÍ&ã8Ay+Kä²)dªPáà¾??©+Á J0©(h£ahC¢]a²9ÁʦBâ¢J¯Ãad j Áw +aP)£ ê9 ä¢AÊB "È1"£ÐðjÁÀd#±2h¯,q¬À¨4/#°ÒɸZ5¯C2/-ªñGóÖ÷K ák4O;(üÎÈæÐÌXæ:9sKG5ÇctÜæÎ-Î4NÃñ=¯0Ò3.JbêÐ4Qû¨*J\ª®EnâÈ6 CTâ6£ê1p æÒd·?P =¹N#ÀÈ ÞÒ ãdæ;½ohìÛ° uÁ° ª(ØnEJµR +òp§a°nEno �S¦)pi'!nÝFÛ±`epÜa½Í8Ý/Çw4c ÐÇt]Wc%yH å½ ¡ªvÈf! [UÎ[hѱOK|30 vx¥?P»ØmAμà·^¥c-u²ÄôXb¨) X& +É3 ùf\ægÈ&.² ¾£\úN%iº}©j¦$ "0¨êÚÆµ®kÙS± Ù{WO)hÚajÞ×Å´µºï 4ÂÿÀ½ ®pÓ0Me^·ëÎÂcfæ÷7V½06üÃÍaÕ.`ADGëhAÐCP´0÷°ä=+¨jÊ1<ª[8Ü]c (åQõæÒI*!¼±%íùXÏ&s2ÁPgr÷p+üHOöOÞZÕÆB´)8yà¹Ç¦@CaÈ£ÌÁ (2M9X½¦*A£ø{ï #¾D@1,Ò"¶ûÁ@O¡´%¦P¦¯Bà(.áî;§¿ì,F ¸@nÞL}ð)ô£0dKÁ@SäíàCy¼¡:C@ +¤4P\ù �¼ñÿ¡Ô?Jx.I°µå¢WúJ£Òp@)þT: $HLÿRCæ ¤«#øò((A<'ÆLâ´XQr/øs(å)¿QX¸¸xA¡òx.ýÿ!¸Á 2CÈvB!¹p4*DÃi20ÉHòø$¼%"òi%ÆB¡p0*åy£'ì÷!×IåpuôÆWääq^,ÙYáÌ;óYü¨ÈÃr/¹R°ra¤4ʨÙÐèhÖ0«%`© 4Ty0¦6U¦KØm¥æ'Åbû=¤ÕsÍP:_Ìf$DÆw-¹ÆwóËF~=ô`Ui¢ùJgx8»aà-2êvÓ ô±àæ(cRá¥'Ð@¢º´Lö'Ç@Ëó¢µy,déEXlY¡ÍgÎwµ´g[ ´5pªIØ4)ìsÑÚ?H¢Ñ¿¥44EØ`CrOt`4»olT8 z»Fêõ²Ô00dÑkÍP¯ÅDÿc¬N2J9QëGbi=¬Vu3ÚiBõ^ëðíÖ©E6®{D©à×[Üm/¶Vè[[nÐ5½OÃ[s{ib%Á:çfÕÛ§un½»%æòÝÛ1{¼(&[ ù*RÈ}ª¸T¾*9ü®´ñîßøÊcU_RÖ.¡µÔ]Fø¼v¬k1à=Rê(è²qÂ÷Hǰ̪Í6Ë`ôó9ÉpÈõúàÉs¥ô|ÑùâH²BB'Ëy³"D#(õÂlG´ºB9²øæÛç#$Ï C<åTöµ³äß×¼§ñMETÕÈ9(O¢=!aJ¿LS «&¬¸¢¯b»ñ¥B¦EìêÐÎÅl¡nɲ=HÊXËÆ0ÜÓ@*}ìqê¿ +[>éy +äl.,$¶çÞÌ{Êèt\s6ÀÔ$jì.Å%S»aMÇ ';gÜóó½ö/9üÑèöj^4!½jTxÀ:$¹RaR1è«LÕLwµñ³ÑúJL{Ì»ÈNû"!pe dù-´Lí"³Ö{I àèI.ZQøäÛTõËñ~{àíÔcì# �EàÓ J]ÈvWgÈÿxDä~J+K;PÉ#e!ÄN-ÆkÆÐ¨pR¹C()!Ð%ôx4Co.á*±cÑ ì"8èr±Ò;FNm¨ãßÈ|HEíÏú.'ÈÉä{töKy1 ¦ázeMßs4wYèæõ¤¤ºX>$°ÅäC(I ÌâZßÜ~þ²jݰì%áûËî ¢g9¡4¦§{Á³_ò¿¡RO\|ZqJ?2¬º#SÎaâúbeê=OÌfMc5çôìø´ f ê«h¡FÅc �µiæÌ f&,Ú4wÉ l=7ÒX´5J +¨ ¦2ÞPòÏ0óFpùçò@nϦרû"|¨¥Ö¨ã$6Ð ÃRʸ¢â¬%0þ0CÖÑÔvG<1cÀ¢tHG/ÀnàsMUnj¿É®©HÏEê#â®â¶ÀîÁJvß©Ô@f06 ryp°;¦Ð #3Ãj3Å3Ð`ê`@¢Ðæ@@ÂLUO¸6`ÂY`ÒtÀÄ££ÜcàP ðø«Ìp9l@ 8RªØX¥¢èãt9ß Iàm +ëRÓL'p< £x1px=`Æ®DÑE/1ÇCãF¤@ȺÂòMPÄÇeô"ÜÂàá²B +endstream +endobj +142 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +144 0 obj +<< +/Length 2170 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b6 dѸ¸b4á³4 + $Ò<¤T)J©]8\7P«UÁ©`È¥<R"äR¥êù~À%-ªØ + Ãa¬*Ýp¹VÁC }zg Q:F©pÐPÄ\8b¼Ör»r¼ÌECÉÀÊI7úh)ÖFÆãA¾ÎçÛ)wÀÂr0L§C)È@c0 ÛHo7y̦AÂ6 çsI¸Î ;MS)Ìtâ¨Øl«¨ms0Ú&«r'°n´#@Ò9¿Óø÷»cG += èÞ½A �¨ìÜ +³40lÂ0*ý´43 ½pæ:Pû| ï\;D4QE ¨)®¦lÌ(üÇÀé ?²<7Ð@7£hÄîÉXÌ:Ãè4½`ó +O2\GÄãS¨Êk\ªmr;4»FñIrÔ}1´c @12 -:NÓÀÜR££¾ðÓo;Ó8ÌÏxÞø¾o«ï0?Tµ´èóV¶ÀÉͳ¡£>°Ó@Ê4µÃã©S$.®skaÂ-%%#4£I â(+|7\#pé[±ák8Ê2Ð2ã_º+´F©ì¬B +^, + ÞïcxÚëNãØÒBâÏâàS=IÔ ¢kux3²¸ËW°dxØ4¼Ã¤îBH'A®¸IbÉÊR¦>q¶G|ßb©aÁ¦l<ç@9#hÒ6:ùÌQR°hY }(ÜòN£-5ºAlïfOø®w(ë9òrë¡E5# +¯"o 5¨jZ£½¸çC±gá¶ó½ï¡ �ûÈ0ºÏHæÒsx¶è·Q~6çÝXíÛnjm,QÃ- ÷Mtá$½õï<Ïð¥-ìÔÝ:öÓó¯QÔµ;Ä1A¡@ËêÉ_%¾èûGuH!Pá;ß'Ì20ÓJ§|ÞÔCºÆ2×- à ¦ëNy©SKa[ETz9åA¬4hPp1_1º?t`£qwK !ÊÒ;mE2¿$âÙô#09 A vTÁ' +À6KPø5ÈrRádHàÑ#¤tß"ç\2®Äî*¦[@Á �C¦Mí<ß0ÒKÉSµnÔ¡È2º9ÔõDÈuøÁ©U!P,önÄ ¹ àbÁ( +Gl: ÜçcÆ!1Ìb$läó!àÉa0hd¥!%J®Ê rsyÊdòjdÚÍn´YX^9Û i5Ã|Ãa:Ê)2äÖ_åìH,*U +$0ÆÏèsNa±è))%áîÁÅZÅ4}_@m/< �i¼$¬èîõЮfdt5ÑìÙÇ#ñ$$`Ì29U!¤gò(>I$B(rLL"Ù®äéäVJ*)AU%ÚB¥e¨±OLÿ8±ÉfǨîlé° º29Eä!\ +V(Þ$r\0ædf|ÑëMæËGM:Ì5<9*JHi9ô2AÒÙ~h)e¦QÆÒIW`ø5¡àJC9P+5¨ 2Vl5A +X@ÊC*PÄ33â@)9®P1) +µe¨UyÈ ½MMJ +aä7ðàÔ*Â˵rPUùGdÁÎ#ÕR`#PÉb}¬4$ A Á"3OØT1~ݤqÙ·ò KÏ1®)g¶ZIhãµ¥§ (ðqQ+ÍC ºÑjècA¤8<ö±Gä弤^°J$FÈí:2 y'®O+tæªNëþP¦:KRæØûtCØ N^³O3Þ|¡H àYì ñpMëVÙâoÏÌ6ðÈX\í~x{ÉqH1í 3ØìÎÑ P.úil²Ö¬ÖÒ6³û®ÒA¿ÐPuÁÚ;y$³ëx3ZI@Jt^þJYv%uË)Q1ûô=ÙW+äî{§H3¬ïÓÕnNÆbvåÌñz³Ûï| 7^TùÓóIoÌ8óëªuK~yMøj̰n{jZ¶sjðQpYö«FõÞíÙû\Áú«%[«NÒ¬Ik ¨Må5¨®¥=Ë`ê}P3ìâÅ÷Hö)G¶{¶àiÛÙ7uå JO®gß[eè¼Wßá Ü='ÀôÕR!{½ïm`æÎàm44¶ñÄYàÜ}/´c³D³ ðîàL¡I£mð (}³a èÓK +4(lµâ°÷ñväP/ hA +òºW P§¬êÓ'ØØ³gü! [Ëh8AÕP1ÉXBw¹çVn3×¾JHA <#ôËÿ$C#}>GÝ©¨Þ»t±à( +endstream +endobj +145 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +149 0 obj +<< +/Length 2739 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3'EÒ¡* ¡AhÄmGE£qpÄi1*%£©3Fêì.l + ò1<TkAÞn:FS¼êr1E4J0*'M Ç8]jÃc®R¬ö]¶ÞD$§x±Æëw¼ 7³ÐÞr<Þ¯ì * +¦âQ|C·\k£¨ Òc»ê¯·ü°Ùa¬«É^Éí-dÒ)8«;ÆiÜuák8ºðVÆi`ôv¥"T æÆ£iéÔæe9LS1¤Ü2×8ï+È,ªú: j)'îÀ`ºc äÿðZã0¡hdÁºbÄ1Lb²ó«a¶kzãHc/c êÀÇ1ØP: (@0«òð ã0@îÉ-CT8 �+MHÂ7Hãà67ãè4®ád·"Í3\Û7¸#ÎÕÏĶ 2Hé0¿Ã Ê3ÏÃKö¼ /í:7C#(à �Ð8#à ÝyO;Ó}E-W4sÈs¥Ìê ¡ Pf±! n1ªØ`æ @ÿW@¸ " Ô£ÊM )êslElzÉ= peyÆB|3£sK8Mõ.QU²ÃQàT;áD3O«Ü;#Èæ]7^!1xzN°'L.s»&KC ò8HÕÀåWÓCO0HÎ4;÷-b4Ì#Óð7ÎYe3MÓ´ý4ÏÕNY^eÒ5y*a@äéõëVESbÙVE#Øòme°èÝE¥«;~§vÞ°Ak{ Æh1Ô:¤F÷dëRm?ß6 ã¾£OÜ@Q¢5Nr6³&l÷K-ìîç<{òúAÎRµhÞ¼éCJ¯:Eóbí{]®ìcR0ÃÕ ôÌ·ùpÌ67ùÕC£qNL!ÀQÐeèåÖ£@ôº®W:zPçk#ù9çÓEÊÜúléÛÈ²ÐÆùC9S ¡«¬Úõj4VÐ$Ï ÛZ¼?n6Ùømy-|ò7ªÃ©Î2$ÈEøtR"n}í8¼5´°ÃI.®3Zä\÷PÍTm) +¡ÕTAp51F¸Hr5ët É53ð L(¡7(AJâ×ALJ+=fDAéJZ&t&Dãà0( ̧¢àA yó$|5¦SÁq ÌÏ. è_Õ"Ë)<¥¢,DÄ#Ò$Eñ%x'¡½øh^ºÌYÑè"0f%õAq-ðܸa±\«4¬ÅÝ'W8^q1E÷3.¬u4£×ÍtÀbrJZhµàË%ä~_ıck5ªÅð,£ÈA¥ï@ÉjHöás[Ëq%ù¹D±rÐLÃáÛê5±5ÃvÁÑBÆ ÌmíÑày·7Kàs¼¹Ñ:°L ÙvGõ còاþB®Xå4 'tøäÒíFQGðA(¼¤ëLªÊµ/@N.êÂbǦA)ÝV§rSâU^ìª2 �J;a Ý+ Z¸1qP'àïMê£1ê¡VÅJ8)Já¨Rî'ÖÇMe6ª:µ9)*)à8®LKz&sØ8Z`ݤ ÞѪ§'döëf× +rÀ¤Î`ËmC·Cç"9öCêÉ? Y&P¨ùª ä*kYÀUi§DnASÊÚOîp.AWY J 1¯@ )ÜÃôvìUYCcjÍ'÷*W*'+B@G <!`oT÷ A Á" ¹Òõ'üÝ¿!`, °°Gr.|MB5wrÈw¤2û!åFòWHj¯D¨½a¾46(Íô¡ÚÆ{ó"3*(ÙXÖ²ù¬*ñÌÈ¡D¨ ÁxÎaÐïT¨aO*äw7QxXÁµ+þ0@@å-iÛÆ4¦X¨gÇpY'T¢¥ùª¥êíd(RxØDìºQÆü µ>¥hÑ(pòçB2l!¡Ò DCh¡1Aa´JM ðÎf¯ÈBôÃÎÂq$£íI +KÉÀ/ÿlté<AYY¤ PÂEXJô$°ÑÌ@±JhB³v½ÍæHÙºëêa%4Ïj-I$<¶¶=vÉ¥k,?oÑèí4Ã(vL¤û>毷.À1*Ë2ï@¥ôÀ ØÒV\ñ>¨vâAv¢QvFlÂ"ÌZæbÆV7.gß5-G¼l®0¸Ëç^Mºèl¨ë_r¨µ¼|¿C9 ÍUÚBy{a°ì°l5: ý ôoCÈ)oí^{¬Ý»>#)Ô>]qý˹èÛªìg k8Ds,}8¬QfÕ¾Úk]·¯ +Ó(Ý A£üx:=ØasÁá ðUwz/çW9÷ÊGx?êv¸ßÛÖo¤÷fim\Ûfþl²NsRô®\fø1øÎßÊx6$«yÙ^ñº;ÞwéûÀzX¾dÝðÚàt6¾3vhèí¨Rå6Ø83ÌFñkú Çyd@b³P˵£îH(<sÁ×ÉêîÊ)"ßÉ0¾nÚ鸪ëð«Eݦî¿Ï©êÍxøî|¼@rúƬÎJïò©þùü´å¶ê êð骣@@ÆÊT©Âw5 õâ|e$òÍ(Õ¤¤ÚL4?Î,ü.Fr@ÈMÀÂd´@p¤NÍx%Ы^äÏhªrîªîìï%É/¤ï°IW¤ZûPVû\½âód¥pl¥Ðpà +b¦fÚ3Ç@àØ@©ñ jnN~ð-ÊèNïPÔ]¦éO ú¸+Åò%è¦_Î]§ß +SE,ý,ô!OÜ£Ò[°ø$ÂB ª¥b ä¸@îi¿iÏ LÈJÐÈêÔÈêØÂ¬Ê¼¨jʨ©03Ê©ðÎN°«B"ëú«ë*¬Cþþã1»oó¢nÌþ+Ö¯Þ¯Ë /£ñ¯«ô$FÄ^®Nì[®Bú"K +endstream +endobj +150 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +152 0 obj +<< +/Length 3005 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP ̧eÒ¡* B¡A'¦£1pâ<7ÃÆQâ¤0ë@Tæ8Si¢dðj(7ÏB®y>)NfóÜPr1E4J0( FQÁ¤|f7bªC[`°C0ª £©0¸h(b1ãið@Ã5äã\vK.×cJK0Ôp.ÚrALòn7f¡R´±hPAÔëÖ±£aÆB£]Ùcy¤È ÷[Íìë290B 9°Þ1#`¸aH¨54-Ó5S¬Óµ*bÎã< +ûRÝ7BÎNfâÐÆ9 #è4ãs ÎH"ª+»1¶Å*¼4Ä:* |EíNÆm2ª¦I@ð cÖ5½«ãàù@p4ÑÁë +~)K"À((Zn²§ã0ê7q\Z?˨æ!4÷> àÞ0+Î4à Þ?Ð �$0 dª-tÑ52é|Ø· s9'@Ú2£xä<ÉXÂ7<áJÖÍxÝ?+ð@8<´ÈÊ9PËrágPÒ,©^ @b)STÞÚUÐe8V HÂ!r,ÉHS¤7öå_)73w*¿ì/:dªDhUùj[ój]q÷*sc#ÃYX@æPæ:Öo8ég.!jÞKó§ô8Ë$[!eZVÕÃQàÙæö Kf 8P1fÙQT|Á%ÞàR·kº³Mû\ÏU),½ì¸àÄÒ ¡¢À8²à[]QÜ)DæNÓÄõHò-#¤PwN^;Ñ)K^ tk#-ÖVunãHÙO¹U`ÇÒ¯>ëÇeãMO£_®©3KTÍ_P×Âa ÚqM"í[°ÇP6Ã5Lªlr Ê #5£^]í&±i£µJ¬¯¬KaD»ìøZlÉ3b8^DzâIøRî¼óR5òçAF>ÌNÁ°+ö¢ë>wëc¬2³Ó×pju.Åܼ¬x!¦$ÐfjßjOö8GÊùÒûéI ئvζÖéyÊÛ¶äªÜ_º{cD?øàsÎ ß,0@¨L ¹Ò'ªA¨HÈ@j Ø27EyÚ;d:Á£»9%lsU^çaã#*¥r.*¦¨ +r-±1ôDæêαPfÂ*"2D "vqX¡ðj CÌxÌZA (YjB �ã²áJÍ^5§Ì×#ê +tå9Åb¨U5 è9-+ú5`Èâ( Áir¡¯H\ÉURfLØ +3¦|Ä:XÿâH`jp%êâBbÎ)Ç9'.44¨U(Äm"ñ¼ÆÍ ÐÄ\JaELi29ò $'0¨BpC§ì$¬0è®Ì +´0*È`BHD¡0(Pà¤uÁeÄ%2|S( Ë ' +¦dÚé:ÁD@"PæÑKsm}â#c¯¥ 43hÊL¸(HbÁǶÍ@8ê©Êª 2TÅ ñ6¦ÐÂ_m¤¼ï§6'~09ÖÛÓS*m@pÒ(¥T°9/ +¶ÒQ ^àÈÅbÔVòªÌ×Ú0`£ímT^²W(jKã6V)!ú*ÅÃ,À¡4 1gÃ/ ïY-5«-Ý©[M¦¦ðpn«²² á:³»f¡ÔM³h¶Ûx$Þ\-^Rz¯ºtÉ« ÅUR$ñQðËHkdO#ozÒ:ųcWMLmª !4±¥^ÃiQ-ƨ{¯+cݾl Bûfj¼ª±ñ6Oºt°4<T¦¬»ÒÓLX5zL.½ÂÄmRt¾ÂÙ1ÅË mcL,üj 3f¹+Ʀ(n²o4{¶¶K}¡þFe9ØMíUS®E½;¦/èd»UqzÄùÎìóî³Rª§xhl.æÂö×3\W}®¾6ÆùÝKíëÙZ¦@©Ü*ß\a²æ9aêÝ[Åå°í²È¦N Ýh3uè«\oPÔïwÅaO[#[e +7rIÏqÑö%®`Ær½82Ò0¥ÝT@¸f¼¤óë2õúµB +ÓrûiIJÓÕ<ájßõnOâÙ¿Â×Ô@¹°þÄ8§ ]Ï»e¬72³í»eå§õ1²UiZ7D;äL¯l·±¤ Ð µéè46\{Yy2äýog¡ o¤ÝxVôªãfC°Þ¢¶ÚlmE@¨¡#4|«º2(:8´SVÍÎÂtÔc±¥Æ¹ó(ªÉ#3þÖZ³Cv ¦Ó~(òztëJÝ>Ò³®¡Hùß$ds¡K3&íÎË7PÔýGΧ1ªÜ!ñJÈ(|k_CI¥EÕKhæFµ?Gý1`a0Ý«&úLÓ4nOfPËgð +4 Së$+dç½Ïºi"Á;<ð8Ç åÎk×9¾¢!ðM8±Øã½a<' ßm +¡:Q*)E¬ý# +QìHi¦¦ú:Ar5§rʺ_º¶:QªB*}&õÙFòl»ë)!+¶ +R=ܦåT¬ð{ÉÂu×° Ü344ÙL¶ómYâoÚ¼å(±i¾Âñ8Ì ¥ Äi à3E*¿<àæ*úV6¾æäHd}h\5 �¦p³ª.·.`â ´+NH"¹,V¾E¶¥ä¶ðZ00à0¹º¾ªÏä»ààpÆ#p �Â*nN,&ÜzfÄ +zíbäÈßPº\ä X³ð^4¢6²åößoäÎLXc@æ ø ÎrhP0Z`L¥\ÏÐ:vÌ3$«j»¤ xüÉT¼ÊB^jº¬¾Q PêýËJ~OÚI§bàÐºé¹ æ ô *Op#% å"e,jefN æhÜì �îSlrR%¬p´¨fû¤~UìRÈ@ÃNj# *âÕPk¬R' ò/fo^¬h-æJdí®±d ¡ ¶.qgÖhf Ë`°µðu¥veTXÌ^HåÆH!!o$"~Û§¨ ¥0Àp ×ÎÅ0ÝMæi@¨ñ-'2,VpP¨R2# Ñþ§We#5!Må l¨ÝR:<ÑÈ¿kúH(²8R1w«öh£(ÈÆx[ f¶ö-2Ë"%ÖZrr|$ÞCß*õðvnåå¬èG?Àî±¾CÎWe.ÿ@Î üVÐ!K¦_²Sn@ ì¶ +@ +` + ¤öÀÚ$N.'³-¤Öz#§'$N¬Z&9 +endstream +endobj +153 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +155 0 obj +<< +/Length 2370 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3N¥BT # C Ñ<l0FâáÒbT"RÆá &f + QÞl6Îæq@)*¨Äa* b(ì² +*( ¤e9Χ#D¸\ ¤jD.ð4Gæ7é¥~|v0¸Ân¬SÈ :ļ 9NgC)´@i1Íì,q.GiÀÎÀ×p©Æ<_ +ÂIT$ÉÓ±¨äp7̦ã)Ë 0Îèiáoø&áM +R´®))³¨:ÎÀ¦*¢)iØo @Âݽ£Hæ5¿Nú¢ :@Ψë¢À&"k¾ð¼ahjAÈP2Ø0¯³ðÔzØ:C¯ãýÀP<$"s ¢!¸j 8Èr¨à×H°ûÿ0#¦º)jÁ8¾(¢,BQl8´mÜ~G£8àCÒ8Apm)Xnæ¹ñ¨\J!KÐþ=xbBÏèÓ>ï̲ŠxÈÄÞ<¾uQ> Ãa*ÈLÚXÔÕ 2ж-âƷÏÈ2ê²È"2¢%D¬%IS"Kö.àRâ²lª¼ÐJª)fLä̯°(Í4,£¨Ü1Ó£p\ +mÓxßU°@4-C(ìö òir!ÂèLB¥És¬#d7 ò$«}¶ TTmÝ ×Ö®è"êä[èFQª9F¼ªØp-9ØTÐ +avºa2][[6%¶Yhª á°\¡¬¥§ÌÙNÏ #5^²cË¢íbTfYjÂZÁ\l(7¶¶ jZÚí´Ëéø-¿³0|3]Wdï 7¨ÆÆcø6Võ@9h\ÛÊ£pÈ6,¶Ùí_V]â}|ömo"qåVpª& êâ¹äOF¢y27'úpqjzìù£¦gFvç¡@9TÃç¢(ú2ñ¤d¡©¦÷Á �\Q¾gú«þ"§øá*Õ3 ¦33°hÜbë1A¯>õ«Öidy§5´Ó0jÍég1¥NÛspZî¼É»¶¥Þ¬(g¯Ì@nf¡$x/ �Á1B¬Ú%dAKÈS-"6ÂCÚl-*ä½§¡JÙq3$ì sî/¹;¸ZÔCõjÇ!ü3plÁê^,@845pEëÁR²T0O|¯PHTEÁ@CÀÉ¢=P$ÒhC«Ü$ªÐèiÌj· @! °¤91f4Ç`v×a1xOµõ¾ø¼ ØÀ¬i it1àà»c~:½h +I p«âÄ×!"ÂkðÖîÂ},DH¨DÜ qzËÎ7ÂÞÛêísÕÇ~|\Y1F0²eLo¸m á:¹@@Ãÿ=ý9ð@b£Å±.0oﯥ5ÀÎc5 d (°`s5Þû53Á¢J¹149Æ`jO9WÙ:gE¦àC<h´ßªê[)t + ^}OÉü¯±¥8R^¤9w(§¢ï!U°ÂNÉéo)b/:Ä¥ÁE3¸ +¶jâÀD �/ØHY¡dÄå°VéÓá$èPc@h o ªý®¬:FÓ£ìoFZY%©|à¤lÓZðÕÌ-¨ÞP??M{uN²'øt4¤êDY¹Þ¨ýr¨Yª6ÚK¡rÈRâÁ´ôìª&ejªm¨v¹-0ÓBÍ w �ìÍõ¡sù+SNjO"7¿ Ö%ÂÙ@¬])ÎÆlð0( íX+Á2à§RRtÎÃ%ßÇ´õ¤@îMÒïk < AÃrDç£"|ã0ÝÅx»¥:<¥dJ 7T%oA©ýÙ»wØÔ*Á~á>«ù&¤,SQ1SƤú¯dzΦtý ¶ÖÒØ}sDL3°ÂpÆ«ûªº¸Ðl{vª]R*ôÜ·Ê1%¸Óâ¬Y~êÞ0¨o(àXìmÑ_;epPk+^5µQâ¾WæÏZ8Ó$jçÊ¡/ÌÀ 9ÝÛ¾ª3θäªàÓ¥O½à 7ÿ Z»µkukà´;ÐläøtUÕnñpѯ5öµêG1z¶kR&6Ul=ÐßV´@TBISm\Äpa¡°# RMÁ<* )$½6ZtÔ³ZkÜ´½¹W¸hí©·jÄ> ¯Ë1h-ZFÙfÀ^¢Y}Y½\¬rcí`º$ÂéÎpA¿Í&ôb÷÷|%h| Âò7·EJþqÙAÊ#jWNxB ¡|àÂNA¡Lòr +9Ï; á0"ýÔú À¨ÂHZê@´ jϺ¯Ké¡H#¤xWêuæmstÂH¡ õÂ2O{LáT(vnÑÚö mÓª÷æÂO ¸Û¦ÉÒ;báh'ðÚûw;Ea<)õ°p YGç{¨"Y%æ=pòÞ% nñÛý'¦¦CÀ¤2 Nïݦ°zÕzxTê>£ªûvÒ{R`Þ§àõi§÷ >§ãv~Òk53²ýoôW· ãÖ5÷>?ÏKÿFÄý>«øÿM`Ø}Þÿö=¯TíÿÃï}x*ÃÐê®°ëNÖâÂöà÷O¼¬ ÊOÈ +endstream +endobj +156 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +158 0 obj +<< +/Length 3039 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b6£ÂѸ¸b4áÂ4NIä"i|L"ÈdÂyL<ÌF"ªP Dò¹SE£¢tápÜp3 Öì7K%Ð_"¯7²¼ðgrÆ]¯«á&ÿFSÎ:ÒL#dïÁ Èh0Òäòn¢Ò]tÅòU!ÛÅ£QÀo±ÙoØ +hÈ\6̰lEj¸0, }.n +MÂyÈÈe9ñÔæeò¾ó7¨Ñð PN,pd%PZî+ªú¸º®úr9#è2¡ °Â6£(æ L2 ã°Ê>ÏÆ7ÐpÂ7 �¦'¢'d ¯tk Ècx²Z$8Ì4¾Q, 1£3Ë&¹Rî5©# +[+Éjï £î>ãÎôÊccà+"p¾ +apDT �³Dð/.8D#Â: 1@9xê6D¯<9 ãÌL6 )X2ÅOÂ0+ÖOµ7@F£`ß9CãUMU ÏÈÒ#(RA °È¥!E»H P"³´'CPÊ1àP.4M¥!v jÓ/MÊÀÃNFEÈõ¦þQ¡ ê¢v_z®!pjÁpçÞ¢¢LÁaîªÀÚÔhg Á¤2¨å¶×zx¡È%m"ÈBB5Áâçö4ßbKëw`^¦cÊ{Lé|Ón¼e2U|/u]"£ÞNxd¡@:½@Cãê1pðç~d(YFUÄÓf2NÏSÙ7>åUÕØàFÛàä;ÄQ]¸nY\>' +¢`QH6 Xvma¸N âyÐn¤i*¸cÍ&Bdæ"U@ä9å¸%á¤f¼àAÜæùÈjâè¾@³SÀ'F/)gòúG5 Û^~uÐ$«_Óx¦3 XkÖ¶P9anN3H! Pô´=Ú Ú6w8gwwh|×cÂP¾×â«s.°»Xkñ ÏÁäì±´eÞ2!h)î`d( +eÁõfY8sTP96eB3È`z`L5¡©Â@ +N((P7jH +bdq×| +Ü! ÄcFÌneÏ;§¤Ä]4:,áÿ0÷¶ê ñV|<àÞ¬QðÎÝj?Vhþêõ+<1-`ÚÞ +AMP/a6Q +U-¡!»§`äºBy +aP ä~2}Ðä(96eM¤*àÚ#<L*1GS +$ ò&E¤¨k°´@[,ü´:m´å& +@G- À@æ¨L%Ëæ§0C|ÃH±ÍTá +BjEd'I¹;'åtFm¦uË%TiÅ·¤ý¢ûÔ½yhÊ£9ZÇ:äl ]û;Çô½L¹(Í85r¸)'É.¿¤æh9sm â4õ÷#¤ù ÒTô@yùFSÁÏA{ Bc LZ@ ¡~¯õ:xÔÑãK´÷¢SÖ ¬n« 6 ÂÃX ©«¢§«åÔÐûq R8JP~)jÐ¥í!×àqa×u'P#äû©ü[¦´Âh3bxä-ààCa ¬ ô6E%i<Õ¾ �/FÌ,ÊÕ$[MnMóñù9ê U4_/\!ë`el¯Y®V9ŵæA»3¨°dÐkx,}²h<ô9^ÃJSCȶc\ÁÁLim JK¤®>gÖ×ÖÇ( Å)%G{dê½JöÎÝ%e'CéAapZÏ*V)É P*%H0X(µSÉ*am¿i(^¾HhQÚ%ÓqMT( 4pÑðJT*Õ3Þj¸z=¾Ù dI¸©³ñC°ÂÊhi<¬,\ë},4 ¹K %y¦µìKðÉ8"4 ¸¯ÎÁìÐB¯Å1hNoõÓ²±!á;XÝ4$1¾S 2 ÊlųIÈ2V¤>}¬r¶ ÿ³Ñ¥ÄrDH ìó*°y°LËvÔâBA&&!º»Wë c¢àÒûL¯ûvX¡ö»PZFkµxÏ7@\÷ÖåAè +ÙÕ.¦TÝOÀVzÐZ [}Cr¬©Õå4C£fZ÷¯X`fÆ`àA'ª¾o²V®:mjÅ ÓPͳ~aSìåPÙÐ&Vëw9Ue^¬VE<Ü[HiEH}*% ä µÚ'THÔ0¸Ê×~j½SXU8D¡tÖe Õlêh +'Â!·T¹êaAÙw/hm9 +¨Þá²çæw7~~¦®ã®y9ËX\0¤ä ÃE<ëé:B@ß ,ò<«aMÂ]Ãyy¡,̸lÞb04º-" źY×üä9ó¾{]¡·OÙg ägr·Õ²ËFîÊf;¤¼6òTYs¶³1mùC(*¯dìør.º£<DúÝñJ1²¬J}ßÖçW4ê¬j@(´µNÖ²ºnd¸ÕØõ+ËçøðÜ-³Âc|ñ]_EpgðP!Ý®òwç°ì?<Î$HùJNKcÐmùû°ícûÆâô �õLzïEßb@l¹F+¬Ø¯«2I¯¨~o¬in¦à/úêï¼¾K ¿ë¨²Ë:Ò)æ½e³ëBo-z´ÀÊΩäFòÜíþ +Ró Mç.ù`nè.  Æñ$äë4¢`ÊÊÌjUCÜù; 'æè&p£áø[ÀJÉ +¸*¤ùÍÔÕåöâ`)øy¥¨ç¢¨À$\*§´ çPñ:9ÆF¡Ç\·¦RqÊ2hì"¨ð£â0$b^gÈþàNë lå7Nª< +q + )É-.s + +Çþ@îÖít¬±~¶æÌmÔmÜF¦ã&éĪëún ìS£Ü UÅX¾ïƳP»àäõÑDo8ÏLT[ÈÜnÑh²¯ÊÉÏDì"¶qRé$bPýi1ºjxåÖôqràxqCîJÚ0 +²±¤MånAàÚÛd¤%GÿÀyoÎ:wåê:eû1^IñglvÒfP¬ê¶c ¬ôBrÛm¦æì`PîãábxÞÎXJ¼U¯Pír9«ã(ïT¬Íx2UÃÊ© PvÌnøÎèqø·(62¤F³ +F^`kìÔêRø1âÀÜÛ` ¤p2 Âò<Gç:aç¦bBå± ¯f@ hu§^ö'ggç§î"èò!2Ò#HðKxyå0)û0hº D*§Bxd êMf$gÄ×ÇÊ|çÒöÚm,K+ +åð£±>gêHCis\ú÷°½h +endstream +endobj +159 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +161 0 obj +<< +/Length 3125 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3Î¥BT C N'LÆäq¨xÊ:TêÊn(sºe0PSÏM3± ôe7§cAHR0Nfó¤Pr1E4:((¡ãx@Üf7 dcQÌ@-ÂFX!UQÔ\41Mf¢]«°Ç5cqÈ\4«ÖkzYRf +XFbá+x)MÆóÌÒsÁÑ4R:N-ÖuãÃl l8ÈT+Mø W'¦ßq)^¯)pPH$eB 8"@7c Â70!`@$ +B¤!À/ö:¾àR " ÔÑ4SNÔµjr'îàpÕÎû<jÓ^Þ·î +ÄN0f¼ÐÆ9 #è4ãs¢Â ΣJ"Â+$»nè@2HâHY ÐÁ'¡Ñ5LÓ£"³½ËÍ >líC0Ú +#HÐó¸´Ñ*<I³Ã¬È! áâ!7 ¾ðZ³R5Ì14hæTÁ³KKó¼Âê m>OÈ\ÓJ¬³}5ÀP$ ²ô4éÌPðhâ5È©]¤íûv7´P8#Â6Ñp@çÒµ#Àì 4¹XàPZ¬rË£ap¤Ú `«ÚÔ6ã ê6X´¨Â:\w OÎ#-Y-X³¬À V; ìÿ^óÊ4N¥ÍNóËMeÍ«YgÍT±m[håotâv§ÃD2`>O>Y¸Ê2@@:¹ÃpÏ V(5g1 µµÝx8u* +KÊ#R#&C + ¥Ó"Ù-3¸«]øÛ0eUú´ ÚÁCÈp](ûJDMsU¶Rxb¤RxcÊû,u*®´d)j3Æü;Q´ÆIÁ¨se¢ñm£5#5;jX¤Æ,fW]Í|ß ì7YÍb³ÜûÙÊef¸ê1°#çBPÓ3c§/ßT¼Ûz¸f oÚMR½aô°ì0®"ÂV¬nxSw0îMߨ«ãhÂ<é+"zÁTríbpÁP}¦í¸"\ Û¡_!54ÅÒIf½N UY^·¥RFü`H +ò¬UüÀ`¢Ü_Éü>@ÒÃrÜ ÁÑV:~ß3SCÀÅvPhSZÛsnNÕ764äÙAL@dÄß,çhÝ0cQup¶Þ;Éykýç=, -áÈ7·¶ÎhÜÛD&µN¨6YkQÅ·WÙÊPåÐ}͹Ӳyà¸×XNH,: !ÓMaO¨Õ"- ÍÒ/ÈáTl^ly@´ø%F[TpeX(é+'\¤rK"òDE$3p©°æÄî"{ºCÆ$òF 7lʨtz,ÉÃàXMEöEujbæ*UEqàÊs2ÐéF ;Éæþkå +# ØÕD q&ó=I^YÎQÌ9Òñ";ÄÇ0A;HIáfT>á4"àª'<égØü£øÁ\À ÏØR82 ÄoÈ~8Fá\a[Ô*U +\7<Èé#æòæbIzHQ² "!·7²¥*¥r¾ÄKþn¶8Æà$ËÓ 2N ÜSQõevµØËu!~$¸è âÃxQ!²º N0P¿ó ¶'[AÈ1;8ØULNláÛf´$»v0¥â2õ¶·Yàz«Ü¬U6¾ Ø38e Î#a ½ ÃZ°ñ +OÊÁ ûívàBðÉõÆf+x9 *L;ÒÃ@ ²vUªg(¸( øe/HµäS=©¾7ôÔ]µc ]i¿8`¤]7e ¬]x~æY»×ü¯´Æ÷Ò{Þ +L¥Ì;Ýûª°AÉ|ÉhaZÎ0ÞW'Æo$3<0åz¶yí*<Ò¬ðn¸è+1+F«°ÈU £=Û<z`åqà ~ÎuÜ6 /B¤úÆp"Ãd¤3TRáÑ4æ +Áï nR-=êæ¥¸ö¶Ì¦º¬£e2fJËøkeŽªóõÍà£1ë=FÄuLÓz;k0Ò¢áÞ ÁaÈ+ %òJ Î Ù®¿Hÿ-åJõs2ÛX7p[HgyÍç³[=8hÜá¿tç0æàlÌ1°n^wö²,ÁÍFg<¬OrÍj´tø\ -Ê:6²KÊ5kVÒÁ-(R«Ö(M!,"¨(S áU ìà¦ui+4&ÁLÛF\+>hÜ!W¦þ«eߣA@B¡z1ÌC«ÏGí;6lZCp =·/¾ûHÇÌý»Å®¼æobµ8i÷Ø +¦c`y®Õâ(_dÆw.ÕúÙ=3\B}ÁõenÆmb wñdÞ¥à@!;,X½ÌåÔ1D@ÕÝn7p,8(/(7àÒ»ÏÂ*wÐÌíʰiS¹õËù>pèí¿e¥Fw:óÝR+µýì¨Ub{2AçóMÊ +@å!?^óÎd«l[5 ʽ(ÑEC£i'£mRñÅý5]kCïXîûI6à⿯T«\©Mu¥}Ö½¹ºúTuq©¿-¼XÀyôg[èÌúÈÒÐ/gIg®nz¬PQf²mJêÖ/\}" vN ÊDþ/l\*]¢D&/òã§ÇTì¯ú ÞÃÒÆH<&4»NZÏþG¦ �ù +#l^ê@ùÊ,%j¢©Þ±J.«ij¼# +ÊÿHE%fúø°Pål}DX¬; êÊ¢ dihébÈ6nÑê´"깺)nªDG.à îäþd,A@¦ö±¯Gv¨oð5©®*B#è= ä¨+«,0è,¥\¥úbü®Âü/«8 "v`PHK8ü-k/ìà Ú1&v@bc è2ÆÞ3C8C<4䯸Ðpj! l6ÇK +FEÚ8°ê¢9£« I1°º h2<N<ó ¤L¥ +èîdÈÃ6Cì¼D +õòi 6):P&åh¡ñGdzqÀûQÄ£*ºIϦFÌPjÐáJ*ý06¤×É×`Ó èöïêb¨;(¬ÙPEËJxB¾ÿ¼hf°K¬²Å³ �8z°Xo&à Ðà,`ªØb¥F+iÈ-Î"¤Qüép4Ëz¶Nõ&íïÀ@Ü-½( ÏôÕìúÃ'ÀÄ±Æ f|MèÚ¼F%"é ë¥ Ä/ªRÅ$ì$l(hKFÖ`©+´º"!-¬Y¬nïk;ïÈ~ Êgð%]/¯;0Ó2èþò¸8f:öF8®QÜ + + ³ 8@ .Òc¥Ú,OvWoÃ!¢|îúÒ í +ܬ~iI6SBvÿ<¢|r¶¢ªj²è@^3DãD<³838³9 -)þ,.ÚóÖn³´D(|HÀ +endstream +endobj +162 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +164 0 obj +<< +/Length 2492 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´c$Ѹ¸b4Y (PB2ç#(âu4qX 0®°Òc0ÚÍ÷# Þu6Sèh²¦ãêä)*©a* RñÒ)×SÐäo<L¦ã©pP\ä2PR5*UéFZ0Ô¡spTä@t7ÖK-Äò 6êð å\Q¼õ)ÃAAÉÚëçOpÂs9ÌfÉ)¢ÑÁCÌe½¦ðºè î´ #aÈd)ʰp¥·ÏÓ*+©CîøÜ2 ã¸@;=;ê2,*¶è"ªé#ð%è¦2SX×6hÛ)R6ú(Q[~ऱLcFÈ2<Ë ª^Ï"h3Áª¤°rªÀ*]*ipa°jn¨b!@¥£Ü9¾ +3'3²$ÏÏAB3¡ xf¸r3CË,Ê2Ñ+2ãA/Áïè7#$d:0¸Ò²1±£cÆñ$r*ÁÌÃAÏäÆå1lhÒ½Hæc¨Æ1´6-ëH@²æ¸'ð(a)4.# ØÃ9,:Ê6T#Üè:ApAI¼¯Î¯ ÉʪMúµPH5ÃSÕ#%V2Õ}^Ù©50u¢:©0Tü¸5ÔYH«Ò-}`XAÄòX¶=eÙ¯%¡iXbpª& Ea%`Òn*3ò_*ÊòÈkÌ´;ôL22LÈäÕ6(äÓS£ã;å Tû(ÏÈ?Ð!¶r*$Ômrö2åX %ÓR ÏìÁ¬Kc³ÚÄ¿.çÉÌË3º`m;ÐÍã3ªî«#Ò]ºeã§Ïüê¯Ø]AçX®ëû'²G!U´$¨fðk-Iü¨aѰl:¡< àj\6¨P ãÃbyÂKÊÇ¥NÀPRÂ9* +¬µMj, Ì 7¦í:Óµí¡¯@îZÖè®õÍÈc½òñ ÄÖ<_¨Oº¤«2ô÷ÊRH!!P¥w!m¼ÒMpH !8) @ *×U&¸¬ÞC¡H@°Ê aKl'¢lÚsaî¶fÚ«Ð*¨Õ>tÆMÈ2}90äC~ûwðãÓj*M°?óVOèT]L= ÛQZ¹rð$2Bhð Réá:Fx½ �*U\K½p± ãÂ¥¶°CqÈ\´±õ²³ÓrîØ/!ã¿wiJÈ à{ô¤<û6PZkNFżl.-¶%à¦Û¯Vò¨6 èem5Ñé +á.)ìö;ðàw¡r0p«aé8 êRkHÀÈ`2Ø<½ÌÙ5Pùd=)Åd.h´¥Y´èå6( +@rñ°ËNÃ^, ²eCblù $9ðNtld0 äÑSX`-£A´¶Óib9mDØ[< ÓFmMÄ>d,r9£iÙs©{ÐÝð@hTI{þk,í¾nSINMiµ7%Í«MqV(9<Ú)Pê%EÐÅ �udA'T¼ó3Î7Ï·×f WP%5]%Ú÷¡hE@Ñ3UâFWåÉÉ"àµÖÌ[´ÞÈIOW:1u±ÞìW\Â+½L£Ô¡¦ÁF&|í+ÍáξÅÈØ¬ÈQ¹ËÅìdZlSæX¼a«2u5OvãRÒ}MU&ÑCÄ]Õf&§º¸EâAVÚ窸×s`OrÔ;TyP©M͸ÔèÛc} íýÀ¸0PáM]m«È?wx*ñ@¼¡ Ý +ïkã"oaÉd[VÅPJN ѺR=\¤Vuoúû`nì]AgsɰZº/îë +Z'ñÈ#ÊK ÌgBôQûÔ¯Yì �Ìý2W×uÛî~Êí8¥5VÚÄa?¶×þåÂ@G <!14 ÿÁ'`¼ :ðRk]¤áBÞ¸O +A,e;,0½w"öä¶as9ÀtðöúÝ7Í$F*ÑÝÌ¿®ûSÁ É àÕAjtï+[ÚXi¬qrÖ¿8cU¶i¦ä÷`«#?J=`RADx±gQÙ@zjÃ.ÌÅÒò×µHz\{mu~äÚ4îkN¬è² p`¤3Æ|ÖÖ4ºI^åî uù°b¡«²¡Kí^ÄPù£F§q@Ðà oj¥=¬AºîÞÖ¼¶°u,³mKmlA=lö<)ÁÇáª9òú_Ì Å1SWJË%&âíbíJ·Ô\ÀÎ ñ{uoF-_á]ؼA°Öê²/oÒ>lºVåixr±á¾oéeLLT¸Yvyrvª3ªÌnȹçUYOî½ÎXO«#]¼v&Æë@¯I +¬´æ´[\PθÖr7¡çÖ³T¢Îc6r·ØòK0½Ý& U¢®íÕ %ÎâÑZ;ëß0?*2¼îg±9ÞÈBj$9>^Wͧ{qUo9a¾7àæà þÀºZJµÞ=öc;µ|'/Ô¿UÒ, +®Ô«|&=¿«½»N¿"ºC×Zh ¶`QÖ �ÂÈ) Ȳyìlì¦hõ®ì¤ú\V®2 fË'Þ çâ~mJ÷À«¬ÆPínj£ A Û`5È@@¨Ø~ ô4`ì`¦4ÀY @@P£ +Æ@Ø m$V. +endstream +endobj +165 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +168 0 obj +<< +/Length 3147 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tâª8§tÁÀPD2Ìg#IÀèi7 4:,#¤ÃAQhC « a¨Ü"»-&68 ¨h2%CULÂðQ±ÀÎ'"M,ÔÒl2ÍæÓiB. +ÞvýÑAâá Ó +TÔ×åÃÖo>3MÆ;½ä@c¼§#¡Ì@tÌJÍ=£pÈe;LfQoÌi7z¾^Á¸èr7?¿ÀÎ> Þï¼#à8?@Ò0ÊÖ·¿PxPó½/Zö¢ já �!Âä¬f%ªÓACêû¿! ãÖëï8æ!ozÏ4 +A¬VÔ2Õæ=.°Æ)¾ìÓ8Ï8 +P ËkN Åc2qp8#Â6°hå>Ãàï)Øj|í»éØh ô}< ³Û®4M£©@? ÜÿÂøÐõ ÔGcÊ1/zãM9CÀ2ÃkìFĪ|FD±<;ÉÓ4RÅnrË6ck¤õAÃË=LÌfü?OÌ7Cm¼ÈHèýxêØFÉÚ{T'ðÜ7Á£$ @ÍfÜxÍr¿oí'jZÖÀÅmâ{vs{20»Õ=R +STÈít\öu§u]Û¡xÚ#uÄð\K¼:ÂWà ¢'ac¿ÂC ê8]&0¿Mi_vxÜïBÓë¹RB È'¹àP§aÊ}<Àê3øÉµÊÈÆF Ø]!«ñ6´³$ɵl¼-¯Ò+4r¨9k(¨Æ! Þ¸K¬hâj|®²Ù7NöÏ¡R0ÁlQ´ßo¼°I2_"Ö{+ÎÙ¿µKÁÃ$îN´r¼w1%u2o=!û?ÎpÙ*Ø¡dûYñÇtêê£2ܶÍÀSõ2µªJr úª¢¬)á²2«¤&¤ç¬ó +×\!@¥8ù=ù.rÌ¢¨Ä¡³â`ÊòNjÂJëTîM"8ÖÖ88î¨Öób¯^i¹7n-¾#q +s¹Z¸S t¢Â@x9¼sÖÃÑ ùÊ7èíôÕ8rìh2ÂŧßiÞUî-é¥ç²õÈIM{OL Nkþ*o]¾PhùÍ0(¡Èü æÓkk~fû\b +ÀÇE#"ìÁ@N/!è9G¤üR9SªÄÈZ_ Ê)Ų`lZ¬X-ÁüBZúÃ1kPgl22ãdx0qú ßÄiîH7Ó0(eÁÑØ$oE4dNÀ@i¤ õJÃb©µ +lÎ}! =CZôí ÎiM Ë5LÖse÷ @ÀP2!ò4Ï(/UÂ",!å@ÌÀQ3ÒÊ<½ik¥»Û)àзòÅ*fÄ=¢"5p[y[éII+&ȼòøôcàÒ´ndѪ |&Xr¡ +k£³sKpu ¬É*°v× +_l-ÅÒéWLé7>ÀÓ³gOAM?2j#Ðxõe)Å@¢"áhiE¼¸2ê|èôoÔÊÎB¡Z´¡Z6C*Ù #iÉzøÀÑȦ5"uÊø)& .`6öÑÚ1Ñ:gÌÍ*XYÂ¥gaj|Ãí=õÝ-ðÜ©ªíAí;c¶OÞj17(ðäÓ)*yX"g"JÉMJ73{a +!ÎHå*i°(p ::YT eØÕÖJkòMGÔN»TA³jõ3cÍhÏZãZj0ï Ë%OÚq3S´â �Å͹ÙS ÌGW´Ò©a¨ûÛÁ6,´TÒsÁÜ>i¼IH`°6XTAêOEqÉoÕ±iÆWá×Òr»JuOªÒ¨înT¶q_Yëܱ/ZweÝ/0Z¸Sì"µ_0¾DF7< ɹÞÉ%@eÃÃeÏ(vfÔÌޣîKÑÅäDöÞàÁ@OSÁºVØg£GÓůèÆ:¡Ùì-Ú¯l +åAÊìqnÂE,«ád˰ѴÃcGb 5¥¦ ͺaÔî®Ì©{l¦X391P*%ÄÍûCêM&Û¡íþ³8Þ§ã&±æ>±yL"nÇï,ؼðôý±Íõ¸i<Ïo°¹i %ªÀ3îÅCÇp[5múAlñÛA¶Í"µñƦ¯j]«±ÚaÛN&z¿pݲÎÞvnC¬V{]×b]L¬æ 'ÊYLB8\û!eØû'qÙ2ãMÛp{EI]±ÓkÒ0c �0ÝÈxOfc1×4sí볫`ß3; ë/-µèí®ëcÇî-Z@iÄXpN+Æ¿ÊÝ å6«BËÍTtîù-·z²pO5Nª`¿96æÎÉ1ø ¨ì÷`@na.LbÜÈÝî?4uÙ]øCQI¢Û6 DjÞ^aºÐ9#k±.B¢uzVäºXnÒ¥ú6ÊUµX*¸Hz»ùQU$1aô¾¸`û¶\aKÕ®OFZÝk«ÒTÀóǵÊݰgÝØ?}`ÁKß[½¾L.(RZæLlðô øåÈh?¢î`DF@HNlà +- bD.(ÚLl§LpÎKͲÇìÒpª¼±Î0ÎdâP@Nà@bÔ8`jò,W@P>ë«Þð¯¨,(¨n¬ÁÈ<ýÈù/Þæî" çcVÕ ÚÕ`ÖÕ§àqÍ`þ\ Æð eÙ �` Æ<°Ìùbª**úB0ÄÇÀ®°¬ � îl£ïȤjÞ#®ác*@ÜÈôú®#pÉû)êÆÞÉ EêyI-à ÆÈ©BëHØ«©RçW°¬ù¨Ö'°$ip0 �W ÍI¶-ÐÐÑq¢iÌ©ÞÐæ!ÜkâLÌn^Ê çî{ò¡B1L)ê½(«e`¬j2£m÷ÂúüGåJØ~ñ-æL(ÚåT*\N®~§@Ú ì§Ê·7#V¥Ñtçà + +`¨ +@@J$¦nÅ"dÀª +@´à À¢Ïù%RY%ËN íy&`ÊÏ,ªqÙ0ðªñà"úª`ì,Ñð-J,-ªÈ.Bè.Å'oÌ+-'úliRÔ.þ*úÎÃW!Ñ¡âU®ü%¦Ü,N×(Dqì#ÂðO>/#¼ØD ØÏ^ÅÒÄoìLø;Dbᤫc¨2êè¨s^ÍBp cüܧ¾EËhÏÌê« �2h3+² Ú.ÀòZ%ÖbßËjNDñ3£ø5åîÃ5TY'ÈTä%3x¥¦¾ÅÎðË4HO/K>¹/ØFj +Sθ¶RîÍæA6óeÈåù.ÖG+V\EÎ]åú¸òcMö:Æ*\G=cÇ3b×SÏpDq´M³¡OB¾óÁ?£-Ñ^ãäð8Ú32&áÐDmºB +endstream +endobj +169 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +171 0 obj +<< +/Length 3654 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AhÆ6I£qpÄi2*&³@PÂ^3M äa6NSÒs QÊv4èi3^L7óy¸@v0·Kãs¦ã)*¨äa* £u $¢´ +ÎSqÞm6ÁNc5#Raz¬pi éëÃÞ7ND+QÔän¸MÆKuöÿ2Ü.WKµâô gEÓ§1'1M +øqÑ6ª8¥p¥üI×ñá +\ +¸ +Ü3¨Kv!t 4ÊÚÆÕ5s`Ù6Ú)`Sz7è¤$®¥áH±9)û$Ê2Ërà:Á é �^6²lî¯#(\ ÃOs7³è d¥íl¬¬c`à9B"î1c å71@ÑÐKBR¸áËî:p !Êȳ-RÙ&°£ Â4º µÍòÓà£hhúÄ!ñ ®¢þÏ´vä'#¢x õZ& èØ6´ ÛF0pHA6T`ÎãBò4:c®4»,| 'Ê#4°«ªï*&½ª,¶ÏCàPgÔÎ4î Óu«Á¨`àL,"*OsóP6S¹n«Á°kF÷%Í9%×UØáToSÏëÁØ4±4CafÙö"9 AV©¡QJÛT¼ÀÍ8û¿0aR` *^Öäc¤ Çr³,ÝÎÐ]7\ÆýB5àÿ,w QàÀkf÷ü»¥gÓºQáB Y£f%( Ò ÃbøÈSç4¸\(ôFõ,±Ã+¦§Ä!Àmq_£pÄ$Âż,_§£p|í¶å*δһMÜ|oÁß8a~]µ÷=Ba²TåÀYSI8er£l¶õA@Þ3a}XÄ<nÓ æ/CJð7Wãÿ:TBýE°Ôe&½k§gåÚÖÅ,^ñfÞAñvßÜã§ úªdϵ=Ͼy¢ô9ÊðÊßHPeù#8Ü7¹£ ´ØZ3.fyêHUAi¯y°¢ÛOÛBBæÑ²p[Üòmk½ !VXÜ\Ûi-Õo³öT¦Ú¨oA<:FüL[N[¦ô«3gN1+(WôÌã2N`¸/¨\¼áÒè9;¹¤òÁQÊït¿:E¬k¯cnÑÛ»sVáÌ9µð@ð¡ÃÄ0É9ã¨ÀX[Z)®g ÌÃyáuoEl÷©"ÀÙ:Ä÷ºäÞúÝ| Ùñ¾U:§×j¢s uö@àÏܸ?öÿKs´I!(èü<¦Ê8äcÁÌâHAV ÀÙT,pq Áðq"ʳ'pÐý=¦`èãµ<hi0òC(mîÅ+Ö"ìRsk«9 »ÂécÑSÅcÃo¡bÜOÎÔjÐ65bÆ1óÂyO@@èf.$9 æCaA(.$@Ô%ßA©IH¨Ø3kJ3FHªV (Ê,6NVÿÝ©a±ØEz8d ë%ýZDeË-q¯1j¬]r<7Tv + ÈRHCæræeàd4 ¸¡ÕÆ jOE~^Ò}0À8éþV¬æ°#ºL¨lQ)3¾þé1!¤=+¤ �µ,X T +CP°VÅFLU§ÑT@}õ<\ãò83§M ×Êüc +°¡Ý]ØÕ|Ò*/.[äD$OL±J8ÔQkqDÐIFíB;BæDÉV¿JaÅ#be6É3!atMFúc5\¢fN6*eØd¦¶üèÊÏ*-ÊZlïey2û'MEk××Hý¶ødÞÛëûÓK¥âBgy©òx0ÃIXn!H` á5ðæ>ª´Ø¢Ô¯x +(QnOñ]bôm°²¶Ùagè7yº"`ä±%êm¥äH¾ÈØ5,$<EÞW ÉÅ+Ô óðPiÏ="_cEH$11MMócS,a%Ú\Ò\Apµl4(åÛǰï LO{ìöT¡÷3$0t9Ðçcb Å<¶,ô®ÎØrå¾Êã˪õl©¡gÓKfZ'¤p¶¦i{ªæ (r±í!\.fm7(MëäimͲÇçCõ!ÙÔÊËT¼ó«KÜå«+ kõλAÞÜîíY¥vÃØ¥Ò¤:ü´A²âÝÌY}>x5$ÿ@©¢soOùÈc(r8Z«û xh Ïܨ¦$hUÑ%DÆ£\2ÚccÎªÝæxë×öÆõÈ ÁvIFYäoüļc¨íîeaÆD<«Ù§3¶P¾@án"Ý7¸4î4÷ ^Dyæ+×½°¦uàd6ÝjÛ¨þó-a¶ÏQÁºå¼ôdUo×o¡r'øÁÒÆmÞÒìþØúdÙ9 !/ HDÈABY<¤¼¾1²ÚdéýA\*¤ÿäü¨A +¡)¨Ià7¹ Xu: µÊßQD=Ud>·¶îTyä¼ B>Ü)µîh8\KÞ@æjÃ^éîãï[ÉZ£='«Rß2N|ðQì EÞÈ&3²¯ÝZV(6\(PÌ,QÌyNO=ïØú � +@ +ðû:2Ô@Èì~jzQÃ Ø Ä¦~d`ÖWN :LæÅ¤²ýo\ý¬àýï( +@²'ä#Oôîîð:10NW'ʳ à Àl#¯ôóâá¤5P?lTG¯a +а<#¬°º·éZ1# Èï¤h>otíihPÚGRêFÆ`fnÉî$V£ÌFFJÞ¼Ü^pÇæ®Éú:va@Ũ§MN.,:eôov±Ä¯´ÃRì¬^ÑÀD"bìH_Älxm¼.Àm¬©6'>OìªtãÐÖØ íÚï-àÖJ>#z`ì£~?íæÖdöqPx+&Zç@Ëí@@ ,.ª°ðÓ +àßT÷Ðá ÙpêcpîNfl¼Ì @Ì®$# +DNdͬnã`n].<>M*(جðÃÂP-X}îJæåb&Ð.Ðå6D¾7Òæ-K®» ÊÓI!c@æ2>!,ÎL r+Â<âä'!$z8ªir ÐD¤Ttàf ddâ²F&Ç .>>¥òÝÂÐf C7&A fáòâ"è`ã¿'Ì⬢«!¦< +`òdÎ-ò7A#ÄlårD!-ræù¨®³À à A(²ë Ò¤02¬0£dR`@ ÇZEDÔÈî ® À � +åz-s0:àó5ÃÊÇ1r#hqô rØÌ2 Bm 'rèF I.äBRôÔ`ÆW à2Óäâ/&så¥6GB6$rOk< aM#,s)s,6jt6 Ò\gHVÚÓÎjKà*N®"Z$àΧtûÒXhÓÖ ^ß2¦4ãÇdÑ£ÎfåB ® ¾z + ¨ (þ=ÒÂñPRÈöDHZÈqD*æ5 +$-d¸# ì 0ϧ@î~$5Æfl·Y4 �~ÿèd28pÎÅ Æ+϶pî¯Ó'ë@µ[T¹gRÆ&è_&ÑI´£näëÊÚiê±ÔÀ!dzìÎê ÔµDÍ<¬dçÎÜ¢¬¾Dþô½@f¶¯ÜR$Ûó2¨£.rÝTFY)@þugSSTl§2arðD¯SóÉMG8jå=<=3XÆu?ñ<ïÝpõ¯e =$ðèµÁQ§µ Éü2R¸ T¯òcòX LD çS AB´.Zô2 ô7C¬¨XÕWSM¥Sâä~u?JESõáSQSUªUYb¼SÆG + Û?£=Rhg[Õ:ªS@Æ9Ã5õ?ZuÖa[Ji+0ÍM±Ód· Ë=àÌ4i¤QT÷^F@=çÂÆrHÕEdÄýϾ¯Â;à¥yèÊãÔ<¬óf-c@Rÿ6U[$L§oF¢+w> N Üjñt@nûÃYa;r±+B +endstream +endobj +172 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +174 0 obj +<< +/Length 2991 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT # C Ñ<l0 ÅäĨDLÁC pÈi§Ó)Ìæa3DCAè 7Î1¦Ëk4Z'°Òc·Mæëźñj4[yÄêeÇ '1ÈÊa2mfñÕÌ6@v02&ý-³& FBäa²§- 3g¯ØìéÍîÈQl2htZØSRk É¥ò<M'Ê1dAd³Z1CÝo:NÆ¢ê|à¸ëËÙìHÈ7ðP4²æº£$13NR£Á¤¡ PdÁ¨n¤î¬+⢴ ¸Ý " Õ)\:ÊzG¥®¸f%¡l;àPP3 íà'â(¬" A$X¾* +B)¢H©Æn f.2Lʺ»)¢Â.0zþÀ°rÜ6!tÀ9ñ59±R[+À+¯, Rã+XÒ² ìd¦1c¨äÊ3ÒC,Ó Ã¨ÚÏ7c:<·L¤.´$ĴгCHLljàj "[§8B¸ä4·Bräº3Ú +#FªPÇ!´+apeBÈ©À@Ú¶íËv6ËSêû¸E\¥aµ¤&.|ÊéH)ªJÂ!¢LØ8Ã0Ø´_ û)E¶oªß̵`@@ñ<3Ðõ=sà³,é4M#$ÂQ¸åpÀWçzÉ÷*SZ\ìH`*Ë +q}_#ã`N&`ö+_ùÄ~¿»4;Ñ-0æ4KUE R#£Æ±ì_}KKx¶,&Ô5Zs[9pÅc ¢6ÙõÔ{eµàÆ +:«FíQuM16Ww;Ir7Û ÀÊÝM©o>ÏYW0fP¶OÅcpŹ«!»Ì*>õÙ¢cÍe®°c?æI÷m7à2uJï dÈ|ý\ЮV«pª ©Ø¬MO.õA)§ièÍè§Ð¥JÂà{(ÙY»m #[¬=7Vjf¦1Ý3éò!hf¢ +ÿv:gZa¿ÆNù©5m×»7¶ÍyÃ4Ì0òsÒzÏiï,¬Pù ¥¾ÀÍñÇ?Çô´ï ÊEè!*sîîBÁí+6å + �8Gm¹ü²´ÌxXÍðÎøJ þÑZ"`Y'%¤Á á=OQ¢2%è½+DN*¤À3h#aJuOµDõ»è@MEõ¾Ó"C >¦P:ÅØ{&e©?°` Ù93Á²0§Xm4ð2²ä^à7OyHàp] h_e·Ð@Eì¾§8Üa!Zß$3©Å]ci0øÄ"ùm/1¾Ò¿¦¤øÐ ¬© Ú n¨FBÃ<º¿é¯ÇÒÔ~©êb;ÐÑ.+äLÏà¹Há_;«1"V]Ùi8¤l^A@RqjX76M¡"JæåÌ HB"+*OçuÓjFH3PÜå»Ì:©H'IC`,KV4ó,(b4AÊаäa$Cb À§Mf4m.æ¡0¤$¤"àéc#l HR} ý]ÓM*I-ð9!Fra¼6@Ê©Ql1cH¶\Ë"¡9[÷o6aGåÈ×gÁjó]ÊÅY©-'¥*²Ð\VµLM³`*XÄw¹Ií<ÕͧâSðrw§ñÖ R¨eA(¡È9$VC§!ÄB[E ¢bÊé(XSjv:YÝpÙnÐÝ¢¿k +ø4YÈæØ#Ði( hÜáoK0-¡OL¦@Pnϰc,´>àÃú+w(¨7¢÷*åâDIzEp1@ö#hî¼ðsÔ¦5¤OÎåäÁýÂú/·AÌ1zAI³vøxìMmQgïÀPX3Óò~ÃH)½Æ RõÊ~d@ÕþWA ¢-*ʵWrÕ^WkÈåå÷¢Ú£c{A@S%Ä84»~ Ö:ÉC·þ\|rm][D+º"|:`O Á\H^Ã-k ¡´#cÉnY÷ª¶VàìqIo:3GL ¸ +AÞË(w-Ú½j×5\±6a»e/T¢ZY¢·bE~%½üÎWàíí[Âôu·¼HrãäýÖryh]¸0ßEiË%§FÂìðq#ᬯ¿åÞlÊGÓ©ÕgÚãA6nñ;wrc¶LtêC±-Rxf¬Pe¡+#J&z¸-Â6FªÌÎÙíÄ'×ý«¤6ÔíÛ2óÑ7¾ÿó±§´âË&ÄázʬÁÕìû ÜtÞÒÛnì,Àgk÷ +x·.+îhmS{IÂybi¸±gÕ pNÓQ4Ü+Y Ö¸p)ðE×;ÆHÛ ØNÞ(AØ9îià¨s¦ôn×È·îaÖ1eýtªÈî¹p áô§} Ô¦ØËW\>Ü7Åu÷« f !6ªe)~ÞíÒ¥É{3ÜYýZ£UVAß½÷[ÂL +A,ÐAC5õùÓmâ}àR@2àÂ\d5 ´Ð?JÃHg Ƨ°ÊìN=ÈR +AP)ûàl¿Á N|S.¥Í7ã +,nã¼>o²ëë´¿´ûʪ>¯bì 'dF#føC(øn¡àð$ª<Å®¬NU v ê±Ë¬ÈV\G´*d;¯Rä v/Øl#*k¢Ò2Ì·©4 ô·Ê¬$^¡Ë +Ê ¯. b8!P®<ÀeP~$pº f8ºB@æ3꺢ª#ª´«²< + +¾ª¶ìu 7Ð&å£MÐ1$¤°JÆéªËD7D%¢òdÐÝGî]uPi/Ú6àÝ/ÛðÀªV¥°kßÑM £,väL+î¦âà1K9¿°Å0õª÷ Ôì°àâê¶ãkh¡ ¨â®IÂv"D?qBÊqo~>å¶ê+ô2O étå®éh¥mìñ(°ßq0±Qkbâò®ô0 +7i¬¬ÂéM+lw[2 ªë +n1 ©Ïi.N¤[ «Ý¯ÚOKèù èùï¢1/¦ú òÿ¯²û`Øû¢ûìÒÈÏä÷âգ#$ÏâüèþÂÊòÿo'&Oÿ&°ev1¬ �y/4N®*P[ L4«*Rà¢Ú6êP[k83«=pSè¢í n#,¿@ÒÀÉ"ë.ò/N #Ì*÷Ç0¾Ò´22¹+Àé,ÄirÈÒÎ2Ò¯`A1RÜéâ7æ3Ãí.Ñëò3/jó/ Ë/êtXÌ +endstream +endobj +175 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +177 0 obj +<< +/Length 2625 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +ëbáò3 +FS¡Ôän9h´x)IK¢Ñ*A!ª#z¥~Â-±»8 f Qên1 &ópæu1̧3xØ,ÌæÄ+¥ÛJv0¹ÃIÌ@z2âá?5Á;ïL»8qºÞo½öhÃ¥àp ¡ªF¥Bð5A F'òTjâêÈl9Õ»Ëe³ÚmcKpÆà£9/+Û¾¿¼Hr¼©"°[Å=Á¸nģϪIJi Í Êí»®û¦OL©ï*¬¬$°j-$,È£ò-OjþaP!¸M`Z¹Ëph8#+@Õ¯J4Á,ó°ðr>o/ä7Ðû¸ï/±ÆJHappÁƤ¯°i/-Àn¶ ³R`ÁLÔ pP:c@7´FÀÀPJÊ8¨Á`¡«ü¡¬hChÁRDRIM1KÕEskÛ.<±²q=M¡y +cÈÜ7{&¯4¨ÃAïPoEU `üCc ò8£ ÊÌc äÔÈÂ3bx)¨s 6I> Ð">ÐÊÍ BȨ"´Ã ºaÝÔ +0ÈK°Ð +¢Hsc7 +-Þà2PÊá¸xAã¨é¸¼ÈÝr§ÞH]é²V> Çr4À%wn«åÈ&ÉFL¨Ò7[¢3uDÑchÚ.=º'£n"£³a©HÉ7bàSLµSÇWDñ3ÖödëF¸Sõ6UØQ¬cä4 IbgrÂÊÌJ¢¡«äú,,`¯Æâ£6§Á ©Û2Mê©ãpÞDQTflX DWóh8?<,an ¦óË:Ï´-J3ilÛ|ÜøÐ0CBà·Ã36(ÒãM9m:ãÚÞØM @7§ÀP9|)ûhÕ #¶3vÝûìÃk}MW.ÂaÛ Áp¼Ï±jwm¯$£DJÕ<½g,Æ3g(®TJ ^ì-ª5eÖ³ª/ÎiJÀrG ÃBqÍ �!´ºZ»Y6Ü4Æé¾?¯ÚxàcO¥Äæ¹x"B 2UÐ¡ØºÖ ni®ÔÁGÜR50~!X̹'.ìÐ7àÜÖÖ³H 0!&)P 2^ú ø|¿Ýð ~ùëøg¤Z§ÉÈEþ1(¹ÏA$[^l:ûT)vPh³>M»?À¢¼h²mF8Àx¥<Ñ÷WàoLÌDðJBzOä`ËÀãnß¼R>LýþGÈ«áx( ïÈÙIx QÓú«ÖPKÉG)a$¨qú ùká«Õd7ÃdöÃÛ5&bÌwðfÕ9³\èüg;Ò}A¹öPZ4LØdD ¤ÂEXTÛCk$ÐÉÆÞs-ð¸2ê]Ð*N/²uáP3uf¸ØþKÓT/'3UAK¸,Ìôm3 Ó¨kÚÝ6¼¼ópæ¤äÊF'Â@e+DU}ªÃC©¤%pyÅh×=å¼¹ +ýnx IùÏkÌ~Bé¤SYÁð?ÆO¹? ¤a!Qíÿ»½¬MÒaUÂ5[PÄíO¾RVâG%LßfDøÔOìd´UÅê¨ dÔf·®ÊÛx ++Ðd·ôXØ[i9TIw¯z©gsËð:f°Øz¬vY²¹VæÓ �c÷#pX¨ÙHû Øg6þ\c±UÚíZ6ïSÌèoz²¾×ù"ÍS]±ÎÜ(9§O³ò©Ù°¤9Y`ûYEHÈÂèÚ©t|ôR`Ê ì1ÉÚ«9K¿Tľ:¸HàÐiY £eO§¬°ÞÙÇwÃcž#¦ôqSÕ¡úõ[Ù~Þ=ï8FÎ"¦ LÔÈ»r%äÌx¶`Pb¡°7|26øY=f¸C¡|! BY<> ¼c§ w˶\<» oë uð7G¦ïÚ`¤Õç ¾Â¢ä ùèÛpÍtÈ jé¼Zx-i(26#2a odO|ÔchØ YßCødòÞ®7Ùõ¹pbFÜA`ç7FS$$É /N\Ca¦º'K2ß g!vx9@Ç3X±y3@dA°6(X23`àÌà s ¼6L&Anï>[ÊnìË- +ðt4 ¹êãû5G$§7³$~¸"æßî´ºÛêÛ4%Ù11ë¡vlÙ©çK@Ësgà£OÏ|ìõ3[½Vtô6¦ZNUìöäóD +aH*i°[³ÅÓý()j PøaÕEÐÞ°Èuq¢Ö:Ì7ëTµuλ3÷?¼©q°vÜØªGcÄ_Áy^Ñ{/l:mSaÕ6ÖÜûzn`7(eÜñÓ+ÀèE»sBmgð»z4Mìrß{÷äËåv^3Ãâ@´*³ðs6ã!SÎG8ôªºÊ«FdçK`¤BhEÏF)gç tÖлVïÙlúòBèEó¢VîÂHOùQ,É#àiBH/ ÿfýk@Ç WûYËÚßfM|iÒ1ÞÍtzh·Îl:e +îîëÌø,àal � åoÎ` àü`r+knÇCh¬À¸@Ú å¬¾| àÈ`äïǾÛç,«³N>"F&Ot"¬î 'l,t@® ò&óé6BÌ.j ܸ+â4ÂèÚð-ø4ذ¾ëô÷!XͰO*à à æ-âÓÀA Î ÃrC¬[§¦¾dÇÃ0%¨O¶ ºèí, ଠ¤ +@ª Ëæ×îÞð.z ê¤ÉËyÅÌþúæÌ@Ì¿G®6Dº×ÇØ � ++ go`ìíÜ.xÌ ²Ìå& +endstream +endobj +178 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +180 0 obj +<< +/Length 2744 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4'EÒ¡* ¡AhÄmGE£qpÄi1*&0P´a.R¦À©Á_( ó±Àn5"¡¤Úe7NyÆu9¦A �v,èt2N³¡¼@c7M§Sq¤ÆaÈæ¡£ 8NFa°ÊlÑ(Àª°º¯RGªÐ*¾0°Ì !í2 %CU3k·¡FÆã/{'®Ylå"aLj:c;7¹Þ#Òv2MÌÒg7k¼\è.+¢ì¼/KâüÀ0C vÑ K\ÓcCT0¿Ã(䨍¨#· +«vë)û*+:ÆãæOsº5cpæ6´È8ÑEA �7K Ð2°¬@4ìhæ8£Ò3 ,X<ÈÃ+æ ¢2:¥!ó¢ª.ª²¸ +R¸ÂØ9@Þ60Ú#)(\ÂÁ°j $íê¼°$q#»±l7Áí.ËóÒ >.¤@ß,4Ö!âh¦*"¥¤!4¥ÁºG@¸nS¦*!pnLo.ì&áBÌ/BÀ+¢ÂÉè©#cÜãÅãê2Ùëãà9ÑøîÁÁm,-$E1[ÝmH£s,9 ìÈ@ÄK78Ü8/PÃg ÃÓxáÙÖ"BW +ȶí(Ùr°Â32-´£pÈÑl©Â0ùtx¨M 5ÙO{WKløè)µ©[¬Us]×¢) " ²ö(dXòEô2E, +2¿±³NÔM$±\Ù ¼C¸K%t³À*cÂ(Å:F1Ò9¾ÒhAzÚ7ðÌ:µ°fÓícsý&1 ÉhL®ÏgÚ# Ý dpäÇye6áâ7ÞNôÚ#a¢a" j~¸X h-1É(46¤á\fWW&ÈC(̶E·¹¸®.òÕ/"T·)ö'8JÑW �¬õ@À( Þ³5î5½áL!WK}A ,ôÁH7w@¤òGÄ +_P( °!Rvî^Òwá dCÙ«u +ÉøºâWÈA �_BrêYÊ·2G +5cIõÐ=\PÈ(eUÖºðPÃÊâÙß!ñÜ xìÕÕ>U{SG: qThslÔÿ@ÂÔâTPµê 2$lY¯7FÓXB!P"´h¨slZ¨4ÒÔA@U !:20ÄCpQYñíW¦4r1òõ",d1¢5+Uhã|SzAôF>¨dÒwO.<ÆÅ+(#ôp8f ½½HõÞËI=RÐàê_D8ÈâSF0@ +(v +aÐÐ R¤!Kð°Âç4æÁ_)ÏÕÑÃLþº|PõØL æÚ)ný.Ê´Ã1!1å9ù XÉXMlåGHÒðS"mVÔDʶ|Ob¾GÍ;!O àÐW£6 ,dáGâÜÛ4=m ¡¾-Rvn²q{¤M!|R ìkC`Ë Ì£8g[f'";%¤°b ÔOÔìä*ÐpDCòÈ }0ÌÂÓõ.*JªSËë«D¯ºÍFÁCD%ÝÅÒàPi 5ÌËR#)*+¤L¿^ã½EtétÓÓ6gLùu¨G¢$ô¢Ò©Ib¨»ú§4Iá.}¬ÂUÆ¡$jüÁ8Ô>hªïEYAV+ÀÔ!:è p +éºÚh¢Ð8rhâ»òm2m?Bj®CyFEÐÖéIMfö:Ù裮3ª +ä!uÀ8$Bög¨l]6üËÄXNÉêZwà´ª um%[:öY½\®5U$ÚOR3cHFrës?*F +õ`hñe �®ºi´à®{R¶¦®Û¤PÒqiw¶5ëÝÚcjí.Z¥È@x®gÐ2avh +FO¿QÏÕRUæ UMT©Õ¼ÑÿëûzÎrÆ«På¢Èk¥ó8çÒFÁ±âÅxàeù¨meUUºµ(,[rõW1Ú-ã *8¦P£5#ÿ»/þîYªu6A93°#hÍÎ+dÑiprhë 6ÂsX ÞÀÜ,âȾÜ6,üêÏ«ý%©;G Qû$³ìÑrÓN$î:³ÜÙQ¢QFnÊ)À=ÔÎÖÀ$ehGSR%¼FHÛÊt-?6iS¾];zïìX¸{[#k 1$mì6¢Ñ1 @68I3U³zWK_í#=´ÇTݼ{«¶ÿ-MSoÎÉEø@(3í´Òæ5üC ÅÏlY.|p]jEÚ)!óa·H|Ùú ÐE/íPvÑ*×Q>¨ô±sØm+pÕ]ÌäßdÖ`÷7À÷l9oóR¾ðQ.R$E6uSO+¾ç¦ÿÍÚ|Plpçç1¼g¯Ã11¨µÄb5~¨ñéÍkã:Qï4õjÉí7ee! BY;%D5ætjægí"ÃCYI¼so´¸ÍáÊ»aQO°Z\û7.,)u-2 ·c0¤ ¦rHÎÎ% +0\ècb1æNÅààòæ!ú½k$/Y5nb²Ê³$®ÏLÏÄ4ËÜëäDpç¤ÀæNDèëgu@r«* +0 'ÅQBø×äì¥LÖ£¤x+Hÿ-ËÉ @äêÖi)¨0dèØõz;@¾ +bØJ©æ®CZ5æ~8ì_Åı^J$løÃfð¦ +CÀùàfz.p¼ +O¬@/¸h ÈA°AÒ_&$ýÆÆþÇ^0XÂFæFàAïøHü§d éD³ÇDú~ð¼é"H@`åÀÉE`ô5dÌÑÑ8MpBÏMQÄöugðÍp\0a NU-U¥Ö¤ø×M-vâÄõ`¾À¤ Ï@hÔÉøgf{íB£ÎÀÌÆ<a#F¤MÀ ñrÃv �à@ÏÊJÐkìnÃ"2löÕ®:[H4Ìí Ã\6*´Í8mdq +endstream +endobj +181 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +183 0 obj +<< +/Length 3044 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AhÄmG £qpÆ"K +TÐ9!KäÒy<ÆC!APÐe§©æt2Óyài9 Æó æu8 ç+ÁX Åñ �F0ªT4#HæRÈ(a/I +áA¤ÈC7HS°¤¨j£©0¼ôn¢9V&ºÁÀÂr0L·¶Ü ¶º¨Ôn ¦ÕG.´Üv05þq ËÇØlvR/;¸ÍÆÃÈÁâ½NG,X» ¦*Èàj©!pnnLÔ+©ÀPõ âx !l-ã¼#`Ê6ðì4kæ4ãs¼²C@ÂÂ17¬(Þó8Ãôÿ2è ¨8pt +¢¤*ÉäaD41ÅÎ@Ææ¸ÂÀ°l*ä0¯C3ø6Å«¢2JË@1£3¸>Ê<0²9)¿L²@*í; PãCHì¼¼lå)J³6 ë»üÛÀÜôì@°<*4¡kN©Iº¿¬B¨'Ân2s$4¹Q¤l1c«÷Ò7á ¢ð6(è7b6£tI®¼b4WPÛ6CÃdìÌO0)>ATÚ¸ÏÑH2ÑîI[NÍ-SPeÀÓ!tòÀ± +B`¦"Tiàq%ÉÕåë{àP¹D´Ê¼CvÅ/Z¿/¸ÕuljÈVä2<¸Ð4ÃÖ0ί<]ØbíÁMk4VõÈèä ÃÛ±¬}þ"=Á;S6Ö®@è4¾L4t1#0ÓO«àÿ³(ó:»!sK´¶ô0¤6c 7Ö¨¤!-âÁªÒ)óTÖ9ClÐæÆì!ªíªXÕ 0»X!âh¦*"¦ÖÝp,ðj\3»r©¡WTnÝ÷¾)|)_A¬.¶² ËAf!è2®¬ 9Ùý 0ÌÌ k¸í^Mµ¸áäàU³e<N]áGoܲ# (ä§ Ù`ËÐÂ3JhÊ7lnéÙGç¿%2s§mÝ~·LêA +A$* ËanLG2ràÄ*t|ËISô<Nà)·UÜjÒb +`#PÐ8ÑØ&ÆhÍ'i/mf¥vV¢U-êñïeÚD<WÁ`Ó$±!¢ºz/í¬½Vºjº~~g1üf¬Û �ÔSRG"àT$Ï^ºPPÁ»BÄs¡I4¡HX~Z%oD·*C8$X\¢á*ÀF¤Øz: ÆÀ6ÖÄÜWp@Ä8½A.x ©(ÓÔØ38ëòl£5BÈÍ +A¸( ¥&I8 +e ( ³ ¶p[n5+³Î\Ç3.dÌé úæÕz!¨É +jÀØ7$»HAr �n.µH|d(ÂuÊòµe¡9%V9ÇPPÃÉA£Ó2nÜ´jGIu +%ÏbZ < +¨I ÁPy²±Â,Ñ!Ì5°%naBpu ²pÙcMÎpd¦3v&Ú¡tMr³JiX SbcS +e5)¥6@Ó³cOiý[5Õ¬SPSRüVñf0OÙ÷@#$`á˺êE#I^¡JGÐØìlÃcP+ ÈG(ÕÀUÀú= 9ª PZ +Iñ¢ÒÎE +gãt^Ò_Rù;LgeìQÉÑ=@P³©}Mâ¡ðn &fÇQCï2Òp%S^èa'ecIÕ²Ú9ò0+«§Ð~ËP&ÑÚ7}ˬ3rµÔ + +eiöZµðQWiá´µµËË"=hm$¯Düª]8kO06õC,{Ñ|AD7rê³pðÃÁÉVåäY¨7y,AÔ#²nÁóY|*ýò6,_Ps}×c^]öÖJ¯"~øÎZ²aE騦-xÌÕpEPáǬJ d}rrOAíqL½<»×U1ª¤öæÝì+ñÑÃ:;E%cÕ2|²nrK@ÀÉåüVKáU·Sç䤩ooüÒÀ%ØÊÌÛon$ÒÀs&ßæV7Kb·Ñ �yö<%ÔÀÀåuE`ÙM4ñDÛÙ~e±^4àÅmKu>«KPCá½ h©w£¦·ÊE^Xi b#¡/"ù'ê©-DÒµYß; Ø n( ²uõp(ÒeÀ0Å5âÅC¸ëø°CɣʧcZ`Û²i5Ù:,m{l¶°6xº#¼4TS¢Ó<ÓÎ:¸ézpÀAÍwî׳%\}C{Vvèøevðé +å½3`[²· +º ÃL¼'½¬^½¹¼Íï´]ÑxuFw-ôC fØæ,Ç zSf.¹ê ÿo]1ÔÃhF¤Êõ<uö:3ÇPíñõ.ª¶«Í[W½(ÉUß]bí`gwçM{j;^ÃZÊzLã0ÎÕ²Ùíù#À WÝ +Ù2¤¥T©ÔÞÏ®¶ÇSn½«Iñrfm=Aãn\æpU)Jº<Ýh~îÞ/#å¬Hà·¶ÒÅ=ÕMu/¿/ìÂßè{ëiL®0r¹66ËÕÍYÃÝ,Ñ.ïød§Ç¯´÷c`ÄÈÚfz/}3^m÷wé?gÓ³ãSoó>ó¾{;FùçÊé`ªWfß Ä'jP'çÖ. dj¤×+6Ç*Ö¨ÆýG¬eñolÍ'. iõàbtä'(n·MxÛln7/T3Ïno<{,ÄÞ.à3ÉCB J½N´mTÎ@PÎ |BüÏOà¸OÞXÐßÐCÇñ§ Lì»4\ô¥v>¦úM¤ÔZhv«À.ÀtjÅN\4¢r ¬à +@ -ÖU"Ü»í6/ãcGÖZ ÄK`Ög¨ C WF«ÄGÉêÕ¿°î`¨ +eJâÔv rxQÒvÆÑ8 +f·Ë¥±}&0ÄPED@NEpÏ/*êÿ14ñWÍD# f{íúVàȺØ2 bäc®KQ;Æ ~çQ0Ðìà +gXÔPà'ÑÓQIÏM±Ê +QZ^1d9`ZK`È1jap{åvñx ñPîH±ÎB°á �qe Ð(0/NcªcÈÖ22è28ñ+WBäfRþíÖ½ÃÔÀ¤ £Ò,GU!1åv/CÔ²%Î@Dö°èÆ +T¤+0"Q"R{Ààé©#§ èi2¨C ¨Cï®\j¢Èð5OÏNÓ¤Ì=@ À§& ¾ &@=@B ¡'GÙ.åBTr ,¬º©AÑÆ`íD)Ñ)ñ±Xg-ÁdM#Q²és 2&»(Jàé%R%+H/üL +nã%jAQgeJTÄ"3"qày(gqZ~Æ$R � +endstream +endobj +184 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +187 0 obj +<< +/Length 3054 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4N¥BT # C ÑÚ 2FâáÒbT"M&`©Á¬_) +dBî`1 + +IÌ@v0¦Q´@s2C}ÔÜd4Ì'K¡ÐÑt1NG#)ºôs:`îó5ï °Øîæ9ºâ.Ðè ¨0\7áuࢽ`,Éìp4-VËuÂåt»^/G|9¸@a7D3Aäa1áW[v0Æe4¦N=ü@p6t;wì±CDUEÕjnÑIÖ +:ݱ¤Ügnw=PÔ¥½O`@Ó5 R°µÊø¤,Â`#¶Á°f·k³|¹ººò8kÊ®Óå¹®{¢2ºk³æì¼nC¸ð<Nãìò¼í½ª pø Êë»/³ðý«wÄ,jôæ9Î¥c~4ÃKÇ°Ë É°#(N·c{9 ã`Rÿ TF*+a@Ä6 ãÖþ¿àR=qÄÀZ´¥ p`¤¦Ík^*(( +ÊvÔ*Þ®0à î4²<,I&ÄñM<ËxÜ9«hæ4ÌOËöà-ËÃÐ4J0©(h£ahX]ajsnÁ +Xb¢JÒXð2¶a¸jiÝ!@¤¼±U\k])]|"V%Ø)ÁªÚ P`PP$²³<òXMÔôØèêNøëÈ7£hhÂ9bàP.7õÑ)@R¦6$=P³jЪªÁê1ºãæ3£`XºÈ98нi±,\bhî7Nàͤh`Ú:ÌXUa¶úº÷<ôСbÏñÔyjdÉØªôJq(Êr«Æ1)èó¸§ÚÖ ¨%¶÷äO:¸XÚ"D8Ò +#]8í· àÔI³l¢;5yº!vº<Ìä4ç!;ÍF}QOôÒK£i¶ÇJ²ÝË.ÂÅ7T½9«të ±àßI¾^ @7 ã \ ²ãA)(jÔl;æGÐüOD Úô¾!9¼©$bzwìW<%P#SÇ$óùÑM>¼ÚʾÍÌàB +iÌ=%1&(ÅÃ(ìq_ I_,̶ÔO/f,;"ôc¢å-ÁR|yöIïO»´8ëAK:j}0°Ö Ô£TjÉpëW_[pdz<fÀi±¬¯ak&ÀbÚQèb9N¡ú·xA§mñ²?äâßÜpÚ8®X9q¯]ȾCiyE Ø#?và2ÄÆ EÖV^\eq*ùé¸üS`2Z0\µ¹Ç<ó¦t®z¾VÒKñ0FwjqÝÂ"h ó¾ð rxÏ!å +KH AÌ÷ÛðPÌ=Ǽ^Ëè1|FVJÊF&úê;o±Ç¾äkH1d.Pôéh ìÔî"é+0o 7ÃîËtâ/G8ºÐÂÑiYÖÌ·] n:0ê:Gf:Á.YÑñø9 |2úÊAoç,6S:L;Ðel©pØÞÚ= Ò\îÌá �Ôû³AäwXË b:v²RÃå76J¥ch([+l-àb¸ qiÎ:H2Di«À/"~ ÊrÐ_v^/ -7WqÓÒ°j¨OLg'Q:ÑZõ)mUÚÍÐCLÈ®0Ì· (E5ÏÖñ×y«D^°UÒ )ܨ«æÀ&jr ´åÁ[$BIà Dü×ZîÙÜ(PÔi-l·ó¡ ήÛqAAeræDÂ3{OO3¡,2ä\urIÙ=¹\ @ÀP2!õO@k>yRX + JêÖ+êÛkëjÉ®@ ÅqmÜz·¶T×ótÃËÈ +¾ª]ØDêݯ]öV¯-§+K·oj#ØT.N +wmaøÀà£7! Tïdxi²¿õõà Óa¸É1lWq~1ÆxÖÕÖÊá[¯ÍA¿ÑBà +m¾ X8@æép)ªÆ{"»ªÞ!¦-ðJºq¯ÑÇ[kHäÒôä<ICäg)Àܨû§ÌûV!¼ÒµBbU)Y'DíZeÀtæ_M5tºèc¤îÄñ騥¨$¦ÁÙÚ3 +×ä<» Ø1"èÆßÂÛÈJ.á#r¶ÌÒ2GIåÖp ÙÎ2ÏëìG*&±Ç±}Àbm uɧйï2] Mn¿9ñÅ'ã©4qËiÐÞMÃ<uÞYk.ÚkqÈ5C¤-Új.]K¨SÊÓN£Uìâ @+©U×¶ÆÚDj²zn²fy-*±A}hÆ·¢<4ø×46qÃÙ)¸q [@¸ÒÜj¯MFê 7®÷:iÇíÎü)1Ûâj£Ðáï©é©ò öÄw6ºíÒ¨ô÷nÈÚ@0´Ç¥b ¤»ª_gêiT7]ôÛ[\X÷Kvö+-)_F ùæ h:Cî[¡MÍGv«Þp5A\çu}yÙ<γm]k9vÙq÷a"!Û +zý;9½ný¼³õ7iÀ<r!µ^;¯`»{¾²êÀÀ j6 +P§EØ:¸øiþ1©¦"Ýãæ2H»¥ Ç©&ìS2çÃrÜ)«é)ê8õxÇåKë¨{Æ;Ôàï$¸¶lì äìã)îtN +ö )Å!Oh^ªÆdå¬êâ(²PÿG´*ë.n×ÍIïçÆªvèP N/®èêpö dþlºÅ¢þâ¨ÿ/ö¥¨`/þ2:0fã0 ÐícìíÄ>ïü1 =Ïâõb^ÿÈ.üñÖú>f± � ¸Ô˲±PÛÉÁ n �ÃGgðó ìª\ zõìåh¹Ïök¦{â ©¼:c(2ÃìÐ|Pкm¯Ä<Çë +ãpz®ìåpp4â`qÑ)·ZÞOj 8Ã>Ç@ "â õÅ>D ÈéØ;£¸ð0wÉ2èjúhp 4í4ÜÇ`òMLàPçËèë0«°÷îOìWÍOkï8ïPÏNÐ.Ä¢ôßÉXD �X¬¿E-e¤MÇŰ²¥º)\%ÆíÌÕn"Ìë&!Ô!-#Æô~m +Oan÷ Ê÷p&ÐM´ÐÇjNÜlgÛ$BÝdÈy`v î- ÊÒI@gÇÐ2ª:fC,9 �BNè4ìt>2agñ&g÷ªÊ¹2nÏè"÷Òj³\fft¦gE¾0àå)âñ*Mû/ÒªS#'++c+ÒÉÅÊ"ÊJ)À`ÊŪ©,´©²<ª@LäÁ°T¢K Â,в â!2P¿"êÈÖjÑ2gñ!ê}2ëök Þ°± K �×%ªáPiÒt ¾ +endstream +endobj +188 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +190 0 obj +<< +/Length 3993 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ÆIÓQ¸qaã(ñRL +KÆc¸`0¥ÍÁSÜo<§F"Âd!Í¢p¢÷}\'ås¤èe¼ßÆWáM +"ÀÁCQpi¶²1Îa°C0ª ¤©P¸h*å/ËÔ!# N2±Ù-i*M-bhÜ\1¸gFäÜo8Í'<mS$¥ëbÑ( ·ÞåÆÃ5J½Ølô¾¢Ô(4ßm.|>BqÔÚÄ(ì°Þ4 Ãê2HvRV¶¸pÏ +"ý>l#Ä/OÄPþ?Ð@ÐDAÐ ¬TÃÃ0Ü:Ôµjc\Ú º×É-³4ÁªÂà+ïS~²¸n(\9! +8HÞ7:¬zì5r î"³{Á-¼AjÚ¼ë^&NN* (ACÈ(¹!3k\I©DM==rÂè»/kóн#NáÚîįCÔ´KPq>IÈ@3£pÇ2ÌáD»a ðHÜÿC(ä ã0@1,=j3KÕs@[VØV$Í_.XÉXTÂcÊ1#0Ò2Á78ľ.cÌÒô8Áh D8p¥Ñá@élS45ì©¡r@QË5I?ACúÿ¯PíAÈt4ÙN"»¹PÒ ÕJ$q#Þ8#Â6¬8ä!x&2`ôPmãô}FöDød;`³]6ÖÓ¡Ê=¬F®Õ)þQeuï!X@±A°9µ«dªkuöbPî4XCEZ´C ê9 × <Ú÷3Ôæ²2¢úBPá}Ô7>ô¸S ëú ;·ùÎ̳ínHmmWVÕöû½Ao0Í(õûÒàá=3ÚÒ>åvÝõ®A[ChÛnXu ÁEÆ;\¹áàÐÓªqÍvn÷=¸$qÙÜfÀ2© çYÑÌÄú~WÙVÌÎ:/j0ù}5ÖógÂ7ê4XSäûCs¶[Ai+ÞÁQaeÚ:Àé5=ë%Y)F`òX fUE'pd[+!!@!T.öiUB¸4NüYKçeÊýÙ&UÜ`Xáµd¬µÝà+¬¥A+4µ³·ý2ø¹d_¨3¤ö\$qôÖENà {¡ThÂ#ôXîT(jÎ@¡4Z¤XêSäÙØ9µ\ï �õd>!Ä~NåÝé·ÁÃ\ t®·hÝD-Ûµ86óAiÆ$dÉÓ¯øÂÎÔ>b¨ +5AÖHÑ¡kgd`Ä·4ùÊxÀ´´è$ûVfàä®Kàá%PmbÒµ6)å2dÑÖ\>å'<HÄl¶½( +ìqY±6Hܨܬummµ·ÁVäÝ$ÃxSb.ÒÃájpÁÄ)`P¦óÛ2fYÉF)eN:úÑÕVGw= 'ä6vL8 Wä Ì7º²ÌØè[knG;Ù!$eìÊqOS\÷RS TpE½t!3 i<q¶hPtP£¡Ã BkOI´kHØ2-ÐÓ]R©å2,P¦§þû}$ðÔÒúüé/q]Ö6 �ýäC¶WkÌÕÐËW üz0Æ7ê(®¥ÅÿKåGa+ü²Nw\¤ô{®ô¥°cT_q¤-:Ë(2He\cô¯AÒ¾HªÑ%ÓH±u$$¢£mRq2Õ ôRÁl-Ì.2ë;àØ G|ÙòBá»·Ôu'«/fÂJÎT5Ϋ·bS7ÖgÕ)лî.ÊF¶H§ìuç¨GNJPÇJCsU±D¦âÜÕðv!°:»× ;«2ÓwYQ²Þh¡¯vSÉPIÍÜÑV;í~/Ðu¿Þÿ·Dð,í â+Ð@R»W¨$Ã>ðÄÃ~0ø¿(+@ìá¾ °ùìɰQj>jaPÓ4|꣰ÂF +va éºwyXÒûäÕ_!³ÌÒbßr(°L]ù}ÀY7jÔÁ ¼pÔ Ã¸a9ý¬±1d7ʡ㠫Ïôá¼7 àÊí)Ë6@fFì°QIO6½K 5s0#²ÓîCÕQ¦ö³b UçÍ> ¦ËÜE$+3ö¬Á@0×Vdã/«+]mÐû2f@SñkðêÛuþe¸"cé¥z:J¹Am@ÞªÃWÁ¾û·:)&££b6½¹°U¦'sã`Ôy`£»_Ð1·0ç|dl{½0&ËÍ+¼©_<Äu¨tÖúçwëÉÅ@¦ÀznQñ(;u&3A/Ù¸]¶ýø NÐ1XH\¤(VÄ{bml/²vÏ[=ãÍ}+6èÎ õÛåÊÍ6±Ïàj×OÃ#îÒØê}W3g~V¾6|j ¨*£°ÌF)H2¦±UË)Á))ªÔµ}à¦-r§'¦Ç7·Ú{ÒJBiÔ):èwÕ=0êÊ| ü©9à93±«õ}¸©Hixº·¹¯oƾþ9*»!º 9׬dï.³ïOÉÜl¾õ5ÏÛ3ï½Ú~»çÐèO ôî*0èFá;éwñ°ªx[5PgyË·E,õ]Ö¾ù¶£+̹ë.û½ûæjüÆh©/ MùÝørÀ`Ç^b,À±jÃ*JJ +£¯&̽J ãsN<jÄËîÆö¿®ÔÜl\ù +ÖÁîôlô«V¯Ð~ð6mê(8Àr·ôQï= ÂÜ®ÚöNâWÍÐìx|È\ÌùÎÈê$,ë +ûEÎåäÁÌþÉÐZv/ Ï#X`æ®ç@ú¦B,¬=è~ÆÎ!.ÿ åÏ ¼ tP@ë .vWnz]àìPHâ (éîP®2Kdøè¨§§,3¯B +ÀÌĤ¬ÈWÌ̧à\ðÒ0¯\ìâ>p¯ÊÎyDÔä07`d{ï"æIéüC0êhKÜ ²b0b\lf%° ~â~àèeH £¦:DÎF+¤ÕL:¾HäÒþ +GnÒÂiÚ9ãæ¼ÜdÓÚôÇïÅÏèOÐ0Å¿l®0Æ1`ÌùCìÓm:Ï>-C +ÈÏ]m +ìú, Ø ÄÆl¦Ê®TÐ2vÓ"ÅÌ/±¶êÅ*º^ʺ[, Ü~êy£:*ÀjäðøÖÄZ×þ½oæ1&° �s'®æyiQC^5¯$RQצ8(-8R¨s|¥e:LpÁ8Àp çU ÈäiNQºW çòhý«é ,"á2|ñ28Òñr Déö²Í1-1 Ò,QÙ-ªV+èç%àÝQÅQíÆRéú �¥ÎÆ`Âélú¯ÍÌ¢¬¯P*þ3ÒôÊÃÚ³räPH~RFSY7 �Ñ»+Oj2DÍËTp\¶R·dI.£n$¼NäO$¬òk8Àh¸ Q)MÞ:@¹d乤ä¹êÀ\<k|ÿæzLêU<F<ú¶ãk=#raFÐJ£`¦â3Dº9`Z«ò¢êÇ&Ýñ+xQK;«<"1(fHdªRPû).X×kÖ@+ �0PËf)§¾*"H*¬#Ñ~2 oBc|¸#DEÂ}Ó/0ÃK3 P`R1t@ªõ/îMÇL QHf¦2'7c._BÂ"àj3£?@(*4ª5<ck<«qAÃ6°îB´¨-¨ 9@9C9à :TKsôp4U?´X+BÂîë§ÈHG{ô½H4?$x&,@e"KTH& +"oø¤NGÓ5wTe5X?u\Fe³H`AWl lkÔHõ +Iu="IBBÔª¹Rd¼ÀL@ÒL ¾¹GE$â"óü2ã:y=È®RHµ1Ô*Ñ-dÿKT~>õHÙF¬Âæq¢U@RØÒÜÙ +¿:ìþë¢]¢äV-@pN>&ír·j]ãSÓ9^Uh ¶3P_ ÑJ¨hdYR~jɹO©²Ðl&IfQÒäãÕ=6¨P"ï.ð_b_J.Ò3¨?1rW5õ3õó)"\E +$nó¥«ÀM)æCuhjqé_lHrÈ?3ë8¨].úgOAd(Ilqi\ bï/³ªhjtéI|R¤Øð/`äC4kO¼psµÿ3& ÅG/Ê dv«D~éÌhðþÆcKäMbÖVì6Go**©ñrbÌ"ïÀ÷åbèÃð3'¢2ó@)m)"ÈfÙ*Ê/¨(Ù6µ à¥ké-åÍ'LØnÃD]E^ �.6"÷6µe墯ggloh¶Á"Ì,r¦'ëé(7ãk6£k3 �dzaÒ^1pb¬Çùa¬á$jR^*´Ú×:K>ö-ió +V1ýSGHw}1sSs¯eá$è$Dò¬Ýñ,[c4rvnÀÂèzEj¾É@Öµ#m;PÜ9&ØZvLñ6 èB +endstream +endobj +191 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +193 0 obj +<< +/Length 2942 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT # C Ñ<l0FâáÒbT"KF +¼Ì(*¢IPÕF#aTh*68Éë ©=xPU7̧B¼Úm!'"à ¸)²Ùà¤jD.ÛSqH]Ìa.Mfóã1ÔÜc:MæáÀêt9!Ìàe1LÆ)@cÁ:)Ëo£:M&í¨d¡Ñqv¨N:2˰«ha*]¯«á¢Éf´ci@¡@i¬M+ÙqÞGN[³]b2qõv3ÀÊ4ÎÎ#¨Ëx̹*XfÁjÉ© p¤®akØ)/Z¨3)²¾ý Ë ÍfâCËTÖ1+C¶ R8¦.ªèC ë żKhjaÊâʽIjª¾ ÃJÁ#jöÞÁ$lµ¹ÀT!(ÊoL~³+°\ï±J;ñº.ÐËH +ì°¬rZ ̨Ú"óÇÐÜ;!Ȳ8Û$ÓÃ9ÉÁr?ʤ¯ä¼:L2<t%*OÌe ͺCRì¸bËPþ¨äâ6Ñg>ÓÓý@¶Ô5URÎÌ'µãrú¿°¬=K&©a¢6AÈA +0½+ H<Ö*ñpγíFãEshÔÄü6³ÃHÆ0ÜÍ"vû 4P2Í÷»ñ>9?SN ¢T¬6ì;KÊöÀÙø#Ê#6"ê"òÊ}L·TÛzßÅ®Ýv5ĸÞ7Í]èã5#ØÝ¸¯ÒÅ0¹Ahe¡¢¢Û0Ão=¬øVoô@4: á rúQËsÊa½n+o=5Úõd;¬M$H⦫ÍUf¿ èw©A-{uzµCÖ2å¹|S7ìúÆÕ-MÈÐ4M&]5#nÜ·tã|4 !ÀP7fZ(k6¾ymmµjYDìS£¯:L2 þîÙ¦°C §£0ÞþÆ|(AÃïI§¶ãØ68£ÏÕ*;-ÈØaQ"qצvpóØ¢¨Ì¤³Xi3zÈq(^áf ÷[d|Ì"ØJ*!½¡´I©_`ĵU|Áx3 °¹tÈÃhi/¼À5bê¦zª&ÚK»£3gØü+GàjCѽ î´ÙfÔïuh¤93:{ �óȨÌ0HRl-]®A?"ÐBÌùb«%ÜCa¶ Á½µ<@éÃp2<Ø2 ¤R2'b¶ Ìb/@È%O¡Û#`ÍaPÒE 51 DX÷ +£2qÏ=@½'¨BdóØ{G¡>rE ¡óàhú_X(¡Ê$ æüÐ~¦Qûwôà V q£_9=i?3¥càh×ñ8 ÖX è5Ë©Dåëùd!¾y¨+ë"t¬°Û Ì<pxFúÐÂaUëµù´G×ð1ÁÊÎpR @tÉ ÷õ0z©kH fD[f fiòABgÁZê^ðc7A@S1l87. Òet]ËùP+ÛÊ\» Õ;UÓÌ )s1èS)Nå?l$q,O6)B5!$0ÇGõª@U3)Ug?<úüVÓÔF_£8SXµ\¬TjVÚÌh±)H>{r>ÀÌ@EÎ +_SEìÔ[0PÙÙbe&°2ZRÆk²6Ù'ÙÙÞBlYnÕÊÙ[5pi'Pa ì¥i-±Ô¾äÍIý ¡¾'ëMx6 ²'R{¯½¯:ê¶k.îé}ëSæÍɨаãZP·U¯¯[ÔíªïÚÞKµäcvóÕA:AGÊØÃ.ñ +3U ¨H +!ðlAàüvU"øwØÐ.æFçA¶Ç3ÜbÅ£ ºÐÂNÁ©>Æ(#Tp[ i¯ÈëÜ`@H(¾°¦,®Bà Om bÀQM°si¦LÓi(iÔ¡§hÙCDKØûª·l +\Õ)ßcæ-<´°m_` 8H$ `ÂE ¡<+);D �4¸ã +îðe uHÀÌ{¶É.úäªÚÖtì"hV5©]5§4ð_Á$,PNÈþ}¶¡¦ùmgA·Àë^^ð@nM¶´{ãl;¥3Mi¯µÂ¡6~ÓúQ MRO5c8Ð;»½ÙGtYÊ ÔÝçï«ËX*vZ¡Jª+´4²ï¨ùÜEê¤ÅªÄ ö½e÷¤ÈYÔÅðÇ£óÎÏgLBá ,«k6R¤N ² È;+C9JåuÑ@:uAÖg5ò9Ú+Æ6)ÊÜÚ0§¶@yjp6Û½µÊaùÊ Ð;°óH©"ÕRD XBtÐ¥.?´ÇyS^[ùæUä@¢]¦9]ªTS*w~|}û!0;âÔR\SyæÖjõ`ìÝ«¶@Òé`r&& À!PÌëõ|à¦aI®tÄ=~bõù:ýïh(eô)L}]½¾XpÓb\OFóóÏr+"¶_?':ɴͧÀROX +-6t·ÀsÕU¢/u+µUõã`ö/f0È0ÂH6XC¨Å@`«KȶÃHV8Dæø æõüD° ÔÇÃ8cRØÃzgZ ÒCu0HwãwàÒL Ìâ'kh è¢@\{¤(sè¨CcÞ.ÌèIm#m¿K2, +Li<ÍmîÁ¯v÷¯~Â.<L&¬GÍíä¬hMðTpÃf<7Ìx·jÒ5,'b{Âx'Ì*B|O|ø|l ä;ÉxæAãI àn'ÀÜ íj8u,6@òiHS#V5PÔØþöÄBPve¶akø*´h*ÿ Û`îÇ ÀØFEJÃëпP¸+ïù Ð_ò îqr¬¢7àà¹cTi§50å +`ä_©Ø*©\V¨ÍBkü³F ]Âþ$LÈE<2`kd6ýĶ$ÀÒ^NÊex1Gög1¿ âì×þp*ÄÒ±n 2±ZQÜÁ<:ñFnG|ÊÊ$ ^)¼ìÈä"+ðÍEVHjoXáoî §¢ÔÌÍ �äbCþ¨%.ÏWÏ]/dµ0ª<gÎåP°¾¥íFλ&>ÅÒJ½ Ê@° +×@ÆÆMhu2¢xñ7±^v0ñ¦5¯bpdhìkkBÉ-Ñ$ KÈ)%Í(¨Þż£1¨5øíQ I(fo +¤b +endstream +endobj +194 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +196 0 obj +<< +/Length 2586 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ Äc/E*TêkÉã!´BTÎp(,cIå8f1NG#yÈæ)¢Ñà¤i%. +DªX\2¨êû `0¥ÍBq¼Üe +JªA¿ÕOEQ««"°äd.TlíË%9´ØÆ¶ÑÌ`(!Ýg1iHÊf¶SÜc2Ýï9Út'A¯T¢½6#X7áãÛ0P·³dÈæS¡\Òn2Îç2!§c:]O%ÁApRÍ3Û>¦AHÒ¡) j ÁÂ<Ø£mJÚj¨ÛÀb¶JpP# !»a@è*£hS9 #°Ê¼(È JÊ8¨Á³_*Í걡j3H"ÎÀm +Ñ»HLÔ+ $|ð ¨6Ë:Ò§ÃajÜßcÈÜ7ÒéF«Úúë°ÌÂ;±ä<rÛÈ @,(@õÄñL]FOàÆ4#@1ÅñÊ `èæ?ÁÜ&:Ð#O(ÓíKV«Á[ÈÇèÜCL;xß#¢1Æè4²Ñ¢ôMð# 9»{¼áÀ\± `Bóè¨4RtÚöê¯Êl¨I@<É{Ñf½OdP6ÐôøÿZUå:¿«¡°a¡vÚÄô§! ê9 Ã@0%I³`éG#p@1Rc¨æ2DÔ2ëF!89 dSdYö§i¡V¨XÒµ>Ò=*:RôuÒ¾]h jaºË²y(ä0¯ci¡£^éÅcÃWû5Ñ÷û7fB4ó;23,Ý9SðEC*ªÁ£ÃTÂkÉzC*xgW®5ýMÞWìõ _<ÙSæìÞ¤²ÏNy ß·û/xùô̺ ¡ �á¹3áøàÎ:Ѹ/eç)`ÔSrÙï!Hrãæ80¸cxÆ44¾3] 8ªB¥ån±ë-À±(ê²c¸Óà¸>¡ënJÁ¬ûI«$|@Ü:¸¥ �e$3Îú]óÁ9 F©0Âi 10úÃZâ÷_*á9 aJ87ÀÖ¤Ã^9Ì=Þ£&ÒJKA@©MPCÅDDY-ØÑ½ä0Èã|.%̺¸:¯Kû ;d]: 2XÌ3ôSaãnÍÀ5Bª©Òãxí1Ó~pCyÃ8§ä¶¾t"rnQH¸s¼ ©OÎ2"-ó%̼7miÁ* ¡QQ½E¡4BsLEh²ônÐ{tñ$Ê·R(eHé$$´iSf¨EÞ⪨Èd×¦Æ +*gM)êG§4TXED´ÔÙ齨EÆ4§-4þ'õ£Ô2glõþÀ ÂT +NT8Hx +aÑàÎÿB¨I ÁPPªHq¡-$Ô#WX¯yyí>gØlt°ÖTÌ^aX~5|b4® .«£j°VAÍZm &ªêä]`M©ÁfHwvÚ:5àÀÁ?æ¸úâPÔT4ÊPOýP¨IÁc#ÀöWc1-ò/XD~!"9¯Dè°2x Iý Äb®è×ÅØÈf.¬14°äÈCùin Õ-[aDM©±Ô°ÕÁð{qdô¿DúÒªó=5ç×F3 �ðªÄ¢CÎj·:ªòç6Î8:Èj;Z<§#'ÚÞ¾s?¶ÈûUD<¨tØHܨÝÊ·âxYæÓí¤P)¤n@æËC\µ 5á0êÝ A@çðþµ ö1r1û½¥;55@ʦª´ÆÎ ÓCÑÌ ð~ààÌC¨laê*6ý\bÎâé3à¯`5#ÔhQÅäd="ÇÐ: +Ùýê@¸Æ÷^)ijﵾ-®0@àç#?,àª`-g¡´÷ÚàAdqþ +blVÄ1«2´°ï)voE á?èbÀuèçUàwl³ïà6±f̲j²0&ðAn=ìaG¨Æ~ Ú ×L¿ã9®ýá·kyUD(3½3"V ¹i*ÄÆXáé}ÿao6ÌÆÀÃp9Ø9å<¥ð-d9Ð7glÑwíkÔë{'ÐßÃæbørbVÃÍE,04´Øµ³°ø²ÚiE¸øt¾3)új´ìÉÅH©$§Ø7 êMÓ©®^mÈ÷Å_6£²h ÉùEGe6¨fÇ1þu smÀÉû0æ¤õ lØøOeHXµ¸¬ucÞ0 æ~!c;¿°Ãß QAåK° Øe=Úä6;t2ÿ(åKH*KËÆdÃ(x×GâÙlJûôMl>ÀÜØÑ)Íè×k¤µÚLGÞË}×oú{íúÛ| ÝvÁàò +Ió"eúO+ãT±wÇG«2t\ ÙX7«2¬µ¤}ªÉû¯Ùì2¹m5O2Y{áîHb]RoáÇ:ÙyÏqé/9À²y'ý{ÈeSû<òý??<ÐdÐê¦ÈÂ]ù¾4û2RPió²¦sCho¿¹Ï¯¿V.Öi¼¢ìHòÍá¾¢l:ÎëÚ>úÐLõxÛ;/þêßî-ªKöøÞÔà¾æít Ëñ$ຠrÈ61ï'è +¸¨ï£B"Vi:Pnnbð +Ôfd¢â4ð/þO®å ØålÈÜ©hºÍ2ûÒßgD íj>LôuÆÀbêÁÈX¬Þ£ ÁÃRcøt`Þt«âë,aì¦æàî: èÄãÞâQkd¦ ppò¶Ñ`ÈE¤jk¼Æl2`ZÐà Ãì2Æl PÐ`nsl *±ëdÿFd5ã|!OFrRKÎP@PݱîÉMþZI^B +endstream +endobj +197 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +199 0 obj +<< +/Length 2700 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT # C Ñ<l0FâáÒbT"RÆá &f +Ô*ó`P f Q 42 (]fÁ\L ©TÜi8L¶ëH Ýw¼RûZ®W¥£Vk7'# ´Êt2õ©7-6±ên1 &ópǼ9G]δÃ;6øPÝ¥¶ú«U³Pm8tôg©¤ØeÙMÆM×tëÓ§ PoÐè ¡hÖ 1S*MúN¯¬!ÏIÀÆ9£PÙº.ðÊ<î»á �6AÈî£ÃXõ¶CHèÕ·CL7=pÄHÈ2ÅHÌ4µ! ¯ÈáFjvA@Â3#HÝGò35 TDKj n Æ2£$})ÊHn Ï +S0+¬À ¬DfñÈÃ<'»î{MÄcØ7c+ØÚNdtA ê9 Ã\Æ.(êê.is¢t`Àa²8ÀÁÃíN¤ØhÍIÀf/~aP)4ô=1>j:È¡Èø×Hõ4¡°n¤Uè°Í"¤ �p"p* bÛ MÍ»rÝ·´-e?[7£hÅPSVÖ¼ÒÊÒ7·ÐÌê¡ h¸®uºo°dÔ;üÀML#æ1kzâÈ_lhÊàLÚ¡5+a;g4-¡&ÜísaE¾J]NáHýbÏìÏÙLêC»Xð-¸S|ÑàPh)é#5å«(Ó+°#AÂs .àSF1ØbìÈΠ˯êì²'%cD[nC®Æu&²±@jþÃÅ máھ׬åZ¡´DÒ4Òl!h-¾É}.ÔÐl¡YýÍ,£`à9Z.¤ºÄ o~íKð[Çâpdcö5ÀÆüQ"Ñ0³Ü8#ã÷è]Cù¬tjå ÚjÇ ?A¸qRnþÑêmà t.ÕîDf<¿(\:;[çqê7éz«íú×jÚ`¨ýþé 8¹æÂôÖÒFá°æ Â#¶Å°ïjoö !4!3ÒvÜP0dïÆ¼ÑrpÄ6bFÁ¢¨k!Ô6ç¼ÓRsTBÊÜ(&¶ÀÓêRëBa4 rtÎã®Á8ÁævM$!^ ìÙ%¤Q÷BaÌ<Ô!yûeMâ ÄÈ" iõ³hXÙWÙösäŽeÛt +é2ðîÂ$M±>´Æ\à +)쵂 +ÓÓBq¶<t&(M + Ùõ¼âªûÌ2nà¡ðWÇ$ÉSPö´ÝѲ8E±^¾8CpFív/Fx !²ATkdòðv±TÑÔú hÁ Y%Ã)kññðÇCrìOa¸3®@Ðx¤Æ¥E9¨Z¾Ê<Çê¬Ö!óA0`6i 1sqÀòÖÔ !µÌ'KEjA G1VCm0f¸ª*ÃL¤ÅÑÙI¨·bà\HÔ1Ï&Mìâ§]õ1`\«Y9MÞ äôÃk4(æÌ¥¬MRà@ Ë$fÀP©ËÀ4Uj´Päs nmev+ò¾wd"³ÄZê© ÆòK¼¾ë!$mKÖE7YÁ±TRÄ)*dkz¨wuÌ^sªÀ3#ðh + J0Jõé±Çy#`lêþÂC³lCOsH7HàRleWO·ÙHxä4R0<Üg5c˲@2ÊTªÖ«YÁFlΪ[Bª¬84°j Ú_eH÷°f +º«èÚù{Do"2îCíÝgfL7ÉÊÙA3&`@l²5Ê)ʦ+I¼u²Ïªg¦U- ( +aæ|¹3Y^áÔW¶å^Û»@q85¸J P ½BCÈ#A@L +L* @äuÁÔ,}pS &½§»¯°íÛ²jJËVe2ÎÖÆ,%êó*s&±HDOÈ4¥±-¾32ÖêÞPÑwì㦠ÂR¬5`ËãÕ±-g<[A=ϹéÇ#í|lÄ[FÉU/DZá>6ÆàÝA ´Ø7-8 ñ¼i°Í Ú +[ ßF³þMjfÊÅD¶Ú<nÑvʶJþª sA],h=ÙÑÁá:S8gµOG)ðÝÛÒ¦ÙLèæºßØÚ5Ø¿ôÇ#²ÕÀ1e,¨u'ú#Ñ ¶ª|ØI p'jÎÃiÓp©qrÚ÷¼H%Þ6ïZ$²Ñ¯fµsM/ºã0÷¢u ´1PqF¹Òj>¦FpNÕòY tÚZß¡ÉiéA Í£±ÕáxmDè¼òÔH×_çGKu,jw9» +C0Ù*Ʀl¸2 PèØö n©õÍW+Ø7þÏJðãlÒFlÖj£KDÖê5¯©û±^ q©=Ùó^12*j ÔÙ´Fë¤ê©±xOAÖ&OÄ&¸&à-I½¸çéfÞjî`Ìû0ø +Ì¿ÙØ6°êÄZ\b¬UÕÚ¼+hÚy"øÓÊçÖLCüjêºÅëÏ;Ø +ÃjWæáò0&;Ä·âNOTµ\¶7üò%ö·öƯÌRåzðÍÚýì2g+´ï˺#bd«~ýE.xo¥Ä }`PÀR½DÀ¦H!+lÒÁçzÂ&¼Â,ÃôùK*ùÈùü#ìѰ ³Ïøg`bÅ,VŨPûåjç¢íO(!-Àhb§P³¤Ð À NF;æÉ@ÉrPÖ¦NðÐÐà + È Tr@ÍÂÊìà ä^ˬ¿ÎúÃþÄP<ÍÜTævβkJÎ@æÎì7 +ï&°Æàbì¬ÐMèÐhÐÆrgÈf`°Ò ÐæºÉbÆ&v/M%ª¦ß/<Ô£z@äèêz¸ÂA ªi\-_gl\fÃí +SQt'~nu¼ï, + +endstream +endobj +200 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +202 0 obj +<< +/Length 2678 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* ¡PÈ ´b7 ¨"m@b4áÂ4 + 1¤Øe'M¦QIPÕG#I)pÐU@eBë`©EPT4Nb±Øu20Bào4SèoÆ ÇSa°[9r&@s:²&|¶`èhĬÆSu¨Ê.¶Ûà¤jL&tª®ã Æ88V #<ÌsÜÜ.[ø%Úñ(½ßð8<.Æãò: nRu1§,N¿H 1òF"f7èt0Ä7££,ØxàÚ3d³pHè¯(\ +[²ÔOCÔö>ݶ �ÅCãê1DÃÉC¬ëË¥:Pbºòå,"|7,«8¸Ll¸·Ê`¢$½+òf弯`ÌÊ<{ASfÜ-Ëz¹©¡«¦Jsä¯a^9+ðî&ã"Ù2·në8Âj¿0[ºÄ4ð8Æ4¶C+4HËE°ÌcÒþ ÑÂ5Ä#;¬ëÀ#R4P Ñ �ÎX¬Ã1ðÊÉs<s(JQüã9ή\ï<ÏmÒ ?. ¤ÎJê¿,pôDı¯Ú14c¥1VUÏÃ:7í]^6#8æVHØnpn_2úx/b!¢bxÉP+¶üK²/ä5£u.þÝxAâ¤'¢¨@lXÍx5È2Qá ,5HèËÃñ¤¼K7µøñ`æ9ÝÙ5Pø`Çtv¡´§ `22ÈòLh &ÇcÛRºÃ,°Ü>0ÖA6¯$ô+ _ë `Ãxè¿ËLÊOÌÈÝ)ÙÞzã_wêöä¤"" ò®ÖU>cIU±£pÊ;ÕíPü²ÐÎ5ÓÔfÅUº=`Æ 0ÉH£Ã:mÆp*èæy gò±9Ûk¦4-PÜÖew #? +ö4þ#×Ý#¨ÑÍ éÑ?©ë55Ìù{vj*R¯¢=pÒøCºvæ,1ÀÞ24DZ0:§ÂXóGj)ʪmÅVO$¬90\åZÏn$Ù2 �ZB¡nª®wQ_»ùB!P°ná`$ 0¨OÊ0¹wà ÛÁxaÍ»¸Ò8/\Ŭó àcã Þ3§i{IZ°ÚT`iA.<¦ÁÇYrì �ã²< �Ì9Ím>,ô´[p !£ÖPk @©xÊ6ß9Wå¬2GÅ®ÞX_KñÀ=åÊ\?, ²XX`39Ò4æyf-%¥´ÐÞ®ªôÒºÒÎÒz«@-$lg1ú87õüÜ¡ñËa´8<E\Ä̪4>¦Q4y¬Ø±ó2+ºô> Pv1!_9ß0Ü´%`nl HDA¤Ô5_;u~ò Á°<Ãvrþ(Ð_£+ +è7àÆ?Ig='¥1|;£'K¡ÉM[1ÒeHJdBxP¡9ÐSº{J-$Æ%4êÌt-pf¤ �jº&z±=U±V{IùFk©8òÅ*ÌyO@¨¬*^O!É<ÉìvB¹±GÏ !ÿ©3.jZG¨ÖRƺ]58@âU<êþÂ;u²3ÂÊK;^Cym)*Ò¶ÀCÊ +ZÕ-d·8×%9MjÇ!erít³ 2Ûm^,ýºIñg$É0 ý;ë^×ÊÊ-CïpÓzÈf3²°ú*¾x L°¦$8E`CLôzÞª½Z¡¨¡OÃö¹dR1Ý= Õ!,Íq¡9¤:¬\n·5 º]¾3k.÷rK[Å´ua5àf´Ö¬«©³;vÚîJO#kðÌ}$á �Ik¦6;vw© _sÕ]ÏÉLA¤ùE±û£0ì°_ì ¤P2_ñBÂú|m$^²Æ{+¥¡ÃxvÍ£LOÕþ!^9^\´ï³¨°@Õìf9ÕæöáÊm>?·¹·^<²Éy5Þ;å#ÐþQ4ÆF +RõÎ,+ÁªÍ1)µfüð#I(Ê»àZ|©fÉYH©!Yô±~Ëér áÂÕEtjÇY¶§_üjt¦dð +CbnS8¢sÅôô«ÝXeÊYµ=¹pÆäÑ{£|ºS]9z"cë·$ÆÈª¿Xd¤6¶[ùA!رpÈÙ[Qzä2°q-C|'mÐÝ¢3åÑ¢Æî«û»vvðÎa~Ó|ò ¾ §ûñpYmÿÀtÙà;ðÇg;á¶óÞ#°.¨âÍ«Uñ]«¸áfÖ&+Ø^BYv·¼0àÍö8tÂ{lüòÔ£Ëúü!Ü+*£.gÕ8>êú+¬ðÌÏÄ ýüN-Ë7nøÂ`U +a$+H fÁ¤Kß=ô¼D·¼Äì§Øºz«¥.èÃ@ߤºòâE-º¨¼_:-XÊäIc¯¼þ®â§öUÙÖ´È=§$¾ÜÈïpwüxðlØÞ¹å]*÷aìô× ê|ßpYAõM%ëªàÆzÏaÛðêâJäV/÷(@ËFÝ@óªlÀ² n4ÀÈtì,iF°È «Æÿì±I*òâü`P¯¥Q¤ÄÍ>7lj.Ta«Z;/ìk¸:MXúJ«ì0`À ¤d`¤*vÞ4Ð,:NDØüB²c4pÍ4ç.çÍ*Ë*Ò`n§49ÐüÏÒÓêÛ +Zëi.G"%é<"b'mì(Z@%¤À¨$Âù úݤ#`f'M@P +Fê=e2ëk|"Ħ"¢ !B8I<§Pè$¤ª+%@@\KÆp. Å`ÕKº·Â6 `#ÍJæ¾F4~d>=~¾'nzàãÜ@EºCäF&è"@PGª4À"L:´ | " +endstream +endobj +203 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +206 0 obj +<< +/Length 2387 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT C Ñ<l0 ÅèÞDIPN7£¡IPÕF#Hé0ÐPÈ\3bzÈÂ3%Ã)Öo>* '1 Ân2¢M +£5i=`-½]®õãió³A#qæVë¼ÞÆp¹°*pn°X³±Øi2pàa9 &3©³, ²y¾E,JeAÈ æÈRa¨E¦ãÞnÂNÆ#!AÈÊt:·¾¯aLöL¸sI¸ÎÅc¢)hxj¹)p¤²ÌÂ\»+ PPÚ¨Ê,«: +#)ZØ£jÚæÄ r¸Èâ¸*D+!£V*/ Àfphõ!b£ä7P´-Pò"K,ñHjÐ\5*ÓP¯¼ð¼2´CªPÄHIÄñLpÁ´fË!¢¹/ñ¼rÇ`rC(Ìõ@Ê÷<,CrLÅ'Äa!( ÒØ*A´ç830é ,t¼ÐÃs>ÌÈJG2Sb©,3!¢GOÆÁÄðüÀP)¡Jz:!¨P$3Û¬ÅWÓàSBï#Nò!òØl¸Ç¡=È Ì ÀÉSÑHÌLT!ÅZ*S4ç »"Ï3ئ<¶æÁÀlz G- SIÊH@j-Ó]èÓÂ);Z +¢HêW c¢7æ1:v>Ä@àRËõ-Ñ1]·e×]ò²#¸ã{ε³%~ %1CHàó Ø,á2¾+Ò°j^Ja¡ PÀשëh Ñ Ñ#jæ*2Ôíf¼Wo~VÄä9JeÙ³Qt Ó/0|ñ<`@9½ì#ÅèÚÙA {ªÞ#àÛcTjõÛÈØnF{l¾îA l¨R×´3*é,ás;ÒÓ¾gaªcÀ$ëÃ2¯Ír|!C~9/ÒÅÈñ§åoCò\ ÍË1l6YE:¼ãϱ}FêôÝGT4¼íÓ`ÁBÀÔã` ;XJô¬"V{RiÆ\ÈtìPR.¼1saÈÃÎuñ7ÆjªY«8M`Ô"f¶VÞ3A2 Í<£õ|`Ï-ߦ£ a¥U`àùpþÓÝAÉ|È>*åßstsOÉÏ:Dâßç8oìóÒåLÌ:0Æ¢â sÃØN\áJj+ÐAUf½aV¦EÄzÒ +CH°M½ÃØ~Eb +! V)´bвúR>ôþ TLPª2¨tÓäsR]ªÉ0bQ>S©nMÇFeDxUdmU»DuåBµÇЧ°¾lÊõh-"ÚµdvÊhÕ¾ +\kÌuÓÓ<. I¥ÉyO È8E+òC'¥vÀ{`.¤¤kqmBù2W@F 'tMy³6Ù5¢g#>Ææbs0T Jñ(zØ-ÀÉÈå>º)M£6Òd ª>]I yò)1üºµÕðØKcQöÄ|ÚÐlÃpTZm8LÞi;-d¸WfVëÕ'ñÄÃÏ*«ðËFÒM×F~µ¾Ç0ûÎE1T|2è +¹a û°Q àbëý;´é³CÚ«p ¢cHÕÒ^åxh8AIJFMaÏÑv¬ ТA«è>Ód¬Íi8ôVêm\-r Üõè%]%JÐÕëPzµñå0ÝÖ2êvT[æ{pA@,=IìxÓa+ü`²ùt£` æKl)uIO©FÀ)»¯1½~È3*ÕÁÖVr+«6a7£xès¦,3$JÈpN[vX¬LѤ4¨«dSKzñæ <CPÅòÎrÀ4ãÃ{¨µ¹6vÇjM<Qó# ù®ÄÒ-ðÔCsâz)ÕÞÔöSù%Hz¹K¡ å+^¸ùÃÆØÞc~«7I¹(GlÝÿªØÙlÛk¿+¹¨m J7 âÃîq^àØ4P:º +»d)Ï +AH' ,'T.3ÊQ h^O-z£¬©"R$·Qò°Ì¿oÑÊÖÖY.*-OIuU'Õ¼#Kg¾´R®~§¹[+ÔPÊ#7ß=y5ò)¥ë'I·5ònªø +¬êa +&Z* Kh`ä§ïåèFàÞj#ú*1ËRÌb¥Ü5stΰ¹§vuÙ9!w&°cm&Ñ%J~" ü¿Ø×Vzv§·|r1[RËßøÑ*(.ÑÈ¢`Þn AÔ3e r9Äêçks¤/+wdrJ8°0»ÕXñöÐö«Eôâ&å¿É¥ÚP@æÚÔGQýHl[z;Tâô* �Ìb°^{UéÍÕdªçõêÎZ´öñ=³«¹yíïz9ØðÇñi×¢ÅW>¢xRmÓw2GD~jD/ùòx×2D|NH1 Êy_ªf µyFñ¥»´¼¹êbÎ0rï¢Õ4ý¥ÎwÑ=4G8}ù1íßò³-`)7 ߺ{ßG;þèh³¾éè\ ¾Nèâ,xOÀènèîwip¾¤LñÌmÆ*%ÏÖ+Ƕýç¾Íì~d¨t@Âf)¼ +endstream +endobj +207 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +209 0 obj +<< +/Length 2642 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´c$Ѹ¸b4Ѿ¥3+3pTäÚe6ÎG ¦c1åm· Òñp;MÁx7póó©ÌÊd'ã~N~s:Z¹FlÉ}0Ûh´pPʺ1Ð¥°Ut`0¥Í5²ñ Þd¦äo6ç3fl]ÎÛJªAc +¥ÃAPúR¬¦Òäèe9y|ÚT/¥DºõÊöÆÃcOÎÏß»ÎS§ð8A �K°RÑ©H\J« +[X6ICp7Ì+½ ó �ñ9(:(#Ú:È^¨ÁʪF¢¢LÙÆ¨Ù'!pªiã!@¤2¨ä7<0DTò© õ"²Ø@ Áj^GÏc^÷6ak4,ȯnê7c Ò7Á `Y?/ÍÔ£)Ь.Á1 ;ô>Þ·î %¸ÁçNóÌ÷>ÉKË< ó»ñ@U!CCXÔ: +RÂØ, kn7-ØÈ4Ã8@»7ë¸ß:®ëØÃ>ÒV}7l0Ô ¢x.68ådÑcM(JR @$ÂH"â(¤) â]9±cÍ1'_±¤l±Àk~hDÓ HÑÜÔI¢-ƵJµ¼®ßrÒ/ËòôÁ1¶×sc³>DïU}K1kfX*® µÑå{"Èø&&@ßc['ÒPhÄ·SÃÁ[4N9,¢ÒæBäs`LD^Hv :K|b¤\#Á¬sgxfçøéT¹á@¾6'P1Ãì¬" `V +F³zªnB®¡ Ò3W@R|êûnºÙ¨k¨~I¼Æî# +¶¢cÈÜ7ÿª< +/d̾äm¹Íü)`]pp|Cv:[b` !b ¤Î(û·(Ü¿{±0:Àß|f¹§Gn9Ê uöʲïÝdìÁ@D< 4ôãE¬y<&ºP +aO(¯0¦è)'Æcû×è8a§X&¦ÈllzEõm®ÚÕ X3#j!3Ú¯Ms«N$ýD']«P P(°É ÇAr8áªÀ|¡ïx^ÁÒDIJÂÏüðÅòQX&ñb,bÜ\xdñÄ;Äô±N:£SçÈó +fân1à2ö¦j AfÔ¡¯ÐbOZ¾hY`;rüCÂ./ÁøbDê (èN° ¦/Æ ¤4Òj`Á};á¶HPA +Îú$9Ü¥ÄI*ÁD[|ï¦Z¾øe*[ä»5͸ðOõ>êT·$Ôþl2@µ§YèOâ8sÞæR&OÊDOZ +OÌ0-&ÉÁÈòèI]¿*¯ÀP(2.<Dzï2$Xb-JÐf ÍT°ÝýÂ,æì§3^&µz +&yÉÁ6TNÃ`i7±Æ@·bH â¦óiô*bÇfú92²W2©n o0sþ:§Û$at¨,$$&ßAAäAßP)ò~Z¤1Ô ´ñPvg'zÙ®©ö~)¹µ%ô~;ëBCR+[D "h<¿XNAj#5´4Vúy\V"îªf`¡åµpl-¿»!,µ%²~GÕÍbæ4yë>OHu,~äUC©ÉYÉÇDéT®uËÛGðÎÚQITL7Ê&[K{ÿ'´¡¢Öå\Ý¡®Ú!ÏÚ Óí¬° +lÅ"rlèd½¦Ä ë2mÔ¿0ô9Ïê CÐ)¸±ÙY2kSD³zÞçhëº&`´WÔMklíì¼Ð<G0ñ1¿& +ý¬µ§X04à£2ZðÓÀ²[ÊVkè²ÀÁ×;ÅöØ¿ó¥~nF5A¼,0ý´bJsIË¡HE(ÀûÞÁdOƺ^U7TuÐs*jGôfX½:`Ú³=2W_$C^UèÁ9à 4¸PPxAkP* B´¢özIG.bñý4 +yC-@LÜöª@d¿A³ªr»$¤é4l2HègjÆ,O«"8ã¹T±<¡w Pâ^B05ÔÜL Ñ2Z[»Þ,^jï^+ÍzÐ;L£î}Ð-øå$aºL*'-°ãâìãCb¬^fæim|Í¢²Fت7lò+u6¸@üßïuRj²wórßæø°£öÒÃ+M)Í<»*½+¿³CÀ:Ü 0£Pd ÉD¦Ô· ²ÔS÷detưä2Ò@omõ# �\l1Á5ÀA{>@ÖjŦsnuÏÄ7sÞh% §h>Ìæ4í]»¹wiZ1ÜÓÊó_-#0ðnxNï@Áô°Ö¶÷Ïa#Q¾Aà< åÐÇ@§BRj2¹à¦ t +yõäîXʤ$<wWÌÓ¯ N°±Sy r¹¹Îmµ¹cm.óÓ*é>?üÿ.4&¨TÚ' ÍU2|¤;!ÃüÒ«/Ëd8qåÌ©ÁíXà¶âà¥ÕVXÏöeb±ÌÌÆ:#&¯´lmì£/ñªK"6 n#ÊmÖéÌ[e.ò?eÖ]¥Þ\Öö#²¸ìÄØ2ZD0Ï*Ûï9° &-f¦ï' òãó%ÆýP:B«jRBS¤ý§té¤*FÐjm¤Ì¥ + PóïBô`æú§zb6 a2È,Xβ+ j=0r¥°¸ODôP Í �iO@XÊÛÏü ÄÚè3Ðdí¢Ð÷P +®MQ $Fë:`ÐÄ +íò ¹Ð× +EÎÙ* ç°¿éi'ßpÌlôÖ¢~¶"øüª²«cX @¼ +endstream +endobj +210 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +212 0 obj +<< +/Length 2236 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5'EÒ¡* ¡AhÄn. aBÚxÄi1*) pÂ3N±°Üf0¦sI¸@o3fS¡ÒÚgFóhÅk¶®öó0èh2ÞM&Ã(¸SD£¢tÑpÐq#¬ÍÅ%Ñj¶[®+¥ØÝx½_3©Èäe7yÌÓv7Û¸lF+ÈA +¬ÐË;g´à4Wש¾áñ;&y3bñ¸ú-¥CACØÂù%ÔÚ9AeêÒ¤%ë̳C1ÄvòaP).hÜ9»¡o,"=Áª,¡rD%¡¼ý>áf¬&ÀPP*7xé°Â6¬Jà" Ôï<b r.«@PZ®CÊúã`ع£X¸Lk ¢2 *¼è\!«¬ÂÁ"?\JHæë±Ct^Â4 X¼¯nz¿´,Në:MðË9 P7ÐA �4 #Ñ66hè2SLÖ7 ã¸@0#hÊ2Ñ¢HÍ©Pjü²p¥Kò$>*Ls4>èÜ1·pî0Íu°æ:cÊ9u¨Ù4Ãø812ñ>´nmÀ£ÝFLÔ 0&¢ø) +Bx¤ÇFÎóÁ,<o,ºôÝÁÚ÷µæ>°èhüÖÛúÊ¿ápÞ9A«+ÇpÑ "@o +Âá6(7ÌCW¬@Ü»wL«uÇoSÍÞ]ä÷`ÁèûH¦2°'âà.@½Øl Q©¡ QH6îáqÔå/ в~=ÁË1+²4MÙ¨dbáû=å§êcßQr¬tøb´I#xàØTPA§á¾`¤jP®! z38RuiÈ&Mw¡7ç§áËCm¹è3n´ +cÍ(86Ú\+r VÂz¦ÄfV5WkÁE»o¡ó½Òx(b¨)3´'4ÔçGz.Ð7,¢Ê|£ÃË^;O5(!¬EÔ_ãÍ¿};Õ9%1CHá\ï°_Æíw,PbÜÙXc¨ ľª_ùnṯ·ñÍOJ09ÿ.Ä´éê@C¤ÁY|Uº¹R@:3ªyoy°8)tü¥Ó[Ýoà4óªI=1?Ðcu +ÁPPôcÔSPqÚ?ô´LB^&/Î +b æÝEfÞÊkWCÈ|_Kg hÁigKeTÄÈ*«Gí½Ø¨ÃWdð¯:§b¤w<Eqõ!þQO{Op2Èwk" ¢ôÉBR|à n ;hÒR0ka0u)L* Ø"6GÊÄ¢H²d)P¢BLÅÝAÖJÕUD¿²öKÌ9HN&(AB{ á[z6 +l¼°p@kà Õ+a¦³rÉÀiN_ øfÀEA|+ );É£8^DäÓt@^ßÊRó±bO#"pÊÛ]¤â~Ïúê6hÓmÎ&ÂuhZ¢ÜÄζ;tð¢ÏvEO/tÀH' �»Ý72ÞiÓ´Á553A<#ð¦Åá'Ð B¡;£5K°b1fÜ< �y46Ãl©¥ÙMF§d塤v>ªÅfb+j»6 íKå ^ÔoX&µ5¨sa_NÕgV1{+[CyÒR!ÎUøF!6κ£E±V2zÏx·TêW«+"PBøN¨4}00T¡²{µÖsYÓCè-¢®Zrßjx¶RT/9¬Ñ¬a ¤Â&úUÝ8UV:ØÑ©H ++ñWsºSv²hpöµJÛ[Þí¸T¶$«ÛÊs=©Ù'g �ªUj±V®-Çófm×yCöº6×»`®ùR5ÞÍ^;+y5³w¬4ÞÓ{~T2¼½ø2Åß(üTýY®³ÖëæÅ§VêàÃd²OxNܯ § �ÄVFìâYÛ^®öLR¬KÉe±oÆi¯Ú +~ñÝñ±µ9àIM9/þEÀ²¶dçº[ÔK¼"×#JèU¢°:ÝeªR¸Zá® °Â`U +a$+QðfÎ!6·M&¼ �YKó¾0³êõgÌlvÖÓÄnùèKìÇoÜ2´yiBý.¦rÅwMÌÓ¾í\»QÜ.l "^û5_MÓÀfÏPEkZô×þíÈ«PwD µ5&THÓoI',ê!Â;=#ÁÞ e j{/Dssz7uÛW÷mc'0ÂNè,7a¸2PuO O;ë»ÞSÁÌ¡£5@îh¼ô=(´+m e6§x´VÊà4V¯/äª_Nf+7±õôà$¼%¼¸ä\Я¢n.7åB;ôìK¸øtµ?DÁlÆõÍ=»õ +±OpÛ§5öAÛ'ieOnBÌ©Ëí_OÂwFxýC?6¡Í¡VU9¯Vë#q8ßwËSðÊøNyáWoä +endstream +endobj +213 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +215 0 obj +<< +/Length 2972 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP ̧eÒ¡* B¡A'¦ÐbáÄxn1£ÅI0(a/Lçäc<¦Fù°ï< +B Òt2h`Q +£¸Ìn.ÀÐ#1 G#RapÐPÄc`hsÚ¬?7`£²YpÀia*MS.~Î-Ïíe3ɸÞp9Nwª.bIJÎE¢ZPB.XFÃ=F¹5Ù + +¤qPAm;®æRà F$¢AÒl23y¸ætæ T!£0Ì2Bè9>NÛº èÚ!+Àæ.!ØR* LÃ4¥³¬û\ЪòÂÒ± lé Áë«Ë`Ù63 ´1kX2cÄ8Kêâ/3Í¡ÈÈÎr²é0*£YW м§ÁÌ3ÈLΪ#µ+¶-Ïðò¼2Ò8©£ªr2Ê`¶iøÌ:ÃzúÆ9 +x§ãà2cHÌ4¯èÝP @7Á �}`ÑÁm Rï]-/h dE!25¡Ù+íK,r°Ë-)¡EBÐãp@9£áU`Þ1 T¥»W ð0²2ØÌLÜE!Â>Y3KbÖ %@@ÏO6érÚÁ°h%×vuxâÎëÃbMokßgÎN4½5Aª=^¶=ñeÐ@át5Bð9>o¨è0/µö#pÈøUÃ}k7ã-\¸L¯-CâA¾-©>@Ùf3:NÌâ6¨äEõd%÷ÊäãR2åa ÛyÒ:gTvuaª¨ìkmyOs6C5Y!¦}§5EUVZP1@0YÜÙhÝæ4fgÔpL0ÃW'¨QY½7YõKÑô)ÿ/\bõÝÕ_ Ñ=¾Êe{ÍxV®aÒû>Ûλ(äS\Ôç!czÒ^åéûôÑäÙ=Ý Ï´ÒT¥-LrÚ66Ó¹eAu]K½^7(ëét»Âq~nÕkuü5V«\cSqêÍÒ%^=u)r,ö®ÂJ¡uáØ0Àê³Õ ai#<8aʺcw ýÞÓ¿N¯D°hÓÕ+ζöÙ3(eJyµ¤Ï¯-)i¨d|µQ%íqÜ&t¢àÎÈw=ᱫÐhÝñBooÉܽÆA@e)÷ c\Î¥¡´suFEÉ»pÛ\[gjèTÌá£Cå<¢"i#Xl®¸ ¨.hÑ1¤Ú#ö]OA¤ÙsNyÑ(\Á¤ø±¡¡jppâ¸QEZ©F-ÆÑÀsPa°ùp@dC¤|«=ó¾6æU,/ñ:ø%lÎ2͵ãñ-¥ÀsAÖ^6¥^¯@PT2°ÍÞK0&;9*³ó`»<ç¤" ðO +QùçXMHD �¥G9" $ 19ª³8$â_Ç1$ÊF°3Et-ä&¨L}Zô HSIAAªR#=À¢ú¬-avÍ [%Ã1h.¨M7 +äêIôu%!d$;!:OÄæR)Zz*$©ZÇ©Q%å5#eÌô¡!ÀÞÃ(K*@¼0PWQ~ 4×Ôàn°11È e±« "P)I¯3ôÖ××yYM:ðß QÚÊE"õ,Ñêí%,ï$À8 õ²·W ØíÂBÓö@É c©z%©ÍàèHË+M e0UÜ#PPÑÊ;Z¶Ñ´ijl4)b¥5ÁJY¨ðz@BÓ¥&¶u¶·× +ý´ )`æ?j0Ñ}@«§åøe>¸L6hÍÄu÷V¾*¥ÔÊ¢U± +AÖáaPÉzÝ �õ#,o\45Ò¬±½èvÕ£Áڳϰ£ Qø!ÀûJ£Å~ �çYíl¹ÒðCºWZÐT6(£BÏÇÔ2Ud5Jî9¢±ôûÈ¥ º7IQÕ0C÷îïêt3åPØÜc elØ2î ÆÜ¢'FQÞ| ¾Â¨Ca) 5vܸrUÂ^2̬뢬² +AjSq3 ÎW$Ä9s³Æz³BêÉZ);CaehYAxM¬TÕ@Ýñ]Å ]¡û IËî²âèYs±iÝ=tü2ÔqPã¥FÐwv¥QËÁ¢À70ùß �®ãY5r½|d¸U¦ù×\« )®Áäù[0¤Ãw5âpW£ +¿0Dx³cðIf]:m«·h%Ê "êÊYÉS6æäÝÓ~pvTÐÖïMÄÍT¦ß³0Zëal«]<¼^ûÛ»{oíÁò @! 0¨¸z +aÔ1[~8:õ¾A°8Iu°¥ÂjäMxpp²ÚV¶<{vëuo-ö(ì ±ö^ÏÚ{_mñ}ÄÿwNí7;Êà8¢xqÁ»v:tÓY~Tî§DºèáyîåI´{Û§TÔTWɤJ.ìì»éû{ +a1,ùu,^<5ø0ªý¬Äðá©ùôVD2t¯R:ëp¥h«[Ô´mSlÒÏ+²ü³\35¸SåÀ¹E?È0v|xg©i¼Q ØâÀÈä¦"5åÞhFúEÊÄÊ`æhF0÷ì>Ci¦( NØíÏêºÏ+à;æð{¨tmô?g&rÉhcî<@ÜÇç å&ÂçÈ@Ülç6Âoä- +ìn´7 +ìg¨FjÐüHÖvPwÌ:ø �ɰ®ÚÀêáèrlÌn4 È"Pzhffè0FÅ0ËïæBætn@S'd �xçt¤Ï|Åp¤xlLñE[¬Z0FÎ5e÷ g¾ì#El¦|Uææ]>ßB^¨MlRÌ Ò`Ð>mbS®àñ + ?Ô É¬TE Àª ÍÈfï®ÿowÆ Q"" ¸ÄgÏ¿,V¿fì&0 "ðN/°LÌÐë¥,ªQÚ/ÞYì!q· +0*3v¯Ceê~¤×o"íÌTcFkn! +LÆÐTeð\puðbÇÅÈ\Ȫ$`\¡+L`êg¦)HpÿL0ÁÐvUëÏäuGDtMÑabnÅ屨Kæ¥n!°°´îñUiP|B8÷\øoô,m&ÖuðáIs&,ÈÅ0ÂV`ÐVlÙl<àZâi$a ¬S*%ïg$ñÂÉ2½fk,Ì$hqP±j o Ú( æv?±±y¥L +endstream +endobj +216 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 217 0 R +>> +>> +endobj +219 0 obj +<< +/Length 2477 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5N¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ìr3çtÁÄPR2§#qÌSC¢ÁHÒ:L4T0êµ=RWe£Ä©3 + +(RT5QÔÈL.ýG5¡i·Lä3Ât2Ì§à ¸)ËæoWÌô¬4Óäú`P¶Á¤êc©¸Æt4Í mÊèsJE"yH¾S*ÈdRLX 4½OG`æu1̧30Ø.ÎCÜÒ9¯8Òö:«ê.Ê9CxäÃØ:¡sr¡ÂÒ¬Aj6Jű«"ɲ°ºôÎ/ªZ8Ñ4#9(#R3ãÊ76M£lÜ3Óx¥Aª ¤n1Ƭæ¹î§ºî˶î»ïÆòÀOTö{âù¾£«îü¿p[ý �RÎȨ"sò¨« +xlâ:Å+ëL,Ë@hµÃpA˲ñ!O󢨰¨@l¡òBII¡@éO2 +ô¤7 U@!*m«°h°0Ôc)ìzÉH Á(CX7¾jà3-a QÇo4¢SjÿQWIdÔÁØItiUÕ-YOvðc$ª)Ú$u@erUth`ôzÊàa9(ض»a®öà" `PdÔèb°#¡¬88ÁrÖ 0T LÕi>×UÅnª×¨o#c7Jb²6])#pÞ8oþ"¼ Ò=pTÅR§á²Áb«Ùv x#ÏbÙ¶¢@"! �nÏB6VÏåºn_B)á¨hØíXùØeHæ1CHàè:Z=»ZÓìÁq°ÒB¬QjôfÇ5C-x3hUä,F¯ÝöÁ±oQþû¥7ËHqÙ8µ×c_Áά{Ì:c&±;NºÕ?ã ä×ÊA L;ÆØ<Ì1ÐÆô#(È_'¥ÍE}uj¢Â;%_Á ÐÔ{¶ð]Yºi*t(d_Á`cf$à^¸mlAÈü"ú¨-Wà¸àô<Ï FK©ÆÖlÝÜVÅ\±?KÌ]4`r + |`ç`Ò zA¡FÂyêzOpд©ïQ0ÿÄ& +|W}ìX¸Osa6ü?DG:1D¡:¨.ü"û^q©üÂPQ ß$)[Ëì³?xD«41!pÒA ß-,Ëá²6a³$桳6¾Â`A<§/À|oЩ[¸&ZÌ( 8¥ñÒ-HyJ¬]_[ÎuPw@B 6C@ɪ$µÕ$6 '©1-¤Ê<o Iiѳ¶yì=²;§Xï ñ@¦~ÑüMhõDÞStAÈA !IRÊ¥c*2½ÂK#¾)°5¤åám +]:¶ëaTÄiÎ}¨Q2ÐWC¦v¦©ÛÎD|mãÒµS²³Àhc¤$6¼ìæ +>K]L ú +º= xö`ÂC`s?N!Iý/ßRs¨©x¥=O(_'8e@gòªÅå6qiAòfµwKÈDà0 yZ@ßZìØÊ½$tiÿh§J!øy8ìmVoôU¥"É<§q}XÙ_ký{R"=5g!óê~QT f³æÎ$# ÝAÕ *lº+ÂÌâ&jþ¯4T³(FVjÏZ+MjÔE²|æ {¤-1ÏLf À*µWļU¬spKدj'.JÃI¬êç¯2^Â(n¡¶-` +a¼^a¡åø1BÅÁs*¤neö>ÈYed¶ÕÜåB Å$«+élÍØfHÌöèÐ#Fó Î]ɨîùRWµ´×õù¿næN¶ðy W;¡ô7vòÛAonMÑþ ê2È)d@ƲvPAmí¾·òÍÃ=ÇÊSD¡-ô_AÉ9G,ó.Ìè¤M=~¶b]2ê«M¨öK¦dt¶ïü_ Úîiç EZõGûm3ä +øÖæÇöQÝûAf¾ ½+vNÄI¯L3½W¯`ÞØt{¯|Ê£·¬ù,Øe|öÅõ¾Ó,ªïÅto3 Ài©Ñâ¤H4¢Q +ò`¤×Wd90ÒHÎ;mQ#PROC¸)a¡£qÓ·Á@cÜ» tÃ)× ¥ òÛÆ]çµÜHÝ/I4º¨¢6 9hzZNÒ,lÑרkd<;¯J¼àñ"Q Î]m\öl®ä¸m=?a5ÍÞ5]Ê[ �Î'¦mkKéÙg¥s=B nòæ%Ú5Ùè\w9tLª3lçöòb¬ p$A¸~Ñ®ÌòrØ¥ø´£´ÐåÍäñÓ �0mTIhAÊ]¥w· 1w¨/D&k´I¸4êëæG+åãÜÈ"±ùÙã]zpt²Ñ:ÀF¸Ï Ô|¿°´7ÓcˬòªØ®½³ç ªÇZ¬$µ¢Ùç]F×Uá{+³ _Oæ{ÂkÛHÒì¶âá/èóHÎgP` ËNxÕØÔUIª´Ù÷]CË,'ïÕn9ÐÚ#ã~.Ôù.$ôêxJÉäK*ÀäÐCþ2¤¿ )TËÅlÌW0CKâë&8Ye,¨¯Â7k¶"æÎ n-þfÏ2+ËJùÄþúþÌbpÂ\¼GÄ0<¾¤8º$º`ÊZ<ZŰ9˰×läÅÊF»ÅøC4+,?åÚ¼ÄTÀÀ +endstream +endobj +220 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +222 0 obj +<< +/Length 3137 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ÆIÓ¨1pâ<7ÃÆQâ¤0&s@Î#<§FÎQ:NG±Ùq-¦réu»E4Z8( FQËÜf7b¨Á9`aTH#R¡pÐPÄcajtÚ¬?$7bã²YpÀib*MS0Ø\1´e-e3ɸÞp9Nx:6IKÒE¢ZB.Xà J»5Ý + òqõn¸\®kpPH%K"A¬Êy¼ +2P¤cЦ:B[îüëÿ �À@ñ¼¡ IXZÓáÃ**#Äò<ËÚú¿½+Üø>O£ìüAïÜ ¸) �2â ò8°CøÿGl à R¨I$>D1J¯¥íÆì ÂÐÄ54 Ò´í³R¨Í«ZȤ²Fͼ°6ÍÃtÞ".Ãb Ê9cÒ8HÞ79*Ó!-:h0ë+NÐbÈ+m¤¸ +[½½+÷CJÍl`©è\¶Oéøâ¸ÑT8@: +Î3¹C ä0Ñ´x@"YÄ0vÂ72:£Ü9@dX¼Ñm»ÛãxÍn°(è ¨NÍLHÚÔ²øQ �W ¢3KJJ¨hÊ¥¼º77ÂDÁr`Û³FwàXf7¶R$lÁ~GO¾+( ØÖHö|TÍ)LÃc«òä9A �¸b)rØ[>_9Àµc¹¢r1HÙj *pQu[ºÕÃaض=7Yvmh(Ýc! �4 û@Ñie Ò7rxW±yc×Äý>·þ-Ö #N`ü F!Q`÷2áÅñùÁTW[V<®Ä iÇirï=§©i»vÚöÍ·_â+lþóòóZÔPW9¦d/ôÙSI ª¨j±hÚEluµ'^ öA@Ä:Ã2ä¼îÅ » Ã=kÿt¸À0Óô÷6O½u (pª«<vàÓBÏ5ü¢ ¬"Àô¢ DO]ǼLò« +µÃºvø RÁ1u1×ö6÷#]-kD:-ƾÐ"3@ 1ÌC*ÕMµß¹h +l«þNI/àóáTq"4ðfÝ9Wá½Þ°t æej¿5Øs^ù`åPÀ@¾Yª'8öZiºÆâ,¹2x ÉøI]nùvÆ¢vÃÉz&#ýØÎ m*Ȩªâ´XDÐ40³èÎÎS@hIà'ªÒ^Ä,¼0Èú¨L °P¥©?g¬üðàßJüV·1IúÓm!µF6ØÂ¢Iy¡ ¸£| «Æ©v9òÜá$eBA äx ¦ÅÈÇÔ �¹é!#DFoì9¨© �¢¢÷²¬4H`ìàc7°=F)4æ©çr¦ç%@äo,ÊPn¾¤ä-4@à%<éy2WF¾qp-Èú7Fìû$M½¸®%оáË&\mâ£BxO}O'ë1GðP`l\íh6ðÉ¢ �/"Øaá¢ËÑU¨ë "¤sA_ÉT,̺D¸ôKÁ³!Ô¦ �FÉð¤B8_ +aißÔîcÌ1¡TͧðjW#èf`+¿0ÈúܮR£Ö¸Î¤¦£Á:/QÒ¸x`xo «[GC½5¢aQu$Þ$qÕNá9£:-/ulÐ3ØnCÒÂkJç"½(ìÝ_aé'G4×n3JVYÇÈc¢lH$ÙzC9Æ*"HYôÁ´¤ÌÁ}:Õ8]-ÕV7jøÊ¹r'm÷lµj[!iq ö¹õlÝ2jqIÅ7XÌÙ% ì°¢5ro^"%°¿;l?>mËù:¥@ë)³®vA#iåQ_5Nz½ÆÕaP:¤Åvõm-À?³AT!0ÂyÌòÿ-ÈpÃa:È#[o-Y %¥ñz¡,tpÎ: 9¡TwÉÈkeÇoóRÌy3æxºÃNm@×8g,é±LÅÕ¦ì`I¡A"llY1À4Ç@ " åñý¸ Ùêde;R¥çɵùås¼ãÅE7Q¬^kµC~r:´Û¥õ uʯoñM|X 0y ï¹Õõ±vÈÔ-ò;¢H b1ð£iV µ(9ëxÂa¯P ÖVýNÜâBrb` ,ÑI9C,4i3 (ϰ F¤ÙéÓZr«°Óï,ÇwmqD¡ÀÓ5îÌ»µûJië9 Â|³áüGñP ±pF!H(f0uÜáÓ«$;ðFÍN³hr#²G +æÔ +PsÕ¢RQÊC¡ëµ7®ïäDÀßêÅðäUÍk6:ç@R«_.ËÚ_]Oq@ÉźÆÊtiâ ÇÍmYÓ±÷¸¼]HdY +ù¯¬@ìÚ dÀmlî16ðCu:>+Eh¿CÒ´°ùüþ¾»cì¾mØ "çYXôULÎøÇÖöPÖ-¾k:ÑÄ[É4ì´Úg±5.ú@ÆØöJiÔ\ÇgvÎi)_ßLTn5wLrCã(ÇbÚ[ºnü¬ízé°,@dNÃPÞTg �~É~*V|ÖÏpòwÌðþ`fäÇ8áÎ ò®¬ó$0¤.4®¹'ü¡è{¯Ülm +`¿XP.öi¿íÎc2ýð>X+È$ª%íúò(ò6°ú`@òªòîÊt&"oÆ+ì²»jôÇjË¢ +@«®ÐxNÔÅÏì2EäcOÿm^vnv#fÖnMÒ,ïð!@b7Â/ L ðßHJåíJsoêÔÎÚ+.âàÎæá# Û0 ÊmMÐñ× ÛM~hãÉü£Ã +À ΢ÚâP²ÐóQh ®QI?$1pNn1ê¦~GÓ1âQ~Ó/0ìÏ5¨Å¢¤à! jÆnsÅ î<1#d,Q +ÞnJ´#.å 3<1þdÜæPÞ9è®;pÚ¯úá'ö868c8ãªD`ð1VSæç¢Lê0«±g �2÷Ŷ² �Ê ®Ê/$ÄH +kÀEÄ3 lVþ×NhóÑ»òÆòNìPåQfÇqORSDæ^ +ÒDËm mø"! +Õñm$1M +ÝFn +ÆYO.@Ú~e|mâüX)%qjýP²+& âOxXFr«¢æg ¸wOR¬hÐP ã§ +®L³2¶¸°brR]&ù ó¢=äøÃ'fúéû&ðkIxƺ[òù¶öxÜ(Üìðø²ò¼P0oTJ0èÆm³ àÆ s0³ ï¤ú +hj'º¶Ó9$&ð4@ÄX@ÄÀjeDó9F9¯¥4_S.jÜqgúkÕ&ËÃq`lùêûj{³Q1GìOv @ Àê ³¶f¹7¥¸Æ¿8:³ÈbÑÞ +endstream +endobj +223 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +226 0 obj +<< +/Length 2303 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ìr8çtÁÄPR2§#qÌSC¢ÁHÒ:L4T0ê°ÖÂ+²ÑÂ3¯ÚFTù¬PI3(ào4SÒsÍç#Ætf³IPÕF#S!0»ðÄf.ÈääL`ÂFTÈeÎd# u3nÒÐä\;]½êù¼Z¶.Ó!`Lr ©ÀÌu7kÍ&óp[rºjÄaLÃdγíFÒ´í Zà TÖ5Í3c*î¢7 Òú¡¡P[).#"ƸîHå¹®{¢é«®ì -£lÜ;êP´áÃÈ ÄÉ;Î ¦ÀPP÷¾#£æú¾ëê B«þî7 +CÀ*Jr Ë*¢¬)á°p°ë²,Ë@hµ·ËpÖ5k²ñ7qÓ¢¨Â¡°l Á«¯,kË Ï ÊJÔK²Ú¦Ëʸ@HÆ£ M´,à@9 ãæ®2Ö Êø³´0½CR¼öÁOÌ%@¡uâÑr4VæÞ2±°í66\Z袸ä4´vijÅ$aoZ Â)ºÍÏr7m[i»q½%<·®¢Ø©j³Øtüб½*@µÃÕM¬ç[ º©C¯"*Hxo@2ú~ßjÀ5¨ Ì «|)tÅ-Jª´ÒãxPà"@àTõH¦<Ãxà9´ø¤ñ ¯öø0xÞÃ*Ì¥1Ø P! âxsYu³mÛ·P;4 @/ÀT £(Û6" ®'B @)#ÐÊítKvKêxjávq3æõÙYèP"W#¶8IO¦ïpüúéÌ2~%Ó6¦Æ±UP*3JzÚNõâ¤Is¨ + ëØuå»[ò÷À-ÜÃN«5²!rÊH¯lù> �0HÈ0´mD*#µnm.<Ð4M#4¡@ßö'à +w×û èÛ·5cÌ&Cø á5 6ªp6$á µCÔr]axJõ;SSÏ)_j͵·±5ìAÉ~©¤´vBFÁ$H!(þ p!È0¿´mb b áó6q3ääIAäÑ ûõ[ÝüÁ²°@ÑÑ©'Ô1ÐÄC9Ñ4¦n5©°iH\Kv$ +àh¡y ¼7§ Pä%Ä!BJòZ¢É$éC(i R {áÐ7G°pu ±´ÒÅx½É¦>¯}ý×ûã*áI×TYs1L ,ªrÜ\Áuspδ¥èó©BÇz¹ë2ñ`ÙÄ8nPy5æÅïÁ7fÍñS#°e!gxÃ[¿^â@lñàiéÚ|¡õÉ4üÄöOúôMóP\âBHVeÎë47R6H3×gñ]ØîÌÆZËÒJ=72N5Q(¥9g-YiSeòåÂËÈH¡±ae¦ôABsU>ÈEÚ[M È´R§$Z² Ê=áSN<S@ЬjSs¨£ª T«r°ªÉ«El®Ñy\¿9æ°] ,Æþ]Õuî× +ÎZ±w-t^N£b\¬-qÙ%Ú×jè[a¹uÙkòì«®Û¸5øF×à6µ,qY%ô|æ®8J´NmF2¨3#î)Ã2EO°edÌ 2¥îÒa§Rèª*k+M¯1¬ò¶³æÐ%yhêúg9ôþÀIKVå°Ö¬Ââ²Å±¢ë[#Ú �7 +ݼ·°Rßi½¤ér±K²Ú¢]2 » ¢Ø,g$å .a%ÔÙT&}çtLfiÏ fuÄúÇÒGm+D÷¶w.*ð%xm «0hqíDóeèê\Þ³Ø{OrT½ðÎø_Þ}Rr䨏þàr1=+ºöàÄzþÁìuSùùª"VE3ÐÎ2j!îRo½ØÖb \<'Dr> My÷ìMñF)ÅYL÷ÍnVbWe©a#Ìx¹,Kó,;ÌK:bA `*ãêä¾vAxÙÉÉ<%¢XÌèÙRhP ²¾/À[Gt0ZºtôMTÐV-U¶cÓóE~ªLɼ]ò¤.Î=üôiDáB3%éºùNKløÆ«3Ï=Là1î?È0´Yö{ALþÈïVídAÏò ÁÅ»½;W¨1¢ÊÆ×ÎÑovÏFaÐR;Uä)&e¸04ÎË,uW®¸Ùji8r±ö|õ¶'$éS#Þ;¼ó,,Fq ìY ¢U̲+2KWP£ëa^Ñ»`ÕÉ*µZ«Õ³V¦¶¼q<>`z-!)jb~ÂìTò[÷ůo^ç;Ρ³×ÆÍ.«|{Ö8Øó¡}%ËOYò +70ZÈm8¶tÛnÉèi*¦Î ØíØÛÖ0Æ@1<lÊã2;rÙKoýA-].§OJahÂ)£ øû¸[.óAhm Ôíµ`ð1ýź~2ÕÚË[a}÷ÎßSé³e¿y9°#zoGÓ +endstream +endobj +227 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +229 0 obj +<< +/Length 1732 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ Äc/E*Tê 5 ÆCh ©&*¤Ð9)ã)å8f0§3ÈÒp:MæáM#I)pÐTZ%RÃ$"áDoT¯X,C zÍ9*¢ðûF¤©Ð^9TeIvRfNd# ¦t»å ÁpP\JK® Æs-\ÖÍͧó1ÔÜc¼ÞÄc °Òd0.b¦jXi;M¼Ònñ¼ñ@sÜ{Ìâè_>¿ ÍM;T µPP&£kx98N# Â9#hÊøHæò<ÏkߣÊÍ¯È ZÂáÀjªxb)pH[5éªoÃHäüòñxͯ»òÝÐB¥8ë +§¤ 8Öµ1' ïu-Bm$*Áh¡9 TÃë*³2«ðÜñLV7£`ؾ#kÞð£$²áÆÓä¡G¡pnpDÉ16ë=H0º§È¥4°Ï,)#Ó7P УLÁ1ÎÒ$ÌK¯U*>c£ºPhÅ`Ê2ñEo}?¿T|$¤ÍÍ22¢h©2¨!r°Á jÆ,¡LÏK8P´©áÚaP)Dã¨ä7oûl¡Êê¤àL[r#!pp+ó%T±2#¶2fö=Ï acxä9®ÀYbM +W¦S3«bÙ¶½·Î?k°8 »/^@:_Wà@#"`¦"¿N-ã1E÷ã¸þB:dkhdFwõCË¡lCT¬ áÕÛdÚ6Ò»vÞ·áNoå +às çît=èîÂõ¥_7ÜV* +B®©Òä+oÀöõ¶¨Ü7,[LËBÔ^w¨P"ãøõû͹Cn±X*´Æî7hQ4 Ã--ç\¦òêµÄ·.WÜU JÈËÝýkÒ®ä7c[|ËhhX/PƹìÙ6uױРNhæu5Û`2cxÈ2æÎG¹¶¢@êÃ*ø6¯äà?·æÿ Ý d°<ÚÀ ÓÁÀrHÓG`^B9#ÀÕμ¶óAB]®¶#Ô +½àdÐ0àn0E `(¬Ç0rÉ|#^ ±@A0* à2 Þ+yPªÂs&Ä]ÑN °1,¨Ò6 zd$è!ð1oá¼cÜ +±W �<éáKqp.Eл"ñ©õ0uÌXy¦V,§Ó8Oã2¢rl)z¸rª_tp5ÈJWìTä çø@ÄÑ i'lîõϰg=©"õA �k'ñ± =.[Bo#`IJÕNÐj¬é$3/Òí2lé.äD3ZEl]1£ä[27 +a/æß2ÚÐAL]$¤°èRzUJKqAyÉ9hl á5ÉÞ¬ ñ4Ë¹Ú ÒuNïÅÝ+Ú°<ÈÅcÅVR̤k<ñ&/:'U)¥t¶HDé$TâW$Òz+EÒç×cÐÉÅÒ¯eðÓT¨|ñ¥ôxÙ%I2ÍÌâŲġ´(5Ö@È%0Kitª @Mzqð93VõORéÉP)Ú((N4¶ÚRjå«¥[ÆÖ×cÖ°è\Ùó¬|Ì Ið`s=CO6EùÌ82piÆ¥¦OZ+EÕÄÌpi ë8cµiQq®>AÂWÜ´¬@¥Å,¢½i Á8JÚéÝJK®Q¢U×R]ÎX81j`;§xïªê£¼ñ<{É +_\V,qfµ½4z½«×{/l2½Ôz÷ß ×|ê×;êÁ+³³*$_Êq£õ~ðN<Àwÿ �«úŰCÁ,gÙvB +endstream +endobj +230 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +232 0 obj +<< +/Length 2306 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C N'Lãr8Ô<e*IAC pÒFT µÁ¿6N +fQLôÇm#QA¤ÞnLgWAR4ÃM¾za¹].××o9\13â0¤b3MØkÎê) +.ç1M +"ÀÁC(xÞ7ÅÃY×. ±¡#,Ì*(a)xn-- jd-qla35y. +¨S¡2:ºF6lëõ« Ìs2î1§¡ÈÂc:Lw}- "?v¢6|ÃqÀ¸n饯ä°;.Øf.ó.ÐcÈÜ7ÒÒ4ÎF¤¸è²$ùÃHóð¡°mhB³ +JÂ@$bx<o+Îô½kÀ¹ "p¦*"p"@Ò7c X A �Sâ©NCàù9O«âû¿)øhШ®Àk +q9ÐPfÐ(æ1CHà:1okNBî2Ch!6qXûDêÚ\&0 +@ÊL2 +#<Mä?!æ*DT<O#ÌôLtw1T°µU4¡s¬¤õ¶ìSK4´' �Í=X@Þ¨å$0à ÙQ}²¼0«¼¥p·$½$ #%FïKERBµ=S 6£U}²E6@Q)Ê£t®<Ô-}|P:>Ø©¤VD¨]£ÀÊ1£ Â1[òX& XÞáC"å2ôsg 6ø\ §ièÑãR¤Hà`·Øb)7ú]bãÂlE¤: @A¦`æjÍÑ ½«Ý£(ÝDÃHËuXEáy]÷ª {ÕadçV#d¬Ø$.XUOFÍ(Ú`¦¡z6~³»! �E2 Í{¿×î>ç?îÜ.% ·Å¼Üw 9JC64ì´±yÈ÷pð ã6t±p:®ë ºÕoºéi¬å×5ÂU©B£¶Ï#7wQÃØ:Ô~SmüÅV¿SXs»×E¿Q-óa`;ºNÄÁHq(L§"Ò[Ôj+uoµ Äõ(rI/Ur5u¨µsßT%x¾6Sd^/ó®ø8]Z»ky)-µµòOè4ä ý;ÒSë À@¨m{.Ñõ.U°ß0°w¾èÊ;úMGÙ6¦´à5éЬ'sâ«ò{; ?¤ãàÂrÏå!ÓMr//A:§fvÀ +ü Xè¹ÇÀª·G +Éà:ÁXr9ÿ ZIôM[)n-åÁ×¼/¡$¶x(ø¢Ó]«½@Y ¡/>'¨Ý°cw u6U¿Óp2>PÕù<ÄXËHí]Á@æÌâFÉ9¡¸pÀrµFÊá«´Ç%â+g0)dµe¢ªw&`;ws1Y£>XÀ@ÆXÛcð6cVDÉ3´Ñ(2é²:nMÒ+"Tâméÿ$Fôv£4§9#!XF +<Æõ'Qy2ë Eæ§@N.ô6Å*$|Ê}?`@r#²ÉNk"1 pjC¤ÁÌ9ØÎðIr-ARªãr¥è|B>¦)´á§PfH RÜ!O9 N¢CñRK!^©AÀ`A2æ|ÐÓÆ[qp¤íx0 +W -ÔÔ¯[YA²t³4ÉWvo@Q¿8&ª(°ÊOµ¨ xÓZ8P)ñA@ ÔPÃIÒâ/L+(1N*ÈúpÑò@HI#;ÛÇõí&¤ð¨CbW5¤ÄÙJa4$uoâQ?Àé%aħÑZÔ&ûT|²Á*÷¼Û @vî´P* B¨uÛ¦Ôm·µßÖB£YÁÊ �lT7%çÀe �ôµ^tÝ* +Ás»jP0Õ@ß0D®á¥¨-píg´Ä@£¸Ú£(tJÉÆ¼ªÙa.¸2¯öz®ál1¿®Ýñ7bm>,ÐRLvNERB 0¹ÒèÉóñ>2ËÆÇÍ"U®Ì6¥g º´<©3ç[ÔeõNçä|QØwHÁ459üÁlÐÙUL[±ÐØÇó)Ðh0Ù¢«%Y)cbciòó-Á4Ó¡Þfi7ªòÆÜH úý£âì2s³qYá±ËUÅ¡Kæ -ÈèÖ £×: ÚU¨5-50ÝÖè'Ò6°ÉyXÚèmPÅäVÖK ËÕä´FòV½¸È¯a.àÌCîüÞ vJï0ãÒ#¶²õ8½W³·Ûã¦(näûpg7ióÎæ[0ÿî½£¥rIÞZUõOìi±h$ù·Æ·Å4ß}oÅC¿ � QçH·Tª)V%cR+âí&¤]fCßHA5æS9MáE? %ÏénJÎ~_6ò×(uj~wÆw.Õg7ÚoRðÏií¦¾RÔõ"0HÛS5ç¬ßûe_O^´ö<=ÙpÁÄf×(ñÛßòAÈ^êpû¸ +®õNwÖà<Ñ[øsk¦AqôîM^¼ |¼øCU ùyÏÿXíZî`éÑÙP@@ +endstream +endobj +233 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +235 0 obj +<< +/Length 3117 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AhÄn. hTñÔo"K¤Îp(+MS,ðh7EÓ)Üi7Å4J4$¥CAQ:lpk*VABѼaJ§# àØn3 + +(æy9¦ÑÜÂsΧM @mÍÎG`Êx2ôf³*f4í³¹ñTr:ÝPäe6Ìf¡¤ÞnÐ̼qÀíb4×:,®û`kã,n?#Ûîr¹í¸ß¤3hÝ®åÔ¨*âg#?,g$Ê47okÞ>#«æí®#î¦0ªÛ¯¯+ #p@æ3Ck ´ãÈÊx@2#pÂ6.XØ6! aK ÆÌøÖâQ³(ê=Àæ4#à3´1èÜ2»T5¨nè§HÈ@¾!ÂÁB!f¯A@à9=íçµÃÈ9;b Ô¦J³¾<2äÀÏêÔ ,d4C¸ãê4¸ã#,2ÀT5¹ 3µpèÐ>1êÚ1À¤uJP{.ÂlPPBÏ<~õ·æ:ÍÀÆ4´³NÔµq´LÌÈ é Â÷; xACJsþÊëÈ7í ôÕ3YuÙÊm£vÖ¨oCM{bÙ¶¯Kur μfí(Ó_ºn«I ½Í%%l¾vãA`ØqkqI1ó§Va÷¬ÔÕ>¨$âÊá],Ëp R ,Â(°"º£hÂ3³lÞÁãù +9:+Ê¿vÚCÉjZÏD7aXÑ ÄwÏ%ÑTÌp2 5/[ ã§®,³1Ý UERY ¢ )ÛìVSÃ</Õg@hÆÚ«V::ÓJ×6 =|ÁTA opïcðËgÚ0®yÃ0ØéÃòe×QßG:Ä£a¶â[x¸Dvûn±êÜ×H±oWÐ7Üs,KYíGÌFmÛ¢àRÍÓ]*äê0èZoShQ<èÅéÕu;y×Ä3ÚRCbsÔR®SÁ¸1W ׫_èÜ£|¥ pHæ:ðË* Jo92&HõCëx +D)5*¥ÑñÌ3¬\0B[t8Å´2Ó³â|èðBF»@9qYÔ¡Ã6ë_º".ÉþÐÞ8sÊ){9ciT%hÐ4ÊÐêfA Ë£Ò=SÄ^Ü#ÙJdʰ3zñãLDgÑð³×äophIf40bûñK(a¢VAj3 ÈÕ¨øD 1ï9ö«WéØ`=%¹6$ÐL4 +C¨bpÒ¿ !Î5C·¨Éc +$;ÅÅ +æ8 +ÇélÈ¡ìo%C.øêÔ¾iHjV(Îj-LÍèG¶Ã#¡;ó4tsl*ýºGéÖ¹Ôpµù¸¬æ8²9µ¥fn!\FÎE¸BHYz,®JBÉy]¤<@fL(8+¡PKiFÜ04+¹ÓP´.æØs¡H2½âZ¼hC¡ÄXÆWA7¬ì¾P}´¼E¡CO Ì<Á 2ª´n¡ê_&Å~RUªû:L + AA×3U®¶½dCMo²½VÎÉâóôVà[\uÖÖé],-v)µâ½WË ++ð(° b,QrAª*G*A%äx©%÷B9Ë(pRi¸ +¢4ÕD¨¥@ÚÔZ=H+ 0¨m 4RÖW 3JTÖ°O* »øT �«¯b]XD\ % + ¹[ÖôPS¸»ðS +I ¿Wð6 / ÜV#ÊU°n +a¤=\~0¶ Ç©ï¼<S1UgXLQzkRdÊú{í0& ¿á à¬06ÉØ3a%ñpÃk\Sñn5ÆåÚÜ]kvWmé ·àÒBHÄ<7®\ MY_ÏæG0Æâ ÅÞ꫱nÙ»¤bU»IåL-1j¡ju9ÍòKËÕ{eîÈWÆù¤w~÷´®©¶è pÈ B\deõø¢´ÕujîbϾÛ"j`Qª*^ª·%<Õý +©W¬jÔVL;U |3öâÑR@¥ äÃ"A Î<x$sNÀz1q°ébªÁjÕª Ì¡FÙp +6CÔ·×c½ýM®¶ÌÙÚpýkµ'ePÁ¥+U|¥>z°X颣·ö4ÚêÜÈr_Sö{dÒ\ ñMC{øEÔüÝMWw߯¡Ò +°ÖV`Y93¬ N F°èl5nåæwÓp +.Î üÊ:Jãè¸kB¸I À»±_<zÒ ôõËW¤z ++Ïp.fLßuÝýAï&ß¹ð " ðÅ ^LBÛhç,Îk]áÆýÍà:H¡&.Ún0]²±¼È6vSÁËФïÑ^c¸kXpÊÛ³¯ xÇÏjÇÔ©r¹ß³ç¿ ©|¥jÕï¿Wÿ>ÜB¬G¹IÒ>ÚÖ(DïÎõ_DÍ#[êh×ݯ~¸÷âïBPæºFéNIo Qo8CDFFdX3EDbàDYåæp,ùn¦¸`\ß\ßÏÚOüªo-ÅþÌj¨Î¾ÙîØp¢´^/þoXþ©ÔÁ"àåx÷&üN2¬Æ&üjtëB¶!¸£oÞo8 Doäúj`¤ú!îÔå.| �ã@ôââcZ7ª Ø-É)&2QPÎÆbá¬E ùEÊ,höËÄLd\&»FVLm6í²XÉÔÌo`íNxëoüð+àÝO:.eOH³~ódófÞóèÀôkbF0ÄIâEå¸Qã(4ê°Xû'ÐÎÄ"¼/@{ +/VúOîª*G®Oüà+ñR9#¤×¤¥ SÆÂêäúö)pÕª²áârÉfßÛ2Îæ:̼ÉÐãì\ÖèF#lDH'ÄlPCriÜ6°Ô4 Ü8çr[ípæ5PH»àP±2'BYOú¼Ì}þõ |ù; ¯± +AÛeEd\B4ÇúLÆ)[ÃDWÄ )%'rú(Îþèã(n)\ÀÖÜίÆÏ!È4ö²Nͦ'1O$èî4²Fí¼ËªñÑr²9`Ü ÈòA#ç¨ÂV ²|,ÀP òèÚ¨32 /) ºâBÈïh1 Ò²ÍÒSÒøZ)g!â´©ò®LDÈòCx:D^Cf@/V5ê2Éüj òiN6ÂâühàÅ.¦NÊÎ+)çäËdÆ«1`Q/Å¢£bj¥i0o=S£Î+òÐ ÏJú¯Në-Èþòû&íË&Ð[i® Ã^ôB±@åiOÎ-ÒÕ9«.D` ´Ö"hÒÂÃq;£ª4æÛ-BQDnz"|¯"|°kF´¢ +endstream +endobj +236 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +238 0 obj +<< +/Length 3156 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT # C Ñ<l0 ÅäĨDLÁC pÒ;5 + &㡼@t4DSä 9¦3IÒe2GS1Ü ºàs}Øo7ÅлHÈe3N¦ÌÌèr±Ä¡ª2ÔÆÃ¤.° +×MhPm0syØ$lr8ÉôúuBe-U¦À©ÁÀßcÁÙDØÞ|z·a¸EÃ/Í£²i6 ÚÕh2ht]Df¦5)1Å'wªÕïëp¾£ ¿lÞ3Þ8.ÀÂ7(Ú8,Ì1,"ÎÆpæC(è:Pbö¾Ás8Ï?onm2²à+Ïân 0 RA@ܳFñÈÖ2¶QèQ »L68Cxì4±ã Xå¼! :ìL6±ÂëPÜ0«Âà¹Kåðä= ÒòÚ8#Â:KÃd桪|' +¢`³ÃjÇ7ãR>aë5ÃZà/Àå?Ksó9,ãºÍ<OSå/?¬£æÅƲÊÖ¶ëæº®ëÌ;Ä+Òø¿-ò3³mÃAÃq:ÁsàÜÑ:´®!¾þ£«ºÇMã#ãæ4CbÕ#XMEcEo7E>Ê]ý$ïì8V, ¨Èì=êÍKS{±POnìÚ0À0ÔLÚ ¢2:¤¡ SX®´¨Æb¡°kb(@¨«jìZ*+IÀhà ÁvÖaP)LñçC=: ᨲ$ÒçHõ§ù:8Eô ¨ÆÉÀµÃç0±Ýg4UCpê6Kü¼vS@°=âä_ln§ZÄuİké{_mùR;³ÃpSüämI]Úî K1z:ÕÕ£¨à8 Ò¿×K³Ã/K +FÝh¶bGI§¸ÒêÈWÌ #¨ÊËKÒÉjÉã{]TDz,+*³\RÎGdø5U¶èÛÑ)|¿2 ÜôZ¯u7´})ÇX<PÅQev%Á¿>þðÁ§ÌCu4!Î:Òún QÑJ;<Ü2L¥¨:ZÒÅòO1dBé½U9"ÔÐ[l/Dí;êOZ9Á½§"ðµ§8ÍÄrC +N¨âA·hí »¦É 0>F^ÎPr¥8^ +{üy¡ö¾õô:í,0 7@¦²ù nh£0¦nRqbDÅ&*ÅØ« £FÉAC'4 ÑZ +(rI*³fC;"±Å,b A¨3sV.²`ß pN1&0Î ¬VN+¬V0#È4s} i#bXÑ ·[cuq´#ÈÎc¡d\³øîåÑÃD?mõJs0ɼ2Ì·¼ ./ÅI0d¡@Ï2æjá Ò(KdBI-į,TcMP3+ë,Þ¾4fÉÁ´Aà)Tn).Ð4ÏY0'Ó´@dî}Ï× +dõ=(ä)²z'¹¡ºÏ3袺bЧAõ¡4 O'³.£/RÏÂ)@ÈËY ÅsâùÂH fo@(DÙ¸ÃddQ`CF´Fbw9'$ðS(ì8-¶fzâiH �×/"A<'§¹¡0&ÄÓReS +HÀàÓO¯öÁØPàÒ° +ÂX`ì²8#4¹×Ü#hpQ\ë¨ ®óJcYªff]±¶Ä %c,²6fÉÛ0áeßåQ:7Å!7êMLÄ©1é*Wj£ò¬êÃB¦VV(¡YYät )Ç.|cÑÃzfë ×áOÐ(µs4ÏûY_&´Ø7ïT¬²oZw?#¥eó¬vG8£^«àªÑðáU/ïûKµæ']Ù^A"Ý˾ç :O:}(l;âLt½ðÙ"!U`Øa[A¼ºLH- +áÊÖ 4UÙ_Z£Ñ/!ýt˼EÝ1®2ºV¦Ü$-¸É1¤'cUqt.Éz;2íËøwG|7âÆ_3KU|ÀcÝX A<$`èÝCwd2älöaÛy&÷1µï ÞЦ[D6ÝÖ_0Û$ Ý6ÑO$ó,jèÓu´+½çâo#ûÖ5@àá#0 +a¦b.°6æsÓaq¡éfXI}Z`ÂF¶jiÚ°Ã>hCJ?AA%ÄÕZaÚfXì5¼tO±ékl ¯)j¾¡ÑKÑʺàEóÍ"Hoð9&*諦a8¦â¸ýë ÐFJP°D×_ÁðY dpxvüßÑøââÂt׿tg{ "~¹p¹ø*Ø,23úïÞ·$õÂhHÑ +Âûó]Þö«á²¥¼ó#÷®5?f8¾A+9Áo³Åe¨·*,z¤°[â`£ó.¸cÑ>=ü9ü ðäCpM}SÙÇ L²màÆkr̶ +¡."üÄÞÞ¼Xǹ¸#âê wλÚL ©pö0y§YeÔºYÞñÈ92Ôì/È1*¦ß9 +Ûd;ÉüzækEÐ÷øn^©5y*ÑØêí"i´·ÌÓº§ÖovÒ½HÿÝxâdâà-m³ |*XNq-¥Òó¥avÒ«È ~2}äH<!¼;§dé¯qç¢5J¢í`D¯0ã%,çÇØ"ìî2â%×§äoæþ¨,-MHZ¤LÉÅÆLTì¬eÊË+jÒÍGMÌÛnØöÄõPNöÐNÛâÆ-¦L#Ìãl6E¼$ö.#Àù@ØõïX-D: ¤N# P#Ò¾-$áítíoue¶B¬d@úF´Mjú¬0×'ÀÎòhÃÕäàøÏ[Ï} ÒÙCã%kú:cfEXÏ@ø Ø* '\ÌOâHL~HGGMJ¢ +xgH?Ñ"1ΦCÇ(Ïþ ¬e¬gqÆÞãØ)¤ÿ@>ðÊç ñ ¥½ã[ÌÀÙCðVJÅ%®l ,JD:ɬöbó'øÑ1Þ-Ò*äKó«¨é¸ãJ¹)b§4GÞD?FLªÆR\fh}LL¸«Àb¼bã趪L¬8 rË'ÊHLc̹°T°`ª®|Ñ%uÀÆù ¯WH @Â[¢Ô(NÄ + ÞÛñ"Äì*ÕGíB +q¼PÀ ¦© +lN¸È¦¹ +âEb] ,äqÞÑäÔP2pa, +¼)hÂ( +rsëÒÂDÓ(kÂi) ©¨Jm(º2¢bÉ<²iF2 L?Ä:^iV¾"ÂK¾2¹r¼GRÑRÒbÂä<¿ü¯lD¯©Ió$,0Àf(èsqÊ"6$b`§+ßéÖolànDs3iòjV*£Êª +¤J$r *Z¡ó52st³x¤*¤iO8i8iì¾*b3êj!X*x7~ª¨jÒ©2Øj)°½)/Ȥ+ª«J¸«Ñî¬qò +Ï+ÀlSW + Øí`ª +A6ò¯[8@è¶+z·0J¶ë6°Ë -@ܺçr2·Ë:[Ëa¦B +endstream +endobj +239 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +241 0 obj +<< +/Length 3048 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´c$Ѹ¸b4áÂ4 + +¤qP@G2 +#yÒl2MÇBà P!Ê !°¦e1½æ÷}8̧¦æ 7¦c ÔÙtÅ%CU ¥ÃAC¼iÔi4¬<k$ÌÒB¤0ÓiÊ ÈÐaUO41£$s1'¡¤ÞnÑhðR5*¢Dµg§FbáÆëm¸®Â7sAPÐeÏ6{I ëÁ[1¸ßP&« ëæºK6κ²^ÿ«`PZô*I\((Zn'! �û´/ÓÈ?ÉD:@P$·.èB0=4NÔD +üF©q<R!@Ì:Ì7obÒ:Ct½0Eaã(ä@ã`ê22Ø6£Þcxå1c21Ã<b¦OB.§*ÁÂÄMº^òÄÏc4¹£Ø4PD·3ÊÐh]P!HqKá@Èɲ¬½A8Îu ç:OS ÖÅ×£7ö$ó=ÌCæ9Á6Ü0¶xÀ9®|ùÃxèV¡mNø:H ¨+×I+ÔªÂ3 òÀÉQ½Ó¤#qÂe)²m"ô*lXófÙöÉ/8ʳÃ`©{ïy½³)hÃÝ!}\åQ Ú<jz ^uÇa[×ûÆåX俨:^#ØZÂ;ÓE§bù\(öifêãi VEQ`@» ÂÀÍÃ?bÐ bÜ¡´Ãú#h°=ÕVs5Ò× ç #°Ë31ÁÞ<5XÆ4äÃdë?dà ]CÃÉ^¡f«GÀ)®¸$ÚxAb(A¨Ó.Ü·>+86Ðê6SsdØó¬±-9òìÄ:L0õ7 üÞ¢4ËFÒè¨&Õhn¦(*J®Sx7ʨgqx¥1Ì£8¤¿»¹ë;¨ïOòïûí¾ÂXS$_ ã¼à¦³¦¦æÂÀs !7-äÖSjoV Ñã Êâv éàá&|Êr`P& +ABS*mN®Í U p +¤7¸dáÜ&OpáUC,âïtÌ2 «Å|°Lu0Ö-"¢ærëéiBp¯Ëc9 (!:,wr"j0Éx7kl2¥t³ êÿ¤A ³BrÓc©×ªÈëØ¤]Op}Å®tôR@NÚ® láUÒ0â.CzU!ü )2¹'¡ðrâÃÍ ¥pªQCY£WQñÐWFBÔJR-;ض#Iz(]ìwé3Ma®$Ôó>Ä{)}¼"§ôüû{ðF )ù·ìwH{ù5tiªÍRqa Ç<2Ì©2ÍÐïPÓ½¤6kÊI<æåHÓ~ÔßAÅe°90ZúÃ1Âá1%Ë8©ÔFJrYÎþ'éWÄþ°eæËIkq1 Ц³*& É%KØ2_ïAøÏI3æãxPm@à3-®¥°Ä%4ü 3à3.ÄòÉô^ÉâUwÀªÉz°jÐL«¢¯ÀkrU¬:Éz"º³¤ò8iÁ¡Þ3M3pBËÀ)OH$ú53òh½°@ÝC¤´yÐd2hH( +aår%FÕ²s¿C¹H,½²ÆÕxÏP×¹z/\² k"\ !07tÜ]mÉ =S"fk4±¶7°ÂÆYA¼ ÖúàUX%q.5r¡3\¡n@s¹´Áh;®Yb¹ÆfûWd½Ä%óÉfÙ³YE¨;BqÎIËϾÕN::ýH½°©ETNô@zý>,º£28Í*©lѼÔÕ" +.õø·"!'^6i«·¬NØVõ£s1 SùéK)¼ ¸!^;ËoªHcµÇâ£:]O¡¹Å%ÎÙÛKkA)¾W^ÀÏat ò6b°ä±§©ó!ÏÃBÄ«Öä,ÍN±~J`Cc÷üÈô=ðçåPèTÓY2èßÃüèv~o¦éÀ6ÔÛ]q°åÀ[Ãi+(UFêTWe/å +À0ÐØ^ªC¹ïù!²÷=R¶hÙϲ3ÙàpwOËiÐÞïÓÞ®ËP84oj +n¿Æe_i0ô*n[*aüc;A»ÒX;^y3ÂOI·fg°U^ȧ)èd» Ãs»w©¼¶Ã´_´´Æ`ªpÉÂìrSxbaø36£pF ol2øÓjÏÚ_ã-ö +Ù='ú£nlyR_ÄüugqùÇÈq÷1äÅA³¶t.A=K fvÜQ®ñ¼þ×"*Ðéç1`j« ÔóYIöjïØ oÙàÃAp'H`¡õ¼ÛËm^µó¤Ó2ª¥-£CÄÙÖád0å¼R=«Æ\Â`·ÈãùìK¨((.óªß»opa©V§u0D:6wCR¸l1«ÅhChÊç=Øíþ{ôf|#ÚC¦g=µN,>O+y]-´Ó~Oy;®òAÿl ä¾ÛöåÆ|ãúB¾ìï¹wätm^õɹûÛTÀoÏUô®«¡tõòbÑÜ>÷Reï5.Aì}*_ó©ó<¢àæô/FØñmëkìë£Vëç²B0ötÌì7Ä2Ö¢ØÓ,ÏNä£îè#bÀè@Iæ°"ëË&ì F¨5nò=*í0¡ 8P¡`Þ¡ª2j$¢óîàÁËZÌ#`ddIÚ©þ@LR +¥~žÞPzND¨X¨B<Q#Æh°jsêÐöd|*¤EêʪàÓ +. .¬pÚÚðßI3nÈê*îTê"eêö ýîJ4¦5 +o+«±ëïËó,j¦2PÆÀ0p6KAc´kJ´ð>î0£Ðb6#É + +Lo ì.ËÎ0ë´»»ìïKйkÔ¾k Nºü,BÈ,Ñj·ñnÅMÜÈËÍk§ +½ÑOäY˾°XzpðîÆcNÌÀJ,¢ì9·°"ë]QTj«ÿ``+$mʾãÈ)îFï% +á +Ì]ôÝNbÆÊNÇ¢£O¦²,zã-ûQû +«ÄÞü ÆÞÓdxHîKl¤þl®÷í0u¥ ßìÆÙÎÖ¬Óì@ÍîÎfP¸Qý lzR¼ñ¦U/xêmií7©ohØB¤ÒØòÆÚDèÙÍ>MÍB[e³$ÎóMR-VZ [$M` d hÖÎ× tiZ×Ãöé,jïoDäòPùçÎòR¸Ú¬ °s²ÒÛrÛòzXPâ§üÝp§"Oºð*ü-Ñ&ì¶æÐ¨ÜO^Nwà²Ó%yî%âRÃËî!àb¤s(Åä@NhR,zNq!ÒØa%´#K6Zã«6ä¬ç2qó&Ù§è"úqoÜi΢òL(®ë&2_ñB +endstream +endobj +242 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +245 0 obj +<< +/Length 2367 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6'EÒ¡* ¡AlaAÄé²êÌm ÆUx¹RJ +Us)¸ i/çtÑÄPR2§#qÌSD£AHÔØL. +D¢z®5F£pôÒf +n¦©Ààe9ÁH¤¨j£¤t«üÆND+P¹°*p E+Îê 0óI¸é üA@c7Ùùh0&=ùÈ@s:·¦qpfn§SÊs9¦Á`Òtm.WCà@v0¼c§Càä7Ãzú¿£*î¢ jb£ap¥5 �ÇÂ²Ö 99®{¢éº¯pÜâ8Ã`Þ;òß{ÁTX;ãÈî³Íô¾4 dèÓ*B0¤,²2æÊ2ÌÀ:Ã34ÎGF¿ ¸l´È\# ¥ÒX©%ÁºÆ¬dù6ϨRADh6£pÎþÆ1ã¹0üBì;SÓºïÀëÈZph!`]B ¤8ño#Ìô=OcÜøN @=3x],¯JL¸*j{©)ʪ®(!°lÎ#RMlzp³¡á¢Ö¡@9QÊì¼KKêÀ"+h°Ás¡\±ü @äµ;>ÐÕV}Z¨0wX@«+ øf#ÒÀª(3:Ë`ZÖfô«ÌµC1<ÓtKC Ul*¢ÂZå¬CV ò¯ÌÁ&²bdVÌJìíÏTÙËýs×+h\¡Åg{Bs&[íeö\·IÃH2£Û ø`ª +Ú 0T WFR¦V5z´Þ¦´¤öõñ&Wùå'`ò7 ãeÁÔ·gâLZá¨kz(¦q2` )@+"p( !¡è¬×$!ò°Ø8c@¹¶ðè3!HwT"tnMrLË KËó<ß;¤i¡Òr±¯P4 +c£¢:uîÛÑ÷ý?SÕÙÏ¡Ø3N¤lõfÓmèFÆÞê}ó_,Û°e¼#Î1»Cè4¹:ràËû Zd]Äjf¯£ ú¨ ÌAgÀ`Û: g08È7@)°{æð¯GnXàËíLÆ<Üs {!IV-Ø Ó»Iu' fÙ2>ð´$ù[1´× Üuá· ¡¼åv A@oäùæ|"Ð-ÌÆ3tÓàu>®¥C0}Mê(:çdíM s2ñ@åÀò©Öb?j- b A¹BA¨=1åÂñ(v0Æ aÈ0ÊC¨i'ØÝÔJp£ØyñÖ6(Üu29>!30¸¹aéeOv¾Uâ Òñ}Q^7GâXKRX ¸¸2êÿ¡$4LRr B#³ â»D<ç'E,æt¤7øàJ»ã²t$ìÆ@[=gu 7Æ©ò]$8øG(";hò@Á9³ÉÖ±ØW#àô_pJ§FR;ºcÓuHØd ·72viÜqU@-o¤«y¤ädH$é Õ>´8¨L W"PÒxyî>¬2~ÒÐÊáBOC²ðhB¨¬£ö¥9 G¤T]ö» kÍÉÊyR¹×)Î4HVP^{j<rP¿"ÂfÅ!\/YÕ:Ç´ôC|4ɪÅ$¥$i`¡ÁÒâpMKäà×#ëáLB^M&W×,#Íyö"ÅCF° æ NðÝY[.5RM¡¬¾F²ÛJ Wcjí^³²Â°¦RÅXë$98óæÔbnk.ðr£\lÃPqqÅërÙ¡¢î·Êºà.ò>´ÛnOºcUr _£ ì0ëXm ªwFÒ8f+uJ²ô$N:4DÙ$@hæLÊs3%ÍT¢´²ì*˯L)ö}Á@Ia°` +IèAÄ ¡ÓÔT!Ì3¸øel-6VQxeâ°·ïwØ9zÛïÃÞä·öß[üУ³Nê@¦¦CÁ«ë½u êsNpïb7`qha3R´ç CÏÈö^ä5â£/zÝÉ7´©¿<ý_»ùoöýe;¥¦®VÍc-`câÅú½ÐöTG7´´b+Ðd¶µUµ i +,;\ rè4NoÎÄpOÇVÐ#fQ4©.)ôÜfÄ\CHc¨Ø9Ýü~ªïu¼) +¦,n¤ndÉmO¦R|9Rÿåeÿð$,Z°ñNdOJO« +¡÷k=+êV¹®EÄîô +½µáPmnL +ac>櫯²ÎåLè×Û´_ W#w#k,e²¶ÕüZSPÄÝ]3unÖ v\B;vø³¦BÙkĤ[Ñ´2Q®~$nøgûå}%¥ö×åÀÐí·¡àTÖìÜ54ögÍ!8:Ùc´Ù)íé'Gà9Ô³1ÑÁ¦c9l&T°©4mOò¯3òt%øf +1<XÅ]¿¥öàPIßo ©Í h±bbÀi-hwµÈÕlémÍl±ãgÛ#QàÛ# ¶¼ìÛl É?·X³ûzoúÌñ#Ð8âÕZàåô¨ý¸rö`xÎõ0å¨LéÛ5»ÛÞï]]^Uw^Wo6¹heïÑû7ð_ÔQôÎÔeU® ¤7IP7qYú¥haªÓZ¦íÂÏmîº3óUû¢£?:{'êãõrÖ»Ã\GæÀ?-B-~m@Üé¯ÖØOö:U`B +endstream +endobj +246 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +248 0 obj +<< +/Length 2126 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àP4 Ã9å4f1§C©ÈÜsÑ(ÐR4 E¢UB.Tõ:õQ4 + +IÌ@f:gCI¼Ü 9\î·xYHªEL¡ Ê 1'#lÊrÔå9ýn¼çs ûÓß*ejN Û,F +dQp¤¨j£©0¼LaPÄûÕ +°º±@ÚÕ +ü»¿d*d'6PÒÚ1·§#¼ä¼/NÊüî!Êê¢ÀÌ; á»=« +^)LP'3Ã+ªë».Ú<p:§;ꪮ(!ÂÖB+¾ö>K:Òó>á`oèæ9 «Ì¶Cn2³C, ¢»*j003ÂÃA(|õH¼[ ¨ P$bd9#`àÙ@¸¹2ä¼ÙxîÛ̳<Ó.Ëâ¨à86î³°¾CÎêI'*¨fðl¬IJ÷F2ж«M-ÎdÜä¼É �JÂ8¨ÁT¡«ð«Ð 0T PìÄ4HòDñ5óÊñzÊ>oÀ\Ʊ¸¦<Ãxà9²´âö@pû'°°SÈÅA÷BP! âx +âH HA5KólÞ9LfØ ¤:LáÜõ[/êewD/+μ±c§Ñ¶$eAVHP"HÃä4ã=i@U»k°òpöaa`>2Ó&×ßëäÄ bª" U²ÅÅxR×âæ6¦<¨ çk Ä˳,Û:Þ_mÓVÞß j:6íÈ@6MÚèÆ0·ðÜö¤hñ]*2H¬#z]Øv-H-Ëäº9ØâùjãòvBÛJª`óaI¬,ɲº53íøÒ +3PÕ5v²Ú6Íǰ^mÉ 8N#ß¹#KÉ4n{¢éìØ\ªXÜÊÅTQpߺáèäj¸?oëÿ¿hÙ¦Ap úOß\9k# ÐÖím=£ÅÛW¡¥Q÷±piîÑ¥"üFñÈßÇ£,HÈ2#Úb6g&yrù9bnF9©PäÂôLÍ'ǺÊodÄxTÛ,F% û)e C)/|a(Ná 6Tò TOܲ8GQdgª¼2«f¬fy¶ÕzÁÉNÍô#"6²Z6-f¬õ£KüpO08Pf Êä|¨N %¥È¹Bê]¹ @xWúkð¯èÚ"kv±Ä Pr$ÅcAäÖÒÿVËÎÅ FÆÊò1eð´H×ö®³8% 4Ç¥¨Û{n �sR3Ʊª®æ³kxËXÞè+ÛO¬ª6ÄJíÉjB¥º=eFÛÁøoG4»ÈÙXHºØdH- è±2XÌ8ö¦sr¦[9_.ZÛ]q²úÌHpÍqÅ8î¥ÕÍG\t¤Â{±éïÇÃΩQó6 7[Éú?ùü1×ßô]@Ȩ9Ê^ª{j;½Èó1cÜÇW ÈÄõ¾ï¢] #`Õ>çàH#IâEæË£O4U2Ùâ.¤2/)RèC (B=ÊâÞõaÔ¤XMØqh¦x´ØO x Ì@äÃh))°¨àXO?¬à¶´ÊÙ[« r.ºÒßûH>¥@8UU\;9ùZ*ðìè$E¥QôEKß4M¬KEE´(«ôbH¾@b ÙBàK-8%£vr×Jë]~9ÖðÚ(L +)¹V¾³ÃÐSÀÄäÜ+qs¹5¸/ÖbDÔÁ¦Ø`Ýn#U» ö¸ +Wé\ åsνW²éÞûIfj¥Ísð5´@ÅéHv*ÅØËSÖ® Åà $zu*Li6O¤ìXTýÙ´¢=(êK>7À[ö'i,×#pXð¶ÏYTeaÁ7CîOéóݪÍ1-bK}y«m*ôáü]YU³,VtøVs,\a¾ß3^¸oôÝpæpY~S¤OÖ <XÀc*Íy14ªÅ9=8ÎYdgÜkc7ùm"-8@ æP6es]Y¥k)Ö5]:R±}J¶y¿ä<f<g|m+ �,Ðèìb¿vi^GØb(Yð¡&höëp]@0x9½ lm¡EÀ̯j_ õ[S2ΰ» Ô×èÔvæq Fß-9·JcÎÔÒ½êi»£}VFsf@æ¬Ù{,Ï{oc[¸tLi Àf4¸·}îb;É&oIE©ß07!z¤àû:wäc.ì½µ ¡Ä:íªïkYbA¤+Kj^!ÄÒÖ4°Ðw¸þã?³·sáŬy¤Ýä^íã¨f¿àÍ=Æ~kÍ÷ùç¦¬æ · ºyëF°± ( +endstream +endobj +249 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +251 0 obj +<< +/Length 2438 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6N¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ðb5 'tÁÄPE9ç#¦E¤th*-¨_ãÕa¬"5We£ &f +æã(¸RT5QÔ]ö¥N¨DóõJ°â6 Ãj~*¿SÖãçk@ÖÖ1;Ìæ-)LÖ± Êr2f[ß5LçaÑW©agãq¸¸e×lÉS(6Î#Àò\9|Íç9Jdq=Úï'á hÕµªóƼ{Æ<©°Ù!²Ö?OBv⮡hf=cÂ: �1['q;Ù§(a)xn--7-sga.xn--bda"" `PdèBÕèjÜV9 Ì 4û³Êjþ!2°(a)xn--aa3-cma9f.xn--gda74l±Áë,"-»r +q¸Þ8cK/+Û¤¿:òà »2ô´¼2]L< ¦* +A ô"9 +ocä¾PZáÂÄ*[2QUGR(ôÅ}sSS£?PÄ5%TUAMXÌ ¤ ÈSUÝHÒt7S5Õ9OTU(TµÝ=U#B4à @1c@ºUukìè¿ C,ªrÛJ§¡ÅÌo2ȳ*ÁÔÝ\#ä4 ÒÉÇ+ ;?ôëÏÐj5MbI[&83 * (A{ Îø¥£J¡Z SÉ\X¸èø>Ybõ|/¡¼&)=jfÕ¾Lñíl0êåbLÞÉÃã¹ �Ø3ånróNíò±hÉ£ÏsÝ9ö0¾ÈÚ×±s¬¡zz|: úöÀä àRдºO·Üå ÀfÆB¥Á°o¾ @\ ìöÐü5A§G»é;Ó!½¶åÚ¯0hM@sèð[Êó#wÕqH]Xí^Øç·kn>!OpúâýÜ +uþvkÖo>¥ªbcrëÜÅíPs É(Øb)>|Ù,|ÒsxóÁe_ÍÚrC sj%È6¿ÆÂzÛ×9ï%| 0hR»Þ+ìáf7.ã[©ûM%á×ÞÓ#^E@ 7Â8Øsdb°-ݹÇ2á];¹ q ð9Vmù*»l¡Ãàd +¡0&.õäckAÉÓ²U +Û<3ÅYA:ô1èzG¹ê3×rö\kéydÁö¦á©/tAñÅ'Êáploä8ºòØ8y`Éæ¹×æ®O|ïaÁc¢üii¢BG6 áà; .%gV_^Ø1{².Ù dx +ØØÁàbïɬ!pr8Ò6 d,/+JÜ«iIIBß°-äø$®ààC$kìª6@îZø Q2'/8£æ;°q7÷ñ1ÃlÀ¶B°fïÕ|n~/}AÁÓ!5`TYwf©#×%)[g©ÞÌ'LÏ¡KKIa}%ÃL¢E-,¼GÂÁÓ83ME¸à@ê4X Ý8aC®hF0¨7éÁDVlª:µWÌ-¤ F~8nÐmá+Òâ&û^sP:3oltá>i)¯LÑ Y§è7M¨µ¡'æ µCx4cä¹ÑZ.XAi£e¼¸4ç'[Ó"ìl±ÚR$ÉJã#+ú¡ÝÑ ^òÌJ)Ò¶À&sl«ÍÁº7¼ßq1È9G2Ièµb¨ Ot¢ê&xj¬»zA´83Ãç\Ùú_w(ÿâ5h,ýdÈ@¡0bnÈ)8¡°2Ý P2< þèNò&ËJ! 4$ô¢J=É®¦Î%Ðg^Êå¢`¦É3ÔÓjZm ɽ8Øs5bSŤÖ6Þ9ÞékyªË´+Ű¯ÔµÜz)s* +WÈ×Í~ +ðÁ`dXFýѺ°99Skk))ÖÁõ-´C½_PY¿XÙi>¥±ó +=×®4¾s- ¢ÕJ\®SÍX2SWc]häy³&3Õ²éNù/Û6¿q9ß*Äèêÿu&£´~¶j_qͺ¤øðòÉÄV©ÖÚää§~ì.oÃ''(Ð,бNU9^0åÈÕElM7PÚ<é±B)xÿ aÌ.vB|>Ñ]Ñ!DI7æÜMy7!òç×¾#ÍÕÛ8YÐd O-úÎ÷öÁ`Ü\tÆîï@Û½1]¢iGÊZ\ÌÄÛ:Q¼l&x´å²ÕÓ~pN¯8§äÕûk'íÂûÛÇk¬ép'®NFnÚãÙê[#eìÔnìëi8ºÆè;°pKX(h:oxè-ãáØ çÈêêN$ûÎë2½ 'S´ÒÉm8ÙÒÎ7}£Þ)A_ýèrpN[mÆíÝvÁÝÚK ®à(C¡ßò@Ì·VZÆ áÕQaž±0mT@»ºbêDçÌ@¢ áe|¸vì¼Ç´aÞÕÛåíá븪'üz í×,'ÚY:{ aìEòõJHpY·à´0]ÄÉO>¨¯*©IåÂcdæ·³½\¤ïßG©Ib|ñC!·'ÛþÛ£é)A¼øVF`Á¼¹mÆ.Ë˧²Ý7ÅÌ6¡úy:ðv8ë»187õwïp¡Ø0Ä&º¨'Í-nÈçb*ôùm8rm,wjV<ÈFö<¦R÷cðEä¨Ú}éæjîäøæB- +`(Ö d¦ìÆ àÄ @ÊMFýÍ`.@ØÏâÕÇÊÙh +endstream +endobj +252 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +254 0 obj +<< +/Length 3027 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´c$Ѹ¸b4á³4 + +(RT5RÃU. +AR[FúÎ(;g¤Üt3ÁMÓ#R¡vøØÌou^/WË©RÁ{gfà©ÈÌu7Îy¸SE£ä-f.nÕ«ýÑjÉSW±Þ çåã!¤/F(4ÄSÔÒv0¸qÐßݲo±ðmº U£ÜÎû¿ðx\>'ßä86ý¿§Ö»¹*àf&ÉÂ~!CNÔµmjÌA@Ê<c(à:Aðè40ÀSÚÊì0£Äíä3£k· 0è,60¨ÈPü"<µê2.(Ò¸!ÂÍ=Ê[>ç/ãÝCÂ<xÌ;`ê2a`@Á£Ò3,0Îð,±TY0îÌ7ScM: °ìÆ:>8\Ç%jp\êð9A;(4Ã9SÌ09ÏPA:C îïÈá0K2ØÞ1 S(é0tðì9+5C(äéJQØÆÖÕæÖJs$Ì3 #;^aŗB"uV6Xñ]G#¥ufÂ1PË ¶($Éit¡@´mn8 #,v2 1³T6Kôì7£ áxÏsí !Äd¸Ý\Öuå¨WÓ=aÁÉä@1£;é[ ²÷¡Oc6®ÉÖóDø0ÜígÖêÅ#tvíïM �_QÍýWpvAhÖV2ƲçõÖ ð¨æéFøåHEÑÜU01s-â문U«Å±~Ã`zÆÄMÛ+¹µÆ4¥µ#6" +Rjçëc:Îc`Ø7åct׬d¥U2ã²4Çz¤õ¿dS±]ðÑG)Y¥áy^w/JðÏÔò¶ Ph¸a1ɹÈP6ô'Þ9zÚ8M¸`fáDþü ¡£*ËÈôâá2°C-42»s¶IZãõÆ¡Uú åË,°A<Ëd²7,²ÔíÀð|(Îeò(j©®4% ®õâ¼ÐÃ+cÈ)³¤ Âçà@;sª6±Õ¤×6"2òVãÁÑPÎ Ì5ks<3U!l/PDtÅ áA#/úÀU ;§}`8'Ö¹Cb;ea §øVÞÓ:cä8 ÏTLK19@ÊÊ ,â&PÒVb]Kì©@ðÓ«íVK ®¦( ÄÔ85%ZZìfHQ ¦»à£c'Ðhä¨Õ,OFbèþM4`NA Â&úö'J½³2¸¼ù!IèíI0Îw*°¸Ý3UºXcéN³D9Câ2âqÁ¼ÒhÉÌvLÍ×Ðf A¨4ñÑÎÅ"Ë+exmU(µ'WÔºr§hñ¤KO:l|KXÓPî'ÃU)¢)fjHfÑøfÎs>tíàL Rk3")x)DûBÃCÿ4a;'ñ<gmª V½ÖÿgâÐõÄ òfÜF'*uOÉÐg]3 +JwK¶Üã¥=Z ý18Ú\¥ ÓÑÎIÆ"Sa¶ML_¡¥£§wáµK®B¡/÷·CTò`~åùWìó$òyÌôB;SÐ1U0²°õe>ªðiï¡sÇé ¬8JÚ fÕs¢20¦$cS8öNÀÚ».jËtªîÍÑÚ8¬ü´IÕ¶Ú[O'Ä'!°<Zà±(ë ´SöÚËÛZÍE¼³] ÇÛ«.g´rðî6ddÒrUÎ^Þdé|yää:Æöct¬¨n¶öa)Ý5vï ãª÷¾4ܰRO¯©=+$±Ê»keÂ)êì_«ÿGp Ä´¿?}ÁÀ5¿SÙ2Ò)ó"E0böËÉ>ÒÂÖõ[bÝïq$¹G'ÓVf,Ï'Fq«Y4'P'j5¨ä²5kѲ] +Ðú3bÅqÌüz´^Ôi³\©J±$¿ÕU.Q¢òÚ©kEêË$ÈWãÌ\.ÄL¶ónMÁ$`н¼bJW¤l¬àfÂu +OH:+ôÝÏ!mu$YàR B -9¤ò< 1í/°ç0±wFEÞ zÚ×läÐ3;ÉQÞ¨-z¨á"_6Mñ+ºðø)}LVÂ?.ïC¼w_jäþÍÙèØ:jZxk:s«!%ü ü²Õ÷K´FÕÚÀàwa|´vÎà:l3öm{ÀÏ7nF mg ñ}*ÞÍJ^]ý~6¥ùr{wÀÛY3J%3æó²dRµ§JK¡v)Ѻ(èÍ£È{ó#kO Mrh4ÍÊÓi$jZ +*UNî3îMW«ôX ÕhÂ0H4¼j±r|,§ÑÍÂ6u<ìæóÒÏÁè@ȨèîÃÒoJÓã§càZx-ÔmاN¥dvÚw ¿öî·¬zñÌ#`Û[ë)ÂipcçpÇÚyÉp$¹SnòDÚÚ+\icX9l@Ç ÈÊÒná§æGh2f0´W\PËÙFÄ3FZ»QÂígí÷"LuwÑÝä°bU»è( +aåU;YÕv&ñ¥ÛÇõÓIrò¥s±ëÐ àÊn÷/v÷¨ø¤1@ ¨¢L �-ï¶ôàûÂî£ÒüEüüàdý L àþm\"ï þâ°7ÿ¾/êêØnäu²ìG÷Ox÷Я:áÏB*¢&F,±"¸ùåÂ4¤5Fr^`Å@âÈDDêo¬°Le>WåÊGlÄNÏô/ÓÏ= P!DU 6èàÜímÒ9nòã( JÄ\ÅDhq© ®6îV7 RÆ:Ê&°XfkpÆm àDàʬÄZJ´d'8k¤01P +c¤¥´~§¢ù"ÃmÆÚoB°°1se_ÇSâ¬@mqzEe mÊÓÀpâJTtÃôô&'q*â²9ð´0𸪬<ô}̨ÌZE(¢< ÆÔ¤l;ppÀê+Ä¡ +` +Å"ßLvxhùÌ' +Ftöu +£çÂcñ>j øLg¤XÀpÊ`Ä %TÂd¤Eì, É'8FXM¦Æ+ÔÅY +äJdhj; &Ö¡ÈÎÇ1é nã æ1Ö ¥ %& ëjÅè|10Êe\¡F;QM1R{Ë@eÀZÄR²oæ$¦ÖS5 �_¨ P ä I6Ç.c¢®@3-d|ÚC3 ó@ä@qsÍÂD¥0@R/àÄt#Ã-s{6 êî}Äy$ÄXG£ Ã.CºJÀÒF'K-±.èÓ Ê*/ã¼¼PÀÊHìk£¸ÄÀÎsL°¤¯ +endstream +endobj +255 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +257 0 obj +<< +/Length 3158 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSq@Ðc!ÓcAHÊt:Ç1M#Hé0ÐTZ%P¿GªÃXDj7®Í&uùpâ5 + +(Ìu7Îy¸@)*¨Äjd&|£Z|-)8±A$æD!ÊdÃ)ÈB<¥ÁApSÐèïZx â\1ë¶\Ø89[î7<ÿC$R*{£!A¤Ì :e3AäaÍNBIÏèn2L¦A@Ü7A �¿2 Á è;+äº.È ZmPlCapb)-x¬ Ä*60& +b(\Ð4KÂæJ¨"qÒ¨«1Éøp°ëÆ)Ñ[,Èxh´Ã`9Cxå(SL¥/¨þËÌ<ÍHjÈñKd±A@ÎÁ£GËôx©±ú®¯E!£%¬«;U(aP!Ê£æÃ2ÒÊ̲Âî4«Ú0¢s.ÏÉúÖM]5Å·c(ò1 ïpÈ*#â 3m-¯ïaTéj¹Ì"HØPk hHdÑB Þ cÒ4®²È" `PdÔøc ¬8Erì 0T S¥Ï6òªÏa¬H\³J§fºë-¡QP¦<Ãxà9¾¶í6¼Þòê/P I1°³U6-hë<£t'k[ÐÒâ +¢H*°Ò9ò!ïÌ#åá �Bê3Ð+âiC`àh#m©je}ÙéB\Lg6#>¨8aHw_(ø¬íN×ä3¡ê$PSdXHP"S#ä4Û;KTö-/ã37e]A \póRcVͬ+¾4W4¢-j]¹ØÉZöͶâ8Ýc.C¬2 *DË 9×VÐÌ4¿a ü¿¯ÀAòÖu¨äþz{ô'a¨P7þ©÷èJÈàgC i Á ãðúCF¤rbQ%6 �¸ø#æYí=çÅ+ TrªuÈà©Ax0tB¬6É3fêÎIxwæ ÕÇñ]¸p´·'X§QòxF9pX 1 ©$5IÀi?,ó=Ǫzû4¯ò>freC o3èlò'WCÐ ÏI´´êsâ$%Ŧsγl3ö Ýó«<ÕA $_M¤®2H{â$>lͽµ2zT"Ü÷U²ÐO\g¼ó½e}Þ87èj*I2\e`¯±ú×ìþ%ñ>DìYO£t8AZz¥áõgy¡8ñ �öe5R> I'Pñ¤º' 4pÐR±ù>a4¡9Y(&v|AÔÊÍ æ[ã¼pñî7â¬ÛSUi Ú5æü+dRPäC²U2Qw¢)*ò¤¸a1ÇÈV/ñ-6ÄØtÅK2pÆ*¼`r$riðûçÿ Ôi?¤`ÂÔüÏqï4Ùs¡êfíTu �°]rê8ÚwÙq;,õ«%h½A!ø@PD®ýëUÃTêa¨SQVyÓ u(E'¤ö¼ù +1¡ÈT^f0¤fI �>ÓaëMÕ3Aß z¦ÀÈ:0iä¦vô.:Ö+oV¡¢NÚµæÀ\ÛS<ò%Í$ +NË 9¡È-TàÎß®ÊË<i!$ëÈèb@aÞ|Ùë¤|¬¥^¯È86Ë0ÃaüzÁÐ÷6é2Þ¸y~!6Â9 &3~çÌ´á¨7àðs¡(r<ºº[C\Õì5Hì*¸*[unç +ê#:W=ØÆÈÇßR}w¢)óJ^NÅéÎÎp4½¹_FdO5°AÔúTWô¦lÏ 4jêP1B/[)åSûÐ@ (NóÑÑò èG(À(:rÄG¥åð¶¶ÛYå[eé«Ìjð¥xíaO"}}äûûz'ÉÛ<mÄ«3ÏZ0¾Ç/:¿Ù°Ï0ß^Ò1ëÜg4¸×p3¸Ñ5HIУ>/$ZX( Èi èÝ4Ë`u·ìSçeÁÇtBv¥&ª)h¸Þ,ñoçèÏód½¶Ó~ÜîQÙ@z«v(ïKTJ¨´FHO)Ãp-Ô9e=Ù±2^Êd{³¾òef¦Ï9sxTa¸:ØÜ|õ§¹¨<ìD¹;'öcͺv^ýø>Ñíã¯Ý9´?&úݪa¶%)Ö²[*ò¸6Ù÷ [þ³êØzR^í®þ¸m-uam&¨¡2æeËìôÅPë§|SA;TïíÅ£À)àè®É �ȾTÇ7§eÃ>xRïyðF=>¬¥IùFw:,òàÚ@Gäd§Á¢- ¹:ÅÑciRÞÇD ü´Utô'O¦uìo7K!S·Qyhn¡½'½:¦{1uîômÌO ÷4tWnåñh° +9Ùü'yöGs¼ùR ÿ% +¢åñÃeÕ&xöük#+'="# ÷ÎÚÑØgs$zÁÈáOÐ }Hh.òdjvÎÉ è%q¢x+ r2KøÂÌ@êÆåg ¸ÁHÔzÀÄéàv f>ÍñÀتiP> Þ©o²«H:ÀöÙ«xÏê*¸22¯²Ý ïÁÂÁèì¬p\lpM +°öo>)å �7¯ FjZ´C, £%ÆÄ§®ùi<?:ñÍÐ=£ìa£ÐÁ æÁç2È@®'ú®Ä~kégÚVÐÐ[Æúuï.*/2OolÙ«¶`Dóå§/D¦J¤®ôîæõC ¤K{q,ØÜN^Ñ*eõ)ëxí$þYqbÀ§QÞQÅ ¥$Ce(ÛÐZJ\b±DTCzUK +J¶ ì(iî" +ÀׯîXò¢$z$e!(Lq,,ÄØí|Yð¨^'À.`ÒZѨ ¯¶RÌ-Af!Ì) PBv<¦å$¥¥À `\¢ÎC¢:]BÄ]¥Þ¥â´eêWñ^Go1O4!%ü`nqr`ÊÊqÆa¦b-[%AeFT bÉMpîØ1bNdì¼ùÑê ñî8ä~+À@@àÐ Î2 T +ëP +bÞB,?(ò)f¹ò¤ohrÏ¢7hvòvQû ª48 +t +¤å2¶B2Ú +ràAL). @n&éঠ,ã+±¾oÑG±"H%¨*Ç 2KÅPqÇ ['&r§%ñLEÇFU(&1u@R'£>Õ¨úX/æÇJ·'ÒÓÎäb£RÉnDí'\ÊyOvì£Ð'ÊërkX?'¶øD +ªoO5"5*B¤pÖM²òè-ít ¦ºë+/®3ð'îffÔÎ=@ ¬Î¼¤Hé¼ ØiñÁ Ǻ©D 0^¹ ¦£6'4áíøëê&vò´¡}!` +endstream +endobj +258 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +260 0 obj +<< +/Length 2172 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´c$Ѹ¸b4á³4 + +(RT5RÃU. +8T¢¶ +XqÌÒT7̦ÒÔÌf. +=¦ +F¥BíõQJw%õ)peN'âÈ Ìu7Îy¸@p2Æó´æ :Y3 ¶Ë§Ôêõ¢ÜSE£ãíb6\¼Öõ|¿`0FÜN/jÈÓCQpÌqg¹¸*r,O#©Ð@hâî7_L>Çv4K(ÆÖÒ7£ A¿C+£-NZܦlÐj£Êr¬)k»4®©kÓ +þB ªÂ8#z2\³-ÚæHØjÊÆ/JÃÍM #aH»:É«Ú(Ì0£`èÛz ad3Ao°ÒÛãHì2µÍÊÊ;#`ê²À#ÞI¢2= ®`õ¢hؽaª¤ +ª=b¢L¼Q¨°'! d¸iâØºp:KìäÉÔ,Ë"¨º/XlIz=I+BsZ2Ïë?È=ÐÔEÑ¡°f«$Å)AÒÔÀQM.!¥<Ô(å=CNðIë}Wd=`éLj¨nÐRpýtά5ô`±È5ñXÔ$c~P]F(p¹$ªå!zS4Þm¡@=c[QÔðh63Æ2ÜND}r¡ÕuÑu!÷`mn#ãzÛ .èS3fC~i$fÓíö·ÊWFÙáÂ<ÕoxÑØÌ³j[ÛTðdf,R«¬IàdgKèÓkZ੯lÛø´×" ok ÑH}Æ9¨ Ì Õ¹ÖV Ã`X jeØU#kSU¨c@¦<Ãxà¿d0UW=tä×] Üf§ÞZrQ+ÃxÓg9£¯¯°ÆüA ¾4£:Ê;rCc3wq¯}àxA äÅqJ' ëd¼×fv»x )ÈÁúÓ7Óö}ÞÝéz@*"p¨²K¯a: è¹@P ^ +äÐ-bÆ -hý~ l Ò*f¿3Õ Oä<Ç Ì:ÕèÙYì4EÒTka lâàBh-K! v Øné!%tÔHÑK«ÇaHrO¨¬"ÐrG£¬j,0¨OÃ÷á7$¾PXnL'¶ 1×ÀÂÐ8gmÀ´PqqCu++ÄäàsK¨EI)3"Pió/gx1áï³ìþ¬³PüÈ: sÊyà¦ó¢ áÃÜ{ѬÍõyå«#P5wêXaài|çzbG@e"!M^KD°£q?Ðx×fmSº7øO8 q3"9PÑ YG7Ä;0lͱCém9¢ç¡ ADr¬Ò'ï'ܦd*fåù õÑ$stÚ^$j(±ãj3tÐÏçNH-+¡!ªâ<ðÌØI¹yO±( jL£Í.Wa@$w LN12¦yÉbnNÅ:'dðlSÜn8 ÁÐ$nE«ÁµS¥9nB¨Õ-@\©:8J»Ñ"ëJ/U3¯þ¿02H åR±ò +-«·Vù´²N~Ê{,éYIën¥Æ5çNUí¯KѬÀký*ªÎÂ(%<` 5ÌL7±V.Óo¥RAÕitÀ¨ÃËæûY ´2¦nûï[a/ÓÆLG\ÿmB ÒÊáæ¢Åuhµ5®¬ZRJLIÍ6Ê¥',yªLÁM¶ æ¾P±ÀS ðÈt¤ðÚÖìppmÑòLìdPØOØaG8 cÛqù¥\@´±Ì0MSnnó0°f[ Í7¶úûn+êÑ\zûqàUä*EË �¼Vä sp%I§ :aäu5Fà0p¤Bÿh¥g¹B¦¤,(ûÄ´Ê +ßX}'+SpÓ&;M«Ø¯4¤¨ !4iS©hMÀÕ!7DÂu#'Gé¿î ébF74q Ù!ÿÀàaÑù 6öà +{,-¤&:¸S £²ú76ÜÝ|1¦mRfßÒ´7 +Z¯Vð@µÖû·RiͦìPSÞÙ#Ø:vÖçÝ!MaÅß1Ò[ñÎC¾¹;É÷ O0áϵ¾tNûÜËr[C^òõ¤Ìüj ¬ÁV×¹]Å äS8ÙsÖ»ï;«¦í8±Ny?MDO5¦Ü6ðÈC0y.áÈ£oIåLÉÀ4Åæøj¤gÒÖ%¢ +endstream +endobj +261 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +265 0 obj +<< +/Length 3150 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$G +A£xØa#ÅäĨDi(PT4D¡ªF©ÐTlqLBë �á¨Ôiq«Á'Æc©ºüi7;ɤÊs,")°Êm21ÈÞmÐèÎfó©ÈÇb9_NqM¡7ìlFLùÐÒn0ñ³" Íûy¾2°¡°¸f7)bá¸ã³ºK¥vq`2g¶: iâ`)pÞG'¹ÝrE3)Òø¿0Ʋ¬ìB1al²Z<JB»Lr+Ì£,å3LààÏ4 Ä3#³Rä0µ Ê9ad ÏÖAAphÁªÈa 2Cp2ã¦Ã@Ëcèñǯ +´ò.ÑO°cñ+¨¼Êl;ãÉo´Ié%)@|«ÂÄ´¹GÌ{Ë CHÎ4HÓj1ÉAplGÜ;ð] +ÂóX@ÞÏJÏ¢4 PÁ@Ü! ã è×Ì2JÇTÄéCÈ*¦©¸P'aª}O¸LØÞ97#àÌ8νªS®©ÁnÒ6õ<ÍK¥¯4;RÕ=k]/£HÌÏR.kvÞ´ÎÚ #në¾ü¼R \ô=Iõ¡ÒszØ·.4ÑÙ¡Cøÿ7B(Ú8ÌÁÏÓn:¡e9¼Ò¼CL»9¿ Ô5MÀÇm[ctç·õ õ÷ + ph»hút+Rê¼ôRSu"º%SÞõHP$Ã0Øä¯úþÀঠ+©vÙ°c,ÙéÆ ÊâLÐÂ2Þ÷JëÚæÝ¦åU:ðjÕ VÅZdZÎàõ&g}ò9OSæí¾ïSìTÙx0ÜE+Eô.ñQ,M"è3þzqV®ªqçcöcGÔÃJ@î¨a3S#Ï'+oÔÏfNüfàð¶;·qA²c{<S²íOaÊ;ê+UcÌs\7ÊQaÇZYjÖ1S´øÛí- aÉ¿oäëÓ7Ø«!clu>`Z÷Hà3!Gmdò×Vx(dÌ 2©èäaÑ82sKv!°:øêKBòG e¯º#ÀÝ¡-o-íC³â|áC¼^gX>°Pð*¢<0Íüº÷øKßC Ä$n e'8X· ÌT`¡kDضhH W¬9ܸh &ý]ÆS"ã3rX¡ÂÀÄ©=Öp±ÖK\F2²øNÉ"Âà,L4Fz·£32%Lä:6z¾Z» E´C²¡ÓJ á31Eø¤1AqzÉc®ØWp9EE@d +hoDÍ©ËIÖÜeG:E +A¤? +ÌÑ¢Ãi À¸ 7ÌÛ\¡R2}SÃÝÑÓÆ|â#¨ÉÉôr«TÐ6sð4JÖkg<öÈÜæxåiÒçNZ´B¥UÐ#ÈW:>|FIò°YïÏ´Ü îA=Ð +Û«<ê~¦dà'A¤4Ì:FÔËf³Î X©fTß`ïDe¢ +µ!2Êu(-ÃL¼óºa+IäÆk Ô=*fõWËØOqïO·÷Må{ÿ|åͶÉíF p21ò)äü¥Sö + ±nnæéu¦OpÓSÄÏ:õêM6ç¹i@ 3"/eóa%4ÞLbÄ ì +Ò\Ú³G] øun½Oôe#mx \Å¢òÚF Þæa© ¶|Ö2âZY° gTðjGÉ!YË4@d©;-0(ÀèmCps±4r*DCF1 eH ±%Uä'£r¬µÍ.$Nè?{¥u.³yPNý&¶òníßGW$PU·½T©« {ÛÁ¾WÔZúH®Íûy ¢þÚ$ùÒ¶¹Ø]9;Aºx§=e]w 5ÂÌs\Ã-/ñL^jM¾©P¥·aò'{Ⱦ#!ô«`×¢/«A8XFÔ2 !Í©/æ +ѦfâcNjØÁ#)G)Oî|9¨Õ"ö(_´2 +¡º3hÆRå¸S¡±NÔóìõ¹k©Ð ½èY^ +A! D屨J,Tâ«2òArN¼ /aÂÁÌâ¬A@uØñØNâØR®Ð¿f¬Ø¿u츧à¡ìÕd¥¸yÎQ7"í¶R|Áªúѵj¾à쬲nH fD8|tr¹ Ƹ#V5Hu ÚÇÏ+[<By Åæ2å#Ý":¸,á²&I*,¥øÐϨõ( iR]â ¹HÔÝ8áÐOðv¦óPóö.£9ºmç4)|ó3äC§A0½ gb¾YÍJ)GÐÐnaâù Dd +`Pë½HtÍATCÏä!ËóCvÂO !8*r¤Õ t=cn;'ftÉÑÓ +ï\Ƨ¾î´;sëÀ°#Ý;#ªxé°xÚ®dO á0fLÌ3·aë¼Ô8`b½V¤î¡³Ö0d`»&\Í!|úG6y~ÍÌÀ{Sí ·¸çë³â¿}é3u7_±{/Xm½î]ÓÖ0C·¾ß8ËãuT~ü°eÁÁ@D3ñØ4°Ízò®ëß<Jùì:Îéªnf=òÌD#´ 6FWt3)Ú~ Ìï¦jPHX*¨Ëë´ÖiÐ3 þEHLbæ2¤E¤çÆ8V¥¶Fh× P¶ÒyÀZ£ã¸bb&nº©`V¦¯ +8W>WgrWÉlvÜçÐ3M¦ÉnÐåy +ð|Â%7%®EÊFK °Ô¬Êi¨«A & +4nlÖÍ¥þøR±d pöÄË ?DQ´c"ú pHͬ �®b|¥µ +ð¼ +å{Ю¨#I ò n'ÑIÃNÍåªc ʯ¯J«ÐòÕftªÎÂé T>jY ö#( v`@0*¦e*¬ç 6 +Ò>°úuË_ [iÀ)Ñ®PåÔ+Ê¥v£çÖMvlú¸±Æ" ¾ÉÈ.Àî È4QQfçdBh#`Q¤áëóÍC± ÁJ#0} îÑ· BØB¯).Éþªj +ªÆqL4Ì6+Jèôëxeã\ÅêW¢Ü1®ô;ÏxÅo¢ ÍDX¥23bÂq$·5ejWn"poåòù Ç#m +É| @ê4I7®¬ �µ ú½^/ò"ïöÝl´ªÝ`¨Ö1æ2PBõF@ITk dzDÎv \7+ÎKÒ!`¤ + (FHî80}J|Òi Ùó4 êó¦(JS4¯ rÛ1Õ3@ +`ì9cèfñ¾ioÎ0#¸»ðRñÈY +rUÆU1kÒÉ<GN¬°.øM +²²@©1ó#°ß#PAóDni1RÜ[5óc(k a K=&é&Òþjª.`òr}fÅ<SU1Ó!2CG(µ-H¹5bÒÉ@|V¯¤*Ý© 3Á8óÇ<³`ÅíÈ +endstream +endobj +266 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +268 0 obj +<< +/Length 2535 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT1 B¡AhÆ6I£qpÄi2*&³@P t$FSи(. +E%CU$¥CAQ±Øs ÖC xÂ\¾#°¹¸*r 9NS¸ç)H¢I@t4Dy¤ÜtO)aÀá ÑEx¦EFq¬QzàoÓ9pÀmJÂæÆ{/ÄYqØe : °æoäâñºÛd¬.ïîì©nóiÀ ©Éåxù¬æ{A¬Íß<¹¼àü§ÈP95Ê" Á°j *¨p¥7 Òþ¸.xÌÐcHÈè{02Næ2 ºÊB ®AÀ\»n òÀ±9K:Òµ±Bá ¢ìñÂ+ì&®»,cÂ)¡tx·#˽°KÂ&¤%á @õ< "ìªð¨/rëÄó½¡ dHfÕ£ä7C +Ø Ñú"Èñ@ _/ÁÀd£Ó;Ë# sôèJqD« 62ļËtÔ¾¶¡ �AP!Îãæ¬c3D �ÑT@"+dШ|ßQ nUx®oðò±¬±ÐSlU¸³-øAp6´ãͽ¬#0Ø0-Çwã0ÍÝ1ÍËx3ñF²Þ÷ø@*ÃKõ7 �_ÑÜNRóýM-!)#Âó~ªµ<ÐÀÍÖ»r¾Ôì-ZV +hdBÂ:!z§Ð"}=5C.xzq +AMy¡'Ú*}£ («¥rx5x^©¦h6s¨Üø~¡S¬iÁF¡¤ézÓXPMª9DmfAoV1( Ì ©ãTõ8ÓÓBõEÉJÞ̶¾_5P)#sýØp4}Ä.T'BPÖxkEY¬k¥'âc¥Ï.V +& +!J9b%:D½ç}àxC)øO{ßø>ÊËHwJ¢jh\Zôv}®áw÷êy¾'9ù׿zÞÇéy~¯ëß^Õ*!]|®Ø)¶&$Åè(~oé÷<wðû«Ñ~OMú?°öóÌd¹%IJâàò^qÌyÅÉÒê«M¬Á¹§ÞÃi4ì)«7úérÌtë1ÔÂ#dÉ\ +e`Àó*ÃÜfQ ÁÕ`HhcÃo ¡Ï èÎÁ×1ÐÐfÎQÌ9Ë §µRTÁN#Ý"(õ®iÛöR°Ýc¨²bmÉåTç ¿&¶\OÎ`d40ÙÆ4Dm/q½ëAuõË|8J!£8n£Ù½*ÆöÂxÍL¹<'Á¾QðίÑô3M©ðÜC¹É,±ç¢PîHc PÖ·bÉ ú*¤&¸øL$áÁ<YAH1VPÕÑy\h4T¨<=àc7$M vF¼y ³Lª +p¥2³¨¼ø5fì Ý1PRìtS �5UðÂ%|±12ÌæðALq¬Ç4üd>ðrïÂYº+Bô\ý¸«3ÏØb æ`E§f¨&aÎwÐ$íoÈ6|L58ÁC0µA©ÐM¤x1"£Z.bhiü ¦x4Ðêi,´¥ª(®Ã½C`y +ü1ÀÞÌ}2¦¾¯C|[§ÓÉ!<SüÙª3v¢>ëêDb~À-Oª{udjEUD_ fæi4J°½Mi²l²ÎEú#icv ÌR£ñGÌHs¡°ÐWJkçæWÖO½`9ÌÌ#£¤$`äP`U[ÌÉõîÙ[C<Ô¬ÙA©½ ä oAÅ=´æ±Yư~&çCf~\[ÌÚÅémG"ùSh¹y-ùò£öÊÅÛioXd ë +S:YYPe4°ÏGÌÈiá¢Ú%d �Ú£O\:Ç,sÂ0@ À,¢cB»Qc;F:äP$þé<YÉzåŵcxIÄG&êÛ\¥LN?U^Z +ZìªüF4Kl³>æ=&¤ô¢t±Ä¥nxÐ\´rùȶ9ó%´ÅpƪHÁ½ÛîS̤ÜÉM6IÑ;'B$ÇÈ,ÃÐ@Á«$,7T %+óÃÏN(¼bÜý¥ÛÛ +©ËxÒ´êÝ\«µzbVÂÇ´ÿIC¬¥rH4Áºè¤Èp[sùp.-¹öqe]kµ|/æ½jb% ëé~m@Cu:»x$5Õ×Á_,;fsÉ$ÜÈ4Ì'òBæaAæT%uü©V7ñ³d$aÙ<fµjnÆpPë8'Áô0×ÚAÔ3 >$ÁO¨æÜæA³`Àª3D¾l¦é|pÁ@ qV¤S©uO¦0 ÔZYØÎVq²úætW+snuÏÍwdt ÈJZ¢qoÆvAq Æã|uÝrÎïS=ï49®< Í>ÞªggÎy{úqTôH¡oIVP¾Ã3õÓäQuxÐ\Þø<DZ* 殼,9È©1ú÷`ì\s·öeË»V:.=VWÏÎ3/æIq6ÿ׿ÄL} ÖÌ6ÕêªØnR øC9®ìL¯ÏHÀáÛ{¨S +/ oÃëcçyö$ü:>û§¸Ä,ä~9ø¼Á°TÄAzÂû=q/ó§²eUêH:hMÆl3°¼¨Ç`º@ä£ÌOøöÎÀ?¬®4ʸÍèÔnêÔ¬úçÂA lLÍV²ÕÀd fÇ |ÒÒÀbZd^ÐiR >R4îl÷ÎîÔé~*$èm +èÂ9êNäòñ z"èvب*Ä"íª¢»Bp(ðtK,\TÄרTÐÐBÖVejÖÊWBimpX0PE0×ðZØ)¤*6ò"¢ïFïBâ%¼R®NB +endstream +endobj +269 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +271 0 obj +<< +/Length 2358 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=#J¨$; +A28N Æäq¨xÊ:Tᤩ3N+£yÝ,`8#AAS=1Läó©ÐR5.¢EPñ¼ n3²1¨Äf Öá#,Ì*@¨¤j<. +ÆÆH¦C\¨ £A¸Àd.Uë5½¿7XÅÃ.8`()MÆóÌÒs¾Pór:F~-ÒóãÚ¡¬ l8ÄÓëÑÂ`æ ¾c2LfÁËq¹ÝoGBà ªI'caÎ9 �aH¨53lêÐ4M"ÃKVλv;jÒ¸Û,2Mèfß½ÃÆ9 #è4ãs¿ Îc<"+"ºlS¬Å£#¸&-¸ +@ÊBР+#4(LÐ" *z¼ð=Ïè:>o¬',¹rô6Õ1ÌzO2«I¸¦Ãö:Ãw{äºa £(æ9¿Ò¸è7¤¬=/Î2ArKÓ+69Kêàb´³"È¥Ítõ%êºl° hê9 �ëmT ½PÓbë,ª]¡añý^#°nÈ#ap¤O £GY¤õ¸P0Ê0Ó´ý¥³rë©r;ÌÕPþ?ÎEñ-ÈPÚ6)]Ó è0Ñ£¥8qèè9 ãehÒ£ÍåBÔeHSt@÷ÔX»(1£HíGQCsÊãУt®7ä¹ ïdáÔàµJV[!pn1õuhïViÀ!Âü b*vìV|«ÃØ:Êì áføÐ0×®ANc&ßDãÆ:L È[ÀP¨ÌO2¬â¸) ÏÀ`LĄ4l6Ðm[eE÷¥då[ 04-H6ô^R¸Â7n{íÀTÜ Ãë"(¤) â¿q/²ìûH˵[nkØî¼Å:ß@3co Lÿ@Ð}dz £Û7¾²#" &kèÿÊx|·äy]ft5î6=°äVCpRJ]x Éí.äªë(ñØ3÷þÜs;Pêõd2¤®¤k£ ÌéRÑÈ2úKê ÝUÆÀBêLäpæÀn7`Id@«*ÕÒ¬R`6ä¤.å=ÒÃ$)}#¹¢rO;ðñ4¢ÊZH)Ê%Eò; <R%Éñw+ȲÌB+"¨PÄSÊRÍÁ£ÐfªJ{M\Ë¢1.»£Ëc°#Öf2=SÁL2À4®zQ²8GPqe¬Ø´"â_\Í8ªÈp¬ì;Jpú ,b<I ,ÄÙ^º£Sª`2Hö)åÎ :=%²&[pÀØv îmN(ÃȱÐÑ#`â7ͰPf¤j°y[aʱ&ÐETü½8uQ±3<ÒRtä×ÉðmY¸9OöÛP ÓéÖÂÖlÈY<ÝÊ0Т¤ÄÐPÄéYòÌ;4GçcHÀͦ.UÏ6ãdAh4»Jyt¢[pSNºÐýG4ÌÕH "¡6Gp5ZnQx3F@Ä)ßqÈv±®.$>t*J 3Q ID51HmZI´ªV¬iVÁ@EvRbκÊ+:H¤ Ôa[æ®lê»%¹ÂR«É¦¯u6§(ª,Â+°è£#~Øâµx3Rا*QÖ6!ºÌtlÔ²ÀÄÎKS,Xk>i¤¹66Ñ%ħ³æâFTl¹_¶¢ÀÉÂÎ%à #´o2ÐlÁxPðK³µ0 +ÂiÍ 1¦=X3*¹0%¼ôj+åN* Ä8ÕñÖD¿oÒ9²eBªê§\$r}Jgò �ôT@( tÂk'R(M +Ý,R-´ B¬ mmYVF¸´¨än^í§øVT;NE<"¯Ëy>·¥ <,ÊR¼À6^Àá{¯ ÑTüÕ\FÔ¥²JEm1Hôü9PãÀgIMè(¢oðÒ8Å.¥®5Ôluá½8L +2¬£Ô¹¦+÷2Ï <ÍÚãÅDâ~»£uC)A¼<Eu/®BW8îC¹µ"©»R§*Òüë0Q£!ùý3%,-¥ y}è¥ãj¬ó²fFÝ ° +Ü÷Ãq0Сf[N¯q+ý¶°·º GªÐ» +µAAEàa·,pÿ +éYØ2vÅñÀk8aÞdE7vÁEÜÈ ,Ji`Ý �wkXàòpf*ÅÙÁjqW^yUÒ¼WÉ^±Ë;"íJ4¥:Ñ¢5QkuÝ4uXÜÜ¿Í Q«µ|9VµLræ^V æ9¬Ýu¨½&ÐôÌÓJ¸ö ucab,SuÃÇaû!p1_Ux7u&©Ú+§G3d×M 1#õK¹¢Î«¸YµöÄ9Û0ËmVÍ·2뽯Øs»þ!0Þ*¢lØ/Á³<cDߺMÕ!7\©±qºWt¬àboï)¡]à¤ßû?jào¾¤$èCcyÆY«=ã:Z íø(ÐêÌO`¾.!øWÍaqvcï¶ûÔåÛZN+Ù¸âÃÊöFÌö£êÇTï ãÒÈú" +endstream +endobj +272 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +274 0 obj +<< +/Length 2561 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9FEÃ)å4f0§3ÈÒp:MæáM#I)PÐTZ%QÃ$6ºÞ§^°X +õrT4E3áöG#Sa0¼%8p9J[0 a:MSÁ¤è\"¡«AÒA#cA¦©«°ËÆ«6JµÙçæc©¸Çy½ÀØa<ÄLÈÊr9ÎB¼ÈeÎß´,0f.j©vNH² @Ü"½ÜÍ7ûF¥HÛÔ¡nBPË'ãHÜñ¼¯xÄ:ã;Î#pÈ èñ£ÀÊ1®ÀÜHÍ>hdCPä<õÆÁC¸Ï/áhdû¢*Z§! -anè'@äêаÎ3¡nòF²ÐP:pøS/q³-¼ãl,ØK²ÛË1Æãàï 3,]3 zxÊSÚ8hܼèËFQ£´2Ãpì>îpÞ:Ý*Ò½9N²õÇï*H ZÉ9i:M3]X2Íã|À).©Ú¤§W*ª®Á²-$¯èh ÀÒ-¡f Ê:£Ü9ÈSꫪ+n±a ¯¸nÈ?µM ËÝY4¬\WHé_ÊÀ@hÚ<¯ØÖD)e£m@HålTH31(¾Ü7b¸+ɹ Ú7]ðMi´µåêä×Åô2håþȬuUµ¸2à!½#æÚC2Ú8Êë.vË �cwSZ×¶#`9¶³pÝ^·bbHJIr ÁÂ<«v4É,ß+£CCȧ¡jæ90ö" `VÛ¡ºÄç¶r±!ÊÕ(^9"ì·º|ìá¢eö6ã(ØëcóIBϰ{ ¥bhF*ªKG·æIC¢Bx&»Ï½oöuÀÀ  "Ä~A,z~¯¯&ùêzÞÀÐÌrC,°& +h¦#`à&c;tì*G5[óÚ¨ç×Ð59`¸®6ÆVIh-åÖ"è]ÂhÌ9ý»Ó` #°T%Öf«" Í!&¤ üj¬tÞ[Ú"yÎ5ówûà$øT©ÎQÿ9° tè9Pë'u â<KÁ ? �¡!Km!ànUÇ]0±Ö¼ØÁ MÈ)3°áÛB¸cT?U (Äî§Á Ê¢:¥ûÉÉê !5ÀÙÓ3í JJQ̪KÅ@W%%q±aJå,âûÏCÀH Ê£¬D°½ym@ RfdõË ÖÒij0Â8v®Hô*Ê7£»Ñ/æ°[7yé%%ÃúÔÞNáÁ#m1oQO¹ø0èκÕ}Q8"°ÒHeDrÂmC¸A&túM5Y _ôó²>¨M ¢ 3¦«LóÅV ªù2Æ<kCCÚA +Î +FÉ1 hè(²d¹j"飿J«Ê~ùúz§ôÔ8TNQ">.ÒÆµl#-|á¡ôǺ;U±÷lv 5dS �áÌ`@¨L Æ/&JUë)cåÎÛÊ{u,°e ´¢Öþ¦´ºÙLK»ep²3'QÐ ®Çη/2 iLs¾s·ÙÓ ÛµDBÏÈ(K ÿ:$æ}H%jV¸ Á&7±CÔTÁÂQJ@ÜwYE"ÃÑ2ìÖ©ø³z +XG¦Ù£$rÄiÉ%°àÄt¤´ÖÙ +H*[)]ì³³ù^Ù°A7¥öe@°iiAè=VmZâ/l ÃNn*ûm_¡kd8Aý¯{2ÿÕþq°3 +Jùuà7³¦xYòGh ¢bFo]½¯ilQ¦ �½lÞ9<6+Pöt-¤óï£p£ð)Õß@`@L áÍÖO¸I ÓòÁ*'A>VE88ÒNT9ı¶*X¸ qê¹tøu$:Ç\ìNµ¬C);HÁ-lj¾ãñFa¯EhǤùýI{`$wªº"بµ,<W6 oÞvaù×µÇ5^4ìó¥Ìºt]i,¶:á!ÆÕ¯'É2MCKôßE² _ Õ]X«ºöÎÐññýîR3Vp&ú%䯝DQL©¥6LIyH`¼6S}?ªÕW +Gô +ÚfÞ<Üfaà¨Jèz_n©Ùñ°ÊCo¦h¢0ÚÓðBÚ0ñÐ#dah <0Ê^¥w°Xtby=Ð)O÷Ku(» ºç|ù¶×²v¬¦ +/R" áÞ2¢°ß0cáU¶/ãeÈ ÄÒ¶ú`~¬C±s3¾7§ù>9¢ÑoFáȨ0ç|Òò¾<¶TØHÌᣲrpË«Ä%¨W°Ý ÌðøÅ;>*ÁÉ8Üè_Ào �tJg÷ îx©ð:¿-X½ÿ]ùAüBÎMRñ/²rrSuÆXs 6Q3ád,s-þîpèI#ec³,ø@µÖObÊ,NÊgt×ûKj]+p «tªVæÒbï¸9HèÛNVÊHk +øËCZ۪㲺ð!l»äfå `ên¬gC¨ `¾É¨¿ +ðPµK´»¼þM>^oêeî_KßoøÃþÃäYÅ a,FÞ + �¬rKF¢³íÎÕOüÈÈP-àPÈg¦~h)oi·mäÅ" )¢Å¯j]`²¢/ÚÌà@ÒrC®¢Q± +fDÑà +endstream +endobj +275 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +277 0 obj +<< +/Length 2339 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢<4N¥BT C N'Lãr8Ô<e*IAC pÒ3N)Ý2^(# +iePa9 +æqÞwÐè ¢,2áqÜ\5F#: rr2Á¨$ +F¤Bá ¡la@§BsÔÚ9@Bá¥bµ\ÏÐ +\1²âÆäÜo8Í';Í/#¤æâÑ( Ó aaÆ¡YX"y< #.+¥Øî\ +äâ åu;án;NGBà¤vS.Ì©LãFæ©ð;JÓ³¨Û¡Â¶®¶M P±µar·b Ê9cÒ8HÞ78«Úä3Hr æ"±{ úlB8%¡a Ð2 )èA²ìê³{@ Ê´<K溮ïCû �îh©&Ak`Õ&Ihb(Zl°§ÁHrèÜ1ı<µÒ~9 +v§Ã»Ê»¾£È@: ã8Î6.8@4J: ,½ ¹5Ì)<Ȭøk0¦²xÄ0Ar48t]GÓC(Ì3³Å'KGá ®l*!ÂQÍÒ} *á �3ÀÒ;# Ê2P+¨@2¶ìKp\C#â7A ì4tÓò9WáuÙápn1r&-SWÚ #9*Z #µ»O³ðýT·#ÀXrÏÌS$Ì +üÔ$uLàe2ÜWæ8W#HÌ4ÃôZv ~vO¯MZï0A¡ÀP9'zP@Ètc!IÐ[iæ©@^Hκ#e|:\#-\$Ò$µI °f9'b:7§«ï{ã4äµ.3agb[ÑBv«Ö" ¤*¯3 Ny oÁhhÇ* ÔÖ£²ÖW(Þ:GõhA´jÛÀ #¡ÛT=³Xê]Fkz<E¯ÛDzßP +UÏߨE2ÌùKµàw'á « ÓôW%^ã[d +¦"FCÍ PQo´ßØã6êûºc´ÐT±kÆüÈ.@¹¢^éÕ§åÆöRÉG%-:WJ¦SDnc&ÔÕ46A@RfÔ9ãß\G<Ðó ¤4Ä-ÇUòJÙ[ju-õ4²ðSO6Â\â<h®¥ÒÃlxüÁ û È*BG6k r9 N"È^ +(rv+áµCÑ=FPüéDd M»)5ì$äNÙÒ3qå% @áAGhA70h Iº6ÀÕ °ìCs°É´¹ðh +ÐeNè~Fgär¤ÍÇDF? Í{ù5«ðÎBe¡Á+C +iÍ*H0h AĬ ¸¦Ù ,¡sKðÂjKÃ5æÌÛmEõNá!1 ¸ÇdÌ©~R>R E)ãè älÒÊØS,cpFáÏ£xoÂç 4°o +zÍi±6¦à( +¡$'@@B +?gôÿ¿ú(l{¢1ÍfA:Í+Z<$DÈ¢1ºM2Q"v³©E"<,! §»1Øs úk=é¼Û¬iÀCLA²m®¸ë·SÈne<ÅÅ|Ó²äkÁ¨N¹ 2~[3f¬Ý×%1k0ƶp·'I4ªBc5¯$V QÜ|/äØ&SaqjQ)^; ¹ uË µÓ +ÃÈëÜZ+M':dß0èhP6ÊÏ[@ðC1}.ÕrZg0 rQEÑä»dC]WÊæÄ´u½<Ôð$ºðÒ¦c²ü{ýª6HøQRqwa]Ë>[ñ!R<ÓJöã©{ÅWÈumíÍt·Þs¸¶òDf±W ý°×'ÓÝà ëFLXxl ÝHªèz/R¾f3 ȬqÜf]ªNÅFKÝqÃ%ñ¾q:Åc6sgI0$wIÐÚìo0]ù ×ì'_ÖoÙ«ÀÜà7½°ÍsåÒÉsxÙª¬¼´á}7à¨e1âi¦øIa<'¦(R !L%³´ÖÒPÉ ÞµÊBDAÌ5sí$ÏòÄ&è£(Xa0 ÐN't±5Í5{#&\A´"Æxjá«z7^PÚµZpÕº'EàObGpÃLÙ7°lnà «flíR^öuÐ(êßêÍ]µBÑúä'¹`5öÞØ +÷aið¢PýõÔûméx>Úa?J¹ò^W·ÌÉ»ópéô<u WÌYE!Jd [èLÄ+An´ef¬É¢5¤hªÚ ZOXL*SÄ=ûU ¤óµÀ5ùÁÙÅ`1òV¨H4-F¤5*R"E/fqá×79Ô¦ & 1&ýÌG)¹Miz"È*0m\´êRÚ\K©xYeüÁ}]µá4Ö¦_]ü¢M*ï>xx¯vÓÉÂSÉä9 �t.ÚÜçmR,`вÏ9§5kÀBñ3ì¿üB +f#¦(Æ2: +d´K^6¤ôz*AÉü§ÝÎÿ6mꩽ7çáÌZû$¼¬TªùNSÏÕ..WÃÍzQì=Á\º YzL +G +<pC×Õü?òþpæ¢S'ÆÓÚ~à yS5}ÏÀ +endstream +endobj +278 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +280 0 obj +<< +/Length 2335 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQNË¥BT C ¼i¨S)¬<k$ÑARL +S©åI *r4ÆÆSÊ`Ì`("Nf3¤àt4Í +FRa ¨´J¡ HEÃ*xÞ¥]¯ØF (*¢IPÕF#S!0¼4p1Ô +IPM¹Ì&s)Þx. +î~ÿÒA¢êÈÏU¬rC +N¸@f:wÐÈi9 ÉÌ@tÍ ÇSa°Zt2¦qÐdÎSq9Ðh°T±¿D9[Ëæ=6dÚ7¥N`Ã5is¤¦ë2~ö¬4#`ÞûM¸@;½ Þ; È[ÂëÄ1Aâ«p\.0Z¦-:ä9I{¥Á` Ã!Bð: Û°ø££¾7»ïÆò¼ïKÖö½ïæö>Ðjþý8 PbA« 2Ë3 Ð{ÇaÄ) 2lËŬË7<4(SöApj$Á#$° ¸Ü2 +ä2Ã¥=8Iz²ãÂÒ=5Bõ D0²«ÒJo7[Tu(@7ÒÍ!DaL¶@Qåð;²üOìÛH+KÂòbpXÅt93èP6»HggÑwPç*Êá �ÏÍ4Kd54³C5è¦:2NÑÂh£Øtp4Ì2Öµ½rô]D;»Ãôùãe;WuðAT¸¼0ÓñÊ4#²ótX+R!¸hø] ©0 ÅMæÖ\eE¢L¬1çô;ãhÄö=ËÈÝaع°Íås @;D#ªäLÔl¨*hnPÔ'¹0¦¢¾ Bx¤* +B/,"8Å«`r¬Ä_Yï1(ä:Z"ª96xø #=ýQÖ£¨æ4Fc¨è:/C]£ +UÇÂâx¶&sÍ3z³ì½ ÎÁR/c½x]gÚöë×v¾ ëZäm áb!¢bx"!§Æ/·>z½X@!çËh³¸ ÎéÞ;ä4ðk|¯ôÀjÈKz~uùºcæó³ø:Oíë?øî^Ú7Oyp*âÊá0Y¡MÉÀr[ïyNx0à²\ë= Ëýÿ=ä#Ð /¨Xà[è}@´â2~pÜ9wOOòÀ³ * @¨Âp1Ì1dÁ ÌCòÇUV¼ÕC(f':´²Õê/265¸j*þXjø94`bFØÙiÍA!½òÀÔÖ|huØÊÃLw§Âi!Ùø92\1ÆÞäªd²ÆE\ø^iq¶7â×d<+ͽ +X@TprÙ¿pÓ +6Fèàã/}ëP9LéE4V4®60½Øà|fx$!Ç ÊÙ}ç±µ¦ÊuCK8C¡À8UDwãU(ÛÎØ 6üô) @HSxq1Ìã2ÛlnS¡%rfsÔ'Oyò§Üý»¶j- "% Á,0iÌþ Ô �ê6uøÍäUW(0ÐÊUãg¢OÅÑY.ØýA¦!óBx Ì 8}çÈ7 +¶ují ¡õtÃ6±Yç½ÃT*: o±ÍRâ©ñ\ÔÂtÓ8á[pD§ó½LVÏPU tê¥Ðhåßt-Èù6jîÙëÍ_¢ÍÖJÿa!(PsÉà `M á İlÂÞ<vJì6»$¬¨ÎÉz>â¾Ñ6}ALÛ<yËt0ê +V¯!²Ðr÷e¤í=o$KeÑBElµ®+²ßÒ +rtßTËBT\§¢ «ËUNòìy×Ù3[à@a¿ÆUË|äĶiÍí¾ÉèÂÍ¡6á\HÒâxA×¶fw)] Sò¬ð̵Ë]@8]'¦+Ì¿úKa4·Z×Áì|cª°õâÂh*ݹ(ÑMóÂÈâôá©qdúR¼Kq_\±§zÒ¹féuÙ;Ïß\ÎPEÝ,åx±Z1M@\"r¬ +iN)å@¨Që`S&ïl M{¯UÀp©E3+ý|å#É;1%ÉåýG«pâK¾XA¢\pH2Jù ýä>¸ £$§-ýÁ¸w? ÊLÒèfÏb,I²×Ñl@¡×&BÓF"zc$ÂW �qªóÕê0¤&¥ +Þå<ª©"Hc BÅ¢Ï*[êÉ×~è ºjã tªÒ£0ï£ÒÖ©º¶ÙH Ò1ú;'l<µÃ®Sg@6-mȸco±ó ½»¸Úb+LÒY7fñzðäº'!&â8ñÊ3n ~%i%jóJ'O +Öy}¹òZ³êa$ÀÐZFïQjuöÎûûç¾ÍÉíиú£rn6TÛRx]k¯3}Ù÷Çß,i࣪BÕLc©áþ3¼îÅÞû-¸ö{ª<.LvÜz¾sÇz çèkìñª@¤^"Jï¾:÷Ýýodõðܱþþº¤Fá6©ïüoï_ +-\ÝÛεÌQ´ÛX)+P÷tf^1û3`\Á ©ÛBf°qÄ +endstream +endobj +281 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +284 0 obj +<< +/Length 2514 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR̦â Ìh.Néc1 r9ÎG1M +#HéÐTZ%O¿OÅÃXDj7®KF +DÌ('ÍÆQp¤¨j¢¨ð»åFOçªuQÅ8l9ÔìMz¥¬ÇN,¶q¨b3 +wÌZR2CAAäe7Ì·K¶f ÎC¢ø¯O ãqpÊ;ã ÞYÌÂg2¦SpP\å³Ý$1Äô2;gw²,íZHÅnûb²m¨Zü?@¦§£(R ¡B๠£xÉ8«ª¨!áºÍHp¸@«èCÁR3/«:¦)ÏÒ +¢¬ì£2;À׬@Se ÁlÜAÃÈÜ7ÒæDkÂô诮´ÀÅLVü-úº¯±k¨ñ +¢H*ËCc:2¯tã90ê·®3Ô=> !Û庳DÐHjÒ)Á¨r°i¦¶Ê»²r"9cä4 ÒÉDKº /¾ÌÆëL®Àj5¥Ác7 @¨4¡¼9ëÚ-x¨"&í<P³Üú÷¾,»3X/¬ Òr}A95S$#`Ø7ã@:X`à8 HÆ0ÝCuæ7$:.#eçz7¸Ê0Cbã0@&ah'a Êó¹l«µÊ2ÆhØb)\Å×ïbØè50#y sgfÓ`aM<T PùêóF¯Í¡¤ù´i^±©¥Ê`Ãc£0à#xÚ1cwåWb8=3 ÷uáá �Xuc «8h©ÐX]\MÚ, +b(/Â&b* "&¢¤'PxZ!p®:$·|#ÎåÔõUö6¹äpÈ68Ù.Nôl£xñv à @ã¨å^VêA²Ãfy«ÆI®,óö}½ò7o8Mñ}mÌ+me \ªzèß ñVÍÆñâp#ª£sáH!ð°Z9tî¤:·ZëÃc±vg ɰ×pkô`ÂCc¬dÆõ<PðÊèTGL±£5îãûú á@"àäÂ,t °b Õª î±×7`ìD#<Ï1<`@Ö#Ð^¡Ì<6:Ta !±yF ¤cJ 85&±^ÔÜÔûïJe´à<×#:Ü:D]YujB¡ÚRJm_=Öv±c>!K(ûÀbÕ¢ÑX+M¥¨dø{>j¾4¢ªiäÂá aî®6ÛÞZwyÁº.¯X0C²««É½Æúº¡µC¨"ÁcbA¥Ö%°@èc9FõAÇ×(ãDQñ±"Fâ˦@lܲ¸´¨L>- ¹<È·)UV TìSRV'-{¦DÉÍu6£YPªR8w®ÌR å³rnÃy½7çá½ã4ÕlïÄêÈièB J¹n$er>)Gä¨Â6² ESä©Bä P2%à #rPÊ uäPÈø)'é%ÔJAEH±½®*8 hðúJY·@ÞH±Äë)ºý©ºQTIU+¥·FRôðLSÊ&dÔÅ+ÏuºÀÂ-CwÕ¤2cÜC +aP)'PÞóPFadØcBz§í´6XU¢¤ÙhÐÐ4[ #usRª«Z¤jT/Úá)(Ýs£¦@wSSÛ1z±\´²U4f°kýB¨ò£µõ®|tT5RÕÌ\.+ò\Ö.Rp±©ü®_«Ìê %ÝF½P:!PïµóCRÉç»0Ýu¦z3ÍYÆÒe¹½¾QÊ\»r¤¥Q¥ï3v÷BVFÉÝJàVh׳6`MV.!kÀ ÐüR45íûv¶CÃ0oÙ;þÉÒòv)å1¹Ds¤@wwÜç»fCM¿övëaé)LDF?HùnqÃuKs0åàA.ÛÃתX0ÀÊßßbTY¿ pâV-¹Ù6ʱX8ø)åy �.¡`"Ïà +³Î{ø3?à|ï^̶$°¿t³£5HŸ|ïÁ@IbM9b¾Aàhªöçü3d-xY0bµ ©.A±Oh=@&N´É'Øî;µæOÀ¹NÏlCí "{»+c¬xò1qJRÆ_±òsöAØkl;Cv¶6X£UëH¤LýbtïSHíBÒ03`¢>Ë9Ý\mÌ®ò»Ir,¦[ÝÖYdm2ùõÎðÛ;ÊèØ§a.´ [3bí]Íá¸æv_ ÞùM ¤yf¨l3%è¯ëB.ÊyΣjB +vÏ?îÉ)ÒMägØ*ul2ØÛÅómÂS`2M×Làë-&ÓsVd¶GtÚSçB¿MåæÑ/eûÀ7¬²£Ï*§ '5УqðxÁÌC½xpùg +Þ �.<P¹»|Jeu6ozϾ^÷xPÔ: +A|!@A ÁÎmV �ëD2f-Wã³éÉ\u-È^½Þ{a!-ïñ/Ƥ»ä}Ͳ#`EÀ2ÁµYX-$º|z´n¾Æ¯Üzy(ÊÅnblzaEüÈÀÚaÇdKG})h)À@_ Ö®t(w©r|ÎÙíHÔÅRæMÍ,Áø´EßèÚ n!àl¸)ÈùËZHÉÒ-bÚ®·À£@Lz?Î$N{äP´*T>ðd´ÈÞt§ªàÊΡ£n¡ãx7Ã8D©aðiî":jìùP¤°ÒÊB +endstream +endobj +285 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +287 0 obj +<< +/Length 2909 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡A'¦£1pâ<7ÃÆQâ¤0&s@Ðf7SF#AÐo7̤3y°ÞrÑ(À¢,5G,C{8»RèVAÈË3 + *9#S=Îaøq¸ÃËKRh +Ùâá§l)MÆóÌÒs¼ÑaÑz-V!°â]Õi¬`¡AÐòp2¦aÌèr:ΡÎC$Éå2)L'±IPÕª RAnpn¬!b#¢¥5éÈ+¾""x0ÈP6 +nûÂ: +cHô2n +ö*2Jú^é5Ë +ÐPZ¡P4 +ãpÈ'ãpÊ9C+Ò &°(P$ "p¦*"p"§«õ#s¼0Ã1 FðêÀ"È÷>¤"Éàp'ÃÎ1 +C(æ:¤jáQÃ4Ú9¨ZnêK¶C`à!®òè»C2ûJ.¶DÁl ÃdøïË5Ãr>Q Dæ±è¨aÈph& !sÄô3 ÂBà5MsÄ¡eb' +`¯MShYLÓtíTP P[)ÄÕ2!ÇâÖAã¨2£ $:¢pÂ6Éñµ¼ü¿jý +=*UxP>CÔöN¢Y<\oKÖö½ïû ¢2H¥3(úíºa@õ *Þ¸®kªï\á¸>!,ÐÆ1Ûo®(¤!,ÂÎ5lò¡,Mº6¨ºûXé¶,(dÛk`3cÒ8HÞ7R¨6/N>|lNK¨q!MÀQ@¨4¡lʳyÊ7ªd_ÉF·.ÿ NïëûÛ~µMBl²0ë&ë:Ø@8Cxì4»CɺìfãHè4£xÈ0 �åÑﮡ º#o8Ãðγ=È_á fCíBqÓ2Î!¿ÀÕn¦m³P8#æ2Þ: üXZ3ξ 9Pï¡*%eþ:¯Ð»w*]Þ !¹úÄC³u.A°2Áw4òÝh xÊåÄà ü#.áÌ·Ho¦kA¹å<ÇHíÝË»w¡â :'èlÞ|b1?yÙ{3¤`.jÝëÀG´ÈTqmyñGöFâcefÅåÀÀI«î^´1:xAâÙ (÷ÎtcBtaÌ!(âãLËk@Ä ¸rAAÞ<:èZ]Qå;;@ê {Ã'6GÁNcïeíȲÎbÑÌÀ°sc3én 5Æ×ü[¬KÅÖÁ0ÎÐ26jÔ1°o%! ðB ·£;!:hM"úBhP *$GÁ6&ÔÍóFiÎYÃ8ç(HH!iÍt:·Ðü-³4#UxÂÏ̸Ͱ Â´Ï +öÐ@å$éáH#$zUçUP3ÒÂ@ES3dS á<ðêxÁM2äWIOD8.Îî C¶íL¡ûÈ KlvàÙ ÔD©Cu )¤Á6ÙyñvÎâ¡»Ç|ybîTÍÕüÕ^+q?@¦ªUb%Cd8ÙÀb +TVʺD? m2wʹqRª@H̳rÎbçôSNU¥!ìL¥þ Õd +¦<3ÐxÔ5¦ðã¼è¡ )w&#¦A¼îX8xXw n\º@Ê.ªVæSûO``oõ2óÓàÊ¥ké´°&|Òåt%Ô;A¨ºÔ]un¹ãiõüÔ-T¡R ¶ÎïÞµøeÁ&;ÇQT«Â"`P®Vg`1ÌeóvÃì/ÐÃáC^IJÎ&u0¤4µ9ÅÝåÊ.AѬçwè5¡XºL÷*¤=¦|ÆßDQ}ÈAM(Ì7C(3XáÍf& ³iyaöÇxâ`ÓT±ÕȤ2º¦ét¬ÛszwN)Èa)ý- â¾@ +ÿ`h!¯,%+Ω»;g~3Îiäõ'Ý&zÑó~wçüÝ¿î¨ÄJî±U2wÃC@)G>(â6«,ZÒ»é=1ÁÎ$Qéë«TÛ �69DôUAÌ¢µ¬4$o}mJùö`19¿Ñi¦É:ÞÊ 8Û2ÂÐ!ùJuÒ븵y/G¾Íå\O6lws_@bûdDµFp°Ìþão1Wm½dmËÑÓ³Ni)©¥4ÆÍþîé6 l;ÄË·½®k,úH)1'XÒ÷'{þ?Ç2À©6ôÖÕ[¶3®® 4c;!Em'δ(÷x]k¹q¬»âÛ©t¾R ´Y_¯Øèvû^è$o\W* íýá½dÕxoµá¦T&6SY¢xtÓ\rjégwȧ'n¬{hàô4òϼ7ت¥æì_Î>íNZfAþF+s®±xkç¼âîrÁѸB²[CØE*Ïêl5ϲ'¬rdF>Ò¿»],:Ó éaÏ5ÝØ{Îýb2 V9½ôchÚw¥®-¶Y¨4 +}èKÁC²ód7BÚñ* +dò*rï2sg:ûé0o®Ç ί$ìk"üâdùÍݤÞoªÿhf;¢ÞM1Àè¨h +¤ + ~ë¨sÊ)&n l!Ol²§ +ý§³n NJÎû¤n Ìs Û �y§ÃÐLÃ|ÈÍREP&ù-®pnÕªTèmîöðÀÖ°û,' ØÞôÈæù`jË>´-6fèç(TLT£Êyðh 60&çmþ2°Ñh©/ +ÎÚ~ä^ê÷ÇLÝZ+vÅL¸GVs êçYFðæé<m``¶ èýpvpë2q/àÜHðõuÇ4±h¿<ì²ìpöc= ^þÔí° úql¨µ¥Lðârñ,ª< ê@¤@ ñÏ|Èo$Ì +ʨЯ u ÈB +BS'x¦çñNÀLÔn°\ÙH®h+½±x½§ðÕçcIÈ0nFªdèOH[ EÄ`FP«FÀùgü¯ '´÷"rØÊälÜäÍuM;Cv^DgREËÔtm½D0ÌFÆ`A lê*öMú ràíùèÒ¹RvûtP# +ÖÔÉÙÈ^;äÿæÉX3õGQÏÞþ'þp`GPná Âäxqê.GE` ð/¢ +endstream +endobj +288 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +290 0 obj +<< +/Length 2592 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$G +A£xØa#ÅäĨDi(PT4D¡ªF©ÐTlqLBë +FsHÊs:K4G ÛqÒãW¼&ã%Ëg´Âq0HÜÂG'¹ÝkTè Øp!NgB¼Øo9a,øH(içîTÃIYás`TâÆ1 + ¦SiÊr9ñù&SȨ̀N ÞnîMǯs'2LÞ+Ò ñN °@vúoâ´jï'oø@1'iè˧ÎÐØ2c ÊÊëÀ÷,C#è×áJ¢JXdÈÈ@¥ªk{vº.ÍüPÆînCxððº/æú#Ôä7ÃKÒÊ �¢íp@'¼{Êòä(í>ïËö1»ã Âñ?|A̬Ð×S(Øýad4¡ TÞ.ɨ®¤î P4ÓjÄ3£t4»ò°@Àcþ9Ñ`\Ù0ÈêÖÎ#ljâ)sÈã¬@,V8T_Z*Av´aP¿¨ä7sÜ8£3Mª,.6Z=T¨@l®©HPuQ8ªûÞë¹4eùÒ7ôíØV#º* +B¨ðÑ73å;´¥,9Óµs,³±qQ÷+°êØ6¢#"`§wѸ4º#b9N0Rÿ8º}"µN|x7§aºõ§Øk&9ñûc ¥Q"Z®ak{4A snPîËGKÃtêÐDȸÈðbëJÒôÌyN ÌÍ>¶ +tÈ.¼!xÞí5³ ¸N ÃÙ+e¬4Q ¸ã£È0ÁÎc,ôó6UÁc´ +Ë}/KâüÀ0L³djm¸jjù{A4£»ä4QA:èRc,ÁüRfÌwÔU´WhíáDæØhAND3oíha» 9 °PÃT: ãhA×ó¤*õ=$Åo²ôîÒÎCáqôùÓµ-^ÂØ:;;h¶UÁϬǴ<#¨9#Í$õ[+/;³Ü¡WâÇ=tOIë Î1>æ8vz$½UJ¨¤T*T VFQ×VjÔ® péÙÁWÁ92¥Ë3ãtd^ ÖÒ9 Z4@È«(fæ[;Roh}Z:dNIÍ+\kÍׯÙ_ÓM¬Ð¢MQyc ¡£)tTjöi¦²CbTIó;M +5±¢Ó¹ÕG ã¼PÚ¤P±õ éU£6Rl±úRIa- íAkU¨LÛÄN§á; ÆÉÎp `È4Píqª<IU»À²ÐZØ1U Ìײ\! ¡´"ÀÎCÂ2>2¨Ù¥4*-¥ÔNO¢éß§¾ À[ Ap5Ò0ppï˪"P¤jMIá%´B I á: Êmʬ®Dó®µðÊ÷ÿ-N*8$UYäl9î É @£s1å 4d|qòBèåºEäôôIäÜÅ!ÉK Ä¥Àa:!¸7Æv;9qÜ9x£X?½ãÍ4d£«>Gá±§PÚÄ£Sø¼¦Úû;\8 Å'L¬)pç)K �½8'åá|#$Ð(Sa$&Zá=bTtô;ö·?bcblŶ _Jð ô©Íêr{iä~pö{Ψq¡¥ I¢þ?08%6ëX +P2.³ænVtṈAH/Àk}q®uÖ»Êh =ëÜú%Oê@¦R ®¢Ø«N:x×f-³Gº,ÐuO´ÁÔ!ÛUpmlßµîNÙNkimK®È ×JìkÃS¯V±ìË?âm°t ½Ü²}bãº6BêðÆè»ÑöÑÞ&èX¨s´ +Zk]#â©Zr æ ÷Ctà ] +á(ø¯-b½×6ÊMkMî¶¶Ü"5Ùnﺻ-àà%ÂÅeͳvtÕÉÀÜpÎ?x"ÆØúvËÕHjnTÉÃ'&: Á<$$Ü|BpC¿ %b&¥X©ÎN¸ ±:ªêºËðeç´êÆay$ðÐ+ÖÈÆ¯Yëµgc¤ýÂ% ÓÉ3¡ª±ëÑN×/ifóT¡4(Éáåas9ÝC¶y¼6å}O¡ôKAv¤OO«±Ö>]¡*9ÝÁ 6D+{B¿Õ'²5Qһ¦Ä8R¿K*ØXC öØ)`CjTF¸fI@äÒØ)bÊ4BTáyw=újðµPª +¥óÃug ±Ä° Æ×À-/ÎÒ±á>j3ض,è[áZr hø¥¬·,í!ËØîMú;vf÷Óå4 - ×7\»Ùq7~ñÞa?z½Ã:º½G8®¬«ZÜI]·î=qNÐF:êù4»P@ÀP2!ðÃH&Ó».¤ ê@ÌÀQo5ç ÂØ8"#ko3^0úè1ãx)X*O)C¹f&É㪸+Álgt5V �þOâT}D"iæÚ1n@¨Vb5ñº/_ªBw;¦ +{û7úõg7°q®¾6lx4s(þñÏúwézp C'nBmÐãÑ;àÐBxGöÁ8*|s4Àà öÄÒþD8þÚÒgÄW¥| ãÄGPO¯Ê+O¨[¯ø¯7&D×.Ѱ2.ðÞMè®Ô"¶p Ä ¤ ÿÀl`Ø{ èè0e¬F[ ªI¯úÍZ'¦Æf +â ÀkÀÖl¦ÆúϰGÿx +à¡tGo l°¯ÂpÌ ÌìÒÍg9,öÏ£&RÐÞþÀ ÚBv$@l?ãN`ôù`òApúæÄ_ppd@Ý +V±.Ðkcú¥zãÀÝ Ê £ÅnÞ +endstream +endobj +291 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +293 0 obj +<< +/Length 4182 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÄl.!Bѽ@j7 %ÃÎg8MÇIàÔf1 + Å3IèÊM0b%-ÇRJh¸n7¥VC xÂHT ÑO'Ȥby8¨, + vC%Ë\ʪ9IJàèCðÖTÁa+¬H &cMóyÌÊF7ØËÞw#ÊÃÌ\è´R5&©ëH§w³/îk ÃY ØoyáäØ?s`Çáó²3´§3ÈÒ8Kº(+Në¡È$î¢ÈBBú;°jù¨@¨õ¶Ad÷±B Ð2KFÒ»(L5¸6,+hvÞ·îèẦ@êX¼a´Ø&¬KÚn'! ¤>ðäãL¼+*~6ã Â6 Ó7ã8@1 ãÃ1(Ks½q´¯8 ã4B¦ADÿ®±"Ô Èqj¸Ã¶®cÄn¤zì" +s»"=¾Åä0£(è2Adt¦ô¾5¦C1}J)RZr;HÆ4M`Ø7ã7ÏÒúÅWÕrÒ;D ðØ2ÚÒ¥4'õ± Ôd +UÈ`EØa_6MraôA9N´ð<Y6]~˲øÂ9àég[ïµ0Ðá3FØm: øP1DPQ6NC0Ò2t»·J¡uµj¤¬È©pb«É´a 6rÄ1¬·gQcÚ2³È2ÙSFx<à£0Â1ÄÜ2%¹9Î(Ì3`Öpæ:Øú4î7#13Mö0ç=éõرhèÿ upÑ+£8Ñ éõT¾!ÎcK0Õ;d^keW-ì ø-W)Üe Eß]õ<¨A@¬t·¨AHn=Eäm+HÚÍQðj# Î9ïQäMÖ>Âv®ðÍ1D¹5£n11ÛýEêumJÇáTñã´§rÓwmJªé'¯Á* +Á·Zàè:C/p Gè2õ+¸hÂÁßZ¤W¯ ®¤¢ÀíCÈo¡Ñ°àPóRûN}~9ÆÞØrª^íY¶: Øib1¯lÏâÕ ûK¯$8;U^ã r~ÞºHz²o©qT3|ÈTDÕ%¨¦*êéDªAt0`¥Q27øà Pbà +Åa^IÉAnæD§Aió|à¿þËOc0+N¬pa@+b¨$LR%DÁe!ADLÍ´äî¶X(c ,y'pòÔUr ÉØ2¦d>´Q à`E +& åé*¥d®ÊZKipB@A ÁX¤çjíÜR_¶WËg-e¼¹[Me4&Ä`àn²/·ó/ÕË~eS!ÄÜ+ÇUá¶È&3sAɦI½ ¤¡¥´È'CL%;(¸ÎRäc/<¤>¾|ÓÌPÐCps9¦=õ>AÙNwô*tÓÎ\ôv*Dìá vHÀæHi (NUf0ÒðUAºòzåADÕZòs\¡$37 Z a*sÆ;Ì%àKÉùF2®nL¹¿3¥ÑsUÍ5)5'©ìêÑåÐW¨©?ZQJ©cø©µújf©kØÕ GÂEâ$ñÑ Ú]~¾¦¨OÃËa0ÆÞJÐìi-±àÝEË%)äL çdi|Åz(²Äj½²s4¦¥AF¡zùÎ~T¶äæÕlRÅí¹¬í¬Ó7ÁÐÌ1¤þäXÕ¦\LiÚÆ4ÒbÌÖw²ûYi)[#µ¨1¦÷>¯Jr¾= HO!À3ào].±¾3\ ê°£êxૼ³ ³ÓNê¶#;dAAàcJÁ¾Dy=ßÌRQètØ8abÒ4¨Þ/%ÒfC5 RÏ-t\µÓÅm02?äL=«¯<¼÷«} ±^Ë:{d ð²C%³|³¨^^Q89âk˯= ÌÝVÂïNE@¤B,@X¥`ʶ0£)¢sä}}SÂñeÅÄl1õÈYIòd=¹> ¸©?úÉIE÷PË2ä×â¸maÉ?¦<˨¦Íl×·U_j·Óª]ìÀC DL3¢r6&6} V¬:¬/ +a¬Q*°5©[nÚ½=ý)/zLnmqÎѾTèȶ°1íz"r +3òÍ1=/í äm¬³ØB5ß ËR~zÓÛq?ãû9.A¾ÓÊF²q¡iÙ¨ùñ¾]ò«Sì}Ù:ðÄ\] +ØA +A&®P¬p(åIÕH.f"Ø ÇX÷dÇ¥[*îlfØ3y`D _% +ÏL;µÓ1Rüªð3*¾¯Ðo©¦= £~ +¹æ(a)xn--s1\$s7wuub-4db4b9skg091c.xn--5od-hha!2AAå|¼$SÙøÆ¯íèµìahjÔ/3cOŦ-wñ/¹øâc Â'LCç1r±¯Ë°0 +>i¹øaC@Wiá<;Ψu¦?\O[T\,¹¿k¬l~¼¦iÐz¯g}2´õÀhBÌ¥8vC*pϸ¥°³c²-I(|ÊwØWOʯBÄ ÎKPM _¯¼Æ ÕÍrQgV¬[ÅìÍVÍ üjñDbÒ¤jÞ`RVOÀGÊBo«î¥|'å¯ZDJªÌïNòÀ ã¦d¯¦üfR$6p66§{ï¢5ì!M$úå2 �víÅ<Âoú¥H¡ÊxDêÂD§ �Þ0åèï2ÕëÆq",@àdº÷K^á)ÔbÇPµâÄLƨbË0K4d¤§òØ lp.è²PôJªFw¬fô)àlTv(Æ«,@ÒtÇpÊh#mÖË Ü¸,0>+,@&Ê-Êò¡i6 ľ¡iã4 +ãÀ{ ¦ÏÀªcÿé¶À±¨ +o1å²UË®ÀnáìðJf\éà*h0PpËo1F¶lZIå/8D YE×+> +¥ wGq +¼¥GÚJN®ÏÖ¢ >ë-~§¤R;m +P¸b.wH<Î~+oÎFðÛ àÜ0S£æßpn6PrL¤¼«Ñj" Fzh§,XÄÞ\hÿò z +üeêÐÈNl°°Û ðâGq`ÎÔíͱzÃq'$L§.Pscv7Ç"t(@ñÎù«^ùë_-% 2Q¢)b· b*±j!jøKøÔÉ®¼1(:ºMXJìèêkæÎÑï¤ëb ØúÐr9æ@¦ò´27*f%qt+`pÇ$fv? ÒcæD1+3ÓA-ñ-C|·#ðdòhW,³&â^qBxïþýËÇ5æÝ3ìNõÓ '.ÎLt®LÀrÖ!d¿%ü×3vѼͶb©lòÞi(µë\Æ ,lÑ ÊMï^yòb=3.²X{2\~Èá>rg~ÝèF<l ð[-Î5"¥k"°rÞ0^Çèíí6ßÖJ¼aÂ8íPñTñÚ²ÉÀ ãC: À"xb"ü_Ñ >cÔj �»=i(ÛhNF@dGTxôN à¤c2À æ¡HDÑ!Küôf¦IQÑ jÓnì14JéV ®4 +`@³ì- ª7ͧn_ + be +îÀ-f~ ¢Å4 #hæß(MË2h¨E#É"¬-BØ-Âà%ÊÁ#èÔÂg*m`ÚýÔÂLFµ9Ëäb:/4 >ÓJ1TfÏZ¡Vo �ñW´ê, + +Q ,³-4nþãGRþjT½Å¡L^Q`Æ~â,u¹Li:JΦ5}DiìDµ¯ÊKàÐÆÛ¥VU¥©Â^53ÿW¬oNÀ¾ +`㩺£+F4fÅ[ ïG)>?ß=îÿ[±é@[sMÂíI a®4ùe`³ÿbñõc5·!ä¿Lt»id.ö6EHÉú):JZyö ?Ôå#ø~0yS +rKõÜ,ea`ïhï DQÙaucn +Pàr<îMc¾Lö¢Zj#ú¶WöCH¦kh4(çI¢r ¥O'FB¨Ç÷FÖgcVy9ÀP)øêÖ??,o`,ETivмvL) l<Ëz¬6±8öOQvô + l/19² (¬e(âóTð¯Bp\Çm1RMï)C +$-þÿ§0ô-_ü[s7EF$îoY5bÛlÌòð>vÃ/Ol®xÅX¥õOYöG'´ÊFα@Èpðäo¡!jưJSº1üms¾Ü¨Âú"Î/Õ4^0ø}uún\©Ð¨µ+ô5íû$oÿ\ò~ Õ+Æ\âñW&Ò¯^·©èTQwØÅuÜÄcõVrLa~2Âÿ"®Àç¦{Ò¤©â^çÇΰ® !GãjÎGÿ"&"xr<44çÈw¢J¿L'#â>`f>Æ_ âìwH¨A£º"¤' rE#Õs|²Ð£=HØàJÌöÍMJÎNJkSÌÑè×®Ìxà@Î:2G2»ñqÈïDðÖ ¡gJøæRËöË® +ëH´èt´ùS ©I,¡Xò¾Jµñã1àØ¼Aª>*ªeBNouí.Ç·dæXcEÓâ~²JÓ!Õ_GBÙ\éd +endstream +endobj +294 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +296 0 obj +<< +/Length 2047 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT # C Ñ<l0FâáÔo"RÆá &f + Q ØÂ¡2 + a¼ÎF7kDH ÛFá¨Æ;rWçiÚb2sMAb²Ì¦Ã)èe2 ãIÂl°'A¤Ý²9L'CN\ $#)Äêe9éõ&#Î~Æ :è³Fv¤Ên0´ØÄd(1 +F¢Ï}Ýïè,´Îþ¸Ù¤94:((Z5#´Ê ⹬.xÌ:Í3z7:ÈݹrÈ4(Ë3Ó8Ï=C#4¸KdÁ£RÑ43Pضa lG°r©¤I"[kÀpèb!@9Cxä9¾j"ÒÄ)@R,G3=¨@lÿ"@¨¾Ëª»%.¡b¯.²¬ëLjÆ`Pe(qà º+òò!xÞÑ0¸L`ÃLkñ4Ì¢æ«ó¬q<Iiô·j9ºpæ:c9Àc`XÚ¶ è:Up@#"`¦"·â£ô̲ÍY\4õ»Á@Í,¶Ò±Ë¯ª ?"2Æ1Í=#Îb¥BIÈZmRÞ6¢ Ø3£ÃNêµ½IÒ¶Ì¿@L!hgMÜ/ãÿ«TLéu/5< UWUå|À¬{õ6OxÞÎ Ã8uKÐa°n¿¸q$ÜtBíEeW-Öb ) +Bø$Ø"x` "`ª)©Ød§Ê¶2È2 -züCxñ:pÞÚ3S{è +S"eáFcæ¢H$À$BÒ'Úp»âUwµV¥í Á¼W4ðìCÀËÐ@2W¶úÛ3ºHØ4MÜb×òÜÅ«öàêÂóòZ^<qC42Ú84¾¤Ú:ãxê3ò95¼ì´øß«°dCKë·"Gs/1[,|úû<ç<d¹?DºIYeâ6Ì"hyhì ´Wxo].ûU0@ÓVwîÒÈ:xc3ljX£bç<âd8Î svÁÉY9§ª»?Ïl§&XXL³°AÍéRõø.dÌ¡O°§ËJKalo&ðù+æ,õ´ÉÁ(hÎ-ù4ÆYVN0â*µZðÛÃ5aÔ¨ +`9©of¾ºxà l¦ +Âb¿xlAt¥À÷;aÛTݱ=ökBK|¯ÓõaÜStÐþ ø¯#÷ïéá¨üÓÜz°üÓÆà!t,¦0µH + LV@7SPßãL²&ùÃÈkÏr©HÚÙü- áL*(èЩ¿ òv'³qÃ9iÄø¢ªåSÊI@¡ü¼BÕbZk*^ɳÔ{²½ðà4´!8!Ãf èFAVLgzp4¡¥ÿçë/C Ƽ4ÐUpt:lÊs2Öð +y*³Y¼xO dì&æ +'Pa +Nó<gõrÊ©"@£C|~Z÷¥Þ +& �AzÚF),ùnN&ÁÄiék\tÁð4 �¥¶Bén!àá&®$ ö6U«ñK=2Àh1+`ÜVåÉÍa 'nBJärL̯úNI¨QùU*ðI'¸òâùc/`_Ì*ÃzR,2Ra¢ôl¡¡~Z ªÂ SmØj+X¨T4¢spë1j°xÅÖÄ¡Ó Qt@'¬0Ü¢¯õ¤© �â,6È,PéjØ6bkƵ ÙF¦!>ëësE,À99þ5Xb)²@ÝCvÝÉê:6F'Þæ¨\].×J_§ÀBX ÆZÆ[5`Z0ìÝÒCªÕw +^±SH*#þDòÒZuØmrÃ\+,ÖÜÜÖ³Á̼qQME« ÈÉ0£´nHVG¨þ¶ �*3$ +jO©HÃm@-®°,NEÉ[32*S9! Q¦´ +&Zî^Éz/c¯4ÒZ¯hÃܲÝ`í}á.ɺ/«})i[³¢Ã2Ü8Ø®¥Ö» +\ïeHÒ .$tXÅåtÞ×L'º,1R¤ÐrzF84°h +uXC¢vxÝ`tVõÀ8l Ù±@aVWdû¬ìæ)PD<è2¡¬éI1tB¥YF:[-jíêdZÉQæ4y£f¾*² 0òÔ3K#>¦]¹t1°1Xy,ºËyHháKûÎgèÓâ ÐÂÊÔ¾á +endstream +endobj +297 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +299 0 obj +<< +/Length 3249 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AhÄl.ÐDѽ@j7 %à *h + +äòx2ÆEÂÐäu1 +fÑv)¢QQ:h¸n7¥V¯rñ©_ +äë0¶F5 sq2®÷!PU5Ä + qL¨A'ȳÁ¨Ðe$gC ¸Çv¼Qs¹üpg3 +,VLm d79Ï7ºg´aCLRHÆÃ[YÃfr#r¥sAéϽt¬¯_²2í÷{å#)÷+NFï*´£²ÀP;¼/Ê: (Üܽ-à`Â+Ïü@îú>Ãðý hÜþº0ß°î B³°rµc«f"<ÃHõBjãÐÀtÇ@ð¸b&B%PØ8Ãp7ãX¸ÈìS©0 +ñ\Z&̬YKpü±ë +à=n¨÷«@h;¢ Ê6ã Ê'#kpÎN8$êþÀº`PP>3H" +B( &IÂ,À:´³LÓtêî* J8)Hjö©+ðj«*Ú»:4LXJ¼C$ü<=CKÔãTJc0å-ÔõM_GC\±8ûµýö +1MXÂ-*YaMU)(]\Ö!h^b_wÖarÒü +3{=ÎÈh¡áyva2cä4 Ò7ÁôB V]Hr ^² ÁÞÈÝß~ÖÉSI +@Ê5EUv!8ÈXªd0IB¾ä×¶Ô6æH-W©`R6ã«åm +·¡<8!j2f°U¨ däW©×¼=l¶æ6v/¤UÁ¨\7~¨ß»ÖëmbA¯6^6ã Ê6aÈ4.XÞ3Þ<aýÅA÷x¢Ü7 +vÅÂÅÎíµV1¤Ö!¸gÖ´à0T(ËAAgs85Ô]Xª4á9j Fô?o0@6#^^ýÞ9cHÅÆo;3<è7ïï=´ �@2 ãê¡ptÏ,¾;Õ¢ðYñ.`̬5CÖCcÈ Ç4f^ +A¯qîEɳ2 +°xƽÐÀäé!k!ä7Pèàµr¬¼9 !¬T@f\¨yÍã± Üåú +A|"à`E +&ªX¦é; +I¹g½¤ØÚztB`Ä·¢\MñF)ÅU9ÂA¨FcÁt)e°^Æ¢RYqGcÜ\7 ïéö9×t<n@6AØC )P+H¦=HÄUz'* @µ +C ¡ÈÛ²ý`Á¯ . +X<mß$Q (곬1Ó: +CpkÍÈHÝàJ ÄÙSnòÛ{]iEA;8ÂÊÉËV2®¦µ¥ÒÒTTÍï8¢wlô¥pÊC36Y±UêÎo7eB ¡öÇX-õÐc&àCµehô·¯£T²8Èé,â6ê& =Â4çUÊ0«4Ø®&²6Ø2Í6ÙNVÞv£é>L%U!²a +@IáÈʾèO ðoªþ¤B~ùßèkf4׺z·èêL Y!/¢ây)æ=XI©8ôè_djÏ-¬!ʱ×e5£å]uÖ»Á©)%»óJ +LgUF$Q <'¥ å)DéÈêËÔɧ }º7j^ÊÎêUJéf;µ]B#u¯FÓÊ Pß[û³ÔÇÖ3êQ C>CËå{ö 6ú¾O."#Xv~ ÉW)jù¯>YSk ( ÷eì:«ÂÅZ¼6à¸Û«ÉvßëaqðgI¸¡ÎãÙÄQ¨s½Ô65R.õ 71@Z]a8 ¨u÷ÜàË Ô°÷^Äßn.ó/YA¼6·Ë¼çÜîq²úr@KgD#p7Ôüã×S×~î<yHhÌ4ÄgMg4ÊMÈR=4"?+e£NØQº9ݰmf ?¾ù4g@¨#¸¯ÒrÃç°/aøKWù!HdG2¸4BpêÃFr^Çg°¬I ¶G)%z-b)¨ô.ú¢1ËúÝ^>ìõuA\& óH[IIA<#½·Z±¬'ïñ<<ü&>AE N©ûOU½¨[ËNÚÜUA1¥ØÅå|¹ËqpÁ¦£8,ßtj5MIè¨TÑõ¾h½bra>%:² +H§Ö£'£`è ¥6uÍ$0iNÞ]¥¸O$õ¨Ì£æs E)¥<Àu¡·+[f8Þ=5ãðS²a\$S«c¾Ío=]g+næ Ù2Gù/'P¹÷èàáÂÒå¬aYRmà«/²cíÊq°(вE¬2ä§clý6¥Dªe¼(gæLÊy#øBnWÜ p2org˹}?æSH%¬5ðæDÁ-_µqX5A>çTý̨oî¥íx£eËl@xL \tx}i*)¦[8¾Ù(Q6±« Mq<Ĺ/úÎáÀw -ølñb4¿e÷WÈñ&xoíôÛï,¼0è0ÑãêüL±Cbè3â!D+ ¡Ð<»I>ëoÁx$æ?0Ta!$ 3WBÃön +ËôÙáxM<Á<0ÂeÀÆ k°Â®qëøÍK¤ôÒqèÅ¥n¢8ÈÏ<zMpj 8FÌ,Ãr³éoà �÷ÂLÛHã¸jÈ` àý/Öý¯Þ2FþJ@þ¨bþë>ÿ@èÿ@ÿÐ �lÒ·íª:Õà¾üÀä"Æ +@1¦VpþS¨ÿ ®}F± Ð �>aóé:íð2tHOS˶Âä-:ÄlJÿO)\NBüííðµ0½Ébxº2&[pÒ00Ü}âPç ®B1¬¸ü üઠ+ OTu@ªôÀñÇ*çùÐñ+ogÏuMH½Î®N£Q0AÇUq)ÈVPZ¡1:ü1@Ò-r4(ý11'¤2Fqo_1©Ñ°ç`èç§Ýð§Ñ|/¾&N.Ò%Àb&¸ ÌÕÎ>Î,6 +°ðÈRöÀ|B ÚoÀÒÝ ~ãöÀ õ2ñøñcöÎÌñP �g¥#ãÆ¤Ëpõ æL¼ ¦ã®4Jòx5RÁ,@¨ +RÈÇGT÷(¼2V«PÅNdòèK|èûkÉídfÉ2¡ïJc¾A È<Ì×É´d¤äÉIýäF°Ên¶F¾>1Þ¼-ÆÌCã÷1ò^Àlc`*® ÌÇÛ2À@ àÎO +ë3w&ÀìM¾9Có.ÒÖfB³ êtØì¼ .êͨ>(ìK>Àä,3.^4!òCÓ #ÎÞBf¤«mÈh@¬ÇÔù+GÔïRùÓ0ݪjSU |C(2Ã0í ØàÎÙ8ê'@p¿ �^Úd\§R¤¶{în| ÞÕ¨Ð&\ëLO&¾åòé³Å3æ~×eÀ׳4íØo@zí-ââúÏe*.²¥2 ȳ Ító @, 3síÔHÛì%Jÿèf¿çqêHè§á@Â(¸/ñ¯Oºh¨¤ +endstream +endobj +300 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +303 0 obj +<< +/Length 2909 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT # C ÑÚ 2FâáÒbT"M&`©Á¤_#IÄBq°TãCAPÐeNa¤Æa:MæáÌÐo:Ó)äc4Æóéo§ Þc1NG#)¸Çp7±ÙÐäi7Å4:(*ª.«TccÈÎY +g)Òf4pf#Îà)*¨Ähí& +§ FñÙ>àa.RkbaÃJr#j sEãÊ©¾}8f9êmé}qfeL¦Óä¸Ì#Ä/«ûÁ£àǯ:Hn) p¤ºÏ»r0 Ò¼¯cØÅ ÎPøæÇ á �ÊÊÃÌàÇ/¤[@c@XFÑÞÆÇÐp*O°í?jñ«ü¸ÌØ7òºïHc³"-ðc0ÌxØ2ìc¿0Q¹($'>©¨íÊC£áÒR6«d:m²°&áB¼/B( &"²¶²è»/Òù8@á8º,ü̳lë+MqÝD¾´ÍDN3#³;-Z幯b×¶!*ÚQN´ ;óLðË/#Í:½/ZèÏ{ãEAkèONܱ0ehÓµ)]s]¸X6º,"oÊ ËºïC-PÏ÷%Þõ!6©¡²%{ ¨aŲ!P{$êÚº¯Ò4*""`Øz)1K$E´~;JRÒ4Åu<JÏÅqFËÕã<2ÅmïÖÕó[bPÖ3fÚÞÖó±E;uÅt¾]¸âçapl^¶åñf_v{Åi¬öÛ/ºÜiϪ¯q÷%Ýj^-¯A«lꥯófßön2à,~Í»9øFµ¿sÑPnÛbÔÎ1 cbø'ârvª´âá 0ìMI9.2¸Qt¸7ì3Ô@##.:¿Cpé@µ´®QÊø !".:AÇDO°#3Üõ´8¸kÓ÷UGhuÓ©]ïzôêö bØúf½eÏoÆÂðlq¿ç vÕ¾7<r¸8¤ÅʬðxW <&P®ÂDdÀôLKÓ./Utºw²Ú®{Ȳ £dÔSq Á°â¦#{e|í!C.ÆÛ:4Dhrùô8 FÁô"dLÄ èÊp8^Õ¼Åè *÷%ÀѨ(ظHIÜMe±~C4F9q6# ©!L0@ A×v,@ux¡pÀRýØ2# ÝÆE¤ò£!dÙà%Ll �_«ü2È)!$4ZàÕYÛO´¡>ÐÉ5»È(39ÀRBæàÈT²×tÀhS` ÃÉ¥?o@7¢ôÖÑZDA½ ÞoSêq Ý$"Úàÿ:£f`n �ÞÒ²o²Äy( +T+¥sM¤·7füDn²n&ŵë"p XB>¢D}Ñq̾l#1` "³_9G±¾ +y#°4Ϭ'Kc̵&§à$)Ý4`ÈF +7øÆOÂÐAÈYT9EªFù,¤IÒTÆ.êsTHU®.«¬ÉFàê䨫ç¢I¹XÅ$ûïoÓâ<ÖyöO0u3ÈòwéhÎÄÉÔeeÜgEsâd'ím31ÍSS-"b]Ö ÛW0%Ù§ªêKÚÀÅ/Á(|Êýnø)B!µ +[~´S(¯C˸l.´RgU +¤µÔ#[µ^Ãhm°3S(gQxd¦³ú½J£TA0¬¶Ï©oblZ¢³Å¸¸dDK ®¶Û[t +oò¾ +ȽØÒ÷iæQ¢´s7LCrãÖÁv9P0c+%¢ôXðÞÁ.iQxsI*ªxFؾ_7Ã0B_%ðI UH°eKeôEÁ¦mÑð-*¥V×Q +bNëÞHV²q±_,A$*c@BÓÄ !=ÏÒ f AÉ`6àZ-7UÀ ðÎätmªÂ¸Í=cPò!uJ1 .73!äTQ7Ò@ ä°@gL ¥wN¨6DE¡T>)m±KbD)ãuX2o Ðf«KvsvÎÆ;W¨uE§1às-Sf `Ü£Úª+1åà¸ÎÓ8C¨i3 ðlËä ´DÒÇâýpxA×a^ãwJbÈ&C7ä`@ê]Xd3H×JXàݨµ"-Khq ãCîk¢ª3ÜÛ 2êíó³^¥ºÜ¯ð .-¸o#áî¨Ïñ)Û³¸·Ú@-0ÖívWåhò]a¢wØ\$Òí¸ªÂu¯1oåEz#åÜk*¾r¾þæ¼"0¨¹ÖÀ(]çó%µß +èDýxÍ3 Lwòu½#hqçÓzPIßîNãBøN á ±w`±;`Ö +(äJÙ¯ãùä_bê`Ã@IÑ1*8Yg7fôߢùò´Q¼ÓÌù°Â[$*8#zSâyh/á¿§ïlÙ¼7ÇÉüåõÇ +&±ïÇè³@7ôÈçú³=sÛ1ÇïBK]îþß¾wóàó>äR �î#byï¬x ˼âIê[P_¥p@ä`$²K²dL«Ê¬Ú½Ô!K¨°iB± $ÖÞZ32F$áÊÚßÂéÜF[î¶7"Þ;¨8DãôBín®bËÔÅOüóì +@ª`¨ +lÀyjÉÈ@æ ôû/xûIçÒ ^øCr,"Æeæ>¼Â*`d)®°V\ë"(EcP´¥ZGj49J¤(!*B¤h¤! l*j¨ªVíj¥àj¦%4ÖÇT ® +vJz§ã¢!.B"Ø ÏJ¼Hp0filñjpB¯Dºë²»kº»ä²8KÆ1@SHê·çø'Ƭ£®o0*Ök« uBZ §±ÆB6êOH²jZhF PàRyÄØè ãx ÀâÙÀÊ À «qàRØí é +`ÂWQú Q e Ç΢BbrJPêdXî!8 ÌwâX +£Ñ£ªÕEè$"ñÔo±Ý±Þ*,À¦(`;Æh +yñP®b¯n´Yè#xEãD;ðö1ÄL à ,( À dk hØNÚ#Möî ¦4Ðöe¾i1#B +endstream +endobj +304 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +306 0 obj +<< +/Length 2721 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ´b6G¡hÞ¢5ÂÈáÂT§$¹8<FAÜÜd'Û§!ئGDéÂá¸Þ[¼ÌçA$S*IÄ2,ðj4[ &ãÐÂn1n·x!PU&xðeÈSÒl:\ótlî~Ä(Ðé-!°ÔQªÖιSy·]°Ù]¶¬õpa$°`È ryJÎ-Óq4Âxáexû§*ñÍ¼ËÆ»ç§ÕëöG=ÏÏ&d26~}´£ÚÜ + ÐZ·ûV:5{4ó6®s ÿ½î³L»Nã¼5®8Ë9ëÛ·"£K·óCB Ò: [9ÁÐûÜêBNÄ(í»®üSůÜÀº1E4ìÖ2qXÒ0 ÒòÅïBrдq'#DãUEÎ[Ð=Jü!>0 nÃ`Â3qô`ô«¯c*°Â¢Ð8Ý ã0Ì9£¤Ý/ÆADè'NÐñCB(ðزHÞ7Pm´§!ÊÑ´±B Ê3QÔ9/Ì4+B BÓ³æ6<# 0²Ô¬c §4=Ï ð¸b&B%ST3 Â@Þ7bàS_¬0XWV¸®(UU¯SÕ"m¥[AlÀ®Áí1È¡¤*£há56"pÂ6Ë«ÄI"ö¾¯õºÂ¡ $MT"ÚáSCá8^'a먨5)2H¥¡¬ þ*ÒkBx&=',÷^×ÅáV ¢(@Õ ã5Æãi]þ äÀPQåym)#´3^ã.n(bÖ/çã¡è¨(¥!yb¥á¢)µìûHAÐ @aÀ\mB¢M8Ëÿ¾Ìy³k]<9cÒ8Ý ØþÊ"Ö! \mIgÍ£ÛÓW@¨4CiðAÈÛ:É[B5µÎõÃáF\:f5êÁE¥¢c$¦[µû¥²¢¦I³2ã'W Ýv@\Øb¬ù¨'u§ê:[àWþÃÈõþB¬¤°Ìè ¦í¸@3¬Ç¤Ã È7`Ò~ tu ,6ðÎo]þå]B; ºöT +psàÁ5&xl V»aMTò-pîHcI2x|'Pø4ãÈCj@@"Ø²ã¡Øf`´ß?´ =z×¢°óIâî ñÄöb»2.$2«H}CÕC é´rWÞrqCïÕпrÔPfñN3"Ð\Bà\v.jÒ0CÉ)Òd ¢´ µë RO̯'òQÖ6GFJ»ài.Ý1>$ÒàÄc¯½Ðnò\Ç©t¤WßÈ(_´1@é=æb̨`bÚ·NM)¬±fxc_[}¬ ·`hìáyS`¹^¤mÍ`u!Ô9Y.éáòj!¼:HÃ¥ð< QdPøühªel².ªZã"©¯¶*ºº<î(T¬í3ÚLLEò¨Èyw"á£Jô¤)¬g5-gÔ&QPȼW~p1Fðì¨e19¨Ie¤éoq»`e.©Îhµº]6_cÛD<¿©ÂîgÌû ºlÎÙèáshí"°¿=¤p(' 9é9ÁM0Ø?),p(¡ò©ÕتA¤§2ð6bÃM£7¨ �p_aÁ @BL6Ú¸2Ö¤C³Ê¾Î)UÝ%µöÆÙÛ[onmØE ("0Û*dC2jM^ÈЮ +.]²cÒÜûuo"èe4J(OEh»Ö±<\_M«ìËIúY`Íò^þÅOÐçA»ð)Z]ùMwâÁª¶¦ÞØ«ä¥O F û`a ÉS/«DêDl¬éÃr)Ì-ñ«Õ°çÈî(¿2ñÜ¥á£óÀus¦bB¬ Ù#´yÅ?Í9ª !ºJô민¬W¯=£xnmå·é]Kìõê´!¦-z²ñJN"Kõ»¤ø±a2Æb?äÌôFÁ¥þÏëÛÌÕϪ8:ÄÎCÕE±Àç§cPt1º4âo¾»Âª¿.n5ÌZ0õN7ê .N »B]øyde¥¾vF£`lrÔbµÖÂñÈRÈ»)®RÀM@nÇï7ôYþ|K-f¬ð×rjåÜÓyµOb¹Á¹6ïñÿF f¥]£ËÆõñUS\>ÁÀ0ߪµ¤¡r¢ÊNfC$üÀ-Æ Ñ»ÛýêN@N!T¡ê£?¤¾SsÁà Zè®.qðê´ýóq@-EÌ7 %º,J+q9CBø·&£iýÀ@ÛÈCSü^©</)?0á5Òë ¬Ý»Ñ`w{ç¦Ð¤ÉÅ'?"«fe±ÚvlÎýO÷zp%÷tæMóWWÛ¯R§ðèúD5V +N} uðJOñN¡Cwç#ÜAÓ¢ÉH{ÔýñÓпðÝ] =#çYw=K×ï.°V$µÀ ßO$ è²ZnLõ7SÎéÖ®æ²ÎZ´0ð·ð×uDúçs÷ÅÕN#I]gzy<ߺ2(PKßç»>zò¶P´JpÌ0Iv¡%aðÄî6ά©úÕ Äâ<Ì&¿GpH PÎæ:ÇÆÐÀ.é`8edòÏÚyøïÉ¸ËøÇ0 �*öíú`¯ã¦¶ ¦Û ä®êo¸ ÈÙP +@´îHø2 É £Id¥ã"£«ôðÍ(æì°¸«@`Ò£2 (¶ôàZÕkFuTÚ,ÏBJ`¼üð2Å`®-ââ ÂçæBĽâè{ËþLà³ìæÎ©J Ãðèb)(Þ àî ) .*g¨-èT{â ¸mîÌà÷Pìµf¤¢@ÜðüNá0È6+ä¾5i:H,t ¤êî¤ã)ú$^¯ø Ïn&2fHÕ PÀP lw0¨ +^ R +endstream +endobj +307 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +309 0 obj +<< +/Length 3104 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8'EÒ¡* ¡AhÆ6HÅ£qpÄi1*&0PÂ\2 ÍfâI@t4Dò18¾H$¥")O'"1°ÂgNbè,³ÚMØQHÊa2ZÍÆÃÈÇi1Ä#yã4LC.,Èu9MØ ØÄd(2L&Ã~²¯ÎgµºýQ¤é²6OFù¼Ü.Ñ(ÕÚlb8¥V«²ê.l +Yq»i~év¼^¯ì ÄZ4½¼vC%Ëf3[øv(Þïö|#.Gî0ÏónØ0Cü<¿¡síìT×T×¶-j䨨 ¨&¸PúÞ1¿BÔ1ãlìæ:q æ9èØÊ=-17Á ì³:-S¶¿c£ "PÞ³BOk"'²l«.2³,Û:ä +RT¦ Á¸p¡n¼ +R¸ +HA +¶AD8å« +íÃ|n7Çí[Æ¿°c ß! äD6;cxà2N Òã|ù -Sk-ht˨ dÁºc0LS"²©<Òë,kbÜ# "`&¢¨"MtpfJÍL0nþ°,\%cU%>hÂÊKSK&ÎìÄÊÂSÕ!f±Ã«Êº;09îZU⢸ÃÖJ0¶Óc%EM¯ÀÝ|OC7Ðãpß%Zã.͵4ê8A|ÆkøËPKÀT6CìíØtIN3á²íSã¬ïÏã¼)EÔæÌ3ÊÍUß ÖÅî¨$WÕy_ +ØgR@¦4² �m¦×uíuAñÊÕqk³+mÜc³ö2\È&tÝns¡Am]¡9 ÑO5`ûß´Tý.cªhitïåS¾oébîÂx$"p"H¥`Á{*qÃÃ}/ÚíÓSEÄq,ïµMî6úNòHßâÜ®VíËçwf÷Uð3XÆÔNôL}ã}£c;t0åpPíócRMÙ¿cÕ$¸/)ùÍQz ÆÁлëºò,® ªqM&½6cJÞC(;fh½Õ½A@)j¤îdk*2¯r1h. +MݼWtòðp <¸÷Ëïo°Í?D̼ òhkÄë¿g@ÕÚºlA!õvNÁ0¼#AÄ$ÝH(F$(¥ØFUªb"r9çÌ0S!Ø2e0 \p³¢RH\V*ÀxPçaÓCÅð:纤Ãr9<Åô¿Bc"P©¹ÇãbÃ3¶Å4 �<1³ùÛmÉË9Jæß«G-Î+\ZPE'`ÕuBÌÅ@o æiÞ'TL}WdxAÆÀİVòàMͰú·#ktyPøÂUß!Jh)®T xuIQ=PÅ;H 6" P¡:!àeÔí)&8@q TvU %$`&: `9± AÂxKWAH$ºf ¦^º3ÒEÆæ>ßcÂk85Ió Ö4OµK+!£óUPÞqEéÂTZ,>-Á<+0¯KØP +A<& ¢SI °6*ÑmèTA¤bhÆ ó£dn sÀG0k\ä^^>Hé i)®iV¹)¨n£ÈĦx»g~pu2ÔSêµ%Ïvл4í´2 Ó¾Â9*PHd¸ µ28PA 2£Àà BJtÁ4UEp@hW ÌDnqBÅÛÒ-=H©! �êQ;ÞÄBÂU¦³#ÓÌÑ-FØÄòv Á@rÁäúÐ5ðfçR1gC£5R+²³á6+ðS'ÌZf/°ÌP§äâÙÍ|oCdø2NÄ´Ahc8&eE\UA°9¯Þíª¨{~µÛêGåMEÿ9H#K`§òÞ0J2>ß¼6`à XØ1j +În'ËÏb|Up¶ªAYûÇ6;HÉTȸ PiQD}[$¥r®FËÉ¢06LÐÌØØÍK'9ff2wSô +)EK{^U45ªm¬OÝaàI@8Åhá]¡¥ +n¾0Òtè Nøum×Tiòqa±nH¶ÍHIA?ÆKu«k¬V¯4ˤ +`pI!ÊÂ1½Y¯â¶Áo®Aì}½QºÌ))¶RÑI²ÃA¤ s +v75Øu@³ãV ø!ü>§¬ê3·¯mæÀjd½itÙ �&QCÈm[!Ëo×KI.@ãAîXmB÷FêQ[´*å£Ë÷ËÜҫ½ÀvAÙof ZÞmâ#~ãÁG ´ð¤úlâé(2ã ÆäR-ÿÚkßvTÙûO +Rs^9ÛÃwÞa8*ÀM6ã/«µ|³5NûúTÎÆ;nú#Jì%]8ùO+åªc¦E¢}·©@ÌOW¡Uù½#µ¼ïêêíÐ"ÁÏÖSØ|y<w§×Þ§yWÞ&Óijl +ñ]à¦KéÁ¹Ï°©hRÝ'½È@ϧ÷sò#B¦½C6lÂw/³?½E¶<àè¨Àæø¯RÜgäÜ¢`ùVÖå0 àÌà + ±ªLȼÞë#ë+0BMÄ%Èä¨T`f":ØNÝn\÷+äjô¸Rúë(GØÍjàÛ 6nÄð,´b\¾Íz"82,BÈ@êá&hQ +ßÎìxîò8Ðç꣰ªjMpZ í&·°*鯰60Ð:MÐ>3ÄP)LæU.P®ÎF÷ oP/÷ ÅN0bäÖðg¥ðS Cg Y®ï +# Ðķ趸QD¸Ãª)¼ºË溤˪ºåÒ»K¸ ½\½ÂTébNMc´×®}B\jpåH¾0ÀQð¶««°X·ª¯õÅáhò¾©è¾å*kÈÜ)1¿P.°¨Î(×O¤æ"äõË$*¨rÉædmkÄÒlF,1*ËÂ(òÄû'È8Eb<ÃH[² Ãú àpÎæOêxvñøÈ¬TkQd ðºí#Hjϱ³íâ+Â>õ±$:dØ4&!Kþ8ÄÌkòÓ �JÀfUê¥ÑÆâlbä +@¤çRÀìºV§þ@ZuÄÒÊrÔæJ È(3dNÆnjòhÒ¸.r¾¥ +ÀFü-.5àH@Ú ¥)-¬¨²í%R@"ϤÞ5h?#8E$ñ`ÌÈÉ»$-æBRÚ7#Ár#.#J ÎÇ.rxè6kúÍ/n© :1îbÇ"Qj¡4²®2÷+ÆÂ¥ .§, ,è¹E1n1ÃL§+*ÌÉ`l~-JXäR²4R²Ù@Ê êáex©ÒDI4§(ï"µ¤}°À ` +endstream +endobj +310 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +312 0 obj +<< +/Length 3207 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AhÄmG £qpÄi2*%à *h +Kë°¹¸*rC"JE"ù0A"¥21L*ܧÀÌ`(*¢!¤Âl7Ä#yà@p9ÌfS!Ôå4ÄSqÄlÁ âAÈ :`sÔÓÓápø^4SD£ªÑÁHcUR«@¡m¹^ +SiÀØaå %CU3wWß÷Ø_Q_³ÚmvÒyrº]¯ªhàqÀàöXV3Ée2ÙÖs<Ð5 1mCTù¶³Pæ9ÎÊÛ¨¨#®Þ +ká+aH*+éBÊ2ãÞË2a ²¤ÅµÃcNÔ¾L3èÚ¨ë#nÄ*ß»aºÃ«²¼+RØ·.¨).«ºò"¯nr ñ8@7Ð39Ò71QF92lÓX×6 0ÃpÞ:1lJ22pÂɰá D/Âx$ÒP'rnÈò·QÌ(;Ë}9"33n«F)(] ÊrGëŠë#Õk_! oT+24 #t¹62uÝA_)`R6§Tô¥^6¹Ê9EvÐ@9(Æ4ÃLëg¡¨QôòÕ3ëĶP"@'vr GWôxZÕR¹K«áE40ÓÐPÚ5%MbR®:gWÌõOZxßÌàÆ: #xÝnËw ÇrÜôZ§á¥wÏpÍXäÏÏ*¢h &9Æ~Z0T¸Á LÓlÖTapj$äQc4VµqÁ{[ù5Ésµ>¦åñã¹b¬ÍyOë$ÉKP)òh½»UØþC ʡT|$¤} Ê3³.Xä+Ëã Þ;£(æ9á(¸NhRÂèV¥!mÉøÌ0-^Ѳü¤¹mËL ËrÄã%Ч*¡®ÓÕ.-WذC`áo˲ûlsýÍ_ñÛµxmÝ"¼rP¤*b ¦$RZÁ°e¿KcHõÜ[T3 öä`pµæ¨ÈÛqëÄ' á&¨¥>RA!È= ¸òeØû×8Ìðd Ò=y/yL6ðú +Á&Bd¥ì0büå4ulA³4µ4ÃÄjb eNÈEF?ô$oÁ("dMÄøP Hx5$ôß2 3¢ÖXA©{%ù>>\fo¡mÅÊÿTc (%Q!A!T±|P\{*Æj®IÝ9g0ÓsÎ3º'H +A` a¼6Ð8E.L@rtnÓ¸ 0]AÆv(Yü �aR¤('@Ȩ1É; a<`@ÌFÐQÁ{SLpÊ0)Jq<*Àj +I<(ÐH c,$ Ë@Ì +!Ò.ÅQ"Ä_$öø×65ÓªÇ(èÃÊnÌÌÈ!-¤D[$@H©²UâÄÝ0±¥ôá9§Dì !ÐÐ:0â4=h(iýByÁÌ=Jvh%UPQ7äèH;2ÚÅ©¥DA`iÔPT7Lâôl<|ðeGøDsÁ/@È©3t¦CÒÉCé{Äñ´Â°ÁOüQnįÓ~²Ã`/)LqQN§zZXºõ-¤sO-²Ê!¦Üqr®mïñ)¸È¢0 $ððêÈe;(è "c"m´vQ>(¶ê¹S]w Ó;È´AhÓï;Qb|µ_°jKÃÑYoðóRt$ë#`Ø«=¢øl-8ÒìààC`uN*r ääKïà9Ó àÁqo÷Ræ?FNnËv\ùwdÚ+G`@ܬ$@PCª\1wÒ>cK¢o«Z·&å]PÞ^ËørÈý6b8©4ä{½Ø¦Óðl©ð+o[rÅ+0Æe µ)ãü¸OÖò·Çf àÑqÝ·ëüpZ&M¨Úëµ_~0Æ@¦r)ÝAlïÏ 6+©ÈÙtvr&íݨdMaÈÓ0Ðn[ydxÎV§È±ô"F3Ð:A[=fa6ìËhúàLiÂ@F³µ/uj¿Eѱ±b§B×ÿ8à,LÐúåNØÑ¿»j*yAÔ3kàåUƹ/áÛbÊ*Kî÷qîWx¤¶*'h,Q1Ø-ç³SÖÏ4 fåäC6ÙT +7Aß}¦ÛFÄm4È ÕYùÞ¦Y²^r(9Ðàë¶µ±tù¥xõwldÍl±væüiv_Ü<yHp!Èr?Þa<¼³Vìu`¥Uv°Ñ0A¿]]+y*ÖÐ\èô?rW9,ªó¾Wí|"µúBI#£diçÆËÓ«7,Ý7v ¨d³¶05¬jÝqeh7ædtäÐaÎ&PæÇCfϼ$¥½"/9²[bs¹ÑÊjâc ÆDÕ´·).jîiç»f$2ýñ:ê_j·®æåLioámçxo¤Ò_Lï ç³2ÏÞm´è(¸©¦YÄn¨Kóì£T^õFßü+ÝЩB/ ÚÎùKîtª¾Î¬b0%I �%:æ>ì*ü¥Iì¢0uêF,i ÆDNh/ü¢ �ÀÊ8"bþhìhðwèö×èÿN*¯¢/NÒC-Nÿez«¢¨â<j jâB` ì ô¢épg¬*yJªý +¯û �eH0f£êB êFõ(¨¤ð("ð,ì +Ð<` ^à + �K<Ãu¢N¢#°ÿæßEJ® ö(Ðágb±.&¡kH¦Q>àç#iƲMªH$4\&<Îàæc îúcàËËjÈB¦'ñä �"ÈÇÎÀa¢}±°ã PˬîIl,uëÆäÔ:å(8V à êl[kòb¨§Ú¿Ðúh ,´î4OågRßü gEM òT m&¯^,¸4->N ú &3D¾§dd~L.¶&,,Îì(w²FN0OèæTªdêp Hë +ëQøë°#p&Z1ñ"© �++Ëøáïw±ªßFÎg!"¼òyQ&èõ#LìÄR\ Î?qà1ñ<rÉB§e`ï4I`ª¬3/§öÆ'xcg=+dA#ÆiÞ0Ää¤B¤ÀûÈFòæ Ü7í©2ZÚÂ`Ê\eÜ`è4FFËÇU"/ã·sL46gö¤vº°Ñ öëî( 2{-ÿ/1·2±A0Ò(_³& »3¶-@. +s<öĵ$¨J²" 7O\¼¬áçðÑG6þ3L5¨ü0o¶wjF¶C.1å¶Â °Èûë=!'R`r×óÛ`ÏóâZ3æÙ+àv1Ôp,îÓ ¶MXwÖdsý@ +endstream +endobj +313 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +315 0 obj +<< +/Length 2415 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8N¥BT # C Ñ<l0FâáÒbT"KF +LÌ8Îç¥ÁM}; CA@u9NBÈÊs¸ÄKh¦e:NÔèt7 ¦ã.³_¬ÖK0Ð2µ[-×Òíx»Þï¤ò^ 7 ;å¸ rÙ/ØÈi0 æ|!¼ñÆÁ +©¸ g²Ï,âÛM®û¤¹Ýn÷U¸a7̦Ív²Ú_vû÷ Ä1q¹NW32uÆc¯è4¼áH¨5(Â0b )(h Á2ÊÒ¸üA@7£h6â(ð:£pÈ2(ä9 ã¸3 +¤!pPb2I ¬?! ÀÊ;-Ñâå.c³:¬\\Èì@épi"rÈa-a²9-Á¬¤b¢JÇËL¨¨¯' hÁ¢waQIúJ"È!B£ÓjÁ¤iE¤ºüÌL£@¤ËÜ¿.!4ôÁ1 d¡Rµ9B泸b´P¼¢Ê3NëRå¼Só@¡4åPÈDÖ`a14ØÍÊðP( +BH¬ =1Ótb¢rêG< ÉjauS5ÆüÓ8¦Aq+PÞA@Ú!®`Â%úCðèàÃ(RÄX{XQ§·þØb*Hxn¡Ê7Rf±¢» 3ì\-ÅQTõG1å´Z9i^5dÞæÞÊ¥eZò7 ãæ4ØTATEÊQ=ÞxB@+âBðÌ7ÃñGIXì7#"ÈÛôÖ±NËYîy0è¨e:íUièצÍ)j".ãp8?ìLþÇjò½ëzí +Ç¢%ÐiÀèZlÌ4A mÔ â£ÀÊ1°Ðb7Á-çy¬u ¯;~à¸aøÿyKÖ¨Ï_@æ0Éï¼7ö?8P1-ßt#|¿Ç÷àP<óiS"AÁI2ìÅÔ©3îMOÉ|{ïl1¹óÇy/ =ÏdøLÏÀ.À9PưCü ²pÓ +ÑÐl¡¹½'ÆýRplJ ILeÂã[gÀÂ2Àh×Ûh«U¤EÚ½ÓÂzWF9æªç2k+-Ь¶¼¤ 6g.µæVs®9¡%è×fí`ÃÕ6/\÷½£û^P îÒBhQ +cö`/Iþ¥GZç:éL¨Ü˯TµjaÅ·DRÑl=-ü#4jLI<Ðxw^N#³Ü<éàÅ`@oÀ'På,§Qv¬ö`Fà%õ¾i±7I²ÉÛØsrDòK¢ÂÊÜìÈene¨Ë#É£¯'Ð2$3yKÓÏyuíøVásÃMô¦3"¡/ÌB+NpOÂ)аD¡H)ðBL á#¨R¤ìôôìc¤8ÏL:ÄÔ ÓðGEØ0¢ iìIÉ]Ó¼Wé%"wqÄ6a¤ÿÒ©,yyª§PjG_ü`¡éQàq¤%a¢ +ª@îZuõ°6WªÌwô0(di3DUéä;¡áK«¥Z°³&¥U´ÐP¶% +t6Ñ&\85-U1½Jj9çeê¾WâÜbѳHª6ãNîÃâ«Ò¯XÒ©XÄZÈ6fÑ|¤°V`âCK¾°¤ÅOKWçÅrÉÒû*èPA³!ÍÐê!D¹V´b Öx<]a$x%ºÕðÝ_ký°8A =+t.f8¡âÝÛÙñ0gÜßÕ»\jJ¥ÒL·2ìÏ«IéebïSÂ]³ÏÀ ùHG1¹Ù¨ÝÄÁÈáJÃ0§ägóÛ¼ÄpeDÀX_qMíÀv&o]{}v°¾^vÞ RÄvzôÀ �LnMMÿº92úã^©ûnt¡ÿXäm æm0 ¡8' µNtNl%Y9¦ìT#;0δlZ ÐSý#ÎrºACò@IÁÐðdpá uw¹4·0àñÃHf (*ÄÄ â=ÙÏò7@Ýýy¬º9Ïi B´(Ò¡Kí3'¥¢\oP!]E5 h á¿]Mi 5¸c×:îÝidHùW®§!YJc¡ E ¡@&S&¡úXÂwcgÏÍ£´ö®ËÓLX'=>Vð^ß©«_Üqóº=Ýã]kÍÝ l +9¹p/Ñ s ¡N^e{WÏÔ©aÌd2z¥2¼+ ÎÕèW¶SÀ&½¨dÄ×\.Or5Ãçìã0¿&[íÏÝ©¥¬ªìÙ¢K¬.ïÈÆfÊ[CaÍDWRñÑõîÞ[b:²qÉ3 +¡*:qgã6NÅ©Ë7º¸ê@Îâ$XM/¤|6v¼péöÍ(B!ÄT¶AºqKÁ6Ù6yOu89Et_'ÒÎôë}'lªW$åH}£üÚ]pj϶ëèÕ\IqÑ9X4µjÕ¸sW*í^ ~xK¼ æÞÂ.{"/ÈBãì §ÜÏÕâå7#ÜA¼¸¡s¦´`!þ²âHté2#[ ¨x¯ôþ @WL<OþCïö @¨ªe0ÖàÝ Ê Íbé`¦|Ë4®¯ö£ ìlÁFÊ=kmîo¦D +endstream +endobj +316 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +318 0 obj +<< +/Length 988 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ÆIÓQ¸qaã(ñRL +Kƹ *r4´O)ÓA4R5g1A°i; +h´pQ +£HøÌn.ÀÔÆ#:r2Á¨$ +F¥Bá ¡ÆÅÐgsãX~$n0ÁGd²á ¢g8Z#cV,`()MÆóÌÒs½Q²òJ^n-ÐqÄpË6 ªUéPi7ÓÚð\ëö{}Ó¡¤àl4Ì&ã °AØíw _9¤Êr÷|s¶üÞ9HvS.Ì©ã<Ö´ +Â4BH:ê,*,«:Ðæ¶¡n"£Æ9<Ï(Þ78+ââ3Hr ä"±¹ì +¬ÕÃ!`C P* (A@È(Ρ18«+M ɰJª¬¡ID¨'ã0ê7qPܸÌÿ£@:H¡æ6 xîìáxû3pu/Ak«¨lðn1ðQ4â¥Á )Lò»P×Íèô=Oe*#FHjé,dÍ*Óл¬R< +ËÒòrÂÑzÁP-¯#Ìô>õ=RÍ£aIG¡ "ë@! �|:Ïãü9XÓ7W!tê_H3@@Úů'AaºrµýÒ2 ê9Mã°Â6£-O3m¨!0z¦ÒÂal«ªü®Yídqb +C-õ~8ÜÁl9XCæ9Á ØHü§TÙ7fáñ_ctí<HÌæòPC4ï<¶êõgXÈÃ~4Åap@$éC(Ó¢A×AÓú;ÐCÇ}ÎÃzxßz¢j°æÿ½ó°ôûátZ ¬ðb)têÍè9#è2»Ìî94î7î¯èÉ#CÈA½C}£º_:A`4ÿ>¤a`o +àw a4!*m>^±b«3cÐP"]å¸RU"ù4mBª6CxÏ,ÍtV2ïÕ¼vìÿs B,J©Uºû[ þ6Ä-¸Ðc[ËPh +¸eM¿¼çl)Ézhà©"ÂHßp0{¡ïçÀ¢ñGF¸£ò I©1 ¸ÇdÈ! +endstream +endobj +319 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +322 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +323 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +325 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +326 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +328 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +329 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +331 0 obj +<< +/Length 1119 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4r. FbáÀà@3EС¶ *¤â<\0Ir²¡Þ((&ã¡È 1Î)Îa7FQ¼äd2§Â1ÈÞm +J¨$= +JÅ£pÜr5 %ÓRf +HdÒ j¹ÂapÐTRÆ.FöXÂÁoF#AHëL2q¦àÌl47nÖ+ Äq`µ\dÈa#s'clTA£ |Æ)Í'CÕDÙH2k¯ÖA¸àg¾íqì-l +-ÆÅdZ3XÒ2HxÛiJ¬æ?ÈÙípðN&yQÌ:Ã!,P4£`à¨cX2chÂcCÒõ½«2Ð*4)BÞÚ4ÐèÃHØ¢¨êHÄ ¡¨PÍD¡@@2 ã¸Ü6 ã + ªªº:AöLÜ %«Û¥Í3 mØÊGJÚº#+ëÚÁ£3]AP`Ñ(5È2°/l8òdó¶Îc!Êç Î3§c8@ç4ÊÒÂ$L=9O`ùÎóÄöúEJ@Þ7#hÞ:ÐïTy5QSl²òKñ=&´Å +7'ô ÊrëÉxn/óË.¹)d0æ;©Î¤¼Mr°,]RæÈAKº@]DÈXÐ4¨Âèà*}a5ðÂ1Cꢬ6`Ò1W¨óTV-J6KÈÆR¥Ä.K Z)E»E˰dÁâ-§hl7L¨Âh¦+Û!Ðô@..!kø¢²È" â¡\æùÈdgðA yÅHIY¯} Ú!ML +ÈÞ.2 +xæ: +ct8¦d£fFq§£mÚã¹çù¶£{®Uéþ¾ ìÃxÄ0í9?¶fºà(4ÐÒñ»ÞØ0¸i> +Ú!ÉhûÖß¾ò:å×m¸k+äN£Î0umÒ*@:æ ÉtB¥)êcØ9áf0С<¨ ¡uܦE6¦ èڥÇ7@î»ñ n^ôU!ƱÄÁºA,£asÉü¡G2à'Ì9£ é@¨ß°P½Jcþ �º<hÙ7f ª&ÆPZ p¤(WñJX TùÓwRqVy¡RIm;!hI8OGéøpÊ¡£÷IÉ¡øôÐ/áÞ"AtÊaãæVH¿ÌC`l bÚ)¥%~íÔ(cjÍýX¾]ò^ =a+@n 0p6@Ö gZBZK Ê +ptpR +endstream +endobj +332 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +>> +>> +endobj +334 0 obj +<< +/Length 281 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4r.Æ"ád1ÂͰH¡På$äáÂ$T1ÁR4)*¥ØØÜo +*%rØìÂPT;Ì# ¤u2Zq ¸3 ÆYÄè#aÌ. _$4`P HÒ9¶v0×` AUaEÛJgsIÐôe9&ã%ê¾ °Ï¨qAPÐi9 +gLYÂr2&ahÈgMÌ7N(Äl¨FZ¼Ì 13æz¤Ü 8·ÇC.Ìo9uXÍVd 3kL¢ìuòdSÚ7Ç3I¢c7±ó¡ÈígCÔÆt4ýXâ, +endstream +endobj +335 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F8 8 0 R +>> +>> +endobj +5 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F2 +/Encoding 336 0 R +/BaseFont /Times-Roman +>> +endobj +6 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F4 +/Encoding 336 0 R +/BaseFont /Helvetica-Bold +>> +endobj +7 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F6 +/Encoding 336 0 R +/BaseFont /Helvetica +>> +endobj +8 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F8 +/Encoding 336 0 R +/BaseFont /Times-Bold +>> +endobj +22 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F9 +/BaseFont /Symbol +>> +endobj +23 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F11 +/Encoding 336 0 R +/BaseFont /Times-Italic +>> +endobj +217 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F13 +/Encoding 336 0 R +/BaseFont /Times-BoldItalic +>> +endobj +336 0 obj +<< +/Type /Encoding +/Differences [ + 0/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis +/ring/cedilla/hungarumlaut/ogonek/caron/dotlessi 39/quotesingle 96/grave + 127/bullet/bullet/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger +/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/bullet +/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash +/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/bullet +/Ydieresis/space 164/currency 166/brokenbar 168/dieresis/copyright/ordfeminine 172/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute +/mu 183/periodcentered/cedilla/onesuperior/ordmasculine 188/onequarter/onehalf/threequarters + 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis +/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply +/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls +/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide +/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis +] +>> +endobj +2 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 4 0 R +/Contents 3 0 R +>> +endobj +10 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 12 0 R +/Contents 11 0 R +>> +endobj +13 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 15 0 R +/Contents 14 0 R +>> +endobj +16 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 18 0 R +/Contents 17 0 R +>> +endobj +19 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 21 0 R +/Contents 20 0 R +>> +endobj +24 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 26 0 R +/Contents 25 0 R +>> +endobj +27 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 29 0 R +/Contents 28 0 R +>> +endobj +32 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 34 0 R +/Contents 33 0 R +>> +endobj +35 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 37 0 R +/Contents 36 0 R +>> +endobj +38 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 40 0 R +/Contents 39 0 R +>> +endobj +41 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 43 0 R +/Contents 42 0 R +>> +endobj +44 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 46 0 R +/Contents 45 0 R +>> +endobj +47 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 49 0 R +/Contents 48 0 R +>> +endobj +51 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 53 0 R +/Contents 52 0 R +>> +endobj +54 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 56 0 R +/Contents 55 0 R +>> +endobj +57 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 59 0 R +/Contents 58 0 R +>> +endobj +60 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 62 0 R +/Contents 61 0 R +>> +endobj +63 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 65 0 R +/Contents 64 0 R +>> +endobj +66 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 68 0 R +/Contents 67 0 R +>> +endobj +70 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 72 0 R +/Contents 71 0 R +>> +endobj +73 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 75 0 R +/Contents 74 0 R +>> +endobj +76 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 78 0 R +/Contents 77 0 R +>> +endobj +79 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 81 0 R +/Contents 80 0 R +>> +endobj +82 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 84 0 R +/Contents 83 0 R +>> +endobj +85 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 87 0 R +/Contents 86 0 R +>> +endobj +89 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 91 0 R +/Contents 90 0 R +>> +endobj +92 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 94 0 R +/Contents 93 0 R +>> +endobj +95 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 97 0 R +/Contents 96 0 R +>> +endobj +98 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 100 0 R +/Contents 99 0 R +>> +endobj +101 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 103 0 R +/Contents 102 0 R +>> +endobj +104 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 106 0 R +/Contents 105 0 R +>> +endobj +108 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 110 0 R +/Contents 109 0 R +>> +endobj +111 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 113 0 R +/Contents 112 0 R +>> +endobj +114 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 116 0 R +/Contents 115 0 R +>> +endobj +117 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 119 0 R +/Contents 118 0 R +>> +endobj +120 0 obj +<< +/Type /Page +/Parent 107 0 R +/Resources 122 0 R +/Contents 121 0 R +>> +endobj +123 0 obj +<< +/Type /Page +/Parent 127 0 R +/Resources 125 0 R +/Contents 124 0 R +>> +endobj +128 0 obj +<< +/Type /Page +/Parent 127 0 R +/Resources 130 0 R +/Contents 129 0 R +>> +endobj +131 0 obj +<< +/Type /Page +/Parent 127 0 R +/Resources 133 0 R +/Contents 132 0 R +>> +endobj +134 0 obj +<< +/Type /Page +/Parent 127 0 R +/Resources 136 0 R +/Contents 135 0 R +>> +endobj +137 0 obj +<< +/Type /Page +/Parent 127 0 R +/Resources 139 0 R +/Contents 138 0 R +>> +endobj +140 0 obj +<< +/Type /Page +/Parent 127 0 R +/Resources 142 0 R +/Contents 141 0 R +>> +endobj +143 0 obj +<< +/Type /Page +/Parent 147 0 R +/Resources 145 0 R +/Contents 144 0 R +>> +endobj +148 0 obj +<< +/Type /Page +/Parent 147 0 R +/Resources 150 0 R +/Contents 149 0 R +>> +endobj +151 0 obj +<< +/Type /Page +/Parent 147 0 R +/Resources 153 0 R +/Contents 152 0 R +>> +endobj +154 0 obj +<< +/Type /Page +/Parent 147 0 R +/Resources 156 0 R +/Contents 155 0 R +>> +endobj +157 0 obj +<< +/Type /Page +/Parent 147 0 R +/Resources 159 0 R +/Contents 158 0 R +>> +endobj +160 0 obj +<< +/Type /Page +/Parent 147 0 R +/Resources 162 0 R +/Contents 161 0 R +>> +endobj +163 0 obj +<< +/Type /Page +/Parent 166 0 R +/Resources 165 0 R +/Contents 164 0 R +>> +endobj +167 0 obj +<< +/Type /Page +/Parent 166 0 R +/Resources 169 0 R +/Contents 168 0 R +>> +endobj +170 0 obj +<< +/Type /Page +/Parent 166 0 R +/Resources 172 0 R +/Contents 171 0 R +>> +endobj +173 0 obj +<< +/Type /Page +/Parent 166 0 R +/Resources 175 0 R +/Contents 174 0 R +>> +endobj +176 0 obj +<< +/Type /Page +/Parent 166 0 R +/Resources 178 0 R +/Contents 177 0 R +>> +endobj +179 0 obj +<< +/Type /Page +/Parent 166 0 R +/Resources 181 0 R +/Contents 180 0 R +>> +endobj +182 0 obj +<< +/Type /Page +/Parent 185 0 R +/Resources 184 0 R +/Contents 183 0 R +>> +endobj +186 0 obj +<< +/Type /Page +/Parent 185 0 R +/Resources 188 0 R +/Contents 187 0 R +>> +endobj +189 0 obj +<< +/Type /Page +/Parent 185 0 R +/Resources 191 0 R +/Contents 190 0 R +>> +endobj +192 0 obj +<< +/Type /Page +/Parent 185 0 R +/Resources 194 0 R +/Contents 193 0 R +>> +endobj +195 0 obj +<< +/Type /Page +/Parent 185 0 R +/Resources 197 0 R +/Contents 196 0 R +>> +endobj +198 0 obj +<< +/Type /Page +/Parent 185 0 R +/Resources 200 0 R +/Contents 199 0 R +>> +endobj +201 0 obj +<< +/Type /Page +/Parent 204 0 R +/Resources 203 0 R +/Contents 202 0 R +>> +endobj +205 0 obj +<< +/Type /Page +/Parent 204 0 R +/Resources 207 0 R +/Contents 206 0 R +>> +endobj +208 0 obj +<< +/Type /Page +/Parent 204 0 R +/Resources 210 0 R +/Contents 209 0 R +>> +endobj +211 0 obj +<< +/Type /Page +/Parent 204 0 R +/Resources 213 0 R +/Contents 212 0 R +>> +endobj +214 0 obj +<< +/Type /Page +/Parent 204 0 R +/Resources 216 0 R +/Contents 215 0 R +>> +endobj +218 0 obj +<< +/Type /Page +/Parent 204 0 R +/Resources 220 0 R +/Contents 219 0 R +>> +endobj +221 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 223 0 R +/Contents 222 0 R +>> +endobj +225 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 227 0 R +/Contents 226 0 R +>> +endobj +228 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 230 0 R +/Contents 229 0 R +>> +endobj +231 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 233 0 R +/Contents 232 0 R +>> +endobj +234 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 236 0 R +/Contents 235 0 R +>> +endobj +237 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 239 0 R +/Contents 238 0 R +>> +endobj +240 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 242 0 R +/Contents 241 0 R +>> +endobj +244 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 246 0 R +/Contents 245 0 R +>> +endobj +247 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 249 0 R +/Contents 248 0 R +>> +endobj +250 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 252 0 R +/Contents 251 0 R +>> +endobj +253 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 255 0 R +/Contents 254 0 R +>> +endobj +256 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 258 0 R +/Contents 257 0 R +>> +endobj +259 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 261 0 R +/Contents 260 0 R +>> +endobj +264 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 266 0 R +/Contents 265 0 R +>> +endobj +267 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 269 0 R +/Contents 268 0 R +>> +endobj +270 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 272 0 R +/Contents 271 0 R +>> +endobj +273 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 275 0 R +/Contents 274 0 R +>> +endobj +276 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 278 0 R +/Contents 277 0 R +>> +endobj +279 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 281 0 R +/Contents 280 0 R +>> +endobj +283 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 285 0 R +/Contents 284 0 R +>> +endobj +286 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 288 0 R +/Contents 287 0 R +>> +endobj +289 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 291 0 R +/Contents 290 0 R +>> +endobj +292 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 294 0 R +/Contents 293 0 R +>> +endobj +295 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 297 0 R +/Contents 296 0 R +>> +endobj +298 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 300 0 R +/Contents 299 0 R +>> +endobj +302 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 304 0 R +/Contents 303 0 R +>> +endobj +305 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 307 0 R +/Contents 306 0 R +>> +endobj +308 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 310 0 R +/Contents 309 0 R +>> +endobj +311 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 313 0 R +/Contents 312 0 R +>> +endobj +314 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 316 0 R +/Contents 315 0 R +>> +endobj +317 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 319 0 R +/Contents 318 0 R +>> +endobj +321 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 323 0 R +/Contents 322 0 R +>> +endobj +324 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 326 0 R +/Contents 325 0 R +>> +endobj +327 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 329 0 R +/Contents 328 0 R +>> +endobj +330 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 332 0 R +/Contents 331 0 R +>> +endobj +333 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 335 0 R +/Contents 334 0 R +>> +endobj +9 0 obj +<< +/Type /Pages +/Kids [2 0 R 10 0 R 13 0 R 16 0 R 19 0 R 24 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +31 0 obj +<< +/Type /Pages +/Kids [27 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +50 0 obj +<< +/Type /Pages +/Kids [47 0 R 51 0 R 54 0 R 57 0 R 60 0 R 63 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +69 0 obj +<< +/Type /Pages +/Kids [66 0 R 70 0 R 73 0 R 76 0 R 79 0 R 82 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +88 0 obj +<< +/Type /Pages +/Kids [85 0 R 89 0 R 92 0 R 95 0 R 98 0 R 101 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +107 0 obj +<< +/Type /Pages +/Kids [104 0 R 108 0 R 111 0 R 114 0 R 117 0 R 120 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +30 0 obj +<< +/Type /Pages +/Kids [9 0 R 31 0 R 50 0 R 69 0 R 88 0 R 107 0 R ] +/Count 36 +/Parent 126 0 R +>> +endobj +127 0 obj +<< +/Type /Pages +/Kids [123 0 R 128 0 R 131 0 R 134 0 R 137 0 R 140 0 R ] +/Count 6 +/Parent 146 0 R +>> +endobj +147 0 obj +<< +/Type /Pages +/Kids [143 0 R 148 0 R 151 0 R 154 0 R 157 0 R 160 0 R ] +/Count 6 +/Parent 146 0 R +>> +endobj +166 0 obj +<< +/Type /Pages +/Kids [163 0 R 167 0 R 170 0 R 173 0 R 176 0 R 179 0 R ] +/Count 6 +/Parent 146 0 R +>> +endobj +185 0 obj +<< +/Type /Pages +/Kids [182 0 R 186 0 R 189 0 R 192 0 R 195 0 R 198 0 R ] +/Count 6 +/Parent 146 0 R +>> +endobj +204 0 obj +<< +/Type /Pages +/Kids [201 0 R 205 0 R 208 0 R 211 0 R 214 0 R 218 0 R ] +/Count 6 +/Parent 146 0 R +>> +endobj +224 0 obj +<< +/Type /Pages +/Kids [221 0 R 225 0 R 228 0 R 231 0 R 234 0 R 237 0 R ] +/Count 6 +/Parent 146 0 R +>> +endobj +146 0 obj +<< +/Type /Pages +/Kids [127 0 R 147 0 R 166 0 R 185 0 R 204 0 R 224 0 R ] +/Count 36 +/Parent 126 0 R +>> +endobj +243 0 obj +<< +/Type /Pages +/Kids [240 0 R 244 0 R 247 0 R 250 0 R 253 0 R 256 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +263 0 obj +<< +/Type /Pages +/Kids [259 0 R 264 0 R 267 0 R 270 0 R 273 0 R 276 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +282 0 obj +<< +/Type /Pages +/Kids [279 0 R 283 0 R 286 0 R 289 0 R 292 0 R 295 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +301 0 obj +<< +/Type /Pages +/Kids [298 0 R 302 0 R 305 0 R 308 0 R 311 0 R 314 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +320 0 obj +<< +/Type /Pages +/Kids [317 0 R 321 0 R 324 0 R 327 0 R 330 0 R 333 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +262 0 obj +<< +/Type /Pages +/Kids [243 0 R 263 0 R 282 0 R 301 0 R 320 0 R ] +/Count 30 +/Parent 126 0 R +>> +endobj +126 0 obj +<< +/Type /Pages +/Kids [30 0 R 146 0 R 262 0 R ] +/Count 102 +/MediaBox [0 0 595 842 ] +>> +endobj +337 0 obj +<< +/Type /Catalog +/Pages 126 0 R +>> +endobj +338 0 obj +<< +/CreationDate (D:19960308084436) +/Producer (Acrobat Distiller 2.1 for Windows) +>> +endobj +xref +0 339 +0000000000 65535 f +0000000017 00000 n +0000298931 00000 n +0000000182 00000 n +0000006136 00000 n +0000296877 00000 n +0000296986 00000 n +0000297098 00000 n +0000297205 00000 n +0000308598 00000 n +0000299019 00000 n +0000006277 00000 n +0000006357 00000 n +0000299110 00000 n +0000006435 00000 n +0000012316 00000 n +0000299201 00000 n +0000012458 00000 n +0000012538 00000 n +0000299292 00000 n +0000012616 00000 n +0000016930 00000 n +0000297313 00000 n +0000297399 00000 n +0000299383 00000 n +0000017075 00000 n +0000018114 00000 n +0000299474 00000 n +0000018223 00000 n +0000020573 00000 n +0000309312 00000 n +0000308714 00000 n +0000299566 00000 n +0000020704 00000 n +0000022819 00000 n +0000299658 00000 n +0000022939 00000 n +0000025309 00000 n +0000299750 00000 n +0000025440 00000 n +0000026257 00000 n +0000299842 00000 n +0000026377 00000 n +0000029162 00000 n +0000299934 00000 n +0000029295 00000 n +0000034119 00000 n +0000300026 00000 n +0000034239 00000 n +0000039108 00000 n +0000308832 00000 n +0000300118 00000 n +0000039252 00000 n +0000043482 00000 n +0000300210 00000 n +0000043602 00000 n +0000047911 00000 n +0000300302 00000 n +0000048031 00000 n +0000050716 00000 n +0000300394 00000 n +0000050860 00000 n +0000053288 00000 n +0000300486 00000 n +0000053432 00000 n +0000055916 00000 n +0000300578 00000 n +0000056060 00000 n +0000059495 00000 n +0000308950 00000 n +0000300670 00000 n +0000059639 00000 n +0000061861 00000 n +0000300762 00000 n +0000062005 00000 n +0000064643 00000 n +0000300854 00000 n +0000064787 00000 n +0000067548 00000 n +0000300946 00000 n +0000067692 00000 n +0000070653 00000 n +0000301038 00000 n +0000070797 00000 n +0000073704 00000 n +0000301130 00000 n +0000073848 00000 n +0000076692 00000 n +0000309068 00000 n +0000301222 00000 n +0000076836 00000 n +0000080820 00000 n +0000301314 00000 n +0000080964 00000 n +0000084405 00000 n +0000301406 00000 n +0000084549 00000 n +0000087120 00000 n +0000301498 00000 n +0000087264 00000 n +0000090343 00000 n +0000301591 00000 n +0000090488 00000 n +0000094240 00000 n +0000301686 00000 n +0000094385 00000 n +0000097561 00000 n +0000309187 00000 n +0000301782 00000 n +0000097706 00000 n +0000100891 00000 n +0000301878 00000 n +0000101036 00000 n +0000102839 00000 n +0000301974 00000 n +0000102984 00000 n +0000105617 00000 n +0000302070 00000 n +0000105762 00000 n +0000109322 00000 n +0000302166 00000 n +0000109467 00000 n +0000112012 00000 n +0000302262 00000 n +0000112157 00000 n +0000115636 00000 n +0000311064 00000 n +0000309432 00000 n +0000302358 00000 n +0000115781 00000 n +0000119230 00000 n +0000302454 00000 n +0000119375 00000 n +0000122728 00000 n +0000302550 00000 n +0000122873 00000 n +0000125754 00000 n +0000302646 00000 n +0000125899 00000 n +0000129213 00000 n +0000302742 00000 n +0000129358 00000 n +0000132060 00000 n +0000302838 00000 n +0000132205 00000 n +0000134455 00000 n +0000310188 00000 n +0000309558 00000 n +0000302934 00000 n +0000134600 00000 n +0000137419 00000 n +0000303030 00000 n +0000137564 00000 n +0000140649 00000 n +0000303126 00000 n +0000140794 00000 n +0000143244 00000 n +0000303222 00000 n +0000143389 00000 n +0000146508 00000 n +0000303318 00000 n +0000146653 00000 n +0000149858 00000 n +0000303414 00000 n +0000150003 00000 n +0000152575 00000 n +0000309684 00000 n +0000303510 00000 n +0000152720 00000 n +0000155947 00000 n +0000303606 00000 n +0000156092 00000 n +0000159826 00000 n +0000303702 00000 n +0000159971 00000 n +0000163042 00000 n +0000303798 00000 n +0000163187 00000 n +0000165892 00000 n +0000303894 00000 n +0000166037 00000 n +0000168861 00000 n +0000303990 00000 n +0000169006 00000 n +0000172130 00000 n +0000309810 00000 n +0000304086 00000 n +0000172275 00000 n +0000175409 00000 n +0000304182 00000 n +0000175554 00000 n +0000179627 00000 n +0000304278 00000 n +0000179772 00000 n +0000182794 00000 n +0000304374 00000 n +0000182939 00000 n +0000185605 00000 n +0000304470 00000 n +0000185750 00000 n +0000188530 00000 n +0000304566 00000 n +0000188675 00000 n +0000191433 00000 n +0000309936 00000 n +0000304662 00000 n +0000191578 00000 n +0000194045 00000 n +0000304758 00000 n +0000194190 00000 n +0000196912 00000 n +0000304854 00000 n +0000197057 00000 n +0000199373 00000 n +0000304950 00000 n +0000199518 00000 n +0000202570 00000 n +0000297511 00000 n +0000305046 00000 n +0000202729 00000 n +0000205286 00000 n +0000305142 00000 n +0000205431 00000 n +0000208648 00000 n +0000310062 00000 n +0000305238 00000 n +0000208793 00000 n +0000211176 00000 n +0000305334 00000 n +0000211321 00000 n +0000213133 00000 n +0000305430 00000 n +0000213278 00000 n +0000215664 00000 n +0000305526 00000 n +0000215809 00000 n +0000219006 00000 n +0000305622 00000 n +0000219151 00000 n +0000222387 00000 n +0000305718 00000 n +0000222532 00000 n +0000225660 00000 n +0000310315 00000 n +0000305814 00000 n +0000225805 00000 n +0000228252 00000 n +0000305910 00000 n +0000228397 00000 n +0000230603 00000 n +0000306006 00000 n +0000230748 00000 n +0000233266 00000 n +0000306102 00000 n +0000233411 00000 n +0000236518 00000 n +0000306198 00000 n +0000236663 00000 n +0000239901 00000 n +0000306294 00000 n +0000240046 00000 n +0000242298 00000 n +0000310945 00000 n +0000310441 00000 n +0000306390 00000 n +0000242443 00000 n +0000245673 00000 n +0000306486 00000 n +0000245818 00000 n +0000248433 00000 n +0000306582 00000 n +0000248578 00000 n +0000251016 00000 n +0000306678 00000 n +0000251161 00000 n +0000253802 00000 n +0000306774 00000 n +0000253947 00000 n +0000256366 00000 n +0000306870 00000 n +0000256511 00000 n +0000258926 00000 n +0000310567 00000 n +0000306966 00000 n +0000259071 00000 n +0000261665 00000 n +0000307062 00000 n +0000261810 00000 n +0000264799 00000 n +0000307158 00000 n +0000264944 00000 n +0000267616 00000 n +0000307254 00000 n +0000267761 00000 n +0000272023 00000 n +0000307350 00000 n +0000272168 00000 n +0000274295 00000 n +0000307446 00000 n +0000274440 00000 n +0000277769 00000 n +0000310693 00000 n +0000307542 00000 n +0000277914 00000 n +0000280903 00000 n +0000307638 00000 n +0000281048 00000 n +0000283849 00000 n +0000307734 00000 n +0000283994 00000 n +0000287178 00000 n +0000307830 00000 n +0000287323 00000 n +0000290610 00000 n +0000307926 00000 n +0000290755 00000 n +0000293250 00000 n +0000308022 00000 n +0000293395 00000 n +0000294462 00000 n +0000310819 00000 n +0000308118 00000 n +0000294607 00000 n +0000294688 00000 n +0000308214 00000 n +0000294767 00000 n +0000294848 00000 n +0000308310 00000 n +0000294927 00000 n +0000295008 00000 n +0000308406 00000 n +0000295087 00000 n +0000296286 00000 n +0000308502 00000 n +0000296407 00000 n +0000296767 00000 n +0000297628 00000 n +0000311176 00000 n +0000311235 00000 n +trailer +<< +/Size 339 +/Root 337 0 R +/Info 338 0 R +/ID [<cdcc0cc0ab633a18eef36aef98250022><cdcc0cc0ab633a18eef36aef98250022>] +>> +startxref +311343 +%%EOF Added: trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v3.pdf URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/media/doc/Standard_ECMA-234…
============================================================================== --- trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v3.pdf (added) +++ trunk/reactos/media/doc/Standard_ECMA-234 Application Programming Interface for Windows APIW/Ecma-234-v3.pdf Fri Apr 14 14:48:46 2006 @@ -1,0 +1,8852 @@ +%PDF-1.1 +%âãÏÓ +1 0 obj +[/CalRGB +<< +/WhitePoint [0.9505 1 1.089] +/Gamma [1.8 1.8 1.8] +/Matrix [0.4497 0.2446 0.02518 0.3163 0.672 0.1412 0.1845 0.08334 0.9227] +>> +] +endobj +3 0 obj +<< +/Length 5817 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4d0PAÄÆcq°¸j61trmEJ)HÏ)af9iPï- +gAHÐPa7'# C&ÏEhÈf4J¨ ä\9EbµjÀh8FDqÅXq*JQQRh +ÄlÜ9"LfSh¦(1NPÈäkQ©Á°0PÖñÙêðV:= âh²6X³9¼îC±æ Úð(m$Dôbë î Õý¶|h.ft;î0¸gÉÉ"\]w!ãìz̾¤kÝÛñÇ=þCñ÷:~~¿«KÕáìÑÑã·Ùô÷ ý_0?M«úÿ¬.#nж¨âÂàÀíl°«k,öÂâ ³«ôçºÂƼ®c°ÁðûDm¤L¾Ð¬éáªHÄAª¬ÙFN[¬Ï´bqC@Ã2+±ütûµqôs3îüq»p˾Ö3èìiÀ.ÛôúÃê³{/>/J!µË`Lò«s·sD'N0ë'4ïxjã¸ó»óý"PìíBNûÇÆq«é)̰:ÊÔ%$äIÏÕKQòE%Òô£"нp½&Ì õG².<ÁD½#Ö*ÈïÔU9[£Ñ«ÅT;é4%>SÖQ9²64ìÚSÈìÏ¡Å7KlÌ7Lv´TÛ»ðHpÝÃå{QÙÝqT8{¹[2O3?$UD×Õ¯D$ÇÞ7²K+VÙÐhAÊ*̼±EüÔa SLÕ4,RÈQzÂäÛ÷Õúý]vÛÓãßi4AÅÎêeNEåÎe5µMÇ^Kìäõ%<ãâCáèL²ybÙTNhn«]Ãß§¹ÎÃp #üÔÚ¦µjî<ǧD ¬ì°RKkOú;wZûîjp«ÒÐÈ:ò]Ívã¨IÉk¥Ëõ?££îFO¡Cîþ#çÑ^44\(_±Paõepl÷íOÏËy¬µ¿¬7Ö[xÔYÆÒÝmÄèìo±ñÞnh°wóìm檷.ù/ßiv\bãøxßìxW´5ÎnÃíÞàÉ83góPú!ÜßÍWáópÝòyªóSz/Aç:§¤]+rEmÁ-@¹Zqú§% )²~1DM&i067oy¸ÖøiÚñôGǹ¯(£þB1kdq/µ5º|+NÇ Á×ffI#ýZÈ&G\³Zm)5&¼ÆØÝE QA3gRÖJãP,3¬×Ë ÚIea#¬õ[`L_6lV}9-(ÈzÂaêi`.6jÕâÃeáÀ¸öÅlrwL¦72¬ÄK$cÌÂDÀà¿©ÔµIvÃëðRZF@×ó&ˤȢN0È$ãzN såݨêIBñBhÐ]î3[$ROòü«/$ÀÍ4ª¦§æì^$άäÁ9¦{Ì,WPr +l¡ru&ËåG-æb1>îdÂJZ4Êd,åòzVN礧Ý,éj«?O&8¼'\_*Ъµ^ãè+/I^MÊÊ% 0rª¡iÌBµ^<è'jÑ jJ´~,VdÒo e 1BæAU;Ùk9¥ÑÑQøà¯,.½z¼:fâIôîm1ÙuQÌø¨ðB)©YR d£¦Õ²ºOûªé-%K +F%¥CbrõèS¤ +&%¥s^Ò 2)Õn|3BKyQëµl¨gJ´W +\I)Ç¥´n²Tvdçç%%XÑÉת@GÆÅKÄcS¨ý2&îMI\åÔ>dõ #\8 Ä Û)7i;Ö!¨û[wlmzÉ£-}È·êÎ6µ».}Ñ··&L2B'uîÍ¼ÖøÚkºÚíº[¼7Jòf8´Ó9½wnéÒy +úÉó¼w&2ó~.Ár¸÷Òößj/Õä´×õIÜ6·nLm!.Ï_Vf¹låÅÀWBñ`¤ùI»¹Øní_¼-B"À6·^ËM ãö*¸D2ÜS>ñ¦Æ®8û.G1.S½Q?Kå0íÉÇe#b»up%¦&IE¾+ó1sb_8ôîã´½Q.VÉØ`\¦$¾È&úætËsP̶/J¼'²~A¹9Õ'\¼ÊUv\Ï!EêqþyÍCKÍsÕ¿Iþô*Lñv¨&çKi ôÓHIzwêlÞu&XÊ'M£ ó +Õ1êý=¦dIÖÚ@Mýwª³³}ª_éVW!¨41û^.ÍB6~·Øû:=m§µ¶ÖØËdHE×¼:ûéM¸aèÜÙ_cl Q·çÛvÀnKºöîùoëÍöZNþ`øp礩*àÛ·noôÁÂôV¸Wj|®Dǯ8ñà±_D[Ñ-8é3|lír.ù¼¦Ã:¾vç;\¿^qäÆé5ål¹ñ»Wʵ7jÖó éÐQ èºñA5CQÒúÒGÍR?(ÞÂ:k»êØæ}OW¼½ț./:ä+k´tÈÖ_aí)%vÛ¬³m>Ú±þó8&ómpËJ<oǧ'áxQñJ}øÒòÃÞ ´B2oòAvÁXü·Äëi0'ÿLt)§©ò9Î÷iæõl¡ÌÿH̼÷ë¿{»Ñì¼åõøé-ü=?Ìpô>_åéÏKÞÇÁ8#Üü¯a¨þ¿ªìi¿à·¹ñ.§¶t;}v¿>ý?F ~Ï%W> +cúóCÊÜ ïú3,&÷Ï.aõÐêfHËÿæ£kOøðPâË+N¢LþÌçÆ¸f2Ê+i-Ü.ðo#2mï@L¬þhèzÐ<ÁFðû&»oif»o;Hzb0pÈP`#¦#gAg+A(zTPx·ðk#§ ë ÅY +/Æ;Fʯ˯I ÇÁNýTÌ0¿ðêd®>Ð PÞ �ÜQro÷FñðQ¥² D9 +Ño5ñüq"qÐüï± PÇïÆL(q>P0ðü12ïÑ"±OèË1 õs)µâAðIqïÀ5¹Í1kqÕYDâêkPà°ðÝñÿQ°øÃ �;è×ñÜï±â:,1-?¨p\±ËgÓHx}1høwr÷±ÞÅÿÒìs!/²°[ñ[!ò*\r!HõR Ú±²(5#a = 1õ²G! L%N-±»$^¯æÿQ$ÂÅ 0r²/!¬£'£ÝR[^gq �ø Ä2e(¯ñ+mÁ|C ¯1û*ó+2Êò²»*¯ÈoCo*ò%2ÐeÒ*'g,ãRr2ò8B»/22m,Oø~81lå"RÆó ]2úÓ1Ì3o·-¬X# ~W42p-ò1S*q5ÌE!R|³,ÕÒÅÌDêh72qèï31Ó4s"Âr©4ó8Ó2cT6±7H«9ÓD#T$Ó¦&ÓY%Ó°4w#.Õ<R<%ÆÆSî!SzÊ+9;?4ËJcf"rFUésÊÈsó>Rc61³?ð¡=ìç>#R.SpÇ(EArAAB83ï´B²;í>}fæ,ÓÇT2ÔA Ô<='D1kDtSDÅcD»ôY$´´OCQ3®PL´\rÔattÿyCQ/C\M´58Tça.,sITaÓú¼´JsW9tlbÄkteIÆíEÈFAloKK~ÆçLÀÒñZ3tÆøôªH)ömOF«MÃÒl´¾oËEÅmK³K@MòüÊ4ðmQ¯LÔNt»ÎuK¯áHq[PÕ7"ÁSÚ@¯Kç¥KkNËËS´óEUíïTgTÈYuÓèv?2U\@1RÔEUO;ÕUµyTãVu_õ7KuBQVH3YT]Y3çV,\mãþ`S«T>Cõ?Zi%Nõ&5»Y§EÆø µZuÌܵmQÈI.Û£çCu~CÒ´¿Oè+]æYÒ§Cé`®øð#½=T_i\5KIÕg_hGVt]_òÙZL¢¶inï©Ícp[\¶'/ßbÔ©dUòvt\P@lt¾hgeva0Îv5e¯ ]öY5×c4_g;J(og¹\´JöC¶'¶^vPÕJ=25g¶mgï×T¤ vqR¶jÁUãjëkV¦#i°õ]VÌöåV¶I6[BìsmVãVÞ?æ>ÊÆv¶|£¸$Çj"Ì>OÓp.Åo·\w o=,?qvÝpÂ8;6ôîïÅkeª; EjwóÈIs#sÍ5t/rCqr¢»s£þ,z×T=-ê!7]t7VÍ÷gt¤Þ7'vñ3kwkd.ûZÂ8åÛwú7©këKxWK7FèFë±Oy»n× nñqWõ#'x·{z÷¹N´fäN´Ù V·D+·÷·}t×yðHu|jE~s·Õ +w§|§z׿9tËx7ýlv}#ÿÖѦ@>Q {×Ðøj̦ï~7;5VÆa7hõ#å$·ûÒK4øniupJ©lcWX´ødô϶[87A®W£Ó1!DÄnsØnux tã8u}~XyAXø¥uÝâd#O¦o¥zÄÌEWúA&ûxs¸¾o°å}«Ê@(GOÑv¥ã!8ëa·ôs|xÕ[6½ ;&ûHXä#y_ìAxû^VÓ¶Iù!÷Wøúõ¸CmÙ.F6§->p&·ðÂxóÇpÑOëËNx÷ÙH-¶ø¢ä3zùbG8ïÙxÕï¢ÂÆ÷&ØÛ +ùÖ£ç(¹ +ÀÂeY·¬ËäqùÄwkM¹DÅË>M·.w¹Ô5- ÷Ùåy²ª'J<fã-Ïù:ÉëcrPÇ:¢:h¹ #-@ùYÞÊ&®C)¥Äp³I颩7úS㤧:¦8ãZ8dm¯0¸÷YG§ti0×z@§:6xÉɹ§Zcµ¢.Ϻf« }©ä¿¢.@¥3eRoº¬w5¢Z´£ù½¬ë½nZÃvs¨×Ñ£$>KY%¦Òq9g§öq9o£d2ZrÛ¹°±§Ù˯ àtFÎzúª[¤`q6½§[7íJq9±³óm cE¨:°âݵ%»¬zûcµ·³ +«W''E+»OmÛpùñÚæR°N6¶ù¸$BÂ{w®j1¹mñ¹&,ìn2Õ¹òDÞW.K»s?¹Ë%¸¦elźë@ûÇ»{ÊÉ»¼i]Û×wºxEp¼D»Ñ¾ÂâѾª²Ëñ¾þà»nÛ¤öÙá¿*²D®-j(vç:£©Á¼ +:üG<%=Ã.ØâûÉÃìÏÛEd8æÈãðÑûxE{öt¥ÅRö=Z«.ÆRtyJ,\jG.*·rsù[ÇJrîØçûØWi^ô#Gêη¼èºÄsîν[Èv¡£zXç7u;ÈN_²úI£^ ù?7çZñÍk,{_ÄfÜ,d×Zd~çÜ7¤ +ÍÎp\¼¢ÿè° @|û MñÏX°-ðJû¡©¼fW 2Oå§ÍizÝ7ûRÚ=?mÝ2"}GÑ]J]Orý2b=W¶Ôæ#Õ÷{Ó%EÖy'Ó§×ÑÓ#§×k×çØtC-صµ-Ù " B Ï@!i U˾"Ê6,E:1Ì-"`£cì-Â`@d$l't(B ô Üà@/¾ �Â~Ò àÝÞ£bñݾ Þà@`ßßàb ÀÒ`Ãà^ á~ �Fnù=¤ Å=¬aâÄ+BCÛî+ÔyÜÖýÈ@P + +ÕÚ`Ä>rFĤ, +Ü%Eè¢äeÝ"ïß �À@$ h*ÀR rûí~Ú.}ê)´H ¢¥åb ç¢Ã¼¾¯ë>¦bf PÀÂéÞ¡ê^úM#ë]Ð-ârÇì¢íÕíÜ"àéîe:'Þïå^¡ï!.ì%_- è¢r + ¤ ÖÀQéóñ¢êd>'è~½ëâÞ.]Î!bíòàÑíjvyîí}Î ÿ¥÷µú Çú^/ Z~?Ëü?¡üâá¿ôÏîß÷ð1>l +`h(b3"#!Ç- &ã ¤p(2Fâ¤j(7 +Fr) ¢?! +K¥BT^F@ `PÖ7â( Äo£!Þ4(¦ÃÊsF#A®·]+c)Ã^6ÙkÆHÄP.ÈmÊñ¢i6Jqü];G"áÈÈ@3 à [°s0ªýÁGá¥;Çd2B¦[0 +!_ASt~ÇÃáã,}üiÇÙÝPÛ¥¡åJ(PA8 èi7¼Îr0M¦qRT5p«JIR#ȧ#1Æeç!_¼d7ë^+ÛX¿±d§mDz,LÊL»3[:ÀÌ\ÒAm<ÔµiÀÄ6 ðd 7AqaÊ&߸."6Ë+ ã`ê6¾AÂñ¡ ÌL¢!áÛ¶Ñhl ÌC¥|näÃpÊ<+2þ +endstream +endobj +4 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F4 6 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +11 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +12 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +14 0 obj +<< +/Length 5799 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4d0PAÄÆcq°¸j61trmEJ)HÏ)af9iPï- +gAHÐPa7'# C&ÏEhÈf4J¨ ä\9EbµjÀh8FDqÅXq*JQQRh +ÄlÜ9"LfSh¦(1NPÈäkQ©Á°0PÖñÙêðV:= âh²6X³9¼îC±æ Úð(m$Dôbë î Õý¶|h.ft;î0¸gÉÉ"\]w!ãìz̾¤kÝÛñÇ=þCñ÷:~~¿«KÕáìÑÑã·Ùô÷ ý_0?M«úÿ¬.#nж¨âÂàÀíl°«k,öÂâ ³«ôçºÂƼ®c°ÁðûDm¤L¾Ð¬éáªHÄAª¬ÙFN[¬Ï´bqC@Ã2+±ütûµqôs3îüq»p˾Ö3èìiÀ.ÛôúÃê³{/>/J!µË`Lò«s·sD'N0ë'4ïxjã¸ó»óý"PìíBNûÇÆq«é)̰:ÊÔ%$äIÏÕKQòE%Òô£"нp½&Ì õG².<ÁD½#Ö*ÈïÔU9[£Ñ«ÅT;é4%>SÖQ9²64ìÚSÈìÏ¡Å7KlÌ7Lv´TÛ»ðHpÝÃå{QÙÝqT8{¹[2O3?$UD×Õ¯D$ÇÞ7²K+VÙÐhAÊ*̼±EüÔa SLÕ4,RÈQzÂäÛ÷Õúý]vÛÓãßi4AÅÎêeNEåÎe5µMÇ^Kìäõ%<ãâCáèL²ybÙTNhn«]Ãß§¹ÎÃp #üÔÚ¦µjî<ǧD ¬ì°RKkOú;wZûîjp«ÒÐÈ:ò]Ívã¨IÉk¥Ëõ?££îFO¡Cîþ#çÑ^44\(_±Paõepl÷íOÏËy¬µ¿¬7Ö[xÔYÆÒÝmÄèìo±ñÞnh°wóìm檷.ù/ßiv\bãøxßìxW´5ÎnÃíÞàÉ83góPú!ÜßÍWáópÝòyªóSz/Aç:§¤]+rEmÁ-@¹Zqú§% )²~1DM&i067oy¸ÖøiÚñôGǹ¯(£þB1kdq/µ5º|+NÇ Á×ffI#ýZÈ&G\³Zm)5&¼ÆØÝE QA3gRÖJãP,3¬×Ë ÚIea#¬õ[`L_6lV}9-(ÈzÂaêi`.6jÕâÃeáÀ¸öÅlrwL¦72¬ÄK$cÌÂDÀà¿©ÔµIvÃëðRZF@×ó&ˤȢN0È$ãzN såݨêIBñBhÐ]î3[$ROòü«/$ÀÍ4ª¦§æì^$άäÁ9¦{Ì,WPr +l¡ru&ËåG-æb1>îdÂJZ4Êd,åòzVN礧Ý,éj«?O&8¼'\_*Ъµ^ãè+/I^MÊÊ% 0rª¡iÌBµ^<è'jÑ jJ´~,VdÒo e 1BæAU;Ùk9¥ÑÑQøà¯,.½z¼:fâIôîm1ÙuQÌø¨ðB)©YR d£¦Õ²ºOûªé-%K +F%¥CbrõèS¤ +&%¥s^Ò 2)Õn|3BKyQëµl¨gJ´W +\I)Ç¥´n²Tvdçç%%XÑÉת@GÆÅKÄcS¨ý2&îMI\åÔ>dõ #\8 Ä Û)7i;Ö!¨û[wlmzÉ£-}È·êÎ6µ».}Ñ··&L2B'uîÍ¼ÖøÚkºÚíº[¼7Jòf8´Ó9½wnéÒy +úÉó¼w&2ó~.Ár¸÷Òößj/Õä´×õIÜ6·nLm!.Ï_Vf¹låÅÀWBñ`¤ùI»¹Øní_¼-B"À6·^ËM ãö*¸D2ÜS>ñ¦Æ®8û.G1.S½Q?Kå0íÉÇe#b»up%¦&IE¾+ó1sb_8ôîã´½Q.VÉØ`\¦$¾È&úætËsP̶/J¼'²~A¹9Õ'\¼ÊUv\Ï!EêqþyÍCKÍsÕ¿Iþô*Lñv¨&çKi ôÓHIzwêlÞu&XÊ'M£ ó +Õ1êý=¦dIÖÚ@Mýwª³³}ª_éVW!¨41û^.ÍB6~·Øû:=m§µ¶ÖØËdHE×¼:ûéM¸aèÜÙ_cl Q·çÛvÀnKºöîùoëÍöZNþ`øp礩*àÛ·noôÁÂôV¸Wj|®Dǯ8ñà±_D[Ñ-8é3|lír.ù¼¦Ã:¾vç;\¿^qäÆé5ål¹ñ»Wʵ7jÖó éÐQ èºñA5CQÒúÒGÍR?(ÞÂ:k»êØæ}OW¼½ț./:ä+k´tÈÖ_aí)%vÛ¬³m>Ú±þó8&ómpËJ<oǧ'áxQñJ}øÒòÃÞ ´B2oòAvÁXü·Äëi0'ÿLt)§©ò9Î÷iæõl¡ÌÿH̼÷ë¿{»Ñì¼åõøé-ü=?Ìpô>_åéÏKÞÇÁ8#Üü¯a¨þ¿ªìi¿à·¹ñ.§¶t;}v¿>ý?F ~Ï%W> +cúóCÊÜ ïú3,&÷Ï.aõÐêfHËÿæ£kOøðPâË+N¢LþÌçÆ¸f2Ê+i-Ü.ðo#2mï@L¬þhèzÐ<ÁFðû&»oif»o;Hzb0pÈP`#¦#gAg+A(zTPx·ðk#§ ë ÅY +/Æ;Fʯ˯I ÇÁNýTÌ0¿ðêd®>Ð PÞ �ÜQro÷FñðQ¥² D9 +Ño5ñüq"qÐüï± PÇïÆL(q>P0ðü12ïÑ"±OèË1 õs)µâAðIqïÀ5¹Í1kqÕYDâêkPà°ðÝñÿQ°øÃ �;è×ñÜï±â:,1-?¨p\±ËgÓHx}1høwr÷±ÞÅÿÒìs!/²°[ñ[!ò*\r!HõR Ú±²(5#a = 1õ²G! L%N-±»$^¯æÿQ$ÂÅ 0r²/!¬£'£ÝR[^gq �ø Ä2e(¯ñ+mÁ|C ¯1û*ó+2Êò²»*¯ÈoCo*ò%2ÐeÒ*'g,ãRr2ò8B»/22m,Oø~81lå"RÆó ]2úÓ1Ì3o·-¬X# ~W42p-ò1S*q5ÌE!R|³,ÕÒÅÌDêh72qèï31Ó4s"Âr©4ó8Ó2cT6±7H«9ÓD#T$Ó¦&ÓY%Ó°4w#.Õ<R<%ÆÆSî!SzÊ+9;?4ËJcf"rFUésÊÈsó>Rc61³?ð¡=ìç>#R.SpÇ(EArAAB83ï´B²;í>}fæ,ÓÇT2ÔA Ô<='D1kDtSDÅcD»ôY$´´OCQ3®PL´\rÔattÿyCQ/C\M´58Tça.,sITaÓú¼´JsW9tlbÄkteIÆíEÈFAloKK~ÆçLÀÒñZ3tÆøôªH)ömOF«MÃÒl´¾oËEÅmK³K@MòüÊ4ðmQ¯LÔNt»ÎuK¯áHq[PÕ7"ÁSÚ@¯Kç¥KkNËËS´óEUíïTgTÈYuÓèv?2U\@1RÔEUO;ÕUµyTãVu_õ7KuBQVH3YT]Y3çV,\mãþ`S«T>Cõ?Zi%Nõ&5»Y§EÆø µZuÌܵmQÈI.Û£çCu~CÒ´¿Oè+]æYÒ§Cé`®øð#½=T_i\5KIÕg_hGVt]_òÙZL¢¶inï©Ícp[\¶'/ßbÔ©dUòvt\P@lt¾hgeva0Îv5e¯ ]öY5×c4_g;J(og¹\´JöC¶'¶^vPÕJ=25g¶mgï×T¤ vqR¶jÁUãjëkV¦#i°õ]VÌöåV¶I6[BìsmVãVÞ?æ>ÊÆv¶|£¸$Çj"Ì>OÓp.Åo·\w o=,?qvÝpÂ8;6ôîïÅkeª; EjwóÈIs#sÍ5t/rCqr¢»s£þ,z×T=-ê!7]t7VÍ÷gt¤Þ7'vñ3kwkd.ûZÂ8åÛwú7©këKxWK7FèFë±Oy»n× nñqWõ#'x·{z÷¹N´fäN´Ù V·D+·÷·}t×yðHu|jE~s·Õ +w§|§z׿9tËx7ýlv}#ÿÖѦ@>Q {×Ðøj̦ï~7;5VÆa7hõ#å$·ûÒK4øniupJ©lcWX´ødô϶[87A®W£Ó1!DÄnsØnux tã8u}~XyAXø¥uÝâd#O¦o¥zÄÌEWúA&ûxs¸¾o°å}«Ê@(GOÑv¥ã!8ëa·ôs|xÕ[6½ ;&ûHXä#y_ìAxû^VÓ¶Iù!÷Wøúõ¸CmÙ.F6§->p&·ðÂxóÇpÑOëËNx÷ÙH-¶ø¢ä3zùbG8ïÙxÕï¢ÂÆ÷&ØÛ +ùÖ£ç(¹ +ÀÂeY·¬ËäqùÄwkM¹DÅË>M·.w¹Ô5- ÷Ùåy²ª'J<fã-Ïù:ÉëcrPÇ:¢:h¹ #-@ùYÞÊ&®C)¥Äp³I颩7úS㤧:¦8ãZ8dm¯0¸÷YG§ti0×z@§:6xÉɹ§Zcµ¢.Ϻf« }©ä¿¢.@¥3eRoº¬w5¢Z´£ù½¬ë½nZÃvs¨×Ñ£$>KY%¦Òq9g§öq9o£d2ZrÛ¹°±§Ù˯ àtFÎzúª[¤`q6½§[7íJq9±³óm cE¨:°âݵ%»¬zûcµ·³ +«W''E+»OmÛpùñÚæR°N6¶ù¸$BÂ{w®j1¹mñ¹&,ìn2Õ¹òDÞW.K»s?¹Ë%¸¦elźë@ûÇ»{ÊÉ»¼i]Û×wºxEp¼D»Ñ¾ÂâѾª²Ëñ¾þà»nÛ¤öÙá¿*²D®-j(vç:£©Á¼ +:üG<%=Ã.ØâûÉÃìÏÛEd8æÈãðÑûxE{öt¥ÅRö=Z«.ÆRtyJ,\jG.*·rsù[ÇJrîØçûØWi^ô#Gêη¼èºÄsîν[Èv¡£zXç7u;ÈN_²úI£^ ù?7çZñÍk,{_ÄfÜ,d×Zd~çÜ7¤ +ÍÎp\¼¢ÿè° @|û MñÏX°-ðJû¡©¼fW 2Oå§ÍizÝ7ûRÚ=?mÝ2"}GÑ]J]Orý2b=W¶Ôæ#Õ÷{Ó%EÖy'Ó§×ÑÓ#§×k×çØtC-صµ-Ù " B Ï@!i U˾"Ê6,E:1Ì-"`£cì-Â`@d$l't(B ô Üà@/¾ �Â~Ò àÝÞ£bñݾ Þà@`ßßàb ÀÒ`Ãà^ á~ �Fnù=¤ Å=¬aâÄ+BCÛî+ÔyÜÖýÈ@P + +ÕÚ`Ä>rFĤ, +Ü%Eè¢äeÝ"ïß �À@$ h*ÀR rûí~Ú.}ê)´H ¢¥åb ç¢Ã¼¾¯ë>¦bf PÀÂéÞ¡ê^úM#ë]Ð-ârÇì¢íÕíÜ"àéîe:'Þïå^¡ï!.ì%_- è¢r + ¤ ÖÀQéóñ¢êd>'è~½ëâÞ.]Î!bíòàÑíjvyîí}Î ÿ¥÷µú Çú^/ Z~?Ëü?¡üâá¿ôÏîß÷ð1>l +`h(b3"#!Ç- &ã ¤p(2Fâ¤j(7 +Fr) ¢?! +K¥BT^F@ `PÖ7â( Äo£!Þ4(¦ÃÊsF#A®·]+c)Ã^6ÙkÆHÄP.ÈmÊñ¢i6ÎáðùØÖ8§áCqÛKaÊT<©P +äÁ\- ¥hQCËåÆqhÀf-ÎÆ#ae4RT5AÈ¥H8Ëp.0Bá®f4At 9`æaVßs» áx>Èòù¼ðQl +Ó p]¿ú q·H_h5ê 8ÅLN> ÃHÆ0HÞ7ä7ãÂ6£HÜ3¶-ð®"H¨²hèè2C0Â1¡ xî6M£ÂÜ8mØbήâ¸è¶æNs¡£ZéÛáÇ.ÓÇàR +endstream +endobj +15 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F4 6 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +17 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +18 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +20 0 obj +<< +/Length 4235 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4b1RCq¸¸f2 ÆCapäm6Á"¥C¨@gDFr¡-DF8YÞ[F)R- A¤æt7"éPH!PÈ æK'ÅkÒa �nmrÆ³Ùø ¨h2%I\@S:MÆC ÈÈ §"1ÔÜc:Mæã °@s8Lf1¤ÆaÌæÄó0étÇ#yÏXtQé"¹§o;÷4Uº¥NfQ7p÷g ¡äa6wÆ~+|t2Æ]ÝwFGØb0̦J¥Z]HG²$ºjÿ'ÀRÕ£ÂÌÎàÒ6¹(Ú2ÌKR78BãÚ˨Èí¶-jÛ²L[V×¼#¸Ä,xÄ2ìÍO:þÀã{:Õµ£º;{"Ð4M# ² ô+|À½Sê«B T®iÚ» ^Ú Ð|"È:#¸ÐÓ ÐR* JÀ¡(Z¹ÂÜ +êðº!øÌÑ5+Sr@ÎÉ\°å9 áGCHèð:2<|á>70#¸Ò63ÑX@8*,HÄ602;:ÏApl½ QñÃ\Ø0l+ılhÈLóJ5ͪàüP©äNJu<Ëí{@X3z!b¢Ó«ý,DÀñ<NèÔP1°{^Ú£8ÐÕ´.Å1sê ï(æùHÃxAÀÆ:C Ü^ ê:`êùA8ù¸Mó$×Ac(Ø<²ÆÍ×ýiÐÓ Jbý+p +Z°ØXË#6þ@61C8ê0ìÄßCpHYÍT3Ãß »£ÈÌÞÏDöB«E¯[fX¿&¹nkO ¸Rz+Ë\ÙDJÔÙ=õAgØ{`]·dOËö Ñ2ºb!ºùlØÌ¨uõK³õÅã]¡u£á¨ëW¾sgòUÓ?ÔCÉ5¶0öhÚF¼Ýéj|8öUµE^ç³{N¾Ök.Õ(Êvª»dü' SÍûÁrï8Ö±LËG5M{Q¢²Ô %uú=xÈA¶Ü:9sͰ#zÖ¥ªZ¸Zt"ëªMr PZÿL*©@ÐlFÖªv'D¤¸"ðHûÇn¡ tÁ@tå. Á`Zû¿°½ÀðÊ×@$æÊ+1ìIl®õrc5t&87eB·j sª¨1ºÀÅÚ)EuÐ"´ZÊWÄTü2FLˬ.l #7BðtI$Ò©Ãdϸw1³>EFuN¹ÙC|ð6ªõ" 8¡Å°ÓضOd0±¸ö;ÃØuRc4æy²(ÖΣÝüT"¡k'ô\àhTe@ Ð ÜI-¾ZiÃagç4̲ôdl!³%ë 83^üܹè;ëèöÐÂ|2Æ`è#tÀºCiÙµó&ïÁ 4#Ͳ·è^ä¹MÍ �æ¤'oòUE80hÊKìt[¡v_ÙKÂE9ÊÏ*Ú«u¢O(ìËØq¢eáÌÆ±úd¢-CÌ<ôM³ PjDÛX-åÜ fá¤Ô,ÊÕ¼B:KIÛìp3dJbâq¡¥*÷ÎkJ!qC# /¦ Á¬¨¥#$g`Q%£#ÁÔªc8I )U&Â@£³Âf{_¡ç±$³µ'ÐK½wéHG%¦ë,ÙJH¤}Ù\h(i¸_i0Ñ÷¿×Á«:+ѵ§µ/ÐÊLؤ^ü¢>Zf¿ ýSª³Ög"$ ³¦GHÓÖ²¡ §ÁÄÈÐ7´Q Þe2úz1±êé^dC4amJ¥QXÏ <:0Ó(ãýlkð¼7Ñ!¦qè.º2ú©{]3Ӭẽ¼Û`!eÌ06ró6CÐ)ØAÆ*câZܨ´90Cz$a´R8Öx©x@º+B±_éi§åÈÆvcã"KÑ4øig"NqeÔ +y¾Äªðshmir%0ÁÊÈpÀ7ªà²èKÌ.ÚµÞÕ5¶kçÍI[ÙÔ&´Y§âlI»m-ÄõöØÝȦNû³7fTËÚÉìR¹»\;Ú`nC¹dÖ£&iUC`ªlÀ°Vfʨì0¼ÎyÂ1¾UaçEplR×ë*Èð5 �¢ .B1SL<íUJL80w¾ß ï ítjõæ¾ÕØÈ0´8C¨l3(6ÒkÊÑZ_)áæïåSÝõCÀ¯¹8y8NZ¥Cg»Æ""o¸ÅÜ; &ñmÅéI¹§9X iÆùLGrÐÚs34nÏojêµúÙqlgY#/XuXpð×tnØÔèEÎ÷WkÌ^vÿqâ´$ÚµÏÇ'6gØnß´}41³]+Ìa¶ÚÆÀãöá$v4ºSî s<3g<AÌ ¡Ï¹è2ÝÈtWûÂi¨Bð¦½,tÛ}$¶åÅ`¢éߨÜÖ·Hr7´^ u¬·â½ýúþfþ}·hèe/LWZUûxuãMÇÊVËÍZ^5ùRwÚ¶º¿¹^`_X.w¸kùS¯?<¿ øÿ úÖ%êõ½XàeU<'ÏöJ.À¨Èrj¹î-ÚQAùCE"(˦øFÃ~7ópê«þJæïxTëÁÚÏÅ©'ï ¥ûÄ,{ïHxn¤Lʲ,VÃzyCãN8¢îñ§xHÄD¨ñgÈòUI¬´7n²g¯à£Z½$kïxï(7ÎzåFüî êk$j`pNõ¥H¼Ä&ÎNh1ëÌI@ú)`B<ÑÊàL.5¤^î´¤@@7¤|:)Ȱ0äþ®_o#ôg'OJË(´ãj¼V/TOZóJ÷ºõ«Ìé>¬Ã×P 2ÆÏmÏ +×éè«pÔ!JPÄÐb&X" l&6&0ò4'Î(àn±7zIÞo`b"l¿ � ÄÓijQ\ +¾öɳÏTJÚ@Zöîpgï ¬ÖñãveÀäd»Ä#â_s ème%©òÈ �HÖ Æ0}qÂrp±X6xSàéã¢ç±Ã¸ê@3do¥c Mdk¤Ë²3Ö)ÃßiNñ0S)ÎiÎË^ó°<iãHäìþwϺ¿Â"0j/°Nm0<B ÷ÑøNn)D64q©NM®ÇØ}È>)fd6Ì ñ¢Oç¶_m¢ÚqÄép9g;$(£·ò§¨%&2 +':¼Í ÚC«f.Àò#j·«£IÅ F6±î:&éLVou$/(+NbÎ0ï02()LÎɪõ#l¸Nä¤^¼ÑÅd/ ¯åê®n4ÃTLD 2p2*îA`ÒCæ°äà«§qêbÞß^õP/T +pøÇõP5PÒ· xÏDópÓúöPG",w+Ja°>?S +¦ax æhÃÂ`RÎ>0\§OI Þ;èFp¯SUhö¡å³d`°>ëd¿9&® á< M/kaóvH:îþ=<5ó>ÍÄî&N¶(»>¨>íªÄRGêÞ´`CÎ +£2,sÏ,³wд c ÀÓP1í¯)ðè8¶3é;ãÑ<#ÐkÌ<*FkóɱCê@eò¤'q$/¬½pûSlÏTj;wBDL ]pÒ8C¬¹ê</ 1åÈ4@×BsÄÊ)?gJ/9ê <Ä(×ã)î»äSHÈ döCm*< ×9¯B4mKÊ´[Ã6Rs Åó.5 >ÀðØÇÂu&`zðÔ)çäà¹ïè%>Íå4H¯/Jºæàa5K$ÏÕVï^°ãsdìÔr~Ul4&1c0ge@c (ÒÇ=F-? ¶®åâ×¼z»V/b:83.Ê/ÈÈÒN/ 6Ï`vFÎ䦿 ÷]5î7- ÂZ&Ö#±JéÌM ,Dæð+6BÚb¥ QZÆ=a+dÞâs#ÂOé+TÈ~ N¼¶*6.ÅXC§¥$«0HçhdV2K,É«êýe¢`@è\cfvkfäÞEmëàcgH$W[Xè½Vpcþí �«'¢¢äD4öLÅ!?ÕJ òB¼NnÞÄÑS4¶îtµV®`cUiqàPüeLÒIíUoäùÕC8©|_ÅVs¤1/ ÖÃ\VÈ̼VÓmj ¨Îfó¾Ç-*&ýI: "¡kr>q*ïC Éîãujr]¢ºÂbðxZ1ÀïòZE¯p n2Â`Ë2å³>·d`©ø¢·di×hÓCÀ3éR<¤e@ÑR5AO½*dòvÄöNõWSmUmE·mUuÍHSMÏ5uXd9`Efzìv]¬¢@äap¬håbHæz7D4cåwJ~q'ï0< @ öþDnölW¨})õ¦Ò«Tk䪥jú-Ìß$üWɤâõi6YPÆ ^ìæ«6ÏI²amÅFg �I$¿JH5FQ´)j<5ø¬:´¨6UñDÄeOþ'V|ø*"^øÈì®ø^Ôz7xµ÷Úå®wîÚ#Àr!\Æ1"Óç}(8Ü"Î`p,QvxØ>têsµCCAõòÓ(úl¢[4P+tF +[#9\Õ@UÖ,ìKÈTéÖü3dè«pË6´ß¤Æ<"H6±ö c«(µ:£Uçm·T ^ æg;°ä6¬±`CÎ +F_SÊ=øÔcÀ ` +endstream +endobj +21 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +/F9 22 0 R +/F11 23 0 R +>> +>> +endobj +25 0 obj +<< +/Length 961 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4r.Æ"è@Üd8bECl(T9Ix ´`.!ECB2à ±AØl7Îb1¼ä :¢ +Èi7Äq@u7Siõ¼ÍW9NBÚT@s<ÎSh´Èe3Tµcæo:waeêc4Tèf¼Üs¾'CiáCF#9í#ZU9Ì\ ËåS¶¡EäñIt¨Jd¤#m1ÍARñØi °ëo¡ôÀÂr¦Ë-ZÃshÇA@àuîU*×§¸o8X'CN= * (xÀe¿í·p½Öðl¸ ØP)+XÚ)ãÎ7 ëSO"ä¡£pÂ1:K*¦8cõ½£s@ÉA@ÞË@äÖµékè>ád¶[ô& ø +QÁpkØ1©xÞêx@2Ú¹) +RÎ:=jZ½ 1Ðì>ö0Ëëã+jÚ¶(ÃÊ®öCÃÔA.©æ5»£r91²äDñJcÇ8£2 ÁKâØ£a¸pÆÑãú{ +( "¸@ ÃðÇ5ÄBë;a ¨2¯ +ÍRNÊõÜD1)sêæAHj60Q1(ÃfD«xìé½ áÄL½@Ý6ÜgÒ^ÉÑxK4Õ8ÏÒ+µ41s5n7U/uV¸ÊXÄ:#`èª8äÒ¯uÐÑ^,UÚjÒ£zìAå´av®:26ìNÛ¶ºê;³k]®;±l62ÏYtHÓ2ÜC@µ×¨6á q ß,<ââ¸êZßã;9BWê<cHÛØ.¼âµC4ô¥Â/[$¹°J·¥nà4Cî Ì2®cõ8m~7aYÄZgm¼t&ÉÂFà§Ì.ú\Á²j¸¼æ¢`*[®£²Ã:µ_.8s<ØÜ¾O§V7²½¶?%uc(èÍ´>gvæÜæ7i]Àp TpÜGoÝÕlNsU<u<ÆÂÃ:¨1cJ|4ÍU2âé3Ôåqapj$w78¨àµªÓt4"bh +r¢«ÓØ2¥ð«Ôu-a3%sF^ÃjÀ(àÄj T +¤ +endstream +endobj +26 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +>> +>> +endobj +28 0 obj +<< +/Length 711 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" aãA +*àѸ`0ðBØ Z 4e FBá¸ÈgEËF£xYY7Le3¨ ¨a1¢y@c7[ÌRT5LÆCÊR ç5àTÔ`4®X°³l<.v +MÆã)à@A¢E£j!Lêp8óCqAÈéÎL¹¤ÜdÑt|ÐÄh(»¨= ]Ûw¢6hj(:z|Ø¢0ltêã42 ;®" ¢ÔÆã1vx(Ée2Ä,ÐæFæ +¦ãC½Ójf»`Þ¶klë7AxÙ7Î ºÊj¼@r£©( ¨+ï+Ã%ìsÎô²¡Hp¢j(@"#  +c ä:¹c¨ä2®ÎòÄÁn®$Ì#£TÞ/ #+ÇII°h¦LZo1ì&ÊÆlÌÖµí_ �ο)Èè£Í/I\ºÐü¢¨Ð«ÄòPrZ®Å&bÃ0½£¦´f +0¡KÝk84îä7K8 Ãxè ³5pqwU4°Z!°cÍ®ìBDjûC+ìjÈÈS/TÍÏ g4?ðDØÛÇP<·µ¡ OÒlª*Ô©,,6ÑKÍuªª¼H]öt¹hÌ\ÆËó3I7Î!DîÅã_=È6\·v*òLK&Ðö(n»ÞÁn'|¼*¥ùx©ºSeCSÙl9ÁKn7#ò +Cæ¹A 2=Ò¨ +endstream +endobj +29 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +33 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +34 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +36 0 obj +<< +/Length 1486 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4b2"0Èp4 ÆÂ¸Äi6Á"EC@gHPÇ%C iÞ[E#AA¸Üe èºT%L¢áÌ Z2 !B$ÜPS:óPtE +SO +æqÞw³Ðb¤f. ®1AÔÜc¯ &óuÎIF7ql[wFêΧ/N78Èh3 + æc9lóà ƿtj ³Ã~vz)ÃÁ ÑT29¦FâQ. CA Kº3`P ¨h2Æóa²ßl3³²i9&ïQ°àhòpF3 °@lôó7°jʶ9(ȵ-pîô®èPÌ¿l9 ÁH¨57è!¢¡³ºÈP/¼9¨S<¯R7ëZÚ·|rÖ ¡Ã ä20(4hÂÖ· R$ÅÑúª±)`7¬Âq5$ +³¡ánC¨Ò6Þ6¢ !,î0pºÈRðË#É2X¶2"Ü) ¨:2ÔNîÅ(×0A¨a o¨Ø&c83Àªëä«äë"Îãê9ØÉ>³üAªÑ@Þ8£u $'£Àè$ ãxÖ"nÓÒAHÈkWBDÑE³EÑõlîÆÐP 9 ì �T@Ue6íL¿QÖØ+¶½³0!ò½¿;\W#sÍÔw3C¸:Ý7bSÒ(Æ4LýØã¨ä9«5fJÒÂC8T }[AT(Bá¢ð8aCå4¾bβ8ÄÙiC,ªÂÈ2#¤×~a´èìcX6ó(é¥VVØq9çÃ(4¾£xÏ]¹G¢èâ3: +C.9qhp´¹uR5µê$À£lâãn·½°;Ã=MTUWfUF:Z«~Û? ³ý»j"ÃSú¶°³å;kû >Oà ¡;öhÜpçÈA<R:XeH#DÎ2r#¸l ¢Þ¶,hlnzïKÂõc[²qb»lí»xå¸Î!§.4W±dÔïSYVÀôLñuzg¢vpÓ%@½[ͫšÌ;ü|XÚsÉe@Üú[øA¹*6(ëÉïlïÄ9[Ã+åD;Ò¸´ñª}èÍÏ!æ}i-ö´"fKY! Ð`9&PÌA7,LÉ"%ÄQDQklƺNèiÌ)udëÉ1ªá]/Àj©øV!Ñ 4º¬SV±$İÒâhnpè$t iZá;/ÆhYJli>Pd`+])Å6hàf¡9 á¿¢V+f,ͳxÂùäknÞ6Á¯, ò. PÍ ÑëNrJÇ`sÜHbA¢ªHÛe +¥jÆr $þäñ©sÍAºÃk¡$!ÆÙ.¥ä5ÏuN¤$ðeôÀaÂKxßCËÆe~X¸l±¥¦ºÞCpuðLÍKÂÛ<'Z1i5¦Ö¨°)m@Á9- 4 ¬ÊùPy0®PÊL´ÕMAÀ<Ƕ6ÇTÜÉtjû$¿DIÍ=a2¸üÁ.`¶Íª6itÝEÀÞ,5ئ`b¢Ô !PÎ[ eÐeà¼jgBc793¢ÓèiõBojQÃs«yȲÕ^\1°+6âX:Ì' à!ÊÔg8o/ÁÒ<³@ÞÍ#jOÒ¢ `Ë\Æ ä3IØB)D +endstream +endobj +37 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +>> +>> +endobj +39 0 obj +<< +/Length 1389 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- +F +Å*UÌloÌÃÄW3g#)èe(ÍM¬Îo7æáH´k\ +ÂÌc4L§3ÎeºÄc")¸êm'FSÐæP9ÌtzL¬Z1NáÂI`O¬v[=¤àu8`±×Q¸Üp5½÷³2øtºFC!ÈÇ6æ çr +* +«óMMÉf2²KÐZ9 /$MÖó|s:ÍæÓ¼o<mÃÎ7Êær³tFj´©¨Õ:ë;´Ê»¢HÜ2 +#*ºÎò7ph¦2Û¼N3ì6æ5ãL7îkø?ÀRQºÍc²7°\î.pjíÌ*9BðË*õ=sá6Ñì?Äb¼ý9Ñc¤êµnÀ¦µ # 9£ÐºK7·"=¯xð"¾+³æú¹,OÊ.§FSÉ1. g2BÐ÷68-0s?ÃóÔP˳/Û;;4J«=;Ðhp +(x(8!há1ê0¼ë§Â Ê1£8:{ïÓ´ðä0â35.ÕÌûL5MWVÇ1] &ÉİÖC4)(XÁ¨`/Uøî$k>pðæ1#gE±}¨2Ã(åK.m4óøo6C¨0T,ÞÆ\÷HË" ¢4jÊ7Ù)Ú-+OZ¢5~6kÖM÷` +(ñ]¸A°jÜMØ:8Ø4vHÚnª$ ãx×l-¨dÆ {Ä3áp1ÆU¢¨à2;í_)ÝÙµà&H4 #`Él6Á6 ò!èOn #¥/Qñn#I5ázcTÐk¸ãÅápÞ: #0ÓtqZTÖäØ:VC·2£~[©ºw|2³5ÛB§Áó+$¬ý¾ÌZHè# ÈÈ#k£g9«sã(!Ãu47pPȦ1³: ÿØÈîÞ:WìÁn³ºõA,÷í£x~(ËKôeäu»÷/³õ=Ä2ĸSÉjÞW ß{6Ý0³UàcqwméÞ&Þh6xoÌ4ªÀÞ×#//ì:*ÈùÞªï=e³°ÔÛLY~fiR5ò +rCO¡ 4¬þÑ0<¡Üµ'ÐÞ Ü2zgx, C +&d¬pÝ ëo^$´¯AÇ1ím®µöúLáCá6Ep÷ÛUÄ<¾4 Ñäb ±¯74ÀDFÆ ÆºàËVrÒ!®×[i0fÑ|¨ÚjNÞÒ̽ëGAòAúÕ]ò-Ì9¨L]zXA¹ÙßJâ¨o#¨íC:jP°ä¡¡ùfÁ0²ÅÚ" Ñ/$L-bkR_ÀôÔbWfØ21׳ñhСڹ¨SeS6³øMváó.°íÓLbàeØmMM!þíèhaí»³Uc:ÓTñÉÇ£_t¯ÇÎ1s³ +æé ð83Ì`UÓ¡ïµ®±H¦Üÿ¢ÑDÐZ5/¦ÐefI5ãDÜÈÇnp d·°e¦ø1+ðäS¨E `( +endstream +endobj +40 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +42 0 obj +<< +/Length 1456 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(b° @-J¨$=21J¥Lb1HüÀ\8BäÀ©´àa\Ï cÊM7¦Ã(¤[0Æ"9èC7M¤S±Üt&Nf»°âr4¾_fSÉ8Âm2§¥&+»§dI¬Þs$§öËq@äo1MÇ3¡ÜcºG1¸×#ÀJ{S¦æ`5wù3ÏÃÅÏSEAT®ÓªµÛL¥#)ÌÞu9n.ÃÀÐa¿!ø-¸r¼æi:Mæìhàj3ß1GB â½£ê8:(#¨µ/¯ãü4°¢¸Ò7xî»áÀd½S:=¯{âù£Ä(ÄÄȺ©N²4ÉÔ§ðH9+ü)9ï4(ä»Ìr÷½#Ö: +S»ß¬0ëºn«±GÐéCñü2Q +ìÁË!$CL8¨4³²`MR¤¬!ÐÖÄCX80Ï{æ9ËzÊÓÆpBý-»ç:ho9S`äïHk¼¥:NÃpê$¸£k �N!hr¨´µ1ÎKÃñÊÕ "%LÒ¬ÍE:OÚ0HéBVAl7â 9o³}^SÔXÏË6"rFýOìÃfù>hlJpM3SQ qN®åöabÕqªýsÙMv^»jbxå~ÓA9^cÂ3ÛñtµY[ ôÊðÛkðîb Þ8AÐ$Æ8^)cè9-Ì7ߨà =®.2Ï(Ú£(ì4·h/Ìíâã-qÀØÝÌï¸ÿ<m=ª49 Î!1C(ª7>Êä¬C»34ýT\89£Ñb m#äÂM¦JQ$ìÚÌXΫqJ8 ͼo[åè°d¨Ø3y¸Ù`×!g¶Ê¼D2ðyëÑfóü°Ï_ µÈsÖÄëæ2ñ5pÕøÂ¶ÙdîT·j^\¿`Ù3²q¶J²è$6Ã"éÓIúý\J-×vÓ99&!¿E]¸«¸{ôñß" Ñhò+;ãèÞcxÄÇGÎbg5ÆÁöðÐïߣö<kÁ¶EöaB yG/5?°è+Ú6}ÀØ Õ¡ÝTÒoá"C¿SdÑTw¡Uv9 بL>mõw«²üâSxtzåܬ*pfà Drá× 7`ÜÑh\© 6Bj´AËØ7ä÷ÜW3h3¤ÐÅâF+ÞÄæÙdpÝÆÃxaW Õè@gjBqåS£ßsÂCmmæ$oÍ`e +pÄñEH[ øu ©4ŨI(ã#äGxAÀ1÷~$Aµ1zB ¦M¢¿;xð »Üª á5%åüJ$ÁrÖ[ÆÀä²àù7 Ñwtlt[Ît"büÑÈn¦ZK`ä$/ëýq¸èÉ;&¤ï áÜ7&D(\4ß6fÔÛYs"¡cÞ7ó Ã;µ ¦îX4Pï?rj^è$%¿&ãB´nsX¤ÌÌXt+ì1ÊåÀæÇk47¢$¡#'0t2aÉ´èCJ<iªÒè(E0ëìîÆÌÝcì³I*b HÔs'ÈdkFú@êq9ôÈàTkÔÈ8àÚTU%`Ú²{Ò (ðCbX¤ +endstream +endobj +43 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +45 0 obj +<< +/Length 1439 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- #a@Z). PH4e b:æ67 æáÀâK5&0¹ *|G2 +óaäi6 ¦ó!R-HÆ"AШe<ÆØZ1Fá°Þb0ÆÃ çH¥JðâéÑ{|´F~èy! '¼Âr2´¦Ó Òî3Æö ÙÈËv¤ÒÁEAV~û¢4¶¦]¼Íp2MÛahÜd1äÚJ¬o:øîóïÈßH'Cy´0®2éº RP²¬íFíàäï<èÑÃ:î«¡xõÀ#¤2k`ê:4rî°nÆ¿`0à Ù:N¢À$ ã2pæâ¸pÃcxà+1Þ;¾i9dz5³¬P{¿¼O"`¡«x*#·sÈR£"& +B¨2ñlè °' Þ;²øË B²ðó>ËLÑ5A¢Ï8¡°pû9sê'¨ç=Àsô˲Sæ2+x+£ç¾aÈÎC`7Ä0ó,ϰ- ¶$$Ú²$QF°Ó< (è"°2rÆ>îd> ®1íyTÃOÕ£HõVcàâHÔµWgöåi°6¤NúÖ¢ÍW· &! ãÄ¢¹}¡i ãÅ26 +£s¿O²\"x Tá i /¶vyá#=ì¼k±Ïm¿?Wî60³7Â;«|fÿÀ1<È¢/²d(0áSZãÂ<Ñl-æ +Çfè¦1ÁëÖâLa¥¡x!Ê:ó¥iîy|·ë`ÙqB¬4kònÂ;ÚvÌ Jët¹ÕµRBR¸1 C,Û{ï æÁ'ï¹;sðH4Á® ·qÒ1Øß®3½#§&;ÊЪîöCÄ32Ã_ºªÒ)£<:öõM°´öy,¢1]ÐÝÎ?oè¨0QI?êQÍ«#ÞÇUݾS8è;ÔòÏDñ +c,bàHlùf6: + +æc³.àÙ¿¾¡ @'ÈòÀBöx7ïÉä5|÷Y\«6@Òsi¥Wg£$ÞÓaä$$ié Õ\ïÍI« /n >DñÑ86L®IõpçÖ Å0ªØ"aFåÁk (m8 ¨ár@ Y̯\9¥Zò¡â;F©HX¨`º8Ï"ZPhE<f!ph¡4ZheýjÅõRûÃtcpII½¶cZ¤5±¼: Ы`æié½ÇÀèg¢+mdîîF©ÞÀb¡K7×äy $C+PÈíÁªpzLáy©$MÙ ¡À" ³nAfÆLʵÀbÁ´Da0CÞ]Bn(tYã®RÏ¡£ðÈõ]~ &iÍPC<f³VlÄþcYê7Ëp4ÈX¿Ør-[µSstî§hdóÄ+c¹6¦\Á4ó ëJiä°óß0èºQ7F2vM@Èç¥ +ÃJùµ ÙÐíÁ¹¤³U¦¡Yë6Ëì02½Ûµ0Kz1¦óý¯PMC\åÔÊzo¥qã-i4òP`fÒyo`F7Âø¨¨r[Âð@ÀQ +endstream +endobj +46 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +48 0 obj +<< +/Length 1391 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(¢° @-J¨$=21J¥Lb1HüÀ\8BäÀ©´âc§äÐa9My8êm2&1H´l7ÃyÂl!ͧ é}&"iÔØD4©4¹X´b.'Âeºá;ÞrÀÇ Ã'#?<2µÄãyÐÒf<X\Ý0TMfó%¦×m·§«=1µøcaØa3ò!Ó´O2IfSÉOnâÁ9=) Òl2xÆcq¯ob9£+Æì!CÐ6x7cKâã¹+#³¦o¢Ú6 #Ä7® 7ChÂ:#°Âû#Ù¡p5Ì#¸$#pɲj0P<Á¢ê3Ð{ç ,Îl,"B¦&£È!#¤XÖ,dÃ#pÒÛ!HÊ:pÀà)ïãHë*rXÒÃã82cÁ+Æ +,¶6FC[ôs Í3ÊÇHÐå +9Í æ" <:xÜ·QãXÊü¯ËbØ pÊ<L(m̳<Ù73$ΫU,#H1 T|ÀÕQG0ãcÏL2ÍF +ÃHÊ; �lü6 +cBô7PÖb:× õéhÚv¨åkÛ"(ñmÉerçÏcpêñAµî +cHõ8(póÞB¸Ó ã½±mMï% Ît¶QÌpÅËW8ª7YCÚ«Í3âX¦-|ßxÍlBvô,*#_.Õ.[,¼î?5CpíùIÉXøç¬r¿Ø×Gcxê9x``ìð6Ä£mø[ú¾'¬â(ÝÅu n°e4.±ºc$G+£4H§6QÆu#Âz«¿öp³ú& +è(2axi× =·¬Ùö¬- ìUGI ¥i# 2C¨Î)^1ZÎ9íþ o¸Ø* +Àåm×_Øl_;WµÂN7Q³oInøâ`Ò1 ¾Üs¨½ês<iQíØÇñxÚÍÒ¿ÜB D/AD=7Ö3ï"*$( ÖÓêjo÷ý ÂY`å'ÔÙ Að}ìÄ?2ú_r@OäÁSÄÃ* <`ÐÀ`äá1P,¤(ðòà aq0â!,_DAÀÕ¹àne +¢A.TjÙa82L/ÎD}Ã+!Dæ3ÇJøb@Clm çpj ++åa<vB°Ýj +¼6Îèã+p4f):(sÊKE{SzàI0~2>.÷Ô¤1"á$Ab!89öÄá⥨÷e|~¿ØÀX×2)>'àÎB10ÉCjN¤Ñ8Dc^¥Â]ÍaÖ÷æRA½}¬É[yµ2þL:h4xd2ÍGzâÐ$oÎp@¢Rüãh/è]!$ñYþÙÒoáøe`SÉì®·t¦g,hJM±6DYª ÁÚ÷:y ++K±Ý~NpÈð«}P7Ñľ(1AÒPÎeÍGp¹2ÚU+ier©¢¿5æ\V¡¢ +endstream +endobj +49 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +52 0 obj +<< +/Length 1416 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP- #a@Z). PH4e b:æ67 æáÀâK5&0¹ *|Q:NG Þr: +E³¨Èb()Ì&Ã)\Òn2ÎäSÁÓ r FãKÁèD6É'C)´n¸Òi`¨Ì]:"X'IôQhµJf\4Ês9Læ[Üf6^g#.°¨o! :ËÌ`3q¸üO*T2ái¨!PU¢±L¬³âÂd!ͦÛÒ»º9ÍÂ!Ê2®ÝõxóyÔÅ|àLf²¡¤ÚÚ3N«®Î'ÓLî¯cHô2ÛÊ.Hbܯ/KÖ¿0Êù£Ò9 £xÉ «0Pîc Â7ëãÊa nô=Cd0À°cÄ"A# ãê9ºlÜW;+$2Æ,»º3#xÝ!Èjù¿#¤3Ën4;±ÂDf2?«1&ÀQc·Ê ¬4cKîÚ8Á²Å/N¢xÄ5N±¸k?9bXÊ<Ãä2 +q! 9M\¾:A«àé.ahÂp0,O8R®À`ÒNr»7c-<Â!Àb±¬ É2k\Ø6SànÕ-eZP66Re)'¦Ð,¥WÍàÂÊXp^Æ5mk^ضq¸bŹmpÜ:×}43-UaQwPsv1ËjßT=#o"¾UßhµMóÜ+y)â-î6Ý!hr°è Æ#H쾯ò"ä7«0ÃJø! #¥½Ü¼ r²ÀæÊNÂØX¡®:f ÛZi2dÌa££]f9j9PzÕ¥Ò3:gÚÃFÑò@奸¡ªa4if8óY<ËM¨r¹uNµÉÔµÇ}Ï@;Ù÷øä!¤íûþ7nsÐìvùÁäßoÀwØlØêC"ñã[Â6-ñ¾ïÇsHñkàÎÔ-b²÷TLO`ÇC]m>!»#sPóªkKâý³çÝ â`m\|Ü2qGAÆòô®+LW·ó½`u è:·sñ>bå%xä3Æá¦ rÞóµSEñ¡SÚÌKG}¡Á÷¿æ³G{Á6ÀÅèm ì$ºÏ¨riðFrßi¼i7ÆäbQ{É-Á8àÓ¤dëÙ|1ç2òt)1ÁA`#r±¤05øzâkçv ÇÈÛ\([À&%§ø«^+" +A<('èp[è#ËÜAaÌ+ðÈØqUÄG qoQÁ".pÃ!¢D|=aI¯lΣA¯1ÐVeb$LNá;µµD ñËR0¨1&E]3µ4P[zUiðGéOm~Çx5¡²FÔByn¬·ÇõrÏùoǹ308Q0B+'3 +Ì9ÌUD«¥ü{Jؽ¸xÞÜLʺk5"¹Þ!9ÇÎd³ó+. UX3)O'1OÂE ¡9ó¬á&HÎ×ËÊaÜ80sqd:>aøü¼Ë¡a4(àÂKUS³ð½Ê'EK rîe»°ZiïH"§[ <¶7H9ÃÑsg 7i¦ý~cô;Q¡a)%@ÒÒçK0ÕR +endstream +endobj +53 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +55 0 obj +<< +/Length 1046 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶(ÇÅ#a@Z). PH4ze b:Äb8 ù¸p8 ÉSyÌÊh +̧B¡¤Úe9 +Eµa°Ìr() æóaÒl2Ü#!¸ÒU7MæâÆt¤R¥w1tì>¼ZÊÆ)Þôr:Om~Ax:tCy3aÍÇ#)Øi=Iæ#V;!I¥©\Ï1j:fó¹ýErôFzQÐ a3ànc!ÆQÚÍ'3¥Àl0Îy]e Ùí9¬æxß '÷!ÀÜb»c£h:c@64j»ãÈ0¼¢øû½n÷,oú9o¸èüîxZÁ§ ®k aÁï(®4à Þ;½»´3#¤oÇmHNð¦:PÂDZ¬{˦+6ÃLj2Ê1ë ¬5 9t;ÈÑp«@¸Â8 £xê9¢ê:[øAD°ÛËbÎ7KÐÂlLN4ȵÌÑØÅ¿m(jÀò9£Î(Ml§ðÖ%£È¦14$-/¦³ +HùH4hï.AÊu +ÞòC7Ã{ ˸®0ÅÂhÊõ; WCL+47!G<A$(P*#Ä2 ÊÑó»a¥*+®J ¹¡@¡BÌçlH¸ ôc*Þ74°hºw5Ñu.aÚ N×c|pß²UbÇDZÔ]ù3|`Ê ¨4S±âæ&3íeNSÖC¾U÷YbBö5¿-¾·.\íå#4LuñkçÐÞ5ÄA°pÔ" Þ cÒ4µì5ß (Ø8ipÎmXÛ1ÞÒ+éÍ¿^c^B8³Ê7µ¨ihãpfUXÍ©DUúfÒ;ï¸ÈþaתSToCÊ x^Ï+JåÃ\2ÂChÛ²æM`)ØÕ-w^§ª×£w#¢lV)Òü§,è;0¯Ï<´àÒ;vÌ¿±DpýæN/OÔâë`¾÷ZGñý%ÚÙã£½ÏøÞG7y~´úxî7\ë?ÏîßÈ ±wB6cCT +Ò3áÌ89æ"Õ_Eáè*u:`Bàµ$%C¾ú[û°LR¾ + v¬^<Ö6Í^z;VJÕ§ÓêZ{Mgg@ÐPLàlqp:spCxf1¡Í9&IÓ ìî4óªÂ)D +endstream +endobj +56 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +>> +>> +endobj +58 0 obj +<< +/Length 92 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ¢áÐ@7ÃÆc(Y¶ *¤â<\1B8 ´aB +x!lP-#a@Z). PB, +endstream +endobj +59 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F6 7 0 R +>> +>> +endobj +61 0 obj +<< +/Length 2682 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fâá¸È@7ÃÆqâ¡¶ *¤â<\1B8 ´`.!C¼¶("° @-J¨$q ÃACôN'T²øôvw&MÆI$Ð6$ÐTü) + Æã-Px©4¹¨Ø] ÃJyP>MÇ3©Àào9]¨¢ëE2 +p4b¹¤Üd7óTS¤cFËÄm0ÌPu7òF~.÷L³Õ/ãz>¦/{É"ô-¢³Záhe×3Zs)ÌÆr4æ²§ÐÜQ +;"Ü©¿rÛÓHÑéJ-P¢ +°6êkY_ @¨4 #@0®c*ð6@£¤Ø1s :£ @γíý3`1£CÌ;Ä-¨Â6%ÞÆ¹B Ôõ)ïj)ÀhøªñÊÆ¨xjÁh«îi¿ËBr-ûäÇ.kÂ!@7£äêqVÍ {c¶ÊSp=(HHbÜ¿L*Á'&(ZÌËcò&B0Ò6.¡jµ" ÚÑ!Àe#Q¢Ð8£u D;¨OB +c(Ê5½/ø[©Û¶Ò¢Ø7tJa'Ò¢HÜñ!m2ÐÊ0³!j"SâЦ:#'5FÇÑÚ9GR²æ ¬?8ÍP Á,KM¨éEÈ-2ä2Åe3DKf ¯]÷NÌå:NÁ·]Û +ÕpRÐ 6,u9Fê«â¬!«RÂH2ÿ= øS_±¬Ü©Ú3qjÈ!t >@°ÇAJ!Cï\μ" "Ìvñ4_kåû6ÙàViàQÆ0¦Iøb~"(1A �|¶®ZÈ¢ë,·ÄdR¨8 Ê6ê>, k#ï¦ý 'Â#Ì&ñ VôpªÒÿÈ ¸@7 Õ¦`@¬t몳øÿ¥)Z[¬O¯ðQ¶ÒøËc»pÎ$l8fn¨ £ÎîÓeÿ7ô\Óê½6®%Oÿ_>&K7g®#¨Ê9;xí[Ï6Hj}OUIªÅ ¿ÚÞº cÀ"6C»#K;h/þ£/è²áSñà·vòpÜ£rÀÙ¸]CEÅÁ ÑÉr.MÂÁÿÜËx}ã´æèÝ+Ìæ¤¤XôHÓ}lÙÙ6ÐC£ÿ^,¼0ç\%içÅ<§Là¼, ÏA×>¢ÒYYm{/l<ärÏm»÷ÈùCéuýëµàÈ!Òd@Èï?§ø ÁwnôºÀFìÞ°eÀ8¨àüî4µS#Ë{ B9Þ*þFÐÑ:Cóiyä.ÈNb Ðà&æ(rEÆF7h}4dUª2Ù0CäÓ«JO»ÓÜ.ê.WÊQã Ud¢2?¤V �ôAW!_DÎ4_ãÔìÄyȹ©,$'iÆKDv¨àüº61źJ!Ea¤=YZð¡AP#<Ê ¦Óp2oc¾yp(*¬H1LFÈbÛ:h3@Ð1¨Ë6´ÛŹÇb äòeÄz8Éÿ<çTjdÁùá8K!cÖIIDä¬) £²®µD&sT9ßÃÚ#,gÕÕn®Éº5Oì¿kª:Ub dwÓ0NPûr]6DPZ±´Ö¡7Ä¢Ï*@iªc¨¶©TèýQ![[õ>1æ �϶?^bsôfNÃ"Ó +Ðe Á6»w¶Kò¯W[7@ò"$µyq"ÝDºÁ^;ë1Å6wäÃi¤Ì²ÓXìCoMEAwò×]ª¢V2:´¨P'TµË~Ѹ[÷l'[T&&DTm ²ªÔJ¸Õ/«õÞORÊt!ä+[°]p¶µÊéà)Ýu°£¯¬L2î+uoBe ¹e:²´~´ñ²vZî¤tòóÙ«7@³ÌÏÚeAÔ3xäÑRÊ(_J:¢Ô§ó/Õz^Þg²`BM:¸0Q â3¾ÍgoÄájírûúG³8ε&£0l}l06~\¸&ªÏ%.¸Gyk[Ê 3 |ÍY³7aûm¦VaÓÏÜç]ë +-o6\lQSá¼3ÊW7©üàçÎL0JtÞzk&ù®×,ÁZ!B} +ÑÕjê[¯a3ÜPÜ´µÓÛ0<²`Ë» óQæxpÃ̧¡·5ä°Î±ßí3pÆT&jÀ ²n&®2ÂÏhi¯5¶ºßûAgÕt0-ù$eøÈÛc¡dÜØÕiÑîù¸°®a»9m)|]¸plçWl©_$Y3MÇ,©²Ö^FHz?ã« æq23.ÉÌ9ÎÌø ¸8e׿UºnÝ:tòasÔk\ó?ä¢ä#¦^Ï2·a£~g FMJ?Îä`ösQ£cµó¸ì.!Uðnâ?s9{vúøgosr^OÞ1É®eg¨j <8`ÏR7$+Ç· jAÃ3[É0³u"y¡\àáü¶*eÊFÕ¤¦½3ÒÓG`ÉÒ5Mr°Þº.(¤\sXfèa§×ê`Þl³¾#Ç<úÜ(Ö཮Oîçôþ맪ßì\?½æ\ ú>óù¾q²¡üç~k£E}ß½ï×f'âÌÐùo^Ò«ÆUo~1þýà àÈ¥¾ÔX̬rýîÊúB0ü(´ï¸ôÞìîá)ÂRf¬üoê«ôÁâ0#ÞñÍvE.S0 ñ/îñe'ï÷ �ÊØY¯2e/6ewÂn£ºGOHˬU¦\drïVK Þ]`Þ^¥ÞödÒiNÑjf2OÔÅgd +ã ÄWàÖþ,fÎR*O4bï8¨bàã +bƦܮJCµGLõdÊ^üPàÊ jñ 4÷.Gb`æ/Dý§Ú øX"`ä �B©k Ñ$P©0äg0²\JïXìL±( ïi®$tOt"IÉ|d#k¥ãñ(ä¢ +endstream +endobj +62 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +64 0 obj +<< +/Length 1571 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$; +A1±Ò)O¥Ë©Ã1´r©ÅI(*³MÌÁBÚøÂ6NS¹èº61NÆ# ÔPFñHÄPn:/ÛÑÔÜc:Mæã¦ D¤th(sO&è@Ør2 duÈ%]fMÅ3Ât2ÌfaÄl2±gBæo:f[äf4̧B9°òp4ΧCa¤ÝÄÇÑHÔx^V£MÌBi:¨â6ÅÃ*Ýv¾4°êsÁEºÜ1âÝE ÈÈ;®A¸P0¯¡CZÁ/!CÄ1Lc¡»Lº<,»6³«¨\ª$h`Ô +P"ͳpþ?ûú2#pàé " Ôí;Hï©È' +¢¬ÐÂ\´ò¤ø!Cæ¶áò» xÞ5h6²\r£Â°ìKÆ»,%2ñÓ4ͬà@!Ã×ÈÐú±'(CxÆ!¸`N >OÐ{ " `PâahÏ:á! +èiLÓò¾%FÓ³z"©HLÓul઼® È"¡0- +Ç¡³UÓF÷!iJ¼ÃÑD%´`Þþÿ ¢(×Ôª 3²³JËÔa¼Ý8YS¢Og"idêðD( P)(ÙD϶Üf±hèZ¨@¨"Z-ðýÛS[m'aº4½P® Þc{ýL¶õ-LSU-]\)ÕI[UõÍU©Á¨pÖU¦Ef%w^UüÍ`Í"Ec¡u7dH·zUy,²@P&¸Ë[V=pg7·;ÏÃGÏ4ÞÓaÄf%<<ø5+ʳ¾Kcê·r~2¸Ðò £J3î+0TÃÌvÊBT-6Ù¨fÎ4>í)Ã7Ñ£`7b ÷H§` néÍ%nÒ´½gÖÁ¤å±T9]YöHåQÛfn<öo}¯WUåÃ`qbèwY»6ÔÓÎ÷°¦åúíà HÚ4ÿ©øü= s37M×çè¾yrVì*Ãdü5úã?LÀ|M.¡`Ì!é¡öj»saÌ#ÓA» ¡î½ðèChs + ¾8U&ëYµxM »ÅlðÊr²UlÍcÅcaaYw`)¾UÆÖJçy¬.û[+ï4¥¥îöPp&´0 0Ò#Q|Uä>u Ú0NF}èDãÍ;^©$åG²^ØrA §ÀpÁ`£÷/íð±Ø@ëáo ¤u;xõ¡x + jÙAànBy²CÈk3=ylýuÅ¢ ²É¢ðZDUîß L:(à×ÒëýjJUª3¨nò_Bk �½ õ£Ü{϶2âôõã4¿1®6Çbë*²6>³9"!1N¦³XðȦÜÒ>W(pò¡ÔYÕ°¶92ôÕÁNPIE)%0T/JVCf®òQâjkmdÚÁ$¹lé"x²ÐZqöSMɦ@ênÃzõ¿¥÷«++¸Â|Tݨ20Þ)ü ÁÜJ¢9è PkMvmäÚ*GjZ(op äË+â³Ë`ÑÀ'#.ã¤a¨¬/PìßQ¦ôP*wAé=s¹:ÔQx6nA8å Ðk:Á¥ÑôÅS5PPêY7VsÔ^º@%. Ç^¦°h Ó(±-+uõd¬¥¤Lzh<{A«[µL²Ó¦ÐeäS¤löH£l¤)fÏHX*I$ájȰǨöÎø³êÍ9pÅÚ*¢ +endstream +endobj +65 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +67 0 obj +<< +/Length 2130 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C ¼i¨S)¬<k$ÑARL +Ss9À <ÔÑÞx1OäÂ(<¦ãÐÒo7Å4:,$¤ÃACV7)ãy¾=^l# &h +ÍR ôÒv0³ÁÀÚ4(ÑH§©Ù¬¬v2ÔÊr<º3 ÌÊM2 ó%¼gÝxGcy¬ÊO1·ÜV-¦k¤LÎla$*gô:2°Þc5÷çmý a®èO³®ªÐ¡«¢Þ·î2¸£(¦:5#«O:òغn¬ù¾¬"*O*^ά¢!½ÃsV¢!¨hèîHÔ+@n7Mà>Cè9 +Íøæ¿Ëxn*ëG1Ø÷»¬,8½QÜã/¸nÅH4ÃXª8K®8/ÌÁÀa·ÑÀÒ=Dá¬,6"Âú Ò2ä1ɰÜ:3PûÑ(¶"Þ8"0ä7²ÜºNP¢$b ÆäA@bÀQ´Ú<Èá8ÅPG;OK?Ð TB<ÌòËDÑu ß=Þ0NhZFq«F&Wã%HAc6§ `XζÀDÎà[9R,ë;¢ ßfÙõfQ gLKÀhÎ;ÞøÃxÓ +£8Ò9µCõ>OÒd!^0¸è! ëØÈÁCUB³´EDÝU6×£Åj»ÒûE ÑØéJ-±]ù` ý]{XtþUU¹4SÜ9 +cÐ2^#Y½c-×cTxÚ# -)+æc,n<át [ÝXÈËàà6]¡m@UZuGϱèå° â3ºHÐ<{¢!Àä~ �WÛy»íXÞ;&K7q±<ÒÎpã¥%/L2H|²ÐÑ¡Ì]D6 #xÍ<5E÷Ú7Gn5¯>u;Æ@`áÇ¥3ÅÃ(ì4y÷! D{WHiØg áö£w4¼Ù{dCÌUÝÏò(]í5§»4ø½Ö£M8FÐ2°^§VjÁþãá Ta<þðÍÑ:ÔF=&¸HÁÂÕKéÿB&Cpuhá¼9ÓR×ÁM((ðè{Ãy·[i¡j3~ÃÔlÈØ*t¹£ °é¤*@§â`{0`ÌÁ'¼ ¡²Lb%³T(Lªâ®x5-et¯°hSÏLDزrzZ`8-äiX +º á·¢¶oË´/f3+b#ñF0¦%"# .[¤ÆÎ¢l£D!rffi¹ bH +$9G"¤~é¯#Èzh°MÙ¾¨Y$*jÍâH '@1D+ F0ñô¥¹fx22%>x vf%T$?$ø(!6 éQ(Ï£+çá1LÇ.ò-è,º2ò6 ºÙ QáË0X)£eõÁ!½iFd§`ÚqF`ØTS^£sJjKÏ"§Û¨ªwK±<ÀTæàȦµYÇUfµc¬¤zuÏYî§Éö@h@Î]I +XJiuBôÊQ µÉéØ +ªtv¸Qùöbe$2Wó_~&´,ÒúLj,OxV&>Y +}µP«@fká¡:I"MÑ'Ŭµ6»è 7xJA �:ºÍlÐùc (`~QH@Z@R.½«µU§ÈYsÊÝ+²>Û©1. ¿··ÜGÂÃɹa î3Ôûsî|ºnÚ}W:E?åÜ[¤@ôHÔ>ÅB-:Ç!g½×Â~ß"£}-d$d¯yCµ·+ÞÿÖL +sa¡Éðà«*½Ð/XIÚÝ\-dk±¯/0#<nÅ â¢&<ß :£&Güa|ä%#\_¬q/9¿ÖñùãóäðptÂ.V]H÷u«¦»rÞ½¹m (A x" µvôPi8ªPõP¹£/±gͧ;*¶3kÙ¶V¹5ìÉ[#µS½PHÈáOs·WÐ+ù[gµÂ´(êñ¡x.Ðô&ÀPÍxñ îFØ(`Àʲb£SFÆWAi«%»CcrQg e´9+°ÑrÃ:ã@úm{XäG©ùâ!gb%ìÁ5:ÌD¢ erÁ7éÒ §õ¦3Öònj~µ[ÕØÌ9«8Iâ¼_\Vý 0½Ù ç)¡·©nÆÞ¤dý6kÜ«ÏiX©®³&¼´ùædBAÉM õÿpYìrrÅ·¸ó:<ìÎô^{ºY7?äû±pÌ·-µòÍr»Èúl?GðÿX¦@@ +endstream +endobj +68 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +71 0 obj +<< +/Length 2508 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢#J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`¡m|`0¤MSîz.±äh5Î#)Ìæ #NÇ©¸Æt4ÍÇ1M +#HéÐPæL.¼¾]®A,²áÅ7MÃyi9Êg Ë;Îoae6ãhpB,qÆ#ApÚ®2¯Åë£NW7Ñ Hß:<0Hû@®W3½ð<eqº ¢äa0¼¦Z'WÆ9ÌðÃ@®¤éJ¼´K2 @¾ã~àSã +/{2O¢Ë³!¨³núÿ$¤¥$¤,a@ª77k^ضm«o´A:£aª*Db1ÃHØ2Ü2HìbxRÕµ¢¨æ2P{Ǹ¨#ò9n³¾ôºn«Îð"·3)Á°r#ëÆòÌStàNH#Ø÷O!©,¬8Ë?1ܪQ,%QKF³p@Aä,KQÀ.P¬û¾L6ûðýÍ@í À\[Èr,$ÉrhSM±ÐAÑò ÅM"±§" 2ÐZ» ˵v=àKp¼äÌ.ôí8+»6ÍöãÆîN¡¸p«=VÃÍ6Ü×CÖöÂÏ �a +ý°p¤@]YGEtP#£¤gÖRD&/µ¼%M £Ã@R£Ôº¦ªhj«TF¥ªjbÓØ+;Lµ-Úð¸Ájº.Á¢ò<c£ +rÀì4¶Ëûe°3Å/âæ°c(Ý,#`¸Ú³ûç@¾Ê{,Í_°fÝROb )b¢6'aËò Ø($ìûSWª¢uå} @$XÔ`¦Ì)£v~91Cn:'a¦;) +ãÒ:£·ª¨Ú»)Câ©t¡Ê¾´ÐÁIQëBjxf +Îh» Þ7@Ê6¢°ìKÌT8®²Ìk@j¬L[ýI'Ø0¯Ò(åí¡¤Þ #vt9C¨à:EâÊ3¶þ«NKó£¼ãµêGoL_Ò] UÉ÷³¡wþ_qNye}ÿ®ôøÃTmi{BòÓÞlKù2`¤YC7g'Ýà÷C0oaËYN±(¨¤2Ê|A¿Tb`Ó"Шõ[Ö{ +á]7¤~°K-`¡é=@æÜCåشkZ:q:>Õ³ �~ò'ô î<V°½W»Ê~5AHdßYS/FÔ5m¡ zFåé +ð3D¶9£ø`¿ãÀ0dðÚDÚ=òF!kQ /^%ÜÍ¢xcj2Yõh¬ºãAUQnFÊÖüaÂ[¦ ` eÛþkÁO¯( +`dqOÞG"h*ØÐL{qô9#`ÂHP +iNHE@¼àY )(+٪૩¨&5æÌW2fs+ù8ô a$'¢l*H#º¬Á)ÒÒ]KÇòþà2\åR pLñ¡h3tngGx-lÒÚVMÆ#1Z´(xêE@úDü£¬1EÒJ#F<ò²j{D9>ålp¥ì<«F˰6à¡Ô@åj×ÏÖê)C(½^£1~\±óH¨¬¿L5¢FÚ;LÔ% yGíÿúKNÊñ¤¥$&ðÈR<Ûaóv·Lzá"d]sUÚtRgS^Ôí6AÝÉ0ÑP§£{IéõRðr5ö¿¤v].Ì öóÉVh=[}õùËëm(|`¥ÅèmåpoØhá\®¼,2>g¼ø3i, �ÑË"'ÉæHRvÀm !¸0³ Wu¾Ai×Q¬ýNHîÙ¶À[0 T8¬< pääͽ}!÷Ü;X05¹.8ª*Ò°c1±²BwqÏÑqËå×uZ¬ T¯×E"¤»ä´ÉzÝ70 :U±ïo0²]Ï;×=olê¤ÕI{p æ 3Ìú Ør¶¿Bí±ÞÂ89qÆ �ÎvGI¬â-ºñ@\T°VCN:òPð6+õ£ÝÜig^ãÞK ñä÷Òp6+&^_2êÀR»f<À·rÎ̸+G5ñ¥w\ú\IfMÈ +¯RK^& 2b|õuUP.qÆ6º"©¹ÁÓ²ëqo. ÝÙ¬ÂwÀ´ÁWÒ%o^º(¶ñ[#a/9ã ämræª{©#]®õÞ +a¤=`A²¦ZfJ&Kµòî)x?-pºÛ7jÖ@Çsfèí®+ÓÞúñëüUÄ.¼ÅÜQèYÆÀQ©`< f£ÊïT>¨¶?!°]Ö_wq¶ß{õ:ÀØ(Sgè6ü¥¦êÕ¿J$+ðíB½¬vüõ/ÃóFâXg¨ðc³,ñowºÎ[_¥Ü¬Æù ×±çÍ·®÷Û&+##í&àB¾u áÜ9ôl§§zZ!3ªøHwÒpMü0©%¨ÝÅÖ®w?w'N åÈ&$ ÎCgºYãBI¼|vØÎwÙ¹ö:½£ô0¦ÙO´ ð. áÙЮBpM¡6´@6Ø9x áÐ\-Û gp¦¾Mçv>j<nAä½<'$ù© Dý =¯uã?´^¢Ø¨nêhÎkïü¬lÎóN´Ö/:ûnÀâì>ÈØÏÜþ°`ïZ Ï^¦0Jj_¾D¸Ùmqë>$Oä~³G dÇ ÈZ ç]©ÏæêúÏþÔ +ÈLPÊÆÿbDdÂêe Åp6C©$FÀOvìGT0 ENÖ®@ójh±( +nçRîÅ'"Dµ¤¨n<B +endstream +endobj +72 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +74 0 obj +<< +/Length 2474 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡A'¦Æ±¼ n2$À¡¼i$*MBÚèÀa`§$HÐPn7E3ãÀ)¢Q¬cpÚ<-G#ÅB$¸`3ÌðØx]¦rD0"ðn(: +F×,(13ÂܹÈÊs¼Q`ÑÜ\5`0P¼-r^3Áا$1pÆx2HÅLУNc9gãò}9BÛq¿oÔÞ ÒJT4EM{$ k£nÊ0¥X¥APÐi97-ÔÈã¹#N&9ëB:´Ã\R#)([¼¯hñ*Ì6¡á«Ð¯ÊÀ÷+Ët7ã|À£.!'ÀP$¹o¨ Ê<(¬=!pdÁlCjÓ¨+ +q7²¬^¦1³*Ë#pRËîk.ÔFÎR|Ô/("6°ÛX×Ê-«ß(¬LÀò8¯øÌAPè2C8$Ø p$0!nÄÍôzÚ¬zÎÅNÝ?Ch©;¡Ý +R MSh®4 ÑQB5%L®S@AN(Ò3¥aEÔµ8ÓMÖõUYWCÈèÓ×õV÷¾58,-( ÝQV 3iÚ¶(4 4(ÙfÛµQ:Ã}XTíÇrÝH/hÅɳ¨úPt,y|Ísj ~ôL7r´)¡¢â:0 Hß/M((îBÓS_ Mò þÛ,ÊÌêû.UE +©`RøØ<,#JTÎ BPÖã¶ä R7}¼YÕi§óèë´Á �²VóaÃxä6²8ðÜýCxë?²cÉ®~d¤h¨Z¥î$å)hb@6£hËM§BÌáãXæ½V|eÒ«6y:Ó´üñ¡d{k¼×HÎ9SÂmSæ@ óÞÌ:mr4¡ ¯ZüÐÊ9 á²9?A �ØVû8ôò£¼ÒHÜ×qSÓµ]Z4r&kÌsIG9¾}XEÔö8ÑÒtÞ6ÓÕõ½cÙ¿#;LÈöô �îæ Jqª]¦+ t¯Ëkr°@W6bÖt!È0 òuí^¾Çê;ªt/ÉÙhý+øw¹þ;gq ´Uõ,j ÚrðòÁ§Æ¨m@NñÒ«uÖ !õÅU\ë];hçæAçy~¹ØBÐÚPB·u¯ð2fþ"RvðáÄ¢àpÃZu +¹D0å!ÀÎ=è0b#ׯìÈܸ8(28±¹äëÌo t8Bó Ðë(ÖgÌFøâ¥dx?©þQJFù RÜ à9ædïTðÑ?Â÷î²áûkíj-êñ£¹òÎÅçÇ!TK%ô©9'¢ÆzòV +2úPÜl¹S¯@A8$±]'²&Î 2½"æ|Á²v4R6TäÛ+ò4PZÛ#&Pùè©dé:VÂÚ ´X-9Õ«¡1N57~ï%- Í~mÆRòd³Ìs0ô¾@~³Ô²*+Þ. dµesøúÄø£I"«SSjì:¶#óI¦£§?,~-¸Ô}'|d¸¿£"~póePÍ]ëå§Ô1 +S-E Qï`4îÐW·)Lt!Áy)·óYàaPp<Âf>Ahbóq`à[û ÒʾèÇ ìbS új@,Ñ'àÙaC wJ©¾ØPÓZkUÖ>âã¸oÇè7J±Iå]u¡e7iÁbð©5PÜé/*.|µØ¥··!¾ÝÒë`þê]tïüÖ¥Õ*ëá¸ufjRãpmíUªáÍáµøÑ ë½bÈKÖ7/ïØ(¸£`lIþªN« Ì-üÔvê/»ÀĶCkt|9÷Ð}Ö[ª )ìÉà¥É=Íeü8m¸ÍHÈ.gÂ&Àºç?Ãm<®Çzwvsh²#à+ÐêÁaà?G8ÂÇ[Qyºmá÷CÌ31 ]¥tð¼Ìå4é'ðS,uSgç;ã¬ù*¦·Áß\e,ÄYǬàdWA 5#ÓʹI]jí6ù<¢¼®l.Z$ðåØÛÓØ0ËüË@êôÍOùäÓÙ® QcSºLxÿPè³1ª@Ê|OU]Ìnrg ÈTö +¡ÍÖãØ%!ôÒ1Ód#Pè#«Â¡ ã0¸ +à)Éd%½ )n019WP¨n4-{9ßÇÒ«·éùÐ)¦µBCGOåå©0¬³@6ÖÓ2åeÛ>Pá_åí¢5c<ÎJé¸61údï¤Ñ'3lÿñ°ÆëCäï9W6øH_`¡&M~v¦vÇ*kgM®H6Øh ɸ2ªòvîßÜ<ßr ͺ7Vh»¶xÑ[G¼AºMÂîë|ï¶?eÍ1¢M/:§µ]f>ÝI·28¿ î¿i@£¬@O7>éÝmºHyÏNvÔ'çîßOÄDE¨OoxoØ<Y×½^zïôÇXùù¬$ý0Ìþ[+îwVéÒUÞkÇ, ø¶C¢÷&$:&;7ZAûbȳ;ÀÞÃ- +UÛ·þo®×{4¦ænsrus<2¯vÐmèi4ÆÄWá|=ý²¯Îmÿâ¹m0E8ñ Éøå\ÄE4øÆ&Fh¡än`ÄzC¿ +@ �800$^8 �>¢"³ +PÀ°/06 +E[ ` +endstream +endobj +75 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +77 0 obj +<< +/Length 2139 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4N¥BT C ÑØ\1B £zxÔo"KF +LÌ("Éå" Äc)OFQؤ¨jSÃxÕb(9 ç#¥ÆW4m¾TV2¥zñz¾_SIÐtÂÜXUvïb²_à ¸ÊsÌáñ ¡»2ÏØì¶r¤èC7MÙvh[#¹])5ùô@B$ ¤ÆE$H$B)KR +ÆÆO³. éà �Ï7ÅÃ/ìd4 lsÈÒ8HÞ7*ÉH²$t"Öél¡pl÷=mj¶½êø¨4¡z£ÊB>É +$<×Ä!Cå9p¤è:N ¥ÁTV;árÆ`ö#*ºjøDÁÊð:C¨Æ:£J½!@ÇÒ7aÆ3/chà �£Ê7NÚÌÛMCO2 �!L +¢)afù®Ð¨®Íb+ã Ò6Ïã2MÔ +:!½¨hà#hü@â±<'(Ø2Ô ÚvêÛö9¿¯üÙ@Ë6IÒTj³+]cÖjPªAs$³²XQÄµÖ ã0@ÁËl4[Êr $ñ\Æ1Ñ»æ¹î¦êÛr½"È÷ ^µÕú|9Ê´±-LÃrÌ<=ayVPZûÃMzä/u¬Ç,ì4`¶ìp\XUÏÒ<£`@;°,Ùw^éBãlÖ;Z*ocä´Ìg~.ë;&ʲùn=oéWò1×Fkç!Iª/·mßT Â8h±Eéi7 Ǧd×-®1´m+O«Vµ§Iuõ6»ëÃpê6C(åÔã}SÅ #M2Õ<K:â×Qδð2 ÈXÐ4Ì£°Â6·Jô:$Ü6ãó2ñ7cM¶Þyr¿RÁvIº½Þ ¯¶³pÝå½Þk~ +¹ÀðqiÃqW/·l¨êÜ̵EU´,Ú2#ÑÆñù¯%°s\Ý£Ë×:3Lq/ÉókùÀØîrHÉ!µÇÍ3¨D ¶ÞA +p7 !æ´õÌñM¹¹XÌp#t¡ClÉAÆ h2°QL°Ç¹ÊÄOéÈ67ì_ÃrÀ5 >áÁÔq.-³=àäSH1\ö^s-еèê\d =ãî ³w6°eäBV·º<å^ +ñKéy7.µ×»fY(1G°qÕS Ð|¦BT£N5Ǹ¯¬éÝI;`Ìùrcê=hN´5\q@ÈÐPIØ1 Po|ÁÈ7ª¡\i»LRd7uÞß´3?ÆÃ¸¦;è/rq"ÓÉ"¹Ã.é1,7B_+çfÏúb´Á. KAÁ-?#vüغn +^¬6 7Q"@3µÞ¡ -´fÄS*sð-w¹iÚÛl!¢C¸<YxOÁ4¿ÑZøåöa²Í&<É˽7Í`A>áÛàôzãe¡Ò 3ªZ #tN.Åò{ºÒØ¢¹ e QtÇ*©©5¢\ª#µÞÁ(q À42[³8òB)ßms^l¿ÖÃF'ëCmi2Î9Ëç@b£ÁfU 4%[Jàe u=Ð ®F&iøj0(£LA±àkö À<0LíDµ¸ÓÃ:q0+45wί*°ÓFí+¡Ö*uÓÊ,ë«B%¯¥ñóÑÚ?fópHÖØÀAGb«4¨H ×S[uNmå;´RßÙú)Kº¢fÜSv¨õV.¿«Î]ÁL®ó@¹Á9VÕù8nV+k +«¼´5þ]k-ë\ᵺêå]jÏw«ÝÀ#Tç\¬õ°vËzé$Õ±¶=ÅÙ&°ãÝW&Ù²û.´5°Z[OJmTâ³Ö·ÄiѹjyÂçqu¹¦öíôÝ«¹O®@ºLÜ:[pÙõư×}®k{n}ï¾8F¼+í)ÚK' ´AÈ8\Wü/EúÃ=r!¹ûeüDªêuihBùá:ô¯.Y¡ÙÅQãKJÐOYîìíÛ¢º9 ±Ëâ¾*¤çM]ÃG`çhî!¾vÁâªd$F¢:éíÍGÄùàf}ÁúrÐ90Z(f Ð8¤þCuBGuÂ$&\ÐP6!úß\Âôj¿ÉÏ !8#ø÷¸ãܬ $Òñ#dm0pSÏQZÀùkó+A6Xà ä¯ô¸O)¿ÛrppPð¬Þ'k$^zHÙ"$êJmúSö �¤_j! r RÖzàÅqÙ¦Sô8lE+Ò@ϺÐEÝA<´N÷Èë÷îw»©f ´PÉê½Ê\Úx `EêTPÜ8ðæÁ]:ᢠ+endstream +endobj +78 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +80 0 obj +<< +/Length 3005 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C Ñà]M Fôñ¨ÞD9P}%Bi C'¤q; PAÆ^4^n·xü<ixÌÒ9-fÿ]NHx1pÊx6EC)ÌÆr4y¸SC¢ÁHÒJL4^uÎ8 uÃÁRL +KÆ"¤Ð(*¢ÏEH éXÑÀæòT¬n7UÍízÅd³Z-VËw£òaÑÁQÑo·#J´Úq?9GSÐêráó§C ¤Ü9ðÌ7ChÂͳ¡ ã¨é Ê; #Ê¿Ðà2ÐÝCHé< �½ZnßHÛlãþÐÙÈ;"ò8å �\ï8ï +é¡¢I¤ 㢷*Òß'"(Ø2Çðúx°!&ʲìÌÏ4 \jö*êðÄ6cH20å2 Í#Ä*o+ó«-ÛàK´ äLë´oMÑ.´:û®²¬ëH$¢"U-R®ÁdçÇ5kàù>³ñ(CïèÜÿòÜ» B´1°Ý©ËÑI@E"××^ÆõHQÏ2; ýHÓ*Lj3.Á¢5TÎ ÕXß]!Ê0 ç]LÍ53ÓÃ8ܱҼà¸cä9#Íþ?Ö`@2ÄN'|Ì*èܪeà³/7á .!A²««Ò¯æú¾ìé°Ý3dTÆ4JA*ÊòÍ2ÜAôj¨]RüHI0[/ëïøÒ3Ûü:£8Ë)êp~<áÃ#(ñ©oc~Ç"¾ïÄ>6dOÀÂ6 #ÖÃ#ð¯&Ê:oÃ*TìçË· �Ò9@#há?t-ÑPØèSæ8b®uO`)xÆEQN)aþsÁ¢#aÈdiTüä:oZ:õá �ÿs÷AÙB\< @ÑÅ;¶Èøfoçá,@EÄѺmjýä*¦2°sðeH(8(Ð:Bnðø Fô +I )ܳ¨ÙthÇ4ó0F0éÙË +{L5)´5. Q± +|« ó²DërX3®A¬§êߺâ<¤¼®xº+úÜá;4º`óPn5ôj" 0 ÃbU !Ù¤óôï¢ù?aÉ(·èïÄbÊã@pÃpu ®ÅÞ÷riqy¾Dàd@%ÿg&]«ýT/z e kIU/YOªó²¬¢¶Wù3ÙNÑÊä:¾V,&±ZÜ@°fÆZSSá1$Dêz{ÊìÓ> õ´D©Ý<¯p@eÃÑÅ ¬à! Hùo(ÊLèokqñ ¤í@Ø ®põMÔ8a/eí°èúbCì^Gî'@îâ¤2°¶p8¹Ç(#,çKn(N´»;c3R (<#é#¦Sò8T¼'º]TÀ1èú¢LM~¡ú$è¤á^r´×?FÁ lÀRJL]Á´ºS(Î3ÏhÄ©`dU¤½aήËIªDØïPÖû_$KRQ%P&øfG-ZY¿²~¢Ñ©Ò¨ëªIZªU`Û"ªÈ2ÖA®ÐeââæD|f4Öm2l{¸>ãZh tˤÕ<Ú×MSô%öÀhÚ[Ãa 5¬àªd_¶¨¼cjz ÓÊuЩrìAx%hê0\¬NÙm ö°ÓHkY¨0zê¨ÜbVOXÕÄÛÐmGèõͶDýüðL12$AÙ,ÀòÆÄÚ³üdDñsð¡@QL.Ä~Å{Ñ\Õi(Gl%m&¸K ê«ÂøDÈ{» ðjIQ~#ÆØÃ]+àÁI>5ÀÌVpfF@'ÊM?ðæÁj¹'Í?X%Æ +úBÌ?¼` Yu5ÅàÈSoZ±cVp'¤K¾vµVáI"3¶zÏÚ +d\Åç@jlÈöG9f* fsi#3$à4¨³bNE·K'ëÇ1Ú/EÛãP]Á �wOy#`ÇFB|ÃËï ."ûÊEòþa5¦¼Tãî°±Aå ¡'s/Ϫ[!ïæÀ@Ó$V¹®Ø¬-«x¥sKÁµG)$\e),#;ª·;{l ÝÐq¥³ �åÓRj,cÁq¦6$§l TaôNI#7ZTþeÁHH¸Ð©YQ!×ϳø,ÇÒæÖG1.½<»enVé@¡/#FÏõÉò/{ÉËMXAc×¼/²Y^° ´àB¨]Âd<1*%@P ¼¸IÄ)uv$ ¯M-áºÛ}6ÍúªÙ½ï~È*Ä¥ÍÊiÛDÆÓ³n"ÄOi÷¨4gxãÅ#¶^Z×¹zo÷ªÞ§ÌŦS+êåã³IØæû9K9§Ì0´Öê"mçN\hqkC©90µúÄ �uf*Öâ£Ä}Ù|ö¡m{¥¯6Rü®ú`W>wS¹)£ÝåÓP}òâüö;GyóÀQ{ÒïunÝÞ/$¨² +ß~0kT«µÂkk:wÀKèTfÊhÀd¬Ú·)nFè+o0CæúoïòpE)&'ügrG(rİs4 sçB ÈôµmÒt¨, Kxvdqgloê²vvw§~GxdÈ©ËÛ´åo4`zO<¶¬ñíäaËÈ#b:¼ë ïÆÁ +p¡GÜ~agîK'òq +¤ +8cäIÀæF>l(÷æë)è(È2üÈ8(@d¨lHRÈV¨[ .\ªÈ)àhfnú½Iû +ÚôçÀ#q +Âk*êêî@Ü~:øBìøPø Q �îÆ©èÌdÈÔÜàHèùD ? GàsjòT èþ@/©¯¤¯ªæ¢«vK§2´ýTóðô,ÖôdW1(ºÏRõoõÉëp« +çR{@Ø@ªJÀÉ +c½©°½*dé¸ +2¨ðâß2ÔäÓ* XG,&jGü²Ë0)JX¥ä¡ ì 3¤zöP<K«¥ñËq ξi %.ÉÒV`ÒÀè°þ"îþT I¶ð$>¢½È@JÄ,±®º`T¨`nf½lI'tøM±þij()» ©Ð ëhN#hí°ï"¼2#Ä �?$ñægð&¦Qp¢±ÎLâ6í+m»OŰ¾¡Ê §Êþ¨2Ê)Îõ,Éw-Ë£× +X§9.jÀ_I`ræQ*øû1ù +±é0Êo1BKFÌL ` +endstream +endobj +81 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +83 0 obj +<< +/Length 2126 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$G +A£¸i +ÅèÞDLÁB)¸èr4Nbá$Ì :¢±ØuµNbéh7ËE¨@D$[Ì 6OiÔÚ 7ÙÆCXAÞl7°Æã%öÖ)*¨¤hí" +ÆÆc^M$eJÐ Äm4òùE#Qázqn¤]« FÆ#E`'ÚNG# æèh7MܵxÂi7F2 +í~Ãc²Ùí6»m¾ãsºÝÎÒùë¿àpxQű¬{"Ï«|)jrµÎz\) «,Ì3Oë8Ï;Ò¸h j#©;¶ d6ÍÃu +7Fá) Ph§ D¬Åë¦êºî˶KXÂ9cHÎ7¬ëö®Î' +¢`CH49(Ø`"ì²KlK°p)Òà¨ÁÒÜÔ'ã§o¨h ä7Èh¤2ÉØb+º1¬AJ¢H³Z¢@r¦émJÒ)"ZØÂ1@$h( "p'("¢ø)â¢*ÕpÐcKÉK)ápdÍtÜÞÏ!pk:`IØfT Ë6 TÖ bUUX)QJ /Ërê'rL3q2¾±¥56Ù188ØÊ'¢ò7 ãÞÑhu2Ò¸p©"á²_wÄj:#@.øê1¾CÏOÔ5KSÕ5]ZpÐe_ê´¹´Ü!y ®'B$4cHô2pШG +Ø'Â>n+#"ÓÅÀVSº£CH2ÈÃ@é¦7úz·æ¹¸ 62@ç® öl¶ª! #£t:«ÛF 9ùemÍÈÞ644ãví¯f;noçbK3çöñµ¶F¢æâÀ 269 «°Ê9pûÀQËêH³Íó¼ÿB:t}.¡½qZ¨6Bªê2v[Ï*ï{mÜqÃ2:lºÜ4äèÎTåo(Ú¡9icöîD)n×EÌËWLÈa¼ÐX7 yذøe{Ï"Ä1¬éÂ × £!0íÀÒê +L)WÈ S6i±~ +¡~J¦þ¥ MhT9È@÷®Ç0OhÀÓ¦0j»¾+FÀUÅCÕCºò ° ÁX<¬Ü:à Ë@ .3J)ql2º\+ ~Iɱ[l§pݤ¨ÓR´4å4BFÊÉ D=¨(m<«8bü߬B,¼ hU ÓA6ÌáXG !R@È¥ÙCZ/ɤä1Ò¼%*g2WA´ÃòÑo*ÙNiM �]c¢6.Ðd^yN)ª ³ªÒPhïúUJÉz k¤<9À@ÚIiÍV*áÍü²vÊÙ=8Þ¿ÍY¬vµ:Ñðªxéç=aájk%ÝÏÈ@ ¹)TJÎDPÕ[eQ2 +Q,± 7䥲3 86FÌ!ý8?$9¿pÜdÐ 1-DH"\anI¡Ì줹Õ.iÈ$@æáQWÓºÐc0 +Ûon-̯QOKë3/ôÎÚoN\+÷áÔì:uN'ása00Ñ £í<§Å¬´ÔtZÌ"I/)@×a,5<r¯8äÞ0¦i0µ 3×6è& Æ´êÔÜÍm¥&C"9sF)àæ^bHf²ÅÌüóc©¥6tuáCÓÃiÚiK#eTÙø;/¦0 +§ëI-ée"L!.S +í}l¸#2>LiÑ·rH¯#Ú¬jÅZH¬Ãì^å;]¶¡ÿF8'ã"WÓäNµRÑ´¦).ß i~Ïáý"ù¹g5¸7b 3Y2Èµ× +ì2{QR+X¼x �qbÄ!L:bdAÊ^JðPò,ÂØz/=£Óú5àKå²S\þLs$"¦Aº uÓe°à y, -7@e»è §³ïE¬ÝÏ'⿹$PØc 7 +ÉeñpÑwÇÇZÓì_¬NPÊG§:|ða´1[ÏeÂ\ÿ<´wÐeú¿M¢Ë ÑÒÌ2Ó;¤õúTµé|NôÐe«å.e/V.ºÄ£Eºg5ýn4|eK3áæ³-y».¾à³Ì#ä×ÎVM°>Ã@[?.tID÷\ãçDÕ»²jvCÀap@¾h³=¨AF¨©lM];j0 �Ô¯\Lyf¨ÄÚi®"ð¢ï¶5UÄÕ'Dk]a£ny~Ý¡Ê}i9mÛKÃ}£eÊðrÎD/ZknA=´úÕ¼·EhÍeÌe7#rlÁ"`yl?6×D´sìѤêøE `( +endstream +endobj +84 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +86 0 obj +<< +/Length 2357 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AhÄaI£qpÄi2*%à *h +'áÐd(*±¬ Æo6ÎB¤èm0Â)Æh ')°@i7«¥ÚðpÃÄ#)Ã(s2S%Ðò)¢QTápàh3¡j£Uh(¯9ìÞÜd2c °ëkÄ ø¬aBä÷ÐÂb6odkra6:"Ì9e PB ª(3NG3¦ÓÅÚî·{ÎF(x»vO*˳#£$7Ë[ ÚÒð<O#̪z¸¯<ïKÖöÀì(@4,øåº£à2cKÒÎ6Îø@9°c òÃxê91n³49! ¼ñçº1°éÑòÒ4ÍBáÃP¬ÈI ¨¯§!Æ¢xÊÐÆBðd3ú/HZÔÊ>Ãs79Î×¹¬cæÇÉ + (4íKVÖ¦;±ÃÊ>CË6É1Tþú#ä0Ç1I #,<Æ +B8 6® AáCxßOn«gÁ5Z)Hl z)¤ +Ã]¥á´Ø®¢Þì²ñd [ÊJ]*r!ms`óÁlPóÇNòßfTVs:³ë T\Fù1ϨҼî@$½£ÂÄK\ Gdb6.#»3Õh§^Q%!Ër,ö_om^ßaÕ¡\Zjd$ªMPh[2(°³zß§°fÆ9 #è4Ùôh¡8ë_Cá¯,aÖ*å/Ô¢xA°hW 4²Sµóe²×+9@¨©]+dº,'"gé²qªib"¬Iê4ê³íqë·tQt`ñPä:Ák¢7ñ«2··ìø¼=³ãA°´j|£Ca(QK £Ï%®u¤Æ7£:ä» hAtTAf£%X\eW ABÞ7EfûõÕG M®Åâ}ÛÄoÛÁößrÄ7Ä×|±Êö§:V·Ì[iºj³ï®Y»ÜYÂoÜÌð¬7ñ!\jªgJ)§*Ñ»VsN &Ç<`Ti0fÑ·JéÌ[ªuI×»fÿ¶{áÝ16°ÍߣÀzHÈÍ×ûÉG!Ð;8j#÷pÕéÂ5Zö Ê¢{hý[³Ò®Õè0Wæ©`¶UW9ç.¡L4 ÊW¢ñ\EªFVÃDzɵ¢È¬^b`%¬Ü7âg\Á0Tݲ·¾Ë¡kÁÈá¢dT¼Ã +õ2,%ÊÆÊøÛ@(kK±¼®QÂ3åL-eÈÓdbX©\صP°(sÈ&S6Òñ}k°°jPc[¡¡Ó¤s1.Õ EÂ1È2Fáßè �¸ +ª´sðD6ÊeK£kÕX&Õ÷!\õÕ®pÍħ ¦ àãfÃJ_Ù~À@ãûóÄÌ +&<¾S0é1¸®¤¤JrbCɹÕBÌ FÊYO*h<^±WKµ,bF0Þàç.åéxò`ü¨¨)¥ó.f 4`ÎjÊy±6áºp@iÄk¹kuªtMgk;ëÁÉ7øó=§Áj²~L`b( ^¦îDXº%dd40ت飴 ´Ñ©k ÁÔ6¯Òæð4uªVz\EdGé@ªZßxb.ä$ƹ¸oåùü ÕÐU¯]LRµ¾¸ÊæÏØ3IËc£5alÛa¼ýS9]j={ 6&2e8XlObļ ç_{¯°Eà$c\¸p@¾®³ùP¬Éj¨¥T¾<±b¹=ü1Dfiuµu!Ú_x$Iu}«)áÚxFâmî¸WPËl¤B<D´¨Lbt²`¢Ê¢«±JÌeêvuÆ?ÖM¤®U.^»Uk E®¿è:óÛlÝq·;øJ{oà5Ý¡±Bøç¥öWWã_¬lq ×bmÜq#Âk¶¥¯".õVqæ0PòDܪý/îvH=§ð3©°à&a@êÐ:j¥"=FM"KôÍ]Ø DÌÑ.'Á[ÙlYF¬ö´.ç×7åV;³¶¯A6kyò +ÈqÛâup×Úê»XrIbÜ^å1Æckèf±ÑÊ:7<È"f´Ýy(gðîzÒMRNÇ×Ãêðé¬lÃXÉêòÊÚÃqùç?7àÊkyª¥#§«qSÓ6^qU(×þ¦nn½úØÜݸ`Mì¦RyÑ 6Icðm TómYàÖ& 6/¸ùºå4§!;NQ~Âõ w+pó´ ¨BP !8#ý~ p55º1¡°ÊMÁsÓ9¯0óìe6ÁÝÉà¿0Îtr äZïn½înÁà§%ëb6Alä»^hy!¢uP.ÀÎÏà%/öB¨:P6®´º:O°ZòS{Èx5,Òhusϵ.ÎÛ9*Äà*ÌÏlIÀÑ7<m hÃXºHÑëúë0ZÝÊ×1qmÅG ¢ çàÎt-åªdµ´§.ª~jÅï|Òívà=H¶Z\îcìC|E/ÈÓ ;rÓË/2{|Üýº6zèÇv<;þ¶>oI DÑ&Ý`ÒL¥ÀPù '¬«ýøø»hRÚå©ífÜy¢"Ö° ` +endstream +endobj +87 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +90 0 obj +<< +/Length 2964 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢J¨$; +A28N Æäcq ©%%ÃIRf +ÅÃiØÊ¸8Å#AA O)Hdòa<¤)¡QCØÀiÀ_+u´rþ7«µÕøg2Úlbáh4Ï&ãyÀæi9Þ(pèKkUA �Ñ»_')ÊfÎ#©è :Lä;uÂåt»b¡ª #ÆÆñ¨Yh0¤n {±@l)ðø§B¤ôeõ:Õd\5U»Õpï h®'<Ã@î7|2Oª +S¾ðÀ"D#s0ÃàùB´º¤"Á �£`é>p¹®±4PC`à!®7xä9ƾÛÀ/ÊÃc$D +¤ ¯<á$ÊÑÛ2ª$ @.-"&B%ÇðÌ7 xÞ5Lé@`A7Î4P¯.Ëâm.KÓ4Jál×&Drà)Î8 +(Ú8JC Ê'#l?Ak°í;£÷MÍ¡@ú9zã.ÓC¿0 +rú¿l(p¿¡h1m£/6¬,d˨P"Eãä4 Ò7Íô$jB5(AvµMF$u¦ÙË¬Ü +@Ë*¨ÈJu£oÃM[Isk¿é²ÀW®u»¯*(tàh pÅAËV5Ä,YÈ^8/S:C(@1ÜHÓ Í# ³5Æ79DÍaÞóåÃòáTÎBvúz|©aFf4ÜCØ÷eÚ dÜßÁ¼´È6ÄìëùÚ6Ü2¡èúbû!Â[áY42 :ÐÞ3è£xðC#7ÅC(ég¦Ã¡A>!È£^7íw A¾oÜ �æ`2¿ª¸ú»I»·Íp¦"ôupÜ:'a[ví¿pç{sèû¿g|öÁCÑ=çS) PocÉ;ö_ºN¸ î®Ö Ô0»ªía9Òæ×ñ/§z¾º"¿ýûæå.&VËY«<hÊ©Ó ³Z¬¸6¤paf|3æC4 Tì¬õÜÈÛêydÜ:%L]ÛE7é>7úzÙc.4 ñú0G® ÁÁ%¤4((nå2tP¯Íó¦~ÔÑýSø3T:¸#¨|®ª¶ò¢K{È%ý&´´P2APX9DÇXõÁcñAÚ«ºòtoñ6îÌà oìõÈ&i¢CmM±9Äç.Ð"@È +©nÚ«l`¬8g°Î;¨ +à.8OùÅÀg `¢ Ðì DÒÌe |sFñ7ÄvÊ¢P)ÏV'»Gö®AUìîIúú° Ìs&Ûºfqð °ä¢¡t¥ ÑÉI@ÙÎEF. �tÎi +ð! ð¦[¸H©rd¥'á¹ÇfsíÔº·ªL,öKæ3¢4¢æëF(=M¬Sݨ Ã9Kè"AGàiÂIºì%ÁÿâOÊ E (ñÏí'Ñ¥Íê2A*(6d¯æ FîgÍí +¹hnèÎ3A Ò9¿¸ñ9BC¢ :H0§þºêq < +æÈB'qq`ÒÙÓUÐLåY%ìXs±³$hfËC9 ULµÃ3óîÃJ®p!¡ÊfSR¹e§4PìÑ5¥ l78 gáäM!ôJ!¢ë2ÓW&¢û$Ã,Á©åìÕÇó^©Êt®j?¸éöÌÑÉwpp¢«¤±I\Ð$¸BGTI8yäŨrë±Â9F)îM ÀhC(mÍæº*ô£Ì9Ô'drSöÃC${|3ì2&jN(c n]ݯmp£}õä*ePuµìñÉï.kÌu}ÖÞÿÅÈ=^UÏÊå*UNªUZ¿ÌYê.·®×¥º"KÞ¬XÛvcÏ Úw1©HaÏq°ÀÎ˰.¿We!ê¯ áL3hnrÆ×ól!~PBL¡P"Ð ||µXOJs'Iª7ιß<ç¼ûôE g¬9£A05Àïר ÌÚ©RUÍæ-äS¯G0tï»3Êi$óADd±Ý1·Öfã:üí3Ö|ÏÚA]0Ð*á½½pq]hK¿wi\µW +eÆFãhZfg36t`ìgQ®²£dg_ÂÅÑÅØú7eiù¤ô¨EÒ÷j 4Ö¢³èZjG¨Zâ)=dø»`S¤ËCoezR6°¿¶a_ÐÜäw³¸&ÓÜ2RiÍ:)§p.8}á|*",`Üê|³28NÜÈdÔ9§FÁ·<®ûÞü +¼©l2®Jæ,9g6ÆZܺÀcé¼Crò_9[«jÅTd](°²{æuL¾ÆëêG?}È¢ôbï;DMÀTNª¢=q»úßDÔ * MÞScîb/ÅÜ·ì ª=ãï[ª?þ !´²®VâZõãEê¤Èìq2ÈÏutN1@Ö!n-U»s;®=¹=UdÆ÷/âÏ2Õ"Ä\bð.³oå_®z}gag&\̬8áÏàÖ1nt5URsXñesáâ|ÕgxfÊ#m]¬µ³Þ$AÖn}¹^H¨n¬Læç.s)ý) pkª ö äøJÚïvÚXÐɬømÆâïïÄdÛǰùíhú&bÃÉl/°lÇgè\ÿʾtÊÉàZYèâÊnî¾äFI ¤àN +t*úÏÆ¯¢ X|?ÍR ÍXö +Þj:ÉP2Dmjn\ËÎ`éÚ§¬ëOG Íâ¿-¶Ì¯xè¨Ã\Û0² ( ê(Zêg - ëD|jëªccüíHõ\ùiOr ALë¸ckº¼ +ð{p¸óëp $¤Ã ¯ÇÐeÈ,Ód^ûd¥'.û0S`ñ>tn: Ñ2âBØ$äPüç l>êìn h¨pàÖ*¬¹k¼ö¬öäFéèfäïOèü ò°Z8Æç,l0,4î,lîe1@`¼ +$óJö}Ä|L`è0¢ÈïR}Åú°Í1RÞfoø¨LÓ`ä&Âj sn5LG 0gàæ7Æ Ìhè] HP3ãt ày`P³ æZ +L´0é`P° +Ȱ* ÀÆÇ1&Ìýoòåé,¦P¾æÂªJæÁÐðìo:¯?~1è (¬ºnáã´Òa'Þ d¨§éoâ2Ú äãhAfp ÆF/h#02Ú ãînM$mø°Ñ¿ +endstream +endobj +91 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +93 0 obj +<< +/Length 2733 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* B¡AhÄn.è"ÚxÄj7 %ÃÎg9ÌRT5QÈÒJT4OFb¬Ð(*§3(Íc²S¡äm4¯¦yÜ@t½fóa¼å7M¦óvÒaÊÄ#yà@i9éÍÆ¦|Øi=Lá@vÐo¦Ó©Ìé£2Ùí ¨4\1R«Ws Ìæi3âó~<ѨMSiÝ¿1LÙkîBû¾9LgC©ÊûØ8so3§WÌ áZ0«ld!ʼ9a@Æ ëàÊ2ÂàP./Ê +µ¡(ZÜ.ºü:ÏXÒÎ6Ë´)`ãÀJbã¹0È[«Rì7ct ã3¬ì;Nã¼ßc:ðÇTp˳otq>ïØÊìKDÉÍô߯ÓR'A;dêì"ô9P^)#¤£b¾"Â&¢@'iàdäKîÔË+ëz½ºÌXÞ7pÜ:Ö³`Ò;;ÍU=SØ÷ë2£BjL,18p+Î4¯M˪À60Ü$Qc\$-ÅZLêäÛ».Ûºï Ó0b!iÁ¸qV9qaa¬ç:Îâ(¨"¢ ÛðJTõLWUÃ)Df¼»(ACµ/¸È× íHÓ0£hà±°´(α4½n#TJX?¥á}Lª:HCFá×®áêUE5ýl9s§á+tV$+`«ªúïX +åþ0°¢pÂîàõΧa¢)dǶ8è9Ù1% ÌÕÚV¥\»ÛS¤í<[÷ Ço"O5MTZfD ©w²9F5]]jíÁâxªûîh"6.;ºÁ¤Çí;R0°YÇ12£Èg ÷¬¨ÂÁ0l?èVA«8=îÐ_-JÇæØ �jhVFy§c¹ÖyÛBêÞh:ۣرó¿Å4îÈÙÌÁpãªÃ3ä# +¢`'¢x©YÔâܯ·¸ç7«#2Tʲì4¤]Y¡uÆÄ4l½Ãpg*}R6uÔQ`>çÄ9÷(oÍP~Åô1æpÌê92FôúÓ0ÿ` )1AúwÐTEìàÞoÔ8d\1ÂC3 ̱©/yHÂ%ì¾Ó¯°ÞÃ7|ÞZ8v5¥ÈóVk`ÈyiúeÒOrÁ J@@æËÜ ÐúÓê¦)å20ôßCó' +$D0²8 àmhÅ£ (VNQò>gÐúrç]-¥²&¼#ð3ÁÌ0ÅXÕ#rFqÔGpäãÈbqõ¦2&ù1]±A·´YMÀSâáH# HT'wÝ,Q²/¨Á`ÂCb@A\3©5*ÁO¼(¥©âµÖ{½È3 ¤^ç@tp(ËÚ4Íu$ذ=1Q(3tÖÉ¥ªÌ¦SOA\$PX5 Òoydü¤j h8G¨ø¤g$<,¨]ÁTt :LÌ©6µÚ8lfø"8ê®rw¬Á½yaCIØ>á8/ðÒTn³70Èã³>áÍú¯ØÎ|D>è!Fd9"Å]l ¿0ÊÃHf )~pèzOYíªtü<ê86*. ¼b¬ÕGaJñÐ×ôùzÆF_çYM¡5¸Ø*!NSEdÅ©Â4AB°VJÑFY"ÝRh:©ö\ßÕ#"y0¦^?¸ÊØ£¤Ua7îl7±c¢éÎ, ñÜK9:ìñ¡®2²Äù9BBûD&FãÖå¤9H¡°<2¥O»Y[á='È\Ø®Õâ½WÀÝvÝ:.¡(α×õ5`ëry@ÔScûÐ,EÔÛcü´fUKÂ7ÞZpZöÁ1é±çÞDåÈ«/P¾=82Ô½Ñ ûV+®ÿ.Ìuç¹NèRìÒÀ®V Zg �){Ë[ñ]úq.0+п5æÈD !ópA®î1 ò±~ÝÃA#ÒÊÉ PBaLï,Ô 3ci® lTÐP¡qqàó §w<ç{ÖÍõ +a!÷γ©O"3çLŦl î¼gbßÓ9{xi;·+'YSJ|«À2ºð^kLèaw:5UJV![)~¯±E0+½y¯gN¾æYèî �· ¼s,ê&dLqʾzu ûã}º GÔ÷lË6ßôSÊÄKD 9ï �jË`6a5Ûn¯&)ÖØ¬ÞnóܦÌèT +AT"æ)ßrÃÍ*!ÆfÂiíìBGðìËcÊy3 M:¹A`zÜ£ç3ãNa5±ÚwojmÂÐhK>6Ç«Ã5_ÎÉãHÖ2ò´× +9u2WÂÝÄv`n°Ü3²b¯éJhWT¿pÕqÈîàÞ{X±~ 'oV9wõz'ù¡Ud\ùµñ¯ØsaW£¥mýfì½HþuFøÖG´¿uT½ø«áÈéËè3®ú3ÆlÎäu÷a<Ó²Ôf§³Õ©ïmïÞù : ܶSZ[uq.NJ/Ç1Øû&þïoSÃTÝ»å]'Fª;|êåß ê°kÜqctÒ^ËÛ ÝäKºµ³ðM!,"Í~D ¦ ઠ+@ä Ú×Np×^cæ4éóïÏ 8"p:YÀ@¢wb09! +0@ yüÏ �;ËE@ ÌÐyB,C*áßeE®]JdQddB ðºÂ <,ôÿü +i¨P´aDÒ.p@$(]åL#ÐV+`h©¤àZ0f#$ fÀRM P àJo0? p=pJ-F%ðù`m +"«lØ ö¢EÄG·Q8ÚëÀòÙ ÊîK öBKZïßìúhà +ä¸@ ¦û �f+À � E` òÃ8è ¼ +endstream +endobj +94 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +96 0 obj +<< +/Length 2741 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A£°¸b8 Fôá¨ÞD(Pi7¾Àt)OFQؤ¨jRÅÃxÕ^²0+¢!\R"ÆÃ çm·Á +¨ O&_ÊDR0äg1ÍæÃyËn¸±wqËL(JDhØC:ÎC ÐÃÐèÁC uãM^*IÅAsA&D,@*6ÆâA¼Þk. +xĹ8,px~¾§VMðj5ZÎÎãw«ÍïPC) +ZãPÊ6 è2ÃÚ¶4zh½ò  HÜÙ#pÇ1-à5ËöècЦ:#d8ܾ¶ß 7ÃzÂ*#W7mëêÆ¬á �bjÀ÷CÒÃ!H(0@Z®K¢¬+Ãè@!x)²{$(Ø`"LÊMM¨b Á:*$±ìÏ4/I»¹Î©Ødªø2cä4 Ó*ÉH²%4ÓA ð¨4¡J(è]0*dÒ*Kt~¯KôÀ#LB¥^RÕ© o,>Qó~ÞL¨Zl'pr6Cê1¨åV !dq³l°uuįÃ3:6¶´xÜCj±Ý-Ê2ózU £~,M0U[zÕ±¬r£m!I)A #«+Ái¥¦N 7÷èÞ<Íø: ì°ËnW(_COtâË1^yNWY~2ÅVåä9 ÖX©1èjJÚ?TYr¹?±T°§anPôMFÞT¸£a¢\.úú¼6DöÕ¹&êV.ª©AseäµPÐ4Ý:cþ2É|FVx@7Ü}]¨ÈM\Jr¡ÂOMõRÇK²üÂáï¼ÖþYI>ºÞîÉõ³mçjÁ~0 ! Î7_uzA«Ksû£wfÅl~(Ëw[ü·gn[ݵÒ8y÷zf¹Þ¥hÒè dÞ¡ 7ëkÑ4:ßVqË©~ ):PlýÝyôF �Qs MÕ)ZÁ.h¼¹*4ø®Mé¥ta ;àÈá(eP ͸èiZv*í¶'Xs;^Ð97*Îù`¼;°ï»h ¡£`@ÑãHeà¹Þ;çUy@#l»=wFðÍýxï$4¼·ÖöW¬5qi-ã>&À_µ_ ô<ÎûXï!Pè «ú½ÿ.h +acU°+¨`zòFÁcÔdÅüº0ÕcáqÁ¹ÄTxÛÜìþ+ÇÀàu ñã ºÂ@E50Â2×ú¡Ã:0Mª+2ÁÄt0½3 +äJIÔ87\R¤s£¨° �0"!FecÞyÅ<`nLY9Jå>Êóx\R +Bh EÓpÆÂHM +d+mùL'DÜB§<^/s®©0YÛ=im4:.wc.°$4Àà¿C¨tfºT*ÉöFÁ«W1mêÀ^èçC¯ª.ß)pf !xÄäòL(eá(çVe`I0.9owÖúü^ëh°Ìa4LC1W©~cVøtQa;>µý\c ̵÷A7àæÈ|½¤ )ZÌÁCWQ&Õê³!ܹ¡X5Î&e#Vs£ :'Dêå*6Í¥7èSês¥L BGDG#Ë¥ag +u ðtÁùÐìhp¬{ 9¥ò0&Ã\ÀC%|ªaÚ,kµwÕUçw-àÎX8(²Ã + eâî1âXjsáffØÅǬ +%«`«ñÛ³¸Z+*4Ê*;×+ÄLÆ2Fjö®¤k{ѹÇ×T[rq|±Î:¾¬/alÐF°íT2/bßÛý¯ü@7g$\Ú5Ú8 ªÛÁò½ÊaI£ú_Ø6/ûæã'ÚtïN-Ñðö ©C .a ð T¡I`0§æ ã|UéÚ>YXÔ¦«ò-ÊBa75ÍS;]ÕÙ>Òß9ç9dÆ^¿B^ÎLe=BìýAÓÈïv9³°àY¯xr}ÆÌX) �V7dÆÅ°,Øù/ÕØQ +(4¼k®«WrK^«Ü9Ëg]-h1*z¨¨ÔI7Ý aö²æCy}y>i1UÍ{ÔÂ)3 ÿ!-'oÊ0ÞX¿ &1"£Àç7KÎ>¨Â¼¥õÍ¡y®C& ²¾|á: µiÃ:r6ØÞä5»µÃÒѸìKÜ´z³]QêÌc!1Æ §R©J8A¡PÒ÷#}$^B÷¯i¸oq3 Ù4mÌ;²gLptñÂ÷Yb˧$ @¨d5v°DAT!IÍóS;ÄK7ÐÈøS^u+TP¯góy~{ÎNhóÏ©3¼Õ££ÉDìG( ýÊÚ`½Ò Ç¿TDJÛø"'àªbÒY ¦¾Ìì'àÅNiÝ=¡x§8çºí!¶7Hé5ͤ~¶öÍu^t¤fþÔW +¹0a]ðpäÌZM9rÆ0ìŰþ;¥Oª/½©ÜÝÁp=-¸ÜY}ÙdÔ¡i[D®â|þÇ%YßÄ,_02Ç×ñ·»:á¡täYß§Ë>÷]&Ë`I¤Gº¿4 P.ö¾ +R}MDðîP×ãñmÂhhêdè¦òfòªp§H"ÎÒÍúÍílî®ÞÔÎãX¢ö«Ô¾æn @Ú,ZÝbð"ÜoܨæÚLbNïNù+áý 颼ÀÐ ÜL!ËNò,ólóNZÐÇ6OªMDÎÇFíÌôÏÊ´MËÜÂ÷N +¼ä÷Å µ d n¨¶HºÚ + +ø/U¦z¥oÚÇîÈl")jáêâ/Äï6âÌÖoN4ßL>æ®:|çÒäPÔÌVSHîi +,)ÏLs xîîn.rU±à_ævFÅZ¼F4|/Ð`%ܰ(, �C"ÅEÒ/àNàÎféBG>eÄÑp//O̺ + +`,p¢&ÜRlZ#iküHto ·À ` +endstream +endobj +97 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +99 0 obj +<< +/Length 2745 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT $ C ÑÂ82FâáÒdT"Réà &h +ÈÅò 8¦I' àÐ`2 +IÌ@v0¦Q¼Ül</&ÃyÞìs2¦3¡¦ý}3×ã¥Øèh0\@/|+MÆL)ÌSC¢©¢áÀÐf ¦UÈ*Q_ó#0ÊrbáßÀ2&Ó(Y4_3ñÂn7óXV3Êt3"¡ªTV¥öùs0è®×ìòm1Í1wÌ)sZ×¶!¸p׫R¸¯'BÄ/Bx¨$'°fè»/Òø9 + ¾+ÀÒ6#àcÊ2ÌFD::ÜʳcD3Äm:5p`ªÌÚ½ñÛÍãHí FàêÆ±pN»?Ê0)(kT#¢$ É@È1Ì((¡S,¡¨hMpA8¨èJ3)Ë^6¡j¶A Ã2±8 «^À°<úÛ=°¤¦ë±¢Òµ§ª`.kªî¼¯kêþÀÄR½Èà¾GL«úÔ<ïM8A°x#Â(* +kj4CUt;X°qç,#XÊ7££:´møØÑ®{®2:¯Ó£0ÌÅ×Á �opÆ¿Zî»5W:c#ÏÏï,Å2Ph pjìùA@'â2Ò*a/ý;A¨]CbtM +ů-KôÁ NXb#xD&ÀØ3 +vÅ´'Û´ õå Äd2hYÍJÍÀo}2U6Û½ÙØ«pWÜ2èZ&fFKbYLýGÒ1ÚísÊúªa`iY=; x)ØøÞ;1lÓ2¦ïݦoù\¶:K£,¿»d +b*ƵoÛv*9ãuM6`N¼ÍÎ×ðódîÿ¸RN«®PøÊÍx,]ß h]n@ªµÏgOïâB7±4v.àS²õÊ^²¨ób¶|w©Ñ5ÀÆ1Ãsyºuþ7`1ܪ»;,Ö +ÁεuÕ¢lÈÁªkg1W¬ÞÀe{AÑî=çÀÈ5É8ò¸ÓSóî ÏÀ¿)@d ²|料³puÂJëL25ètLë¼nF3#ÂÀfÄhÓè_Á¼6ÓIy é @ÃIJá<%¼ºñýfÖ/¥2¿UÆ Á!Ààbá<* ï\5'ÞcLzQJhÅ+0$Ë\±¦XÅð¤CY qÀàpHæÀFÎKàâLMF¨Xìàòwf)¸©8ÆY°jñÁ÷ªXÂ,k¡*P`A©Å| I"çͬZ1Ý#ØjâR¾+#Á,JIRB0Ñ[Ð.@Ð)Ð@Æþ@IÐë6Èêå#3ÏI7 û¤ßfi P¢Ôk]QHÓ2BqËìzx´Wìgü÷iÐé_)GÆÚJHËp¿.cdn²þ`ËÐYB$n>c/ÉjCì.t-1^óÓÄvdþ}(H9&Læ}¦uÎÒùÚ)s%M(þÎød3! à@ÇL¹ ¹£D\L a¨F8¡Añ M 4æâS9FÔ" í]¥J%hr ô%HÔðÄ( } ;V;ÕjCbèx4X©`e,ä,¨4uöÎvQpdGþ2$ihèì©T±`(D +$*7Z`-# ÊeªùwóV`'æ ê¼2ñ{¬]g +ù(T%Öð¤Ü(N¡`$ 0¨[a=½ù¿K¬4ÃxòuÄÏGꨯKéÀW·6GFZZú £9mpòêÉ4=þ®Àð]eu¤«îÙ¹TûxI ÖÑS1v2ÆîðR +«.ßæ±f°ºGº;[åbh¢ÌQ\aêùDs¿âlOÆQMàMG`Lâ?H,À¾y{Æ ¦eø¥Tbó' xEL&§¦ßðó»V38Ö(Oä;x÷ÅÞÐÓY2vCÂI£*%L À©eɹT¿]äk5bMöP âDðví¾#-b챨îѾ"énÅ.êðBm´,áh"ÞÑx£Åô;¨ðú/OúGØÒ#U ÂñâÂõÉðÞàÎÙ$^Íï«>±Y75Î#;ÓÒOÞ½¸)hR¶\ Ô¸S¹ódlüÙð®Wý³vxaI£Vo¯4EÑtV1± «TâSV£J*0¾xF7aÂÂxÁðÔ5H}ZfûÇUÇgQ/7Kà"×$ê¯æº³8ãóCÅuCfI$`ð/zè¾aÌ:ÌÐm²4æÜ¤wVªr7Ö@?aíð1êÄLj_ éÇ(Æ·cÈ«âÈhN9µµ¶þÂ"ä^7@ø÷Æúß&.þt2âá g¼ªÏÂæà#rWUC4íóÒñÎtû*}íDz®qPÞd¸§R<6?*-K0¦ó*wJï/²ÒÌ@È[xø+ø<\ è¼}^_8bS1ßãOâò`q\$;ûi¸Ý/ 9У]» +Ë)S/2ôj ³Ê1ÀÕhÁ< +K àp.9ÚÆLî¨Üßñ9ÜàG%ïjéÆ|}ÝÌ÷#îdâ¹^ÿ*4òL"Æß 6úßâ@óÎFô �bøáoõîzÍ&MÀ DéCòÿLÿL¾®DUÀÌä§|F'ÎU.Zåîbæ`Òæ£ÙÇÔpù(SÊ7Ä®è/h8¬n® N° n¦¯7 ÛI �ökè`míaàf±*^ÛÎê Îeîð¤ÐOJ £ÖÛÊ(Lj®ÜÄîü±f*ðN/îð®ÕpváÈÂñðK �@¨(Ý¥*o°/Bàð,ª*ç`Dé&zÀðAp6N8=ãðððP!nGpù®Q=N\¼ëÐpÀÃç &eQ\`~è(~ècN .Ç îA +.¤È¬Þq +n´ë¸ùñCnÈìÇóÕmJÐÝíΣøb°÷ÈR¦jÞÿovð+Üð¶Khñzù)x +endstream +endobj +100 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 101 0 R +>> +>> +endobj +103 0 obj +<< +/Length 3269 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1#J¨$G +A£¸h2 ÅäĨDLÁS¾N'¤2¡<¤F' 9ØÐp2 ìa6L¢iÂnº e9^Ì8¸ßv2Îó´Ìo7aNfSfDèiÌÅÂNé4E4* *ĺâXSF +EhPs0ßDv¾O'I¶QL\)*©ZñÆÇg6UzÍ+u¼ Í«b1@¤Iµlö\ìb7 î7;Þó{9 ç{®`Ø<µÛ.Ì®£ê8 è2 ,ËÕ¨h#¨ë6rí·k¾Þ¦PâcxÆ4°`@;,lÄ<0£8Ò;£pA +Æcè9¬êÄë« é ¢2:¤! Pd¦AÀr!mÀP4¢Ê:(£a¨jKà%ÁF*7Á82¯¬Ëè©I\»®;1½6ÄÍð¦ï"¼)b B`´ËÜ!ÃæÓ¾ËÐ@ͳ¬ú7?ôøÆ¼#:@c¢ê.¸å9àÎ $ÊU°æC l6ÙC´²î·4@ßî' +Áu[_¡r Ê*#_W+üiµ#Æu;;Áòø*H P7°õð3²Ð6¿µ1pØ7ÇC(æ.3¼¥©®ì;V<צTKF +B('9h[L%ôÛê¼SÏË÷QÔ°ÊÄǵì OÀðHåÝSO2èçµ%Ùd+X'â@& + ØfÁ<»dØÈºVãkàᣣ'H¼`pÞ<gÍ×v¼n0ª)¢¨,ÒKjM +íL}Ñ´if¬ÀA¯ßã>Ä<Gë¨ÆÄÅ£%rÁSh@:³lS`ÃXL8ÃÔCÎu[OÍV9ÛQXÌ4ÅÐ|gu Ò|ÇÊ Ó4з;eæ= +};ÖL(O^tÚPmÜß8Îs¨é)AjÚ¡M¥$êÖz/âȦ$û¢>ä¾KûÓóD?ÐÀÁ\L[»#eSUïÃà4Fv|,¡®rÌ-ê0äNk&pá2ä^Î0B áP$8QêEIå*ºÛ7j#S �è:ÅÐ^Ü.8¼ÎÇ ]qIMjd¬LÂmyk¸9pÄÃzÿAÍà&(tTWy%Û6^Þj= OÉJÙ@n[°]U)å`8B`0ûQ{v}-i +¸$" Q, 2£ ÔDÐêÈÖ%@æf§KØoÆ ÓÅ2á\yA¡Þ9!B0F,e½ÂxS$Ù¦nìÍàC¢Á .`Í?E3¾vÍðF~Á&'-ªV'õ2mÞIà²9ç �ÛÌF¡µ¾£ç ÉðÖÑqlÎ4(ÿ/¤jvÆúDUd_S0eAÑ$·¸¸ËÚ5¢ô#)^:Jdp©]˱$Ij +5J2¦TE&U 'ÓºÚ$ANz¤lÑ:¨DU È@aM£à*(*,¨ÄÂ7ϺÌI C + ¥Só0C etá¹J`¸L+&f¨,6¡$PÀ4þfgè7µXCq4ºsÈ4oÝ(itè¹®³42HIRÚ%`Ò tiÜ`Ü}]Ê» IFRÞÔ×pSfHG>^HzAu'S67HR16»Zø+õ«¶áÓZn©âr3¯:³4´EY8`®UàÍX+~~ ¢¦3Ëès8¬Nù-CU¬®ac& Q6d1{·µ~°Ôf¸]a }±ÆÇ³9.gózN¤)>iÝ!SñÖIm ÄéD6-e²dC¢G³ÖXW¦ ÈÒiv©¶X.éde¥¬ @¹*ÚùÖ]²NjÐqSùnMö*Àûy`mõÀ»Ò-0ÙäR3¹7.¬\4g'½p`Ä0ÊØ£n·Õ_y}uRÖ:²¸Çv±Eܸ7}ôÈð¸Mç $p£xG/¹(ÌÝ®«.Á 4"QÒ bÎ9Ã9N5!*6(Tºå{nÿíÔÿÍrÂ;^uw¶06z H»;çoÀ +CsNo8XÙÛÕÔRÊ +ÏÏb[û»Xíä3!\Ìê +·¨±Ô jmO¾.úVÒ÷^2ÏÄÒêo©]-¥ð£MXiUIpRÈ£vÏ곫è)SzÎë!dB3µÐJÙ(ö~¦v!@-«öºîÒg#Jé}3åÆ" =§Ü0"¡¾1<I@¤B-äk9\kV2¾=Çèñã<Ê®UàFQͳ#ó +}X1ܳhX@Ú)Ì$æYæKg4bkµØiów]Àp +Ѩ °pr-x6©¡×ÉÕ©Òî¶4ûS³0ÝC`-Z!µ +¸!dì(º;vîÁ¼bë é*Çê^ñ±Ð·Ù&_µ»JËØ5¢ìZRêlz >Þ»â¦È8üPÄYE×:·BbÐlÑ`ÂI§5[ÿ²mzÕO?©iîäæð¾ÅH,vøºeNýn+ÏzB(T9AAGý+Ûë½5ìî!¨ëjì]GiJ§¥¸T7W£X?ðgh·è{+» <ë³Æðø6*:yP `=Lm + ¤nR vå¤h/ïH*ØÞFfÉO8ÝïO +4îÞ Ä16Út®Ê¤ªJ4 í¢ö + o Ð"E ©åTEJ¼Îô ÎðkÏtùg2íH²|~Ä%lkðüDÀê#^`rÑîÐë º*J*ý +rà ÆÃdìÕãÞPâêJÜLMb0ðDJ-¦þ%ªö«ykݺ"$i\£OêůOT¯Æâ¼bï ú@úúÃ)&¿*Îùè9Dú@ $úèRУø¯½bzL(þ-!ÏØ¡ð^ýñ~ÂÈDÿÑ*N̰§&Æ6*GÈ#ªÌÿ¨H`ñ=¯¦ú®RÑû+ÂW1x5Ì>noå1õÌ}â¦Ñé1(4ð ÐØ»P vç± ÂÝH7ѱKÑCÑcqk°ÇÈpýë@bd·bÿ¯Ü°©R1àþM@þè×(Uc&·k¥Í¦ +pP°0ðÊ4`l~^/ î1òéñH¾Êðp ª[«ð×íòüjfO@rJ°iPY#Å t¤2§¨ä ªéúulÖÍö*G®Ò®«6öE``ºz`jiä;ðèÊK¼ê<bpùËNwgztP\êfêh§LJ>û$"@êÀÌ·0Ðpïvíì^îCîÜîÊß ïB¶¦`G àÅqïÿ¬²ÈôgA1Ï2ò!Çi,+ÆÖm¦ß!£C!ëàûmñUÚõ®"ÀLßLP/Öq2 +þâáê8É·$"dhÌjfodoi¨oÐ,EìFi¼Õì>}+ó³4(ÄFjdóe6}%BD 1É Ké%333s:N)3S8·&D ¨^8ofÈC2°/Íà ¼çP{à´å$AbêH °ID®´pNàü Ïd[µ ôi/òFYnÖøS0fgB[RvÉâõdm7òjDf3 Vfú1j[l^?hë +L]Òíè,ÀNEÃ&¹ âEÔú" +endstream +endobj +104 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +106 0 obj +<< +/Length 2672 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÄaI£qpÄi2*&³@P¶0R¦à©ÉL"ÈÄòqP¨Y(g*¸àPT4Nb±Øu2 ¦S ºöt4NFÌo7bïB¼ØdBï7³@ætÂâòÃÈÒm8LgC¦FS Ã¥UÐk2ë*¹(±ÝÎX¡äáÈkS :r9NgoÆ0"¡ªFR¡»¨¸n7 J+UÚýg¥r¡°T&J "I¸ï ¢2 ¼jkÊó¡M¸bÜ¡oZ¼ ¨®ûÕ®N½¿îûà Øf÷=O"6Ã`Â3µ®ë¿©`PfôJ'ã(Ø2°l]«°Zª¶ÁÌ7OZP®Aíê±§"H¨ êÔ¶-Ëä¦!h»³kâüÀ0L#ì±NËÈ´ËØÒÐ HÆÌ¯:Ã4cFÒ´íKVÖµè#dÚHÄÞ=Ðjà¥.#5¹Nc7º¨7:Ìc°Æ Æ!ô"jö·Ïäú>ÏÃôþ?Ñt@µÍRAPcvöB)°Ä5ÀúHܽTÕäEGOÅv$_cÆ(ÚèôÙ²l"÷Ú1Ôx2ÇÒ¹!С¼fÕ¼±'@ þ-¢(¥+«zâ!Ào02kêþÀ°l+ıtã62c@8CK"2A:Gô*JÝxB(* îµß2ÒxX÷L,ÎÄM8S6ÚC{ʲá(ÓNé0ÎìûB×(´B(R0b)OXQ=´ÍCTåQ£+ãâÎJ÷I9î¦êºóU<ð['\Ðöu +Uo«îü¿oîÏZ!Ápdõ-vØË ÓµñD!pjö¥iÅQgbÀ[OmñÕ< ÝB{\ÁpÙñzl¶É|Õ(¢uñ,ßjhf9tÅ̸4Ñ»Zî¯ÆèÜAcG8ø +bH/ªÓveA¶½6¨õ[~?N¹|ÇLØ>kàâùÀæÓ±Pè2¹£J3Cà¼kØÈC²r©æ§Róƨ2´3&dÃs:Ô9¿CLP a/àô^% +$¶5&:²mm9]5#' ³-P3Êîj7=ªøø0àøE{Mk¸U 2Fëz#ËC´DdDc\ �P2q@ÐD³ÚóÑÃ\*CRÊ 7K¤ÅÁA@n +a¤=PÄ¢üF* D¹Üª_"aOÖ$ük ð%âÇÃÍXc0¦PÀÁTvjà³ö9pN +&`Y ð`Ĥ +Ô2Í,ɸ`sZ w;Aº´TòbàØ_J¡5)=´YÀao¼3è,ÛÁñEÂCHÀí×Dñn.eglØ)ï5º»V³Gn|ÌvÌ`£;03*fLã4ÉpÇ34çñ53.gÍ +Ðt!@xo¡ä ÀPLYb%9Õì[bÁÔ7°Òdüm 1dmáÄv¢<ǸúCx£HÆA»âÛåìÉ©ÀÛNd¾>»ó&Ã\RúV%1JÃ7+Þô->[AYp O%NKãC äá&cÌfmáÑÅnFDnqu§LݧhqND9Ý@2ÒvÎö <dáË®õæ{Íõ:ã\üR^iWÅ_ èÆ¶z(b �Ý"ÔR¨I/*ä¥à@ Hx5$Òq·¢< 4¹N5hyp3.`ЫÛ@åD- +A3Â,Î%:M Øk_µ"¤@PfãA9*^ìÐØ{D(e¢FQYbÈ!åjû² +x2¶YÀÞÀ,°"0QÀaGÛøM!,"ÚÈBO +¡H!\J®A_"ðê7ZÝ@¥ä<6lÈð3ØK˸W.ñ³¼hÚZÉB+u¹i-3â~ÂÍôPIç<mÐqDÛðanÒ^EÑÆ ðS0D8>õ �A_â8"3!aD[0è£ßüæ1<°Ý`í G éE2+ð¤ ÊÊØ¬ô(ÌKaè!¢© x¨,ý,BS Áü �ŽK©ëPN¡à:m¢§¤)·Ô*îû´¾ +AgsÑ îniº$¨`\ ³_¼:7¬î A@D:O4 þh=u\k{HÈK¡° ÁÛÇ!#a;l¢ÞÏÚ;Ë0Û¸Á¿BÜÝîh0&%L#µ5CxwÌUIí* Ã{9Ò)`4#Ûª:ÙY@E´DGÁÂx[áÜCK VaÞ©ö<5 +²Où-Wa#T1ïò}}w/å®RÞs_ ^-¦pF^?gçÓpº1 Ëd:`F©wzá<vê{ eA]nZÁx9ô«¡¼2?Hz3x=.zJpAéùôñ¦[øÊdÞ÷´÷ôq>审K"1\O6¢ØG¡ÓbÏMrcðmºð\¶ÿHé/¥kÈÃmÿd6åÑá¾üøÇ3õÒ3¢_«K÷\ì0àÚõ\ÄGÞ¾EÌ*Ë Ê|p +æ$3:CÏb#JÿïZGo ïD +óçL¦.¬íE~ØÙóÎàôBøÇtî¥8 Çâ Z~`äÎ~cBÆ$èNç +ÚémNlª +@²ozI4øÊù*ùjxßâBý/¤úúàÞû.Ü<¯0ÐD>À¸ ÜéÄ< »±(íÄÜPÞ¶nèþªx)Üé}©èâ3ã2 /JlF(È,©H0)DSæ#>Gذ(Àß-ðÞìÔº@@Äà+¶àh6kÂàë̽ԽÜKæ(\ƾf4¾Ð°<mÌÍâq°â#¸»+$¡ÎÀÒC>û,DúÜ`éÀA± pÁEd?B +endstream +endobj +107 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +110 0 obj +<< +/Length 2178 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢04N¥BT C N'Lãr1¸ÊTêRf +â±Ðf0Å#!A0E'e")¨E)ÎÆ¡HªC* +htPPÆ60 S¡8z åâéb[̦ö¸cd '¥3ɸÞp9Nx*$:!"ÐÍnª Fbí¾Zµ +Èe3gCÔÆt&rºárº]¯ÛùP@{ PI¶67BÈqV¾($IÄBa@h+MÆCyÜ2èvð¼`P¨&xª$®! @Ò6į+ÎôX«a`¤½ãè@êëæº®â¸ÀCP+®6*{¨±áÂA\·Ñ+Bà,,èdШP"£Æ9 #è4ãsX ÉMrÙ5ílÁ««1(`«È"ø4¡£ÊB0#aÈnØD0äÜ÷NQc¯»QüÀNè(/Oj\ö±/T!¨n ¦Ë|å¹®xê9N£²é?C7Ãxä62¼²#Þ:º@6£d®8 «ø1£l ÃÇ:§j`P.h$L·*ÌÏ +LE%ÏkÓ¡@Æ6 68@;¿OàîÕV4Z?a ÍâaKDstPͶ ì:'a$´J©+KÓ[á¥7@á±338¸/Æÿ@®GájP²rØå$M¸"¤-U¸ÕÜÕ:3£î0¿v@7¹#¦ü¿oíw È^§ê5. SHæ]£³}Cxۦη¶m ·öøcpâͦáZû`Ãc`ºÈï²8Â6]pÏ¿æì6s>1ë5+Pn £ ¦:Oüj[9½!¨ \|Îù}£sá¦/Ãö!Hr®ÄI;ßÂ0é +Âã'MÉ ä¤ñç¦i#.7UZ´êý 2¿8ãt¯}ÙwÕ]¿ß~7`^Oyiµ±Ô®:E4Q¨ìÞsA¸2¸uþÀXd}íi¦%0Êý ,oáÌ<·¬ªàs{-9¬pÒù] +éÐ7+G×J@éÉx8gæqÕ {ÚOÎA$öTYM½RPæ[ü|P}vÂ@AË^ ûX$-^KÑðAè@rB·`è*eX»{jËáÄÃé¸Má'Ð|$]pÕ·HVoÛá©vIÖ D§ÇUPaT#6³ô#s±Üùµ°æÎH½¿à°HcV,.@pÌeª rsß;7OL麳-Lj=(*Já]+é$¤ÄÛl¡Hä-ö²ÐÏ5lG9'pS)LFÔÞ3BêAªlRçd@õÖ¤ ±Î9ç@è¬êO0ÂÓbT + �´ÇP +h8(%Ð$p^AjN0 ´½¨³5%Âc¤&8È#IR)\eóÎPs<´M¨3ÓT¶æÁInpf¸Aq$±BqN9ÉT8è#©C¨E¢¡£3¼x£=ö4@PÐhC°*@ÊH$xIʰêÄHD+ �mAѸý |\' (ò÷^°DV!ÃJ¶*¹l +;Ö@6×eaêë±v6ÇÄ;$t¬úC¥ÕÆZÞÑJ+ªR(£»\é·GtdFÁ¬¿2éÒÒ¶Ï1µ- )¥UdÉjté1S²/OI2MHâ¢dà{Ú2ÐvÉæz°pTeDsQÐ& +£Têys]е S¥Tá TÄÃ!Ö\_2zPJ+jIúmaɾhv´K`tòs8ª°èi Ü]yØ7eV±pZëW×BrWAÍW,¨"ÔëÒË¢½0Ü o N®Åú²f9¼6;T +íØa[aõiÀ0Cz˱ônk$K4áÿ¼Væ2»|õâß6óõé²í Í4g¨Òó:·ìÛrk^N¯Uëä¬RYÏU§*×OÓÎ,:¥u<æ»B*ùàZøÂ Tå¹ 3t´+høÌ½YævUZL6i\ôÓìXì0ãÜt2FNOÍ0mVY±aNrÝôå¨5ìÔÚT^;¦Rö>o8½9k A5³LçLy U0mÈL0ÃÌ s½<ùVüfªÇ\uJ`ÎA=6DÀO@EÉ ^ÂQÛo¼X þÛ\µW÷÷ËÍg»ó+kÀ×ô#KàXûdȹ,8hË etxvâL¹ÍYËÆYßÎU¬àöràÑo¡~,ªÛþÉǶ@ˤqðm)ûîÞ_Ìs7ezÓY3?µ§§ÕÇ ÉøÑ(ÒÎ9JaC¤$¸oa¦F ÑÑUé¥ÎüÛ/PÝ=MRNH + +endstream +endobj +111 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +113 0 obj +<< +/Length 1992 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQNË¥BT C ÑÜ\6DÚpÄj7 )c xÀg3 + 'C)´D +Jª1II©Ã(ÌR³5 qÊx&é@o31ÌÊc7ßD;.LÝÆ2ã¡ÈÞlÌN3Äe4ù£y´àa9LëU² +F¤Bî5AuÒ¥LF®÷¬¡´¢0ÚmvÛ~ê sºÊ+W¢ Ààl4ôF¶üfÔìN@Âs9Ìfïc4f1¸ü'd6å¾ZÌæ{@Å´M#LÔ5MªVà!Âé«`¤¯!C ×6 hå¶íÊ!^.È;ª¤°p£ �Phi/)È*àf!È`<ô¢Ê3G P2¶#pÆ2aJ¢¶îl6"K´°!8Á¼Eét¯®&â&¤"" &ÀÐÊçC"'$¬¼#Êq!,cM)Ä1àqH3; +iä* +B¨*JJ" ÿ.D0]L<Ñ1e4F´|GH©ðf +cÈÜ7Ó(Êhr!,¢¶<¹/D°aP,ͬÐè< lèê1´c Â3tµ1NS @=Ï)#ðZÂ; ãKì 2½¢`0£w<Rð°H)!¡ �®$&£pë¶ØÝ$jô$ +âpëíý&B Aªõª±3ÐóYâ»,-KF1&3çúPA¡à6WjeÚG¦ê«'Â=¹kƺ¹î½ +Aò9Bv³cZ²Qí»}9¹X#Ð6<øÏå°+âf2â(ð)ìÃlÝÐõáymV~>(K» Ó¢T2íÔı:HªápqVPþ:FÔ{GÒ Ê4¬¸Ëu<·Ù ²*33Ê=Ãpõ'?8{J»Ä¬=IÓSþòÝð.48eg®Â¤JoÜ'áHr +èr[áÐ:@ +A@3kÔX Ic=`=³#àK@Á¼9Ø,eàx(@¬0@kÏAâðøXOà <äü7Pîy} áÜXr!ÛÈ)hät=V 8ä (eBæÙï\ ^¡SsDÅò¹æ\NB+e ¬Ðf(wáÍà¼7db1Dp¬?f^Êû_«ý¾çsß©Ó|È9µöOÞä&±2 #aõ30ÅóÆyC¤¦:Ã.ðWãÅ5GîÃxâmCFì¬ �,²6Hð@C|Pl ¶®&.İdl¦ÄÌi24#0ìÔÒÌiK L@ò¥=EfÐt úè¹û çn +C$dÒâsNVÊìK/S �Yþg$UOðßG9×gË? Ô23xÉ=äö:SáKðÑ"¤e Ý4&ËYI §:d,ÌÏèÉL 0¦<8ç$>k,&Ã'5h0¥P0ÉPà[(vtÆqPq.g<»'v-4ÈCy£nKÖ Ëª Idæ~BúmH©|¦0îÀÒÃ@t6rйí+¥g³½¦V2ãYeAR°ÏÊÞhè uÎÎ �uXÃXÃÊ«"Á4z=H&pÁd8 IíÆªWCJN²Lª ¥ÁÈjp 5"ÉT«)OÅ>CÈ%Îèøl>Ô»\n¶PظGT¤©÷4¦½[Zgpí¥K4ªüÑÃóÐѺvRêÌk¯vnÙ¥»§nðI÷ %§r»3V(au°t½ .¨ms¶íÑùHl #0ÁbÖû_lK%³×Sp¶C»Öô9[ûz1r¦W Û\¤q%Î3WÊó_S3}ñ».þM,Xïh4Ü@Adñ&½Ã³û n=ºØzìd~îþF¿ò\ð3î³Ufàº!GZÊÝ-*µ=ðgB6;Hê§8ÎMÎlVè~9nmÕ»ç[IGÆ{ÂÓ÷>ÙO$ r¼55ÀØtÈmÈ'Ú µô-~Îù»E8átvwÂ@£>Z2~äJûN]=¨f¢»ERÝMJÏ䥨ÆóSÆáE=w2³?F³«âjÁr®fý"X\rÌ2ë#·_DûÒv??\]m§èx, ôñh=Â)D +endstream +endobj +114 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +116 0 obj +<< +/Length 1562 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A1±Ò)O¥Ë©Ã1´r7UbåI((aR§&`©Á]QÎÆ#ÈPC9Îg1iHÊfµ SÜc2Å4*$KÂá ¨´J[ÕõF\kã "Ço¾NR¹¤Üd7Ëà¤RT5QHÔ|U*Gdc8Üm £¹õK=7·ÙÆV¡Ààr("IR¡Õ&Ê "©©¡Ò©íÄ'Æ ªUa°Ê9îæÆ9"ͺ³Ú1ALò7 ãæ4°L"1Ȭȫì lárÂø¥Ìëê ò8£"îc ä:c @:#;¢éº®¸ì»nè¨m{b$aj6£HX¨'Fbè6 +ØÊÆÈ ¨&ü "0Ø$ca'J +¤k)ÆcKF6ËÔo'Ê2 �83ÍRâZÎ8ðÀ+âå3£hÑ3̽Çqè©ËÌÜ-1CèAº³°í;õ¨©ª{ró½!ÂOuLOa¢Â±¬®P\åÇKbÜ"0#ä4 Ò7Ï +$jCÈ<¬$Ê¡"ªU+8Ò@¨4¡Ã6H/$|ÌÒSë éS1taN»òÛ b¶¶ü*}·JBl²'ÑG«è@1ØCL9 0Ì7CkE_Á #B ¶ÔtþCE/ä ?ðØ2´c&XËBµ? KÏÀlÒÎ)N±¤÷ØPÔËàZ2Cê èCxðaÞ6ë:Ƶ¯ ÑÞ6ÖÚÄÛÊøjQaqÒ0¬ú¹xÚ¿Øf³ s]׸ hPérÂë|$ÃPx[ÐSz¤ô¿>q¶¾V2ï[æd¶Ì5k6ɳ k¯ãC@Ò1ã½.3ãXAfè\ ÛABôX&Ê0àöÚ'¡:&é¥é½LOàác`ØÔ´Ã8@;#`êÀVß6Ýh(ØhL:4/ÍÒwÚp' ¾& .Ð' Øh¶¯\ö÷òÙenÙ¦4æ ÔUD ¬ÒÏZ;Ñ{¯ÇàüO ¯Ýû¿Z0ZÎÉÿ½×¾èÞ١ɧµ¦Á ľVäµJáÉ9Cåqd-¥?çè[,(vÏÖvPóe !4ÆÒ»ZÆ31!z¸ÂÝbÔ3ì,DXpA#"ösN1jÄçÞâx&5¸ Ã{ªv̱¦ÁKd¬;»§xÌbú7+Æ+8¤g¯±0ôè<n@*8¹ÈÝì$ï<ºG$LVcQðÔ§6t|6KvÇÌX_RÕd +J%ã)^|v=-ÂUl=`4òîiÈdQI1f0ÌÛ% .ÝB½9#rRðñ%Dy§r¥*oì%¢|yöVE¥ZÓ@\¡v/è½Âü`,6Y=¬³wQÄ|+о¦iØ[oò¾Cx¬ÈÀ9eË¡@`תV,¤æbtA +ë¨)°jµÐ(]oz:© +ª«#%UhQ"¥Ée'æ~Ãü§-zOÊùÍéÆºt:×ò$DÈ¡Sf¦ÑÞFm¸£ÆÔRHiǤ¥ +óLU#¦·^$åz®s4%þ_bæ¯l ¢V!]ÒëGLv 4PhìnN ÊODî¡lÊÒ-®4$@à c´6j Zc³á¶ÐÑ4Ô +LóD¾*Ú£¢ +V¨¢¡ +endstream +endobj +117 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +119 0 obj +<< +/Length 2630 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9!#1pÊx1B!æc9NCI¼Ü)¢Q ¤i%* +Dª8M®9©Çd²áÂee + +(RT5QÈÔ^8J[5ФA+JRiL¨R*Êý¥&ª-±eiVnHÜgÙçâÈ æt9LgC©Ë:)ÜÌwã¡Òn9ç¼"9Þr6oïUÌèhù}E|ïÜì ã`Nôã¸Ü2A2Hè¡@ß'ã Ê:AkÎÎ(A§° +SV°ºÈàó?á Áý sxÑ4Z¡¢IÉ/§"(Ø2£+þa»*º.ËÂôù¯ì +W(©¹!Ìc Ø*#Ë#·ÈKëj2¨Ín<Û7LÐÐ4½#,¯,Æ´D>ÎCó«:7ÒÈ9@! ÍL ¡ �ÒT±-³ÿsÂ'(Es2¿Rt«ùM@#d +óá �P2[ÐIzåºBx*âª* +xlPÔufÔu!Aì C¨è:/Ò4ÍJ¸pçÛ)BÍi[i²p\W '¢ àe4ÓyÙÁaßä} GÚ1 áX<`Q *X~"/Km]iYVfCÞð5óÈ#eZåù[¸jÌæâh' +°fçìÝå¡^µs£d×ÜqFºt=IAlú* +¡se¹BÎ#`"O3%móûaÔ.½DÑu¦E{?´¼äP³þ4ÃLW57 õ¨ê9Á$´VÒ ç#4[ãð!ͪ#[®¢ËnïeM½ï¬&ØÃõ´_MݯVTg5ÆdCt,<h7¤saR,±äìYVY þcÞiN¿°<Ìaío¤6×]zánÌÅ +4òKç+tQ°AÒHtÄ >ÊÙk/|Oq¥½÷ñi{/ a²gII& fsÜÀ2æµó»"ßÙD@¥²ð!?QDRÔò¼E®ÉB pÎ|Hv® ÞBr~uÉ¡Øl Û/¥þ»§V"¾3/ ⸦gC¢yà¤,>ËS°r=ÇÁW³;Q¨w !°6:ThP<[Xgº6,pÜßL2WÑ6[Ð,1j&p¶kSb ðk»W +$)RÞ Rk@ÏÜ2£wIÞt¯éT i¹µ0BÁc6|#ðBì"-uC±öÁ'$óÕqÑ´ü÷ØoG EÜüjño(F©,ÂE Ý.Àj¼éf`¬7@âQô:çÉÏ ÄwA¶DøÜ¯nó 3ÊËwEÁ°¨§/^#Q¯"u¡ä¤Ê!>: wNò5±ÝNp££cK*¹X'x"®Ñ\3ê ÚÆ jÕÄpñÍbÇe§Z5ÞÈDµ¤<4áL/07XEo´`b^¡±:GÏØ.?¦p1¹æÿ<p ä9ôÌ1,@àøõ Dc¸:Ê4éÖj8Uµ×ËiAD¨ 6ê\+¨Î9;UWdr¦.6dlª@aI]WV 4áCw¨rÒ[K xAâyÕMäUyÞyÃþóFÏ36k`j G5áf¥.ÄX\ìm«±öµSU(Ñøy«îfêÇY]ήM¢ÚתÙ[©L{¥¸QÙ^$Ö¯×öïh\-£3lÝ[ÚHê ªW ±>w!CgjáíÏ;k=SÜ÷n5ö}»øúíCBe,P~ïh+w%E Rê°¤#SÊCÓÄ2%zgWêÿ/Ï ë@³ �¢£7f<Ôk[D<uXÞÄBɦ®Dü!y®äT¡U a¡`ìC?á<+Z³YñG÷¡ª9FÖHo0à¿ Dp°îö:Pþ{§ü}Sid5¡È1àÇÑhÈô¯ ä ¢¼¦"á,7ZÑg[ö°X죹(©çË WKÉvÃõÚ6ÕÅ*6jEU®ñãLøÔÈA Áäûé³ñ*;²© RCUúâW¾])ØáÍð£yXèOLöÆÒvÙõs®xCÛÂ/9·:2áðt7M-WWÎéÁ �®(msêÕ-3»5»bd±p7ê'8ZB9_ÁÍøp@ôðdÔY?çsÓ:+2Æj\äfs¦vÈ©îlP\(ÕUèß?8ü?,@Éé'j©!ò<%ÂbqkJVt-±ÅRdÚ©âÌê³| �ô~3!0!ù³$ÍMP À0Û{y²6Ϻ¥æÃgoñÿÙQ@A +fØ)ÂâÚvßI÷â¼gò È +Ë÷éuÉóôËÃÒBpGji¢ø³+ð¾/ømü×{~[Þùãüóç§ùÏC¯½,쯮¿çÜ)éPO]ÅwÔ7*PÒ³k!Æ<æ'ãQ¢"8mõÁF'Fþ¦p»U±I´gßÝW¢Ñ) + @,X%â´}NÎ2 ¾»fGä²¢Fîྠ°OçÃO ¤ +2ñçÂí'°?$ö(Ï£[P6°;©8ïïoÈOb¦ "b'â *Ä0©À*¾2häã¤-#bÞ."æe0ïàZ +@ÊÂÞgäKL¢W&1t)¢Ø* ,ñ°@4 Ð9Ð/.ð®àï`îÂ-ðO.÷ðèòmýèFGÎÒv7lðèFDâæ XZ h&JÞa1&}Ì&ípãöðÎÛ°_0Dï.âïCÏ| ® ©ô ¤ñ +endstream +endobj +120 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +122 0 obj +<< +/Length 2853 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1J¨$; +A28N Æäcq ©%%Ã1ÌÊn(!#IØÄp9ÂÀPI â!HP¶[± C"hT@PÆ60E1Xiv$f6bFòñt¯-ÄëÀ©ÅÇb²F1ALòn7f +D±QhF]T #=¾Z±Z2Ó0P èy8LS0æt9LgAÐÂg#nb2þEÅ%CTF-ãP²&`aHâ + ryH 6ú#¡LÒ=¡ÛÆòB T÷3B£â$ +ë @4ãpÈ'Â#(å<$AnЦ*"s#s0ÃÃP:²8LÛäú>Á +ø¤ü5N4ÂB¸Ð0ÜZ÷> Q HR#9 +C(áEB¸Ò: t«´*¼$Éc 2Ó{2ÌóL³-2ì¾4MóY1Áø Büc«"Iå8)LÂtÐ.,&KøC`à3 Â@Þ7bàSLA XR¢¥^+Ðt(WÈ% UQè [H¸r!ʵ¨2³Àè2ÃÛà PZó½/X¨öÇÔ>ÆÎÒê»»ÌÄÆ1RñÌpijx$ÀhÄÛLêÄ2ù£Æ9 #è4ãs\ ÉM¥Ìaͳqyìã¸)´ +@ÊOê2 á¤öÅJ.+²íÜþB#aY" AnÅZéhe¦Ìâ}+¿¨åx+$a3 ãÛ&`s«6éÚmåó«ããòçÙªv ~ÎIøÒ0þ?0cë*å5йE&_!êªbô,AÂl$î"O ¼¹¤ ãhÛ&Þ6 ã>º7èA¾º£xA£6ºØäé¼¶áÌócÃ2+§ªavf£æÑxjZº`öWÔZ½7ØfÉÂ%ûà8¿ÇÜ iç¸Ãß?/Û¦ÿ@j¤YÀd®å0䥵idN§ãÔ5p ½GvÈßAKp¤)ö'zß;¬Éh° �-Ü ¬3ãÏA!% �ø¿7 ÎcQnlxçAfÇßp AÍ®C¦ÀÈ hF0Ð<ó j Ý-I 2,pðª|ÑP/2Îà*cGÅý( 4Sae(0hû"Ù>.9<X½Db/P\ x¨Á`P@ª)zÈÝExúh3@´W£F$ø¡$ !prqÍôW×" 3,FOÁ¦ÃçêÖbzKBNÕý¿Øâàoí]&?´"Ó]@C îb74$åssAÎè=!eOäMÂChòâR%9ív°Óbl; õåKxPÔ ÃøÐb$ĹÓÙrw¤dPm`£xñÊ·{T°R/r65òB¥d#k¬ÍM× 7Ñ|ET@ÐY$410ZO¤wX$Ëä-i¨Ò¥WºlódØ çÞCcy �'U7%P -¤2&OÊp[ér6 +A|)Â@EH=9§ã³§þV!&¨chÝÐgÐÉgIFÊnxa§A¥¼Ì%0{} CÍ!Á»¦î1¸9ásyÏúKFC ldihÊS!4+*¨ü¬Æ>XÚí;^e,ª.©Ù»S§2"$ÑvP<Sí]¡ÒêjǬ1®üQho,i22¯ÁÀUùo^CÁ¤1µG(³áY׳YÂEúîÕ9 'Ýø´pÎk[Go3è¼ÀÒ³ÜúV M¥¢gÅt �½!ñÞÇo;dIz¿pwîÕÌ0¶s×I2òEÛ¹I"{IDÇYæC +a! R +(Fì0¾¢»Sm2R ¢íä#7Ñâ-KGåj s§Õ¡NXYdeÍcïò'E×\Àc wÍ¥Û3+¶nrmã"Åcít¤ë-d£ JÃMþjÉ"|YYY&×vTeJFR%%²RÌYÙ? å[´T824W|´pÐ`Ìqní:§dA7jÑB*Ãd|Vm3#«¼¸km対Øõbcá©PBL¡P"ص#m+DÁàÙ@vnÏÚ;OjípDÚY³\<Æ`ÆÃ:êð¤5q×ú2UÓ[hgÙ®XY1¼®ý-H IIÁ°bæ* uvÛÓÂþÎÚKjmc½¶1VM~Íj&E_Yí-¬£Sël5× á«Ei× +7sÃF\_î.9¹xþçÝ;¯âÎFêy/'ÐÓî¸cu¿<ÒFNi¾øªRê]Iy«Õ²øº³z+böýOháÎ$Uj{BÒõ°DêÝUEÓwï²çõT$ÓÏÎiÑd§Suëo +ã,9víæ9B2IL|ýÆÁÛwÄ(ÑG*Ï}[Ù'ÔbºËZ`êbþæL2F(ÆqQùÜáÈëèUKN>H/Ih¤<àoRK%9D1æT÷}K(>9£ßµ·áå e+þÛßcwwÃmüåC-é ©!Óéu rf¬îGbÚ`fàn@ÈÈ>*vòIƨkòçBίTƤdjË Èl)æ¦ ´÷ï£v£*¡+4ùùJ6Ó¢cj4ϬҪ@û,LF¥F +«º :¦kçP`¬ÆÇ& X 0¯Ç4ñGò&> N Îÿ&<@t)ç´,[pÙ¾S@í¨ +@.(®æ8f +ë¼E`cð¶pg05làtP¹k ¢$ÆcgHtËÿÊÆ/Öê{íkУϮ ðgD8*íJÐRùÂ^'¼¤àAï«Ðû BËá端¹ÍØäIp¬»ÂlløÓãÐ+QHpxÔðþª`ªà'`l8"ÜÊÑ &ÜÀF¾\ñ^à`Ð ¹"Kt·(t!&<5£)QàÌÌòæãã!ÊÄJ~òu`êïO"¢ë·æÃ!ü þ¿ª,hï¾ØKs@ê Kv·±Î~c¦9PËÒçTOí¦ +endstream +endobj +123 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +125 0 obj +<< +/Length 2550 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡á ÊH-#IP5 3a¼æe9(Èi0×Lâ¼ð ;lv+ K¶NCy¸Yt²Eò!<®N R±hƤ8¥UëF;éÌèa7<ŲÊu¯,Fû1èe9M&ë-Êl0åó ÈÆh³NFSÐÓ}bq`¬hÀ\8èXá¸ãVxà *³9ÁȤâ E$îóÊpä`(* 6µ¤ë¯ØuÂA¼Þk¦íîüÜ #°Êÿµlf:C«z:·a8æ¨2 +##ÊR.3å1ªrç²IB² Ì7 °Öá(â2 ÂèØ`!l¤ ©(Ø2°èà±N¦£9±\êGQ²í»®ø¨"¢ Êñd1 92XcƪÂô=OcÜø,2δëZÚ·´ãhàØ4ð?ï¼B±1Ág: +ÐÐ$̳01³ü\ÐN%ÐóÉDºqÊg3³ %@©pÀ\$(¤ÊâS®|Gî0´âpà ÒQ}J¨a¢FÔì£3DZüÌr#Æ¡áÀr§¹uWNºÓ<¦î;Â,¯,Ër¸ Â#¿/C.<ÃÌrpN¡ÜÎôÒ2,'RBìpjQqj«O¥G?¤R*6¦¤H@õ +ÍZbCº1¿hú68@87ajº0(É/¡ª #×E7ÓêÔÞµ-rÅYO(wTx,.¸MWºtÏXg Ë[W å}UQ:#«§øeÍo¨ê64C#W½ÐÈZwÞ°4ãpÞÝT0CÕ'C²# 7"¢x& óÓ=£cÞÙ«o6Û|ÖÐÞ1pcwxÍ2ÃVµðÐ\°Ý5uj×àPùô0Pé°pAê +ãF7\çÈ mS¾jkÔ!sK6ʲìΰ«ìÐÄ<°@b#tÅ´j´èo¬cË- nN'[sîÖbvH !,%ÀA +a/w÷K5eÈ´ÀØúS%,*Ü0ÂÅiófiÅtj´6î© ?¶êcÌOjï3bA,b¿¹¡zMÏ ' àÁÂhq ÔABÓÏ iLD7"Ï¡ò.°9èO +C¤+B.±º>øbñ£² áº,<ÐÞÁ B¨P0¦ò7×S,°LßEx1¡c°9Âpª!ÌA7pÝC$7ð²6DÝÑb/EñFÈÚd!¡6@iÀÒH#$ÃtVÏ¡Cln|3Æn¸ÅÜpåÊ(×Â%b_Í7»°CèlPèÌvLY\Ò4¡Ôõ-§ýSý½0åàTð&ÀbõbÛÑRJAX±àú?E2BXÏ +Ä6+ñö¢¸×8täm-¬HÕ-çÒú3ðìÏù"Ì@-$sbÌx«%f\¢2fI¸Ë "ò. G)e<áT}ÃId^̬ø¤4¦/È?âHOq6'ÒBi4âºwDÍÊp§ô^4í#Ðrdô~¥àbü4p^ÃñI?ªi1iHYúÂEKA!Ì À7¬2Hµf¤+CNmË94ÔsîÑ:4ôéÍ]J¥yØ=iiJA¥ Þ)W~ðZ¥*j¼8<óU£Ðw¯L<ðÚ²Ã_¯iñçl-3¥On¡ôØÖTC¯U`¡ÚÛ'smrz (6®ðíu¼t!H2ÙpÊËh¸JT¨ÀërtoKXÏmî± £ç «÷ µIþXFïK±v4 Ày ×<è-(nt>>éj×K×G*î lîÕµ`Àºó=e8ñoRyQvàN®½Ä¸×ÝVc¶°±Xm;8ÁÑc+Op5Ö8Ê ²åÕm·¶nîð¯B yo=#·mÞ Ù{¯s¾jìã¦<©9¡¥ÌHwô°ßðÃ_!¦ÀUeÝw×+ß~Ù:áHakÉ×°áLðÄ<PàØâ:zÕö@Á!óT3Pöp @TÞNÍY«q8òK©©½}ø5Ö+'jh6ñäú×÷j§Ì0ÇT®½G@ó_cùn{íô}YC¼{LntV×@ãfzË¡/kdÌV©e¡ÎL7 áºØôÎ6óiïo9¾'DêÞO;NðÈ{÷n·+Sȯ)ë=ò1 àãà©Ls²y*ß¼ìÀÔ½HåRãí<æñ +í&à(ÐøØ<'Ì|7³Oç=¾ðÃÌü²ÁzMÓ/ò÷?çNìÆ Pøl¼ÜÕæÓ${¡´Ô§9å8Hfä×(ã>´uÊÉÎÞ ;/îyÒ÷Ðh{RÍ8Tã*$^K3*½ ñ°åÞgï J½8 r/Ï(W¤/Â=ó2M\è,6E¯8âöó§TúpÒ6 Nn·Kó²ëï(ÞS0fí¥Bÿt2ó½ÆõÇf]}ð"ñc§dØsï1rø l¾ ïÜúh(îß/QþÃ]~ï:g#×òËßó +Y¬ àiÁ¦wûï{ôS÷Ñ»¹ªï»º?Þ]éNIc¿RHhÌ °kbà,R£ée@`ûª°%àd9ïOÉ¢ RïcnbL+oh4ïlß-ÐÙot5¼H#Dë̸tmø,èBÊÅïªueÖ»J+#@h)OèNáÆº æ¾l"Êcd~6#4¦Ø {¢Ê¦Ï|Åï|OÏî¼Oò#eð9OúääHί㫠ÔT¿ÿ"lLî^à)¦6éÚàÉâ4æáÃVÄKÅ´ +endstream +endobj +126 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +130 0 obj +<< +/Length 2751 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3Î¥BT C Ñà\4B£qpÄj7 %£ &f +3¡È¤e8&3)\Òt4 +Jª1GI#JxÖ;' £ uve-©3`Tà¨h4ÄSaÚe7w= æÉä :ó¢ÔÌfÓfüÉI¤3çsóãqÔØl4ÆÝ! ²·GSC¢¨1ºm''¯ácl\ÜPw4ïÄH åhµ[9S ÈÆhäYw1w¡Äc:ƶ&"¢¾1ã+ƹ®¡¼ ª!Oó¤Ã¬3H2 +(ð:@¸®K¢ +»!(Zò¾#/ê²¥°â¼»aÆ' ¬Ü7³C¨ç.¢)jh\¦*bªÆB£®ª±Q2³0:>¢HÌæ@Ñ +ê¤DÈ lý+üVé0±zÀ±9+:Òµ«zãDk¼Ò*¨lMì +ÀL@g f6m«HÉ3Ê|;#`Ò2 �ÌL[¢¦hl«7Ŭ58A:»Ó³Ó6chÛMB7·#Þ<3lÆó¸Ã(ÈL77,âvòÎëeIoACHñ©(EaOrU[JÅ +0fËLhP·.+rÚË}ÿL6(Þ6>°-KPÕ +Rõ5×·Ä%\ÎK +ƲÝeøøLÓìK)Á +E*]Þ¡¢±`_Rí&Í £òÖ[᤹w0AP_´!\^Í0æÛ´}µ!Ø´ë0dª>N¼©àh¿V¨Ü¡yEУ¿ à ®æc1¬Äbõ¯l ²æ pqF;Ì{9Kö²9#ÐËl\ãòávÆlÜCZ×¶<DÒ8WÒj<t<¸Ar¹#¬t:¼á8ç k[§)ʲ¾ñÎ.ѵmýMw¼Ý0UÍìéL%/ Û+®L&÷(ìIÉ]@c¾C<®pÝÝkh"¨Ö¶9zo[åõt;µ!¿2\(Ît\' Ä Íg ñØ WÑòMs`iܱ£4®iЧ<ÎÜ¢r.ÓºVÄÝjM`ЫEàìOûv¥ô'F÷PdQB¼&Í óîk ò±`Z¯IsBl)=é<L®ËCHÁÐ"c=/eõßîõ@8Q +5ö<d¼ûÌ¢!À´Æqàn¡2cHÓ$>9ÁÈeaiÉ@v A@oê9ͱëÁñĺ +4 ÐÃxkFÈáE(c 1y§.wâY]0tuÕ tEKÈ1M`ÜBHlÙf Á"@¸@Ëã*Ñ\¥S²K²UQ§©f"åUJ±Ñ,Ú/yÀÌ 4ca9rK=Átv¨\*Öy1å¤ÖèGRcðâPÊ9K)Ø´Ckñòcm<°©çBþåÈ(ræÓµ;2 £´z\# pA¼¶F´¼k!`ß=U\wjÞ=»2Z ÊJl£åa¬Yì%ýÏ©çì3MR@Ùà2M`ØJ¶ZW|¯àÙóõVýc²| ôÎÁvÌPF +A|"à`E <'³dm aDȰÓ#jûJIdÎ÷@RöVO éÊä¶Pg±Ý A¡#|F·U4ÑCÀÖUMqyÌÒt jM?$*=3J*ØÃÒ¡!Î Ðz -õ.yË`iÉä±8ðÑãØ6ÍF¶¹xþåõ Y³0Î-3ØæVâ±îFYêäVó²áÍæ&U7 À ¦Âh_ !8$¥`B`Oô! ÙÊPoHõÝfå&p7¯OMᥰØha ³¼«»|èÓ0äî¾pS-TÈt6Á¹Np§©ªÐ@#MS[Ô:êV'Ì®ØD +A(ÀÂ-ü{À¸Å"ª+la>¬rNÇàþés;Gf^1ÜÉÞ\ÝÃsw\v'&"2¯eq|CÀoÙ,/!àÕTlÔ2 6ÕÐÇAbqN*Å|âì_TUÉ#$R´S$uÚóè²CܺÙXë¾C·e³73¤Ôf$yË%[*T"ÉCëÎʵi¡.'b,I±F êÇOeS©l4,8ÆgÀ.öÅa×MöÊWù$3@e,¯ÊúaÚ¿A¶ÏY.:|¤¸ç¸PT +AT"ÞËý²X0¾©À½ÛC½.ß« TòÐu: Éõ³¸õhÌàæ5Gx¢åèÓ6q§×)íÝÑ¿Ñò@HIÐÐ<Àj÷ç³î~µßX¥hk±Í+ëC!µ; ~.M×PÑeõgf7@Æôßq\ÊÚ9x'»Lç'°»:.ãùü +èZ@7ºÙD·ÌÛçó]¯¨¼eX'6u.Z´gb¢¢ÌÑg4EàÝ-»Z£ÄߪDì3ût^¢àÄÎpPèb, ½«´êD5Ym'µR,UýmÍ£YòW¶rPËck"¤ÀtEÆ4±ê_z)úÙ©U2§U �¾¯ÀEʹàMµÔO]-Çßä ÎKáZÐ_Þ.v\×W]3®,hÙ8räZÌ»ô´Ñ/!°©âBK·omP¦Â¨RÅ 3Uߨb@Þ4¨ðPɦb2¢m`&´)~¤E é@Ã87 ÚÿCÎ0ð#``&AHø'äÖÓÂ~? hWâJû¢ Bpbªú¾-Ä � hÖ¢Ï �Äþ"Å"¥d\IâF@r*£°ä.C$6C¤>[¯ +8CÄ@ûÞ;DÚûưýÔýFýïâÕ-6KçbFX# +y à© :WpR* j[æR +È%ö»k¶Ñ hBVæ+m?a«®@ °p¾B0$B Qè+ò¸LjÆ +o¦ vd¯@û«§#4O¦Ìs �äÀÉÀ?í°Kq¬à1¿QÂÏD=ãÚÙÀÎ=à2Ð$`d±²)qzlQ~úf: A°þ +ñ À ñþO^ +endstream +endobj +131 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +133 0 obj +<< +/Length 2339 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9!#QpÊx1B!æc9NCI¼Ü)¢Q ¤i%* +Dª8HÄgÔã²YpÀa2²ÁCA@)*¨äjL/N\*%B$ÖÌ($I ¹$¶#ô,Mc1¾¯Z +زÔxæt9LgC©Ë<c¿&qÌ@tÎó½qÂr<3¦ÃïÜ2Îâ~ñÌÒzÏ|¢¿ì¾/Á¸3 ãÚ0Àp\Ý´m*äplªj3:r"(Ú2âxâ2Ë¢ì¼/PK µªä³C¸¦è:C ¦û°cz·àS#.2ä¥áÍ3K¼2ðüC;Ï<û?d7ò:.ÒÐÞ3;ï|¤Hxb®Tb°ÆS`Ù6³pÝ4-}¸.8éûèºn¨ËÏ,à ¡ÄN,\#H]<Lì$ÒÃÈr-& pA(CÑ îAôÇT½RÚ÷¼¯è£à2Al:3TîÀä7XCy40Ò=:+7 Í3=Óm=KTI)Tõ¬5`ßWV Üo]nøWNõ{_Ø6ÙÓvuµhZK#$2Ë#^1ÓJ l8üä9Q39I²|£SU[=׿ï=ã#Á}ÑWëgÚ*u)FHö&v¶MY²OâJIâµ/)ÜO6öcµÎ?Z#8Ð:ddå ¸°¥êlââhÃÙy¤g$«ç¶þ02³î.Ïs;+U¥pøîpÐ7£`É.³Ð8ð4±æ÷¼U8è7Ö~1#0Ò2ò'-N¦5ïëþ¾ËÖ÷,Pè[óJcõ¾æûöGd]s%Ç cäîá â9Ú̪"§2àÍÔ.÷wÞï£+õ*FånÛÆõÔoܰ1l.zÅ%¬á@ ¡¨qêT^¿|ûÛL¯yq·5âðiA.¤ýºÂÞ[ØbJí¥ bXÀ4}®P¾ÔÞØQ§Ø7;ÆÿiÜq(áBev¦TYL1àÐæpÄ_( h<¥¦»&1àÈ˰÷Õàc{§I ÒK.`ìÉ®°Æ©| :6i28*AI!rbåÒL9A1 r,Õ°>èpÙ«>TîàÄC0fX �ò£¸îH Íä6ÖÔàCr±sçBD¼ÐLôCîÅZ.ç$ÊKSìD¯øÙ -B ÀɼWb)«@*<ÐÏkC®éÇyÛhaØ3Lqx¨B.pä«äêGÉPo £²IFY)Mßs'=.·¢ +4ç3爐ûb3¾ h'©PGÄl)±(ãJq@̲N°gRâXz9²ý"$òQ¦ Õ9IDòÕ%àåNs)âð Î2ÂCKAuxËñæ= ºN´XªB>À У¶WåÍ@§8Ð"A;¾&÷.¦Ao.k© æ°iyiHv!d"ЩNr¥(ã¹kAu!9¥N» +¯qA°0ÌáT5,3!4×Ó&©½ËC^ ^KfA5%©,tfíLÓÚ*ZtaµvÚý°&ë[«Äa³$rͲÛ=dýHAóeÓQN D;vU¦©$H° hÁÀ(-%¬áòâ\Âr?ÁÌ Ë:P°42íMVf¦0Rºca@pBÁxW;à.¸ +mÁ§åHSð3¤lF©nØh-@Ø·â +`Oà¥ý$F +pS'h$^ +qn å1¥Ràq;¸¥><»ËUÎ �mé$`È^äeSt*ý´&ENøaøD#,2 è;GÁPdv®Â~ +AH"lÊÃ{¶Y©DæÃ4w8lA!FÜøokÄBùzÊÐA2°U +a#CÌAo1¿*ä<®5È~7,®ä-sÑ1w/%íÎaæÉ±õæ"ùÈ cÙv+QàÏ_«ÜF ,¿He{@Ë`6äÊÄN¹Ù;gvD �8æ3¼K§D9 vsó@eÙåÒ³öCjAZøäȰÄÙ9iÅ ³ôE)uÕH§VÎÇ&Ê eØf¿Aft;±Öͳ1ÝG¸ÆObÛxúä¤: äz`©um%×÷xt¢Ù}lZf¢åwÑ)áÊ;+ð;cbo¾oÜÂøD !(¨(R ÄòBæÏaB¨[ :n·éþMmDôÌ&Ц0e§À2«óÊ©°ôØjPV8Ðe²A( Á sÛ}zPB¾ò§¹A6úà÷Þ}QàQÑÂøHéÁØL6Hî×XwýQL'º#këûuôS|üzèÝ $g"ðÜׯiìu£Õj£ Áz~-_é½?¨õ0[ &»üzÞlÏyÓùºV\â]v.Z¤J ¨wÐÂ=áôþ«àôB`L'¶ü§uó8W¤çäïy[úBxWü ("0 +endstream +endobj +134 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +136 0 obj +<< +/Length 2580 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ A"N¥BT # C ÑÀ\4HÅ£qpÄi1*%£ &f +Ó«°*pB)Êdòa$;FÃAPÐi9ÆaÔÊ ¼"¼Øi2G#©ÌÐ.Ðè°R4v °UC½7¬VV!©_D<1¼ä)*¨ÄjD/1b½]]M,·[½äÊl2L¦ã¦òt4_ñxÓ@òcÖ ÂI»oåfæ,t/ü£ ¸Òn3 æoOAÇäòù¦C)Ã2/#{¼õ6 FÏ*¡ÈfÞ Bö¾¯ïê¿À,Û ¢ Ú²¸ <Õ +c òäB¬£j¥A ¤i;zÒ4ÍCîä9Nc Ø©j r¹A sÃð<DKèõJ Åpf"PcFß«Ðh'â¤*bDÚ!0À Á°nÆJ[I,É èÆc ê9®´21 ¡¬;6Êë$D4Q>(ó,£Æ2²O?ËÀÉzü-ø¶Kb»ä×ÏdÐÈBÁr+IVµè ) ÏD1ÏÈ pA¢BF;RÕ»3VÌv Gp2°]W!H%º3Ü 'ÑÌÄ¥*CÍßcKrì¿0ÙWj 4MSd¬ßPÒ:|9Îc¬ë;Ï+Íy}TxÄ Äã-òË raHÈ©õ*ýZÔÊùMÓ¡ I7ñ¬Gd uÔÙÙh%Ac±ccö«7£c9¿ÃÒ3! �&è:£¼1 # Ú0Ö_3Jr#Aç +åaBH¨&"'Â~/3ÁuÃ,.9N´ðëmq`Z£agU#yµ[sChÒÖg£FL4wõ]¤G°æ/{<>¤æRêõ¼Õ ÷~¶1ÎóÃ6j³Âø4VÜRô}.kã¹èÎ4¼cf¸¾ºøÊí»¯«ñ¼µÕÓák\þkC¿Öù>mܧm½5åØÍW8×oñe{Rh4ÂÓ´ï $"º²¥K5r3PpRZ3rXÁÃ>Þ|TÑæO<±¤FÁ 84ËÉCNú³ |!À;*+<âBÈWK]{ÍÅ6VÎÚN¹Ù=!1 ¬{LrA ª¡"ä[ t2%Ò8 éX÷zïÎcÂI)§Qy¦%ë=øöÎCÞ[¥./À¸8räÜBð¾ía5KpâÒè]¡ó¸þ!6b:z;v%ÄÒþêà[®"-8ûÕX1iUC{O¬0¦+ð`åq n2¹ ×h¦Ý` +X8Î¥j© ÒtÌrz �¡û?§ý èè + ub4yz¢]n ¶) á¤ÌÉèò¢RXÉ)¿&2UUÓØÔ/T¼C?EL14?ßÃ`%6©àÃÐ38Õ ÅfcnP)&íÐ-,2¥l®4sÅS8&i;$ ¸1Kðé0hÒf4,9vÄJ/&i»ÈðLÛamÓÀv b¬&Äú¢eXaQM ÙÒÇ$±«wo-í¾Óà\Ñpô8ªRÉvTʸ2MD ¢²&ªRzË64çf=åý& ïb³6e:áE tì +Nú\hð®ÌJ/tÄè +gM)®RØ a;söÝÑ8&nßÌøQV³4.-fÃõ: C "McPhs1fráËK¶t¢*lÔ÷ªlÍEÜ?YÍçr pi?Mx4 )¼-P0÷ú»ÃÅ¿Øè¼ûêB¬lMÆý¹¤% 8/ÁΪXK Ê|*¡IÒ8Aá<'NÜ3pô¼Ãù_Î@f9µ9Ρè*à´þtð_èpödÄà)IR«5'xS ´1ÇàdPõ£¹í1!Ù°Hìör áÌ9ܬd +©²ËBþ1ù0æ0f°hÇÖ|¿ä¼ÏzÏújh¸´Â¸/m1¶8KII,×rÂȹ$ ,rpe/á7pÝÃUÓ¹cPhBÌ +5" +A$-c@©ªAh2ÄgVÓ×^fp{Yÿbj©²· +$!íÛvªÍyÐ9gg³6E:?FrL#%µ]7¥wÑ'ïqE½£ù~\E +o{`·%ÞSJêºÒ¥óé 0Çþ¶àÖpÝÙ$§^{2¨×²v¢: +)ó,¨5¾xØ o L©ÕB¿axê8é«Ê¯¼#&AõkÜ úÈ-Aü´X1ÉVÂ|ßw}!JOuÎþЬ/G.p¼Æãð»ã:ºfá÷ßݤãÄî¥RLÜ_±L ¥w7_-<õ½:¼Øk-·]õ@¿+½0j¾`W8L¾Ô§R;Áüç%ålÓ¶åìfØ7'é,Y?p1ø# ri* ¯U\3'lØÒ¦³èR¡Ý@PØNXc<Û%R*Áfõä`¤ìU}xnÍá½7Æý×Ù ®²ì0#Ðï³)À×ÝïæÛ`F0ÇÐÈSÂu .Ðþ¼¯æ:ìÿ �öã8÷eÒ%ê"èÀR¾ÀPÙÍõL!'"C§&â~» �Jïl*¢¨/vÌÌv +`ò[ àbðù "o"ï¤âtKá$L?Îq +`Î^¦ú À¨ � +ã:ÒO¼îÆ ÀÌ æ<cüRÐæ@ÐÖì ÄíØÈÊZ°ßÍiMëeb%m@Ì (vQ$¢B +endstream +endobj +137 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +139 0 obj +<< +/Length 2288 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ´b6G¡hÞ¢5ÂÈáÂ4 +E¡@l3MÆC)ÈØi7Gb¡ªWN ÆôºÝÇe³gC¤Öe'N;¬¨*®$ KÉf´ÍL˺]Xü~ ÀZ1'BÈÊc4Í&óv3E¤¿eð$;yÃ[¯ØìöºvCs©3N¦yÐó¶âÍr·üÁ i:ÍYÂm49üMZ0צz~¦¼c2»æRÙ0_#HdR$´"®¤Âô¾4¯ZÂ>`#Âx*@Ab¤5C � js&O@`C,¢pj¬'rÉ Ê9l(à:8AJ£ ¢2H¥¡ R,CRZhä=¯1;"E˨4¡È¤¡(\ªaÌ4*/©C+B©/ÈÓ +&IBúl ê1«\m è0®@0¬ãxÎ4n`@3PA=0 Ò11QØ]8)S¨KÒ¤Âúó½-0£`Ê6£pèaº»ÇqèÓÈ2ïÌÐȨRÈP´ (Ò3"Èôð£3=O=V4¶Ø-]XVA¸:K¹eÙ¡ Ñ£`@:ÎÀçMÙèð#JÓ¤Ó7eÜÎ`ë.Ýrõ0I jôíbAV8ÍdÝsDZ3¢ªV¶°ÜT5\9Ð× Â7ÒÚ7 éÐù`ëXhÞRîx �ÖUCà6 Z(òñX¶½SÜúx@ð î[r®¢Ú7QÕpÂ2.8¸ ÁvܸHÙ ÝWe99Lhxp¡X¼Rôج§Y³C$äy/ T+µRnfCi¼K£ó<ÕûÂ8l÷}«RgTj§@vÃ&ÊìÛ8-0Â:¾Ãfßý`½Êã;»{aºIÏãc83évaµÃÐgº @ÙfY®Ïth@8Q_Kï¾\wè ×AwC»b2üW/ÈÚ1Ú á¼9£·nôÔO/49õ£ó.fëp7öo ro½Û½¶Ú!ä7 ¨Ó½çÀ_)u¬¦¾¶(aAÌ7·¶ÔÂSoÌ<#)ÔæQºpËaÄwÇ\s E;HÊkffðU´Xk£Õ3lÀ§ÀfÈaͪ 0vôßâ Áض¬AH'ê +K?-ÙF%Õð¾¡KZEU-UþÀVy´pÒ$Ib+NB¦g&¶²ÛPËyW«&úÃli/P?© êPMÎ4¨È¡lQP={Gðè¾Ï#Ã#!4¼ÞaÌ©oòM±VM"ËÒ:SÉ%¤ê¬Çî]C96øÜü Ó¼~®S.H7'ÁX°1*æ¬CÁ1+-m×È)2M8wKÂ5"ØaCpgví£;ðèÝdÓ8Ñ. òèÈhvÌ7 àb¦ü|> 00àkÙ»IH¾i¦þ§3*éN×L¬'w,ìô¥9£éòtÓß +eÔ,v �KÅC#ÃYí¦qñ¸PoáÓcðö% Þ"´»³%àÉÏGë4êCI©TrQI`esL¡¢@ÖI'!#f𴦻&2Z-V£ëã$Ö¤ÌfÉË8Î)UUÍ <¬°Q£*:KyqPåÛZCÂÜ^M©Y ÃK`g5Êj\ºØìì'¼\¡Ü0Ðõå>d¨µ!ÕÅaGSõXô|µÜw®¹Cy Ôù<ÕÊ oM]/~lªøRn@WnÞ·\)ÊÜ¡aÝ5]Ál[-öø+å ßú¯noõ.²û¸nðe¼¹ÔÊJiÔ +øY0Öþ -3¿ôg4ù=¾¸Åºß«`ÁïèiÅxCPà iø%à¼>Xpns·Ô6á7o ®ê»áÎðáÖ`¢1 oÄØ¡.ßêANqpoÆ\q!òI²`KÃ"ìâ0f ÷©Y^ÊÞmÒ´JMù=j/FtPx²T°{RÙÏá½ÖÈ·-6Y{ÀPÉcsIMÏ6N'àXdk³«B²ç/ZÍ=¥ÏÕQÛÚæ;¡W+ñÑIva)ä£ Ó¥wO± ¯¨³¼K/ Í:Ú5·u[7Q¬Â+QÓdË=¡À2ºÐA¹¯×BL1 Õ{ú«ÓõA®À¡TPíR©Ëw¿ éfï/jJ]DÊ µÈ;·0uî&ê¬`®Â"na)RxGA(j!WÐEî]Û½ÞÌu¹¤"eI|p o]±¸0_ + $ë%UD£RBÀT +A&x-$h¯¦|ÙÈ å!T&s®yϺWÇô¾Îùï?è$§ô^¬:O)ã§u¢ +xòDg¥^SÙzÏ7,ónxR ¼ð"hº÷H£½+úgê\ªB®ëÁx?ñ!Kj |`ð}¼w®yâûU&qgÐHU ¹nøþRÂ(M !'ÀÃÁ¡Aó8UCv ì}µèðNSïý´öÜ<`iîû ö'á|@H + +endstream +endobj +140 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +142 0 obj +<< +/Length 2445 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3'EÒ¡* ¡AhÄ`.¤bѸ¸b4ÑÂFT b¹|O&%CTª.pºØ*]¥XE·q *l +YäRÁP¤A³ÚgtÈÌP\Ì&Ó(Âs`Rfh""%TM/ø.s=µFcQ×Éårù( ¯Ðh´X&¢iaÖY.v6;|S-ͤ±g ¥âêp;/k¸Yçæ篼/\¾o#GiPÐUP\!º£êÊê¾/( P6ÂHè0HƵ¯Â ¿ª¤¢¤* ¨í¬¨Þ3¢ü¡0 Áb¹¤ë¬Áð&¶EpºHàiCÏìAA ÌñéA®ÊÃxÜ:K04Ç0\AÌÄF6D³0à +¢,ÃKa»/ÍÑSú*Á¬·º*T$,S$! 2ÃpÈÌ"`§9 3¤C;KÓÄ Ã}-2atô?Qsû PâÞ* +µA'B2>#GÐËÿRõZì/´ QDQ$MVuFR%t¬1½]%UËYÖ¨ h)k$Érl(Êa«&KÕ';ÒÌÀëWÚ7 �©ÏûkªÎ]v ¥E4UGRñ<RôÌÁÖu=}Ôl~ÿCxQUFÐ`¦:CHÖ2ã¨éjcU¶;m×kÅ}`\ÛÅ8ÄXýÅñg\ÐkX3dy.OåyÕªZáų )>±IRd(JR¤rηEä9䍯5~Ux]7ëHÞô¦ 9ÏJj_ô] ÁÑb5GÞÚíóÓAõ¾l»=©%Lãò*ø¯Ù°`4#§&eàÉjÿ©×ôÑ#n9rõ÷5ÎsÝÈi +ØWÁ öÇoqR`YDÑcMÐæ9#<¥EËÖ︡µ¨×Ä.`Þ;Ê#8@1ËÛ0fÒu¸®á¦åÁ_h+4 à¦BøC )(ð¨o.%ͼ@àt p4"ÀõöqS!4ÄÁ¨Ô v. )(I +pAä+ +â ,A<"Øi + ùâY}IÃÀüÞkÏIÏE´0òØ-IaÀ2ªô¾Åá¼B%Ïø ·ReAH16Ñ:(×Û È×Ô9Të Áðu¬$ÎzYJê\9S.[8fµKÜ9P <«jMÁDx0fBxøþ\PhlÁ±E# +<'ÑÐ2¨·àÛkOÙE?RSA(Já 0·üÁx)EËérº$Yá}v +î ¡ª6Ki +èlb5r SáwnZIànWâðoa:$ÏeÈIXýëÏ :¥/"+:Rr Àèú Ó +G= .$2Äa'fÚ4'`äÃjÏ1μç¡SÖ ÏbÊjâ¨bl JÕ(f4ºuRàHPâbd&ñIdêDX-ȹNF§%'DSú\½yñ>¤ü¦t �3]uµ2é,Tº%Ó ¤êúsô9Ê)²¢ØK®ê«M)xChpLÐ7¥ªæl,¥¼$*`oOÆËÃ-!RÕ{ B®Ê}+ÃBæ³ÕEÕª&8X¢U=fÏ&$(cLUЪ'HÌ*r½u!÷¿7ÝCdÞNø82 @c¤i1¶ÔjTZèõʺ%bª¬2!ß7 Ú¬³QÝ Èó) +~+¦vikQý.iÒ·2½¹·söÞ£ðlTK¥¸0êT<ÒüÞ½£2ïqïSçÂÙXr}¯½ø·¢Á±1¢-áúYÈskî§EÅO `T¡H/ È «¬yýY$d Z +¹Ê) Â.W̹jCºªFOÌX+s&Y¤exöf°©ôJαjfc¼õÌ>RÈyËAfpp ¦ú/ðÎÑGÝþ¿òáP;éfjO×3öËÉéæ½#²& +wåEèm¬Â ׯ\&¯¬Qv1ù©ZN¢í¶2XÎצ¤m¼7ÇZ×IW3N»UàìÔ¾Rp'Ùå3ÃízÔbVC´USæ?È|ù¯L9Ì5"e²u×Ú`¿RxB]Apî8µÆØ/f<͹w±(D¡P<ÅFjäýgïî;(¶éºáó.á,ÞDy'&Þ )o¤ø(e·Að]óF´j1pòÄ´]è.¦wÍ3Ü<̱%»@â[{ç¦ ë¸ÏwHµH»1ìp²õZÁ¡»0iÍ=¨8fÂ{WeZ÷Cwm´t1¦Ç¹¾c g zäìIÝö3RæÝöPçºx;]|íÇ¹ßæþVõõ¸[mÚã/9iî¾Úê;UϺho×8¡wÎùyûúÖ3¥â¸TøEeÉ'Pæp·ì7nèýï]ß¼ÂÕVóX\;K¿xPÒ"E-RÎÕ7û@íaB%ÆÍ°ÒÛoÞ¡¹ùHPÏX»e½°STÙ,æÄBÀø#`jɬ +øÅûï·NRùÄ*)pÁìRetØçPwÌ,úêdïc®Ã¾l¤¤l¤²ÝË@gÄgàþÌðXMÔB ZO � +@N§ËåÈIÌfB¨: +endstream +endobj +143 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +145 0 obj +<< +/Length 2441 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP ̧eÒ¡* B¡AhÄaI£qpÄi2*&³@TäL$ä2A¤A!¥"ù@¤E!JsÁÔm>¯ØKäÒ L)¢QQ:h¸n8ÂëX9xÂ\¯X,DB)U&-¶ûÌZ4 âͦT)Éd\ÝÂå¢Á +©pÀa$*d4"ùB"2IàØr2¼o +¢ 0®A,Üð;- ([OÛcà»Ñ0_ äÂ-̨jÚjC6#Û ÀØi1NÈè4?A �4c@Ê9 Þ£Êù¾C(Ú1£ É +Ê0kú6! İlÿ¡Kΰ¡p¥1nûm+z߸.@;#`ê2 ÑsÐÁ*:ÜF±À>/êû¿/ÛûÀ,ÀðL �7Óøù ã0AÏÀÊ!c*#ïøÊ1ÁCEr4`öFQ¢;R| +7£eKl^Á¥! PjÃSÈ£ß'U8¤¡u +º±)Cî,NóÀñ< Èap@+ÀÃuTTµl2S+.ÝSM©MZVdÜÇ-ålð¼o(AtÙAÃ$ñ:NÕR¯Z«ÔáDG4Á4ù¸Â<Á\Û3Ð3ë4£Z1xÆ5ËpxÂ7P1d36MÒ¼âM5 yEÁÏØÑÊñeTÙ»cxä4äx¬á9bST2 #sõwäÎ6×ÖÐGVÝpòØtí?iKª!vÚÖvV)le«Y6±½±'ÜUÍLâwüßNRÙu9pd(TeáfɽåD[ðFA4BóN0ÿ@ØÆWÊÙ~¹Y¦m3ÈçȶX⨨2KØ#U=!'`Ì(²Ò::}¥¨ñèÎërûp¨4\(Ù dsË3Cnk.xî?0ÐÍJÄàÎ9>`ǹ³¨Çæ½ Ì0ùa �+@ÚýcF¸ýXÄ:ÌðF/a#;ñ ¸ä¼×h_ì6(tÒ¯Zh®1¤4 jaÝ;©}.iÎ9ç@èjÉ ä ! EÉ.õÃsL¡7!úß»yDa± 0ÜÝâdMÙ $$QØ=Pµ%¹dNL¡3h( SB Y' 7V¸"*CDÈl7 þXëÔú¡·d éuq"WÖ÷X*E:i ÂwÌbâgÑR+²]±V}Fc$fK-r5FÄü½{Ñ\¾-ðÚTC|aG² ÙF-Yu×pO á/ÅX¯UÜFn+ +«àÊ z¡%ÃhÉΫoM)à9ïåÚh!×E|S5ypÉ{ðzO}Ï4ðÀиréýI£ápì¬5U(Xâõ^ìå4 dÊ¥êêò¦ÇåNNe³²,E Zr°4n²F«É$RÄhH5»Ä ÎwA.Ãk*E²§ÐIWÁ@iò Ê6×(xzÙö:É¡P{ùõ=Çâ_õq)òæ%ú3 ëLWHäÌÌÖ 1ô 4æªôáÖúÂSu5ô¹þóCí¬É¢kÍÃÝó ÎD©9Ùêvéâv¸Z=g¼ïuÅ·Oç>ÃÌý@á¦MhèÕ M¼GÒcs +}öȶDa¤:W"`|GnFG$²vÚÉ$%Q© /ÂH CyÝÃÔ<àibsïÙ k.ã_U|¶ kF-+µ©Ð¸¦ ¨J¡w²ÔöÝ.ccM! Ö4ÓGn5à}Ö(ÝáÅÕ·óÕÈeê½ ÚU6¨_{M»ÁÎ$)»ÛÒP8IUó>¢eÌÉmñPSÜùÌh4ª$,D1%k:¶Í' bÌBB<¿¤x»¨5ìÆBOðP¼Í~NáÝLüÂCxkcÇÊ©tÐÁR +_s]®ÝÄ1+éßY\~sáSweFÝÊÜiÈ©¿é\ÏØ9§nÉ2¡¦"C+ÏH":4pëD!tl:¨gXÃEÏ7úé¶3uÚFl»m±ÌÝëi¯Ã¼©h¸ÜzÌ^7Á1"KèÞ0÷A>òV+ûá¾8Ý`käáé® +תæÜcMÃéÂxU#áuÝv=î7AZ@Ë8T !X"C¨`¢Î8g&X½WoL!²¿íi¨¦`u}§Íõ,,?>è=ø{2©FÛ$¨Â O ØÀ³mÐ[AÀ5Ü4V]I$u£Ï#æTÀé R½ ÀÜ×w ÛôÁTÝUø4´ ¡<Ê Oëåâz³r(=ÌxÓv@gþ`ëþI<ò@aÿ§ûQ°0TlYXVÎßOîç$ôÑÏR}×§F~SÀE¤Éþ`5(ÞÔ0N¡ÝìT²Õ0iíóÃip^jKç7 ÔsÎäw=Î!säêÓæ +@ez&Ã&¹êOL¿lCÌþ¤±éoU¥öËdO.ººûoìTë²'ð©LïrwaH7¾¼©ç=@dz7QF«ÁxS®Speë@½yà=bÅÞânWy_ +a)¨Oª3ðö×Ä=Ëã:E£((e @}ü¼¤Ý¹¡Ø:,Z +;öHãá2·¾¬@ѤÊL/ÂÎðÄÎöú +`®.C<Àdè¼¢xûÎ|ü ÐÎÇ>¿evòi¨gâé/0óE FÚ&¬}.´~¸eoPzOT¶ÏXÿDð ¥t +n. +Hà ` +endstream +endobj +146 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +150 0 obj +<< +/Length 2086 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3N¥BT C ÑÜ\6DÚpÄj7 &0P Øf#LfRqÚe Tb4 SC*´ +%à +MpPT4Nb)°Ëg73Æi3L¸3¡ Ê 3ñ"|¡çf±eÍÖc(ºaÆ|¨ÞfhìâiÔç7ñFSÅÊd´ÚÁQ:`¸b8¤ÝÅÂ1|A!Jdѧ Óv\¹ØÂl:åõú˳Á ÅRa0X # "¹¤Ølm²æÊ; +Zÿ1£süĸ( ¨ @èÏÆA((¤!kb¢)Ãit< #ðlpj ++C¢¸n2§arA@9 ãæPr(ä2Ëæ¨j,- ¡0Ê"Pú,GapnÁ¸f$qjZ/£è2ÌÐè$ÀÃL1àP./x7£lâĬ#kìÉsÔù +¨òª)&Ò)ú70º;3EðêúÇÎ0qÅË'áML(4P (¨*²D0ì?JCm°dÁ¥7/Pèg5Q¥DÇ1Øf +uhP<·#æÁVÒ·]ü»/Ø)zI3Í1±¯ó`ÛC¬ðÎ&U aYV +¤n(n+0h®'B @8;â´m³AÜ+©vMÒ¿`øNïÔþ:TF$µAPe;Á·ÕcY¢(* +BÎ66 +þ>9"Øb.än[£x¯túº>À_.{\W·s_X¬u/L¶DafYÎ<ÉhÇ@Éyà: ,Õº¶-Ò°oÒw±p¯W k̵4&7RºÀ2ôd/GCHäuºò½Ù{õO¥ßyg¶Ñõøq0ñºN¿1yä:²X@1ÎCÒ70oàØ7ð¿ÑýX壤ÞÎv@4C¬Þ9Â$-QálR`«Æ-£'+ÄØfÍɳmT¢8¡¢±ÄÝ0Q på Ü.K§2Á¬Ò°òcÆ1Ì ½ @vaí¤7ã¶jÄCJü¨ÒìÑC/Í)¦9'A¡prÎb5Ot&¾òðËÐ4(yð·âÓBe/Ï¡Ön¢qo~ ùAØ`Êù0oáê³cÌ@$%J@åüÞq{L¥È«F\ÌÌ9mÏäÅ6\êñOÁºx`»nZ<Ö-Êëèf¡±ÄñaB"#§ã´8²0aAÈ0plS*ð©BÔbæ¢ÔLØÄ³þ\uÐ}ûD7¦þ¢3ý&PÔ:Gd`ÏÜ5.±×ÐíS{¹@Ñ-;æ½)§?r.FI:ÿäQhxGÈXìÑ`ün áÈÿ;9be¥èi ¡Âi¯T # +j©5Hð4Gc¦phQ¡kÈà¦#´zÒ +CH¡#¤7Ò{ßJd*)·´Ü×#`áñ¬>perà2¨ S'È"¿E63´X_|RmÅ黥É!Ñä±y³*¥[j\Xª'jS-ryH3JU@¡V*æ\ÚÔQ¦3Ë":)ÊÉI5bB n´(¹ÅÎÉãÂBº4¹õè½ £._Ì +¡%Ë0à0Í<1Bº}| +ø7pÒ°ÑÞõðEÖ0!»§aýuKÕÞLH>Ò+N°NrÎIÎ3L`Õ¬ÎéáI6+¨Õ«0@ØÃe -QÞÜÛâ¬da¯+¥8Åé~pÂHG&ÜFÎD¢¤ðýóZ±(ÙX±XÑc[¢t%Ó:s,ÝhcuèÜ;¦Bï]ü-¼EXUÌ»uå¿=Nk×{7á\G¼àóá|v ê¹`,ʺ°f;´â°%ÒF£Ó,¯¡6áäÃ/D i¥-Ô¿p«ùßI°¥iuuþÀâÇpà +¼ �93'Ü7SV YûuJäBû(ãñà2`ë,,*øAÂeÂB¢0¾ì°Iíar{s á1"d·ccØZLB +f%ì]ÉÀPÍÁ 0¸5/ø<wù"Qü9`É Cv0'=:$[t3Aüwcly¸ÓÖ«,¼¹!®äÉ&$ÚcHÞX%êtklßqÊÌ×7fæÐ¾xT'dj©é3Ó¥sÛþÓ'ôÝ&ý>uÝÔB(Ð-P£Ë¥£!WWa{dF³kÀäH9pÐoÄÝ$K¯M¸ Øè¼l4K±ð8q®jh£BFÐÚ@¶w47Ùw½@ÒktÞÓ2ì2§0Ø5úë(þ ±m:áh7Wîýe!2ÄÏ",l·9®ÌQµà< +«"@@ +endstream +endobj +151 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +153 0 obj +<< +/Length 2394 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b0¤Ñ¸¸b4áÂ4jÚ\Ü9(ËäB LD'Ö®3ÁÌl0 ìa6L¢ÀÊc4&[éA7æ¡ @d0ÍÁÜdËΦ#fÈo:ÅмÝûÑhàªx¸p4ÐÆ5aÎæµÌÂIPÕH#G©pݤ¿o ÖÁR �äR¡|ÈØàmBt¬RúôÎkft¦Ó)¸è 6Nsvâ¸ëbÉd§@¡Ã|é:ÀP´âpª& àlÉòô¾5̰ìKÆpê6 {ê6*2*JjÆöе "p¦$()"hºò½¯«ü<Â0ÌCÎ2£îʰl$4Å È@þ³±@Þ; ãÂ;ÅjÛ·0@b)pcÜHÜ9»Î®9̬ Ð0°Á¢ûìÍ9² +1KÌp" ! �8 ãS@M?=á!O3Ã;J@ÍV(ð0£J;ð +¡NZª¡Èd=*ähêL8é\´µè¸Ô¨(ñ)R6ó¦V¬ñoµbK*\!j¤.êw9Ω«ªÍQ¾t $ÐR/LÓtí?PÑm875%UVUÌíÃFOb¾àV4àÉZVÖÕ¸2Ù¤T7ëèÉ52cuj0àR¼³?Ø4¬¥'Jâõ;Ö®·Î¨Í5>cÀé·PL}8»6ÈäÌS+»¬´8Òkì¢ÈØ(â:°TÐä¬ÝÂÎS£¢àBÌwÇòÂÍwdÃÁÑÙ4 )âdyºnÃ. ØomsÅÝQ0w f¼h do3 ßÏ,P4%¼ÙÍq[¡E¾rWÊAÃlóópcØF®:ÏÙ.E×ÜÚb]A@¥Y0éÑõ·#¥á¿ÆçápêÓTå=POlËHDEã9 Án¡m7ÎÜÏÕ3Ñôé÷µ£xÄ5[VC8f¼þɸn0a´0¥æhÌc ëÒ¿4ºÏV³O é>CÉoP~grS°)ÎÈj O\춪ó^Ì*¥H»V2YºGCÈ2CìÁjEôɵXdN¸g !°©Ã(jdÉ(Á%£ëa +åGiCgÖuaaÚ;V,å̽ +¼^FpH¡Àô÷ÃzÈRF°×ÀÖ´boaL9æ¶*¶@C|l©TúÄúÒ¨iɪ'ã"Ûß2á;D³jËÓhä,ŦùAÄ5x¡@'£©]3*ÀÚU=H×[ rªx:©§!#`ÔH¼ +̰\ ´»ðb½³jsÄùSî ;î}qJRÈËIH³Î#7®p#C ç\9L¨dùg +ê Pè¾ÃÈ}5ÚÔB>NNÅÚ»çÓ(/§íÂÈà@ÛQÒ<GÉ!?§y0#03* �/fôìÐ_Z>ÀQà tfXÇOÕ 1-°Ó`ä¢ ¤då+!ÆVÌ;Æ9¥E h)ô lÍ'þà\Wq07@tÁ6ñRJ+TªheÌ¡©ê)¹)& ´7`Âc2&³ |Ƥ<B°ô%+Òr#`PÍã'ýëXpå-[!ÅCâ¤í%6NùÊ.R,D ! ÆYLcpCÈðT$Ñ|à6üÂõ *Í[¼·Téfî2º5Ðe +¾ß Põîc»Ù»\J2¦æy1©q+%uV©RºB)rÈu®þ3ùh'-Þ¥Ï)ÜWÇS̹ÓxÚ=:îI.Ù¶#ÀÐZ)`yNäæÄ]*KÀMS)P(S'X* ªå}®X*»Z<^ãÙ$`æ¹ÚVXÍÆ°ï¨A3L<±B_i"ä;GiJÓ^"[Òæêa ±Ã?réOT �Ü> �ÈspA<fÕshT29ÕEON¨HmÁP àÜÃ@Oð9gÔUSÌ?9S-jEáøyÒ*ªè¸cÒyÑé}#¨tÖ¤¢ô¸"p#ÏÐfC)ÐPfM¯&ib×8öãa<+ ðÎ^Än¼WC¡]ëz¯ (;+Í AØ6ìã{ct,7dÄó²Ä¶fdVqyì+'VPÝjáÚt³åµ²3^_¼FÕóm|ÆSaÒ^À¶¶à¡øDê}c`Þì÷ïÌ9`Â̽Ë}@°Øhi§íM=+ðåL^åo95ħ¹1¡91q¤åÏCÙ¬O + ]9î á¹73# ~Ràç³Y¼S}<Üõ°þ ¥Pߨ$Óð'®U?:} Íï_©<!ªr§¬ô /SîyêÆÎ²°zÜø¨|ûvÑØÒÇe3é©©þðá¨"êl´4N{ýêF¨sßç´Ö Ì +-»29Wr ¾*¶o7"¢JT¿&@ɲÇ%ñ)_Å~ÛÍ<rò³L<yÉãÁénôIuÉò`ÓÑ -<Ø«Xÿk~f> }%Cë6*¦~ïøÂúÄäÑ¥ÁÐúÈÙãôÒ:@¢-?éÌTOÔ ºöôÃîÿ@@`®àª +`n h2d²}Å �d:0I¸¢B +endstream +endobj +154 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +156 0 obj +<< +/Length 2273 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @3Î¥BT C ÑÜ\6DÚpÄj7 Ȥ¨j£¤th*2T¤õ P´a.Rf`¡APÐi9¦Ã)´Ên:/¡ Ë7N °@yÍæóÒn00çyÏi7ó6 & "ÜØdòæCyÜOy:Søf:Mq½`DéáâldFíà¸@IÒápçliפÓaÏ7«åû¼öµÓî;Â\¾U)HR1ª& +cÂcËÚ¾¸è ¨+mØÇ£0 Ê3#¨Øø;£(] ¢2 ¬ª \´*NXhÊ·Z*.nñ ËH,ëJ)-±â+k³½¯«ûÁ½MKVÖ-{bÙ¶»Ï±²ÈºÎÄø¾oÔ1$óÉ4@å#nk²CsÚ÷ú¾ïËöþ¿ðÀãl§' +ÂðÌ7:ðú¾°ÄjRÛÅ(ÜW;N +íÇT)bܸ.R*î¼É4ô´òsX×6 *¯,¼°Ç0ÃHÎ4ë²ÓÎÍÃo[%=Ö©Í®tè½sÏbÏÃôþ?ÐõPÕBA +BÐÄ5>Pôq!1Ý'ÇÑTY HI8º=£ÊùwÔ+-FµÅõDºHÕcËfM,=e(JU³hÛ/#ÈË1m³~¯ áã`ÓfbM«b0v{7H<c}F£ä2³#+a²ã>@Õ +bø& $ ¦*"`)Êu¸ïðË1McBÜÎ#Ç14ù(ïAx,cTß:Ó3:³D13yD$Ø|!æy¨¯*âàP.! ¯#pÞ:lbéfÖnÏ Ù×$ç¹þ¡èº>¥é¸¡©[ö$;cOû3e°iêûcFê4mèÚÊ;ö>ü7Áí®rõÎVµØï/"x¤æÌ Þ3®Ðä]ôKQÞÔ¶+ç¢h' >ð´"àEzR®b¯ß8:ëUÑh@6×_ ô2Ö>¼Ø°Íª`Ü£58äwÌõßBÐÊ]|0eö +à_ ¡,>øß)dG%¾µJØ0UF bÐÂKö ýwú`y¬n®Z)RÞÂ^ð|äÀäkB@SaH'´2¼ø}Ì%ø8f¨ P4£B{psfO ä:{EÒ h "2G0ܳ@ÂÅð +cxbÃj/FÄzôeÐiy¢!ã./¸6¾ClG|ò:;tjMÓ".3vÃHf !&®èä¼$`1#hÉ9dKh3Äq@n Hú$°õ#2æN'-àÌsACt3¡Ì $/3A (7 ü1¿RPÊ( +"ÄIÎ0A3Áp7$`ÐðhæEÒ!PXT +AT! I4YAÄÊ&2t¸|² ¼ É$Rd0Ì2·vÞãÕÄ9lHÁ`ÊYKAQ`ó!È16{2v A@U +A$ÏMm8À¶lϹû7Ê!òÒg.eØ8²ÞuJP +4´æLÙÁ@S.88æS8qVµNrßUJ»SÂI8ÔMÚéjÈ:¸#C=4!NSÊ|Ñê0Tí3 ÈÔ lo¸*½ûà l +äÝ·drl¥>d$K<§Û +A.ÎÚ#_m-§9¦IQ+*¬U¯ Ý-d+vÞÜ® UòÀ·à*ÔÑÜ»ÊÀ¾C2nX-±ÄnÈ&òèME5°´ô"Óùõ?¥Ë©h¶¦Þ²TQh2 Ò\Ui;êÔÉT¯M #'5MÓ¢ª"iÀòìaèÔ±#9R)|Vì§wóXÿR®à3 o³J÷_C ufo÷wò aI3DZÖ5sju-È0sDC rx*X/"ÉuD +ÂpX[± Ì£QâÐrÀX´ZTV!åÎöbÍYÀËã¬XYø;bz«Ã½Æ(6%Ó r<W&]Ûç£Õ^ +¶gIØ9½E>˲*ëY5÷<Y6Dà'@¨ÂU +P'âv 6¾:¹LeDªÌ 20 AÔ:7 IUg4°{k¦I¸(Óº|!ð~Ðî¹åÝX^V.¯Ö,ëL²EÐ!´17-Êþeµ:sOðç¦ÒÔðlÄͳ)åNÜ\û{ k}ÄoÁÜàtÔä¶:ûÝ~à«Méõ:»|k-ºhöþAÜ:äó^²jD×ì¬XòaÑ®l´¹Â$ìRkØRgÎæ$gĬP±ß'TëÃ`T1°.è¿\öðöÉÐæÃµM uºår½Á¼åˬLÎË4õsÎÍë\0ìöÞnBçQ0"øp®B¿Ïá¿rn`Þcdà]Ü2¤Úv'OÅ ¢C~:{G^çZÊCÔ)Çz>}!f¥) e[åöUõ ô?ÁidjrÍçíaæô>Õ*Ã6'Z?Nfiðj÷¹¾ë®»»¹à·àwÚµÞ½41"0@@ +endstream +endobj +157 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +159 0 obj +<< +/Length 2336 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ ´b7 ¨4:Äj7 )£ xÀg3 + 'C)´®i2 ¡ªFRá ªÊ3¬Öë´¹ (PT4Nb)²Êe7!¨Ê 6⸻!´O;Ú-BáÊf7±ú#¡Ôän4â1ÈÞmÆ1åri|E Ê¥")$¨E&Û-À¨8\1Rë@¡mp`0/¢Ìæa3Ey¼în2ó7sÇßðL#!ÊYrS(ÃÖ4ÍÂì0«: í°ìH\á-êR¹ «ªîãÒòæ9Áø°¬k(2¿#@é « 9kûÁÁŰlp@ÙD,SÈþ?pë`Ô¿ �4AHÓ5 SX×6tHâ.;¥hÛ7 Óxß8{¬ì;O3¼ð<QÜm7½/[Úým|HÃ÷!¾³äí´2Ú.!ʾ*9njºèºrcâØ ¯£ìü?Rÿ H¤Äê`#j²±&®}Ç!W.H jÖÅ9ðÚü1#pÜ7ȬxÎÑ+ å¨Ì¼ 8ÎCb:üµY(Àk_×pu] ˲ +BÖo,L¨h5Úã.JïZ/ÌA±Ldl0dHÞ7=LûR2 �z66@;¾á �!HÔÐÖÌ¿wµt¶á^Rèn+÷ä3H,#` 0½míV®a^¤âè£-¥T/" )'îÞ¬/ëâ) +æ½°;bf¯¬ëzî¿°É6¢6i]m¸íéíÛ ³mVçæ-̹æÉxh¼"|haǨxjÜhmÇ6ûÉóêr!Ý2èfQ.P!µÎ°Z)3ý@h<,@Æ2aJ£Ä·½\"KÇ:W(Ý(÷;nhöǸpÛf««ì»>Ó¹z\¡ìn«ÂûÜÆÛ·-Ûz߸<MYiºPp¼Ø\¡_>XÝôê9O( ÁU4@BþpL + �K®L9P\åá(4*Ô¬@hßÉë_GÔ¼ +yYaÀ9(8ï! <hJHÉ{ÊsÌýx@òÔ9PÆbÚ$$vø£*ð8* 0/Ñ2ÐèB$lq1¹n,`PÃCDÁL:#RÂØ1±èáU¢ë|H°Ð@mà\ }@&A # ô#âÂW,I 4@º%BçC]!v]0ÕÕGpä4iaAº÷|\âÂ"""ÀA*# ®|)(¿Y +åizV(räÓ1ôI¹;ßR¼_5ü¥ùÒðr+T¢LHa5&Ô¥ ó8o|éVT[:&(\UBb-`ÜçlåÀiL.^®ô(Vvª^N~WÒ+LÁ# +Ø!RHøËÆ +Z"Évê£ ÈðÈý°³ºxi¡;§-8¸µÐ¼èÆ6ý!Ïò !Ù1ÁÈ-CûP 8:',ÐÂH¡%POåEÆ>TnÆOì¡5aO ²ÖðY®Õá¼åK?¨~1¤0ÅpÒzÉb)Ø÷Ôyxa1MZfc è +¾gÖÚß\d' ÌYêd|õ0göÔ&²e´jDбó(`Ì0fTtvÝÕ%½o$A)#xBY< À×»@¤Ñ£ $úx»" è6êxwCcµ@üQÐbWÄ/ëi0µàoàn¹iEÝ2ÈÄC³?¡¢P"åf +²6N8N{eoU¼ÆâôUÇlý}>F1_F#}° e¿8@:ßÛpï-Ýà á\'6pf¼)àÂ÷$Êj¬¹uTÿ êÓD 9\yÿ|à(Jb%ËæÂð¡à0ÖLg 9as·`¬#ÀvÓZÖ´]À\4ðÆ*s£ÜoC:g bÙh5Tþ @àL5¨º8È6áã0I_Ät®gÝâmkp_ +<([UáVM¹å± ߥèpb¦(2,ju¨s¡@#£Ë§Íg9Qfx¿6cé&åø;#öÇL4Wbx§lÉ ìQC+m2s£Á< �¨¯6ÓÔ´Q 9fé}ja²Ìfu¸zð´ÓS/4Árdzsî9ÕH¨Ý% sW·ù5Õ©a0¼ÅT*Y©Õz´(U9§¨"ç@Ú¿B×tèy§P:HIj;8E\hnúLL|ÿª µiÛI ç_?5|ÔÕå¬Ë-5 Ù´2ó KqÒ¼?édéÊt6.°7ºç`´4A¹ÛìrA´ÓSÌ7*¿Á3/hàÃd ¦H$ízh¢¾aÐ@³ ¯pG£Á]Èf9ù·&Õɬ¶~!8Úl¤~È¥â!ÚasýLò �Src + ÿÕë¶T¥]S ÖqýÃû]¹¥háÄ:Öð÷¿D ¢#ÅÑx¨¹ÎÔsùÜN)p¸®"ˤ +endstream +endobj +160 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +162 0 obj +<< +/Length 2165 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT C ÑØ\1B £zxÔo"RÆá &f +I$â ìe9Í&óq8êm1Zb¡ªUL ãUhÀa#*Wì6;)¼Ìf9N;.Gx½Rk6èE'XRnlP&sd)E)c.À¡l`4lu²íÎ8Ø ãM¤ú4Ø`fâ¸d3ãNÆ#ø e9ÎFÒÖnÐè°R4 E¢[y£pÖT«wé +ÀT4DM] ¼Ú¢¶"£&ù«©2ìÈÏ3ÍD"´3Pþ(Îëþ¥5¨\p"NÉ °B½è9£è:OÐÆ¶Ò7a �ÈÂ2-n3 ãÚ0ºË`A"A £(Ü: £Hè2¡ �¦¢ +h@È&à£d±)Øf¯Îs é:K°í.èØh«ÀÐZδºërà´Kè3½1J dDSPPüK é!G1ÛõDÓ8ª@p,®DëÍ3BÑ´8¤ý±®å0ðp¤qµTAKUEÑÊÇ4Õ%Jt8å/V¯ó¾¥jØrØ/¥¯5A0ÌCPVïHTÕúýTÒcE+KÍôÕ9Gjã&°Á òÍ=K à A|ÇtÅñt7»ó`tÌ©+KÔ¹8Öª +6¨2PZâ3Æã þÔ0Ü×6&Ùµál6[à7Ïhà«éÃã ÁæN& �ÎPh-Æè;*"<h®°ó+aºF÷*»à¾¯öýWÕ¬ä$ÍËázÙ$a7¯æa;±çAC`çÎ0håWa±¢°±ÁHb~ªíækefM¾jå Á¦îø¾a¥¼ûo¡xè{ÐP)#pÞ8-C«¢ùsͼúð@æ;Å»oÈà2È4SáÐÂ3¼' Ä á ä³R*[# �C/Ä|_Ò²{c§Ø< +zÔõo(%ë?rÊúѹ(!5¾÷ã �_¯D¼µ ز÷(ÌÍÃ2#îdà¹Ævß#~9%1¢'c¢tΩ×uêÙ;²ìÈ»µn(»¢¹PYøSëE3XGZéUO*ÂÉ@QN à«à^©xk£$hÂNb(Ü2ðî²í !µø<SRs{où+yÁ\ hÜ3Ç÷âÉÐÊ¢< é±L'äaÏéæ!'Ãå&ÊTëo½Ã Z_ËHÁøÑ+²G+ÁL©µ*^óà_Aåz æQRX 03ºÊÛîíë>·Û%j[¶Yr»¥Ü^JUxé£ÂGî>°iÌÜG¡4pÐqGI@dÓok~M8r +lµDoƶ±£ÄüðW%Á@x Ǫ/BÊãRòO+PZÎ@6$ å¹ú@_:Fjj8)Ôy9,èG3ªv?Ügh1IZ2úk$©zDô=ÉFÈ%¥Sr=j±QQh´ +ÍPgNàñÑ -8Ý3F¬bÁ©,{A/5MÖxéÄuôî=GÊ}<ç¬÷kIFLå&ÁmêV¿§Úÿ_üBM¸Í7Wdº¬ëÆ_Scõ^iÔyuú? ªû«qGçERè%N +©P¥Õ#S«Ñ(Whú£VN0QÕ·õ$^UªÁ¥ªß4¸&j3H¡¤ôÂ)¼ç¯l<8ÔÜ«JE Å¢ÔÅ:kñ +¹âEkkU#J(·Q¶^û~{jõȬ7ÕFºÉWìܽ1Öâ,C**I²îÝÝJìáN[Å£«¼Í2ô+Ö³íõ v%êKÐþ HrSc*9J}SÈ"yÁSóÃÔæñÇÀÝËz:ÆP2FG:<Íê÷IX{¥ò[ÄÂ[Lsm£><¡·î:ëWÖ®ZÇtÜ6Qe#83WDv¹Ý5%r¯M4½NoKaºFÎôw{j.VζXÍSµ²ËÔ&übëôñ-ÝýÑJ2àT²¸´Ä¬Mtæ +ì·óÅÎ9 ¿=Þ²8mÉ2'&hK=§Æ)Ch'é¥bñë×±Áâ@ØûX±[ÇT¾o+52¶ÏµòÑë½t0hÊÓ`hx±íñ-À]%O÷²õVÜéùos>À°fä3)9NÍ4³;kõ¶Æ9òÐÓÍu dVà¨*h¢ÍãÓÑùr§ï +£ô¸Òñ³2ñk4îÔu²íMdX2ÕT³W0Q¬ôsÖûs@d®#¯²åÜä;(Y 1g±·3;]Ó\9Ñ +ÐÑÚKKi¥1§µÜÔÝt¦<®ÈòÄ¢kA´5ººG.ñ༱o0@°pÂ8E +<Ä¿Þ! +endstream +endobj +163 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +165 0 obj +<< +/Length 1446 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡A'¦£1pâ<7B +`PÂ^4Î1pÈk<#A4¦GÑ(À¡Æ¿¼]nãXxÖH7Yd²áÐgaNlapÆÑk +gq¼às4î4XtB%xB.µK �²ñ©4 +Èe3gCÔÆt&{q@{ PI ¶ì7ÒA_ +äâ Ðw7|X(¨*kà +`(*IÅA´Ês9ð̾>TÎê5Ïx®("&¸ 0CÚþ<¯ûVö:Ïx@Ð@ÙÁ°{Èÿ= ÎÀ+âº: /´!:+b( ïè8|Dæ¹îéÂl+¡/R®Òø/Êj»J*Û,»±¬¡ªÊǺ¡@ûcÓ #xÜÍ®h2H¥! SB¼"¬ôÒ*Al»ÊÒ +e- Ð2ú +#)(\â»r¼ +Ö+O{CMÈMæ,«U! Dodd·më~:T Ç58CHÜ9êû¿#8ÊÖpÌ7ChÃMAu1DSJ\Dª¡²çÉÿ '"(Ø2¾ÃpèlÙ1s,Ï`MkWf¼ Ì-§j¸pÈ4uûïXÁ7ðÞ;¸#E~U#Ê4ØéAÖoÃõa?´=c·ey\ÕÏRp°ûbÕµÙbÎ8õäT¬{ÖÕ¨2ÚÁñYe7£hÄ2XÃʤeN]Gä2Í%HpTes ¥Þy&¡@fÍ÷_µÂ2_÷ Ðî/aãs;xé°iR7£Y +»Þ¦6ê·v±pÕf4_µùl[ Ó³mÕy_\˹ní¼b¹ö£Ø´E¬i¹B\ÔXûq¶7ÙR|Cc®òÛ1Ôvô&;òÑÔoU´0ÖÞݶÝ^5¤õü ð²LØÇÎ[ír×%®r®¿ßUTuåpzLÅÀm-ÔÊ2çV¯øn`AÍü0·ÜpQjbp<ÕÞ"k0´%Ð ¨tzñì$ÀàñR/¤Ò8jZX1).àfcOL9Фn@4 0ã4¸9u{ Í%§3G Á8Oi >ÞÃ(t ªÐýÀPKø%! WÆÙHeÑaüC2ûÊú1Åbë!-4äm¸¨ÂHTÊ©`ÔWÑ,+% «P(W +,@ +A¨(¡P) +bMåæQB$ IÙ ÇX®B¿"Ù9Æ@ÉC,f!ùNIÚ"§hX K2µófmM¹¹T¦øà Ï$$ÒnN3¡âÍGÏv' ]3ChHaá4#£ç6ºØÒ¬:ոôñD3tØÏ@ÚV³DA°&VÆ«<úÌæzPñ ´7PÎg¬D!° äÃHdbt) Ϊ4Cx£¨2R ÑI'å^qÎZI:RB2Nv$êOPªxZ%@ ÆÚ¡T@;¼7Á¬'YÌÆP1©Ó°#änéXr©´î§ÏPô¥a¬u{ÂCei£ÈêMB +endstream +endobj +166 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +169 0 obj +<< +/Length 2429 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT C ÑØ\1B £zxÔo"M&`¡A²T"ÒÈÊa5ÍìRT5J©á¼j±KKÝv¿a± 'C n2&ÓI°ón¸A +ªÔý`±mVÂ鸲rÑ îe4yØÊrµúP'¾êuv2!¤Ï4¦B Ìàe1MØQºÌïwçNÇäy:á®O)£iØa3û|â©$TñØÊ}R)7×öûþ9£)°Ø$ðÐÏí¸¯-*øü=ÏÈ Ã8®4 Ðæª +6º©*ËnÓ«è@'¢ºÀ, +h* +BHæ(Ø`"¬bFFªD$b¢JÛÇ ¨§\)Áv!d(æ1CHàê ãpR¡¨¨(©(h"Q¬ÐJ+¢F* i#HpH`Èì°¨4¡ +£ÊB3#aÀf $ðô½AjäI±DUEÓüÅ2Pht8Æ¢¤<Ü4IÄü è9®Hê³OÁ¦1Ë£ ÂÔu¦ÔÃxä62àÝ]Ä7XSYX¶ à4#Ò1#`A^µAr>UYWVMr0Øc(ð:£u¥.xÍ/¨\o£« ®àUDD->ÒÊ:LHØh«Ñ,ª¹Å1\Z!à3¥QÝNÓè]H[ÕhéW¡v#Abè!æÏTíF§(Ø2·Hèa»K*JÒĵa^ +&¹à÷Íü6ÀnÈÒøÌªASácEÄ?¹¦lj÷ø@Â×ëïèØ×3æm -^»nc¨Ú±[µª:ÊÚå¯c· �Äò®,n(Çb4ÆKÃqÅíÄß3´¾Ü'Ððx"6$Âð½sì³yò%ÂA \ ¨k9«T9ä]I3)8h©`ÁÌ/\rûÈÊýIÙà¥ÕCüxQ=êýî··Ï» ln¹\ïÅ>Lðî2Ý;§éõO£cR]ú,A¼8.ÕÞÓ*tÒg´×älLÿ<¦ðÊ[Öe-å/ë\mJ¯¥½7,ÓÒ[×jª½Öfïsð[E±¾h(ÙÕÈdv±÷>ºü ~¡Ñû¿¼±Ã t íÍw?¥-JyQsª1~ÃGÊùÖ´ïð?àÜÈYN0¦ ¼ê×ä ¡$ÕðܵBag¤3¹XÄ Ó*EY£=År÷SïQÌ3c^ºbCín-èàzÑZkUnPA¤jµ¼è-# fs«ô$h#¤a!j°2 @òqÖºµ »Æñ av @`b[/_¥6>XÞ#afÊ;;@pUXD£{Mb½øþC¬Q9¦!#ÓÓ íKYoeÓxÐuÝ6ÐÍ`Ùz=|A �³N)/ÈM{ Ùç`A?¨eñ(9O&( As*z4%%û ôp ]jÇE,J£,0.)Æú"¾~Fw²_e,§V²¦!5dt³kÓ>ÄÖ½C"rj/aÆ(Ö1ctpT¹ÙBr 3Á|wsQH®CÃpüäÌix2¤YzÀ§9I)û®&ªMÉÓª¶"¯\i°Z½|Ò¨6ó?eªuº\¼(ë©wa0'pÏ}LÄÆ`ºÊNßXùfm@¥µ+3gx¢ô6iÞÝ«À)ÃÎKM´5jÐÕ+uÕa"øgX!¤× +Rãj®§W³Výlo +ªµY°µae¥öô»9·EL>Ë;GlDfFÈéÚ" =ÅT¶sNá«EñÞ¨kõ#UXSd̸ëWc½`¬SÓ_ɪ¶mbúGôÒÇÐÚW=YnfaiW´|¶Kö?VHaJáY&®eWc1 gïͺ,CpËQaIpÈÌ9ðîð"}3UáíµeÆY¥SWYÑiC«×Ë[ã±bK@ÌjÖ_åÅ>kqÈn ÷ø¶µÇ¾r¦ÔË-WËZy,XÙv¬à²ZúÕ æ´X4à6v¾lnºf!´7ç 5zxßEú:Ó<ä/¡Î%àÒÍUÍiËÑ»ÔÙL ¡ue7yÌádÚvéY.(YQ!! ÉLñSx¶þÃàÂkgO¹£eåôûJÌV5ú~ Ê©QZË^!8)¿`§41A{´me>AFëÝ¡|!+¡A>Þ¥Ýh6mM£²6RÙ³=)_ñUi;WOÝ¥V®kÏFÛB[oWe/xVRä®n ä®A8a쨮g&éÆÇ¹mj#¡>Ý·Hråºg¹ÚÖaé]ïC5ÜCìÌLõK¡v·ð8¾ÊCwº|{lrq¢·{aªäÔÔ,1{X!L&8wÆ CÇTÙ{7aMû±tÖ@!,vìÕÛòi\íËÚså×ê;²f£l¤âîzaЯ}'WbçÕm© áìVãÅj%´Øp¡íAãàsK?i[5Û$ËI4ºíýZ úÉpæ´<_tIw[MÃBHØ5!{e7í×ê½?Ù:ÁÜET¹ ]L`ê e8]ÂAúýrHN0WáÐ@¿Â+8`àô +ªÒÔG �!´þ ¾ +=Å,;T&Þ(R$X eD*/ücsª CpJ +LEb +endstream +endobj +170 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +172 0 obj +<< +/Length 2182 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b0¤Ñ¸¸b4áÂ4NHÅrùTT)I9 ©< #1ApPS0L¢ ÌAc/¥EªÙn. +E4Z8*'N Ç*Õp`4Á]¶ÞT5A +ªmB»_fìâyHjV#Þó{¾ßìf ±8º6IÌØuEýîüÁØFwKµâõ|¿`Íu«ãe²Y4D$I¢/¯rlVBI!ÉIàÌn§¶®³pì·b#ìü?B#¾âMRÀ@Ï»òý¿¡¨hÀ-»°Ý0/¬%Áll÷«© ¨ò0øöÁ®;LøÄí+०îS Á°±Ràá2ë·.ÒÍÄSÁ¦±«æ²¬ëLtLeÀpãÂIÒ+EÏ!9âBÁ¨q*CnÐ""°³½Ò\×63#¦Íw03àÈòJ \!º²)б|Lòh:#`Ò1½ Jü2*ô7ô0Ëðè4/c0ßZuLSC\ × �@¡5 +*Rm%UR´½3MÚTýª¦A\ÿ(VâjòX+òÐ*¶ ¡]×µýka 6%6¾ Ã%Ë(]A°j 2p¥Û±{P3kSë{ÀA_XÜ7ßwõr ÔBÔhÍ#U="øRlÕ**à#(åM Ã.)7=ECä×sâe XVC-[×8_kðëæcNj2Xõb÷ehAgÚ9Å©AÚá\ÂÕ3+Ä· �d5At¨neIEáa^w¨Ó{éwÕãAÆÆ¡a8^Tiûn£©à"ÿoÜó¯ØÝkÆíÚln9ÑCT:äÌlööYµ +c ä:cX:çô¹÷UTè][WÖ5k¤W\0}w`5ë}¦«dëÖ¹Ðç[ ìØoWÞÒ½o_Øö}®½Û ¨lû7{5x¡bébÚgJ +®SÄáD`òy>ÿÝ£ra1·öåÚh sO!å;^tJÒ2c éÜZÁ¤9<rvÏT2UJÏóCx-±g¢³³_@¿h8òA 00èÌ d0 +ªX.Ê[8(R¡0¾H?a`¬ò¸¶ð+Ç Ë2@xd! 6ø{ÃAZpL¦ÂgMzeÁ´"PÌC¨lÐî(²8Ý +"¸ h öE¶³X´:14 ÃCuO%~»Fmepù99jÁ ÐrõÂËhfi¦F¥$Tî¡HD Úe!®'Â'Ç #ûyURAÂÉ +ô"ã[2*IÉ2®ä{ì¡ÎK@Þl6f ;ðää¹pÖo1PÊÅYÅDÕ4ãSr<4«ù]âEl©ÝZĨP_°è °^CHl1õtFæ TTI®-<`éC +;Úetë 94!æT^WÁÖLÀÞÁlÞqÀ1/Òü׳ÔJ$«Ó*§ü¶ AÒPjBìBnPÃ@hÞKUS`0àCò¯½@óUæSn Ö#JyÛUSòWH1«h³¦Üå ³zD8ÙK»Rðå_¼pay~5 jðÎWÀrLÓ¦£ê&(ÌäÏÔhjB M +/`8_ +$*0Oq %ú¼¯Vaµ[/\4lhÍD£rµ-³ d¥m- Ù6°EaPÖÐl«YS&«U´_ +Ê«ZLÎRR³B¥_#¢;f¬ã} +d(Rà ôµ·VØevnøe¼5VÈåk[eb/sNK«ûfRôð\ +' j ++\ØUÁÂ1Ò°Q¼ÙFeZJUw / `¬Bî ÒKåu-}×¶m´;)»Æbê\[kÃ8óD0øÂ ©rÃKmX 09ÒO"HF³¼áÀÊ"õù¿p 8dhN¡Ü. jB0%\¸J³gPy.5³Ö"Z+Ii³F¹*æ,ÑZ×*#EçÍh«Õ{¨c¯ªaZeÜ÷oÔu$téCW&Uhg ÆoÈÚj)¼1§LB¥OçíA 4jJG¨U×[å*£%TV·Ó?GhüÀ½×Lë½/¯ZDã4®tåÎÅ¿L¡eEÎ `kBT 7$¸4§éF̶7bðì¬*ô_V»B f#ØO H"àΦh¼1ë¼·hO Öàã#ýt.xúC8kQÃÌÒ Á¤6 ½¸ZÜ"Hû>JúBëO ll;é\S!Ëû«c»ÂÁ»øM è)ãb!Ç[}Û7å^UݳÛõúªºàÞËÝygõÑ9¦Æöröh²Ù/ÅÙ_IÉËUh U·4U5óDåÍÔ²ûIåL®¤ +endstream +endobj +173 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +175 0 obj +<< +/Length 2273 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4'EÒ¡* ¡AhÄ`.¤bѸ¸b4ÊxÀaJ§b1|¤O&IÓ±¨Ôb9æã îi:ØÂr4LFÃ(æt9Íx[¹ó{7.×ÑÌË3ÄÁAÞrOiÃ,Ñ(Àªtph3¡FÆ#Ul(*M¦\Ñ8ÊwæÓ »!ßpf[¡ÔäyÌfy¼ØbêËp¤¨j¦kGý¸n8ØV¦¦C)JKfÒárº/&©³²Í K (È;° Ò7ìÛ:Ï´-JÓº# �¢Ûªê¾ @çcHì2»në¾ð©ïa<ïKlöâ®$bv#!Ââ¹®«»¾/ÌÂ0ÌCÆ ,rõ2kÈÞ:®¬³0Í3ó@Ñ40ÊÔ5Pìk¶QÔ$ëP&nÍ +l¸Ò3F.óÀÈêJhp!Âa«tN*NC Ú!À£ò:OÊ8¤¡t"ª©(¥8E ¸¨4 ,ÐÊÂ7oÍRý +<ºìÓ¦¿#è˰Ã(è!uALÐ;ª¡BÄ2ÁÒT¢ÿKØBcA£Ì¡Vc×´5cºn(@10£çãpÊÉ.l(Þ3V-ªApgÄ kF«É!³Ãcü»Á «x^êèb©£a q6Ón-B/b@) +b+èjÄCmZ'=p"¢0*¦IeRwKc UbÈ! âfå9Xb*á@e¤ZR[Ô©À¦$ "2 jz¬!¸Q£ªÒw·æ½8QÖzÄ â(´ê©Øf¶{[#©ß® Ö2BÓánò£êÎ;R P,jÓv¿OèµÞÜUUÅWUCþ1¬{öºÕãÈ2]ïÐÞÃ8l(æ<®Z=w5è9Ø; +#HA/Àì4r¦ bfsmþÛöÌb½ÚøÃ°Jæ½.Öãs]´ÇÔ9¿$WU^;Ö.7~ðMàiOÜÃS¦^ÌÑØ b7tLÀ/ yëм¯df±]À¸¼mÏÐmsf]Ïw@§x5ͱeª2|ªÃ*viâ@Ä ÇB ÁS¹Î±%H*ÕÒ@s^ì\*Ê¿¡òè\¡ÔËDt"e±]ã¤Ø¸¸¹¿W ^¹¯R'À£$ɼä©1¦8^Q}y¾¤ºXVh7¹ÈjÂ2èܾ@îmAf°ÚÏÌaÁ\¿w±ÓrÍo.at@îNav3áÍ;4Q|OaË®2ö@iIrA:¡ +¤]t² ª8<æChD !¼@%ÞeXeWAbÂé +ý®M7¢YfÀàú¯*ùJu ¥u׬¯MêÅ@ÿ£àXO».ª»pdp¡AÉÐyA¤ÕtáRl͹ºñ$àÁÐ,ÎZ*¨¼ ¤vºÃf2¯s)rÉû8¬¯Iê+$!B <¥¡Þ; »èÎBiN3F¥` N¬ºôê4I3æ¦#9KeÖ¡$ jCÉy+ +gT°e +É# óº©'*«UêÍ[Oõul2 ì/õLåî¾ÈA_²Å(ôäÂË aAo=w<óA)Ãò,ë0x hiù&ðð¤ äèoêùX&) ì#£nk9øR¡2y^ÍÓ_q9\vþÔ`D-¼ãÓun@_ !P À×»rwAQØK<Çê¨SÍø hFEc¦²Ç �¼A0ÁÄ:úØq£¥p Óð:âðòä£0qÕE¢ªÃ`H³l4)HíbuWî!Ð �={¦R.ÕP j[-D+vâÕ:ªrØ6ÅK®:O +ç]½¨ê"æ¸ì½ ±|ÝITÃÔ°-sVip3Þ2ÙÐK_i;W ÀCèæ¤¯Ä¾(Ht¾ñäíîbÏLÑcaÙntÕF÷pçUBvá]*L¶2AQÐwJ"eba"n÷7 Qïä¥^¬¥DdaJU÷xÝ1u6Á¸>½\ËNqðd·ål,tNÑ¡£G¸øVg^.嬹&²ü¬µ9ÙBiª.ºPȧLòåñöp¾a7"X¼¶3º'°hïäêÉRqÆi#wMQ5¸K3 gYjÀ-Ý( EØVÚ9 ÖBeÍiûR¬ZM*nT²-H©!(ó0e²7Á$[æÜ"àëU@F4¥ +yÈGWÁÓÐCsçý_CDj¾0¥·±vÙáe°(âTùÎÚ% ×6lªÂBÅÈeGÆôB{D÷±#dl¤Àø3T3À8º Ú8 ž`RSBB Ôܾ*¨C>o{ïNàBwùße«ð~ñÀ·k{ïÄd«p`áBÀ ý%TµÎ?½A¯äܤöC]Ê®ïsÒ+.þ$C®d'`¦<íb2¢@@ +endstream +endobj +176 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +178 0 obj +<< +/Length 1595 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AhÄl.!Bѽ@j7 %é4 +E¡@c!NSìRT5Jé¢á¸ÞZFñ *Áb²YÄcIàÊd"Nf»uÂTMoåRI8¨ 7NG"¼ÈeÆÜAY +ÝvgÀYD+aävÃÆ Ý?" +½×/Ú¨æz(NqÚe-FC¥¿D-\î·}Aô@O#Ê "©©µF2ñ¤SÍâò°ñ¬l2ñò¤µ±§¿8ÅÃ*¨Êx*èP"-ä4 Ò7ÁJ£ ¢2H¥! R,<кhà@¨\>É3p¾&OºÂ* (@ç(â2 ¯¤¼Â¢ð/îôî;Ñ# Æ$DúÃÓPc ä:c êÖ,ð`è0#pæK#0Þ9 ®7Ä7£¤Ë2 ãË2ÃHØ2 ÒÈ«ÊA@é&*Êܯ8³7àf«Á3¢®Oh¬IQ:¸û/ëBÔ¶NÐð¥Oê3Çt0Q1A Ò=EÃxÌW{ÆuC¨*UcQ;nè©RÈDI+Âô¾7k'J©,F9ζï +)6ª4PKͯ/ì +ñ,]¡SµTpU±U^4V5ËEÍCÜ13Øñmp9XhA8Îrä·L¸½î2#5 È^,;#`ë^×ö Kb¨Êé@àùz5³ÄdwÝмæIÝd:Å]aÒî,Øn+cuc8öwäs^@#"`§¦å¸¶£¥ Ã|ÕªjÌ>°ÅÜÏ<ªÝV¹ ;B[!C2ͳ¬þ}<ßÖV ;]R¼WâÁqjÙspÜÂNbàP.;ýPÉ®ÝUظê7J3V2ÛÒÖeT\¦ _[÷WñOp^=Bà[Û8ϼÔ*t=¼t:Ek¥}E7ÈNÓòæ¨è¡DurðØ6 ã¼²3h¦x§Y3rÿYåcuê·/è+Ñݰ¡ù¦&Çà¸_Ià7*@àÜëCK ÎÒ Å.s*äy»³uN`,?ÅP©pPåseMIyÑH.m $+ÎÂPPpNlÌ]4è\á¿[0¥u +! +¥EWðÞn.ÕÉ1äæáy£6ëÎ � Á¤ÃÅI!0ÑÀöSA �sE°ýLE¦lèTàâ ` +t;Mé 3 ÁÒøyÆ/'ÿä\1ÒA@ c rÁ R ÀÄ ÂÈxv !É0i+Ñ[)tÝeôKé FÄ ¢ì§"89t{㬮L±4Lx=$fäéHÊØîÈ!Â2Ò[h Á°93½ sa9¤¶%ôD¸Ò MLÖ%C=(â Òb3üÂôL½6âIÊf(%ö $Öê?"¢QH!dø+ rÖÄ-iEøL@å-&Q¦èS9¢i²67Êb j4MF²_Ê*Uå=¤1ÎDÀ /Ò¨m21R²ùKjÕ1Ut0¤éê_£§IJ» ªû Na¸3:9Z${À¨eöUÖÀPÃ(e uÆÕs$Ml1%R]ËÚ¤ú_[í}ì}Xç)b%B&êgYI¡b(s PòÌ{E ÔÞ²ìôÒíUøp)ºÆÔʱ@lE´eöuÙBú +)Jj:ÊYM½AD"Ïpc%Âe¬æ\è²H + +endstream +endobj +179 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +181 0 obj +<< +/Length 1428 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4N¥BT # C ÑÀ\4HÅ£qpÄi1*%£ &f +Ó«°*p0<XÈÓ±½´`(#MÆSØ 3M&éÈÊ)¡ÑAQ:`¸j7Öiv!k7Z+! °p1 + +f ÈÒn3Æy°ÂtÒ°H!PU[ÆÌ²,hÇ,1 ó¯E¤Ój ú¬·_{+6FÓmç¥sBd4Íz¼»a¯Øy6M<d3ÛîH׳(ÇÃ:unæ#fó|u7N×7ÒþâNó±¹;Ì6ìË6γíÄ:Ã2è£ÀÆ2£$2î8Í*+ð2¸:A@7 Þ9Ü1ó˽ +.ÌC(Û=£tP Ìb2Cñ2hZË9PDtÌ$Y"m<0¯ûY%;îd®ÉÑ»½!@0æ: 8Ñ$ÆÉîtF6áÌL2¼^ßAãó:8ñ¬ìñÌ®khðLª2´p¸@2 ã(ç7Hp¬D&ÇO4xq> Þ7hÂ7/pÞ6ÕÃpÈ9Ôc1tcG9ás4# Â8x@ÎC îν«£ª9W):¾Ô¶¶Ê´Õ6MÔ97Ëðç üîÑ5õE_[1 n«xª¹Ê1È÷ A§j¹/ix¹B¹nÛójýÆ!ÙcÙ6¤gvÀâÁEWòf"[èP(3ÃtR8£.R¼£`ÙDne±3b*ØÌOEÍ.x0Âù wwã8@fµªa¸m?düS,иÙKñ¥Ý3¬§PÌ»Kº\Ê£mÏ÷ýÉp¸çMÃCpÓª]5²º2s5ͰÕ*öÍõjÑrn;=¤rÄ3öù\mö½uøޯ`+¤¤Ä2MWVÕõ'\bímÌq3FÑUUcumíOIªã±>oLÕëuI/-¢ësåÔS!E:/dn®ËSøðÈÒ¿_Oz0÷þÁ]tóI3^´×©ÂÄÙîµÖ áÌ;hìücs+Ä´¼=L|ô>Î&4ðùËOÁ W¼Ç@Ü£ßTnø°jâ̹¹ ,i"ÄR¡x? öµf2ÑÜshìðêCxfEGÄ:¯ÈHûªÖ|ªòlV! Øræð]£¦ÔWpãÌ?i6§Þ¸âCíJIE"ìb©K �gye¡Ñ$b:RHi`*ÈÜ +GÊÁZ|0.bèØT E#cØ2$P È$ÆéÙ +U! ì¡F¦Y0 ²9HÚPf ð=جC h=ª9£ÚLÞG¹#$Ì(40ÅI ær Ñ\Ȳ#HL½RþJLXu&¤Sm $S'CBH9?àè^ ÄöcØ ÔÚq ¸ Ë#ܳ1JlÏιìÐZàêÙü_åÑÄlÌÇ +ü-¡6{Æ%ø×Pt&;Mq2PÒ]A6#RªF *sH0\FAr9q¦6VÞQèf'kxº&ÝB5!£Ñä))SA M1ðµ}çÎBà(¦f@@ÀQ +endstream +endobj +182 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +184 0 obj +<< +/Length 2156 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ÆIÓQ¸q¡I0(a/Lç¸d8G PF")8q¹m"eÔM.-r°E1X kÉó4]ØS-\1´ÛbäÜo8Í'<%b¢ÐVÂ6Õk9jô¼a$*MB¡äàe2LÂÐäu1C ßu#o¤ëù@{ PI ´b.édL¸Â +äò@l)óºB¤ô2oÆ +SÚ̸( P$ +âsì4ãpÈ'Â#(å +¾@' +b 'nðÐ$ÎhÂ7p @Íè`÷3Kà !Ä"îÔ¹Â0Ò6´1Ãjôj& +ÌvæBêæãl} HQ| «ñø>O£ì7 £ñ'9²ÊÒ,³A.ºútÍEHñ!Æä$ICdx9Jqt3+Àñ¬ß/Ì#Å<P4ÛO³ý* # ÙAHÃ}-ÁT<ãDÒt/FMR<oHÉE*4#`4ÍG¤u?I¥-LO1C>s6:£IMFo|*Ãâ¤ã@ã0Ì9£¥=8v`gNQøÊ"R4ãu®áÉo?UÁkM6@a>@)/ï¼È:©sÍtå³fâÈ ` bX@OÃ0Ü$ ãxÖ.8,`Am +ð®(^ëþ={_n1s ¸ MuGb Ê6$'#mx¯+Îô½on¡®»;Kð"Ñb¨!/;©² fÆ Áª¶®Ë!¢Ã6³0p³4-ûâ2cä4¥È75¬2)hhÙ±H«a¨¶ÈÂÖ£ÊãÚQâ Ð2²¡{³Î©è[Ù_YNì»nïAî|bla¨n%Zßrªøb+i»6IØê9qÊê 1HAÜÃxä6ßÛ{¦4_ÝØæIî@@1>9.nf駨P7ú©ÿsUÕ¯÷:pú37Xɸ 2¾ª(o:Õ ÑÎQ×4íÚÊ#mÊ`ØÃ;Ë áá´>T$tÃx vÑÙ¾GÀâHrïþªØ PF)N4PhÏA1rO¥5¹RrT»: ÁÐ3&[Wkimmµ·¾yáB +N£Sð~ý?ð ºB@ Ë11Q ljÁfa¼gsð ç.¹´âÛ©MF|§J{\©n +a¤Æóvlo¾)ºh£ÎdHÑݾG`ø ;*ÐêâjO:A2¥fzWÁ6!Q>EGâs5A7< é_XPÊI§|÷ß±:.ÍÄEá(V d~(òyØ171ö8#PµB{ãP,á0f1#K æb+è|#r¤*hÒFG(±ÔLeªß°elä2ÌàS4"tPrUÓ¥¤j0uE¹rÁøCÜùæ±²MphF¡Z¾^)!$))fÓÑ5ÏÅ Ã5#{<çÂ+¼yWX¯ )xÅww!7wñikº®Ø6¿§É_üPH©#¤yrUA99hI(>à4ÊIM*Dª4¡»Ù e¯[Ê*/(¾ Ê`Ì:3FÐTÇ&.N¹ +&}¢êiÍT×5ÐTÙrýMøO8ªDµNï[§mpõʾO##=,?3îSÐJµ[N0&¡f=hü3tü6Hóxu êJ ×â"5²ñ|'`ÂH á\$T>$RÀçÃ?ëà1 Wc}BÎÃX³ÁÏÆ²ÏF(LõWòÐF<m iT© RÐAI%&'6¡ÉiG©Á#ZS¥Ô§¬WÀlgë5IºèÖ¡4+Dp%s LÆê=ï-³!j(5£Ç´âÓ°ñhÂD,:IN¬û¾ÇÂgÛA/ ½²\º©z ;nÁ¤1¼öÎ¥Õ´õÃIÐòU£ 'Ú,;@ÎjÓ;Êx§>u¥ÖEÕLÅXÚÃ+÷µ7"ÀØî`e¯sDÛyª +eÊïH9zWKBnOÉSºî8â¾Ð,öN¿ºTø"û¶E'RÉ`dWÊÑ2¨ïÁ(ûhSèå{e(v¶Ö gkú£Ñ>Eh·BJ-¨ÌV|7ÓÚWPß,¢©² �áI£_úô'þÃX ÒNà7g ÿ±,JÕ÷_Èý9TzAfÙÄewîùÎ)h¶0lï¼W`'æe¸×ðeuá(Ñ3ÚòU8g©ßH1 `ä«ã}]n\+á¶ÄlåDµIÀîÌëbfü ´N¾L«®bϤ/äË¥Êhwp÷9Ä[Û~_} +& u¾üãsÎ}Ð(HDa¾í)û¥1å¶Bî®GÆ@QZ%æî³àµv9¬±±o¾²pÇ*§¡_¼ä¬H + +endstream +endobj +185 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +188 0 obj +<< +/Length 3353 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @4Î¥BT # C ÑÀ\4 FâáÔo"KF +LÌ(!ËäRqL"¤Ò0jÍæãÐÂn: '1Ôæe2¡ªFÒa ¡â¨0Éë ©=xPh$Ý.Æã ©¼XÒ¨6Å+ºun»^Ä{Öjï.æCav ;¦áÓ ¥BèÍ^TõyIÂÃc²Ùí6»m¼H Îëw¼ì¯Øg#CÒAQ¹%Z®ukûÏ8Ï0¬;F¥M0hå5B£&دrÝ·®(ÞÙ Ò0xÎ÷¡la»¤ç.¦Ê¶Ê9ã¨äÎ Á �@7ÆÂþâðäÛ/lT¾¯ì(;C¨Ê «òò1Iãæ9#8ÜÀBN+ÁÀ/zøI 2..þ³lëÜ£Ìp [33@A +L2·£k)£0ß#Çê9£éIíá+I2í7ÁÅ ¦îÊ%ÏȨËã(è'4·¢pÃ?@¸ÒÇ9MM>Ö FØGqÕ)KN,Z6ÔOPµêýJ: +cì2Õum^2Ö5kb¹*f*(Û=5 +G_«ã0êÎKÌRä©×3º7d[\ý`áCÚ£¤smÓ RhË +Ce>³òð½A¡ �ê3ØÛ0¯2í¯AÊG#S èØ6¸ä6ã9$¹Cã#8æ÷"sÅȵåECT¿¯@3UxÝkêuft9Æ"A& t¡)£g+Ë2ØÉIaËæ!P /ÐôM#¯op¨?]+ˤ'IÌ(5ª}Áv}QUjµuaYV+EnUÆÆ?ó-`Ì KÌ=ÎTÝÐYö§j¼±Êt01\W½Fs_UÙw.Ãne5{)áÅÎÉÅ +þ'êó Ã;k/eãcƧ¬ÙAÃ$V1CHáv®~籬Â: ÙåxàÞ°A>'¸ÓS°`Y£¡*Cmoyë¨V`âê±GÖTPuC±è5¦6£Ã£:8ÉWê_¸e=© ½ +ph_УÍl)±øBD_´lÊ@74.ÀXwFá¡ +%ªûZ¬<co9¾GÌú b-é¾òþ£Ã$jADÈ|N$J8Ñ5äa(j̸¨Â¢Ü$GPû?AÁptÐà �¸lpU 2:îÖÛu6aÁTÉcf X¼¾è:ûàû$PJ +=g No`O¬á¶¸"${HiKñ?³Ëëc̼#@ÑW»ÊDëñ¾¶ÀØ¥º__ÌG´úà´f7!7Ý&$´¿ ¼;I¡P²CM7a×*G1ÍõðtÝÛª2ÓN 4¤Ãk`nY[FjQ!Vn°ù®ÄßciJö:ÇÙ 7L¹²rèÒÛ ¬¹=¦dú«7g(å5x +æ;ÿO3â]º°Ç?Ãl¬h%ñ¦´ù{e0 jéú)3(Ý ;6i¹ÙT';tk87%´tò$DÌ(¯¸GDbÂ÷*êíf/Éø¨r`Ó0rjäùTN}·§ðN_*ßcoy®½3ÒzQQ ´%§àÛj5¡íÅ!DZÎ\Tή<ÐP¡[¬oñ¿©_W;t¤lb$¾«°qʤ7;d¶\_ ®fz0¨\òÀe Ò GMmêüu«Ij9¯l+Z*gÕÝ+ÅÎçÝòx q0\Eç°9_5Æi¡lêZxÐk¯iìeu`³ÖiAp6¤)O×&bØ6St¼Í ` dI|õ£ ÆKù|]½`Å;NKCXpid¥Aj'¶Êa s0V`<V#Y¹³ Ü0âSÊËë¯3VÂÐÔà ÎÔ*bXÂ'¨¤ùFgyÔ»7m sq/Mehõ/¯0CÁ7>ɪÖÍS2øÅï $ÙPO«/éüGR%l Ì·°¼TÑp%Õêkþ~ÓÝAÂSx^4{-ØÙêR)YõÎ;Åw6¨ßTYa_+çxÌ76ºô£8r ÈÄÌ¥ãeKù 9 ºY/½5ßU|È:ÿS¨+¤} Qü?a40EÌ6cÇLjÑÒ»(Øl7×A.9®ôÏ£a{f®r@¨·º-æ":6HX9¿|[T6"OÓÓ¯êøa{/0 õ@òªr �Z,ÒTD÷Ý®æh:¿yLaD·7rúÏ? ׿ø£*q³f×ËɽüŦ_& +XÏdrÁ¸5¡ÞíZlpM!ãNVí-ÞÜ@~ ÷>`¨~ � yzjæZf,~Bt²IC^5üÅx?bL 1âêÿêÚäú;¶òÎÞF¯¥4w¯<ùº%``¥0ÓtÜ·B̶mË7ÂmåÖ»7\ìg8T êR¤ï¸ÏÑ¥ÓÖp2ûë.A¶N°²ØÏNqÎVºªÊâñ,,ØzÈMß`& ùÇÈQ¢V)>ÝBü8w«ösÖÙUÚ¦& +Êp4µÂÛîîMÚz¹¡¶iÏôþ½+ä¿p(ÓU ¶f2Ô0Û®hf¯Ï lKPÎKmk>±/*l¥¤0fìQ(ȸ³«ì*¾´Dq hqe>u LqïDv+räsMW®½e·Â¼î¶ÿ @¸g^¸Ç&[NÜLp&/R+n?k¢¨xc" �¼)¢×©àå°læÖôFtô¬ãðB¾*ÜÎä b/bÌøÇ-YЦïðªü®¬#L#ðÿRýåíjñ®°ðb2ÀjDoÜDö±h,¿|KþÆM¬hüÐt¢¦+ØyÌí0ô0àrîÞ"%ó¯öÃÖ*O:â ã&¾Éï°¨ï±"¹D@tð´ô*ÓÍäÎí°Êö 2ÏlúÏäð= +æ +'Y VñnSoFôîàò0 Ä®Cfx°èñù¾6KüÛj5pÝ·Â6Àa¥Êÿ1pQ gQ¤òÉ+öïMcÂòû±ü#jÂbC¼MK@üÇJ)êÆMQâí£åѨAnæßF*Ù§½F²zMMÒXÅpã +Éáäs +ÚÞ°â}&òx`f#dòél2ÒÅùl²éª¸¤ÊÊ0ê&ºG±%&RcòX½K!ïâ¾mìæ0"nj nIñF0QøÑÏ(ç$>(FhÐìiqðòñ¼/ÀÓD¸7j -ãzèù+ÐDÇ¢ÇëØân'.2Rz,®öÀÌEm:ÁÂÔ8ÃÑøp@Ý#@æÄ¦§/²É m'ÖùÀð{:¾:VNv/ãz ].iä)29k!!r{s ÎdApí¬ð±o2èÀeIQÀ_² +ÒNíåëªmÑ¢&.c)BBj.ß$¼dÊ/´£äÊìÄ ì`É(þvNªis ì8#÷J �I ¨nD¥³E³ !²tjÂâótý²Xµg ZÐz¶0ú@])r?kvrÐ@XÑgî¹KEgÒ¢NK¬þë*w¥ÖºEÞFNû@ÌA(Ä}3ØG4¢Âù¨ÄÒ8hìàü/Nl/ôIï14òÌMS,/ó ì1éÕ@l§2¾Ã¬>Ä32}s\2ÍD÷hRh@^ÜéÅø.@à .66ä>>tO9à7äx¥Áîäÿl²-" +endstream +endobj +189 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +191 0 obj +<< +/Length 3042 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´b0B £qpÄi2*&³@P f QÒl²6!Ìèr4âIÎÂo7 Èt¼ÙCuÆ 1LÆc)ÈY²§©§$d¶OF\}Çy:Nxó}Åd·\.WC¤¨jÓª£]jºp½Ì¹öưã)1¥È[m÷ÝßÍæÓi¿ +d4MûÞxÝ#~èÈuÉös`$tôµÛ ¥«C6òÁ ä#p4Á Òë-£@Þ:Ä·9/##ÊZ?pl«"Ú¶`àÔË8Ë ¢2 ÄáU% ²~2hÊ70lÂ< ( +âx¤"ÑÀZGÁ2¡(â5>©{þÆ£9³K#ß1,[zâкÈÄ<Ä-|GÇ b ÁÂ= ÅêìeFÑÂÏ T}j³ Ë#I �Þ9l¨4îÚLDÉ7CHì¿°ëRÙ43p*¾äÐë|j´7ós 0Èæ6»CcßQB0b DÈ d!0?³© 8<4.{v"O ä.àSjÇj`+Ûô¸Ù¶ªmà ´0õkÞø¹"0"B¾! +¢0 +x)¢&³´:²¬õÏÒ¦KJeXÜõqÆp0<oÑvȪf4ù2+³4KS3Í!ÖÃÚ¹lNXX£}|QÕ V¶KÂ3õD +' ì8Ý®3 F¥¹,®Ã«ª²CÐÑDèÖö¦qöiYà7ÝÂg +î#é˰*äySèjÊn-ærý&úé¯F Ò:- ϨT&4ir/(Öá9I|ÝM»;z¼ý Æ49.©;Ó¸Ä;ïàò<ÏBÉ Ãí.5§Fà}+¤8O òÌ´ ÃܹôÙ#ÍÆ¦²|íE-î»·VðÉY:jo é¡=²ª~W¥k¬ùÕ:Æ~æÜ3BP +AÀ>ÄÁ +êvÊe9vF´Ì;ãO½&"Ö Ì+ع¶ÒcC2«HÆaýÌu´E1è0 +iÛ;¯Dñ=CvõÒ{pëíØ/öhèÜ{¥gLò:·ZáWÊ'®ÊCçJÒ³ Øß- �»j90ªÑB@#d|a¥¸'2òµ+QÍdRdìBnE!$2ÿ?Ý!<ÿKtnÏÌ@ESÙ8v*ÖEälKJF.>"àÛx&Bó bYn(Êø¦Ï]LVò¥¡`\ÁÁLt9¥,X¥Ò:I!äPt¼2DÌÖtI ìË +̸7p �iK»tîswÅåà|#¹Ö¸gtjNaî§Ñ9J"oï;EF¸÷´Ìça\ =EBnuçÏAG`9ÂMÚ0ºE6§TøsM77Mk+ +©B¡¡é7Ƥ:°¬îUB¨Ñýª8U¯ÁTààýH.éB8e=&æ|Pe^Úz/ q8%PLEa Ï+ëHt +a ]Öúã\×¼Xi\ª4W$©LS9°v +ÞÑ>Êä°ÍôIæH++adD +¡ºOçd¦)/NXOØÇ,Üĵy' É)HXJ«O*n;ÈaèÊ;J½Å*>ãm20¸÷&Ú(8êm¨«¶¶%µnç#§köáF¶9XÙd±Â:I"êOIWÏ!ßÑÂÑõn\µSm. O6A÷~ìÙ9°%Ê%é#¶<¾¹âÊö»;°LòUÕÌ`azÞsMméÓuò·vSÀôG#x¸V};HÃ,]Å �á_ÐÜ`-É´¸¶áD YbTý©Ã´,ªäÒ÷µf.Ã¥/<ïuOµ?0jzçT:L3µ·ÙÌ2Õxj}U>¥U =[ +6¥è½b+UlHö9#YXA+»E¬Çú¾)LÉ¢«Ç¶õq bìj6®Uz;{+³0eËÔÁC +¾Óx§V*ÉwñÕ¥°öÿÚ¨Û /#¯ÔUå£âgOt¸ +½øSa©Jn¶ÀtÆ!ì«C0aC&a;æ¸nÆHɽÐ\ kÀÔÝ nF7*TRíº3+˦;n»£<LÝïcg(]CMD7ylìÔQò4üà*{?©U´!âAº»ÚÄG`Th2* ´mÒËVí2ôØ0R¾¿jë¸7dËèíJ5=¼ïKk´D®$ÚÝJk>u npcò´):ɨáSÒüÒ±Tù¡ZÃÏY«¾e¸ç;T]'«eøÓ tëXØ Äû" <+×0HS¡0"0¨% 3ég\Az.¹ÌïòÚ®ÔÖã &ã:L%%:t?AÅ£¯ë¾Å0âU¹@ÛZM¢%F?w»!ïâ|OQìAt*úÆäÐ\EûÌ}Ü;ñ¶VHzî9 Iky8ÌWþÒ}bø÷L.¸+¤-HLþ`Ì<ÔígØm¢Æ8OÜ3/ÀMJ-¢Ô7D¡Lú㺬ot^§gë ÷ö@¯ðlÄÞ:D8YF´ën+ª¢}ÇÔ÷;`Þ bÚ:jÔvV Ò ex.¯eh ʸ`t¸~¢ì~¤º Øþ³ÃÀ] ¤} E^*DôF×ïØ³M&à'/ À¾`¤ + + +> h)ìAOPüVøå Æ2L¬Êïè§@êËèNA-ªÔ5¢(äQÏFýcøfÆ%üVà ¾ + , +q2 +Ø3pÀó{ñG +¤GÄì +IC¥ãeGG ócÀ'þèQ&ôîÈmñ.CP,«<×L6Wc +7¤ÎÐ.P£Â1Vù)?ÐððJ&¸ À/ (׬" àôüL&ãÄÊä-CÍn4 Ú¦ÃC,;eÊK `²ÉÖ ï÷¦Q¤¯'Rx÷íHïøÃæ®#hÆNF@¨RòdW(H"ßdT¯ª?Ë8)¡oÎE)D/)'K#q»à#à¡$1 óI±þjôÓ¾¼qøÄ? xt²|¾Ñ¢7R*¦üæÐ·®ËÈ-g;`Ç ´0j¾ê(£¶8ÏÌ>ZP Røí^Ù1ú Õ!£üÞ*²c5Ò²Ú+^Ùù1ò S-ÎCd: Å^o dOJÈ2 .ÒÞ +endstream +endobj +192 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +194 0 obj +<< +/Length 2313 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT # C ÑÀ\4HÅ£qpÄi1*%£ÎeÈÄâù°T"dy8I#¥+IPRT5A)±Á¥zURk@©<Ì(* '1ØÂl:D3)Ót4dfói´Þn 8óy@b7øÃÈÞc2§,ÐÞ 4´F3 ÐËw¼ª]:¹Ià +3Ñc%´:lÍÛÒl2&Ó.¬@e<oÇ3NqÑÆ]¡¸éÕ×y¹ªþ1׫6ÈóãHìì· >¨(©(hh!l +° æ:B Ê3¯£¡(\¤ìZãBÀï»ãÜ!lÈ@ͼc Â÷»®6pÞ:A*`hBAîü©£12L£Þ4Ï$Ç2ß*Àñ©Pz8ÅkÃpì?½òò ¨\ªôRâ¥Ð¾Ã±³)±pª& cq.Fγ±"3¾ìÍÏ1tøð»/ûÆ èÆ4PÃxåCÊÁ é:S²í²C@ÂÆHNý0ñ¼£u§ìáÃõEJl'È# "`&¢Ð, 6rv£ìCÆKz0TÜ:²îÌÀÌÈòæ#%À²ÀÒ2H5d +ÛJÁJ¢KÝr¿#a$ý°ÚOa ë²BuX;íßCxØøÙs±ã`Þ;Û}ÞêáÓ¸9 ÐK°#«mNKx6bì*ËÆÖ0¾(" fYË5¢*Fìü7*ð¥ßUÒÿ^×éºÂ±â@".b("-¢`²ªáŬű¬}´Å.hÉ4M#LÔ5L`D)£ à'ؾO£ÖÓµ9-îdàU(ãÏv. ' â Â8·IÚzþ;,ÔÛ6gRmÚ÷´M ÆÛW=éq¹KÞ;ÕñíÉzï÷Íq¥_·ü-JÏaFÓmmM¶Æm£zØèÎ +Ùßv3Bì>mÄ.¾²,® ª) ÐNäßÌñ +Kç²µEáUG±ü!tRîAºf-ì84YUÖÝ}9Lq#¸|%!ô A +íå+çIyÎ' ²PCz%¡íAµ"÷ à|J%?ÔM9xPNeDmQ³»4ð<tnÆ¢ðGkÀç?÷¾]Ès(l2$|Ì[3-êpÂnPÜ çFT4 +ÁÖ, æãI ë©[4s ¼2õD¨UÓÝQ7¸Ëª41-44xØ ªÔÉÙÙØb¦<âojB¦xô®y!kòf櫤d æå¢«røò^[ �MW$®A£l.a±¹P©Öê©d+Éz1¾h ÊîØ¢¨\íaySëp0º3ØÉ �ÚUL2Ç'å ¼e§Þ +.àÉA¢?7¸Ö£9æ9g¼Ú0àgÃ!6èPÖpR .5Ì ¨m'\vp3,ýFÃg°e´¸<À#ÈIQHغ¦{pl;ÆøðÄhª¢çTJ£NhÁ*ÙCDØìPgH`Åf*UQf4º'H[4 !Ô8G)å`5ËÚ©j+3ìF¥sû¡ÅOª0%þGÚãU£u\õhØ0XkÑø¯-K¤lC«£6gtÆ%ä +T@îCs;<õ%$" N$¸Ôîaë]¦L8bAkPµ°¶A6)j®À¸$¤åáÉFU?Ö£h£ÁN¼Çs]+´FСðÃyý¹Ç+ÃwÙÛeTÃßZïõj±LÃ}bÌ9h!¸_µKpÒb"(NßÇÐ.XTuJ.ÜdÞS6*×!¿Ô{)áLNKQH+Âav(`¯èl¥ªmÎ ´éª0hq$1ORöذhÐÂ)¦YvQz}»=XX¼ËP]FÓéÓAU*ø ÛDøBrhòl¥WÒñ~OÆ&£lkYð~Çh;ãü3<¹yÛd«P¯¾Æ>'ì©NW@TzÇbA9Å¥U&0 ¨ÒB°¯ÈÚ]rf/·äú%áPANØ$Å%×ÈóNÅÍV[ ë¦ ´ÎA³ç)#*ÍCpTF1*iW³öå¨åçù£4Â$Õ¨ò8÷ªåá¶Ç1â·&K·+N^³mÌ\½*-@)ð´vÞûä×ìneÄö|ðÔǼ ȹÏe²Ê)Êc$^3Æ!;Ðñ%æ^0ø"7J �@Ãô¼e¡¸ÓOZ·´ï¯x~lÎÓ<YìþÌ|É6½n]m:Å»*9î@9Ó.$nlbíÍ±Þ æåÛ¹@ì°£¸Ã, G°Q1a7¦ÛÕLe÷¾)ùÁ}èµÖØ2 w^ù/5ìØå¦ÁÛÃz ½¸·;$§bøáu×hÀQê[Ûl¯>Cc;ôþFݤ1Äãè ¼æ¨øÌ*ZNiÙQ¶ Þ9æÿh`ý»BGZ>ÛmÞöü}svFôÑ< + +endstream +endobj +195 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +197 0 obj +<< +/Length 2973 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* B¡AhÄaI£qpÄi2*)ñÂ4NIäbq|¦H ¤½¤<«bI@a§C¹¼äkͤÜg&óaé7 æ3ÔäsÍ\Ó6 Ñ(ÐR0ÆJ£"á°Þe(¥A<á#MRà ¸) Tr5&©¦ÃcUR¶"1ÔÜcÇò&ÁÂlÝ÷sß:D9ºüeÌg½FSÊýw7+ÞXÜø³n +R¶f8Ò;3 �Ú2 ÐV¦ Á» ¶-º¼CÌ1»Cè0ãÖÌ=Ñpê9¯Jõ?tTúF¡.9cÎõËô4ÙàbèÄbη +ÂH¦* +BH#Åì9|n xÞÀ:®»²7È[?È2N9Èè3L¸è$ ++© ¨Ú N.,è¥A^¤®«ðcÎ6=,Ët6DZ0°Ë¸@8 ì0èú<òð7¯ �S +ÃÂR3¦PÊò¤çÉnùSlpмÂÐÄÔõL3$ë; +?oèäÈ»OPÞ»W+À7ì0Ï#ÎàPQKEQd\;=u#¢pä=+0bƲÉëP `¨$ +Bxª#LÔó\qg?òü&ÝÖ Ñ$×eÛ$Op`Ìû ²øÈ4»ã{1 ãÄ3YÉT?¶«"Ì´-Bp¶Buü*DÌÆH¶ãTÆóª9>Cïd»Xün ªâ½Û×~N·ep[æW(Ac<ÀUÂü°Ðî ÖÖ%aÑMû×£ì9M9ÌóW Ê35,\0è5ç¯SÍ®öäh°EoX³%3èPÛuɤq4b¬9-à$eb@& + àf+ÁFå¨àZ¹«:ľ$£`àC¨é.Í +É:Ö!ÎÎë ×qò-"<Ô)Z^]I+£OM ÜÜ·bxÌ3F¥ãP¢¢¢¾Î ÕD¿Ôk=v3ã´=/â_pîáã<¦a@¼ôêjØ3`Ýô°÷°ÙÞÚ{Ͻ@R©¤¼ÀÓbæA4lîÔ2¡tZ¤G¦¬¨®ÊìlÌEo)dV¦KÀz>¼ ÂÒÓ©10ÞÅUàb¨876`´Òü$¹°jkÞ»¡Û*ç¸zSP§,ÖÁâjmËßT u/£Cvv¬*EP&ð\¬ ]ÑTÞ£ Bï4@eTÁsçàÐ>¨·MØE +|ÿÂô ½ú1gòàxJý^?×þîÎÔf0YÈXÄ L>GÅø&ød¼#d,0øôÙÁ$ȹlÂA +Èx1QÜÃòÑZß;PÜÈÃwaú=O G©üJ8ÄEå¤ÄUu +&,¹¨¶"ètQ~`¨E bbÑÿƦ}än±À2G"¨ cdxPì±$)Ã,3ÌÈH@!D}rFB(ÙçÈrÞI>(. ¤Å"ªY̤¶KÂSÑQJ9ôUL%O¥\¶)§ M»·Ø£ìÉ£RU I( rll5áÈÏy è¹-ªñThÌ£hõ¢Ô¼¯_9`)ÅÑt6>Á²Y¤PCmlbïÝåöhÔË8$Z}Ià%Ü8sòý[³xoUJµ,ªgãìG©§ÌÃ7`ÈQ4[·¨He0_·tëêöÈØ7þ%U2v0þ%«ffíKl´P#:ÛCÃ|¥Í à³mmfá´ÇYãü¡6<þDÒg)ê ¨ÍD¢îaz?V|óShO¸eµèØõ\NÅK!ÂÄCizsPlD§«Ga½cp +¢7¦þ~"¨F+û¨Îx3î-L(aBÃ|p){ä5%PÏI/("eo¡ÍæÍ^Eé 8OP̰M6»pl²kT4{À+ñWHúݧÕH0©ø^e`s +°0A½R§ ÄÝSgÐÅÐÖ@ºj械×-eÆáVÈäÇø´¼J®gÙÒZ~x@r©F!¥ÁWR°ÍKpé°'O{ì0N +«Ôü_;ÃVZ`g)p<sñg(ÚÊSÁ¾(]¤&£eêìÏ×k²5 5æm׳Æ{µ T;f`0ÙS8ݯoÔçÒ"Ðähõ )Êh$B3Ü\w°"àædÌzJ-º¹næ]8²¡°4äÎlÉG¡sTÀÖÂb¸ V>±LË)ªÐ°Òãw[A§Îñ³ ûoÏjí0n 't@¥'.´ÈÓædÍÓ?o¥CùnmÇðÓ¯79HE·i6LA£rÌs©¦×xSsÍNTíäÀåáÆ¬~[õJ¸V/ÒîM3õþÞ?k Ë¥¸þ»:Y̦K(Ù6ÿÍSJ¡8 ]®\®nøxiG¦¸qM9¡/ëZ\oÀJ_¶TàÜ bÐ`F1¡8tùã"AÆûuT[NP0 äs%HãhÌ8BÆïÈÌ#HNwÔ¦_½GÁ6ðk¿)¬$©Y¶-Òù¯ÐíüI%ydô9üUÙ^wwñ×Ç\& ô¬JÈI^=,vsÔf¥%úÁ&Ò8ÅJfô@jAJ¢PO̶ ЯüÀp¢(`DðÂChÎÙ 6ë)>ÚHÀóèÄ!àp#ÐÓ£hÄ¬Ô + gê;L¤<ÒBíüKçÖ¢¨&v°, f$üêØ¥(0d gîÈ>0@²¬Þ«º;Mðníô?MøEc6ï âôãBª>é¢ä.Ü ØÜdTܤVånÅpNôïj¤¶ H#(*¯½ ż´¬WøEC$ÑcÔÑ/K«Ê¬ (a).xn--b*lpt-7sam ÐX°] d#ÌÉdøÀá.¼o¤|½ ã !`¤ +±FïãÖEÎÆùÂ/í¯¦èØØcÆVDÏðâ°0õ%è +qû-Õ*ÂpH5nÂÔļØm²INöbºõ¼vÀ¨§`SìjÝ ¸W �æn®§ÅLU +üpr©4¾»/Y æÍä±i �2¾BkäíÎrNãÕ¤²Ü`êDTØgtG«T¡/ßä?NØ;K^«ÉN¸ÿ%#Sðz33÷üû)ZdÏð¯ + ±C*+ ®bo\D²ñï"òo/8?þèB(7-QRä¤lïTHO[ L5O`öR: gÀ ¤¬J +eô +PbGÆø>Å#D)ª×G,äϾÌáïµ$ò!"R(p`ê ¨¼§¢B +endstream +endobj +198 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +200 0 obj +<< +/Length 2018 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tà.Ã9ØÄr0 +g#yÌæ-)LÖÑ Êr2fS¦E©\4T2xº³© #µÙhÀaI² +æS¡<á#MRqÚe. +IPÕFÅñ U¨d2Ô +LèÂc + ®ß¤ã¬^7_gæ\Цa;u:½n¿c³æî$} Þ!@ërydÒ ,I' +DR<ª)b+ÒÄ©j¢hbhÚF#ápjã«Ëí¬«Ð¡ÂÞ +J!Jâü +v¾¿B¨*0Ê"¦©ðJ +ª®Á°dËBèhÝ9ÊÎàÁÚ·a@¦<Ãxà9,+"+,².rÒ8:-8Ƚè9£èÎ(1@§Åá ¨(Øn!n¼,¸C@"a â`@3£Â9´lR-ýÏ£Æ(#HÜ:TNuJì3Ò#CKÓ4Úó7 ìcRRµ¥" Å43 ,ª8éPÒv ,(@9ãv¿¼# ¶Âí~´-B8i£B>Äõ> +¥Æ×¨« +{¨¥ÌÜ*°Ã46´IkP"0ä4 Ò7Ñ=p3.FÌ*˳H|a&6 ¨4®eG7lr6A*Ðó0O/Ìö)EÑOe/lï¿,g"&ÐÌÛ7Î# êÀ!:ÕÃAWÕèÛgaãtè4YÁ #¹j;@:Ô Þæ°XP8Uµ~é»&ö¸{C9«ÂÀ;øP7ÜPÃeèxb#»¬).¾`ìÖɦõpÈ7úþÂ4Î} Ü9 л¨is#ù5à!@Õµõzvìöáxn»Èh|´ÃftxÇר«y18NÐär¨@2÷¯«o¹,Ö;m9.¥W£Äæ:ncK¸£ @;äöñWaÃpÏÖçb4 +okÔ8/(%vY(SyP=¤c ÖQ/e«=ÀÊïSkYáÈ6ªãüÙ#áM} ÂÃXg.Ô7?' oN2¸Ü_à}¬ÀE<Ãp.$½²r&årDvð!D¾@l¬Äç ÿÌqVHhÕæ(rF± Zd°9Ø2\U`ÄÐaï¶pN\NТøXü¡¼9n@÷-wãâCq±:(E ÊÁiyq Ħ^î$Ud]Ø#ðfv<3Ñ|Щµ;£!ìQF2ºKÛ{éí`pθZJ)Î<¿'Ù!ä1þç_(ª?Bd"@c'JªUâP±h#)Ú" j5½çµuu u«æ³[^ðÂ8úØeì: �É1MÄXeðFfÅ×8¢C2»}j½2ÐõfÃ3Ð& +J¨/7±TÉn©µzÛÛb0À9ÝçÃ(ðH?¨] e¬ÕA` 84&H=·eZs{TIn?-ß|£q:ÑðÛHf;4ÈOÕÒ° JØ[FJ`Ïý3y(íM©¹Ncm<¢úuÔ5G(òϨòRQ/b Â:_(åÈ¡b, $Æê[Ës.¥Ü¼¶ê_Kù0iYò(KmøeÌâÂÌ!PΫ¦¯<à¤åX[hC¥£ªà)ɤhLfÂ8æåÖÆ,tÎ4+åSELÖòek±iËù!3&%ÐêD¸¢T(TZ¡ü ²ò+rõ®+০fP²Cw%K¤ +RzQJiUäY%dÒñ#@ÔÑnÍ +hMI±7'ä²x»h"ÝÃôSò©ª tu¦µg e/!q«7®¥¢Ö4áÀ:°i® Ã!HlO3ÔHBÄ8d#Äì×åÂkÌÈü +»7nî ä/SG7×\ÇïMz&èjö& +\X@saL11Ï,¾ä^Ê\w%×ùd4Ú1¿Ùôùp>®Y¶iò&µe¨ÚøÒY sP|íQÕä(»c~MÁ;2V°Ö§M?lMyÁ*6« Ò}µÆ¢ôry Õ¢hFÁ¥Ð·V}HÎÀé»<víjÞ)C.î»àZðYËo/%wIo:Q& Ú¹¯°qüÙsô6nÊÇÀßµ±¤YïmWéàNÕÁJ Bø{®³}K«8îLægñ+°>¬P +6å`û(î&K§CÎç«=Õº7áT8(ìB +endstream +endobj +201 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 101 0 R +>> +>> +endobj +203 0 obj +<< +/Length 2009 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ´b7 c@b5ÂÈáÂ4 +R°êe T4 TQ¥j0צpAAPÐi9¦Ã)´Ên:0¡ Ê 8pC¦?t9DøN#s4"y@b³EÖ\J Ü·+¥:9»¯Ù!RÁb29ÏYl·l`J¤¢·º½Øoؼ. 2r§#ntË4ÎøÌvC%ÚÊà±VèoÓãΧ3)]ò²V}&´-Kc`¦AðJ® ë~È8.ãµÎLÀÁt¡6Áp¥¹ákv½7ËãªÃ1 ÏH71í+ÈÇÃxØ6<LèÎ?MHæB^¤²:Þ¹éÈ*by£KëÊ9#*6æ9¬3Ü4,Kÿ¼ÌÒ˽ÞÄ,ë!**+ÀpC]Däzþ1³Ú £à± �p§OSâ?áÂ*9ñ¾»¯*Zn'"/¢À & "*'¢¤JL|p; ´²9½|þÌÀÎ4ÅcdÊô2Ï[FÅ!À9¸Â9-² < ÓÜû?ÃíÊP°%:Äó²{:ì¸ÑCÙdL#L×NƱsPÝ+EM}¾Â; T¾Lwó*Ä01Æ20ÂÑ»#µ2³v]ÓJµ´Å»M6Ôí?$ P¾' â&"¦"xH sFÔ o«xE£¨Ý}Q²¤¬Â ¬Íf³}þÊ4kK:¨ÖÝ3oÐ ÈP1±Õ0lu÷Ë1hÊ<0¦Å¥JúmÐôÍQÀäûyèäÎE£{þ9a8[uRº!EzYZuÀÅqnÁ±. ´_fôû/ólK<åÀÔíF°èÚ@A¸iUÒõ3K¾L®|ÅÑ<ÍGRLoJH6å½MÃTõÄèÕ5X¤"æb¬"â¦gKõt7ØöN=3ÙÔ?MØSÓ =ì7>âËßQ±;÷Ù$ý®ÔHßûÚ3öV î4ÆñTÀ:4[ij &ìébEüã)f_ó `äÒõlüãàå]a~®°Ì¹4\âÐhúG`OÓü& ǺÚÜ|, ²®6y_Ë?8mFÓÈ¡BeãÌJùÖÃ!JBtND DHoPiþÅ]l_0î6½S[ @D$å'ü¡u"`Æ?ÈjCÁ©$# ÔȨIÅ0\A< åÒØ- +A3I h +!h'mé !"EÖYbÈà VÒ HôèÁBïæT(70Ê@\(P!bà +\Eæ^÷a3 |°.à füTº#Sæü&ðL¡P*T($ $ näøT´îI=%Áq +{7$'+I[!$lñ¢ �þß|Ì0ò£Ã dKR&EHâ@½ åìû/(9)9¡1@ è`Tí +$U8 Ô~eðÎðâ)yuQ°¥mNCUBiÇ +AG©5|ÖÑ9KåµàºD ѽ§RIâQôü©|1 Òrk}g"mêc<e34àe>a2£¬îl 2àu +Â֪ʹͱ¨;D¨c%B¨ÕÎ0äÚ¿Ó x¥FZñL'}b-àê¬z5Öx¦°lH^ ³HÒQÒrL"(8ÐQ`à °ö$7X³ ÌàâlLãe¢:léNuÖ¹!Û«µ.¹E&Õ;àU1¸½AæöÚ³kߣº«ú+³~}úª¬vß_ö(®%½mÈZ%«u@Ô=/¤4´zKR /`AÎQJIM*ÀnwJüIKl}p²2Þ\ -Fª!k!ðؼáС~äÈNÀ(@¥DÌ@¥ØeÜ\~ªæ»;jç pÓa>2ü¯¸ÖÀêÎ )sRB L÷·bzåäÚzÐ26ãI.ý¤R«ÍK¥¥²R§Ózô4è(4TüÓ%`åPê(g +¥ÔÛ£Y-³a+ð¥¯`S¶AÐ)ôkaõKX®µàhù¼'í¸a´@VÓ #ÎP :VÁ47Á´â1aÜtÔ +^Ýî ÓÍäÒ}ͱµáÂ8ÏpN²@@ +endstream +endobj +204 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +207 0 obj +<< +/Length 2754 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5'EÒ¡* ¡AhÄl.!Bѽ@j7 &0P ªI'â1ÈÞm(LæQؤ¨jSEÃxÕfZ0HÊÊõÄn*í6»m¾T]Æ9ûa±M&ì²Ýpb1Õü¸a<ep¹Ð*O|Î_Èfó¤ÊsÑáñ5ÒE¦T dQ n9&ã[ Ù%ؼmtP $Ѱuà<-#zÔ_ÁAL&$2X«ªp3eY3¡ Þo5>BA\"S �O#Ìô=OcÜ6>p¦2¨àû?Óøÿ@ý@ΰk.Ù)Rð¥/xÛOx ùà ¨2£Øí¢pÂ6¸Í#fFÑÃß Ã£ Èc¤#É1Læ @& ïPÞÇo¤§!Ht/L{(CÓ<«,AjF¹.R´®¡ #»¡6(('C%Êf§ +h$é+MF¨+Únò É\'ar¼ #^1¾cè4ãpR¢(È(©Hh"H A\WnPn°h«Õ- 4®@ÊEõ ÖÈÝ"Æ$óØ[d<tÿ@Ðv ZZ kOɳ¹q¢î« 7h!C9£:9YáHbZá2c¡ Ì7Ck·V Ø> Þ%àÎÀÊ2òbxæ<¸2@¡@ß'ÌÓU#`Ò=Yùý6µh@2 9Þ3Õê*ª!:¹*3Ò¶&ÊèÄ7xA~_xmA> hC>;ªÊ6·Ö 9 ×i©tº;£hýmYp»d§wñRÔõMWVèµ&¹÷¾Ë`¦:_Ч»Éºª¡d×B¦ùvËhÓmr Ë^Agm<à@7Ý:ã©MÊQÈdÝjìý@,4ÏwÛΪ=,ö^÷Í÷g²xèó+n ëg®Ær1Yãæ9#8Ýä[¦ª¡¥¡#zjí-ÙaF(ìk|á ¯ÇtÚ\ÃÖ°ÙÔÚÃZfÍÉC<ÕªCÜÒ[Ìà"ÀÎyÒÐwÎE^*Û9kt®`êqXnn0º+`ZßÈ6t@©&rÌcý Ü7@(ryÔ:G«®©Ö8'^Î]6b±¶;wr͹¼;»6-glõ¶@ØÐÛ8xÏyð>'Èùë»3=ü'öiÌt}¯¾»8è¬ÕÚ=UõÞÃÏø5TL@Éaª%°þáR3KÁØ> +ÔKwë°ñIô.B9¾³ `sZ)ØàhTãëN+¡¹FY´í:ÇÆÚC@o¡±>@©èqíüKè{Òä¶ðÒɵ:˦;ò"ð¦xW çʧ@°8ò)À@fvMª,5çhÜ¡©R +(,_5`ÓÙ[% )[re#Ôfhic"ÆCzÕâëå81æ]ª)|ÊL1É¥Éû¤¬YÔ"r®y¾ñhr\7±#DÜú¶\àØ¨ÀÿAÖ[¬öÀÚ]jú`ÌÚ7G¦&`HmaÁPèÖCtȧoÍFR7_Ôê.¡þÒHÇhWjÅ7ª°ÌCgÉ!õ ËÖkä5áÎÃLÀ_Õ¥eøÇ²øG¡¥$5hÎ,8æ@Ö¸|Ã(v~zÐÆd4pVMA~þÁ@R¶Q ¯£ M±v(AIs.´jÔ)dÛôab©V%Ø29@Ét×ý\¨Ûýg<& 0 )eÀЩ°M á=^Êo¤¨¤4Hw\ì)W 5ü××¶zøC]ñ¼13@èrcá¼1¦ÚÎX£`Hô0°Z÷O$ÓÃ#âĸ(V ¡?\tëÆ,i~¿ÙõïZ[r �=9ÅhCpHVÁ1ÂÖu[kT²æ` BDÐR3ºÙªüÌÄn`7ÀæY} b,Æ7ج´cáP¦sòºËdfì#p¢?âçû147ÙsKo\¥0oËÚÈøÕÚ³ënÄ72öÎÁ²Ycù!3*ÝÈê¹ùò#Lf O/'%ææ ÏÃ~ ç'ãV1´ÊÚ_,¥l¶Í²ë?Òõyªf&Y³5jYúfg»á\3¦;;ÞÊð%ôû¼.úëïjoÕüÆË`-Tcªg9BiMHó®5¼Ø@q3m³ÝÄãÏ· l ×V}/t®íûó~ï겿à+r¡¢aa>ªVF]Ã.Þ34]þï ²¡û¶®| +2즸»OÊîO?á}ÐÉÁ¦×5k\ót±XeÀ]õµ§)N#Ìÿq5©õOËúP´òü@4Ow¦þvß-²ø«Ã¦g³Ìq®@¼×IâäbØ&ÍàÆËòqRyÅh½ë#CmÁf¹qfeüÖgCçj°ÖUõ´¡ààÃÈe Z"¿á0¿ìLLN\ã'³§/¦r¾&¥g.ÂYÝi2¦öÙo;÷ðñoKpðÇ9xnæÚW6¨In<ºÎ ËöÙÉ/TGDø~ NU*.7§ä·m:rñÄ}g2â ̨4®±¹í2ìÍÃgß+qÝü-©ó¹,6òûÛð{;UitÑJ2ô./È «ððIl)éòû®6ÑJâmòÿòwâ»NÛbð¡ãÐé¢Àj ê)"âª,©¢bÇn²Öm(à®, <.8 æ&ÔæN@ó¬ô¥)ÊæúºôN/´n¯SËJ.b/õæ¶ý@äÍf""ÌLNÏÈ/-PËæY¶öp& éÈBìr÷%÷kð÷®XÜ®¼)üâfcé¬h¶-iªcï8ù®¢ÌsoÐ'ÐôÍöáhOÍÑoÂ*¨íî»){ æN4ù /ßm®¢ÊÜ©Ð5( n®¹âMÔ²&uëWPÔäOn« +ÜäñûXû^¹èbÍr°&"Ȥk*×.NÊ,$PVÕ*äeCæ²è˶ºçÔåù®~VNGPÂR1|KVÐéê¡^ÒCƨ˨ºÝ¦¥ÑÆZ* gX·XfÍXfM\U¬¢B +endstream +endobj +208 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +210 0 obj +<< +/Length 3366 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP ̧eÒ¡* B¡AhÄa FâáÔo"Mf¡A\Ðe7ñ �G¥á@äi7Ã9pP\ÙlöL.ÝUîpAAên1 &û ÈÊt:Ç1`Ãa0ÃIÃÊ4Ö©ÌËb²YR4zÛÔÆ1¤R±.s<aV&øÛ,$' CHV,OàÒ«sóÐäuÈæuçC0-zC^6¨8¥]%³&\Êr6Þ<vCaº;;^7Í^2 #Ø7á S(ï ã`æØ4á �ûµïðæ7pHè2ÐÒ±ÀÁ �»®ûÂËÏ2Û9ï:¦#!Ü#MûÎì ¨í Ê; Ã\9ÇÂ3 +¥Rë²c´¢x§DÎ 0¼WÅá £xì0QbYPTùãò ãÔ2²0Àé /# +ñ=,ª"ÚHàdÁÃÒß +_&¸ã+ Â"r̶·´ýCQ½Áá%>ldrð3ãÌÈáĺL +ϳÍHÓ5ï6«ð»É �Á#d TVÏ ] 2Ør3Ô.J¦LUHQrK4êÜõ15%LàÉÎÝWVÕõÚVn\iÁÉìe¿X0èÝÃÃHΰÛl ?¬ò± ñM·tUEËÈçâê¤(Xe^`ÖS<ÐYÍ+Nɬ# ßÃ}'icFilRw&[nÛ÷ ÜËÈAtÁpl<gWóyBÌìo~×80Ôó¹fWS¹Òâ6·®´Ó)J¶gYp+s¢Þ8r´ÆMùí'¬ã¨ÙQųk¨&ÁroÆØâñÿJxi"rR]O±§*Êücnój~9¢ª¶®r³Út=åÖ6h2××Uï86ʽ/óßH(ØdÜö©ûÈZ15ó|_W ÉO´P@3Q;ÿZÚúmP®UçnÁ®V.°ÈB¹Wo^ÆnÉLé®k¥Ô·äNâ/^}eh ¡æÓ²xF!ÑÒâÀËÓwë¼bèÞËÚ.åä½Òþ +`!:OÃ?3dZr ËqÅ´ALɶ6ýØQ¸: Ü3¬Âª8ìR¿v2¢Ûv°à7£¸wâgO%ÔN jy<ÊÔè`nñÑñ8µ.DîøpQ*L78¥$³Ce2"%"ü}C±¥O&lDRØÂ¸I ÀºQlá¡I01BâÃÞj-ªúñãdn{põïDÌõDi®DgÑ`ñ3fufFÓJ÷/ÚXÅnAp6)ÿ1à14±é»!&$odG³ÒÆØl +G]TF~Ò)?§ý +!`@_ rEAá+0ÊóÑÁÞ/ÊòÈÛ¨(s{ì]0G³:a+WCx9¡ôB*ÓE:# *¹ yât¡¦Lõ¡MY¡4.¢Ã;Q5²Zy©ZáË.÷&$Õ¡áI¿UQMH(N©ÂÆèÃ%\7dmÓÅ&bê¡Xz L$OÂRJ&xƪº|¬8ftàù(.s)Òî°M çÖ»ù²H]¬``Í-Øz${zøy¥û¿:5¶5Ö6EKSÑy&ÈöËú_Ï,`Za#qãv÷aý6ðùY7Ï's( ;³: îüßKè¨ZWÿg]ÛK Ú2.á¥9LEMÚÀoedé +¾Åg Zf³ûêïYÄ¡g¯¼Õº\ZiKMRÌs¦ªàÎr¶æÒÜݰdÆïã·ðúÎ9î#"¸ëEÒÖUøÐU°8#ÍÖÚÈ+}±<ÕÃàÝéÄ[gï´@¹ÈW¼òà Áîs øc,îÙOÊ¢/Ù<7/n»¿³ íÌk¶ +C´:¢àÉkÎ1w¸÷Ï6 .á¼(lw?ÏÌËa /íàZßî äpX½â8$zä Á;ÂFCsv¼§×V¿à[Ê3lëLÎYõ$7^8õDr)°Ñèsaà c±©yÈäÙÓ+¦¥¸É¸å9uu¥æÇRÑñâ¡KËNñ-¬¢L°&IST¼kNïæÆ*|¡£XØÓÕ`쥮ù0ó$W¯*qÿUÃ\ZÞâQ8Cjá7\ïÊ66Ñô¡·tÛ"ãô.}d'N&¤;JÖrlÛQÁ*_}öºA³g}ÙNÀØF?´RÆ/~ó%ínöJtÒÓ;vp35çjó¶ _ +A*P¤ CÖ|`M5a²Ù[c$Ã:BCç\óàи ½ÛZÖýLSH|~x"ø,L`±¿ÂàÌti.¹Ï;ç¼ÿ ô0kÑz~Uâ+ïä ãÈd¢ +Ýæw®Fév]P9Íoa .wlÏ,0Îã°tígÑ)Õ1WSá§È4M&ûPÊä4*¤^.ÖíBTöJßÙù°Çµòó§Üú·Xòe»õß!ÞÌúâà×x$SáO!ñ[<ø»¶¨ +´·¬[ùÜù#Ó8'+»ùW4»_Øfß¡Ó:»Mʰ~5%Rª¤:z¼õ¤Xõí,fõ/lñ/p]FÔ÷j¾NÊrb¸iDE ïªÎµ#^ð/ûöîп¨H¤KïÔæÏÊÖN²îø¸©Ògdàóe0ª ¦ÑdN+ꯤïÇO®ïÏûP<ø @dÏüpL+¹7W«NóE'îÙdHÔÍîH#Ð=@`#°xÕ£®ãæä@ÂäRÖ|`ÍÊ5Çæän>ÉðÑhB í\ à ¤új/sd"yf¾A@ÒPÆ £ZRle&VÂɯD¾#¶,gÁ:¡#ö¢)ÖµG=FjÞÉd"a«6þ«|ØÃ¯ÎØ ÌDìH!kè@Ç+ÔæI´*éå±hÁ +Ql2ÔOæâÈ~ óY%à@ à¤ñXÁän@tc°"HX¥íåR'/'F + _ D\°â5à¤3ìÚ ÈÔ RSBV=ÐvxñÜç çF ¨¢xî±òyh*È% h¢5àDd*?©ý%Àà R% eØ{"£°Ú8.@1 +`@ªâ®`¨ à 2<ÂT#vþIæÀÒKnüA $Y&¢¿&òrëò¦«"ËùlÕânR2àU²)Jä À¨ �'§+1¶o¨ó, " òpÙÂÍì ð¯p]Ò&(°@Û-ÎRÑØ Ø Ç¶ ³Q('ÒØ*nØ#Õ"í56|ç2ó(ò)rý#à + ÄE£F\3!2O¹50ÊSÐÐ ¶ #6ïjä§Æ%óÀÅÎ PÑ=N¸ùШU@¶ +& ÂñжspsØøÓ{/s + 8 �ºàCá>OèÀÑ>óò@Kt>æ±i,ïã<lãNOeDp¤-Sª ZArDöT �X;sCD?K?;´zTLü·¬s4ËìP)í{(ým85æTj¯µ-.Ì'ã{Sy/R +n¨ +0R¥N2HܾrLïÓ¢\1±|3²e¶¦*ý2KRåTÓ + Q43F +c. á4ÓQDæ6´A.têå³d<Îx +endstream +endobj +211 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +213 0 obj +<< +/Length 2601 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5N¥BT # C ÑÀ\4HÅ£qpÄi1*%£Îe ò)8B&JdR¡T T"J ÀRT5A)±Á¥zU׫3I(PT4Nb±Øu2§3.,èhÈ 8ãy@b7C)´àl0é%f±Ü 4ëòù½æ +FÒa ¡n» Ö°ÆI¸æt0f]H îÅ»ÙpÎàx5±© rLnßsѽҧl-§W;ÞaÀ¦e:NM.R2ÃÚæ/s ¥Hz>¤î|2+\:asÊéApfáþø»ªû±,2е-rà¹. Â"Òò¯aÂû;ÓDÃÀÄ6+̽ »òý¿CHò¨òDª7òtG(©/ BCpèØ1c@253pÄ6 ãÖÑ HA<Í¡ à9BxÂ2£$.#ªb¿»1ÀÍ3ó@Ñ44´2 È[0òHÈ3Ï/hÌ;©q#æ°>²³ôþRÏüÓ´ºÝ/OhÔ4ÑÍA ã¨ÙCHÎQnÄ÷TÑ0P12#HÎ7 ô ¢¤$ ¨'ÂLnéá«Ä±lkȱ4$Ú7<lÐæ0Îl¬ðÈBäØÍc ÞÃL"1;3í,¡¨ P¨;*iq\'²¢h¦I}ìÄ1LcÈMìV ²ÔÞ0ì®(9PcN1£¦×¼M(#ç:³m% V«âýe)0u +4Ícß5CxÙ +ÂöÖ¶Dsß\)ºÂ±b@+(('aj7¾k}gü<ç¬þ¥¶ 7HN4ëöA !y&æ/äëZÒ!H'f +°iÁ_9»3`¼H@>ðÆ:hÃv¢èü~Ǩ&>ÂT³';¹E8® BuØ#æº5Öf×ÜÞ7àÖ¤×_ã¾ ãä76,ô©hîÌrC-6§1àÉJtuµ6\¸DÉ=Ä + f+ 5§öûÁ¶)Ùm¶Ú{(_e,¬'2Ö^[ð4/QÂ(íy³vaAô7vfëJwïͼ6Þñ«È,k©vBÖ[[ä )Tã\¡c&ØpÊ Á �DDÕË÷G Uý&3äÿ^9.X<@Ú¢ÜIïò®7? jï^+Ì`náóÖbÁ;;&ÂÕëbH2±HöÆÀ ®lX"kÍ ¾`kÙ£zÊ @ðÃi©bÏ*Aøøî=51aúµ¨¶þZë#,ɾàA*T#%©ÔÆv(Å8DX4a¼ò5t"ȶ$Ôe<ÓÀ¬À¯ r®Ü:¨ å Å\84@Ç<P<ôÀÖ|+¾2»Bq÷26L +&2Hç?$l¡ P Ú·áê¸W°bÞÔ@pï~bH@S\³*Z)éæA(qO!Jå#Àº°M ë¢SsÞÌg°6:æ·,Ô¦alñSôõòaªf ¥©X j H8Wz6:§bIñ-ÈîpiJe«+\BBåP:£"ë!YÐÈ r¡ZF³»ìOÖosÙ¬½²eÃø¥*F%PÕj SäFÏANúS-%Ví¸Vy×'C,ï«©Z h ;=À 4@Êy¨¶ö°óþÒ§0ÍA[ºmohx5$tñ(¤$©q°M êå¤Uj½dWN &£÷ãZ ¤åo-ì/+ø°AP,\i[¯íg¦Ãy4©¼2À(¬D¾f¡ÌýªÕøyºEaá{5¡ÈMYo6'ÕÁYÐfYøEhmíõ/´Ë¼pïâ¼¶KÎ{-=ÑYÉ«Ë0bïö 7ñåS)=ÍvR¦Xù½)¥Dª1!¸ÏB)\íÝÈs¢ÀK9AAORðÊb [¦r³ÖÉ´Ý-ÀèÛXÊqUO¸iH)µqæä¤óK)¼`A3¬55ÑRÁj§5Öµ×2{?Ój¶6ç9ZÚ§¯¶¤Ê)~ÏüykÁ¢÷ã;P{ø®²-m01µåSࢮÓ:0ßܤ°y4;xüíe{¹íÇB Ý"Êqµ ݵ31¨qQÅ]Êä R3ZBêz³@U-u¡.ÊIjG3biÖÿ{ðoâ �ü &nðàX3M2æ(òðeeNB½dÊY»'&+°gP!òî`bÚûa6`¹Su1ãI»XBk9#ÂÃ)Qʹd¤åüÆêó3Î,¾&Ϋ1gs³f¬æ/µ Ä [Ò©¨JöAzJ+@8\pÞToÍê£íJºSgBÕ`Ð@!n¡µh&ÒFÁ4¶H÷¨w³ÁgÛc1|¹+)åPÐ9×GscPÂ/7uA_ÔIö²·ëOøz5)\H2Þê½Ö¸@×¼ÖOMl`,§@iRÔo<²¯Y§µµFîèoßÅþøº×m«ú +ÞIj¯ðgM·ºÓâ»~lT»L,âùîÕLzMD¢Ú+¥@o8¸=I.ÀJÀ¬²bç$ÖíÎHMnà´æî@·è´ïM"µ+ïïðo +×ëzñG«¤'ÀÌñÌàlgÀb@Øò% ÖàýoªºöYÏn¨`I/x÷ÐP½oðÓ/¯< � +¯úp8MÖ¡-W£ÄÉf¸Äð.ÒO(¯,2¬0óP"ÄPèÆüäõÐ/xúháà«XõÐþ¤¸iÑöïú)jâ:¶oÄ, �Øàï:¡Ø +endstream +endobj +214 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +216 0 obj +<< +/Length 3645 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ´b7 c@cA &³@P ÜF9Í¥ Ê)*©i%. +¨£1JÌPT4Nb)°Êm2Ðèh2á Æ¡¤Âl±ç\IÞrÃbLq°Þgç=ìE`±¯Ì߰¾ ÝÄÚ-PR0ÆnÆbáÒ( £ xÂ\FØg. +Õ®Û·x\N5b.FwZéên1ãuâèu9bÍÇwx¥< p¢ObPè +ú±¬«:Òï!0¸«Öä)®``ç&k²ø¿0@×0C¨½°ìHá;¯#Ðà íÊ3º é°N ÎÙ¯sv§8abõ©ÏCÔöØÊxÌÜò©R6 ¨äÀë´±,4¬¶Kze9PÔ8*AêþÀ°cÐ7£`É(Ã`ó¨æ2Ïq* + ¾("8' +¢h§µãè0ÄKÓü¢Á´»$½/\¾»Plsʰ{ÿ4¸!ppÍp3N°Ì6,³;¿,¼á°d¡M[çÃÓB:HÐÚ0HÚ:¬&İñtGLP³/B1R¤ÎßURäôʤÙ7Kµª»1Á5TWkz6ÙaCi%ÔØÓ£9Ói8£Õ :®À)Õ£ÎÚR{*ËÊãÏ´-J4ð[UB1£`7²-K"v#?FP:? T»D£c´5ÀÜ5 Ó<, «ç$Õe ÔNÜ* ó, 8¹ÜøUö¼0·í33X³Çã2,ÌUó<Ð4M#MªdífUekCÕû `A/97ÄÞè:N èë;Ó¹wÍËÄ8A%ÔokÞø/êû¿/ݽÈhë|#Búxa¨ÌZ¦]\.AXó3 +»Îq{?R¤V³E±|c´8GQã7Gè[5'2ØcÊ! +óÔ2d¥Ñ·r¾³ÊVaj÷]vÊ6#¼$3¯:ë;Ï3Û_?P¹C6õE¢ÔjR*M)e0©Û/:l`Iº¢9 ¡¾ºEÂyÁ¢öv§5ÖЮ; Eè-@еØF%mTö©ÌÓF\+®WÜt|ÍU¾ �ü¦P-#1@$°ÁÝT,5±@ÄÒ£fcÔ6¶:gYqd`º¶RÏYû.>ÌÂ236jf»9gev<2ÆDNI¥FÓ ÚVH&G_×îØ»öü¨ ¬Z ¡Ûd75°ê +r JjQhnOqÐ7·Sa¹ Æ) +EÒ1Èè1$L|¡¸&¬É.÷\Kò¶ ?Tf.RéNeL89Êéa,¥£ý3RÜ6¥1.ã¬US/Ì8üá¯o"eMJSdÔ])i0Þ%"(Rædëa"4¶Îd#dnm±Á¸2#MC¨erøÖÐ&~ÿ¤lJS �´È54A.Á "PìCxdjæòµËEÜ*n³ +¤`L ¥6ÄYG&ÄpåØ!V× Ë\©å +ß+:§\ì¸HÛ§åmãà|»?èþ2{Jki12ÕTÓÆ³IyM zQî[Î4; ìRîT¡AÂùl<?U-ï!$¶ I%A6VYu[Sâ:ü£m¥Jét¿¨EmT#·:ÙÓÓ Ùf8Ë*Q¸Æ +t)´ © +´Ô`2\©ÐèLµÀ¸9í²Òa¬;q7Ýåì00æC8n[¢sÙPR®¥%ìú(¥àbOê¡ýku%A¦ Æ0IÆW[tq¤ÌÚR¸íKYY²8Ì_ ïr.t¹t4ܰäè© áxMÌA7þBE+ÐÂO +$"ÀE*¥çn éÖ=ØËÄW'ª%AòËDÂТ)Wâü£ýi±ÈI +0nê] ½VÖöDû5yéë|·ÈÁ0^¹è´1}[ë}ïÊÜÀTDú\ J±R{ÁISÜÖ9±CÊÅw{Ìbb)¥Û¨ãwqøEÈ9"²¨ 8`U«±¥®®# Á®Sï}åhCmÄ˾BÚ7rzj=ÆÓßÝuÅî$9tæÕ=|î`C<ààZYú.¿é=ªØB§ºT'Ä:¶ûÞÞ±èCÌÖ hk@íÝ12Ðü¦Îª%iü}õÂ8§lÜæ¥uÜÔÒìFÁ×Ñ@Û²3mx¼f/ç¸qÊpGíjÁBëá] $ýdÇk&ÊYi2ogGæÒÞq*Cyt_mEÁ ðÆÛ»¼GѽÒPñ¦^Æ5Î1Ðà®1Q{G,ÛäíðH||\/°Ø+t + ÿ«¢àÊ ×< ÖçU³þáä'ìG3ß/g +gØ:×ÕºÇoî<Âø£lÉ`'0´ÚjÓyDH¯=iàû×Ë| BÒo^þWËTÇ/×l)7ÇíÙ OÙ>§ý.b_ú!&P HN +P"Ð ÄzG3¾ãJo¬à{åcä'{¿{B U +ã|©²@t¾Õ@¨;T÷5dCB¿ÒqBí²ÅLzëY8hÅÍѶóé _Å �ûù ühf?ö@gªîÊ0ôíNåíVþJØõ®üª.Ï«èë¯P>çÀÈ/Àvn´GÀÍöÍ%÷ � {ÉÃ06µ¬ Ì$²p0åÏ\"6«ÏÚÂâ~ÏÀAx«Ã δHÌÐ`{0d:êdðN^bD¦£10¸PpüDZüèØYå,çKìÛköFªvý+Úê,Ðpõ0rDßiI@jÎJáG@±böEkíoö-jÖBB¼CÎÒqêqê' |㯢¾*üs^«eVrH¶¢Ï.¬/ ï �¼:jü® (r° �c2ZÅP`òÁ£ Eø3Dî î+ þ-õÈ&©^)füñgÑ ? �dnö9l*PNÎÀÜí ñ´×ÊPï rOnö"`õîÌèðcîï.2ô.6ÎÛ(ªÚööã6¤Dýk´Úì,FâhÔ1àÒE <*ï2ç§!`×I |ÎlÞdt ëmjè³g6°0dvèÊU @0ìA¢ö¤C4í%( Ú5î ÏIü°d ð´~²s®º/ofOñ"ϨúÏ|ø à åÿ*±ÀêkPÑÈ1b÷¢£ÆÎMjû!¨J¼[Èä²Hì# +ÿ,PdD1ã! a(ò(nmò´Ð®^ŪTÿ&ø3P±.N¤+²>0 Æ>®Üà +s/+Ó2>hõ3£h ¾ø Kà à)3Dx` ðÜä1Àp¯r"ì£ ÈNâ×ÄW³ªùÍ:vDëtºyñZBBWÓ¬þÌæ÷ïKàî¼(·)Ù/Q"Y# +0¥P~ìYÈmѱ7q¹,¤Bb!3(¨kêE Æåëìè#41 EÒÁêÌ: ¹e.ìÌ/@£¯Qúð1lRÀVÐ>å P à +ÅQ&p/ú`ê¿.b»4'Å»³ÚW|1LïèøP}?Bc»hCÑ/qX)Ä)H/2NiA1µ7T6ðì0k?" +@«ª`e2CèdXZª93 +Ã?/.L÷.k9sôe È ëÉR,4ð±4÷O©U3eýPEä&&jÛ ï !S/&Q`²q~ö+é'2vf}AR¾¸53Nò±.,Òcüy@A!PÒ®5Ò¤>r²n2¹VS{,/Ê[ QZ÷ >Eö¯Ã3tS´3T¿.E Aâ }LG0p|âqO"k>zB ýLо.Ä7TÓAs|%ý3Ï<S±ý4¬4Q #hÿJFéµIf/sj³o72»`UP +ó 8999Äï:*Ôoä³:sÃ01i;s»K3¾*3à GÔXÌnÀUÐ-°.Ô«>Ô±f²àT¹^ï\±Õ@ +¬lYã0HU?V`Ü?Ð +endstream +endobj +217 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +219 0 obj +<< +/Length 2543 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @5Î¥BT # C ÑÀ\4 FâáÔo"M&`¡AÜÒl6 ±@a1̧3èo·,ÆÀØi1Ny¸Zd2&ã)@d½D3ÆiÁaD;RT5QÑÚL42£Q¤R±-$eJØ ØC:ÎLN_3#R!yá ¸f4éTZ 2¦Ó)¸ég7aûjXÊ,0ÒÓ*¸t¹V¾y¼Í&ïoñá²¶c5ÝÁ#1pÜdî¤î Z§5-[Z( +BHá;¨Ü7JPÐA²c ÙC¨Æ:¯]©Â ((Øh5n P*<#@Þ7a +ª"ºå .xà9 ëRØ÷1NbØ0ë3À½2khææ¹ë{&: �9Aè´ +L +KZ#"`§$INlÆÃïpÜ7ÉÒ¤¶Ê«Xç,KK4ËÓܸI±ìÜ?¤N°@í8 +¥Î44&äÁ£»/C(0¹z¿ R§L¸3Z¬ï@itâCQ ä9Nc.¬á �:,®ô ÕÌó=æ7Ä+Tl¯Ñ2âÇB ÓM6Ít2®.²ð½GkûÁ²C ÒõöÀÄ7uV6U«¹aÌCÌ9£e&¶{3LïEMT[#xÚ6¯¬>6`°x¨CX8ð¶xÛVYár4XnKGXm$¾Ì%ã ¾"Â&°D* +(( £yMnåy8NPÕ´76C a±s 4²OÃCÒË7ZBJª©]Ã-|îµÐënå³ÁD${Ë gV0éF0 b.)¢*B6 ³±D¦$©6»Úå®bA|ù<ï¦M`ØCĵÝÕaÙcn$øÒMº J³Ô½qÕSºÝ}Q+`à)± �4fÎ ½5]*ôø^µ:ê¹a-¼nyBYV`ÙgZÃ=õ8Ýlköå¼þ×âLÎÔð®gzºÊaÇ=w°½cæqkàºrò^Ëêþ0FÃ0'ps +{,5-¨¶b\bÅí?8óú9ïQë2F_YS,+y;^ÌXZráö¬WÞìùh <£Çl3HiM1; @ªSj]I¦¥èÖ3èWíô®5öÂØÒñ1æDùDæÖêD-½Á=ææø +úXn º8U0ëèä£AnaÍ9Ç<] p/+ÅI¦ ¡MpDâ:èÈ +³2p³CÆÔ]%àW´+Å>ò¥¾%rÊMêùõÐÇÎsØfBG|ê£Ûï²F8åbÑIÅvPZ=9i¡ðÄqÏ«t7-óÃ(-eÀAÖO+ÙtukØïÄ£áfFÙYé �S.GÖ{hAônO 5ù0ßLðÊe=¢ÌûtÍV¥4ß$ó,g±%3æÐÓÕ´°Òé¡%,ÄñA£´ÓPJ-Q«PBpDi °-ÈÐAÑ2q¸ú¼hîHÉ2%ÖÇéO \ *BNH H T¥>ËÇÎÊ3¯2`é «×Ó2;8G¦ôWpJiÄI«æÃbl¸MÙ¿8Nc$SsΨÿ§l KÖ¿3)@%M4 >®GmB¨`l¡ÐÈX �±â/º>¨*§ ú°ÚÔg½no1èæ²%TK§q]s«-!õ)Tx«ê\[©ÕB©$ÍU¡5XG´ô\ºÀTÁÊ(æ 7Äæà$ ®Õ²íS +ã)ì|¿ÍÔLDÁ4 ÌÃJ Qý5d½ <VÉÀC7κÆj@CJ° #¥Þ<häµQMÆ®ÄZR BÉN?À×1$b¸Ê,ðÂà(¥2åEZrÆZË@ØòÎ[Âfx¸Mra$`ÌÑõ= 381ìZAÈ1`! L|QÖÂä'EaÌ=)è.ÙÜÔLMñ~*»$0PÃÊÍFh|4^¨É8&ò©óÃÏáÐ<Úþ[inK* ;8KÆ@[ÃÊRl¯]Ö@©Ã8hÙ;,âÇö@Ááo »HÛÝFöüÆ´> y¹4I.4¤OhÜ: (28tiLK(~}¯JcNc �Ud¢FIýÖÊw"Ücµ5²FCõå× tà=»dr<v~v3¶;~ç¹r£ÆÛÞȺ ä`N} ;ôm±¶ +CZÎ])JìMéØE'ô`çÔN,F¥ ¶¼QÁà <-êj:-A5;4×tT¬G%¶5ö+òíÀ-çË0ÛmgOA9MÂÀÐåÑöGQ0˪¼~¯3Ôå}Jû¡¡Ýæ|ãÖ:ï±Â|3ðNørÍÏê·BñÇìyÔü«ê[ÌL µcÿO¼òè&ý'~YÔóYrW/~,¶ôÎvÏ·ê^S5Ëßæ}ûçÝlµ@n/òýoQàü/ï }>õ¼ÂòKCª©~Zü +ü/èö(¡F �»nNîRÁHðåý$4×d,É6Oè,æI ÒÀcÔ0¢Ú$@Xàl*äpI®©2ÞM¬,ÑÍð ãBHÒ¯:N?þÅàdÆ,fljÆâÇ)pÇáÌ!HðâCLâXãzßÏ`Þ �ÄÈL +àÙðÒ EÅ ÌÄL ÂÊ@é¶L ïRAà ` +endstream +endobj +220 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +222 0 obj +<< +/Length 1551 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ ÆIÓ¨1pâ<7B +`PÂ^3¡&©É\3O#ÈÄPR#FâDªA" +h´pPÄc/E0Wì5 æé%n\0æsEÐ.Ú# ¦y7Î3IÎõFD"X(´"ýTÀ5JÄ0ÆØÅCÉÀÊd23¡Èêc:=Âëw"b¡ª $߯ãzY t,¢ÄB6L£¾§XTmé{¢Çå1ÎFS)»Øê ¾ú¼O#Ì)7ïûÝO +üAÊ9ÐKڮôî!nô>rì¼AJjþÈ0JNÀ¨!s ²ªÛ+¬±2²63MÀP"£Æ9 #è4ãsN¾ É"MlRJMz8 ;;®+Á`Gh¨4¡.ÊR(/áÀb¡%òPÝDNÏ&¡3Z³=8»îã«örK4ÃAFÃxä62<å ¨@àHR Å 7];Í3Ê'«<b¡»I;K¡æÊ£`Ê6¿£¢x±A Èr--%/i[²õk/7.ûðô=UD=A»°B¤<Öµ¼Ä44¡ �sr%u?#x îÄôÌ´e12Ñ5(åSÀDÕU ¶ÐenYa¢5gNvÌý?V<Iè& nPeÂÉÜw-Ï]×´}vß7 4ÞwªXý¿·}÷QߨܤÕRm¨XNo>XàQ7ö¶kgí¿Ì)Ȩµ.w%Ý7^GwQ¥ã7£ývITÒZTâµf/¯øTo9%õ¶} BP¦Ö½W³èÉ«u1ã×FCr£pë p@$¹#oäÓõæÒãsà ðPßlxÙÊl$QÅá n1¤ºFëʳ£az2£ßÇ °@̵D&þrÅ(µRª¶ jÇYìæ|! " H# ó:¤¨!) jª*ÞPgÐz^9×aªÔ¶XKR. ¤$Jü /èà@hQÚ7K �+ÃJOã¼Àê¹Ziyq³zoÎ +8Ç åÃýÃý:I <ä8ÏÑA¨û`èµZgA úd£?¨÷rôâ1ø 2DÄ2¬!±ÝoG}B÷îìLp Ð:BHÌYuHÙõÀ÷ÚcÃS«$,P²Pf±â¥cF`Q·L íw*<SJªoo,i¶ÂX½_ót)쪧öÏ¡RPËñE£RL)¥8±TúTKõ°·IÙÀ5Y«,&#cj¹d©_¬ä±R4uxdM¬ØpaÓ?Ñ¡6VðÆW¸L ¡¾4öüº/j]¯g.¾ü¬_ò¡ËÚã;m·ÃèÄu³=gMÙ4æªæíJm2eäÖYPge¹¯.éÄçåfó,6¦ÛfLR5lOIϧËPoíMµfO7O#RJÙã+㦠b!k2µÁÏB¶wéÞ;ãö ¦Y1ârDz+^BWIy+¾ ôÞ«× +' öà,Që=°êÒu/²½óø!J΢5TäQ±L$ ¢ä +õC¥(¨ÂÆb Kýk¦FF6×0`© 4F¡Gz*CÉyÉ-³Ù¦o ñÀ8Gë Z<gMÃS·kUQâ&D6ÛMÕªaæ+Zho-ÒôκXH + +endstream +endobj +223 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +226 0 obj +<< +/Length 1632 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tà.ªS±ä`2§3ÈÒp:MæáM#Hé0ÐTZ%PÃ-ÂêÌz¤4×e£ÆÇ Q Û +dÑ= À`´A¨i +Ôêõºí|\1RfÖYñÌèr:ÎSpÇ{:M&ãæo6çÇSwJônÎS¤Ìi1_tÞfïOYÎÙÞ9 £ +ò½àPÿA #(î8?ã¤<(Ü:abú¢5a£!Aj6Å[T¯¡nXP;»c Þ;Ãpì?¾P\5CÑ$1 #¤8 Òð»<x0à @0½O`èPô=ãd:9bàR6íF¥8Á¨hÅLba&á@I¢vì¢â¹®«¼¾/ÉTÚóÖ%ÊscÄÊÜ¡-ØAr¨ +}Ê)+#24 .èË:H!;ºðÊØÎT.óÖö½ïè7¾Lܸò<Ð Ä2ÕA �,Pm=á²4ðÆ<Ñè3u4Y6[C¸të0ÍUµË:ÔÁP7Wµl«X>h:VÏË?Ý{_Ø6p£ØÍ*Ô*7ø@´ +xl´ª©#&,K"Ì´*ÁØ·.ä7cZ)£2Ø+ªò®qþ)ê0è®XÅ,hläáN58â·s8ã(è Ýc ¥- â0Ó/dB(ñLPz:R,"IpðæóéZ`S§g¤}¥GC 7»c¦µ -+B°¼3°k!FPQ\[L·pl².Zq§ñ¬o¸i{¶ +cÃm´09&ÏÄqP(ðpæã¦³±Rà)çÚ0¤«¯|Þ·ºB T,<eÐnÝÈr\4%Úrñ°ïÜÌV«ENB øÁ6¡°jy¹«Z߸¸|ð¶ÀrÌ¢À¨& !¬ä* +BHÖ*TR'ä`X"5bÉfÁ£`˹<ðãâaf +y Á¼85pæëKë1L¼ÅÐjÁj2%xá7ð +ëtïó¢Èg +uïWÈù Ô[e>A´$+ÀÎ ;Qî¸á(¼D2HÍ êz&>Ès 0¤ Üâ9¸-Ã6Á"Ô\Ñ(C°ea 0'a nÃÊhaÎ:ÇxóQ^Cõaë7á,Â8fNÈl>>1)%0UJ,Må'"T¡ 8<ÃXO°æDE31'åbFhÉ:H@å*%¼«a1*KØé/äDª5ê¥ôÀâ#ªC\Ñ +lâI9Ea ¥Z8yRÚiÍðÛ/¤ëÑúÐCtó®zC6¨Ò)úX-W@±4¢¡¦ö("V2<ÂÃÛÃ6ªx>¸Ha3år=ô°ØTØV`¤%x-Õéd¿Òáéx<î±k<Hb c10@ÉøbÅL¡SÆhÎ<$ÎiHámS¾v=ǽH!8C3±"2¥ +[srtÔ:Ç`íÅXB^1ùfÁ 嫹T¸vÒÅ«ÊøTSS}' Íq¤îA{. Ú·XPHÚPÐbHÔíWÄ[*]m©õ©#*^Zc¤ÈE ±rº#©aÔ6Û&âésöú³ÁúÔ¹jsÄy@¹û0 +37ºq=¼%®a3þ0ôf +¨´¦nM ÍçÙ¤Ú[_º»°]#Sh.¹DÆ@ÚTjP +endstream +endobj +227 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +229 0 obj +<< +/Length 2453 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AhÄn.Ç"m<b5ÂÈÁ¼`3ÁCiæc2¡ªFR¡ ªxÊ3Mf¡APÐi9¦Ã)¶Òt`CA@c4NFÐÊrÇàÍ| Ïâñ¢Ã)1Ns-§E¨Ïcv8Ân2kñfóÞf×Û-À¨4\1R«|Jõ*ö(Èd²lÅ Ølpô]Ϊ.»TøÃHÕä-®B§>ÈD2çí]¨-ÂÝ]nò\£¿1L +ñ,Ç:,*˳.»8е40;HÓ-RÕµ£st1 ã è7óA..ú8¡ä¼ÏH`ç,N°Ø6íÌ,16!fÚ»+k¶û©o;ôñEÏ hó=j¾,JÔËÃØ&£ÈÚ¿£À»¸Êº²*9kêþÀÀL2Õ·RØÌ32ëL3 µt,3 ëT8 Èæ4r³H4M³pÝOó8 í£AÑ2£,н,BLNÑѬC0¡cê2ÈàÇT!ct;JÕ<LÝKÂ3¹"¹ +c%¿äö¬R¦9J²¼³-ÒìúÌ(pã«Å6âIéüÛ@#ëCDn A°\ê\+§&½Q¢ùX ~VµºæÓ5ã̱¢@Ê4ãB×eËò"æí¤þ×îz¨Eë 8l©×®cÕu9â +ÂÎÞ9V¶jæ¥áÅõuÆHE¾UéVØ£ö3vFvªÔ6t@Ê"¹.ma9Õö.5pîÆLv&¹ Àjäaiv7jãҰ˲¹ªZFU¬¼ñÙ1SÜú:Aë<.>r\ËZqÜÙåK%o4þÚ´õ·Î Ä4¬{VÕõyÂÚ§#¶Ñoö©bËÖédÈ%3m³ 7TLê9±ÐߣÒ3;¨e+ôËtÆ6®ÝG %CÒ¡ ÅH6 ã= CrÛt& â8'§5"£!pf¬Ê±Ì*ïøÉUª93*ô)}l°¦2ábGÁ0ý(-kàrdÞÎR¾]«Uk¦ðÆÛà ´3 ÚpÂHv1ËÁSªä,c`qs +ƤõU;üv¦ m%dhácȰª.w´Ë£lTäY k`g ¶FÉ^,ÂÚm´fØü®0pþc X!µ):4¬éVBÊÙ²:µ¢ÎßÓ/uȵ8Cë82YàØãLE"ܱ2ÉÍ#ÄU ÜDz@ ±×~mho©½yYdÑòÇzFÓ(Nnp6j'Ôp!Ouêðîãò9d¾I´pÔU!AÑA¡f +:4ì ¤$vá´É°æ«È 3l7"4O TE+HvÉÐÈ:@á?LzV ÉA¬äº7 ëã0ÿM¼¬j)¾P¡ T(@ø°jf'Xl3Í´Æ¢øÑ!ª &À»C ¢ÏMf +N¦õº¢CoÅ!óÃ%SÅe9¢ÃHd1N2ÓôÊ´dK=TÎ.§,aQæ:lÔ ÑLcoAè¥*.â%vgÄÝÂI(©,¹ äÉÏ¥Ì@VêàÂH!H)P¨Ó!t@rÊÎ%¥vÀ9$>¢ZdªE^©r¨ñIú£Kþ)Cº°eà [U$ÆV|QÓ Ú +Èu" õo'JfÛp\3#£M¾ÊúÖo9Õ®uÒ©ÎåWð®Öμ%çcQp0lðãY[.¬Í³k<õ²³èª£CÒÖCMVmLBGnâÖc8t§lÕ²ÕÅä2Ipêq(ÐCÅç½!¢ÍÉZ&ƪ´Ñ o.Òu äUׯ\eÀr&L"/|y=Á´+ÚHê´³ò(ÿÕJjìMÕõUåÇÒ£6sÈYåöY1¬1fqÍÔ¢6ÕÚS}þ¡ãRæÔܧÛôÝò.É!ÌFxÚË|:òùéAðÜÿ ¹!Ì7SÒI!ã³ÒkàMÀ(Á\/GФò ÈPPÄB«´ÈÀÀ¡CdØÆÁѦQ¡ÆñÚ¦\sôX_ + $êFÖª{%ÜbBÀT +A&Rà# ÇK¦L6`¹0*Í ±66ÈÔºO-¬v®×Ø»däÅÓ³v~Ñ3ÛL/ ¸¶Í:¢íÚH¤F°ÑdkzK6þ Á<)ÝO£W;£hc¬A eá �BÕÖ!4"@Z*Ëæ û +BHB á0"iEÊ97Ý9¢t9vöà:7¦ô.¥®Mé;KsþÑ:Þå{8ÍcÕº/:ì|Õ-yÏw~Ãíð.NÄwOJâ¹tþÃÌ_oÑ[SkwÞ®¸5X2ë{¯wÚ;þ÷Iüô!rÉçY ãÅòÚ(A +ÁgÈõ?AèÏÁw¥ùPåû <À¥Ô§Ib@Lªe_]¹<*ØÆ×8f&óä=íÇ/ЮÅÝüÙ4ÉÞæòûÉgf×ÃïæB)Sø |fXFØñ8¿Û©WÅ|&ÿ;Utù67æÊú +£p2ä~v¯~§è´Ódàd"P +±K²±sb6#Ô÷BÉ �üÚÀ0 Ô Ø|P\1Oð +endstream +endobj +230 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +232 0 obj +<< +/Length 2317 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT C ÑÜ\6DÚpÄj7 )c pÂFT CiLèr:Ídó©ÐRT5QÒ:L4NªRzÐ*Oa QÞn: '1ÎÏi5 öÑt/ ;M\!¼Ío¸ÁHÔ]Øb4dwÊÝv¿Y,ÖU²Ýp¹]4°A¬@k«¬Í6¸YHªEŶ9|6#Çm29<IÜdÐRÆUÁÞ)7ÑopaIÀ$ ÓÊ:s0ø!¸ßèä2YNÎH¥J \¼ªJ`\!£±,0Ò91ÂÐ0OêÝ@ÂôAlÐâ£`Ê6®sø°Ë6ξ±4Ç&9#è2At,Ñ¡-Ü @¨Ü +êÆ6#ÇðÂí"CJ DI1C0Í3ZÂ9£¤` sBÌwÇïúí@Ákü®²(Ì0£`é BÀpÛX±0RÌG¾ë/L,óÂMÄu9c "Æ£4hÊ20£xåÆótxÆ>ÌK:ºìPÝK¿¨ð¼mh`ó¦R¼Ë7õ9Ê4¬ä2#] +ذ½J\õFCìdCG˼¿ÌW3WUo<ç¨çS¶#x@2OÃHÜÂõUP1YöcU6#(ðÛ´5ÓÀñC£UÜ:=ãHÇO ,=Шö¼DȰ<ñ+@/0g`Ñh¡RF®##hÒ642ëlc³R«Áo+]KôµH]ôË3 Ð:ÕDÿeUeckí·E3YqVuXØ7ámõNU#KE,Èàràcµ~×ÊíE¡dÃ&Q¤e¶ªç8hf¯3ѶÛòÛð8£2ÒL è<ðúMèf«Þió.Záõ¸ÄÎÞìV6ÕZ|7¸ï{ñ«Ç:ÌM)Äx¤Þ Þ3±@äqîãU¿§+»þ;¦©»&0¾# "À"â*bBv¤A¦sqÌ1;48[ µRÄGÊ¿fA¸qóbõXhN£ÐzAX"0¨íØ3Àà¾7fÏT wJ8bd>oÄ¢@¨ +tz!|*`ÈP¤íÈ@a0X2ÁæRk:ÀÏ®ÕÞª;DÀ9/dÞæÎÃò Ä®hÇܲ½yjýåÈbÃi-) �9ß«÷O/%@ E +Á$!°[3óEèt1 °t>û"ïVL +ôU Ä ¢tP`ñImrlX£¼y«<9ès(s?gð3 �Xø¡¤6F$!8§peáqÈ Üí +Åò1«ô`!ÒzYì=§¸#äÉð;hù#,%ªýüLÏ N<( N¸7;(ÌaêùþÌ '[òªpÐÖôUmt:5ôÆÛí Ź²¶êÁYÄc¡À³Àæá22¹Y2 ¬;¦Ó'RÖaýE1ºðèì_#x¦DØÀ¥2'éFíT 0?peÓ p®Æ@}²!qo¾·HøËKCIÎÔ6*8l1a¢?:FÿcÿÒ4ð÷RÎRT³©£ÑsHm +ªæ çkά4'ƤÛÅ1ÉFÈP¨ivÍ:³ã©,寧à³ðÖ¾$õh±õRd}.F¥Ë´æpÀ,ðh:5óAUr®½"(øÈØ||µiÇÆ-gUræ]¹Kbý³¦-¥¿FZÆôO ¡ÈÐj A9Æ6TH gmlB310$Dcm-§µÕ+[skߥòM¾¿¤®»â(f·÷UYq]yvP Þaݫ HO:a¦Ù^gM÷P±0kYÇà+µÃ &KÓ7¤ÂR !@*°jx¯U¥7²¡Ñ*SéjöÆU«ôθw¬2¬p°K¶T&ÚI/C0uÅÀDPàuU¨Crv¤â»¯§U2»á|) pÂ;( ©/ßKìa¦µò©|³lnÎ\XÍ[w-öVÁ0ÊØøBd®9ÞlÜØ|]o ÀS`³jÓ +nõ$%²YÆB¡« Ó¢ó¹ÔÚ«FTÁ]Ph.reaEâɬè Ö¨ xÂ$é:×¼@t3ÇcRÂò¯: +8µ³ GÝ^U´3Ù5 çJèBÊxÚà°%{ÈÂH_{µ¤öãÙ³aÁDi=AT&N8$'¤\ ) xLáüGFy«( +a $bøØRà¼OÅPBo)åmÙ9µÒE¶ß¨06ú²gÚiMìÝtÎ×,õÕèÌ»$L^&7èòbKÂPìC. ItQ +L;PêgN뻣~ìûºGEÖ%oQ r»#Ú¾ò{¦UI8âGäJczº(ë]Ö¨Hvj(så ø®ÍÔ¯*¯cTiJ7ÓNWعrlt $aÀt ?ÖÃò¸@àòb©=ZtcÌ*cjg¥©ö¤çØ|¿÷[ßüxn|ÌböfmzTsà<OY =mTy¿ ñCFG.".Br@@ +endstream +endobj +233 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +235 0 obj +<< +/Length 2218 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b0B £qpÄi2*&³@P ¨h2ÆaÖÂo3"æt2cy¸è'9 çk Ân3wñÂu9L¡¼@d2ÜFÓIºÂt°Z¦óÚõi9&<©RT5JéÕQÅ.´ +Ô +]pQ:̦Spîo9/9 ÐA~¾cÍ&c5ÇyÆâFÖàsiõ0R4z ØUQÆ9 ëåc¡´i3NÖ(¡2Î Õ ¥!oÄò5aj½*kdÚ&h"¼4 +ÈÊ6£kB,c248¢ê:,Sðý3ðÒÂÈÃHư®ïcDL¹ÃíòÜÇ£àËËPÿ;Ð +/+ÎA S×=¯{âù¾£#î8?# ²þ»H4 +0R_ +²¿Âp¬/³ +ø9>lÙJ"ÑÅTXà7Ñe6Æðï²ÐÏGÎÚ ËaÌI'G%ò@j© l*ÚJRDÊ\ªx!eRCxæ9 ¢Ê3Ua Pç ÑX横;¹G!2"H Ad!!f( ª +4«¢(Ü:¢4>#, Ø4Ç"àP.!`Am[òì9Ü×EÔ#²" ËÅbÂ8^=Ò^ ¨2 ȺcûtK +M-£)xeHÉ0]¨Û]Xk»¼ +jY3a¶°p"â , +h* +BH,)%$¤#Á³fbtüJÛ ÍLXqV ¸'x®(4pP&" Â¥£ ¥!eRt}-Lg!ÅTV³d(U£Tá«UÕ¡P)#pß~B:ý fföeµ¨lª"öAW[@è<Ê@é±$@3éÚ¤(kÖ¸*ܰ5a¸n×qù*º*éý$(À3ܰ*Pwa®®c`Â3}´~wg×ßH9ø6·âèmI¹ØÊä4®¾ ê{>ßyï £ñðÇOËÛ÷6¿°)¢H9bsK#ð|oÍá×PyS¬z©ÛÐ@çZSt-l"µ×ÌlKå2 2 ¸FÜ¥U\n! 7 \ +°sgMï>@ÜàòZ<e8e´¡OhyÇ@²°ËQóÔJRcyAÏÁ7FÆ¡ÓaQìÕe2#c -áÉÌ@êcCáÊ*`ò7¡1à o¨d áܼ=×|б.¨ÎFx¢R)¬Ö!¤WRLRI9¨R@Bxª 0G0Ì4ÃR빫SU1½slìÃ9).4É +ÚLèJJ&³fQÑõDª%JÉMl]/ÈÅH$Ö`£¼g~-4 ÎXL© '^DÈSAPqdÊQDÛ¶ÎùàLµf_zÎFYÓ%LV!²[àø£»3!Þ<Ç´úo Á¤Ê%ÔZBÆ`7°ÄSê* ` PrÜOSPPd3yÀ1@¸ ÆYK9i EËàl©Á¤OÎt à;ÌîbzÌ't÷BæÞbôeÑr3q¢'°Ø#Ù¥K9»4¸k P(A¸·óKË1y áH£Ã9,ÈU³e%8zóDtÔÂ0_ +l¼&´÷´ÂHT !<'3B ^1y9ªbgí 2´0úVêI»Ý Ú1'S¹\ÙM²öfJÌ«)§¥uö>G'é¡ÿÜ«M<ØÒÔ»MÒMÁË<HÀݵS»m¬ Ù3_p%2}¡âÎ[3gè22ÌÆPÃ._5# ¶£ëô¨ï"zè|ÌÇFíùÓDf2HÎø_ÂóJ/ýn.¦^ûM×Ñ=ke3Õ¢4Bê(ÅN1x°ÛVðèí¯£ìUÈ 0¯`CR°¡:î¼'ÍdD²d0^p2ÅÑ&ÜÍð3pbRR¹Þxd¨Gef/, +¸Í]Ü@é7i«¼Hò±yÐ]é+¹]ç=¶A' ¿²¯bzÔ£<Ècñ ÏgHÄ U;Ò¾²-1Fv±c&íéÖTsQæåîØ2õiSÈä´Z@Ø«Y,Å͵L0¥¨'u �×¹c©S!7nmï)<Sy}¡HqÃJ Âî³F|Ëסá½6¢ëövV ª7MTþ;Ç·xB` ö©yÚô*ö£·£6éj?A§pïå �vzLp¤ì Q rT%½ +ÇÕÆ[î7².§vRåp +^Ê';ÂéÝWñ½UCz»_oðC¿ùD8;î6Z´] ¥&P=¸àwL±ü×Þn*·å ÃUI÷oÐȺ°Å*×äÇ"òOnD2ä°óm-¸n¥MpöRó¼9 +á:µÝÈz]äÝvÇd:îWûR'ÕòX´Üܼ¾1ÎNQ¡çÝoõã пdáÝçÎy¦m¼ÿ~0Ún²ò@@ +endstream +endobj +236 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +238 0 obj +<< +/Length 1878 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6'EÒ¡* ¡AhÄ`.¤bѸ¸b4ÑÂ3 + +erùLO+H%I4Z"%CTèQ±â[iõÚüPT4Nb±Øu2&3¡§t2âÌ"¹¤Üd7òYñp6O8³IÓ%L'I´Òz2.wPQPULÁ!K ǪÔÒÁW¡s`TâÇe³ÚI$ëm¾ã;¨°ø^7Éårùs= Ñtc£TÖ5Ã47HÆ7ÎR£7øà¤n#ï¬ËBÜ' Âx!H¬"¹`S穪²ü °Ã&ãÖÅ1s Ò´íKVú¸ïÃ^ÑÀ°< rÐ Ð0µÌTBß8Ì"âc¨ä9£pè6,(ËHCHØ6£dÏKOÊå.bç/Q+¤êE. +î¬K$*+Âм^öÆLøÿFìÜÑLk(Êr«\9DÏ K®CE#IL»Mq"ùº«aFJ´±2Ë´¿0³øËCx¦Ó³j77Å +àa'Âs³ÃÃpè¬ ÓV®ú¿É±\$°±ÝÐq³aCÀ°%Øô X1ÑÁ ánµ£LY cEûRÒ,$ÑrK+Ë5í.ÕsÃ2_Ó<CZ/³¢é×7{³9»ÕòÑKP!¨m?Z4ßT>pÉ?¶´pû¹! SvFeTNâ¶Ãskrdcx䨶yÛp2e!>l7À££ #;<Ç\W#FÝX÷tåx =ÆÊÝa )~Õv ¢2:¥!¬ +ú!ra¸.£8k<(] �ªªra±SµgÏá õÓ~YÎ^ÀNÅxàó3]CpËò èMÎàn|ZÆ\|J* C¾ë ÃØüNèxzO8áúæ;Ës,õ=Ãt=çCôú_WÖõù÷eÚvÚhÛh}ÞåÅ)lªèx6l×c ÌøÙÇçÞ¼zNø?´JÆA»knQí¹w2÷ÜÛçeÝô v|ir1nÕ*´gR#öw¯ä°`PH ¤¸ 0l^X@Äø¼IÀCÀÎ60UØ(aÉn0Z(fc Ð;4ª¸(¤8' EDH:$>" I*k@'0¨Ñ[Rq¤ÀÈn"óÇ;'â´Xç_Ãu)àÔá9×h4!^ ÀPKEá:HÅ, Jà{ÁÒGIä¤?`ÉÁy9#ÁLs mÔ8bBI3#q@HÒ`Þ1`1±q@W<a´ +qiC8^ä!.°Üç Ä©xU¢80e<çT¸âË1@N¸Ä åÒpõ¤æ¸Èp71Eq@äL¢E!aéã`Sí5nFh( à" ÁÍÙ@ëk(: S<kÅ*7hìÍÅD÷ÃÍ2]´±ì¹J^1£jê~éÍC«8â XÜ1©áÎthz+ªð°ÐAAh= ª³:9 +É5¦¡AMÜÙm¥ÌÝS^lÎÔÈcA¥À<ùQã¤^WÎâ<Äâ¾¥²qLAV Àbõå=8µb̨ç_Ì7cQåìTà ?gùJFE)<kpf!ç Äêt¦ ô®3pÕÁãyðªÊFfÞÉ'î¨âvÁ¹]à9תøá«üjxpFN&¹EÌý²íë¬×'dcÜÏÑcôÃ彪â=7õ6^üx¶fÓÁHi%¤æ`9^+íà5»óh+s`Ãá2)ÏßE|àØ AÄGjF^¨Àÿ.SdïµÆq×éÿ`ñ eäojôÁi7{ X°x9B%Tõí¡Â}'YMvdnÁ÷ß'I}1DÅWåáßµB +Î08Ë+àû×LYÇa¾µ31û¤Èy#ºëÜi2c³ÉÐiK_\¥ +VÁİԴã/ÅT.J®9\læ°ö9²ã_ÎSxDmþßÀa[Yz6è 4.^ÆùV¢ vÉðm¸R +endstream +endobj +239 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +241 0 obj +<< +/Length 2062 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AhÄn.Ç"m<b5ÂÈáÀg3 +ÆÃ æ)*¨äi%* +§£1JÕ0a/R¦¡APÐi9¦Ã)´Ên:S1¤ÜeÀÎ)È@wÇ çqèt9LGS¦@]ÊÆaÔÊ 7=}¢Õ#RavñÔ]#J+`«½v¾T½Ø¬mµ®Û»¥ã' +¹y°_0XL6 @c0-y¿°9sABÑ<f3¬ÓEÃÅ+-âö9i¼äò¶M @3 ã`ØÍ±Ã;¾óc£Âĵmk âN2Þ3 ä=Oæ>HêH*8iȦ+ø)"¸ ¢*x§¢ú¿°0\ÅCîÀ0Ã3£Þ:ÐÌÌI¬ÛN¿5ò4Î0 �ï«ïèû,2(®&âp!"`)"Ð0Ãæ²²R3Hí|²9(Æ4±°À@Ç6l£Ô*K¬ÍìÆ²OLS 1´#è4¼ÁtC1Ó"¨ Á¸pã¸oÊô»/:nEQ`¾$ " +"p'ñ¸h¬GrÌ|ׯì['³2¼¢ j½ÄJêYÖ±h'"¨$©)¡À`رëY³PÜÉ3£>Õ´´l«fõ¾¾Ie:õ}hEvÐ&âµÈ²|¿X×[_v°7{þÍ}(ß-Ck}· ÒAÃ~*n³Öü¸ëÚQY§ãÃÔ9ùîÎTüÄîK;&rº + º«ªø<èYªÞ»¡%¥Zªó²°l,¸À³4Bfá3>ºU]«âÏ^:Ëc%D´©%M~ÕzV [[v �"BÔ+] +OVäLµDϪlïÚù]P7Ýׯ4<0åìØì{-Iô¨@-=[,8 ãÓOÔ4}"â/0É Ôà³l*"|éoât7A°{Umíº1ð=RìÎͳÛN²yìWOÇbÒÿôÃÖ4Ôóö?hd:&G£ÆekÀi«yàÜiÉr4º}æ¯Ã:D[ÕA1}j´¼ç +L~lÑó4ö üÏb¨DÏ)þƪëèl{KÀòØ+qyT·WØóÖØR¨½ÀdÊ«ÖXî=Èþ ci]}>E¤qÌ!ka»°hdî]ØIw¤òC¦%«r¹Ë #6æºøsÎÿ: @é3¨ Ñ088YUlK,!MØ÷dåÝ«y +íí¾·öøïÞ ÞXð¤õÆç¿3yÑ5Û7à¤à!²«YÇBu,Cÿ;ÑÊ ÄÐYH§Dö¦û@hs!$¼*f4§¦ÉF\t7!L©ª²ÒÂvÚÑkçIaæÈjÖjðK Ûr£ rGÕU8L$,x¯TéÆ=t~ÃAvkÝFÂÖÿÈ#b%ï¼9å8Á �oÉ7 ÀÐ- +F1a*aÃYé6)nE"!±29?N¡Dä$@pB!2¡]|J@\ ±¦Ñð]>ÄN)ËôÖSzqNiÔ"ÀAQæú¿Eè!<3§b}9"Jë=,5A^Õ(¡Uj¸GW¡ÿKs¨]'±$´àf |7 .°¯:Cà0FààQ C )ÈscY÷ ÒÉOöIH#W_è84.àÆ æWxptÅR +à-u%¤ç¾Rp©gUWåB³dCu^F̲Øc g©*n æC9!U^ DµnÌ ;uG^±ËO`6 ̺M + (1ݧçîa1Æ$1 E0ÞãoÁEó;áôKõ/òÑud ä«Â¥WiÜ4JÙFpH +¾æ«ïAgà �R +hW90Ïö%u` $ ¤fæ!AÈ!ÆÃ:JI-2Âs +JòZ ôL8u Ñ×"ÌôrrFJÉ9«îìS0ØdöH{¡X2¹aµ=_\p¦ðͤ%TOõOËl75îÏPB÷A¬¹´´658Tò ÔlçSâ/í1¤Ï½12`oJκÿ9)Q ËYàÑ«)q*Ükéén ùöTOîÂ`×â3Lq1È9Ó=¢èbIf%"¹Ã¾¦Z¨õÛWÞ¿^d/î%Âx| +è(кDm)Y8pä Ðòa5KE.%Î^_&Qs¯cæ=¹&ÉcÓ nÌPÊsO÷K65Î äbùáß<-¨Øsüöý6\:¿·qb@¨( m P0(U¤ä6L¢=A¢ +endstream +endobj +242 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +245 0 obj +<< +/Length 2868 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6N¥BT # C ÑÀ\4HÅ£qpÄi1*%£ &f +Êeòd¨E $rqÔE'%CTÄʨâZiÕÊôPAÍ&ã!¼î'9fÃIÜtNFSÓ0åæã)@o7(Äy:kLFó®34yÏjuzÓÄêé* +«c R¾(2sf3¡§P.¹Ýp7qÅæ÷/U5Éf´Z rI8O+ônÔîêø1¿Bð)uve*k18¼iß<Ð4M#LÔ5OÓ^صͣl97\ +Þ®Kæ¹ïPà°Â¨æÒ±-cR0ÃãàÊc(Ô°Û"ݲ¡JJ*Épf>J[â>ë Ø:@¸ÅÂ2 Æa #©; Î~À£(àlºás²í¾qÛ +'òÜ b!§a lACòÖ±LcÉ æÈó<:2,sRäqÂÜmCb<3 \LÿÍJ¢Æc¬÷¾.㸮8Â6µ;r9 �2rÓ¤¦SÏs°íG TÌ ¦ÓB±· bâìýO/è@å£HíXDRÖ±£¨Ä6¡k&4c]«XcÏX:ÛáTo¬Ï4¬b8'KL×6§a eÏäöÉÏÌ>É3q48׳1GpDÒÃN9 Ä96øKLÏÓJ#Ö¼VËêþ+é=z#°Â4϶ÛZ: ìÈØ631Iµý`ý(2V ä70àïAð´1v°îIa>8+I3 +ØâìÀÊ<H°77kÐ,ů£]ÛÃEË#K6cL15¬ß îc(Ì7³p|ùçyî êSõ¼É]Ñíà/" +BÒnß,æï»ýÓ îÔèlµ@oHõG44¯]ºÐ#uÏXã4æú+*o_âp· âcßV^ °Ï9VÈÖcÍX2·Ü:² �´±tãP½Ùǽ4à¡f (Â1ÜõÑÕe\kTPÓ¢bkaÑô;¥Øï³kWÇx($\Sy;gi:h^p ZïL4çßÑý{°>À/àjëdüï0(B !Qc9D \èszÆÅìµc8lM®H´0NðsΨ4ÄÅÎTQ«ML;6{S ðcí!A PÂc¢À+´HÒ¿nÍàEö �ÚcIÆmV7Ũ"XÖ¢ª`bq65E2*Õ°0Þqeæ¨0³Zø°eb²øàò 9tªÌHng"WBÙ +[3-ö(´8j#ñ®FT3L@iÚ3rmµs6ªyomô7¶!"C+ªò©?Ó$%$¦©õW6æ£JkjXêøÞÙ 1´ÐõTlðHîé«TÂÕÌ]ï åsÝÏs¿_Út¡ËV"áÍD¬À9»3$í]¼1 ¡£"U1Lð5L0l7søcI),¥ �`ft8óle[-ïíî¾4þ¹ Ï2Ø%PÜЪ[ Ôµ&Rð\TjI|ä+NqÃb{áÌ"©)PÈMm¨Õ¾¤T¥Dòeª¡ÈLâAÔ3iUPrVÕª)CBø+XbÆe?ðÆX1¦1F¿6êDÕc~¯ÝüÉ{;ºÌýìÉØäYÔ3!W³©XÛn²vVUK e,³c m£-AM ?¶ÏÐìTªHÐZÖÔª5Uhý$a`j-1)ë"Ã&Sêï ¡Ñï°®ß"EHö �1/IHáß}3Ñmj׿²`HðbºiWêþ\ªpHÂUÚU.û´ªÍZíwÃÔzâFëuTUÜÃW|+ë>8Áckë `Ç©Ö)ìXÈIInÜO3&ºèYsrk UMÚkR硪¬²å9/d*[¶oã¶Û¤F¼ÌÜÙe[¤ÀuØ4.ÎÕ]ÐAwÙmH{.ÚKyïMYÍ'I£Ê¨9qq38ã ÿX#b-±¡*ÍÍäuuc5£½Ú:¢ád驱åù¿zaýá÷mr%EÈØf 4ªÊ;6 1A$ÙQp<`Ã:ÄwÜ`SÂ:@jD8°ê°9S[ìµobbC£ +¡Jfl3ú±ÎLýá¼<0Hw-b,^ûJB@å;C3(5²<|gÓÌ9 Ý˼|c2©ù4ËTRf¢¿w¬@Ï!æ=,G+©f¡09¹WEr +@Iª¶³]rõß/Év/ØÖqrV¨oÕn\ã[Âo½¸Kc¤ÒÅIÙn63sfÿöFÔò£©µìfÉG*Ã\kLëÌ *e-ânºFU±®Í(Å¿îj¨d[àÝ7{;~é �_ÌTlºÄ|«ª(!¹ß¼mû¼÷¾Fsn{«ççC=äYÛ¦u ÎæpÌ ´m¾ÒãÜ à¡IØëÈ NǼ' #´4ËC-òí*BUWúÔ{ÜÛÎ_¢ÏIêÝU[YÞãÝgÏÊÆå?c¾¨qÃ@CÜ;s}Eú»L±O²sêÂ1<øo@_ë{ Æþfø¹Èµ ¾P à5¦n +:CÀÊ`-$åäXZÄ6R°C®e¯Z¤·ÆþOèÖ÷äXðo>ë*Vñ@LÂ@ÖÞ0Ïã\(îTd¼L xGc¶8ï篢í f)Àj( Òmð¯ùbao@HV¬¤¦T¬¦øã@è9ªÈm°tRÈO(ý!ã¤weHiP>bã.½ïÎÀ¯ÒñZÇJoâÀ &Gî `Îgãjí¨òñ0üÿpóoÄ1ǺQ¤4ÈLªéèÊ@ø0Jém?º~P®Ñ ¸ÔmI ®æìNxj©ÐZ)¼ð#:ó¦WHJ ¬a`bdR0º3¥| ðkn2%®[.*᫨ðiGEq+õïý¯fÉ# NÐZØÑjçÏiq/Í:Í×ѳÃ$ ñ§Åì®0é#IãZîÀÈ3Qpîº02îM¶èFø2#(zæò|üµgóq<!@Âyþðº`Ú¨ê`^`¤à. ÂÃ%`% `¨ (pR +H5 `i(2XrÖ Ä +endstream +endobj +246 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +248 0 obj +<< +/Length 1636 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b0¤Ñ¸¸b4Y *rC' å"ùT$¤2 BÐO'O$cq¸¢Áb²IÖkE¨ c"JB-§ã.·)uÚýÇe( +ö2YL¡f"ÜCÅÛ-y½Ùí6»m¾ã S5à¾B³Èå"yTD CQ×/z¾jíâMÀ©¡EçH©£lvxyÒïÚ åf5ãY ¤RqW±ÙK !S)éÛ Å2A'îpÃÖö¹âîØO¸û;Í;ò'A.ºz«¾² +bx& ÃAÊæú¾ðؾåµÐªx«À®½?ðHí¥L$Ý"Ì\°Fmü +BÖ÷»Oèî«ÏÀ$â@* °jÅ1i �Êâ +ã@Ê7¤Üc`Â9a Ê2dã9Cê9î9ãÒ0 e3¡²%4²'5(0cXÎ9 ã¨Ü2STâ +#)H]BÁÀhÆ¥x[l 'ã(Ø2³xéI#`Ù\©8 1!p¥±ñÌÖ0£ Þ6ÒHÆ0ÚÃÈ@1S%2Ò# ]l;HhU;#UÙHÍKµØ:Ó~9S O×È"ªßh¥Qd`EZ9UõgZÖøuxâ UaX¼¡fÙöÝiÏaÛPXe8eÕtóc?cz9#Ãxå|)ÈØb±¶í¿TÂ4åúÀÏR¸Þ;óÈÅXVU¥m{Lá9f7Xæ2ÐCà0çÕÖ: 9èADV£`Èho8ô½ðÄLÚ}ÇÍh¾Á"!7MøAhÏÏLn[ýÙFN#(çiæØ0ÙV b +eDËhõ¦ã[>½ +¨) +«>E^õʨc-âÊ×hÈÅ^ö:PÃè:ÏÛYuÁhg3ï:Äê½ÿÂ(å;½ÿ©PLSâØÖGf]iótáuÚÚ×WMÓ¡¨!O# Ùª$ÊÂeí`(5v^@\/ Èn^ïñ]ºÕBN.TÍE3/°hÊX( À9 èN+F +2RªTËìxê© @ÐÌ_ÒOIä0Örp(àêµlQ aH)'FÒrR ÑHY°nl% §4ê¢ÛíÁ Àc@V¡È1P\ÚXrOL¾X¤ÌT:\Ééy5Ì»³.®ÑG¸ú ¤K ¡%Wp(S7¡H!HBèjÒ«§GãÆPnÃÁ3¨uLÙéÁV&Å`*âYÎÃx¡ä$)/,W¥î±%ĶdY¢ÔkÁÝ<˸czxZXÂÀn í0«ôÉVôwYÈ3.@Ø´äS°¦Ãò3asTè!§dñ2!ë®àäªye-9| µo XlJf16'ÈH¥"âlVj./Ws[KL1ÆXÎÁ#RÑu1µL5ÐÈ×Ò` +LÇGh`WADásêÌÊt/"dMÿø^ HyÄ � ÉãO> ÙZ'Z(f¬ ÐHdßC9"ÊÿW`áôêI¦ß.Ý +;§xYÁe T%T©`éPÀ t¢$ÜòQÊUNH3þ¨ÉD ¡D >¶XVèä5QpB ( ®Ö)¸w + +Ð1Û@R SÞß( ¦½-x +í(2\YØCÁµT NYL"Qk.8t¹!Îå+mø »7l&3ÐÏqoô¶ónîÝûkzC¥ë·7ÞÃt ù|R +endstream +endobj +249 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +251 0 obj +<< +/Length 86 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @6Î¥BT@@ +endstream +endobj +252 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F6 7 0 R +>> +>> +endobj +254 0 obj +<< +/Length 1955 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPG¡PÈ ÆIÓ£ØÞ7B +`PÂ^4&¡mx`0°ÍÁS¤h(7¢ñà@DÑhöA¸e$ßc°²$¸`4ÍmS¹¤Üd7çù4Ês9Lù{Í-åøì\© ®âAB&\Ær4y¸RT5RÒJ\4E Òsn&[±]°1eÄ|v@î 6åó9³»o¹©P½õJ¡ q¹¡z<°ÌBÄ5pbA fx h¾# , *b@!lêö*û¨Ä,;¯Ê4竪ü±§"$ A hµûbÙ¶°ótÞ>r ࢲ¸ì@js%¨4¡ oCÔÍJ®¸@9£pèx@0ê:M#tÑ53s8Ò:;¨1sè0+ÜÜ%ml#é@qjBÿR«7N ¨@÷ ´îOE©kK!lXP6£Î1'zæá^2Ð(ÈñÎãDÑ*J¾ ¢ -Ã,í`â" "x `ØBpY,ÐmN(qbÑ4üZ³Ü+QHUõab¨ -tö cYUhZV kxåe]·}ã?#bçB>/hØi¥ @QA¾hfã¦,B&W£PÀÂ9/M9A°n·µ£_¶²ôÝTíÆïûPè¬2ïem0øÈ{D¿¨X@éÃ|ÏTÖØÆp gK&Û¨àp°çé}) &S£ ÚK}é´UÆd^£©Ì&¡2DO¾ù±BH¯Ü ¯Ü°$eQ¨h +C(è:Cpçlm;Îâ>î$A$ n¯E2¦êÊ£%ÊNC°Â6²¨æ8£Ò3 /é^O]¬ûUV¸Í]Òs|ã5±áÄÚÊ£ÝÊ£0Þ6 3w`ËZ?H°k²eÂÔ'!y#!@ª7w³åm6øÔ·@½Ù»SC#» §ªÀr +{ o½J<wæ ÀTM=FÿA &=ÉPäLsÁ¯É?¨@Aµ ä=& Úr<íâ0Eܼ+`kÑuöÃlk ijPY[A ¡U0ÊKw).hú¢Sߢr'ΦXJáfFÆ©£0fãÀCA¼Ì×"à1UΩöÇìæZË8Ny$À@ÁÁ^%j,¶$_ÒºBð½x¯4$ÒÒC%´frÞ AQ=·23¦Ó(d°3L±L$HÖ}JyÂ*GèäÇr:_}0ñµ X` (Dº¾ +A(BôH6VÃ8¯Á<(?ËTd__â FèådÍ\Á»¹Ôçã´ÑS@ÀÿË&àéÕäK!RBCÓ(ÛÊ; 3'4ÖüªrM$±É< Ý jf©¬1ôÞò²r±3Àx|§-¯C2ÜN[3*ÌµÍÆg7ÑìoÍa½7ð Yò¡¡²vÎÃ#zM9··PÜÁTnÒ6G°ð[Ã_±é¶ZlÑ©Äâk4î¥z}P*å6(Å àÂ)HÈq ¨¹-órʹzTÚ§"D8s:dÍ|&«¿u:M#¨Rå8:§&ålÁ{NÆÄÆmSù; �Â:ðÙc^t-ôP¥- ¡l)Ä.4ÌßiIøoVE9&Çfí]¸ii <»GªØ¥Ëz¶èURçf:ΣÄåh Óí<A äÜë˯v/v¨Õº5Gù1ªÐÃvk_ìÆÜiÃ\»<¦¸¾PðYÁ_V +° @Ê!´¹FÔì]ÅnûSí ýLóxªeøÐµÖ& g¤ä+^%^¢ÚV¹ëßz3nÎkµókñNI:¾ÈÕmÓáQ|?ÃúÄPBÈSë»ìý QÐlWô@üD;Ì®ç0JUÝ*ZØîlÞhÃYP3²ò°úبøNÑÜȱåÿÅJ·#u8h §DÑX: ÊǦhÇeð° L2Â2g ´92i¸r_âû-\ +0nY7&«+!§ò¦ÑZ04(ìBÕæÂÑz5ëåGUªÃ³ïÍJ&FêUï33,½NuIèÕ·t.A +endstream +endobj +255 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +257 0 obj +<< +/Length 1870 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$; +A£¸h2FâáÔo"KF¤Ên(+MS,ìp3´ + ¦S ¸Òn3hTH)GH¨±¸ÔsX¥Skt*p0Ó'ØØàj(!NCy¸@i9 Æó Ði3 AÐÊd\¨rªX¸ogÀa f.Çäry\¾g?¡ÑètÚUÒ¤.júÝxÏc'ÂáϱâwOcÊ(Ìo1s'3¡L.sYQièÊr7Ö+&\Üd4üÆ\ÉÐÐóóº12L£,ÿ¿®ã¼ð<MJæ¢Ê:¼ªnKʺ*++Ò\®+ͱ¬¡jδkjÞ¸Áëªï µâüçÄ,:v¶Êcª2+x2 ïãÖο㳻Aoç5kÐ@æ6ã°ûhÛÇ-ÄzÝÀãî»òTº(ÈL`(Ü@¢sJ\®a²8®ÎÊ8,<®CnP"9pfA hÇoæ9 ¢Ê311ãÞ2ÃøâÂz"È(Sµ¤kò¤sʵ ++ &â8*b@!a`@!Vf)¨"×AH¨5BLÍMªªpf®¤ðëJ PP)Ò 6âKL6tXÂ3¢àP.65ºÂVbG6!)fÔ¡¨p!T÷>«ôС`È'aÔ/n¸QYÖµ¸LMU¡OÍÑã9¨hÏÓCF³ýªP3"?ä4 ÒÊâ54¼Ô7 BÔu(e9dÓ Û»^aem\kø9Ünë0t£:ÊAK㨳£Hè̼#婸1zÊóÝP Ú¼Ôê|¾&|©ä0éM0åBÁ¼yyVYfj e/{nÊÝSWûÎö6í±u +9ÿh¦v «ÇÃpNÌÃ(ï²ìûKÈý½3Å¡\lУ¯ÐOa' r»ÖùÙ®ÜÚ ÜaÊ;Þgö°@8x[ëß²º»ºÊúã4;ã`Ø7ñ[äú?×·©NSånjt5ÈÕôF²,ËF ËcâöËÛ\ÒNU¥|ÄuÁÒj 7Pذ ªUÖtÆãkðZ¤á+ÅÜ +p2A YÝp6ÁÞ+~ ¥¼ýÌeC`yAaÉíTZSÎ5 Ä ¤ÎtZÁ) ðf°E¾&EÀ¾B¨T ñ}`¬6ÔCaü]¥c¬jÊZ÷!(E®ä( YáÇW4í«SðiPPäj'C&WlÅXmb@à +h6Cly7Åü¿C%õG@êpslÌ<Ee²¢5ËÈSÇR.¥.%ÈéÁcÒÁñ¢CzÕC`w!äÌãá\LòaOɤß'A*H¨_êC ÔZQêD)5*¥ÜSüLìÕO³vs'¹gÈ}~Eµ`¬£GW*í^«øÚ±Äqn_E"ãúÔ+`ûµº·×L\t>w{^KÐ ¿@Êã¿6J MÅá7$é]¦àÈäJ2´Ïe9Nd'öRÊÙk/ ÒÎÏÉpEÙÄ»# +´Óf{Q ÍLøµhno£\2í}²ÊöÇ\Ìñ¤8&µ; +LÿAs*-ÐÈÆïÄzMý8UÜ=ZtMM¿å(Í2˼Ih¤K6 ¶FÌ8léfC©ufüÑC:ëÏ9ATJ;¬É}è«´VBÍô¦ÞCʸ5 <÷£^ú2Ð1ºÆöCÝ{ï¸LÒÈß4B4<ä.ûÝ ¤áù¢TNýËcùE5Rwü_Küd0QhBo!Ü%&m"X+mm÷J(vC;ýp$·RÚX3Ë/'>Ø3c¤ZVJÓR{Srín"tñBËÄúߨòn¤k(I%OËö©C*©*ÁDòÆ®;j¼¨%ÍaT$Ëå@U¬±õ îÌZDfDÊÈwy§Å4¦ Á¾l6êOQ¦4%u4§*oýëd@ÑAJ¥¢bR-IWõ-,§Í§Èóú±#¢!9]UêÆFtÑ* Wña¢³h³ÄkQÅ´·ðe\¾®uÓ! +endstream +endobj +258 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +260 0 obj +<< +/Length 2660 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ NË¥BT C $N'L FbáÄxn2$À¡¼i$*MS ¸k<WÇðb(&gÅñHÈPS" +eBÉ0)¡ÑACz)Âa°ñ¬o0X+uÑÐi3 +,£QpÆÑæ§3ÈÒp:MæìFRa ¨´Kµjyq°æ¦8ËÖ¦¶)ÉRy>4qÅQHÂ~B&ï«åø@mÑÌ&s(Òșã èoD#©ÓÎnóz<^SIÓÀs:MQv·£¡([f®ªø@°©d*p`). P(#Âì(ä´Á¸hÑ43PÕ5^Â@*R¹°¡ jAp`°,A@ï +BÃhR* M{c »"°ñV°³" ÐîÃØ:»£xÌóIo[Ú÷ï ï,¤ð£á2C#$¬÷5róôÑ Êîd !!Jó¨§/´sêÒÿ%pC:)0h²fÌA@Òø#t¶<LOìy¡MÈSðs#ÂÁIR±¢ Ä/Ǩ+a¶uLVÀQ%It Mc¤ª6 ã¸[2Ð@;ÚD§e;µÅI^)làp¡VeYS5¬+[ÔuÔ*p Ø2E2<1icÊ1#0ÒѻּªöNæ4 ã¨Ù9NeÓ + iKÑÁ!xTô¬#YC(ÉãtÂ$¼£Âøa¶D·kJèÌ7`ïMá'´aÕµ])&Ê*phc +â^ÊÓ Èc9m¾kËæeÕnEtpnÅè´¦èÐz¬a@ Âx×B`¯ NCpÞòå8î>0ä/ìM¬Á6þSöÄ ì(¤*¯úpd§Ûß¹a8[ÖîïYE«Uv·Uë\ÃBÃ(A|M·j#XÐ+¶::4Ã(íl©E°v!F ,<Þ6Ü39òoÄï<äÙ[Þoè4QS\z ¶Ò2Qã(è+Óc%&5c8¸Nv]uê8{4I°têÏTèÜ1µ3®f²xG +á0éPµ1ósd'åXÅ5l¡¥Â±:Í«P9'%^ÄxÇuß§W~Îñàwp7%jÁjù_kô44ìXFg¨¨Ä´nLQ$4ÒJI3EÈ÷à +Þ¡È76¬ûÁ¸æà²¢dGgí}aA°ÎÑÜ ÎÎ)*wNùé Ü0ÀÐoTJå aÈ7Æ[C1nCèhñ3GÂ3ÓgÑhÛHä CÌJ1=µf÷^ûá|oó¾sÍP1ßã,l ÍU¯"ȱ\I@À¾B D +dðÐ @¤BpGjÒ +@VbË1$+àØÎÌ#(e¢QezG@iM;ýD¦¹«½IHEe1¹ÀÑA9â²dã"òàÝÄ+80ÂÏ%îkÍ®vNÜp>çòtÍCè£*§ êx!9£ðis5¢ÎîQ Þ!rh?®²92ºB *%Æbº§vï^ä±Þ;ÄÀëv<®ô4oQKµ?w4 ) ¤7;§Í<»¸d¿óKÔ¡ÇF´i èwg0#»L¥6eZ8$¬ê´f �¥b¤ìÒIX©ZËM'¤7R%LãØ`ÉÁG³_. r$h¸:²÷Cr=¡ðhç#5rQ"¢&Ð}¦AëZrûR +CUkLæî(ý6·¶÷ RÏ+«jlÜêªUuW«5ÌmûXW× Á¬ ½zC)ÈÐÜÂ`-½aµMãXìe"¤Fºô+ý¨Uî:<;}«ÿ QÛsë^@¡f¥°ä[Û!°ttTtµqêmOwv +v®<øÞË!Í× Ì¨"=q»ë¢>+·¨q¡mÐ=½¥ OÂd¬Jlü5:Úóì])º!Ü4C\U+>&rî$U`Ñíæ;GK¦,=EÛ.Ó¥Âw¢õ;«k6&M WaNK $¥7{Tµy¨uAÁP0=÷w¸+B2} PÖsZÜ9_^} +u^¬é[ÁJ®mÿ(ø"ËçF«blQ6q[½ÓÚÉï'zf£°w!\è0BA +A$ @h|h¢64ñFT[X(µ`ÜÜyLg¿áÑiL"³®© éÊëUM¢©U-¥Ü¢ÍY3(;¯0Éää¦Þ{ÂLuþ^æ}Q!Þ>î¸]]JÛ»ÚÎíPBmA«ý â¬jð²cIÝÞ.^äR£Ñå¤ÎÒÆ^£ÑIÕ`°eO'xºAäÆÑãKÁ±`uX+|_ÐÛ·¹uÀ´Ð9ÌdkCÈùã¤ÓucîZÒ 8HÄF £1n|Ê.ãÈÜè8QÃós+OLÎ}yü9rìCä6Xc»øÈ R¿U¾IJauÓ à´1hjÄ÷ÿ.-ÅÛ|y·t|õ-w »Q¸]ç«£w4m0ùìû])Ö¨AÏØÌ;¡#I¸ç|¾w©Ýñô4>¶½^ñáÃx¨¥³L±´ /P¤Áa¹2pò²=³ÐÍVÙ^Aß=5%(oð1L9ÕÒä +I>9ÿ ~_Îb¬^-RÏm¤ùèÜúHâú¬ +N F°ª.° n0¢.îiÎC2IÃBi*i.©2A 6c§öç¢ÇÎÔ"îØ"îÜ! jþý%ú&úè¡ O-xí|Ø Ø ¤òú ¤ð]â¨)Ò¶ ÒsÉ9À.©`ªû ¶êÉ»HPD*©Z+Ð4l¢ÊHIØBµäB$H6Ö°`7IR)Ð0ábº§ÚXn#¾/ � É +(º#ÔôJ6²<ãÊ,vgjÄDªòO(òÍî² ÊT^ó �b7Ììî°áå2h§ ¾<CöC ÚàMòÛª\Üβj7 ¨C)ƪ/" +endstream +endobj +261 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +265 0 obj +<< +/Length 2233 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=#J¨$; +A£¸¸l3´ÑÔo"KF +DÌ8(NFièe9NÆCa¸ÐPD2Ìg#IÀèi7 4*$1 R! ¨,\4ÇJ$¸a#*W { Ú)*¨¤i + Mª2|` o:§3)\ &êõ&#(Y©:Ä«A¼]Í_°^¦.ÐÔpÃAÆCJlÊÙ8¼ï?ÈÑE+M6£U¬×l6B ¦ÚÌ Üî÷»üÎnÖ`%ÃNÔOä0úÆÑÏ Û$Ðh¦IºÞ4Ph'¢Ì:Cp潨n£¤H²$íCA ¨°+?HZl¯ HÌô Cj4a ãhÄÝIãÀOÃf7dhÚ§adGÃ(Û)ì¾ÞCxZ1/Ê¥ËãÞ9ÇËÄy3L¼àI2ä÷*mLñ(ÍòôÁϵúø0Áp¤1<_ÆsíÇ#s½Ç±ü!Ȳ<·%ɲ{É,L¯,ÔôPéG°Â6±¼r!Bø) +Oc£Bìîú"o²6üÓø)ïØnÈEñ+ÉÀÁÄÒ9al3K«tl7k(¾ ά1Ù0ò Cñ #qlN1ñUÃ^b("b ¦* +BH#ËU࿪)`¢c¦¿=ðļú¡)f¤lJÀ1Xh®ÀÖØq4WR è¢ á¸}ÞXùg¢¬)Ñ5ªùÛj86øj·®+껯9úýy0w¤9{ÃѦª³ÅijÞYik +V%àùÖyáËr#=tó ÍÃt0Õt¡,GCt;íkÐÝO Ë!,ô,¿ÂO +è7ü°P3M2ñ>óÒg ÏJ2´*I¥/WUcÅ÷X©hj(Ú?·1IJ,ËBÔ¶-Ëäº.Ó¶´8lôRå±.ÜW².ã)ß²ïn·ÚM²Ò&¦8HcHÌ4®5<Ñ5MpÓÅ£À@7Ó2W5÷ó¯O%ʽ`OÇ9%HÃÀ:a¯¸÷Ò;¦¤Õ¨ÓÄ O!µ6î<õ&üqÁ¹æ½ Zµâ*D +HÈ"òp:Lp)¤6)Ä¢ +¥èø48æÃqh¡±ÄlÊB<ÔÔ@ÞúTñ© ;WH¯_ )·vâ<IE-'ÂÖ)RJQð¥ü¥Â¸MíÑPÎkz.!;·óXà`ã¤AÒ&@ßD}á7$¤9L¯iµFøkZ͵ÄvQÐdÔ¼«p@!ËM¡Ì70Ó\sKËt!³R³k2pñÔ¨0! +EI½"NW±Üt 5@y] ²ÖAÚhgí¢¢@U2ã·ÐjBO,Î=ƼE[ùlnà ¿ÑLä ÄÚàê¤Kôîl3¥@ÊKï*¥Ã¿ ÃB$K¤e;øaD/ 3ÒZtÉZl®ûWëjMf60hÐL$>³(i§àZ[S\IÍr®uÒ +ZíBj=í¼éÞ½¼òd@æ´¦ Âs:4µî1õêÇä«"¤<ÎT©à9A@Ì3$¾ÍHRkM·Ó)¸~]Âú§ 2¼ rÔiýAj«¼ªªs`^¨v©,Ò2·gºÕ±¡PÐÑij@)¯ ¹Øôßô6î 8UT¡ÚF©ôEm] |é7<rzdv*µ+; XãÜDÝÜ a1skwÆYà~ñ,Vy-fËø �#Iz2ÝéÀ¬t^Êï:«Ù +%ÔüGAÒBÅMt ôËo¼7NØ%_~©:¹Is<Ú*Ô¯Ô2±»Óá5ø`R06ÉþBìÔáÒÂ'qÆå¿) u[t'%Ì|åL¥LuX'Y[«vI42£·ñ;âwUÎc"¬tÚ¤ìå0/Ö@» gE¨ËPPö(· ;BîçÖ%óN¦^o1 Ù Yeme¼ºrýh dµ`3>MHÅä6J sËë¬`h·çàB#7 Äí® i\¸ÂˬpЦT +b£}þê]'Û~ZËÀ°©4%?l¬Ð$£ (ÔRD¡çHM%©ñ;ÕÁ| ¥Â°E'yÐh 1U#jJµóîÃa»)éÂØOBJìWKgbYN]"Çf¤6ÃÒ©î)e6ÏW>wB%ÿÁáTÀb*²|$äûÕ.2ø �ö.é¯ +èÕ$n¤s¡µ»¤HÕí}Q.´Î\¡`!ÀªÂNá¤Ù¿aÈiØP[´tC» Î4î³ÅìÞ*ûsî¸KP7?@ 'ír9Àç$¨ù8[åáǤ®s×9ï?è;qñ÷`\ÁÆE×k~xs¸ð×ÑoÏp,FÕWpôy%!z{[]>¯dNNé|Þ<ôyzöÉ +endstream +endobj +266 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +268 0 obj +<< +/Length 2954 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÄa FâáÒdT"Mf¡APÞ 1¦¡@a 6#ÐÞr< ÐÒn3 æh7Îb1¤ØeÁMÆKIÈÒvÄ/F1àp¹ìyºý:13./&e RºmPqJ¬ ´ñÂ[ÈEò!$¤ 6âf=ݧ°Í¦*ÿ0ñz;×îܺÂZî¼Í7èq]&S«PAALÞ%b)L@v0¼jÿî3£b⽬Ã#È:®»¾2lëê8n+>ð´AÈã;ÃôÄ2k#Î=IsjÛ½ +Ä Ã(Ê2El"Þä0¬;« ¢0b )Hkd©HÊ£ÂH¬DAÜ L0±¢¡qÔy% PÜ! ®ë$Zº±ËÄ::9#pè0®ìì°ãtþ,ã#ãÎëêë #36.ã<hµ¡^ ¶-^Û&od9Ns7.#»23CÈÁ@Í£Ä̬TÀè.,¸Æ0Âú6¬);;óEP´c4°¬ÒìÎÆÚR£pÅ1å±\[\¬ã èÇCªÊÁ®ìY?ºNÅ:ÒpG($n¥íy¨j© lpmz5z(6pö¢pfA h +C(è:TÐR¢(Ѫ(¡È%{"ÈDn£ Jn'4(@!Q;Σ(åe³Ã} ;´¶øÓã9£ÆáÍ%;Âð@±bøÍ®ZÞZt[-cN �7ãj,@õÙô®h&Ø^rSZÊÆK·J͹nhÞ<ìÖ9Ô&Û¡,×(Ü7Î +Â3ðà0êaîã@Ó_/Iàh ýR~ºë2yçîÇgQÀæÉvý¯d¦çÚæ07n¸ífáD4ýôLt/¢¤)"òK=9 ïÏrùþ¥vµJ=ß()`Uñz¢hî_auúÿÁOeìÚ1&ôNB# ASrøs¬T3;7VåsSoù1÷êÉW±dD$² ô ©`I³3rn î +aPùàdxI ÁMè Hg a¸ °3BÖ¢³ +ÐÉD8âHC9G0!8µJrðdØ?I«(z0²þÌ£+p ªfÈ0 á|#3Àb +!ÐD +nºC ²@_0/Gø¿# �8X¾cS%8ª;8âÏ!,!¤84I × +z2vR M³o=h³hÈ[7'!Pì<ð@£Ì?Çrµ¥Êi`,ç%Ĺö¤]ø±'PÜAÌÎ1ÇD¦û½1Lí@i ÒöHÉh7ÃpÚ*M~&ÊoÉ£T|ãRH½@f åì/eô1PÎ]#js³@¾'@®¡Üs¬Oàà ¥TÌà,øo¬à®»ghi3¨gá¥&å©0ÜyÎ/Ô¼®WçËã H ¤DÄgÍ0¡Èí¦3Ða` ´¡PïH&s¡¨ ì'0äqS½ªnôÍêÈgS£w¡µØ³· +òK-µ6·;Iöñ&ééo"}¡C)eW¯Ô²bSèg^j(s³ÙÚK±~ E§êSÁ¨4$´t`8(ITà¥æ »«!ÎMÉÓ9^²5 F$¬ËìùµHç°;Ú4» òRÈôÎ+s+OeXl ²6cJf;hmV¾¤¨J§@mMö&~Õ¤0YªÛº>ìÌ)ú¢éÚ§å Êþe!ÖÊ¡UÕXdAÈye¦Øæ±Èia®kǨ]ð0í'{Â.ÊÍo ¯¶À}ºUu]wöj~ 0Ð6'b¾aM1hWÑ_a$JòZ|kÛË&¼ 6àYH\í.ÜýÀÍAn¦mä`vÊÃ^6f ®( +ý0gÄ7LÎÙ7ålâÙR¸høÖÔqíÙ\I).uY@pH"S¸´Zö%@jF^,É6&TÎ\+M¸øþ⪴èöNEf n ʶHJAÚÚm»6alêhVÀ#N,5Å<^ÞÒ �¤9Ôu+&dÞºp/@ä;ÓtÂøH!N]CcíX¦»wô};ÊßMk͵§rr)6_+£@¡¦ÒO óÄ'¤ýÒºw; !M¨&Yñ+¢ fßM/DÖMtN¯aic +& d1i5QÒGºr68_ +a<)Mu¯*¾ Bé]â Éð½z!î4ïHá~Èâ|UÑý£¯9BååiÞ;@ÂO p +á4/0^¨R¡$*P/iü,ÎgZT@r'ÜÖÄNtÐæHç8Ù �Ió¥4½ +À×Áá>ª{èÇ3:B{ÝSÆ#CÂ9ÑTO¥ Ý\K æ=åÉWÙ"Ý×ëÝAyO«§9<TtRÌÈÖË#§÷Ûýäe 3ÒJ¦ý¡e<I``ÁCk¬j¼Ê·(Ù$#ËÔr *éó4ôÔmùkß<j¡³#>s=~ìJwÃͲ̬A¬FT-Öötïy=oøî÷Vý]]ÇÉj[ÈWþw}o8ݾï7e_§Oá{ÿ¹ÂHb(RhЩ"£VaÏ\gÀ$,0I>Îïòd".t¦R¸dÎ(æ HúÀ¬ +p7hx h}èçnzçîèn ¨³è¸L \b"¦ïff¸«Únàrç¢J`ZÐh.¨§]Pd>ÿ©ôB(G �=©41Ë\YkÉB÷D"ïv!(P`ONËj0%âb¨)f£Ð7pIÈ0Vå¦|k$$æ.#- ¢qC¤î4OÑâЪlHpè¦uªòxâ¨$o$멪ñ �°CDÊÀó$ÜF8¶ëÓ©èÓñNÜF £ÈN.-"¯ÄöE ÎkïªmüÂÚîpu®ý � $X¦)Æe}Ñd/.èßüã444¬D²Pz¶ü³Jv³±ÊÓÈÖ´LèbÆ´ëSYI=¬Ð²êwÉÆZD·¬è¸|ÏQoô£¢Ìúkú̺FÖÊ$ëÊl8r �½QË#ëÞEkä¾ V0ëðòÏ ¿©~Ì +El&ɶÊ&GDÈ´ÂÀÌ/Âît2Xú#°úo®Ì=,P¯ÍÅ\;,b8z ª,p© àÇcà~¼R²»,øìNL)ãÊ ÞÊo,ÊÇ@Ë)×Ñr7´¿å)#$Ë^ó` ` +endstream +endobj +269 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +271 0 obj +<< +/Length 2249 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢<4N¥BT1 B¡AhÄn.Ç4xÄi1*%£©3 + ÈÂm Tb4 SÆC*´ +ØÀÞi7§!Ðß 4Dã©°Ø-Á¸È 9X>s2ÙLfßÀb1FÃNd@b7ÖX([Oƨ1± â½w%à +U0ás`TàfÕfü ÈÞlÌ'>ËCìNC ¸@o;°bÓ%Ó:M¯.\Èo2÷ Æó Ð0ÌSÆÅ'adb¦/¦)'âAÀìËå)°ÈÊ:¼:@aJ¢¯ Ø\ +Sãê¾Ñ;CÈ@4§ièݧøÐ4´p¼N¡pn®¨Zaº½ Ú8,k¨î,¬PÚ0PÈ:³cs;³ å"µ¡Â8£tÂÀ¼ï4 ±, Þá@å>'ÏÛû4A0X¦'B£á ÇcL¢)L©©±\['+p3 «@2ÁèТýDÑoSÃ(É)Øj +âh¾!âh B(*¢h@6¿#Â3±SkA::TöÛÏÔÓÀCMî0Î1*ãkaGÅ T¦F +óHBkN6ÀNî00Pô=L%ãÎï4¾5³ÊÎÊÒÃ69ËuC»Z2Ä3Cî:OîÓ²ã°Â6¶s¡45uÀa°\ì\êêu¬7lvÁ µ^.¢äy,UEÉ£0óF-cN@Ñ4ÍþÙKb:· B\ "h¤(Àp Á¢¤«Æ¦åFnhP"EhØe!f +PüÈ7QÒ: +¶¡(Zà"H A¾oî¤*!¦ȩNTsF5´Pê1v(ÌÆá¬H@ïA¡ã5\Ð=0cxZ1;urú7oÒê<îÂc¯íÛPÛu·4[||mͶÝ^C'Êc.6øqgÈ$IÍs÷Ad»H¾"BÚ Ú~õ¨£zÆý«|ºÎEð \q±¬ ÆÑ©{b»:ÞHZÜC2 Á§ó1n|`)À5VþDCmIDE£aF ½= Â"BHQ½ ¦B`EaR!0Uª·W*í^«õÍ»â)`)M@å4ÛP ¬ÃÁ¶ýã÷me46ÔøG àP¨®¨N +9«µFýAZ( ý p~CÑ×£öí[Ì;ùÀA' AÊ "¶ZT +i{Äø£¢ÄZBëÉk¬e$Ð:ÊN*û4¬l y±ÕÍ¡ó6P +ØsF1o7bËÃ(m;¥4Ió»W{´5¡Ñç=äÛ¤3-6/}§Gàp!#R¤|¬$óqTád,ËÈµÒ àoqÄ4Ç8ë1HÄ©Jte3âæzAÞixqqÅÍ&¢XBqüU}PÕ<íQ ÒiÝçñ6ó̺"£zoÞc,³¹¦·xË dóâ}*Õ@'ñ®Têéh;ápñô¾rKc yøpi"J+pÑ,¶ÖÞÜ\èrn·¸!K£ë$tܵ×âpf|Án Ê¡J£+)z:XË3ÌÇ%Ý)Ðè¸F}LY@¨HHÑ0_µ:}ñµþ:ÀæÿÃ,)°èÛÄñdV£ÇâFT{ðÒþhQÃÕX«#QdÑ~ÃÄBc;ò5Ä¿ÔRX" 1 ¤ERvÛÂ"¸V&+ØW)mgpôÄÒ¡MZlè¬ÆÂÛctpQÐêTJW`ày°ÑÜYp +å8H±M¶h¶UhVPxàRdpG´( z9ÉNZ4q©Åç5*ÏÂ)eqCw{sRÚP®ã¸hib&(.ÚÃp±zÀS.©ÃõÌu2É'¶j9¬ ¦Ãg¹SvæGe!B +LÁÆò +áËT§e-Vx@º3=K¸('öOÙþké% ¡¾±PBç¥7ØD±cÌgQH&WoÓÛ ¢ø_¤ÎÎÛ(¦äê +ÉNÉ "¸ìNo¡¸Ê_-p·62ç:ÜG2Zg²þuKñJ®Å§cm(éðZÙXáíÓæ¦2!.¨4Øë ó³ÍýSú©PìpT&F"ó³5BìÕ)b¸ {A<%²ªØº9;V¡*ë!Jë4_p Hw[¬ÕÂ~÷ÏS×ößíw +êü~^uÐØÎ¾ºÛ+p¾°âÙHÃA6I*jÅÓmrýÁ¢ ÂôÅ8ªVoe©µ|h"ÚöÎÉÜ +`[a¸Ýi!6úÅkwçÃÑX4¸ÛºäÍ»7ö ÏØòÂÔ¢Hª? ª<gí(¡z¸Å§½Ð¬±oÊ«Ytÿí$%rUxl¦"dÏR;ÃF+K¸íaľàé&Ý+V:ÚûbÜ^iÌYüÛóÇL¢732wC~¶¯)!ü|f¼ÙÈszæØÍôÌæð3§(fì©`rµËK-Ͻ½H2ý#M9c?\3E ¹¯:fÜ¥é^r£yjÏÏAH³ &Ìt+B +endstream +endobj +272 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +274 0 obj +<< +/Length 2192 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQNË¥BT C ¼i¨S)¬<k$ÑARL +Ss9À .ÆÆSÁä`3§C©ÈÜsÐè°R4 E¢U$b3GêUÚü¢i`§G¦ÖRI@) CA/ÍæÓ¿?Òç=8 Øi9À@vØLFÃ(°AÏ&îx¨R*vºÃÎên2®ÿ: Ñi4ÚX_±Ùϱ¸ß²Ü÷[Í÷óDi£Å$ØF +N>PACâ3Â0& +nSl殳¢" Ô£ÊBÀ*A¢pʪ ʸ@pÉ1ªr*1éÊδ ÁØ·3Bä7cZ¹Ë`h®hÜ1«Âõ +/к®*¬¦1 +xl± +H¯%ÏÚÇ @!â'â ¤'$È'B0ù)@S3&¡) jÄDñfÄ1Èhþ¬±xj¶Dá̽0áM"($H÷¯pôéKDl«qDýÅ«2Ñ*1`Í(Æ9 #è4ãu)$!2S&C(1!³øEqK÷@2n¤À ȨëËâøFQÔ $ ²(æ0ìól9£sd:4ðѴ¯Æ0à @:ÛUÀA`Ê;3Î �#^7ì»äÍ]RØÍ[£ Ó~_Í Æ4_#Æ:H5*I¬ Ø^È-e¸ÞdVë3ÎÍÊî57qÛѸÙBP¤àÀ,!¨h>Ar@ +¸m«Iâ´ÇõHçUÕ¸åe#¯ek8¢zh²Z3õS¬ï¤CÛ6Öú Á2¨h²Ëù² sÏuÝ®v6C=n[í0õ ûf² mÀP[¸nAÈA¯¾Äìä6mWI3!¹¥6ó½ÝxA¿¼î¹·ü7MÊ>·)°Õ/ÜÃê´ìD3íKu ¸ÔË宸AÛÉh½s]°ìHj©JìnÊý+(]!Hp³ÐÈ7ØÊ;ãÐ@n+ZÛ|¡Dçº-ðî4 8^h5Ù|/¦¿XÉêjÆÔ72üø-}¡ ØûÐ%«ÇØ]>gÔ ¶'¼W°f !Èð`ÜY8ee'a6HðaÍ20P@Çàt1aðxß2µìÿ8hOº +Ás¤çЫÐNNñÝ52Iéa#¤O¶T\¨Ñ¦F¨Ý£°ÊO?H+u"$cà_ 0¯M'½R ¡h{-ÙP%ÕTjR!I³ß¹NiÜ'b#ÛÃÊN(BÜ¡Ösâ@,(ÐpU ,IKH¨©Á+k.¹¨¾§Db,Ê©V*è<óìRf:¥R¯ÝÒXXÝÍb±¡;GPPP&j@3C,Õ£dèEò$ÕªVÂÚdËuÂÁÆv4]-ðè»A +§[è6A¥v\vÏ aα&(MOôÉP3ê ©P1¦PTèZö¡á.ÛB¨bA¡ÁÚ3¨¤ÏYû)·eÒQsb µ§µhÕe»X ÍiÆÂ"8Ø),ÃJæ<6v#on.ºzß][6n Ø.÷èëN>¡¹'(åë§òç¸×Fä*]oUÕ:ÇS'-O õEÛ8ÙJTe;¾©È¸ðÞ*-lµ"ÜòqvÅivº¼)àÎcÈÚîcñ{çU®IðxçÜ=¢ÊÁèk7³ÚÔmÎòAvè#©=Ym,ôÂLÑæ6VÑ/HCHD$n¥Q+7EU´jÑÓ¯ißâ^±ÅvR⤦ÕÈ"R^§}H¼£*ü©ÒôdGHñ$ eÅAVïJ^XìF±{³ ±Þ)1 ,ÙaQ]iI$RvOx; +u'ÝBª¢T +@"ÐS3 A + ¬Vô;\R±®ØA ^#òæEz ÜË ÒSZøË¥q}HE#ì_Ù/&3%eM fpef_¬ån!ÄsykNækªÜ[Ƶw¿UÄýg¹6iÔ®ãL¼CJó^§]ó¾yB:ÁÙ.üÅn$Å A8^óäAÖhÀæÃiÏ´;±°Ñ9³K0;ÆÁÀÏ6Ci¾]Gü®£rÎ"+S.Ùiª!¤-\6ÇëK¥t¶Yãª`¬eÅ4VÔÙ¯¶íNÒí>m-®®K½U[£XmáeêÔC§N89âöÛ§OÝ_°Tr7 �tÞ*Ö˨J¯íÄê*Ef©n¾´»< [®Íp»x¤Ì¥PnðÓÄh½È<ãk,m°ØþÄdîS"ÕwÅûNbðdÑ,°Õl@æCmaÄSdýìί«<]÷<ôj9ÒI.*g"pSÓ8®Æm7)Ó¶Vß´è}´(:ó}kòSmn¿(å\°6rë¦ó'áÁµ&yfP¤µ}×eNí;©PH2-àá7W·Ì[oB6G®3ÞØÖÒ.=q¶]KÕzFÉG?wûSa½QQ +endstream +endobj +275 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +277 0 obj +<< +/Length 2328 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$; +A28N Æäcq ©%%ÃJDÌ8"#Ýp9ÈEò8¦ÐE*JRh¤j($I6ÛA ¨)¡QCØÀiÄa+u´s7¤uynT¯X,Cr0 +Säi8 &óvE#HéÐTZ%Û3âê l9ã¤Q w*3Ífâ¡ Ê µ[.+¥æ÷~t3 i9fSqÐ@t7"¼Úbôü£q@uñý½èÓ£³:9Á4ãCÌ7ÏSØ÷ cÈó,×0HZ¬j@&ÀPQ9ïkÞøãÀ\S`£¡m¢´6Þ&\>¯ Â9.Ðè2IÚªHÓ5 SY6"¥Q¸h£¢¤v d¼} ±d\¶2ìd±ÓãDNk;#`êçÁÍ(¡M Êg8Ëit¼ÌL ÏóCe*Nf£©<·/ÄOà2cHÌ4´< +24KúûDÏ@ùAãl"7Ba ï2ÁP@ð@çU£$W k8!R°pÉÇa@Ä]X ÃjB¾'âp)+¤$""¼C ò69ïèTÓ¼ó=í"JT*à£!½â2jôÃ1ÒE%56hgø4oÇI¦1#u^ç½ccÀóVL6ïõ" áhÅmX¡#aÉÃu3ÃHØigã1§|Äõ>A·øÒ qLç²å QÓ&IÍtµ1«4â}`CwÅ«Á0]©Õ±@ñ.M¼£Þ6Wïú:£ichÚD× ±¡¨` gYää¬ÑXLÀ6a.j¤ÚMúÀP' ï3ñb Á �9^ÝÅøÂ°êjÔ1k Á´²¬K¥FG +ÆÉ3Áf +Oöê7r7=SrÝ·¡¨lP¬°éÓ¥¥±ßZú3o4Ø£:ÆÃSº3ñ5+بU5LA®è}>Ú»-_íSÌ{[ko~MÍá¹ "H{~dln¢[ùD$áÐ+B_øÀ¨ÔcA0i ñµ§ÌâBi`MZ£·¨¢¢\Å" àî¶ �)@Ðán%¼¸ä\Ë¡u.Åܼò^ÿ5ãñ @.oÎ �çàÖNR"~Í 5>¨U1dQEý6LClxMÚ0æro sM i±ÖÒpr_¡1·Pç|nÍ}óÂtWRt¡&³aANuÌÆ .vfTs2hÚ w¦!¶àæÁkÁ{m$¤CÈÍ#Æ}/ r+/MÑZ7¬îa=#)Ñ +gL¹Ó¬Ëòø +á4/ÐBU +Eêf´i*m +{ª)åDÉ Jg%0ÉÐÍrYZYh:%ð �@(X/ðtÁºÉÅ&äì$GuJU9;Hx1i(ÒsRjÍlüjQäó \1 ØË»HöîbsÚ|O£²vÎìÐ çô¬éörçèô·4 (pÜÃ(Ï©£XJ;'$ÿ$D EI='Ñ&÷\wJéf4õâZêqîE÷Æ¢e¬¼ü³%rɨ ;Z´þ6ÓÈຨ¡¦£¿ į,-6T ¼8º¾úmkN9h0´â|(64Y'ÄÖ v°A³ÖÃÃ$¡3$ELO2À üï6tPM-!¼þ´ +øÉY;h°v¥#ØÃDi6ØKaa<9¡±¸5²¤s!PôªIsiÒ¸àÙ+jµC«µ²6¹Æ>¾#ðaÁ1Æj{ê +©9µ£Æ}Z/QéIî\çÒï ÔWÒ'dMá©ìîÊÖéHa¬ïæ 6gåxwVÈD¶¸®]mÒ(ÂDØ +aQuà×ó²!`ðê w·Ú WrÄ^- æÕ °f!Ý|ÈëíB~VíU«ö=z/U®B6°ÄmófVfª*¦û§1süÅÉÃÒè.gtÚ»yNî K½wïº7gW¬áµ*ÌR0!O2*¥ØbKÉÃ/cËj°n½0ë!Øfºa°<ãÀÜO}®O¹!âÛ`¥±÷®¶ ^Ykª#=;.ýµv!ÿº ù ¸ +!Ðtx×í&ÓÐdÙkVïÜãUau}Ô=\0ÝLrÐÞIÇxïí ¬y"H!Ch)dWå$ϪKº@2ÎÔs>¹îK!¡rµ\Ë dYe©ý Ú]Bª)¢è±£`)ÒÓ¸yi-a`Bw`SÄ9Èl: *ÔzuÐyPð,ü¨¶éë©//æ3óÉWh *kÊNfºCf|Ð:hÑ4V_ò-]|åÒoUN%Ä¥IÅp¤}#`;JrÚµ´Ø¦¾âºê~ìRØÛ6x8.°ÙZøØ:ó`ëCIâ¼"þò4ë`ù,7çæHÉD¯|pêF^À8v6¶~s~qpÑ@Äs (ü§ª«Õ½VÙ¯oHË ¥ô_#³5¥YêÛÛ)p®L¹fg^ ez@¾72|ßîÖM²þ³"+0Ô¬vøßrv98wLÜË*c÷\Ø8®~@@ +endstream +endobj +278 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +280 0 obj +<< +/Length 2639 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)ã9àPD¬C)àÄr0 +FS¡Ôän9hh)IJ¢Ñ*1Ç#õ:õ[b)SK ¤a^§$0R1 +.{@(6Ng3 KÐNbÈÞcÕ̦AÌêcÜjÌÇSa°ò,hô§3IèËÈ4#ÉÓUÈ7çyBfÈéÓ7±´O³9]8¸(7ûý°êdörtª,¬Z§!Â"&¬¢PÌ´C(ä6º#èüÎ Øc@Â9#¬9KÆÙK¢ì77apR* Oò ©2¬&à@0ºPSl9 ¸Æ»nC·®«¸@;/³JÙ/¢¥E +8¤¡l +¦*'-ª +°\¬°lÄ´ *].*£(P\«{B!¶ÍXZ¹ËhhAC(Üà¿â¿Ë(rº¨¢´Zΰh Á»5²ë(IÂø"b"¤O¯²ÂM2ò¬HpÁjjÀÈ4³!ÛY4ä$¢* +b ¥dô*§KcªLS"¬ÚªüÖM³}@¨`ÐPÆõxÞ7ZKíU°Õs G±A¬ZÈõ½²TÓ EÌÊr*4mdÙvm'áRÕµ²[ÑA;ã ßÂxÚ1cyÅ7«tÞcQ¸ÈÞ,óþн/XÜöS´XNp1ãÙ\ÓäO>~л¯NdQ2÷Ц°F%¼¢ý4º+¿¸Òâ¶åãÐÞ°ñ¯UÜ7a OµÉ¾)â¨ÞÈÙ7«¤©T)MÊ¡¢HÿÒ©2ܳ +¸ÂÔÃiâ¶Ï÷Hçu7hÓwÞ(2ÅUh _\0rôØïÌÃmO+^l (#*_¨Sz@ç6ÁhÄ0äîã¼ð<CÞæmñ»¾;L*äãnu³myس·$IQë;ݯ½[ �kf£ÉG(ÜôÐQÛó]Ôª¼a1/Íú»& �ÐfbI2r :(ÎNYê?)1ï6ãvõZ7eµµ§s®ýàºðpí¹v\6;6û< °¼'(þ ´ çEµ2¶N(-Ch07 è>øÜeL¡¶xPo ó0¯PwyQÄãx×7^ý× {ø¼;¢@äC"®ÁVH o5Mù,Ý[yá 6´|pn:$&ú©¥;0à#BWÕÀ5&OÙL"è.w!³þqú ¨¬¥BÍ<°¿¤z[,{ÇX0Â6ïYíe/aíÆwääKEp{)3FÕþÉÇzü z±ÉýD(á<®JP©dG!|Û2E)§BD=1#rÅP¢8:fAöS_-¶"EX¼ÏY áhMièF£xÛ+gL¼PÆp[J +^1µ¦Æ÷-]ªFn6ùÂâ_z¬Zt©R²ªUÉ"àWK~SdâSaÿ-åŤRðêee)^¦GãÂü¦r¹Ê«ã7/Ûcßz±ôóÎlÆÃ\"#6gn´'ÞSÌïIê:s¤[KW®axÇØÝsh&ιÑcþ\ZMuF©õ¥ ¨ +!b ÁNÓM1±¯±Y C¨gÁÌ8!t¦#Ûñ?ûHOåŬiÕºÀ4pu( ¦C±pΣòly° ÐÄÌÙ:2vª �qLÎðRÁf¢ò@µÕؤ2ØRPJT+ÊÔÀµ¯:Ù$ÌÀb¥ÑàSIÁ`§5ÌÓÈsOa>ôþ Tª¨\Á(µíQT `ܱ/åvþ&Êzs§B I +RqU%¢H«J±WzÔf¯N\tå �RëÕ/ÁË}pÓbÒm÷,ë©v6ü+j"ëà¨?¹9ýM`Y £IÞñM 8ßÏf)Wå»L¶»³æ¹çìTyÈ2³&ªÖIO¤+íöX{®¦è+kÍ´$<4#vyìX6ÑoJÒÄã\z+rT|ÊéFkt91Òäë +êU)£ÁCórßã¹Ò¶Cç;Jcè)õ3« á&zÏ|1Ï ñÞ6»dû(åÔÕÑÍõ¿ýQy²,º¸Aýko·ªoÓ[@yº+=®9:@_ÀÂq¥cc`ØÅbL¡Ö'T¢¦ Ý\.ÍýMMeº0&µ +Ô¯äw ÔɹHfÎ]WñtÒÈ B O L! dpTÝ3¥³kÃÐ9õÅ·°9ÝÎÑ@ÄO ðeêýÄ.kã84sëQ3O¼Í}vlÑèHHZ;z?ii(µ!£ñnA3T58hâ,EÈÂ8£,·c.Tía 0ØïWü*ï8Ö[¥K&Íѧsa¼:Å- </Hó(Zd}[ÚSêDô± ²âÅ4½³HÆ |ú ¡Ê.=v¾ä9¥>4néödÖ¼ f !¶Î¡¤{ÏÃ.{?Yõ&$Ê-ûW;lãÖ3½§¤Ú;Øn½w°z»>ǰ³)mÛu33ÐÚsr_)]ùâ¼úöà&V//ÿP©@rüÈ&÷Ê@A vµÆ0 + kÀ=/n7 ФúFõ¾ÒkÈÃ¥¦*z[ +`! h!éÅx¦¥~N,Åv.K`§íNÝ%èÀÊÊj*1 rv vNXÌʼpÚªèªÃr«#9 + ¼¸DÈï ÎïI¶-Oåj ûìÐbï,e Â'jc®k¶;ä,¬f=(úaFôl + ÷´¹kh¼m*¥,x¥°PLbHn¾L²)ì,¾Êt\å8¿+ö¿ b¿äBÀ"ó,Ê @^ð~#ã ÈmÜílF\ædælç.PëðópúTÇþT +endstream +endobj +281 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +284 0 obj +<< +/Length 2660 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢=J¨$; +A28N Æäcq ©%%ÃJDÌ8"C9ØÄp8d"ùHS"dòqPuШ¡l`4`oµºÚ9ËìRImÿ yºóC¢¤th*-ÀëÄuP@6åúÅh`0®ão°¹µ|PT4D]ªÙn¸\®k¯.ú(6çNf?+1N}oÌÊn:yC¨Ãê1ͦ/o|Qô<&ã į3úöØ2#@:90+J:<ã£Æ7Ð\ø¾okðm:ö ¨Ṳ́£ Òü?Oà@2KÒø½Þ6ÁH¨55*:Ö«A¨hÄ-ª` Ä®0¡.Ì 9'j¨n3lë>дm,<Ô¸mbU"ª:*I-ó2 @ï%Rlu R ºÄ,É4Ã{Ó ÑÌw.!RðÎÁðLÂG=QDÙ7QóW:T.É!Dû?ÀT9ÐÁ½´]7 £jSØiMIÌÌà«,¨fǸ©À +¹×Ù¡Dh:FÃcgãÆÏÁú;ÆCDZ ã¸ÝF£$ÛsVC óêô{: Óð@4#³9KX¦/¦)'âÛwÐã(è?RÚ³^²¡ÄH+ÊÐbÜ8¸P+¢ø"$®Âh@ìnÛºÿ<o3ÑZBÎT0ú^#xñ\5#ÄÑ».\BÍAÒ²³OÞæÆC(Û©³Oþ ,ok@ÍjúÞ +TM4çpÖ} E5z<QÓ9©+âüÀ)¨Nö°á �«aÐã,+ÄËp¥£Ý¯MMG¼¶[ëdÚ6Á¨lÉIØ|[/âX,æÐÙl/åÊrÔ q8ÇÛË¿°*vþ°Íß2'Nß{"Ͳ}/ Íq¶bòc2Ë*Q8ÆÎâÈ76Öó t jpìoÈM+^MeXFb'ç®Ù`]ÛwRE=¾ò¢bÁ¡%ϵbõd4,¥´¿"àÊBT~Ì,#±g~ßÃx¦ � 4FÓ9DÞ#çx&Î>@ ±*mÄõoªy&¬ä0ÙÂ,l1£¸rû6Q'´÷¶ÖæOê@g´ó ÎPrl(lñµ¶âÓÚY÷gÍ3ôÖÏÛhmN o»gª¶SÓZyÍA3.uÒàA¡£$ÀÆÏb¤ðHÕüQX ÁÊÈàÏ#,£ QÞ¼IÚT óôû¢;!S²Ød%Ñ`?ÈIPðzOùñ¦h I{£b/F(ÍVêÈØ7 2Çò\ò¤8²@KÎsÔ¥ÓÐýÙð +|¿EêS»JÌi&hPàÎ%èf !ɹàê|Ú@«ñ6Í +(¥½ËJ,X,^xsíã«·4: ºzi*jKL0É ÛÕh²a5*E(¥"ÔÊ +yµºrÖÐÅ4ÌÒ¶µWÌp9¡mRj +ús»ÈpKRD)N:àbNQD%8`áZÄ.ªJP +cLµÕ&ºó �°o¡®ÚÃo)fPQ©{gÏÌÌÆEÓþh=6¢iµfq"ÝÝDt¬ÖjF A ÐàØ iB²ô;ØNR!¡À2;7%39VÒ,Ô[òŹHWwX¦]!A¶Ò´ç¿QfÁã¶dZG )hµ¦å ÚF5= ÈöÑ$\{Ãl® =Ð �uµlÑT_·jPÆeÅ6P|º²FÙCí5ëÃ(²Î0×,µw=g¶]KD¦öF¶ØE"©ÒO*eMسYSHlSá¶È>4ê쥼uAúù&ò ¢Á°6ÔdsN4å_úc~m>+gÕµ]8B)X-®ÌtH²¯ë:¨Ü-¶íóß\+r®päºW\ VBi/UïVWÚýµçz8°&Á¢ l:-xTæ$Å1ɤìbÝ©ÌåSt;¦ ÃBCI;'¦NgÐÐg¼6¦Ö$§©Û]äY+HùU#ÄiOtKIM-ê>v-vêÄ"¹% +ß_ê^é`¦ÂTaëÀñ1`[®Á¾½Hº#ú[¯ähÜÛ£uiȰxã$ìçô\ÂhP%¹ÿ2æ`Ì·ü¡fæåmào¸ ßeõaDqm³>dyÜfJ¶Ã3ÿB´9ÿ¶< sîձܺ ûqpl8½C¨b@áÞ;Ûsø®yØe<@]\uó1°FeG+R¾ µI;°[Óºó¥UתåÑîäéWþãÐïMl}˧<e-XûËq..BÐdä¸rïȪGÊEaéZ6ÀÈ8òçp1ñº¶Umt»v~}[X @MZFÃFµ9³:ê¶ÝÓ#,krA5¹Uìy!'Dý²¥P\ý¸ÏL±?sÐú0Aé]ò¡H)M)¾å]»7ö^üý!%e;ºT0 Rw(1P/½îøô ÒD&aê=`æö+ÚD/sìá?ÉÃ\G<ñ#j5gG �Ó +H.&JááZ²à)B0BFãVb´ ®è ¨&3V +ip; §ýç×c,þc2¯èd´þð"ð"è|/Ð¥TêZ©£ÐuÆPéèkOfÚéþ@þ=éþÉþ÷C©èFpûcÒjII¾>Fx+öø"\ÞÍ©þllºé¢»°v- ÃÄ .¬8»j3än@èÂ= �ö©¢¦¤¯ê¬@q^=hA¤`FDF¤nP@ ÊoÏ:j)lL@/© Ú." +endstream +endobj +285 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +287 0 obj +<< +/Length 2570 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ'eÒ¡* B¡AhÄn.è"ÚxÄj7 %à *h +'# ´Êt2§!°Üh("Nf3¤àt4ÍÂ% +F©PÐTNǬ,¼a$*WÅ{Ú)*¨äi& OFbÝvg QêÒo'3)@l4μð 8ÎfÅè@o3½¾çw½ßñ¦ÞQ¼A´6LgApÉåëÆa×YÈf3Wü&**Ä£ò®d2YKÔͳ¯z Ê<û4ªóP7*b?àPZ£lxiÁp¥>í8#pòàC(ì¼£Ý7ó®2».Úò7EPhÆì¬m¨A¶Ãs¬7£¼_¸±¤whÂ2¡t"=¬ô$Ð4L::È>ìsôÔ «üÌÀrJÃ{w¶®è¹íchݳ\9 òtÀ¿©0À¥ðº&Ð.¡áªH¶4 +J<pdÒÉàbP),ã¨å/,Ã)"ÈGT¡! Á01I3?.'C¾ë£Æ¹c0ê6Sì;KClÜE´ ¡<Tà¸r,D£¥E íLð98öESAP7§¸Pµ*ýÚ .Mîð½*mÜñ¼eîôT«ô ÁOÊ2ÒS;ðÇÃ̼ËÏh41À3FÅ©z°ÈÒ x°'ã»f(X*ApkI0ðÔ8«éBoÁöSYnÛá �QuÒ +³ðWjý)KS5N]Âð9am@3SKzÒ2Öç/ø» VPaXÀÕá üâ:¾#¢ *B&Y<7&¢¨)'òx>ÌaI¼ôZ#ʺZpZÜR«e5Ô!G%Ä¢ Ëñû¦£ÒQ´6¥D¤®þum®×½mìlzà¹.´ºbÚb«´h¯¹¾#iLQ^R¹× Ýp16Óh7Páhp©Ü÷|±g5Õ!¬Ð@ÃAý;e¥¾µømN$/AÑ<Ãr_¸c á´Þ¢ÐðÒLÛ 0ȲÄ0H,'ô³ è[sÓ.eÔ»£7°`Bc0Ê5ñ¤²á?YÏ7c>¥g ¥5EÂzÑNEêÓ_d90 R$8xÂ\bqí&HºÆáù¦&¤æÀÞÁhoI1txäm#iivFD¤ +ë£ ÉpàvÈi.LèëBÆ^pg8â#5ÄxB °³â©MB íÂÌPܬ=ô/ÅÒÉ_(íK¥¸tÃxvM¨FÈÁ"ت53ãå4vp\ôǤ¢ym&L9-1 #ÔFR!Ò°æ##¤fHª¿@Ó&dÚÙÇzPJ)I¥<T©ÀØej´+Á¡òÐ ØfOR[I`å&$ÒØ§/ÀØlÍÜSâwÉH!F`)aÊ Á¼¯ñ@ºóðÙ7'3*xÑ4G`xd0h7A@ßÌVOÄÙUYïG-øÅUï-ÍÚû9Þu$X½èÑdk¡¯¥ü +â÷£ëõÑyO ³H Òb³)Y±¨ËÛ9×Ê#~æêKÔªj¶Bw ë&vÓ©áDÒ _d0Õ°@;ÓâU°ÒÒ¿jC¼@@ k i@©(×Ëb)ªqO*¼¨Û}Tóaî7ö« R!êéÖ«^ Ì 2 +²³ÅFzk+?¸¹Êp-°H2PÂÌÚ ¬A¡Í`·%±×»A®£+©%.¸s»3æÅX3àéÐnPVndÎ h) ðxP<+à\Ä'f˹øËf%xmP5i ÊyÁK<öÅjÞf8M¥µ¶ÐPÛÛró¼*·¿n½0@ÆÑ\6í#néÞÇ=$åjÓâF£mæpxnÔwf§1À_A,?°ÈU .û <Ôß)ñ#mqófKN\±Uz+¸¸Ã7 u×wÀ Á8!àÁZ }nA à½ûpi~ɸ?Tvþ2¸Ê¡+åÿîĵArßL¿`f+¨ÕôÙW*üï ÚaÖEܼ êó'ûWVW|覆dxhÔu©Ðe=-:°Öhå£àÔ:ËJ¦¸;eü¿Ø`@q×FÒ¿øà\MÖI¸þ2ÂHLaáD fZRÂòÚ[ókÕ¥êÍxt!ì±®!¥ög#*eÐÔ:ï$dw5g tX»á²Ñps ¾ºÙGµëô׿ÑtjcO? 9QÈZf"Ìqñàå±èAgÇ 2B,;{@Ö^2 ¶ÀåÛd¿{50A ;Nxo¡¨¯Ð±ô9°u_ Á»Ú-ð$1ùcKh~oïëføJZ'&ë"¢tNÑ^RzS¾;f9ôSN|Z8×VÝ4t6(¡4.JrMIÖ8þ§3cOèß_0y`ëîqiípC æÓ\ ûÃ]~¡¯ÇEA*{H©Õv¢þjJ-¸\Ç÷mí]½¦µÜ'gZ ØBà);«Ü("VÑ_ª«ût'VÎU,{ ¾á£à@@Ã*#ö/¸0ûJ,s ð ÷A ßbCÙ&,LPoçä +eÒàòdäÂðo\7/àþ@@áFà¤:lh$|7dN8oâ5t_ÆOüh¨/ßïæùMȳ,º³l¾³ÇDVev´ ´Æ¼ÍèµE6S¥>T+`Ålæ"ëlÅæú0#äÏ'ÌC$¦}n¼f à ²¼åø é,EK¸XEXÅÛ¦h+ÈhëÎ\ ÌØàÞ]@äD¥Ã¤üÂ[,(%$lÊÉd)ì?¦ÊlìH¦Ø)¦ÜD¬R¶%LÎEPμÎÌ`#å0"ìaìnpÌtÊ¬Ë +endstream +endobj +288 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +290 0 obj +<< +/Length 2613 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT C N'Lãr1¸ÊTá¥&f +Ã!Äìb8E2|¦E*JRh¤j("JM +ÆÆH¦\¨£A¼¾Ç$àð JýÆ8lÃÊðe9ÎFÐÒo7_hb4 E¢X]8.ªÃ/!Z+ÙÎ6° +/F§ 0ÃIæÔfSqçÐ[-×Òó{t3 Ê :ûFS§ÀÑï2Φ#aî7C @³3ðÂ6¯|#æ7cK®2ÀMRþ³ {f* ZêdÈÃ:ãHè4>Ïxæ8°Ì4ÂH¨5CÐÂ\ ¨ÚΤêÔG!&±<T2¡ Þ6O¢<Ñ´pÊBØ+a¨hÇÂ` È1 !§Â9/Pè2IÚ¬ûBÑ´;R¿5 +-¥Sh£°ã#28ï5Ml¬Ö5Ô +qe;ñ[Þ=NxZ1A°¤î£ÃàùTRTÞ6ʱ¼ú 5ðõ(RÁ$tÌÍ`Óce6ÑòÅ"¥Rt.È0ûáTå<4ÆmZ ÏðAA{âO|Â0ÅvÜZY*<ÿf0ì +§°L fÅ l³¢ +º³5ä¬K"ÆÍP)>¨ä7pµ!y¶ ªÛ`-²¶ÜØh]Pö P*>á Ä"B3:dà9@ 1âCk+ÞUË|ÞèN}·Ô i²x¸É²«Ã.xc<!çp[Ë4ë8;AYXÂãm«nÜÛ.ßÌÚ¤Nñï"æ&¼ëåm,KW¢Ã$jt¥÷º+"o«RË2Ðæ<Kzã½ )è""8R@*m« ôÌNK¹#ÉMÍG¬ã<"4 HìOm^Ó£cM¦;·¤a¨`±êÆK!«} û<èºn«¯=@j`Pí»®ÿ{ºÚÛË<¢o7Îô(PõAÏlï\¶úÖ/¸Ò3¨ÞÎ s>«¼ï¤´Òä ê¸7²zIá>TM £àp ¡Èéþ?æp¬P¢*©87Fx �p .ä¼Ù&*e4¦´Ú}rÉÑ;;¤òjAOÍ +å¡S)ÁqËUEÄåßÈ2Ë6 +í^h¦Ôê1[ +sî¨Ûö ßg¯ä2¿¸øÿÖÜ!>°øQ +¡`t ÐÁVÃ0R²bê?L-n¡ÌV0ú¥6b|äBKmIØØ¥ÕúÁ(1 mK5^,ù6ëÓ<e¼6ðîP s+a!$v7L±V:I1¨Ò¬Lf©'Sh¾9-BÊcØt®ðC`srÊH«¡ô7[°d£ÐdÈÁ±ÆL2iL$BÉLʱÍU òã@FÁä)Á/ÖCEfm˳zæH ¢U#Ó É4aær ÀIóÖOp@jÛ-L/ð® D +A+ `HAA0" 4zà y?³¬³0åch¸RJZ#%úD¡å¬eQ´u£QúC8V- ÍS|#4P3O¥b©áBwÀ´ +U À + Ó¯¢ � 0 Y$êyÛ¦òÊuÆ p(¶Tà@ãÂ);s®«§ÉWVc +n(nY¨ 7XE*³MI`ãyéäÃjâãÈm¶RÐJëDNÁ¹>m`Z×20]èð| Ý>f ÞKGkh4y·rÝÊ +¢ õµÎúáD²¡¶÷ïi©hf]ÆéèÄb£Vâ3à;wojú2&æâNmdè³È MD 6çA¢v¤¦ ðÄú ¹?P\Au^ìÚ)3X_êúÀ`hó(ÖMW®D\}%T]àá&ZZ +½noºû><dýKãÃïFBwÝ$#ËöÅ'VJC(i ¡Ãܾ{@¥]º«HÁVBPÙCó]ÐyÁLxfot³Âjý@KM0ÙXf@&=¨u¡Íʲp9±%ÅNÆÏqöDU!.^Y5±Ò#|2y» £0b'3>/{/" °Üæ8ÔXcÛßZX9'AÌ6ßïzÃyòW @uC¨lMqúÉ\¬åSERN¥Ô4µø¾°04PHÁݦXÈx2a9F$Å*Å»x$Uá±òF¥¡PyXIjå6W»jàf³Vn»d7Û"$µÁBvÊYÀ#n¿HÆK3.¹7mÏW˵3¥®6¾[ +=ll¬76f+k£L»Þlp¼B0 §þãPüxµÖòåË£ëîu pÂhE!L* '8æ(D)n§¸R¦F[-1{0s-Ö\祸§POªO +|Rg©ðNt¼PÃmã}uZx0çN¼qî¾óZÔUOóxó&Øð¹®ö!3LÜ,Ü^9@¦èO£Ô9|xè²îx_?g +ý¤(NâzO[ò¼w¦öR|ìÀwg×@bb|(N²W2Ôç½±¨aó×KæÔ)±÷Æzr÷|T°¹XÓ°¿é=5?gÑçë}âHS +¢©^#ÔGÏñ*_ÄÕ\¢Tw Ýݧª±DÔ øúÛ(ª8·IvíN£H⮣¾Ãè>èòV Ègà£òä¿LT$¤EÏbIz÷ +¤ +ªö b¦þ-DåchxàCÞ +)¶`ÅÏíÄJÀ£In¬p �Ìä»êJRnÕJVXJ4e~Ø=Ên§-nÃÀÌÄbÍÄ~ÍÈzeeÔ¤TEªJx +` ©È?¯Îâcâ¥ìâã¥&°ñÃ"`§b,N²anDÝXÞ`Gðíèñ/#Ã0"íö°fLßÑ/.;äàÂ#¾Öàܰ¸Y"à +endstream +endobj +291 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +293 0 obj +<< +/Length 1967 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP B§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9"v!ðb9 3¼æs¦kpÐPe9MÆ3)ÌSD£AHÒJT4TrÎ9©×¬!ÂÉf¹är)PR' +R!L¨A*E%CUI ã2HOwUË#Ãi �m¯Ë³Ó9À¢Ò3Ûq7F) +4¤B)SMHz-2ËÞå*au`@6 Ü)/(iæóéÝm¾âç0£ä4 Ò7Ï#1Ê®ª(¬ ¦²ÊlïjHä¬)x`¥,Ë¡iºÎ.ÀQ»!¾¹#à6 #ÃAsvlÈ9ÇQê´nÛºñHck +9#8Ë!zX2 Ã0ÒÀxÍ+K¶3#¨Ù*¨æ4ê:J#p@3 ã@0ÌÃHÂ6 ã<¿¡pb ¡b#n`Cxð6m«Ü)pèj$*@4Ô\@æä0ÉC£ Á,Cl¦¡0rÂP¡ jäQPë; ´½KS´«mÓ0Èdª5 v @7ʳpÊ2Á ÚVèS¶u¡^Ý =Qe1VcyDEïkÛ1í¹o\Ç*JÒкÝt²\Ó*Щ<êØ÷ªÓ²3j}²¿+R-Ëf/C ê9 Ì5m~âs&ô²p£.ã¡pdä3ts8D®h©2°9v`Óøë,ÈàÈ7£Ø2óÈɦiÃ-º$Ìr¼3Í3XA6Íóç:ÅÏêä42ÝNÛQ-KL½0nÚhÙ§ lw±p[xÒ3nµ¾mÁF²9wBÐêUÎ"ö¤N1Á Â4æ2!â@)»4 Ýõ'Y@üW!¾G|aów=Ðn\˼wÛÔ¿=oÚ}»£ÉúN_;y: ÏtÔÈ2òB TÄÁFÉ5Mtá9NΦÂu°n´×z²ß½ùî"ÛS Ö3½N^6I¨1#m �_é~0Â3#ÊÍyBá S. d +- áRCªÂ¦PN9H¤Ó×Xx*¦%R®IñbhpÎuZ!òEÉX4µè2Á¢/»:* º+1å!£fQº´Hhõ×¼ +b'ñÔº´vºMIîÅ)6às×~-åú&Â^ûfmµ£ð~P + ½¨H£~ðº%6§JrQ*+ ôªUX-Uª½XÆhä2¸ªð§+å¢Ö"ÕXÊ}ÂØÉXÑX ´Î!öÑTxS1¼gÐá"]xòzMJ6ÔùS²WFà;ØSIRh75Ì^Û(ts%w+¥âÏÍ^²ía`¾f¢ÉÆ.2͵X [Lo5ÂÂ×+]4ÛÆXÛÿбØsa+%$lú2¶Zóಢe(: iZ¾PÈl°MÄ=CÌ9¥½ªÔC`w!å > ÜXzê_NÒv0zâ}++j8C¨ )m?¥À¹@Âî^KÙ}/æÁYNÕÕ=BQ¦ X % ÉÒDXWVé-]&ú2<¸8±Ô¾9¢FIAjPà䣬ÂN +¡8"øþéE`lù`5F3¥)îó,B]êÍX üã=>¯ ,WÚØñ£ã¬ÈÑF¤3n¨ì"ÙûChí*IIrIÏõTk IáÝ,6)PØiµÞBë>|ãT÷Y'`ÄOËØfdMÊ( ¤ +«¯A zÄ?]-æeÇ&42nÃÂs/Ò¤Áh/+(Ã]æRºÀ5_áD=4T|ÓYúÐ 'Ö}tmnÑÚ>%å«4©³Ñ"ô^ËVbº'oÀU¡É¼jÂW8aàÚMj*ûþ¬ ÄàqáÕ1QöÙ Èñ½s_HH5+º*TvKÕÃ'5*¦=»SßJ«Që8@ØÜRñJ·äÀHsXUÁSõÀ§ª[°inN6¬¸VîÛ³²qºií§´eûMÚþ¾ èä±ÀÎ_åÔçí$ÁÀ*¯êSÁnõØKÜÉf«as.µ¾×(']iÊËÍnáÔe)m3¹Ïûº Y¼<!P(Rp7t/î5øiH! +endstream +endobj +294 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +296 0 obj +<< +/Length 2397 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT C N'Lãr1¸ÊTáæe7Ã1¤ìb8ERi~ØPF¡dªN"ÈER5Æç}¹ZçcAAHSC¢1±Ò)Å˱Ã1´s7¤un7T§+ ¸cfV)ÌÆr4y»D£¤th*-ÇïÄuT@6òÒLè¡ãFð¹¶PAnÐÂp8 &3Ïj 9MÆCxÜ ¶[¥Þó{#¥!·Z9#8Êx@95£(è@Æ6£ä.0 ѯ\3 @7Ïp@2L³5cj:CxØ6ìJ&£k:"&¨.¸AÜ:3KÚôÁc¼.7£°Ê9DCxá'¼£Þ;ÄÃ@Ò÷ôIPÝEÓÂ÷PÄ5&F ÔÜ©[z¡¢£é©+Is¯ºÂ$0¿Ã¤ªÁ»"5{bó6ÌCrÅ¡3UÁ jÏnk6Ð ½9PLÜÜ·t°³A¼Ï@7Ác«Ò2Á �0õ'ólÞÔ£xµ`eWÀh !uÙQÔµ=T©U][WÚ±ågZÖõÍv9×°`[cY`nZ(ݦÍÏ; ³¬vë +òâÕÈ6Cö#8Â:À£lªò `ó0ÂHIOT'ÂпÌS Ù£Ê4ÉÏhÃÒ@S(Î`æºm[:ç.¨P+¢* +(°*CãMc ¹qÞ0qÇ)¦|øèB ¯`þ¿ðËxYºÈ±¬zÆ2l¨pÇShxhÏ«.hÐ Æ3M@`°°Pê9 ÃcTR¶ë§8hâ8ÁSáðç �ÃØ:ìz\áÄ·»CÆvJݸ_37º²LûC½4¡üÕqo6C(̳0{ÕpÙ n7¼[Ç8jß"®¸ª¿xOùе¢¸û ácà¶ývËØ)jk ªLÐ@fÞæO»OÄð©f-ÌøÔB L !8" 7bcj!0E§àhZLünÎø°@ji¬5ÆÀÙ%hôß¾{0á9F ¼ÎUª§Ò MKØçlöSAß<'*vzOYíaǽÀX `SæÍ9ÄUúK¨ - õlú!h$!0 Ô0r=§7¸vÒi>D- @Tg_Ü8:Éa.¥³¼NÁ©> ¡Ô68ÌÈ+$Ehµ°wcf©mÆ#sHÁÒ9¢èÐ1äFÁ±0ÔhjÐC¥p*WÄ×+¢ «<³$E¸²<=S!àA#дËa¤7³ÕK=1 ð交< l3«æ[aÁ½nÃs^EÈÐÓ6ah¸9¶B +S¢vj)åp¿×ÂïÁBØPª¨£a"ë$ ,²´ÔTÒ_)ùO£ÅD Ãkî yg-oGß( +iL1Ì]iBLɸÏ'£\mñŠد¦"Oêä RêÐÕ +H*µú1lÎ[H͵:NG7*Hàè,©Î©ÖN@BcBe´7²ÖCJVÑYJ¨ªÂÒpëãlV5H¥¬4ñzQJÔ)¥«À«'F"æW,®Åܱ_rÍ8«ÑiXùXñÏ èêߢU¬83LáçËq :ÛVA,]3VéÐÚÛ]köÉΦynÔ0xAwÂ\+`}\jMR/³fík?-·¢4f +AÈ(¹ÞãqítHßG ðÈ\òF<! Í[ nK2ÝÐK%*aÙ'Óa.̹§w_ÂÀZs£j ?¦µ _D´¹)ËÂËë,È60ÇDà õóîüDèàk`smÜS5äähRÚÊ%Ñ)faµ@röUJÄ3ãý0g×QÓËv_/æ +¸² ØÁi¹QMó1Á£$Þùa,p|7ç àCKº +Ê®¨$SÚC!ê6lQv[ºN©h ¡$ú²áKËÆC0°dZ»3ͼæ gÞ45/ã7ò`(yÁ¹èg8Rõ«ØÏ$e¾W¼§½Æha\' E!,( ßSXØ{cì³v~[ %AÚ?B¦F°.ÍÓQá h|¦D ðzXT0¬$ ¦°I +a$!5è `{µËðf +eäßÔ¤ÒSOªT"QÐÚëj=®nx{D%3±ý÷ ÄÉrxäRLDÙË?,Ø[Ëzï}ó¾÷èEßøê+.ÍCnAº Jº.HbB3ÈnbÈòÀ¦8i}2Sªw8¤ÃZKD´¬x¢ÜJÂg¥G(E S}uðXÅCD¬t[Ë>Ê/ÿe%WVm_.¸±gô½{[¶ºX ð,vî6Ioû*¸Ñúåï}¾¬þ±:¶ÛÓm¯fc©÷f1¹¢pÖûÄ3{|YUq[ÆÈH2+yÎgþExå«AÕSëo¾3á[¿ gÁhb3ßá%½=Ø(¿Èù÷HéHG«9DìB �!±T@v|Ã<Ú£ÜNyÓÔ �GúáoJ,c*Õ bÕ`Px Þxçydhy¤ÖZõÎÍrãC*ø-~¡Ì0²ÄØ}Æ +endstream +endobj +297 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +299 0 obj +<< +/Length 2528 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BTR¤Ð9"cyàÈn4¤ÙàÔP_#JààPA' QMb¡ÓæEB$¸`4¨ÙgM¬\1G#PÊs1'¡¤ÞnÂÑ©i%. +Dª[HÄg ¦6K¢Ícëó{=üÜ 0ÃIÃ¥ÓfSqçÈãÜï¢FEsç3 Ê :Oª~r24FS·Ãu=SgÒ½ol CÎñ £xä<Ë:1£à7dØ6 îpè2hZ³£4Ô°èFË +[±%áߥêrâ'#Â:+7<ñ ã`\ ÀÁôþ<ãK¯Cã6A¬2-AdEákÎ&lr¹²pDIã#úìD.s1'¸P2ΩøêéÄ#ýÁxÌôI£0ê7nÜëÀ®{Ð0o´PDrâFEaZ Åíòjâ´4ð°L'?ssí)Â9/>9Ib Ñ)TÈóÀà9C¯@4ð°A?GqèÓÈ#$"Èö iNÆ1&(Uõâ2Khl·³ÍDÒ4ÍD´Ñ³\Åa j1tÈÉA@ïtVml_ m¶ápdªX +' ò$÷Ibl÷"O;§"x@=]}«kµwÖ¸&±(àpbÕXám^¦Y)0 F1Oî?cäOÑeWf!pn¡WîoN&±£á²bS;5³å9õë"¿n©ÀµÃÅ]<¯öLû «µ 2 �Þ3Øãxñb Ö404Ð|4#+aÃ+Ïq0ç\u&ÄS4Þ-1\³,`êlÉòÑB<â ¦/x °b *:C ó7ÃcË·XAóÁuÞwÞ �áx7òn¼07c1HdagÄÎú0Ãà:B.<0;CC¯?³µÄ1íYrǾӨPRhD7¾`ÄY"M}o´? µC`ð2æs}ê%3Õð¶T1åHÂ"¢UÁqY*˼˳zTf-©6\Bñ}¡ÍÓf~kÍ¡"¥xÚxN Jx7+ð¼#'\p²T +ØóÀ°äqàtWéQ?¦Xc($)¢3ƹykM5*pRøÓkÜ|a¤2CJÌA¯èÀpÌbQÁ¡$gp´¤v:ê +C¸ P yçaÓ¢8ÄÚÉOSH¹®À& +» ÓÑnjí»¥è-Yýg8¢_3ÑÑaø¥¯Ù!,¾BCjUaD*+%>dt32ÀÎÀPÖº°ä3Ö» c3ðôÖL¶MD)Ñ« ÜkÑ$Ρ ÔÛ< Vs^4M pfhp9À¤»SFÐL !8Â/y¦|#$Ò/5|Ø`XËÍÓ:ù¡4j*vCò)A´fàÈú&ëçáf8ÍåÓÚå|m§h¼ JEIÌ´iàõ3ë-¥ÜCáàôÅú¾ÀQK©}®0TY§mh,ix¡FU<ÁC2À §b^,÷$&L êRµ5öj¸«lg ¡«%Ø» 8^TízÎÆ\ÐQO_ÌrDÖqR:éaUÂ4$ÐìK®L8PÆåIòì7PÚÈebI²íÕÃãW=y õíÔxßô¯ëI%Æúyí·]ò/ÙY'*¯<ð)Zܶ'F@C¥kmxf¶*1BLbµVç]W0×(Àiïø'Ôÿ-Ãpg0z ¨n}}Î $Ø eÍ{UflÔ³:ÀêPl±´¸²öÍ+µª +½¾EÉ£èuòF¤Cá:IõU8(¡nî}ò¸7¹íAmÑçÒQ;Ñl-×ZMÖ×Yp8m!à4Üj÷tmÂÄPiùÞÅbПb×ej^L³l-'X,TÌYK°Èíá ¾Ëef[íOÀ0Q%VºTNiÃMB£J&m+ +\\,YKÊnÃuáâ÷ÖØT âEêQ}gp£Y9ÎQ¼ÎÌ8ögo½½BÛe-aQ!Õ ,li1Õ¾}^Ì]tÉÙJ½ÆçÚkÙvHOºÐOR`¡èË»êºÏçÁÍÊ%qÞX21f|úônT¿µÃFÝB·þ-Ä£ +e¡jRÔÚoÎç8Ã,åDs ÎBÿµhTcpW4³25(íUp`ÂpG/o+Ïúª(X +/RP I(`.¡Ä`ý[LtÉj4`Íѳ×Gõ!¤a!ðª¹&ßúCH÷\ÿr3&eHyDfnÓçO5úRBI Ú¸Ëb_Û(l¤ÿnÚܪ/yñ¶Ú??ÝVé}7§¼M¹,Û®·Ü®Û¿¼vµ¹P{ÕÂËk²¥ÛtøÄ;6rðjLnGÈ«åÅãXË#ÏÜ _·ÒÔæÊûLlK¦v2Ñ_{ zì:^˪å ÿÁ³ÖªÐ°9ipûEíð±°ÈÒ±ë!yndaÌ ¥>ËZÍì Z/¯©>Ìeû!=øZk$j§mú¦*nª #ZKÃxèbëîbM:rÙe§Hã`@¨N<*(Â!éò$®è3"G Ï2Ðo0ºO4ΫÞÍàI¯jYlß,)&|ЪÈÙìús¤CD^íÀ»`PTP M>Âÿ¯þ¤ð¬#严í.ëÃìÔáÀ éÄÌNî*nÒ´°)ÉèÃn௩F0H/B +endstream +endobj +300 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +303 0 obj +<< +/Length 2284 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8'EÒ¡* ¡A'¦q¹Üe*IAC u©3Ná Âv1F)4¾G- Bi<I# +F#AdSD£¯uئ0 ÆÑÊÞ^.Öe¸õÅd®lö¡ e9ÎFÐÒo7_è´r4 E¢X]Ô.«Ã2I4°WµPAÅPõ0ÃIæÔs©¢Üd9öºï²ÜG"Ý.×ÏÛ 9LæQÐÞ 2NS´Ò7>¸Ðý@cëPýãÂ7Á �£ Ò:A0Xä7 j6´)B"hâ ÊïhßÃL*" ÔÖ)([`®¡¢G7 +ip`¥2Á@ 0CÞýIÚ®ó@Ñ4ÃRÀ5Ú%R h£¢¤áÀò|¢6Ç1Ú +ÖÌjX²rÂÍH P' ðÀêîp@&ÐðÄ\;°ÃìOàßGS +× løOÊ6 ¥:µtÉ=ϳúOSÐ5EQúR/«ïJÃtÄíO7ÕD²T²=;6Ii?¦©¸P+¿ã Þ;¼.xP6/øénÖË· óø70èÌ6>W+¾êºïøÎ@P#ù¾TïAÁ!|¬/Á°Ü;Ä!]pøÜùÑ(XÐ4qËK'%¦LhAE×vâHØ2Ê«LLX` P@[fc²H`h\Yz¼¤CÐé\¯j9WY\ìÁ!g@æØâ¿)N*pÑeØÈ_ÉÚ{*§õȶâÒº®â3Ú÷oçÜzÎλ°k3´æy<¡»»yôE0Q2;"EW6MÔF3ØQäòØ0ê +£lB¤Åæ¨o>ÓJ´áΦã,k+ ÍP)?C¨åpâÓ½]=6¼»jÛ·!¨lÉ~æ½$Ó«¤9v=@;]#«éÍ@[`>ãL#Á`0¶ C$~á¦òFQ¤mßÐ7¹è JR×,#½ûÞ ~b¼ ¨ +ZJq¯·ø ¡¹¡6 äSº=ONTÂ2b\áA¥LFWLªÒu%pºÃ:ÐÛm®À3t²ðc4Ô;s`îM¡!ðVd +ôµfÊÙÏ[jUEÉÂa$j<#¡¨,iè\é +辦NÒÌg©d+ÖÂDa 'k¼1Fødø bºÎ&\"xL £4¦/·mM:¦ÚICÀ@ÞNxlÑÓ j´AÈ.F¤¹!#¤u²^Rxð!#ÈÙ@T +) xᣠRF'ÀùE&ó6a/p8ÚÃxr%¥ÆBÁÌéòÊØi.'-Ú¿óÔäh¢3Æ � +DH còbÔ$âMUILþ%hüLüK²2dħ"fM)ÆDTâ[,²AOªf ¬ +Vê-F°¥x~óôX1,Pu^±LË%¨*÷IÅ¢ªÉÅ(5F½i*=^©7±#!TSMölbÒÒ /m½éÈøY+X:ì¨;¡pÐÀ(SòÌ)ËYn¤ ydíqîÌC¨lCcÌþ¦haëÞlðw)ø �7×¹¢ +#{ÉQ·jXÃqp +" ÀP +à) 9H/$ãÔ*@Ñ>x<³2Mu%QÖ:ç`´pNC+%Já¹d²I´³Y³y(úLRóÞ¼1½¤m;D ÓAI¨ù§5f¼Ë3VWõþþEp¢Í?ópë}w@¤ÈO®Áôos 9(¦÷o+ý¾vsv RYð~L'P° z ¶92¦eÛ<1Ddì©L²ñæËǶ`Ò\tR ÈB7 Q1 7¨YD0ÎÕÓ_k¤¡ÀÈ·d¸ÍYKImcu¦DÁDò¡J¡H6×:Kq!g¤ój +x)%Ì)P#¾0ØVÍ fè-±Ã¦x²I@Rä5é$î¸$jà(ÆíÁ2iJ)¹)NÓ^©ºÊÖÆyÏN]Ëòí¶ËÚC0 eh 3L¸ 3p¹æLøÉõ|~è×XYjqguÍ ^í_o/¤z®èC§Oé×Ô+ÍmjU¾ÃõBÚd«iü³¨¶åØÚú/÷¹;g{>=¯ A´öCÓ<+T2Ü3¾¿õLW¥Jîñ®`",zÑðÕS¾µðòÉ!¹íC-¾kgê~Ô¯@ÜKÔ'«Y(\ø±8Rú%Õ3f4bÎ"®UÜ«RJýKY>l)B¡LÀä¯*uSD§ÎªÂñ¼sBo[Ó°û¿/©ÄÆØ½wtTiJ¶HÔÚ婪ºAÖg»)|ÐÆ¥¡¥Üé°4þÑÜÔ~pÖ:¤¨¼ÞNï°a=íÞÓÛov=P¿Ã +1&ê ºÀ÷¢:ÇG¾Ê¯å¼õýü×vÉ:MBaìw>/Æ;Ò9x*à¡¥q ß4"<f3 1íòK&ÛC³k«Ä.µ×¼ÛU#f/Îðç[FmìÿFjI¾ø_#É~·¦ýä÷¡5ä«MÀ~!@@ +endstream +endobj +304 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +306 0 obj +<< +/Length 2535 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP L§eÒ¡* B¡AÆ^4Ti´ñ ÆCh ©&)õ¤Ð9"GBáðb9 3¼æs¦kpÐPe9MÆ3)ÌSD£AHÒJT4TrÎ9©×¬!ÂÉfI¥ò¨R"ÊÁI¦ÔjÅ fĨ)*¨äjL/1Dâ| +®XqHÃhõ~]YgHÒÚ-ñÇh¦|_#F# SJLÃÑiìõGì¨U Õ à¹(Æ9 #è4ãsÒÄ Ìc|+¯p@É©¬² »æè³iöæ¦ë8P !¸QEAĹ#à6 #ÃÁ±slÈ9ÜÖ´b;Lók +9#8ÊzX2Ñ'c Â9AcpÏ Ã A 2ð@1ØÂ1 p7HxÍ+Iãê90#pé¥nÀ\ì©B#)K2QÇ(Ø2Íd2ÌÉ9LðhèºspÝ1Mê°¾a¢IA$ ©CDÂÕ%M£xëô +9ÀðLç@1Jj ¬!®mXÎ.1õpä0´ûw Tpðdª5Z Ã|ª:Ç£ \ ·ª1K¤¡)L aãVehZLU¨Ç^áͳ~[¶ýÃqܲÈAtì«(jëxT +EQªokÊ*è«NZÈÍ©á´#°eP½Üé^B8ÛÉãðÃ*˹ \9±¥R.+$J¼t¹09¨å!ÃØ:ÉãL0 Þ:Txî7S««Éã¤Ó*tÐÃ2ÈT±-K,¿8s$R@6 ã¸[²vDzÌý¼oPmxÐT"c¡tdí<0Ò9aÃtÑó`Ë1MWD9H#5cÌGÁ/¿tç¾H{ðÐ4ãG²ðÜ&0ÝÔMûác¯®+ +àjÍ?oìLÿäº.ËÂô¾;ó �©Ä=mµÍ@ &"óµsJó¯EãPü SÇÎ 58Äyö~CÎeð·àw �¨!. x3%È'5xñ^#ÃdDr8Ñ^k+:p °Î¢A)I3ÿYá|¬ü¨Ä<qsHQ(±ó¢ÒÑ<AÇm £$h=L-Å§ä ¬! �¬5C³iiÉé>$þ÷ÀPTKÕdåVÛÝg2Lswïñz*@j©NU.MõC%þ¬³9*Ú+¨{ 2óX@§,E¡ä4ìÉV +ÁÖÛ Ñ°ÅÌÃ×K]ºIÊ%W³C_µ}IÅ¿|´òÚe0bPÂô»ak_±%²ï`3$r¾WÙ5QD¾$E ÆxÍ$9<LÉ\$$>ÁC\ ´<%Z ¨fɺÅíÓDõ)i¸% �¤Ö8 �|P`áBðdÒjFí<5ãOõGni*£ýêU£Ô<·ôÊWMIóÊFÈù"ÞéÝJÍhH¤ÄÚrèé7R^Óuçª@È0VCëTc¦+K®v:¥ÊB¸ÑB-ªÒ{Õtrá\Õi=8&T«Ný |6& Ä`CkH$ð"ã°\«ÂO-ÅÉËÚ°QA(5§Í^H)ÔMT`m¡±ÚÞÛÒf±pV¬*m;k}5§Ò³Ý:V§hô8&¤ÚÜ[]pÎbÇû + *xàöáÖGT²ønÌYTfÏz¶KUH¬CCWàpÉí½sX!U(ë| lía \Õ?qeÔÂDöAkpKF 'È wuÉÝ¿#fQº¶"§¦+]`äu®°³ä7.;]Tn®¾%´u¶Ú6ÁM[UÀB`LoÝÏ]¦Ë<äv3vt]K¹4 ë* Þ0d Ðé0*Ç£{Þu.åä½Òþ^ì>`oÈß.ù2h@ÝæD©b²ÍpF ¡P&üß©£~ñA ¡)¬ ¶2 (S¦0:À®á zX7=8 +rÅß8%Iä@21¯ö à) /èS»®ÂHT +,yx +âCä`Hzs!Õª éCqÕܨwÝ +¾LïH92Ç2ôDÂ^ÊôîE(¯uÅ\OÜZGêT×kí°ö,i.ñ®:#@Ú¦òKÍ«¹`æ%ã¨FÉ?&ëtnµÎ9c`²ESw,Éi0ª ή2yW¥IBU¤¤ÚòÇm©T¨åaX¼gõ,ßÝöZ³V\,}@SÁÁ$Ó¸gmF±J óuÍegm5«#Þ¸hr\a';tuV| urpÆýl1rKj%W%ú`ºU«}`j 2é×^îòó2V»ÐÎói¡ØfsRÞk˳/ÜaÔja1Y8Ðôåó2töÝÌÌUTPÀÛÔ$ÝﱦúI:§oüÁº£~á)¬'ãÖÒªiöË&ñ:ì2;R �ê£MàíZÐJßZwOïìüRÙò)kXíLWeÆxl«©^½¤ô¾ýgsƱÏ:Jà89<÷æNºnÀr§ÄS à^êÚqD¤oÏ´ø"äýÔµÀÄ;ÀP05^Jåx;òÿg"¦h<`o +í4Íðõ$^Þõj §¸§$GlLìRG)x±k)õTß(«/Ül¦£R¯´âÊæD§Êx§D*¹*>Áì"ÅÄvRboÐbôMmó0fcY&ön·çXOÇ6O%4Äêë¤ é +endstream +endobj +307 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +309 0 obj +<< +/Length 2314 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8N¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©æSqA\4S±ä`3§C©ÈÜsÐè°R4 E¢UÜ.¬ÇªPì´`0¤ÌÁBq¼Üe +Jª1ÀT©Õ©VSÆÃ¸mOÆ×ê{âÍhíá r7ÎbÛØ4NFSqËx½goÚtCëa¬°Üojìlü)Ìf³Ìý(1Äô²1nG¯´Õdí¥n-ÂÜ¢h¾& "p#*bâ'¢ KÊ¥©ª{äÃ!ª«°dÁ«¯<a£ú6Ë:¬·az"9ãä4 ÒËBËÚé½Ì,6°îàbOÚ¾±¶I{E@á@Ý*'Ãà8 HÆ0ÇL°@9¹ æ#pAÀðL)B( ®xæ0ã(@: á:Fã(í=Dõ.²á � ã4÷CE4L !Â"%¡V Ê Å=cÊ1#0Ò2Õ09#éGÓã Ê<Á¦'Ãw^×ãA`Øv|ÏWÑTegR5ÐÃ^WÎTÎ38m'=QÃ=>7Sã=!I-í©v¹# Ò:T P¨&QMÔ Ð4Ìó« <OX @88s \RpØ<(6£duKÅçMS !uDÈIÀ¡m3«A»q´q0Êîø¦!.¤-dñÆR`P;æõàÚõ:ZKÜïAr¨ +~¤)ÖU¥lçÜvÕ¹fÙãu<]{M[¶uùNÓø ?´ã¸ÐàÏT]`Zsí¬iu%M¼ÓýA(IZ°Â6³Õ³wäÚ:¿Ã>»°iév¢*2Z«ñþ´ÀIr¤ûPóayÆuÂYÞt5jc¯¸Úêåß¼EF#o{ÅTï68.&ó_´õÐ7]^M¶¹M¥?.|~ 7]ýkq¹8Ã1£eg¢wþÕãQüÝâ»Ö{mÝï.Ò¹W<ÊÁú¿tvSVîA²Ò +q¯=2Î a1ÎÔÇVÕÜë®0q¯»SÌeC ©È á~Å> 46iñ¨)àÐcÂ5,¨¸µ#à\¡v:\¾$ rÒkQ'2EbMK#OH4Þ§òê£ (rÎb9 �a /k?×(¥äSð䬶êÛ[zclªÕ[«Ä +A¨(2*õëÜûJ"l¹R½Vg]KTwN´¾Ä@ì]¤g%Ç&îZ±s9QöKhÐê5 C +r+E Ы¥Fo ñÀ8G2gr^còÖÆ°EãÌkÈñ:i`ybAH$"P±-AK>%Dúd<Nüh¦Û¥n Ð +)ºzOeë1ÊÉHySãáMR ôY£4jÑÌqxêtÙôŤ¢rZ¼<`â7ªÔ¤Ò\KÉ¿FÜÓJk@ÓÈ"Ðа³OdîPúO Réé¹¶µÛÙ$ì©W¶Þ{«dð14T²õoQÆKØ×E\¾'z·vDÀT¥UY^L°¥¨ÿ¯MÕo®W0n{ë©l¯Þ¨ÍítVA}²ÿdãô=±Ïý£@z¾³AKWÁºy|ì07°éebìe½»%]û$Ù2È<Gã{¥<JÌ äÏë?£í4iQo óMBw9dÕ¥¥$P²]VãÌÙ-gZjRBù "-#Û° öæ[£W [Þ:¨òÎd1 g=ô\Ek®¹ì©ê§õöSO:>YsàÌ-Pu¦B§;&p¦r4«¹0PÑbÃpç`d<O·éfAS(\A¡b ³M®Ebâ\ã¼[GØu O:)I³<Vòxi´r}e5^ö¬lZ ÂÕåh[4mñíuqýN`¢ãæµXUò}ön9ÙLÁhÕÊð-JÛ¦«5|á妡j ¶/6öµ-½`îÑKD± 2ÔbhÑ¢Îwæ±mFSdà3qçÌW;"EürA$q¶3äÈ5LZAA8!& päù=óìù¡éüYöòi MµÀ8) *3ÀP(~0¢8Êeðb ZæÊQL"Da5õ@hT j˵95(ÖD'eνL52%ÔÓ@%NÚ]Kí&dеÕE ÓÖ£Ú½mM©ùMõ7)-ªÆ\RU®·ÚÃN*åe¶¡¼¯[=Mq¦ÚE~×r^xý|Z5ùJh%³Vð \½q-Hb Rì²>?Y%áne]É÷:råñgÏ6wlêæÒó{ORmS +µ¹õ±&(ŧ+cÑ2<[°ë-#wÜ<v +.+;¬öå4@Ñ'WD´èGu]VÚ´aüÿAAEàÌ-¢J·NA&jÓj¯k;GÉ +¾ßÓ"9B¾x{ª øæ`=¡â;[l@ùÓ"ýOiõùÖkj¢{g6rjO±f|´ÝóiâÉæ Ï$¬[ô~ßcÍXEc¤ +endstream +endobj +310 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +312 0 obj +<< +/Length 2771 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPI!PÈ ´b0B £qpÄi2*&³@P Êx0NÃ(°@i3(æe²Îy¸A_:MÆC)@f9Ͷ«eüÞu9ZÄ3Aäa¹NB}¦ëm6MÖÛ^êg4a-¦SNÖ)*¥tê¨âZ®ã1ÙÎOÑ]ïyKM®Û<Ý| 9N±ØÂl:ÛNøseøÅm§éÛ²ÇäNG<¥Û}¨Õ¨ Ìiñð¸ÓîÞv½yw<¡pR= +@¡JZ*apd¨a8$Ê\¸ f6À((¥!p:©(¢ØpÞá«xÈlZá:ësµ á ðR¦ª¸n©AÈì"Ø*¢ëbì"¢ø$Â("Â8¨$,ï"Þ78C¤r0ÌÐβ¯î2 .ƺØã0°ê !1 +Ápnq4$I0ªföðÓGðô@¦A\(òQ$%áö6å2RêÎ3Ã{áhf¨)#X дÝ*lªÞÜʨ"Ê ,hÊ9cÎÎ'¨P7Ú)û8#+ð)â|ű¯j³¯jûÉÛ©ê~3/Âí5 èÚë²c¼Ú43Vå¼£¨Ø¹ÍIåZ¯M R¢¨ô$Öµð*Bó|Á9GÏJ@È$ \DÈ6 �© m>Á¶B*$Õ¾AY+ÈÁXra@¤å9£@T|"Q64Bca=+ipi¡i¸-®æs ¶/#² Ã:Ö³_#ò¼k3*`A¹:©Ûº à2kE²¿n!@ÄÚCÏð.>Îð,õHSõAS¤-DQKíÏ4 %JRÑ:Bòõ¸h¨UÞ®ÓÔ]AzÉÖàÝÅ©¡ûVáa]ÑaX&ez²s`Êr¬¯,Ë{eYrÚà{¹KLVå`ÓG±s( ëYàäæ¹îE±¯[0Ñ´.ÛVÙ·7«ghõ=î¬î/#r_Skába¼6 ìO¨ x 㥤¸ójÏTOU= æBj ¹ñ@F*Ãcì±äÈ$$Ô\ÓÙjIfGT6B !YØf`@ЯÜÖ[÷).u¡EbsHiL´¦WTÌ4=«#P¨ñB+*AÜBR +Ô8#Ì2RJÁ¢¶fDp°(ÔABPpë * 0xL Þ±ÖÇ.ÀÕ9(ÞË¡upÜtÜ"ËaÈ4æ]bSc )£Æf"$D!¨;Ò¸]³UWpPìå²Ü40Ã'˲_À¸ûäLY+.Äräܧ¼x¾jÒ{kü4Á§ÀÄn ᬽ's÷=dÕý½ à`bBÌ/§6@Ú¦ÛÝ3i® h¨V¦ÂÉXrªjI2²©<OÞ"I¡'$ñtvl!'FDÍaWiô-Ò ÜÛB )sÚb.FÈ9£BÚ[Ó +9Gf¸ØR¤(AÞ!Jiø +¥2êïëY3¼;ÕL_Wîn8òD¥\£¤¨f(Ø(Ô$4!t`ÛÛ}=ë,ý¯%é5ÏbóD6@SðbeéϨ©ðh Ún¥EÜ»µé$ÓUbU¦ßWr©ù!Ö»Y]H¾2»ÊÚ§Ó|oÕÐã¯æ¨[yà68ø/0+Ñn¯4*`Ò 6|3ë5éÔål +óêzFRªrÎý^üý¶ð0CHoÇ¡L/ Â@T2Nñ ð E +E¸:É@PJBH=#ÇRðE zì à9ý(¾º`5JõX&¿9}_g¶SÔ׸¦.éò{Ó^j%òqàÜ!±°bÌDFÄSì±¢ÓDýé¹ñZ)lAº²vº»¶úò[««:ÓÙ±ÕJdÕ Ó²un³ ;2Ám&Ï(V`{manV)&ê2ìI/Y×ZX]yw ¾¶# +¡ÏØßµDl[÷ì~>ÍJâÿ«ÌS®ÙfÀxy¹]ôO&!5#9çÃ9Òf7=0âjmø¢oݸ'nçÙ¼8bCÁn ©üãÔ)+ºö/uRãü¬m6j͸ÂÌkÇ2$Ëy°J_?Úu{NVòß\Ápî!7:¡7.fdÛyõÇÎjÆ¡<$DÒDÆâF«%dXeô6GFjS»9gg-ó³ê8£ªL¥hÑFTÀ@ªÈÜ0j2A§àÀÚÛç§K·)ÌÀÕ(n´ïQ=Ó¨øè(K½((öS"ýzí@4æe ä¶\äÀ¥É.¹¹åm/¦ Áö6I/&VËq)×[·w©·¤*#Pñ)!¤þr^Càç,B)ÑÉ©ã(s/ +_²d nBßU=¢£7Õ*M¥cÑ¢äzô2[öFG`qR¡CÀ{ÂVÆCuI2É(ßRF¨G9U{%rv`we7i<8¦Sø° 5.Ì̾&aipò~[Ì%lÐðé<PÄLrK31ãÃ_0'©jåìb?oèöâ\j«K7:[[¸]qµð~EPu^&+LÑOJ +uê$Ê(É4£Zàê|£æ¤PrË"¤ëBÌ©k<E$V °EäbFiî¦än{.HݪºRD"¨ ¨ÊÊbÉDqð4©|ïÚ + £4鿦©8l¬T#4LÃrû@LÔ/ðH+:¨kúA¼Ñ``ÌW |ûbÚù@ ùÆùÏ ãò#ÃêL.xúr~å ©êÁ%ÒúËj°êþ°ªÏÆ.ÏÊæÌZN°î0ò±«ì~AP¾Í¢s Àë¨`ɲZeª9 �/vW®J/2 +âÔÀnFÅÌ:-TEJÆ äÆOÀoNÊ~îMªPq +O¾ý˦ ÂÞ1)æãrû±ûñÐÔ#& ÞøJ4ÿhDó°óê$ `AéL¾ì/NHtàGÍO\nä NöfRGp«Nª+ÚI®N.ÄÈÒÊ +endstream +endobj +313 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +315 0 obj +<< +/Length 2357 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @8Î¥BT C ØÀi¨S%ÔñÚ9OªÑr¤0©ÓÊ0Tà.Øs±ä`2ÎFóÌZR2AAäe7̧1M#Hé0ÐTZ%PÇ-ÂêÌz¥®ËFÊ("Kär)P¦E&þM¨ Tb5"Èâq=Èg£âá´w3_©ç¬¢8Ôcl[´"îù¥$IÄBaD¥Óiû¸O}VSÆÃas^°S¬VK5¢7ÏÛmüÌä4 Ò7Îû1Mº1è¬É,¨lëBFã¾!²>*b9b Ð2µn£°í;(@6°cÂ3ÄH溣 @1)èó§Ãhê6@C`Ò7DÈÒ::.cdg ËT0ÑÔd£rxA/I(a)xn--tba.xn--d2-tfa $ÐL3;ò¸ xÆ02Tü Áp¤ [Ãi¤@EhÞ93Õ&Krì¾1Q£¤G&Éò\ضlCl¥9¨hÏúb*P.C7B¹bÂ91`è¿'jÐn¾ëÿ �«TÃ0ºÈõu`6Ó¤PB¡dªBie\Û0LS¬î6Ec-F\ÜIIGT¥HR Ó#I&IÃt 7Ûe`!VÚ¶¸A>Ä/d%Ë{ uch±Û >Uáâpß&]p@&˲`ÅeýNà¢5ØRáË4¬T<EMRÍ¿8äòä½bxd!XÕd¹OfãD Ä9äÉØn¾êÉóü25u.Èã<Ï_±Æ¥Ì®¯áâdí<#eÄ.àSANÎ¥Ì}µÐj§l&©º|6d4]á +¢î0ÙÌc(éO@Pb«+,î×Ôö^w3ßý8á[5Mð]EÇýh[¤A|ù?P^V$ô<ñqk²þ§&RÌ1}28A3 ÒØÖcÛ#ù1Ö¨ÿÃ>Wa²Ã;¿ð9µTÔô82ÎôÞ¿õîøô} xnÜ0m*5zKa=zp%ö@fD©ºfkm C(v@it3ÔØºÚ;Rª]x¤TC"Kyëír2pÌ¢Ñ"d@O ƱB2qÃÿmnÌͬ£4û\2HéÜ<ÏÔ¸o'`áD°P-hTª&`Süm¨°`Ô4GMÑ9Þ×i;`Æ·2_ÑË"DIm;äw£dn.ä¼[ÓÆ°ÒC²vÜÂ,.¨½' +ÒGO5_ 3xÍPìG[X(mË#GèÝoJ9Êø® ß4Z, ¤µPÌ)¦"Èù\ a®è¦" ÕN 0ÇVá2õ^òA~$ÔÚ«Ñ©e1 ê1~S®)ÒÝ wñeô<6 �4®H"\ËáÎ9)uó[OÍ1ðȬ¸n3èÌÎìJpt �éEÓ¥NaJx í Þ J4¿0à$xQ´)d·5äeÎ6 §VÄà +3kotw»çÌWx +¸Z_ >Ú(Lä£Ë³py!R)Ç« ÑóC}él-ÀÌC(Ì#do,ÈC"d̪£B¶Å*¤4Çcå|6µøðy |0J|m#ê>§8+$~Ët.Åà½ø_7t6m³ÙÓ í#`æÔ0Ãaõ¡RÓU*¥a¢`?¨¶²åpnIÚ[UzCdµ¡öÊ¥>n ¼ºG óß˯`íÕ'@éMèhFÄC`Q¶ ªX{kmË Ê·g´ü¢à®Cþ@ \³kA³×AÝ%®rPÃ-ìåÃ:ºs¥¡ÔBÕ³NS%=°7ÂÌS¾$ÍQ®ÁÀßVÒÂö +áL¯Ê*òd¡FiäÑÍU¡²RH°ðbÚ§s5#6NóVF 1ÆûbÀ¨%%& +`$¬ -VÊá]b5{¯äX«Í3U³U{u·1j[ÖéØ{«H¯"Uêc5)Õ°ÊâçT +AU(°@L4ö«D°61ØKÑ·egùTÅ&·tùõeÒæ Y%]DQ1FZ Ù{fMþZwÔ +#3sNrTà '¸ÐÂFÔ×RS0cg¨ÂÕ_{[`íyɶ'¤[Ä| +pÇ4öÛãódì«AºÌÉm(c.r"÷D#Íö¶Åµ9Õa o0 E¼û|øZŝܿ]K¹y/eô¿¶)A¦KC"áo]£E!qÕäÞØ÷oHJ¢±7ÿ¦Û³:Mi¥ +,¦Â¸O +A!¥ìàXP´ü0|°Öº¶ÿèUylÖ'³?ñ¼ZBV±Äàú5þ(#K6ÂÆè*ÍÚ;WlíÔÍÕ秺$ßZD1½ÒÐWcÕЦ§9µÚ£\G[¶GJSÅiy ¡ÊNR°ô¥útà¤á /Û÷; G/óÜýcûHè �*ï%hÙó6Ïõé¯ñFÂ\'XèþÙÖ~^k}¥®6¼b?Wô0/ÔúNB3íd-je)r4¢ +endstream +endobj +316 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +318 0 obj +<< +/Length 2282 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP D²éPI!PÈ ´b8SáBѽDi2*)£ xÂ4W1¼.n +Nópàr7̧3¤Üg Ûs9Læ[É£e2N°ép6{ÙÑ0ÆüYy>2ççæÓ©°èi6]¹#"øp6O7ÙàÄd(½a6»|i¸èeßm)ÛsÖî Ýî0Ü Ü)Å î)¢Ñì41DqKXkµùQ0&=ùÈ\ $°¸OG«Øe9/v"ùXè:#c4=0ð¾½,#9¶ " Ô¤ÈòAº¤E%ñj© lª¡¤B*$Ï@¦iÀP"Á¨fM¨r± ËCpæì(Рò%IÈK¢°p%èô`¬Cã ã +ú9¸Xè7À+k\Å·¬xÞÿ·!["-£´ +:°Û67£Óð7´1 I$IDHEPm¶É*]EësGApg ¸¸.l36¡£¦ÖËìÉHMJ(*!ôwÁ¢ª¡Üd¯F PP"¢ø")b¸) P¬.Ã5¤²S¡Â<!¨\EñÄ<DoÌØâhR ø§f +B(" âp,ÉÕFÊQ(AÇ7"CXW}3SØcP6â"æ1CHàÓMc ¡ÕÆ(×R jGrµ,«*K¢£d_Ø`ÂÊüÀLs< �¹²l3rüή+ð¿6KðÞÄÃÌÚMìcÈP¶Ú D[êàj$p\+mx§"¿½©àdõV<9äHçÖä=oCä«Ë[²ºg#½=CmµÖj¨dÄJÌ¹Ë Ã(îc¦â{ä2±L3ò* +B¨Ö¿"0&_ûL1Åå§=ÐqòºÉ ÀÃÍPÖäoøjQäfòèÎÐÈ÷®+:Âg}nmæqaxS[uwD±§+yc1å@éHSÅ^^e$]q2Ħêr¹åø[ + è6'ÃôS/55²Þ\LLÎ :5\Ã1¥M¡("áàÉ¿h ÅÈù.!:Ã&æßDC¨}¾ÈÃÔ # Ù.Õ.*^y FÕ*§U*¬à*æM +µJ©¢|W33nï-íàÊùÛ\BR¯±r#¸Ò P"ìU· æ Aªö(+å}¯Õþí(C +}õ¢8û#pK Êêce9±Ö>ÈYid®$¤Ä(Äȼe@Â&%¨ýÊã+Ȳz +A¢4 ÀðÏ$;G Û3·úEà¡1 ºa0&¾Ö¾[ + <_ øÒsS!}ÇÒ¤ñÔ»Ê~ç³§8à·^nnq¹ð°ãóÎoá¿8'Ü4¢q �x/UзbÌéãÞ|#Rl Êj,·Ê¢<xtªó)ѤNv=j6W_²] +¼»Òò ȨTY²¸h;5ro.aHº¦ôÐâXàÜ =wF±A©7ĺ£Â!x®QÉ3£I×:?sI1¢ûá9¥²<ÈYØiAª&)³ã _K`l'¼ä³£ts[ vËÌZ\¸e82b̹0ÎLÇ{º#ÄAZåÚp©3¦(?s$å4çºZËm0Ù¦ºø`Ìul©ÄÈ3Phd=NÅ&Ø|¦Â`hÉÛÀÃoùÚ +ª|Ô.ëÅ´2$*û,-5]·Ý=âQ¥ff®X%f½ÏéÀ0µ©Ó-Ó±ºvQÄÛ½Yiýï¤3d +ÒfäÞ¼N'T]ç5~ÀÌ®VB§=ýX¥=Û4ëo©M6åÕy:ÌÄ,½Í[¶}!±è.æ:͹»7î& x"&Ê\ê&ðlÐèpP²©?6!ÈÁãà|Ì_¼gËdl52V©ô¾å¼» +Ð:@Á7µC6bÐ@v¥ì9 `ÄzCÉ9a<Bzüc Hp»:Êadèç«EC÷£F»0¨ï%x¥ìÁ çNHÐÅ7"ÐF3dÂr^kÐ÷FØ ÄØ©uPN·OMNµI¥EDxä§±65?X£àSûH)¤h¿PÖü§]g¥tùÓ±¶¶Õ=ØvÇQ$6`\Ùêqu)ù8¨b²¤j2ªª¬Ú.{\#VåB¹ä%Y*°ä½´YvØÉ_Ù3]Øqʬ(èêºÐÓÊ÷f¢ü§´ëé~[[ä$fÆÛ"$®ÑP~ñKªàÜ,¡tSÊfUc':5Ãp»û,«Äµ9vóZ1ÎG+åÜ^gÛËé5f¼ÙȸgWaÝa±èª&ÄNó<[rµ¯b¹lå?÷=n'uºi·²¨RC¡µ¿¸oD:;TT Pä;÷uXÔ}½Ó^©%ú%íºT©¥´½£¦¸Z çý7CåÏ'Ou@òµ~!yýy5K©oÓcmͪ¶ð¤¥nϾ5í b¬§%ÚÒ«\=Ü«mfB +endstream +endobj +319 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +322 0 obj +<< +/Length 2649 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9Î¥BT # C Ñà]M Fôñ¤Ä¨DLÁCpÌb3 ÍS¡ ÒsL§3ÎeYļÇk9L¤j(<ß§ÆÓ©°èi6M×Ѥè 1ÍÇK©²Ñ6E ØÄd(²Ü3¹ó!¤Ìf2¦ë¾r1Ns.¯]I¥ò¨R"Ê|ùÜdÐèµ±28¤Ö+rá©Z®G4çw½ßðJâ ÆÐt4q⡪1F£x¤/¤-®À¸d! ªnãCl·¢ì¼1C;8Ü= pµ-pÊAìü# kȲl¨@ÕÂ;rò6Ë[ ÂjÞð@b1°P9¹*"ø)ïøº²Zý?;à°ÀmÓxß86$Åð2Ò¼BÏ0A'<Æ(Cp߯Q0î.Ãê9lÛC4CHÎÅ#cÃxä6½L8Ý4aCT10Î64MxP¹P0zåRhîlKVÇ-PÃ4J«@Ê ã`\ö=Îc®¥¿/Úe#Îä²®Q²1¸ÌÓ?®Üó=ϰlÉBPÔ@@9Ìlt´2±Ð0åcÏegéØqAZÉðÙLã§Ñ²µ_Ϥý@QT?ØÔ +ÏG¥Nr¡#:rE^æ@KQmVè@ã/pÝ?=+@æ1²³°ÅLpÄ62ºÙ-R£Hà8/KÜ9(½ñhïbëÕ¾aí,>ÉT¶ +¾OC#S¶ñ½å ²OÕËsØw]¸.Q 껯cóJÃÒ=.¸YSQ½ª0©(h £êìf#lÁ¶Ä*$·¨iU+IÀ»@dΨP)6S^7x ¢2 ëȲ$úñIú¸¤u¦#»W:ùàɺÅJkCÞì;ÒlÛ@q±¡Ê$8i·î¡FK»ãªkªØð3:CSXµð:Ñ\j&¢Br Èïâ< ñCçÆáC&µÐ©ZøfrV?£¬oïÕ¯¤~zHÊñþzÀÔ®¬ÜOÈ4~è Ûs: Þ$õ' Cz#etÐi³½ jÁ¡OîÉÚ@ÆðTÁº3áµ°,aÌÉpÏ-ö¼çô\sÔ$`Ô¦½D¹d'dô4D4: +A>|ÐX"Ä® Qy¦U¡Ë<;¬Ó¿Ãp CÆAUFÎ+ìkÅpÀ¤õ ôU©%}2KSDì`nñ!cN!ÂèdÚêñ#`Ðú?5[ÞøwÈ6¿·"@S@åù(æ½ÁBTXæÉ&6 ]XrVW¨Ç)¨TA{1AÑ1`ÒC»'R4¹,Öá£^Oe¼¸¹uø}-e¸wÛgo})H\ëIË9k-åÌ¿02¹9{ÉûJ ÍzMIÂO'¥o ¼;Ö¬³Ã»1cF\1ب\oiÒN50@JlCç¥E À(qfá¢&e@û()è³ÃAQk¡Ô& %CPÚÛcê;Ñg<RÊ7#Q¼N¹ªù' ±Å2Ð)a¥Ñ¹JtÇFyÇXU&"ªvjHn-JØÂÊVST)iX°ÚK2¸JFsé+Ü&F"qQH¡U*Õ`c*TòkxÓj+VjªZ Pm áٵĢ¥\¤]Å¡@¶Ò¹êNèm@²ö ZlNõBT·Ó¡úi?E[2U;¨40ÐyØ-µ$rÖ/$#¹';´ÚÒÒÐØgSQè¹×¹ +A ©Üêeüjtd¹±?è8ê4: º½¸Ý!1ó?Îé¿8 �ähï2=.ôÞ¨3¢¯ñ}¯Âÿ5@1à[SuVÈÎW)yx®cbTW`Þ7Ky@ ®¯baü$.Ú»Pû½¡AÍàWS!©5lJO2óÀ � � Ù¼MÔT* O +!¿83qäįjsBa[%_Nß§md ǸuæäoÜy#r : ä ì÷Vy·7ç âz2.ª)PvPChWëü´SbL\beQªotdlÊ8¿2q<#É©ú@h_Rä9 +¼ª¹Y=;tÄòVf_·Û=mlÓ ¼7PÚlV¢/Õ\7ÁµB4ã}¥HÿIºyO¶yúï`O-¶'¼Ó@7Ë3S ã +DÍ-©oåºZøa1K B-È.Ó-zßvS©Ó{7GM¾»J·vþÿ«{nTRZ*uXÈ3]©øuÒ R[X3[-ì~VS¨oAÁÔ7"¤´KÍhÇA¸½¡Q\6ÑËMÍ[£zóàÇ?¤Åô\¡I< òÒ1svM/Aè})¡KJçoú¿¬ÿSLj¥YµÅ~·NÊyt]³´ÄïÚ{ÚL>óöÿgf?¹j¡îþdÚ¿KS®róä}-õq$ç÷?ñÄÓùâÕ=[»¿ÏB¹Z¥Il{ÈÄCÐíðöNÅCº§%ÜØ(¸E$1ûûîhª¬3#G¸gê}4Ï÷Ø÷Õr¸$¸*®;ÀKóìu¦2úOL =ðÆÄn§{¿ÞS»zî|O,ËMòüG¼? f*Î:¹ü[À@sf:i4=jKfÞ¥I²_ã÷¬4 æ²ÏÒ¦ TléhÂïH3ËØõ +HKëÀPíê �ÆCcLïösïÑb*o.ÿG0 Îd 0jc§ ; ã +i%<«&LËLòt¬FlLP+ �æÅà`¾§Gñþ¿¢~!"ª½Þ 0¨PíùÊâ.fhÐÁ¬5 Þ3`B ä¢ò.)Zå(ÖçAð>«Î{C<mÚrÍ,ÊÅôwldwçxgÇgþ¯¿Ç¤Ò'N>, +ÛP ë ÊS + é +pªc| +endstream +endobj +323 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +325 0 obj +<< +/Length 2415 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP §eÒ¡* B¡A'¦£1pâ<7B +`PÂ^4ÎApÔs<#A_)ÏÒ¡\R"DR ,R8# ¤) + ä1M +ÂWâ<ÂÁf²Éót·.ËX +@TæÉÚ-x!æc9NCI¼Ý¢ÑÈÒJT4døRÀ6Õ*ä£H(*¢uÀu»ÞowÒK 6ëf?LÂl6Îç1Ó¤ 0ÃIôÛ{Mâæ0nÜé(Ì0£`èãxä2ú0a �:Ãð7ÁH¨57JJß+Á¨h¡\&B Ð +SHä0¼# Ê9'Èn¹µ{bÙ¶»Ý0LFÅ(àjEÑ<çñ¬n6ÃÑ +ÝÉJX³¨Ë'(A@7Ác¨æ2p@&ÍPXÄéÍpXèýQØßÃòBÞ lÀLRj:ÏEó(Ù+GËtÞIrüÂÌtJ¼F+Ê( ãHÝOÓàMQØ[ÔôØ>Ï@Å xÌö½ã ò8:b($»Âô¾ në>KTV¨QU ÒÔÓ 4 /e«QÐpÛZÖãê1c`Â9tðÎSÐe¨1çÁð' +ß �Ró*°)î#$Ì© l¦¢ +Ó¯tÓL²¡áTl0Ê:£Ü9·z HKÎá°2¤Ìa 3l2àjDºß`ì¡2Ù{2©áÀ\9 °Ë]ÑùÚçÊÉ£lªR'LJipm¡i¼Êêîºía;v+¼! ¢Þ# ¢ $Â(§Àï6µbXÜr#`ðfª»+Q"o6®¥ôËG«èÈñ¨ ÂrrM �6#A´©VO2ðpÈ!^b ì1@¸ò|ª§2"¦ª£Á¨bæ]&9Jxx¸l-S +ê¢p'ì2~ ªAdª¤ºV±,\jQI«,f¸Ø$6ûY;b7í¶sÚHê`io䮩¢Pݽ-ï¥õÄy1è=G±ä}²´Nê7C÷ X]7SÀP*¢¡ÛEìB!H»äT3bÆ#>Ñè6Gð !@d3¶R$MC$ø÷²ÒJ±5,'Ô¶çÈ"LD¡D³dÒÓjoN(E:1õDW´AKqi/,¥¥08QÕEÆG=£R)áÆåIrpiÈé �%°ÂHÈÙ#\1WÂÓó,q2DÉ<gL¨á@æ\ F"æ}Ü)wLi +ð1& Ô±R Éù1!µCèÊ °4 ¹¥ü?s¥4Ù\ÈÏ<'À7`[Øv<áÔéo Cz¼FêÐ;®5úCøh^ �µÍæC8j'ç%ÑËçöé&¢¡7LhÌhSÛb®ü</¤&ÌÕrÃPØtæyÓÊÍ£Ï=CÉì Ò½QÎPÝ9ÓÐ A²vI)¤Ûñad=ú6gZKÞrþæ£*ÚUm]¬¢¶Zô°72ÉÛËB+-H3ÏÜ«J5¤uB°²3I"TdãÖ9DyËévÛè|¨!@& ¾B DuÁIÄvPYýCh`̰b÷e%|Hª Ó¯µþÀØ;$ >2À¿aòæG¼úI4"쥡¾ =Yb*M Dµb-GÉ$8,H4|D'%,é[ei^C»yèär¥2JJ/Øí +裵OêF?(U ¢ø(·¶¥Ë̤èk¥¤&N©øIÏ|60ÕQ';fXL �oªr¸2{ Tp0[¥®ÀÁT£XLR.Ñkv'0ãM³ +á)ñ^³ÄØâ@Ð +è ˸[Ðè§ùÒ 4 ÀÍWÛt±Õ£xÒo72"«P¯5öº¶TÊÉ»g,Coîí-$¼¬:0[s^?ó2ÏSÙ±BÅA 7T_qxH!N×àâòÏ]ÙrS¡< 7ê"~à9y=ûâù^E§Bd9Å2få;n|µ¯t4×[ëÀáUnY×6Òî±×=S@9*tnò4B_D#5WnÆH*Z7Ô2Ä*©04 (ÜZKJé|f{òT(>éí +ðpaTQd¹ôfµT!µ0®[ÂO ¡@ µ[ã<¡Î='Üd¤ãòÄ&A4z)%3M¨ªUYf:Ö&ýZd×ùHÕæÍh`y`±êÓR)ÿÌöBÀkÍu4fàgBj`oì§©TÝ' PâO<w§+^©äpv:åi`smhàãAȹ{°ÉM)PcCe$Ö¶ònµa) §Å`nånÙw±îëZÍÖ?AóQÅÌØ}®bCÙ9P[]Ñ¡vÉðA¥qp4©º£s²ÅBW·%ù.8½±dL©a¯z¯Ýð)i³ùãÙ« ¤¹o2e3 ǶÅüÿÜ4ÃzѯØEOØ"Óײ<¢òίG|Rå,Õ{6BpZÌùrý +iç¶F%ò¶ j@PjÞjưøÊ¬j°_8h®peÉ!êmæ8Íâµ` :ç +ÒǵgZï¨Þ§áà¾â.&â âà`c® +endstream +endobj +326 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +328 0 obj +<< +/Length 2925 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9Î¥BT C N'Lãr1¸ÊTá¥&f +Ãaìb8EÂ|E&JRP¤I'Å4:((c ";ýr¢6`òñt±-Ààû d.Ù# e9ÎFÐÒo7^èb4 E¢X=þ·U #<L 0¯ACAAl·\.WKµà 6èf?Èe6N@s:hÍÆqÐßåâ �. ZÊD/`¡¢£é¨"&á@ 0C¢íIÚ¬ó@Ñ43PÕ/¨2þ¿ÉPZª;·ìr¾ð\6¿/Ú +ÖÄ +P±¡rÁÅ +Ò\à&N7:ïÞ3=3Àñ<3Üë;ÐÊ2?ÓYµè [QÐA Á pÇAð`ÎH PP6EÐtbÖ5ÑoÇi<ÊÌîÔ' ã @:r\ ´ü18Á*ÆRØ\£RüI1¡s([<H ))²À 2@èô½okÞø½ �mX÷³ðî0a �c @³3£¸ÓQØq:¶ +bø kªî¼ae¦ +vØkâ,a;7áÓ<7H]< +âk¸®bJæ&M7OÏ4Þ·8ÁL:KSÒOuÔn5WVNûÎ0ÃÈ@2Xõp9ãÓ`Jada7«¶6¾Xº6c~'(Ø.íòôºnÊ4º4cù¶+Á©ì±Ã8k}355O¬K#ÍP);C¨ä7päá!Èfë͵ÄÁ«zÇÌÔÌVâ8Ãpê6Ñlï¼#KÇ\»#4ý»I/SÙC¾s_µZ2ZÃ~䢥Á' )ÚÃLUÃUc_JÚ®/ÙöxôÚzÚN¬Ï£$Ê3̰\êèÍc[ªË4+W£pÆÐkQã6ªr°³{@¨ØjÇvÿfá9À§Æk]·{y¢oD#?±²¡ç* +ê¡ê¿³él¨mÜDkH`ZËhD !Iä³¥ÆaKA0@ÔÎÆì^ÛL,fðÌ¢36gLù¡4fÓ¼ò#Í6@Û4ÄGéèá ¥_3Ì¥4Çò°öü©as®*ÄDÈCAÉH9+F°ê¾EÞ¨'ÖûOø.@( G*SjUÈH!D-Ìy(x %´¤ +&í¥$[VÙ.%åÉÚX(Á¤ì²æê© fÀ(¹·äõÁIp²¥Ë¤3©,õ¡03e J@Bô¤Åùp#&¤ãbòzQK"L¹²^Jùz¥,¿FðÙGf·rXÌfì@1!>VÍ9a(æ±bmÊ©s1eäÕ2ÒTIÍ6¦êG²uK9£0§yÀÆyÙë8¤Ù²nxLYù.gø + LÞ;B&ÀEÁÕ,s8³Æ'ìoÓÑ8 +Á6Pʶãj(b!¸?%gdbÓjrOBAµô²x=½1ç\÷tÒ}Szfe Da.Í$¿:gësÀ®Ô9Ñ5*L³¦3´®¶hSA§í8ÕaQ¸çÝY¡5.ÕjÁ'è<ôª$ È4åC}¢S4¨ÎVey]H$ÎÖÝ'².Fª} xw4glüRrJdÀ30¢³Ôz¡/¥¡ÕÖÊK«-7ìÅ:³~TC2è£ 3E Yúµ@*³µ>ÐN Hì7bV°hËÒ·ªÌVJënma·¶b¶gl+µ¢$nº0pFÊh'ö¿ÁU8ë$T8Ö_¬#PÍ5rRÇÕ:TTA¸8¸RºÓ[jcfýñzTÚ×Sú¸Bú·wÒËÛjjp ò7²[ëo ³ºÈß]Zgõ¾¸Záá@in Âõß\ÔiC[κUÌ´.dÍۯɲËxl*¹ ¦¼[Ô_iF· ÒàY×}Ìk?Èòá«þaÊv¶´æÔ]\/îÄÁ e%}¤½¸¤<IÛq06OyÆæjÑ0ý±ÍÜ»m®{]"ø©°Ý<ÒmKh¯-ª¾c3`Q68¼päïÀY f¼XüdÂTJîmȹN©S-0TÈîL¾¹R`à 3-¥¯·ùWêy¡QmnMÎ8Wi½U´Â uÍ+-êmuVx8¦×+©e³am +b>©û¸p°´ã&ÉÃ{vZ#C¸{ØnzRöJ{ÞH»¬ÖÔÃOo +-gµiÔ¥F¢ï-SªüÞ$#,olwî»àÚvv"6жßZüpû*ó ¶ÁüTÞì²±F{Ù¤#?]P`b,ÝÚ\mlõ6à ÒXæ,<v¢õÝÖE¨ñÜ¥÷¯=â#U½öúÔuoôyÄ8/K¶¤ï;}®:q¹2}kÞ¯ùëïÝwaÍ}T{[KýN¾A[öeä°q&4\æbUW½¬¥Ñ +Ä4ó¬"ÀmXÙ¾î¦dÃecZI&$Â^I`Qã dï +×?~Mq¦,Þ7GN»¡ZZv)Ú¸\¿`û}ñÔµ^ûöÝk«Z~ðÊQè½Nx|qð5ÁÅô»¶tjÅÌ_éïþ¯§¥·Óère|"«öf/Õ¿ßìt¯ªþ?í¨_Xüô¿Gc!ýæpOäûÍfù¯þçî>±ëÙnDîBîduÚdºîüÆ@pðN^'¥Bo®f; +k&6dzÐf &SÂpcàÐo¯0óG, &:X #º'm¶B ZÛj>ðn¢bLJmÚ¦8@Ê òÉHDi6ìÆKãxhE$Òõi }lòNdºN¨ö$äV + Â_\£ºW@êðàZB Äòýo7Índ ^¯^¨< dX@ì£<&²B&`0$G¥0iDVWÀâ¨y +DdthìÇOÇTâÎT018A&7j#6jF¨p¦®k(? Rvöj"¯Ï +/ñ#;*:8ÀR[ +àÜUBvàQѸ ÀôUÃÎU&BmÆá ¦æXí W&ød(PgqÀ¦ + +gdÔWdüx Þ Ï#¢ §b@Ã) ĤÅd0ò<qè-§qëÉ^§.b%Ta&s'6c'<G@qHNQL~7ªbîç°2R'jgnw Pw`Þw§~§ +ÀPxyvİîæÅJòõ Øàoภ¸ YGHlÌËÑ4Gíª'à Ä/%¬{ {à¤|#/%ö¥ +endstream +endobj +329 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +331 0 obj +<< +/Length 2798 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ ÆIÓQ¸q¡I0(a/Lç ¸l4G B/ # i 2¡HN#h´pUÒÁÄa¬<k$ÌÒJä»a*MS-\1´ÛVC)ÌÆr4y»F¤¤¸h*-Ämá#mA«f+²Ð ¨h2-÷ýîû# ºSÏÉ9L'# æ :rÃIÌè 3ÎBHÂtîMÆqÜt9}ã ä2¨ä7;ãHé¿(ð" ÔØ©H[j¯¡¢H!r@ +#,)lÒr(;c¦:£xá£HÓ5 SX×0mèÂI\0¨ô;²(ïQ4 p¦A»&±ú¼±K´<<x@1£;äð<N˶îÁtl 6 ['Rv²ò¼ + $3I-s&ÉáÌ£98¸ 7¾QCÖ:KOhÜ:`[E ¯Þ2¿¯3PùÌx@òË2Û6 ã.2L²D× èTÞN)pbèZo*¸îÃ´î ¦þÔsZÔÎÈZìÀ0Ò;9#ùQKÐ A# ª5ªQ9ªøa:ÊýgA&Ó¸ïW¯ùSêû¿! ³òBN´«!Ä£nOÒbª(õ¿5\W#2±Áhp#6 ,qJ]ÁÄ)nÌUå>ï° ê1n ÍHKoÕÜð .y¿£~M£¼6vÿ;Ní0ikHfg.í¯ku´mkWGß»Ì9 ãn¾Þ>Ç.Z£sä3 Û~·ï[ T³W¥t³aEáyQ¤¿®¾§k;ìÕ¿ïÊóÔ úó;{;éO--,t¡@õûÏS¾u;0Ñê/?R1 ýGgÅ;ýHÞ;ÑHZ2H¾ÞÑÚC' ýà@Ó»QCûu¼#xêóâ¾$+âüÀ +|«Ä0m[Zð#[ì^5ûùXîä]Ï_bñu=¯ +ú)À ;zîÞ¢§ZèÔBª A¸JK³V»*ðEðpÌ!Fa[à÷O +AQ¼·Æ æÒÛ¹jaÌõ=gÌr]ûÁ=nuËÀ@Âh_a<& +&#¨u+y ïåuXÄÂ3OàѧRÂÆÓãaË=ÆxÓÓQ%U¶ZÔNaÂðfRÞ;yl¨ÇrÙ)MÄ7Úûà4>Á6U¢´Õ 'ýôÃôÙChp;kõÆ´y#M)ìpÑ|À§°¯Zª½ÐyòªPmGHe È(ÂbÒ¡y è E*mA, +0(Tª!ra?I.9'<V §|ÄÁ`"?rµz´àA5BC#M îöaýKLÖ0Ò¼Oùý=¡´÷¦H°Raæ&.ÃI + 62høáÇÜI#`Èж@.60StT +!ÐÞ0dWÁÉ «cÄéÁÞhóÐø98¦ ?èµzRzÎXE +AIO´ô®Úðf!¤6/ÓÕ6ÑKl=j1 )ã,Lø6³èÄúTçùSDh`i +e4Ñ6Ù(ÁmÅ¥"ìÐCITZ®QuGà #´Ò6<qNXA9ñv°rËøS§AQñ\1ͱ¦ �¤÷F§ �Æ0áf¥¤µS\m.à´Ñ ¦O©Æ° ¤Ou³.ªQ¨cAq¯@Í'Z+jý¨,¨ÏÖD^iÍKêFÁ>Ùº.njåx,(Z`Ü«1Í' 4Â|AIm9VBÉû)p¤NqA{T¼ÒßôÑsÖG.½^KT¦Y âëR%ÈUËBc-¥Ò(¢°lnº1»UÊ-$Â&Ñîa²å$V$(ªMBbËÕtKíÈU Mª«Mª W«nÃÄiÖoÌL1.T:E* G)$¥³Ö^Ó-N<¨lëTëUV ÕlNª/+bÆ®V¼r +ù`¥ÔÖ0nY2¬³í;ZÐ?s©.'{iÍÄAJH¹I|eÍÐ\ð´ºQÏÒ÷«å}¯Ô¿Q4-§Êé1«ÓËtH2ÑræÃy¤ÉË=lþ¸6+K5m)Ë-:Txõ24Û_æ¦ÙO¹òÓA¶6çe ÇÍ×;·`îö{¦ÇÆ÷ÞòÞl¶Å=£MrEÍÓ;Øå7C~`0 ËÉ=æí!ìzS?-º%ñëm �ã`ï¾ú®03pðf £Ác9k}Jw´í Ý{ïûw˼Z;è»O±÷/÷â}!ß~Ïàä(½Á¡ ãm¦@ë#¤²óè B5d ÜDºÆgÈ¡L+ཀྵps¿ 6i|&õxz{bB$D¨~©×Ú°)óXªZÃû¾®,¦ÿÅq]É,G%°Rª,êRÄ¢µ0é!×ü=²~Gh6§$¤ tÓ²Lɳû'O0RL»«è\á,iÍßÊ;àâ³4éIN: :wìë¿ôIßmm¶ùËmÉWò<í@ûsÃ̵[SaïÐëÕNÃI¨ol$aj½Æª÷"å¦(%^ èéfCÁl¡ôEñ;¹Reß"·ÞWFCÊÍ¥Ã=ë8R~9*X>*^ËèØL¨Êp. +t§ ôilæ¨J +J¥&©Å0ú¯®¸©ø0ï¸$ ´+àn¯ª¼¬ +ºfºÊÌ êÐJØ +Ü Êà®I~!Êê¼.¼B0Vjò¼îò°à°K±Ïz±+²k÷«"÷ëvƬ³b¤¸Ë>*Âõ8ü+ ËRÀlµÖÀ¾0 r·À¨h ¨9«*¸³©qâIÃ.ºC: C@ý$êÄ+²Fph»Ðnþprþ¢ÂVd2$kJÑÆ\¡Ä¹`¤Ã9` ÌÒ/K*íø_gæà¦¤@ÀÊÙÀÐSÊ.òqF;æ=*f°?àÎ;`Ȩ©F¥&Lu'î@jä Ü0Nf ZðO^#²¨§Ó+4`¤(BÈ:¤¤Df"ÃT¶>EÀ4«°FCZÄìÄÌÔÅ1LXÉP¥ @ ¯<éÖ;/KNu¨°ÈÔɬÔV lïl\ï¬dP-CÏ%QqêTKû AlÌIÌÐUÄ2Íh&ÿcö/ïjT= +ùÀØ5qÓnVgr4ª¡ +endstream +endobj +332 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +334 0 obj +<< +/Length 1807 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9'EÒ¡* ¡AlaAÄé²êÌm ÆUx¹RJ +Us)¸ .UÆS±ä`3§C©ÈÜsÑ(ÐR4 E¢QIüBnV£Õ8Ezi3 + +(Òn2Oy@tÊeShîiÐÆóÔç×®wSqÉ9 "ù¤RËg&áär7îuÞ>Ø\)*¨äjL/S§á*Tê\qAFV:ÁTòä'{H¸gl· >AÌæ-¹AGÊ7c*ð½:kó¬0ÎÓ +±Plápd¼Ë`$b£ 7bø¦")DH"¢Ã é/ª)¢¤a6Á j÷1ªü,ô¬¯`n¶t8ÞáHpD*¢ò¢©äì;ªÀ@Bapk¥ª|=kD"¾ÂÍcÒ8HÞ7JkÚ Eì=A±ÀbÂI"ÂÁ ²l¬:#ɲ|¢ °æ0ì¨ÌË{@ÊèÚ18Ìã<Ô4{Ù Ã Ø<²Î%6 Hæ:9î§0j$aj6¦" 0ÐË$È +ä0Ò-ä«a»ø"Mtá9N"ø¦¡0:À¡#qÔ)a¼ð¼3 öM6Åp-»Â!d° Ãxè5Îp@&µ×Ý@k>7Ó7Ö±b n/ôãyÜphC7 P6]VeÚ¾O'z$øÕó}ߣ ]à!ßc¦ 9mowºò´g, +´´°´),V4ËÂSJà¹.´*dÄÆsâÂÅ¡hÄÃ1õÉ44í?P³KV³í cY· Óxß8Kâ8ÎC1Ôîv>¤jQtÂgó¾¡vÌ(i1èðß_>/êû¿/ÛûT@:|ì¾ï³Ö«Ï¼$/PW- ^÷ËkE»ìc+Ʊ¸@ÁÆ-¡Ì!¥ Ä"Èâüɪ) +iÚà"¬ªªJò· ÇHßkÒÇübÍÞ ÓG!5ZÛ7Î3¨â,ÏÁºFgÉKB%Ý=ÐÑro $¥²SF L¥DÚL«yU*PØC£6êÒx¬´ogQ¾«¥xÅV\ݬv:³N2ÐAëMj¾E°ùØy +}$M_1`j¸Ö"ç^ë¥e1ålúó#^¬}/Æ +Êcleì0ë!}± +±v2½Øä=]ý;·ØÉ]LEe,D£*Ì<Nf¬~)4Åb´"1ëÜÉ«'ü} °ÆØÕeÃ<°>1xx@QB>xÎÞÞ*VS˨Xç±Û·¾ÒÍNqô¹ãÕã= ì?XJج3mW°Y 462Ú@XÛPëp8 70)¥´ù¹qN<~9eÔÙ2¨6®yÙAé³ÐdFÝz= í»SÜOô çØüSô¯áþ@ +Q²¦`È« }Ìô8w úCïä<É®ëv*¨8|%hàåß¼E +^" <)´@OJ!&"¨RçîH¥ d PÙ¢.rÂ÷kà «]ó-¨»)_\§R¤;§zö1apÀÜ e¢[s£TrR ©I)5( +ÝI©SU �öHiIÌ:Ùaò|G"»gÏ ' ¦Ã³P ²¯ml +DËùb Ë. 4^l¥q®j¦»0DÚë».YR2luv¯Uù0N,´\áH-Z0²½ÂêzÔ"3ÞÕ¨XtdaâësØEûV¾#G¶%³gàÛ[ѵy/HªÆ.<Y¸QrRD$Å#¬kì=ÄÊÀ¨0 ²6¡u⸠+~^WÇS^¤cÅ^̦>d¤R¦6U®>sR«Â¸Sá )0¤ÂcýVaæÚG\ßÎÜÜD$úe%ß 5->OS@ÓK¼õsµ|¾ÙRÔ×¢Ú:N L¬Õ 9Øéw ´¿Óߨæç4±oQ½]ËKJðÉÙ¥5ªfö©´ç{ó¥ÉÎÙÞgúî§XÌ<û$òV¡y2èS£¡j«U±IéL?D +endstream +endobj +335 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +337 0 obj +<< +/Length 2193 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP 'eÒ¡* B¡A'¦£1pâ<7B +`PÂ^4¥MS ¸n0jÃA0_#mR¡$¨E&F¢!¨AÑ(À¡Æ¿ÄapãXxÖIgÉ+ráÐi3_,Õá¤r0_§3ÈÒp:Mæì FR¡ ¨´Kµjq°æ¨8Ëäë¹è¸b0M³%IäøÑÍE# ýºát»^/·ñ·Fs0Ì¢é¦2´b!èa ï£Æa8 »T7æ#æ7cKÜ2 � 0ÀZ¦ ¤Á%q)B"«Á`° Cö9pR* Mz ¶jðj$R@ +sFP(#Âï(ä+!¸hÑ43Pÿµ¬Â¡2Rë%F-ò¤6Çqê +ØLªX Á2ÄI,¤fâ% ¸ +°A(ð ã3êñÃpí#I½sà: á Ôx×Ì_>OÁÊ 4ØÍ¢ÅNRê×¶34÷>ÏéEg&MâpÞ:¨çRmdSè SNÁløèTTÖT$±F!ºCQSÚ÷¼3ÐõA£LCÕ<ïT×Î8\¦Vj6W3¥äW³Ò©©È\Vû(+T2rÃØ:¼oè;À¡ û@XÜ2D#< E l³AaÐu¶9T;¬)»¸í.ë¾ðâ´ìM]Ahg¡RÕ¦·$oh ãÅ©O-ʱ + ¬1s©{,²¦h±,ÜúÏP)<èä7s yª¡ÈlïMËv©KI{®M¸Tqf·+Çs¾ ×Qw}¢LhUTÂ+ׯ_Al÷ÝûxÎØð*iW_Z/BpXlkâx«çdc7røË÷y Ý0ÅäåaÍÉyÁÁf&o»Közï@Úã¡>Ú&¤Uñ^äðÔ-÷wjÀYHA¬"BIx!¬9 ÿL1îO(É©ÎñüôÕ̹O7&,ÆDéJÓ+索νÛa¡oÑÖàJ[JÎì16ìØ ³7ÜVþcMï<º³¦xå3þj̨@c~G;+9 %¤CÚVÉi*Àà¶òâqÁCÐ/$ø$PÎ H9¦ �>Â{Ée['¥ÃJiÍI«îËÂ3nßa1@ت%#2Pê$ñ`¢lOLùê%Ò¨#<gØ4pв»ñRª- �ü)!CäPT +N_§+%l£2^&±¹Y8÷SJk[ɽ8¥t¿ÓÃUUo$¢Qê]xI0ÌýPph?¡LHɲs×SÊu*5Ù&2ôOKY`*嶬eëàMëò[/çC.Uô»u 6¤ÐP±BÊY9M5¤ÿ&âØ[JÁnº¥hJð2HkÌ$¼$¸bj(¯pCd}AL/ð®`D +A+¾sVÊd! 7PØd#QÊxè"zOÝ»yáæËWŪUó;L´_°Â¢úx)óÝis GÁA;Nr9à@Ñ0rAë-óà µyu.®=' +.*+¤^àä:~é%&A«D=%`ß6!LkpÄײ¥AcQy¶h02m¹¸FäÝ)ÅiÍðÇ.éñê +wL #ép !à2Ä1TsEPØôGKë}¯4¿ � _ Uk|6VEÎ :1`g`o°^Ê ëu³¡=Y2 Ôr$f¨$áaÙ ²#Å+zèÊÁÅTX2 ¬!_I±Å"2×Kr0´¼¦ÞBS5ÖüÃÜýpÉ 2+Ò\«dDf|ÐCGÒüj»vI¾ÂKÀßè|k÷&ÃÊ^séyÒ:ª#D ¥¤<ÇMcÖ¼ s?APÆ{ÝýRÙE¥T:Ï!S&LÓ}'R)Hõ§FR¸-K)o%ØÐ.Ý_Läq5eÅjåªs¨u<Q/ÔR¥v¡JdàA1ßKjc ä<r;Áù*h©ÉíU#û«ÔêmçU¶F³sW9Ë©»£Pá@7¢Á4 ïräm°°YCSsz5Æø'N«ì3>³²oà9\Ü,ø Ô:ia8%íMó#d¥RgíݬÆß«¾Aaμ__`#^6 Ýâ¸ña£Õümxm¶¶öâÜîÖúïB[ÂeÞ!xV Ö[dû«'~AÉú?`Æþ8%¼ú*àíÂ×ÁDO»ðÊܽÕs÷dÎX0àÕ×»6EÑï\Ok+8Q¬oìk/\N½¡QóÞu{"ç +á4/ÐBUÆ÷©óë3Âï4!7Ì«7¸¤>Ý0;¢"g2ðÝÁ7ÍÅü.Y¡ã2§3â-åw+böW{ ì³?N·¶=R+]Ú]*õÙï±Ö&Z¹*2£Rh Ð +endstream +endobj +338 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +341 0 obj +<< +/Length 2183 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ AJ¨$; +A£¸¸l3´ÑÔo"KF +DÌ8(NFièe9NÆCa¸ÐPD2Ìg#IÀèi7 4*$1 R! ¨,\4ÇJ$¸a#*W { Ú)*¨¤i + Mª2|d$T4DqÊx̦§Wg6Æóîh4ÍM±ÌÊl2î÷Ìèa:Nz¾ÐÞ 1jVk¡ìe2³«öÁÔÅÚh8ÈiqÙ³+dñæó¾ÿ¯D+ +Ò¸ @7¤ðÁ éA.Ê(&<LË6£¿S èf#èlø#"´p"¾· Á¸fõ§ara@¤³£Ü9¯jôó© R,@:~F)l¶0ð許ªÚ»ª"µmjÕ -èæ¸îJÎ2 å<Kx ¾"Bº#p@´SØÞ1që¶ð¿+ô1"Äê'£qAÄ¡ ±¸dtHæ9 ±ØÍË@Ê7k¾ ÏÜ%Réú Fòm<Æa!Q¾qpQ>óp©7 M¨#¢ *Vŵ?[(kË"H#Üvº$()7XH¨Ò#gCÈJF£rr¸õÅR¨i+ÅõJÛÀsiÏÂ8SÛ¶À'¢p©_ ûSÄ:Ä>R2o-¡pcV±ëzâ¹®®Zô¾Hlôcß²U¤a¨lÓRhÓ¶ÖÞ*"¾2*-f0îÓ¸4»ËÕ Ã¨Úì·n2®;Ìí]0`Òç;xñ +¼Îu&¡¢FÃ#éaIJ,ËBÔ¶-Ëäº.ËÆo!<¬2£lCù+o¤ +Êpl¼,¿XL@ÿ´¥Á0\ÑB5º ì5Reð¿òR+Ôö*\«á }¤ûs½Bþ÷/{@Ó¯UÁû$BÔ£]ÍBø©U$È˧©z¤Àé·mìßL.Ø6£bï³ÌÜvÛ·Â;éßXí3K@HÈï¸4f^ã F,3rÎ>HáÐ?vEÖ+>I q¯6blßx²§£zµN±C%ØTbAÍI¯·öÇáû!C¦!À@T +eª°¥ªå`¬¢¶W X%3òF ïdæ:%¨µ|b-,&/äáä_~0 $hQ¹¨ Xc b}` +#dn ¤Ç(Ç£¤Aè# +´*.UIJæ`«ÜS4q¥åAVuȬ]ký¥%G&C' 4²zALRD¯Úq|-Tcªma®6Ø0ÀêÖ* ±;&cÁâÖòÞÈÛ}wXrÊYËH--eµ8¶jã¥)<ÍÝë9iÆ´`IÏ +:3Fïlä0¨ð_a¹k|´By°q jضéßR~y;SÓ?§«»oîö?e§ã:¤Ó P Ídè6^SÊÕMéb,aæ �d+L-µL A3&tÐOp¥´Ô6ÊýÀSÓz§ºÊc¡Þ-Nb:~ûaZuO Ú¨G\ûze9OÉ·<çíYÔ²IN$f Vz+¬ IØQÂ:GJxÈ´Ï ÌªYDf.ÑÞéª'(:ÌÐABá3b©ÓpÂtÃl²s\Ö5µ y Òî¨:(¢T9ÐîMÈåäSrLR^X4I`ÞNÄÄlÌUoVjÔ2«r®NÜVnB,Ê{¼^#±NÄw2´£<l]«qk´ÆÆ«oõ°0ÁÍÀeiÃÖÛQx 7#íÅs·Q]|¢D°aHØ @ÌÜc6°¯¤SveY #òZ>=³$[Xp´'è?#kNiWð"ßê·0ÍQÖ¢Í]¬Öc]pg7J$ܶÊÚý[éHá½=iÅHÜp³¦u¸!;å$ÛnNzïwçË¥× +R¹Æ´p9)Á¬LtÀkM}Kç6Ìu¨½Ìö·mr¶¤QìRG>òäý?ÓþÐ,> 0 ÔÈ.-0 ÂY¦æ°ÄC0f¡¹ÀäPÒwí67ÍÕB©¬ù=Ñ&À*Xm/¦hk³Ï&¿:L®ï§Í'?#2¸HÞ5WJȹ&"3!ªÉîyÒÚ*lÆÚX¦"» áÔ39£ÕÙw;y³c¥P¡Õ-´Öb\sDCOÉ£U^N0 ÝÀ¡/ÊP[ zÀÄ1¦«wþ @Bv/|Z º'¼eñ_áSNfÜkÎF9¬5ê,sTµêÀ*cÛÀpU0B!¯q)Wûì?Âv] HÖÛ%Pdß¶F5O Ñtzó¢»üm/\Û¹í(b%éÃ0æTdÂÏ·vµ^Mó¢ÌÖTÓ +û&h6²Plï©a.e\¹»>sscÌæÖ(¨ô»iNwÆ~oçM>z2>¶nB +endstream +endobj +342 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +344 0 obj +<< +/Length 2240 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP IJéPG¡PÈ Äc/E*TêkÉã!´BT +Rh +ÃzèÎx1BÈÞs9JFS5¼h(2¦ãæ)¢Ñà¤i%. +DªYHÄgÕ+öÀa2³AÂ|E*¥¡0N T5*É"q=Í[.8 ¤á´zÁ. $@¢Ô7Ûø)V³]°ÄÓiüóÇQ««"°Ød.àIyK-Ók6ûÌÃcÒ8HÞ71 +3hƶèr¼ò¨z˪!°hü½n:Ä´BÜ#à6 #ÃÀá æÁA´3¸Õµx@6°ÃÂ3¡ èØÁò@@7ÑU!#pÎ˰Û)DèCxð6-Û)Ôå(jz@Ð@`¥¾Á@ 0Cp:0)ⸯïøç �53ÎZÎó¼ò6̰]4¿!2© +QKcÊ1#0ÒÃGÒHA*(ñ'Ê2D{/@Rµg×A»/Ì5¸î4.òT' 1t0G²##dÚQLrÔ5]L®Pà ÔõN±pe@TAÍII pß/±]ª ·Í]²ý=0#}3)4ûpó +£Èô½t6²³gs>î àþP½¨ä70ôB w1ì£w¢ð0È{É ¬ìçs3¬²¹¢¥e/Ý£äY%ceJÒt¡£Êuì¯*ÌÌø9 ¢9£ +¼Ã¨ØL¢0Ãëzç*ÃH20QZVÛm£a°gy%äÐgÀÃuUYW£&«¢¥Y°ö¸î&ï6¿A½fî`Q!h¼.ÚMZ«áÏB°¡p$o(úcsñÖc껯+ÚûG/ìÁ,VO AȾVÊeÏEEÃY² ÍF-;S]M´7½'PߣÁ syªèvA¸pé˪Ó?S¸'Âæ$ .Ð"5~ÅѪxf I¹LPùWÈsÝYûQÇôç 2AKµâñÐ3 +AÕÎÚCè ¢TOQR,EÍ=ÞK÷5hÝ´$|¯HÍ1¸+v°UprKÀ;,ÐÒZ³Om¨³V"bsé +0júo!nañÕÔÓè-Oê(X"þI +zäMoÁȶ±¢S)áu¸çõÖëxë{/ ôØìCL$]¢[*1n/¼£×{]}êÈ+W¢ |¹åø¿) C°eÙ#N +²ERRÎg`!gªÉùå¨im´Ü¶öË/btµXi18Å.Kj æR0Vªª_U2a¬Y ˰lIn¯t¢PeKhÈ4@À? +âjEÑ +x1rÑí1w4±dIµ®¿çNí^×ÏdëÜc¬}¢26KãºeFN¡J K,,ÕrEÒPßYò=hé$Ñ= � ¢t/ìò:Iüz 3e<¶*r`1Í¡º ;bì^Ñ|/Æ (i¢dVWY®fÕ%õ 3Pü!øê}¢¦öÏ@áºÐC;RXÈ9:EÅõæOøE'x)JþKøT°l~u?)ñUä`á +ìYÏ!ð(¸(6#2«YëÕ¶XBI++±QÕÌ +ò DH(hRj/ ¦¿8¬ôªÃ_Êñ*´ðܳâtÕ§1Ú}F´ÖI"É1dæ/°ÃìúigR3ÑrGÏÔÜeL7¶Í¢è(U*Vªõ¬©RÇwÍ2æ+àîfÒ¿¹ ñ¶5t¼æ>F¯(GWpµë¦:)Ë©|ÀUõ½zü@zUO.0 ÂÀ¦àD¨¯B'Ë>s\s"¨òªHa~Á/gDÙò6)x_Ö Ø/ó)6ô]afU áÜ7ZÎ\Éà¡/p:H óE¦@¦Â@A +xÆààÒfU`àT¯1Qj©å]Nr°~îRy9tåG¥o¬6fª³Ro0KUv^Í=2C,ðÒvíí Î +Ã`ÈÕn^àIÔ¤Û²¢dB¹Ékac+ R)t<'Öï7 0asÌIðßµ øbÙFm¢5 �dÅÎBD¯;%êa-°fÓJÇL"`àCAæ|Ó·°Ã,æX±º×Ârh4-d<1Ë Iè{´JÑF[NÜænûì ^KõÔÚ¶¹Ê-ÃqÀF4æÚãðu:ù¿B°ÆÈfTÌÇ×&Odì³Ît×Ù#`ðfß!.Ó7µ¦DÕ5;qzceÕöýù}QC2 º§C{HÜpêr¬0i}À1iÁi$½¦>ÆáÃ^´ÂAacu×=[½¶J×JkjEânÒ¦Jîj¼ªþ«Þ\AiG =tãTw2¥÷òÞ]Ç@@ +endstream +endobj +345 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +347 0 obj +<< +/Length 2225 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Æ"áÀn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ @9Î¥BT C N'Lãr1¸ÊTá¥&f +# ØÄp8 "ùHS"dòqPuÐè ¡l`4`oµÊÚ9ËÅÒ:Ķÿ*Wì61pÆÊ9 C)ÌÆr4yºóD£¤th*-Àëçõº¨l9áäá z( ÀØi1tzQÌÊn2ø|+]¶ßq¹ÝnåA·:s0Ì¢¡¿l6 'C)·¤iáDsÐ@b7¡«R¤!mj¶Z£é¨"&á@ 0C¼öIÚ¬Û:Ï´.[L½5+ê ;ÁðÚþ?È+U©@PnÅAËA@7¾Ã«2Á Ï(@=£Þý¿± +Ö lvG¡Ld %5-\IGòO3ÈR A#²D&>òxË(¼Ò¤,F²ð\£S72LÒê¶7©Z&Zl°HÌò é&¿.hè<Òé ã¸Ý* £$#U»Ö4 ã«ì²³C¥:WP)â@)b ¤$Â8§^@ìÓëR¡e¦ÓÇ^Õ5Xåi³CÊ1£HìÎÛ@ÂÓ¯hL³)3=H²)¥. +âh¾"¢bâ"+°î»ïÆ3 öØÊ0cCÔö ¯S k>u=@ýM´°kû§¯Ì �®t0± +ØdËP)Oã¨ä7wDÛ5¢C1C¤qHjÝ1¹= ßH2WB?ùâãhN©·A¨mEJÍ26Êy4!ÊÃææ2ËÊ®}ÁÄ´ÝçÍÙè «¯%ØÕã Þ·½ó}ߢ(i:·Åô»X¶=¨úø¦°I¥ðz¯Â/úc&2Ð:맮 ô!#çKæ©ã8ö@À¬Ê9kû#}HbÌ3Lã<Ð4M$>ÔnÜÖòïzk2G{+aaRéÀáCMò×£ã9WôÙÎ{£ø\΢Ù×½edàVy1ÎB$0E¶Në=¬9N)æ$}Õ +º9Gtå0ȵ¨TJ9´ÂN¼Ãp[á¤3ò¨ ¦Ïm¬)SÀUjtÎT¡:&!kPbÎi U¡Ôª@]î!$ÒªÈa <´:ó©DIpDtPs E¦ýDäf^\Ké 9D\Ùð< p9Adæ4[Mê0#äÆH\aR4&¨ÎH3w5±9IxÓ aAðò½'Ö!Tì +D©£bëQàÈÈ>QôaI83¥ãÌ!S1Jác+ÐÄ +A¨(3EÓz`ÀÖNĨÄÊ|hfPúî{¹©d~Éá> +êu«·å£Â»Sç¨é-æ.V%ÚÐdÑÊAx®¢O [çÙ/óùL3JhÃpu\¥jd¬Ãib¹Wg8PaBèn4g¦M· â:C$¨YYo©ú°ª\ØkÀ7K*lÄø,0n`ø>oÃamJ(áÃåv}PöQÒHÆó!(²xFTe<ÜÔöµ Ä$ <DÀÜ2<&D¶U7'cs¥³8=k2Ä'3ËU³-b¹0jn\Àe©Ó6`Ì tfÌâsOC\ÞÙù²zÎx*èàãKoyTbNóþ<U ³zÌ© lòÂ-óÙ¢Ò +H X%9OJõM.Sä¯aÖaJö«ÛÖh(»0árPåTîÕuQµÛ'çÞµLÝ<Ù`ÅÍmw ]Ý`öL¤{NÒæÊÞ@(m½µ6ÀÊÛ«ø(n!¹pZ×¥lѶd`"\×k¤Â¤ø/eØGr° L`±À-Î÷<TÈÃ#¶öÃ6&XËÝQÅL¡òãBhR.\ípÀêbOkpÒ°^F#ãai¥ÃÑqé´Dm `ÅtßqN9ÉCÖEùÀ@ërzþÊK$"¿ÓÁpÒ×Ël6°ULÃyñb2üGZLÎú¶²°<ßìvÉÐ"A&I/Å%¢¢ÑMæw§5o@QyÑÕß%'f¯©8×<èlMͼ3Ãõ]zHNé'<NºeÍlºøIã} +U µÇ5¶öéͧЫ¸ÿ j- 4pÑ·ÞV;¬V*ÕÂùËÝ0}r·ÊbîÓª®ø6ú}übéyV¢Æ +¡ipf!ÂC¤)|ï¨Oº·fî8ûºç¤ºzêF!0¸QÎaÞ{´çKé×e£ðuîb½ÔÄ9häa¢K8j·´jãRbÿ¹¬²Ç%0 ;k®ÔÍêföúS ;^± +îàèsÇ~YÒ½×ÂéCR²Û á1³`秺s·Ë]G½æ¨Ò^ ¤l}o¼s3Kkm¿ -ì8gsZoͶË8 c¼h.$ +endstream +endobj +348 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +350 0 obj +<< +/Length 2024 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" Fá à@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØP 'eÒ¡* B¡A'¦£1pâ<7B +`PÂ^4¥MS%Tg<Õ"a¾S"dÄN"K%1×â<kÉót·. 9À¢Ê8ªmË,e9ÎFÐÒo7_(´r4 E¢X=$cTÉ5AÆO]ÊWeã:ÔÞÆ( FâO,@)¦'°Òc0éµþÌÊn2ûã »Çl·\.WKµâõç6èf9Ît7ùûÇAÐÐûÃxÆ:¼NÛÊ # Ê6Á0©øÚ:3ªû;Ã`Ê1»O3¬9Rü ¬ +Ò¥`¸!@Ä7pR* Mb ¶ +ðj$(\&B¤RáÂÊä0¾0Pä+!¸hÏ´-JÓµ+ëXÀ!1ÂWª=!ELrÄòL6Æqª +Ö˪X±¨Ë28¢Ä8Á@¦8CcHÌ4´ëÿAPcðPØÊ4ÐA´3í¿|c6ËhS^³ e;LÃ!«Ò,ÌdÕ&S{]/Ns¨s;Õh©CÃ0Ü:ÃcéFèèUKSÔLàÕ!n Ï¢HÍKì9,XÎV(4¹OAÂ^¥B^θ)ÈAWIUµYN-¨Ù÷Jk=¸n++p'©øÒñC(ä7 ÄÁª7ÐÈ£sL6Qm + È@;`cHÅ Áàa ¿ÐÀË [nÞT(f£ÑôN ×)µYâ#.'âùCÄìÝã(ÃÓ8=yIpѼä², Àì,8\ĪAÂÉ$¬iOL«.ªLÜV +C(è:Cpç^#j§¨À7 +¤ÌjâQ3×o³â9¾o½oð@¶â(¤)a4AàØ8ä@Pä9Ørz©#'ÂlÍ´½È\¨·õNÙ¸¸û\³Ä¬ã<!àü [¼ËD§;ãAÀ ÕåÁ¶3mĪhxnq×]V=ø¸®k¨¨»¯+Ý7ëÍ£Ú$ª¡èÞí²"À»L±U µ>SÔÂxL +¡4¡ÂHD +!À;VÄm1$л'úïñb, Ý·c< ¢4uê'ö!µqp@n Ap6q«5u¤t QÆ''$|èΡÖ; +üïyä0.Á&>Ê,ýÆÄ¨m<ÁÜ4Cü¥KAä'4& M"9èÏEðÙO4mS +@hª^X2PÉI*B¤®j!jãVÀ¦ÆºR-M+Å6>÷«!Uv_@(¬è|bP* B³A#0ht'8ðÌà ë]ª±m£Ã¬ki9*lP¤ê¦iv<[#ÚãÖ6¥[ʰPyü@Ô¦YüQl¸7È7á!`³´ÎÞ ¤R«ÊünPº¼VîÞ[Û}oëÎSÂõÐöH¼32`ÌC~øR,>æ 2Îç^¹'ph@lG!Ûþ3ìÞ¼8L +@oyO1ç 5nZ=*ö¨U¨ÇQVbq <)´ÂpT!0½@RZãñ) 8Â?SxG1!ôõ·HØC`#jÄðÐBS¬&AX=< Ëg$àCGzWéÁ*°àÍOèO +R´, ºÃ +áͼ4@á:6zB +'\ìÈx]P=5´PôgåmÄÂÐ`iAËfÕxåiVâ +¨ÈTt&?&3NW@ Þ¤-J)N%XV$ÊvæO[ÇÅ(¦Ä¦°Ên+ ÷,T V&Ñ Ql2z,¦a°Ê[¬»(f²ðMsfTLù½8'ÞsÛ9ÓyÁìÓ9d,©¢³ËPáÁF² �SLjðZYȬdâ?3L2yr^¦Í<,çÆ.®ºkÙá³ËUcD¬ÁCâ¤a-ÃK 0©T~]RbØõ¥ïTýo£UÅ´Ìo¨o^OÚµ?ÜÅ ³hXjoBlI ܪXç´ x27ÉõÈÚ)h½sNqÏ$13¥ îÔ·ÇXɾ7 Ë6W®¤À{äiW+aîEkM¡sZÙIÐ3Ù,óèÇ>yõÑj¡Ìü¨ÝÑHeR'ÿaðÎ3)fëÎá°g-Ë?Ç·=àKÈXûU®¡@$´;çbly×#ÇW)k¯t¿RÞXey¨çåªcä-6p¹áÄÚ>Eë¾ ü*Íðë<¬K +endstream +endobj +351 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +353 0 obj +<< +/Length 2153 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0Î¥BT8Âá ¡'¦ctoKFHQRf +ôìb8EÂ|¦E* å"IhR8ÉÅB 0X*obTÅ1C@Ò¤6±ãòúd0 1Õ鸢ÅdlÃË<e9ÎFÐÒo7a(b4»KD±[]W #<[1@®×óÌk ÝÅÀÂp8 &3»` 9MÆCXÜ ¶[®+¡jõ|¿`0EA·Ps0Ì¢¡¿À2àÐý¬Í0î4 Ð@¡DîÁj)ØhA®Ðç óéØn ª:º"&RACR9 ã`Ø2 " ÔÚ) ºZ$ߦ\`Ë¥ÁÎä0¾Ã Ê9'hÈoCTÖ;Í +Ú1JJa j¤ +»Ò¦H P;˲øÛ$Éh+k9)aºª,TóÏÂD4ÈCt6< TsL@ðL4¼ãÒ<£`ç$IS'AmQê9ÓÔ²ç+á@Ù@Ì#hÛ)H%_X¤ò¸P' ðêðp@&ÙpÄý¼0úSßTPµs~¡UkHKç¬@3@V¥(ý÷dýÃV> /(Î9®ìÇ/=æð(Æ4ÃLyÀÐDatÇò"â1½7Rö#|â/Â1GqìkÁ¸)ÈÑTézµ-O·(dÆlî5AÓ1 µ>zÓ]z%Bcß|<£Û"Çc cº@4A#Åg +Ì3#¨Ù �³p*I¤i?Ð|0ëØÞùÖH@2Kã¸ÝneíøqQì¾jm7¥ó{Dm£#³÷â¾$ +b¤'cÀ:1ÞèÒÚú¾ïÏFÿZ}Çò4`°ì˨1¬{¨³Ü¡§(¯¬+ 4af +P ÃôXÞ)íê 7Î #?¡=Ëq7¾ +¢!x϶fdÁ ÈçìVÓ5z¦½LÑÀs`µîbÌ Óâf¡ó¨uXû Ûï7¦aù0Û÷K/M?zËu=åô¿öÄIo + ÖP¸I Å_<( +q$eLÊ@nFÉÆ3/æ rÌZTA.$ÀÐR LðA/êèò`9ÅØª@¸´VÌÛÔ3ÅE$$i 2iFé°×¦ãf¡I¸ O´Þ?Ffá2Àµü3S è'!3®vNÙÝð3Ê +dô4Ñ*F@B$j-ûA§tÑ¡;¾]!±;' ;$PêèÃBd ö¿êASàæÁX; ká /Õ0fNXÎNFþÀÚ«WÁá¾¢©À-F' lr (W 1¦PlÍ<5²§X0éY«ü ò½U2"'¬5±W#bj³"âíÙøe §ZfÌôÅ4Yú`aî×A"ÞV +5)C*|ªê}Ä×ÑET]§V¹Ã«$¡Ý #Ù&9ü?Ó09ÌàÒ¿ªÖ¥{ÒÛ:çiK¯Çc 9T!R¸hºLú¯{/mî@êù2o¢EÂ/#s%Éáû¹z-OÁúò»WÐ[B(R +LA`@ÑÃRÁ»ªz};"}cï8À¤£ëÏäÎ×]cù¥`7Á¨8`òð7B:ó!éý|"ò2X¦U¼§49 S + Ð'x[a¼²Æ5Ñ7þ« +s¼ó[ Ì`â/Ö[b®Äô$På@0 *FÇhà5g# êúEn,,$pÁE¨îÍ)Ü:Ç`íÄÚå5Êúß{øî%µZëUÛ 0ÒÃB£õxòª +µWÅ`æa(%+\©8h~Ï)þQ«ÂS}Ud9´ö¡®^(+? @UQÉ^J%óFÝ´yyQ¹ºíZwl1<m Zj3·J^ªéb\U [¹uwDTÞÏ1Q [QÍF ¼;Ú¿ê`rG³]0yZÐeÆøäQöW¦ð TJS<¼ ×WÓBs ÃEm«/y¨ltÁ<+ë"A +áX @ó¯v! �Ï6 D$iµB Óe 2m¾ +â@ "½P]PÙÊ5 ëÌ9 sÂÄܤXõ16ª¤ÀZìqéæõ#3í¹ãw¿m¬0ÿºÌqAÌxØã½)ògÈÛØ¶5ÑïW)áF¯øh2¸ãh¬oTô7¨î¥j\! ë G\/Ù¤ÜìewGEq7bphÀE7qÃ3o]¯ÖÎÁ¸;ÑE¼·Üá®Tü9d.°És £eÅ¡þDÒàA +endstream +endobj +354 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +356 0 obj +<< +/Length 2134 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆIÓQ¸qI¡I0(a/I +@TäVÏ5qÀ B/È¥K0SD£SccõB{ aãY Þa˯ëàQgCÆ6¡ÈÀe2Ìg#IÀèi7®ôZ9I +C¢( -j±á°æª8ÆWeAAÜ 0ÃIÃÐfSqçÀßÛî7;¨Û9LæQÐßÊ2¦3§tÎâNüÃÖ:3ü>ç/ÅäÐoø?)Þ<ÁH¨54ªKP¦+áªÂ¨Ú@ +# ¦lp 0C®:£xá£0Í3óòѯ(3b¥5*ôªÂkx;ÂðÈÛ@+M)º8µ±¤\ÆA@¨4>¯Æä7ã0Øí@0KÀè [!R$ÂÅ +É{- +É#ds G+N¥ äLÛ*-Iô xîãɽ29CÆ4ÃK2îÏom<xÍH;L86»®ûí'À+ĵ!ẠLH\ê·Zn² M.©Á@é=Ö½>ü95ÈQ);A|4¹õð¨) +¢(YaVµ»¹_?K×a¹õÜ9D.h@4 #8Ðâ[Ö¸\VOcËb0&.V]ð>òØç£u¬2BW/mDÈ«á)$%xQlÑ}¹o\C>õ^a ê ÀÖª,¦Á¤²Ä+PhÍ2Ð2f +C(è:WµõMñk_5ÍZþÙªaÀj«7)«y%»¸æì»xm^Á¤"BÙKÛ!:9P4¨Æ1ç3ãÖ>¿cËæF0l*Ñt°1&\È ÁbË{æ£2ÕC®`ÆÌçh6z¦gëö~Øè¨jî9LËFÈ"Ü¸î »JÑô 8)ª{Z©*ª¦¡êÞî¾sµÎÊKg>é ! +b (V§í«ïW0[H²Ê³ÍËÛ«ìʲâ#2ͳ²Ë W"ÖòmÀL2«éà8xß8ã^N[çë®äï]ûÁxaLë´wñà<«¼:ÄyÃxp9ç´ó³úÛ;¦m(%¥ôª²CLÙ¡ðlQàDÆ ñ¥PDÒú1FjÎ&P!;t®9´§ ra£òsÍ0àêCRÇvA%QQ +|©m!ÃøbªR3ñv ¡5CÚÏ!ìULÔ?0@yíCÉN©ÏäÉ3*§Lb"²lÕÂÍ«@ïA%eÐÄuà¡t+æ»#£ a2.%¬0ÜØrXªÔ1{Oië68Èh(HaO§¬ÿ)Eê¦1Op68HXæ}T +×=¤¶%Dà8_Í(°cÚfÃ(ar J¨$:¸×*ïÑ"%)yi ¿ñE´¶àÜãLé"¦¸tÆ#¨* Ìé1KHt7®äö Ã0a>0.RHU+50 ¨7¹^ ô9a;"6DHô±#+gÂ4.E¥ìε ¡Â:s¥Î¹ÛGCÙÍW"öð,'ú7A`A+T(i ±m/æÁà])&»åAü[.-D¨µ¾)¼ ±Ju àdË'|âqvQA +©AuQfâ¥Õ'¤ýrÕ9ºXjNjGWÀU&ÕÍ&g¬Jp7UÆ9y³°ZõHà1°SaÎ(Ë1\ðgbgB+vºhC*Ë=ó^R±yC3a!4 ª7òZÇ#$cµ#tôm6ÇÉ �>r*Уë`Ð#u ¢#Njqܪ{Ãq¡³Í°ZkP¦Zå;ÒÐçwOYÁÈ;¬K2/!ß]uª1e7m«Ëcï5¸0fWÈ»`/½$2ã*ß[ø(p!½Á¸W +Hnqw._ÃÇËs º$xì£$6 Öb(kfS +lyæÜ¤ÛÒª óÔ±îØ=¢Öd]ÛÿxOZR@N,<Èp¸+MЫ¿ðËn¬ØEï"GÂðí$r É]ÔGyÏÂ?CpÎ)Ç?'ý¬\2à 9+&@Vãhm!¬ú³¸×TÓ==Ójpº²Ä !ñbÜ^KQ$ÄÆ¹¿vNg4$CÀµ",» +a£H!¦e§S4[¤)²¯F»êÊvI1IU)×~SQwèè1HõZ£Q]1£XmW5¤è¯úpäÞyC\a7lÔÎýùêSjÔóR9¼)ì9¨ Æ£rØLFð®}w60xÛáb.uªfÃ};ªÔÏÓÅ4Ä`¦¡ßK`×v4æ¸4©p¾=fm3F§r®ciÄ¥¢bkyuÒJOwk@_ËÂûXkJ3;5öÂÛeá¯ä´{ÄMºo·YWüFÛ÷p9¸@ÊákbxiÆfFfä ËbÄ áÒt.÷=gÌéK +endstream +endobj +357 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +360 0 obj +<< +/Length 2091 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0Î¥BT8Âá ¡'¦ctoKFHQRf +")ØÄp8 +eBi|)´J<)¡ÑiJÜRü1¾ *Capã7Õk ¡¸i¯MÅ!ÈÈ\1²h3)ÌÆr4yºñD£¤uÚ\Z%~×3Bê¸l9ár\d¸a]¯ãFY µPAnPÂp8 &3J 9MÆC8Ü µÛH÷+¥Ø@mÎÌ&s(èoNãG´Ðaí=¦ó7x@éºãæ9ãÒê£ @Ó¯AêBN" kd¸n"ãHè4>l +T+#@ª2» +7°ÂFÈA@äÎã¨ä1¡pSµ*CX¡¢ª#é©Bíü6ã +ä0½ Ê9'hÈn3ó@Ñ42òÔ° +JFph©z´ Jq«+²TµSRª¡r¿NLbâ pÞù®ÈÈmùOk²ù½á >M28Ъ qÆ@Ù;ËÓRÕ©H%KSÂpýFQÔ $9Ò³ä÷>ØåNÖSäZ¯lrü¨0,tÛ,È*7¸i G +ƪ³0ÈP)>QðÜ9ÁüZÖ{ev¶m¨m Ö½³)Âá®â§£ë©¡CѽohSÇc¥ÌîàáQàØîüâ8u3?ãJ?ïèæ:r3£e $¿¯ÀA-ØãAqôw éØofÉö1»º7> ATOtÐÓld Ê ônàÐðüwGÒ9c>K»ÜÐM==¨÷]¾©èM£}Zp,³±vÓ ¯Ų̂\Ü8pcÀamÈ3,³¶ídZB ZM`Sc²¶7FÂäol·Û|>ðâȺ®ôþÃQ*;*¢©±A¨dÞ»kà2L¦é,ëO)Ë.|ÆÀYÜöÎÂ0Á j#s òN7TËî³>кÓ3Q>pmÛÄ^kj7sv+î;¾çº.«2»Ó¸ÿuü»Í½Oeç@p,-?ÙäCþ8Ó¿©Ç±üdóvcRY´& 19º¨ÁòKit%÷ÞKÊ ÿ*Ü "5Ná;@òæê¢Vê \¨h8¿3ö}m ÷ @üÑ#; Oᪿ¸A*¤P* 6ª¥XÚzUðyþBÔ"W`Fµå"¤Á|*ab©Æ¾[´l ýÛ5¶cI¦+kq¸2 nK"03@Íq®Pä¹àÍ]]èw +à4]«aìÐbÖâü ó +äo;¬aCôËÏëì;EËìho½±6Ñ 'ô²°æ>ÈOK$dÒ²XÃT¥°7²édÌ cɬJðPÖAi@áÀTë"Cs^«-ÂÅ£íshw ÌÃW®LzSn&åÕ4ÝÀsoA¾#üÃsLï1±8s`ôM¡#_Nõß'7Zan|Îe°iRÜéERy6/&ÄÚÀäRÐ@W-¡!0¬B EvkFhÙ¤`+ØM»BãÑFl"× ,q¯>wÇg¥<Ù 1hXß@d. ä 9ÜQ ¿E(µ²>¦´øCqóçÖdd¶sÙ= á¤íðîÎê«_ÆhóEÌÔ¤¹[Iô²³V¤@3P �$ªªü¡iâx(]¶T>jí_¬A¸3¬Z©fÍ.Ä%|ÔQÍs®¡¦´¥¦wNÍQDµ1ôÐÌCÀR ï±Ñ!ê}©®ÈJ½C-c9ÕÒWyØúJÉ6¿Óڬ̩y0RÔÄò,.a*0¡RAG!ÞèDXä¢D%±)J0àP5¯3°¼ú±\Æ-í¿©öN²Z;K'e¨ ´Wÿ¨ðA+¯Å\·Õ|; +]2É»¦^bAP¤Èa<èôì RHV¬þ¢(_¯õj ¸fB Ч *¨åE[îÄÎv¸{b#þ|ñF*ÆË[Ì~« Á² +º`FϪÉÈ3J±9ÝÅ!|$ì§â-ÛB±"ª»¬CO±^3zà4_á 4pÐeseÁßDß|CMó¶Õp4ÐÒ¦ÐRÀ Çó+Y A@ À¶^é§àz1ò%ÂVo +¨TAêýOÒÁ»Jéx!e^ÑËEBýSØÀH +á8"3Óñ#Ü_÷ä;±Ê¦tÑ!ÔE ï1Âg³pU 2+¬¨³G"äÑwtbãé,du$B=F¼¸# +TÉQNâ+< ¨1qÒA!æ {ç\9zTÈSJqäðA$Ð)éÒKþÛͺÿfnàZiÇ÷q©4e2ênÍðPÝÃ{yomöYÎÔòÜ3ÔGrªf½áNµ&ðªå²Jc'>FVIr +endstream +endobj +361 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +363 0 obj +<< +/Length 2185 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ¨Ì\8¥ ÆP¤0Ç@TäÏ#ÈÀPW&È$2¡$¬A*H%HÄb(¾QhôèØÂ=QácÃXxÖH7G$²ì5Éf´6«hÈPD2Ìg#IÀèi7 8*AI +C¢( -¿U£ÃaÍXqb¯J,v7²"Äþû¸\®kÅè PsÅÝ ÌÂg2öiâIÏÅ9MÇO8 é< + ÿwÂl6{Nó´Ø2Ã+ò;#pÈ7ï0Þ3 Ððæ5Á£@Âö<¡ £$?B°$5µj2V£k[`"2`á¸è Q á �¨hFr@ +£(#Âî(ä+a»âÐ4M#LÔ5Mb +#/Ê[b¯¨hØh©R¬j,qÐï,KCl$Mmzèâ2ÚÎÓòà2cHÌ4´! �ÝH#LG.ÄÃxåH M! È\Dc`êðÃ" ¤*¡ �NÁ5ERUÕ<JDñ0 {_Õp$ fÃPåGVT¶`ÍslcP¡(Äñ+YÂÈ ä·t ÔßvÐéEéeQ¥f6AmUÛ¸]@óS0lVBÐ3þ@*".!MÛÔô#É3r¿,-ª¤Å*jHk&¯¬*Ì&(ã8 Ê:£Ü9Ŭû6H»Û±-Öb·ù½ÇX3Â0Ø4p¼Ðc@Þ:0å¡è£p@=KÃ}A /`à9 ã»Jâ.àæï<= �é&ZÄe6b1Ê¢´«Î® +ÂË'û2çìð¼oán3-O¼õoZDÕ¥Ý`V¡§¶z\Å´/®Æ¹Õîè®kªî¼ß4A©Êj©ª¼¨¡r¹É(!Î ËRØ¿÷x XR #/«pz¼ Â"é('ÃøyÆ$¨`*ú·'çòÈ4æLù¡4fÓÚ \+«6@ܺð@ ë¯8ÔáóM©Ë9 ê·¼xR|áQô¾°@߸<ÁÔô¢cö·AåM6¾oK*¤;å4·ÚÜ ¨\ä¶xY-Fx2!pÃÈQFD-zõ¢Ë:9åÃXoaÚ±9`äÃcK&ÊP;©¦¸×b5'eÔ4K=ÊÎ=AØ?a%W±êóá|zé¨*¢\I9QC¨ÒÈ¡ê] +¼%±â²T Å*P¥ÏR] P¬Db2ÞKCÈ|ªÛ+gm(øòµàÂUC(d9¨õ"¤Ñ*èFlnLÒÄPÊiPÛ¦_¨ú'1@ÂÅ¡S"AD!`¾Â¸N¡H"¦`A*ùUD0èàK©I©>p%9ÆÎ%XJéf#¥Ô¾S +cI¦\ºHU + Í:ËÁ%:úOÌ¢: �Æ^´¡G)$¥³aà4Ðêb-?Cj òXrAÂh;ÕÔðm/¤kÊÓ5¾)S½_Å6©S½Â ½ÑdÜb¡3)©PÚá©ü%YÄ(ã¬ë ²¶Ö¹éeQJ@Ü / +¨¢KîyÐ`äµ£Û1!ÙíAÇÊp~£áã¯"y«9ë=çÌû³þÐ:ì]hVuª¶)ªÇYQ-{Gh<Àr SÓ|QXkRz®¾h¥+pf¹Âdm'°(¡ ߦ÷ÞËK-~n4gìÞ`4vÎT³¿àdÏß+BhÓQ÷Pð Qu°47ìfZ5¢D¢SXèÞ×Û l´6¦ØÑ{qnj»7JziÉá®ÞÜÖVÌCòf@9¸þ«ü» Ø9`g^ënx2º`èXnt¶Úâ:Òm¯\ØYäµWioW²::!@ L !@!ð?0k *n!úâÁV)áæ;eßè7zDh·BpC¡0&ðûUÏÂ7K ¦5¤´ÃDAB¼>q` +e£U¶m/Q½`°o|@T ¢,âxµ_ ?:90æ<Ëá9ÝÕèô´õÏ Cäð)ž§Ïx-{ÏUFYÞÞÌïÁ£xNÑøsZÌ:0ÐãÌu;môÇCÆØM3E«R=7X¡8"YmEJh Ø AÔ7ä;rÜ% +q1(Ðë¨9¥M /& Ó¦ÊBð-Ó¯NV+cî ZpµvÏd,DªÄ&ÂÃÙ¶OIì íÁ¼n ìálªkÍ\ûÀ©r¦ð[Ã8u|â5ïþ-v~9±úñ±¹Ä»YÌ®ÛÀÐoûGϰ%ÖºÍð1Änì_*Q}íøMºdßݵÐpxÀmÖ±`f÷tËÜ¿%s&_Íh1Iî3Ds§(rnê ÃÀÇ9°Þç\û¡º,Æ-H§³nsº)G×,"0@@ +endstream +endobj +364 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +366 0 obj +<< +/Length 2164 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0'EÒ¡* BapÐPÆGÓ1ºF7É%´ ÜPD'cÀä`(+Kä2AGR +ØA$ 4J56«\¨BoôØ\8 åõjÐ(a.PJ0TâÀ9lva|Ês1'¡¤Þn½Ñhäi*D¢´"Ì.¬Ã%%qã»)Ãásl¨ )Ï 4ëEªïoº]·O:mÏÌ&s/w¨i9ù³§3)¸éê ÿ¡£Êf4~ó¹¤Ü2 ã¸@ÿ«Ê1Ä7#ÈÃHÊ;£@1üpÞÒÃËü3Ào{ê0Jú ªªÈ×# &9@Â?¯ü½#ËÊ6ã°ËÃÞ6À¯´/¿ÁpR* MZ×)xj$qkp!q8Êð¡/ +§hÈn3ÍDÒ4ÍBøÕ(T¸LA j¤3« PP;ÍcÛ+Ë(+X¥5àPn«AËgBÆT<ÓE +cÊ1/Ã?(¼±ì@+ ¸#IT'J4§ Ò´±>OÊ\eKTʪÄmCF³( maÒMmKSÒO3Fn%> +Ù +ÇT9ÔU%Lô×ÕT½ã0Þ6\ã½é)4ï-l7DÄ%lTWò!c·º@ÙÓ*Z²FÎbp"0Ãá{@Nóã½ò0Ç!ÉWûÊ´kk°º®îãÀ9¼O @9xê6AãÃajò´ð*v ~WÃpÊ<E3Ûe Ñ~,àÐáÇ97aÅaR*E(¦O¬f¨°jÄȱ®iFîk.LØ` Ê:£Ü9ÅM]µJ¶»[hض{rÎiuàSÔMÉ)#áqDóç9Ü#p0@=B¯Kæ=}¡<c.É-lè&ÒÀ6}û ·¨!¯ªÆÜà É2²Â«oÌè'fo3,s¤*ööM³Þ\kƶüfè@©å\\Ð÷t·mªL +¤ª1¨aKîZ¶ùÔKÎ$²ªËBR{Ï Ç@à +o +ñ!æiÄêhM¥4ïx8²øärDpjÑ\-ýµWÔÆp e Ü)pÍC7=§ðû6 ÒbàØåR¼ËXE!T( õa¹)¨çBKÄ,§@ÑA@e{ȶ&¦\48ç,@xy¤jf:,Tl30ÀÖCʵHlؤgj×RE¡°2³øäÃßàKɪòb§ ±Å ¡k&äàSt~'FÔ2}MQA(E q"Q°6ÊJøBÊ[ò +B®SÊC KÉ$¤Æ`¬U*fb<¨òµ%¬ÎRiýn,¼Õáã + 9Î ¾âH2@ÓtÛ?Ëè9×DÑC +¨)MÐu* Rm\*zA-¤í4èà(Bìè÷!ÃýA ¥4:Ô |4¬Îqö¤º@f<Ä5¤ÄÕ¥'Zi¦ôÏã¢lì÷Ó@ÎYâDUm_M×âj#w á¼&j;GÈH6 �`lSt-oT8Ã@icÑ'P'¢?ñ +5 ¨ +õ=àÈDLA@I ÆøÓÓ}AõxôéìCø;I&[°¦¨XyÛ2k8t= ÈËm[k{H}ç¼:ÀÉjËí®9¶*ÙypmÅ´p&} +««A.ùv(\[YÕ²v)&äµÙXØ+ÀiöÔ;#ÂÁØ CçÚÐõë Fò©ÎûIi,Au:¯óXë*MN0ac®Í!7pòÍÛQVäÕ<®Þ4ÄÒ{ts³×ÒÐ×eQPÍõúj²(`¹ßid=87à\½d0÷K®Ö½°YG)mö"³ø +Icj1¥Ï3Ò?fÛÛÉ7Ò +·fðóJù!íö·ûê\<$knW ùI2o9·\\´æ´asζpί+¨p 9+]ov²GÃ÷u<ʯ+¼BY^FvòÎ êÙ^ÔoX2½Zö0n{³5¸Ç øó|+! ÜÞ¾4W'|c1X!Íu4à~¯¿Z +«ý}a½5SXÁÙe´)@B¥~m·+6¬°PJt/×/f<ìcàà1Ú%Ê]§hBsT&6_X|àOÈ|1˰×u7psâNÓ;[lWéÐíF =áLÄpZÒ ?jÔ7yAÃC ) ð®[¤Y!'À^BU¼ì<Þ´RS£Jæú½äY~çÃo-rBÞuØC2oBÌP8tu¶§w3#iºG%f8L';¦©àå¼¹éÞf© =9¸.¸¶d9©£¦jØóÒt©µÁγÂRÆ«UÛľåP½Ò}øR +endstream +endobj +367 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +369 0 obj +<< +/Length 2675 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* ¡PÈ ´b7Æ#1 @Âr0E%CU$¥ÃAUf)®¥!APÐe çqi¼äd2|1@s8Lf1¤Ês/øIÌè 1Ïè^lÐi30¸|N/Èäò¹|ÎlÆu9¦ìù³;Ð-vÛÕV61Rï# xÂ|1Ù̹ó¼æi:MæáwPáTápÐq`åól.eqØïØ ö{A¢wCXåÚP¼ ¯j¾«¡²Àø§#hêûIàn°r~0Á71!hÈ´ð«<<(ÇAO°Ü7³ã@Â;0Ó ¾$"¦* +BH#lxé0¦ü©ÁP:'ðß$§éàc#7CÊ4Å$#´ãR¢(ÀPZþ.¡Ë9R* + ¬¸æ0ã+º¶-Ïzâ))z<¢sÈ`¨xjÁ»¬ 2õ=M+r"Lò9'tP):mÀÝ-Krà ®H²$»ÔHJ¦ò°jþ¨@©E@Nz»J¾ ÂúÍ 2¸Â8 ó¢ì»oÌ®ÝÓ1\Èà #©%2] ÏÙñPÜ2D,u0e¤0²écÊãxÌÚÈ#,B1»#pÎ;(ÚDaNÍÄ\Å7cµ +³¡t8£KtÇ\×D¶¢ T½#ZIËêà4M úx3%42±Ã ßxZãMÅLü\ÎAÀæ4 ã¨ØÇ2#ÌÃ^rtçÁC39µ©" í +è#N¤7L·!JÙþO ÅØ\»%Ás4Á@Ö2,ðä7ìm%1bCvwÙCÓÉj°P9BIct0n2e[ãhÍoFa¨Q湿çc{¤hF¢=uX:#Åk4è®KÕâ¦Ó^Dz>ÇB¹}ÂÙ2Ìuâ6În" ;TÂ7?®óï@PT#¨Ñ*èhMX¨QH4gJ¸è³c[LÒpi7Ct¥Na*Þ÷ UK>*Õ«øÕêèaFÍb¸/q ¤úáX%P²xI +&§vú +` +Iï@jüÁïU`Ñ=WéÔz/PÿBHL! @kNú¾Äüñr\º<Å`byð2=F:¸cA¤84¸fùü}jÞüA0yÒÕd¢Óúbu/8 ´Åt¯ó|_ëI!-uȲ`û ªBèaÁm{)ÁÀj +¬^2<´hA æÝ6ÆPßYÒý0Ó¸àîßÌùt@ÑøA3þÉyItà ;ðÜ~lLò&Rñ( +ñë%Ï1°²ôkC¾ faº½ùO*Iû/ë\Ás0vC¤å<*¢îVß²®b ÍD1@P:1GéøIÄ÷+âì±tç0A8ÆNe)»ZM+Ì9Ùô_ÁÙÁH ÇCEB=fÀlHS® öMhN!L+ °¾Xò£à EFa{ÎZNnå:Áå à¥0P0äB@ª¬`!½6¤ýmk'h¢¨b¬}Ê@m9/i¬ù¯HÐàZ\ >̶äÙ×ç; �ñí8ÒÇÌï 0ϼP@òÏà0=õJ SÇ ñÞNR¯Yì=§¸÷»|u#J$îúªKì©sv»\ ÞMMa6|P¯&¸\pÀ �üÄá@ëZ+I5p¥äAh0{æ¡P¯pý?ÅøBôjöðÂ(FYá<'@¾ÁLý¡P&û¡?nRW¹ÑW"ïL«°3buñ?Äm_ÁE°OUçÄWý¨ä:ÈÅB/Èð3U@º§ÅÇLóOl¢à¢2ú®¯ã\mae\[rnÝϺwT#k·ZÓzq3,6hu íJ³ÔÐèkóæ[5«(eÇi¢·pÛ¶9ôrU$ùcÃÁ¿b#ykM°¾gîeGDê4=ó?WËâivu²tâ˱¸|+QÑ@ûÈáAåäaL-sr. Ë$ãPoIûf«°Ü'#J`+.'-Î[Ö;C +Q9ÔFñ¹°Ê-ÌÉ;apÈßTév&o%â ó"w- ²%ÀÔJÂ6H +Ñé+ÖømJ[ÂÍP¯~$8"vm±¥)ôã6VkÞº@o6RkâÓlyt?ÓÔp_ õ¸¤lÈ"Uêb< ægBËIËRtè¹îæý¢þ½ í9qä¼³séL;>Ê=;8ç±ùón#àå Û`ed,3 9ÈØÔ°C ¡¹¡t®¶úcgp!²T=P>Oj3³y¹-ô»Ï +Ó8t-þQùHÞTÔµCm¯.ÔméÈI¿`»ûy9¡| Çm9ku]+=®ÀÈßËvò¯3νF#®u¬0e{¥9ïeïO¾½FûÔÂ13,Ê+Eò{§Â ,ÈeSl¦LgRo ÖJ,A}ïf Ü'"A"ô£!j¡×³}´»öØE³;=:uüªGø(A +GëªnÅMH6ÈÇ¡^^ôdïmØ»ø¾ócúíê]ûIßèp/P:±ÙNÇj²½«$Ýàµéí¸÷Xb²`@×Ú>Dx~÷ fÿ#xÿgiÇYP àÚ4'8/Æ (LÏ0À$VÎ( ¾D äߥdJðu Þ[ÅýÅ,Vd®eãn7#veÀÊ>HNL_è +h&êJà@©30fÄ Ô:pppÅvüLX#¢CÏÊçH¿æ"~â´l$(ZHઠÀ å¤Óù¢) o§ ìÖ1ðs*^ àäeà3íøÃl7Àà4"ÎÐÀî>CÆhfÃð¤að*Ì@ª +Ø @/Ðý@¥# �é ¥oP}/z¼,kȧg·çîRkÖ¨E2éo}/¢²ePàJ¤jª«*Ø£ ÀZÜJÂ6¦L4`(ÚeÆOðÿPJLYOó¦N8*ܺb +endstream +endobj +370 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +/F13 101 0 R +>> +>> +endobj +372 0 obj +<< +/Length 2670 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8"#¸g;Æ£Aäo9Å¥#)à4NFSqÊsÐè°R4Wj1\æÅ[ êuë`0²Y ri|ªN"Å !|O(uzÒT©³Ò%2¡RT5QÔ},c#ÄøõZtmF¤ÝÊn(´ÚÆÃG¥! å=ö* Sêòa4îZ±P UE¨4Ðõû:Wræì0ãä4 Ò7ÌJá1ÊS"½H²ËÌÀlèâFû,.²ÂAr ¦Ë;F40 #ÃAà #³5Äòk9#8ÊÕ# @:0ChÒ7Fì8\ ÅeFÑÄ^:c¨Â6 È@20ã¢î<r|Q1hZ§!Ã" k<ꬩhhCq(P;Êc Þ;ÍLÏ8¤² �b½C@¸·îÒ°Ê^!tå<ÏÃk2Ä9i«®ñD^8.ì2óGMÃLÛ#/2HË+2]!²,g@Ã6Ã|á<!ª )Õ;V©£D8#Ã#JæU®)b õ= +ܬ°aqOêÃËBÔþOðr/ ê9 ÌCÍWÒ\$ÉÜ(Ì.h{¥$õÔH¤³Æq¬oÅãlÁ'0x(LÞ #6y'X}9Çã ÑeZÖlzR,eïJ߸棪¨nËÃx3@üÄÏØh·?Ë¢ì¼/Kâý9° c[ìe&âÁõ£(ãék»ÌåÕTcÔ750ÝCõMVÕÀè(²hkÉ\0RÕÞ¸Æà¦\TÅ5tÃìþ>Nø¾"à¤'¶V¢*¢²"µ ¦)"xÜýX*rª>2ó¹ +GLÄ ôMx&-FÛ¨ßÒª«àªè¬×ç»]Äì0 @öÚVÓ%²ºÀ@.kêXºCŸ|+oT'½w²Qq1$$¨#ÚD + 7$è4 Ù=[ÄðA ÂNÁ¹>P C¬xaf6$nà a67øvÏjjEÁÌ6%PÈjÖ +)à¶ Ú¡% È 2tLÐC DÛÉè [¨32ä¼ÉØ593ôÚ»X +;¸F];.¹´`Ê0éá%N`Ê @ê¤(I¡6¥rá%K>èµÊ8e !°t ´*¤òÜúº-EZ/wK¼?M1±4ÛÖÔAµÄô rfI7Ix5&ÃlEò(pܲ![ )¤Îb<j1Îq'¬öÓ²½OŤ>qÌz%'Ql"¹)QdyJ#%&¤öE°ÎFJq?ÁD·oÒæCÐ%ãZE¡¡I3Yü5q H: HQÀÇ(èO¤4¬Èv¨8ø(g]¡ªÏjmoÉU¦*ç|åË5sø§"Ë Av®ðʼIÙæ¾¿ +ÌFmëâ*àh\Üâ{W, ;ÔÅÜ]éwà)¢F¦ÛÛ¡ +aÀ26zZ*Yt»Æ:3$¼Ðg¢×sOT +rñ1" @¹ 8Cu!OÖ7B+2ï/ÔVÛ\)a¢eR6(p[D9ö¢1Sfs®Ú6£ú÷:m[N¥{F¶CHg 9Zk{>µõÊÕÔêçaÀ¢Û§ãPo¹4*³ëKO8ÏyîF¨÷Ézs ÒX§Ôs©ìMÕ8Ûønè¹>ZâÊYZ[»å7ê`Í{9.ìò4ëËH.ðÖ·¸TõçeȪ2BÇRÚâ-é̹6"î^KÙ}/æ<¶Æ.ý+]ù*,zþDÿ΢ CÎ) §9à~rç-~<3FÂ÷¨Ï5Ç¡g5 Á<*Þ Y{w^gÀTW2XyâUßf$?õUÕt}±÷Æoå +0dÞ/TÅ'Yj +)´yëå<ªÍÞ[ 88 Ê)%&´r=ÂÅ¢tµMt»wS@vF²2 4}jeÔôVuR¼ó§Ô úp:éæ^hS +Jj£ ¯#3Öù,á=5n³g¸3CÃb áÕ'MJvÄmÉÓ(©43PÞWº)òY05Y#å¹ÙaÃjC¤ÓAnÞ«ÈÇÅ[¡hI¢ÚaÓv$àâC/ Õv �pe :5×}? ài´þ®Ê½P©0¬3¶¥Yà`ªÏª6¿,_V¬U\å|úÙEqë-°³u®ÏV÷9±Ýs®¶ ¥Óa.ÜÛSSMéÜõ£MÈÞmèÖü²&¦Æ± »©[[¹Ýå|ýÐf¹jrý¨î-ðèmý¥÷ãZ»MëM[R¤<Õþê§!/q¾ùð°AÛ¹td¶}2ìݾ>öº`ÝÔI3)<ü9 °ãϳêS¼ 9\»Û£Ëw³S"Y"p檷9vCµwfJuÂNá+;yIA°5z%ÁÆêó×wGÑémmhÝp;¾5ÒU tÀ^Ùb+,!s\÷8 +4ÀaÉ1ñJÜ|KÍÐTÚ +jmf¯¦[`ÖrNrâ6í �Ö©f à¬òïrð¢ÜïØõ|Ç`æ ¦/æL §Îpf¾Ï +ðæPðÖ`Û bÎîÊPgdÐ^$¤ã-¶¶N ÆúM"Úå0åÜ÷ÎXí¤\Ò +>© +ø ¾ +@` /'d0y á«/ò<âùBÿ¥>k¨Oq°_¾Ü\îâ|QD ãÙm¶Jmú ÿð*ð.Ê)lH%Â.ý¨¬çÍÈe �8oñÎÖNÚÄÆà ¶þHð©Å⵩¨¯À°Ó»N<ák`n&1DÞè²ÀQ# +KÎÆ¢B +endstream +endobj +373 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +375 0 obj +<< +/Length 2565 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´b0ÅÅ£qpÄi2*%à .h +Ô+¹¸*rC'Ê " 8¦M$'1ÀÄp($èe9ð +l2NgA ]hbæpAAÄO: +'S.°RT5RÔ¨^Xk/G¥éE~Qe7ü äeMØ#G ß©8jDf°]¯ØØ#1pÜj9¡ÆîÔ½ä¼aX¯ +ÜnÃeí`»¯w[ÐèÁZ]>§VÖ¹ÃdÚ)SnjîÏ¿A@ì0câ0£*þ9xÌæ°"ø2ªj¨ªª®¬ëð¯4(Ü0L@7£h7H̾/ÃHÞ7@¸ÄJKã©èbEË@ +H@3£pÇÈn»ÜÈ[,É¥íÓ92ó¾© l6ózJª"ªÈâxí»á@¥ £Ü9±Ê41!È ÑÈK¶#Á°n¨$s;¿o[0Ù KXÚ:±a:P®Xô2C{,`áXl KcÂ3²ó²L1+.Í,â'4MLÌÜÍÁ*$ÌüÊSÌô§Ï¡þ«¸XØ!m3Oá QX²ÓD²4HùHµ_T¹JÚÔÓA?qiGÔyT#IýF2é"'g¤«¸L!´ÒÜ`S+õoOa½Æ@®&â&K&"¸¢mèùÙ5\Û + e0Û¥¸¯ä|O®â# CHáRçlË_¸½ùH²wþ£aÌ©l·³¦²§"R»^[®n*g!aXA]Ì`éY0npî7Vì>0¹cX£ ä0ðá n\òQÕ3ødsljÓð}PcÓÕ`6¹QÅo¢°¼Ø" íÛ`QÂÕC(Ù Î@à7u®Å0Éâ|q»¿®K0úIþ³' ÁÂÎ+1{õßð9ãþ21½xQÒwãÓÓÐï9r<*åÃk¤9b9 PľóíÀP26àÀܾC<ï +â×7ÅTͳըhDCèÙ +,< 5¾r^ Ó³Âa) ð¦ÂToáÐ<^úqñÉ9Cý osT¹wNTA ÒCtbáêÅn'4å¼GL +pn9A¨ /bÎìÐ4ÓÓ¢5BtùTÙ¾Æã«ÒòP£reÌÁ»3ÞÒà ±ë¼UX¡¢B' ÁS^ËéÄ/-æªW ñ«×¡µc%¾ +5¤ÊXÙ( +]¡²x²îjAͪ5f±±¤«´^¤onL6¤fÅ1ÄÔô 0àCW4»6â18:+Øs+pG±½È©Jæ*dri"°hVäÇ&6L´13Ù'Ù(ÂÕ9,yÊÖÅæ$¥:6òà ´¦dufÒ)°ªáÕ j Iû1aÈ:¥µ +±fuLm¯-´ +Q¦ìÓË%OÅ9r¡$YIK)®ÅúØiäÅdM&<@ÁñVó`2»e _H "¤r0(4V ÁÂv3Åâ¬Vã$8Ç 2Hþt¬a¢²·¶ør]j"¼*¨XïPmWOd `Þc«õdX;"[í&w±5M©«@hDصÛBÛ+| V +;Ìk¨2®Â»òQgÔÅ"תz#ÅÐÊz~h=à&ÑÐ¥G˦GÎ5±ÆÓ +äO´´ñmÃ'e2'³f^ý4Löª E±M7³TsA·rõ«°êqWÅMR^¨\²:U[;æS ¸Ç»úÛ¸nmäýP*&Ûúñ2à k50JÈÅ× ëá{1s:çNÞë¡'¯yÕ®üe*C¶_ E¾r Ƴ É¢Ap` Ðïahq§(Çd[J,*¦cÜÂÑú¼fN®«Wï\5u®\8Æ¡N;Ä&!-¼ú{£dã?¢Â1j¡bY`äKóö=v~³·Ó`s;Y±³PÒ!iìs´´Bß&~ÈY. ¸-Ëôm{¹ ÉÔe#Ô> +æãÔæÁrÀ6¼wçN)³þmËHJ²æpÜUz±Vjõ_ÚYgV+·ä,jûvÖHÉNj%j;¶²Ù©ÕàE3UéÖ7þÛTEËnE»]kµwçspã5KÁ:÷Fe¶âI+5* N&Ë´ÆÝÒÆo+OWï2azV%fÁ¼_Ó|÷Zl)UÄjæÉ~ÞÍE©µ\ +õÓÁMlUâÊùJaRlo\¼fùÚßsX(¬½glõ®¼s{0Ê QÉqΡ¡`8Gå:AÄ Ë!F£ e*ït¦ÏÚç¡+ÉwR="YIôAÚ,ybAÅ<!Ô9ßg3!3GF;ð±Ä;PñâÇÁª6Bãï¶e'éa-*]DBçfÖoÛeÖ§ðbðÏcßé¢Bàg=ð°(í½½[õr)|·¯µÐþüeoÇ#Ý,¿è1éðEûÂx`ïê<Røñ:cÐMN=¾«ë5«ò2á4Ñ~oLý +×oZ> í¶ji¯¤ÑÉ(ÐB«®ØüϤxÅ| $j¦´b6ä< +Þ&/ÚºIhÔ n$òç©|ÀËþ¤ÅË©ÊÉü° è¤êæ ¥P1 ¢ íGIæIê#iî)ù/ÒõzeµÃÒ + +p*p¥¢o +>º.¨«¬»æQe¹©J. êV¥©nØËD Pç´ÑÍ Äh9éÖ9èHR`nCDw/¾ÂCÒHÆîÞ¢B +endstream +endobj +376 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +380 0 obj +<< +/Length 2607 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢0'EÒ¡* ¡AÆ\4Ti´ñ ©%)ã9ÜPDeâáìb3E#)Ðêr7Å4J4#¥CAQhG Ø«b½N½`±B¤ÎÃ.R¦À¡APÐeNa¤Æa:Mæá +Pärv\½ §SÐ@rºÝõí(iávÓL¶F³À³§#xÒfïqÃæsóIÌ@móÌ&s(¸@IðxܵãÜ!cÔϸÒ7xîÖÀPöÁ2<ã¸<£$#0D6=c*ö¢¨â2¡l ÛMÊ\)L°P!¹ @Ê+ÀðHî.àRæD¬RØ Á°j $ñ£t²©£ ãZ×ı;¦Áh¶±¤lÉG($wü£Ä#Iô¥A¸\ÆÊÔèÜ1µ-[ä¿Á �© +&Ò¬¬*ÒÄ(*ú[Jª¨-RB·.ÄÖ7¼ájè3-Á Pí´Í¯¨4½%°jê¢ØLLöÒp]R¬<pÞMc,} ATæÀQå¥6ÚãkÒý$Á.xq̵`ÔÁD+¢ø!b ,p©66s$¢Ü7WduzÞ÷Ȧ* +B¨*N°¤adaP² +¥MT-+UXEà/áâ`'x¥^)u+Ó*ª®ëÁeTa¥JËd +jÄäupócÒ8P£va;\hu K±+dG ÙÍ æ;8P 0}å9^Z)=ïæÐB@ÜãìB¹Ë � Ï,'ièåȧÛûàóíá jøt àq«t¯:«N° »>ÖD3¨[УvÊT¥Í,¸el)ǹ»^Ë|oã )ɧ÷˾O£[³s|ïyèÈ<úðvëð @2Cî7>Ìó@ñÃ#/7p¾Åù<sÐ÷oM\Ûs!ôÓ *T`àÊ·â(s@FâÀ ñÅ5ÃAÐuÔ¼¹¢ô ìi.)Å&ôϰFK 2ÂxgÐa»¶¨Êc.CïQÌä{`D +,.±¹7Fì!¬70YÀóʹõ_DËPhHÑJÐôOmzd«fÚKKi=_¤¿Ñ4ª Ý&¼f}!µp§s2`IùÓ;Å P£s;á¤ô·xjÍ a|Ø2¡wg°6!¤µCºK ù_§["$QB)ÀÐ.ÈúºÖlQ¢BÅÉa"νYëµ÷pÁjYBh;̦úÎluºIÁeÌ»¬HbÆÁ#t«9Þé0C¨QJS|©!höpÑ2CË@³:sÎ:Ñ«A«, ;e0I::ä8 ¤Ïnò6Lt´7§;#"ģ̵ò9£¸~Úp_ A8pf«åP§8Ã&»^Fë²RèÚÂøD `b +"8Of$®§znÑfm1)ðK娫xjq¨ª²5®ZµKêà_ % ÚO#@¢ +j¨çÀT `± TjaWBhSõÚ¼ÔïÎnzÕýXn mo¨ôÄ)¯VXAeà´¸Zs,-oU®¬5ça«_$!×pj|5!¼JÕ`wfQ©³®UºÌg¦RªÔ[r.ô¼ÇEÅÌ;T0ëÅ fÏ"Z¦22Ò×&hM¥4í6*SÎzC ylëÆ¶¶Úæ¢?G¼âµk/'Á¡@Øh¡;VÏ9ÙæîÄ Ô!÷¸Q +y¸i+ä°8fË$bî²j|må·IÙ`'=и1°Îwd>Á=$z/9¢4 ¨`æxuçðå(¥£¢ÝÂfJX©e6l§ +¨21F=³òÍs3hª½X«5jÛÝîºÒ´Á]Õ9U C¨uA¬!¸¤²¸&àF_ªNq&*ÅÈÅ6cyØÞºº[s" �úV!`.U*¨":oãËÍHÇãL5M:à]u!»;FÀ¨¦Wd)·6&È«r®| +õdSÙd=Ï1¿¼ÆÑ¥¯»ÕÁt2£> Ò±JÀjÑ!3ro[×îw°uìËXSÍþ½'¸Óa0ÜÍLÿ=Û´¸·Æ 0:m@oø»·³z0:ÕtM EÀá eà.#" :q¸«ãã(¼æÛÒâ¨ÏYPhXÎT¡ÝÔ& úùBrr T(6(êºÉ@i¨}§°÷DGv÷o4¸aVS[N«5Åã¹}±{¢\ïùzÕ³y`{µ[¶cW¬ À ¤!²îjÁiÚ;xð´!Ñî§«jV}ÍD¡ðìÊ©£ ¢çR!=RälsÁ«[˦ñ <Ť£ÞdjÉùfup®»³M©æýdÕÈJc-9raGó8Úb÷ +K¾úð }à_ + ^¡¡¦-ND\¯.k!-¾§²p½Â C §ù+åKQbgÚ3QyÂÏôµ7 hÍ!¥j£Wu»&°j¾¿8Ó1£w[7 Å*TP¬û´´M¢s&âW&覬6ç*'mä@§^ä¢úF4ÿ~t«Z¼B]Ë^dà ² + Ü P æðB à® Ð +>ÜH,M¦°,- j7îr¥c$JR#¢uþBÂäIVcG)vÊ,ÀÖ©6ÀÒP¶îJD> @lˤ& +åp~Z DÂp%öÆ&_ +gÀBðèÂBpLÚÊ&ß ®òÁ'¢ÁRi%¶4î'Çþ`?DD° Ð6çz Fð°D`êcBX Úq¨Dñ¢B +endstream +endobj +381 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +383 0 obj +<< +/Length 2329 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* BapÐP´b7Æ#:@b5ÂÈáÂT§% ÈÂm2§)àÈl7 +Säi8 &óp¦F0ªý2'N ´¥l0$ ïd³E%CU$ÂÁ*(ÌRµ5° +g)Òf4ÝCA@v0»cy@a¦ Öe<³yÜtz\@ÐqÇd+¹=I³1gåç´½sK(Ç{UéT r7<#Ïj 3ÍÃyÜÒ7íøÈ2 +ÒøÜûò9 £77ãÞ:³lã!Ó¦»AHêºí:ÄP+ê)Áªxªk¤2µp@1Âcpè!o»pÝ6ÃKêÚ6Ãpê6KX@Þ¶cJѾðÀæ:><9¯Ê*²Àhª1p¯»/hQµ8£êàL£ê6B²@Ðý@þÂä9Lã£,ÒÔ¸á¨Ƨ$LÁhd§°líPÆ0£¸Ð4cD¦ â(àÌÃs 9Kú*TLK +£©å!@ß4äQ£ÂÕU®,1 ò �fúAR4j Ã|*:Ù£%®À[Q¾ôpqrÜ!D_fCµwÕõ8È«ë ½_£5°fÕyg¾â*OcÍFÚ(É<S´øØÛOPÅF8M·n �ÚQðAj>ë§K2ÞVP´;Òõàµ~V!8.äTxØïH°^@ûÉcÂ3ǯVTUÈ«èRì¿iQhì9Ý«Oú ¢PÛ »EBª\jîmgR+ÿ �Õì¹Ï©fñå§»íLòÐåØ`"h£Áª¤`jģ¢LÇô>¹Ìd'M}-#¨ä7Jsñº ©±!pí1zPÔ¸Â8eA/pÛvB³(éßBàß·ÕþH7k¥&gZî¾2ï6òs½#MÑsÝ/NI¢,v¦Mé:GZìÂ#µCÅEܰ°p +ðaÌ¢ðÌîKk¡¹ö¼°A!LyN<£Þiu`Ü:å·Ì¨W ¡|%P²xW Èl¤òÙ u0 h£Ô®}¤¢8 àkA|"PB E 1d&¹òçâ£: +` ÎÁÏá@1¦,¹Bì^|^øEcóË x \ /t tFALN*Åx³Õ0 ~MQ¶4*:zO $)@îA(aÈBÌÕå9N/i'Ë< +xÒ¤7¢´É/¥Ø(FóÊpåÔ^`á@ÆL¢ÛLGjeÈÓ*§ Ú B¬è0¡$(ÁlË¥e·2é¢.0¶Gé/¥éÒ'á[Ë=UBO>åb¤wrÃKc@'óa PÊO¬^yÈ#жçK°*î¶vÊm(m>3õ5ð@Szq7Ç ÀE +aP)Ô䯤¡|)R¨°ÂxN4èEâ +(a2ÀÈÂk# &´¦ÒÚ^à t :oNiÛoÒgîñL5í) ÜL¢#;å µPÜ\#©u.ååîÇ£aÁ#f(ÆÜ¹e< ùáÇÀtÁÌϯÅv&£Xk²OHÑ �}fÒRIx¹&só~¤ç9äy¬IÕ.¶ÅÊÒ +õ3V=¹ËbÝ +¼ÿD(O½]«å1ÕêSnU.Ï*j»H 6h:¦0A>¨c|iÌ![( ÿ>¨(7 Ǹ_çÞÐ@âàt`æ46[Q +í ¦GW¬4btÉÌq ±-¡Vsè\sW(¾í¼ +ít4æå(T$InOTÛ=w²öÐ||}Þ»ò¨E}h>¸:ûϳñ´-ÿÜ4®ÿc@ÀäpÌÄ´IJà4×&ÆMhß Á§ñÐ!Ï ¤Ù2ÁÂé ì4#y2¼Ò; ñ ë¢$¢¤S;J©e.¦ � +ê4¦ÁRgup° $ ÄB5Áy%¿á Ь¢òÿ!6¢i8ÙL=ÙDébàxDÊÓÚ¹Gêð«øÌR �lWè¬KÿMRÍ9h ó°nOÅÏ<W9¿R4ÿµiNð¨e¨· cFt}oºSØI\ +ÍÕh5é8άÐaÕµ!¸.®ª »©,e¶éýJs9â/Pë=Ê3R³T3FÎ(f>¹=W ËÑÆô]nÓUÈæÜzª&¥qÉþU\(ËtÊûCJþ¡2Ý=lÐ¥³êÝïi*ÒÆTï áμ$SÊ[Ý÷¬ü9¾u~¥ÐjMÅ¢îóöØñÅæMY±®¾°Qò7G8ëhÉÀÑGCsçäfd´°çpÀ2 gtÌÉ4GÀ hî2Ÿ[\üó½Ã±é,~ôÄÏiKâ¿-_änÇþ£áì>µo¼9̨ÖC(ßSrèÝáLÊNêÁßà¯CËpk/Aãi+ÃÅ×p2y0phö5%Î}n ¯Òà(¥N[´Cª ¸ì2ý·sð«$wäÛ^§"C >«!¸°A +endstream +endobj +384 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +386 0 obj +<< +/Length 2714 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1Î¥BT8Âá ¡'¦ctoKFIÜPDF#YØÄf5 + +äÒùS*å0PØ "y¤DÐè´Ê¥n)±K«1°¸q\ËêµPÃ\*LÁSka²ÙÇó)ÌÆr4y»D£¤p¨d:!ÃÅ¡µ\@6ñÙ.V\0Úf²ÃÎ6Í"Ìú×m·Ünw[½òüDt§3 Ê 4Ä3)¸è :þ9Ù©1Ì'# Þ;Ã(ä5ìdá¨rÃ"¹aÌ«A«Ã»è7>o«Z:=££Ô7§a P3D©ðèú@ ,.8Á +F©³ðý?ö2 " ÕÂÈd¤ª b6¤ ã¹)£ £kT4¯èÄ<ð$جJKj1²zƪ,´:"î8?/ØÈ.àS"Èè+e3)a¸\\Ø3IðÌ:ÃVÖÂ6 r4=/Æò¼ã@Âõ Ïàý/@9au ¢Ä°Êz~Å*Lkß΢*8®Xi ³Lⱪ +C(è:Cpç¶-Û"õ³t7s|0nXdx*Eà8>ôµ' £¨æ÷Vu¡Pä4ÏCÞ8CxÆñ´¯:ño#ÍWLtck°ÅmZ1uÒ¸Ils)a3*¿c³áÑxÙ±D@OniÅÔËY[ Â*ÛÛêF,Áphâ+NB»8NMTë;Ï/äù?Uøu ©ÌBF©²a¬ $w,sãÌèbYAÔ¶-°' Â8RÎ6¦#Z±.*áèiok6/¡ØËÓ´3Q-µ» kLöݵ[ðkDÐ÷#)ÆÓ{Ânpé¨ ó©±»6Ð"í[`"ÀhQaO:òïf=sà¡DH÷²0ø ãZ6£°Ê6¸Ò7ûÕ =³È2Ãê6=þ¸ì4àoßë½vsV7ù`ÊjÃ(!slw8T^U+Q}î@¨ú{äÉî#äÅ´ÞN¨UHn!¥4æ¥w¸ ÌØA*Ñ«?ÖThw!ÉT´×ÿ02@èÍàÞ{×ú5yðÄyÏaï> |°öS4@¶Â·Ü ÃYF 6B8JÃa<Bª*>Äp +oyèâ=gø8nU0à8PÆ¿áýyà+¼÷¢ÏSÏ &KôWx Á¥äCö¡* Ù\· ÂÞâC1K¯5ãQÕY«=h¾£X7.A8CÕúÁh`¡tuÔ»x5Âë%Âú=ö9 !êElO°¸Lzg,NBÉ ³_EmÈÕcYM4@¡öNÊK+,^ªDÒÁh0ãYÃ"îD@dÞÊCZMÒ"é^û ¯2´´ÿR%Æâ£S(Ádl-\$ê +]Km²þ`«6¢TTj`äéÒß»]XàÝe®A +çp¼£¼_ÛÃnªâc+°f¸Éu+LýÀ1òÄ¡. +J¸,ã +\fóNÉ:ÖÃBG&$¿7>Ûγd¤4» +Nx =©ÜãäÏ<{U½ç=þk´eÚV +ÐëòxHö¶¾k(gîÐ1ª*ÖÌA¤ª.!¡Èr ~`¡ê!ÊÀÓAmgÐu÷&¨ªIìBBîy¡ôB×ín®-$þ×ÐÂþTÑÓn¹¸$%Ö»eRRÈp5E«+£®uî»%Êóo-5k ¡/Ü.}ßE¼±ìÄMòTaMg'd~µ¾@SÙ1?Éó&KQµ%Íê_S:RRM;pkëÍÕÇ](iyRéQú§I*ºa5h9ÞöÏê§a-ÈÊý9eôVâòÝ|½vEß!Ì. +!ÞÂØq �¤[ºïoîn½¬ÄÇ"µ9 e+ÊP@þ#È?Ö bSÞÓI°& bf,åeõnû˺y-!çLdì®JS®+áiñsyå"ÂfEu¥Ö®Wbí)í/ê#f<çfÖ2Aé³êõGOim>XwcE¾ É2¼k^¡Ì8ÓÙk¨aѵÔëÐV© ¶ò¬ËæbL´æÁï½(¥eÏj"Àô¿à'cÕ T²Ú,ä«hcþ¥R1b1YÄêtÕ¯B"³´§ïú¡-É8ßÀ6PÎYs'})íy^+Ï*¯xy,âþÌËù/0¾5ÈI±[Äç#keÓDpàA%«MFLÙCØ)bm²ù½oÙulÓæ]JÍç´2Ü5=¨pÎVì×¶g½ÞÏ%0Ï®qfåÓ® j D¶¡ä&0dr®ýÙQ×IH)I +&ÒíJÌ5-+=½Ýû3N^#tæipZwÜA®¹~pq*näë_!í÷nè W£ E¶©ô®ªÒ«±v·ôÃzýÑ=ùÐÉ X¡ÐøêÃxm?6ðü]O¾ä®¾WËÜ7~Ü;µÉaϼpæ~ ÁÖÈzP`B3Ç$µ_¥{^øsª^×FUQ72a^/Æøÿ#äÚo?1ÀÀú|ÝíEèó·ylü±þ'fÐÞäx½^¸=VüE4Ào^»h¼úômÁ(|ÇÚ Ïú²ôK}ÚýÇZ¥8=MJªÑ-À(òÀ¬ ñh¼$<=ÀÊÄÀÒzãÜÒ¼L,ìmèJ^%Î$¼o~ÈlðØB8ro8ì8Ψ½<òDø+}gú@Zmö¢²¯òÂIFé +é`. + +RB +(åë=`è@êRE <àľ ¼{'¶=åæ �¼&.JjÈû¨$pè*ìlÐ}¬%ÉFH ¦ pZs+¦¨Îf +´D>`'¾°ÄD$à yrïk%<õpÌî Lè*¨`r3Û®±WËlwNrb °¤ðîÐ.0 hÚ +,¢|^p×E*CàÂyèâ ÀÌý@Ú¶$8#ó +Üd²Ëò} Éå`Âd©)N$ À ` +endstream +endobj +387 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +389 0 obj +<< +/Length 2388 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* BapÐU_ÄéÃðÖ5 ÆCh ©&)ã9àPDPGÉàÄgV§C©ÈÜsÑ(ÐR4Wb8´"3GôêõQ4 + +(Âp8 &3 ÐÒo7 §SÐ@r¹Ýt%BT 4¶cÈÞc2Î{ÐÐi9è·'3 Ê. Tr5&ÿL©Ô0}X]X #!pÚ=_U;ù Í¢Ô.ÛmãAmºÜÖÑ Ë¨7n/®eúÀ¢ê@¨B<áº8¤¼ +^,£ +âh¾!âh B(*¢hXB¢ø",AÄ1J$Ðø$"`#Åа""«Åå¯sþ°j60Âb ¤ ò¦Ö +¢©! IKΫ)!°fÄ+I+Âñ¬Ï4õ¡)JBx ¨!@<!@¶ H¦¼¨²ê6ª0jªªé l«ÜÕ<K(ò2bÓ8=#r1CHàÏ4"ö?Ì �¨ Z±I <!¼Òá@Oç +S°$ÐV$¼ ®ÊØ¡CgXÍØÜÓZ£¢x öún² �4à Þ;ÜÌ£Bß2#îÓ£`Ê0·n à^Ã3L6÷@1£ èÐ]£MìØ]ì¥LÉKHp¿ÉòEyAd,×=Óu{d0´,»2ͳ¬þÎEñzî 0§Ç%XÍ@ÇQ #-·bhFEb?R2ô-Ì©× ,±A¿`#lÌf¡ �á£8ªjè^¹h·V`à{K°Lë(97¹sCmCæHÕRÄ&"cz¤¿¼@ 0ð¶f9'ØnúÓÃAQTv¾(*W%$£a ksUÍw üÿC·UHÎ¥¼bá@¦8ºÆÞ_wGF7#`@23£@ÒC¨Æº5îßcEèÚ·:0èàëÃ~Álw°ç³2l¨í꬯û³Y³@Ën"mÑ»52×Kªèî$ÊSnpàS!dh:,Ö³(S8Môã8äAÏVÏã1hÛ¹jÏ$6@CkÀ/¯B@rñÏ +ºRÀ 'óL¼#f ¦Ó#*nÍ3èûø<ä!¡MQj$ óª£Nª-*ÕJD"çSqIÀR]Ú /¤¦*Ã`yè)èvýL±3FqÖ(½¡ØØ Òm ±ú_.%k·Ãa:M0E3¬v 6-`àïâa= +pöðæ|C)óIGÕrëá +J¬Á*Øà[¶@ÑÖ¹È(g!Ü*0Ù\p¢9qf8n8¢eLÉ0BùAæc¯i«3AÏódû Þß1E0¦H SIrªÎ.+@¦ð0N ÉPB)uçRJÅi.I¡TÀÞzÉõ->ÊIG¬³©õB¨ÙT°rÎ7Yn è³ð$e³þùß»]Ë2XôÊ#ëF!ù2x{ -=\àT:Ï é?c˨;¿C~pi¹Æoïmõ:øà,*¥¡®D`ÌÍDX=ØK$ \7%! W©Q(W]RuVÇ,Êà7¹Òg7Ûu?1ôÔHæØ!¦+ùy¯°®Ñ0I +t½°èXXbðJµU6@Ëåd ιfdräÅ»ËÚç¡{¢>î:,ë(ËM1F¯omT¤:y.öÜÃ(Ù HãÆ°¾ÇuÊÿÍ[K¼ØÚZ÷iÙ|F§ +¼DFɰFF¡Nî+L»-C;F$Å!Ë»á¦ÞX[b-×ÚÂsà<-¹µú¤|tÚú20ö¸"¥¾Ur$øoùHPéÉh°ÕÕ¡¥SJÓDc.ÊÇQ«-o"ñÄIX²=²hðÕ5X~B]ÛG¤SЪðnG{\è&% Ñ`°i'´÷,ø¼±d{sçÈúcð~¨Ô!HôuÑõ`§/×j^nøw¯°|æÎľtç|ñ# f-©9íJ(1=@Ò!iü/`S +a$'êV[:ä× �<Ú3Ifz*꨻ÆÑG:*épG¬7A¦<&8°iuK¦zbé½;)ÁÁ§Q)GOSeÄõ]Õªù¤àP �Ú¦ 9¸ï¹öôJÛUzû7[ñJAk(à¤t¾ØÁ;dAÖÎevÓ¬]Àgzú\¹ mÆ\Ü<mÁP[f.®],X+ä9íªµÃ߯V ºù³hgcÖÎ5¹U³ +!ÅÔ°ï%ÔClkÓÐS,Ü袹 Vñò_&¹9d.#¡ÎÃNÏFsY³!ÂjÒ8Úþõz¬%ÈV佨õíò¯Ë5;uÍ4¹Zm &÷ïjæ±ò Q 1c¹el$srÄmÌu¾ç]ô0.ví¸[Ý^êèÂ¥¸A9;8MqûVw1ßàÌoúÝÖ~Ïáý·!kW$Ú+^#A^Ío:é¨&^ÆB¼ç7xÖtB®7Ý#Ø üZ +0WµÐßìôdòp +?Äl8opöãúb)Ej +¢(:,Z£éØÆHÊÆT%NÁ¥TÖ¬ì1@j#À÷MȨúÉLÚé¯Éé8l¤¯*¿äT +endstream +endobj +390 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +392 0 obj +<< +/Length 2864 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)õ¤Ì8"¨áìb33¼æs¦kpÐPe9MÆ3)ÌSC¢ÁHÔÚL2]¨Årl@7©×¬{0 :]O%sI¸Èo;ÁH°@E<NM6 çªÖkc¡Dë²&áNf9p) Tb4©Ãq¨æ¢T"KF (×É¥òTR,IÄB¦S$ÉÜ^*Ï¥Ð20ÎÈø\$Òȳ-Pd-Ë`<BûÔ*<âH&¬:*a ¢pê «+ +lJ¯ÀÐ:nÏAQHc®,ó +1CHà: #xÝ 1(3¥1è¼@"ÈC(2Á°h£ë6;AÈ,á@®A# °¸ ®2HælèÚü7ÎIðÂ7à8 HÆ0ÇðO5£Jí+N;ê«H fA³¬» PZ±;nêÍP#(\°ãC<§aº|6ã Â6RjMf7ô£#lÂN;Abï,)sýS;ãÞ<xåV9H Z)ÁÂ[-AÃNÓép`çÔipecÔáDÊ7³L×70 -{;Í# Ù4c¥ ·WLfW5Ý{gZ Z¹IÜ»uÝ·å5ÞMí|_C¤ÑJI¯pT4©d»²kÕ5\~ÕØV2®ó<×J?kd5´ÅwHÃIô4x7W£HR ýOh~mn6ò\W"i, 38¡ �d¡¢é¦«K"~0̸֣!ºüÏqÄu@éPÛÆ? U¸.;vHîda@ï¹[¦ÈÅHn¡Ó|UÂíî@©Uµg°Z#4à4MTn纰ÿ<S@)â0¾" "'â,5ÕLü4L,ï5 �¿&ê°3½þ:ͳΠ] àAzåïsàÂ<£#]ij/¯P«àõ4>GÝBeNï3-'&S8\@ÝÆ±Æµ\ +pªyË#¬áÁÁÝS¬åÆÇ ä B1¥. +¹®âÜëM;Õ¤hw ï@2%T´Ø+á`ë<?ÃL½Áª .ÉgÙÁbgIÅAÅã øm§6©`\ÓJBÄ 5è?'lîÓ¼wÁ`Ö-¦òC+o +`fªßJ ÆÃæ.é]:hQ&ÕF4|¾+ç¡õ>ÀÈñWdAk%ò¸%H3\lÝų O{«nT¥©l V'Φ/?Gìk yõ(ñT¦ä<~ÑU*ådUÎÐ+$½d Pb¶. ÷3Y+K8wáRyOiõ?¸È÷yáÉ<£ +éÝK08gT¶YY,R<±DÐþÌÙcdrùÅth\¡v/è¾+bü`N +#Hó¡3<Ð2¤'R Áß3áÚ(° £Î<SlÇ@ýOúÁ � #Ô3æóJW"9fTS¦y%NQnõ!¾7äv\ +A4ÈQ'FéS±O2àX¼])l ô¼xÏ=?µ#·ÌZë©M¡¹7²ñ Ëp1qÊ(Ô+R +aa¬3Pêi¬u Áö³5mb-i)¤Y NÉìi'ù!-¤¥nduÀÕÒ`ëí_¡ £óoX!{!Ô6&øÐÇ(¬¬¶¸6µ»¤tÔRpÞéL("cÜY)Æ2t²¥& f²áoonkþMFÉÙPßeä8b îH'@ÃcýMwÒÊYk0Üx¤28_kã¿wejVRÙdW\ñÀ§s/ ÜuÁû_7+ +¹[÷Ù^5%Þ(mv+L7ºk#p¹*çûÊ ®zÂL§áOÁ:<ñì'ìý^bp¥ºùÁ7±I/À@q³ tA±ÒcX{ì¾öaÔàªa®ié>'åXâ¶#jjá×Éq^kÌ4_pÙ!Ôu×8Q满*}P]}þy¦ï!ïhxHxüøVZ¡°3/ЮªÆ¢AÎÿ&¨kkU¶e=.äÍuî©![æÉ¹ÑöP©¶pk P¬ÃHgOÈH5¥°T>^fl#0RÚ=¨·\áy¥_xý§ðØZ$y¹:V@C%¨n0;sðİht»2ª±¶w. àf,ÕXºóëÔ`æôîhgÉê}®V).q&6ܾÐ@(!»¶òÞѺ9«èûqÄs õ +sEyâ:Dù2äbÚJ^:a Áó¾Aà �è6©¨à÷& á1ä«K=&¹TåhàÞÞåº~:õئÎ('Dæ.½Oz,;<û* ¢uíª0ThÒL$`ɽêg[2[tÛ7Míx¾Aâ ß'Çq-~ahÆä¢SodÇ2´ªOÓSÈÀ5£Ý&©ø~äÅ9îÔ ºrò^Ëé0&ÂñÚ,Rûù"óGÁJáH.OÝ;>îÝß¼wÌï»ß|ô·8ãO ã !ùW¢©T÷$t¸ªÓFþ i´¥dibF½È<ù@ �ª h«*t.JºãG �ï! n*é^\Õl<Jä^-Ö©¶ñªÀ×Ë(µ|ÿ/úÿðäÆÕ溴+F'kJVehÞ Óm¤(ÆìuÈ|ëücfmK¶%ÄXåÊj&zEààÛhN \/ZädjHâûËÄTl^' +°"0«îJ$_ ¨N �ñ»§^´Í¼Vا@øÉXàf©( ®¥§4d.â;@bÏD^ þ½ZQ'ÐêH®oºáã·¾ ªLT ¢º[ MúM« à +@ j~ +ôth Ïý õª*Ô!%.#4îèîd¬Îênði YO2Âþ ¬q©³MpO.ò@ô4mDÇü1Ï' �Bà÷÷ê*øj%¦Ï Ð82ÈÜEJ¦¼£: Èâôpî05ÂôV(k (²r&4Ñ,ѯ²@ ` +endstream +endobj +393 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +395 0 obj +<< +/Length 2382 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ¨Ì\8¥ ÆP¤0Ç@Tä.§g¨ÀPW&ÈâÀ T".wR<EÑhôèØÂ=Q Xjñ¬o0IeØkÍh m±ÖêD2Ìg#IÀèi7°4jAI +C¢( -ÐEÑá°æ¬8±W¬ÂÉ` É&ÓAR9Ü.W{Éût'3 Ê 4Ä3)¸è :Obª~t4wÌ °Þgç¬dÞ1£ ê9;ïðP0cú+ú©á@î4¾*0§¢mHé Óþ0Ã$LD/0Â4ÃVÁ¢p¢Ð6"jã Á¨l®&ë(QÃxä6-;R/Ðêó¾øè<øÞ3<pá'½8`Ò1É-@Üð<Rhß.xA �1*L¦² +Þ¸î¢ôë®Ë¶î¡d33Å2IS<É3ÄtÌ7#N1£eJôJ´±Ko<QN$.»õ¹<`Ì" ÔÖ©MܱLEÃ1qêH¨Øf®8K +±¹:Ò3« )£¤ÐH+\¥¶ SnÚ¢«7$®lHB¤½\CÎ;>£«¾9XÙNüQ;D#hÅL²\¯\(ØûBóî+Uã->tä`ü3°Ñ1Ó×)ʹSÙ,dµÓÏÊ9u30ÌxTÁPt*¾Þë$VÏ æX6~$l¼u¸RÉzèT³Qâø* ''ª +®üÉóhÝ`gúéÞÎ5³®¯â0 *bF¿°ìoPfáC@35KÏ-ícÚÔî `BGt3añZè bïÑ àmî¢+æóűÞ6ï¸ôB§IIA´§*Áó¦k'7½ºÂøª'o»ÿÁì[$(!Eô2Á@@7MÃ ËÆqÓ~ÕòC¦Ý7èÞGÝç´6âbø¤ Hæp¡hhÞñ"ÂùÍßÜú»>o*!¹´u_hS +*O ×B¸A Ð,&ÀBÈSC ÐÜÖ.Xe'éR¢¦eÙôkO°/ÂFBR á^ÂxVÁ5 ÈR ï!s{>¸ +ç D=AP!¹ð¥ +j>#*,/ÅØÝÁÜ;ÑIr»ÒPeëÅÁP&WBTj@ÝÄ_ao©eX +«7SléR ÓBOiR%§õÜA¹#-Í£Õ$È6+-ÎADà) ¶L)6«wsPJHyàXBtÀæ=½ ¢y%t,s +aͪË#Ëyg ¥ñ ÐZ¸1kCÏPò«eÊAÌÅ6D\Ä.³r¼&tI*ëÎ7Gö» áÜ(4I*ZJÄE8¨LHUJ¹JmFÏC¾¹OËt·"ö] F0µ± EË2aY0Ƨ&AJ+³Rk@s0 Ú3¦|Ð3J§g:çXÓ¬Ú.Ò/;ÍÝ&Z ¸OHpÊ'!3Ñ´N¦Ê?¨Tò"ÅS]S?ôX»j;TËqÚw'xô!ÓÙYa<Ró"JÊý«=p% *ä3DI1 ôº> &¶:àÙ �²ú55ðкn +0¤"£b TìÂ,1Öm%$fÁje¯Ñ[[Éo À¿W#q Ƽ¦SÊC;Ñ`ÀÍcæ@SÒ_k q R0 ÁV°Í`˯ ªG³W´÷açaä9¡Û^2À´KbÛÛJ³U¨¤a(¨qFÙM«i7|ÞN@Ý9Õ:¿Ë®v®êG£ÚÒ9V¶â@HÈínÍ¿sÒ5AÍùJN Ò¶¨áð[3 Ýn½, +\Iw ¡$'Ð2%%¸'ÑûQLV#¸M6©5qͱ ÆmÏsDi 2f§6ñtáÃkp'2¶ã¯H«QÉx7,NpçàAW#¦DÈÙ 'Ué%Y$UJ¸çd9+ ûísâ(vz/ «ç}C-÷AZAÕt(Ùª +Ià4ÐÒ +OAÍf&㵯2`àËd¬Áó;HÅ3&'¡Ë¨ ÑZ0ö¡BÜYn ·`ì0îìOëq à´]jJ,jö¥§QÔ Q©v¥¡´ê=Å}Õc lñêpÊÓ®¹{n6ø©fk¥ï³ ,\ñ#V0Íý](SjDj¾±/Qò.GÉ97á¥ÓLÌ£Û á¤®RHa<h:5ú¥OUa¤3Ù{÷¡ç¹ìñ$[¨tú ú«êÓS§Ú)EzèòêÎ~ÐSÓßõAÊOH£á,¼EFcÉBSðb˧Ԥ|O%Ûº?GSÀãß,<GÂÉ©3½~V,¿Å¦4â6H8kxêøä(YË<õ"86ÎYzfgM¤±&ïZõW}·}Vv®lÈSelãnúǶާkMÚð"fÙ2ókÛ´.!ø·tq®ç17 ¼9r^OÜ o¿Ï<Ý·i9,}¾oáÁ³ÉyN+åÈ'&×ÇÏ=ìÌ&¶£ÎÂOtOú¡|ù@éP¤f0×Ò«f~YÇv̶-û¿ú©waÚ~¸#l*Â:¨ÎéIª$Ì;/¼NïîLïÈMÎXìçÈN.ÔIJtò¢î +endstream +endobj +396 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +399 0 obj +<< +/Length 2435 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1'EÒ¡* BapÐPÄc. Äâtêf6(#xÌBT + Rf +ÃÜ\3FcQÀ r7ÎbÒÍq +§#)¸Æe9h`TZ%c²6:àoTRlÑÂcf + ¤q4XÒ⡪ lÈTäc:|m¬É3[=¦Ö2\ncA\_#n¤R¡PX*b¨ºúx£ªuªÕÐl6î¬VIÜQj¶FÆ<+§c9NCI¼ÝÒÆA¤p¨d:¼Ø²/ørÊ6Á¢Ü,« +ÆÎ¤mÆ +jó!Hr>ð¸@@Â8`Ò1/£í ã +2a �cxà<Ç£Dx:£Àé/CxÆ4Ä£(É ±h fa¨nÈ +"ÁnÔ±ÂÊ-@î4D\ÃSXÜ2 ã¸@4ÑôÞÃCê3Ìñ/Êò̶©ápþKÏò¼kù4'ð; #$¤AHn4ò}6Ç Ø60ar#J§á¬ÌÑ©:α¨ý)5O¤íAD%Ðáű=I68@7Áå_UB0Þ9EÃpA)Mì:/`Y"ÈòL=S¡jê2Ð`UXVJE¡uª\?º]xÂsL8 4Ý 1neàròÂ4;hEÛ^oÜ5Vk[|6QþB<\v]%à·%½ Ï6M£eâ¹]À7zvYº|9,F¡Õ T_A+~§>"¼Mm`xVbùäxÔ;Oaª}?ðÝÕVSeì@71½«kÙõ%±iΣÇ$°ïAgàÞ<1eÛ¡Kó[ÌíMsNñmºNÏ éTÍc\ÊKø¦,a¨hÑr>ÏÞÌíòó +å¶²Fr£!»"=ïæú¾ò¯0§)OêÅyÁ¢éz³ÐýOV6òÊ8ý©h"ÜUwL=8 +v<3`<uYT Ã<Ûgåõdý@0s¼óãDG7Yyããòñ±îERÈXȸÓÀc Ô2'ιk¿t*)F8£SÃ>¸:ªtPan¹Ê×ïÚ_zoUàé^2±å6Ø~éLoY.´CBzxa¯é>µ ë)ÄêR¤OÊ©W+% jèj +*HÞs~FÁìBåô:PäKºÆødP ÊAnñ¤¨«$]à;:¬ö± ´ÂBÁD© ÉPÔ¤²/.2H7µi*Y1̱Âd¸c.E4+ÇÎû1aLÍq2¨óÔ}ð$ÊGóª9|G'öÙHCA|" ¥^sz*¾#ªPbQÝ@Ä=GÈñé-ç°ºrò^ËéQÁSUtcfJ3 $¢ÇoÒ¾YÁ@Lað¨(N\hÆÚ ÜÌD)¤#i>çÁ"-å~)gµ8^©Â^!`QAN Ç%` +Bí;'\©Ís·çÀ1äv~CxyCÕ-s÷3à|zíNúzÑ=Á¡£nb=¥qO¦98B¥ÔûVÑ +#gÈ¢¤æQ}¥p¨²8GI©§]rG|fó&æ Ò +MIéE)®×>ùáV{¥´ÆPlMo0ËËb^zêØÎêäÑèñÉ_QAjEa5KXä-JÂqd,ùÙVj<b5À¶¥fr¬EÐNÚòìyo0¤àÚJõe0àgkm!rÍ]i.´På×f%Ë63o[¬ ¿2FTÙüeÆ*o34fÀµOºõ>ã>`µÝ8wc«MM=¥Ú¶%k¤äk7¡Ü¾[ ö¸õÆHxÚQ;lmØQ¸¤fæ¯[«w å%·ÄÈÜwNì/w£Ç¶K-,PäScCpz2pRl[¿±àÃ+»FÒí;ç`l¥Ëx¾¦ÓÂ!l¥7«ÄðR80êàÛíe2Áh¦"ª´kµ>fW¤5ÜÊÚÕC©MmõĽW0Al°Â£w\æNú +6fÃÔx($ÝÅJoÈ|YQÎ-ºÙq<ËÏ¢U4ÏhÕ)vL«'åisª<ox4¾¸²ònmHyKè½ëHÄ8É¥h6Óc#ú{OÓMA$5s¢ø_0ÄTU5b"ñ¤ÊÐdè¨ãÅæ#-[(R08ô5³¦°¢¦ÌÚ£N*¢ÛRÃB@SaH'ÀL©¶Ñ'p ½@hUxLß§¢_½F{]¥FvÕ&1nyçªv®Ý¹2̽Vÿñ%Å8¶G(íüÖeÎÑ}°~& �CB× !éoÇì S ¨5<.Àµë,õg HwM2&èAÃF³xÚ<D¾râÕeöëÜ×ú´uõÃØRÞSI¾è +$OMå]uË<UAO°*KéýL;DÝWßÍ©züáG¦<u}Qàfì)×Ò˯R½»Àð6:iìkïUØSa'ÐnAºþ³ËÃÆÐðÈmìèÙÌ÷u>Ì Áñ^//H©ÏËvÆc1§p,þòbÇ_Ò H à® Âv§Ä®{Zf£ìGD¯%N Üþâÿ/î/ÿ +n#/·kmÄðGê(P,tÅ 'Ò + }eÚ9 +endstream +endobj +400 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +402 0 obj +<< +/Length 2507 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* B¡Aln3FâáØs"K !Rh +%ã +TÜ9)å U(O£ø¦c9ÍÁ¼Üe&|Ôà.Ñ(À¨¶68 ëèÍ^m8ZKåBATB(Êd¡$NUkyÅêø) Cxa²:0qAÀÞs4 7í¶ÄPs8Lf1¤Êd #qAç§?Üà ó¸´Þr2NB¿ o3bh´r0ÆJ½Âá¨Ú&EJÈ(P6 +ä0¡H¨5=Jøi{b2oó©húá¢Dz0Ä©Jú±¬¬Ã4Î3Ȥ bZx2 ðái7L~à¸cp@ä9NcèCÈ@í»¯3Äò<ËèÌÛ1OcÜÁh"FÊ<?°ú¸ üÀ°¢ +#AJX¬$¹0ÂpBÀ¯ `ûÃøò¼¦KÊêÌ´-B ¸ªHÓd»¯+ÜlÚ»4{õ1h4¦ø)dÃas!=K«º¯ÌP NJD©5STäÞÆD`®*ºÎ +Ìï<[Êð6ÌsdôJ\ÏKÊ R0Õ_@ÖU,ÉTA5\MÐõehEl â|ò HÆ4GîKæ£pÀc¨ä9£pé8bR#[GCxñb±tÚ¨YÐF²D3îÝ Ö¥÷Ù!hgÁ®üOÔ=QZ#¼ÇSÌÕU15 ØÖ=Ö +÷A§áHr 7sx2¸-Ódz¬ûBÑ´:ú¹gH©Å¡p@'»#ï¡eßJÈÛêaRó-RWx-¢(ö9eB¾±!kIO~èf¡ ãExðîRhÒðÞÒÛ«kðéFeã<d+¢ø)b& ¢*IªÌ ·hæÁ°®÷{:27+Q«àÅiÚu©ïzµ#Àp[`n»¾ó½Ù dïû"~r<¹¾"æ¢â¢MYª¾ f±MLéC(éy ÃE3Í/-®"¨÷A¾nÖ÷¶Ú~8 +úGÁµ½/uèúÃ>GÚ¹#`KÈcuN,Ü·WRÝYyIæ,¤ô +/zk-ëR¦ óÿ IùïÂÛK3|ÀÔ^a ÉEbý¡Có(äPhâ{DÕR7Ô£ pP7ápÀRÄ2ÉN¨d¨*ðPÕÀ_ +ÎqÏ:С*jAäMè½dÒÌ/øCC1 Á1`ÀG6ç\øLa0$Ü +<` '¤|'¥ç½@jIÊ >¤BÈeo"Ü1ÉÒEÚ^HpO¾4¦¨¥(âøK +aè ÑÒHÉ9*¤ì~ºÕÜë׺7R'p¿5øMI²p80tzt©}W°¶ÐÚÙLW!n¯W"²fBó26¤þ¬rztá¹PÐWqÙlLiOR ,AÁJT$Áo3 +á8"ÉðÂL!dc¾`L Ç@0£àʪ÷ áx%ÜQòræw, �Ð×pBçBÂñ>÷HlÉVǦPØt*¢¨S²¢·J`aµ@ÕIÃÀZ½é©Ð0Ô0:ú¿Ý²Ì6UÛÈ4y>%+CðHÙý',Ô×ÖK¨7ÒÙÚKw³MF4HxÇÊÚ£aÖR;¿«JºÏVSÙ঺RîrNÄã+`oö¤+{mñ*DqNh +íKôi2ER"p +¶A´«J<Wo ¹Ûøî²%ó),®éZ£ü2eºö¹&Û¹t« ?H¬ç[¤`*±ãq§ S E}¿Õ¦äj½aÒ¬$°BÂÍ£JïEÛP0xeÂ+¶ �/Ø©'©\^Îæ °uK ¦ÄÐ}κ¢é¢% ·ÌÉjQCÒysÁ 15ÕGµtÃip8Q÷Ú@](4øµ3í $ÔÌXä Lïûµ12¯«2ÉlÒõµP~JR@HCàÆFFÒ=@0rfµqü53YÔ·¨, 3î �<ØésuaÎe°·gzG&7QzH¿X4 w ÚÅèAAôÙmÑ¥Éɼü_40ÃjÇG¦3(gÆÒlòÎKª³ÄËÐu¯«áí|³nÁPäó=Z90Ç$ñÀʲ¤L¹`ܹ©Ü±wQÊVq[À'àÕòM¿vå«àÍ©-«'NPíÏÀfî7^Òv@ØÍ;;£Äï«fÓ*©Ü5]2axã^<b$¢BSF:&<[{zC¾"6ùes¦>Ùyv<¿B¶Ì0b]ô1fÀXøÂ`¾ÀAËÏðbÁº"¹WtÜuìò§¢Få,,!%=OE¨desàæÌ¦ÃØ~oÃBÜæ¦#Dݹýè~QB`E G0ó#8¬%u¯¯¤1HÉ%è%þ|÷}ðæñºIÌÇ9 è&°PzPy®P|Ì}±ýæWûã!R²îM·6Ðk##If¦B.¡hPl¥LìÒ½RL÷¸îê>(±,½ôµùF]#Þ}:õ"þ%¤±Ò%ÀÇÏä �ø¯ãüÌ ¶uMNuÊrFÅÄ«pm¸'àÚ¨ ¤|àÃfÊ´vàÆ `Î/ êÍêEîàä*Hn49¢ö9î:Ã*2k¬:2îÞrMÎ;ã ÌÚÀ@ã¨<·Åè@Ò§¾Ð×bü r@Ã)Ö¢48Ðî#d<#/éà«J\á*´R. c¸Úà ` +endstream +endobj +403 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +405 0 obj +<< +/Length 2469 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1N¥BT # C ÑÜ\8ÌE´áÒbT"M&`¡¸d4¤ÍByÐÐe9Í'3(°@W&È¥" LB%ÉÄA¬Al7/¦ãÐÊa2#ÈÈe3N¦Ã¥ºÌe +Jª1c +¤ÃAC(ØÄ`8Bë62&@®i7 çrÈÞc. +Ör +F¤BôTéÆO«×F +Mnº2¨ÂìSên1 &ówTÒl6Ä{é¸)¡ÑABÑÔ\4ÁpÄqIÕÉìBÆ5í³®2RÌñ¬áúÿÀ#|C¨æ4xÍ3Â9¬ +Ø6C¸\Þ³CB¡¢Fú#ê»ò9n +ØÂ6¬0ä£!¸h5£Æ9 #´ó½,ë>¸ISè«5 +ÂZå¤b¢¶6°Û7î +)Ádµ2¹,bà2cHÌ4¯ÈÇÃHÆÌ<ÌÊ<0P´0ò»7%4k×0Ìob÷¬_*M@ÙQ¼¸£Éý28è P' ì$2±! 0C0¶0C ÞK@ßA7È4MC3ésä¢uÈ`ùa²ùÁ¨f¯J)*¹]sBp">©¼/hr +QÈê90BÎËÍ,57@«¡ºFjps*ÙI<®*A#à8 °Ã#»£mPC¥¶îÖ-²û,àÛNãÙ9 ôq#8ËZD´ËE_WmN8X6@>È*^5Óå+Fv ªÁ¨ö@ÛaÁm²3ZúÑá¶óÔIq8sW>MsÝ7Xacä÷"ÖÍ{bÙ¶»rÝÒî48ËG¬®·.è»/ЮÖòøbé;AE¤a¨oE£I$§«v}£)h`m"H$«H& â>cû_äpù*!¢dïü[Á¾¹kÈ2~rrî¿£ézMÍt×PAc!áàoò¦!K>q<_Çò!&9â¬ÂüÀU©Ü~7úIð©ðÈ4#`Þ3ÁCxñêã¸A ¶õ%·ç ±Ç·}£cUÃ|8Ì©PòZ×Þ÷ý?ü70PZÝi>Øü)ç¶×Àa*öâhê)Ej-¤¦Y` +' +Q£Ð²>H ÅÕ$c¶kDP©~(´¡Z)b%µë2lnñ3U<bnN@Ì&ðäaA _qD0ÕTJÃHvC©üØ ò¦WJOQ°àå6U"¤ÒÓ]\-8)Èè¤bBmMéÅ?¯eð¾áMr ;åöbÑqu!ÂÃ" +1§pÌ'ãÈýO³6ë øÁÓ]hªSïÍSÌÜÃ`÷ =k`¤·Kwº÷Ââ &Ä4¡Ã³.Ô¼N¼Aü£©WJèT9Z2>3=²6e=/ Á ÝÆÀÜ£cªöu9DU8täø,äé¦Zëe-ÀçZóFi¥»Gl| +sºoÇ®:Ë%µY[¿'uá0Q!Ì+ú(0qܬW¦âú`¼]Éì¨^ÉG)üÇ&`£,g:¦Ý :[KéäÑ`¾ó¤Èb1¦^J¸h¢¥t 1Ú¥+PËP§K=ƯU ) åV¤§JNráï¾Æú¸d}`QÄÉVjs=Ó4ãCPÑÈF§Î]̶çíqçç7[á>§f5^«# nÑ¢ÅÙè +þ¤{a33ô= �EpÞt©$õrª.¥=F$EBh:*0´·²Ó 9V=;Y ]©y hè¬Ë.²,ÅÓ3VnÙË;g ¢×4y65"´¦¹»è] R2ÑøN¿9%à ¿ÁqL7·1¦ �³u$`ͼ2 +:gñ\`M¡8*ºÛ;Ôî»KT¯_U=¯7¤$BßÅØÐB/Ac)Ö]Aû}A7³áàÀc2µñ@TÅX°ÌÀgóKéâzfÞÝw×"f9(ÂoPòÂùg;¯\©äp¨ áÌÛ½Ã2ÎܧËsÐbAÏDRâvOd©æGêÎF#½ E¼)p«SOwÈÏ/±d*ãTO@¹Ë=½ _dÕtd5*^á-Géÿ;çCj'k]Õ®ùÐä<Z;!Üó a<§Z´ªí_¸uRÊ«öN~סË9l*¼¤âó²\=ÃlÜ_¯Ô!¸Åî½àï²ó÷£+îΪçí]KA:öJ¿WîÂtD0LÄávn,&nB4µ ¶*=GËÞg¡ªßPíÅ=U´×«Jj>Ù<×ß/î@Ôý¯g5)q +9(è?T=±Ê!V æ§Õ°ÅûA¿©%ÓõËc²|¹wsÒ´¸ïD ³îçÞ?ÝvWÑÚ`ȲmSÛ=o«wRÿ£×B0zO²NÊAKs¼Þ¥6z¥×êÎhù×5wq¾#ëçÆòv+ÌÎ:2®ö§Ú/JÈ÷Ô (ºÜfÜx¬* Ña¼:ÜÈ{Qoøáh\LâÅ>°(< bY>+Ãö9Äã1ÕÉüñÆÊþðbCÚé|¶= ¼{!)o£í«§]ÿ§É¡ÊbÊoá8rßð^6äõÞÀ(nf)©z0X¸Ò¬dÍ£mF³,âgµ \'Àà àà ê ÌÏôaÌú~ �Ñ" äpu¢ÿ¥mÞ?*س +.Ò¦.!f"ÙiBÞìôß)£MúUàÚàÜàD3Ð!N~ìyÊp<N $¸¢B +endstream +endobj +406 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +408 0 obj +<< +/Length 2308 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h([AÆ#:Ü\1ÐIpÀa +*MSäa6NSðd6C)ÌÆr4y¸SE£ÁHÃU§ZUnº0X`½Îm T4 «£1H]r0׿y2ÀÊc47QÐÐe çiÔà ´¢ìÎo¥Ã Ý4dtÚöFÄ(6e\æz håaoSU + +q°ÞwÎFK`ïò2zíËhÛ7HÜú Ü £$à¸h[Ø4 #8гI[L?«îùÂ#@7/¡hô¶ ð �zßÃl& +cÈæµ°s| �9>/ØîB TǬ¼VüÉÁf9 î$BÁ)LøÂ%èò&Í<¡áªHNãN hª= È«aª8*s P)-C¨ä7kúî¹*j,4º±A �Ø4c +ö¾¸¬Tm1F´":73 ƺÉñsm0#æ0ã,Ìã)4ª 8ÍÍ% O3µ<¢@©Qͨõ¹Ð0gDP¡ÀP!Ì0[FÔBä¶Aõý"ÀRU57Ó N#Á²`[Vâ¼=@®&âH$h' +²Å5)%ñÚàp¥+*°m=«¶òÅAPµÈ6% 70,x®'RL §£s©:¤üci.C'¦*ù=̺.ËÂô¾/×£ï9@UïLÛ4Ý:±aum¹o3¢åÌ4lÁ@Ê·'ø8¾%åùgXÖDIãux3>Q|b9ÈR @5²@0À|2¿#¼867Ľá �:ïcxÇY8&ïϺðh1)éµ2îí-+ZÚëæº®ëÍ_¨Òn;Ô1ÛÆö«Vô²«3·3 Ú¢æ-#>ùoSØ; #è:#g<ÞúbLª¹ªçº-+±½.ÏÌzíz³Èyé nE\AÒX<¤½?¤MK �±C¢."fÙ2T<BA©<`àPPkMy±|áZå\ùCxuoNà¼P\ ÁÂ:pM¢Áx2BHD0|.0ZÁ40þB¤~ Nf!ï«Pä Û ÐÀúCC±yp,¯(Nað 'ø¶e +ÊaAý6h¹É£nû|ÝÎ8x¶CÁk@nAñÅâ KÊ=HCØ02qä·ÈW0N êñY9 RÛØ[ðúH)&FÁ<exTÑl Ï6>@Å +Ï`O +r~DÏ Á1º%.rúZä\r®m^ È«q´6(ü À¨øÏ´}q«O3Y(c!çds^0a@( (hµ«Ü-à:MÏdzI&f·Ô®Äz+ÍàPùC#h0È{âØbñZÄõݨúAáÑ(·ÐÆå5 �0>"ã|²Î]h%ÖÃå(§i*S%ι«gr? HA ~§«ßsî~Ñ©> ÅL4Iuhi¯y5ÐzYBÑ-/^Rñ4æ Kµ5^ÍÀÉJCû)àá + ÉZ5-ôÉ¢×_ËÒ È¨Ä§ý p2VFÁP@ënnÁ䢤ym3®hü~b2æöTcqGÃ)fJ1ÕZÇÛ!9[M²É46>%DΦâ×ÛmV.¶©ÜËjlCªâ¾¾ú±CdMnd¼è(Ê{q±©"ÄGB¥=$è1òÌQG òÖúÈ$@,Z<³QAl¿Vé=¯«æ§§ÑZèCªmX ÷6ùù¾`éZ!ÐÐ.é°n²ã×(Ë{}.° ¢j D¢^ò¼aP)Ä£C½P|Qõ0 ¦B"À*Q =%P!"ƤÎTQ¯÷&ºKâd¨PÈ9"·+2QÊÕM3ÄwYzê®5µ/ñ°Fà¦úÊ|ÙlIá#5ß[æsyC48z*àp,Êñ£óZKÀc|z2bw}?'ÇxO¶{Ï·Ü0àM÷ª¤0_= +49lU,0ÖwÒ]C7ZLå9³Â0 HÛAl&õÑÔ9OP±-FEU!UûjäU¬¯µ;ZC_Tod$ÔªU]8§î5ÑMÉÞ±(ºÉJ39bʵØÊá2VNÕupÖí¯@dTóB×Ñl¢W2è ë©v.æÔpAuÙé{5ð¾Ï2s}6'²ÛH!I(ئ_u{ûc]±¤Ò ÍE⤼ØIǯÁ7dàÆè2Àn +8øPªÄ &ÝèµÂüdíåïÞbÒvwm5ß5^·k_gâ§[Æ»/ж[8Ú,ãkw µóè±ÖJ>o.<# êjrA¥Ê#÷/Cû®yÐøèêÖ TÔ5Ì)\z\è ¡Ú¤®îriõ§ÞrT6xøZå%çhúzý<v �|T ó>óèCí4WÅ?Æj_¡Øôõåýúª_¨ÞÌ|z× kÆ÷Ï&qHè~ +|!9 NØG,.WI?È! +endstream +endobj +409 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +411 0 obj +<< +/Length 2399 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢1'EÒ¡* ¡AhÄa.FâáÒbT"M&`©ÁÒt9ÂFÂÑÎv6âÀÊc4"¡ Ê 6MÇS1Æt:§"àË a9ïB¼Èe +h`TN.pºÈ([O)U¼ü»EWã Î( 'y¡¨ÂÙn¸&[ ÞíuÁÝ.ÂYæw0ØqfSÁÐÊnÇ8lNTKt22¥nO©®×ì#!mg´Eã~´ês2:´^¿g+2êüQ½pô-A@ªø:CHÜçCpÂ6 Ÿ �ÀrÙa rc|æ5¬ká-l2 ,S°®.î £¦ã¹! �©Nîà +ø@ãj .[·tÁÃHÞ÷é(xÍ)8£È\ 1S2ÅRü#0¹È7ãs$úJp\Û. )LèP1£0ÞÁJCkx9#:ï6Ë:èäÆ (ÃIÆ3[F£"* Jdí<OA0Í3ÔÖa9It](Â# ä½jü¬7K2Û áJ¹/Y9²ò¡TÓåRÊ´ÍPt¥-LKò5YcuÐï?P ¢2¥!¬òÁFË£ê»;!Àõ½£(tÔ +8¤¡w¨dC¡Ê)mÈVõ¸êSÀ0øp !d +âh¾%¢Èª(R9F1HÁvµÃj}svåH·Ì-eHË6mWfÖM:Lxý&§!KÓ¤§$sÄ7Òã çHÂ48Ys¬2^[m+CHÂ9á[< Á hOaÄúíHnò\íÝ.»±£urǰNè7Ý Øh¼R|çÐÆøÆãug #8ÐÖÆ¥"9s<Ø@!HÇ)ÞDã,×)¹SØ U"p¦"\÷aÕ(".[Ú xãwù'¿â÷ÖÐcVø â(AÒ>ߺx®'R?Éó}#FÚp@) "8myn#7Àp ØXUL\Øòohh5ο {QÒ5©y)µè72: µ +cý#Pº·sîMVúàù<÷«< &(@ÃCMG4[ âïaKÍ@bØ "q0f »§¨IXº×m$à"@fTÙMmð$Ð`\ ^,0¥¢,Ù¬U S´V¤Èv]Ãp±'EvÃ{GªÒTHeR)9®0$£âñ¶&Äå,N à!åL W;MÉEȼTÚ1`á ÞAlfΩųàÝ"£QH!17G(ãt3x ²z§r>²P¾Â@A +JFo2²ù_;ms.R9È:¦ÉG©g-AD]Gþ1$¹Ê +eàI 0#2b +xC +¡N5J'âBGl¢9=¢Ì±+rÚ}GU.çɼn8HdE2X\ì^±¾Í/4£´d@¸îEÌÞVøT8sPJBËÂ-ø p@ÏUä7è84`ÂÔépà6Kòî Q +1ùBA¥õ)àÖ0L¢ÝAK Ùî,"R*II_ Ñ£.U¦Êÿ4ÓqozØÃlêuôF '&C±w«zÅW²½ +ebUüËvØ( ·ZZSj,m4±ð?ÃÜ �ÊÆPéßDb|QHèxM÷LÜ[1xÆu#45êÛÌÊY3ée0$`ÎöM2I �lòf3ÉË(-µaÔFçÄÚ%th43`ÐKKµ>4!Ëé0¦#0SÞRùn/;½1ÔØò,n¹¡²M41úºÂà(¥i¿¹n0|·âìÇÐA7ØTÔþcën'ï½sÈb¦ .´³bÔp³Yt¬&ðLAT*@ôLa0%ÐÜ*. #Õÿ^ú3>0Áh~^WS]ÕÝ(®gb©£ÄcbÕ Ö¦ÓeiÛ&ÌY3fÕ*QUGÔrì¯ï8)¼:%*YÊ- wèá©PÌkCjW>¢¨¸pÝrðRܬíS/ÚÓ«]mæ¸åjé]M%Ð7ÌÃ,©¬¿zÚ>Ãl+m È%ªÈfyÛ²Ò)=ðÊ¥yqQw\:ÅBAF²ÚÝK]@; °êo;ûlÓÂÖZèNhKùÒðâ ¶²ÎÒÄnÑd>Q«gª{³kö¤Û° Õp¿¤ó.gáH}]q5ª"âñF§©À8MÌ|'¸¿{9)x !2)]h5·+]¼Mén`Â3Ҽز>è×(è©sñ[ÑOÏ +a $¿vßÏ9ë}uü,«Ëv&´ó0©S@c 5ê¨LÙíl¶-ɲIõ¾0O +A£!,èÒ"Ka±KõuÊ\ +þÂ.t#haÊOñÃÇWqc;h7c5K1Fý¾`Û^Æ0ö#¶é½bå]ä>Ãr ly&ðîXYs¬ÚÏàûÚÎNIar:°»0¦Â&iÍa,)«ÐóϬðe´ßRj`˪$ c zfÿÄÆ¿Þ(iв1=Y×s²o^0=SøRQA¸Á¥¤©¤ÔE&êÄ¢~EgéäÅÖ d.àÄå-@©g&¨â¾m@8`æ$´ Úëô %ª@+éBx +endstream +endobj +412 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +414 0 obj +<< +/Length 1889 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éPI!PÈ ´b7³!m@b4áÂ4%ó\Ü9 G3ó!¼êb6E¦3a¤ÆkMÆSèe9(Ìo6 çsI¸Î 9N'[Ñ +o3 ¸Ï' ®M/ER¡PN"Êäáf¥ÓêuzÝyT ,Ñhölb8¥Öì2ñÎg5³iµf»`B&ɽ©ÜdnzÂvø\)*©aÄ& ccôN'òǰñ¬lª¢<*$Î[èç +r"ÁfMfý Ê:£Ü9¸*3Ö¥=èr ",>A\ÁÀd½°"j°K2Á°£à8.£ü4ãp@8C{,9²,4°,ÜϨÒ:2BÜ6</ÈCÒø7¼ïKÖö©oðúD¯»æý?ðm4*¹9ë8QAÉ$@"Él,34a P¾2¬:á©/rDóLM¨TX*º@Á³<M۬ضmBê·¢Ðõ ¯e3$²±PpöÁj¨Àp*Å4A)Äïö:MÕPØ6BuLï¬KhØ\þÚ©ó9@Ó¥;O,=Ï¢# ¨Â<.D×Ôs4ÎJÈ/R îÂHQÀ@:²#-I.#4¨6Ì@1£ é Ì5b 2D.Xj$p\+.U~¯N©È 0¯¬Úþ9'lÐ×0çt]Wdw Ï^æJÄc9%¾ùÞ{UÃúx¨HÌJ)¹º¾XÊ<²¢ý6¸zì4ô12ëØ@7âÙµ½ÆøÄ±lk;#c(9Zà×ó£!y¶r ¢X¾!µâ ¤'å® û +!óÂ`@5íxS"3(Èó¸Z6ß<ª¸jË æ)k2sÌâng¡n}. �# ȸäy.O!a}3ÙÝâ UaxAá³KÓHÎ4J&M õØ¿cîv W½ðsB$¢x~ÚÎ0¯éþGVë^Ë2/Ñ*ÖJk`)ç»È@lkA6¸åùlD¡ªÖÎq ³h È' üXV]!é ¶àØÃxsJk´ãÀþ¼- ì-bø»ô7æ²<«¡ÔVKQk-WáùA)arÄJr-hY!¤8ý`û-^hz åî 4Aªm_'TjàQÊ;G¨ýø$DìRPhai8Îô¤V©aô¥´4òEe)¯E%¦ÖÊ×$Ñ]Ȳ}\\%®Dü ª§(e;LËÄøF²*¥±Aä<+×w([B§<죸ÀVQä7Ñ=(ôãÕ¢¶= Í¡¬¯ÚßAk¬uxδË~²Y5-¸ªIÆéÎ`. ¸¸ã +|Nët®µÛ,¥¢""ëÒ\FétÙtFk ÿÐP á> ¥dLÀªX:O3ïÄÈæÄÙ b òFÂhÈ c¬}WÜõݤ emx±2öbíË$lÎ^ ³âøÐZE&{ÆÙij)ñÝ)×zÚË<>|ÂÂP¡#exÙµ6ÀæÛÀsn21·FìÈÛÉoðËÇbQ1ÀÄ8£@ãù^¥èÊS'.ñàNsÎÑÕú@RuN±¶@çJNBvðZ»Äë\YÄ)NÏã,·ÈòÞkèzIêRwáaÝ Þɹ§ÅeI|ìõ>ǪûÞïNÊÑ?g¿iBü¯üÀÑn 5~/jÛVB¡U#M;r Í5©y°B:LÖù(:0® Âè`À!iYÄÃtÒ>!]óH¼±.ó®Ù&«fjfNLNr0Wu[±ma.7rr3Ò©f×¥²"òälG%ô(FÚ£¤x]£âBÉ$´Â$3 +*F%¨ÊRý÷¥qFýÉyÍÕHÆlJ/t¥)õ?ÃR Ô*KRÁESêcj! ÔÛÙ>sc´ÂTsíªf²Ø,̪ÅiÍ¢(dz¶m|ÖA¹²³.µß9 +7D$æÉå8¯Öô¢X¾nä9æÑçèAJOÌ'? <Ä;'nÈS +Âè/T±bÚ[ËsG¡®@[6ôõu%µô¡ÇR +endstream +endobj +415 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +418 0 obj +<< +/Length 2079 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2Î¥BT8Âá ¡hÄn.Fbm<b5ÂÈÑÂT§ ÈÂm2§)Üdn4§3ÈÒp:MæáM#aUú]b. iJØ(a.HìAAÞÉf6Jª1GSÆC!ÌRµãëµû e<gC ÐêsæIÐ 1MÂA{ãÎBo+f c1¼Øl7Í&ã8ìa6nc¬ÖrªÈ鏯K'°Î ¤²ùN*äÉØÒº£¦oÈ m@4a =a¸p©±ã"5 R¼ ¦ËPùâ`*£îþ²!(Ì:8¨è:/p\Â0*¿ TÄï űxZág¸ÃhÒ2¬sǰdp)/ò4 +Rd\''a#@N2ì3ÀÅG½ L2É"Èñ4P)H*'a¨rÊ C +D=̰5 ª0ðÔ8Æ c.³¼¬ë>¥4!sFÒ¤ï{ Ö&(P& â¸)ó£PÒ=/m Ù ãҼǮÈPµÕy_:N0쵯. 8Y6Zô7B¬Û:¤4 +bèSÖ!£NÇ2s&pÞµ<UÓPd¨]4:ó²ÂÕ&)¬!ÈP'Ãcb½,«¶2;0n)7vKâÃv0;¸`Ã0FO_¸Â¦/!X¦Ù̵c(ÓkÀê1F¡hÆ67£[#:æ ß¡è³úxÖ +ýd®²Q*q£é0jÊãiÃrÖÚÂmÓ¦áÚ¡nµËòÍk®yf¦ÆNnç¿â££µðåÞ8ißñÑæ<¶c(Úã\ �h* LL×W^¨h¯ÖÛ Ç¥m;ZÕî.«®ì»nì$8¼Cw7ºDæ¼a Ôû¢YT]lEy`ñ#)ìúRhæy«sgyÞÓ5û·Ì£Ój[]È&þÁî`Ø Üì|$ p!Ãâ\Ap1ü8àf¢@R-!Ô9àæÕ2ü)dXhHÉä j{ Yv �ñ¼ æó ÊË6K:Å ´èµ÷ì¸ßÉôÓE°A "HF ,b@CK$9Ø4qp-aã8@g¢È +ïú +At+°Ã +®$Ö¾¶úÞ³Ø~R]î¾ð¹OI¦ä¨ªé¢rò1Ø×o@YéwªÓbDQzBEèÁ£BÿþFM+àlàà¸2ê]áìD:CJ) +EäDe<¹WÓñ{RÖLKòÚr¾BA¹¸øßËOJ!¥T®R«SBIm<Ås Þ¢&Tå µÀZ[r. ؼ-øþ¦)1*°Xfe*¨_P@#HÀi©VpÌ×fmM¹¹7fôßqN;j8ç,æ¡ ¾;hîãÀxù<Ô¨¯£ m©$úsò~Ñ]Q¨) tlT¢ALrê**:Ø LDl)ADU9£Q¨ÕÏĺԪ~N´ùDÓ\zoQ©Í:×dõ^+Lª¾ õ¡ÔJ'³Ç©¾¯§zSPª«úCu@ã( !34@.ZL¬-% $êÙ\-%zÁ.Ëv²¡è ~E]ÛyêwÁ½·Ërà-ùý'輦 � "ÿQs E=4¤ÓVl0dºäëÎT!Õʸ0þ ÏE~¢4HAhà9ÄÈÞ`ÜRÎçj +ë®è\FïÒºðFâædrÙGQãìTrÞ¢+{!Uî ÊU!é +%£ê}Ð%É©Æú¤í¬ÁïèËÙHaïsû$Ws Á$ %8sNˬ"BpÖ$%vÃ%*æ-S ÒeaøáD¦}/w£ÍY ïi #ðGÃ+é8qËô +#ν:çkoHå· Êß.:VK iÁO´îÁÒÇ»*AXK_p> Ö[A±o´NhQlV`L£F$Åé¦e)ÒSLZúPi]ô¥¬âÝMÂ8&£s©û~¨O¢óÂxßL+®¨°3àÏ¡ö?èþÓýV§ \«ÊNÄ'ÚÆ¦+-£ÚÔyyÖ§i¶L®)Á#dì+»uÜÖ)@o +þúm6{é1^w=ÞVȨË(¡T:¬KQ}R¿lø2´*u*EMjµ%UÔX¡ëdù¥µ¸«Q`,+x±úÞYââ-;pÖ¸r[7-nÃÙüH + +endstream +endobj +419 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +421 0 obj +<< +/Length 2408 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTQÎp("#A¤rx1ÕÅ#)Ðêr7Å4J4$ C!Õè¦-§ÅÑá½R¿aMBI@t4DÀØi1Ny¸@p9ÌfSÏY4Nbn°æa3EIÐ@s4Φà åu»éF]H¸RT5QÈÔ 2©PÂÔéõjÄl9Ñ뺡äÉNm6»hÎßq +zh¶èf·Ã)»V½/ �°hº¤0èJàŰn£Kʱ%îÀ¨É¸/¢ª* +x"B`& mÜ5CÑD" â¸çº+ó©)©$¤«)/jl{Ì+0õ-A j÷¡3 ¢ b +" ½¨¨#®¨°³@« ÊÌL +<òTµÈa ø`Æ9 #FÒÌê °@TÁ,LAi$&±ÉRÊ @¨Ì\«+Ë2ܺ"¶³pÍ6MûúßxAO?U¢ K<Aºd [HRRU*SXP;#pÈ7í[XÜܶÐÂ1´c³5XmYUZ ±àQi }\AÉʵ z±XHZnɳÜh 6ýÃeÙ¬½\2·¬ÈäÍÛHìÑ3C~2¶½³Z£kè:Q½ +±¡¢Iw¤%ç`Rk8 0Cj:9⸿SÈç=ϳøÝu/Êr| dpù>R6ÖËõ¦B2 +cÊ1#0Ò×ß7åýdàå �aMHÓÃcq³mþÝáâ Þuü+KÃíúâíön/ ÙÓ«_iº~|QÚ #¡Ó#fi4w¦#}xÃpÞßpÈUýk|13N[S¾`öåg¶ÜàÝídb'B#xË:÷ßíãgÚY#>ÿ£|åLî^XâÝ 8»?sµ[Þ_Ð9ñü ]¨HØhæ"¾dµ3ȽÉÉV¥À5ÐS3G3P<¬wóëíº½³v×\S_}ÀÑ. xa'ùN¡°Ò\KÌáÀ=WÔ]A5^à ÚÕNnÃu7Ë,×çVq»[OO%hp¨ò¥Æåü£gFÙÙAEU3Ð@ÿÒl$§8ÎzÒqn\¥Ä3^aiQ}CEaQ|(ã ÔàSs3¦|гcNjOù®YÆÄÙÄSnnMÙ½7çáS]À vÁ¾.øÜaM ©'2.£Ê©èé5!èæ Oó çÔûöqÏñ¬gÉÇÔa¤EÄñF´à#q¡$#P©Â°EEPØ!Í G6ÐâV Á,GBtå::L¨õi42½$'"ÐA²PJSNn 9ºú)±TÆIVI8+©g)Ù=£]NÒÝ<'¤ø¼Ã/ññCÌ/ A �$²§¹Þ,÷îcnôØ92¦ª¡³q¦Íd¾SBÌÃw´ÑJYÑ1XãzìÀJ Ëel´²öcE ND U +¦Ïê²ÀsM¢²@Æ#ÜÅr©%Ó¯D.¦Z«Wk-nIªhjSy79É#[\ë< �WPPêc®v5ÙA4kb®qvÿ³b\ÉæX5ÜÉ©ºý ì°PmO¥ BøS a$(%`¦Q(ExÆ 2¦ÚlÃ!²!6S_³ �°©7:§1£A,ªÄd±:Y(øEÀ¹I@^hÓK@¤JFÒ¼êF)¥8gñ nÆM%¿'ÎL¢9¹òI£Pj³\SÆ.N{½#%;RºHïݵÎA¤Dî| s>Áü.Sô&yPTnbÑÒ+2LQ#²¹7Ö¦§4éj"!H)5gµ 6ßNÄ<í#Â2K q÷-`Þ}%:XÂETlâT^ à#y§³ ½UÑvm|hä~¾¨+oBçA¥& «wN¡ÏOlE²¼ ùØÝE¶CZi<ö«EÖ®UâÑX(¬a³Æ}.5Cjuµ£Î{ä¬V²ñ=ÖÝÇc +¬òª´8(æÎ}jS-+NI,øEçcªÖ¾ÅÀ;X +)Pp ë%0zli²lÅ+©²ºV¦§óbKÁL* ªvÔÅ% ö¡µÍøtAÕlpËiêD¤V£\Í BT¼CµÏ¤Ðp UÞîµ $!(ã]èl hÅ6» +ÍÍ&ôÙ¢°÷Â`DEAL/¢{xÂJ% 9)ó>j-ç/Éa0àXÒAoãMëpÚÖXÁKX¤ä+ó@¦BM¡8*óéºÒ"çÁQï0²/ZçÁ7Ø(B áar.gº[Áæ4 Ü{rîàSY½¥¨©v¥Æ×³Ø&G,þN9I\°Þhdªz8GFoõ3¼4vóÞ»Þsz ¾Èæþ²ÜðSÂ6¬xêM®¸ÙAÞEcH8§ù A $sèm¸Sà>fUÀf|òðZxNA÷¡:µ Dq~3·\;SÓoÀÝìêÊP6 § óÓ+¼À¸ �GºÄ¢þ¯î&Ý'.B pé#Í"Êp(~ñå(øP å´§ Ò©Fºb � +endstream +endobj +422 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +424 0 obj +<< +/Length 2110 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2Î¥BT # C ÑÜ\8ÌE´áÒbT"M&`¡¸n4ÂæÀ©Á\Ðe7# égµ[Ò!&ãm1 &Ã%ÜPw4ó½øÒs¿ÎFS ÐÊd 'A,Æe4¸ìk>+Kä2T" ¹³ÎeÈìø±¼Ê)¡Ñ`¤aÄ& ®)áäg¬®w]&PS*¤2¥¨¨j£©ø ƺ7¤üèÄqI±gCÔÆt:í0ùS)Ë7eï¦#ÎÖàºîËz¤¸b¼(£`à!±lhÊ(#Â6p°Ý»jP°¼ik̦©º|8 ì92KKlµ70}ÈànÞÄ PZ®H kN"º© ;0ëjp`7®Ì¤¹1Ú\)*ÚN±§[Ú÷¾#(\! Ã+T:½a ÑzvaDÛ7Î-MDµcZ×JeùÑïPè½Â +R[Ë0düÀá ì½$Ç ÒCw»SÂR'[Éá ljzIQ8¨§#°ÁÊøCt3Ã"PUÀ.úF¨Øi\,uK *.cãÈû½ò¾Í4ÂÀ±xÐ0°Cdì7Ïôì7¬*ò½¯¬ÂV0 go;¡q]!8õ{_©öfÊ:¹\]`Qg*ªpgi YI¶°ÍCCî´UÔót£ãUÆ¢¨r«×8d8%ÝxYRº#¢',ÒÈr+¦*VH5i-ÒãÉZ9TyÄÙ¡iSE7ë2.¹¡c¸þãù%¡¸j]Yy,}9¦^ͱCHáMÍ\»!ÚVAqé¾Ün{ +HÂ8`Ò1±£LÕ3-#96ozÆ´)k%:¶£x@0x@1öKEÀ°l(éã_rðÞþùù~úÆÊÞhªèj(8ò>«¼½KȳW§hÊ¿Ë|Ï7Û Üòðü.<UéXThùÕwÚ ÞúJ 8 rIÒ �fØsË/Om=@@H +á8"ÀRñA~Tö=u`÷ßã GP0 #éG¨ýÈ`KE9 xV%<'Ôþµá@z>ὡ¶ÌÑUâ¹pqe_,r jK!ª·W&´V9Z«\ø§ôv+G\NÒ4 Çër}Nz'g^ì]µváÌ4ðêöÌZØ-1IV&dÕR¬UÉ"¤ÓßlèE¤4_ÍÀ.ÕÝv#lÍK.lÙÃ:gøü4¸Ñ!ri$^:×l§)«úÖÂÌ-6ØÜA 1qd=+Õ¨9o é7P +Y¨E +ê¬\ô\rv.²U|HØ5l'Ê ³È{¬Ô"9äæãùñÂ\º'é2¾ÊV§ÅórIÌjd»Ä5áÒJ§gö«ÝzLÊ0Â{ÌÌcQ^>'Èÿñ0«Áõ~µÏ»ñXlö~¿YþýÜí*ÔÃuÓLÒ¼<9P +ÀWA¬CAP +#DM°¦'G¦$dT*5£ i8¨6ÄeTÈ(æR«Õ· +=^xÕ*£(e:¤üì*ø:M=Kóf4JØÔµ¤RÛSî}ZË¥É(H3Ià¸:©®ÊÒbDÑô/`î¾Òü_Ëéå¦ èÀÖÔ`ì%B¼d_IÔÙy%Ö 1E*\ ë·å¶Ò(rÚ^8hµí\bþ¿î(S0¶Ï¨Õt`Ñ6Îz¢±ëCU´;r m\ +|Ãha¤6¥V �UþvN·ÂÄtV¹Ïg%c%bÈBX6r}e??&n7À¦A£¼¡ ÉtÙɪ&ÜMôVs$;ö[LÍWÍ´9 A Ó|з,»°XÂðq%=ÀøØâ9jzý¨8b]´ºqZò³Éi\@Ói&.<ÇÙ!Q7 &j^=Ôqã>óT ÖC`É'8tsx`%GÑ9ÌmIÙ= ú$!T, a °0Ã%/hn½¸ÇÛÒøçn|%Î)x &ä©tÉ0ç_XÝ-#¼á¾z©27~¿L°þ#}CC×uÆTz¨¼*Qµ?W +×\âJg¾i<סWïÕOØI.©CpqaîËÕAlê©\ª¶Ò®ÛV®Å§¬)f(¿¶ÿÎãÂCÁ´Á±Õ¥c£]ËTÐ{0ÓHMYBz/> +-$vNÒ¦i!Ëìµ)Èí/$Ui¬¾ýàø/ãÞ E1á)mdåÅË_ pl¸ùâáó!§ÓZÉ´X&N58! +endstream +endobj +425 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +427 0 obj +<< +/Length 2106 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ¨Ì\8¥ ÆP¤0Ç39À .F3ÁÎÔ(+KäÒ!$A,]%¡Lø)¢Ñéѱz£ ÂG°ñ¬o0IeØXñRh +Ùí1»X¶Ú5Y§3ÈÒp:MæìFB¡èJ( B6Ñtxl9«2µám`0ÙeÅCAAq¹Ýn÷mì 6èÎf?8Òn9GSÐæ 0BHÆl4MÇAß¾d7ÄC`Â< #hÒ=9ãcÊ1#3â2=Ã@Ò6B°ÜüápR* MzÙ)« �&B ɹ#0 +ä0»# Ê9'Øn4M#LÔ5Mc×·j[f¯¨hØhÐ!qZ¾ #,¼c°Ü:¶2£Ëo , äÊAÍ÷p(ú¾ïÈ@.@®'àRý¿£kÿ ÅÄ¥'8Ò\ ¼i-5íQ³Q'pÞú£Ê2Ï]RúNuTú?9 ô<¶¤ËÈ#v°Í½~ªbHk´ÉIì* )ÅìÒÔ-pr +C(è:OZÁ Ôôܶè«jÄ*ÍòÒjâ½JÍ cRÕÁ@Þ:Îcµn=U»ûKè8Wµ7@Îs²9»níuW¬r±Û1¶(lÞÙ0hʲìÊÑiv«@uÆ(Û#2ÙFï9Ûôî3r0÷#wtªÃÌô½L7PÔä¹Óêr¡a$ª®¥Dhz¦®²k]-!\®Ø'¢À©ãV#a±V2¨Ýß`e-¤-sB"4m+O}ÈMt¹q)ºo¡7Pc¢úà38÷à ¦ñ~Öá@Ðs£*غ>Ò*;Ó¸ï<Èó=SØ÷>éCÐò#µõÀë`dN0!áJ³«õäV0.y Ïxc¹>c`ó¶"q0c£I©¯2=àìçx³q;=0 Uçú^°åì×vÔüó¤/;y¯»Ð` Tç49!þÀsbí=¢$HQ91|+5r¦ª7G Ù£× [l ÉE¤ $JG)+#%6¢;T%QSZ >'ø§$*òºyOiôÀ·8KRPML4èF¢`@ܦ5(yÊ9.ÂW ÈaªHZ ÁLÑôÃ÷ö~Iç|¯áߪÀAcil$óãVctpa;¥RÓé|¥ÊAS`Bv/ÝÞÇØ¯!+pc²h²[«HYÍ|³2¶øØòÖ[ n³Äa+\Ä]¡²@hA¢çrN^1ýW¸i_.~¯ö-*7`ñ ÙÚª±V%QM½£ÊRHXqdò±½®ÆüÌsfæpöÜ"F] Ï/Hð34X¼U)«êì#5TÛ{U8%(©NݧTìel¶XP`ÙNI +A) @HÛdãXS¹0fFÁÍY³®JÒÒUéoî¸Iôâ ¡h3ýÆ +^ÈÁ¬éX0&1ÏlÅÖÒZNuæë«a.´ñXôì«´>'ÍèC MªÁVâ2lÉ9}gè:Â|ë±?`G7°#Ðè ü®oL§Ì®mxlE¶ÚÏZ`ß6JR§¯$"Bôÿ fB ô6²D¥Bè2,tG84>¡$Q ,¥BØ¥ájX JkLA8Cé2~ÂzOúÑÛÔtIIQ.ß% +ڼͮ¸pÊ$\uä©BªÁ5WbÓº`ÖÚTT©c $tkzÝå]5ZEZXõ®¶Vܵ§ìýsÔ9yQTs#$rªKUè½ÂúH35!f¸a3Q °Ö6تbÑrú«æ9ór@Á0.ÙUM-fÔtгÞÌÙ«7ä7On¸peBqu¢c .ý =L½¢ÿ8-$¡jeJ5r 5ÿ£8 F]GÝ)u +a*Ð)Åô¯ß¢)ên7o+G2·Üy©í·ÈóíqàÜòlS"ÊßI¶9Ù¤$æ¼Û«©bjM¾õhX÷|¯ �4âÁ¤U2WH}Xô/;!¸:À"xhg©¡¯äôÍxô%¼Á5©'I[¿£Ì«ãvvêçÞ¼8Ðêu �£YXßg¾¢R7jnëamA«cm¤§Úë"w +"¹ÇÊ7ÐËq£ (9LÖ½@aÜU² �ÍÒ Xúm·wáeUCSqaK d(e?[C ´»ÉJÛöM2èÓ¬æÑyP/6B +endstream +endobj +428 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +430 0 obj +<< +/Length 2307 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2'EÒ¡* ¡PÈ ´b7Æ#:@b4ÑÂFT Âäa6Jª9GKª!æ) £ pÂa Q°ÞwÎFC)È@wÅ3Æi3L§1Ó 7Nâ5Û;MÆL8Nn:¡yóA¤ÎhÄâñ¸üO+ÌæíVÀTN.)wF{ ¡ÑõZÍÀÞpNã.ÃdI3¦v8áf´N³Npõ73¹óo~t4°ó¨Ú£0èá T¨Ü: ã¨ÆÁtÁ ®*J\ ¢h4(!l + +4£I"¸*n@jÁv©¡ÈP)=C¨ä7aJ£B|0"î!Êø¤a°nª*úJ½/ê¾À0L Ð0µcc7¼.sHÓ5Zþ¨à6#ÊÉ5,óæÿ´ãæ0ã,$µ°²àCðâïBIFj*JòÈh ÅÀRq4hga¨pcß=±àÍCîÎR¶ÈÊ`&.è¬IÁt ÁíH+òe Ã{C?¸5#AG§ôHc× BÖ Øt´a´àj¸/¢ * "`!(´%§V¨MçÄq(A¯³HÃt¢ÃKÓ!«Á¨e3cä4ÅxH5b¸Ö i\×a¨o2²,ØT¨P 5Ñu]s¹=O#þ9»££:7At! �ãRÕ°ìãU³£LÄÒ1ChÂ:Y/Y/Fã£êÊó/ñzË4=cvãø`çbÝ-ªN¾¸¸Ö±lìëì·ûZÑ âÛÚ¹®«º´0~Ì3LäÌüjã4à3»ó+?ÍOó9e¢(¾$ â- âp¨ ÍêÓ¦Î,Ì'19Â{ëå/ ÒÆs¯ Ðýw]½0¬"W`ØvLÿh6vÚïÜ>º¬ÄÉØ6x³7ÑBp5´¬]'/bX(]B!]Â#ä2=£Ä÷Ùñµ{ í=ÃÙ³»B. #7¥^av8àÐ÷écpÅ¥@$W\«$ç1b³`êÍ;ìØ1FiYÁïTMu +,µd¢QKê +µüÚ E¬ o°Tj¸Ò<ù 7=ØÊKVìpD DAd©pÏàÃHcka¥c0Ð`õhüC&pf` +V³G,gÓÊ{O°ÑeAøp¡×º_%¬%B.¶Eê`°e6SêT*9ªTªQõ ʶ'8 ØÔSIñT¢IÌ*gL)½0»àì}ë9zËB¤µ 0Dh¦D-Å*¥Ñ6\KUP¨R«¬"ØÐôhðp¿Ñ\[Ò1ħÂ# aìF27u_ÖdQVÄ^*(>G"̨+<-à +Tø +9r®p1¦DÊ6}OÈòÌh+flÕ³Ü9¡@´2pïCÃÆ6PÐÞS<qþðç9C²K¬úQÆ|"s¾9',OPQZ b¡ÑãåFChbg<&á`o¨´@Ç&ÃÈCl|B°}°FÆ´Û+ÁO°A³Ôc[zRU3 ¹Î6í'`iJYù¿Õ¦HàË =qdè?\sg.HË9C6ñ©b¥Æy:¦,Ç3,*LÖ_ð < ëì9§Ð2êfÙ°w&q4 ÄZ¡üx§åç«ÍHª(úÚkPjM%;´cÄÉCü@puõX3Flo£MQE(µ õ¡Ôª¥`-¯L©H.W Éd®p1¸¸B]¡ë[ ÓfPuSm¡¬êCbâÁªÍñ}´ÅÐ0¦UaRöGê°§k˦¨ ÉÑ´ÝÕCxíZ �uÇvt¶éU+ü¼ä9RuÀ"Ý +e£i QÚ=Gê¹xÎ e:Ä¢WDÀl¥1[A®/FÄÝ£4h2Qª&¼Oñá¶Ì7ÇZþ¨<{¿¸;ȹ4ÈÀ4Zró)<eHéQêQ*EM&\8SONA§d£#e*Êrû6§è_a<& �H zåÏPä[ûʲA\WÙ¾FuÄtLÿ Ø($hù qVgÅ <¨bù³«VÎuºNF'+´"ò@ä2 5Õ)aÁ_2])oª/eY=j¬}¡m;:IØ7'Á¬2ÛÿÌÜ(¥ û,gøÒé;'¡¿}íÑxò7ai³ÚhCjÆ3è§0´zúà¶Îzdð}Î&¨ ÖWðÝ s[Aô:ØofM àõC 6¥CóÝ6&ÌýïÅk,;8LÍ<ê;Dc¿5;ÚµÊgÑ0Ö7ÕæÛX[ĬӴ^ÁÒ+oðf¹lëÆE¾+`&8C ,÷~"nñÝú§¤çwëR²¼W¿¬A^5êëÒÇd¬ÎÃ[ Í+0Æ È³ bÍõ}8=Î+D4L]¿s*Tgç04#ð ÂU +øÕÆ·_÷DâôÓjÛDuÁÚ;Àù&%éY +zÈ*úÇùý·'¬6û¾gJÍ©·7&0Çxó$ðÙ~H71$Íæ±ëó½R +endstream +endobj +431 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +433 0 obj +<< +/Length 2161 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTQÎp("#Q¼rx1ÕÅ#)Ðêr7Å4J4$ C!Õè¦-§ÅÑá½R¿a± (PT4DÀØi1Ny¸@s4Φà åu»é "©@i3mÎÈÞc2Î|Ó2 6ðNf9\)*¨äjNT¨ajtúµbH6 Ãhõ]Pòåg6]´go¸=÷[t3[Æ.¼Üà/Kã¦À)l.©:¸1a ¡ó,I{²*2¡@®&â&¤"" & 6/(D±<S+Æ"k é/ά +¦¤@b¬Pp¤¼¨\±ï;Ò³½¨pø¡5 ¢(*qp!Ú; +2 +¸\¬ÁÐ×&¯BÌ=kT¤µJàcÒ84m,ľ Ð#APDÄÁ¡´Bk"RªÆºÎ@§Á d¾*9SÍ #N2ÍØè'Ã}p¸ÌÐî4à Þ;¸£CDXkÍÍ9#pëÐh fÅA4%%Ið0Ók8îÌ´Ã +x§öhêÝ£hAcVCËZZ P[i£°@£apÀÛ3'9 Ø2c Ê29î§Pëj$à\&B¦ä0¹8Pä+»÷=sìÿ@ת§)XöÒtªøî>6Çpb¦B(Ë[T(Ó@¦8a ÀÒâWµmv]ÃHÉZ4c6¦96íÈÒÝÖ,Þuìwh\ -Ϋ´ë5ÂÞ ãZ:<S±è+fµ_ù¾v9ꥪ8ãë»ï7POYXÖÇzë[Z-ÁÅ!BÙÓ,6gÙûBèh'5£à6Û%¥²ÌÃ44 #8Ðã·°ýË[Âj:÷ÍcÈç ]×UÞ0òUÜã¢0¾)"N*0Øæ6õ²e¸vý_Økê£eÜwOèAÞ÷[_d}C¿ÙÝýýóOÂðõJfÉÈw0ç ÌÃcõXì½°ÎÜ£I%é ¿¹×>yØFIH)ÂrôBøBD¡4 xAÀ35Z6÷[0bla´ÎôøÈØ7 . ¿A¥ìÒ +$%ðB!<ÄðB¸ZÖ!c3!5°¸lÀPTM0³Â ¯rb¢sWnÀ2+Â;^±j ÁÕ +ÞGFÁf$D n#L.]°À3±ðòÂÖ@u\¾ÇH~ +'URªÙ!\'в5Bðî^ðe`ì&DPçÖ\Ç:9ŸôxW Á)#TnɲV ¸¬îpdcáÞFIJ#¼ +<(XLK`4ò(3J +ÀnMÑ»7Ï1bÌ®%J%ÔB O +Dð �ιJ'9ù$bëÒzY-XS§m`Jñäê!ÔÓ¸vYUM'xha¡ 'RÖrü.+ ºbðbès + Â(££òÓ!é CéÆÎß3ÆÑCLj Q¬5ÆÀ¼ a7Fðß ¬©É8J¾£Ú*MI°3ÈIRrݤÉÜ÷Ò¤¤|Ϩs>áü¯ÃöU¢ þ¨ MÐe9 ) Vì@NõvS8("F) Ê?¤ºyF©)hNÀå*%dVdª])$ ``Lõº lºr³)DòZâ~P½¨b_1Dxµ Xgû(©,ZhÂ¥¥´æÚ³µ}ëTÓTpá½9R"¼Ãn !Ù_, 19Ô¢¬I7ö1)ìwt¬þ²DÉíË+·ÝË_8*ÍCtLòýß|êãF[ÖÄ4÷ÔêÁÇ-ÞÀØoó\}÷¹a +D²p¬Ö%^R¢ô0ìh¢µñf̺·8ç¯Ã¡`{´ÅLû«Âpõ¿7êýßsðwïñáafØÎ)Á7x ¹Íf¶ü;´vÙAÞ?§á²ªËo¤Mò8rað(kMqö �,@ëÑzÃF«ÅtØjEI#½´¥%À¹RÓcL%|¦wÜ$Zˤ2A9©sÊÓj 3æ Tº\i±¸l¦i² Ú°¢|@ÆÚ¤y?¬fIP÷¬hr!Ïèîíß3Aö+VÖÛA$÷Bé"gº½Wæµoï[ß\Äé$5ú ¢ª¯ñÄw«°¦ÛdV[H'ý©i6æ8û¢÷Ãßpo7{üc[×7m²µó¦B^";NÒom§ßW·tà »dCÌ5µge ¸$me,yðù8\7ññ=ë½îAã=V6\ÎáÃ'Æõ²ð·»8AX;&Uòm¼*4/¶9d{åc³õ«Ðp±{ZSk$VÜúóì~Ñü?Õëi$¥]þËhm9lTÀ«¡¢ +endstream +endobj +434 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +437 0 obj +<< +/Length 2241 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢N¥BT8Âá ¡'¦cto@*IAC pÌs2áØa;Æ£A\_&Ê¥2-ĬEÐè´Ê ÀiÀo·ñØ\8¿åõY$¶ý*LÁS¸1´Z#)ÌÆr4yºóD£¤p¨d:!ÀE¡å\@6ðù +ж¸0Hò0AAAn¸\®b(Û9LæQ¤æ 9MÇAÜÑÚ;üãy׳ÕëMçc)ºiñM¼Üd7Å¡«R¤5Z¸Zª#é¨"1ÁXÉ'Â9.xè2IÚ2ã<Ð4M#L½5,Ö«j +¨ªD¸LP;ÂP Úþ?È+U©aºª+é<7Ét°A@¦8£Ò3 ,ëÂñc Â:<Á + �#xÚ1>R¼E-K:êÃØ:³¡ÔpH°t ²T,¬"h/bx* +Bx óÇ8:Áð;ÏÜIÀápnh]#Aô#~à¡i³&RBø! +¢ ©KSf (ÌîC¨è:4¯ETüÕ:ö*QX"mcYhfvX4 ØêZ6«TÕvÍ_nAµÍ`W''jðmeCHÎ4Z¨ùÞÅ\ÔWÄ]ßW&)H*'a¨s ICDîTöµë¯h4M �ó$¬+AÇMZeÒÅ9ºO_£Æ6?!hÞ9û§½Ã'JôgR)ÐkZÈN ñ®Ç{¸Cã+À1ú¤ëϨõ<Ã(\ ¼y§jïªg;tèEb djÒl(ºúÞÑçàPjªæ&<íôQµí½ì3ûçºnÃt®êK{Óɾ¿oí´ Á f¿Ö!¥âuÄËæ4 ~$ËJs^~øóùÁQTú¡DÔÑ£Úk£ë9ã¢éü>°Î7ëXèP7ýݰîùUa �¼ßÂzzOÌì¾à{Ãba}g ÷? Z Iòz[D©Ç¹ÑÎ#ó>çåU¼Ã lNÔûµ&¶ÞèsiîåtxA./å<2¤a@ § �ß,E³S2Ç@R¯ø78&Ïax +6F SQ£Z¡ÍûPØ{ôLéóª 8pTè5£Æù_;~mÎÃý!¬2æì6ÓHi[FAD3,G3a R>`[1hC¨`íGÈ«È3¦)qNE8°ma\"åen[KxNlecP¦ÇÒ: ¨ÃB¢TÌ`4$>CËI$ +ôB2 ØÌ8¢×.IwòladbEVÌöÙ4¢!HxÏÔØ©2°ØÅi^HÁ8x#&uAÌ9Ç@éERvNÙôYíHúÁ§ê ×M§õÀÉüQ@h .ñºBhV%¡4 äìD¾'µê4Ìb.VçÁtæòl ¼@PyÜo´\ÓÌ´¡Ù;R9ÇZ0â(´ò<6ÞÎi8 ¥ÎÕFË3Ô|þim5ª8f¨Þ\Û_s¤¾®é«8¦î(¥ê*2; ]ËÇã¨(wà» ÝÝ¢y<aÖ2¡Z»ÖzqV 9%t«3~äpÇÎÑÜBa0Ôò&ðj²3ýû0`ÐápíB´STe\=䯷ÚÃVµtlÚbÁxÃ^ܳYs'ÀX óa[vMáÚµ»YÇqºY6¥wNû)°ô3+g-44:ÒZkQBm]g½D(©úq-£Löâ&më-ºj]ÚÖ¢\ù0)Ô~ùK{Îíôª 3 ´HÁ-Ï£Þ%a¤ö0ÃæÜ[Ù7m)fzÙxRÎÜénzÐÀl0÷&sÜxp¶0û*´Ì ¬íØ[ïy1U:øºÊ6Eò)ùvºªßêÀ¾)óÇq4§tÔ|Ûë¶ ¡%P ÂJ9ÁÏÇjÝr_©g6 v¹k©U× +Vѵ%²µ00È8¢bê²&pÜãdeóÀ«xh¢ËOpõ ¯A+Tª¬ {² +ßL27$F¸ä)0p¢ü2ÐViÀeÁÌIov&ÒÚ¸'¤U"óÜX3f �w#ÐoÇféªAj|.lâcMøp_æ\üÒP°ìY1:äàoÒQH¥6ÎÔF+ÏcjjÔIØ7aL×uY°mO µS«ã:a2¡> +¡«pöHù£Hd´Ôå°äK  I +Á* _½&ô×{át~[$çAeƬ"ÙÚM/ +qZVðè³ HÜçÛgëÕ{¶¨¹|ßó¾{@ß5ZÔ"¥ÇcêÏ&Yd¹â(íù9ºúI¾ïàuÃq¥ÉÉF÷Vên)À_\¹4ò,ís1Ù6¦ î©Ò4;7г[<~ò +^t4g±-YTë1%IJÈ^§R +endstream +endobj +438 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +440 0 obj +<< +/Length 3465 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(Z1c¢1ÐIpÀa +*MSäa6NSðd6C)ÌÆr4y¸SE£ÁHÃU§ZUnº0X`½Îm T4 ¨£1H]p0׿y2ÀÊc47QÜÐe7"ÙÐØe¬ÂyÈ@i1ßDã)ÈsÞø< Ân3óº<sqaµî·&ìíÀâ÷<nÌéà2³9½=61X4ÚôË$£n>l㥡"6ü-#Óµ,ÄÊ2ËD +Á3ÊbªAÊ?mJÁ Ì´-Kcè +ª"¸ã3ÄÝ<£KÎÞ -óá8ÏKå .èéN ãp\ #¤VÂ)Æ3 ¡ª8¨>Ásðý2n»ÕÆíë~à¸qó%Bè4Ï©ÍFÄÃ#«Ð&6B¬Ã4ÎC0H9A±¿RlÉÃ|:nt&ÒtR2tK`ÞùOó\èTé;4¬{ý ÀNÚÁ°°Ð¦)%ú¿ëÊ3 +ãKº7²£Þ1@¸Õô +¨¤inÔ*±§ã0ê7F®T0ò3Gn®2GÔÐã-cÄ!Q_@}Ü:6ãKv]Ï\mW^AC68®þ£ pÅhõoD55Z\¬!i¼ äWÍõi/1ptðÈ5xûdÁ +hZAaªdÄËõMp±%Q2ñK ¡qtaq»°Ë{Lo`Aà-«nÜã#al YðC +DóóèYPÜ;åØdó©Éò¦"Ô¸¥N"_ 4P`¨xjÈÍF +4!·ÚKr"KÚz9v{P)-C¨ä7x¬d¨r 4²ÂCö£ÛÊk%车 +ú>}T3v¦ãaU¨ëõË+ªä8ÃØ÷>'ù¤PµæîÅ*Â8c¾½¹CÐ7£eÈ9q<^sÞ7hQMß{»åßÕèð{7u{_Û¿(QçzCª!²C.å°}ÎÂc 1¹·$.æUCQ(®2´ÄÈwG!¡ÓEv^NKº5|Î!< � ëÔ<á¹M1uúÞ;Ìi±°nÜ]Ó{QN·Àwx É=ðtÖ2 §N¾±ð-ÒÞ`ʬ2è~YrOLÚ::ä@S·w.ÂVdÑj/x«Ðà=@èâÌQ Ôà3ÒÃqÅRJ½´+&ÜÛ Ä79©HoGð?xànưs® 3.Âä[ Ãüq°Ò,:·$EÈrd$ª© A´oM©Ex¯"À +íb¬y i¤$¡ÀpRÎvI¶¶BßÜ2ÁÒоCJA)´ +A¸(±^EKi5¤d À¨¨Wd¬×.se/IÈ6]±x/Eð¿JÇ ´Ê%ÌK`hA1é¯FÔ Vk2U +ÍéÁ8däÈÀ´ÊÂvRz úF¬jGýh*V"ï£H|L]íAe:x p ðZDdIäé6³`s ÞQ¸]r°²×µ3tf-BÌMÙÌ9É "D@Pb¸-l×*cï}ìè¿loF)$°Q+û±5z3Jé8ex©ã¼AbMaÑaÇOdêÐ èÊ:>¨ú*sêªÎ½Ú¾nâ¸4C&úæe:XµIx2Êài«!f&NÎÓãÐqªD²mÓÙùÚÖ;Õ²É + ª°4¶¤læ?\Ë#UfŸ¸* ¡!É(Bf´×ft¤t]Ƽ¨aQ_cÑ\Ì× ±ÈÑ'\K;hêºzîÉ|t#Ði^ó%ën¡àSWÉX9ÓÁA"¥L}'$8_wOW¸¢©»{o±Ú´õ.Â:s.F \*§v-:K 6p43|Z^pgQÎþ<ýÞkÏÀJc`v)fÁ¹0êUWÒDÈÐê×ã+c@-¾ йÛÔÔÂc#Íf4Àp¡c +"KŧgðPz¾Þ6Ï=«í©ÑùÇ9BÐEá@ BîPM©fÃ~»=ÁÈ:WpN¸\îbLidºX%HªEôÁ2µ9PÀÜ© `t¡ z¯[oª%¨hæáæFsÔ<§\3üß6TéÜ®º&dâ9fþPÔl_^cæîi3 û¿+ãV³½¹î4F'44KÄÂ@YRIø)§g 6Ñï; xYÒÌY쾦Èí+4uÏ) ħ©©b¼¥I§ê`äÃc¤6¤S¬Üc>K%QÃm¯ï]oÜäS¼ Ú×`$°zjBY'çT4½*ú2¡Ô ý_t$øWsÔ ½×¸¿lëÝfF+´ê_LZìb·D¼¸ðS)BIÙ'ËoL5ö+ÕÌÔSe¦Nzzè áÀóÏeºbÝë-.תú.ç4Üô_-×KXsIaÁ²ýí6Á¿öAîàÚ¬¡øw-+p¢[é]ýÚÍùÃ¥éÁ°´7ìa ¼Çm)hòmîW¤³{ðÕßs �ÙñÛÐÿEÏ5üKnìÄùåtûA\¨r°rï]|0¤·º«yqäxVX/l1`bûMøvÂ^#¯¾cøå¤úxÿ$à¢"`r²ú¦åîb`eÌûmìî`` +ìwÄÛn&62Æ Àذb@V èÀlÎá&@vLõ-úko¾ð^Î +ü&p&ÈI|ɪ%"ë0(Â62Hcï¢?ð⯠jÃÀpèpTâ-¸Lîpf)ȤÿðoiÌò¯.ô-ܳ¯":lH¤ð¤}O<çü_¨NÎHÇÔz|pm*ê*Hûæ@ +6ùIÉí°µpíD)¤9ãÊë 0¾üpÚëHXÂÎsn¸éü³jÒuÂ8Ví~·.]¢À®îÒ{O"´.]Ïç`PÇqH±¸¬T6±%$ ,óÐú6Ú5 +ëLZ"®ï2ìNÈüË:íjW1)¸-©XQįË^ /8Íì:ù°ïHx*º''[k>¸ªØjöGÃ\{ã±&-Cn8ÉÈà +@< +èh:ò> +ÒE$$ÆpãL6`ÈàéXö>WdÁ#ªIë:ÀÌ qòÀZ9 ÚDÂöDÎÞfÒ¾¥v|ëe¥+Þ*QZVïÂiTÒ2þ+«^ �£¤ìÈ\{E ªò": j#Î~eÅüÛVüܯ*öìjÊ $Æ0áß °Ã* �øI0n§)ç +'z§jiÜ¡j#ʪ#ivÈàP#ÆõL°7/\zs\S <F.RÎÒciqïËPw þ)ÎäW&Â&È×B¢"2üººÒ s7u7Ê"ìXC8ÃwO@Ú§NJÓ%! @Hø:k*Ed$b^iÐjmôBÒ¼PMüåg@uÈ´çþºeF&/3þ' ¬Þ +ÐdåK5¬ �%¾J@à + +Dà¥E E` À©F4QETX@ +\ ´yFt| À¥E` +.ÎkÎU +âÄ%rU¥#>ô0gØÓòk>"úx²d6.>:ÈZÌ«Hïl'ä&pSdÃó<óBÙM¢¯(þ9 ȱ¥@Ò>füS_c¶Ù«`Vþ ¬þo"éÄ®T,2`ÊÐy+;tð/0LvÆÄ` î-WrüHîzÔeFmGt �{F´YEÀ Ûô¢MÈͧU2C$rKH ¿%%ô#çâà%X6ô«?ëK%#KsßKÃrEè<K �Z+"ØÑ¨}¶RòRÂ×d.¢B +endstream +endobj +441 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +443 0 obj +<< +/Length 2684 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢2'EÒ¡* ¡AhÄa. (CqpÄi1*&0P äe2'spÒf QØi2 +ùèa7Íâðg°fÕ°Ðo9a ÷# °Øybc)Èèi1ãqâè]¬çl;cN¦SÃ_ RªmTqJ ´ñÂ\`ͦfÒo´ÚÄ2|R" +D¾ÜdáñJÜW2Üa9éNgCÍìæ.ÔêöUAÈsBf·úeþ§,¯áy<ÞvÃà* KJÐÚ0¬ûJµ-.¯¸Òçã»~Kb¾°¬cs8$®pL¶ãhÅ ,»È¤ã>®cð +RZÚ¶ïðèEÂû¦ä¾ÏT¦?O;Zõ½NÜG¢°& .P!g"¿r¡mQ ÄRÒ81HX£V¯¨ä²ÃJ +âh¾'bâ "Ð5Áf(*RJ nK< +¨ÜC8ä1a»CÊJEipd©RQ¸`ö·pÉPQ5ôÉ).ÕTµ[LÓbØeOÈh-BÖMDCZµõÀ%¾ªî¼»Ñ# ²lhÒèc|ä1Ø@24¸Ý1[N2+ Ê»/îôÖ¯c Þ˲Üñ2B£g¾KÓDÏÝ× ©8ÈØ1èè¶P·]Ú7,% +BËTS¬°È@8^«(2HO � +÷àîÒàCàÒ¯àÓ®xöcc$*³ £4Ä-,$µ[-»oÃW½ãp¹ëjÞ8_ÖWh+´(Ó¢èã£BÜÜQ,¶¦ÎCzÕÚkÔÑu¬Ë.v¯®Aj¿ ,£"90C¾¸§ZÔmgÒÊ»½ÝöÄL·>&ïÆhöYÚä¿ �ä²ÌW~¹Í0à8-ìÎÑëý@Ê6ÁÁ ²á¼âÙJ94;G+,Ù¯rºí¬XÏÍcê¾´Ù¤ÊÂc>ÿß47«ùÃ?ã.ÝÝ®x¶S"Á¸n ròKà$ Öþ6[V>¸ iÃmT +¥¥JÁÉAU.!2÷I&À(cJUª¹ÒNêWBo©Å9S +! á°è>7bïQ${/ ;: +¼ +YÆÍJ .K`ç&¯ô4¶ôÁh4= åJ¼Cü³àq'`¡6¯`äKØf.l 9TXÏÁBи¹b¾_:ÂV0ù¿unDã¬U`Ø@ AO#DEtMÁ@D* ØàfNà5 *\Wþ¥#?5H±Vò¤EGÒHÁ¨0 ¸öX±ÊèDLÅìÂà(¥5ÐÞe%ãBóa¦°§æJ +¼9ÌÀR¬%:G¤PnþRòk9 RÍ©TlßqËPÓÊ{O©ü)¨6¨ +$ÇFÏI#Þt©-¤ÄâEm#Êh3 Äø§¤øÎ@A +ÞQÏ£Ógé £åJ=ÇÒ¤Uããø òCÁI"Õ(1JIË æàHpxTt¤N`+)¬ÀÞE"«-Oy]@²xÑz3Fݤm¶"#?Y"ép 4O0hÔvfª!ÖYWkAhh3ävËlobl¢|,R A¡#5¤|¬)9ÚW Ãÿ,NÁ"vFA¼¦Ôâ.Ý +,¤ÓåËæT£ü+¯ú �'¾ á8o$ɬPZ89RÉx6X(9m´?p-¸ Q4ÐtAmáWX,ÈÉ1oîIJB +³Ï¬9òFä Òwê®4R»^CÏ °3&4Ì£-rÒ)Äf 6b%Цà¡XlC!'CJÚ0§B`´ì Õ®"Ä^W +{ó6(Tg@â2êKi`HXϰPÄÃÁsÅ ÈUhFgk¯1A!n Åe¼Sc;v&Å%väUÎc \pK±ÁÆrCM8X®gFê³ÑÍEÇPó0 ¤±ø¹¨C÷KâS iLÁ¨9féEdVQuUPçø3ÎyÆ¿ÄIÅKPعÏ'='ƦÜbÁm±ÓEMaì]§Ãp-Ë;Ý:´îSLö¥eÝE©À 2©ÙÀðÆÄ+z,1Ë +C.?²OÑb²¼q¤®T³FeÌ)¯wtÚâ8,¢ÎK'ÆIùlÈé#¡çºn&êíϵ(x×b¨éMhÁ �Å#ô;fºHªå¥Ñ ÒúóijP9É5'$óx;)a[YQ¡¸]B)õùı&ìÛ¹íI¬7¤S3¿¥)Õm^ºé®ç(¹ÕxìÎíº÷fÝÃÅ>ø_PÄWûÌ e-δ8gaEgD»`' IiiáÄ`°aÖ §ÎXB«ÆdI¤±ï@Z¡¯(Ñ`òÊù ·ÜQO~þ¹ºEbé¨ÖFïhr ¬áC,K¹fëÑ®")¨&N2æcÚ³DÝ9©õ«Ë³.¡¶ÙC¢v9 °n +G¾ÜÚne|§,ȱ_¼¼Þy¶Öç={Õôäû}oÇWUÃ"8U7Èö0¥å+Sl$ìßû ö)¸ÓÔÿ0Q{]zÒCDú:¶ïªYI¸ÈÊ¡(ûiâòNÈ/*ý@Ê3ÉOÏDÇ£ v¯Þ/¸phÐ3M|Öj¢v`ä2HͨúçÃjènÑMÄ àÄ Eîz%ºl®o:<B¨YôE"\¯ Äi`Ðgè ¨ÈÈùV+*}% éFCþs¬¤ê¦æ à vH2Nc42@Ì ó(ÐÅdÖ\Bü4>dk:c*rºá +<ÎÒáNÖ®V©³Ê\¡®êÎê"Ï,öàJø¼ïîP¨/â¢LÞðç4*ÐäÌûãb# Ò¢ÊÖâЧ|×ʤ`аý*¨àê|íÑ^*Gæ¥1,~î´îì¢ "ãI,ã©2b©>ßILÐqТ.ðbáJVed7 +l÷/ú)úcó �êÂF` ` +endstream +endobj +444 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +446 0 obj +<< +/Length 2367 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ 'eÒ¡* BapÐPÆIÓQ¸qI¡I0(a/&©É\1 gÔ`(+Käâ T*JeAMM#ÕN<5dyrK.ÁXlv[=¦Ïk¶C)ÌÆr4yºûE£¤¨d:!"а]j£ v¾0I,YÇ +od Q Òșã èoórù·è ÆD7ìJH ·Áñ+|yÉÜÒ7xîô/(ÆÒþðPÆ:CÞ9zx .â}'°ãÔÿ@ò¯å´ëúÚ©Mh½Ápfø(HØb5¢¼üA@¦2ÂÑB(¸HR* MKV¥ «*¾Qóì bÆ8éøÌ:ÃFÒ¼Ï@Ç#KÒæ £|Rï Ãê:Á �£°Ê9/0ÒìÍáã9ìãAt( ¢2Ö)hhÁo Édù²ìä0»#¥+A¸hͳ¬ûC3´Ïe+S \hÛªMH¯KÆõMV6Òrb¦èâKO»Y0Ã|PñR! 8@=Pc}%(55ä©Ú!_*>ï UXæÝ¬§^6ïRËɬÂå9dÂc%ø*3`¤^ W RD©6¥K}X÷íUÙ¸*ªÒeX cÊ1#0ÒÎÑ#À[â/ü +æ øÄæAð&Q£sÂϯA C& Ww])TàløÞµXø`@4 #8Ñj¸+ªâøÍÛ]èxlåø>bü_aFMeå(6¦*²ê½l"æùÎw¹Î~7è#v¸èú! Zcÿ§ZMëàqO×ñÜ{RØÜV©«rÚÆµ_#a r°ßæfä½Bh%¢$ΰÚ0³óPç\Aæ2M:KAW+ÕÀ×tdv·³ÖHõýf`<Vpªak|! áÕ¸Ì0îT/wÈàh }ñãå5O2¾ÝÉ©Gè0èªfI.Íû>sjX Q0ÅLÄ@je¾,³*1 ÛÖ ù!l,õ:Úpv!°:´FõàÚ)<¬úßLàf +çý ÊÃKlÊ ôpM¡)ÍC 2«®B}9ÑàÒÈö +*Á¼60äHÁJò.ÖhÃts!À70Ó¤GHÌR`S«oní¤¹Àtöº2#`Ȫ*Dâá¡Z%ÄÒÖ{¨( ¡åðÏ&ß3"jý¼%Æî¢C¡ * E +H\ÁwxÒÚQ§HðÊôûLEÈè"ê'å´Ùà +M6 + uP2K©|'mPQOyó1Âúw'Ö£7ÙDÌÅà'ÒxUßÜ×sM) +'ÙºÐçNs2&CÒtr!IÌÅ"âRJè*¨~¾ÉÍ ôP&Àá=âJYµG£ iª& Z(f@ÈL7NV19é ,Jɺk2æm; +T)3 à5æ2¢Í;7*J®¤51(0ZhUSZyÓKV©m35 �¨»xÍ£VðAGëK~:U + +&ñP¸5 ¾ÊVé·eëß³ML63³Éheå¤ ¥ùDKÈR +S=s[hå·³êp£<èZby¬3ÅôÈô&Òh~X;a"-íU´P#¨®+\AÐ;º*ýOK;j 0 xW H"´ÀÊe4SªMEè®#á1n¿ ¿RbNQFyX÷åíÒ4àáÃ$gÐ9Cm �ÈÙ½<ÚráÉ&ÐG¸¨hL®È+Õ{æpX'O]9tÍsÅ æN0ð/Ò¬9ôLÀ¦BÐEǵz\ÂË 2Ö«&µHÕÍÌÒcAJO%+ºò6Yú»M3-ª§Õ TW -n5b¿Ü+ O½ ´ë^°;à°²ôkª=pÎvì&ð¡ò¥ +º]Omt^ªÑ9úÜn£Ìuâj EÁÁÕZéå%¼õèÖAÓZkm12ݹ`J.L5þÉú2̦3uïµÚwrï +K¶$ë 7óÙsþoZÀ½¥÷YbøoõjS¡5SAxB¡TÜÉ(D +¡"¡}æÆÁ·Ï¿@¶n±ZÌÒíçÀ¾ôÝǵU³Ô³Ø¯aY+ÀhÒ4Ißze²ñáæ\X*eüáI +çz§ì:û?r¨oÊùfþ_à©°IÌz Y´ò$ß!O*ìc±¶Eú êµC³ÇB±Õº~gz+©íÄeh"/çÞðw½»l8ñm½iä@lz0;ÐO>8Îâv sSÓ+Pç¸÷ Ùu)ê¡Á!LíJ)V}«uóJEÞ]r=N¨.Ýzî{ìO³öµ?H=*÷Kª¿F°ßÚ¯SÍ+Gm6¦k©íL£RÜÏʮݽU_¡_|å,ú!Äü +[ �ztE +ye´9d(ó,¢B +endstream +endobj +447 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +449 0 obj +<< +/Length 2382 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3Î¥BT # C ÑØ\6HÅ£qpÄi1*%£ &f + + b¤O&'c¨Ün(*¢Ôäs7Øo1NS%ìÜ :\c)ÈèiÀ3ÈÞlÉ'!p¦EPF"á¸àgX"Ñ<Mk±«*ëw¼Þï·ü +iÃDÓ àÒm4®f#©Ðèo7gsôb0â:1Ò)ßíË»Ã:pã¼6èÆâ¤CâöWçJ¨Øj.ìFcQÀ ËcZ)£3bhÊ7c(æÏ(£¶ë©@R,;ð¸@ "Fïº.ö¦øP"@¢»2 㸠ËbàP.!`@#£ 0¢ì2ÆQ R* N¢ì fAnï«*Ø`Ó4l&"X( âH*º°£²§D NÔêâ¼'Òä¼*LRJF¢aF´pûÖñ$ÛâÄï¨lý¡P+¢ø!ª* +x"Be % Âî»ó˸ñ¼¯8dªOcÝ6½iú)ªpcD?±C(9 1èÒèS²4Ì"Â+`Ãpèo¼!Ã=óu]f¿hZl6«GR)KSÐ%l9#:æ¾2pXèN TCͪ6«p;®L8S=Jæ:lhA£Ø2 £ØÈ kî¿@·XÚ7à[ç°÷àÓ ±{yÝá¦*¡ÂÔÞr»{ÚSn¼/W@î4±. ÎÝYØä2¸CxÍ®y¸Ýììê:ÊK³¡¢¤Ñ£êÄÙMíP Í79'hÈoVÌrÇ×É êIVP«Ùzڸʳ]° ·j_U@dʶ_¼Úà2cHÌ4ÁÚBè7CsCÈAkÑâ@J¢¨3sèl0̼¬v7FØ*çòµ¾×ÙÝSÊ[ÄM£r] ð\&æo HP6kãÿÒ<+êð±,ฮkøî¯<ªô;ý¡ðzPª«MMD¥*DË÷º÷Úzd|Ge%ò¼;ýn-Ƹ÷"ÄÃAy9'@:$xsgÍù4v&ÌËÊ6gJÜ2 µÚS.)Tþjöq Èõ=a_9 ¤3Øp ~"®ÈôHSqBÅ=¾XbðÜoDWS¼?Yäú¸Çä18ÈA`A Ól0ïfi<$Ððpál/º,-Hk Ãt9píê@o!ëÙJMt!¦£e®ÂÉe5éaK¼´óKé.l7IAÓSçy<F .<À Vh4½C$ÅABs¹¶æÿÔµCHqKÀjåÚÌP ày½ÎPØa\¹v0ç(˶Î#z0\p>!ÕÅ)×4¯L±JYªl %Ì»@Ò],µV|yó§ä¦³úàÊ@¦ s#ïNh¡5<¼$=U?¸Æñ@Tt©Ï¨ÙA(l¤'ϹdFÍÖMrN1äâãImZ0È6ïäòQêEI©U.¦TÛà(U=Oêª%ø3ðª(*¡Jh7Q +)ãTŶ¥ÂxW Ì~ËYû@O7C¤j`*Åj *ªÑ æÔ®jN¬2/HØ5>äºÈEîKJÓZ´µlVj+HNËs¥Ó+L@ogq91®óLB©Úó^³ fªvbjSL]~ »f _öá©3<ãKéb« 0W8ÆÎJl-ÛLx©®3j#©¸f¥õ³èngîBÐJ¦U±E³ê©µ28Õ®X&þê¸pÿÛl¨´Wåq`uÏÕ©ßT/¥Gmíï7Úk\ +LpqX8¨Í®r t¹6çl£¡tt©ÓO¬Rß#×KR-`Ú%©^²Qôä[âLK0¯úE8~Í:Á0ÉbØ B²ÃIC'#<ô.aáÃhM»1ÜÃ3+ L<Êò$ÁȸN¡T«®mÙ8qÃÇPwØHT²e&oú-àü¢¶mÉø^49 ódD9ËFÚ;B»°|Íj@8]t׬ X2eu Ê¡nÍ@ÒTg¤³;òi\IÛ)K£2{ÙÇ#*¬ü®ªN¶ o\Ĺ)¶4îÚÊXf5 ³"eN©`¨ÛöXJ¬bGí]41nê©Ác³#Ô'e¢qÅíuÉp +èÖ¯6ökÉo[µú¥#v]RY]ö=z¡(þäD*A-lóA´NÍ C{VjÂây6"S¤õ)ãâ:WRlªÚ²õAoò +ȰU +Xk%.µÜR drhÇOÓ¤ªµ¹=§ÒÕaVþU~¼Æ¢øåå!B¶o}}@7ÒJ*Û¡PíXÕ{ÙJÖÿ;»ÃòLÐÚtzÃíbfÚÓ6=ï«'Yy@NåVmæÙéXºÎzì uÖ¥ê÷*Û1;{¹XXa`¸e f-qXÑι,y0(OßÉwºPÃÁêrid¡ÛLâ!ÝûÃxÚ æÑm%Þ¾bôÚ¥ðe g!µÛîßÍú¹×ò¾»¬±>Ûnx#Si¬Õö0ÂNÔá\¡5ÃxuÍ\AJ8ö%αH©ý< ©1[Û¿½éã{ñ«êÎ/½øãÊkòIAÐ6:älÉ îvýìö¨Ð¦&ÊÄÓ¬È.hèÑ´¼hkmm<ÌÈ¢B +endstream +endobj +450 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +452 0 obj +<< +/Length 2219 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* B¡AhÄa/G £qpÄi2*&³@P ¨h2 9 Zo9§!ÞÐdÌÂIPÕG#aT¨h*6Ì¥ U<`0Ìàa@Âr0nkÅ&}ÇØ(^Q\ÎS¤Ìi2ÄK ò-1íæqéa¹jõ¦3©Èçh6äe2®·pU4e©FÆ#Vz^04×nsréA¸Þ ;=l=+@I¹N¿èiÛx%ri|¦,b&¢"kR9#;R1ëæä(ÁÂË Ò^"h<#Áª¤³ÔEI*]1.Òp¬T'gÊ:7£pæ¨40Ë)kò ",/LÊ<0rG0¬Rº Ðæ6 #l4òèæ4 ã¨Ø¸8ò Þá.cHè>xÇÁí`ÒÕACBÎb /ê7I±ÄñKÓ+!¢LÂÃèôd'1¨cqÌvëA±ðÍBÖäÏrÊÃrLFÉÒZÒgÒì3-à¾'b@* +(¦*?oí&B'Àâx®'Z68jZÂ¥°*ëÿ �«2CA°aEÃT´_M+ìlÔA¨abÚBjÚð8&[â\¢ÑPýqÒtPª9~Ø4̵SèxcÔ#Rã #é29UZ¯µ½ç[Ê5î9.ÎBû*ã;)ºº¯¬65 Ü6Àâ0L¬3û +5sÂɹ2÷:¦XZ^ߺ0P;¶ Þ;«ºÖ,#¬&¶mèÄ6À1mVé# ɾA3L'vºò_° +jªêlnm÷&»PÄ:¤Ë¸<GÞ7ËCÕmô»Ó.üÔ Ó¼#·<Ø7mý +¼]ÒJ'$+e÷ s!6ãx0nTâYn_2âr2½f_$«ß¾6Ì®þS#v)èªh̬±bFÒ´óëv7AÛ «ÄAJY+-f¬÷vâ9¯°¹Ðz©|Áµôd_`cî0h½ã©²¼kCco,夵ÒÞ\K+¼5ÔÃ@X4Ǿt.ú`S_^/½ã9ºq¦5Ö`lI´?0 ÝHoÃÁ8oPä%Ó¹Nñ©ç9^u{YÍ ±BÌ[á)n-12¸X< CX) à³êM0ó $B~Å×ÅpɼLtfö(E$Ìq¢«^(°xäάsXDE§y4='®CàP|òy>çås 2P* ¡®ì`:}La¨ö8¤A F ÔvQê?H*É38Ík8WzdFt¿£ K¥¿¦7>ÓJkSI7â}S¡ÂNéåX¡8Õ¥T(f]Ëåç/3$ÐUz¦¦; �Ãr±{*Òk«¦n®Éd ]NV YK1g-ÂZc inRõ½LWN\ +»Ó0FÁ1ÐÂ?Ð ÂHN +²Ïõê½ÐÐ3Fê21e6ɸ0`¬SM(ÚðÉ6LwP(Bÿ¡JreÔ"ÉæsFê²æaXaÄo"ô|Ò@¯è2øK -hÀÑÌd«¬2Ó5¶ÔTtòÝ;¹âèsC[¬-RmSf¶ÔíÝËq9147hJÞ[Û}mýÀÚÀÚá\9a ®(2¸Ë8fâñÓ.XëÃâPæãK¡Ü±º#w#3Vu%ÕZ{Xvr(ÖÚß>éñ.x¼G*åÞDGåç½æõµwfOn7;éDÇo9×;AX.A Ìr+¯Ê@¿XÁai½þÿME+¡R}´TÈä {ñÂGWV¨bFHBáj-¨¸Úú¡l/¿0ÊCL?/ø +x +ôAé çÕäCòx$Ï ´gRÊi>5¥²âÓ ñuó/7ÕÇ9oÔ3xúyÖ&?X×Ds»ÝÏt¹&)Éd¤rW7$<YÊ_X½(ô,¦ÊU=YYM<¯]RÉ© ãU-¸§³õOù}@XÝAÀ¹ÈUT`òõY¨é#äÜ«Äy£µîlÒ ¶FÚ°kqéIÊõÓ2hMI²v'å<S²x>³ÕûO:o¤QjëL1ZÀªë%C\U"¦ ê¡U*Å\qèÉ©×8æl]|JUªþªR©jÝiv1§5 +àè(j8ÑOÖZV|ÙßuW§MøZä¬2ón(ͼ®ÁÂVâûµÕ¥CÞ,®Ïc1oJ=¯kî¿)Ç<êí hÉ{D´Ù\ÖãÇøMá Ó£Ïdõ kEÑ"æ´'^d¢ðe%±»ÍÂæZ·kaôOÒÛ¸gnív¹.~æ:{£:²Vë: ÊF¶{l/C+²/=Ù;¦pÝc®¶nÁÙwh\ݳm»ü9w»÷%ï6hðjõ<ÛÚ Þt¾<ÒjR +endstream +endobj +453 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +456 0 obj +<< +/Length 2317 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢"N¥BT1 B¡AhÄn.FtxÄi1*%£©3 +å ÈÂm Tb4 SÆC!ÌRZ°ÎS¤Ìi2ÄCA@c70Ç#)Ðêr7Lä@W&ÉÄ2A$¨T"ÊëM® +F¤BawmÊéAõàPl²Y«e»W×]d÷¸aJ° + +Q°ÞwÎX£ïÒÉÌ -³SoT#µf·]A6û?wO¾¥ráçäz;ÝöþÀ°n`ð±ÀÒ7#£í@,0ÆÇnX@ïØÆÆ£s7ÀÐD9´à¦M¦¶M¢î9.[4 #8Ðèºc+ªëºa÷(êK~!á°n¾àS®+ÎKp²½±ø.ûEr3Ò°¿oêüÀ0L#<Àã§Á0[·/0ð% +CC.2Ã/tH#A»`!Ââ8ÒKÕÌpó´Íh\ñ;bÙ¶¯Ä® .ØÂ8ßJ3,&Ìâ²)bx&"p ¬æ0ðÊÃpÈéB-#À) ph»"uÈa]a°\Wa°jù(@¨ÈÕÒ¦¯¦á@<Q!pdªA¨r +Lk7aJ¢½íSâ"KµÐ.(nÁòYqcÔ ÃTà6 #4óhÐ7£c&Æ1Ì@=FÃ|(í# AJãU áaسÎX+a¥whIŦ§6!°¡ÀP!ÒØè[nÖÀhFÐÎ-pÜmí̸]y5Ø!mxgYªæfäÓÛ:Ï´"¥6̳bh*³â}L! %ììеm¦Ü" â¸Ùâú×JF¨ÚÁ �'¢&â°q(&IÂôù]Å¡¥eY>e+òjtJçyí¤ÀÂãHà:`wIrIú{ÂêW^wñ\eÇ8ÏκYé²Ã2ûG7ÎóýTUUc ?u.äD8¡¯Zò¯l¬Êò8e;&¶ï{¬aPÒhAáÉWÈCxv2GY£òNÙð Ì/ÇÌðÈ 26+µ¥Wæè3foX*÷Òv4D¥\ò"òÊcókäÒ&öèwdÁÛ +¹+ ð®="p{J +DìvàrwÏÁNwÑùE²'ÕXÒa»4Ï[àzÑ|Kl`æBßfUì·fÆh ;5øø¨bæ]bÚ*<Å %§ �#sqÐ;ØëtvÜX\çòHȼÍ\aïùD© äjK1¨ÿ¥ÔPêeè54ÀDÖ SrCJ �4QH¥F¥i@ö2FRJ£v£Ü¤H)3µÓÑ($*Me¶R%' #%QürZ& y/4´p ËÞQsN©ÞÅÔ£ç:D ȧ¨£'±ÇQêD/¥,¦ÔuSÊQ*ELøëâ0J½òåfà!ë¦eu«¦T°\*8 É»íZÎåmÖ¸"´dGíEu5EØ»4Wë z;¾(*_ú*0&Á£ÞaL1K0ô(Ä£KV2º¾?F%#§jN¦, H^¤Êþ³ZRí¹gÍ �A Í.ÍÅoM6ynWf½f²Ïlj;¶VëBÕ +£T¡ Õ nË +(ð¡îåÙÂ8ÈØ5¬EmÈRn ÙÓ®aÍ RA(6^Ì´ÕqFÝE¸uK 5w¡Y-2ÔY©Ý˦ðk¬HÙäתpÊÂX-qù=QfMh( ì´ °Om³³A>3¬h³ç °2?àï �ÆèÃ$`a@ï �ágcUh 0(&Äã FÓí@TyÊÂ-9f>bQñ@3wøsÂapÀS(ã)PI*ÝXýO£ÕZ 3ZçQp ûÆÃy}p ¨ê¡¯öaà +¿hÙ;ô/-ô±éQ*ÄÆ'¬k±ÁH+Ðç˰êà o ·³#_2ÎrMÀKjjÊhqmø`1¯Å(Ã=Iï+×f. ¸Úk +&¡°;ò`µaÓ(v +YPeYI3ÀçܳKÑX29ç¦f×L¬ìªP¥ (ÉGª3mèõ[·Ut"7tì²°KFÓ7*¶imJ¦ÚI·MH½{#IÇSõóPîN¨Ìî&Ãjsbx©ÕF7U³ÅdvãiQëvBAË®e;e]VWkj+Mªm9´0ÊÑJkGi5ÌÀ×Y4Ô.fèj·<§²5»e$Ä×´±â¬Y¸JõÃÜ 7vÆààhîm +M¶¶öâÜâµZ³MU×Ã.¬ñ9<\H¡qýÈÜÚòóºy!VNþgôð4ê{¢7®Ü]ä|[&±,ã£ß[ZZNæ¦'ïýËLß%èuA°2ÁUúòÜD¢)#&$¶4üðúñê.÷a#ÏÚ[bÄC¦qCW¼4øÉÔ 1le|Á()¡LéÚèæiÈuÌañ¢!P +"Fzõ!Dø£qâ¯[ãäª-³ÚHÆþ3$PQOôäF$Åî(æeÕ '¸"0@@ +endstream +endobj +457 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +459 0 obj +<< +/Length 2333 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPaP¨dZ1c¶¢1LIpÀa$*MBa@Âr0E%CU $¦CAUf)®ñ 2Ä(*¢a¼î-7Sï2 æa®Û#R¡0»r8»Öë£ + d³Z ¹[eºáãi¢ó{¯_´ç3Æi3L§1Ó <Lfü¤Üa:`ò|^9êr9âEpæc9L¦á/ÏèÅÙjpÄd. ª±± âÁ·éð83A¤Î41SÇ2Ìö3ÒâÁ¢êжëãJ¿°JÓ Íz6Ai&°£xß8ã0cËæ1Ns é2CÊë»#¶î»ïÇ)ïxlê6 +d"¯,ûͽÖÖJ°\èR¾ËÃFÝ,bK(0ä7ÌCL^íâh¾)"'¢h' cÎá;9¼c¤Ë Í)Iz<¢tH`¨xj>*r°$ËÕ §@*¢8*P)££®7aJ£³Ó:"Kº,)M<Ú=áª*S)Bþ ¼ # 4ï æ4 ã¨ØÈ¼5PäòL`Þî2HèLCxÇ<O0ÒâNãó=ÐkuØQݻѷ!IRà«¡¢<ÓIÍ?PªU f@1ÝAmQ©á PÆ<w[WµÌÜ7[Þ9\Á¡ +(¦*MVX)B®`'Îx®'f¹XgB¦x*Ü0#]ðØf½ô@½?+ '"p©=Øîº¶AÃAÈåùM^xPj80jVoçyîW(È%E®ûØAH Ôþ!÷ýEe +sp¾¡iºÇê5 �7iuÑõh+ØmHµÓ`ê«ØbÈ)µ;§¡@Ð'Ã(S¸ºhÛ°;OÓs»Ôm)àjîpÈÃ2¸ÀA¡ÎøÑJ<\uáÏNìÉ´1\;9?ÃE¿RA@ÛhЬzC¨èkxV µìG´EKMQÙ7ÊCaFGXì¸qæX 7,Ó²R~(ê7¢w]¦a¦"ö_W$i#¸ÆÔ +²w:!È!ànĪ9sj JådÐ=ǼÕA@w.u"è]±§ +fôßÊuCyUUS"˽f̵³g +â<U)Ñ^D²÷ AgBéAÇ"æG"ÄqipÀs +aÌ1æ*4´¼ñ - ¯ÅËT|-ñøÙÒI$äP;ÑqÅórRXdEÇFA4hvâÎ<òJVáîA©Z;tB~9ý?èÅÙdNlø5§Øy5QQCÉÖ»(%#¨U-l:²½K½,ÑÚPG§Á @ß,s¤xQ qÞÈD¼S +cL©5&´ÚÓsN«¥u§ÄüòCripµ½/f½EÍQ6&În(ÜPr ÷J|ð4+âÅ@:ÉYk4ï-¤µJ«e1ø·×P¹äPÇd~oÎ ¿QH +óWîG¸º_ +cmeB @ÂÃ{ aê1@ÜÅ Pìrº2éð3DÚ¸ÚK(qÍÆ5²æ`Ì¥nm@L mÅ·VÒ¤ÕCl$6&Wk-m(MvúI °P®+ÅEQ{{UAl Î×¶ ýlTóll Å·0åÜË·qö¹ÒÅm]£!$e2¿Ï#pìlû±NþÆæñSÆôAoÀúk¸2/gÖOÀ°ZâÔãhÐ4ÂxRc4Ý}(ðÁÃRæëôÀÿ¿7öýðú=Ïñÿ@É |·pù¥¯;ï´¡`ÓÊè*c^D?°nè>p¨}<0é£+üaª /n¤C"c «È*¤ÆCÐmÔó~F"·2át$E¥&)RLE´Iq9q2-xÌ#Eã°Ñ¸*U Òu©b_9/4äÓùÊgä£x¤<ÄHdɬެÁϹVhçxö¡$ÜÕ%ö'gäE)3ݲUNk8ñ:7HêZéÉo=§Tº¦YJ~KòÇx¦ �dæ¾±:l鸦þ¦ÓÈÇP#]E9õ$¹GÓ·À+£Vʰ)%Iy5äþKô2? +ÊbnN É:^q(z¢8æ©Qj©F)¥ò#`áÃ/Ûól(2mÀåSÔ®ÅòuÔ¥nëv@G#e>´ÖhÓu²TDYÔùiÆ>¶ÕF[Ë1Ô¨¿S^*ì¢{ÖÞï{M-qQpK~Õî {a5¢µV VáçééHØWD%IÛÞi%*õhY®ÄYKÈÝlu²]ZÜ<Ïð]Òq]0-ZkÕFÚ¡¯%£ý8±[ omzN¡`À +yØT î©·ÝðàK¤*LãskT +½ÍÉ1&9ÈѦgé<:ìäèú~"°$¼ZÄ +q\'Åé×õÏ×yC +p2<¹w¾úÂöoÛ?pýowÇU +ó@oqFc¯Ú½§3.'Òòï|ªÁ·KwÖ?4º"Ãdæùçýñ +Â)D +endstream +endobj +460 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +462 0 obj +<< +/Length 3668 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3'EÒ¡* BapÐP´b7Æ#:@b5ÂÈÑÂT§ ÈÂm2§)Üdn4§3ÈÒp:MæáM#aUúdN. i%JØ(a.HìAAÞÉf6Jª9GTC!ÌRµãëµû f QØÂl:í û Ó5À`©PÍ Di¥ãuYS-e³ïó¹ú\gQÒy3MháдZBIÌ@n½OV³x³c³t¸8>¨(cHûxìKZç³ê8S®»-3î2óÀ´o#ÌÞ@Â7ctÞ6oZ©r.Ã!Â¾Æ ö:CxØ÷# @9£Ê4ËÞÚÃxÆ:ap@×Ça vø³lëÐM¬¿n[üÊ »£*°"ë«ÏÓN'Ï(@õůtÀ¾+®!OÛ+133$áÌîõ5µ,YÍÃ@3 ÏòDAÃKDÓZNÖ0ÀÒ1Æ1ÐîÙ·¯(7£Äe%»Ñ ì½HT7Ep@;-+bø¨ B¨' �ñÌ'Ì TÊG±ü!¶®úºêÅ¿ì¿6@?Ë<.¹³d%7½uOTÆUkÆ´qB¬! õ-p9·à8UÕÍ{E£d<"ºLDîur4Wuí`Øv-d¶Í~>ômNª`ZÑ4bÄþÝ¡DÂðNs3ѹÖj*><(IÒ¤3e,L«ª£'wfðüÏiP5(&/Ý +Õæ¯%=P-O0Ñ$½:2I4ºL°©ëzí5jiõË>ÜúÅÒkÎ}¼ÁÌÄ 9HR#{4AiÍÁIT¢É<©¾Ûp*¡oiêã¼ê·3§¬ÍÕp9t=Ý7=sÕxór¶RD9çCpôoüùõwMÑ5CPÂ9qðÓPÊ5Åu +a³eÃÁ)üK©½nk_v|y_áÙX¹>½W¼;»ß¿ð>ÃDÑtmõÑkSêó*2Òû*¨UIHñ°Ê«Ãz@{( ü±DÖQ[ Vì]«å°"ÆY)ò,äÉr* |MLÕb¾Mc@63djªÐân-1G@Èaék<ÁÕ æ£ð@ ÈÇ`nÝbf¡L´gÐÂà(¥ûPhTA\peÕv¥ ¡¸1ö5-½´Ð¾(X10#0¨ ñ3æ_J)¨D¹ùAh²Ø!¢"&$ÔÊ!@ÄÑe(a"¤ÐÍÃb2AÔ:Bö o<á½GÈ¢ÕÜéL{DAx¸isq0Æ8ÊXòK0¸àO4s¥è7dÁ%" +ñú@H !$0Lý²^ÄÙ{ßQjLÒBæ|CaÚD@`¡À6@8í5UÀlEêÍ$h`yU¨úa%%K"fEYèÅcNÝTVj Q +N£Á&jÑÐPlu&T9R PÛçZRtøE"ËÁ¤juÔ(õ0b$ô±«³ AÉAkÐÎ6O4c¤ÿlK2É +Z¹Inl¼T£L`qAl@kNLAA +pF¤XIÀDi±JQf AÈ( +E¤: Üéek$Z^R BÉä©9Ibl3T0ϹúÙ&¢ÆláÔ6%h+ìÕNÊ{+c$TFzUûV\«ÄN°UÐAXÁue ®Æ¹ +qp-a:Hòüí¬4ÖØ]bÁÇ d"ß»Ç\ +)í?µ¡é~*ó½Þè»ês¶eUòFT¥ákæµVÃTmq®`âäQ6ÂøP'Ü¥¶¶ÌÛ+oY + Á!öÚò«n!O#`Æäâ\Ë©wöt[ vÁ7»×·r5d/2í°ÜÊC¨ûp¶¢zi°Mi̪T¹Ù p8s>RZ2ÚÃmJDïÀ[Í6ZYÚCZ:$쬰ânV9±'`ÔüöO¡ßS¨Ë9Â}`d,pR]ÞÈc'( .©%<æOKå×)¨ [i,cZù^ÈUÒé �¿'»SìT.½\Måacjrä6sV[¹ÇnÖËúo!T8EC`w¿5¬Ö@rêÚ0+3·éâ«1¢tk4àkAS¥{ ;í´ÛíF*uoF!¶Á5BiÇtܨ(eJ9ø§ M>j]o%¥`ÅB¶-ØoàÌnk"\O)ß4_}&9L |5Ýê\cë¾úÐõç~U,'G²êEÕ]ÙÞ aS¯:h}4\¼ÙY` jYI +.ùGSÏW'ÉN¿ô;¦4¹D=)yÒä·>W2´òj Ê6¢X2eÝzM!Á>Üãc²þÒÌ P¡5öëç1»õ6?+.&ÃÍf¥®5 Ó|9Ô»L5ÕäÄ*òå ,î¦ï;¼9¦½ñ¬"\ªõ;o!£Iá·§K¯*ο&b¤Î&óBiU)°ê¼åRîT°6÷¾Ë,EL¶e)´=:k)èyï:ÍcUØÈõÁYáï úw)÷¦w¦çÉï-Ë5ÙË1y`«Æó((6Ì î ¡Cäb ðøi¯®Ò(J¥h-`Ü6äÐn¨¢LÒèZÏ k8d6éú μùÉ">oZ:í®Þ® íDØÝMØÝͤî âk-æZ9k% bÃ$èäª+2zF0qn+¾§'¼í"1ç´ÿÍ" +@ +à¾Âਠ¤ À £ +ÇúQÊ*ØÐßç`¤W Ü=dBÄrÍ)ªT*B£$hï#ê<²pøÔïÆç¢ö°*f?8¼òk6³°B J.õvRð~o4íbÒÙ-Jö¯r°D°Ä¦ó-Å,æPßè®Î¤<@ÚS£hÊBÔÚ0îÁÄ,<Ê0ÁÌÕj_¢Õî°ôñ5íÂìBÊI(/ÖÝØíéC`é¬j 0xøM">*ò³ëB<ËF`ÃhçmT±1 ÑEè¢ì ÄK¨"*w`PQS¢ÈÐq°oÃêD)Ôî±G Í.J1Øï\*Q¸MCúVþ¨ÈÎ10Xý~ÿµÏ /e®+áB±nìçÁT8MLê¥éèÖǶ×ðr2S%m¶ï,Þ¡Pà7ÄÈéÏD²XèòºBmä¢@R'®²Î©>WLÔS£l¤¢û%!,ÓéñãîÃ!ü*rk°^àPbÕÐfñk-é,©ÜÞð ßoFO +µ^QÀ`Ä>.ÄkúÑ^Rz⨼TÐÊ<Ähybö=ÌÕȤ¤Èns.Æ1ç¸éÏÞHê6`Æ `@ª®HÖÍp2õ,кÃ$"Ñ%}(m|Îdþ£Äz Ü¡EPµ JÐp%èEhë¬ÆÌîÌ·´âä àÞ s´¢ rü"¯Ð)%Xàä¨ê¯¢æHRDÓM³×fÓQ +x ¼ ½7lÓMÍj/jJKª +RBÃÅFÄ<SøÈózês¤ÊR¥ÑįÎè ã3?ÏNåÆjã0Pnf`Û,qu ' Ë@h2Ágâ*3]òðO F2ÙFq´>ò2Ô.$\"¯#ÒêîÂÌÂhºdR&VÏ¢vâ|ЬѦÑ<R¾/òÂÜh( +tÞÍ �éþ=϶ äT²G /to8¸æ4%мæàPþF*V¶'¬ÌÎ&ª¢bó +jÓQêÂA5åÂqLMÒ¨6àÓ4BàÂ'jò8 5=ÔÑHùKlñµ,íÖ-Û-Tç-ÐqWÔÄÐOr>Ó0N²ð³úÜMÌà2®ó°g¦> +¬11·C0¾Qóþ¢Ül<"khÃËp·G´¬ÄÔÁLT®¢®êò¯k@¯ËJÆõØÇ+´Çc>DÊÓ^fkÓEQÕk<¯ü^Z<`´Æ¡Rù#ÌþÐËö¦õÖ«õÜÄÆa^jÃm"®Uî¸õò¹+§Àæ¹Èx£¤ ëQ!k²"öÇK3êÐ·Ì Æ^DÒ1õ@Ý"q®¾ÜöæäOn½kÚ"jñ¥Iëôð¶jÿ NV¡O@ +endstream +endobj +463 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +465 0 obj +<< +/Length 3111 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* BapÐPÆIÓQ¸qI¡I0(a/&©É\1O4 ®M/# I'dÂMÊè(!È%" ¦F¦ÆÆê'ÃÆ²A¼Â9%bì6;-AgµPG!æc9NCI¼Ý¢ÑÈÒHT2EhEÒ«j£ v¾0ml|qÀÎ7² + +Á¨ ÑÔnsñHæÝp(]ï7»îD\ÆBnæa3}4áA¤æ 9MÇAR/ú~0ØÕCxÂ9 ì4£¸Ê9 ß + AP`@7ãt&ô°è fÁ¸h·B ®8`,LÈp¹è P;Ã#t0ùDäTaÅ1X@£apÚÅêò^ä¦irÖ&Éì0¾ëf`Â1°l¼éLísç/ÌL1ôâùb0¾'âp " &"È@3 ãÛ5ÝÏs9;ÁÐ$9ï¼6ý?XÊ0¶@¨&®\rÊûC(à0Ï-`Ü3 Ò$ÊKj¦+á¨hIJb Ê1- +XÂöxEM#LÔ5Mc]R¶K¢Û+ÒZ6ªL\ÌÂÇÙ£]6M¢èâ3Ù2X)(Æ4Ðï È6>P´KN°ìÂ1ï<s"Û¨U^¡ïbÊÃdÊwTt6]·~1^^W;{¥#eÕ¤ä6Dm2bYÜ>3=9Z oc`RD©9ÑUE6Þe¾¦*®JdGA �plEPÊy P勉* +B¨éì9jz!®Ó¬UÓ5¿ ä:c ëXÃyÄO¼x4n¾V£¨â©q,òe_Sþ ú+O¿tcaUk×amêèV@KÌk)! Ìè'.õëS×Á¶<¾QçÂ@4ñECÕÃéànH}~5£CQ¶Ô}ÒKùW eZ?sÈÎapÞLxÁDÛPhUA3oëµvÜ_tj µÿè(18N¶35ôqÁ±µx � +V@Ò{Cps5°¤ù¼GL"îbjÝÕ*2XC±ú})é9?ÒØÀP27ë|4·BÍVD7¤LçHSj«¦ðlsÉÑ´6$Fú!"%Wùy lªÂ°¶ºà^[unñ0Ùĸߣ[ wpb %§ +áÜKa/1@¾ÙIÉAG¥Ua0çêãîáÄ:O,,6÷Ädu%¼/ 0)ä +ÂE³Ü|+°%k#D£ÚaÇF@»#àÂMP®-À@øXL=l-2FÌ 2Jìvpl ¼1°¸ +à)8XÒ#\¸_DåEPÜâf$ +'¯èà@Î&ì²t9 éû~ zÆ(~Ñ`/8¦G#¨ÞÜ£vo +î&ÇbÏR2.+*¹ØàÕ$ ¥h¡$×=(jRÕUÅ R±Ä-9Kùæna 7PØgtø sý «´ÄRFHÒ;äqIÌ\Q³ú)üø_Áf.PA¹¹¥¶jM`ß6`U Õ +oÎÇ#<©.~*»éw4î º/(Çú �#Iæ4%ñXÓY@\0o Ê1Ä bÍÑQ1åLÉ@jS£BX8Å¥¢ÌZx24&D'âáM[òгpcø d-ðgBeôÀ@ôáóyOm· ¼øÙÊ3m³æBÒÜ n-Qn×âElÍC»Û`ÌZ¡ÙV3¼ÓUººS-á·øàh )¾4ªi®ºÍZ&ÜÝ ¥úay³Z«dàþaj+Q'òSJU+#ôp;Ò¬Ò`¥)mçG*&A +ê´Ç¤¿ò¾¹] wfu'f[e!~.¡&P¨%HH!8#FL,b½v÷1SpžWÐèÚðpWÁøZÆÔ¸Wn¢ 7X,µàÐ@ÚCfÍXRÉõ½T=>G*el°òÖ\Ì̺ÛÇ,4¡õ>çåÔµðبo %:fKE-lT;°0Ìò^»D §¬¶´±ò26AhöYÙ'Ê'àOä"QðÂÔ¶O£«@÷U3GÕ¸[8ãPB%f¢Ñ~íXÕd +ÁU½YR¡Ì<¾)öÖ¦ËÉZ4Í^-yÙgõH¿ÕNªI¬¼ØAßb>«®ÖÛ +.nmÔâ¤&C@¶iFð à´u T{ùnyî÷\ÙäÜ©9-yªjo3b¡hç9Îïýd3½§¼¤æ²Õ4¹Ñlçz WÔe"k7¢ÊÆrbìiø2²úç"n_ù0&¾:@ ï5l>?@ÈRË~oàÛÌ÷ÞêJòÇLDz8믤öBÓsPo4Yv|TyüïTÌ&Ìh¼~O)º·rÎÔP ÃõæFô£2 âÄ (úÉ ®l"GVÃ]½ªÌ"Ódú{¹è}÷µÓúQêPË©ù°oÕZ±~ Þ&÷hàÒ¼ø¾øhTì{Ò~¥xÿ½nlÉÕ³ô<r¾Wo½ú´{þïæGSô¼îàí0B|°Éì?Ǽ;G¼ôö¦`h$Ç* *~â¥&DîgúI +Vjî¾Â¤¬JZ¦pBôð/²>ÍE>K õ¯ÙìPK7 ·G¶àÆÕÄÝ � ®ÀÍ$ƸA¥$g }M¨H£-l®¨Ò¥¦pÔGèlv*¬Ç&J®¬ ÚOÒîîTL2 Â0pڥ˧ò Ï2® ÖglýªèjZÜ@Òº«²>ðRå +=˲y § ðβƨÎ"#ñ¨¨îe/$¢êh¨ +õÇb«¿J îè,h)ƽKFÌÃ&#B,ì&8çþcHs¢¾¶D(#¼¶Ë,lðh¬ô"«~Á<Bª¬#0\)¨¹"¹I¹ªv§°*º@äGÏFºæ°¶»°ûbÆk<½#tÌ«ÚLÒ*ѳLØÉÞÌä¿I<kú«þIBcôLêëv·ìlú#È$!ëçd¦µ¥XѪÊàP Ë`/ + ªP`²P@®<2:Ëdq*)´ÀpÅ. Ul1 +¥äàÊÃqäĬÈÈln!.¢Ì⸾QÍÌã,N;ââ.l§%ò> +rB˼H±s±v½¦ú+â³#5)¨ 4 4n¦[ì[rÏ2 Ïr$¸"ÖÀf¸²rÎ +Ng'îc´- A#*ò³$l¸¼N +E ¦Ë q$T+¦êrGÐã Îkh&1 ÇòÜï× ¥+&dî`MA1âl1n%ÅX6§ �Z-¬ê|Ì &if\h.îÆòfìÈòt.Ö_æ»å+äØ.êâØ¼3:ßD/4nt>íÕ5Ï dñ/Tõ3ññ<ì]=FÔ0óCò8óÃä?.0Bñγ¬ +endstream +endobj +466 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +468 0 obj +<< +/Length 2703 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3N¥BT8Âá ¡Æ\4Ti´ñ ã1ARJ +SÆs)¸ .)Ã)ØÄf5 +FS¡Ôän9htX)G +C«®saõ:í~O3 +&áàp6Lf¡¤ß9 çSa@rº]²£)ÈÞ 4¶AÃ\c2Î{ÐÐi9 »Îe +Jª1¥ÔÆO¥P«VaÈÈ\6¨W¥½?Bqg´ÓvÛxàPC×n ·35´h(ÖMÛÍï¿©L.ê²Ã ÌHlápd¤<K\,b£ +âh¾("`* +($"p"`Aâª"BÈ"ðä=®S¾¹ð +ÀFnØh ÊHñ¼«+Ð-jÜÄ4(*k$)¢p¨' â #K!P,¯J"ë°J骡²®¨Ðz8ÆÉhóÐö¯pÜcÒ83¬üÒ¾ Ð@Óm#AKt%ÂA`ÂÏfð¦ÓØP* ,W+2ä½0LB0²á85Là ØÜÚzÚ õM] ÂÔVá7¶V ÃcJUàÆß´¶3üNÁ¸¨"¬4Ôõn´åBãHÜ2 ã¸@;Ô¬¥|YãM£rÜ÷K`àÇSXi>¡I=µLÂ##B¬àÊ2_ PZ;ÔørJWâÛ �½Ã@Èè×8<U ¹GuÝíJØåx3#Öà)Úzá4mØ@1£¥rÊ]Mwk°æ7æöicÍm!W¹xÚ6étáv¯^ +ùwëviU·nÓx·°íÉsl6±©ëËs÷QUÞ9#è2µ«ô2_b¡º<x ; SêíÇCT¿0ÌuxÕ¶ðͨizÓæ©ªMÁ¼¯/íø¶÷ð|X¯¼]"àP.67^¾ÑÊ\«1Lâè Q¨a(7bè[a¥ö!XÓÜa[¢È¾/}àâ(ñáxªýÙyPOcçâ´Õ9-ªËc.#0ê~ÔIK*ð߯ô³é¼me_µ¾½ Y¨.¥Ü9¶&Ê~¦k®¥hÉ\S(ePeZ¸TZÛA¦-îç¾¶]Ê|dq«g! ºVM2º³PeCpy6¦Üâ8zká' ñ wÁÓzCY¼3ÜQß-¬1â>La 0¤¾½t|DØGBý¸?w¤ã(rï¹äG{ô|Nì) �Íi7¼2µU a,ChôF Á¼Îi$I6lÊ7èD$ua°6. +°a ÔܧÜT{õHQt@rxcãºsdà+L)È@,ÊC(<£¢%fràøyeE .BNÁ 6SjÁµÖú'¼´ ó0s´åÊ UH²k:ÐD¡L* h3.zA¦Õ=תê\³êWDE*#£ms1+ðª á8"ð®ôm¢¬Ñ Eâpa\ñаXÞô»2ö±Ç¤ÙÌQ§Ì6CÓiOª¦hÏÅdvªp4ªzΤd*¥VTH°&ÒUK)u0¢ àÓ:ÂÍé½9 QÃ~¼*7¨Z£¯(9>*SkME2´Ö¶%Tè3®@¢¬ªµHdu VÑZ=f[u59Ùg-A)®4¹¡ ¥]¥+¥´½êýMl µ°tîÃZf}¨°{Tä¬¬Ì ô·EÇgYÕ ]ê3¿aë©}ÑÚd\Pke°`øÈÉ â»ï{ Ô;Ö ÉY¸w¿õ dßÈRÐ1ÔÏÙÝÞèÍ +/ @ÌL·O¤ë¨¡³tYB¨e.ßÓ] k Y¤@Þ/u!»r:HJi&Ìéºç´ÆÆ¯7ÐØz¾KÝ¢ Òm18ÝSZÃ}ÿ\ÌAH¯[»¸÷&Õ0¨Vbæ`4Jñ¸!T/~o +¾egø ômÌ·-øÜ¯=]æþîßàå^9¦q¹LÛÍì:Aaw8¯[é<ð3´'ða5;,îµ ÔÏðý¡´?+I;ñC7É8ÖIßhOÔ¥Li¥,( bÝÒªXÃK9¸hô±äõ©üdKÎ ÎOÊ9ÿ)¸¼ªÓ,N] 6¿ç]5=¤98§{PØÓÜrÅî¾²Êû»d@?ç �£ #¹"3gkK5^ðàjëUß-{f, �¡àÜ(dÚ6ݪÂ@®ÂøE}0:ºèÕj¯ÌËt«Ù¼ÁnõÞù_o'uÏ]0V¶éɱ¦h2\E!D(ÉC0a4Ñ@¹íùÓ¦QôHfop!7lyjïåüÇóUSÍÕc¥V¡Ð<ÚGÿWMÖVZo[5#ì±lлå`Îþ¾§Ø +só oÎûÛB|ÿ ß]táxL*»O {ÊöÇÑîo¸Ä½ï¾8ÓbAMça9 eZ¦j1Å'ÂÒwS.%Î Ã|ò@LÄ>¤FæZ&DÉS.ÎLç4&hÁ#T a®6Ë#Ä0Þ Þ×ç°èã娱|ýRöiÅ9^ZÂ{^ô³'ÖPÜ>Pcæ£ì??ÂO*/A"þ,(÷G2OJJÔ DEMRÄ-XTêL·t¯04CJê¥+r¯ +^pØC ¢H¤Hd$¨-8÷dàoú-#Ö×Ĩ¤¤°K@¡rrOæöB¨;" -Ì($E0[¯÷Âc �où£ +"å(/çh0o¤º¤$0¶nÀ#ÜÜúÃ03O²3íâîäUVØic^©@@`ïÊÊn5ÍòezÔâ|Ê �íí¨6ð5¯TWî8YeÃ\q®®I6Üë:ØXcL\Årc>MòÍÀI<±¨@àåæÄBÝ¥ÌfÇ4Ã> 6(Hkc3À߯³n1ñ@zmØã"\À@`äB £8ˤ> +endstream +endobj +469 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +471 0 obj +<< +/Length 2477 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(Z1à ´n.¨adIpÀa +*MSäa6NSðd6C)ÌÆr4y¸SE£ÁHÃU§ +R¸ +Kê8 ïe³E%CU $ÃA*ã(ÌR·'ΩÌÊd ºÝYÊ ×jÎñêØofó¸,%.«G4¸^7(6f-,ö¢åV¥ýN¯[¯ØìÎ{]¾äA»Þïø9Ìõ+B +ÂKãÑ8ÄaÃÆ²KÖ +3 ùl¢Æ¹«Àf'fü Ô:Cp濨Ϋ¦¢ÈM¡0p\ʤ¦«P* ¸å ¡ ðäÞ #3Î4GÒ9cÏÇ-pÜÝ7Ü5ãKV1¯£¤~6xä!°6MäÊ<=n ³æÓMÁò?a °Í®K`Ê7k¬0À γD A0\H·£T®²sø +âh¾!()[Wâ³ZÖâª*:Üë¾ %<¤¬)OÈiB@"ûÀÉÈ0jUp °@+¢/6£v¥t¿Õªá¢®òÅk[ +ŵD.²ð½/ó =ôì>ÿÄ5äHä÷i«ð5¦¡i¼6õ¸¡qܲ2ë$Éa!DÕÜï (NÛ,¦ â´ ïÊc¤ZÜ/Ê6Ö£ ò8 #h63xÂ:-còxïI ãhà:ê5¬0Ì»#Ï¥ ~R§åjA,zQfµ]'¨Èo+[Ã#_# üÒöÍj*¨Ú@1ÕFc@:KN¢·.ú»¯+Úû Î+ÞÄ#a kSnÌIU2ÜLñ-K)Ù +zØÇ +¬ÁjË`Z2ÛÜtÕw7=)Èù m.͸ß!gM¸Ì7f¬4Ã=ÒA;®_Õvñjº]xaÓam§d(}(rI^^Ê hÿÐ\ ÏɧOÁºÀ Â_ +aT) æqvá%À´VïÓOo¬ñÖD[@omG¡½½wÂnúpMd6¸W°J|3°X ¨4ÄZ*ðÂXO +apU ¡`µ ÛtOèÉ95W$>-hæ ¦vÙékÉ0ê`]keå¦ �áÇAµ£´¸i´'ñö#´ÿ Yù¸xÁ Ég$íã"B¨Y£Ç/a=0<Q·=JÉxtëp²bÖ_/r" p'§4fÕ/ÐÆ[;XêíÃhA±¬È¹³I{ªVd5 @ÒÃÅÁ1¼°æáÊtn1QlÄÅØ; +¼)¨BA ªÆ¸Ûà´rr3¸¯G`Q#Ô@ +'ÍÉçùuò$7ȶ1zòFDÌÉÙ34âñVPt<TÄGYCÙ'-)ü·¢Q]Æy}a|Ây4Þk<ÙyÍå>8sµ»YÑ5S630M*ÑWñsÔ¶OtÀ§Ðe%©LÓ+@}i4PBaV!O¼PؽHã·:/PÍC`{ÝÚ@ îÃ\l ´òÉ(BJð!F$Vcã¥%bE`7rôQÍ^d)½ÆÚÁh5m¤òáWzÛ:kLÖ:àÝM';l42ia® (e,éînÈt¸àûÂÎîÈaÍJ8;²ÕZ¹mO²["ª1$Ù@J@Ý2KJOºk ÀPBM¥¦ÎÈscµ)@[¦½'JÓ}¶wèÆ±bsI áOuVÞ[Ðgvé&TÓj +nyÇßÛðò#ÄG7m~È(¿ØãBñ@«T ¢o>ÈÕ©tBu¬&ß³¢XÊ5`E Ò+åf¬ð6~ÐPJ]¥±U(¨kAkTXE^Ö¸Ø/cÛµ³>ê"¸ÿPDÆ´´:Cü!tá1Yî-cA¢rÍÚ.TáÃúZ"V{ïøÂ 9 á1¡@ænÈbmW¥òÝ2ui©l® ~ìF- pN3"Còé°(¸ê½32õªZ`AÂBÇhl8SZ1û§³2#zç¨:ÌÅÉ%¦*Ïì +Átµ¤ûÁ¦Lqe±}ø_ãtif6ûpºíã^uÓ(%\Re_Û·¿Í%`°ÐkM5਩Ák ù¶,XE7(ãsCx¿®j°ËoÏCÛËHUÁ½ðÍa»N+¬ù'%ÜBAË îi Eª a¢)è<¡` q,° BÈJðZ>wðkô4kFPÛ¥+[äj/çhX8)=¬Ë;~HÙ.¾ÑeSj7§i}ÑQ²a5u£Þ²ó7!¾ÝxJev³Õl³y"<¨°W0ÝL¯Çkó£/ëÙi¨4rÓJ¢µÞIâ³KëÞïܦÞVD +ÍÈÆJª·Æù_;é~°ÄÈéȹ¢Fï2²æ2ËÈÑ/á ;?vä~e£eÈF!$&eñp-ºùõÄjy$énk'øCF5Ò¸Û÷´¯È6ø P kP³(,Ю.úª¨Ò£ÀZÄ �¬È.P.DÖ=îNØèÄè$º¡nÈO®ZåYå +êgNQ%e $½¤/ëfSÅ@DDHöFvìÔÍÜìàÀ RX ` +endstream +endobj +472 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +475 0 obj +<< +/Length 2720 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢3'EÒ¡* ¡A'¦ctoKF1ÌÊn("#¬ìb3Eri|¢U"$B) $2y8SD£5AÒ)Á˰Ã1°¸qËêµPÃ*LÁS kb³Z)ÌÆr4yºÿE£¤t¨h*-Ãíĵ\@6ñÙ.V½± &3ZùPÐe[-×Òí{¾ ºSÏÐ4Ä3)¸è :Äd(6MÆèÊdöi¢à Ò1µ¯ø¸½¬²ÎR ZËÍ2Áj ¹PP;¾C Þ;½@ÂóÃÍ(@7 ï<D;:Ü?íhR* PtAJ¨±©Pk Ê3>O¸@3 ã`:<CØ0c\ ¹ïò9(Úñ¼£#Ä: ´î;ÎîçÃ,Y% /<ÒûËïPÈðxòõÅñ_$ISÍÃátg¸ÏÐ\tÄíÊ3(A<Q@@8#ÂíË#¥A TB¨h¥&ÌÚô3OXá:¿ñYC(è:Ct¿*ÄCpÈ6:}YF^7§kÈåd§ÏpP1×?/Üýj½ã¯,Ëvu5ÉÃüóÙâv@[t\C1al\2³<Ú2Êvp¨§£Eø{ÐÑåBN< è]R5xÙXµmh@1ØÀØ6D. @Ì ¶¨xoA" xÂ2vþÀxúÙä#>¬6RäB8k2ÅRL +Ødh¦G£p*GÐ`èpÖ[66hæÍF¥A¢8±°ú¦U ÆÃ¨Ü1âµÓÐõ sðöZöuYVeÃß-ÚöukiWMg>WÚ9àPpdªA»êi£ÀËh ÜèHðü=:HÅÒò3Å^×÷ÆÂ¤ç, 1ڤƱíû +C.Ek,âIJ*j m\W\®AlÒÝ¢CyC¤pº6ß +6|x¼ róWVÆêñxê6?o\½a<]:õI'à;ØN`Dl\Ö»ìßJp �È"õÊVsyà¶T³¼PH*&ò)[y<çú´ l,|¨r`ÚQò%Ì%¬°²ºIÀm©`ö°Ä¿Ø <Y§í PµÓsN¡ ;CPÁ9âqa¾·T¦Ub×b/ÅY1gôõN +¡0&-Düõ ´>&.qÏ#ö¶ÂZÉÑ;+³ 0a~礧 _òCA°óÇwù`9à1ì&($hl]Ãd1&Ã|c g¦4FfÓÊ3À¸¼ãFÜ2Q¯H3eÑ +r°4çröËÝ7fõð£ppñXBemmA¾µ&ã]5}Û¶3jT^ÙQ*fL6Eß+DJ¨Îlhgik-¥¼¸ S¡L)úõ¥[¼Æ)ßËÚ-²\ùêcA¾4Ô¥fõ¼æ!ÓIí§¾oÀ2 Ï8ÃjÌ_ÐYb|t§árôÐS²¤éßFò`@Ï+.1wêÏ"_'`ÕtÕ5~z]\N&¬µ :8 +¥¬¡´ÐÇ×]o$r¸µj\Xí0CK9±7䬨¼ 8öÊvByBÒÈf@E ´+Õðç9,u!²&|$__:hM½#·&è¬ãzà ÉÞ±K'±öpÑù*ÙÕ|ê!ܱ g" ÍÑBUí¹Úûëø0yö%Óî¾OݾCÕñápUñòçF}Iý@( Á91©¾xã ìZøÔZÄ´vzjäñ[ Þ´.®UúÔ¹{¨Äô^¨©z/*wziõì'î &PçYÜ\ (; 2¦Ô¾S4òuÌj¢êª#@£õVÅDù[KñaÍj»DxQ£ô)`B+E¡±Z²ôïn2( À¶ÿJeÁ +¢yWUx°BRõ) 5ÔöNT8õ«»1&ÎF8Ö~IìÀDHwi í´Næ"cerµÍùÛ *krd&=U!<páÎâ&vYa2üÄÈ%LçwÓ¦W¼ ý¦2ãË©ìóOÑhzIý½YجÐ"³J0g;HX|ÕÔ ¢ûkxs~¯Ýüß´_´KF +±6Ø^·Ï(i<¡Ð6'u:|Cr#_ �ä"ÔÙ» û?AnM¶FÊÒ§e3FóÁã}JXYº¥TÃHs+Væii!²>M/JÔHâÙiæi6tùÞo5g,öy6/bs otó|Ckaj`ëÑOo^ëw5À¨kg0FO ³{ÏPnóú:sô'P®0jÅÁ*@B4Û½¡ÁàÎØ].Ñøhó5-×òJFEé.´`´Íu6mH0µg6ÞÞ^ÑKé¡öÔÀàm¾ûÇT_>ÍLNûbcÔâe (²Â +º|u\u$-.õ²Ë¹Áϲ°ÏäïJ×þVõ^U¹óXõdV&}Yâo>bÍGM /sù'¤¯z_Ðå*ãÅ:L:R÷¶¥²òVÐOÚ¦JgQ¡r³ª`dVèeÔ'|8zv«ØÓ-¦g·³Ãuí»j?¢×§à°ÏXÜøZË¿Íøl #ì<G&vV&8S~K$¦Û£ÛãÂÄ<ðÜÍÐÝO¼üt¡8êm<!"4| FÞÏØçÉx£MþIààïè0/ìd¯ð{õÄ,8Cä"åfV:Nò éÀ � +p + 0¤æIT)ÃæÃ&)¢¨h°ëMLèJr é³"v`P/ÈXݰRüV'Él¢zyb6ëÂÎß®Â4îÆ£í^ìÃmêLí`p!íDýNâmÆV +p¼ÐæîúRDĨ¯°>HÆ>C njl¨h`%¢b¾C~D&oh¾JªIEj(KtÄÄ«¶?BÔ`+!ätôKP¬qcÒV§X=P"Ñä´>QP>Ãð¬p^e.ªÚ¶>ù¥ùío§,´¾/°ÄO¶Ì&>é +endstream +endobj +476 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +478 0 obj +<< +/Length 2370 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éPI!PÈ ´b7³!m@b4Y (a/!spTä®h4¢ÈÞc2Îfq@t´ÄÛÌÂg2.æYàp6Lf¡¤ÞnÍó©°È 7ÎÃ)ÈÌo9DqçFcÆãðxÁß)O#!F,êsµì¶M;w¨4±ìèPoÙ!M^¡ÆÆ#]o¡6 +3æ=¸ÆhÒ`м&Ĩj¤0ª\4P©Ç¥aAÊf+Ýó¹BÜ1@¸ /;Ò¥!or ¦O¯®§ã0ê78 Pä2¨ä7/LÈÜLèÞÖ°ÒÍ«zú¸°cJô¾.KøÊ@¯B +#,Ojõ¬¤ ðj© lª¢<*$ÊòÀ¦iÃê:aÂ8Ùr8P)Cô@æ¨Ð:¡È%!"ÈCÖ ÈðlIzÅ(%Ð'<Èë¬ !ÀP7P)øRÙ 3Å8mUÚ/ eE«åRkÄdØÑ¢üÀS£$ײô7Ãõ Ì1ñ$L8C`êµ#3ZmSÈKXÞ8£pÊ20NBzå§ðAË»ç%jt°ê!n²P®¥%) Ö6¼W PÌ·4Uêè»Wö @ÑÜ{4R#å!£r(A# ÒH@¨ØfO'«©ÈiËA¸ÐBܹ³ =s:M²+5!!á9_é*¸ì¾ÏÃôþ?Ë|Ç/Mß¶y³p±Ò,í`X$ºaÎå +âh¾(¢H©G÷æÞW¼ +e;Ê0*¬²¾,atì9cÒ854%¡ÁþBäh¼ß8Þáº6¤! lý?l¢£Ë¦éú¨½¯±°@ýQ¤`0ØãYvüOË4+£Â²SÅî-ÜËÓn3a]K¹ßápoÃÁÀP[Áð6Äí[C¼S[´l?OFÐh[ÚöèU¤éº¹[¯m1c`ؽ\4u=àøÈJÓ²( üè¢:Åbo"Àfp%Ú¤ãÐWlJÌ+Ã#sÆ$³m³pö+5Glu28¿ Öwd½ÂD(ÐãêF¯±>ç¶©î ¹ GrµÎÈ BÈaÔDN©ÓËD˲³sÜA§EÛª`k@0»øè à2Àݶ¶ÚÛÛTou5¤VºÖôìØzCl~¯ô@SXZ`öC(xEgx7BÖÎ +ÁrfAìÅ£ÕqW#Ð ?gÈù@tJ|2¾ØíH!PïÒ/»§xÙ¼$8°ôÀEáx1)R'§HnÀT@ 6CÈ}!ß#yûã4 ºë4ÛµzdPâÎ EºJ.éR¼Z³:k+á}D\SliðdÂÁÊ_L(|9Ĩ¶¼ºldì6Ú$ q%åÈA2Ö~Ñ3gn734̱Vf ^¿åhÿC±O9 ØÕüºtµÑ9`@¯LúxõPde¢qÒZQÜç#¦r§ îËùl?ë #xíªAo ÌBHV +ù,e¶`pHH(aÏ9±îŲCÆkGy6[ÊndÍð%Ø98dO®BÁSãç}5RC>ôy/ÙÍ+g,ô¨ hà¦m²´rX(qH!P¨xN&0âSY¬S �9͹¸J" 1¥lnXfü¾\ +QiêH8¢×\ëw¯5î¾×ùË!z¢ÆmáG'³,C ?aÔ1 ZÝ8knd4pÐfÃi7:HLþ©<¿+àÔE¤H +ÌR´9+Jh°ìAq¸Ä{*cê,°Ò(Iùw%VõzÌEÒîm¡,2g:c ¹xF(4ãy-Ìz¾·7& õlöLûÖ?Xd\AÔ´læN¸MBhKá¼ @¤Âa<¬èDZ`@ñ0L®þÛDÃ"8ntEÛ©E/y]¿%,²BÂe©¯;JiPf×6çãbÛ1ÒeAP%lrUy'Ì0gO-µ\ËjÞWRøæ%e̽«¥vÉyäóÊÛ®6SÍ訽g#qvl¹)-Hñ4½£Ü~44ÙÅ ç<²Æê4*¤p§Ã@o¤ü¤»ÑfúKûí#\{zgd&ð®ÂDÆÏdɶàôcæ-GTeôv·×:ìòÐäc^®Ã.mÆ^jPî¤Sàå'Ý¥í|D®rÀéí&h +A±W·æQ! Ôv(O Á°ÓQ÷V(ñ¹{ØýÒK <! 0¿k+ðK +fD:ÚËq/GÝÛÐËoî ½SµP93§(jAÍÔóèÞp9ÚÜõczêv.XËÛXèymÆ7Rü½ÕÎòÕÀ#<7À¢äË4¤(ùpèࢩ£Ðã¯CaåÎPÛGzY/,ÄÐ@éǺAé|Vßg\»(5_h9+\ÕS¯3®¨ ðö.Æáͱ |¨f£=Z½lµA8* ɧgÂ+ùÂ3ü;¬:i!0çÅd¿µjü°KÒµ² ¬KcxþVâ¿3Êr])T&6ç5Û³$³sn¥àb¿Z'Z4ê62EðMøÕ2ð¡T¬Àßê6¿«k×2dêÎk]lÕ¼0¯rÃ)Ó§¬J 1z5}ü¨ÿ +m7¯d«æ +ïðo*Ì/ +¢B +endstream +endobj +479 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +481 0 obj +<< +/Length 2050 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4Î¥BT8Âá ¡'¦ctoKFIÜPDG#ØÄf5 + +äÒùHU* äâ!<®NÐè´Ê¥n)ßk1°¸q\ËêµPÂ\4®&`©ÅÅT²lÃQÅ|Ês1'¡¤Þn¼Ñ(Äi*D¯ñh@çW #<6FK® CAAk¶Ûî7;Ü@mÏÌ&~1¤æ 9MÇAßn8¢¯dä 8º9ÿDg4w ¦ÿ/Äu:4âáIPÔÕ© rÇ¡¢FÍÈúb*Ð`×2iÀ 0C :£vá£<Ð4M#LÔ/M[¤µî3\Æ¥ÁFÉ @ï £kúÿ dP¥ê¨d¯ðb±ÁàÉ2Zkc(òìèò èÐ4c@@1/ Ì7`Þ;#pÎÃØ:³áÔw#É*VFqzNɤé³( ¢X¾!®b ¤'Ú%8oI �nÈÈþD±R¨]FlµÔRqFâc¹/jTË6£3¸û¿-=Bë½/]NÔ¯b T¯Wmv¹§anv4%YÓÁQYµ(ËgÕ6©G +b@# +Øj£6õãyõAtT5PÕG±<#È!bEYWHÎÙBÓüzÖ©H&!È´5i&!tPP&.Âx¤"Ysh@4 íôÓÊ£cÐ7cKKeL# Ay +ù6QQ<N0í´³d8f´Fþ?Ð~0,zþ¨0J +Ãî#Ldb¾°¬jªÊ³!@¤2ÊãÜ9Ú ^1¶Aº¶ÐJGrE¯8!@6h! DuÞ1½n»ÅQ:+¦2Ë9³±£ftõm¯ �:«Þë!k¿!£¯²;-²{;8ch9 »X̲ÃÐ˵ÈnJ ¹©{¯Y¼6ûØböñs¹rá^!\³îÚâpª(bÝF¦)ÌF©±a¥X)²µíÑ}ØdïKè{åÍõ·T_cQ/ν¬@lUù{%mþVȾ3¡ÏFÍÑ#yî¥é3bÝÞ¨ 2Í|8hp!ÆG-õt\»);'m-¦T}O9êXì¹#ÜOò>er Ìésï@ª²`«ÑJBy!t2Á²CðyxA3U@¹?<5FèQ´Ö.êXÚD$è½YŧRsJ©\9¥¼ò`LI7&cËS#<i½8§4êÓÊ{O¬Z>¨"¨ $XPë½G©&¥UòJ-0Ä)°¤§TúS`9²ªÕl¢F1ÄGÔbWP ^«õ+"Æ«%s¬Æºå©]Ê-j¾²¶Öì¬ «qh²¥ê]i«u༢ö_öV/µè¿¥Î#FRXK¨&\±PÄã¢:Ð÷Ç:¢ÙÀIç 3ÖNÊ\+,eÌÁ=36k0ngLñQÆÐÃE¢"´·ÚjErºæ®`Ú7v°M°,X Ãÿ3M¡µ6ÀêÛl"GϾXNÞMÂC0¦ø7$3q..äOkQÌÀæçð týÑ:H iJ)¥mÚµÀ¸ºA2 xÇÁVÇNôx R¼UòCÊ Ï2z=`EÞG $f$áj-z>Æù_=}'4¼P:PêJ ~p@3iû¦ÕÜÝÀ$[B)t¡H ÀI&¨à5k¥J·Ìí+¤µnìÞ7àê!B{EêA6> TéX÷mD¶vÖÛÛË|á»:èíÃôÊ7¡FtäiçbÖ¯z/Rm P,Aè|áoÂpÎ!Å& +0¨ðßäAÁ®é:§C>y´ 29tWb(J¶È¾Pâ¢9é=û²ê88æi=T=FDyÜ>ªÓʱÎ1Ù½Á¼:7 YãA +}óá!$E¡Q +2FJ`Y7'®L¢ÛTÊÎN$âB²þ<ôÖBB(aK©~ù_Kì½ùsgÒ°uà [Hr¸ï}'Ç #Á@SmBßPä& .êHÚ2¥&[BÉÀ Mç2è$½®ÃjVT5x:¸Z$*m=A<Àl`Eª3gZP»ÛéüO épi-(+C<úUT°k_§m%ñ#³Ø¨5[é{w7¦,ÓX_MÍÛf§kÞº^è$j¨ÞÅ7 @ýÁL»¨ÕÁî|UmVy¬w*tªæÃÑnuÏÓæÝk3¤ +endstream +endobj +482 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +484 0 obj +<< +/Length 2871 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTXñRh +ÃÈÎ9<Æ£Aäo9Å¥#)à4NFSqÊsÑ(ÐR5:W¢8´"n êû `0 Y èC6N#yäd"Nà ¸) Tr4CLKã¹2¡]hB`®M/¤â!¤F'¤¦çw¤ïàJN§O«V$aÈÈ\6²çj¼>{AÚ«d{è:N£¬#.Pì»nëÈ¢ê@ʰj)!°nlã´+:Òµ!¢Ö"!»öLcÒ°R ¢yÅì ã|¥ p¨HÜ8¤¸®;îå3Áfü4b Ð2¿î¦êºðC¸ ¬8æ0òÀÒ9: ß6Êá ã¸ÜÁò8!¤Bâ8ÀPZû>:¹*?C¼®7 +y\: #ê65ÓìC +âdP¯´:ã®Tbr26C@3 ãÚÙØÊ2Mp@1RlÅ «\ªá !ÃCR¥á¦åÜ20U¸]?<z±¡¢IcØif3õ;ô(5ÃÂ:0Q¼,À<ZÕS|O ÌsıXÈØh¹Üruå÷@åu[4ÈTâ3BI×2Pü®³£X×XÙÕõf:ZíÓy}H5CÜ päÜ 61Z8' ó`ë5p@&çó`Å,MSet=0C~Bï °Ä/$ ÙVX¬á@©7»¼Î<Á1L+ÕÃn]˨Áã9øÒ7óîi|¡WØdÂÕ±Y¹{JÓâÓ³aV¶¾ìïáVÒàP¾uS&m`9NÅ,9SÕ9Ìmhò8ºz£(³~Ør>þk9åØ ën®½1nc;:N#à85#d4ÞÓHÐ7ÓxÈÝÎCØ6qyóOplJu&ʹbH75 V.×ñ!O«ñØnöòvoáhV?^ñö©ðo_ðb«ÀÊùS«}.l¯³ÈTL\:°jyñ8àÑg¡ãö2.Èø¸n1àÞ¾Ô j°,Õ ½¯¦¥ra/-æØÞ[Í% Ó¼)àôb`d(`à �86\Ë©w/%ì¾ó´ú¿zÐÉB% +± 2E¿Ç # 4¡ÿHmÃwè·$ëÜü9§=- $ºvã Ç H¥4,Àà¤@ng _$âÀkÐ4 +a*0ªÙE6*ʰzÿ-Ç>K)f~£1º/æ¼Ãõ^éö/¸Ne#¹q pQJȼ¡äÊP-r¹U5¢x]DïWÎ ;.¥ä¾e>Ê`Qe¨á4ürl È¥GJSmy©è³ó¸s~´H;TÃBA �D×ÉYpÅ~cGD¨° naÀ:¦ÆÄóÓcÆ.ÝkJ)HÃâÞu$ؾà³2]kµÔ.óö¼tÙylÅ¿u÷Ló áN Êÿ²X¥!¼h×±³npý,) åFR1¯]5ÎYK+!þ3ÏZ_ml{ÔÕ¬ÀÎÈD§UðD �¡ $Ù¥fÀK¸:Öæ|4¶I¥ ÝT89~gä u(³.¤1=7*ó% ÎJÉ»F¼C0Wnuѵé dÚ Ü¤ÝÒÖeÌ'óâ^Ëù¬ÚiMi´#«úOíÛ¿uδw.æÙyw°3×µ®§Ö9n=ÖS+å'T[©Y±P°Pôby³ +`@ïKÃÃV07Dk¬j4GxÄ×]Þ¥»¯Ö �h¤O¹©xO@ g4(gKøTQõ((Ì? ÔÌ9R2¦¨¨E9°îà¶Åh{è²ITë«ü¼^XxúoC%É¿V2_*i±ú¨öPRãD0î·ô +#ÕtÒa®;~ªéW 0Ò#_N:57îÒÑ0rW©µ7éuFUðÄS ÖkÊÁ 4<h«rúEN6s q5:Óû!R<¨N¤0aVZ³Õ+àJ%ù\êI£ /H7·SX/ÈgÒîç_àZ`/ÓJN:IÌl;¦ +²XÞû{Äj +±ÑHcÉWK½ñ°tÇÌæïÚÁ[U¢O¼Ëk¯Wlíg9uUÃ0D (^i!Xbð#?ú}Ix3ÛÓVk h°¶¶¦u=å V¦$/0WÖÌÑ +»»h~CTdwæúO«îÐÀ1B`â +?:39aI§Ejbwî`ߺ¼áÛÀdEr/¼rcoÊ +g*[½ytÀbL'kº áØ4HG77zþæXW[ò׳;V f*m6u,ÝA ÈqnNݺ:d¨EHo|¹¸þËù§ôEr¤½N¸ìKܳGÔ<VeÝǪßiù¢Ã*ØuÜu®üÏbfêÝ ´t¼1{|ñ$«SîaöLöj¸Lá4)s¤Â¨L +à3f°J) ,`pBÊ\NZ<¥ v@ÊO �k<´¨ ÞZò �·jp¢¿%\JzMÀÜ«ÈRá® +ÓîL+Tßéü®Äl´tãÜæKY*Û% ¦ÈL ÊÎq&»D2ûÏ ¹ +jbB×¢zl× +P<i)¢HBaȼ*¢-ì"*è<èHñî0ý)¾"©Â3bCK(J®M$ÜÐÇn¶G0óÏ®nQÀÒ °À vR'¦ÄOêfêWNn`êtªªÈ#|X9 bÈ|>ÈÊÒ/ô/üXã +0é»&$hVëBëÖïK¼dòä¬î H +Ã@îüé +#y"è$jÂCÂr" 9#åHÄD ¾)ÄÀ¦hÑK®YÐiâ"Dp⪰^·°§èê.é %¾c `¨;èlq¢LÌ|ÀkUÍ ¸ FÖàÂnenc¥4l» F}ª[â6©rªCLª¸åá ª´^Ò%øe*Äe¦^¬ÆÐ²+mr®âÙ0|BâKvVbx +endstream +endobj +485 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +487 0 obj +<< +/Length 2619 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4Î¥BT1 B¡AhÄn.Fbm<b4ÑÂFT Âäa6Jª1GJ©ã!æ)ØÆó ês2Âmþúb20Ó¡¼@z2âëU² +FBawD¸iwçFñØ\8ÏÆ#!u~J +gªv ¸ .Äu³ºÔr()NS¸æ)¡ÑröüÜ:!»Å¡ÞF6Ýj$K f Ààl4Ì'CI¼Ü 8dfS ÌÂ3¡`@4¯£Ð7£`ÈN÷²(µ¬Êà4Lú&Ð,ð@Ò´ìøl©áÃ2*5íF϶RpÛ·-0fÞa¨plê¸#3xÊ7>n;¶©Ò:M ¬Á³XµÊà`¥;¢# ãþ.àRʲS8ÃhJF¨µ² fØ¡B¸K¬`ñ hßâh¾)¢ µa@' +BCÃí3´*M;¶Ø3Ñb÷ãqFͳè1CHàö=Ôs9\6ʪFß#a¤Y¥Êòd!êEÁ@¨ñ BÔX¨?«þÄ¿LTà !¸P<Û)ðÂ÷¼¯;Òõ½¯{! Øð±Ã Ê6]íàd<LMì]cuÚ7Þ²8Ò®êÒ +ÊÂØµjÍãCÖ×c·ã~0/ìN#!ÕÊf¦·Â¼ ¸Cfî8î4Ã<&Ë Ð³Nª©£êÊóO6*ʳ¿ä£!¼"TõMWrä,¼¶Ø\¬Dùýz¯»£¾´M\Ô.k®+º +ObE¾2 MÏ|âµÎÄ/̰¨êNnªµ»6H +þÑ_E«¾´Â©²®É? `+â¾â ¤*°Áº_·ýßAPA¼A¹hÂ;ÌÄO1Ís Áð«Ã¹`>c?/ÛûiÝ3Ðú^ È4#`Þ3õcxñu]pç/¸ïyÞªmïòÚøñ_oÕ~|8 ßb»Æ÷ßl[ØÌ_$ìæ¢5í«ÖV°³m¸2vê¿tl ÔÓ§J¿S »R +b«ù°ÔðD3V,ã5TZà +Áyn¡ °Å@zËÌáòÌãQo,Z Jí1¸¯ PeaÑ2&g~㹦71F´DÃì:6¯´ß»7Ú¢]*îëÝj¨ îîËìv49 ãÔ?'«p®¦$ÌbAø10¬:;%X@ðõ¨ÓL®C$lã ,|Æ$Ä1TõtH0a£w¬öÓÜOx2óÅ"kdqaAôT°ÓÐSYjgG0Pà yn'áUPO\F/ò&%f¦ÍÊq¸1J%¸DlÑÁíÜõÐl[ ¤BÔj°5xhvMÆSZ¤¡1bG3AyN7³9g8i!ÑÅδ?¥B{ÓtE¨¸gc|-Ñ0!Ðd%ò½pÞ{§{ñ³]%³Ã}FJë\s3Ð ñC( ´B+8lAÈ233qFyï£ZÕ0ùt@b +R2J0fD)Ô227Öþ@}ÄÅ(T¢ ;Ma)'UxhàzÅOeÍRópÎ*FQñYôR#WU=]ÉÖ× Îü¸\' õ*ÃÞ|S ýzjÕ¦$u(-× dLfÔH¡¢ïXT±( Ò¡)è̦£TnCz;G¨ý Ô})~®¤]ZWd¢Á¡/%ȳÍç",W3ª )÷8©e0 t\ùûth ¦iÒÊ]t¨ul!P%ªTX¨CÛ»÷fbÑ:ìÕ^M}7Ñe+-2*µ©P H*B©AH"@¤B»Q«ö~ΩTBÜ$ðSwêýªrFÁ¤Fí09ª Ua¦69ÖðèÛålêq¿0Fê¡p&ÁAç sPÌa],¾sø,¹ÞËÚÁC îÝÌK®vø®sâC²×+Þ ?<5oGÌ +ò@ÚS7ò"ßÈÕpÌDÃbÎJ<&Ú¢Òpââ+G%¥´Ü>ÔKjMÁ£lØâ릱1ÈAúÜIÁÉLP6üÉI. Ùâ8kÍ7Ë%îqÒ¸÷äsû/eõ#aY2/¸Õ&ª±,*= Ö=Æ«PûêU¡lKîZ^G½óK:ï± >À C÷l Êc7Af<øôª©¢=!¢ZÙ5ÔXì¸l ÄÓ<=U4;Éøð2cèZP rSUMÓåòªçÑm¾E÷ZËt0°3H媸fr>ï°3X@ÖdrÂ\ëï*¨:ÃóQ¹e}å=²xiÎÆm'æ¿^½@Kíoòk¸ñ\¼ºÍ^¶£pKå8¨a¹ÜöÀá_-$¸_úÏ3ZÝÂ6 Ta5í5 Ú¥O{[Cu½ýÖ+¹Á&(F.O!GF'É9FäÄîaf6/¼nX{Í0f¡Ü|ÉRèT¹SßrrvIòN¸s<á<Ìlµ3îôÇÒÔ4¯Gtï,ë˦իú$KtóXÿ¹1®à@/ \ÚaÐuÓÏ`ÊÈæöriÏÄãÃðY8t¬gcºx ¡àùª¹kÔ_kÏLÞwÏ*wúç^hòÉO*½?´W<è$pe©½_vU/Þ+Îaèè PûôQ&`Ïf^cÀMêzô =MÒõF`Þ¯Xî\¨~*¨ÉPuçb!khõ®'Ð(0 põnÞ'°6'Ð:[Oõ Ï<¤çð®o~$æ gT=O<¢M HS Þri¾Àì{.T#¹¼¾&¨Ád8CÊÄ3â¿L&6LX6Ëú7kZ7ÃAÊâÄ(VlJ"ë~-ær£¼to/=Ãà>KÈçô«á+$ïë*Aã³È³c8ÁªÀÁ°¶!)ÞJdì´ðÂOb6µzµätdx¤|)¤HKn®E^êÖ®Ë{ ÌN5cb`&Ö» Ð ¤¼*hq¥ + +endstream +endobj +488 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +490 0 obj +<< +/Length 2513 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ¨Ì\8¥ ÆP¤0!EI *rDd3ÁÌh9É¥ò¨T" +-Gª0xkÉóä]Y'Eª1¶Æ£¡æc9NCI¼Ý|£RÒK6-5øJ´xl9«25éEs{ ÉñR0Ü®kÅè@mÏÌ&s(Òșã èoDsI¸Èo;÷¼®é¤éØ:OAv¢ýI¥Ã%ÃQ¤Z¤ ¨"1áÆßÂ9.â9'Øn3¬ûBÑ´:úÕ(SZ¿áphÍ¡p"¾ #$¼ ¡H¨55Mbèâ2ØÀp,pÞî®ÐÈlîN¨`&>±9FàP[QÜBTL°Jg |F+Vü©²ÄvKóX( ï,õpª& ðÊ9 ¯(ÂøóæìÜ3Ê3KñÊÑÈn¡RØrÈËñC"²È2ÊM¬ØArÜÇVÃxäðÞ6O\ ¼7c²2%ï «ãC¼ìð@7HuÐ0Ñv5_(ÆÒ4ÔkT¥RêÂØªL*¨Ä$²«·lz9,ëJB3,8P)X¨ä7oµEH6lg¶·s.1Êüå0#¨Zn³¥¦©á@Â8ÈÇAÃ! ë{»ØP&Bø) +B b.5éàoæIþD!ä¹>Så®°ÍbOî«®ë_¨Ì3 #Òí»£à0zÝXW#v<¯kugZßX4B30Çø2m VºÆ=§ZÍ ì2Í}[ç6QVhðm¡ìY ãeµ5[¼ÀÜ%¾Ã ÌJ¨Ápn®7 6ɲ·xgx³9amè3-¦7j7Ì75Cµ~¶7úÛ*ª7tÊÓ 9+¼¯8î*>C ¸MC5FÏÐΫL +ùó#¹Ê÷)rÒ¦Áªjª®¥xH~®ÝWc(L7å +b@¸I Áÿ¶&`\ndTR±J~È?bÐ iuTÐ%°KØwNðÀ\G$Ó&p ñÃ8'äøÿ \ç¦ÐÁÚ;àñCÌzÅjn%¡tê°Îø I§d4¦Ã@iíWn£Ò©`?ù ýd'¼l$Ü©&Ñ"=U¢äßA{)µ*àAkÆm #ækIPm E§qÖ> ÃsQí%y +PÞ]ñí)ÄËÑMjA7HiW"QD +aÑA¤W))xÇrÚØ`IgìKVE&"C"hlh2ö8ÛrÌQÃÍdZófZ +iÙ¤v"qåéà1@Pq Ï<¡¥@§¯l eã°xp¡Ô89ÀÎÂ:±f-ÅÖÃÈÛdlÆ<¶°£&Í4Ù;MÕ_ú{NÀm!âzì¡ZÑB �ÌÐA@( Ñ<ÆûÑY$Æ92ª¦Õ5izÈj(uF{8Å}S*]Q:²¶¨ +,%Å´±°º¤v uXÇñ=yFî£ï{Í©N9>ó)ãÓzµºY¥W:AJïLrÊXj¨ä`êí#_ÑÕ*co-£Ó6R0s`¥\`å¤NX¼úI>f#Èv¨í ¦µ´ +\µ,À) p¾ÊÂE ÁP!ÀàGk$ð¸!nÁ©/7R ´¶[BÁè²,·¶ü Ü ¹0ö®E Ú#bçÄø-6¡íÝ6iìz!Í �,HGÅPY·t©U=s´H0ËNO +Hïþ Á(:¹?É9ÈíÒÉ/"ö\&ýÙE±*ÛR#ËNäËpǹbª÷®k06þ¼®ÂøMA'% õÁh3g!]J%heÍØ BÆL 99Dªv½|²isµEv=áçW§ °5ϼuVxà ص+UBI,.Ûýá8' R |¿E6>ÅÄæÑn#nj ¦Ö×l, �$uýÐU9R)³b²JøíNÕíhuo[cxu j î*¨o¿LiX¥× y¸Æé×EÁ`tçüÍ:Vë]{±÷ÑÚê¼ÖkµþÖ 7tôîq®ô;i'ÔT L 7%(9rÔÞÉs¹h³<íö²árûdb§· ¯è pó8ôCUÙÇw¼]îówûÔ)-kaCÈaÇUþf6]±!üWñ(ÄZxC2wÇfP½³ÔHûú;9ûuXç<.5,ØPåZ!Ý) +müDpI³ÇÅ9 |åÒ×>`ºëI§R©êø;ÅÆÕfêù*´Ã3 £¼ióZM8´©¥¹U³íbçûñ0óM¡DÂÃd¿Gý>RIêáâô!¿ÜLtLN|öIÉ~Òv&ýAÕ¾ÚÏ?_Ôݽ_ØùÞ|îS +7ÑͶ[þ8¬ì6þ¡Cu;¸xçÒ:KIÚʯP!»óû +½X+¡÷:<,2~QÄùåtCÀ§ + «ìh¤¡h´¦¶ÃÌzû@îÂÀ7Blk¬óó@PI®òõ¯ÚêgÐ?ð"]dBölùl²áoæÌ +ä"&/ÿ£º0 PHp¾Ð ]&¢0*í©E¥å\ýÉdÝél^!Fö®´íÄÈNäwNèÅE +í<ÈÐéÆíÀ¥X ÒàÐ>®. +endstream +endobj +491 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +495 0 obj +<< +/Length 2342 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4'EÒ¡* BapÐP´b7³m@b5ÂÈÑÂT ãyÐÊ: Tr4 Ã1 æ)ZXFáÒc5Ï #A$Ì 0ÎÆ³â¹4¾S$¢iæs0Ì¢IÌ@r2̦±È 1N§3I¸Î Ñ(ÐR0Æo¦aû¡Ü©[±Ì§Bäo6 +ópP\Úm{Ku.5 ÇÙ?÷]¬Ø%·Û|Ø8Î[ ³mJ¸"á°ÎíÝ{ã}P&í(®Öxîç:Øê¾!²ø¬7Îò\$o½¯ªûÌôx@13mKÓ3ÔÄ5@Ò6ünÀb©Ëàp·»Éhó¼ �£ A#C*³=cÐ7±d>ͪɹÃpÞ7£ÐÊ㺠-ÂÛ%Ê +&Ïð@ÁÁÂ*D+£{' \?vÆ, ¤á£Ü9ÅÍ )²$»ÔÁ ù¢â¢KÇK !H@à8 KR: 2üã´L»-\3¬£,Ì3RÓ%JR¤¬ÐèÜLN<ìµ-ˬù>tþÜ* ¨ÐïϪúÃHÒt¨gKÆ!ÀP!¸ì¸[MÔ¸hLc(ÝbÔ/sooÕ7SU»5ph¨Êýf¿Îã9S2Gð;èÛÃàܤwgA¾ur¯ÝnýÜÀÒT ez¡PƱìR (& "RÛv x)-Á>®ôËAЪj£aÌ+ݵá/Åì"2Î0Ò8Xþ¥Qäèr!S¢»UV$a«¶!¸þV°ÅÀ<á@¨ÅG2èìcg%¡è¢¨6ÀPʲìË7£éO@xÑñ@Ç^Þ0M<7LoK!Âø+Â. $b ! �{êô¾>È\x;ȼÓ; ¾r9è¨O£oïìv^××v 8ì4£¼Æ³ßwLÄ4Uh bbN©Ü¤7Ø A¢4>d|¿pN8in¿Û@smM±`æÞmX9ñ"hÔ¿~ßЩþðA&Ø[`1P@Èû h Û! 0¦ÀØfÃy}ε׻@üߪc[gLôôSa4| ¸*ì)}*ÂæJÜ"|Q°±z!û¶%a°7 ÂHb F:D³òT¸7!Pø°{×BöErãdn¶94²^T/[ÇÄÈOÒE)4'áO.Qä =92W_RìB ý ìUIò·M/-Qi&SOÐØIÐ T§×¥ ø3<2µÑ#0PòÈ2±_ÁÙ¢ +ÊhóJ3ÍxJb[ 7¤Ò÷ÌHMÈøä¡òvO\a<'Á´Öé �C,8y4ÑÙDõ.Ú³T\ê0ù*ÄlfĹ3r¦eêSÊöHÂUCva¶Sé µ0¦Yv¯fªÂe¬t²\âÌ«9h%4ªiÖ¢ÖkjI@jÕW%k4T 3ý*bÕ +6̽×Ès_a~åþÀXñ97fJŠ;¶ QL°CuÁØGXâA¯5î"@¬ý°rc62îÊÁ-Pj&*Q±*[^ Õç6ÚhO ø) @¨SjU=5z&¹Á{b,Ű© +¶¼f(1«ðf ¶Ø=Icm"õ¼Ò²F¡À2¦æB«"}¢´Ô5çLÒoLÏì1pféÚIv¡¶¹ãÖ÷e4§®YÞæu·ÊpN Ç q¡'¸É0 ÞÛBÈ$ ¨6õm´&×o«\!)ùÂ\ )+°¾a¨Ä_`PÁ×¼5FÔÌòV¨s¿pU'¡$VráÈcã98:Ô@zæþ%FxÖÝûá|¯ÅÒ)ÅX®úi3aϳ8óȧÊåà ðÂ¥´ö¥Ã3åº{jö¶©.0¡¢¥´+ÔiÂÕÉGÃ[¤+VÁü;JÅ®$f³e,Í6Wfß,0Þ±])§æz ¹êª2Ó¤K^læì}®ª`ÉëVu·z·ªÀs+ü_Ì �Hó.Ô§A3 �u-M[ì\{$Ù5;2«Up3!gÈSa!§Ú½ADT¯! ⺨ÝSfA£eÕàø;©>»Ð$"ãol¬³%·(»8G s¶ÆÚÛJëÔ+´éo{©iÜÝ¥BÅîHBÄÓh GÉ+ ²Â(Yì'Øø8k^)3ùáyRIÑç& +| , P¡Á\ñvnCÐ禿¤rÅ8 |]aËà»y ãn¸²þäÖõ äÚ=ÀÑz&J¿Þú,V9-XÞXe»Á7ÐlW[.s÷ +ã(È~û4IØÚ0ã!)Ü8 }ÉãWòÐÉe;+Æ9>UxÞÒVy8¸ôH@S4k½,Ò0eÐ:§4íIp¡Ù;s"/2BA°-×ó¼&è½'¦È×7PÌdrLar#=¡é¨î¡×¼À¨ +Éû>#léç2Ú ´í³CèÃ¥~zô&Ø®{Þá¡-pÊ2lDÇê0 ` +endstream +endobj +496 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +498 0 obj +<< +/Length 2284 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* B¡AhÄa/FâáDB¤Ð9!N8ÀÔZ2OÃaÔPN7SÈ.Ñ(À¨4\7êóZð¶Z¥Mëâ 07³-VÁ¸ «u2 &ã¡än0 Ht4Dòâõ* +¦¸«09`FAß2.F3yU¨0ܳfCIe²L F¨L* f]!ÜÃd8ºua²a¥ã +U{kr7#1¨ÀPI7s9ÙÛ'T@ð£°Ò7® �².®TÔ»Nã¼²xî7//0§ÁÀhÁ/Áp¥+ �Úñ#;U 0ÊÎPäc`Ê0ÈnjÕAÑàê8/ Ô¦D4P°©¥sÛaæÝ¾ïËç¿°Àè9#pæ±@ct ¤! 3P ËIpËH4¬63ï®ÁdB½Ê±8AÅløõ½¨ QÈ<é¶ÔJ2ÐoûÄ9¼L¥*plÑòÃI0á¨r ±A@©@CêÐ4¦úbROR´+´´^ÔñþúXÚ³VY4`¥,â8ÓÌúßµQ0ÙýRLQØÁ=j°áµÞÚó£hAìý;ºcl'd7 +n^áAE=E 28ö¸õÝêðP=3Ã|_(â0b )HhÓ ÕX&t²S6cc cË#M¤f.àS ¢2 äÈxdâÊcöe¶°oy§ û9 hÉ#IxÒ¡ïbIHESÖ®KѽIµNükãC4¹ìöÒ2¡ µå³{DÍß3á5.75X.qp¸;ýÅ^·»;}ràërÇ5~ï8þ0æ¹»<äÆzÓc±1jQZÁË&§O®lÃJÓà è4ÑÛH0µ»nÞC®ì¸¯zÍ Ãê¹FCí ÖÎK£wuäiz=YÁªHáSd$Öµj§""9w#+èÞ +SØêÏzÒBZ!"IbbÈßSã[Â)` ÛHp±3»³~¨{6T)ÎFøß8s 6ÄLø cÈ7¥~ö`KDot7Á ä|Ðå®>(ûËQ~@Éú7ì¶ ì,Tµüf + Cr Ðiÿ4(bÑ`ßWJª[!Qö´´´Æ¸MáL, 0BÈD á\'$Óãlo!T(1õAWb%L½å×Qs/MÌÈγFlÎ@rgùìgµ ó¾ p¶MÚX} f ¸µâ9öñ°)0xRa à +AÀ(iðÈe/_`ѧÅÉ)%+ñ~`ÔªDyrcA¤8Ad@kÚCQrMÅÈñA!òô´µ*bÂ)n²®6Êéa,¥¤¶«í#¥¼]LáÔ àÐÉôjFw³ø;»ðîYf3«9%òxlSªéì§ÉÆ<¥î=µ& A£_K i-fü@PI вxZx(ÎiMId /¤l Æ6.V"ô©6Ù+61ShêÎC¢âà\¡vB4º$`: Lv2s& +iø¸A@l¨²£È REM-ï2¨pAU;´B³êÂʺÐd¼2jÁâH×´àqñFx 2ß©M~à¡üÂÝjD"óv,Íò<ÑYT+¦x!? ?iÆA¢êhÄõü¹B(I Ô) p¶JØM`äÝ V¶IÈaÁ¤É¦VB#Y(âPsÆ'ÅÅÎ ÓrÙØ½8 +$à©oks°u°dü?0íq¦Ì¨Znp1½1ªVJàe¨DâàÃmÕH0¼±þÜ»ÿ3ntÏ3Nj§µG®á»Ñ|VbÿhÝbÔ+ÊÅmN zá§d øâöç°)pÌ=ÃOå8w5)È0·B~½Âúr;©âê®Íh¢P`Åjj]Z«sU R4!Î}ãåÊÄJ{*i3ÈÑû@¨Ñ*Ò¨¤i*íî½KàÚfÃNc }ñ CNOM&éø.÷Â>ZCç§ô/VºZg©x6¦4ÎáÓN$§sÒVPQuC¥u?Åj=\*bÅÖ) �åÀ:24HyPcBN:ÎFùVJÍ®MÏX´ÊоåS`µY³{D¨ §åQ²V_Îàu´£s#Ñ<7`àÞ3GwµìüÞT~*H2Ny ¦¡>Â2ä·° +ueñ×)MÈ +7ì +R¼&p%d}B3Ñ&ýOêi ã{xnlÔw0Vä\ Pó»9ܺiQÙÌF|1{=Я)Æð#§¾ÍD,x¹r;ÖÎßHÅ:Ã/MÍÀI ¡ku¢pknÑÿo4:ûlßx¯î`´ñjEL)ÒÆÒY;8Aí!4$öÎò»{&»æý,! ÿ»Wí¶\Ý :îÛÕÕt]ß|¨IÁ8ÉrÝáQ¿ öùéqIçT&𫺺wPÔ Øª\'X iã| ¼R)Í |d"0@@ +endstream +endobj +499 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +501 0 obj +<< +/Length 2249 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4N¥BT # C ÑÂ]ÅäĨD¥Ó +LÌ-W!s`Tà¦C/Iåb,ìl1ÓyØÊ :.çsI¸Èo; 4:(*'L Ç8]c 2¬Ë9¬ÜQg/¥¡\N"Êó±Li2¦3¥âô 7OÛåûÂA +¬nd³Z +")[= Ñi*]F«Y®»FS±¤Þu96·üºÞcò¶\½£S*øº âIÓ²7>£hÂ6Ò=.ã +ü xÆ0°ÜÜ;àSv·Ë,Ì,î ' +b +ØÒ#A¸P" Xê:.ëÊî9nÊ7@£ +ì9à8 Lð¼ÂÂêúÂÊ+Ë$ßÃk@¦$Kj¢®4âµîÛo!¼ÂÄ*+É;òâ )b`ô=pæETXè!cæ5l0ã,qGô! B*¡JJ¯ªAà1S«ËÒB Â9#hR* J0¤!t](£ÞËêðP*5ðhî¾£$üíV¡ +úìÅÁ �æ2¡ xç¾ëË¡OÔ,{ +K ®½¶M`Úcç>Y.Ë0$ â "!déYVmõÈÓ[ ÐÌ4¾S¤´;¿WºX4ÖEØ'ÅÃùmßÏëøì£s°2e`»HÎ4`8qWUå|7X xób ö0Ýd?{_fÙôõAÉJÝ-Zy5¬ìvÍ·/õáu¸Þ;¹Z4ä5·âTc¡L@h2r®ÒùX@3:ñÆZÖãúìö^ËCÑ5*¦±4EUJ0ÌôÕ9£\*:ÁA\!Ç·2$rû:vØä»Ì6» hÄ»ÀS¾Po¡°¾ávAEÛ÷8ÈØ:®ýàP7ø[¤qáwjgsУcýÛyÝÐß.+ꢦsWËUñ0ÌÁKõoæ?:C,YÒ×c¦Ö Ë£ ¢75Epa\UHþÁ ;pf AÉð}AÔ93°äÀ +"ÄIUB0@Jp7$`Ô(UÏ®]ÉÑ@#Ô~ÒAÇÉm³À´¡âôkÈl½JtäF 9÷æä_³)@)ÿøDßóúÐÀP@ÚÈØ7!P¾hÿä0MËÁ`j@C«ÈÌíÍ:~FaùAõG\&PbI4îZ4FVÞçA@W ¡|!ðB oñF»úBI3R$?¦× +Ôhà¢5ÂØÜ\¤_ +ad)@B C )=«ÕT¿þ@d qîUiZTnù#Ò )È(K!a<)$½ËHÊÒL)ÎàÊ&0 +Ië¶wFIË9k-åÌ» +Qy/FFQ ¸=rxO[¡¡¹ ã°vѱFéÒXÏeöMW ÎÁá'°I:aCLRËJ.Bü^iôì©´Z§ÀlYú PàjÖPyNØ0ºPÖiÓQSlY(¨»)ÀÖc)ôGʳnInt8å:úò$æj# 5æÌ~pÐÃÊhÞø<qµ È*)¸© ¨sdÑW:nÖSg%ÞSê¶*¬OÕúÖ7(Tk©mM²´8© ¦kdäSªOT®nMÝ+v +ÍÂEì:n«%¨×²Ö^Ìló/Ö¬ÂÏݦ¨A²ÖR¦÷ÜE!RêîÕXB RbÂs +LHÉsQ@é¡lÐdøÄ:æÜ!ÓAÂiÁÙ$R¢HC;lá²H0æ&ÇÅåmYiÙ^4®ÃZâ(lðn¤ÝÈQw*`ŧùsbð2nL¸3cUØ*@ÎiGæã¨eå2<0Ý}¯!ÄVp^rF¤^ZOZL¿(ÈN_Ô4/ÊQoT$w.PÊ21)IuÓÐ4Á°%|ôTǤ{èÁ¢ ÒûIû_åÐKFz©+2ySõvkM%\¦+_¸D'2¬iehF9Ý< ð)xòãäîoÜþÐNæè°PÔÍn tO$kôu +j´1º:èÔVá¢`AOéÔ?}7ÝÒÖj[Ó?¬&åÄ¥ôÚt!0*jz»! �þ^>Ïý ~¡£.Ûî\i9RåMR$ÂÆÙ-UE«UrjÕüÜkvøªÝ;1:cKÜK ÙZç[¯:¡Ê$ =}PCz¶v »êéFÖ°ÑNÄ])¬eÁ±ÛÆÈ8ýéwµ®\!7²(S s®ôå:[«QqMÝEsñÓ[1ösêh)ÓCód÷ l´©ï\vA5¤eÏvJÉÛ#ô¤CoÐÜÕ.´§É?:@@©ÒÁh°6ØD:åÄaTÃõ¶×ø ×z÷u®^° ;L1ÂôÇýdV ßQ²çîÍíÇgH[Úo×2¦¶Ûi³ð`:¹«¶ëlضvv3¥ÙÏxvÖÛxã"½<Ç´sJÿàûFå%Y³Ú×Ò k»µÈê¨p°¢ +endstream +endobj +502 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +504 0 obj +<< +/Length 2171 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´b0#ÂѸ¸b4áÂ4 +F g +4ÄSqÔæe2Æóèh2 +äÒùL²S%K$By\ 6Ng3 Ê. T0â1±z'ÍËãÃXxÖH7£ZàÐg3 +Áâ9<ôèu9b- +F¥f!ÑPAfÆbèðÚ".©kR Ìx«}ªïiÄ}1¦Q`Èc@Þ:äß8pô2¾,$Ê2Ê[2г®s@Î4m*Hê¨pË +3¶Ñ#¢À¶ajmÃtâÅ èÌÜD2Ïâ²J:³æ!-˨Á³TÓ;Jº×ÄÈ P½¯«û,¢"ɸðÍ$ú®?&jµ6Ì\ºø¿0L`"§Q.KÒ5HФ2J´DRiÄíê«NñÅcÒ8=ok£H,¼"ÌÒ+¥%´µ&í²`J±a'!i¼æ!J|½OrÓ.¿,[öÿ-Kxܲâ|7ÙÉúî¼ãHÜ2 ã¸Aj®ëä·[kÀÜ2ÐcÆéûpXÊ<XPü^Oè¸^*uÙk_-HP1ãhÅk=OcÝQ¸Íu[¹ÊÒ)+òµ¸4Kên<! +r¬)jØX¥õäWAE¦"`¨]ÃÈ\;á +Ô¹ksû±63d@ådãÆõܹ¯lÁÓ 1Hjj$Ò@¬ãÕ#]ä0±#¤PäsMtí?PØC(ÍÔÌÊ'+»Öèï°ìcn*ãÈLʪ#8n»9£Ä; #~0eÞ`"ò7¼>Z÷ÀìZá¨îhT$¦ðüNðVÚ»¾ÊÃg²pjNêu!Ï»«èµ +rd9(Æ4×Oø¯W1Ù}#¶¡£a§X õÊ÷ß-AlMãySŶ/w2Çðb UÞJÝò0?zËä<+Ï>ü£ÆÌµÝí}êÙí+RÄYP2¯6"ò[tAà)÷?Â÷À7|ZB)qO¼0òÛ0mzPUµç¶ÜKõ7ÇùÎ&RÊÜøwg@¼ P@ÍÃs/ ëL9-RÞOû6=¨ÅÐÓCK%£86îFÁ{ X:4ÄÒbÔfËd'`2fU§rÔÎK<-ÏJ+G®Ã ¹ÿMûCGòåSëd÷FbæãûA1J¬ é¢$F?ø²È ê!\;Æ=¨ýá«úrçâ3-`Ï(l¬è¸°@äiq$µJPÝ)׳¢I©»uhJ40DVõ¢JUnSÐ97 à£õHá%ò¨9Ê©%àfN©J.1´ÊyÏKptÉ{`Ð~$Qû �8|ÍùÁ-»S+/TÁ (0n +²oR(9'DTHÊ1FaÍTnSÊ;G¦)¹MNB©I +®oSl¤ +ã"Éa>%³a§óTBiçN$Òv±#Ôâd¡UkCzwO)`*B )ÐBHYÒ(Vʾ©`dSÔÄФÆÉN)å@Á¨ë¶£óhÒ9ºFÍêÑH²2^GUɱW¨Áx¯êQªBÅeæ,²ìÍIãñ-¸rÕ<Zq¡ÅÊõÐ +<g¹kB)*aÍÒ3¦Ã Cdu¯¸ÐÒbCP>!.¸ +gó ¦»BWB&ÆÅÌYpÄÒYr-.°(`Zͱ2Ìj,±Ø,ɰaͺ²wÆñÃ0i_®Ôå£D@í(¼Kºc/³Xz¹Å¸×É˳lPz¸Ûjóp³Vq1ÇVó{°,-ý±;H'X¹woN7v.Ôî¯ie¼´]\ä»2^Y·LÊ¡uOV;½ +pXäKìmðaÝ'¼7k©_Ͻ ²ß;®ê.ï:At[Ë]óúþ$:®Dö´pî 3|-:µ¶¾ØËêÚI0Ês-+\${:ºâÃYfÈÁ8ÆÈUÌQã)ÚYeC¥tlÁâÌfiÝ(XÁYfBÂ1K˶tlà ¥h̲àªc?<G§ãÜX3DÓ`þðÞyC~HÇÃT¹nàÁiÌ9\ìc"ñy<Â0k ^=±³S" Ré¬ÂCD$ë:zk¨mV« Ò"/IH8*]8krÃ9bý:øNÇE;§QsÑ D 5R øwcKô+S6TÄ!*ãr©%(lQMXEµi#-SE²8GHÍc=!uéâ¯NÁ²%¡vÆãÛ±ÿ£ó¦&ÔJ½ì roíS¸1OA|*ã RG PsÌêW|Þ¬¶Ûu_TJÈöýgu2 Abs\ÉúXç¦`4:úÑì .ý,³âårVxAÕ¥ÉLp[Ä^ÎA¨ÀÁ¤ +endstream +endobj +505 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +507 0 obj +<< +/Length 2264 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢4'EÒ¡* ¡AhÄn.Ft*xÄj7 %£ *f +'# ´Êt2§q¸ÐPD2Ìg#IÀèi7 4J41 R¡ ¨4\4ÐJ¬$¸a#*WÅ{Ú)*¨äi + O1JÍn»2 + +¦ã©ÌÊd ºÓ Äek¶§Cxõi7³«öÁt*Ç8ÈcìHÙ²ðóyÞF|]¡ÑÉúXêö§W×ìvg=®ßsgo7Üg7Iî°á¦&ýèfÁÃúP*H"îûö'jj Î:Cp潨®Û¥H²$ÒDÁ �*$¬#P ÐÜ,Ãæ0íÀå ã) +¢(@4ÍÈê1kæ3£cb$É£Ü-#Þ9|¡a`@#"`§% 24:CsÒí/ÏÄI �°f¯§$$çp¨fÄ ½°ÐÍ +ËHÊ7J0úù3Ñ*!¢µUEÁf,jé«s$+¢ø&¢¥3V°(5åj!¢¥/¦*³¢°ukü¤j¾Êí¯A½ Bmè¬% !ÀQf ¡P,xf ±û<ZwÄÿHhÃÐeoB![VQÔà¹.²ð½Sëó¹E3ÔUSEat[~È|ûnP<°S0"ÞèG±ü%ÈÍpÜö!  kÚ7z40Þ;ÎS B¡Q!Ê#Hì¸ê +n¥ê7-k" +ÚË áb,+ +SÇyMksåæ"¹¤Â7 ÎmgYæ|ÛhÐ0¶¼\:n¢`)â¸' + ++r:#f×gӳ顢FÃ#é;6µÆv¹®«ºó{3n5C·0ìKKºK(±»/¶%h;ÏIÙÆÙP)(Ç& :Ç ÜÃHå8#`@5¹ÈÆ7?xOËï¹2è´ÞLpëù¿Þg +9g ãs$Àlhàµ/¾ÔÀàjK}¬Ýî=æêÏOcÆ 8hÊ! ËÙ{aî¸öêÐâCfìñ18Æ#pnFò£Þ^ø È9¥óêq7ä)ûU"ð]Ã'M¤-]Å$åBÊYaIÏp¦èÝ)¸>MP2µhÕÒ3iH1ûÀðÅÒ_Ð/øúÀOâ²B +)  ÂN à<õBÅQCU ðdbyäFêÀ âlÉ èaÁ8l^AoN)4ÜjZ23 Øùs M0Äêk0c.á¸3Ë @ $YÔÒ"lÓ-®ÙSf(ó> Ìø13¦°(Íg§#^¦ào°å¸ÀY6T'd9d¾Zv}>ÐÌR©µ3 ¥sk*)óKÉv§CIðgHn0´¤¹|n$ÇIin Íø4nC@oJ²ÖzO`å>"þ ²PG~ÄB *)Fy> +)4]|勵өtö ¬µ£3!Ô:¢ Í$yPPG© �S Eë`lMc8ÂÒô¨±ØÇ ªsª#¹n²5¾Áª¢\)0¤Â`Lµ!=Äý®cVBÖÅÁJª«©Ý°×|Ä?5Öi&Hz`,.¦ìµ±öE%&Ôß&GtqºµwÆe3æa¾[bÇ1·Sq +R¾aXLu¸æ±¢adÕÔ³p[Kyqw:Úà`OËÄ1(ñÇôdÝ«¨¬ODæ"hdÅ@ XÜ\»®{ë}¬è7T&¥í:ÒÝ£ �C[ðÕö!sÉë ¾æÂ¢ñ^ ´ EÈËÌ|ÇÊ+CyQmÝòvðÇegÂ&^!B·ÕõÍ>Fð86ËSLaäï+ +d¾BpD·VBÉ.Ðe¾1ÉFõMÝzaL°Í4ÄhC+Ç>kN'`Î%âüÄù#GKeæágOßË͹¼*ä@Z ]nvÉ/:ÿSN/¹AÃÒqHGÎ 9.Üé2òF2å¤hð@V R(¿/´ÈEФì `»µ ÍѺTG9¥5x_ + *ÐxS^a$'éÐqóhN8UÃáN{µ -Ýâ«[5õãøe¯ÔUewr=@Q%jÀÄþ»xõ3UâÊÛb ¤Bè ÂNâæ|ÓÅPÚ¶AÚ¡ÏkÊ +öÝjF÷î¥õ1èßs_ÿ~ÀVëZWùa:¨qaÎ#¤#{ æç¹ÞiĬ0ò¢È鱩°(;Â8K 寰¸Üq>+è¹¹Îô~Ä÷±66ÈÙASfg';!Ú8@«ïЩ¿øRÚX!0`¢ã¬=ô³Æ0$B/!Ó$Ñdé¥@VnùnÞ&Ú}Ôûgz}¼ºìª(BSâ³ �=S1dSYÑp5°u>)t&ë(¥%Èél9ÒG*f +hi5§¼§MwL·¨ûT§@@ÀQ +endstream +endobj +508 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +510 0 obj +<< +/Length 2071 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NHÁÌ\3[F£Aäo9Å¥#)â4NFSqÊsÑhðR4Wâ8´"n ê¶¶È0cí¹4¾H)ÊDòa0RT5RÔ¬}4c$©Âd[pâ6Ô«º£3 +-c!Òâ34b¶§W! %M<PBÅò H£A*¼}Ï®¯Y Ã!vúKÆY«`Ð\¹ëÃcÒ8HÞ7=ZÇ).ܲ¨JÚ#Á°h ÊÓî±¹^°&ëHP + @Òî«TÖ Ë¶!<0@6°ãÂ3¡ R ÌDz18Ä7#ÈÃHÊ;°A ã¸Ý.Ãxä.!Q2ª2A©XZ!Ã"%Án¡q*r4±Üz9À£xÙ(Ã8@0Ò¸ê8H È\Å/4T} Ac`ó ÈrôÀç l{VM3\ßV #4á=¼Uun¶Îrë3Jõe2:5ÛÄ46 qVÉÓÈ*I¬JºÂø+Â+Ì$b !Ú9Q# \×¶,ciÄA¨hOar@ +DÐ4NH¡*1ÀèÁ'ènÀ$ APcÙ)ê[!^!¢æ ÞÌø`,è P;ßcût6PHË'z¦¦8£k-HÔé;Lò̶ÁòJ-ÎØaSj¹&MÆ*âñP6c¸þÆdJn¡%]ñ§ +Ð4ã@[7èï²H9f\3fz8/L͵uF.ô|7Ý·/@ª&B)" 'Ù!>Oئ5¼QÃd*Ìc~ËNë±èÙ4ìr¶Í´{V^ÃðÆô1s=Ò¼4M{¯6ÑóHÓH\<¶ê6i<µï¦ã WÐc0QÁñ ¨* âjyä§FïRÿÑË| °ÜÖr'xáÅ yسézù¢(׿¼ó_t¥Ùbog¡ô°µ´^Zù*ä½@!ÖF ¦øê`0sÀe ÑDÏPí-µÜ-P@ÆA@¸tNý,è>òØÁûznPªýÁªî ¯ð)xd5Ð"¼ÒrõAá Á5DpࢠééçæC¨¡¡ô@@ÀñE§3C^ÚD÷á\;qn5ÇÂpû_Üo|K¸6äÂ[K-unØ7'AkC@È·fÖXÓP_µÉ öSKq¡7(3õÒRdùê*HÉà@Vé$Ás½Á£ïG,æÄAA|Ô9ã#Ìl©HU +#. �7PØÌà =$ÀQòDÜÃX®:GÙ.¶+l«çÂhÅäÆ&±eD'ðæâà®v/è¾äö`«:OI)e&r#ÇA39d +:f ´¡å<íNTI'{MÙ½)D¡ÍBe´»-Õ ï8°Nè¤EE@%mx ùø?G&^SÔD£o¹°¨ÅGWe"´Ìr[Õe'%"ªRb«55B©EDnU·HA¹"H0@Ýü\±ó! !Û£Ó´,ÙÚ<pÙ̢Ȼ^o*k¯©6Wør`'0jØÂm$]ã±7àÅ¡ËcnNÌ$ÕÙ:ö87¤@ê à ·="%lTìÓðÆ[¦ÑHãGxàä³\©4Ǥå4¸Ë²äIóQ= îþØÝqgñM§¶®÷KRÜ]Åj¤¯SåriC[¾ : êçROAkß»õ$ï×å )[XwH!¦Î;WmËx6!KÅ>§ö5eëkºWVAJ¦¹MWeX*jÊ¿^Pù4,åT9}D&ÂÒ`9d¦iäz5@sB#%*anÍùÂÝ'åàtä»´]Ñò¶nVZz#î§ìDû¿+!b@å }ÆJ[ä*Æ«)o@%Òö_Kù0fÃäÙ\Êd$á,Ó. +¥a4' `Y¦qkOê¿R*PW°U>¨zTïUù=RªSêm)4ÔÒõ²ÀmQi^¨°'uïTë T˦¯ªô +çz¶cη×gç"K½YËi¶Ì!èê=)R¤D$¨çû+é?¯ú§Uì}_aÕ +<Tj¢Æ_kdSM/ ½¸ã5ë·ÃƦ¬íe´s#Y.ÕÞñ1µ§"5üÀk¶µ¯nVä®ñM·bß5¨Ëp¸¶W¶R\ËtíÓwVëð\ÎîàE `( +endstream +endobj +511 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +514 0 obj +<< +/Length 1149 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5Î¥BT1 B¡AhÄn.Fbm<b4ÑÂFT Âäa6Jª1GJ©ã!æ)¤öA@p7MÇC)È@t7"¹$D'Êòæt9LgC©ÈÊ 1ðfÎ Áç#ièiÑbFó©Óhϧ|±¤õ0«eê¨1G«È´a.R¯§_±7¶ùó¾Èo;¸ÊxÜo +¦¥âi|*ncIØd9ê ݱ +#J¸Ápn*i:òç«®1¬{"Éoò·Àh$ +¢Os°Aì³0Í3ó@à>6ã Òú£#Ä#0Ì2³oãºá<˪߱Nþ7º®¸Üñ-kl¸ B\ö¢h=¡ +=¨Ðd!¢J½Iê@' \0(dªA¨r +C,J7aJ¢¿ðÂ"Ðê*!ˤa°l¹¤ã¢Aï8`Ò1µÍö9 £î3Ó@ßLL^Ô6à B1£çT¿mR9#8Ë$8¨4R »×A¬K #aÛ/+¥°Ì³<Ò¨MjCU³Í6C +2ÕDë;³Òã>®óú/A@Ô*E`@6DÀ®«ëà®&ð É2 Â8"BÐ=)¢¤jÏa+´yk´Çfͽ¢0 ñ±ÂMýáHn³²&¹¥Ò岬®öÚa£.ËðeFLD͹8ݨ"U#ä46U<Bø=ÏawEÙBê7xç9âúý4 %JH̵Àü?½óÙÿ¡]UV. ÊÇÙæ4[Ïnxj$oJ>¬Án¬«=]º'hÈonè¤iW#þ¤iÉSÒ¬^<éüªÑÜÈ"溮êÔ' í°ëUp@&÷m´U±6ÌE>Âõ¢ÛÒIR«3ö8p¯¯+\´É3ÏJ¹z´¦A\ƾÈlé¿1l¾74îèè4?rÐÏ»/åVÍÒÍ»\ãòÛÛìF.ø$ ÚCa¯R&}û¤còÖùþ(' åÃÞà|F °þÌüß8i?!8*Àòû.*õ «Õ~°OX3"}¦xÆ +rgci½8§5ÆÊÞÓÍ] E52F :\bo É bòR¦ÅL)¤d§LéûT +íbþ©Õz¬}èW·PÜ,WÅ_30@V{8Y+,³åSÁBZ«\9ʶÊjÝ[ë T´µÊöâwjJ#¬¤Î±á««|m}!5úÚØ{!¢ +endstream +endobj +515 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +517 0 obj +<< +/Length 1912 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* BapÐPÆIÓ£¨º¤7B +`PÂ^4&¡mx`0°ÍÁS¤h(7¢ñà@EÑ(ÖABd-¾)%B$¸`3ÌðÃTÚp(!ÍÓÁ¨ è) +Fó`o:LÓÁÀ Ó<fK((9Þh°AhÄl.0ì/]Æø«X e9ÎZqnTá<å # 6¼ß¨¸l¯pi&6E �-B¡ Òsn&[±å #lèͳ£s@Ñ -[Z7k9#;" Ô£ÊK¼*J<ÏCÔ´®,ÈòÄǪ²x ì Âø& "´«ÀZÔÔ@ôDÉðj© l´*Ñ[EËs£af$.3þå|ÎêEO+6É<6츲¥ìcú (@!G1Üz%¢ A4#4Ö ,# ³óîc(Ü: ßLÏ¡ Tµ0;#pÈ7á �6A£[ð0ê:SCt1 CôÖà«t¤ ű²ÐP(T$:£fë{äÌ2õIR¶àjÁ·ë2Ñ=öåiC0ÜÑ5\`Pn#/®Ïbà2pdWOÕÕyG@´¼ /õ/Uýä\0úÉ{WÍÊÁ,7Lò°¬a@Ùw^çq)Åò7óÂÏf äü6UhÞ9?Õï$0Ô¯Æ \×uíURÔõHÐýdý¦Sóì3¶qjÕYæ}Kèsc"w,PÆãÙ|÷@GQä}BÐð]Q° +ÿbVQ#«ór&¼²I&"X¯Ë1¬KóÍcZ)j·Ú´°ÆäLï$DòN-àA06òÃß~EàS)"¸*¢h¦* +B¨*^7!áÀr§·ÌZµ kâÊóØðßwWÓ +âh¾"uWX&øjFî¦÷Hó½Á lÒGæ,bKé �ž¦ï^ù'ü)$°½ÊÃãp-Äd` ÎäçɸJÎøò´|Ϫ~mÁù?@ÛTJAê=Æ©~ªS*m¡©õC2*°è¯¦Zº[$,µH©BªUäèöÑd>á14àÈYö?J¡dÎ`!ÙæXåX6CàMOK?)O-¦µCuM z¸Þ£²NoÎ|Æç¿ �¥õô@ãsr@ÅÊCw.l_¼Mä]Îàf«ãOoAÔº·Zëݳz©¦ w\=t ¡à¼×ôdóÔdÏY"ÄT)îk"ç_,o¦>Ã2ûÂxUÊ ¡S<yî=3o%òW@¡t½! RÛ@8×?x"îkNYÏ2ú´g8 ãSüÈOÖf(E¢cpQÑq +!h^¥3j/ÚmBS9|+Hq2tÆ#´¥¨Z°k +:ÅPÊC´jÚ&2c �cÌX>ªNBèÔÛcjïáÊ8Ê8èS&úo/ññ6àÚ-suÄN!"{'09PÝ#ÜÌé® nUOq[NN½9@줳¡Ý;ÇeSÀºN='[Q¼¶{Gî:yȽj`Ò`ÍÃy1Z3}Á|$xë&ùóQþÍ&lUR9ðMò:gÝó¹¬9$xë#NxÏ4ôéJð1°}ÏÑel¼' ½FP5!A1S +j ÐøpÉ¡ÑVÒ ²Q{pU¹ ¢ÄRS®äK»æe¡Ò%dÔÃB´jÑ[ÄÖÁÕôY>ñ~èÁh{L£5ÕO/ù3{A©ülËH2J¥¢Ã©6n¥Ç¶ÆKí¢t°ðH[OXoqµfEÈ×,æ$bd"Jפԫ¯²Æ·Ê*ä½ü¦®Íç¹Zó±[Ó°Õì¢;LÖØE¼á; Rú5²)É ¾AAm3!$';GïÊ|I1:äIhÑU´Ð&Î5¼lÞ%®ÄVÂJNÂ<cëâ´7îiO=ùá@ å@© +( ÅBýIC +s!ª ¢C1S:+~5× å]»ºªU] $ð^öÃ@o¡±Õ³2´å]Õ42ð)õJµ"¾¬34îHfÁ +]¦o&ºm0 +Àu¢²`@ÀQ +endstream +endobj +518 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +520 0 obj +<< +/Length 2212 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5Î¥BT8Âá ¡Æ\4Ti´ñ �l.Tñ ©%)õ¤Ì8"ÇÃ)ØÈi ÎFóÌZR2§c Êr2fS¦EE¢UPsbõ1¥"¿4³ + " \T"JeBTT Tb4V299Z0æPA@°@W&óyÜþS«©úXÇiRéÒ1´~9^°XM}Ð.[FñA +Ú('ʤâA$ÅÃQ >ÝF'ô¨U«°ØdîÃn,ðP´ªáĸ Æ9 #è4ãsâÄ ÍrØ¢è*®±Ì¨ñ Ë#²ën7I«x* (@!=/[Ú÷´ Ü7Âc0Ò10* ¬ æ0ñÒ9: ß(Æ! j* ª»MËv°¥É,á@î4à Þ;¼b7JÐ4ã@Ù> æ4 ã¨Ø2v/ÔZ|À £xì2¼Ç/L � :Ü!sÜ"®²Dô0ÉÜ,2(è¿at¸ä¹pÚ§>°òd?*º²Á®$ +Àï×+溮ëÊö¾¯ì°ðã¢ì| �P¬ãÏ4 HÓ5 SY 6Kdç˳-óá3ÃXNç>ÈK¢éê2Ñ;·M«Hnñ<R¼¯H& â*µªYO«g*ªã¶´ÎïátÐdBP¤-t¹8ÆÙLmÜÈ¡2÷¢Ìí*Ó]±FBh/åyn^(GQàÓHñZHòH@½AD¹Ó{¬-nz`d±¡º1S$QkͯStï<øç-âûƨà¸`Þ¼Hh¯MÀÄ7 ¸ÃÑÕ¦1OCHÈ205( !J{t>\*¸í©Þ O!x5EÆÝ'öÝOWÖöýè4H!¹&{{)â&`&ÈØ2·ÃàÁö#¤ÉJKÙ ¸ÂR`vIa¤1>õÄ +;)n ñ-§T¾ ÐæÐnfD¦À¢Tò 52Ì9Ã2à¸rW« Â`ÐA2.b@ +p¡µä»®N© +Bæ¼KQ¿Às QÌLpâ)¢e\ä=siÈcàAÑr¸BNf[N`´7'x¬uQ-à"KÙt©½8§7¼SïU)Åï(éüyÑ2>ÇõDÞRSîj¶&TËs0m(õ¤äV5¬Æ*ÍÒÏ %ʯ3´ «"[m·Òä]±x/Jmr%ÏãTZ`HtÆ"¦HÁ 3KíaAG:\[ á@"ð®ô|¡&0BpG¬(à0BlèÐåCf(ÍXºòåy5nÈø8dù²§,å lÉ3Y],OÈ8*è9ÚÐáhð ¥Lº«RDETÉIü¨qEɶ8Î BXKq¶ÊvàLoim¼¤Þu>JÐ%t²Ûò_E)Â8cpÂX7qâB'$è©:<' ëC(-iü1´TsìB¸3»ñZ%J:Qyåɶ´M#ár)-ü»NõdJtÁ; àüGB¡°<½YëÃÄGAá ©Dê^Ø lOó>Õeä*tro¸2ʦ#2 d@ÁæÉÈ+àÈr`ÞѶ fD%µÒ·5ä0ÒÃr×cr(ñ!ÅGÀl|K87Åtâ r´ÑbØÙoÄa·ñ3\8ÓqnünÄ6G8õ$C¼zÒ?ë®°ª²îHe"EzOiöGÇy$¥XS2 §}o½4À&S'¥M%2Cur¦zJÃ+¨qT¢`¬¢YlXåÉXm_-ù¸¦!~ÆCf¡3Wm##$<úÒy¯8tåó¦uùÛ;çNq§3}çÉ#MY¡9Æ<âø9<@àRÝfÈR`¤¦¬¾ +&ðN¡©PöpFø.$Xíå ²CÚ,£P}¤B& fV7]"g¶'õÊ¥n©R°QKsÛ³~¶Ì2ÛÒ58nôí¹± �2¸´ "¤« â½?:rø5. 0}à^K¯êªü¿ºÎí ?w �¬«Õ±&X» Û( ûkÛ$`,ªMöf½Y¶¤³K¦'döÙÂ}»¦ÔÜÍ'¼Ñ³ ¨ +µ"(-mè_»Dû`6Ö¦ºA h_ïR3m3Ü ¶õ½kt±°R% \>ÆK mÄw6òH}.dDGѽkÛçâØæwjzqöw¹eà¼PNà8ÛËÊ9Tʽ<>õ¥[Úð-ð¾X>?ÄDZd-V÷úE¨:x¾2Oª_dó%önRwHï) ô³n Lªqo:ÌëçIqE³¾+«z`._1æÆþd¬mc¦u#,cDòü~ØÛ,¡ +±²dä°Â)D +endstream +endobj +521 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +523 0 obj +<< +/Length 2310 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$Äéâ +¸qJ¡I0(a/&©É\1O# ÀPC!äR!$¨C$IÄqHàPEÑhôèØÂ=QácÃXxÖH7G$²ì5Çe³×Æ6©øe9ÎFÐÒo7`hÔ4D"QAZ1ÅÑá°çt8°×e<Öö7² + +(SO·Ünw[½æöEçt Æý1Òc0éµ Û 9LüÓIÌ@s2 èe9Á×àüÜ0¸ä2ÓøûÒ7ANl4hÆÔÞ65L&£ap×¢:ã§@à7O 7Ï A£ÞFÃÀ\ +£pØ4nköæ®è» +¢ öî»ïO-O+Î9½/XXçD+ööËÓ¸4»Ï]0ÊÏCÔæÊ¡DÁ6¾: +R\aÌPä¾°4"÷´C+âL¨à2<0DvåÌ|É(Ìôk¸÷¾/è@ßL'ã +x§ñ¤m ãÄÐP4L6ð ÑSÈs: j¾ {=º"¾" +B|'âp$b AVà Þ;½ã ò6¡pR* Ipj$ +©«É}rÅ"Â9/<al¿3íFÒÊuÜ)m¼¡£a p\l a,a@ïu]m¯l mú¦èâ2Ú`·-q] @¦8£ÐOõoÆpÄ46P%+Vµ°Ö_zâ¡/o`X%É[à÷@ eÛµrg8ºQrV×69¡¹nhÙg ±f\üúÖRù0{Ý!å1®ORÙp}h@6m¨úY³øÐ4ãF²9kv^µ¤_öôE`ÚQl#vÆþH®ì¼/B<1̲ÇåÙ ¤âh#p°6ª1© kp Áª¶á,´R³-ã9Ó-ðÔ°C(̵S/Ãâ1´Ö%6(»Û1-Óy²Jæ qa<L*I2\-âh¾!âh½ç1à)Êh©ªªº¨Èâåc]SÖ3qØ·yΤç!G¤À0\×>bÙtѳvúÝAhFaÍ¿Öì©¢4¹ß4¥üñ²x¦ìªbÎÁ Jç,FPÆ+ƪªHII1Ç¥ÌÁWK'°÷',Û p]jTç30©1|Le¨«e¼YeÄ ÙBçÉÃÖ SÍØ7cýs0)³Eh¶#èßim7létFBâãhJÜ(ÂrY2¤TÉ0£`ë Á A(0:(¶æ{sR'¹8CÄÚO°?¶F*t%è(J *JÌiá>á-¦ÐÅÕ<£èY+EÿØÑSäå +(CÝ È!B!<UiY«>G)(\ä¾ =J#ô§ÜiSª}PöÍ,[BmU2SªÓö©Ë¾X",EÖLµNÀ*"ì®ã» +mK=h5ª÷1J|}mÒ6H#´qF\4eÜ~ áZêf¯x(ÿX5imõº8àÁ¢óCak£Ãâ £OM=À´&<ÈÞd<²¦PÛ-eôÉÐ +4¿Å*¬ö±¦.% ¡¦T*Y-ØL'jáÝ»·ºÞøtp®æÓVÑçãm¼0·ÈÜÛU5\27Ä>c{h +Õ´ÿ +^+I³MÈ)`å'ý& .dÂ9È äÝwØÁ£îl:ò|ÝsvÙÜtàs¶Gn5\ +]^a×zYì=§¹@(*pÑòÁ£é^fMöÀ²ÿÌám:)) ¦§ø!¿ÃWa`s$ÇX²2U A²7Ö"ÏeÑ KàÔZ7ÁiH¬µqxKcãOdæóÊó®hS +Pì_àQ$kñãÀÐÉ5Í(l~¡ÁüHk+(G¡ +©óÕ÷¤O.çÔËZÞ'FpZfìßVDX:äԯɸOSæVY¨ºf± ³cõqjÎ9«Ãâëu!6¢É¸pCV C© ¶âÂPE¹hEEÈàÐàÊ»Ám¢ª/0¾ÈU¨t{«BªU©)¦Ò¼Å*Cd,®6UGMU9 ,¸ù3,Í3¨,é=3Æóµ.h´g« bÙ5ª'ò©Ö¦¸×««bd³{CÕùöÛ+-c9ºÅ¹7FìÖ«[{Õ¾78ª\5w:A � �;0ݵvèÜáKC{¨Ýð6·ÈÜÁÀe.îØU!ê½w²öÂsݰ[8¦Û·Çoo ~ÖÜ\ÉqÍÍÉ~H%ÐPKP( 0#] ÂÏ£Aηµ¿¸BÉpuíé^ÐO7]zOi Ô"÷Ìn΢28ä§ÃOÜ_ì Ï=x:eÿä´>ÂàжjèÐ0ég¿x&bE1ñB§8¬]ÅAë笡« +ÃÇU<¬¯§«áÿlÇ¿Fòõ[äÇLPµÓ§3=Í Úò«×EùpF§å7^LéB³½#aµ/OÔï +ÔÉG=ÐTÄ4Ó3ùW57º.úZ{`¼µÔYZê¦üÞ|§5kùíRkãSÕ¡}DʲVcùZ5»x×-â·FÖÿÙçÏÇØEÈ%ô)ÑFUü7¹VøH + +endstream +endobj +524 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +526 0 obj +<< +/Length 2354 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5'EÒ¡* BapÐPÄc. Äâtêf6(#xÌBT + Rf +Eøe;Ì'¤3¼æs¦kÐPe9MÆ3)ÌSD£AHÒ8T2^dbÐ͸ Õ+öÀa#³A28¾S"ÄòT¦,É¥ò<M ¡ªF¤ãiJ#Óächøº5$,¶{M¬ip=.w~"dÉR8pôX%S¥©ÓýõzÍl6Vi6Ó¦½.²Öì#¡@ÂcÒ8HÞ7=lJÆ)lz.ã2a*2á°h£8:!Ê-@¨4¡HÓ5È'â(@7 ðhÌ4ck +9#<Z4a �0°#t @äl¨" k:L- +ÄaʸÒ7xîñ`Ý(ŲXØ2qü÷9Ï ÓÅ2Ml󳳡b´CÞ<zùEAhhü¿º§!ÃH$ô¢\âMð ²Ev4Ðë-Ö²}1E¶x1Ý#Ã$ÙÖ%Àc¨Ù&ÓÔ(ë%A �´8ç&×Ôêv öZÏxP³õAKP¨L³;AJV Uz< zÂë;c(ò9 Íã|Å80¬Ö $ajÒõb\Rp �C~§)LrÅS Á jýåÌöÑùåäMü)£De7$únabBá@ 1ÛBÖõÌ¡|ÖòÒê6^C$²,CP Ú# 2ë:Þ ½§âCf¥ªo^¦oºâVlT¤6NÁhÞ9nW(ïËÚ»hè0ÎrN1´×WÌå:NÁ£:OøÌéBHÎ4rÜÃ<s®-uWÑsÝ å»äjGö¾J"÷(/¢´(}`þR/öÀê!¢Ý.kªî¼¯kêÿ,°6Åjêd32Û. AmælèµôÔw 0DG&³`i8T5¡Idm ±¸7Néë7²q^ÙÈ9OS ù_: Ôì¨wé Ý3rÏ {À½¬VûQ½ò×ÌB/± Bo\?³$ÿL±#ØøØëßSI¢×a DÁ:Än[¢=PI!¤TRZZIÉA%t²¢Y[C®°Ö^Uq/MÑ:têÖUO& Z%V0¸ÝºìG$%äÍÃh,a ¶AïJ«&%ñ¢p½í)\Y&`W0lIn¹j± ì¾ÚÌdV Ñ$»ÈÜp.!nÅl2¤ªó#ÏH P$"ïÖ +nG·8`frá°²Z[L®a`8^Â`O5T(F÷té^/$èó»ÄGËrxðSú !Ì4õ¼µCÅ/ôiytp`C$Ò )5aNiÚà +gf-1¬@ØÃ6;IFÊÚ&Ck+EâF`Í8I ¡B§ç#ÒPt)ýêöJÑ(i±ß©uCfÌâRÆyQ~íä Aâ&ïSL®8Õ¨8â óQðÄÙ5=)Ç<ÛÛslÁʦ¦ôÉmrª°ç"á mïäW)K;^®UÎ;w6æ+Úsî6 @éª;©uaÖ)z³v®eÜ9uYÕC¾LoÑ<*õÏiq¶Mæô- ¬hv÷è5!àÕÓþKT+}l¨¹7Ü^Ñ|eEøÀ'ë«&ÄV,!Ã\ªÕÖàC3tàq±6fÔÛvâjyÃNâ¬qqe3 B¾lvl/ +dî{\îáÔ>¹Ðúè`ÒpUÖ 7d¬D»¸Yë?>ôYHªdáÄà Ó3/¥t©ÊìhÂ÷Ð7%¤©2=¨Xý$s©M=ÍÉé8¤Âå´AÍS±2¬â]6οk³4OTUÓ÷<ÜIkc/ÏL¿ E +RTõþ¿¬I>3Í)h0¸NÏ)-ëYS9Ëåiæ +á4r¾iñ4ZÂm'¼³e,Y.=NÖ¡^4øA~dJ@u=YUiU¢d½ ¡ôF9ÎZ+EóJ½Y³¶0ÒæC(dÕ8åI9ìT=!yPøõ¶) 2\ÔÕAÌ7GNtóªZúÂÔQrw^õ.äÖüKj¼ªîù´Y¾gU}Dö{,5edÖᤴ»ËëcQ²6N*Ynµ`=wmѳî{LÛ-Ùö ºØJßaÚ5-ÍúŸ*×cësÅÜ[~*ÓEÜ w¶vyÎZµo,ÉSÇu:Ä[űvuÍ;AÃ%MUVÖöÒ1ëoƶÈÏD7½=í.kÛà �D.«åºø:í +]µà~7ùÞcb¥ëCW´Ë·ÔGa?6b]^ÃsïܿÝ~+LcZ9ØDT áiÛç|ô¥²k v*¸lªáÐbdbÁgKµùtÉî)àÕE8=ÞÎ3CEÀxu +¦¥¸þà¯@úÖ¥ Y&;¤¬²£êXÉè®Ý*çJY}×3·S§Rò¤Ä æcÚfA¦²þÎùä¾t0¦×¤æ<£>ySJtR ¨ªãD@Æ\k +5" +endstream +endobj +527 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +529 0 obj +<< +/Length 2003 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* BapÐP´b7Æ#1 +*MSäa6NSðd6C)ÌÆr4y¸SD£AHÃU§ZIR¸ +KÆKPw²ÙÍ¢¡ªFa f)[®×æybÀÊc47QÐÐeÍæÓ¼A½<no§C¼Ø 4¦ëÞÊØ.Îg°XJT2 Vi±#AÆS¯e,BffÑÑÏèiz>ÈçOøÊq°ÞwÎ\£îý0#pæÚ¾Óxß8ô +2>á HÎ4?/ÚØÿ@C ª£ap°;ìÀñ·PÃa @7 îhÒ1+Úúá9N:Ï©-Â%èò&Ê<¡áªH¸#rÒJ®ó*± (\§£àb§Â9ah¤2Órä¶9c꿨¯Kª¦"ÈOB¡*Ê\1©4O3 ¼r%"`HX +âh¾!âh Â$L¤Ph bJèJHapp¤Áj¡¥$ðLËs5ESprLr!@M Wµü«`§LÖMv0j.²ð½/óAJTEcD0¬¶Qó&±<»(Íp"Ùvh#²ØÈòMâ-3 Â3·L9¹c£jßF³pd6:Zh d££ÞÇ ¯&Õ² xq^à¼í¸Ý7®8þÂp8Â6-cË £Æ= A¥#¤Låyj¨ÄÅQcã21¸"s¸0]Uá@ª7 HÖÜ;NC´áøª(©È4%gø¨ç´ûmaÛö%%ð\#äãͤèɪÀ[+e P¨51zk£É$éaÝÃ+':Ud¤È¡¢HĤ á4<ËN·.Ú»¯<::PÅ1Fjðæ¿{U´hÒ4ÉFat@PPÖµøiêðïîCæ|C`Ïù/Zì=ÎÛ»çfO,ò¬Ï<`QÖzçµµ÷¼Á©÷D'ñ·23|¨9 +¡& P»QB®U¡øÏülAtLbJ+¹è·U³ã6Mý¤õò[ +Ål-¥¸ ʵ2-.Dб@2]IÅ9§TîJr{iA¹?7õWªà4äV-/ ¹P "35(Ý[»yoj}Pª5J©ÕL8zʾ-«%²U¸ L¬°Ä4ÈÍk+d, ¾BR +dð¹âA@AaÎõ®WÚÛ$ØÇE|"4M뤧'æ]^"ð/±^ �Jk`fZ7Y".)À1BêàØÃpæ1÷*ÉbDŽm»X +S^ã42%M33Ï_K=9piË9ÈqN:H Íõ¨ÃìßÃ+W 5ÈTîÉC99a¼:¡ùOÐyÁÀâÅVPq¥Ô:>ó`´vÏ-ܲ¼÷K#ýwűàN»*ñïÆ¼³cQkÐRb=IZ{ )î{G^l©GÀlt%7No¡ÒrXëí¡Ï ¿#±Li3÷Iý=çøf©sÖ~^\KÃè} �£8$åß3èBHf¡8Z?° �n%CD -CÔ@¦Id±&Ê]$«Ççdæq*R®µ+S²xO@¡>EDþ¼àÖ^ÊX¯ @Tܶï>º8Ú©2¨UOýÙC¥`µÕx) È+hÈ(Âæ@Ác0s!@SaH'©©+b!åÄ·«TÅjÖ¡¸Sn%ÑùRñ¥à*ÑÅÂ/ñ* +B["¨æØ7l5XÜMN¡ZÎíÂËá ¦é§¨D7iÉç9ÆS15&ërn]Í ò¸¶~ä¢5hH¢ÚÛzÏüß\§¹ßI¬Å¶Ä +Aú !èá´vÐÈ×qÆ8íÅ"ÌÙñà(¾7Û)ŦMn È3¹Vû_p¶dá<£pë»®gîrÐ9óS{Ï¥tå¬2X+K«·µ$ƺ\zZ¨ãXx7ywÞtê-%;o6¥Ò£ÇK* ´Ê©Ó5þḛ̀CƵ¼ú`:UA9ϹêRBQÎÑ;xÔÔÓÈôôãЯáèè£x_ôÁ÷*æ)¬(Äf(vhô,ä3ôkkJ"? ÄÐÄÕZ4Fºó_5Zã=óÞèXÜ`Z¿9´~ +jÖ¬AúÖ34sº]*Ø4BbR2Ȧ«l¬L éÒÌÅ Î÷ÑJûIyå jÖ>ËxZB¶¬ÂQ±Q[álÎ< +endstream +endobj +530 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +533 0 obj +<< +/Length 2286 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢N¥BT8Âá ¡'¦ctoKFHQRf +j£ØÄr3¤âù,Si$ aM4PO!JbTÅ0C +KjôÞÕcY¶hè e9ÎFÐÒo7_(b4»KD°[ #W ¬ø¤!.æU¡ +k QÀÂr2IPÕÃXTäF +íÄ4ÂæÖAÜÒn2Îây@a7¦COLÆÔÞ6Hæn¦üZÚ¸®kÂô Ã{L3 #ÂÓ5+ò0§iè@+¢ø'¢h' cÎ2µKðZì»hS6Ì +ë¾È=N@îå¿#£?î |ÃxÆ:asªë ¢2×¥¡¨hÇhúb*GïÈá½0Åã Ê9'hÈn3ÍDÒCJúÖ0JGa j¤LÐ`² SÛ5Sd®Ö5ÊRª¡Òï&øP!ÀßÈÎcöþÉPÓMò³>!RàÒ, ª qDL®M eWË4þVµ½1 Q4ØÞ6O{@T0jØ%Â4$)µWÃm;ò;#`êæ=ö¤4 #8ÐãR9!!°[h;ð2]N`c{_|1ê Eö69úý?õMÃØ|;ÞÞ÷ÉWK +<ü¥°¨0¬;xÜ«ó²úÂÌK*`pæ9 ¢Ê3,³¤ÞèmkHdhr Ù"º[jÛ¤a¨rª1Y}}4-K`¦"Òò) KÅ1XdU¢§¡)¦Çº!D7Ï<ÑÖÙ°hk"øÎ°*¼¿äÛfJÀlF«/lÎè2{»/[39³:Ï´-Kqpè5ØiÛchÛÍÀjRº*n®ó%Ø3E9Ncè:N¥ìÎa»BÙ aªöéÃÜø>O£íTx@ÐDû¿0tUÁ𢥻ÜÎ+¡ª}DÑDUEÑeOuxX'm^«t#Ö#4ܽ C >ÉèÄÄWaH)%0ät :!$ì¸ +`¡>Z°9Þ2ÊBMïÊ)û@ðjÂPÆÂhcçPÍ �¶ùÜ8TG׿°Qìzð9>(O +C" Hç¸2$g}ÉÛæT¯M$d6ÓB§M cµB(Sá* @C +A<¹ èXdB ðe8+B|àÌHËö$ĵzÁDa¹ÅUÄ~¡@e L<å®ÐÐtØpah$42#@oHXFØÞãs¡<+G÷CaÖ%µ$oÒò`*¨cÊemMéÄ'4êçSà ~$>«"& TÅ7ç_¤)Ú kIY +UKÍ¢N¦áÒSÒQ½F©ÃJ©:K}VÎ «/Õ¤äW 7TRÁMa¶p:5'>\ç9 +qh-(´sÓp ïô4ø"æ] uÉæ2¼×ª÷?«èø0õÿH£åQ£ãÂëVw$HJÕbô}±Õå/̾Xî,Ã8¦RãYY\R½Ø¶be¦q3¦xÏhNñ¢7C8U´tÍ9Ôö©½PÎÌäTJHM !R FÂú#ëlë´ËöÖ`ÛqTmÆ0&¬Væ9ìª2 ÍrÒÛ].°m¸zÉÈMGqÆW"êì;Q-áȪ©3Ó»5~ võØÀG +Ûje"sË>'ÎÉx]eÍ×6*{õnj w¨2È5Ƽã]\(ut¾HÅ^Sf}¬í÷¸tnênû¥³hðIäC:,>ê±C ÑCLn@ç¼8S¦RU¥>æ#ÄLÖ$LÊÿædÎs¥<Õùî±é\ü8I«¬Ðï7ëå`ë&rá&±:C¤ë¡ìAR_Úq<õÅ8|¥ÏlzT +»Ø`bC>,xi¬õ¢pkWymÑT1Eä½\ìUj®ÅÝO¥'_~-\ÄiUò~ô½ À)ÚÄg{Ô£2±êzǪ}¨l¦£2jÕAÜ#NmÚ&dåÜSfên«3Ö~Ða5\hÓO$:B/XȽe$wÄ[g`¦kj×[+n»¶;Ò0\â¯åBÀàdVëM¡rÕD7¦ø¨P. ÄÏ e³á³L©KESt5P.fƹ´ìç°îµ¶½¦édJ»µ¶øPäÛãõîSÍ'æÄ +îÒ{%³\M|r³áá¯YuãäN^&àñÞ¼ çáïÈC +ø(?Ì8ÀÂOØ.àÁR0°*ü X +Zßo ÅáÊ÷ü½]Ò}ßóZ»ú6½/ÚQAµ ¦àÈØCÓ.[ËäÑùá|7ñ»8p@AÚx>eá¡§ Ûx +Na¥hÃxÿåÐaÔ6`ÜØáï¹h 4¨ LyKS%ü L2ãÛ[Ôä0ÞÐ\fj+T +¬bzAgJ¸«7c,ßw7Mj°9w,xx2VAÓoÆ,Ú£h&)µ¾JsdÚ1¸ +¹Âo°rÕ{;fHÞÆeHù¬LC|Þ# Í´Í#îXÉ>ucKÒ1ö×! +endstream +endobj +534 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +536 0 obj +<< +/Length 2190 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NH±Á¤rx1Ïg#yÌæ-)LÖñ Êr2fS¦G¤¨d:¿ÈE¡ñº<7ªØ,VAÃhIÅò N#E¹7HO&täAIPÕH#R±Ñ§ r£PÚ@.R¬2ê~q¡ mãçC£+Èe"y0£A*µ R¡W¬ÉÃa»%æ ,ÖWD\1égÄL!ä4 Ò7Ï1jc·ì²¨ðlár´ø,i +@Ê LJ1À¢è6HælK ¾ì»nè Ã|3 #Ã@Ì:/á ¬9@Ãcd¢5ÆÔ¸;/ð¤66¼2£apÆØæÿ ãdx1DAr.5{bÙk9#<?DQóT?&Éò§ÆQô!ô7°´ÿ¬{£É)ÆtâÜ7PRÇ$è$ ©<Öìë´ D0ÑRÀä+¡ºúþOoüN@ÍÂ¥±³6®UÎ "Ï ö0ådVlLl¡2ÈWé«@!Ç4ÝËpüiu>Ç£$4ÊýdÛZÈSv·mß]ÅÅo¥÷4eÍtaU°¦áÁÍáoâáEè6QC SHÒC¸ïIv MJì0¬?TÃ@Ò3mILlå#¤6¤F×J']ÎÓÄ71E#d?T×ÜoÇqìe|dW¡Z$M¡àó¼O;˪Á±8!²È÷¹v御j·NLº.ËÂô¾/ѰíÅÖ¦ÁÐkÊ2Ûµ¹¼C CA# Ö^&5t(Ø6BsiíøZß2 îìá©A¬ äsªµÀΪ F"B`& vª¹7ïÑÎÝܪ/µ«¯»òý¿¶kåAʲ<¿nb6ÚÌÍâ¡.ÎLboC°üCÄ·JÚö(IEWÃ3Ì¡cÑJ+E¨¼0Â|ÙQò%A¼</ÖÀÀòADÁ<ñ^8Kf*e)3VÄ q?tΡD(¢ì£C+ʯì&¨È[$\k·æNC +WK ¤ÞÉ(KÑ"¦$B*¡ÔÊÓLP ´ø ÑÒñn.ÁÀ¨`¢CªyL38J§Z- Á°<©ø6Á2fðN +¯æÃ³Ê +¨æçßÛÁ +a|'ð¨B0YHÐ<µ¦Údªä¡µ{N{Y%ýfe÷Pßr&%kºæ¦¶Öì X,Z ʱÃjé|.¹²5ä×¢Eá.G¨% ²$l!¥"FfÁ¥ÐFªÙƶز\Ð1©q4\¯ú_±NÊCs+lx/¼Gò!nSiU³vØÒã>h ¡µ4öÒÑKNhí%©IÓïk@¸ócD}èñ6FÌçâYí²h«U²ó nè\*yéoðíÞ8Bà~9u.åä½§Bú_Ì|)ñ>B*ù gä£6Ég`S¯ÓTk s§P'dóN´¨@ÍÁs4|\ЧLðøE +AH)Âú" 1!WHkr¤d§cJK-a{Tü8Z`´ô©Z®]«j|s#ÀÌZ¿,ßt;,ÊZ?48º D@÷ÎD3fà0WÐþ["Täd'óÌÿEüHpv´VªØ+ E)B7¥RßYåÇÈ\¨WTͤ«v¥Cv¬ R!Bå£2S«Ü:kU ª:©àÂÍÃHl1Q@Þ¢UJ%l <SdÔWr~ÀÃ(*Ê«8X½bϬaJÚWic X¬Ü\p>)Ç6,ÁÚb!ûi-´Ëªfh:É¥ÖÌÕ]ÌMPgqSË\ãé±~Æ!½2¬j'e¾ +wºÜ6i'«:í}4gò6 5²féAn´².µÊ-D1Ä~ã6|Î(ÛiÁ®µ[Wc^IhÕýö=[GkÛ¦.&8Êp`%;Éö>Ⱦr0gÅXLçºVÛÍVvR¬ãt yÉzÑÝÖ pï´ìy'X$àxC +µ¶UècÌÝkÙ@=óFÒ³éÕ{FÅ M5OL{"öHÀG9¨¬«ï>ç®îY÷ì-¤hcPÕná9¾æÄ[bO#.7êÜGkw+@Kס0#l®-ã rUYU.ëhÔxP³¨ìÖå»ÐÂðª¦É¿)uea74½ õL®W +êOµv°¼¸Ã2¬ÙOµÖ±þLÐe¸·¤.Iس'bé¬È3ÖaÐø÷¾è`l9r§eîEb}ä¶9ª2~QKÏ*NÔ5×à»)ð3÷g¬ÿ36Ñ@óTÍs7gëBsiÕç~D¦V{9û»h +8ÇB)D +endstream +endobj +537 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +539 0 obj +<< +/Length 2127 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢5'EÒ¡* ¡AÆ\4Ti´ñ ©%)õ¤Ì8"Q±ìc0ÎFóÌZR2ÃAAäe7̧1M#HéPÐTZ%QÇ6*ØoS¯X,C *Ì(&Åò¨F'Ê¥1`®M/ÉäÒiD Tr5&Èâq> V#GÅÑ©$´`4ÏMÅæÜ9t-$ìgÓ&öÄ2)3E¦S¹õ'ª¡V¬TÃab_ç ,kEªºèèP"0cä4 Ò7Ï;1Mú®½(É Ì¨lèâFü,)p`¦Ihb¬° +@Ê +þ7rÝA¢°¸HX¬Û;Ä1;ï'¸Ò7xî ã0@0§iè@6 #j1 ãÀ@1Á¢æ6È@9°¨Â7FÁkí´m+Âñ¼³lÞ7 ðPÌ4cNÁQ%Ð!D¨'Ëu×¶-jÛÁÒtG +T~H1>³3aé ¬æ0ñxïM¤\³@å/ÍlØ9t_4 (Ç?ͧ6 # Ê6̳eÑ3u,KQ³Aª°¡I=6Ô +}GËÀ\ 4ñ=OôbW`Ø<ÌóLË)WR¼³-˱¼jÚèTÜSÒii1@Ã\^¦/Âx¨$ÂÌÎ:5è]}1 òÅ þ¦"¥·:+8P(FC KcIÚ2¯ çA"Ä)¨L$°ÒÁph GÎpaO @ïYv9gØü::ªL3âÂ0Éxe_h_ö 1 ó Ò2M#Lö¿cmÓy±r§ªßá qäìæf·1¤µj¶Ö±¤ëChÅ%°uÍ^дb(¤) +bò>ÕtØ Î4£xå´Valñc¥q5t_×v.8ßøáRe{(^ýî\2üÃtüÔõkð@;õC&Û)÷BªÖø+!PÿÃìÒÇ"?®ªÕ ûP.áÂȼ0eA¨3hd̸tVäøDG&³[C Ø#X!¦5NPòÕl¡¶7ì·q_áÅ[©ñÓâsQ Ïe'ô®vS<0L'pRv+;{ÅB½ÇÀT²Ö=hͧÐtÁt5`± TW[;jÈ¿Ã"ÿÉ4Ä<æDÄD*&}"Ô^Q5cLäµe¶1hd-$4¤RzÂPàÔ6^Sl©\&h°Ô,<°J +U +æÚ}sª)A¦É9 Öjoê:3°[»AwÍ]N$&öfÈÌ|TT*¥Xí²KïTµåvUê¿]oH,U²R;YC3µøb#¿[8«K%ÀW-\ÉåÍÉ©rðÈÕµK¸Xà-åAÞ©~NaRø0æ Ä£KLd2ÐÄg"¸\ëÆGÎUê¯órñƨBþÃM +ä7É 8h`ÈTiÉ @T)2¤Ë2ë-WFuS%D + +ôÐ ':]5ªºm®¼ 4ãzj°2g¤½UÒ=4;5O¬2YGhû@¤¨¬¿tdéu¬2«¥gAæ a _W@»åÚk¯\Þ1ãXAdIDöüËËó29,Ö+3²ýÈ3pgîð§43îÞZ:DiUý§ò9Ð5¤h×tô§-åȶÎÚ[Xr®ð B`[fZvo ½úËCmpF2Ø8j´ÖC{qÒ9'(åÄs ϺF«U{¦uUé;cSªõºÎéÀXÆ;¥`(x5¬%ëhäKdl×AÇuÔuv®³ø÷b1W| Í@HaOÙÒ-1H¶¦âág_qv/é7Âü`¬Z²Ñq +Eä.e >¥ÍY( d§r§@èͦ¸ØBÞÁ½²ð ©aULãB>ïDü048F¦óRjâÜ¥R#q ¥cø§6gaa+vþyÂèd6H¯ügªÈÕ´X«ãòd@}4Ñ2>¤¤¦$ ^ËEäÏM#sÎPÒ{Ed3Pjeu( 8¡$ù;Q ýå>t(3µJÚû ;T´TÔ3.42d/æ4Ôepà +øg!+·ÀΫY¼WgV #X¦?w¬vÇͦ}¥ÛueíìÒ²Vx:ZDñô-¥lÍ¡9¶Ùev±µîÍ7Vï¶·i¶æa6¸efx³·ÅçÃNåÆr®^K\ª~.k¢4ºw ëK¯ºëìªû¶Üª¼ +nñ;Gy6ǼàïÅÞòzÖV»©Þýú*åã³ór¬Q8ñP¹LüpkóÂ/Yxºd3uÅ_4DÌ<wXI 3G¸=e"p +endstream +endobj +540 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +542 0 obj +<< +/Length 2351 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éP!0¸h(c$ÄéñÀÔ\4¥ ÆP¤0$ I ([`,spTä) + Æã(¦|x 4Z=64¡FUzQP. s8%^0Åͧ¹¤Üd7Ä3¥ØPy6]FâîÅÃV Ã×åã1¾2Ú("Nf3¦x5'<èÀQ¾ð óÁËM}I!PÈtB%E¡Q®6ØZö:ÓÓ²ÚÝ;dä¨h4Äx Ãs2Þ>!AtÞ #tù¾£ Ð2ÀàÌ7c2Ëá Ðt« ä0(̼29 7D°ÃCÞ6C|T7¯4g£ Ò:F±xè9AN9éXZ-c`½(ZØ Ç±u·rD#¸É# Ò1È£t$ÇÍÐ\R#)N©ª(JHî;Á �C´c&½>³¸b)àd°@!@'¢&¸'x®Í¹@©MÈ"rj +#:JcªÐ.ҵʫ[,%e¾sÌö¡Sò,K°ÃQì}ä2Í£+*˳"àP.3Äõ]×® Ï6/3 Û- +$Û0ê7st^¾UÒ j)whS¦Ù-+Êþìä3wOwîÐõ1Ë +ö§õ2#hÊ:³3öÒ(Æ4ÃLÀÐFg ÝÖg:¾CxÌg¡èÍh¬T2ÂøMU#[¥÷fÜ åɽ¤³1Hâ2¡Ê²J·ýÑ y Á¸pÅßBÔÛcÓC¼:8n?bë ÙgYf0Æûéá_ºLÃhßqóZ>Á°xÝÆÃt.ûÈÙ¹¾Bx¤È:@Þ3åð8äqçÆµA¬£´o©'H#ÚâsÃ.²xdú@r Ð^wêÿ¨9!o§"h$býN&b@&©[WÐp¤FÍ>3H@6£dÜ¡`1V\r¡04ºI]Õ,¡ÔÓQ"M¨Ôû« bÃÁ 5)I=b¶£b +@aÈ û²m (½Ð¢&Ó° .ø$ëOn é:4\ÄoP,àÆ|bk 04¦8S +ÑT.?Ð1þ¤D^!sI +ï&ª°BÐEI&%EÂøM!b3ÒcH +a)ð"AU/+G¸ûáÄ>eíw¤øAÛxëxÛàDT¤ñ¿Wí áIò(ì9àäÚ +¯iåGÊÂP +$'é8L òçiÒ ý&àé eM2 +" 8ÄùdÀRAJâaÄð´5ò÷Ü#.q Ì£h`]"C ÙG 8FTÁ4"ÌÖñ#¼øÈ-+ßSì'ä>ÓÌ£ñVp´{ßÌ?Q - ¼³µBhrM)ã5!,ÖpK~Wð ÂU +4ͲØX|¦8_}/¬"*¥X«§scOGmÒ6ñ¾Ê\«B¹<0:LiBЧä"NéS*éÊüJÆNÀ)èD +Jß¼óÐ:0} !&|IrKE4RÒS*äsAtÃ. qFSGhÒàgÉüÆëÏóaô%/Dk³A°ºbÅ*ÂW2tïêµÁhK2+^)ÈÃQ4äõÔîWÕ` ÂHBªÁ8#« Áº¬uýWº +Ó 0®Q9ÃÙºa ÜL4Ö] (GHPà(dI¦Ñzÿ r±f +á(CwNj ØC5Mvú!V!«I·Ö}nw ØEÕºë.0ÏÃtÎmÚñÀ'óC.¬FMi©Å~fM,l´=pûÛ{Ã)Hv88ðæÐE×Uê§(-`u^*Ò´,;:ÆQ´kùhd£\©´¦ ÃB97®áæc+µ¾Í~Ã@o©®/ÂäÁEƳÕc#ní~rIµÉZ:øÂA¶A"3Ã._½2É4ã´|Cb4- ]J¹±+g4èAvÀlDNlºDòQë FJȪüD&ͨ4ò« æèàãí"f%úÐ}c_Î]Â.Õ¦dº;ä÷ ~±@g ËâºæWPa¯³Êj±0Qàa>H ¨º0ÒºqØð%J0Î.´5ØÉ9Ìëw·vÒbÌZrÍÀ,tF4,#îÔÊÐk¡äùM§3±[$×4]3ãI8®¹¦zå2bÛ¶å²íÝ +hçß"qåÄ·c=ÇúëtRåC¨Ù¹Wk 1¼¥: 'Ò(pC`sGQ:b#;X( ©5Ôrä<¡ÁÔ9VÄ·øÅÎâÑ2Åî7C/_PºÖ¿Z×j²þkEÏxãã¬i8oCVåk×¶#úmÚ éGöCÀi ˨îÔÑ´F&Å]5+?Ðë2Ì./sI»ÞñÞO~×^ Í]ÍûîYçÉìsß{D¾g¿è]K¢=Ní>'øPN7§¡^=Ê?% +|¦ÒA7ØûO7í«(<+*P,Bt7àä|Ýy=OÅF:÷_å}LÌÎ?þj%u»{f¶³ÉîÎ\80mºIFÓFbë ` +endstream +endobj +543 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +545 0 obj +<< +/Length 2397 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6Î¥BT # C ÑØ]@FâáÒbT"KF +LÌ-K«¹°*pW)Éåb)HA(¤B¹$D'çc¨Èr(* '1Ìèy6D3Ât2á&á¼ìe9'È ;MÆCyÜ@t4cÄ& Ê)¡ÑAUQuXp ¦UÈ*Ã[+Ò{(¢Ñj¶[®" °AÇ!Ü +y;Ç)JdÒ)8ª, PB ª Æ´ ,R ÷:ömØõ-HDòÇ;&ϸâh,>âKòýÆ<ª[~ÎÃ1])m£lÜ!pnh[z«ËĤ¬«:Ò( âª( Øs/â¢ö°L$(ılkÈ@8 ãZ: DÒár±lÜ7 �Å£=%5 8Ð×¶($4¶íÈbÝÄPtO 7Ë#Îè=b`°ìL.ñC!£k2CôA4·Ó[ 5+qBnôñd\(.«ºó ¡ lƲvÅ1s ÉHr,$´-K/5Md¼Å8ôT^ðL-õ ÌÓB±B,tÚÍëKö)küѹëK²í»¢¬é +rp¨7hÂ5±Mp@),0Ê6Ù£(Ü:Ãc̳4Qã é:u ²Ì«+±cxÚ14RÛC.µÖì@«q mDUTbì¼ +÷XË;Áje_>70ýüÞÄÔ,Ùö¸ïR¸h!@SrQ4ÍEJ0Ó¥¬6 £m´:ÊÃxð4Y èÖ#¤x1#(0a²Ï6 +$Š̰ìÎÞV +¼ ãpØ<0Þ9drc { >sç¶H@$Ù¶hÂhlþ¹lÙµIm+× ×Õ¿Öº{Q Òñí5 HBØ7ËYfÑZÃ>7ì²TÈeu·Ãa +0Û©(kf¢hbpêFj>+XÜÙ¼PË0P#<øQã¡v¡¢þ!vá@ª* +¦*"`)è¡|Ò,"#í¬"¾Ã«ïP¯Áêêhâ°,V¬6puÏ ±¸6Ñ-3ù¤2âêÅèÃ2Ækïâ¾âÂà(¤Ð%ó(¦Ly¢|á:@èÔVJÝ Îaæ@d8!4(U±8~HT½ g Á@M1Áº<,R ªma ÔÁåWÀB- Ì) @*22 n+@Øe2UfM+ ÊÎRûXm¡%ãCt[®,9Bå\ÚIºiݧpäCÉgæ*7G¶aû4 ¡À6U:t.2@Æ(Ðc �zG*WÓiaÐÙ+gXt:áßøy¢;Rel7îb@ R~SCÀc¡Á*æÚ×thqj>Ä£Ô[2ÒB3IúÒàòl8¶0ÏÖbÒ ÒÁ*Ì3ûù!Ĩd9ÑÖ8Î#*Ö#Ku Fû$Õ-2qà0Oj'`Ð0h`6?ÜÌ"WÜ2¨«¦ücH+tÄÂ%°h"c«& ÷S`(¦\)vbåèk0æGÎÕ`g#ut\O)7'OD: ß¼íÈÐ7 @é`8hµ%³d´(wÌÍÀÓ/1ÿJ-Éæ¨"ÍÊÆ5Éum2×EìÒ(Mç)ÉXr é ӬĮ×X Õ"¥:ÓÄ£5?ÏH¡äÔö.} djü¡9¬çÈaCug«DÔÅ(¨jL½ 9É.«ÀÜùä9lõÆ¥ +*|\29±¥ZÖb¦2á*C#±ò9WàÐd$³6m¡5#"Û±Zù§É§ =ÅADW¡0OÕe41àÃW$ j.ÐJVc³TM^E5´ÐoüYÔ)¾F¨Ê_}¡Ú0ÆG¡ÃlÒpàcCZ5³dîÄ �y½XS{KHG +A=ØÐn5ýNÐÆ&r<¹qº¹¤Àf"mF Í ÕäCxc (þåMKËr%dñ¦dOQ6ÁÊ$3E&¯4ÚÅÑ9$Zôí;/N5½kð4åhëqÀ_»÷ñ°n á@C¿ø¨Óåë¼3[Àsg6MPÓ"«¾ãWh0½x,<!uZ¾ë6"¦º¼âÚz'!Ù8¨is-¼;Lv ÉMw© ä½&pK¦N¯èÊ«sͶ-ã?V>e¼°4»'ì÷M-4¾júßz{~µ4Ö¬ !W)ó¦I~g(ÄýLÑö!{ö ´Ów¹éø-w Ün¸§NÊJ*áea !Ên¦×pî-Ç3SºÜË3{óê+¦d/â²> ¼ÂæÞtÃG¶oÁ¦ÕÚ`; �»wsB)á<&z~åQüxoãÆgæHqzW=B?Lý6¼Þeb3ß-× 2(9ÅÈ+Âó®ÌÉõrÇ/ËÔ0nAÛX¡8¯ÎÂ~ +-U½^aͬ3cÒjzðÂ; 2}±ªÙ$.ÇîaàC=l«ÀnË´ã)jmT4¾Eí4mÄ¢w+¥¾6e7 ¡m?ZºÑËÆ©i-§Ù~mÆÍÞ«Öû4ÛÙÚÿsÃnÅ_`£¯( }mõ&Þzö娨û¹éþ« þ·ð ¿ÆõãöF¨lÙFºãJeù/¾¼ª|¤¶Ñè¬õC0KcD¹eòüE¾Aíªø¤^/¨ÿi¢B +endstream +endobj +546 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +548 0 obj +<< +/Length 2225 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ B§eÒ¡* B¡AhÄl.$Ѹ¸b4Á¼aJ§$2L¾D$È$"aO)ÊDòa2x2Æ ÌÆr7 ä 4ÄaÜÂyÅÍó¹»:¢¼Úb7á ç>(Ù:há_5Í4ç3 ¦FUÅÕÀVR«`©EQ <ó.(ÜoÔçMÇC §,eçLæAÐÊmÅ4'#)Äêiò_oø9¸Î,fswì ÄÅ%CT¨ @ÈÄ#Ø2 êÔ¶Kì;1#L2µHÌøJú:0;ò9ð`Ê:>Ôú°l+ ãpØ<¿oèÿÀ0ç Cû_¯KÍ»{´î .óÀËÇPÕ>/Êó½/£Øëátb¦7Mã|áÀf ¸kʳ®b'ârxA°j +cHÛ?²,Â&l7±+c<L|Í4 Óü<1#¨ææ¶Ê* ,ë~¸33¬ûBä4²Si&NÃ7#°®$ÑÑè@8<ð¶"äÀò¼g }ïA#pÊ<53µ8Ï4 UCH¬äZ:>²³ù,Ý+- Òì¾'E"L³<Ò&-"¢x*á¤á9N=¥AÌwe wQ-¥A3w]ÛD^äÛÒwµKÓ7CÀ8FÖòM;jÔU°èÛo¬Â>qFò# [Åí`¨ØÖ#}X!¿AE7D!?[nÀèÅ ð¼MºVãoFJnq·÷55ij § +BH#iå*A@2cd\6c¡CK$,³)gAhÈ9,µOIü7¸½ÃX×;qJRÈÝ0á+p30Ö,ÍòÙ0Ì7°û¨A»Ç»Öù¿ctûFø ®ÿ8<±ct8 î³½[õüëscÛ¶1l?ÝöN÷9ðÂ1»XëhÖÁ,ÍŰL¦g`+¹µóÃà84ö_zÌ45î!â8* , +S[#<)_i×rËÚä^Ñ&åu&2Þ× EáH ÀBHG Ȧl ÁBCY!ä4ÏUd` ôÈ$cÌó¼Q Ö+PÒ&3A¤íS KÇ¿è]*Lf̶Ô@LÜ7H¦)"óà¤Æ"ób_AU£!#\Áúv¬Ð½nÕP!aÎô>(vhH c hg+Mç6¸!ÛQ¬IÿÀEÂ(Ma<'` 5&ùÄ8 üj>+=·Dd5Ï" vQØÄ:ϵaå§¿¸zÄ£+Lé>£cÔ*®°éG ä³#¬wI1°ÚõBò3Çveõ/°Ë!Ú¡Æ4βæÚ5-Õ裳 +ÃYï ¢i¨¦¼æo¡YN¦]§ @ÞØsnf£ÔnïÛa tªÛ{Ï4¾*1UÁ4 4 @ÞÎø\pÇU[:#¢³<Ÿ9óàÏnbHÓHÇ¥ÊÚ:l;N9Ë9ÝWÄNI.s%AC/èxÉ$ ØYc¬TʱGË#,ÆÎ³¼wÁÝ"ÄL¡Ò|OÎr©ÃÆ"pà)f_Ê4¨£#ØUjuf/Wä>©!sõj:`ñg3 :sÐ3 ã°_,=.I30dKV¯!}DIõØB¸F !`"BîÁİn/Ê5*§´mì5ÙeU7pÑÃy$\uw&§Z» +Xã«9N´:wOuÒ2Ã@Ñ ¼U©$Ù;8-Rrq5#¡©íf»µªv«HÎqñÈ|¿VÚ! 0÷ +ZØÔy(0iQ>º± ÎB¸Má4"µ ª Ì9¿[â¯ü¾³ çD'Eã¿I2lãn³~ùWlPܶ4`]ÜOpdµ' ?#_µq©L"½¤M6p¬Zék-¤ð Q~l+55Û§ämí)søç`Zq²Óæ¢Ôot+{o·TÅ4 v§j§»²ßçLÝå½L9o{"aÎ:NøXCj¼Â¿ï¼ô5oü"I8H7ûrr. +naÜðÂØc&Iý2µÄYïQNçqRº»^«ê~6xá¼i /õ ¡çërM§ +ú÷ äü=¥îT³Ðû®àÓèE'àÏ©3L`ÍxgØåCyRb18ÈE|^ÚÌ[ϧ=1-ïHµìCê=ÏÊÍ¿V±¦Ig"ÞÅBwù¨NN®·êµzש-%n¿ó}Y +a>PÀs½W³/3y +£ª+ÍÛrèúGºK2ËëYZ]czRi¹$LH A.÷õ¢K"£8½%* +z°(JÀÄBî w¨(Þ@µ²ã&ÂpT.a06ZêÉwd¶¶Iê$X@AãIR*Äõ*I®íjÂ9pïQôBMͤLSåêµ}d +endstream +endobj +549 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +552 0 obj +<< +/Length 2335 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6Î¥BT8Âá ¡hÄl.(#qpÄj7 %£Òe7Îav1íBiÂn4â +F¡ªh¸n5Öf0TàS/J¥By ¦C)ÉÉØÔh7 +g+qÐÊs[ÄS!¤è 1ÍÇC¼Ø ::s Ôèo6ìÍ&3 °ØyÌzÝöÐo9OZ£¦÷¡ÐgsIÎéDFá Ö}/Uª`Â\0½a]Y8d +úcFÀÑÕàØì¢yÌ?sØÊé»è¸¾Ð(ìê#ö0³@üÍèÒ2" Ô +RÎC¸ë(Z6.0+HÓ5c9¾"4L6£`è4Åt\Ò´íKWÀSb7¶Ï³ð9¿C(YÃàTBÁÄp$ ?¸ä0HØ ðhAAèÊø#3B74rc!µÁdÐ2A<¯;ÓìCÈ2Bcò²IÓılkȲtöüKXÒNÒð½M«nÜÇmã|<¾"£îÐI#P·Ã{N1@£¨ç/ÈϨÆö3Ãù[9#8ÐÓUtv3 2ü^:R²ó+ØHMc]Rªk¶î»áülód«ì(QC±L`EÐ,«.³P«=:Mßg5ífжÍÃuO9î64³ÝN¹Î �Àñ[A@Úä@®OyMäÙV (çI#Ía͵âT5º¶-/n XÞBX¬ÃGQä[6Æ= �ÉU$þ?ÐaåÊÛÑgÍxÒ3Õ,ã@¸Må ÕPAcÙDøL×H1ã9´:m·§Tú/ÜtR¬ºV\NëFP[ÆY:K´9Nè [d*Y 5{`ø]h»Næ¾öŵL,8" )'aÇLÌrðÆ4ØûíyçÜÍ´]ñQZ=Á{&u,øzíWVÕðær¶¦k</ÆYQ$L9ÅWgwj1 @ ß5Tøa]/ÁHÚ1.-ÓU¾nÝo± »PQ6ç?ð]¡Ä)O.µÊÙ +Î-å(F + 0pO]Heun´è&.ÞÞÃj5å3+Å|ïP¸t:(:97±Ý0Æ &ð®èÂA +ab4O^ᯩt÷Å^j [jÔÐ;Þ ÍZaii¹¨°:u[_,$ì<µJ«o==3 wµà OÀ/Ъ I $'C@Z É53FÕWÁT~Ï`Ò`kè;t©®ÑUcB°¾hI"HîSÈ( Á37\ eÆÕH3dÑ2%VƧ .Ïú,<Ö"«Ë,C /°VM bü}LMa$¢PÆ«Xdø9At0 ;5M¹ÅÅÖâæ+%oq4Î+0Ò¿£ôHk&g*ç&ÿÍÆµÂ(Ma<'gGÁiÞ2d!©©¹§ÏqGöÓ+ ܪö.åÓQ_Eµ7RV6 !J6Ne6ºi F7FÃ\RQ]Gµe,µþ,cÖujÀ8Ô¼¥?¦ +j=G×*A©¤*ðCh\p©RHQz)e¤ª²IÏ!>¬ÅऺNo[SunMõ¨nO¬ÛØ ¡aï:×ÓÕUù¡?'$¹DÅ+W¥t¶!DIÞgÊsj@Y!S +á<)Bw7"[§C}g)yî]I°ÆC¨¤SlñMZZsp!ÀBT<¥çeå$UĸËX %qñ«F Â·ÔÆMã}Õ<-ðáTµNÕZÀÂ@A +@6ðæC;6¥¥Ê\ Z-ON Åa·8ÂG_e¨}Å]GR¤1H"?`YµàÌô gñ«/[Q#pl.j(Ví£1k-uèzðeÙcWÆàM°_ +A$# �C¤HlÆn%c¼q#¨P +ÂGlÁ ËþÛú£gmÔu>HHýr9c¹Ñ"ëAHbµ#±nlóà{°cýØ>z×é¡ÂP* eKü0M`ÁUæ àr97áÀéRÛ,©ýX0Jøz¶©·ÚOËeÓ9ºE|ÃXe`GÜýÄl[ 3¢aɬåëÄÍ ÉÀmZûßSF¦ÉЩ[iz*MèoÜÁ7Nu¶~UÁþTÅ\}C¶6á»@zêRËAà\bò`ö$¶4gífãI©`À¤0PäÁ(¤î¼LÃ%@I +aP #0 )ç^JQ"Kb<CìA ±W aOB¢@¨ßFUrÁ,Iv¿§_Lîâ»Ójð&Æ?¡JÕδoòÙ])Á§på¹bPÏW`gÏ8¥¥¦RëêwèF)©ÅvÑÈù1îEp¯hbÂK9i-e´·¢]];æUsBBp ($!ãØ®¦qút÷ÝÍ*wzú5Ƽ1!J"·JU}6p¦-Øèo3ùãXE +ï(0ö$ ukÑL>Èß&ÔlR[G?'«éCHÞ¦¹Ãöx¹¬¿jÁ÷ 6%½ëÓe½d1HÐ1àÃëtE `( +endstream +endobj +553 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +555 0 obj +<< +/Length 2784 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéPI!PÈ ´b6 AhÜ\1LI¬Ð-Kƹ¸*rL!ËäRÁPN"H 2)2x4 °Øo;ÄÓ©°èi8¢IÐÊmÁ â,æeÅñÆL¡ä@u9MÆqÐÑ) $b ÖeÏMÙÍ1SE£«êÈâ)uÊýacÍl¢i¿@e ç!Ìàe1L&ÍvÀ@c7LZ#Þn9 %CU7w½ßãn»Mãr&ÓE¢Ô$"¦* +BH#iàjA@¦ë»#0Ò2²#CÊ! ÀôC;FéΨè94C;ÒLðÈ2à +:º=á«|§*îâ,¯%[¶îCpì><B ä0ãt5Êð££Ì[MFCËÜõ½ P¨ @Â81#HÆò/;¾Ù;ãÊò±tdÃ1̳<Ó5ÊÃA-1;¨;Ó®?N¹Ðôæ9Ï$þü,Hð¨¯ìì2½OcÜ73âù¾®"P¯,ëH¾&¢`¨$bx*¢rî+t 4ÂRÌ2Â0Ô0Þ6£lÕ*ÃÔÔBÓBó æ1VÛÎ Ò=Dró< +<ÜȲ;%>Î,äOè/®¥eÙ¢¸" +C +cÎË£¤*ÅÔ#M4<En[ÏMR¯ß5Ûé%¿õbØâ"®°ZaÀn^³¥Á+άT0¿0Ìé㸣2óMC|bÙ3ÃuºÊºTe4yq"Wà¸o¾)³ÆQÛ/£Ñ3Tè61ØAPctxÆ4;ðØÆ5ì#11AhÇ» u¬ú§k5Ô^e6µ Â|·â& (#¢x!÷°YÝűc 8ض4ãHÎ4L]1pÓc5Ò6²,kS@ͺ£}ï¬W7Ô®à7$<8#í±s!QÁ µc'å6).\®(!¨a ÔÙÑÖYðæ:ÐpæeÌçQÁ5?ÀȤw4驹&&`imí<'§n+Æk%_¨¡T;cPé¨Ë¦¨ÿ«\ÁÑYÓ«Ò/C!\&°@hA}êÙ?(XNFLÚ»6xÑÛ|,¾G_; �Ì¿Gì¦TÛù1p0·Ä³^¹BP ´±Èós©mæ½vßÐÄdm~+æ èßÔ1¯3½XÌßßnñ¸vN¿b_ á\'P¤pF !`¹Â: ó Ïâ?¥¦µPª°}»( ðp<æ3u2hF±ê&ÇÇÒ°²#h òSuh¡é§äÇ@ué×DðãÄE¤625V ëê9HC£TÔ\Ðhh°Â* +¯°$àÃßüBð.sCàQ8ä;èXÑ¥"Lá¹.Îö=<LdæNsòú÷ê~Yÿ(qì¸ û:d̲}÷`BBeäð¼è_¼a¦ZW¡9b©ô´PÒÙµ)s.ÃL½íKL6¯$ªûô~?̺3MLzj"tÕW£!Ï4ÏH7[7hh´¯Æ¶èÊQænº1<ã3¡6| 9öå§õ ®5Ws¹hj'uP~**êëýu66®*ø==¡#aV&XµhÈä£Z¥²^?ZgÊO +Nhj )ü«¨PµCö/p +jØÒ3*ð^sßgáÁS¡ËòóôyÛi2 p¦áø`q*_@.#EØó*q±X,¡Ãn-Ѭ¼x~I%¶ +Ϊ¨ At+ nR¾Æs ð¬ÂRYA2Ì[fùgEÝ+Ó ²>ÔX-9@a<( fçlª±-¼Ãfdc-y¡Í&< +ÛSªnå#Tn#-ü¶Wú°¢ eÑ¡i ¶ë cQ ¢@©¦, +v* ¨üÒã¢c[Lz¤²¢þiu Ô?ßÚ\-)e!^ð @Bμh([x A»7ÆU~öGJcª= M)(äºS¨ªô³&[S=¶9Ïö= �?º4-YuCÍ1&êÎyÔtÌAkÕæJ1¡¦ °ædö=sͪ 2tDóÃ=g¾²ÖöecUôOOf£ tvîµ\Ó}çI³&¿0½ÔIJoY 7D0bI ./D$þ.IIp0½ +0)âà õP ¥5¿(:3ÑÅ7¸³L +Ë/A5\¤Ä±"¤¦UÊP7`¸àMN9ZVÔŲ2HWHhßC8+ÇC A +6¤+³>``}R/Ä ý¸©} Óiæ +õþÃÝÀSY${¾õ§Ã w +uºwbºò¼Ûn¥Éà <Î8c¡Ö;R£:¼p[/À¦(í´óï3Z±!ä9ÊqP+ÊcAÎÑ{ cÕnWí´Ç»§`èÞ|õ0f^z]/,XXy6¬üïãâ^AÌUÁõäàÖúýHgrà +ü'nP'ãz¦¤¦h4]C(y¯r·@N{ï)î¨8#âeú àÞblÐNèâ @\f¢pâbùÃUÅAÏ8)Àdÿ.z ¥ÐcFñ®êþBVpäÉïÌJq@¦XLËÀ §&rå h �¶uÄÄ3àn +аK@Ép^ÍVÃÍ[ú`PÔÄH4f|íP®@ÄÝïÀÀ!à`OÒ8lí`Êí¬îàîOâì(a)xn---nga.xn---2ga.xn--(iq-95a6c1ddc9f7e poNò P&òÂQ,ð `:/Âñï>,'äéP>1WãyñQCqXê§ÞP Üí¦4 zâPPã¯êýCý :)±¢:"E¨úä.þàÜ ¸v ¦#®øþÌÿvÿÀäÈ𺹨Ü(ÎD|0ɶuÇ`Æ`òC£¶ÖäqÀ«oV0¼/Ð'eè½+ØeÚ0©à,¬1cÌcÐ?ëtGHhn +endstream +endobj +556 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +558 0 obj +<< +/Length 2660 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6'EÒ¡* ¡AhÄl.$bѸ¸b4Ñ Je7ÈE2ù R-NÇ5é ÂsDyÈÒz7`æc9ÍÓä.L¡ Ê ±YDò¡PM $ruÄÜdÑ(Àª¸º°8¡jÃUl'¬62þX¡ÍçNgCɰËpÃcÍÆó ês2ÌuûÂa®vþf?i3³¹¤É +J¨!PUsâ¼æi:o2³IØÊn=QÈÁ¥! `a r!mp[«ªSbcÊ0(®4³ãxî.àRÿ(â2 Àªxl¡I;\èÜ1¾+ÈN¸0Â6°Èä9 Ñ mSNÔ Á¸pÁ©£b2"ø"£pÎ'a°l¡@¨æ·Ã3äìxÞű¬zþÀ°oˤ4¸c°79!ºÆ¿Æ2L¡Îê´**ÒÈêkVÖ©a =´hõíóèû?Óù! Ð!Épp ÅÏD+Ã0Ü;Ä1ÇÄêXEbµ'=cÆ£tnöGQä} !nlÖèHJhk$iµlEQ +9:kÒ(Ì0£cî»ãElº¯ÃËv2®tØèÇìD¿8/Íå$9®èÉ? Ãcö1²Ìô8ó¬ïqZò¬"B¥âÞ² W!ЫQCIRef׫àT Ú +LØ+3RÂx®ó»;3Üû?ÚöÛiù9àO »ÐA2LÓC@´x&ÕYEQxÈQG/cu"Çï«îü¿v½1 ÔpÄ5ôAjõlR¨V50*Bu´e>UÔq^Ç£-Û`ÍN{b68odÉ-éQ ¥¯lÛví¾ïO5È9ÜÐÍÓ]Þ¸7xbýzºó}?7î¶X ï¿6 t-öÿ©¡£MIE${Á(bH´"²bÂvaÀP·8òîÇCxðÄ1]iâøþK&ʲøèÊìëÔÐ4TuBèn/hi^'ä âÃm)Ê¿.ß8°@pÎ+®9lµé¬µWñçhèE¥-s®ÊNã -óÃÜ|ªjjY«0õ2ÖUp1*¤t,ä( ¦lª¡´AäL¦Õr°E®E1fâÛ¢6k; e+î5ÆÀô#äÛÊípÞ1DïÚCÁBoÉî¿W¾ekâ|'$& Z3Ù%óóz¬¡2ê£,XPêbY£¯fÉæ4(ÖÎC¤ VÊ7(àñiAI5(Õ¼.SHõ;³PÛ£IR65NÙÕQÿ)Áµ¢¸fÅäÌ6V°á\£xxÑì`wí*#D ~»£zzÆcäâÞzRéqG0¹ÜÜtzÆþ\' äÒv©©Ò:eò¾Ì{®NÑí½·æò_Û rYÞÄ÷ÞÆXÙd2}ú¿t¨È É;@ܲi²jO@BÈxä¦TvfIÈ3§Hô¸uémYúÞ}8?ÁiÒ5©)VªsZ¼kH¨4Û¤ä)lT¶HA!_hÁ¹ÊÖïÕózsÌýÒ6ÂYq DÑi6{æ$uZ§ò`9)cÜ´Æs+¢§À`ñ3 +ðn7¯eð¾¦|DZSdäPvncâ£ô ÛÈ¿´C¨É<ÙClù^['±ÆðàÎÓã=?q7-JfÝ9¡Ò¿XW"h¤Já&èÓOTzHÊ&±KÚÚT°ªZW% +¬´Å·Yvã-iË{¯Æ8êxî +ÈYO¶0ÚãÑSfgUErÌ Ôt,-;«KÊjU×KWæÁƬ¶$4LðQ7K!f-²qÑ7|ûëÃ6 j Ï: Èû#âËåÇeæìH Çôð3yô(+%9*F¬UÕ)N÷õ4ßéÂ8HäÀ5ßeKÁ@W¤Ë\þAcÞ®lܶzBfU¥(´²zÊ +]%{lè½¹+ê®íIH \Ôc ÈÇà"âFÔY¦(!Pò]zÎ!dÙ +qø(H7¤Ï+ÎK ;ix @Á �bKÓÈ¦ì£ÆZR Gx4(5cµìWYBuò +jÄ¢± â¸UK!mmTÃS)¡*²p0KYL°cXrÝëé@¾²×§JÜ)ÜÌ^Ö±>CûP¸=IOî`Ç(ø¿OÆC0i7çðîªyÂ\øaK$ù:sØ N±¸½&Ã#½)¥<«Û»+\´¡\ß_¸¼(Ó§ä(C!\ðì_ÄhV(0dD®@v)[ýi¡vZçYkèA±JÊã`ÞîY¾ã,'´×é<'ÜtÌNÞpråø6]ôs\±CÈp3¯0Cü/!Óo`@YÁ9ÉÜE8r§o%±4 u-ÿy¤!2]tÖ¬0ãðg×Á@MBá»g_¨/pF2Iøa2A0 0A ¡,Xv6ÈÙOF¥;ä©Á;`ËbG:PêlØWdkHòoÄD ÝÀ;gò7y8î~C`aa®¶±'9kEÝ9T)÷>êÂEaQ,à.ÇÙ;,¹Y%²L5±I«ÈúUÉåm:¶ñ>|<ù_z»ôX8Çüë\©õ~µÜàUwâèîA|!\ØÂ9Akd¡OÀü7¢{ÃhpR_ÇÁVf ©|ñDàÿ@Â$êC ð8¤8ôîGÄÕO2ÜãЯBઠÚC æu*¢1ãàôàÉ ÍÀ8+¬±ÞÐÞVÐ?ÆNø&³C. ê±2½âøu �ê^ðjZåøj Üìì¤j0NM´ü"ý,ï ²ïôïxíkÒþðOªË¨./¤ò// o G$ùð[~ k¿Ð"pÏ6BoA"[Ϲ¯¾%h0°úïÎÃ\J¹Ïr÷cú*d÷ðÌøO ùϬÏH0EÈPjùúe£ Mè«"àûÏO +f+ìô@@Òàï1HÀÆ1ÐèÌ.Ñ9|Faà ` +endstream +endobj +559 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +561 0 obj +<< +/Length 2116 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ L§eÒ¡* B¡AhÄl.$Ѹ¸b4Y *rS)É$2y8A<*ãQAÊs4ÍÆ¥¼@a7 &3}äÈi9 ÉÉz¼ QüÂl7Ä#yà]ÅË 'c.$Êx:^bQSD£ªâêÀàAM«)U°P´a/µLà·o3]ï7»è¹¼7èL"1¤Ù0ïinæÃï9c 8Ïæo:xÎo<\)* AT¸`0¬×ELÏÃäÁ¥!P\Ù(¢Ú6ïºý ¸Ò21Oò#)(\ +@áÊHAÂH*?N@ ÚcÁo°`·@Sx$«Ð:E +DV¥A8!Qe·a Mñ.C{Â2m#2â/#ê: áà=-ñ@Zó`¶QkªQ¨P4èØ3=ïÕµz6¢´®'BÀ/(*,êjÔkjÞ¸®k¬¥1 #kÆ<#è¼î|L9ã0è±ô£FÒ±¬Â;+«@Ë¿ee5hhÖt×6Ðq³ ¿°, +22⼬2UcBèï@ØÃ³ë¨ÜÃÉcCV3£$Pú)8½Hñ±ï/ö0è½±ã`ónI£áXÌ5e3¼csÆÉ^5c°ÐTµOu¾ RPýU+²6^Ëþ¦×sëa@PM£lÜ]êúÃDÑbp+â+B sHsI.è»9k 5QS´øÝPÞ·#SUâål± _i´-4ÕËU׳óbÙÈóP=ÈXÂ1JO´<Iw2rý¹kí,`ÜäàÃV³ºbÝÃt´w-ÎÌÝ!âåãÃDxæ÷jLÓæ»Ð3v/BÐùp )QBH°$ ` +87N¬D 8<4ýöâñcuþèàrðøá3§È[Rm<2Ê:½X¾uÞ6ãN¢×Uå|Ím[®òÆõ¹òlÀ9IO<x`Ãáø®;¾½¾Õ©ZNÈï:}µ`MÀÆÃóÊÂCy0îí¬h_Óæ}Ì®`äÂÁ �A'%Ì]Û/¡ÑåÄÄÊ¢XËýe"C#ò~ °Ó3N¹Ùëì1¿Pò!#Ëf\, ^!mKÐ9ÐçÝX[ÌäO +K°b_áÔ¸4v±¢Xt~gt3îK¢V sE �gðæ×¥|9 · +á¬'á �1ýAçeb%jç,Ç$e³kL2DÝ Ê$s )¡< Ü&x¥úhJmÿU<ÙIá´ÕU_°0ïbFWj\´¬z®i±LfÒ Â¶jË3,UvVTåmIÑÇͦµ[¢Z[kt:ø|àÚS®%ů7½ò`_Kð6/æòäÍ#3,°¸6»6nÍZeÌÖ2v<cÉîUµé\°YP_ +a$& .ìùK/)Ñ&ôÈTsºa0µEcUb +µ©²×¦ÚÁ¢ÉQs³5O-1híZÏã~p^Àc/ ÜÐÂÐæ²â;)X»Ä¡QÃuµ þÌ!8õ6P¼·¬k7wø%)2fTظhj£á ç¬9¼äôc×3!\& ðad >0ÂÃ(.:r©éQç3H1a +á $ EÍBhE'Ø«ÚV¥ZÌI¦øÆ¤ÐîpÏ!²ÖоÀZ sÔɾpÖÞTrú«÷ EkçY/UèEo{ë.¶hÙÆDìú!µX¢nW_´v"ºé +-ÌöØ)vÇRÏaÎ9ñÞªÇç]+°b¸× ô4«{1û1s]èÝö¿7*!(¼à¢]XòêâûVfÍØrk"-FL@jÁ®g$là¨I±/HÖò»ÎNB0)Ä ÷P à2 Ñ@R¤BHA²a³°@|R +aP,¨§HX ¬¸BJV$ÈT±5Â8ØÝÔÙËAk¬^Ñ´ç8¹X *=@( 5³XHòFÆ'Ý ÈÂ(9ùë- T PUBNUÂÙ¤÷ÕóÒ*Ä +3b}"ɪúg ¡, �x/!R/¸½^C<CÏX>ÚRkS#&.hÜbâºWôQ¦) ÈìÐPC)x¡ÍkUçÒ&ÈÁª ÒUBÂBxDÉAÔZ Z v˧Ô{FÊ@ÒcëÔ¨f)y@ ÈcíN=íkkÞJ¡vð_eÁ$"(òa=dìíÈ +ÃÊæ¡¶7ÀMá'ZikÁB-}-öZÌ*ºoí»ÄËþçk +$«w§¯Q*Íq^ß"ÏóJ^Y¿vÝ,!L, =Á¸c¤*@n¹K¸uâÛ|syQ¾Þ +¤ +endstream +endobj +562 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +564 0 obj +<< +/Length 86 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢6N¥BT@@ +endstream +endobj +565 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F6 7 0 R +>> +>> +endobj +567 0 obj +<< +/Length 1824 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$ÄéñÀÐ\5 ÆP¤0$ I ([`,spTä) + Æã(¦|xÅ4Z=|\3 FBá¥(¨Dxk( a1ç1IPÕaãQ â/تp("NyLðj(8Oâ ¤`(ÖuæùàÎå{£RÒHT2EhFp\8¥ ¶0âÙeÁAPÐi973-àɪֵBÔàp7S ÛÉÅÙ\¼¥8ªj¦¨¡)#êÁpä:Í<Ó-¡BôÛn§ÛHd¢ B(¾$"p&®ú£a=F@³i lµÁ¸¯-¤²§+ÓgǰÈfò7 ãæðEΦ8è¼æ!!fÂFáÀlçÁ«:^ì&h P; ãKê"D1KÅ1X.Ð0A Ê'#hÊ.!Ûøá@ÂÆnTkFñÌn ¹ð|°Èm< +£a&5-Xä4 Ò7Ò«ý+¸ÀT¹-Á¾ªÃÃ+Ó2Òì±!d4óEDÑDUJÜ<6>:o¥£i}·¼ã0Òº[á@Â'Á ÛÂ: ÝDÞ#17µqÞWá>_ûY ÑZ±h°å0îºÆÆÐ CQUYáêh[¦)#3+D´M·5<o«Àñ(hÄ4ÞØÜ2 +öËR + KÒª)Lªð0dñû3°»TýOC(è:Cs(¾JÚmW½u0:s<ëØPP'Vö>¤ìZ#£FÑÆ0¡» µÁÕ#QÉ¥NÄ$9kîA é¿»§!IÆÑ¦½ba£©«º©ÈèØkà ò9 ºÈÌ+Ê9£pÆÕaÅ[¹RæÎjö2åkQ8Ù¥"¤{ÿºª´ /º¡ `Ó°lÎjp¤,TÌ6ÔCÑ9ÙÓ·³°tÇM¼ÓLZ¦k}H¤srLIÉA)%GðA¡MyM³9R<Áº_Îh¯¹Ç¦üÖjuE<1¼ê/iH«VìþÔè$Ìb´ùp ö¡¥PzZUêÆ¼gGÎ[W`¤²þÓ3Ñs ¡c²ØNVRr/]r³5¬ +ÂÚëur®Æ¼búç'¤ýu¨%ܼ^¡ {¯@¾ÔQì_ì4°0ÜÁAL%ßÃ$bd¡¦v.¡3PëñíA1"1AL©Í²è¬ÌØ fk´³fqÙÛ=t ÑÂõ,éßè0A`ÙÀ$¢ !>#Zµ´×óÅÍ-<Ê_Pr)!ÞÜeYþ ¨ £Ãx¦7*Ä#'_ 1vÅ_`Çl +ĵȼ¦5Ï7&4¬Õïñ½ÒP§æô:¨TÁ»8â±wéÞ;çð$Eq!åAb0GAt´z:EªýQd,{Ý£wÀÉóȰÈ÷´¹ûCàÍ%t(¾ !&@Nð(¨ø)¡@®oÅMnù)LÝHT #¥øDJ)Ns¶:à¡ye �i\kÐ#Sº{OÂ0S¡Q<'¤øtAÔ1µ· +A` ®ÉôVz¢pt *1GOwD¤ªR]MÞ¸ fûNÑTȬ&êµ .IJÈëæeþIô#[iå>ÕÆ¹®W^£èv=q;FÈ Å<Qü2Øw½Ärfk)pArhs¯Uò¿3â¤OD) ¨ +¤é¯5î¾µÉ&ǬtFRICyMNÑ|v¸Ç ÊÀu_Kòëiv¯eÝ×}0 ¤3a¤)Ñ#J÷4eªX`Ëb,T¾3 òi²Å hm¥_[øO×õÿ|`8òïEÊÇÑ|«&FUQdòlÐS¹spýÏ+ÒéµäܼnV5=nö¼ £cátú©s]½¾óéb2êªùy¥õ~4JÑ9(;SLÊ5Õ¿¸'âÜvµp<{`G×$b £\È! +endstream +endobj +568 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +571 0 obj +<< +/Length 1835 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8#FâpÌ\4c r9ÎG1M#HáPÈuv£ÃlU± ¢áIPÕF#R0tºÂ¡éjjÅ@l9ÖLe7ZmvØåÆçu!ÞNg1iHÊfF)ÈÊn1oí + êhF(] Æâá"¿-Éå`|Îo;ÀhºôÉhc#Ó¤{1· ôk"Ì´3àP¸«p!:IØr +ÉÛ0§ièØ@êäbú¢ S©Í2ª««! úÂÛ,Ãt¶pbß.@¦<Ãxà9.HÀ:Ì îDòc¼ð+rFóÆl¦ËBȨ"8Ë +ÃØ:¢àP" +âx¤"!L3Êo{@ùIQ3íµqb 1ÈdÚ=¤-QÃÉ.¢#¤1CHà: ,ÌF¿ ÒJ&;Rs¡º6<Ìo¹IjÜ +@Ê £ 7pè:Cpæ! è4#¥j2pæçÝW#pèçÈ ò ã0@1NA ×8ÈîsÛLÓp.!ÞWó]{¯º|ä¡@© F2ÒéUûô28P8#Â6ËîmìÏ4 +j%PA¨f¨|ªdq¨^SÉ;IúxO$ë2Neww^¤W`Óc^UõWã@ßeÜv©¡ÚöÍ·nÛ÷äãHØ6[u}m\3C#9>9K>Dñ3Y¡¢6ÆLiÀmÈRëly8Õ½s#SÍ%°ÔëOcR¦¶û°gú5»aض=éYu]¦ÚuÖ¡l[Wm_ªÜW%{¢ß3&Æø(üô©m\ÿ(µ©%C¬û³wÁz»¯+Þ´nÂ$¨ÓÎúF(ÞÝÛdïVVÌ3]\ï×mÚ©Ù¢>Jm«MÜ-NòÑC¥¸3~¹nkèð¯Ny?î¶qÖâK*=U:×}Iø?OtEP +§@ô fÛ²Ká +Ô.ÁØ-C¨}~¢u +cÙvm?=ÐbT3ÐnOÝÃúà²=Gé!¤W¦_» $]'¼³&Kc'Jç,¥´»ÙreLé¥5¦ÔßW¢ulùºóRìal)ÇÞ#FêÈâ*5G©&¥Ct?pPüâ +±ýíÅS(ȪÝÊUà¥+f±Ûòº\®¥W¹EsºËZNih4ç<µ+]A¹o.K'éÎ\ë¤2®·Do^IÕÁ2é°°bÃH[8I±V.ÆZ¼Ìz²FÍØt=lµ£Ì%4A£6.43Â|W+AM+)XÒSLZ.ujµµ)|jÍa5ÀÄ×û`a'I +¢ü,v ÌÔTÊw%¥¼ÐfÞÙdñoñÊg¸C³Îìx$< P$ãÛühë bHõ²Í³Ïµ)Ñ'#WtÓvo½fËâò(Hµ¸A»¥à§êñu;oèÆZÿÏKzº-°UÒ*{d«Àøg¡¬i®øà'ÚqÎKñ9Ç@éPÈCãµ`ȶoR`K¥Ñq<R¥!¢héð �¡h2ÄFWÇ`1Wq$)ü@ +´·-ʹð,%¤¸¥hé4&¤Ù3Yµ=Uúí[Iªì©ò²®JjAI)E- +-A´;¿¸^lM2¨è²xN$°VEæD9 +4äèë¤N9Æ&¢R}~/åz½åèk±n¯yR¼×ª÷í{°4 ,IíaQ\2V!/£cN`ÔÙ|æ3$FN2ȯ3jm $*dúBæ³> É¡4Dß7ÚÄá¤w¾s.kæÕÚË[k·\Ï:çS©ø¦UJrl,³s³ à«Ðxrß(Rº¬Ö´]JÔc0*äví@*1"ì£VH^µ{g47Ê´ÕÊê>?ͨB¼íAÁã©ÆâU«OÅ>ÊwK*¼Vàuµ®¹3 +endstream +endobj +572 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +574 0 obj +<< +/Length 1741 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ D²éP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NH⸠]^ÏC8Ð r7ÎbÒÍ<SÜc2Å4Z<$ C!Õø¦V-§ÅÑá½VÁb²@ o7E¡ªF¥di£%N$æ¡´ßJ°Ë9àPGÕG½Èg»0A&x9°Afy>*vÅ\] U¨åj +½fH6 Û¹/if´t:8\ÞÒãpn!A +c&¶Ìº³Hðl@jÓ걥¨#²,(@$ "P"@®'B @'£hÄÂHvÖ5Ìsc )ÏcÕªÁ°CÏq&3ï³ðã-kh]Nrê"1#ä4 ÒÔ<¬j ²@T- +²Ë6ÐÂ9¿m"\¼J:1l^0£ ê9 Ã@: (@;#`ëE ã5D@ÒãÈÂò:RÂFqFÑárJä0£-@9^§©sHf#d4q0³4)¬Ðd²¢¥,ó¸dÈ¿ÉÈAKQpË2 hgÚ!Ã#g¿Qíh?Á@î4/4U,3Å5NSÕOo¸Ò6 í@ÐmHÈÕµ|4½ ++ÉOt>A£Ð*ÁFµ)ô®rÐd/´ <Ö=r¦Íl´Û9*íì86Ká45E[´xAHÒw°Ó|_TÝi~Ô6ÍI[CUc)9{Ï#6ؤ¸Ô (Ä +¦ÿʰ7-;(ä¼YdÌÇêÓS)6"ór®¾s¥Ý´ÍF§È[)¬ÈÚÛq969±cðí²ð½/ó �@2~5½4[P& ñtSª6k· Ò>PâZ;#ås é³ÃªëÆIã'ºyC¾$ðO Ñô¾ÀоünÊùÀÁpo¥3óÛeºæw7ç3®ùmÅbM·¥Qì~ੲjïQ¸V, 53n))=äøÈ-.im.¥ôÂÃsçn ¹!GÖfh44D½#øïM +¸&È?FÊÚ*ÿhM©V¾TËJiê¢*7òÔ!ªUj)Vªõb¬Õ¬ `²"ÊY3еÄ>[oIqà¹Ð"ê!k±ùBö + +^kÖ4r§¤q`, £µ nÁ6±^³Äí±ØÈ{%EѳÆW¢Ä"P}º f×S£|ÊǨh¥¼8_jÑúJuÃea¤3!ú¦,1 ÀàäAézñBâY`rVtÎEµ6Ç8Ë ãY» �I#+¡î»ÖA2c.åä½Òþñ\Á 0æ&L><èc¢@âDéBï]XOq*BwfU©ó)@ÈÜÀ·w£¿ iâüOAAᤧéL Ë0±s+Ènv69Þ[x1|H! Éú&ê -296ÏÝO¹:Ê_ÔUGúBN8 KÏlç# �qÈ¥ÀæbL>h$I¥5jé+Ä^c%ÞhJÂ{'59?h +!|¤¯ÌØ8àÔhÀÞÚJüSí5mD wÁEV +ÉNA¨y÷k9aU åÛZ(Qq$ã^üamEoFEÆ[Á¹2x±¥u®ÚZ BñaÍEXë!Ú]1í0hþÊTáp0r$aV I^#³±Nä È&eKÖÊ[ªÓt)¼ÀCèüeäÖS)+cìÉ_Ò¸K e-%°d¶qéKæ!9.µYCÆÐqWéµb" IY¦iü½þõPØ®Íòo·ùzìn¦kLX <EX¤+3ÉÉÏW->ússö áÊàèáq=PYS0E `( +endstream +endobj +575 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +577 0 obj +<< +/Length 2076 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7Î¥BT8Âá ¡'¦ctoKFIÜPGáÂv1 a¼Æk"NMLªVâ±æ¸3" +>FTá¥p©3N,{Ég´å +gq¼às4î´J1G +C¢+ÜZ9ÅÕÄaÈÏÄqc£ ($IÄBaAm·ÜneÁATÜu9L ÁHìRT5ii]÷{¨_ªXØn4ÁR1¬mw#_å,±`i"Nf3¤à: #xÜÑ®è3N¥5Hº5ÐcbÁª°ìJNÈ7lj Ð2hÂþ á Ø· c@:Cá �!¢3±j4Á®ì©Ølkب" Ò\Þ½ÐÊc ½ñèÚ7CÈ@0à AÝ.â|³A@Ñ.dA4¢v |ç3 ªhP4t» ÐPRTÅIì<0,rlC±hà0Cz:£ì4«êÔL +2¤ô;vI,|8ç:ÒÀõl6U,S·ÊÒ@ ÑéÀ@Ðìå@AhhÔ"¹<¬ÃQS=ÁEZ2Õz +#;pBðïÁnòôÀ6íd½P³T²R¾apfû,BË0S XSê\Á\ÙP³Úõ±R\¨Ê@3EqlEWñPæ:cô9èØWñ¬Á1L×.ÍÑ\KD:ÞéFÑÄt2Çôý á±9D¶ b°çcXäù/Þy¬*U¼\à¸NPÃØ:Äpª& 9kÛ5¼®[¯ÀÁ¡ÅÙ`Øit+ËØËP"Æ2ÃEb@×ÌÖ"\¤hèow!NhÐËH>õm¯[¿±«¨h·ct¾,¾Ì gámä3,á QLÆyõïkÖ7Öý~o×ódu3D7`QÄÜ]Ç; +¾$jªêÉ +½uÔ±,ìµx®'B'_¯¼NÄò+»Ð+=æÎ2lª©ëO,ÈPͳ¬ûC×ï>(}µ½¬¡oÍ¥h½·ºqÞÓÜ0"@`pu ¡LC¬ÖÞ"Ú|Io¾H Þ 3ô»bFÚÔ»WÞ [ LcëÕ4ö¢ÔÑ pZ"8D¤¶ l +j Iª'ä<RñIáe<þ"T-C»ø%ev$Û dT1Z +(0 zO9,å®,½×^ArÀf ÒêQWr#µ@@Ã@o:(7Äè¡¢¤DÜ4ÀØ £D^jFVºwO/ðxµ`rôSl=íº.÷âåÁBòmÜÒ;dìßì5à̲;VÂdÖ-Ä«ÑlMáÊ(©¨©xs1ÌYd òƧËãã\& êmåQ¸ËòÄÝÀr¿¨fó*NXªÃ§ªÀxPalNùc<\w Ôª®W4ôì&týÑ:@æé+¨O.©Öç]#ûÐ×̰bE¥Â§@$+§{Ç*$ª5ÇGSL]@äÊWã"A@M)Ð f +X)©¦ A +>©,IàxhÊá@Þ¢ÂåÜ%yæ^?38g_ÐB5£j{¥ + [C +aP) TõYßi0`ɱÔEHms©Å ûÂôò üv*RhQqcì¬U#"ä~ÚAH +`3Å"äÃh Ìâè£ÎC²3HIå4ÅDá;.Úz÷ 4Æ,¼ã$0ëho[#˼kFÌÙ¸äãÕQVËÑv¡R¢¾XͲ`@«d83p`Ü$³£d¾wøLÉ&¤$ÅÚ?¹$ ¬U2lE¦¨²¶z£ýã)ëÜÕ5ÓMϺ8á8¦´~¢¬L5º%re%äÔ©ZiþbÖµ|ïÚN7èÝX|%",¯kebÁµk¿$¼%NÉ<iá(¹©=L6ÔD ÍG¨ÒéZ]lÕ½@ÑzÑW1#ç}ÃOPºêjînSJ"[JcmèI²)!dÚe£xòLªhä8üB¦±& FMc«Â^ºwBj]{²e r-Ê1¤½ÔåsévÞ²'í¬íÖié¦M5¡E4ÏbhoÂ{(Ö+äªÕá»)¯ÃpfKD1@Àv 1E/$´ÓòNÃ-{GZWé¡Ån¸.§<²)¬¤²jºwRêÑ.?VÒõª A_Í0ÒßÈ|9Qܦ9MÐå`¥uçÌChN¼üÍkR +endstream +endobj +578 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +580 0 obj +<< +/Length 2201 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ §eÒ¡* BapÐPÆIÓQ¸qI¡I0(a/&©ÉR8#9àÄp4 + ¤]PEÅqP¤E)ÏyT¤C¼Q(ÔØØÂ=PãcÃXxÖH7G$²ìuÇeí6»U¶ß¢)MÆóÌÒsâ¨äi$*D¢´ c¤ 5[~n½/m¬ba@S¿.d²-òýÂáÈ¥ÁA\R"å#)ÌÞu9̤!pR; [:NÚ¿°nê9*VH᢬¤«àhÏ'BÌÑ-J¨dÓòcÒ8HÞ76*+fÚ©mÂ.È7¬ªà²s,ã%¾jÚn².K£ª¾¯â²Ää7½Cæ2 �äò¼ïHÊ.RìØ.! #(å# Ò,:=pç+°Ý#I øÌ7Ch@: Ò;#`Ø-¡P1M£,Û>ªpP:Ì2ðæ: ã|>ÏãÍ CNd¯*Ô6Â"ÅîJf-kf"(JMaBÉRcÐõ£hÂ7#8Ê6Ë3HÍDpÌ69 Á !ÎcC^VШß5Qc(Ã"ã4z0ÈCHÜ3Òsõ+v Åyx\· +±b TÅÎCmS [ÍY³¿ à·ßTÕr´6ðAIµ¥m\WUäµI!E~7X6 Ѹèà0C x:KÓå.7êSnjú®ÝóTK<uö>/ +ÚfÊ`jªgÕýQçáMÊÓ=ß+×£L¹áY=ñOÆ!pfôÊ6·S¬à`hTÂm¡â&X,} <²Èi/¦?sôÈ¿1LVxe+±xhë }íPÐòLͳéqoÄÌM¨*aÂ-ºrºÄ_¡xMPÖì>PÓË3 4¦OÞOÛÌVaáD¨ìÖÅ.Ë÷TMó³;fPð*¹ÊªSõÎm¬<O[âxPIêDKFÈ£% Õ^CCå-µâ·W*í^º@Z÷R¢SMÀ µUBÝ[d+ Â'}Aü2$Éâ¦]s ÕÍ4Nç¸rGïÉÒgLSA»D¦ý7.U±n¤¡E*Ó¢·znùÑ �5=Ul°ZÛoáÙ°?WîðÝÐo(¤8s~`ÙüqÄË &vYús()ý¹Àj CGé@Ì[L^K)´È0¡uPÑÖS2ãVh#S¨s\+K>¨¦óvT¢Dâ¶åOÌ$ µD \Nv¡0'âÌ¥àã1®Q¹¬F,Ñ cA©5f´×ÈX^Ô"ò0 v¤âk îxw +Ñ"%DÉÊx@iá¢uÄ{äÌeòæ4¸Ø< +ÓPraÖäÈBaÍ +¡x±3£47,àJ3ðT£-hgNYËPÄÃ+¡LÏNnóÃç±â )Ñl°Pæ(cyé-©æSñL ÉÓN:ô¢%,Iò¤Û7~5AàfAjð9g7Bb -î~»ú!!è3¢°Kú36 ¤³~¢0TñK}/¦4Í"Ó`ÑP)Ò·H´ø;×cPçaåp^NT³÷?Q$`ÖRZ2X!]Jê´ @E IÀØ39 '+ ÎP$Y6Â|Q)¬0Ò +E¬LÑA¥ø¦"ªpëM®£ÔÄ^¥°oX95¬3qRðY!*íU´";ÙxóÃ}±ýBÈÈ-_´©ÔÍ:ÆÅR8ÒI º9& µÇrx¨ÆÃRA7¬¤v`8©TY¥`1º¥¸¸Iie&%Ä©!$S6.زSµ4ùu¦Iª5ºÎ½¨]Do$2´N° +ÑzæÓuØ7¥p@ +¯xPñ0Ê)S»p2C¸ø_õapU¹py(áhCh,t îJ !D,âtøiê*Íú´ðîV&î1Ä`5uÑ<ÁjIÍAÃ¥¦bðWq¿=f¥Þ¯jpRK20$Ï\©c¸YÃ9hègcI¥!ã n+Ò`HÁB¸H¾+àÄ Hz¹r !X®Ýs²Ö_ò0Ffµµ@rÏóDÆÚ['Íc3ÀRmað7eû©5¾gyTÃD¥Ö¼ðôÒß§ VðÙ^®¤:Â2k">È}Ìõðµ|U²B¨û �Wâ¤(/i Lö{(P¥ÇBhhÚpsjsx �!( �úÑâ+Í pªo@QZs¢êfoçõw ´ÞHW#Ô®.àñkª$^Çî10ÖGj¢ÍB¾Bñ%Ë®¬ùKTö3Cµ6ÕëÚË\mö¶L(Ûw¢¢²ÒCvö-ÅÖùØ,aç"äsúÄÍéÐæ],¦¦Dz ñò?H ëÂâØ¤åæq)D +endstream +endobj +581 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +583 0 obj +<< +/Length 2408 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7Î¥BT8Âá ¡'¦ct*IAC pÒe7Å#@¸b6GA A%ØÅRa@R1%" 4SC¢Ó* +õ>¯ÆÂëXo/ªÉ%¸JñRf +Xö[=ÓkÍÏ&ãyÀæi9ßèb4D"QAZ9®PaÈÏk-]owѼt(rÉ¥ÁA\R"äÃyܬa6L¢Á[±Ú$LæÿÊ\Å%CV²¯¥Þ+»J"¤Å±¡°n1B²É«.Ì ,ÚÌÅLøhÍ(æ1CHà: #xÜÕ0(3\¥6(»Û6ÊF¨xjã8.`ײîf¡i³0·.¤C(è:Cpæ)ÚzÏÄ ã0@:#Ê9Kàí # Ñ)¸ç+cHÌ4£ @4=C@Z7C Ê9ItÔ6;³|ã9HdêºîÌüI¯pæD PZª-Mxɸªú¶³-QË*L! ËÂØLZ¦¶¥I¸£í»¯kÅQ5QábÕé<j³ubj°O¡Û1³,ÏY!Q/Jë½¥<óÔå:P²|£0JòËn¡rLÓtí>:T,YS? dѵm3.ïK×[µÅI])ajتÞa³rá_·KAEgM=©5ͶÔùrJ7qKw%ú>Õ;òÿ0ÏÓÿ·íØb¿p=`_KÄÁápg , "HÔND*ÙE!stFar4ÉX cI/Rd+Ûò¤,:2Ô¹/\/3MTØõãÓ Ã;ÆÚòÐ:Õ Ôj>Á?yküÅf!¨piÑÇyÛ8Åæ9SSwh÷DúcqÂîhÅj'Ú¤½·É"îÏÈÒJ(A9ò3 Ò7ÓÚ0Ãð@ÔS\ì4ÎSPÄ<ì½Ü07ïO-0§¡1¡¨h¸DA¼Z9 3b"9an3-! Q9£pÇhÑ÷Ì6G6ݶ.jFXPòå`Méçç¤HÊD¨³c &pðgËð5/@¥i&]E +aT&FôÛñûp5ë BDèJëÛq/t³3@bøA¢4Ô?ZüÚc"ïÜB4Ó³VFm`&BG Nj=°C¨yÊ´;ÍlòEÐXð>L¡RtHß|)eð¬¯H¢A9Xp PºChu¹Gäå£Kh¨3 ËU±Éø§Â£ªHi#Z×U\1:*¶4¾ÆÛ:ÏmLu8-´ú¢ÖoME¥k§J¨eB<ò±B5µÑ *Ra¬¢°BJë¥O*é +rÈ@ì¤ôZ`!Ex¯¦{8êMe dtN2dmA·)^·Û!l²>N²eÏ0ÔäÅ]?Lö¼Ê¨0Wä-{G¿ñìksQ½°b¸K^ª¸#V(ŧÏcJeµ¦éÏ%çS#AL̪!CÒoè �ФE³UËÄêæ¤"7@ R%?àFìKnHt»'ÔÌ¡m,q¶QyTÜer{NyrKxÉ#=!?°ª jÍl+®!3ÈêãTYk,È9(}M$ µ§pGõÝXt ÓQ% 1î¼7»øìëk¶wéÞGÇ~ÃÂx¤<w^[Íîz¸ÌI¾Eô¦G8(÷ëJ7¾GÌ_B}O±÷? +g57uкQX¼ÛðÍUA*t!"Q´Îv!"òsèE'o¨», PÉÚÒ !:9K:ôãaE ¹ÚJW Qµ&ÑSNäÍ[õÅûH@dIrâ θ@ wa¾RÆ*=ge"³æ6RÌá½¥,7À¡æ +#ÂCNö>ßÿ~é´6÷øÈ\èáæÙÃ&P`¬y VlãMX=º²n,,¿' Ê`©/9 +'nï O°-Uò¥Ëë±#¨7o)Êh(I3Ö²'Bìü¡§#Âj¯Ü±¾,ó9`0lkæù>aÐ9PÇ$×,ïªfyKFTÌ>^g=h C¸XG ÊZ ZtØÐ³iat±ÑÚ}suªâÃ@o¡²Uç aÍìl<ÜÓv`Ó*låm½ (ƦÔÀU2U#µ¥ÚîÏún(ÈÝ6Q¼9.ʼÿM ð9#Uº&+&3f×:í5ký°ÔÈyØÛ·5ÉËò}Qxx¬]ªÓÂÆµD©òAuÁ¦`Ð ¡ÎÊe¸² r#àÛ®¹ Sï0sßË©-©özîB´º¦Þ«ãu1PØ'mÔñß#=>°T:ë Á6@]ÓþO°½`rþFö8dà©7³6»1>äÚÿòµ¨Ñ¶( +³<q"i0cH¶RË1¹Ï!è$+UP°sæ¡(ZÓ¨|:Z¨ÖölàÌ_v,wû(§ÜÿH"ªSïPûäJ^7U³hͤ.(Fô¡èÕ¸×Wxk4´w]<GYÛ?µ-ÕÓ,] 1 ¹ÆM4Ý×Ëî¢_{o`|Æ,/zHΧlùɤ¶yä<LÝÐÖ=>ïo~«Bmë´zD^7Ü5íÙÊé¸ ÃÞÿ½j¿BùP¿æ7@pf^ôvGN ÇRûK` çdvàógrGvóG² Þxg²§co°³@ ` +endstream +endobj +584 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +586 0 obj +<< +/Length 2076 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(cG¢q:|¾<5dqÚ!*IC +´x©4NH⸠\1³ËÒÚC9Îg1iHÊfº SÜc2Å4Z8*-1ðÌ]ÕF«ÖÐ((É$â ¤¨jd8LkRÒvrÅd¨ÌçXâÜ1ÝA Ú)Ê")ãFÔÔ*Y®æ±r Ô,í˺´ï-øxÇ vÏ&ãyÀæiÅc)i$*¯äb¿~Z<.Át ä9°Â6£(X +c(Æ7Ã$-¢àR´ÍB +#)O²êºj£¤:êÐ@KlÛ%ÊÌ´-OÞO:Ú"1#ä4 Ó9ìjú©Â.Ö2oë/²¡rG,oÈânð@Ê90ÉC|ØÕøÚ8,(ç9Íà ï9M¡@íÃ3ØÃ(è:Ctö:MA � @7Á!5ÏÓarHÓ¡?BÌÖ9ðÒ3 #(ÈAÔÕ(¥aj6¸>Â$ <CÚ2$÷¾jzûA¤¡IE|ïìÏÂ0+B¶DW*Ytr²"¥¦Ü "ϲ¨\ÎÕ4EqÙQsRì Í·7XôÃÑEn[Ò¦¨àlZH [tZñèd&ÍØ\-³àQ4ÓÍ[=Óµ9?ÔÖå DStÖ=5ä9MF Ù,I6>@R:Ú¸-§¥á(´7ÍÜÝãHØ6èâÛµÓ^ahh WKxq^À³+vËQ! ØrXÇåUhA³æ#×</u59e0dã´ï[*©ÑYFË\¬ÀÜäñ'Ò¼ó·ËõF¾. ¿ÊÌöËJ¸k³|;ÁÒ4åJT½3Ôµ;ZOy}YoRÌoª³ôÊwQ«\«Ñ³»ÄqMÚׯ¸¿ £ó Þx5ìÇ?2Ãù.ªáv°6ýMõ4 TÑ6&aC0ÛÙKü çÖpÌ7Pdv ÃoèÍß#EÒG9ß_ɶ¸âæ®w/%ì¾ó`Ì)1/Dú;&õãØl¯8cºÏ³Å_áµ0TYMYÔwæÔ¥@j³Êê6îê #|Gç8§äxróGR8(V˪(øðABÜF='¬ö÷*¡+ÓæE, h._. tÐBe +"7Ò +!ÈÃfö³"2w±Xâ¶ ûÆHQF$ÒRL~ñE½&ùÜÙs ,!oL 4)ì^[XoNê©G²G\ÉÕ²QÐ6æ¥j¤ÌQ1Å50Õ©0 V*å`Ü©tOªÝ @T¯ÓË^X¨M67èBÎakD ®vzÄWü|[h.¸Âäa«Qt¦"^»ZÚðPêÎ/VøFÁÌsk¢H¯ô:äÒyf0ºÃ'+bÙt±EÞ[Á?P3:2¶@êædËÅYºÆVê º} y³v¯<¨ +ú4)ò ++Gi-,ÁÓÆ ÍZTWm^Ó9ÐJ8(k« °3ÆÙCKgiuµ6ÆÛÃq¤ÒW@PßÑ\Eíú*H³±)!ñùxeZ$%ËrLÂ39Üæ]Üm?ÒG¸Ö]"kt΢:ɪåra¹ÚHhY$QÖÀ̪ :ÖTkkå<·óë«OV6=zöFJò9獵Âa±O×>¤äßkï~Åù¿PÃ&ßËû ïõÿ«8 �OK\\ºÁ¢ô_ñWFÂchhaMJÓ%²»@+ý27j: ÃBá½Ì%R1_b$C*3¡ ¾y À3ÀÁ<#(<o0*`È¥d.qWÏhËÙAbñWqõÃÜ|!%wz^ÒÂöp.þ²ëYÑ p Á)\*xv ïø ¡ÐIDÈ¢üV#¢î ]fFÀÄâéâ»Dm"ÁÑ%äÊMIòqË^ñ +%*'l¹_&¿Á1æcc¼{à"q±I,2g^ÊCdêi~Ò§EpÓ"mª-1´ÙXsmfP?cÀ2àÌ鯹èºþGAnv»,µ¡Î¦Íò¥2&cvþYNÕf¨à£. CUWÄ4 YNAzMzAËçU¡$ÌÙ!Ô6\dÖ¢³æ~ÛÜÌ0à i0»8²ñð;ËÎEó9LS $¡2¿*txÖûÛ9ýHìÍ ³ô= R:;H?(a6åùû~*Öpr\^å³;£<Öósô½¦OïÙØ82Ù®Õ¯ûZ¥1¶TªÚ¶+onxË©Aõûf;ÿô +endstream +endobj +587 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +590 0 obj +<< +/Length 2267 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7'EÒ¡* BapÐPÄc. Äâtêf6(#xÌBT + Rf +Å#q@¸eOÎÆ5«aäo9Å¥#)ä4NFSqÊsÑ(ÐR4W¢8´ sc®õJýOgȤÂ)¨O)È¡ªF¤ãéJ#Óächøº5$û=¤R9¶W!ÀÏPíHÌQ¤*¤qXÄÑ`NN§OòÕë4°ØeY¤Ø8#K/Qj¶[½ã`ÒØ)#pÞ8cKÅ5ìrÈ¢í³*2ás2?ÈâFù,Ipa´&5#ì;B!@,»Aø2 +ÃØ:¡`AÆ";ÂF±¼sÆ,w!H1À¸mc\Æ60Zô*,È ½JÐ@÷#hë¸OªnûnKÞå «ü8Æ9 #è4ãsÂÅ ÐS Aðs%Âaf·Kë`8 + ¦Ë@QE,T!xÊ08@0l2ÈZÁÀÒ;±VcÊ1#0ÒÁ2î6 ÑTÕµ}cY2GC<~7GCÝ`®AP1HAT5QiM6pÒ7S#t +:3ºU4 Ë"8!¨sF @íG:0¯#-: õÍv £Þ7 È]÷OCÛPVs_E¶Oo A&*]ʳ]±2áLdô¦PaÈb!x«>à³)¬Çi9ê:6ÝäèÙÕÕS`ËT ¤7Öì[ví¾<#4Øx©8.LWJAjÞß9Êsd®ac ò¥Oa¢²¦)>L%¡`øÑ©Å+æ6õõTçYàA %v>n0>¥é¸ol & V«¡Xh¡pgDby45²4xfíl¶)r;b¢Î±¶fÍ[íåËðq ¡Ü®bW&ÁØAm Ðl©=h¼HÓpqp.¢w næì+éîÛÄÆê öqOgUËQ÷ö¶néRue]XVU¤ M}¢á®y$DÒonå)°Üª£þG¿»ÐÞÁhoM)ª¹wº×ÁÂçLa<©½×ÜU) äAGxHg f «HH¦X Ô-ض)°à`ij:¥àzÓSÅæ#,å9ûî¦:&´áTMzyLä"ÓYQiIµ`¨ +klåw: r¾VSHXÁ8C PvJ¥ê Ì¿J-á$¤µjL*s°$:)°ÆaòoÖ,Æ&gsgíi½y.t4r);9xÎAs£|`¡¨pêÁÖàsͨØ:ÃÆ1 d P`çAÊ3ÅAÒ&2ÔOOÓ?¯¤¾@êóVmni>Dþf 4B)y2wÄÊ0A^oµQEH¬ýóùr¯íNEpÌÚÛðUm´ ðàÚ¼ ¼3Ä$lYtûr¯±PBiÌeªJÙ)SlʱXKGø§Óç1TtÇLÀ¸L°PCwHñ1ê5H¬×b Lô« ìÙÊÀ§ÎõÔ#¤àé 0TÃh4¿e#D^AÀ»Ç¦°a$_«þ¤òC( tH @fÃÁñi ñcòráý.¥Ü¼²ú_Ì 0¦iÚNdñPeÌ**Dáì©$V£- +ªîiÚÐópn±¯ç DÑrAÌ9Ê=C¬¤QUMZ¬¥j¶zʰ7Psù¦+-YÔüM%ÐÐ i"x®ÓR¼Mjõ6 +°5aéjnʸQ%°vI¢Ð®j á%ePð¥zKE=ÚSÎUeáVdlV+[YS%°-Õ©6&äथ¤³M)R!JÉ"P`ÖÖ1k*¡Û¶' +BÂ"V¥ÂS)PyÐþ¨7O7y=n´øN}ÏØ( §AØ +Óiòig9&¦`««XOr!ÅÛtî×òÑGL²&N¥OLsæØÁ©ÇAUN(xü½çÀó02,±±ô>£¥_~g +÷0¤þÙÀa'`×/,é+&ÕÈyW\ç~ÂùÂf [ ¶ù6Å·'8iL·ÈÅÁõË_ÒLsêÃH8!º©YP¡TŶà¬0ZZBPËi¼?1¤Ä ç0^Ì:!¤EebüÑ¡æ¼û++ |Ëâ4L7Å}@¥ý$¤Ø*®,¯G&pÔÙRfJÙ_%Û«â^ +¸F©p¿ª¯^4[¶`Òf* 4\½ôOwÙײ0z s0E=iÕûúTñhÎöû<²4öÃZSAdÌE³BÖT×ÝÃg¹-6æµ¾°Y=ÚÙN4Èb4rR +En]]¼A¶øË\ éÆö§pª/ßPjN[u9Tþê`o©Í¨»Ê¦]øå±ïÎ\Ï}åäÖº³YÓ¼ëYx/Eð¿& 2JSoé[#a÷òɶ9W.eÆTcÔ"s´Y05ÞQzNMÞ`ÄZÙhܽÞ\-ëÉØ÷re¥ëö 5uÇ©òÞ÷~kÞ[¦ 6léà-GSÔ[G¾÷i1´hU +endstream +endobj +591 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +593 0 obj +<< +/Length 2185 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ ̧eÒ¡* BapÐPÆ60Dâté|xkÉã!´BTXñRh +Å#qDpiGKaÊs1'¡¤ÞnÑ(ÐR4W¢¸´"3GõJýQg±FÃ\ÞÐ()ÈBèu9bìa6L¢y@t<6d2y0R)HÛsAè 1ßÎN«³¸ =ÑÒf4L£Jdw£Je7x{¦woºbØô<}-)³i;|¼iÓÐ9-â¥o\¹0â"\;0ªìê5ïV8#æí6ã{ £ +ò7 ÈXÐÙÃÂ6´Ã(äî +R#)ÊS¦ár¶±b¤±%êg NЬØ6ALc°ÊZÈ#H²ðZ· 3îàr9#sæµaKö:Dîãö6¯ÈÙ3:M«I?¯ü<"î4»ñ(©2Å1\Z9@l °ê`Z#a°fÎ@ÐD§âÍ ï8Ý#¾2TdÂI±ºÞ©Q*Hr 6Ï0ÊôU9γ¼ó?Nû?Ñ}Ðp¡pgDz¤I,á@øÓ aM Ôê·¡´¥&°{É,KSW̵Ë5ÍÏ%Ahf·ÇaA( Z±ÁrjÏ?ôäÜW°óMFjM +*¤©ê²°Á¬r²°XijUkR|·YËæ4 3PÕXôäl¦1¬Z*Å1ì@"ÁrÁjû<!NP×I ÜÜ7Axß8ã9TÁº+¬ìCûÃ[=Ø÷>aEå`»×{îü¼OÝu Cèè7å¢ UÂuAQ&ÂaÖV"¨±|8@« ÊÎnªUK,ªäþD¶£¬Le(åÀC[nåìJ/æ9®-f9Ó-R }aÌcY7´íNø¼#t<7öa]ÐW#pÌ7Q +ú¿×0¿; 3³¶1NôC ÜÒ©¸®e*¼^/Åêê/È +ʳ+_1psk`ÀÃAl3.! Q=îèÌ+Üf.¡ U²$ªAÊ B`E +P"(X<0>Á0hBÚήv&¹Á©$¬ðläórÀ¥-ÀjÉX( +a0¨oÂxFe®*½çã©äЮ¾húÙîÈøÃ òï �ÐR`(s~;°ü)D¸ {Ñ à)pÈâb3ã.áÆ±Ø!l`Ê*bð^á~0q0ð ÃèpÓô4Åé4tØ +ô±:a3¢Ä½-ÐÚhmÝ´tÊϸùb§¤øQRÄEÇrN(2'àÍQ(÷ÒÒÕ©Å@/GI6 |&Ëý Ã& Ó?'á¤Õ·é9 ½ ²ÕìWA¹t_DmG.BÄ©ICCrôôyÕ¦ sì:ǦlÍ(tä2=ÍÞä*r%ÆF>0ÎUö²5ÉO'e.åMX'¥30@bW<hv ó=S-Ô9wÑüÈ?!¸OxÿGå Ôð$(I\3RÊ*ZZæh4snuϼ¶$êʧ ÔÓÂ<ÁÅ(¥R¡Ø¼kU menìÙ;×~ð^O9¯äw=*«Ïz(qê!÷®àjà ¤/z"¾¾ä*,®MõV`PZ¤/ôĺç?ö¯àñ¿§øõoPTÞ¹EùCNå÷r² ÉÂâFpþ!Qù +Ä $'$¦%ff¤mÅQvÔ9læÁ( +¦ dòóCbyñùn,O»H®EKX[W ñfz@¼é:1ÕØ6mP£X( ÁAxïEê½Ç.;Þ0êÃ$w:;;W¯«26IÛjJì¿à¢KöòäÝpöõÓÛü(Öc �;.¨nÃ!®¤0Æj ,¿¾KÊ3DÐOËm¬®²È2àÝhÀÇa±"Àà(È®¨Ùäly ß|>v¬ËĬJùâJF.ºuÌzZpSKè3tÍÛ¨»N-ö +b òËÊ´1/Àe©ÚÓ-¨äC6\oÚÖÔª©µC(tGêë³v/!ÙDè_Ã+Ù¦×=îâlúųø1"1.üèW.G +íjµ±Ðhêâëuh#Êw`ì;´8¶O;¦Þl1´±µØ·ò¤ÖsIé*õÄnùR;é´g )¿8»Ccm{õ~ïåýås¢ö=ÒQMgcv2ô¼6O$½AO+kpQ Oä¼³RHï d%!º.&馥e4h%õâîÀnæÎã'ø6ÇôÞ:\½dõ0ÞzYÞ×ÇgplüãÍÃáwîÔÔ«bÄZãCWIDÍÆmÅ op¾Jä©«ýÂ@G7Á + +endstream +endobj +594 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +596 0 obj +<< +/Length 776 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7N¥BT8Âá ¡Æ\4Ti´ñ ñ ©%)õ¤Ì8#FâpÈomk6²!æc9NCI¼Ü)¡Ñ`¤i*®Ôb¸Í¶ ÔëÖÀa³ + +(Úa¼ÄSq°Þc5ÄLàÐa7 Óy@a®Æó©ÈÆeBõ§ ÈÂm2§! ´8(d4D¡dInZGe + -Þ÷Îè`ð´¨'c¯ +÷,3/ÓªÖguûjÕµÐæÞ7ÌèèÑ43P=Ã)j`¨"h$¨*Ê !\,¢¾8P´§«jÞ®*Èp<£z7lè½nª,í1h»1á°n·JB¾,ËbèZm3lë>з.LfÕÂ)¯³lüʰÌ2ÌÅñ¨`7C32Íø@1·pèû5CÓÑ.!P0ÎS> )SàZÏÏ»EÏÃ(ð2c«284$£GÑE7ÆÌ'E Ëù$òzpÝFCh B¬º4ËðË̳<ÒÍr¬ÜÝN,ìèÒNôpÜ7ÎóÕÛÐ.\)4]IR°ËLT0s©©Ð۰®¬®¤èi<4P¶-Ápix9Q#jÀÇÛ¡w1Él©Îû) {òæ5o*Õ£p@;#`ê2 ÿaá|¾ÃpÌ7Lúø¿O ÃHÉkóg³Öß9öÔ Böþܵ¶Ä7Rȳ-Uà··¢Ö!Ñ#æ¼2â}}Æì§XÇìxj«4DË3ÓXȪҴãX¸L¨ +endstream +endobj +597 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +/F11 23 0 R +>> +>> +endobj +599 0 obj +<< +/Length 1426 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" F"áÐ@7ÃÆc(Y¶ *¤â<\0af9YPï-¢hØQ IJéP!0¸h(c$ÄéñÀÐ]¡I0(a/I +@P¶¾0X¦à©ÉR4ÆQLøð $ +h´{(Î!ªô¢¡\0á,{L.×9!O¢LòànO3Á äy'3¡ä 'å È£La:eE·~bz(9Þ¨ÐëüS}SÆ¢áÅ(l6Á ëuÜ`Îg³KÆ©´àQ¢Òiµ ~Çk"iÂn4û«äIÔ¦Äű±¸ÔsÃW¹ÿ®³®â bZxð!P)£ æ@ÊHð2 �&ôÂ@2#ÒØ -¨@1 # Ú0߯5 ÏbVù Á¸pç0®ê1ïø¾+H¨"Àá¨gAtC °¼3 ðøÝ)Äq+b7ETYF@;h˯h ¨&²(¥ (`ÉC(áq,¹*ÃÔ9# Ä4ÀïKc¼Z4Pðµ,QxÍC£tØÝS|éH´æ/¢¦%Âx©<Ïakì½BPÔ|)MJô\'OK¿0Ò´¼¸9D£¨Ø:%)ʰh©Qàb:ÊQ"ØÑ=("p.WHS\£$ÏeWÂH+¢¦"×òµ,Ú4ý|îTV£çk[ +é¿:Ðê,ÍWVÕõ¤ù ×Tm^ÄTE~ZQÃIÅ6L#eÙ¶}û)Ú l£vݺëcöDWÅñËsÝ!Rµ×u-ßö÷NߨÍCQ¯¯Çôo?xt u¥b*2AÍq×~}SHK×Cwèåz^ׯ:ºM¶®Ùv²ÈzQÜsk|ÓvÉs]VyvíÆ¿Àã)£àYVçG¸Dþ,ÇUZê#¢¦¯6a³ë®búö3¡l9=}¾lùÿYhmùNWÊnܽ¿l¹ÅL¢x¥ÂçWf}xmWë{ðÞP`;kîvïÍ:|ãýóâ/H'QBõR§YÁmòí%vY'mw;%ìwç·¼¬sûׯyí¸2Øc` è?vÁÚy{¯õ¼*¼ÔcájÊÈÉ$ô X³èî1éº÷übmo=·67täÖÓúrïq?ãüìdF,i¡¡8Î`#~.-é6'©,{.YoAh)P'$ ¨Ç¡;}xÄ4 ðÜÖ4«02D Læè_jñLpbAD+ +AQôÃ×] goÉ6Ì +ôNs/ñ9 ®S»¤Àľv0ú BüQÑácŨuÎm«ö¿bËãAü-`¢"GgÛÁHT P5Ý´ØZ»TtÝ\»â*Kp<ÃÿÞkl^òv·Xd~a¤3ÌÜ8èpãÛ6påIW$a+FzªëÌW´ï¤°VA6 '¨:Z$tu°%bÅõæ´*S ûJÖ[1É« oÎfÎÙ{4'?]SV`IIûzÑ)ÊMö b²EbC:eĦӺ_&Z +#ôT2O¿¸]«·í³9/DÞ<Ô´~u¸Øäg³0UÍÁG~÷Ð0tà ÙlêhË}³>KøR)Kô ÓÖOy@NjdѸwÚh4¹ô)R:@@ +endstream +endobj +600 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F6 7 0 R +/F8 8 0 R +>> +>> +endobj +602 0 obj +<< +/Length 87 +/Filter /LZWDecode +>> +stream +ÐP¼6DC4r.Â>" ᬠn9ÆP³l&T9Iy0¸`9ÂÌr¢¡Þ[E"Ѱ¢7'EÒ¡*E +endstream +endobj +603 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F6 7 0 R +>> +>> +endobj +605 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +606 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +610 0 obj +<< +/Length 4 +/Filter /LZWDecode +>> +stream + +endstream +endobj +611 0 obj +<< +/ProcSet [/PDF] +/ColorSpace <</DefaultRGB 1 0 R>> +>> +endobj +613 0 obj +<< +/Length 1119 +/Filter /LZWDecode +>> +stream +ÐP¼2DC4r. FbáÀà@3EС¶ *¤â<\0Ir²¡Þ((&ã¡È 1Î)Îa7FQ¼äd2§Â1ÈÞm +J¨$= +JÅ£pÜr5 %ÓRf +HdÒ j¹ÂapÐTRÆ.FöXÂÁoF#AHëL2q¦àÌl47nÖ+ Äq`µ\dÈa#s'clTA£ |Æ)Í'CÕDÙH2k¯ÖA¸àg¾íqì-l +-ÆÅdZ3XÒ2HxÛiJ¬æ?ÈÙípðN&yQÌ:Ã!,P4£`à¨cX2chÂcCÒõ½«2Ð*4)BÞÚ4ÐèÃHØ¢¨êHÄ ¡¨PÍD¡@@2 ã¸Ü6 ã + ªªº:AöLÜ %«Û¥Í3 mØÊGJÚº#+ëÚÁ£3]AP`Ñ(5È2°/l8òdó¶Îc!Êç Î3§c8@ç4ÊÒÂ$L=9O`ùÎóÄöúEJ@Þ7#hÞ:ÐïTy5QSl²òKñ=&´Å +7'ô ÊrëÉxn/óË.¹)d0æ;©Î¤¼Mr°,]RæÈAKº@]DÈXÐ4¨Âèà*}a5ðÂ1Cꢬ6`Ò1W¨óTV-J6KÈÆR¥Ä.K Z)E»E˰dÁâ-§hl7L¨Âh¦+Û!Ðô@..!kø¢²È" â¡\æùÈdgðA yÅHIY¯} Ú!ML +ÈÞ.2 +xæ: +ct8¦d£fFq§£mÚã¹çù¶£{®Uéþ¾ ìÃxÄ0í9?¶fºà(4ÐÒñ»ÞØ0¸i> +Ú!ÉhûÖß¾ò:å×m¸k+äN£Î0umÒ*@:æ ÉtB¥)êcØ9áf0С<¨ ¡uܦE6¦ èڥÇ7@î»ñ n^ôU!ƱÄÁºA,£asÉü¡G2à'Ì9£ é@¨ß°P½Jcþ �º<hÙ7f ª&ÆPZ p¤(WñJX TùÓwRqVy¡RIm;!hI8OGéøpÊ¡£÷IÉ¡øôÐ/áÞ"AtÊaãæVH¿ÌC`l bÚ)¥%~íÔ(cjÍýX¾]ò^ =a+@n 0p6@Ö gZBZK Ê +ptpR +endstream +endobj +614 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F2 5 0 R +/F8 8 0 R +>> +>> +endobj +616 0 obj +<< +/Length 281 +/Filter /LZWDecode +>> +stream +ÐP¼8DC4r.Æ"ád1ÂͰH¡På$äáÂ$T1ÁR4)*¥ØØÜo +*%rØìÂPT;Ì# ¤u2Zq ¸3 ÆYÄè#aÌ. _$4`P HÒ9¶v0×` AUaEÛJgsIÐôe9&ã%ê¾ °Ï¨qAPÐi9 +gLYÂr2&ahÈgMÌ7N(Äl¨FZ¼Ì 13æz¤Ü 8·ÇC.Ìo9uXÍVdÍ2ÅØëäȧ´of%DÆo;b8àrìgCÔÆt4ýXâ, +endstream +endobj +617 0 obj +<< +/ProcSet [/PDF /Text] +/ColorSpace <</DefaultRGB 1 0 R>> +/Font << +/F8 8 0 R +>> +>> +endobj +5 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F2 +/Encoding 618 0 R +/BaseFont /Times-Roman +>> +endobj +6 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F4 +/Encoding 618 0 R +/BaseFont /Helvetica-Bold +>> +endobj +7 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F6 +/Encoding 618 0 R +/BaseFont /Helvetica +>> +endobj +8 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F8 +/Encoding 618 0 R +/BaseFont /Times-Bold +>> +endobj +22 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F9 +/BaseFont /Symbol +>> +endobj +23 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F11 +/Encoding 618 0 R +/BaseFont /Times-Italic +>> +endobj +101 0 obj +<< +/Type /Font +/Subtype /Type1 +/Name /F13 +/Encoding 618 0 R +/BaseFont /Times-BoldItalic +>> +endobj +618 0 obj +<< +/Type /Encoding +/Differences [ + 0/grave/acute/circumflex/tilde/macron/breve/dotaccent/dieresis +/ring/cedilla/hungarumlaut/ogonek/caron/dotlessi 39/quotesingle 96/grave + 127/bullet/bullet/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger +/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/bullet +/bullet/bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash +/emdash/tilde/trademark/scaron/guilsinglright/oe/bullet/bullet +/Ydieresis/space 164/currency 166/brokenbar 168/dieresis/copyright/ordfeminine 172/logicalnot +/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute +/mu 183/periodcentered/cedilla/onesuperior/ordmasculine 188/onequarter/onehalf/threequarters + 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla +/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis +/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply +/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls +/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla +/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis +/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide +/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis +] +>> +endobj +2 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 4 0 R +/Contents 3 0 R +>> +endobj +10 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 12 0 R +/Contents 11 0 R +>> +endobj +13 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 15 0 R +/Contents 14 0 R +>> +endobj +16 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 18 0 R +/Contents 17 0 R +>> +endobj +19 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 21 0 R +/Contents 20 0 R +>> +endobj +24 0 obj +<< +/Type /Page +/Parent 9 0 R +/Resources 26 0 R +/Contents 25 0 R +>> +endobj +27 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 29 0 R +/Contents 28 0 R +>> +endobj +32 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 34 0 R +/Contents 33 0 R +>> +endobj +35 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 37 0 R +/Contents 36 0 R +>> +endobj +38 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 40 0 R +/Contents 39 0 R +>> +endobj +41 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 43 0 R +/Contents 42 0 R +>> +endobj +44 0 obj +<< +/Type /Page +/Parent 31 0 R +/Resources 46 0 R +/Contents 45 0 R +>> +endobj +47 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 49 0 R +/Contents 48 0 R +>> +endobj +51 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 53 0 R +/Contents 52 0 R +>> +endobj +54 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 56 0 R +/Contents 55 0 R +>> +endobj +57 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 59 0 R +/Contents 58 0 R +>> +endobj +60 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 62 0 R +/Contents 61 0 R +>> +endobj +63 0 obj +<< +/Type /Page +/Parent 50 0 R +/Resources 65 0 R +/Contents 64 0 R +>> +endobj +66 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 68 0 R +/Contents 67 0 R +>> +endobj +70 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 72 0 R +/Contents 71 0 R +>> +endobj +73 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 75 0 R +/Contents 74 0 R +>> +endobj +76 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 78 0 R +/Contents 77 0 R +>> +endobj +79 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 81 0 R +/Contents 80 0 R +>> +endobj +82 0 obj +<< +/Type /Page +/Parent 69 0 R +/Resources 84 0 R +/Contents 83 0 R +>> +endobj +85 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 87 0 R +/Contents 86 0 R +>> +endobj +89 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 91 0 R +/Contents 90 0 R +>> +endobj +92 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 94 0 R +/Contents 93 0 R +>> +endobj +95 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 97 0 R +/Contents 96 0 R +>> +endobj +98 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 100 0 R +/Contents 99 0 R +>> +endobj +102 0 obj +<< +/Type /Page +/Parent 88 0 R +/Resources 104 0 R +/Contents 103 0 R +>> +endobj +105 0 obj +<< +/Type /Page +/Parent 108 0 R +/Resources 107 0 R +/Contents 106 0 R +>> +endobj +109 0 obj +<< +/Type /Page +/Parent 108 0 R +/Resources 111 0 R +/Contents 110 0 R +>> +endobj +112 0 obj +<< +/Type /Page +/Parent 108 0 R +/Resources 114 0 R +/Contents 113 0 R +>> +endobj +115 0 obj +<< +/Type /Page +/Parent 108 0 R +/Resources 117 0 R +/Contents 116 0 R +>> +endobj +118 0 obj +<< +/Type /Page +/Parent 108 0 R +/Resources 120 0 R +/Contents 119 0 R +>> +endobj +121 0 obj +<< +/Type /Page +/Parent 108 0 R +/Resources 123 0 R +/Contents 122 0 R +>> +endobj +124 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 126 0 R +/Contents 125 0 R +>> +endobj +129 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 131 0 R +/Contents 130 0 R +>> +endobj +132 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 134 0 R +/Contents 133 0 R +>> +endobj +135 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 137 0 R +/Contents 136 0 R +>> +endobj +138 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 140 0 R +/Contents 139 0 R +>> +endobj +141 0 obj +<< +/Type /Page +/Parent 128 0 R +/Resources 143 0 R +/Contents 142 0 R +>> +endobj +144 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 146 0 R +/Contents 145 0 R +>> +endobj +149 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 151 0 R +/Contents 150 0 R +>> +endobj +152 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 154 0 R +/Contents 153 0 R +>> +endobj +155 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 157 0 R +/Contents 156 0 R +>> +endobj +158 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 160 0 R +/Contents 159 0 R +>> +endobj +161 0 obj +<< +/Type /Page +/Parent 148 0 R +/Resources 163 0 R +/Contents 162 0 R +>> +endobj +164 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 166 0 R +/Contents 165 0 R +>> +endobj +168 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 170 0 R +/Contents 169 0 R +>> +endobj +171 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 173 0 R +/Contents 172 0 R +>> +endobj +174 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 176 0 R +/Contents 175 0 R +>> +endobj +177 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 179 0 R +/Contents 178 0 R +>> +endobj +180 0 obj +<< +/Type /Page +/Parent 167 0 R +/Resources 182 0 R +/Contents 181 0 R +>> +endobj +183 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 185 0 R +/Contents 184 0 R +>> +endobj +187 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 189 0 R +/Contents 188 0 R +>> +endobj +190 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 192 0 R +/Contents 191 0 R +>> +endobj +193 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 195 0 R +/Contents 194 0 R +>> +endobj +196 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 198 0 R +/Contents 197 0 R +>> +endobj +199 0 obj +<< +/Type /Page +/Parent 186 0 R +/Resources 201 0 R +/Contents 200 0 R +>> +endobj +202 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 204 0 R +/Contents 203 0 R +>> +endobj +206 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 208 0 R +/Contents 207 0 R +>> +endobj +209 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 211 0 R +/Contents 210 0 R +>> +endobj +212 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 214 0 R +/Contents 213 0 R +>> +endobj +215 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 217 0 R +/Contents 216 0 R +>> +endobj +218 0 obj +<< +/Type /Page +/Parent 205 0 R +/Resources 220 0 R +/Contents 219 0 R +>> +endobj +221 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 223 0 R +/Contents 222 0 R +>> +endobj +225 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 227 0 R +/Contents 226 0 R +>> +endobj +228 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 230 0 R +/Contents 229 0 R +>> +endobj +231 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 233 0 R +/Contents 232 0 R +>> +endobj +234 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 236 0 R +/Contents 235 0 R +>> +endobj +237 0 obj +<< +/Type /Page +/Parent 224 0 R +/Resources 239 0 R +/Contents 238 0 R +>> +endobj +240 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 242 0 R +/Contents 241 0 R +>> +endobj +244 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 246 0 R +/Contents 245 0 R +>> +endobj +247 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 249 0 R +/Contents 248 0 R +>> +endobj +250 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 252 0 R +/Contents 251 0 R +>> +endobj +253 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 255 0 R +/Contents 254 0 R +>> +endobj +256 0 obj +<< +/Type /Page +/Parent 243 0 R +/Resources 258 0 R +/Contents 257 0 R +>> +endobj +259 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 261 0 R +/Contents 260 0 R +>> +endobj +264 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 266 0 R +/Contents 265 0 R +>> +endobj +267 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 269 0 R +/Contents 268 0 R +>> +endobj +270 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 272 0 R +/Contents 271 0 R +>> +endobj +273 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 275 0 R +/Contents 274 0 R +>> +endobj +276 0 obj +<< +/Type /Page +/Parent 263 0 R +/Resources 278 0 R +/Contents 277 0 R +>> +endobj +279 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 281 0 R +/Contents 280 0 R +>> +endobj +283 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 285 0 R +/Contents 284 0 R +>> +endobj +286 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 288 0 R +/Contents 287 0 R +>> +endobj +289 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 291 0 R +/Contents 290 0 R +>> +endobj +292 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 294 0 R +/Contents 293 0 R +>> +endobj +295 0 obj +<< +/Type /Page +/Parent 282 0 R +/Resources 297 0 R +/Contents 296 0 R +>> +endobj +298 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 300 0 R +/Contents 299 0 R +>> +endobj +302 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 304 0 R +/Contents 303 0 R +>> +endobj +305 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 307 0 R +/Contents 306 0 R +>> +endobj +308 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 310 0 R +/Contents 309 0 R +>> +endobj +311 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 313 0 R +/Contents 312 0 R +>> +endobj +314 0 obj +<< +/Type /Page +/Parent 301 0 R +/Resources 316 0 R +/Contents 315 0 R +>> +endobj +317 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 319 0 R +/Contents 318 0 R +>> +endobj +321 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 323 0 R +/Contents 322 0 R +>> +endobj +324 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 326 0 R +/Contents 325 0 R +>> +endobj +327 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 329 0 R +/Contents 328 0 R +>> +endobj +330 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 332 0 R +/Contents 331 0 R +>> +endobj +333 0 obj +<< +/Type /Page +/Parent 320 0 R +/Resources 335 0 R +/Contents 334 0 R +>> +endobj +336 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 338 0 R +/Contents 337 0 R +>> +endobj +340 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 342 0 R +/Contents 341 0 R +>> +endobj +343 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 345 0 R +/Contents 344 0 R +>> +endobj +346 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 348 0 R +/Contents 347 0 R +>> +endobj +349 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 351 0 R +/Contents 350 0 R +>> +endobj +352 0 obj +<< +/Type /Page +/Parent 339 0 R +/Resources 354 0 R +/Contents 353 0 R +>> +endobj +355 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 357 0 R +/Contents 356 0 R +>> +endobj +359 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 361 0 R +/Contents 360 0 R +>> +endobj +362 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 364 0 R +/Contents 363 0 R +>> +endobj +365 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 367 0 R +/Contents 366 0 R +>> +endobj +368 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 370 0 R +/Contents 369 0 R +>> +endobj +371 0 obj +<< +/Type /Page +/Parent 358 0 R +/Resources 373 0 R +/Contents 372 0 R +>> +endobj +374 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 376 0 R +/Contents 375 0 R +>> +endobj +379 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 381 0 R +/Contents 380 0 R +>> +endobj +382 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 384 0 R +/Contents 383 0 R +>> +endobj +385 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 387 0 R +/Contents 386 0 R +>> +endobj +388 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 390 0 R +/Contents 389 0 R +>> +endobj +391 0 obj +<< +/Type /Page +/Parent 378 0 R +/Resources 393 0 R +/Contents 392 0 R +>> +endobj +394 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 396 0 R +/Contents 395 0 R +>> +endobj +398 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 400 0 R +/Contents 399 0 R +>> +endobj +401 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 403 0 R +/Contents 402 0 R +>> +endobj +404 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 406 0 R +/Contents 405 0 R +>> +endobj +407 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 409 0 R +/Contents 408 0 R +>> +endobj +410 0 obj +<< +/Type /Page +/Parent 397 0 R +/Resources 412 0 R +/Contents 411 0 R +>> +endobj +413 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 415 0 R +/Contents 414 0 R +>> +endobj +417 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 419 0 R +/Contents 418 0 R +>> +endobj +420 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 422 0 R +/Contents 421 0 R +>> +endobj +423 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 425 0 R +/Contents 424 0 R +>> +endobj +426 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 428 0 R +/Contents 427 0 R +>> +endobj +429 0 obj +<< +/Type /Page +/Parent 416 0 R +/Resources 431 0 R +/Contents 430 0 R +>> +endobj +432 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 434 0 R +/Contents 433 0 R +>> +endobj +436 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 438 0 R +/Contents 437 0 R +>> +endobj +439 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 441 0 R +/Contents 440 0 R +>> +endobj +442 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 444 0 R +/Contents 443 0 R +>> +endobj +445 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 447 0 R +/Contents 446 0 R +>> +endobj +448 0 obj +<< +/Type /Page +/Parent 435 0 R +/Resources 450 0 R +/Contents 449 0 R +>> +endobj +451 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 453 0 R +/Contents 452 0 R +>> +endobj +455 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 457 0 R +/Contents 456 0 R +>> +endobj +458 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 460 0 R +/Contents 459 0 R +>> +endobj +461 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 463 0 R +/Contents 462 0 R +>> +endobj +464 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 466 0 R +/Contents 465 0 R +>> +endobj +467 0 obj +<< +/Type /Page +/Parent 454 0 R +/Resources 469 0 R +/Contents 468 0 R +>> +endobj +470 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 472 0 R +/Contents 471 0 R +>> +endobj +474 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 476 0 R +/Contents 475 0 R +>> +endobj +477 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 479 0 R +/Contents 478 0 R +>> +endobj +480 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 482 0 R +/Contents 481 0 R +>> +endobj +483 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 485 0 R +/Contents 484 0 R +>> +endobj +486 0 obj +<< +/Type /Page +/Parent 473 0 R +/Resources 488 0 R +/Contents 487 0 R +>> +endobj +489 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 491 0 R +/Contents 490 0 R +>> +endobj +494 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 496 0 R +/Contents 495 0 R +>> +endobj +497 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 499 0 R +/Contents 498 0 R +>> +endobj +500 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 502 0 R +/Contents 501 0 R +>> +endobj +503 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 505 0 R +/Contents 504 0 R +>> +endobj +506 0 obj +<< +/Type /Page +/Parent 493 0 R +/Resources 508 0 R +/Contents 507 0 R +>> +endobj +509 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 511 0 R +/Contents 510 0 R +>> +endobj +513 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 515 0 R +/Contents 514 0 R +>> +endobj +516 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 518 0 R +/Contents 517 0 R +>> +endobj +519 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 521 0 R +/Contents 520 0 R +>> +endobj +522 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 524 0 R +/Contents 523 0 R +>> +endobj +525 0 obj +<< +/Type /Page +/Parent 512 0 R +/Resources 527 0 R +/Contents 526 0 R +>> +endobj +528 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 530 0 R +/Contents 529 0 R +>> +endobj +532 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 534 0 R +/Contents 533 0 R +>> +endobj +535 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 537 0 R +/Contents 536 0 R +>> +endobj +538 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 540 0 R +/Contents 539 0 R +>> +endobj +541 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 543 0 R +/Contents 542 0 R +>> +endobj +544 0 obj +<< +/Type /Page +/Parent 531 0 R +/Resources 546 0 R +/Contents 545 0 R +>> +endobj +547 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 549 0 R +/Contents 548 0 R +>> +endobj +551 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 553 0 R +/Contents 552 0 R +>> +endobj +554 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 556 0 R +/Contents 555 0 R +>> +endobj +557 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 559 0 R +/Contents 558 0 R +>> +endobj +560 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 562 0 R +/Contents 561 0 R +>> +endobj +563 0 obj +<< +/Type /Page +/Parent 550 0 R +/Resources 565 0 R +/Contents 564 0 R +>> +endobj +566 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 568 0 R +/Contents 567 0 R +>> +endobj +570 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 572 0 R +/Contents 571 0 R +>> +endobj +573 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 575 0 R +/Contents 574 0 R +>> +endobj +576 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 578 0 R +/Contents 577 0 R +>> +endobj +579 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 581 0 R +/Contents 580 0 R +>> +endobj +582 0 obj +<< +/Type /Page +/Parent 569 0 R +/Resources 584 0 R +/Contents 583 0 R +>> +endobj +585 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 587 0 R +/Contents 586 0 R +>> +endobj +589 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 591 0 R +/Contents 590 0 R +>> +endobj +592 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 594 0 R +/Contents 593 0 R +>> +endobj +595 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 597 0 R +/Contents 596 0 R +>> +endobj +598 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 600 0 R +/Contents 599 0 R +>> +endobj +601 0 obj +<< +/Type /Page +/Parent 588 0 R +/Resources 603 0 R +/Contents 602 0 R +>> +endobj +604 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 606 0 R +/Contents 605 0 R +>> +endobj +609 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 611 0 R +/Contents 610 0 R +>> +endobj +612 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 614 0 R +/Contents 613 0 R +>> +endobj +615 0 obj +<< +/Type /Page +/Parent 608 0 R +/Resources 617 0 R +/Contents 616 0 R +>> +endobj +9 0 obj +<< +/Type /Pages +/Kids [2 0 R 10 0 R 13 0 R 16 0 R 19 0 R 24 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +31 0 obj +<< +/Type /Pages +/Kids [27 0 R 32 0 R 35 0 R 38 0 R 41 0 R 44 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +50 0 obj +<< +/Type /Pages +/Kids [47 0 R 51 0 R 54 0 R 57 0 R 60 0 R 63 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +69 0 obj +<< +/Type /Pages +/Kids [66 0 R 70 0 R 73 0 R 76 0 R 79 0 R 82 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +88 0 obj +<< +/Type /Pages +/Kids [85 0 R 89 0 R 92 0 R 95 0 R 98 0 R 102 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +108 0 obj +<< +/Type /Pages +/Kids [105 0 R 109 0 R 112 0 R 115 0 R 118 0 R 121 0 R ] +/Count 6 +/Parent 30 0 R +>> +endobj +30 0 obj +<< +/Type /Pages +/Kids [9 0 R 31 0 R 50 0 R 69 0 R 88 0 R 108 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +128 0 obj +<< +/Type /Pages +/Kids [124 0 R 129 0 R 132 0 R 135 0 R 138 0 R 141 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +148 0 obj +<< +/Type /Pages +/Kids [144 0 R 149 0 R 152 0 R 155 0 R 158 0 R 161 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +167 0 obj +<< +/Type /Pages +/Kids [164 0 R 168 0 R 171 0 R 174 0 R 177 0 R 180 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +186 0 obj +<< +/Type /Pages +/Kids [183 0 R 187 0 R 190 0 R 193 0 R 196 0 R 199 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +205 0 obj +<< +/Type /Pages +/Kids [202 0 R 206 0 R 209 0 R 212 0 R 215 0 R 218 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +224 0 obj +<< +/Type /Pages +/Kids [221 0 R 225 0 R 228 0 R 231 0 R 234 0 R 237 0 R ] +/Count 6 +/Parent 147 0 R +>> +endobj +147 0 obj +<< +/Type /Pages +/Kids [128 0 R 148 0 R 167 0 R 186 0 R 205 0 R 224 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +243 0 obj +<< +/Type /Pages +/Kids [240 0 R 244 0 R 247 0 R 250 0 R 253 0 R 256 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +263 0 obj +<< +/Type /Pages +/Kids [259 0 R 264 0 R 267 0 R 270 0 R 273 0 R 276 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +282 0 obj +<< +/Type /Pages +/Kids [279 0 R 283 0 R 286 0 R 289 0 R 292 0 R 295 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +301 0 obj +<< +/Type /Pages +/Kids [298 0 R 302 0 R 305 0 R 308 0 R 311 0 R 314 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +320 0 obj +<< +/Type /Pages +/Kids [317 0 R 321 0 R 324 0 R 327 0 R 330 0 R 333 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +339 0 obj +<< +/Type /Pages +/Kids [336 0 R 340 0 R 343 0 R 346 0 R 349 0 R 352 0 R ] +/Count 6 +/Parent 262 0 R +>> +endobj +262 0 obj +<< +/Type /Pages +/Kids [243 0 R 263 0 R 282 0 R 301 0 R 320 0 R 339 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +358 0 obj +<< +/Type /Pages +/Kids [355 0 R 359 0 R 362 0 R 365 0 R 368 0 R 371 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +378 0 obj +<< +/Type /Pages +/Kids [374 0 R 379 0 R 382 0 R 385 0 R 388 0 R 391 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +397 0 obj +<< +/Type /Pages +/Kids [394 0 R 398 0 R 401 0 R 404 0 R 407 0 R 410 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +416 0 obj +<< +/Type /Pages +/Kids [413 0 R 417 0 R 420 0 R 423 0 R 426 0 R 429 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +435 0 obj +<< +/Type /Pages +/Kids [432 0 R 436 0 R 439 0 R 442 0 R 445 0 R 448 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +454 0 obj +<< +/Type /Pages +/Kids [451 0 R 455 0 R 458 0 R 461 0 R 464 0 R 467 0 R ] +/Count 6 +/Parent 377 0 R +>> +endobj +377 0 obj +<< +/Type /Pages +/Kids [358 0 R 378 0 R 397 0 R 416 0 R 435 0 R 454 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +473 0 obj +<< +/Type /Pages +/Kids [470 0 R 474 0 R 477 0 R 480 0 R 483 0 R 486 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +493 0 obj +<< +/Type /Pages +/Kids [489 0 R 494 0 R 497 0 R 500 0 R 503 0 R 506 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +512 0 obj +<< +/Type /Pages +/Kids [509 0 R 513 0 R 516 0 R 519 0 R 522 0 R 525 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +531 0 obj +<< +/Type /Pages +/Kids [528 0 R 532 0 R 535 0 R 538 0 R 541 0 R 544 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +550 0 obj +<< +/Type /Pages +/Kids [547 0 R 551 0 R 554 0 R 557 0 R 560 0 R 563 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +569 0 obj +<< +/Type /Pages +/Kids [566 0 R 570 0 R 573 0 R 576 0 R 579 0 R 582 0 R ] +/Count 6 +/Parent 492 0 R +>> +endobj +492 0 obj +<< +/Type /Pages +/Kids [473 0 R 493 0 R 512 0 R 531 0 R 550 0 R 569 0 R ] +/Count 36 +/Parent 127 0 R +>> +endobj +588 0 obj +<< +/Type /Pages +/Kids [585 0 R 589 0 R 592 0 R 595 0 R 598 0 R 601 0 R ] +/Count 6 +/Parent 607 0 R +>> +endobj +608 0 obj +<< +/Type /Pages +/Kids [604 0 R 609 0 R 612 0 R 615 0 R ] +/Count 4 +/Parent 607 0 R +>> +endobj +607 0 obj +<< +/Type /Pages +/Kids [588 0 R 608 0 R ] +/Count 10 +/Parent 127 0 R +>> +endobj +127 0 obj +<< +/Type /Pages +/Kids [30 0 R 147 0 R 262 0 R 377 0 R 492 0 R 607 0 R ] +/Count 190 +/MediaBox [0 0 595 842 ] +>> +endobj +619 0 obj +<< +/Type /Catalog +/Pages 127 0 R +>> +endobj +620 0 obj +<< +/CreationDate (D:19960308084709) +/Producer (Acrobat Distiller 2.1 for Windows) +>> +endobj +xref +0 621 +0000000000 65535 f +0000000017 00000 n +0000465167 00000 n +0000000182 00000 n +0000006077 00000 n +0000463113 00000 n +0000463222 00000 n +0000463334 00000 n +0000463441 00000 n +0000483282 00000 n +0000465255 00000 n +0000006218 00000 n +0000006298 00000 n +0000465346 00000 n +0000006376 00000 n +0000012254 00000 n +0000465437 00000 n +0000012396 00000 n +0000012476 00000 n +0000465528 00000 n +0000012554 00000 n +0000016868 00000 n +0000463549 00000 n +0000463635 00000 n +0000465619 00000 n +0000017013 00000 n +0000018052 00000 n +0000465710 00000 n +0000018161 00000 n +0000018950 00000 n +0000483996 00000 n +0000483398 00000 n +0000465802 00000 n +0000019070 00000 n +0000019150 00000 n +0000465894 00000 n +0000019228 00000 n +0000020793 00000 n +0000465986 00000 n +0000020913 00000 n +0000022381 00000 n +0000466078 00000 n +0000022501 00000 n +0000024036 00000 n +0000466170 00000 n +0000024156 00000 n +0000025674 00000 n +0000466262 00000 n +0000025794 00000 n +0000027264 00000 n +0000483516 00000 n +0000466354 00000 n +0000027384 00000 n +0000028879 00000 n +0000466446 00000 n +0000028999 00000 n +0000030124 00000 n +0000466538 00000 n +0000030244 00000 n +0000030413 00000 n +0000466630 00000 n +0000030522 00000 n +0000033283 00000 n +0000466722 00000 n +0000033414 00000 n +0000035064 00000 n +0000466814 00000 n +0000035195 00000 n +0000037404 00000 n +0000483634 00000 n +0000466906 00000 n +0000037535 00000 n +0000040122 00000 n +0000466998 00000 n +0000040253 00000 n +0000042806 00000 n +0000467090 00000 n +0000042950 00000 n +0000045168 00000 n +0000467182 00000 n +0000045312 00000 n +0000048396 00000 n +0000467274 00000 n +0000048527 00000 n +0000050732 00000 n +0000467366 00000 n +0000050863 00000 n +0000053299 00000 n +0000483752 00000 n +0000467458 00000 n +0000053430 00000 n +0000056473 00000 n +0000467550 00000 n +0000056617 00000 n +0000059429 00000 n +0000467642 00000 n +0000059573 00000 n +0000062393 00000 n +0000467734 00000 n +0000062537 00000 n +0000065361 00000 n +0000463747 00000 n +0000467827 00000 n +0000065520 00000 n +0000068869 00000 n +0000467922 00000 n +0000069014 00000 n +0000071766 00000 n +0000483871 00000 n +0000468018 00000 n +0000071911 00000 n +0000074169 00000 n +0000468114 00000 n +0000074314 00000 n +0000076386 00000 n +0000468210 00000 n +0000076518 00000 n +0000078160 00000 n +0000468306 00000 n +0000078305 00000 n +0000081015 00000 n +0000468402 00000 n +0000081147 00000 n +0000084080 00000 n +0000468498 00000 n +0000084225 00000 n +0000086855 00000 n +0000487979 00000 n +0000484116 00000 n +0000468594 00000 n +0000086987 00000 n +0000089818 00000 n +0000468690 00000 n +0000089963 00000 n +0000092382 00000 n +0000468786 00000 n +0000092527 00000 n +0000095187 00000 n +0000468882 00000 n +0000095332 00000 n +0000097700 00000 n +0000468978 00000 n +0000097832 00000 n +0000100357 00000 n +0000469074 00000 n +0000100489 00000 n +0000103010 00000 n +0000484872 00000 n +0000484242 00000 n +0000469170 00000 n +0000103155 00000 n +0000105321 00000 n +0000469266 00000 n +0000105466 00000 n +0000107940 00000 n +0000469362 00000 n +0000108085 00000 n +0000110438 00000 n +0000469458 00000 n +0000110583 00000 n +0000112999 00000 n +0000469554 00000 n +0000113144 00000 n +0000115389 00000 n +0000469650 00000 n +0000115521 00000 n +0000117047 00000 n +0000484368 00000 n +0000469746 00000 n +0000117192 00000 n +0000119701 00000 n +0000469842 00000 n +0000119833 00000 n +0000122095 00000 n +0000469938 00000 n +0000122227 00000 n +0000124580 00000 n +0000470034 00000 n +0000124725 00000 n +0000126400 00000 n +0000470130 00000 n +0000126545 00000 n +0000128053 00000 n +0000470226 00000 n +0000128198 00000 n +0000130434 00000 n +0000484494 00000 n +0000470322 00000 n +0000130579 00000 n +0000134012 00000 n +0000470418 00000 n +0000134157 00000 n +0000137279 00000 n +0000470514 00000 n +0000137424 00000 n +0000139817 00000 n +0000470610 00000 n +0000139949 00000 n +0000143002 00000 n +0000470706 00000 n +0000143147 00000 n +0000145245 00000 n +0000470802 00000 n +0000145404 00000 n +0000147493 00000 n +0000484620 00000 n +0000470898 00000 n +0000147638 00000 n +0000150472 00000 n +0000470994 00000 n +0000150617 00000 n +0000154063 00000 n +0000471090 00000 n +0000154208 00000 n +0000156889 00000 n +0000471186 00000 n +0000157034 00000 n +0000160759 00000 n +0000471282 00000 n +0000160904 00000 n +0000163527 00000 n +0000471378 00000 n +0000163672 00000 n +0000165303 00000 n +0000484746 00000 n +0000471474 00000 n +0000165435 00000 n +0000167147 00000 n +0000471570 00000 n +0000167292 00000 n +0000169825 00000 n +0000471666 00000 n +0000169957 00000 n +0000172354 00000 n +0000471762 00000 n +0000172486 00000 n +0000174784 00000 n +0000471858 00000 n +0000174929 00000 n +0000176887 00000 n +0000471954 00000 n +0000177032 00000 n +0000179174 00000 n +0000484999 00000 n +0000472050 00000 n +0000179319 00000 n +0000182267 00000 n +0000472146 00000 n +0000182412 00000 n +0000184128 00000 n +0000472242 00000 n +0000184273 00000 n +0000184437 00000 n +0000472338 00000 n +0000184547 00000 n +0000186582 00000 n +0000472434 00000 n +0000186727 00000 n +0000188677 00000 n +0000472530 00000 n +0000188822 00000 n +0000191562 00000 n +0000485755 00000 n +0000485125 00000 n +0000472626 00000 n +0000191707 00000 n +0000194020 00000 n +0000472722 00000 n +0000194165 00000 n +0000197199 00000 n +0000472818 00000 n +0000197344 00000 n +0000199673 00000 n +0000472914 00000 n +0000199818 00000 n +0000202090 00000 n +0000473010 00000 n +0000202235 00000 n +0000204643 00000 n +0000473106 00000 n +0000204788 00000 n +0000207507 00000 n +0000485251 00000 n +0000473202 00000 n +0000207652 00000 n +0000210392 00000 n +0000473298 00000 n +0000210537 00000 n +0000213187 00000 n +0000473394 00000 n +0000213332 00000 n +0000216025 00000 n +0000473490 00000 n +0000216170 00000 n +0000218217 00000 n +0000473586 00000 n +0000218362 00000 n +0000220839 00000 n +0000473682 00000 n +0000220984 00000 n +0000223592 00000 n +0000485377 00000 n +0000473778 00000 n +0000223737 00000 n +0000226101 00000 n +0000473874 00000 n +0000226246 00000 n +0000228861 00000 n +0000473970 00000 n +0000229006 00000 n +0000231400 00000 n +0000474066 00000 n +0000231545 00000 n +0000234396 00000 n +0000474162 00000 n +0000234541 00000 n +0000236978 00000 n +0000474258 00000 n +0000237123 00000 n +0000239485 00000 n +0000485503 00000 n +0000474354 00000 n +0000239630 00000 n +0000242359 00000 n +0000474450 00000 n +0000242504 00000 n +0000244999 00000 n +0000474546 00000 n +0000245144 00000 n +0000248149 00000 n +0000474642 00000 n +0000248294 00000 n +0000251172 00000 n +0000474738 00000 n +0000251317 00000 n +0000253204 00000 n +0000474834 00000 n +0000253349 00000 n +0000255622 00000 n +0000485629 00000 n +0000474930 00000 n +0000255767 00000 n +0000258030 00000 n +0000475026 00000 n +0000258175 00000 n +0000260495 00000 n +0000475122 00000 n +0000260640 00000 n +0000262945 00000 n +0000475218 00000 n +0000263090 00000 n +0000265194 00000 n +0000475314 00000 n +0000265339 00000 n +0000267572 00000 n +0000475410 00000 n +0000267717 00000 n +0000269931 00000 n +0000485882 00000 n +0000475506 00000 n +0000270076 00000 n +0000272247 00000 n +0000475602 00000 n +0000272392 00000 n +0000274657 00000 n +0000475698 00000 n +0000274802 00000 n +0000277046 00000 n +0000475794 00000 n +0000277191 00000 n +0000279946 00000 n +0000475890 00000 n +0000280105 00000 n +0000282855 00000 n +0000475986 00000 n +0000283000 00000 n +0000285645 00000 n +0000486638 00000 n +0000486008 00000 n +0000476082 00000 n +0000285790 00000 n +0000288477 00000 n +0000476178 00000 n +0000288622 00000 n +0000291031 00000 n +0000476274 00000 n +0000291176 00000 n +0000293970 00000 n +0000476370 00000 n +0000294115 00000 n +0000296583 00000 n +0000476466 00000 n +0000296728 00000 n +0000299672 00000 n +0000476562 00000 n +0000299817 00000 n +0000302279 00000 n +0000486134 00000 n +0000476658 00000 n +0000302424 00000 n +0000304939 00000 n +0000476754 00000 n +0000305084 00000 n +0000307671 00000 n +0000476850 00000 n +0000307816 00000 n +0000310365 00000 n +0000476946 00000 n +0000310510 00000 n +0000312898 00000 n +0000477042 00000 n +0000313043 00000 n +0000315522 00000 n +0000477138 00000 n +0000315667 00000 n +0000317636 00000 n +0000486260 00000 n +0000477234 00000 n +0000317781 00000 n +0000319940 00000 n +0000477330 00000 n +0000320085 00000 n +0000322573 00000 n +0000477426 00000 n +0000322718 00000 n +0000324908 00000 n +0000477522 00000 n +0000325053 00000 n +0000327239 00000 n +0000477618 00000 n +0000327384 00000 n +0000329771 00000 n +0000477714 00000 n +0000329916 00000 n +0000332157 00000 n +0000486386 00000 n +0000477810 00000 n +0000332302 00000 n +0000334623 00000 n +0000477906 00000 n +0000334768 00000 n +0000338313 00000 n +0000478002 00000 n +0000338458 00000 n +0000341222 00000 n +0000478098 00000 n +0000341367 00000 n +0000343814 00000 n +0000478194 00000 n +0000343959 00000 n +0000346421 00000 n +0000478290 00000 n +0000346566 00000 n +0000348865 00000 n +0000486512 00000 n +0000478386 00000 n +0000349010 00000 n +0000351407 00000 n +0000478482 00000 n +0000351552 00000 n +0000353965 00000 n +0000478578 00000 n +0000354110 00000 n +0000357858 00000 n +0000478674 00000 n +0000358003 00000 n +0000361194 00000 n +0000478770 00000 n +0000361339 00000 n +0000364122 00000 n +0000478866 00000 n +0000364267 00000 n +0000366824 00000 n +0000486765 00000 n +0000478962 00000 n +0000366969 00000 n +0000369769 00000 n +0000479058 00000 n +0000369914 00000 n +0000372364 00000 n +0000479154 00000 n +0000372509 00000 n +0000374639 00000 n +0000479250 00000 n +0000374784 00000 n +0000377735 00000 n +0000479346 00000 n +0000377880 00000 n +0000380579 00000 n +0000479442 00000 n +0000380724 00000 n +0000383317 00000 n +0000487521 00000 n +0000486891 00000 n +0000479538 00000 n +0000383462 00000 n +0000385884 00000 n +0000479634 00000 n +0000386029 00000 n +0000388393 00000 n +0000479730 00000 n +0000388538 00000 n +0000390867 00000 n +0000479826 00000 n +0000391012 00000 n +0000393263 00000 n +0000479922 00000 n +0000393408 00000 n +0000395752 00000 n +0000480018 00000 n +0000395897 00000 n +0000398048 00000 n +0000487017 00000 n +0000480114 00000 n +0000398193 00000 n +0000399422 00000 n +0000480210 00000 n +0000399567 00000 n +0000401559 00000 n +0000480306 00000 n +0000401704 00000 n +0000403996 00000 n +0000480402 00000 n +0000404141 00000 n +0000406531 00000 n +0000480498 00000 n +0000406676 00000 n +0000409110 00000 n +0000480594 00000 n +0000409255 00000 n +0000411338 00000 n +0000487143 00000 n +0000480690 00000 n +0000411483 00000 n +0000413849 00000 n +0000480786 00000 n +0000413994 00000 n +0000416264 00000 n +0000480882 00000 n +0000416409 00000 n +0000418616 00000 n +0000480978 00000 n +0000418761 00000 n +0000421192 00000 n +0000481074 00000 n +0000421337 00000 n +0000423814 00000 n +0000481170 00000 n +0000423946 00000 n +0000426251 00000 n +0000487269 00000 n +0000481266 00000 n +0000426383 00000 n +0000428798 00000 n +0000481362 00000 n +0000428943 00000 n +0000431807 00000 n +0000481458 00000 n +0000431952 00000 n +0000434692 00000 n +0000481554 00000 n +0000434837 00000 n +0000437033 00000 n +0000481650 00000 n +0000437178 00000 n +0000437342 00000 n +0000481746 00000 n +0000437452 00000 n +0000439356 00000 n +0000487395 00000 n +0000481842 00000 n +0000439501 00000 n +0000441416 00000 n +0000481938 00000 n +0000441561 00000 n +0000443382 00000 n +0000482034 00000 n +0000443527 00000 n +0000445683 00000 n +0000482130 00000 n +0000445828 00000 n +0000448109 00000 n +0000482226 00000 n +0000448254 00000 n +0000450742 00000 n +0000482322 00000 n +0000450887 00000 n +0000453043 00000 n +0000487648 00000 n +0000482418 00000 n +0000453188 00000 n +0000455535 00000 n +0000482514 00000 n +0000455680 00000 n +0000457945 00000 n +0000482610 00000 n +0000458090 00000 n +0000458945 00000 n +0000482706 00000 n +0000459090 00000 n +0000460596 00000 n +0000482802 00000 n +0000460728 00000 n +0000460893 00000 n +0000482898 00000 n +0000461003 00000 n +0000461084 00000 n +0000487884 00000 n +0000487774 00000 n +0000482994 00000 n +0000461163 00000 n +0000461244 00000 n +0000483090 00000 n +0000461323 00000 n +0000462522 00000 n +0000483186 00000 n +0000462643 00000 n +0000463003 00000 n +0000463864 00000 n +0000488115 00000 n +0000488174 00000 n +trailer +<< +/Size 621 +/Root 619 0 R +/Info 620 0 R +/ID [<1902643d1c48f83d40180cfe4bafa32c><1902643d1c48f83d40180cfe4bafa32c>] +>> +startxref +488282 +%%EOF
19 years, 4 months
1
0
0
0
[hpoussin] 21586: Add some network-related GUIDs
by hpoussin@svn.reactos.org
Author: hpoussin Date: Fri Apr 14 14:03:58 2006 New Revision: 21586 URL:
http://svn.reactos.ru/svn/reactos?rev=21586&view=rev
Log: Add some network-related GUIDs Modified: trunk/reactos/include/devguid.h Modified: trunk/reactos/include/devguid.h URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/include/devguid.h?rev=21586…
============================================================================== --- trunk/reactos/include/devguid.h (original) +++ trunk/reactos/include/devguid.h Fri Apr 14 14:03:58 2006 @@ -19,3 +19,7 @@ DEFINE_GUID(GUID_DEVCLASS_KEYBOARD, 0x4D36E96B, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); DEFINE_GUID(GUID_DEVCLASS_MEDIA, 0x4D36E96C, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); DEFINE_GUID(GUID_DEVCLASS_MOUSE, 0x4D36E96F, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); +DEFINE_GUID(GUID_DEVCLASS_NET, 0x4D36E972, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); +DEFINE_GUID(GUID_DEVCLASS_NETCLIENT, 0x4D36E973, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); +DEFINE_GUID(GUID_DEVCLASS_NETSERVICE, 0x4D36E974, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18); +DEFINE_GUID(GUID_DEVCLASS_NETTRANS, 0x4D36E975, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);
19 years, 4 months
1
0
0
0
[greatlrd] 21585: Vendor import of ReiserDriver, read only drv, it contain a linux->windows warper for file system. url : http://rfsd.sourceforge.net/, licen GPL
by greatlrd@svn.reactos.org
Author: greatlrd Date: Fri Apr 14 13:01:12 2006 New Revision: 21585 URL:
http://svn.reactos.ru/svn/reactos?rev=21585&view=rev
Log: Vendor import of ReiserDriver, read only drv, it contain a linux->windows warper for file system. url :
http://rfsd.sourceforge.net/
, licen GPL Added: vendor/rfsd/ vendor/rfsd/current/ vendor/rfsd/current/CVS/ vendor/rfsd/current/CVS/Entries vendor/rfsd/current/CVS/Entries.Extra vendor/rfsd/current/CVS/Entries.Extra.Old vendor/rfsd/current/CVS/Entries.Old vendor/rfsd/current/CVS/Repository vendor/rfsd/current/CVS/Root vendor/rfsd/current/RFSD/ vendor/rfsd/current/RFSD/CVS/ vendor/rfsd/current/RFSD/CVS/Entries vendor/rfsd/current/RFSD/CVS/Entries.Extra vendor/rfsd/current/RFSD/CVS/Entries.Extra.Old vendor/rfsd/current/RFSD/CVS/Entries.Old vendor/rfsd/current/RFSD/CVS/Repository vendor/rfsd/current/RFSD/CVS/Root vendor/rfsd/current/RFSD/RFSD/ vendor/rfsd/current/RFSD/RFSD.ncb (with props) vendor/rfsd/current/RFSD/RFSD.sln vendor/rfsd/current/RFSD/RFSD.suo (with props) vendor/rfsd/current/RFSD/RFSD/CVS/ vendor/rfsd/current/RFSD/RFSD/CVS/Entries vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Extra vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Extra.Old vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Log vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Old vendor/rfsd/current/RFSD/RFSD/CVS/Repository vendor/rfsd/current/RFSD/RFSD/CVS/Root vendor/rfsd/current/RFSD/RFSD/MAKEFILE vendor/rfsd/current/RFSD/RFSD/RFSD.vcproj vendor/rfsd/current/RFSD/RFSD/Sources vendor/rfsd/current/RFSD/RFSD/block.c vendor/rfsd/current/RFSD/RFSD/cleanup.c vendor/rfsd/current/RFSD/RFSD/close.c vendor/rfsd/current/RFSD/RFSD/cmcb.c vendor/rfsd/current/RFSD/RFSD/create.c vendor/rfsd/current/RFSD/RFSD/debug.c vendor/rfsd/current/RFSD/RFSD/devctl.c vendor/rfsd/current/RFSD/RFSD/dircontrol.c vendor/rfsd/current/RFSD/RFSD/dispatch.c vendor/rfsd/current/RFSD/RFSD/except.c vendor/rfsd/current/RFSD/RFSD/fastio.c vendor/rfsd/current/RFSD/RFSD/fileinfo.c vendor/rfsd/current/RFSD/RFSD/flush.c vendor/rfsd/current/RFSD/RFSD/fsctl.c vendor/rfsd/current/RFSD/RFSD/fsparameters.h vendor/rfsd/current/RFSD/RFSD/init.c vendor/rfsd/current/RFSD/RFSD/linux/ vendor/rfsd/current/RFSD/RFSD/linux/CVS/ vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Extra vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Extra.Old vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Old vendor/rfsd/current/RFSD/RFSD/linux/CVS/Repository vendor/rfsd/current/RFSD/RFSD/linux/CVS/Root vendor/rfsd/current/RFSD/RFSD/linux/config.h vendor/rfsd/current/RFSD/RFSD/linux/errno.h vendor/rfsd/current/RFSD/RFSD/linux/kernel.h vendor/rfsd/current/RFSD/RFSD/linux/module.h vendor/rfsd/current/RFSD/RFSD/linux/nls.h vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_acl.h vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs.h vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_i.h vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_sb.h vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_xattr.h vendor/rfsd/current/RFSD/RFSD/linux/slab.h vendor/rfsd/current/RFSD/RFSD/linux/spinlock.h vendor/rfsd/current/RFSD/RFSD/linux/string.h vendor/rfsd/current/RFSD/RFSD/linux/types.h vendor/rfsd/current/RFSD/RFSD/linux/version.h vendor/rfsd/current/RFSD/RFSD/lock.c vendor/rfsd/current/RFSD/RFSD/memory.c vendor/rfsd/current/RFSD/RFSD/misc.c vendor/rfsd/current/RFSD/RFSD/nls/ vendor/rfsd/current/RFSD/RFSD/nls.c vendor/rfsd/current/RFSD/RFSD/nls/CVS/ vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Extra vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Extra.Old vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Old vendor/rfsd/current/RFSD/RFSD/nls/CVS/Repository vendor/rfsd/current/RFSD/RFSD/nls/CVS/Root vendor/rfsd/current/RFSD/RFSD/nls/MAKEFILE vendor/rfsd/current/RFSD/RFSD/nls/Sources vendor/rfsd/current/RFSD/RFSD/nls/nls_base.c vendor/rfsd/current/RFSD/RFSD/nls/nls_big5.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1251.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1255.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp437.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp737.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp775.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp850.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp852.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp855.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp857.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp860.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp861.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp862.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp863.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp864.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp865.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp866.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp869.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp874.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp932.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp936.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp949.c vendor/rfsd/current/RFSD/RFSD/nls/nls_cp950.c vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-jp.c vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-kr.c vendor/rfsd/current/RFSD/RFSD/nls/nls_gb2312.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-1.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-13.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-14.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-15.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-2.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-3.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-4.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-5.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-6.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-7.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-8.c vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-9.c vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-r.c vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-ru.c vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-u.c vendor/rfsd/current/RFSD/RFSD/nls/nls_sjis.c vendor/rfsd/current/RFSD/RFSD/nls/nls_tis-620.c vendor/rfsd/current/RFSD/RFSD/nls/nls_utf8.c vendor/rfsd/current/RFSD/RFSD/ntifs.h vendor/rfsd/current/RFSD/RFSD/pnp.c vendor/rfsd/current/RFSD/RFSD/protos.h vendor/rfsd/current/RFSD/RFSD/read.c vendor/rfsd/current/RFSD/RFSD/reiserfs.h vendor/rfsd/current/RFSD/RFSD/resource.h vendor/rfsd/current/RFSD/RFSD/rfsd.c vendor/rfsd/current/RFSD/RFSD/rfsdblock.c vendor/rfsd/current/RFSD/RFSD/rfsdfs.h vendor/rfsd/current/RFSD/RFSD/rfsdfsd.rc vendor/rfsd/current/RFSD/RFSD/rfsdfsd.reg vendor/rfsd/current/RFSD/RFSD/run-clean.bat vendor/rfsd/current/RFSD/RFSD/run-make-release.bat vendor/rfsd/current/RFSD/RFSD/run-make.bat vendor/rfsd/current/RFSD/RFSD/run-rebuild-all-release.bat vendor/rfsd/current/RFSD/RFSD/run-rebuild-all.bat vendor/rfsd/current/RFSD/RFSD/shutdown.c vendor/rfsd/current/RFSD/RFSD/volinfo.c vendor/rfsd/current/RFSD/RFSD/write.c vendor/rfsd/current/SampleFSD/ vendor/rfsd/current/SampleFSD/CVS/ vendor/rfsd/current/SampleFSD/CVS/Entries vendor/rfsd/current/SampleFSD/CVS/Entries.Extra vendor/rfsd/current/SampleFSD/CVS/Entries.Extra.Old vendor/rfsd/current/SampleFSD/CVS/Entries.Old vendor/rfsd/current/SampleFSD/CVS/Repository vendor/rfsd/current/SampleFSD/CVS/Root vendor/rfsd/current/SampleFSD/SampleFSD.sln vendor/rfsd/current/SampleFSD/filesys/ vendor/rfsd/current/SampleFSD/filesys/CVS/ vendor/rfsd/current/SampleFSD/filesys/CVS/Entries vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra.Old vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Old vendor/rfsd/current/SampleFSD/filesys/CVS/Repository vendor/rfsd/current/SampleFSD/filesys/CVS/Root vendor/rfsd/current/SampleFSD/filesys/event/ vendor/rfsd/current/SampleFSD/filesys/event/CVS/ vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Extra vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Extra.Old vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Old vendor/rfsd/current/SampleFSD/filesys/event/CVS/Repository vendor/rfsd/current/SampleFSD/filesys/event/CVS/Root vendor/rfsd/current/SampleFSD/filesys/event/MAKE-MC.BAT vendor/rfsd/current/SampleFSD/filesys/event/MAKEFILE vendor/rfsd/current/SampleFSD/filesys/event/MSG00001.bin (with props) vendor/rfsd/current/SampleFSD/filesys/event/README.TXT vendor/rfsd/current/SampleFSD/filesys/event/SOURCES vendor/rfsd/current/SampleFSD/filesys/event/dummy.c vendor/rfsd/current/SampleFSD/filesys/event/errmsg.msg vendor/rfsd/current/SampleFSD/filesys/event/errmsg.rc vendor/rfsd/current/SampleFSD/filesys/event/sfsdevnt.def vendor/rfsd/current/SampleFSD/filesys/filesys.vcproj vendor/rfsd/current/SampleFSD/filesys/inc/ vendor/rfsd/current/SampleFSD/filesys/inc/CVS/ vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Extra vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Extra.Old vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Old vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Repository vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Root vendor/rfsd/current/SampleFSD/filesys/inc/errmsg.h vendor/rfsd/current/SampleFSD/filesys/inc/ntifs.h vendor/rfsd/current/SampleFSD/filesys/inc/protos.h vendor/rfsd/current/SampleFSD/filesys/inc/sfsd.h vendor/rfsd/current/SampleFSD/filesys/inc/struct.h vendor/rfsd/current/SampleFSD/filesys/readme.txt vendor/rfsd/current/SampleFSD/filesys/readme1.txt vendor/rfsd/current/SampleFSD/filesys/run-make.bat vendor/rfsd/current/SampleFSD/filesys/sfsd.reg vendor/rfsd/current/SampleFSD/filesys/src/ vendor/rfsd/current/SampleFSD/filesys/src/CVS/ vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Extra vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Extra.Old vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Old vendor/rfsd/current/SampleFSD/filesys/src/CVS/Repository vendor/rfsd/current/SampleFSD/filesys/src/CVS/Root vendor/rfsd/current/SampleFSD/filesys/src/cleanup.c vendor/rfsd/current/SampleFSD/filesys/src/close.c vendor/rfsd/current/SampleFSD/filesys/src/create.c vendor/rfsd/current/SampleFSD/filesys/src/debug.c vendor/rfsd/current/SampleFSD/filesys/src/devcntrl.c vendor/rfsd/current/SampleFSD/filesys/src/dircntrl.c vendor/rfsd/current/SampleFSD/filesys/src/fastio.c vendor/rfsd/current/SampleFSD/filesys/src/fileinfo.c vendor/rfsd/current/SampleFSD/filesys/src/flush.c vendor/rfsd/current/SampleFSD/filesys/src/fscontrol.c vendor/rfsd/current/SampleFSD/filesys/src/makefile vendor/rfsd/current/SampleFSD/filesys/src/misc.c vendor/rfsd/current/SampleFSD/filesys/src/read.c vendor/rfsd/current/SampleFSD/filesys/src/sfsdinit.c vendor/rfsd/current/SampleFSD/filesys/src/shutdown.c vendor/rfsd/current/SampleFSD/filesys/src/sources vendor/rfsd/current/SampleFSD/filesys/src/write.c vendor/rfsd/current/readme.txt Added: vendor/rfsd/current/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/CVS/Entries?rev=21585…
============================================================================== --- vendor/rfsd/current/CVS/Entries (added) +++ vendor/rfsd/current/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,3 @@ +/readme.txt/1.1/Thu Jun 30 18:42:49 2005// +D/RFSD//// +D/SampleFSD//// Added: vendor/rfsd/current/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/CVS/Entries.Extra?rev…
============================================================================== --- vendor/rfsd/current/CVS/Entries.Extra (added) +++ vendor/rfsd/current/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,3 @@ +/readme.txt////*/// +D/RFSD/////// +D/SampleFSD/////// Added: vendor/rfsd/current/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/CVS/Entries.Extra.Old…
============================================================================== --- vendor/rfsd/current/CVS/Entries.Extra.Old (added) +++ vendor/rfsd/current/CVS/Entries.Extra.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +/readme.txt////*/// Added: vendor/rfsd/current/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/CVS/Entries.Old?rev=2…
============================================================================== --- vendor/rfsd/current/CVS/Entries.Old (added) +++ vendor/rfsd/current/CVS/Entries.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +/readme.txt/1.1/Thu Jun 30 18:42:49 2005// +D Added: vendor/rfsd/current/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/CVS/Repository?rev=21…
============================================================================== --- vendor/rfsd/current/CVS/Repository (added) +++ vendor/rfsd/current/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code Added: vendor/rfsd/current/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/CVS/Root?rev=21585&vi…
============================================================================== --- vendor/rfsd/current/CVS/Root (added) +++ vendor/rfsd/current/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/RFSD/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/CVS/Entries?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/CVS/Entries (added) +++ vendor/rfsd/current/RFSD/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,4 @@ +/RFSD.ncb/1.1/Tue Jul 26 21:33:10 2005/-kb/ +/RFSD.sln/1.1/Tue Jul 26 21:19:30 2005// +/RFSD.suo/1.2/Tue Jul 26 21:33:10 2005/-kb/ +D/RFSD//// Added: vendor/rfsd/current/RFSD/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/CVS/Entries.Extr…
============================================================================== --- vendor/rfsd/current/RFSD/CVS/Entries.Extra (added) +++ vendor/rfsd/current/RFSD/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,4 @@ +/RFSD.ncb////*/// +/RFSD.sln////*/// +/RFSD.suo////*/// +D/RFSD/////// Added: vendor/rfsd/current/RFSD/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/CVS/Entries.Extr…
============================================================================== --- vendor/rfsd/current/RFSD/CVS/Entries.Extra.Old (added) +++ vendor/rfsd/current/RFSD/CVS/Entries.Extra.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,3 @@ +/RFSD.ncb////*/// +/RFSD.sln////*/// +/RFSD.suo////*/// Added: vendor/rfsd/current/RFSD/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/CVS/Entries.Old?…
============================================================================== --- vendor/rfsd/current/RFSD/CVS/Entries.Old (added) +++ vendor/rfsd/current/RFSD/CVS/Entries.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,4 @@ +/RFSD.ncb/1.1/Tue Jul 26 21:33:10 2005/-kb/ +/RFSD.sln/1.1/Tue Jul 26 21:19:30 2005// +/RFSD.suo/1.2/Tue Jul 26 21:33:10 2005/-kb/ +D Added: vendor/rfsd/current/RFSD/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/CVS/Repository?r…
============================================================================== --- vendor/rfsd/current/RFSD/CVS/Repository (added) +++ vendor/rfsd/current/RFSD/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/RFSD Added: vendor/rfsd/current/RFSD/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/CVS/Root?rev=215…
============================================================================== --- vendor/rfsd/current/RFSD/CVS/Root (added) +++ vendor/rfsd/current/RFSD/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/RFSD/RFSD.ncb URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD.ncb?rev=215…
============================================================================== Binary file - no diff available. Propchange: vendor/rfsd/current/RFSD/RFSD.ncb ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: vendor/rfsd/current/RFSD/RFSD.sln URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD.sln?rev=215…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD.sln (added) +++ vendor/rfsd/current/RFSD/RFSD.sln Fri Apr 14 13:01:12 2006 @@ -1,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RFSD", "RFSD\RFSD.vcproj", "{D3C24D7D-6111-41DE-9F4D-4C823495D81C}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {D3C24D7D-6111-41DE-9F4D-4C823495D81C}.Debug.ActiveCfg = Debug|Win32 + {D3C24D7D-6111-41DE-9F4D-4C823495D81C}.Debug.Build.0 = Debug|Win32 + {D3C24D7D-6111-41DE-9F4D-4C823495D81C}.Release.ActiveCfg = Release|Win32 + {D3C24D7D-6111-41DE-9F4D-4C823495D81C}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal Added: vendor/rfsd/current/RFSD/RFSD.suo URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD.suo?rev=215…
============================================================================== Binary file - no diff available. Propchange: vendor/rfsd/current/RFSD/RFSD.suo ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: vendor/rfsd/current/RFSD/RFSD/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/CVS/Entries (added) +++ vendor/rfsd/current/RFSD/RFSD/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,43 @@ +/MAKEFILE/1.1/Tue Jul 26 21:19:31 2005// +/RFSD.vcproj/1.2/Mon Aug 1 03:31:01 2005// +/Sources/1.1/Tue Jul 26 21:19:31 2005// +/block.c/1.1/Tue Jul 26 21:19:31 2005// +/cleanup.c/1.1/Tue Jul 26 21:19:31 2005// +/close.c/1.1/Tue Jul 26 21:19:31 2005// +/cmcb.c/1.1/Tue Jul 26 21:19:31 2005// +/create.c/1.7/Mon Aug 1 03:31:01 2005// +/debug.c/1.1/Tue Jul 26 21:19:31 2005// +/devctl.c/1.1/Tue Jul 26 21:19:31 2005// +/dircontrol.c/1.9/Mon Aug 1 03:31:01 2005// +/dispatch.c/1.1/Tue Jul 26 21:19:31 2005// +/except.c/1.2/Sat Jul 30 22:47:43 2005// +/fastio.c/1.1/Tue Jul 26 21:19:31 2005// +/fileinfo.c/1.4/Mon Aug 1 03:31:01 2005// +/flush.c/1.1/Tue Jul 26 21:19:31 2005// +/fsctl.c/1.3/Thu Jul 28 16:11:33 2005// +/fsparameters.h/1.4/Sat Jul 30 22:47:43 2005// +/init.c/1.1/Tue Jul 26 21:19:31 2005// +/lock.c/1.1/Tue Jul 26 21:19:31 2005// +/memory.c/1.5/Mon Aug 1 03:31:02 2005// +/misc.c/1.2/Sun Jul 31 16:38:01 2005// +/nls.c/1.1/Tue Jul 26 21:19:31 2005// +/ntifs.h/1.1/Tue Jul 26 21:19:31 2005// +/pnp.c/1.1/Tue Jul 26 21:19:32 2005// +/protos.h/1.4/Mon Aug 1 03:31:02 2005// +/read.c/1.4/Sun Jul 31 16:38:01 2005// +/reiserfs.h/1.1/Tue Jul 26 21:19:32 2005// +/resource.h/1.1/Tue Jul 26 21:19:42 2005// +/rfsd.c/1.6/Mon Aug 1 03:31:02 2005// +/rfsdblock.c/1.2/Sat Jul 30 22:47:43 2005// +/rfsdfs.h/1.2/Thu Jul 28 16:11:33 2005// +/rfsdfsd.rc/1.1/Tue Jul 26 21:19:42 2005// +/rfsdfsd.reg/1.1/Tue Jul 26 21:19:42 2005// +/run-clean.bat/1.2/Mon Aug 1 03:31:02 2005// +/run-make-release.bat/1.1/Mon Aug 1 03:32:04 2005// +/run-make.bat/1.2/Sun Jul 31 05:12:51 2005// +/run-rebuild-all-release.bat/1.1/Mon Aug 1 03:32:04 2005// +/run-rebuild-all.bat/1.1/Tue Jul 26 21:19:42 2005// +/shutdown.c/1.1/Tue Jul 26 21:19:42 2005// +/volinfo.c/1.2/Mon Aug 1 03:31:02 2005// +/write.c/1.1/Tue Jul 26 21:19:42 2005// +D Added: vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Extra (added) +++ vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,42 @@ +/MAKEFILE////*/// +/RFSD.vcproj////*/// +/Sources////*/// +/block.c////*/// +/cleanup.c////*/// +/close.c////*/// +/cmcb.c////*/// +/create.c////*/// +/debug.c////*/// +/devctl.c////*/// +/dircontrol.c////*/// +/dispatch.c////*/// +/except.c////*/// +/fastio.c////*/// +/fileinfo.c////*/// +/flush.c////*/// +/fsctl.c////*/// +/fsparameters.h////*/// +/init.c////*/// +/lock.c////*/// +/memory.c////*/// +/misc.c////*/// +/nls.c////*/// +/ntifs.h////*/// +/pnp.c////*/// +/protos.h////*/// +/read.c////*/// +/reiserfs.h////*/// +/resource.h////*/// +/rfsd.c////*/// +/rfsdblock.c////*/// +/rfsdfs.h////*/// +/rfsdfsd.rc////*/// +/rfsdfsd.reg////*/// +/run-clean.bat////*/// +/run-make-release.bat////*/// +/run-make.bat////*/// +/run-rebuild-all-release.bat////*/// +/run-rebuild-all.bat////*/// +/shutdown.c////*/// +/volinfo.c////*/// +/write.c////*/// Added: vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Entries…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Log URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Log (added) +++ vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Log Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +A D/linux//// +A D/nls//// Added: vendor/rfsd/current/RFSD/RFSD/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Entries…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Reposit…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/CVS/Repository (added) +++ vendor/rfsd/current/RFSD/RFSD/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/RFSD/RFSD Added: vendor/rfsd/current/RFSD/RFSD/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/CVS/Root?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/CVS/Root (added) +++ vendor/rfsd/current/RFSD/RFSD/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/RFSD/RFSD/MAKEFILE URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/MAKEFILE?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/MAKEFILE (added) +++ vendor/rfsd/current/RFSD/RFSD/MAKEFILE Fri Apr 14 13:01:12 2006 @@ -1,0 +1,7 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the driver components of the Windows NT DDK +# + +!INCLUDE $(NTMAKEENV)\makefile.def Added: vendor/rfsd/current/RFSD/RFSD/RFSD.vcproj URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/RFSD.vcproj…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/RFSD.vcproj (added) +++ vendor/rfsd/current/RFSD/RFSD/RFSD.vcproj Fri Apr 14 13:01:12 2006 @@ -1,0 +1,161 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="RFSD" + ProjectGUID="{D3C24D7D-6111-41DE-9F4D-4C823495D81C}" + Keyword="MakeFileProj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="run-make.bat" + ReBuildCommandLine="run-rebuild-all.bat" + CleanCommandLine="run-clean.bat" + Output="RFSD.exe"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="run-make-release.bat" + ReBuildCommandLine="run-rebuild-all-release.bat" + CleanCommandLine="run-clean.bat" + Output="RFSD.exe"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath=".\block.c"> + </File> + <File + RelativePath=".\cleanup.c"> + </File> + <File + RelativePath=".\close.c"> + </File> + <File + RelativePath=".\cmcb.c"> + </File> + <File + RelativePath=".\create.c"> + </File> + <File + RelativePath=".\debug.c"> + </File> + <File + RelativePath=".\devctl.c"> + </File> + <File + RelativePath=".\dircontrol.c"> + </File> + <File + RelativePath=".\dispatch.c"> + </File> + <File + RelativePath=".\except.c"> + </File> + <File + RelativePath=".\fastio.c"> + </File> + <File + RelativePath=".\fileinfo.c"> + </File> + <File + RelativePath=".\flush.c"> + </File> + <File + RelativePath=".\fsctl.c"> + </File> + <File + RelativePath=".\init.c"> + </File> + <File + RelativePath=".\lock.c"> + </File> + <File + RelativePath=".\memory.c"> + </File> + <File + RelativePath=".\misc.c"> + </File> + <File + RelativePath=".\nls.c"> + </File> + <File + RelativePath=".\pnp.c"> + </File> + <File + RelativePath=".\read.c"> + </File> + <File + RelativePath=".\rfsd.c"> + </File> + <File + RelativePath=".\rfsdblock.c"> + </File> + <File + RelativePath=".\shutdown.c"> + </File> + <File + RelativePath=".\volinfo.c"> + </File> + <File + RelativePath=".\write.c"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> + <File + RelativePath=".\fsparameters.h"> + </File> + <File + RelativePath=".\ntifs.h"> + </File> + <File + RelativePath=".\protos.h"> + </File> + <File + RelativePath=".\reiserfs.h"> + </File> + <File + RelativePath=".\resource.h"> + </File> + <File + RelativePath=".\rfsdfs.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> + <File + RelativePath=".\rfsdfsd.rc"> + </File> + </Filter> + <File + RelativePath=".\readme.txt"> + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Added: vendor/rfsd/current/RFSD/RFSD/Sources URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/Sources?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/Sources (added) +++ vendor/rfsd/current/RFSD/RFSD/Sources Fri Apr 14 13:01:12 2006 @@ -1,0 +1,34 @@ +# +# Sources for Rfsd file system driver for windows +# mattwu(a)163.com /
http://rfsdfsd.sf.net
+# + +# Name and type of the output file: +TARGETNAME=rfsdfsd +TARGETTYPE=DRIVER +TARGETPATH=.\$(DDKBUILDENV) + +# Creates a file used by Visual Studio to navigate the source code. +# BROWSER_INFO=FALSE +RCNOFONTMAP=TRUE + +INCLUDES=.; +TARGETLIBS=$(TARGETPATH)\*\nlssup.lib + +# The source code: +SOURCES=Rfsdfsd.rc \ + fastio.c memory.c close.c dircontrol.c except.c \ + read.c misc.c devctl.c volinfo.c lock.c \ + cleanup.c block.c cmcb.c fileinfo.c dispatch.c \ + init.c debug.c create.c rfsd.c fsctl.c \ + pnp.c flush.c shutdown.c nls.c \ + rfsdblock.c + + +#SOURCES=Rfsdfsd.rc \ +# fastio.c memory.c close.c dirctl.c except.c \ +# read.c misc.c devctl.c volinfo.c lock.c \ +# cleanup.c block.c cmcb.c fileinfo.c dispatch.c \ +# init.c debug.c create.c rfsd.c fsctl.c \ +# pnp.c write.c flush.c shutdown.c nls.c + Added: vendor/rfsd/current/RFSD/RFSD/block.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/block.c?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/block.c (added) +++ vendor/rfsd/current/RFSD/RFSD/block.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,648 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: block.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +typedef struct _RFSD_RW_CONTEXT { + PIRP MasterIrp; + KEVENT Event; + BOOLEAN Wait; + ULONG Blocks; + ULONG Length; +} RFSD_RW_CONTEXT, *PRFSD_RW_CONTEXT; + + +NTSTATUS +RfsdReadWriteBlockSyncCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context ); + +NTSTATUS +RfsdReadWriteBlockAsyncCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context ); + + +NTSTATUS +RfsdMediaEjectControlCompletion ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Contxt ); + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdLockUserBuffer) +#pragma alloc_text(PAGE, RfsdGetUserBuffer) +#pragma alloc_text(PAGE, RfsdReadSync) +#pragma alloc_text(PAGE, RfsdReadDisk) +#pragma alloc_text(PAGE, RfsdDiskIoControl) +#pragma alloc_text(PAGE, RfsdReadWriteBlocks) +#pragma alloc_text(PAGE, RfsdMediaEjectControl) +#pragma alloc_text(PAGE, RfsdDiskShutDown) +#endif + + +/* FUNCTIONS ***************************************************************/ + + +NTSTATUS +RfsdLockUserBuffer (IN PIRP Irp, + IN ULONG Length, + IN LOCK_OPERATION Operation) +{ + NTSTATUS Status; + + ASSERT(Irp != NULL); + + if (Irp->MdlAddress != NULL) { + + return STATUS_SUCCESS; + } + + IoAllocateMdl(Irp->UserBuffer, Length, FALSE, FALSE, Irp); + + if (Irp->MdlAddress == NULL) { + + return STATUS_INSUFFICIENT_RESOURCES; + } + + __try { + + MmProbeAndLockPages(Irp->MdlAddress, Irp->RequestorMode, Operation); + + Status = STATUS_SUCCESS; + } __except (EXCEPTION_EXECUTE_HANDLER) { + + IoFreeMdl(Irp->MdlAddress); + + Irp->MdlAddress = NULL; + + DbgBreak(); + + Status = STATUS_INVALID_USER_BUFFER; + } + + return Status; +} + +PVOID +RfsdGetUserBuffer (IN PIRP Irp ) +{ + ASSERT(Irp != NULL); + + if (Irp->MdlAddress) { + +#if (_WIN32_WINNT >= 0x0500) + return MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); +#else + return MmGetSystemAddressForMdl(Irp->MdlAddress); +#endif + } else { + + return Irp->UserBuffer; + } +} + +NTSTATUS +RfsdReadWriteBlockSyncCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context ) +{ + PRFSD_RW_CONTEXT pContext = (PRFSD_RW_CONTEXT)Context; + + if (!NT_SUCCESS( Irp->IoStatus.Status )) { + DbgBreak(); // [mark] + pContext->MasterIrp->IoStatus = Irp->IoStatus; + } + + IoFreeMdl( Irp->MdlAddress ); + IoFreeIrp( Irp ); + + if (InterlockedDecrement(&pContext->Blocks) == 0) { + + pContext->MasterIrp->IoStatus.Information = 0; + + if (NT_SUCCESS(pContext->MasterIrp->IoStatus.Status)) { + + pContext->MasterIrp->IoStatus.Information = + pContext->Length; + } + + KeSetEvent( &pContext->Event, 0, FALSE ); + } + + UNREFERENCED_PARAMETER( DeviceObject ); + + return STATUS_MORE_PROCESSING_REQUIRED; +} + +NTSTATUS +RfsdReadWriteBlockAsyncCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context + ) +{ + PRFSD_RW_CONTEXT pContext = (PRFSD_RW_CONTEXT)Context; + + if (!NT_SUCCESS( Irp->IoStatus.Status )) { + DbgBreak(); // [mark] + pContext->MasterIrp->IoStatus = Irp->IoStatus; + } + + if (InterlockedDecrement(&pContext->Blocks) == 0) { + + pContext->MasterIrp->IoStatus.Information = 0; + + if (NT_SUCCESS(pContext->MasterIrp->IoStatus.Status)) { + + pContext->MasterIrp->IoStatus.Information = + pContext->Length; + } + + IoMarkIrpPending( pContext->MasterIrp ); + + ExFreePool(pContext); + } + + UNREFERENCED_PARAMETER( DeviceObject ); + + return STATUS_SUCCESS; + +} +// Looks like this is really just getting an MDL (memory descriptor list) from the MM and doing its business... +// ... but IoCallDriver is what will actually read from the disk device to furnish non-chached or paging IO operations! +// NOTE: It is vital that IoCallDriver use sector-aligned offset and length (otherwise, 0xc000000d = STATUS_INVALID_PARAMETER) will result! +NTSTATUS +RfsdReadWriteBlocks( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_BDL RfsdBDL, // The block-description list + IN ULONG Length, // Length of data to read + IN ULONG Count, // Count of blocks inside the BDL + IN BOOLEAN bVerify ) +{ + PMDL Mdl; + PIRP Irp; + PIRP MasterIrp = IrpContext->Irp; + PIO_STACK_LOCATION IrpSp; + NTSTATUS Status = STATUS_SUCCESS; + PRFSD_RW_CONTEXT pContext = NULL; + ULONG i; + BOOLEAN bBugCheck = FALSE; + + ASSERT(MasterIrp); + + __try { + + pContext = ExAllocatePool(NonPagedPool, sizeof(RFSD_RW_CONTEXT)); + + if (!pContext) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + RtlZeroMemory(pContext, sizeof(RFSD_RW_CONTEXT)); + + pContext->Wait = IrpContext->IsSynchronous; + pContext->MasterIrp = MasterIrp; + pContext->Blocks = Count; + pContext->Length = 0; + + if (pContext->Wait) { + KeInitializeEvent(&(pContext->Event), NotificationEvent, FALSE); + } + + for (i = 0; i < Count; i++) { + + Irp = IoMakeAssociatedIrp( + MasterIrp, + (CCHAR)(Vcb->TargetDeviceObject->StackSize + 1) ); + + if (!Irp) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + Mdl = IoAllocateMdl( (PCHAR)MasterIrp->UserBuffer + + RfsdBDL[i].Offset, + RfsdBDL[i].Length, + FALSE, + FALSE, + Irp ); + + if (!Mdl) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + IoBuildPartialMdl( MasterIrp->MdlAddress, + Mdl, + (PCHAR)MasterIrp->UserBuffer + RfsdBDL[i].Offset, + RfsdBDL[i].Length ); + + IoSetNextIrpStackLocation( Irp ); + IrpSp = IoGetCurrentIrpStackLocation( Irp ); + + + IrpSp->MajorFunction = IrpContext->MajorFunction; + IrpSp->Parameters.Read.Length = RfsdBDL[i].Length; + IrpSp->Parameters.Read.ByteOffset.QuadPart = RfsdBDL[i].Lba; + + IoSetCompletionRoutine( + Irp, + ((IrpContext->IsSynchronous) ? + (&RfsdReadWriteBlockSyncCompletionRoutine) : + (&RfsdReadWriteBlockAsyncCompletionRoutine)), + (PVOID) pContext, + TRUE, + TRUE, + TRUE ); + + IrpSp = IoGetNextIrpStackLocation( Irp ); + + IrpSp->MajorFunction = IrpContext->MajorFunction; + IrpSp->Parameters.Read.Length = RfsdBDL[i].Length; + IrpSp->Parameters.Read.ByteOffset.QuadPart = RfsdBDL[i].Lba; + + if (bVerify) { + SetFlag( IrpSp->Flags, SL_OVERRIDE_VERIFY_VOLUME ); + } + + RfsdBDL[i].Irp = Irp; + } + + MasterIrp->AssociatedIrp.IrpCount = Count; + + if (IrpContext->IsSynchronous) { + MasterIrp->AssociatedIrp.IrpCount += 1; + } + + pContext->Length = Length; + + bBugCheck = TRUE; + + for (i = 0; i < Count; i++) { + Status = IoCallDriver ( Vcb->TargetDeviceObject, + RfsdBDL[i].Irp); + } + + if (IrpContext->IsSynchronous) { + KeWaitForSingleObject( &(pContext->Event), + Executive, KernelMode, FALSE, NULL ); + + KeClearEvent( &(pContext->Event) ); + } + + } __finally { + + if (IrpContext->IsSynchronous) { + if (MasterIrp) + Status = MasterIrp->IoStatus.Status; + + if (pContext) + ExFreePool(pContext); + + } else { + IrpContext->Irp = NULL; + Status = STATUS_PENDING; + } + + if (AbnormalTermination()) { + if (bBugCheck) { + RfsdBugCheck(RFSD_BUGCHK_BLOCK, 0, 0, 0); + } + + for (i = 0; i < Count; i++) { + if (RfsdBDL[i].Irp != NULL ) { + if ( RfsdBDL[i].Irp->MdlAddress != NULL ) { + IoFreeMdl( RfsdBDL[i].Irp->MdlAddress ); + } + + IoFreeIrp( RfsdBDL[i].Irp ); + } + } + } + } + + return Status; +} + + +NTSTATUS +RfsdReadSync( + IN PRFSD_VCB Vcb, + IN ULONGLONG Offset, + IN ULONG Length, + OUT PVOID Buffer, + BOOLEAN bVerify + ) +{ + PKEVENT Event = NULL; + + PIRP Irp; + IO_STATUS_BLOCK IoStatus; + NTSTATUS Status; + + + ASSERT(Vcb != NULL); + ASSERT(Vcb->TargetDeviceObject != NULL); + ASSERT(Buffer != NULL); + + __try { + + Event = ExAllocatePool(NonPagedPool, sizeof(KEVENT)); + + if (NULL == Event) { + __leave; + } + + KeInitializeEvent(Event, NotificationEvent, FALSE); + + Irp = IoBuildSynchronousFsdRequest( + IRP_MJ_READ, + Vcb->TargetDeviceObject, + Buffer, + Length, + (PLARGE_INTEGER)(&Offset), + Event, + &IoStatus + ); + + if (!Irp) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + if (bVerify) { + SetFlag( IoGetNextIrpStackLocation(Irp)->Flags, + SL_OVERRIDE_VERIFY_VOLUME ); + } + + Status = IoCallDriver(Vcb->TargetDeviceObject, Irp); + + if (Status == STATUS_PENDING) { + KeWaitForSingleObject( + Event, + Suspended, + KernelMode, + FALSE, + NULL + ); + + Status = IoStatus.Status; + } + + } __finally { + + if (Event) { + ExFreePool(Event); + } + } + + return Status; +} + + +NTSTATUS +RfsdReadDisk( + IN PRFSD_VCB Vcb, + IN ULONGLONG Offset, // Byte offset (relative to disk) to read from (need not be sector-aligned!) + IN ULONG Size, + IN OUT PVOID Buffer, + IN BOOLEAN bVerify ) // True if the volume should be verified before reading +{ + NTSTATUS Status; + PUCHAR Buf; + ULONG Length; + ULONGLONG Lba; + + // Align the offset and length to the sector boundaries + Lba = Offset & (~((ULONGLONG)SECTOR_SIZE - 1)); + Length = (ULONG)(Size + Offset + SECTOR_SIZE - 1 - Lba) & + (~((ULONG)SECTOR_SIZE - 1)); + + // Allocate a temporary buffer to read the sector-aligned data into + Buf = ExAllocatePool(PagedPool, Length); + if (!Buf) { + RfsdPrint((DBG_ERROR, "RfsdReadDisk: no enough memory.\n")); + Status = STATUS_INSUFFICIENT_RESOURCES; + + goto errorout; + } + + // Read the data + Status = RfsdReadSync( Vcb, + Lba, + Length, + Buf, + FALSE ); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, "RfsdReadDisk: Read Block Device error.\n")); + + goto errorout; + } + + // Copy the requested data into the user's buffer + RtlCopyMemory(Buffer, &Buf[Offset - Lba], Size); + +errorout: + + if (Buf) + ExFreePool(Buf); + + return Status; +} + + +NTSTATUS +RfsdDiskIoControl ( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG IoctlCode, + IN PVOID InputBuffer, + IN ULONG InputBufferSize, + IN OUT PVOID OutputBuffer, + IN OUT PULONG OutputBufferSize) +{ + ULONG OutBufferSize = 0; + KEVENT Event; + PIRP Irp; + IO_STATUS_BLOCK IoStatus; + NTSTATUS Status; + + ASSERT(DeviceObject != NULL); + + if (OutputBufferSize) + { + OutBufferSize = *OutputBufferSize; + } + + KeInitializeEvent(&Event, NotificationEvent, FALSE); + + Irp = IoBuildDeviceIoControlRequest( + IoctlCode, + DeviceObject, + InputBuffer, + InputBufferSize, + OutputBuffer, + OutBufferSize, + FALSE, + &Event, + &IoStatus + ); + + if (Irp == NULL) { + RfsdPrint((DBG_ERROR, "RfsdDiskIoControl: Building IRQ error!\n")); + return STATUS_INSUFFICIENT_RESOURCES; + } + + Status = IoCallDriver(DeviceObject, Irp); + + if (Status == STATUS_PENDING) { + KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); + Status = IoStatus.Status; + } + + if (OutputBufferSize) { + *OutputBufferSize = IoStatus.Information; + } + + return Status; +} + + +NTSTATUS +RfsdMediaEjectControlCompletion ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Contxt + ) +{ + PKEVENT Event = (PKEVENT)Contxt; + + KeSetEvent( Event, 0, FALSE ); + + UNREFERENCED_PARAMETER( DeviceObject ); + + return STATUS_SUCCESS; +} + +VOID +RfsdMediaEjectControl ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN BOOLEAN bPrevent + ) +{ + PIRP Irp; + KEVENT Event; + NTSTATUS Status; + PREVENT_MEDIA_REMOVAL Prevent; + IO_STATUS_BLOCK IoStatus; + + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + TRUE ); + + if (bPrevent != IsFlagOn(Vcb->Flags, VCB_REMOVAL_PREVENTED)) { + if (bPrevent) { + SetFlag(Vcb->Flags, VCB_REMOVAL_PREVENTED); + } else { + ClearFlag(Vcb->Flags, VCB_REMOVAL_PREVENTED); + } + } + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + + Prevent.PreventMediaRemoval = bPrevent; + + KeInitializeEvent( &Event, NotificationEvent, FALSE ); + + Irp = IoBuildDeviceIoControlRequest( IOCTL_DISK_MEDIA_REMOVAL, + Vcb->TargetDeviceObject, + &Prevent, + sizeof(PREVENT_MEDIA_REMOVAL), + NULL, + 0, + FALSE, + NULL, + &IoStatus ); + + if (Irp != NULL) { + IoSetCompletionRoutine( Irp, + RfsdMediaEjectControlCompletion, + &Event, + TRUE, + TRUE, + TRUE ); + + Status = IoCallDriver(Vcb->TargetDeviceObject, Irp); + + if (Status == STATUS_PENDING) { + Status = KeWaitForSingleObject( &Event, + Executive, + KernelMode, + FALSE, + NULL ); + } + } +} + + +NTSTATUS +RfsdDiskShutDown(PRFSD_VCB Vcb) +{ + PIRP Irp; + KEVENT Event; + + NTSTATUS Status; + IO_STATUS_BLOCK IoStatus; + + KeInitializeEvent(&Event, NotificationEvent, FALSE); + + Irp = IoBuildSynchronousFsdRequest(IRP_MJ_SHUTDOWN, + Vcb->TargetDeviceObject, + NULL, + 0, + NULL, + &Event, + &IoStatus); + + if (Irp) { + Status = IoCallDriver(Vcb->TargetDeviceObject, Irp); + + if (Status == STATUS_PENDING) { + KeWaitForSingleObject(&Event, + Executive, + KernelMode, + FALSE, + NULL); + + Status = IoStatus.Status; + } + } else { + Status = IoStatus.Status; + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/cleanup.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/cleanup.c?r…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/cleanup.c (added) +++ vendor/rfsd/current/RFSD/RFSD/cleanup.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,329 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: cleanup.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdCleanup) +#endif + + +NTSTATUS +RfsdCleanup (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_SUCCESS; + PRFSD_VCB Vcb; + BOOLEAN VcbResourceAcquired = FALSE; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + BOOLEAN FcbResourceAcquired = FALSE; + BOOLEAN FcbPagingIoAcquired = FALSE; + PRFSD_CCB Ccb; + PIRP Irp; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_SUCCESS; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + if (!IsFlagOn(Vcb->Flags, VCB_INITIALIZED)) { + Status = STATUS_SUCCESS; + __leave; + } + + if (!ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + IrpContext->IsSynchronous + )) { + Status = STATUS_PENDING; + __leave; + } + + VcbResourceAcquired = TRUE; + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + if (!Fcb) { + Status = STATUS_SUCCESS; + __leave; + } + + if (Fcb->Identifier.Type == RFSDVCB) { + if (IsFlagOn(Vcb->Flags, VCB_VOLUME_LOCKED) && + (Vcb->LockFile == FileObject) ) { + ClearFlag(Vcb->Flags, VCB_VOLUME_LOCKED); + Vcb->LockFile = NULL; + + RfsdClearVpbFlag(Vcb->Vpb, VPB_LOCKED); + } + + Vcb->OpenHandleCount--; + + if (!Vcb->OpenHandleCount) { + IoRemoveShareAccess(FileObject, &Vcb->ShareAccess); + } + + Status = STATUS_SUCCESS; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + +/* + if ( !IsFlagOn(Vcb->Flags, VCB_READ_ONLY) && + !IsFlagOn(Fcb->Flags, FCB_PAGE_FILE)) +*/ + { + if (!ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + IrpContext->IsSynchronous + )) + { + Status = STATUS_PENDING; + __leave; + } + + FcbResourceAcquired = TRUE; + } + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + if (!Ccb) { + Status = STATUS_SUCCESS; + __leave; + } + + if (IsFlagOn(FileObject->Flags, FO_CLEANUP_COMPLETE)) { + if ( IsFlagOn(FileObject->Flags, FO_FILE_MODIFIED) && + IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK) && + !IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED) ) { + Status = RfsdFlushFile(Fcb); + } + __leave; + } + + ASSERT((Ccb->Identifier.Type == RFSDCCB) && + (Ccb->Identifier.Size == sizeof(RFSD_CCB))); + Irp = IrpContext->Irp; + + Fcb->OpenHandleCount--; + + if (!IsFlagOn(FileObject->Flags, FO_CACHE_SUPPORTED )) { + Fcb->NonCachedOpenCount--; + } + + Vcb->OpenFileHandleCount--; + + if (IsFlagOn(Fcb->Flags, FCB_DELETE_ON_CLOSE)) { + SetFlag(Fcb->Flags, FCB_DELETE_PENDING); + + if (IsDirectory(Fcb)) { + FsRtlNotifyFullChangeDirectory( + Vcb->NotifySync, + &Vcb->NotifyList, + Fcb, + NULL, + FALSE, + FALSE, + 0, + NULL, + NULL, + NULL ); + } + } + + if (IsDirectory(Fcb)) { + + FsRtlNotifyCleanup( + Vcb->NotifySync, + &Vcb->NotifyList, + Ccb ); + + } else { + + // + // Drop any byte range locks this process may have on the file. + // + + FsRtlFastUnlockAll( + &Fcb->FileLockAnchor, + FileObject, + IoGetRequestorProcess(Irp), + NULL ); + + // + // If there are no byte range locks owned by other processes on the + // file the fast I/O read/write functions doesn't have to check for + // locks so we set IsFastIoPossible to FastIoIsPossible again. + // + if (!FsRtlGetNextFileLock(&Fcb->FileLockAnchor, TRUE)) { + if (Fcb->Header.IsFastIoPossible != FastIoIsPossible) { + RfsdPrint(( + DBG_INFO, ": %-16.16s %-31s %s\n", + RfsdGetCurrentProcessName(), + "FastIoIsPossible", + Fcb->AnsiFileName.Buffer + )); + + Fcb->Header.IsFastIoPossible = FastIoIsPossible; + } + } + } + + if ( IsFlagOn( FileObject->Flags, FO_CACHE_SUPPORTED) && + (Fcb->NonCachedOpenCount != 0) && + (Fcb->NonCachedOpenCount == Fcb->ReferenceCount) && + (Fcb->SectionObject.DataSectionObject != NULL)) { + + if( !IsFlagOn(Vcb->Flags, VCB_READ_ONLY) && + !IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + CcFlushCache(&Fcb->SectionObject, NULL, 0, NULL); + } + + ExAcquireResourceExclusive(&(Fcb->PagingIoResource), TRUE); + ExReleaseResource(&(Fcb->PagingIoResource)); + + CcPurgeCacheSection( &Fcb->SectionObject, + NULL, + 0, + FALSE ); + } + + if (Fcb->OpenHandleCount == 0) { + + if (IsFlagOn(Fcb->Flags, FCB_DELETE_PENDING)) { + // + // Have to delete this file... + // + + if (!ExAcquireResourceExclusiveLite( + &Fcb->PagingIoResource, + IrpContext->IsSynchronous + )) { + Status = STATUS_PENDING; + __leave; + } + + FcbPagingIoAcquired = TRUE; +DbgBreak(); +#if DISABLED + Status = RfsdDeleteFile(IrpContext, Vcb, Fcb); + + if (NT_SUCCESS(Status)) { + if (IsDirectory(Fcb)) { + RfsdNotifyReportChange( IrpContext, Vcb, Fcb, + FILE_NOTIFY_CHANGE_DIR_NAME, + FILE_ACTION_REMOVED ); + } else { + RfsdNotifyReportChange( IrpContext, Vcb, Fcb, + FILE_NOTIFY_CHANGE_FILE_NAME, + FILE_ACTION_REMOVED ); + } + } +#endif + if (CcIsFileCached(FileObject)) { + + CcSetFileSizes(FileObject, + (PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize))); + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + } + + if (FcbPagingIoAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->PagingIoResource, + ExGetCurrentResourceThread() ); + + FcbPagingIoAcquired = FALSE; + } + } + } + + if (!IsDirectory(Fcb) && FileObject->PrivateCacheMap) { + RfsdPrint((DBG_INFO, "RfsdCleanup: CcUninitializeCacheMap is called for %s.\n", + Fcb->AnsiFileName.Buffer )); + + CcUninitializeCacheMap( + FileObject, + (PLARGE_INTEGER)(&(Fcb->Header.FileSize)), + NULL ); + } + + if (!Fcb->OpenHandleCount) { + IoRemoveShareAccess(FileObject, &Fcb->ShareAccess); + } + + RfsdPrint((DBG_INFO, "RfsdCleanup: OpenCount: %u ReferCount: %u %s\n", + Fcb->OpenHandleCount, Fcb->ReferenceCount, Fcb->AnsiFileName.Buffer )); + + Status = STATUS_SUCCESS; + + if (FileObject) { + SetFlag(FileObject->Flags, FO_CLEANUP_COMPLETE); + } + + } __finally { + + if (FcbPagingIoAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->PagingIoResource, + ExGetCurrentResourceThread() ); + } + + if (FcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + RfsdQueueRequest(IrpContext); + } else { + IrpContext->Irp->IoStatus.Status = Status; + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/close.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/close.c?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/close.c (added) +++ vendor/rfsd/current/RFSD/RFSD/close.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,310 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: close.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdClose) +#pragma alloc_text(PAGE, RfsdQueueCloseRequest) +#pragma alloc_text(PAGE, RfsdDeQueueCloseRequest) +#endif + +NTSTATUS +RfsdClose (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_SUCCESS; + PRFSD_VCB Vcb; + BOOLEAN VcbResourceAcquired = FALSE; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + BOOLEAN FcbResourceAcquired = FALSE; + PRFSD_CCB Ccb; + BOOLEAN FreeVcb = FALSE; + + __try + { + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) + { + Status = STATUS_SUCCESS; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + if (!ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + IrpContext->IsSynchronous )) { + RfsdPrint((DBG_INFO, "RfsdClose: PENDING ... Vcb: %xh/%xh\n", + Vcb->OpenFileHandleCount, Vcb->ReferenceCount)); + + Status = STATUS_PENDING; + __leave; + } + + VcbResourceAcquired = TRUE; + + FileObject = IrpContext->FileObject; + + if (IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE)) { + Fcb = IrpContext->Fcb; + Ccb = IrpContext->Ccb; + } else { + Fcb = (PRFSD_FCB) FileObject->FsContext; + + if (!Fcb) + { + Status = STATUS_SUCCESS; + __leave; + } + + ASSERT(Fcb != NULL); + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + } + + if (Fcb->Identifier.Type == RFSDVCB) { + + Vcb->ReferenceCount--; + + if (!Vcb->ReferenceCount && FlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) + { + FreeVcb = TRUE; + } + + if (Ccb) { + RfsdFreeCcb(Ccb); + + if (FileObject) { + FileObject->FsContext2 = Ccb = NULL; + } + } + + Status = STATUS_SUCCESS; + + __leave; + } + + if (Fcb->Identifier.Type != RFSDFCB || Fcb->Identifier.Size != sizeof(RFSD_FCB)) { + +#if DBG + RfsdPrint((DBG_ERROR, "RfsdClose: Strange IRP_MJ_CLOSE by system!\n")); + ExAcquireResourceExclusiveLite( + &RfsdGlobal->CountResource, + TRUE ); + + RfsdGlobal->IRPCloseCount++; + + ExReleaseResourceForThreadLite( + &RfsdGlobal->CountResource, + ExGetCurrentResourceThread() ); +#endif + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + +/* + if ( (!IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) && + (!IsFlagOn(Fcb->Flags, FCB_PAGE_FILE)) ) +*/ + { + if (!ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + FcbResourceAcquired = TRUE; + } + + if (!Ccb) { + Status = STATUS_SUCCESS; + __leave; + } + + ASSERT((Ccb->Identifier.Type == RFSDCCB) && + (Ccb->Identifier.Size == sizeof(RFSD_CCB))); + + Fcb->ReferenceCount--; + Vcb->ReferenceCount--; + + if (!Vcb->ReferenceCount && IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) { + FreeVcb = TRUE; + } + + RfsdPrint((DBG_INFO, "RfsdClose: OpenHandleCount: %u ReferenceCount: %u %s\n", + Fcb->OpenHandleCount, Fcb->ReferenceCount, Fcb->AnsiFileName.Buffer )); + + if (Ccb) { + + RfsdFreeCcb(Ccb); + + if (FileObject) { + FileObject->FsContext2 = Ccb = NULL; + } + } + + if (!Fcb->ReferenceCount) { + // + // Remove Fcb from Vcb->FcbList ... + // + + RemoveEntryList(&Fcb->Next); + + RfsdFreeFcb(Fcb); + + FcbResourceAcquired = FALSE; + } + + Status = STATUS_SUCCESS; + + } __finally { + + if (FcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + + RfsdQueueCloseRequest(IrpContext); +/* + + Status = STATUS_SUCCESS; + + if (IrpContext->Irp != NULL) + { + IrpContext->Irp->IoStatus.Status = Status; + + RfsdCompleteRequest( + IrpContext->Irp, + !IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED), + (CCHAR) + (NT_SUCCESS(Status) ? IO_DISK_INCREMENT : IO_NO_INCREMENT) + ); + + IrpContext->Irp = NULL; + } +*/ + } else { + + RfsdCompleteIrpContext(IrpContext, Status); + + if (FreeVcb) { + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->Resource, TRUE ); + + RfsdClearVpbFlag(Vcb->Vpb, VPB_MOUNTED); + + RfsdRemoveVcb(Vcb); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() ); + + RfsdFreeVcb(Vcb); + } + } + } + } + + return Status; +} + +VOID +RfsdQueueCloseRequest (IN PRFSD_IRP_CONTEXT IrpContext) +{ + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + if (!IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE)) { + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_DELAY_CLOSE); + + IrpContext->Fcb = (PRFSD_FCB) IrpContext->FileObject->FsContext; + IrpContext->Ccb = (PRFSD_CCB) IrpContext->FileObject->FsContext2; + + IrpContext->FileObject = NULL; + } + + // IsSynchronous means we can block (so we don't requeue it) + IrpContext->IsSynchronous = TRUE; + + ExInitializeWorkItem( + &IrpContext->WorkQueueItem, + RfsdDeQueueCloseRequest, + IrpContext); + + ExQueueWorkItem(&IrpContext->WorkQueueItem, CriticalWorkQueue); +} + +VOID +RfsdDeQueueCloseRequest (IN PVOID Context) +{ + PRFSD_IRP_CONTEXT IrpContext; + + IrpContext = (PRFSD_IRP_CONTEXT) Context; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + __try { + + __try { + + FsRtlEnterFileSystem(); + RfsdClose(IrpContext); + + } __except (RfsdExceptionFilter(IrpContext, GetExceptionInformation())) { + + RfsdExceptionHandler(IrpContext); + } + + } __finally { + + FsRtlExitFileSystem(); + } +} Added: vendor/rfsd/current/RFSD/RFSD/cmcb.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/cmcb.c?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/cmcb.c (added) +++ vendor/rfsd/current/RFSD/RFSD/cmcb.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,190 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: cmcb.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdAcquireForLazyWrite) +#pragma alloc_text(PAGE, RfsdReleaseFromLazyWrite) +#pragma alloc_text(PAGE, RfsdAcquireForReadAhead) +#pragma alloc_text(PAGE, RfsdReleaseFromReadAhead) +#pragma alloc_text(PAGE, RfsdNoOpRelease) +#pragma alloc_text(PAGE, RfsdNoOpRelease) +#endif + + +BOOLEAN +RfsdAcquireForLazyWrite ( + IN PVOID Context, + IN BOOLEAN Wait) +{ + // + // On a readonly filesystem this function still has to exist but it + // doesn't need to do anything. + + PRFSD_FCB Fcb; + + Fcb = (PRFSD_FCB) Context; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, "RfsdAcquireForLazyWrite: %s %s %s\n", + RfsdGetCurrentProcessName(), + "ACQUIRE_FOR_LAZY_WRITE", + Fcb->AnsiFileName.Buffer )); + + if (!IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY)) { + RfsdPrint(( DBG_INFO, "RfsdAcquireForLazyWrite: Key=%x,%xh %S\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, Fcb->RfsdMcb->ShortName.Buffer )); + + if(!ExAcquireResourceSharedLite( + &Fcb->PagingIoResource, Wait)) { + return FALSE; + } + } + + ASSERT(IoGetTopLevelIrp() == NULL); + + IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); + + return TRUE; +} + +VOID +RfsdReleaseFromLazyWrite (IN PVOID Context) +{ + // + // On a readonly filesystem this function still has to exist but it + // doesn't need to do anything. + PRFSD_FCB Fcb; + + Fcb = (PRFSD_FCB) Context; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, "RfsdReleaseFromLazyWrite: %s %s %s\n", + RfsdGetCurrentProcessName(), + "RELEASE_FROM_LAZY_WRITE", + Fcb->AnsiFileName.Buffer + )); + + if (!IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY)) { + RfsdPrint(( DBG_INFO, "RfsdReleaseFromLazyWrite: Inode=%x%xh %S\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, Fcb->RfsdMcb->ShortName.Buffer )); + + ExReleaseResource(&Fcb->PagingIoResource); + } + + ASSERT(IoGetTopLevelIrp() == (PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); + + IoSetTopLevelIrp( NULL ); + +} + +BOOLEAN +RfsdAcquireForReadAhead (IN PVOID Context, + IN BOOLEAN Wait) +{ + PRFSD_FCB Fcb; + + Fcb = (PRFSD_FCB) Context; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint(( DBG_INFO, "RfsdAcquireForReadAhead: Inode=%x,%xh %S\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, Fcb->RfsdMcb->ShortName.Buffer )); + + if (!ExAcquireResourceShared( + &Fcb->MainResource, Wait )) + return FALSE; + + ASSERT(IoGetTopLevelIrp() == NULL); + + IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); + + return TRUE; +} + +VOID +RfsdReleaseFromReadAhead (IN PVOID Context) +{ + PRFSD_FCB Fcb; + + Fcb = (PRFSD_FCB) Context; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint(( DBG_INFO, "RfsdReleaseFromReadAhead: Inode=%x,%xh %S\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, Fcb->RfsdMcb->ShortName.Buffer )); + + IoSetTopLevelIrp( NULL ); + + ExReleaseResource(&Fcb->MainResource); +} + +BOOLEAN +RfsdNoOpAcquire ( + IN PVOID Fcb, + IN BOOLEAN Wait + ) +{ + UNREFERENCED_PARAMETER( Fcb ); + UNREFERENCED_PARAMETER( Wait ); + + // + // This is a kludge because Cc is really the top level. We it + // enters the file system, we will think it is a resursive call + // and complete the request with hard errors or verify. It will + // have to deal with them, somehow.... + // + + ASSERT(IoGetTopLevelIrp() == NULL); + + IoSetTopLevelIrp((PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); + + return TRUE; +} + +VOID +RfsdNoOpRelease ( + IN PVOID Fcb + ) +{ + // + // Clear the kludge at this point. + // + + ASSERT(IoGetTopLevelIrp() == (PIRP)FSRTL_CACHE_TOP_LEVEL_IRP); + + IoSetTopLevelIrp( NULL ); + + UNREFERENCED_PARAMETER( Fcb ); + + return; +} Added: vendor/rfsd/current/RFSD/RFSD/create.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/create.c?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/create.c (added) +++ vendor/rfsd/current/RFSD/RFSD/create.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1520 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: create.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "ntifs.h" +#include "rfsdfs.h" + +/* GLOBALS *****************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +NTSTATUS +RfsdScanDirCallback( + ULONG BlockNumber, + PVOID pContext ); + +typedef struct _RFSD_SCANDIR_CALLBACK_CONTEXT { + IN PRFSD_VCB Vcb; + IN PRFSD_KEY_IN_MEMORY pDirectoryKey; + IN PUNICODE_STRING pTargetFilename; + + ULONG idxCurrentDentry; /// Running count of the dentries processed, so that MatchingIndex will be relative to all dentry spans + + OUT PRFSD_DENTRY_HEAD pMatchingDentry; /// If a matching dentry is found, the callback will fill this structure with it + OUT PULONG pMatchingIndex; /// Index of the matching entry (relative to all dentry spans for the directory) +} RFSD_SCANDIR_CALLBACK_CONTEXT, *PRFSD_SCANDIR_CALLBACK_CONTEXT; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdLookupFileName) +#pragma alloc_text(PAGE, RfsdSearchFcbList) +#pragma alloc_text(PAGE, RfsdScanDir) +#pragma alloc_text(PAGE, RfsdCreateFile) +#pragma alloc_text(PAGE, RfsdCreateVolume) +#pragma alloc_text(PAGE, RfsdCreate) + +#if DISABLED +#pragma alloc_text(PAGE, RfsdCreateInode) +#pragma alloc_text(PAGE, RfsdSupersedeOrOverWriteFile) +#endif + +#pragma alloc_text(PAGE, RfsdScanDirCallback) +#endif + +NTSTATUS +RfsdLookupFileName (IN PRFSD_VCB Vcb, + IN PUNICODE_STRING FullFileName, + IN PRFSD_MCB ParentMcb, + OUT PRFSD_MCB * RfsdMcb, + IN OUT PRFSD_INODE Inode) // An allocated, but unfilled inode, to which the matching file's information will be put +{ + NTSTATUS Status; + UNICODE_STRING FileName; + PRFSD_MCB Mcb; + + RFSD_DENTRY_HEAD DirectoryEntry; + int i = 0; + BOOLEAN bRun = TRUE; + BOOLEAN bParent = FALSE; + RFSD_INODE in; + ULONG off = 0; + + Status = STATUS_OBJECT_NAME_NOT_FOUND; + + *RfsdMcb = NULL; + + + // Determine the parent node + if (ParentMcb) { + // Looking up a file in the tree, starting at an arbitrary parent node. + bParent = TRUE; + } else if (FullFileName->Buffer[0] == L'\\') { + // Looking up from the root (so there was no parent). Assign the root node parent from the VCB. + ParentMcb = Vcb->McbTree; + } else { + // Otherwise, fail attempt to lookup non-rooted filename + return STATUS_OBJECT_PATH_NOT_FOUND; + } + + RtlZeroMemory(&DirectoryEntry, sizeof(RFSD_DENTRY_HEAD)); + + // Sanity check that the filename is valid + if (FullFileName->Length == 0) { + return Status; + } + + // Only if we're looking up *exactly* the root node, load it, and return it + if (FullFileName->Length == 2 && FullFileName->Buffer[0] == L'\\') { + if (!RfsdLoadInode(Vcb, &(ParentMcb->Key), Inode)) { + return Status; + } + + *RfsdMcb = Vcb->McbTree; + + return STATUS_SUCCESS; + } + + // Begin lookup from the parent node + while (bRun && i < FullFileName->Length/2) { + int Length; + ULONG FileAttr = FILE_ATTRIBUTE_NORMAL; + + if (bParent) { + bParent = FALSE; + } else { + // Advance through the (potentially) consecutive '\' path seperators in the filename + while(i < FullFileName->Length/2 && FullFileName->Buffer[i] == L'\\') i++; + } + + Length = i; + + // Advance to the next '\' path seperator + while(i < FullFileName->Length/2 && (FullFileName->Buffer[i] != L'\\')) i++; + + if ( (i - Length) <= 0) { + // All of the tokens have been parsed... + break; + } + else { + // There remains a token between the path seperators... + + // FileName is a (non-null-terminated) view into the FullFileName structure + FileName = *FullFileName; + FileName.Buffer += Length; + FileName.Length = (USHORT)((i - Length) * 2); + + // Check to see if the parent MCB already contains a child MCB matching the target FileName + Mcb = RfsdSearchMcb(Vcb, ParentMcb, &FileName); + + if (Mcb) { + ParentMcb = Mcb; + + Status = STATUS_SUCCESS; + + if (!IsFlagOn(Mcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + if (i < FullFileName->Length/2) { + Status = STATUS_OBJECT_PATH_NOT_FOUND; + } + + break; + } + } else { + // The parent has no child MCB, or there was no child MCB sibling named FileName. Check the disk using ScanDir... + + // Load the parent directory's inode / stat data structure + // For ReiserFS, I'd need the parent's key. This has to be a key leading to a directory... I'm just getting it to pass it to scan. + if (!RfsdLoadInode(Vcb, &(ParentMcb->Key), &in)) { + Status = STATUS_OBJECT_NAME_NOT_FOUND; + break; + } + + // Sanity check that we loaded a directory (unless we loaded the last token, in which case it's ok that we loaded something else??) + if (!S_ISDIR(in.i_mode)) { + if (i < FullFileName->Length/2) { + Status = STATUS_OBJECT_NAME_NOT_FOUND; + break; + } + } + + + Status = RfsdScanDir ( + Vcb, + ParentMcb, + &FileName, + &off, // < + &(DirectoryEntry) ); // < + + if (!NT_SUCCESS(Status)) { + // No such file (or an error occurred), so drop out. + bRun = FALSE; +/* + if (i >= FullFileName->Length/2) + { + *RfsdMcb = ParentMcb; + } +*/ + } else { + // We've found what we were looking for... +#if 0 // disabled by ffs too + if (IsFlagOn( SUPER_BLOCK->s_feature_incompat, + RFSD_FEATURE_INCOMPAT_FILETYPE)) { + if (rfsd_dir.file_type == RFSD_FT_DIR) + SetFlag(FileAttr, FILE_ATTRIBUTE_DIRECTORY); + } else +#endif + { + RFSD_KEY_IN_MEMORY key; + key.k_dir_id = DirectoryEntry.deh_dir_id; + key.k_objectid = DirectoryEntry.deh_objectid; + + if (!RfsdLoadInode(Vcb, &key, &in)) { + Status = STATUS_OBJECT_NAME_NOT_FOUND; + break; + } + if (S_ISDIR(in.i_mode)) { + SetFlag(FileAttr, FILE_ATTRIBUTE_DIRECTORY); + } + } + + SetFlag(ParentMcb->Flags, MCB_IN_USE); + Mcb = RfsdAllocateMcb(Vcb, &FileName, FileAttr); + ClearFlag(ParentMcb->Flags, MCB_IN_USE); + + if (!Mcb) { + Status = STATUS_OBJECT_NAME_NOT_FOUND; + break; + } + + // NOTE: It should be OK to leave off the 3rd / 4th part of key, because (AFAIK) the only place this is used is ScanDir + Mcb->Key.k_dir_id = DirectoryEntry.deh_dir_id; + Mcb->Key.k_objectid = DirectoryEntry.deh_objectid; + Mcb->Key.k_offset = Mcb->Key.k_type = 0; + + Mcb->DeOffset = off; + RfsdAddMcbNode(Vcb, ParentMcb, Mcb); + ParentMcb = Mcb; + } + } + } + } + + if (NT_SUCCESS(Status)) { + // If the name has been found, load it according to the inode number in the MCB... + // The result will be returned to the caller via Inode + *RfsdMcb = Mcb; + if (Inode) { + if (!RfsdLoadInode(Vcb, &(Mcb->Key), Inode)) { + RfsdPrint((DBG_ERROR, "RfsdLookupFileName: error loading Inode %x,%xh\n", + Mcb->Key.k_dir_id, Mcb->Key.k_objectid)); + Status = STATUS_INSUFFICIENT_RESOURCES; + } + } + } + + return Status; +} + + +/** (This function is only called by LookupFileName.) + NOTE: The offset and type of the key passed are irrelevant, as the function will always open a a directory for searching, and will search for the contents by file name -- not key. + + STATUS_INSUFFICIENT_RESOURCES if the filename or diskreading buffer could not be allocated + STATUS_UNSUCCESSFUL if the buffer could not be read from disk + STATUS_NO_SUCH_FILE if the FileName given was not found in the directory scanned +*/ +NTSTATUS +RfsdScanDir (IN PRFSD_VCB Vcb, + IN PRFSD_MCB ParentMcb, // Mcb of the directory to be scanned (which holds the ->Key of the directory) + IN PUNICODE_STRING FileName, // Short file name (not necisarilly null-terminated!) + IN OUT PULONG Index, // Offset (in bytes) of the dentry relative to the start of the directory listing + IN OUT PRFSD_DENTRY_HEAD rfsd_dir) // Directory entry of the found item +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + RFSD_KEY_IN_MEMORY DirectoryKey; + + + // Construct the key (for the directory to be searched), by copying the structure + DirectoryKey = ParentMcb->Key; + DirectoryKey.k_offset = 0x1; + DirectoryKey.k_type = RFSD_KEY_TYPE_v2_DIRENTRY; + + // Request that the filesystem tree be parsed, looking for FileName in directory spans belonging to DirectoryKey + { + RFSD_SCANDIR_CALLBACK_CONTEXT CallbackContext; + + CallbackContext.Vcb = Vcb; + CallbackContext.pDirectoryKey = &DirectoryKey; + CallbackContext.pTargetFilename = FileName; + + CallbackContext.idxCurrentDentry = 0; + + CallbackContext.pMatchingDentry = rfsd_dir; + CallbackContext.pMatchingIndex = Index; + + Status = RfsdParseFilesystemTree(Vcb, &DirectoryKey, Vcb->SuperBlock->s_root_block, &RfsdScanDirCallback, &CallbackContext); + + if (Status == STATUS_EVENT_DONE) + { + Status = STATUS_SUCCESS; + } + else if (Status == STATUS_SUCCESS) + { + Status = STATUS_NO_SUCH_FILE; + } + else + { + Status = STATUS_UNSUCCESSFUL; + } + } + + RfsdPrint((DBG_TRACE, __FUNCTION__ " returning %s\n", RfsdNtStatusToString(Status))); + return Status; +} + + +NTSTATUS +RfsdCreateFile(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PIO_STACK_LOCATION IrpSp; + PRFSD_FCB Fcb = NULL; + PRFSD_MCB RfsdMcb = NULL; + + PRFSD_FCB ParentFcb = NULL; + PRFSD_MCB ParentMcb = NULL; + + BOOLEAN bParentFcbCreated = FALSE; + + PRFSD_CCB Ccb = NULL; + PRFSD_INODE Inode; + BOOLEAN VcbResourceAcquired = FALSE; + BOOLEAN bDir = FALSE; + BOOLEAN bFcbAllocated = FALSE; + BOOLEAN bCreated = FALSE; + UNICODE_STRING FileName; + PIRP Irp; + + ULONG Options; + ULONG CreateDisposition; + + BOOLEAN OpenDirectory; + BOOLEAN OpenTargetDirectory; + BOOLEAN CreateDirectory; + BOOLEAN SequentialOnly; + BOOLEAN NoIntermediateBuffering; + BOOLEAN IsPagingFile; + BOOLEAN DirectoryFile; + BOOLEAN NonDirectoryFile; + BOOLEAN NoEaKnowledge; + BOOLEAN DeleteOnClose; + BOOLEAN TemporaryFile; + BOOLEAN CaseSensitive; + + ACCESS_MASK DesiredAccess; + ULONG ShareAccess; + + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + Options = IrpSp->Parameters.Create.Options; + + DirectoryFile = IsFlagOn(Options, FILE_DIRECTORY_FILE); + OpenTargetDirectory = IsFlagOn(IrpSp->Flags, SL_OPEN_TARGET_DIRECTORY); + + NonDirectoryFile = IsFlagOn(Options, FILE_NON_DIRECTORY_FILE); + SequentialOnly = IsFlagOn(Options, FILE_SEQUENTIAL_ONLY); + NoIntermediateBuffering = IsFlagOn( Options, FILE_NO_INTERMEDIATE_BUFFERING ); + NoEaKnowledge = IsFlagOn(Options, FILE_NO_EA_KNOWLEDGE); + DeleteOnClose = IsFlagOn(Options, FILE_DELETE_ON_CLOSE); + + CaseSensitive = IsFlagOn(IrpSp->Flags, SL_CASE_SENSITIVE); + + TemporaryFile = IsFlagOn(IrpSp->Parameters.Create.FileAttributes, + FILE_ATTRIBUTE_TEMPORARY ); + + CreateDisposition = (Options >> 24) & 0x000000ff; + + IsPagingFile = IsFlagOn(IrpSp->Flags, SL_OPEN_PAGING_FILE); + + CreateDirectory = (BOOLEAN)(DirectoryFile && + ((CreateDisposition == FILE_CREATE) || + (CreateDisposition == FILE_OPEN_IF))); + + OpenDirectory = (BOOLEAN)(DirectoryFile && + ((CreateDisposition == FILE_OPEN) || + (CreateDisposition == FILE_OPEN_IF))); + + DesiredAccess = IrpSp->Parameters.Create.SecurityContext->DesiredAccess; + ShareAccess = IrpSp->Parameters.Create.ShareAccess; + + FileName.Buffer = NULL; + + __try { + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + VcbResourceAcquired = TRUE; + + if (Irp->Overlay.AllocationSize.HighPart) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + if (!(Inode = ExAllocatePoolWithTag ( + PagedPool, sizeof(RFSD_INODE), 'EInd' ) )) { + __leave; + } + + RtlZeroMemory(Inode, sizeof(RFSD_INODE)); + + FileName.MaximumLength = IrpSp->FileObject->FileName.MaximumLength; + FileName.Length = IrpSp->FileObject->FileName.Length; + + FileName.Buffer = ExAllocatePool(PagedPool, FileName.MaximumLength); + if (!FileName.Buffer) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + RtlZeroMemory(FileName.Buffer, FileName.MaximumLength); + RtlCopyMemory(FileName.Buffer, IrpSp->FileObject->FileName.Buffer, FileName.Length); + + if (IrpSp->FileObject->RelatedFileObject) { + ParentFcb = (PRFSD_FCB)(IrpSp->FileObject->RelatedFileObject->FsContext); + } + + if ((FileName.Length > sizeof(WCHAR)) && + (FileName.Buffer[1] == L'\\') && + (FileName.Buffer[0] == L'\\')) { + + FileName.Length -= sizeof(WCHAR); + + RtlMoveMemory( &FileName.Buffer[0], + &FileName.Buffer[1], + FileName.Length ); + + // + // Bad Name if there are still beginning backslashes. + // + + if ((FileName.Length > sizeof(WCHAR)) && + (FileName.Buffer[1] == L'\\') && + (FileName.Buffer[0] == L'\\')) { + + Status = STATUS_OBJECT_NAME_INVALID; + + __leave; + } + } + + if (IsFlagOn(Options, FILE_OPEN_BY_FILE_ID)) { + Status = STATUS_NOT_IMPLEMENTED; + __leave; + } + + RfsdPrint((DBG_INFO, "RfsdCreateFile: %S (NameLen=%xh) Paging=%xh Option: %xh.\n", + FileName.Buffer, FileName.Length, IsPagingFile, IrpSp->Parameters.Create.Options)); + + if (ParentFcb) { + ParentMcb = ParentFcb->RfsdMcb; + } + + Status = RfsdLookupFileName( + Vcb, + &FileName, + ParentMcb, + &RfsdMcb, + Inode ); + + if (!NT_SUCCESS(Status)) { + UNICODE_STRING PathName; + UNICODE_STRING RealName; + UNICODE_STRING RemainName; + + LONG i = 0; + + + PathName = FileName; + + RfsdPrint((DBG_INFO, "RfsdCreateFile: File %S will be created.\n", PathName.Buffer)); + + RfsdMcb = NULL; + + if (PathName.Buffer[PathName.Length/2 - 1] == L'\\') { + if (DirectoryFile) { + PathName.Length -=2; + PathName.Buffer[PathName.Length/2] = 0; + } else { + Status = STATUS_NOT_A_DIRECTORY; + __leave; + } + } + + if (!ParentMcb) { + if (PathName.Buffer[0] != L'\\') { + Status = STATUS_OBJECT_PATH_NOT_FOUND; + __leave; + } else { + ParentMcb = Vcb->McbTree; + } + } + +Dissecting: + + FsRtlDissectName(PathName, &RealName, &RemainName); + + if (((RemainName.Length != 0) && (RemainName.Buffer[0] == L'\\')) || + (RealName.Length >= 256*sizeof(WCHAR))) { + Status = STATUS_OBJECT_NAME_INVALID; + __leave; + } + + if (RemainName.Length != 0) { + + PRFSD_MCB RetMcb; + + Status = RfsdLookupFileName ( + Vcb, + &RealName, + ParentMcb, + &RetMcb, + Inode ); + + if (!NT_SUCCESS(Status)) { + Status = STATUS_OBJECT_PATH_NOT_FOUND; + __leave; + } + + ParentMcb = RetMcb; + PathName = RemainName; + + goto Dissecting; + } + + if (FsRtlDoesNameContainWildCards(&RealName)) { + Status = STATUS_OBJECT_NAME_INVALID; + __leave; + } + + ParentFcb = ParentMcb->RfsdFcb; + + if (!ParentFcb) { + + PRFSD_INODE pTmpInode = ExAllocatePool( PagedPool, + sizeof(RFSD_INODE)); + if (!pTmpInode) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + if(!RfsdLoadInode(Vcb, &(ParentMcb->Key), pTmpInode)) { + Status = STATUS_OBJECT_PATH_NOT_FOUND; + __leave; + } + + ParentFcb = RfsdAllocateFcb(Vcb, ParentMcb, pTmpInode); + + if (!ParentFcb) { + ExFreePool(pTmpInode); + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + bParentFcbCreated = TRUE; + ParentFcb->ReferenceCount++; + } + + // We need to create a new one ? + if ((CreateDisposition == FILE_CREATE ) || + (CreateDisposition == FILE_OPEN_IF) || + (CreateDisposition == FILE_OVERWRITE_IF)) { + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + if (IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + IoSetHardErrorOrVerifyDevice( IrpContext->Irp, + Vcb->Vpb->RealDevice ); + SetFlag(Vcb->Vpb->RealDevice->Flags, DO_VERIFY_VOLUME); + + RfsdRaiseStatus(IrpContext, STATUS_MEDIA_WRITE_PROTECTED); + } + + if (DirectoryFile) { + if (TemporaryFile) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + } + + if (!ParentFcb) { + Status = STATUS_OBJECT_PATH_NOT_FOUND; + __leave; + } + + if (DirectoryFile) { + if ( RFSD_IS_ROOT_KEY(ParentFcb->RfsdMcb->Key) ) { + if ( (RealName.Length == 0x10) && + memcmp(RealName.Buffer, L"Recycled\0", 0x10) == 0) { + SetFlag( IrpSp->Parameters.Create.FileAttributes, + FILE_ATTRIBUTE_READONLY ); + } + } + + Status = STATUS_UNSUCCESSFUL; +#if DISABLED + Status = RfsdCreateInode( IrpContext, + Vcb, + ParentFcb, + RFSD_FT_DIR, + IrpSp->Parameters.Create.FileAttributes, + &RealName); +#endif + } else { + Status = STATUS_UNSUCCESSFUL; +#if DISABLED + Status = RfsdCreateInode( IrpContext, + Vcb, + ParentFcb, + RFSD_FT_REG_FILE, + IrpSp->Parameters.Create.FileAttributes, + &RealName); +#endif + } + + if (NT_SUCCESS(Status)) { + + bCreated = TRUE; + + Irp->IoStatus.Information = FILE_CREATED; + Status = RfsdLookupFileName ( + Vcb, + &RealName, + ParentMcb, + &RfsdMcb, + Inode ); + + if (NT_SUCCESS(Status)) { + + if (DirectoryFile) { +DbgBreak(); +#if DISABLED // dirctl.c [ see also in cleanup.c ] + RfsdNotifyReportChange( + IrpContext, + Vcb, + ParentFcb, + FILE_NOTIFY_CHANGE_DIR_NAME, + FILE_ACTION_ADDED ); + } else { + RfsdNotifyReportChange( + IrpContext, + Vcb, + ParentFcb, + FILE_NOTIFY_CHANGE_FILE_NAME, + FILE_ACTION_ADDED ); +#endif + } + } else { + DbgBreak(); + } + } else { + DbgBreak(); + } + } else if (OpenTargetDirectory) { + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + if (!ParentFcb) { + Status = STATUS_OBJECT_PATH_NOT_FOUND; + __leave; + } + + RtlZeroMemory( IrpSp->FileObject->FileName.Buffer, + IrpSp->FileObject->FileName.MaximumLength); + IrpSp->FileObject->FileName.Length = RealName.Length; + + RtlCopyMemory( IrpSp->FileObject->FileName.Buffer, + RealName.Buffer, + RealName.Length ); + + Fcb = ParentFcb; + + Irp->IoStatus.Information = FILE_DOES_NOT_EXIST; + Status = STATUS_SUCCESS; + } else { + Status = STATUS_OBJECT_NAME_NOT_FOUND; + __leave; + } + + } else { // File / Dir already exists. + + if (OpenTargetDirectory) { + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + Irp->IoStatus.Information = FILE_EXISTS; + Status = STATUS_SUCCESS; + + RtlZeroMemory( IrpSp->FileObject->FileName.Buffer, + IrpSp->FileObject->FileName.MaximumLength); + IrpSp->FileObject->FileName.Length = RfsdMcb->ShortName.Length; + + RtlCopyMemory( IrpSp->FileObject->FileName.Buffer, + RfsdMcb->ShortName.Buffer, + RfsdMcb->ShortName.Length ); + + //Let Mcb pointer to it's parent + RfsdMcb = RfsdMcb->Parent; + + goto Openit; + } + + // We can not create if one exists + if (CreateDisposition == FILE_CREATE) { + Irp->IoStatus.Information = FILE_EXISTS; + Status = STATUS_OBJECT_NAME_COLLISION; + __leave; + } + + if(IsFlagOn(RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + + if ((CreateDisposition != FILE_OPEN) && + (CreateDisposition != FILE_OPEN_IF)) { + + Status = STATUS_OBJECT_NAME_COLLISION; + __leave; + } + + if (NonDirectoryFile) { + Status = STATUS_FILE_IS_A_DIRECTORY; + __leave; + } + + if (RFSD_IS_ROOT_KEY(RfsdMcb->Key)) { + + if (DeleteOnClose) { + Status = STATUS_CANNOT_DELETE; + __leave; + } + + if (OpenTargetDirectory) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + } + } + + Irp->IoStatus.Information = FILE_OPENED; + } + +Openit: + + if (RfsdMcb) { + + Fcb = RfsdMcb->RfsdFcb; + + if (!Fcb) { + Fcb = RfsdAllocateFcb (Vcb, RfsdMcb, Inode); + bFcbAllocated = TRUE; + } + } + + if (Fcb) { + + if (IsFlagOn(Fcb->Flags, FCB_FILE_DELETED)) { + Status = STATUS_FILE_DELETED; + __leave; + } + + if (FlagOn(Fcb->Flags, FCB_DELETE_PENDING)) { + Status = STATUS_DELETE_PENDING; + __leave; + } + + if (bCreated) { +DbgBreak(); +#if DISABLED // ONLY FOR WRITE SUPPORT? + + // + // This file is just created. + // + + if (DirectoryFile) { + UNICODE_STRING EntryName; + USHORT NameBuf[6]; + + RtlZeroMemory(&NameBuf, 6 * sizeof(USHORT)); + + EntryName.Length = EntryName.MaximumLength = 2; + EntryName.Buffer = &NameBuf[0]; + NameBuf[0] = (USHORT)'.'; + + RfsdAddEntry( IrpContext, Vcb, Fcb, + RFSD_FT_DIR, + Fcb->RfsdMcb->Key, + &EntryName ); + + RfsdSaveInode( IrpContext, Vcb, + Fcb->RfsdMcb->Key, + Fcb->Inode ); + + EntryName.Length = EntryName.MaximumLength = 4; + EntryName.Buffer = &NameBuf[0]; + NameBuf[0] = NameBuf[1] = (USHORT)'.'; + + RfsdAddEntry( IrpContext, Vcb, Fcb, + RFSD_FT_DIR, + Fcb->RfsdMcb->Parent->Inode, + &EntryName ); + + RfsdSaveInode( IrpContext, Vcb, + Fcb->RfsdMcb->Parent->Inode, + ParentFcb->Inode ); + } else { +DbgBreak(); +#if DISABLED + Status = RfsdExpandFile( + IrpContext, Vcb, Fcb, + &(Irp->Overlay.AllocationSize)); +#endif + + if (!NT_SUCCESS(Status)) { + + DbgBreak(); + + __leave; + } + } +#endif + } else { + + // + // This file alreayd exists. + // + + if (DeleteOnClose) { + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + if (IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + + IoSetHardErrorOrVerifyDevice( IrpContext->Irp, + Vcb->Vpb->RealDevice ); + + SetFlag(Vcb->Vpb->RealDevice->Flags, DO_VERIFY_VOLUME); + + RfsdRaiseStatus(IrpContext, STATUS_MEDIA_WRITE_PROTECTED); + } + + SetFlag(Fcb->Flags, FCB_DELETE_ON_CLOSE); + + } else { + + // + // Just to Open file (Open/OverWrite ...) + // + + if ((!IsDirectory(Fcb)) && (IsFlagOn(IrpSp->FileObject->Flags, + FO_NO_INTERMEDIATE_BUFFERING))) { + Fcb->Header.IsFastIoPossible = FastIoIsPossible; + + if (IsFlagOn(IrpSp->FileObject->Flags, FO_CACHE_SUPPORTED) && + (Fcb->SectionObject.DataSectionObject != NULL)) { + + if (Fcb->NonCachedOpenCount == Fcb->OpenHandleCount) { + /* IsFlagOn(FileObject->Flags, FO_FILE_MODIFIED) */ + + if(!IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + CcFlushCache(&Fcb->SectionObject, NULL, 0, NULL); + ClearFlag(Fcb->Flags, FCB_FILE_MODIFIED); + } + + CcPurgeCacheSection(&Fcb->SectionObject, + NULL, + 0, + FALSE ); + } + } + } + } + } + + if (!IsDirectory(Fcb)) { + if (!IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + if ((CreateDisposition == FILE_SUPERSEDE) && !IsPagingFile){ + DesiredAccess |= DELETE; + } else if (((CreateDisposition == FILE_OVERWRITE) || + (CreateDisposition == FILE_OVERWRITE_IF)) && !IsPagingFile) { + DesiredAccess |= (FILE_WRITE_DATA | FILE_WRITE_EA | + FILE_WRITE_ATTRIBUTES ); + } + } + } + + if (Fcb->OpenHandleCount > 0) { + Status = IoCheckShareAccess( DesiredAccess, + ShareAccess, + IrpSp->FileObject, + &(Fcb->ShareAccess), + TRUE ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + } else { + IoSetShareAccess( DesiredAccess, + ShareAccess, + IrpSp->FileObject, + &(Fcb->ShareAccess) ); + } + + Ccb = RfsdAllocateCcb(); + + Fcb->OpenHandleCount++; + Fcb->ReferenceCount++; + + if (IsFlagOn(IrpSp->FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) { + Fcb->NonCachedOpenCount++; + } + + Vcb->OpenFileHandleCount++; + Vcb->ReferenceCount++; + + IrpSp->FileObject->FsContext = (void*)Fcb; + IrpSp->FileObject->FsContext2 = (void*) Ccb; + IrpSp->FileObject->PrivateCacheMap = NULL; + IrpSp->FileObject->SectionObjectPointer = &(Fcb->SectionObject); + IrpSp->FileObject->Vpb = Vcb->Vpb; + + Status = STATUS_SUCCESS; + + RfsdPrint((DBG_INFO, "RfsdCreateFile: %s OpenCount: %u ReferCount: %u\n", + Fcb->AnsiFileName.Buffer, Fcb->OpenHandleCount, Fcb->ReferenceCount)); + + if (!IsDirectory(Fcb) && !NoIntermediateBuffering ) { + IrpSp->FileObject->Flags |= FO_CACHE_SUPPORTED; + } + + if (!bCreated && !IsDirectory(Fcb)) { + if ( DeleteOnClose || + IsFlagOn(DesiredAccess, FILE_WRITE_DATA) || + (CreateDisposition == FILE_OVERWRITE) || + (CreateDisposition == FILE_OVERWRITE_IF)) { + if (!MmFlushImageSection( &Fcb->SectionObject, + MmFlushForWrite )) { + + Status = DeleteOnClose ? STATUS_CANNOT_DELETE : + STATUS_SHARING_VIOLATION; + __leave; + } + } + + if ((CreateDisposition == FILE_SUPERSEDE) || + (CreateDisposition == FILE_OVERWRITE) || + (CreateDisposition == FILE_OVERWRITE_IF)) { + +#if RFSD_READ_ONLY + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; +#endif + + +#if DISABLED + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + if (IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + + IoSetHardErrorOrVerifyDevice( IrpContext->Irp, + Vcb->Vpb->RealDevice ); + SetFlag(Vcb->Vpb->RealDevice->Flags, DO_VERIFY_VOLUME); + + RfsdRaiseStatus(IrpContext, STATUS_MEDIA_WRITE_PROTECTED); + } + + Status = RfsdSupersedeOrOverWriteFile( IrpContext, + Vcb, + Fcb, + CreateDisposition ); + + if (NT_SUCCESS(Status)) { + __leave; + } + +DbgBreak(); +#if DISABLED + Status = RfsdExpandFile( + IrpContext, + Vcb, + Fcb, + &(Irp->Overlay.AllocationSize)); +#endif + + if (!(NT_SUCCESS(Status))) { + __leave; + } + +DbgBreak(); +#if DISABLED // dirctl.c + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + FILE_NOTIFY_CHANGE_LAST_WRITE | + FILE_NOTIFY_CHANGE_ATTRIBUTES | + FILE_NOTIFY_CHANGE_SIZE, + FILE_ACTION_MODIFIED ); +#endif + + if (CreateDisposition == FILE_SUPERSEDE) { + Irp->IoStatus.Information = FILE_SUPERSEDED; + } else { + Irp->IoStatus.Information = FILE_OVERWRITTEN; + } +#endif + } + } + } + } __finally { + + if (FileName.Buffer) + ExFreePool(FileName.Buffer); + + if (bParentFcbCreated) { + ParentFcb->ReferenceCount--; + } + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (!bFcbAllocated) { + if (Inode) + ExFreePool(Inode); + } else { + if (!Fcb && Inode) + ExFreePool(Inode); + } + } + + return Status; +} + +NTSTATUS +RfsdCreateVolume(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb) +{ + PIO_STACK_LOCATION IrpSp; + PIRP Irp; + + NTSTATUS Status; + + ACCESS_MASK DesiredAccess; + ULONG ShareAccess; + + ULONG Options; + BOOLEAN DirectoryFile; + BOOLEAN OpenTargetDirectory; + + ULONG CreateDisposition; + + RfsdPrint((DBG_FUNC, "Entering CreateVolume\n")); + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + Options = IrpSp->Parameters.Create.Options; + + DirectoryFile = IsFlagOn(Options, FILE_DIRECTORY_FILE); + OpenTargetDirectory = IsFlagOn(IrpSp->Flags, SL_OPEN_TARGET_DIRECTORY); + + CreateDisposition = (Options >> 24) & 0x000000ff; + + DesiredAccess = IrpSp->Parameters.Create.SecurityContext->DesiredAccess; + ShareAccess = IrpSp->Parameters.Create.ShareAccess; + + if (DirectoryFile) { + return STATUS_NOT_A_DIRECTORY; + } + + if (OpenTargetDirectory) { + return STATUS_INVALID_PARAMETER; + } + + if ( (CreateDisposition != FILE_OPEN) && + (CreateDisposition != FILE_OPEN_IF) ) { + return STATUS_ACCESS_DENIED; + } + + Status = STATUS_SUCCESS; + + if (Vcb->OpenHandleCount > 0) { + Status = IoCheckShareAccess( DesiredAccess, ShareAccess, + IrpSp->FileObject, + &(Vcb->ShareAccess), TRUE); + + if (!NT_SUCCESS(Status)) { + goto errorout; + } + } else { + IoSetShareAccess( DesiredAccess, ShareAccess, + IrpSp->FileObject, + &(Vcb->ShareAccess) ); + } + + if (FlagOn(DesiredAccess, FILE_READ_DATA | FILE_WRITE_DATA | FILE_APPEND_DATA)) { + ExAcquireResourceExclusive(&Vcb->MainResource, TRUE); + + RfsdFlushFiles(Vcb, FALSE); + RfsdFlushVolume(Vcb, FALSE); + + ExReleaseResource(&Vcb->MainResource); + } + + { + PRFSD_CCB Ccb = RfsdAllocateCcb(); + + if (Ccb == NULL) { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto errorout; + } + + IrpSp->FileObject->Flags |= FO_NO_INTERMEDIATE_BUFFERING; + IrpSp->FileObject->FsContext = Vcb; + IrpSp->FileObject->FsContext2 = Ccb; + + Vcb->ReferenceCount++; + Vcb->OpenHandleCount++; + + Irp->IoStatus.Information = FILE_OPENED; + } + +errorout: + + return Status; +} + + +NTSTATUS +RfsdCreate (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + PRFSD_VCB Vcb = 0; + NTSTATUS Status = STATUS_OBJECT_NAME_NOT_FOUND; + PRFSD_FCBVCB Xcb = NULL; + + DeviceObject = IrpContext->DeviceObject; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(IsMounted(Vcb)); + + Irp = IrpContext->Irp; + + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + Xcb = (PRFSD_FCBVCB) (IrpSp->FileObject->FsContext); + + if (DeviceObject == RfsdGlobal->DeviceObject) { + RfsdPrint((DBG_INFO, "RfsdCreate: Create on main device object.\n")); + + Status = STATUS_SUCCESS; + + Irp->IoStatus.Information = FILE_OPENED; + + RfsdUnpinRepinnedBcbs(IrpContext); + + RfsdCompleteIrpContext(IrpContext, Status); + + return Status; + } + + __try { + + if (IsFlagOn(Vcb->Flags, VCB_VOLUME_LOCKED)) { + Status = STATUS_ACCESS_DENIED; + + if (IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) { + Status = STATUS_VOLUME_DISMOUNTED; + } + + __leave; + } + + if ( ((IrpSp->FileObject->FileName.Length == 0) && + (IrpSp->FileObject->RelatedFileObject == NULL)) || + (Xcb && Xcb->Identifier.Type == RFSDVCB) ) { + Status = RfsdCreateVolume(IrpContext, Vcb); + } else { + Status = RfsdCreateFile(IrpContext, Vcb); + } + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + RfsdUnpinRepinnedBcbs(IrpContext); + + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +#if DISABLED // WRITE SUPPORT ONLY? +NTSTATUS +RfsdCreateInode( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB ParentFcb, + ULONG Type, + ULONG FileAttr, + PUNICODE_STRING FileName) +{ + +DbgBreak(); + + NTSTATUS Status; + ULONG Inode; + ULONG Group; + + RFSD_INODE RfsdIno; + + RtlZeroMemory(&RfsdIno, sizeof(RFSD_INODE)); + +DbgBreak(); +#if DISABLED + Group = (ParentFcb->RfsdMcb->Inode - 1) / BLOCKS_PER_GROUP; +#endif + + RfsdPrint(( DBG_INFO, + "RfsdCreateInode: %S in %S(Key=%x,%xh)\n", + FileName->Buffer, + ParentFcb->RfsdMcb->ShortName.Buffer, + ParentFcb->RfsdMcb->Key.k_dir_id, ParentFcb->RfsdMcb->Key.k_objectid)); + + Status = RfsdNewInode(IrpContext, Vcb, Group,Type, &Inode); + + if (!NT_SUCCESS(Status)) { + goto errorout; + } + + Status = RfsdAddEntry(IrpContext, Vcb, ParentFcb, Type, Inode, FileName); + + if (!NT_SUCCESS(Status)) { + DbgBreak(); + RfsdFreeInode(IrpContext, Vcb, Inode, Type); + + goto errorout; + } + + RfsdSaveInode(IrpContext, Vcb, ParentFcb->RfsdMcb->Inode, ParentFcb->Inode); + + RfsdIno.i_ctime = ParentFcb->Inode->i_mtime; + RfsdIno.i_mode = ( S_IPERMISSION_MASK & + ParentFcb->Inode->i_mode ); + RfsdIno.i_uid = ParentFcb->Inode->i_uid; + RfsdIno.i_gid = ParentFcb->Inode->i_gid; + + //~ RfsdIno.i_dir_acl = ParentFcb->Inode->i_dir_acl; + //~ RfsdIno.i_file_acl = ParentFcb->Inode->i_file_acl; + RfsdIno.u.i_generation = ParentFcb->Inode->u.i_generation; + + //~ RfsdIno.osd2 = ParentFcb->Inode->osd2; + + if (IsFlagOn(FileAttr, FILE_ATTRIBUTE_READONLY)) { + RfsdSetReadOnly(RfsdIno.i_mode); + } + + if (Type == RFSD_FT_DIR) { + RfsdIno.i_mode |= S_IFDIR; + RfsdIno.i_links_count = 2; + } else if (Type == RFSD_FT_REG_FILE) { + RfsdIno.i_mode |= S_IFREG; + RfsdIno.i_links_count = 1; + } else { + DbgBreak(); + RfsdIno.i_links_count = 1; + } + + RfsdSaveInode(IrpContext, Vcb, Inode, &RfsdIno); + + RfsdPrint((DBG_INFO, "RfsdCreateInode: New Inode = %xh (Type=%xh)\n", Inode, Type)); + +errorout: + + return Status; +} +#endif + +#if DISABLED +NTSTATUS +RfsdSupersedeOrOverWriteFile( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + ULONG Disposition) +{ +DbgBreak(); + + LARGE_INTEGER CurrentTime; + LARGE_INTEGER AllocationSize; + NTSTATUS Status = STATUS_SUCCESS; + + KeQuerySystemTime(&CurrentTime); + + AllocationSize.QuadPart = (LONGLONG)0; + + if (!MmCanFileBeTruncated(&(Fcb->SectionObject), &(AllocationSize))) { + Status = STATUS_USER_MAPPED_FILE; + return Status; + } + +DbgBreak(); +#if DISABLED + Status = RfsdTruncateFile(IrpContext, Vcb, Fcb, &AllocationSize); +#endif + + if (NT_SUCCESS(Status)) { + Fcb->Header.AllocationSize.QuadPart = + Fcb->Header.FileSize.QuadPart = (LONGLONG) 0; + + Fcb->Inode->i_size = 0; + + if (S_ISREG(Fcb->Inode->i_mode)) { + DbgPrint("Reminder: Fcb->Inode->i_size_high = 0;\n"); + //~Fcb->Inode->i_size_high = 0; + } + + if (Disposition == FILE_SUPERSEDE) + Fcb->Inode->i_ctime = RfsdInodeTime(CurrentTime); + + Fcb->Inode->i_atime = + Fcb->Inode->i_mtime = RfsdInodeTime(CurrentTime); + } else { + LARGE_INTEGER iSize; + + iSize.QuadPart = (LONGLONG) Fcb->Inode->i_size; + + if (S_ISREG(Fcb->Inode->i_mode)) + DbgPrint("Reminder: Fcb->Inode->i_size_high = 0;\n"); + //~ iSize.HighPart = (LONG)(Fcb->Inode->i_size_high); + + if (iSize.QuadPart > Fcb->Header.AllocationSize.QuadPart) + iSize.QuadPart = Fcb->Header.AllocationSize.QuadPart; + + Fcb->Header.FileSize.QuadPart = iSize.QuadPart; + + Fcb->Inode->i_size = iSize.LowPart; + //~ Fcb->Inode->i_size_high = (ULONG) iSize.HighPart; + } + + RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, Fcb->Inode); + + return Status; +} +#endif + +/** + Searches to find if the name if is located in the dentry span within the block. + + STATUS_SUCCESS if the name was not found, but processing should continue + STATUS_EVENT_DONE if the name was found, and processing should stop +*/ +NTSTATUS +RfsdScanDirCallback( + ULONG BlockNumber, + PVOID pContext ) +{ + PRFSD_SCANDIR_CALLBACK_CONTEXT pCallbackContext = (PRFSD_SCANDIR_CALLBACK_CONTEXT) pContext; + RFSD_KEY_IN_MEMORY DirectoryKey; + PUCHAR pBlockBuffer = NULL; + PRFSD_ITEM_HEAD pDirectoryItemHeader = NULL; + PUCHAR pDirectoryItemBuffer = NULL; + NTSTATUS Status; + + BOOLEAN bFound = FALSE; + PRFSD_DENTRY_HEAD pPrevDentry = NULL; + ULONG idxDentryInSpan = 0; + UNICODE_STRING InodeFileName; + USHORT InodeFileNameLength; + InodeFileName.Buffer = NULL; + + RfsdPrint((DBG_FUNC, __FUNCTION__ " invoked on block %i\n", BlockNumber)); + + + __try { + + // Load the block + pBlockBuffer = RfsdAllocateAndLoadBlock(pCallbackContext->Vcb, BlockNumber); + if (!pBlockBuffer) { Status = STATUS_INSUFFICIENT_RESOURCES; __leave; } + + // Construct the item key to search for + DirectoryKey = *(pCallbackContext->pDirectoryKey); + DirectoryKey.k_type = RFSD_KEY_TYPE_v2_DIRENTRY; + + // Get the item header and its information + Status = RfsdFindItemHeaderInBlock( + pCallbackContext->Vcb, &DirectoryKey, pBlockBuffer, + ( &pDirectoryItemHeader ), //< + &CompareKeysWithoutOffset + ); + + // If this block doesn't happen to contain a directory item, skip it. + if ( (Status == STATUS_NO_SUCH_MEMBER) || !pDirectoryItemHeader ) + { + DbgPrint("Block %i did not contain the appropriate diritem header\n", BlockNumber); + Status = STATUS_SUCCESS; __leave; + } + + // Setup the item buffer + pDirectoryItemBuffer = (PUCHAR) pBlockBuffer + pDirectoryItemHeader->ih_item_location; + + + + // Allocate the unicode filename buffer + InodeFileName.Buffer = ExAllocatePool(PagedPool, (RFSD_NAME_LEN + 1) * 2 ); + if (!InodeFileName.Buffer) { Status = STATUS_INSUFFICIENT_RESOURCES; __leave; } + + + while (!bFound && (idxDentryInSpan < pDirectoryItemHeader->u.ih_entry_count) ) { + OEM_STRING OemName; + + // + // reading dir entries from Dcb + // + + PRFSD_DENTRY_HEAD pCurrentDentry = (PRFSD_DENTRY_HEAD) (pDirectoryItemBuffer + (idxDentryInSpan * sizeof(RFSD_DENTRY_HEAD))); + + // Skip the directory entry for the parent of the root directory (because it should not be shown, and has no stat data) + // (NOTE: Any change made here should also be mirrored in RfsdDirControlCallback) + if (pCurrentDentry->deh_dir_id == 0 /*&& pCurrentDentry->deh_objectid == 1*/) + { goto ProcessNextEntry; } + + // Retrieve the filename of the loaded directory entry from the buffer (encoded with the codepage) + // NOTE: The filename is not gauranteed to be null-terminated, and so the end may implicitly be the start of the previous entry. + OemName.Buffer = (PUCHAR) pDirectoryItemBuffer + pCurrentDentry->deh_location; + OemName.MaximumLength = (pPrevDentry ? pPrevDentry->deh_location : // The end of this entry is the start of the previous + pDirectoryItemHeader->ih_item_len // Otherwise this is the first entry, the end of which is the end of the item. + ) - pCurrentDentry->deh_location; + OemName.Length = RfsdStringLength(OemName.Buffer, OemName.MaximumLength); + + + + // Convert that name to unicode + { + InodeFileNameLength = (USHORT) RfsdOEMToUnicodeSize(&OemName) + 2; + + // If the unicode InodeFileName.Buffer is not large enough, expand it + if (InodeFileName.MaximumLength < InodeFileNameLength) + { + // Free the existing buffer + if (InodeFileName.Buffer) { ExFreePool(InodeFileName.Buffer); } + + // Allocate a new larger buffer + InodeFileName.Buffer = ExAllocatePool(PagedPool, InodeFileNameLength ); + if (!InodeFileName.Buffer) { Status = STATUS_INSUFFICIENT_RESOURCES; __leave; } + InodeFileName.MaximumLength = InodeFileNameLength; + } + + InodeFileName.Length = 0; + + RtlZeroMemory( InodeFileName.Buffer, InodeFileNameLength); + + Status = RfsdOEMToUnicode( + &InodeFileName, + &OemName ); + + if (!NT_SUCCESS(Status)) { __leave; } + } + + + // Compare it to the name we are searching for + if (!RtlCompareUnicodeString( + pCallbackContext->pTargetFilename, + &InodeFileName, + TRUE )) { + // This entry MATCHED! Copy the matching dentry into the output field on the context + bFound = TRUE; + + *(pCallbackContext->pMatchingIndex) = (pCallbackContext->idxCurrentDentry * sizeof(RFSD_DENTRY_HEAD)); + RtlCopyMemory(pCallbackContext->pMatchingDentry, pCurrentDentry, sizeof(RFSD_DENTRY_HEAD)); + + RfsdPrint(( DBG_INFO, __FUNCTION__ ": Found: Name=%S Key=%xh,%xh\n", + InodeFileName.Buffer, pCurrentDentry->deh_dir_id, pCurrentDentry->deh_objectid )); + + Status = STATUS_EVENT_DONE; + break; + } + + ProcessNextEntry: + // Advance to the next directory entry + pPrevDentry = pCurrentDentry; + ++idxDentryInSpan; + ++(pCallbackContext->idxCurrentDentry); + } + + if (!bFound) { + // Indicate success, so that parsing will continue with subsequent blocks. + Status = STATUS_SUCCESS; + } + } __finally { + if (pBlockBuffer) ExFreePool(pBlockBuffer); + if (InodeFileName.Buffer) ExFreePool(InodeFileName.Buffer); + } + + + return Status; + +} + + + Added: vendor/rfsd/current/RFSD/RFSD/debug.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/debug.c?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/debug.c (added) +++ vendor/rfsd/current/RFSD/RFSD/debug.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1758 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: Debug.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +#if DBG + +/* INCLUDES **************************************************************/ + +#include "stdarg.h" +#include "stdio.h" +#include "rfsdfs.h" + + +/* GLOBALS ***************************************************************/ + +#define SYSTEM_PROCESS_NAME "System" + +extern PRFSD_GLOBAL RfsdGlobal; + +LONG DebugLevel = DBG_FUNC; + +ULONG ProcessNameOffset = 0; + + +/* DEFINITIONS ***********************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text (PAGE, RfsdPrintf) +#pragma alloc_text (PAGE, RfsdNIPrintf) +#pragma alloc_text (PAGE, RfsdGetProcessNameOffset) +#pragma alloc_text (PAGE, RfsdDbgPrintCall) +#pragma alloc_text (PAGE, RfsdDbgPrintComplete) +#pragma alloc_text (PAGE, RfsdNtStatusToString) +#endif // ALLOC_PRAGMA + +/* Static Definitions ****************************************************/ + +#define MAX_IRP_IDENTIFIER 28 +static PUCHAR IrpMjStrings[] = { + "IRP_MJ_CREATE", + "IRP_MJ_CREATE_NAMED_PIPE", + "IRP_MJ_CLOSE", + "IRP_MJ_READ", + "IRP_MJ_WRITE", + "IRP_MJ_QUERY_INFORMATION", + "IRP_MJ_SET_INFORMATION", + "IRP_MJ_QUERY_EA", + "IRP_MJ_SET_EA", + "IRP_MJ_FLUSH_BUFFERS", + "IRP_MJ_QUERY_VOLUME_INFORMATION", + "IRP_MJ_SET_VOLUME_INFORMATION", + "IRP_MJ_DIRECTORY_CONTROL", + "IRP_MJ_FILE_SYSTEM_CONTROL", + "IRP_MJ_DEVICE_CONTROL", + "IRP_MJ_INTERNAL_DEVICE_CONTROL", + "IRP_MJ_SHUTDOWN", + "IRP_MJ_LOCK_CONTROL", + "IRP_MJ_CLEANUP", + "IRP_MJ_CREATE_MAILSLOT", + "IRP_MJ_QUERY_SECURITY", + "IRP_MJ_SET_SECURITY", + "IRP_MJ_POWER", + "IRP_MJ_SYSTEM_CONTROL", + "IRP_MJ_DEVICE_CHANGE", + "IRP_MJ_QUERY_QUOTA", + "IRP_MJ_SET_QUOTA", + "IRP_MJ_PNP" +}; + +static PUCHAR FileInformationClassStrings[] = { + "Unknown FileInformationClass 0", + "FileDirectoryInformation", + "FileFullDirectoryInformation", + "FileBothDirectoryInformation", + "FileBasicInformation", + "FileStandardInformation", + "FileInternalInformation", + "FileEaInformation", + "FileAccessInformation", + "FileNameInformation", + "FileRenameInformation", + "FileLinkInformation", + "FileNamesInformation", + "FileDispositionInformation", + "FilePositionInformation", + "FileFullEaInformation", + "FileModeInformation", + "FileAlignmentInformation", + "FileAllInformation", + "FileAllocationInformation", + "FileEndOfFileInformation", + "FileAlternateNameInformation", + "FileStreamInformation", + "FilePipeInformation", + "FilePipeLocalInformation", + "FilePipeRemoteInformation", + "FileMailslotQueryInformation", + "FileMailslotSetInformation", + "FileCompressionInformation", + "FileObjectIdInformation", + "FileCompletionInformation", + "FileMoveClusterInformation", + "FileQuotaInformation", + "FileReparsePointInformation", + "FileNetworkOpenInformation", + "FileAttributeTagInformation", + "FileTrackingInformation" +}; + +static PUCHAR FsInformationClassStrings[] = { + "Unknown FsInformationClass 0", + "FileFsVolumeInformation", + "FileFsLabelInformation", + "FileFsSizeInformation", + "FileFsDeviceInformation", + "FileFsAttributeInformation", + "FileFsControlInformation", + "FileFsFullSizeInformation", + "FileFsObjectIdInformation" +}; + +/* + * RfsdPrintf + * This function is variable-argument, level-sensitive debug print routine. + * If the specified debug level for the print statement is lower or equal + * to the current debug level, the message will be printed. + * + * Arguments: + * DebugPrintLevel - Specifies at which debugging level the string should + * be printed + * DebugMessage - Variable argument ascii c string + * + * Return Value: + * N/A + * + * NOTES: + * N/A + */ + +VOID +RfsdPrintf( + LONG DebugPrintLevel, + PCHAR DebugMessage, + ... + ) +{ + va_list ap; + LARGE_INTEGER CurrentTime; + TIME_FIELDS TimeFields; + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + + if (DebugPrintLevel <= DebugLevel) { + CHAR Buffer[0x100]; + va_start(ap, DebugMessage); + + KeQuerySystemTime( &CurrentTime); + RtlTimeToTimeFields(&CurrentTime, &TimeFields); + + vsprintf(Buffer, DebugMessage, ap); + + /*DbgPrint(DRIVER_NAME": %2.2d:%2.2d:%2.2d:%3.3d %8.8x: %s", + TimeFields.Hour, TimeFields.Minute, + TimeFields.Second, TimeFields.Milliseconds, + PsGetCurrentThread(), Buffer);*/ + + DbgPrint(DRIVER_NAME": %s", + Buffer); + + va_end(ap); + } + + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + +} // RfsdPrintf() + + +/* + * RfsdNIPrintf + * This function is variable-argument, level-sensitive debug print routine. + * If the specified debug level for the print statement is lower or equal + * to the current debug level, the message will be printed. + * + * Arguments: + * DebugPrintLevel - Specifies at which debugging level the string should + * be printed + * DebugMessage - Variable argument ascii c string + * + * Return Value: + * N/A + * + * NOTES: + * N/A + */ + +VOID +RfsdNIPrintf( + LONG DebugPrintLevel, + PCHAR DebugMessage, + ... + ) +{ + va_list ap; + LARGE_INTEGER CurrentTime; + TIME_FIELDS TimeFields; + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + + if (DebugPrintLevel <= DebugLevel) { + CHAR Buffer[0x100]; + va_start(ap, DebugMessage); + + KeQuerySystemTime( &CurrentTime); + RtlTimeToTimeFields(&CurrentTime, &TimeFields); + + vsprintf(Buffer, DebugMessage, ap); + + DbgPrint(DRIVER_NAME": %2.2d:%2.2d:%2.2d:%3.3d %8.8x: %s", + TimeFields.Hour, TimeFields.Minute, + TimeFields.Second, TimeFields.Milliseconds, + PsGetCurrentThread(), Buffer); + + va_end(ap); + } + + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + +} // RfsdNIPrintf() + +ULONG +RfsdGetProcessNameOffset ( VOID ) +{ + PEPROCESS Process; + ULONG i; + + Process = PsGetCurrentProcess(); + + for(i = 0; i < PAGE_SIZE; i++) { + if(!strncmp( + SYSTEM_PROCESS_NAME, + (PCHAR) Process + i, + strlen(SYSTEM_PROCESS_NAME) + )) { + + return i; + } + } + + RfsdPrint((DBG_ERROR, ": *** FsdGetProcessNameOffset failed ***\n")); + + return 0; +} + + +VOID +RfsdDbgPrintCall (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp ) +{ + PIO_STACK_LOCATION IoStackLocation; + PFILE_OBJECT FileObject; + PUCHAR FileName; + PRFSD_FCB Fcb; + FILE_INFORMATION_CLASS FileInformationClass; + FS_INFORMATION_CLASS FsInformationClass; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + FileObject = IoStackLocation->FileObject; + + FileName = "Unknown"; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + + FileName = "\\" DRIVER_NAME; + + } else if (FileObject && FileObject->FsContext) { + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + if (Fcb->Identifier.Type == RFSDVCB) { + FileName = "\\Volume"; + } else if (Fcb->Identifier.Type == RFSDFCB && Fcb->AnsiFileName.Buffer) { + FileName = Fcb->AnsiFileName.Buffer; + } + } + + switch (IoStackLocation->MajorFunction) { + + case IRP_MJ_CREATE: + + FileName = NULL; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + FileName = "\\" DRIVER_NAME; + } else if (IoStackLocation->FileObject->FileName.Length == 0) { + FileName = "\\Volume"; + } + + if (FileName) { + RfsdPrintNoIndent((DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } else if (IoStackLocation->FileObject->FileName.Buffer) { + RfsdPrintNoIndent((DBG_TRACE, "%s %s %S\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + IoStackLocation->FileObject->FileName.Buffer + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + "Unknown" + )); + } + + break; + + case IRP_MJ_CLOSE: + + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + + break; + + case IRP_MJ_READ: + + if (IoStackLocation->MinorFunction & IRP_MN_COMPLETE) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_COMPLETE\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s Offset: %I64xh Length: %xh %s%s%s%s%s%s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.Read.ByteOffset.QuadPart, + IoStackLocation->Parameters.Read.Length, + (IoStackLocation->MinorFunction & IRP_MN_DPC ? "IRP_MN_DPC " : " "), + (IoStackLocation->MinorFunction & IRP_MN_MDL ? "IRP_MN_MDL " : " "), + (IoStackLocation->MinorFunction & IRP_MN_COMPRESSED ? "IRP_MN_COMPRESSED " : " "), + (Irp->Flags & IRP_PAGING_IO ? "IRP_PAGING_IO " : " "), + (Irp->Flags & IRP_NOCACHE ? "IRP_NOCACHE " : " "), + (FileObject->Flags & FO_SYNCHRONOUS_IO ? "FO_SYNCHRONOUS_IO " : " ") + )); + } + + break; + + case IRP_MJ_WRITE: + + if (IoStackLocation->MinorFunction & IRP_MN_COMPLETE) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_COMPLETE\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s Offset: %I64xh Length: %xh %s%s%s%s%s%s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.Read.ByteOffset.QuadPart, + IoStackLocation->Parameters.Read.Length, + (IoStackLocation->MinorFunction & IRP_MN_DPC ? "IRP_MN_DPC " : " "), + (IoStackLocation->MinorFunction & IRP_MN_MDL ? "IRP_MN_MDL " : " "), + (IoStackLocation->MinorFunction & IRP_MN_COMPRESSED ? "IRP_MN_COMPRESSED " : " "), + (Irp->Flags & IRP_PAGING_IO ? "IRP_PAGING_IO " : " "), + (Irp->Flags & IRP_NOCACHE ? "IRP_NOCACHE " : " "), + (FileObject->Flags & FO_SYNCHRONOUS_IO ? "FO_SYNCHRONOUS_IO " : " ") + )); + } + + break; + + case IRP_MJ_QUERY_INFORMATION: + + FileInformationClass = + IoStackLocation->Parameters.QueryFile.FileInformationClass; + + if (FileInformationClass <= FileMaximumInformation) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FileInformationClassStrings[FileInformationClass] + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s Unknown FileInformationClass %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FileInformationClass + )); + } + + break; + + case IRP_MJ_SET_INFORMATION: + + FileInformationClass = + IoStackLocation->Parameters.SetFile.FileInformationClass; + + if (FileInformationClass <= FileMaximumInformation) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FileInformationClassStrings[FileInformationClass] + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s Unknown FileInformationClass %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FileInformationClass + )); + } + + break; + + case IRP_MJ_QUERY_VOLUME_INFORMATION: + + FsInformationClass = + IoStackLocation->Parameters.QueryVolume.FsInformationClass; + + if (FsInformationClass <= FileFsMaximumInformation) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FsInformationClassStrings[FsInformationClass] + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s Unknown FsInformationClass %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FsInformationClass + )); + } + + break; + + case IRP_MJ_DIRECTORY_CONTROL: + + if (IoStackLocation->MinorFunction & IRP_MN_QUERY_DIRECTORY) { + +#ifndef _GNU_NTIFS_ + FileInformationClass = + IoStackLocation->Parameters.QueryDirectory.FileInformationClass; +#else + FileInformationClass = ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileInformationClass; +#endif + + if (FileInformationClass <= FileMaximumInformation) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FileInformationClassStrings[FileInformationClass] + )); + + if ( +#ifndef _GNU_NTIFS_ + IoStackLocation->Parameters.QueryDirectory.FileName +#else + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileName +#endif + ) { +#ifndef _GNU_NTIFS_ + RfsdPrintNoIndent(( + DBG_TRACE, "%s FileName: %.*S FileIndex: %x %s%s%s\n", + RfsdGetCurrentProcessName(), + + IoStackLocation->Parameters.QueryDirectory.FileName->Length / 2, + IoStackLocation->Parameters.QueryDirectory.FileName->Buffer, + IoStackLocation->Parameters.QueryDirectory.FileIndex, + (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""), + (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""), + ((IoStackLocation->Flags & SL_INDEX_SPECIFIED) ? "SL_INDEX_SPECIFIED " : "") + )); + +#else + RfsdPrintNoIndent(( + DBG_TRACE, "%s FileName: %.*S FileIndex: %x %s%s%s\n", + RfsdGetCurrentProcessName(), + + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileName->Length / 2, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileName->Buffer, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileIndex, + (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""), + (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""), + ((IoStackLocation->Flags & SL_INDEX_SPECIFIED) ? "SL_INDEX_SPECIFIED " : "") + )); +#endif + } else { +#ifndef _GNU_NTIFS_ + RfsdPrintNoIndent(( + DBG_TRACE, "%s FileName: FileIndex: %#x %s%s%s\n", + RfsdGetCurrentProcessName(), + IoStackLocation->Parameters.QueryDirectory.FileIndex, + (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""), + (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""), + (IoStackLocation->Flags & SL_INDEX_SPECIFIED ? "SL_INDEX_SPECIFIED " : "") + )); +#else + RfsdPrintNoIndent(( + DBG_TRACE, "%s FileName: FileIndex: %#x %s%s%s\n", + RfsdGetCurrentProcessName(), + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileIndex, + (IoStackLocation->Flags & SL_RESTART_SCAN ? "SL_RESTART_SCAN " : ""), + (IoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY ? "SL_RETURN_SINGLE_ENTRY " : ""), + (IoStackLocation->Flags & SL_INDEX_SPECIFIED ? "SL_INDEX_SPECIFIED " : "") + )); +#endif + } + } else { + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s Unknown FileInformationClass %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + FileInformationClass + )); + } + } else if (IoStackLocation->MinorFunction & IRP_MN_NOTIFY_CHANGE_DIRECTORY) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_NOTIFY_CHANGE_DIRECTORY\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } else { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s Unknown minor function %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->MinorFunction + )); + } + + break; + + case IRP_MJ_FILE_SYSTEM_CONTROL: + + if (IoStackLocation->MinorFunction == IRP_MN_USER_FS_REQUEST) { +#ifndef _GNU_NTIFS_ + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s IRP_MN_USER_FS_REQUEST FsControlCode: %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.FileSystemControl.FsControlCode + )); +#else + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s IRP_MN_USER_FS_REQUEST FsControlCode: %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.FileSystemControl.FsControlCode + )); +#endif + } else if (IoStackLocation->MinorFunction == IRP_MN_MOUNT_VOLUME) { + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s IRP_MN_MOUNT_VOLUME DeviceObject: %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.MountVolume.DeviceObject + )); + } else if (IoStackLocation->MinorFunction == IRP_MN_VERIFY_VOLUME) { + RfsdPrintNoIndent(( + DBG_TRACE, + "%s %s %s IRP_MN_VERIFY_VOLUME DeviceObject: %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.VerifyVolume.DeviceObject + )); + } else if (IoStackLocation->MinorFunction == IRP_MN_LOAD_FILE_SYSTEM) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_LOAD_FILE_SYSTEM\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } +#if (_WIN32_WINNT >= 0x0500) + else if (IoStackLocation->MinorFunction == IRP_MN_KERNEL_CALL) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_KERNEL_CALL\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } +#endif // (_WIN32_WINNT >= 0x0500) + else { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s Unknown minor function %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->MinorFunction + )); + } + + break; + + case IRP_MJ_DEVICE_CONTROL: + + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IoControlCode: %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.DeviceIoControl.IoControlCode + )); + + break; + + case IRP_MJ_LOCK_CONTROL: + + if (IoStackLocation->MinorFunction & IRP_MN_LOCK) { +#ifndef _GNU_NTIFS_ + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_LOCK Offset: %I64xh Length: %I64xh Key: %u %s%s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.LockControl.ByteOffset.QuadPart, + IoStackLocation->Parameters.LockControl.Length->QuadPart, + IoStackLocation->Parameters.LockControl.Key, + (IoStackLocation->Flags & SL_FAIL_IMMEDIATELY ? "SL_FAIL_IMMEDIATELY " : ""), + (IoStackLocation->Flags & SL_EXCLUSIVE_LOCK ? "SL_EXCLUSIVE_LOCK " : "") + )); +#else + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_LOCK Offset: %I64xh Length: %I64xh Key: %u %s%s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.ByteOffset.QuadPart, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.Length->QuadPart, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.Key, + (IoStackLocation->Flags & SL_FAIL_IMMEDIATELY ? "SL_FAIL_IMMEDIATELY " : ""), + (IoStackLocation->Flags & SL_EXCLUSIVE_LOCK ? "SL_EXCLUSIVE_LOCK " : "") + )); +#endif + } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_SINGLE) { +#ifndef _GNU_NTIFS_ + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_SINGLE Offset: %I64xh Length: %I64xh Key: %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.LockControl.ByteOffset.QuadPart, + IoStackLocation->Parameters.LockControl.Length->QuadPart, + IoStackLocation->Parameters.LockControl.Key + )); +#else + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_SINGLE Offset: %I64xh Length: %I64xh Key: %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.ByteOffset.QuadPart, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.Length->QuadPart, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.Key + )); +#endif + } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_ALL) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_ALL\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } else if (IoStackLocation->MinorFunction & IRP_MN_UNLOCK_ALL_BY_KEY) { +#ifndef _GNU_NTIFS_ + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_ALL_BY_KEY Key: %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->Parameters.LockControl.Key + )); +#else + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s IRP_MN_UNLOCK_ALL_BY_KEY Key: %u\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.LockControl.Key + )); +#endif + } else { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s Unknown minor function %#x\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName, + IoStackLocation->MinorFunction + )); + } + + break; + + case IRP_MJ_CLEANUP: + + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + + break; + + case IRP_MJ_SHUTDOWN: + + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + + break; + +#if (_WIN32_WINNT >= 0x0500) + case IRP_MJ_PNP: + + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); +#endif // (_WIN32_WINNT >= 0x0500) + break; + + + default: + + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s %s\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + FileName + )); + } +} + +VOID +RfsdDbgPrintComplete (IN PIRP Irp, IN BOOLEAN bPrint) +{ + PIO_STACK_LOCATION IoStackLocation; + + if (!Irp) + return; + + if (Irp->IoStatus.Status != STATUS_SUCCESS) { + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + if (bPrint) { + RfsdPrintNoIndent(( + DBG_TRACE, "%s %s Status: %s (%#x).\n", + RfsdGetCurrentProcessName(), + IrpMjStrings[IoStackLocation->MajorFunction], + RfsdNtStatusToString(Irp->IoStatus.Status), + Irp->IoStatus.Status + )); + } + } +} + +PUCHAR +RfsdNtStatusToString ( IN NTSTATUS Status ) +{ + switch (Status) { + + case 0x00000000: return "STATUS_SUCCESS"; + case 0x00000001: return "STATUS_WAIT_1"; + case 0x00000002: return "STATUS_WAIT_2"; + case 0x00000003: return "STATUS_WAIT_3"; + case 0x0000003F: return "STATUS_WAIT_63"; + case 0x00000080: return "STATUS_ABANDONED_WAIT_0"; + case 0x000000BF: return "STATUS_ABANDONED_WAIT_63"; + case 0x000000C0: return "STATUS_USER_APC"; + case 0x00000100: return "STATUS_KERNEL_APC"; + case 0x00000101: return "STATUS_ALERTED"; + case 0x00000102: return "STATUS_TIMEOUT"; + case 0x00000103: return "STATUS_PENDING"; + case 0x00000104: return "STATUS_REPARSE"; + case 0x00000105: return "STATUS_MORE_ENTRIES"; + case 0x00000106: return "STATUS_NOT_ALL_ASSIGNED"; + case 0x00000107: return "STATUS_SOME_NOT_MAPPED"; + case 0x00000108: return "STATUS_OPLOCK_BREAK_IN_PROGRESS"; + case 0x00000109: return "STATUS_VOLUME_MOUNTED"; + case 0x0000010A: return "STATUS_RXACT_COMMITTED"; + case 0x0000010B: return "STATUS_NOTIFY_CLEANUP"; + case 0x0000010C: return "STATUS_NOTIFY_ENUM_DIR"; + case 0x0000010D: return "STATUS_NO_QUOTAS_FOR_ACCOUNT"; + case 0x0000010E: return "STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED"; + case 0x00000110: return "STATUS_PAGE_FAULT_TRANSITION"; + case 0x00000111: return "STATUS_PAGE_FAULT_DEMAND_ZERO"; + case 0x00000112: return "STATUS_PAGE_FAULT_COPY_ON_WRITE"; + case 0x00000113: return "STATUS_PAGE_FAULT_GUARD_PAGE"; + case 0x00000114: return "STATUS_PAGE_FAULT_PAGING_FILE"; + case 0x00000115: return "STATUS_CACHE_PAGE_LOCKED"; + case 0x00000116: return "STATUS_CRASH_DUMP"; + case 0x00000117: return "STATUS_BUFFER_ALL_ZEROS"; + case 0x00000118: return "STATUS_REPARSE_OBJECT"; + case 0x00000119: return "STATUS_RESOURCE_REQUIREMENTS_CHANGED"; + case 0x00000120: return "STATUS_TRANSLATION_COMPLETE"; + case 0x00000121: return "STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY"; + case 0x00010001: return "DBG_EXCEPTION_HANDLED"; + case 0x00010002: return "DBG_CONTINUE"; + case 0x40000000: return "STATUS_OBJECT_NAME_EXISTS"; + case 0x40000001: return "STATUS_THREAD_WAS_SUSPENDED"; + case 0x40000002: return "STATUS_WORKING_SET_LIMIT_RANGE"; + case 0x40000003: return "STATUS_IMAGE_NOT_AT_BASE"; + case 0x40000004: return "STATUS_RXACT_STATE_CREATED"; + case 0x40000005: return "STATUS_SEGMENT_NOTIFICATION"; + case 0x40000006: return "STATUS_LOCAL_USER_SESSION_KEY"; + case 0x40000007: return "STATUS_BAD_CURRENT_DIRECTORY"; + case 0x40000008: return "STATUS_SERIAL_MORE_WRITES"; + case 0x40000009: return "STATUS_REGISTRY_RECOVERED"; + case 0x4000000A: return "STATUS_FT_READ_RECOVERY_FROM_BACKUP"; + case 0x4000000B: return "STATUS_FT_WRITE_RECOVERY"; + case 0x4000000C: return "STATUS_SERIAL_COUNTER_TIMEOUT"; + case 0x4000000D: return "STATUS_NULL_LM_PASSWORD"; + case 0x4000000E: return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH"; + case 0x4000000F: return "STATUS_RECEIVE_PARTIAL"; + case 0x40000010: return "STATUS_RECEIVE_EXPEDITED"; + case 0x40000011: return "STATUS_RECEIVE_PARTIAL_EXPEDITED"; + case 0x40000012: return "STATUS_EVENT_DONE"; + case 0x40000013: return "STATUS_EVENT_PENDING"; + case 0x40000014: return "STATUS_CHECKING_FILE_SYSTEM"; + case 0x40000015: return "STATUS_FATAL_APP_EXIT"; + case 0x40000016: return "STATUS_PREDEFINED_HANDLE"; + case 0x40000017: return "STATUS_WAS_UNLOCKED"; + case 0x40000018: return "STATUS_SERVICE_NOTIFICATION"; + case 0x40000019: return "STATUS_WAS_LOCKED"; + case 0x4000001A: return "STATUS_LOG_HARD_ERROR"; + case 0x4000001B: return "STATUS_ALREADY_WIN32"; + case 0x4000001C: return "STATUS_WX86_UNSIMULATE"; + case 0x4000001D: return "STATUS_WX86_CONTINUE"; + case 0x4000001E: return "STATUS_WX86_SINGLE_STEP"; + case 0x4000001F: return "STATUS_WX86_BREAKPOINT"; + case 0x40000020: return "STATUS_WX86_EXCEPTION_CONTINUE"; + case 0x40000021: return "STATUS_WX86_EXCEPTION_LASTCHANCE"; + case 0x40000022: return "STATUS_WX86_EXCEPTION_CHAIN"; + case 0x40000023: return "STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE"; + case 0x40000024: return "STATUS_NO_YIELD_PERFORMED"; + case 0x40000025: return "STATUS_TIMER_RESUME_IGNORED"; + case 0x40000026: return "STATUS_ARBITRATION_UNHANDLED"; + case 0x40000027: return "STATUS_CARDBUS_NOT_SUPPORTED"; + case 0x40000028: return "STATUS_WX86_CREATEWX86TIB"; + case 0x40000029: return "STATUS_MP_PROCESSOR_MISMATCH"; + case 0x40010001: return "DBG_REPLY_LATER"; + case 0x40010002: return "DBG_UNABLE_TO_PROVIDE_HANDLE"; + case 0x40010003: return "DBG_TERMINATE_THREAD"; + case 0x40010004: return "DBG_TERMINATE_PROCESS"; + case 0x40010005: return "DBG_CONTROL_C"; + case 0x40010006: return "DBG_PRINTEXCEPTION_C"; + case 0x40010007: return "DBG_RIPEXCEPTION"; + case 0x40010008: return "DBG_CONTROL_BREAK"; + case 0x80000001: return "STATUS_GUARD_PAGE_VIOLATION"; + case 0x80000002: return "STATUS_DATATYPE_MISALIGNMENT"; + case 0x80000003: return "STATUS_BREAKPOINT"; + case 0x80000004: return "STATUS_SINGLE_STEP"; + case 0x80000005: return "STATUS_BUFFER_OVERFLOW"; + case 0x80000006: return "STATUS_NO_MORE_FILES"; + case 0x80000007: return "STATUS_WAKE_SYSTEM_DEBUGGER"; + case 0x8000000A: return "STATUS_HANDLES_CLOSED"; + case 0x8000000B: return "STATUS_NO_INHERITANCE"; + case 0x8000000C: return "STATUS_GUID_SUBSTITUTION_MADE"; + case 0x8000000D: return "STATUS_PARTIAL_COPY"; + case 0x8000000E: return "STATUS_DEVICE_PAPER_EMPTY"; + case 0x8000000F: return "STATUS_DEVICE_POWERED_OFF"; + case 0x80000010: return "STATUS_DEVICE_OFF_LINE"; + case 0x80000011: return "STATUS_DEVICE_BUSY"; + case 0x80000012: return "STATUS_NO_MORE_EAS"; + case 0x80000013: return "STATUS_INVALID_EA_NAME"; + case 0x80000014: return "STATUS_EA_LIST_INCONSISTENT"; + case 0x80000015: return "STATUS_INVALID_EA_FLAG"; + case 0x80000016: return "STATUS_VERIFY_REQUIRED"; + case 0x80000017: return "STATUS_EXTRANEOUS_INFORMATION"; + case 0x80000018: return "STATUS_RXACT_COMMIT_NECESSARY"; + case 0x8000001A: return "STATUS_NO_MORE_ENTRIES"; + case 0x8000001B: return "STATUS_FILEMARK_DETECTED"; + case 0x8000001C: return "STATUS_MEDIA_CHANGED"; + case 0x8000001D: return "STATUS_BUS_RESET"; + case 0x8000001E: return "STATUS_END_OF_MEDIA"; + case 0x8000001F: return "STATUS_BEGINNING_OF_MEDIA"; + case 0x80000020: return "STATUS_MEDIA_CHECK"; + case 0x80000021: return "STATUS_SETMARK_DETECTED"; + case 0x80000022: return "STATUS_NO_DATA_DETECTED"; + case 0x80000023: return "STATUS_REDIRECTOR_HAS_OPEN_HANDLES"; + case 0x80000024: return "STATUS_SERVER_HAS_OPEN_HANDLES"; + case 0x80000025: return "STATUS_ALREADY_DISCONNECTED"; + case 0x80000026: return "STATUS_LONGJUMP"; + case 0x80010001: return "DBG_EXCEPTION_NOT_HANDLED"; + case 0xC0000001: return "STATUS_UNSUCCESSFUL"; + case 0xC0000002: return "STATUS_NOT_IMPLEMENTED"; + case 0xC0000003: return "STATUS_INVALID_INFO_CLASS"; + case 0xC0000004: return "STATUS_INFO_LENGTH_MISMATCH"; + case 0xC0000005: return "STATUS_ACCESS_VIOLATION"; + case 0xC0000006: return "STATUS_IN_PAGE_ERROR"; + case 0xC0000007: return "STATUS_PAGEFILE_QUOTA"; + case 0xC0000008: return "STATUS_INVALID_HANDLE"; + case 0xC0000009: return "STATUS_BAD_INITIAL_STACK"; + case 0xC000000A: return "STATUS_BAD_INITIAL_PC"; + case 0xC000000B: return "STATUS_INVALID_CID"; + case 0xC000000C: return "STATUS_TIMER_NOT_CANCELED"; + case 0xC000000D: return "STATUS_INVALID_PARAMETER"; + case 0xC000000E: return "STATUS_NO_SUCH_DEVICE"; + case 0xC000000F: return "STATUS_NO_SUCH_FILE"; + case 0xC0000010: return "STATUS_INVALID_DEVICE_REQUEST"; + case 0xC0000011: return "STATUS_END_OF_FILE"; + case 0xC0000012: return "STATUS_WRONG_VOLUME"; + case 0xC0000013: return "STATUS_NO_MEDIA_IN_DEVICE"; + case 0xC0000014: return "STATUS_UNRECOGNIZED_MEDIA"; + case 0xC0000015: return "STATUS_NONEXISTENT_SECTOR"; + case 0xC0000016: return "STATUS_MORE_PROCESSING_REQUIRED"; + case 0xC0000017: return "STATUS_NO_MEMORY"; + case 0xC0000018: return "STATUS_CONFLICTING_ADDRESSES"; + case 0xC0000019: return "STATUS_NOT_MAPPED_VIEW"; + case 0xC000001A: return "STATUS_UNABLE_TO_FREE_VM"; + case 0xC000001B: return "STATUS_UNABLE_TO_DELETE_SECTION"; + case 0xC000001C: return "STATUS_INVALID_SYSTEM_SERVICE"; + case 0xC000001D: return "STATUS_ILLEGAL_INSTRUCTION"; + case 0xC000001E: return "STATUS_INVALID_LOCK_SEQUENCE"; + case 0xC000001F: return "STATUS_INVALID_VIEW_SIZE"; + case 0xC0000020: return "STATUS_INVALID_FILE_FOR_SECTION"; + case 0xC0000021: return "STATUS_ALREADY_COMMITTED"; + case 0xC0000022: return "STATUS_ACCESS_DENIED"; + case 0xC0000023: return "STATUS_BUFFER_TOO_SMALL"; + case 0xC0000024: return "STATUS_OBJECT_TYPE_MISMATCH"; + case 0xC0000025: return "STATUS_NONCONTINUABLE_EXCEPTION"; + case 0xC0000026: return "STATUS_INVALID_DISPOSITION"; + case 0xC0000027: return "STATUS_UNWIND"; + case 0xC0000028: return "STATUS_BAD_STACK"; + case 0xC0000029: return "STATUS_INVALID_UNWIND_TARGET"; + case 0xC000002A: return "STATUS_NOT_LOCKED"; + case 0xC000002B: return "STATUS_PARITY_ERROR"; + case 0xC000002C: return "STATUS_UNABLE_TO_DECOMMIT_VM"; + case 0xC000002D: return "STATUS_NOT_COMMITTED"; + case 0xC000002E: return "STATUS_INVALID_PORT_ATTRIBUTES"; + case 0xC000002F: return "STATUS_PORT_MESSAGE_TOO_LONG"; + case 0xC0000030: return "STATUS_INVALID_PARAMETER_MIX"; + case 0xC0000031: return "STATUS_INVALID_QUOTA_LOWER"; + case 0xC0000032: return "STATUS_DISK_CORRUPT_ERROR"; + case 0xC0000033: return "STATUS_OBJECT_NAME_INVALID"; + case 0xC0000034: return "STATUS_OBJECT_NAME_NOT_FOUND"; + case 0xC0000035: return "STATUS_OBJECT_NAME_COLLISION"; + case 0xC0000037: return "STATUS_PORT_DISCONNECTED"; + case 0xC0000038: return "STATUS_DEVICE_ALREADY_ATTACHED"; + case 0xC0000039: return "STATUS_OBJECT_PATH_INVALID"; + case 0xC000003A: return "STATUS_OBJECT_PATH_NOT_FOUND"; + case 0xC000003B: return "STATUS_OBJECT_PATH_SYNTAX_BAD"; + case 0xC000003C: return "STATUS_DATA_OVERRUN"; + case 0xC000003D: return "STATUS_DATA_LATE_ERROR"; + case 0xC000003E: return "STATUS_DATA_ERROR"; + case 0xC000003F: return "STATUS_CRC_ERROR"; + case 0xC0000040: return "STATUS_SECTION_TOO_BIG"; + case 0xC0000041: return "STATUS_PORT_CONNECTION_REFUSED"; + case 0xC0000042: return "STATUS_INVALID_PORT_HANDLE"; + case 0xC0000043: return "STATUS_SHARING_VIOLATION"; + case 0xC0000044: return "STATUS_QUOTA_EXCEEDED"; + case 0xC0000045: return "STATUS_INVALID_PAGE_PROTECTION"; + case 0xC0000046: return "STATUS_MUTANT_NOT_OWNED"; + case 0xC0000047: return "STATUS_SEMAPHORE_LIMIT_EXCEEDED"; + case 0xC0000048: return "STATUS_PORT_ALREADY_SET"; + case 0xC0000049: return "STATUS_SECTION_NOT_IMAGE"; + case 0xC000004A: return "STATUS_SUSPEND_COUNT_EXCEEDED"; + case 0xC000004B: return "STATUS_THREAD_IS_TERMINATING"; + case 0xC000004C: return "STATUS_BAD_WORKING_SET_LIMIT"; + case 0xC000004D: return "STATUS_INCOMPATIBLE_FILE_MAP"; + case 0xC000004E: return "STATUS_SECTION_PROTECTION"; + case 0xC000004F: return "STATUS_EAS_NOT_SUPPORTED"; + case 0xC0000050: return "STATUS_EA_TOO_LARGE"; + case 0xC0000051: return "STATUS_NONEXISTENT_EA_ENTRY"; + case 0xC0000052: return "STATUS_NO_EAS_ON_FILE"; + case 0xC0000053: return "STATUS_EA_CORRUPT_ERROR"; + case 0xC0000054: return "STATUS_FILE_LOCK_CONFLICT"; + case 0xC0000055: return "STATUS_LOCK_NOT_GRANTED"; + case 0xC0000056: return "STATUS_DELETE_PENDING"; + case 0xC0000057: return "STATUS_CTL_FILE_NOT_SUPPORTED"; + case 0xC0000058: return "STATUS_UNKNOWN_REVISION"; + case 0xC0000059: return "STATUS_REVISION_MISMATCH"; + case 0xC000005A: return "STATUS_INVALID_OWNER"; + case 0xC000005B: return "STATUS_INVALID_PRIMARY_GROUP"; + case 0xC000005C: return "STATUS_NO_IMPERSONATION_TOKEN"; + case 0xC000005D: return "STATUS_CANT_DISABLE_MANDATORY"; + case 0xC000005E: return "STATUS_NO_LOGON_SERVERS"; + case 0xC000005F: return "STATUS_NO_SUCH_LOGON_SESSION"; + case 0xC0000060: return "STATUS_NO_SUCH_PRIVILEGE"; + case 0xC0000061: return "STATUS_PRIVILEGE_NOT_HELD"; + case 0xC0000062: return "STATUS_INVALID_ACCOUNT_NAME"; + case 0xC0000063: return "STATUS_USER_EXISTS"; + case 0xC0000064: return "STATUS_NO_SUCH_USER"; + case 0xC0000065: return "STATUS_GROUP_EXISTS"; + case 0xC0000066: return "STATUS_NO_SUCH_GROUP"; + case 0xC0000067: return "STATUS_MEMBER_IN_GROUP"; + case 0xC0000068: return "STATUS_MEMBER_NOT_IN_GROUP"; + case 0xC0000069: return "STATUS_LAST_ADMIN"; + case 0xC000006A: return "STATUS_WRONG_PASSWORD"; + case 0xC000006B: return "STATUS_ILL_FORMED_PASSWORD"; + case 0xC000006C: return "STATUS_PASSWORD_RESTRICTION"; + case 0xC000006D: return "STATUS_LOGON_FAILURE"; + case 0xC000006E: return "STATUS_ACCOUNT_RESTRICTION"; + case 0xC000006F: return "STATUS_INVALID_LOGON_HOURS"; + case 0xC0000070: return "STATUS_INVALID_WORKSTATION"; + case 0xC0000071: return "STATUS_PASSWORD_EXPIRED"; + case 0xC0000072: return "STATUS_ACCOUNT_DISABLED"; + case 0xC0000073: return "STATUS_NONE_MAPPED"; + case 0xC0000074: return "STATUS_TOO_MANY_LUIDS_REQUESTED"; + case 0xC0000075: return "STATUS_LUIDS_EXHAUSTED"; + case 0xC0000076: return "STATUS_INVALID_SUB_AUTHORITY"; + case 0xC0000077: return "STATUS_INVALID_ACL"; + case 0xC0000078: return "STATUS_INVALID_SID"; + case 0xC0000079: return "STATUS_INVALID_SECURITY_DESCR"; + case 0xC000007A: return "STATUS_PROCEDURE_NOT_FOUND"; + case 0xC000007B: return "STATUS_INVALID_IMAGE_FORMAT"; + case 0xC000007C: return "STATUS_NO_TOKEN"; + case 0xC000007D: return "STATUS_BAD_INHERITANCE_ACL"; + case 0xC000007E: return "STATUS_RANGE_NOT_LOCKED"; + case 0xC000007F: return "STATUS_DISK_FULL"; + case 0xC0000080: return "STATUS_SERVER_DISABLED"; + case 0xC0000081: return "STATUS_SERVER_NOT_DISABLED"; + case 0xC0000082: return "STATUS_TOO_MANY_GUIDS_REQUESTED"; + case 0xC0000083: return "STATUS_GUIDS_EXHAUSTED"; + case 0xC0000084: return "STATUS_INVALID_ID_AUTHORITY"; + case 0xC0000085: return "STATUS_AGENTS_EXHAUSTED"; + case 0xC0000086: return "STATUS_INVALID_VOLUME_LABEL"; + case 0xC0000087: return "STATUS_SECTION_NOT_EXTENDED"; + case 0xC0000088: return "STATUS_NOT_MAPPED_DATA"; + case 0xC0000089: return "STATUS_RESOURCE_DATA_NOT_FOUND"; + case 0xC000008A: return "STATUS_RESOURCE_TYPE_NOT_FOUND"; + case 0xC000008B: return "STATUS_RESOURCE_NAME_NOT_FOUND"; + case 0xC000008C: return "STATUS_ARRAY_BOUNDS_EXCEEDED"; + case 0xC000008D: return "STATUS_FLOAT_DENORMAL_OPERAND"; + case 0xC000008E: return "STATUS_FLOAT_DIVIDE_BY_ZERO"; + case 0xC000008F: return "STATUS_FLOAT_INEXACT_RESULT"; + case 0xC0000090: return "STATUS_FLOAT_INVALID_OPERATION"; + case 0xC0000091: return "STATUS_FLOAT_OVERFLOW"; + case 0xC0000092: return "STATUS_FLOAT_STACK_CHECK"; + case 0xC0000093: return "STATUS_FLOAT_UNDERFLOW"; + case 0xC0000094: return "STATUS_INTEGER_DIVIDE_BY_ZERO"; + case 0xC0000095: return "STATUS_INTEGER_OVERFLOW"; + case 0xC0000096: return "STATUS_PRIVILEGED_INSTRUCTION"; + case 0xC0000097: return "STATUS_TOO_MANY_PAGING_FILES"; + case 0xC0000098: return "STATUS_FILE_INVALID"; + case 0xC0000099: return "STATUS_ALLOTTED_SPACE_EXCEEDED"; + case 0xC000009A: return "STATUS_INSUFFICIENT_RESOURCES"; + case 0xC000009B: return "STATUS_DFS_EXIT_PATH_FOUND"; + case 0xC000009C: return "STATUS_DEVICE_DATA_ERROR"; + case 0xC000009D: return "STATUS_DEVICE_NOT_CONNECTED"; + case 0xC000009E: return "STATUS_DEVICE_POWER_FAILURE"; + case 0xC000009F: return "STATUS_FREE_VM_NOT_AT_BASE"; + case 0xC00000A0: return "STATUS_MEMORY_NOT_ALLOCATED"; + case 0xC00000A1: return "STATUS_WORKING_SET_QUOTA"; + case 0xC00000A2: return "STATUS_MEDIA_WRITE_PROTECTED"; + case 0xC00000A3: return "STATUS_DEVICE_NOT_READY"; + case 0xC00000A4: return "STATUS_INVALID_GROUP_ATTRIBUTES"; + case 0xC00000A5: return "STATUS_BAD_IMPERSONATION_LEVEL"; + case 0xC00000A6: return "STATUS_CANT_OPEN_ANONYMOUS"; + case 0xC00000A7: return "STATUS_BAD_VALIDATION_CLASS"; + case 0xC00000A8: return "STATUS_BAD_TOKEN_TYPE"; + case 0xC00000A9: return "STATUS_BAD_MASTER_BOOT_RECORD"; + case 0xC00000AA: return "STATUS_INSTRUCTION_MISALIGNMENT"; + case 0xC00000AB: return "STATUS_INSTANCE_NOT_AVAILABLE"; + case 0xC00000AC: return "STATUS_PIPE_NOT_AVAILABLE"; + case 0xC00000AD: return "STATUS_INVALID_PIPE_STATE"; + case 0xC00000AE: return "STATUS_PIPE_BUSY"; + case 0xC00000AF: return "STATUS_ILLEGAL_FUNCTION"; + case 0xC00000B0: return "STATUS_PIPE_DISCONNECTED"; + case 0xC00000B1: return "STATUS_PIPE_CLOSING"; + case 0xC00000B2: return "STATUS_PIPE_CONNECTED"; + case 0xC00000B3: return "STATUS_PIPE_LISTENING"; + case 0xC00000B4: return "STATUS_INVALID_READ_MODE"; + case 0xC00000B5: return "STATUS_IO_TIMEOUT"; + case 0xC00000B6: return "STATUS_FILE_FORCED_CLOSED"; + case 0xC00000B7: return "STATUS_PROFILING_NOT_STARTED"; + case 0xC00000B8: return "STATUS_PROFILING_NOT_STOPPED"; + case 0xC00000B9: return "STATUS_COULD_NOT_INTERPRET"; + case 0xC00000BA: return "STATUS_FILE_IS_A_DIRECTORY"; + case 0xC00000BB: return "STATUS_NOT_SUPPORTED"; + case 0xC00000BC: return "STATUS_REMOTE_NOT_LISTENING"; + case 0xC00000BD: return "STATUS_DUPLICATE_NAME"; + case 0xC00000BE: return "STATUS_BAD_NETWORK_PATH"; + case 0xC00000BF: return "STATUS_NETWORK_BUSY"; + case 0xC00000C0: return "STATUS_DEVICE_DOES_NOT_EXIST"; + case 0xC00000C1: return "STATUS_TOO_MANY_COMMANDS"; + case 0xC00000C2: return "STATUS_ADAPTER_HARDWARE_ERROR"; + case 0xC00000C3: return "STATUS_INVALID_NETWORK_RESPONSE"; + case 0xC00000C4: return "STATUS_UNEXPECTED_NETWORK_ERROR"; + case 0xC00000C5: return "STATUS_BAD_REMOTE_ADAPTER"; + case 0xC00000C6: return "STATUS_PRINT_QUEUE_FULL"; + case 0xC00000C7: return "STATUS_NO_SPOOL_SPACE"; + case 0xC00000C8: return "STATUS_PRINT_CANCELLED"; + case 0xC00000C9: return "STATUS_NETWORK_NAME_DELETED"; + case 0xC00000CA: return "STATUS_NETWORK_ACCESS_DENIED"; + case 0xC00000CB: return "STATUS_BAD_DEVICE_TYPE"; + case 0xC00000CC: return "STATUS_BAD_NETWORK_NAME"; + case 0xC00000CD: return "STATUS_TOO_MANY_NAMES"; + case 0xC00000CE: return "STATUS_TOO_MANY_SESSIONS"; + case 0xC00000CF: return "STATUS_SHARING_PAUSED"; + case 0xC00000D0: return "STATUS_REQUEST_NOT_ACCEPTED"; + case 0xC00000D1: return "STATUS_REDIRECTOR_PAUSED"; + case 0xC00000D2: return "STATUS_NET_WRITE_FAULT"; + case 0xC00000D3: return "STATUS_PROFILING_AT_LIMIT"; + case 0xC00000D4: return "STATUS_NOT_SAME_DEVICE"; + case 0xC00000D5: return "STATUS_FILE_RENAMED"; + case 0xC00000D6: return "STATUS_VIRTUAL_CIRCUIT_CLOSED"; + case 0xC00000D7: return "STATUS_NO_SECURITY_ON_OBJECT"; + case 0xC00000D8: return "STATUS_CANT_WAIT"; + case 0xC00000D9: return "STATUS_PIPE_EMPTY"; + case 0xC00000DA: return "STATUS_CANT_ACCESS_DOMAIN_INFO"; + case 0xC00000DB: return "STATUS_CANT_TERMINATE_SELF"; + case 0xC00000DC: return "STATUS_INVALID_SERVER_STATE"; + case 0xC00000DD: return "STATUS_INVALID_DOMAIN_STATE"; + case 0xC00000DE: return "STATUS_INVALID_DOMAIN_ROLE"; + case 0xC00000DF: return "STATUS_NO_SUCH_DOMAIN"; + case 0xC00000E0: return "STATUS_DOMAIN_EXISTS"; + case 0xC00000E1: return "STATUS_DOMAIN_LIMIT_EXCEEDED"; + case 0xC00000E2: return "STATUS_OPLOCK_NOT_GRANTED"; + case 0xC00000E3: return "STATUS_INVALID_OPLOCK_PROTOCOL"; + case 0xC00000E4: return "STATUS_INTERNAL_DB_CORRUPTION"; + case 0xC00000E5: return "STATUS_INTERNAL_ERROR"; + case 0xC00000E6: return "STATUS_GENERIC_NOT_MAPPED"; + case 0xC00000E7: return "STATUS_BAD_DESCRIPTOR_FORMAT"; + case 0xC00000E8: return "STATUS_INVALID_USER_BUFFER"; + case 0xC00000E9: return "STATUS_UNEXPECTED_IO_ERROR"; + case 0xC00000EA: return "STATUS_UNEXPECTED_MM_CREATE_ERR"; + case 0xC00000EB: return "STATUS_UNEXPECTED_MM_MAP_ERROR"; + case 0xC00000EC: return "STATUS_UNEXPECTED_MM_EXTEND_ERR"; + case 0xC00000ED: return "STATUS_NOT_LOGON_PROCESS"; + case 0xC00000EE: return "STATUS_LOGON_SESSION_EXISTS"; + case 0xC00000EF: return "STATUS_INVALID_PARAMETER_1"; + case 0xC00000F0: return "STATUS_INVALID_PARAMETER_2"; + case 0xC00000F1: return "STATUS_INVALID_PARAMETER_3"; + case 0xC00000F2: return "STATUS_INVALID_PARAMETER_4"; + case 0xC00000F3: return "STATUS_INVALID_PARAMETER_5"; + case 0xC00000F4: return "STATUS_INVALID_PARAMETER_6"; + case 0xC00000F5: return "STATUS_INVALID_PARAMETER_7"; + case 0xC00000F6: return "STATUS_INVALID_PARAMETER_8"; + case 0xC00000F7: return "STATUS_INVALID_PARAMETER_9"; + case 0xC00000F8: return "STATUS_INVALID_PARAMETER_10"; + case 0xC00000F9: return "STATUS_INVALID_PARAMETER_11"; + case 0xC00000FA: return "STATUS_INVALID_PARAMETER_12"; + case 0xC00000FB: return "STATUS_REDIRECTOR_NOT_STARTED"; + case 0xC00000FC: return "STATUS_REDIRECTOR_STARTED"; + case 0xC00000FD: return "STATUS_STACK_OVERFLOW"; + case 0xC00000FE: return "STATUS_NO_SUCH_PACKAGE"; + case 0xC00000FF: return "STATUS_BAD_FUNCTION_TABLE"; + case 0xC0000100: return "STATUS_VARIABLE_NOT_FOUND"; + case 0xC0000101: return "STATUS_DIRECTORY_NOT_EMPTY"; + case 0xC0000102: return "STATUS_FILE_CORRUPT_ERROR"; + case 0xC0000103: return "STATUS_NOT_A_DIRECTORY"; + case 0xC0000104: return "STATUS_BAD_LOGON_SESSION_STATE"; + case 0xC0000105: return "STATUS_LOGON_SESSION_COLLISION"; + case 0xC0000106: return "STATUS_NAME_TOO_LONG"; + case 0xC0000107: return "STATUS_FILES_OPEN"; + case 0xC0000108: return "STATUS_CONNECTION_IN_USE"; + case 0xC0000109: return "STATUS_MESSAGE_NOT_FOUND"; + case 0xC000010A: return "STATUS_PROCESS_IS_TERMINATING"; + case 0xC000010B: return "STATUS_INVALID_LOGON_TYPE"; + case 0xC000010C: return "STATUS_NO_GUID_TRANSLATION"; + case 0xC000010D: return "STATUS_CANNOT_IMPERSONATE"; + case 0xC000010E: return "STATUS_IMAGE_ALREADY_LOADED"; + case 0xC000010F: return "STATUS_ABIOS_NOT_PRESENT"; + case 0xC0000110: return "STATUS_ABIOS_LID_NOT_EXIST"; + case 0xC0000111: return "STATUS_ABIOS_LID_ALREADY_OWNED"; + case 0xC0000112: return "STATUS_ABIOS_NOT_LID_OWNER"; + case 0xC0000113: return "STATUS_ABIOS_INVALID_COMMAND"; + case 0xC0000114: return "STATUS_ABIOS_INVALID_LID"; + case 0xC0000115: return "STATUS_ABIOS_SELECTOR_NOT_AVAILABLE"; + case 0xC0000116: return "STATUS_ABIOS_INVALID_SELECTOR"; + case 0xC0000117: return "STATUS_NO_LDT"; + case 0xC0000118: return "STATUS_INVALID_LDT_SIZE"; + case 0xC0000119: return "STATUS_INVALID_LDT_OFFSET"; + case 0xC000011A: return "STATUS_INVALID_LDT_DESCRIPTOR"; + case 0xC000011B: return "STATUS_INVALID_IMAGE_NE_FORMAT"; + case 0xC000011C: return "STATUS_RXACT_INVALID_STATE"; + case 0xC000011D: return "STATUS_RXACT_COMMIT_FAILURE"; + case 0xC000011E: return "STATUS_MAPPED_FILE_SIZE_ZERO"; + case 0xC000011F: return "STATUS_TOO_MANY_OPENED_FILES"; + case 0xC0000120: return "STATUS_CANCELLED"; + case 0xC0000121: return "STATUS_CANNOT_DELETE"; + case 0xC0000122: return "STATUS_INVALID_COMPUTER_NAME"; + case 0xC0000123: return "STATUS_FILE_DELETED"; + case 0xC0000124: return "STATUS_SPECIAL_ACCOUNT"; + case 0xC0000125: return "STATUS_SPECIAL_GROUP"; + case 0xC0000126: return "STATUS_SPECIAL_USER"; + case 0xC0000127: return "STATUS_MEMBERS_PRIMARY_GROUP"; + case 0xC0000128: return "STATUS_FILE_CLOSED"; + case 0xC0000129: return "STATUS_TOO_MANY_THREADS"; + case 0xC000012A: return "STATUS_THREAD_NOT_IN_PROCESS"; + case 0xC000012B: return "STATUS_TOKEN_ALREADY_IN_USE"; + case 0xC000012C: return "STATUS_PAGEFILE_QUOTA_EXCEEDED"; + case 0xC000012D: return "STATUS_COMMITMENT_LIMIT"; + case 0xC000012E: return "STATUS_INVALID_IMAGE_LE_FORMAT"; + case 0xC000012F: return "STATUS_INVALID_IMAGE_NOT_MZ"; + case 0xC0000130: return "STATUS_INVALID_IMAGE_PROTECT"; + case 0xC0000131: return "STATUS_INVALID_IMAGE_WIN_16"; + case 0xC0000132: return "STATUS_LOGON_SERVER_CONFLICT"; + case 0xC0000133: return "STATUS_TIME_DIFFERENCE_AT_DC"; + case 0xC0000134: return "STATUS_SYNCHRONIZATION_REQUIRED"; + case 0xC0000135: return "STATUS_DLL_NOT_FOUND"; + case 0xC0000136: return "STATUS_OPEN_FAILED"; + case 0xC0000137: return "STATUS_IO_PRIVILEGE_FAILED"; + case 0xC0000138: return "STATUS_ORDINAL_NOT_FOUND"; + case 0xC0000139: return "STATUS_ENTRYPOINT_NOT_FOUND"; + case 0xC000013A: return "STATUS_CONTROL_C_EXIT"; + case 0xC000013B: return "STATUS_LOCAL_DISCONNECT"; + case 0xC000013C: return "STATUS_REMOTE_DISCONNECT"; + case 0xC000013D: return "STATUS_REMOTE_RESOURCES"; + case 0xC000013E: return "STATUS_LINK_FAILED"; + case 0xC000013F: return "STATUS_LINK_TIMEOUT"; + case 0xC0000140: return "STATUS_INVALID_CONNECTION"; + case 0xC0000141: return "STATUS_INVALID_ADDRESS"; + case 0xC0000142: return "STATUS_DLL_INIT_FAILED"; + case 0xC0000143: return "STATUS_MISSING_SYSTEMFILE"; + case 0xC0000144: return "STATUS_UNHANDLED_EXCEPTION"; + case 0xC0000145: return "STATUS_APP_INIT_FAILURE"; + case 0xC0000146: return "STATUS_PAGEFILE_CREATE_FAILED"; + case 0xC0000147: return "STATUS_NO_PAGEFILE"; + case 0xC0000148: return "STATUS_INVALID_LEVEL"; + case 0xC0000149: return "STATUS_WRONG_PASSWORD_CORE"; + case 0xC000014A: return "STATUS_ILLEGAL_FLOAT_CONTEXT"; + case 0xC000014B: return "STATUS_PIPE_BROKEN"; + case 0xC000014C: return "STATUS_REGISTRY_CORRUPT"; + case 0xC000014D: return "STATUS_REGISTRY_IO_FAILED"; + case 0xC000014E: return "STATUS_NO_EVENT_PAIR"; + case 0xC000014F: return "STATUS_UNRECOGNIZED_VOLUME"; + case 0xC0000150: return "STATUS_SERIAL_NO_DEVICE_INITED"; + case 0xC0000151: return "STATUS_NO_SUCH_ALIAS"; + case 0xC0000152: return "STATUS_MEMBER_NOT_IN_ALIAS"; + case 0xC0000153: return "STATUS_MEMBER_IN_ALIAS"; + case 0xC0000154: return "STATUS_ALIAS_EXISTS"; + case 0xC0000155: return "STATUS_LOGON_NOT_GRANTED"; + case 0xC0000156: return "STATUS_TOO_MANY_SECRETS"; + case 0xC0000157: return "STATUS_SECRET_TOO_LONG"; + case 0xC0000158: return "STATUS_INTERNAL_DB_ERROR"; + case 0xC0000159: return "STATUS_FULLSCREEN_MODE"; + case 0xC000015A: return "STATUS_TOO_MANY_CONTEXT_IDS"; + case 0xC000015B: return "STATUS_LOGON_TYPE_NOT_GRANTED"; + case 0xC000015C: return "STATUS_NOT_REGISTRY_FILE"; + case 0xC000015D: return "STATUS_NT_CROSS_ENCRYPTION_REQUIRED"; + case 0xC000015E: return "STATUS_DOMAIN_CTRLR_CONFIG_ERROR"; + case 0xC000015F: return "STATUS_FT_MISSING_MEMBER"; + case 0xC0000160: return "STATUS_ILL_FORMED_SERVICE_ENTRY"; + case 0xC0000161: return "STATUS_ILLEGAL_CHARACTER"; + case 0xC0000162: return "STATUS_UNMAPPABLE_CHARACTER"; + case 0xC0000163: return "STATUS_UNDEFINED_CHARACTER"; + case 0xC0000164: return "STATUS_FLOPPY_VOLUME"; + case 0xC0000165: return "STATUS_FLOPPY_ID_MARK_NOT_FOUND"; + case 0xC0000166: return "STATUS_FLOPPY_WRONG_CYLINDER"; + case 0xC0000167: return "STATUS_FLOPPY_UNKNOWN_ERROR"; + case 0xC0000168: return "STATUS_FLOPPY_BAD_REGISTERS"; + case 0xC0000169: return "STATUS_DISK_RECALIBRATE_FAILED"; + case 0xC000016A: return "STATUS_DISK_OPERATION_FAILED"; + case 0xC000016B: return "STATUS_DISK_RESET_FAILED"; + case 0xC000016C: return "STATUS_SHARED_IRQ_BUSY"; + case 0xC000016D: return "STATUS_FT_ORPHANING"; + case 0xC000016E: return "STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT"; + case 0xC0000172: return "STATUS_PARTITION_FAILURE"; + case 0xC0000173: return "STATUS_INVALID_BLOCK_LENGTH"; + case 0xC0000174: return "STATUS_DEVICE_NOT_PARTITIONED"; + case 0xC0000175: return "STATUS_UNABLE_TO_LOCK_MEDIA"; + case 0xC0000176: return "STATUS_UNABLE_TO_UNLOAD_MEDIA"; + case 0xC0000177: return "STATUS_EOM_OVERFLOW"; + case 0xC0000178: return "STATUS_NO_MEDIA"; + case 0xC000017A: return "STATUS_NO_SUCH_MEMBER"; + case 0xC000017B: return "STATUS_INVALID_MEMBER"; + case 0xC000017C: return "STATUS_KEY_DELETED"; + case 0xC000017D: return "STATUS_NO_LOG_SPACE"; + case 0xC000017E: return "STATUS_TOO_MANY_SIDS"; + case 0xC000017F: return "STATUS_LM_CROSS_ENCRYPTION_REQUIRED"; + case 0xC0000180: return "STATUS_KEY_HAS_CHILDREN"; + case 0xC0000181: return "STATUS_CHILD_MUST_BE_VOLATILE"; + case 0xC0000182: return "STATUS_DEVICE_CONFIGURATION_ERROR"; + case 0xC0000183: return "STATUS_DRIVER_INTERNAL_ERROR"; + case 0xC0000184: return "STATUS_INVALID_DEVICE_STATE"; + case 0xC0000185: return "STATUS_IO_DEVICE_ERROR"; + case 0xC0000186: return "STATUS_DEVICE_PROTOCOL_ERROR"; + case 0xC0000187: return "STATUS_BACKUP_CONTROLLER"; + case 0xC0000188: return "STATUS_LOG_FILE_FULL"; + case 0xC0000189: return "STATUS_TOO_LATE"; + case 0xC000018A: return "STATUS_NO_TRUST_LSA_SECRET"; + case 0xC000018B: return "STATUS_NO_TRUST_SAM_ACCOUNT"; + case 0xC000018C: return "STATUS_TRUSTED_DOMAIN_FAILURE"; + case 0xC000018D: return "STATUS_TRUSTED_RELATIONSHIP_FAILURE"; + case 0xC000018E: return "STATUS_EVENTLOG_FILE_CORRUPT"; + case 0xC000018F: return "STATUS_EVENTLOG_CANT_START"; + case 0xC0000190: return "STATUS_TRUST_FAILURE"; + case 0xC0000191: return "STATUS_MUTANT_LIMIT_EXCEEDED"; + case 0xC0000192: return "STATUS_NETLOGON_NOT_STARTED"; + case 0xC0000193: return "STATUS_ACCOUNT_EXPIRED"; + case 0xC0000194: return "STATUS_POSSIBLE_DEADLOCK"; + case 0xC0000195: return "STATUS_NETWORK_CREDENTIAL_CONFLICT"; + case 0xC0000196: return "STATUS_REMOTE_SESSION_LIMIT"; + case 0xC0000197: return "STATUS_EVENTLOG_FILE_CHANGED"; + case 0xC0000198: return "STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT"; + case 0xC0000199: return "STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT"; + case 0xC000019A: return "STATUS_NOLOGON_SERVER_TRUST_ACCOUNT"; + case 0xC000019B: return "STATUS_DOMAIN_TRUST_INCONSISTENT"; + case 0xC000019C: return "STATUS_FS_DRIVER_REQUIRED"; + case 0xC0000202: return "STATUS_NO_USER_SESSION_KEY"; + case 0xC0000203: return "STATUS_USER_SESSION_DELETED"; + case 0xC0000204: return "STATUS_RESOURCE_LANG_NOT_FOUND"; + case 0xC0000205: return "STATUS_INSUFF_SERVER_RESOURCES"; + case 0xC0000206: return "STATUS_INVALID_BUFFER_SIZE"; + case 0xC0000207: return "STATUS_INVALID_ADDRESS_COMPONENT"; + case 0xC0000208: return "STATUS_INVALID_ADDRESS_WILDCARD"; + case 0xC0000209: return "STATUS_TOO_MANY_ADDRESSES"; + case 0xC000020A: return "STATUS_ADDRESS_ALREADY_EXISTS"; + case 0xC000020B: return "STATUS_ADDRESS_CLOSED"; + case 0xC000020C: return "STATUS_CONNECTION_DISCONNECTED"; + case 0xC000020D: return "STATUS_CONNECTION_RESET"; + case 0xC000020E: return "STATUS_TOO_MANY_NODES"; + case 0xC000020F: return "STATUS_TRANSACTION_ABORTED"; + case 0xC0000210: return "STATUS_TRANSACTION_TIMED_OUT"; + case 0xC0000211: return "STATUS_TRANSACTION_NO_RELEASE"; + case 0xC0000212: return "STATUS_TRANSACTION_NO_MATCH"; + case 0xC0000213: return "STATUS_TRANSACTION_RESPONDED"; + case 0xC0000214: return "STATUS_TRANSACTION_INVALID_ID"; + case 0xC0000215: return "STATUS_TRANSACTION_INVALID_TYPE"; + case 0xC0000216: return "STATUS_NOT_SERVER_SESSION"; + case 0xC0000217: return "STATUS_NOT_CLIENT_SESSION"; + case 0xC0000218: return "STATUS_CANNOT_LOAD_REGISTRY_FILE"; + case 0xC0000219: return "STATUS_DEBUG_ATTACH_FAILED"; + case 0xC000021A: return "STATUS_SYSTEM_PROCESS_TERMINATED"; + case 0xC000021B: return "STATUS_DATA_NOT_ACCEPTED"; + case 0xC000021C: return "STATUS_NO_BROWSER_SERVERS_FOUND"; + case 0xC000021D: return "STATUS_VDM_HARD_ERROR"; + case 0xC000021E: return "STATUS_DRIVER_CANCEL_TIMEOUT"; + case 0xC000021F: return "STATUS_REPLY_MESSAGE_MISMATCH"; + case 0xC0000220: return "STATUS_MAPPED_ALIGNMENT"; + case 0xC0000221: return "STATUS_IMAGE_CHECKSUM_MISMATCH"; + case 0xC0000222: return "STATUS_LOST_WRITEBEHIND_DATA"; + case 0xC0000223: return "STATUS_CLIENT_SERVER_PARAMETERS_INVALID"; + case 0xC0000224: return "STATUS_PASSWORD_MUST_CHANGE"; + case 0xC0000225: return "STATUS_NOT_FOUND"; + case 0xC0000226: return "STATUS_NOT_TINY_STREAM"; + case 0xC0000227: return "STATUS_RECOVERY_FAILURE"; + case 0xC0000228: return "STATUS_STACK_OVERFLOW_READ"; + case 0xC0000229: return "STATUS_FAIL_CHECK"; + case 0xC000022A: return "STATUS_DUPLICATE_OBJECTID"; + case 0xC000022B: return "STATUS_OBJECTID_EXISTS"; + case 0xC000022C: return "STATUS_CONVERT_TO_LARGE"; + case 0xC000022D: return "STATUS_RETRY"; + case 0xC000022E: return "STATUS_FOUND_OUT_OF_SCOPE"; + case 0xC000022F: return "STATUS_ALLOCATE_BUCKET"; + case 0xC0000230: return "STATUS_PROPSET_NOT_FOUND"; + case 0xC0000231: return "STATUS_MARSHALL_OVERFLOW"; + case 0xC0000232: return "STATUS_INVALID_VARIANT"; + case 0xC0000233: return "STATUS_DOMAIN_CONTROLLER_NOT_FOUND"; + case 0xC0000234: return "STATUS_ACCOUNT_LOCKED_OUT"; + case 0xC0000235: return "STATUS_HANDLE_NOT_CLOSABLE"; + case 0xC0000236: return "STATUS_CONNECTION_REFUSED"; + case 0xC0000237: return "STATUS_GRACEFUL_DISCONNECT"; + case 0xC0000238: return "STATUS_ADDRESS_ALREADY_ASSOCIATED"; + case 0xC0000239: return "STATUS_ADDRESS_NOT_ASSOCIATED"; + case 0xC000023A: return "STATUS_CONNECTION_INVALID"; + case 0xC000023B: return "STATUS_CONNECTION_ACTIVE"; + case 0xC000023C: return "STATUS_NETWORK_UNREACHABLE"; + case 0xC000023D: return "STATUS_HOST_UNREACHABLE"; + case 0xC000023E: return "STATUS_PROTOCOL_UNREACHABLE"; + case 0xC000023F: return "STATUS_PORT_UNREACHABLE"; + case 0xC0000240: return "STATUS_REQUEST_ABORTED"; + case 0xC0000241: return "STATUS_CONNECTION_ABORTED"; + case 0xC0000242: return "STATUS_BAD_COMPRESSION_BUFFER"; + case 0xC0000243: return "STATUS_USER_MAPPED_FILE"; + case 0xC0000244: return "STATUS_AUDIT_FAILED"; + case 0xC0000245: return "STATUS_TIMER_RESOLUTION_NOT_SET"; + case 0xC0000246: return "STATUS_CONNECTION_COUNT_LIMIT"; + case 0xC0000247: return "STATUS_LOGIN_TIME_RESTRICTION"; + case 0xC0000248: return "STATUS_LOGIN_WKSTA_RESTRICTION"; + case 0xC0000249: return "STATUS_IMAGE_MP_UP_MISMATCH"; + case 0xC0000250: return "STATUS_INSUFFICIENT_LOGON_INFO"; + case 0xC0000251: return "STATUS_BAD_DLL_ENTRYPOINT"; + case 0xC0000252: return "STATUS_BAD_SERVICE_ENTRYPOINT"; + case 0xC0000253: return "STATUS_LPC_REPLY_LOST"; + case 0xC0000254: return "STATUS_IP_ADDRESS_CONFLICT1"; + case 0xC0000255: return "STATUS_IP_ADDRESS_CONFLICT2"; + case 0xC0000256: return "STATUS_REGISTRY_QUOTA_LIMIT"; + case 0xC0000257: return "STATUS_PATH_NOT_COVERED"; + case 0xC0000258: return "STATUS_NO_CALLBACK_ACTIVE"; + case 0xC0000259: return "STATUS_LICENSE_QUOTA_EXCEEDED"; + case 0xC000025A: return "STATUS_PWD_TOO_SHORT"; + case 0xC000025B: return "STATUS_PWD_TOO_RECENT"; + case 0xC000025C: return "STATUS_PWD_HISTORY_CONFLICT"; + case 0xC000025E: return "STATUS_PLUGPLAY_NO_DEVICE"; + case 0xC000025F: return "STATUS_UNSUPPORTED_COMPRESSION"; + case 0xC0000260: return "STATUS_INVALID_HW_PROFILE"; + case 0xC0000261: return "STATUS_INVALID_PLUGPLAY_DEVICE_PATH"; + case 0xC0000262: return "STATUS_DRIVER_ORDINAL_NOT_FOUND"; + case 0xC0000263: return "STATUS_DRIVER_ENTRYPOINT_NOT_FOUND"; + case 0xC0000264: return "STATUS_RESOURCE_NOT_OWNED"; + case 0xC0000265: return "STATUS_TOO_MANY_LINKS"; + case 0xC0000266: return "STATUS_QUOTA_LIST_INCONSISTENT"; + case 0xC0000267: return "STATUS_FILE_IS_OFFLINE"; + case 0xC0000268: return "STATUS_EVALUATION_EXPIRATION"; + case 0xC0000269: return "STATUS_ILLEGAL_DLL_RELOCATION"; + case 0xC000026A: return "STATUS_LICENSE_VIOLATION"; + case 0xC000026B: return "STATUS_DLL_INIT_FAILED_LOGOFF"; + case 0xC000026C: return "STATUS_DRIVER_UNABLE_TO_LOAD"; + case 0xC000026D: return "STATUS_DFS_UNAVAILABLE"; + case 0xC000026E: return "STATUS_VOLUME_DISMOUNTED"; + case 0xC000026F: return "STATUS_WX86_INTERNAL_ERROR"; + case 0xC0000270: return "STATUS_WX86_FLOAT_STACK_CHECK"; + case 0xC0000271: return "STATUS_VALIDATE_CONTINUE"; + case 0xC0000272: return "STATUS_NO_MATCH"; + case 0xC0000273: return "STATUS_NO_MORE_MATCHES"; + case 0xC0000275: return "STATUS_NOT_A_REPARSE_POINT"; + case 0xC0000276: return "STATUS_IO_REPARSE_TAG_INVALID"; + case 0xC0000277: return "STATUS_IO_REPARSE_TAG_MISMATCH"; + case 0xC0000278: return "STATUS_IO_REPARSE_DATA_INVALID"; + case 0xC0000279: return "STATUS_IO_REPARSE_TAG_NOT_HANDLED"; + case 0xC0000280: return "STATUS_REPARSE_POINT_NOT_RESOLVED"; + case 0xC0000281: return "STATUS_DIRECTORY_IS_A_REPARSE_POINT"; + case 0xC0000282: return "STATUS_RANGE_LIST_CONFLICT"; + case 0xC0000283: return "STATUS_SOURCE_ELEMENT_EMPTY"; + case 0xC0000284: return "STATUS_DESTINATION_ELEMENT_FULL"; + case 0xC0000285: return "STATUS_ILLEGAL_ELEMENT_ADDRESS"; + case 0xC0000286: return "STATUS_MAGAZINE_NOT_PRESENT"; + case 0xC0000287: return "STATUS_REINITIALIZATION_NEEDED"; + case 0x80000288: return "STATUS_DEVICE_REQUIRES_CLEANING"; + case 0x80000289: return "STATUS_DEVICE_DOOR_OPEN"; + case 0xC000028A: return "STATUS_ENCRYPTION_FAILED"; + case 0xC000028B: return "STATUS_DECRYPTION_FAILED"; + case 0xC000028C: return "STATUS_RANGE_NOT_FOUND"; + case 0xC000028D: return "STATUS_NO_RECOVERY_POLICY"; + case 0xC000028E: return "STATUS_NO_EFS"; + case 0xC000028F: return "STATUS_WRONG_EFS"; + case 0xC0000290: return "STATUS_NO_USER_KEYS"; + case 0xC0000291: return "STATUS_FILE_NOT_ENCRYPTED"; + case 0xC0000292: return "STATUS_NOT_EXPORT_FORMAT"; + case 0xC0000293: return "STATUS_FILE_ENCRYPTED"; + case 0x40000294: return "STATUS_WAKE_SYSTEM"; + case 0xC0000295: return "STATUS_WMI_GUID_NOT_FOUND"; + case 0xC0000296: return "STATUS_WMI_INSTANCE_NOT_FOUND"; + case 0xC0000297: return "STATUS_WMI_ITEMID_NOT_FOUND"; + case 0xC0000298: return "STATUS_WMI_TRY_AGAIN"; + case 0xC0000299: return "STATUS_SHARED_POLICY"; + case 0xC000029A: return "STATUS_POLICY_OBJECT_NOT_FOUND"; + case 0xC000029B: return "STATUS_POLICY_ONLY_IN_DS"; + case 0xC000029C: return "STATUS_VOLUME_NOT_UPGRADED"; + case 0xC000029D: return "STATUS_REMOTE_STORAGE_NOT_ACTIVE"; + case 0xC000029E: return "STATUS_REMOTE_STORAGE_MEDIA_ERROR"; + case 0xC000029F: return "STATUS_NO_TRACKING_SERVICE"; + case 0xC00002A0: return "STATUS_SERVER_SID_MISMATCH"; + case 0xC00002A1: return "STATUS_DS_NO_ATTRIBUTE_OR_VALUE"; + case 0xC00002A2: return "STATUS_DS_INVALID_ATTRIBUTE_SYNTAX"; + case 0xC00002A3: return "STATUS_DS_ATTRIBUTE_TYPE_UNDEFINED"; + case 0xC00002A4: return "STATUS_DS_ATTRIBUTE_OR_VALUE_EXISTS"; + case 0xC00002A5: return "STATUS_DS_BUSY"; + case 0xC00002A6: return "STATUS_DS_UNAVAILABLE"; + case 0xC00002A7: return "STATUS_DS_NO_RIDS_ALLOCATED"; + case 0xC00002A8: return "STATUS_DS_NO_MORE_RIDS"; + case 0xC00002A9: return "STATUS_DS_INCORRECT_ROLE_OWNER"; + case 0xC00002AA: return "STATUS_DS_RIDMGR_INIT_ERROR"; + case 0xC00002AB: return "STATUS_DS_OBJ_CLASS_VIOLATION"; + case 0xC00002AC: return "STATUS_DS_CANT_ON_NON_LEAF"; + case 0xC00002AD: return "STATUS_DS_CANT_ON_RDN"; + case 0xC00002AE: return "STATUS_DS_CANT_MOD_OBJ_CLASS"; + case 0xC00002AF: return "STATUS_DS_CROSS_DOM_MOVE_FAILED"; + case 0xC00002B0: return "STATUS_DS_GC_NOT_AVAILABLE"; + case 0xC00002B1: return "STATUS_DIRECTORY_SERVICE_REQUIRED"; + case 0xC00002B2: return "STATUS_REPARSE_ATTRIBUTE_CONFLICT"; + case 0xC00002B3: return "STATUS_CANT_ENABLE_DENY_ONLY"; + case 0xC00002B4: return "STATUS_FLOAT_MULTIPLE_FAULTS"; + case 0xC00002B5: return "STATUS_FLOAT_MULTIPLE_TRAPS"; + case 0xC00002B6: return "STATUS_DEVICE_REMOVED"; + case 0xC00002B7: return "STATUS_JOURNAL_DELETE_IN_PROGRESS"; + case 0xC00002B8: return "STATUS_JOURNAL_NOT_ACTIVE"; + case 0xC00002B9: return "STATUS_NOINTERFACE"; + case 0xC00002C1: return "STATUS_DS_ADMIN_LIMIT_EXCEEDED"; + case 0xC00002C2: return "STATUS_DRIVER_FAILED_SLEEP"; + case 0xC00002C3: return "STATUS_MUTUAL_AUTHENTICATION_FAILED"; + case 0xC00002C4: return "STATUS_CORRUPT_SYSTEM_FILE"; + case 0xC00002C5: return "STATUS_DATATYPE_MISALIGNMENT_ERROR"; + case 0xC00002C6: return "STATUS_WMI_READ_ONLY"; + case 0xC00002C7: return "STATUS_WMI_SET_FAILURE"; + case 0xC00002C8: return "STATUS_COMMITMENT_MINIMUM"; + case 0xC00002C9: return "STATUS_REG_NAT_CONSUMPTION"; + case 0xC00002CA: return "STATUS_TRANSPORT_FULL"; + case 0xC00002CB: return "STATUS_DS_SAM_INIT_FAILURE"; + case 0xC00002CC: return "STATUS_ONLY_IF_CONNECTED"; + case 0xC00002CD: return "STATUS_DS_SENSITIVE_GROUP_VIOLATION"; + case 0xC00002CE: return "STATUS_PNP_RESTART_ENUMERATION"; + case 0xC00002CF: return "STATUS_JOURNAL_ENTRY_DELETED"; + case 0xC00002D0: return "STATUS_DS_CANT_MOD_PRIMARYGROUPID"; + case 0xC00002D1: return "STATUS_SYSTEM_IMAGE_BAD_SIGNATURE"; + case 0xC00002D2: return "STATUS_PNP_REBOOT_REQUIRED"; + case 0xC00002D3: return "STATUS_POWER_STATE_INVALID"; + case 0xC00002D4: return "STATUS_DS_INVALID_GROUP_TYPE"; + case 0xC00002D5: return "STATUS_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN"; + case 0xC00002D6: return "STATUS_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN"; + case 0xC00002D7: return "STATUS_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER"; + case 0xC00002D8: return "STATUS_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER"; + case 0xC00002D9: return "STATUS_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER"; + case 0xC00002DA: return "STATUS_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER"; + case 0xC00002DB: return "STATUS_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER"; + case 0xC00002DC: return "STATUS_DS_HAVE_PRIMARY_MEMBERS"; + case 0xC00002DD: return "STATUS_WMI_NOT_SUPPORTED"; + case 0xC00002DE: return "STATUS_INSUFFICIENT_POWER"; + case 0xC00002DF: return "STATUS_SAM_NEED_BOOTKEY_PASSWORD"; + case 0xC00002E0: return "STATUS_SAM_NEED_BOOTKEY_FLOPPY"; + case 0xC00002E1: return "STATUS_DS_CANT_START"; + case 0xC00002E2: return "STATUS_DS_INIT_FAILURE"; + case 0xC00002E3: return "STATUS_SAM_INIT_FAILURE"; + case 0xC00002E4: return "STATUS_DS_GC_REQUIRED"; + case 0xC00002E5: return "STATUS_DS_LOCAL_MEMBER_OF_LOCAL_ONLY"; + case 0xC00002E6: return "STATUS_DS_NO_FPO_IN_UNIVERSAL_GROUPS"; + case 0xC00002E7: return "STATUS_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED"; + case 0xC00002E8: return "STATUS_MULTIPLE_FAULT_VIOLATION"; + case 0xC0000300: return "STATUS_NOT_SUPPORTED_ON_SBS"; + case 0xC0009898: return "STATUS_WOW_ASSERTION"; + case 0xC0010001: return "DBG_NO_STATE_CHANGE"; + case 0xC0010002: return "DBG_APP_NOT_IDLE"; + case 0xC0020001: return "RPC_NT_INVALID_STRING_BINDING"; + case 0xC0020002: return "RPC_NT_WRONG_KIND_OF_BINDING"; + case 0xC0020003: return "RPC_NT_INVALID_BINDING"; + case 0xC0020004: return "RPC_NT_PROTSEQ_NOT_SUPPORTED"; + case 0xC0020005: return "RPC_NT_INVALID_RPC_PROTSEQ"; + case 0xC0020006: return "RPC_NT_INVALID_STRING_UUID"; + case 0xC0020007: return "RPC_NT_INVALID_ENDPOINT_FORMAT"; + case 0xC0020008: return "RPC_NT_INVALID_NET_ADDR"; + case 0xC0020009: return "RPC_NT_NO_ENDPOINT_FOUND"; + case 0xC002000A: return "RPC_NT_INVALID_TIMEOUT"; + case 0xC002000B: return "RPC_NT_OBJECT_NOT_FOUND"; + case 0xC002000C: return "RPC_NT_ALREADY_REGISTERED"; + case 0xC002000D: return "RPC_NT_TYPE_ALREADY_REGISTERED"; + case 0xC002000E: return "RPC_NT_ALREADY_LISTENING"; + case 0xC002000F: return "RPC_NT_NO_PROTSEQS_REGISTERED"; + case 0xC0020010: return "RPC_NT_NOT_LISTENING"; + case 0xC0020011: return "RPC_NT_UNKNOWN_MGR_TYPE"; + case 0xC0020012: return "RPC_NT_UNKNOWN_IF"; + case 0xC0020013: return "RPC_NT_NO_BINDINGS"; + case 0xC0020014: return "RPC_NT_NO_PROTSEQS"; + case 0xC0020015: return "RPC_NT_CANT_CREATE_ENDPOINT"; + case 0xC0020016: return "RPC_NT_OUT_OF_RESOURCES"; + case 0xC0020017: return "RPC_NT_SERVER_UNAVAILABLE"; + case 0xC0020018: return "RPC_NT_SERVER_TOO_BUSY"; + case 0xC0020019: return "RPC_NT_INVALID_NETWORK_OPTIONS"; + case 0xC002001A: return "RPC_NT_NO_CALL_ACTIVE"; + case 0xC002001B: return "RPC_NT_CALL_FAILED"; + case 0xC002001C: return "RPC_NT_CALL_FAILED_DNE"; + case 0xC002001D: return "RPC_NT_PROTOCOL_ERROR"; + case 0xC002001F: return "RPC_NT_UNSUPPORTED_TRANS_SYN"; + case 0xC0020021: return "RPC_NT_UNSUPPORTED_TYPE"; + case 0xC0020022: return "RPC_NT_INVALID_TAG"; + case 0xC0020023: return "RPC_NT_INVALID_BOUND"; + case 0xC0020024: return "RPC_NT_NO_ENTRY_NAME"; + case 0xC0020025: return "RPC_NT_INVALID_NAME_SYNTAX"; + case 0xC0020026: return "RPC_NT_UNSUPPORTED_NAME_SYNTAX"; + case 0xC0020028: return "RPC_NT_UUID_NO_ADDRESS"; + case 0xC0020029: return "RPC_NT_DUPLICATE_ENDPOINT"; + case 0xC002002A: return "RPC_NT_UNKNOWN_AUTHN_TYPE"; + case 0xC002002B: return "RPC_NT_MAX_CALLS_TOO_SMALL"; + case 0xC002002C: return "RPC_NT_STRING_TOO_LONG"; + case 0xC002002D: return "RPC_NT_PROTSEQ_NOT_FOUND"; + case 0xC002002E: return "RPC_NT_PROCNUM_OUT_OF_RANGE"; + case 0xC002002F: return "RPC_NT_BINDING_HAS_NO_AUTH"; + case 0xC0020030: return "RPC_NT_UNKNOWN_AUTHN_SERVICE"; + case 0xC0020031: return "RPC_NT_UNKNOWN_AUTHN_LEVEL"; + case 0xC0020032: return "RPC_NT_INVALID_AUTH_IDENTITY"; + case 0xC0020033: return "RPC_NT_UNKNOWN_AUTHZ_SERVICE"; + case 0xC0020034: return "EPT_NT_INVALID_ENTRY"; + case 0xC0020035: return "EPT_NT_CANT_PERFORM_OP"; + case 0xC0020036: return "EPT_NT_NOT_REGISTERED"; + case 0xC0020037: return "RPC_NT_NOTHING_TO_EXPORT"; + case 0xC0020038: return "RPC_NT_INCOMPLETE_NAME"; + case 0xC0020039: return "RPC_NT_INVALID_VERS_OPTION"; + case 0xC002003A: return "RPC_NT_NO_MORE_MEMBERS"; + case 0xC002003B: return "RPC_NT_NOT_ALL_OBJS_UNEXPORTED"; + case 0xC002003C: return "RPC_NT_INTERFACE_NOT_FOUND"; + case 0xC002003D: return "RPC_NT_ENTRY_ALREADY_EXISTS"; + case 0xC002003E: return "RPC_NT_ENTRY_NOT_FOUND"; + case 0xC002003F: return "RPC_NT_NAME_SERVICE_UNAVAILABLE"; + case 0xC0020040: return "RPC_NT_INVALID_NAF_ID"; + case 0xC0020041: return "RPC_NT_CANNOT_SUPPORT"; + case 0xC0020042: return "RPC_NT_NO_CONTEXT_AVAILABLE"; + case 0xC0020043: return "RPC_NT_INTERNAL_ERROR"; + case 0xC0020044: return "RPC_NT_ZERO_DIVIDE"; + case 0xC0020045: return "RPC_NT_ADDRESS_ERROR"; + case 0xC0020046: return "RPC_NT_FP_DIV_ZERO"; + case 0xC0020047: return "RPC_NT_FP_UNDERFLOW"; + case 0xC0020048: return "RPC_NT_FP_OVERFLOW"; + case 0xC0030001: return "RPC_NT_NO_MORE_ENTRIES"; + case 0xC0030002: return "RPC_NT_SS_CHAR_TRANS_OPEN_FAIL"; + case 0xC0030003: return "RPC_NT_SS_CHAR_TRANS_SHORT_FILE"; + case 0xC0030004: return "RPC_NT_SS_IN_NULL_CONTEXT"; + case 0xC0030005: return "RPC_NT_SS_CONTEXT_MISMATCH"; + case 0xC0030006: return "RPC_NT_SS_CONTEXT_DAMAGED"; + case 0xC0030007: return "RPC_NT_SS_HANDLES_MISMATCH"; + case 0xC0030008: return "RPC_NT_SS_CANNOT_GET_CALL_HANDLE"; + case 0xC0030009: return "RPC_NT_NULL_REF_POINTER"; + case 0xC003000A: return "RPC_NT_ENUM_VALUE_OUT_OF_RANGE"; + case 0xC003000B: return "RPC_NT_BYTE_COUNT_TOO_SMALL"; + case 0xC003000C: return "RPC_NT_BAD_STUB_DATA"; + case 0xC0020049: return "RPC_NT_CALL_IN_PROGRESS"; + case 0xC002004A: return "RPC_NT_NO_MORE_BINDINGS"; + case 0xC002004B: return "RPC_NT_GROUP_MEMBER_NOT_FOUND"; + case 0xC002004C: return "EPT_NT_CANT_CREATE"; + case 0xC002004D: return "RPC_NT_INVALID_OBJECT"; + case 0xC002004F: return "RPC_NT_NO_INTERFACES"; + case 0xC0020050: return "RPC_NT_CALL_CANCELLED"; + case 0xC0020051: return "RPC_NT_BINDING_INCOMPLETE"; + case 0xC0020052: return "RPC_NT_COMM_FAILURE"; + case 0xC0020053: return "RPC_NT_UNSUPPORTED_AUTHN_LEVEL"; + case 0xC0020054: return "RPC_NT_NO_PRINC_NAME"; + case 0xC0020055: return "RPC_NT_NOT_RPC_ERROR"; + case 0x40020056: return "RPC_NT_UUID_LOCAL_ONLY"; + case 0xC0020057: return "RPC_NT_SEC_PKG_ERROR"; + case 0xC0020058: return "RPC_NT_NOT_CANCELLED"; + case 0xC0030059: return "RPC_NT_INVALID_ES_ACTION"; + case 0xC003005A: return "RPC_NT_WRONG_ES_VERSION"; + case 0xC003005B: return "RPC_NT_WRONG_STUB_VERSION"; + case 0xC003005C: return "RPC_NT_INVALID_PIPE_OBJECT"; + case 0xC003005D: return "RPC_NT_INVALID_PIPE_OPERATION"; + case 0xC003005E: return "RPC_NT_WRONG_PIPE_VERSION"; + case 0xC003005F: return "RPC_NT_PIPE_CLOSED"; + case 0xC0030060: return "RPC_NT_PIPE_DISCIPLINE_ERROR"; + case 0xC0030061: return "RPC_NT_PIPE_EMPTY"; + case 0xC0020062: return "RPC_NT_INVALID_ASYNC_HANDLE"; + case 0xC0020063: return "RPC_NT_INVALID_ASYNC_CALL"; + case 0x400200AF: return "RPC_NT_SEND_INCOMPLETE"; + case 0xC0140001: return "STATUS_ACPI_INVALID_OPCODE"; + case 0xC0140002: return "STATUS_ACPI_STACK_OVERFLOW"; + case 0xC0140003: return "STATUS_ACPI_ASSERT_FAILED"; + case 0xC0140004: return "STATUS_ACPI_INVALID_INDEX"; + case 0xC0140005: return "STATUS_ACPI_INVALID_ARGUMENT"; + case 0xC0140006: return "STATUS_ACPI_FATAL"; + case 0xC0140007: return "STATUS_ACPI_INVALID_SUPERNAME"; + case 0xC0140008: return "STATUS_ACPI_INVALID_ARGTYPE"; + case 0xC0140009: return "STATUS_ACPI_INVALID_OBJTYPE"; + case 0xC014000A: return "STATUS_ACPI_INVALID_TARGETTYPE"; + case 0xC014000B: return "STATUS_ACPI_INCORRECT_ARGUMENT_COUNT"; + case 0xC014000C: return "STATUS_ACPI_ADDRESS_NOT_MAPPED"; + case 0xC014000D: return "STATUS_ACPI_INVALID_EVENTTYPE"; + case 0xC014000E: return "STATUS_ACPI_HANDLER_COLLISION"; + case 0xC014000F: return "STATUS_ACPI_INVALID_DATA"; + case 0xC0140010: return "STATUS_ACPI_INVALID_REGION"; + case 0xC0140011: return "STATUS_ACPI_INVALID_ACCESS_SIZE"; + case 0xC0140012: return "STATUS_ACPI_ACQUIRE_GLOBAL_LOCK"; + case 0xC0140013: return "STATUS_ACPI_ALREADY_INITIALIZED"; + case 0xC0140014: return "STATUS_ACPI_NOT_INITIALIZED"; + case 0xC0140015: return "STATUS_ACPI_INVALID_MUTEX_LEVEL"; + case 0xC0140016: return "STATUS_ACPI_MUTEX_NOT_OWNED"; + case 0xC0140017: return "STATUS_ACPI_MUTEX_NOT_OWNER"; + case 0xC0140018: return "STATUS_ACPI_RS_ACCESS"; + case 0xC0140019: return "STATUS_ACPI_INVALID_TABLE"; + case 0xC0140020: return "STATUS_ACPI_REG_HANDLER_FAILED"; + case 0xC0140021: return "STATUS_ACPI_POWER_REQUEST_FAILED"; + case 0xC00A0001: return "STATUS_CTX_WINSTATION_NAME_INVALID"; + case 0xC00A0002: return "STATUS_CTX_INVALID_PD"; + case 0xC00A0003: return "STATUS_CTX_PD_NOT_FOUND"; + case 0x400A0004: return "STATUS_CTX_CDM_CONNECT"; + case 0x400A0005: return "STATUS_CTX_CDM_DISCONNECT"; + case 0xC00A0006: return "STATUS_CTX_CLOSE_PENDING"; + case 0xC00A0007: return "STATUS_CTX_NO_OUTBUF"; + case 0xC00A0008: return "STATUS_CTX_MODEM_INF_NOT_FOUND"; + case 0xC00A0009: return "STATUS_CTX_INVALID_MODEMNAME"; + case 0xC00A000A: return "STATUS_CTX_RESPONSE_ERROR"; + case 0xC00A000B: return "STATUS_CTX_MODEM_RESPONSE_TIMEOUT"; + case 0xC00A000C: return "STATUS_CTX_MODEM_RESPONSE_NO_CARRIER"; + case 0xC00A000D: return "STATUS_CTX_MODEM_RESPONSE_NO_DIALTONE"; + case 0xC00A000E: return "STATUS_CTX_MODEM_RESPONSE_BUSY"; + case 0xC00A000F: return "STATUS_CTX_MODEM_RESPONSE_VOICE"; + case 0xC00A0010: return "STATUS_CTX_TD_ERROR"; + case 0xC00A0012: return "STATUS_CTX_LICENSE_CLIENT_INVALID"; + case 0xC00A0013: return "STATUS_CTX_LICENSE_NOT_AVAILABLE"; + case 0xC00A0014: return "STATUS_CTX_LICENSE_EXPIRED"; + case 0xC00A0015: return "STATUS_CTX_WINSTATION_NOT_FOUND"; + case 0xC00A0016: return "STATUS_CTX_WINSTATION_NAME_COLLISION"; + case 0xC00A0017: return "STATUS_CTX_WINSTATION_BUSY"; + case 0xC00A0018: return "STATUS_CTX_BAD_VIDEO_MODE"; + case 0xC00A0022: return "STATUS_CTX_GRAPHICS_INVALID"; + case 0xC00A0024: return "STATUS_CTX_NOT_CONSOLE"; + case 0xC00A0026: return "STATUS_CTX_CLIENT_QUERY_TIMEOUT"; + case 0xC00A0027: return "STATUS_CTX_CONSOLE_DISCONNECT"; + case 0xC00A0028: return "STATUS_CTX_CONSOLE_CONNECT"; + case 0xC00A002A: return "STATUS_CTX_SHADOW_DENIED"; + case 0xC00A002B: return "STATUS_CTX_WINSTATION_ACCESS_DENIED"; + case 0xC00A002E: return "STATUS_CTX_INVALID_WD"; + case 0xC00A002F: return "STATUS_CTX_WD_NOT_FOUND"; + case 0xC00A0030: return "STATUS_CTX_SHADOW_INVALID"; + case 0xC00A0031: return "STATUS_CTX_SHADOW_DISABLED"; + case 0xC00A0032: return "STATUS_RDP_PROTOCOL_ERROR"; + case 0xC00A0033: return "STATUS_CTX_CLIENT_LICENSE_NOT_SET"; + case 0xC00A0034: return "STATUS_CTX_CLIENT_LICENSE_IN_USE"; + case 0xC0040035: return "STATUS_PNP_BAD_MPS_TABLE"; + case 0xC0040036: return "STATUS_PNP_TRANSLATION_FAILED"; + case 0xC0040037: return "STATUS_PNP_IRQ_TRANSLATION_FAILED"; + default: return "STATUS_UNKNOWN"; + } +} + +#endif // DBG Added: vendor/rfsd/current/RFSD/RFSD/devctl.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/devctl.c?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/devctl.c (added) +++ vendor/rfsd/current/RFSD/RFSD/devctl.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,258 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: devctl.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +NTSTATUS +RfsdDeviceControlCompletion (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context); + + +#ifdef ALLOC_PRAGMA +//#pragma alloc_text(PAGE, RfsdDeviceControlCompletion) +#pragma alloc_text(PAGE, RfsdDeviceControl) +#pragma alloc_text(PAGE, RfsdDeviceControlNormal) +#if RFSD_UNLOAD +#pragma alloc_text(PAGE, RfsdPrepareToUnload) +#endif +#endif + + +NTSTATUS +RfsdDeviceControlCompletion (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context) +{ + if (Irp->PendingReturned) { + IoMarkIrpPending(Irp); + } + + return STATUS_SUCCESS; +} + + +NTSTATUS +RfsdDeviceControlNormal (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + BOOLEAN CompleteRequest = TRUE; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_VCB Vcb; + + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + PIO_STACK_LOCATION NextIrpSp; + + PDEVICE_OBJECT TargetDeviceObject; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + CompleteRequest = TRUE; + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + Vcb = (PRFSD_VCB) IrpSp->FileObject->FsContext; + + if (!((Vcb) && (Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB)))) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + TargetDeviceObject = Vcb->TargetDeviceObject; + + // + // Pass on the IOCTL to the driver below + // + + CompleteRequest = FALSE; + + NextIrpSp = IoGetNextIrpStackLocation( Irp ); + *NextIrpSp = *IrpSp; + + IoSetCompletionRoutine( + Irp, + RfsdDeviceControlCompletion, + NULL, + FALSE, + TRUE, + TRUE ); + + Status = IoCallDriver(TargetDeviceObject, Irp); + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + if (IrpContext) { + if (!CompleteRequest) { + IrpContext->Irp = NULL; + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} + + +#if RFSD_UNLOAD + +NTSTATUS +RfsdPrepareToUnload (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + BOOLEAN GlobalDataResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject != RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->Resource, + TRUE ); + + GlobalDataResourceAcquired = TRUE; + + if (FlagOn(RfsdGlobal->Flags, RFSD_UNLOAD_PENDING)) { + RfsdPrint((DBG_ERROR, "RfsdPrepareUnload: Already ready to unload.\n")); + + Status = STATUS_ACCESS_DENIED; + + __leave; + } + + { + PRFSD_VCB Vcb; + PLIST_ENTRY ListEntry; + + ListEntry = RfsdGlobal->VcbList.Flink; + + while (ListEntry != &(RfsdGlobal->VcbList)) { + + Vcb = CONTAINING_RECORD(ListEntry, RFSD_VCB, Next); + ListEntry = ListEntry->Flink; + + if (Vcb && (!Vcb->ReferenceCount) && + IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) { + RfsdRemoveVcb(Vcb); + RfsdClearVpbFlag(Vcb->Vpb, VPB_MOUNTED); + + RfsdFreeVcb(Vcb); + } + } + } + + if (!IsListEmpty(&(RfsdGlobal->VcbList))) { + + RfsdPrint((DBG_ERROR, "RfsdPrepareUnload: Mounted volumes exists.\n")); + + Status = STATUS_ACCESS_DENIED; + + __leave; + } + + IoUnregisterFileSystem(RfsdGlobal->DeviceObject); + + RfsdGlobal->DriverObject->DriverUnload = DriverUnload; + + SetFlag(RfsdGlobal->Flags ,RFSD_UNLOAD_PENDING); + + RfsdPrint((DBG_INFO, "RfsdPrepareToUnload: Driver is ready to unload.\n")); + + Status = STATUS_SUCCESS; + + } __finally { + + if (GlobalDataResourceAcquired) { + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() + ); + } + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + +#endif + + +NTSTATUS +RfsdDeviceControl (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + ULONG IoControlCode; + NTSTATUS Status; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + IoControlCode = + IoStackLocation->Parameters.DeviceIoControl.IoControlCode; + + switch (IoControlCode) { + +#if RFSD_UNLOAD + case IOCTL_PREPARE_TO_UNLOAD: + Status = RfsdPrepareToUnload(IrpContext); + break; +#endif + default: + Status = RfsdDeviceControlNormal(IrpContext); + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/dircontrol.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/dircontrol.…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/dircontrol.c (added) +++ vendor/rfsd/current/RFSD/RFSD/dircontrol.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1079 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: dirctl.c + * PROGRAMMER: Mark Piper, Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +NTSTATUS +RfsdDirectoryCallback( + ULONG BlockNumber, + PVOID pContext); + +typedef struct _RFSD_CALLBACK_CONTEXT { + + PRFSD_VCB Vcb; + PRFSD_CCB Ccb; + + PRFSD_KEY_IN_MEMORY pDirectoryKey; + ULONG idxStartingDentry; // The dentry at which the callback should beging triggering output to the Buffer + ULONG idxCurrentDentry; // The current dentry (relative to entire set of dentrys, across all spans) + + // These parameters are forwarded to ProcessDirectoryEntry + FILE_INFORMATION_CLASS FileInformationClass; // [s] + PVOID Buffer; // [s] + ULONG BufferLength; // [s] + BOOLEAN ReturnSingleEntry; // [s] + + PULONG pUsedLength; + PVOID pPreviousEntry; + +} RFSD_CALLBACK_CONTEXT, *PRFSD_CALLBACK_CONTEXT; + + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdGetInfoLength) +#pragma alloc_text(PAGE, RfsdProcessDirEntry) +#pragma alloc_text(PAGE, RfsdQueryDirectory) +#pragma alloc_text(PAGE, RfsdNotifyChangeDirectory) +#pragma alloc_text(PAGE, RfsdDirectoryControl) +#pragma alloc_text(PAGE, RfsdIsDirectoryEmpty) +#pragma alloc_text(PAGE, RfsdDirectoryCallback) +#endif + +ULONG +RfsdGetInfoLength(IN FILE_INFORMATION_CLASS FileInformationClass) +{ + + switch (FileInformationClass) { + + case FileDirectoryInformation: + return sizeof(FILE_DIRECTORY_INFORMATION); + break; + + case FileFullDirectoryInformation: + return sizeof(FILE_FULL_DIR_INFORMATION); + break; + + case FileBothDirectoryInformation: + return sizeof(FILE_BOTH_DIR_INFORMATION); + break; + + case FileNamesInformation: + return sizeof(FILE_NAMES_INFORMATION); + break; + + default: + break; + } + + return 0; +} + + +ULONG // Returns 0 on error, or InfoLength + NameLength (the amount of the buffer used for the entry given) +RfsdProcessDirEntry( + IN PRFSD_VCB Vcb, + IN FILE_INFORMATION_CLASS FileInformationClass, // Identifier indicating the type of file information this function should report + IN __u32 Key_ParentDirectoryID, + IN __u32 Key_ObjectID, + IN PVOID Buffer, // The user's buffer, as obtained from the IRP context (it is already gauranteed to be valid) + IN ULONG UsedLength, // Length of Buffer used so far + IN ULONG Length, // Length of Buffer remaining, beyond UsedLength + IN ULONG FileIndex, // Byte offset of the dentry?? (This will just be placed into the file info structure of the same name) + IN PUNICODE_STRING pName, // Filled unicode equivalent of the name (as pulled out from the dentry) + IN BOOLEAN Single, // Whether or not QueryDirectory is only supposed to return a single entry + IN PVOID pPreviousEntry ) // A pointer to the previous dir entry in Buffer, which will be linked into the newly added entry if one is created +{ + RFSD_INODE inode; + PFILE_DIRECTORY_INFORMATION FDI; + PFILE_FULL_DIR_INFORMATION FFI; + PFILE_BOTH_DIR_INFORMATION FBI; + PFILE_NAMES_INFORMATION FNI; + + ULONG InfoLength = 0; + ULONG NameLength = 0; + ULONG dwBytes = 0; + LONGLONG FileSize; + LONGLONG AllocationSize; + + // Calculate the size of the entry + NameLength = pName->Length; + InfoLength = RfsdGetInfoLength(FileInformationClass); + + if (!InfoLength || InfoLength + NameLength - sizeof(WCHAR) > Length) { + RfsdPrint((DBG_INFO, "RfsdPricessDirEntry: Buffer is not enough.\n")); + return 0; + } + + // Given the incoming key for this dentry, load the corresponding stat data. + { + RFSD_KEY_IN_MEMORY key; + key.k_dir_id = Key_ParentDirectoryID; + key.k_objectid = Key_ObjectID; + + if(!RfsdLoadInode(Vcb, &key, &inode)) { + RfsdPrint((DBG_ERROR, "RfsdPricessDirEntry: Loading stat data %xh, %xh error.\n", Key_ParentDirectoryID, Key_ObjectID)); + DbgBreak(); + return 0; + } + } + + FileSize = (LONGLONG) inode.i_size; + AllocationSize = CEILING_ALIGNED(FileSize, (ULONGLONG)Vcb->BlockSize); // TODO: THIS ISN'T QUITE RIGHT + + // Link the previous entry into this entry + if (pPreviousEntry) { + // NOTE: All entries begin with NextEntryOffset, so it doesn't matter what type I cast to. + ((PFILE_NAMES_INFORMATION) (pPreviousEntry))->NextEntryOffset = + (PUCHAR) Buffer + UsedLength - (PUCHAR) (pPreviousEntry); + } + + switch(FileInformationClass) { + + case FileDirectoryInformation: + FDI = (PFILE_DIRECTORY_INFORMATION) ((PUCHAR)Buffer + UsedLength); + FDI->NextEntryOffset = 0; + + FDI->FileIndex = FileIndex; + FDI->CreationTime = RfsdSysTime(inode.i_ctime); + FDI->LastAccessTime = RfsdSysTime(inode.i_atime); + FDI->LastWriteTime = RfsdSysTime(inode.i_mtime); + FDI->ChangeTime = RfsdSysTime(inode.i_mtime); + FDI->EndOfFile.QuadPart = FileSize; + FDI->AllocationSize.QuadPart = AllocationSize; + FDI->FileAttributes = FILE_ATTRIBUTE_NORMAL; + + if (FlagOn(Vcb->Flags, VCB_READ_ONLY) || RfsdIsReadOnly(inode.i_mode)) { + SetFlag(FDI->FileAttributes, FILE_ATTRIBUTE_READONLY); + } + + if (S_ISDIR(inode.i_mode)) + FDI->FileAttributes |= FILE_ATTRIBUTE_DIRECTORY; + + FDI->FileNameLength = NameLength; + RtlCopyMemory(FDI->FileName, pName->Buffer, NameLength); + dwBytes = InfoLength + NameLength - sizeof(WCHAR); + break; + + case FileFullDirectoryInformation: + + FFI = (PFILE_FULL_DIR_INFORMATION) ((PUCHAR)Buffer + UsedLength); + FFI->NextEntryOffset = 0; + + FFI->FileIndex = FileIndex; + FFI->CreationTime = RfsdSysTime(inode.i_ctime); + FFI->LastAccessTime = RfsdSysTime(inode.i_atime); + FFI->LastWriteTime = RfsdSysTime(inode.i_mtime); + FFI->ChangeTime = RfsdSysTime(inode.i_mtime); + FFI->EndOfFile.QuadPart = FileSize; + FFI->AllocationSize.QuadPart = AllocationSize; + FFI->FileAttributes = FILE_ATTRIBUTE_NORMAL; + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY) || RfsdIsReadOnly(inode.i_mode)) { + SetFlag(FFI->FileAttributes, FILE_ATTRIBUTE_READONLY); + } + + if (S_ISDIR(inode.i_mode)) + FFI->FileAttributes |= FILE_ATTRIBUTE_DIRECTORY; + + FFI->FileNameLength = NameLength; + RtlCopyMemory(FFI->FileName, pName->Buffer, NameLength); + dwBytes = InfoLength + NameLength - sizeof(WCHAR); + + break; + + case FileBothDirectoryInformation: + + FBI = (PFILE_BOTH_DIR_INFORMATION) ((PUCHAR)Buffer + UsedLength); + FBI->NextEntryOffset = 0; + + FBI->CreationTime = RfsdSysTime(inode.i_ctime); + FBI->LastAccessTime = RfsdSysTime(inode.i_atime); + FBI->LastWriteTime = RfsdSysTime(inode.i_mtime); + FBI->ChangeTime = RfsdSysTime(inode.i_mtime); + + FBI->FileIndex = FileIndex; + FBI->EndOfFile.QuadPart = FileSize; + FBI->AllocationSize.QuadPart = AllocationSize; + FBI->FileAttributes = FILE_ATTRIBUTE_NORMAL; + + if (FlagOn(Vcb->Flags, VCB_READ_ONLY) || RfsdIsReadOnly(inode.i_mode)) { + SetFlag(FBI->FileAttributes, FILE_ATTRIBUTE_READONLY); + } + + if (S_ISDIR(inode.i_mode)) + FBI->FileAttributes |= FILE_ATTRIBUTE_DIRECTORY; + + FBI->FileNameLength = NameLength; + RtlCopyMemory(FBI->FileName, pName->Buffer, NameLength); + dwBytes = InfoLength + NameLength - sizeof(WCHAR); + + break; + + case FileNamesInformation: + + FNI = (PFILE_NAMES_INFORMATION) ((PUCHAR)Buffer + UsedLength); + FNI->NextEntryOffset = 0; + + FNI->FileNameLength = NameLength; + RtlCopyMemory(FNI->FileName, pName->Buffer, NameLength); + dwBytes = InfoLength + NameLength - sizeof(WCHAR); + + break; + + default: + break; + } + + return dwBytes; +} + +/** +caller suplies a ptr to a file obj for an open target dir, a search pattern to use when listing, and a spec of the info requested. +FSD expected to search and return matching info [503] + +The Fcb->RfsdMcb->Key will determine which directory to list the contents of. +*/ +NTSTATUS +RfsdQueryDirectory (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_VCB Vcb; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + PRFSD_CCB Ccb; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + FILE_INFORMATION_CLASS FileInformationClass; + ULONG Length; + PUNICODE_STRING FileName; + ULONG FileIndex; + BOOLEAN RestartScan; + BOOLEAN ReturnSingleEntry; + BOOLEAN IndexSpecified; + PUCHAR Buffer; + BOOLEAN FirstQuery; + PRFSD_KEY_IN_MEMORY pQueryKey; // The key of the directory item that is being retrieved + BOOLEAN FcbResourceAcquired = FALSE; + ULONG UsedLength = 0; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + pQueryKey = &(Fcb->RfsdMcb->Key); + + ASSERT(Fcb); + + DbgPrint("QueryDirectory on Key {%x,%x,%x,%x}\n", + pQueryKey->k_dir_id, pQueryKey->k_objectid, pQueryKey->k_offset, pQueryKey->k_type); + + // + // This request is not allowed on volumes + // + if (Fcb->Identifier.Type == RFSDVCB) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (!IsDirectory(Fcb)) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + ASSERT(Ccb); + + ASSERT((Ccb->Identifier.Type == RFSDCCB) && + (Ccb->Identifier.Size == sizeof(RFSD_CCB))); + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + +#ifndef _GNU_NTIFS_ + + FileInformationClass = + IoStackLocation->Parameters.QueryDirectory.FileInformationClass; + + Length = IoStackLocation->Parameters.QueryDirectory.Length; + + FileName = IoStackLocation->Parameters.QueryDirectory.FileName; + + FileIndex = IoStackLocation->Parameters.QueryDirectory.FileIndex; + +#else // _GNU_NTIFS_ + + FileInformationClass = ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileInformationClass; + + Length = ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.Length; + + FileName = ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileName; + + FileIndex = ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.QueryDirectory.FileIndex; + +#endif // _GNU_NTIFS_ + + RestartScan = FlagOn(((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Flags, SL_RESTART_SCAN); + ReturnSingleEntry = FlagOn(((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Flags, SL_RETURN_SINGLE_ENTRY); + IndexSpecified = FlagOn(((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Flags, SL_INDEX_SPECIFIED); + +/* + if (!Irp->MdlAddress && Irp->UserBuffer) { + ProbeForWrite(Irp->UserBuffer, Length, 1); + } +*/ + + // Check that the user's buffer for the output is valid.. + Buffer = RfsdGetUserBuffer(Irp); + + if (Buffer == NULL) { + DbgBreak(); + Status = STATUS_INVALID_USER_BUFFER; + __leave; + } + + // Check if we have a synchronous or asynchronous request... + if (!IrpContext->IsSynchronous) { + Status = STATUS_PENDING; + __leave; + } + + if (!ExAcquireResourceSharedLite( + &Fcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + FcbResourceAcquired = TRUE; + + if (FileName != NULL) { + // The caller provided a FileName to search on... + + if (Ccb->DirectorySearchPattern.Buffer != NULL) { + FirstQuery = FALSE; + } else { + FirstQuery = TRUE; + + // Set up the DirectorySearchPattern to simply be an uppercase copy of the FileName. + Ccb->DirectorySearchPattern.Length = + Ccb->DirectorySearchPattern.MaximumLength = + FileName->Length; + + Ccb->DirectorySearchPattern.Buffer = + ExAllocatePool(PagedPool, FileName->Length); + + if (Ccb->DirectorySearchPattern.Buffer == NULL) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + Status = RtlUpcaseUnicodeString( + &(Ccb->DirectorySearchPattern), + FileName, + FALSE); + + if (!NT_SUCCESS(Status)) + __leave; + } + } else if (Ccb->DirectorySearchPattern.Buffer != NULL) { + FirstQuery = FALSE; + FileName = &Ccb->DirectorySearchPattern; + } else { + // (The FileName and CCB's DirectorySearchPattern were null) + + FirstQuery = TRUE; + + Ccb->DirectorySearchPattern.Length = + Ccb->DirectorySearchPattern.MaximumLength = 2; + + Ccb->DirectorySearchPattern.Buffer = + ExAllocatePool(PagedPool, 2); + + if (Ccb->DirectorySearchPattern.Buffer == NULL) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + RtlCopyMemory( + Ccb->DirectorySearchPattern.Buffer, + L"*\0", 2); + } + + if (!IndexSpecified) { + if (RestartScan || FirstQuery) { + FileIndex = Fcb->RfsdMcb->DeOffset = 0; + } else { + // If we are not starting/restaring a scan, then we must have already started. + // Retrieve the byte offset (in the directory . file) where we left off. + FileIndex = Ccb->CurrentByteOffset; + } + } + + + RtlZeroMemory(Buffer, Length); + + // Leave if a previous query has already read the entire contents of the directory + if (Fcb->Inode->i_size <= FileIndex) { + Status = STATUS_NO_MORE_FILES; + __leave; + } + + //////// + + // Construct a context for the call, and call to parse the entire file system tree. + // A callback will be triggered on any direntry span belonging to DirectoryKey. + // This callback will fill the requested section of the user buffer. + { + ULONG CurrentFileIndex; + + RFSD_CALLBACK_CONTEXT CallbackContext; + CallbackContext.Vcb = Vcb; + CallbackContext.Ccb = Ccb; + CallbackContext.idxStartingDentry = FileIndex / sizeof(RFSD_DENTRY_HEAD); + CallbackContext.idxCurrentDentry = 0; + CallbackContext.pDirectoryKey = pQueryKey; + CallbackContext.FileInformationClass = FileInformationClass; + CallbackContext.Buffer = Buffer; + CallbackContext.BufferLength = Length; + CallbackContext.ReturnSingleEntry = ReturnSingleEntry; + CallbackContext.pUsedLength = &UsedLength; + CallbackContext.pPreviousEntry = NULL; + + RfsdPrint((DBG_TRACE, "Calculated idxCurrentDentry to be %i\n", CallbackContext.idxStartingDentry)); + + RfsdParseFilesystemTree(Vcb, pQueryKey, Vcb->SuperBlock->s_root_block, &RfsdDirectoryCallback, &CallbackContext); + } + +//================================================================ + + if (!UsedLength) { + // No amount of the dsetination buffer has been used (meaning there were no results)... + if (FirstQuery) { + Status = STATUS_NO_SUCH_FILE; + } else { + Status = STATUS_NO_MORE_FILES; + } + } else { + Status = STATUS_SUCCESS; + } + + } __finally { + + if (FcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoWriteAccess ); + + if (NT_SUCCESS(Status)) { + Status = RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } else { + IrpContext->Irp->IoStatus.Information = UsedLength; + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} + +NTSTATUS +RfsdNotifyChangeDirectory ( + IN PRFSD_IRP_CONTEXT IrpContext + ) +{ + PDEVICE_OBJECT DeviceObject; + BOOLEAN CompleteRequest; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_VCB Vcb; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + ULONG CompletionFilter; + BOOLEAN WatchTree; + + BOOLEAN bFcbAcquired = FALSE; + + PUNICODE_STRING FullName; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + // + // Always set the wait flag in the Irp context for the original request. + // + + SetFlag( IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT ); + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + CompleteRequest = TRUE; + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb); + + if (Fcb->Identifier.Type == RFSDVCB) { + DbgBreak(); + CompleteRequest = TRUE; + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (!IsDirectory(Fcb)) { + //- DbgBreak(); // NOTE: Windows (at least I've noticed it with the image previewer), will send this request oftentimes on a file! + CompleteRequest = TRUE; + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + if (ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + TRUE )) { + bFcbAcquired = TRUE; + } else { + Status = STATUS_PENDING; + __leave; + } + + Irp = IrpContext->Irp; + + IrpSp = IoGetCurrentIrpStackLocation(Irp); + +#ifndef _GNU_NTIFS_ + + CompletionFilter = + IrpSp->Parameters.NotifyDirectory.CompletionFilter; + +#else // _GNU_NTIFS_ + + CompletionFilter = ((PEXTENDED_IO_STACK_LOCATION) + IrpSp)->Parameters.NotifyDirectory.CompletionFilter; + +#endif // _GNU_NTIFS_ + + WatchTree = IsFlagOn(IrpSp->Flags, SL_WATCH_TREE); + + if (FlagOn(Fcb->Flags, FCB_DELETE_PENDING)) { + Status = STATUS_DELETE_PENDING; + __leave; + } + + FullName = &Fcb->LongName; + + if (FullName->Buffer == NULL) { + if (!RfsdGetFullFileName(Fcb->RfsdMcb, FullName)) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + } + + FsRtlNotifyFullChangeDirectory( Vcb->NotifySync, + &Vcb->NotifyList, + FileObject->FsContext2, + (PSTRING)FullName, + WatchTree, + FALSE, + CompletionFilter, + Irp, + NULL, + NULL ); + + CompleteRequest = FALSE; + + Status = STATUS_PENDING; + +/* + Currently the driver is read-only but here is an example on how to use the + FsRtl-functions to report a change: + + ANSI_STRING TestString; + USHORT FileNamePartLength; + + RtlInitAnsiString(&TestString, "\\ntifs.h"); + + FileNamePartLength = 7; + + FsRtlNotifyReportChange( + Vcb->NotifySync, // PNOTIFY_SYNC NotifySync + &Vcb->NotifyList, // PLIST_ENTRY NotifyList + &TestString, // PSTRING FullTargetName + &FileNamePartLength, // PUSHORT FileNamePartLength + FILE_NOTIFY_CHANGE_NAME // ULONG FilterMatch + ); + + or + + ANSI_STRING TestString; + + RtlInitAnsiString(&TestString, "\\ntifs.h"); + + FsRtlNotifyFullReportChange( + Vcb->NotifySync, // PNOTIFY_SYNC NotifySync + &Vcb->NotifyList, // PLIST_ENTRY NotifyList + &TestString, // PSTRING FullTargetName + 1, // USHORT TargetNameOffset + NULL, // PSTRING StreamName OPTIONAL + NULL, // PSTRING NormalizedParentName OPTIONAL + FILE_NOTIFY_CHANGE_NAME, // ULONG FilterMatch + 0, // ULONG Action + NULL // PVOID TargetContext + ); +*/ + + } __finally { + + if (bFcbAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (!IrpContext->ExceptionInProgress) { + + if (!CompleteRequest) { + IrpContext->Irp = NULL; + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + +VOID +RfsdNotifyReportChange ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb, + IN ULONG Filter, + IN ULONG Action ) +{ + PUNICODE_STRING FullName; + USHORT Offset; + + FullName = &Fcb->LongName; + + // ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + + if (FullName->Buffer == NULL) { + if (!RfsdGetFullFileName(Fcb->RfsdMcb, FullName)) { + /*Status = STATUS_INSUFFICIENT_RESOURCES;*/ + return; + } + } + + Offset = (USHORT) ( FullName->Length - + Fcb->RfsdMcb->ShortName.Length); + + FsRtlNotifyFullReportChange( Vcb->NotifySync, + &(Vcb->NotifyList), + (PSTRING) (FullName), + (USHORT) Offset, + (PSTRING)NULL, + (PSTRING) NULL, + (ULONG) Filter, + (ULONG) Action, + (PVOID) NULL ); + + // ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); +} + + +NTSTATUS +RfsdDirectoryControl (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + switch (IrpContext->MinorFunction) { + + case IRP_MN_QUERY_DIRECTORY: + Status = RfsdQueryDirectory(IrpContext); + break; + + case IRP_MN_NOTIFY_CHANGE_DIRECTORY: + Status = RfsdNotifyChangeDirectory(IrpContext); + break; + + default: + Status = STATUS_INVALID_DEVICE_REQUEST; + RfsdCompleteIrpContext(IrpContext, Status); + } + + return Status; +} + +#if DISABLE +BOOLEAN RfsdIsDirectoryEmpty ( + PRFSD_VCB Vcb, + PRFSD_FCB Dcb ) +{ +DbgBreak(); + + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_DIR_ENTRY2 pTarget = NULL; + + ULONG dwBytes = 0; + ULONG dwRet; + + BOOLEAN bRet = FALSE; + + if (!IsFlagOn(Dcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + return TRUE; + } + + __try { + + pTarget = (PRFSD_DIR_ENTRY2) ExAllocatePool(PagedPool, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + if (!pTarget) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + dwBytes = 0; + + bRet = TRUE; + + while ((LONGLONG)dwBytes < Dcb->Header.AllocationSize.QuadPart) { + + RtlZeroMemory(pTarget, RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + + Status = RfsdReadInode( + NULL, + Vcb, + &(Dcb->RfsdMcb->Key), + Dcb->Inode, + dwBytes, + (PVOID)pTarget, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN), + &dwRet); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, "RfsdRemoveEntry: Reading Directory Content error.\n")); + bRet = FALSE; + __leave; + } + + if (pTarget->inode) { + if (pTarget->name_len == 1 && pTarget->name[0] == '.') { + } else if (pTarget->name_len == 2 && pTarget->name[0] == '.' && + pTarget->name[1] == '.') { + } else { + bRet = FALSE; + break; + } + } else { + break; + } + + dwBytes += pTarget->rec_len; + } + + } __finally { + + if (pTarget != NULL) { + ExFreePool(pTarget); + } + } + + return bRet; +} +#endif + + +/** +This callback is triggered when the FS tree parser hits a leaf node that may contain a directory item. +The function then reads each dentry in the item, and is reponsible for sending them into to ProcessDirEntry. +The callback is doing work on behalf of QueryDir -- the context given is from there. +*/ +// NOTE: This signature has to be changed here, at the top decleration, and in the RFSD_CALLBACK macro definition +NTSTATUS +RfsdDirectoryCallback( + ULONG BlockNumber, + PVOID pContext) +{ + PRFSD_CALLBACK_CONTEXT pCallbackContext = (PRFSD_CALLBACK_CONTEXT) pContext; + RFSD_KEY_IN_MEMORY DirectoryKey; + PUCHAR pBlockBuffer = NULL; + PRFSD_ITEM_HEAD pDirectoryItemHeader = NULL; + PUCHAR pDirectoryItemBuffer = NULL; + NTSTATUS Status; + + UNICODE_STRING InodeFileName; + InodeFileName.Buffer = NULL; + + RfsdPrint((DBG_FUNC, __FUNCTION__ " invoked on block %i\n", BlockNumber)); + + + // Load the block + pBlockBuffer = RfsdAllocateAndLoadBlock(pCallbackContext->Vcb, BlockNumber); + if (!pBlockBuffer) { Status = STATUS_INSUFFICIENT_RESOURCES; goto out; } + + // Construct the item key to search for + DirectoryKey = *(pCallbackContext->pDirectoryKey); + DirectoryKey.k_type = RFSD_KEY_TYPE_v2_DIRENTRY; + + // Get the item header and its information + Status = RfsdFindItemHeaderInBlock( + pCallbackContext->Vcb, &DirectoryKey, pBlockBuffer, + ( &pDirectoryItemHeader ), //< + &CompareKeysWithoutOffset + ); + + // If this block doesn't happen to contain a directory item, skip it. + if ( (Status == STATUS_NO_SUCH_MEMBER) || !pDirectoryItemHeader ) + { + DbgPrint("Block %i did not contain the appropriate diritem header\n", BlockNumber); + Status = STATUS_SUCCESS; goto out; + } + + RfsdPrint((DBG_INFO, "Found %i dentries in block\n", pDirectoryItemHeader->u.ih_entry_count)); + + // Calculate if the requested result will be from this dentry span + // If the end of this span is not greater than the requested start, it can be skipped. + if ( !( (pCallbackContext->idxCurrentDentry + (USHORT)(pDirectoryItemHeader->u.ih_entry_count)) > pCallbackContext->idxStartingDentry ) ) + { + RfsdPrint((DBG_TRACE, "SKIPPING block\n")); + + pCallbackContext->idxCurrentDentry += pDirectoryItemHeader->u.ih_entry_count; + Status = STATUS_SUCCESS; + goto out; + } + + + + // Otherwise, Read out each dentry, and call ProcessDirEntry on it. + { + BOOLEAN bRun = TRUE; + PRFSD_DENTRY_HEAD pPrevDentry = NULL; + ULONG offsetDentry_toSequentialSpan; // The byte offset of this dentry, relative to the dentry spans, as though only their DENTRY_HEADs were stitched together sequentially + + // Skip ahead to the starting dentry in this span. + ULONG idxDentryInSpan = pCallbackContext->idxStartingDentry - pCallbackContext->idxCurrentDentry; + pCallbackContext->idxCurrentDentry += idxDentryInSpan; + + RfsdPrint((DBG_TRACE, "Sarting dentry: %i. skipped to %i dentry in span\n", pCallbackContext->idxStartingDentry, idxDentryInSpan)); + + offsetDentry_toSequentialSpan = pCallbackContext->idxCurrentDentry * sizeof(RFSD_DENTRY_HEAD); + + // Setup the item buffer + pDirectoryItemBuffer = (PUCHAR) pBlockBuffer + pDirectoryItemHeader->ih_item_location; + + + while (bRun + && ( *(pCallbackContext->pUsedLength) < (pCallbackContext->BufferLength) ) + && (idxDentryInSpan < (pDirectoryItemHeader->u.ih_entry_count)) ) + { + + STRING OemName; // FUTURE: does this support codepages? + PRFSD_DENTRY_HEAD pCurrentDentry; + USHORT InodeFileNameLength = 0; + + // Read a directory entry from the buffered directory item (from the file associated with the filled inode) + pCurrentDentry = (PRFSD_DENTRY_HEAD) (pDirectoryItemBuffer + (idxDentryInSpan * sizeof(RFSD_DENTRY_HEAD) )); + + // Skip the directory entry for the parent of the root directory (because it should not be shown, and has no stat data) + // (NOTE: Any change made here should also be mirrored in RfsdScanDirCallback) + if (pCurrentDentry->deh_dir_id == 0 /*&& pCurrentDentry->deh_objectid == 1*/) + { goto ProcessNextEntry; } + + // Pull the name of the file out from the buffer. + // NOTE: The filename is not gauranteed to be null-terminated, and so the end may implicitly be the start of the previous entry. + OemName.Buffer = (PUCHAR) pDirectoryItemBuffer + pCurrentDentry->deh_location; + OemName.MaximumLength = (pPrevDentry ? pPrevDentry->deh_location : // The end of this entry is the start of the previous + pDirectoryItemHeader->ih_item_len // Otherwise this is the first entry, the end of which is the end of the item. + ) - pCurrentDentry->deh_location; + OemName.Length = RfsdStringLength(OemName.Buffer, OemName.MaximumLength); + + + // Calculate the name's unicode length, allocate memory, and convert the codepaged name to unicode + InodeFileNameLength = (USHORT) RfsdOEMToUnicodeSize(&OemName); + InodeFileName.Length = 0; + InodeFileName.MaximumLength = InodeFileNameLength + 2; + + if (InodeFileNameLength <= 0) + { break; } + + InodeFileName.Buffer = ExAllocatePool( + PagedPool, + InodeFileNameLength + 2); + + if (!InodeFileName.Buffer) { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto out; + } + + RtlZeroMemory(InodeFileName.Buffer, InodeFileNameLength + 2); + + Status = RfsdOEMToUnicode( &InodeFileName, &OemName ); + if (!NT_SUCCESS(Status)) { Status = STATUS_INTERNAL_ERROR; goto out; } // TODO: CHECK IF TIHS OK + + ////////////// END OF MY PART + if (FsRtlDoesNameContainWildCards( + &(pCallbackContext->Ccb->DirectorySearchPattern)) ? + FsRtlIsNameInExpression( + &(pCallbackContext->Ccb->DirectorySearchPattern), + &InodeFileName, + TRUE, + NULL) : + !RtlCompareUnicodeString( + &(pCallbackContext->Ccb->DirectorySearchPattern), + &InodeFileName, + TRUE) ) { + // The name either contains wild cards, or matches the directory search pattern... + + { + ULONG dwBytesWritten; + dwBytesWritten = RfsdProcessDirEntry( + pCallbackContext->Vcb, pCallbackContext->FileInformationClass, + pCurrentDentry->deh_dir_id, + pCurrentDentry->deh_objectid, + pCallbackContext->Buffer, + *(pCallbackContext->pUsedLength), + pCallbackContext->BufferLength - *(pCallbackContext->pUsedLength), // The remaining length in the user's buffer + offsetDentry_toSequentialSpan, + &InodeFileName, + pCallbackContext->ReturnSingleEntry, + pCallbackContext->pPreviousEntry); + + if (dwBytesWritten <= 0) { + Status = STATUS_EVENT_DONE; + bRun = FALSE; + } else { + pCallbackContext->pPreviousEntry = (PUCHAR) (pCallbackContext->Buffer) + *(pCallbackContext->pUsedLength); + *(pCallbackContext->pUsedLength) += dwBytesWritten; + } + } + } + + if (InodeFileName.Buffer) { + ExFreePool(InodeFileName.Buffer); + InodeFileName.Buffer = NULL; + } + + + ProcessNextEntry: + + pPrevDentry = pCurrentDentry; + + if (bRun) + { + ++idxDentryInSpan; + ++(pCallbackContext->idxCurrentDentry); + ++(pCallbackContext->idxStartingDentry); + offsetDentry_toSequentialSpan += sizeof(RFSD_DENTRY_HEAD); + + // Store the current position, so that it will be available for the next call + pCallbackContext->Ccb->CurrentByteOffset = offsetDentry_toSequentialSpan; + } + + + if ( ( *(pCallbackContext->pUsedLength) > 0) && pCallbackContext->ReturnSingleEntry) { + Status = STATUS_EVENT_DONE; + break; + } + + } + + } + + out: + if (pBlockBuffer) ExFreePool(pBlockBuffer); + if (InodeFileName.Buffer) ExFreePool(InodeFileName.Buffer); + + return Status; +} + Added: vendor/rfsd/current/RFSD/RFSD/dispatch.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/dispatch.c?…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/dispatch.c (added) +++ vendor/rfsd/current/RFSD/RFSD/dispatch.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,232 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: dispatch.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdQueueRequest) +#pragma alloc_text(PAGE, RfsdDeQueueRequest) +#pragma alloc_text(PAGE, RfsdDispatchRequest) +#pragma alloc_text(PAGE, RfsdBuildRequest) +#endif + + +NTSTATUS +RfsdQueueRequest (IN PRFSD_IRP_CONTEXT IrpContext) +{ + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + // IsSynchronous means we can block (so we don't requeue it) + IrpContext->IsSynchronous = TRUE; + + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED); + + IoMarkIrpPending(IrpContext->Irp); + + ExInitializeWorkItem( + &IrpContext->WorkQueueItem, + RfsdDeQueueRequest, + IrpContext ); + + ExQueueWorkItem(&IrpContext->WorkQueueItem, CriticalWorkQueue); + + return STATUS_PENDING; +} + + +VOID +RfsdDeQueueRequest (IN PVOID Context) +{ + PRFSD_IRP_CONTEXT IrpContext; + + IrpContext = (PRFSD_IRP_CONTEXT) Context; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + __try { + + __try { + + FsRtlEnterFileSystem(); + + if (!IrpContext->IsTopLevel) { + + IoSetTopLevelIrp((PIRP) FSRTL_FSP_TOP_LEVEL_IRP); + } + + RfsdDispatchRequest(IrpContext); + + } __except (RfsdExceptionFilter(IrpContext, GetExceptionInformation())) { + + RfsdExceptionHandler(IrpContext); + } + + } __finally { + + IoSetTopLevelIrp(NULL); + + FsRtlExitFileSystem(); + } +} + + +NTSTATUS +RfsdDispatchRequest (IN PRFSD_IRP_CONTEXT IrpContext) +{ + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + switch (IrpContext->MajorFunction) { + + case IRP_MJ_CREATE: + return RfsdCreate(IrpContext); + + case IRP_MJ_CLOSE: + return RfsdClose(IrpContext); + + case IRP_MJ_READ: + return RfsdRead(IrpContext); +/* + case IRP_MJ_WRITE: + return RfsdWrite(IrpContext); +*/ + case IRP_MJ_FLUSH_BUFFERS: + return RfsdFlush(IrpContext); + + case IRP_MJ_QUERY_INFORMATION: + return RfsdQueryInformation(IrpContext); +/* + case IRP_MJ_SET_INFORMATION: + return RfsdSetInformation(IrpContext); + */ + case IRP_MJ_QUERY_VOLUME_INFORMATION: + return RfsdQueryVolumeInformation(IrpContext); +/* + case IRP_MJ_SET_VOLUME_INFORMATION: + return RfsdSetVolumeInformation(IrpContext); +*/ + case IRP_MJ_DIRECTORY_CONTROL: + return RfsdDirectoryControl(IrpContext); + + case IRP_MJ_FILE_SYSTEM_CONTROL: + return RfsdFileSystemControl(IrpContext); + + case IRP_MJ_DEVICE_CONTROL: + return RfsdDeviceControl(IrpContext); + + case IRP_MJ_LOCK_CONTROL: + return RfsdLockControl(IrpContext); + + case IRP_MJ_CLEANUP: + return RfsdCleanup(IrpContext); + + case IRP_MJ_SHUTDOWN: + return RfsdShutDown(IrpContext); + +#if (_WIN32_WINNT >= 0x0500) + case IRP_MJ_PNP: + return RfsdPnp(IrpContext); +#endif //(_WIN32_WINNT >= 0x0500) + default: + { + NTSTATUS DefaultRC = STATUS_INVALID_DEVICE_REQUEST; // TODO: switch back to STATUS_INTERNAL_ERROR + + RfsdPrint((DBG_ERROR, "RfsdDispatchRequest: Unexpected major function: %xh\n", + IrpContext->MajorFunction)); + + RfsdCompleteIrpContext(IrpContext, DefaultRC); + + return DefaultRC; + } + } +} + + +NTSTATUS +RfsdBuildRequest (PDEVICE_OBJECT DeviceObject, PIRP Irp) +{ + BOOLEAN AtIrqlPassiveLevel = FALSE; + BOOLEAN IsTopLevelIrp = FALSE; + PRFSD_IRP_CONTEXT IrpContext = NULL; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + __try { + + __try { + +#if DBG + RfsdDbgPrintCall(DeviceObject, Irp); +#endif + + AtIrqlPassiveLevel = (KeGetCurrentIrql() == PASSIVE_LEVEL); + + if (AtIrqlPassiveLevel) { + + FsRtlEnterFileSystem(); + } + + if (!IoGetTopLevelIrp()) { + + IsTopLevelIrp = TRUE; + IoSetTopLevelIrp(Irp); + } + + IrpContext = RfsdAllocateIrpContext(DeviceObject, Irp); + + if (!IrpContext) { + + Status = STATUS_INSUFFICIENT_RESOURCES; + Irp->IoStatus.Status = Status; + + RfsdCompleteRequest(Irp, TRUE, IO_NO_INCREMENT); + + } else { + + if ((IrpContext->MajorFunction == IRP_MJ_CREATE) && + !AtIrqlPassiveLevel) { + + DbgBreak(); + } + + Status = RfsdDispatchRequest(IrpContext); + } + } __except (RfsdExceptionFilter(IrpContext, GetExceptionInformation())) { + + Status = RfsdExceptionHandler(IrpContext); + } + + } __finally { + + if (IsTopLevelIrp) { + IoSetTopLevelIrp(NULL); + } + + if (AtIrqlPassiveLevel) { + FsRtlExitFileSystem(); + } + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/except.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/except.c?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/except.c (added) +++ vendor/rfsd/current/RFSD/RFSD/except.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,190 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: except.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdExceptionFilter) +#pragma alloc_text(PAGE, RfsdExceptionHandler) +#endif + + +NTSTATUS +RfsdExceptionFilter ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PEXCEPTION_POINTERS ExceptionPointer) +{ + NTSTATUS Status, ExceptionCode; + PEXCEPTION_RECORD ExceptRecord; + + ExceptRecord = ExceptionPointer->ExceptionRecord; + + ExceptionCode = ExceptRecord->ExceptionCode; + + DbgBreak(); + + // + // Check IrpContext is valid or not + // + + if (IrpContext) { + if ((IrpContext->Identifier.Type != RFSDICX) || + (IrpContext->Identifier.Size != sizeof(RFSD_IRP_CONTEXT))) { + IrpContext = NULL; + } + } else { + if (FsRtlIsNtstatusExpected(ExceptionCode)) { + return EXCEPTION_EXECUTE_HANDLER; + } else { + RfsdBugCheck( RFSD_BUGCHK_EXCEPT, (ULONG_PTR)ExceptRecord, + (ULONG_PTR)ExceptionPointer->ContextRecord, + (ULONG_PTR)ExceptRecord->ExceptionAddress ); + } + } + + // + // For the purposes of processing this exception, let's mark this + // request as being able to wait, and neither write through nor on + // removable media if we aren't posting it. + // + + if (IrpContext) + { SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); } + + if (FsRtlIsNtstatusExpected(ExceptionCode)) { + // + // If the exception is expected execute our handler + // + + RfsdPrint((DBG_ERROR, "RfsdExceptionFilter: Catching exception %xh\n", + ExceptionCode)); + + Status = EXCEPTION_EXECUTE_HANDLER; + + if (IrpContext) { + IrpContext->ExceptionInProgress = TRUE; + IrpContext->ExceptionCode = ExceptionCode; + } + + } else { + + // + // Continue search for an higher level exception handler + // + + RfsdPrint((DBG_ERROR, "RfsdExceptionFilter: Passing on exception %#x\n", + ExceptionCode)); + + Status = EXCEPTION_CONTINUE_SEARCH; + + if (IrpContext) { + RfsdFreeIrpContext(IrpContext); + } + } + + return Status; +} + + +NTSTATUS +RfsdExceptionHandler (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + + if (IrpContext) { + if ( (IrpContext->Identifier.Type != RFSDICX) || + (IrpContext->Identifier.Size != sizeof(RFSD_IRP_CONTEXT))) { + DbgBreak(); + return STATUS_UNSUCCESSFUL; + } + + Status = IrpContext->ExceptionCode; + + if (IrpContext->Irp) { + + // + // Check if this error is a result of user actions + // + + PIRP Irp = IrpContext->Irp; + + + if (IoIsErrorUserInduced(Status)) { + + // + // Now we will generate a pop-up to user + // + + PDEVICE_OBJECT RealDevice; + PVPB Vpb = NULL; + PETHREAD Thread; + + if (IoGetCurrentIrpStackLocation(Irp)->FileObject != NULL) { + Vpb = IoGetCurrentIrpStackLocation(Irp)->FileObject->Vpb; + } + + // + // Get the initial thread + // + + Thread = Irp->Tail.Overlay.Thread; + RealDevice = IoGetDeviceToVerify( Thread ); + + if (RealDevice == NULL) { + // + // Get current thread + // + + Thread = PsGetCurrentThread(); + RealDevice = IoGetDeviceToVerify( Thread ); + + ASSERT( RealDevice != NULL ); + } + + if (RealDevice != NULL) { + + // + // Now we pop-up the error dialog ... + // + + IoMarkIrpPending( Irp ); + IoRaiseHardError( Irp, Vpb, RealDevice ); + + IoSetDeviceToVerify( Thread, NULL ); + + Status = STATUS_PENDING; + goto errorout; + } + } + + IrpContext->Irp->IoStatus.Status = Status; + + RfsdCompleteRequest(IrpContext->Irp, FALSE, IO_NO_INCREMENT); + } + +errorout: + + RfsdFreeIrpContext(IrpContext); + + } else { + + Status = STATUS_INSUFFICIENT_RESOURCES; + } + + return Status; +} + Added: vendor/rfsd/current/RFSD/RFSD/fastio.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/fastio.c?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/fastio.c (added) +++ vendor/rfsd/current/RFSD/RFSD/fastio.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,981 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: fastio.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#if DBG +#pragma alloc_text(PAGE, RfsdFastIoRead) +#pragma alloc_text(PAGE, RfsdFastIoWrite) +#endif +#pragma alloc_text(PAGE, RfsdFastIoCheckIfPossible) +#pragma alloc_text(PAGE, RfsdFastIoQueryBasicInfo) +#pragma alloc_text(PAGE, RfsdFastIoQueryStandardInfo) +#pragma alloc_text(PAGE, RfsdFastIoQueryNetworkOpenInfo) +#pragma alloc_text(PAGE, RfsdFastIoLock) +#pragma alloc_text(PAGE, RfsdFastIoUnlockSingle) +#pragma alloc_text(PAGE, RfsdFastIoUnlockAll) +#pragma alloc_text(PAGE, RfsdFastIoUnlockAll) +#endif + +BOOLEAN +RfsdFastIoCheckIfPossible ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN BOOLEAN CheckForReadOperation, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ) +{ + BOOLEAN bPossible = FastIoIsNotPossible; + PRFSD_FCB Fcb; + LARGE_INTEGER lLength; + + lLength.QuadPart = Length; + + __try { + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsDirectory(Fcb)) { + __leave; + } + + FsRtlEnterFileSystem(); + + if (CheckForReadOperation) { + + bPossible = FsRtlFastCheckLockForRead( + &Fcb->FileLockAnchor, + FileOffset, + &lLength, + LockKey, + FileObject, + PsGetCurrentProcess()); + + } else { + + if (IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY) || + IsFlagOn(Fcb->Vcb->Flags, VCB_WRITE_PROTECTED)) { + bPossible = FastIoIsNotPossible; + } else { + bPossible = FsRtlFastCheckLockForWrite( + &Fcb->FileLockAnchor, + FileOffset, + &lLength, + LockKey, + FileObject, + PsGetCurrentProcess()); + } + } + + RfsdPrint((DBG_INFO, "RfsdFastIIOCheckPossible: %s %s %s\n", + RfsdGetCurrentProcessName(), + "FASTIO_CHECK_IF_POSSIBLE", + Fcb->AnsiFileName.Buffer + )); + + RfsdPrint((DBG_INFO, + "RfsdFastIIOCheckPossible: Offset: %I64xg Length: %xh Key: %u %s %s\n", + FileOffset->QuadPart, + Length, + LockKey, + (CheckForReadOperation ? "CheckForReadOperation:" : + "CheckForWriteOperation:"), + (bPossible ? "Succeeded" : "Failed"))); + } __except (EXCEPTION_EXECUTE_HANDLER) { + bPossible = FastIoIsNotPossible; + } + + } __finally { + + FsRtlExitFileSystem(); + } + + return bPossible; +} + + +#if DBG +BOOLEAN +RfsdFastIoRead (IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN Status; + PRFSD_FCB Fcb; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, "RfsdFastIoRead: %s %s %s\n", + RfsdGetCurrentProcessName(), + "FASTIO_READ", + Fcb->AnsiFileName.Buffer )); + + RfsdPrint((DBG_INFO, "RfsdFastIoRead: Offset: %I64xh Length: %xh Key: %u\n", + FileOffset->QuadPart, + Length, + LockKey )); + + Status = FsRtlCopyRead ( + FileObject, FileOffset, Length, Wait, + LockKey, Buffer, IoStatus, DeviceObject); + + return Status; +} + +BOOLEAN +RfsdFastIoWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN bRet; + PRFSD_FCB Fcb; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, + "RfsdFastIoWrite: %s %s %s\n", + RfsdGetCurrentProcessName(), + "FASTIO_WRITE", + Fcb->AnsiFileName.Buffer )); + + RfsdPrint((DBG_INFO, + "RfsdFastIoWrite: Offset: %I64xh Length: %xh Key: %xh\n", + FileOffset->QuadPart, + Length, + LockKey )); + + if (IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY)) { + DbgBreak(); + return FALSE; + } + + bRet = FsRtlCopyWrite ( + FileObject, FileOffset, Length, Wait, + LockKey, Buffer, IoStatus, DeviceObject); + + return bRet; +} + +#endif /* DBG */ + + +BOOLEAN +RfsdFastIoQueryBasicInfo (IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + OUT PFILE_BASIC_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN Status = FALSE; + PRFSD_FCB Fcb; + BOOLEAN FcbMainResourceAcquired = FALSE; + + __try { + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + Status = TRUE; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, + "RfsdFastIoQueryBasicInfo: %s %s %s\n", + RfsdGetCurrentProcessName(), + "FASTIO_QUERY_BASIC_INFO", + Fcb->AnsiFileName.Buffer + )); + + FsRtlEnterFileSystem(); + + if (!ExAcquireResourceSharedLite( + &Fcb->MainResource, + Wait)) { + Status = FALSE; + __leave; + } + + FcbMainResourceAcquired = TRUE; + + RtlZeroMemory(Buffer, sizeof(FILE_BASIC_INFORMATION)); + + /* + typedef struct _FILE_BASIC_INFORMATION { + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + ULONG FileAttributes; + } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; + */ + + Buffer->CreationTime = RfsdSysTime(Fcb->Inode->i_ctime); + Buffer->LastAccessTime = RfsdSysTime(Fcb->Inode->i_atime); + Buffer->LastWriteTime = RfsdSysTime(Fcb->Inode->i_mtime); + Buffer->ChangeTime = RfsdSysTime(Fcb->Inode->i_mtime); + + + Buffer->FileAttributes = Fcb->RfsdMcb->FileAttr; + + IoStatus->Information = sizeof(FILE_BASIC_INFORMATION); + + IoStatus->Status = STATUS_SUCCESS; + + Status = TRUE; + } __except (EXCEPTION_EXECUTE_HANDLER) { + + IoStatus->Status = GetExceptionCode(); + Status = TRUE; + } + + } __finally { + + if (FcbMainResourceAcquired) + { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread() + ); + } + + FsRtlExitFileSystem(); + } + + + if (Status == FALSE) { + + RfsdPrint((DBG_ERROR, + "RfsdFastIoQueryBasicInfo: %s %s *** Status: FALSE ***\n", + RfsdGetCurrentProcessName(), + "FASTIO_QUERY_BASIC_INFO" + )); + } else if (IoStatus->Status != STATUS_SUCCESS) { + + RfsdPrint((DBG_ERROR, + "RfsdFastIoQueryBasicInfo: %s %s *** Status: %s (%#x) ***\n", + RfsdFastIoQueryBasicInfo, + "FASTIO_QUERY_BASIC_INFO", + RfsdNtStatusToString(IoStatus->Status), + IoStatus->Status + )); + } + + return Status; +} + +BOOLEAN +RfsdFastIoQueryStandardInfo ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + OUT PFILE_STANDARD_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ) +{ + + BOOLEAN Status = FALSE; + PRFSD_VCB Vcb; + PRFSD_FCB Fcb; + BOOLEAN FcbMainResourceAcquired = FALSE; + + LONGLONG FileSize; + LONGLONG AllocationSize; + + __try { + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + Status = TRUE; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, + "RfsdFastIoQueryStandardInfo: %s %s %s\n", + RfsdGetCurrentProcessName(), + "FASTIO_QUERY_STANDARD_INFO", + Fcb->AnsiFileName.Buffer )); + + Vcb = Fcb->Vcb; + + FsRtlEnterFileSystem(); + + if (!ExAcquireResourceSharedLite( + &Fcb->MainResource, + Wait )) { + Status = FALSE; + __leave; + } + + FcbMainResourceAcquired = TRUE; + + RtlZeroMemory(Buffer, sizeof(FILE_STANDARD_INFORMATION)); + + /* + typedef struct _FILE_STANDARD_INFORMATION { + LARGE_INTEGER AllocationSize; + LARGE_INTEGER EndOfFile; + ULONG NumberOfLinks; + BOOLEAN DeletePending; + BOOLEAN Directory; + } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; + */ + + FileSize = (LONGLONG) Fcb->Inode->i_size; + +#if DISABLED + if (S_ISREG(Fcb->Inode->i_mode)) + FileSize |= ((LONGLONG)(Fcb->Inode->i_size_high) << 32); +#endif + + AllocationSize = CEILING_ALIGNED(FileSize, (ULONGLONG)Vcb->BlockSize); // TODO: This is incorrect for file tails... + + Buffer->AllocationSize.QuadPart = AllocationSize; + Buffer->EndOfFile.QuadPart = FileSize; + Buffer->NumberOfLinks = Fcb->Inode->i_links_count; + + if (IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY)) { + Buffer->DeletePending = FALSE; + } else { + Buffer->DeletePending = IsFlagOn(Fcb->Flags, FCB_DELETE_PENDING); + } + + if (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + Buffer->Directory = TRUE; + } else { + Buffer->Directory = FALSE; + } + + IoStatus->Information = sizeof(FILE_STANDARD_INFORMATION); + + IoStatus->Status = STATUS_SUCCESS; + + Status = TRUE; + + } __except (EXCEPTION_EXECUTE_HANDLER) { + + IoStatus->Status = GetExceptionCode(); + Status = TRUE; + } + + } __finally { + if (FcbMainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread() + ); + } + + FsRtlExitFileSystem(); + } + +#if DBG + if (Status == FALSE) { + RfsdPrint((DBG_INFO, + "RfsdFastIoQueryStandardInfo: %s %s *** Status: FALSE ***\n", + RfsdGetCurrentProcessName(), + "FASTIO_QUERY_STANDARD_INFO" )); + } else if (IoStatus->Status != STATUS_SUCCESS) { + RfsdPrint((DBG_INFO, + "RfsdFastIoQueryStandardInfo: %s %s *** Status: %s (%#x) ***\n", + RfsdGetCurrentProcessName(), + "FASTIO_QUERY_STANDARD_INFO", + RfsdNtStatusToString(IoStatus->Status), + IoStatus->Status )); + } +#endif + + return Status; +} + +BOOLEAN +RfsdFastIoLock ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS Process, + IN ULONG Key, + IN BOOLEAN FailImmediately, + IN BOOLEAN ExclusiveLock, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ) +{ + BOOLEAN Status = FALSE; + PRFSD_FCB Fcb; + + __try { + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + Status = TRUE; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsDirectory(Fcb)) { + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + RfsdPrint((DBG_INFO, + "RfsdFastIoLock: %s %s %s\n", + RfsdGetCurrentProcessName(), + "FASTIO_LOCK", + Fcb->AnsiFileName.Buffer )); + + RfsdPrint((DBG_INFO, + "RfsdFastIoLock: Offset: %I64xh Length: %I64xh Key: %u %s%s\n", + FileOffset->QuadPart, + Length->QuadPart, + Key, + (FailImmediately ? "FailImmediately " : ""), + (ExclusiveLock ? "ExclusiveLock " : "") )); + + if (Fcb->Header.IsFastIoPossible != FastIoIsQuestionable) { + RfsdPrint((DBG_INFO, + "RfsdFastIoLock: %s %s %s\n", + (PUCHAR) Process + ProcessNameOffset, + "FastIoIsQuestionable", + Fcb->AnsiFileName.Buffer )); + + Fcb->Header.IsFastIoPossible = FastIoIsQuestionable; + } + + FsRtlEnterFileSystem(); + + Status = FsRtlFastLock( + &Fcb->FileLockAnchor, + FileObject, + FileOffset, + Length, + Process, + Key, + FailImmediately, + ExclusiveLock, + IoStatus, + NULL, + FALSE); + } __except (EXCEPTION_EXECUTE_HANDLER) { + IoStatus->Status = GetExceptionCode(); + Status = TRUE; + } + + } __finally { + FsRtlExitFileSystem(); + } + +#if DBG + if (Status == FALSE) { + RfsdPrint((DBG_ERROR, + "RfsdFastIoLock: %s %s *** Status: FALSE ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_LOCK" + )); + } else if (IoStatus->Status != STATUS_SUCCESS) { + RfsdPrint((DBG_ERROR, + "RfsdFastIoLock: %s %s *** Status: %s (%#x) ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_LOCK", + RfsdNtStatusToString(IoStatus->Status), + IoStatus->Status + )); + } +#endif + + return Status; +} + +BOOLEAN +RfsdFastIoUnlockSingle ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS Process, + IN ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ) +{ + BOOLEAN Status = FALSE; + PRFSD_FCB Fcb; + + __try { + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + Status = TRUE; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsDirectory(Fcb)) { + + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + RfsdPrint((DBG_INFO, + "RfsdFastIoUnlockSingle: %s %s %s\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_SINGLE", + Fcb->AnsiFileName.Buffer )); + + RfsdPrint((DBG_INFO, + "RfsdFastIoUnlockSingle: Offset: %I64xh Length: %I64xh Key: %u\n", + FileOffset->QuadPart, + Length->QuadPart, + Key )); + + FsRtlEnterFileSystem(); + + IoStatus->Status = FsRtlFastUnlockSingle( + &Fcb->FileLockAnchor, + FileObject, + FileOffset, + Length, + Process, + Key, + NULL, + FALSE); + + IoStatus->Information = 0; + + Status = TRUE; + } __except (EXCEPTION_EXECUTE_HANDLER) { + IoStatus->Status = GetExceptionCode(); + Status = TRUE; + } + + } __finally { + + FsRtlExitFileSystem(); + } + +#if DBG + if (Status == FALSE) { + + RfsdPrint((DBG_ERROR, + "RfsdFastIoUnlockSingle: %s %s *** Status: FALSE ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_SINGLE" )); + } else if (IoStatus->Status != STATUS_SUCCESS) { + RfsdPrint((DBG_ERROR, + "RfsdFastIoUnlockSingle: %s %s *** Status: %s (%#x) ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_SINGLE", + RfsdNtStatusToString(IoStatus->Status), + IoStatus->Status )); + } +#endif + + return Status; +} + +BOOLEAN +RfsdFastIoUnlockAll ( + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN Status = FALSE; + PRFSD_FCB Fcb; + + __try { + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + Status = TRUE; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsDirectory(Fcb)) { + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + RfsdPrint((DBG_INFO, + "RfsdFastIoUnlockSingle: %s %s %s\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_ALL", + Fcb->AnsiFileName.Buffer + )); + + FsRtlEnterFileSystem(); + + IoStatus->Status = FsRtlFastUnlockAll( + &Fcb->FileLockAnchor, + FileObject, + Process, + NULL ); + + IoStatus->Information = 0; + + Status = TRUE; + } __except (EXCEPTION_EXECUTE_HANDLER) { + IoStatus->Status = GetExceptionCode(); + Status = TRUE; + } + + } __finally { + + FsRtlExitFileSystem(); + } + +#if DBG + if (Status == FALSE) { + + RfsdPrint((DBG_ERROR, + "RfsdFastIoUnlockSingle: %s %s *** Status: FALSE ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_ALL" + )); + } else if (IoStatus->Status != STATUS_SUCCESS) { + RfsdPrint((DBG_ERROR, + "RfsdFastIoUnlockSingle: %s %s *** Status: %s (%#x) ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_ALL", + RfsdNtStatusToString(IoStatus->Status), + IoStatus->Status + )); + } +#endif + + return Status; +} + +BOOLEAN +RfsdFastIoUnlockAllByKey ( + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process, + IN ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ) +{ + BOOLEAN Status = FALSE; + PRFSD_FCB Fcb; + + __try { + + FsRtlEnterFileSystem(); + + __try { + + if (DeviceObject == RfsdGlobal->DeviceObject) { + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + Status = TRUE; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsDirectory(Fcb)) { + + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + Status = TRUE; + __leave; + } + + RfsdPrint((DBG_INFO, + "RfsdFastIoUnlockAllByKey: %s %s %s\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_ALL_BY_KEY", + Fcb->AnsiFileName.Buffer + )); + + RfsdPrint((DBG_INFO, + "RfsdFastIoUnlockAllByKey: Key: %u\n", + Key + )); + + IoStatus->Status = FsRtlFastUnlockAllByKey( + &Fcb->FileLockAnchor, + FileObject, + Process, + Key, + NULL + ); + + IoStatus->Information = 0; + + Status = TRUE; + + } __except (EXCEPTION_EXECUTE_HANDLER) { + + IoStatus->Status = GetExceptionCode(); + Status = TRUE; + } + + } __finally { + FsRtlExitFileSystem(); + } + +#if DBG + if (Status == FALSE) { + + RfsdPrint((DBG_ERROR, + "RfsdFastIoUnlockAllByKey: %s %s *** Status: FALSE ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_ALL_BY_KEY" + )); + } else if (IoStatus->Status != STATUS_SUCCESS) { + + RfsdPrint((DBG_ERROR, + "RfsdFastIoUnlockAllByKey: %s %s *** Status: %s (%#x) ***\n", + (PUCHAR) Process + ProcessNameOffset, + "FASTIO_UNLOCK_ALL_BY_KEY", + RfsdNtStatusToString(IoStatus->Status), + IoStatus->Status + )); + } +#endif + + return Status; +} + + +BOOLEAN +RfsdFastIoQueryNetworkOpenInfo ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + IN OUT PFILE_NETWORK_OPEN_INFORMATION PFNOI, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ) +{ + BOOLEAN bResult = FALSE; + + PRFSD_FCB Fcb = NULL; + + BOOLEAN FcbResourceAcquired = FALSE; + + __try { + + FsRtlEnterFileSystem(); + + if (DeviceObject == RfsdGlobal->DeviceObject) { + IoStatus->Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + DbgBreak(); + IoStatus->Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, + "%-16.16s %-31s %s\n", + PsGetCurrentProcess()->ImageFileName, + "FASTIO_QUERY_NETWORK_OPEN_INFO", + Fcb->AnsiFileName.Buffer + )); + + if (FileObject->FsContext2) { + __leave; + } + + if (!FlagOn(Fcb->Flags, FCB_PAGE_FILE)) { + + if (!ExAcquireResourceSharedLite( + &Fcb->MainResource, + Wait + )) { + __leave; + } + + FcbResourceAcquired = TRUE; + } + + if (IsDirectory(Fcb)) { + PFNOI->AllocationSize.QuadPart = 0; + PFNOI->EndOfFile.QuadPart = 0; + } else { + PFNOI->AllocationSize = Fcb->Header.AllocationSize; + PFNOI->EndOfFile = Fcb->Header.FileSize; + } + + PFNOI->FileAttributes = Fcb->RfsdMcb->FileAttr; + if (PFNOI->FileAttributes == 0) { + PFNOI->FileAttributes = FILE_ATTRIBUTE_NORMAL; + } + + PFNOI->CreationTime = RfsdSysTime(Fcb->Inode->i_ctime); + PFNOI->LastAccessTime = RfsdSysTime(Fcb->Inode->i_atime); + PFNOI->LastWriteTime = RfsdSysTime(Fcb->Inode->i_mtime); + PFNOI->ChangeTime = RfsdSysTime(Fcb->Inode->i_mtime); + + bResult = TRUE; + + IoStatus->Status = STATUS_SUCCESS; + IoStatus->Information = sizeof(FILE_NETWORK_OPEN_INFORMATION); + + } __finally { + + if (FcbResourceAcquired) { + ExReleaseResource(&Fcb->MainResource); + } + + FsRtlExitFileSystem(); + } + + return bResult; +} Added: vendor/rfsd/current/RFSD/RFSD/fileinfo.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/fileinfo.c?…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/fileinfo.c (added) +++ vendor/rfsd/current/RFSD/RFSD/fileinfo.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1524 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: fileinfo.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdQueryInformation) + +#if DISABLED +#pragma alloc_text(PAGE, RfsdSetInformation) +#pragma alloc_text(PAGE, RfsdExpandFile) +#pragma alloc_text(PAGE, RfsdTruncateFile) +#pragma alloc_text(PAGE, RfsdSetDispositionInfo) +#pragma alloc_text(PAGE, RfsdSetRenameInfo) +#pragma alloc_text(PAGE, RfsdDeleteFile) +#endif + +#endif + + +NTSTATUS +RfsdQueryInformation (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PFILE_OBJECT FileObject; + PRFSD_VCB Vcb; + PRFSD_FCB Fcb; + PRFSD_CCB Ccb; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + FILE_INFORMATION_CLASS FileInformationClass; + ULONG Length; + PVOID Buffer; + BOOLEAN FcbResourceAcquired = FALSE; + + LONGLONG FileSize; + LONGLONG AllocationSize; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + // + // This request is not allowed on volumes + // + if (Fcb->Identifier.Type == RFSDVCB) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + Vcb = Fcb->Vcb; + +/* + if ( !IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY) && + !FlagOn(Fcb->Flags, FCB_PAGE_FILE)) +*/ + { + if (!ExAcquireResourceSharedLite( + &Fcb->MainResource, + IrpContext->IsSynchronous + )) { + + Status = STATUS_PENDING; + __leave; + } + + FcbResourceAcquired = TRUE; + } + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + ASSERT(Ccb != NULL); + + ASSERT((Ccb->Identifier.Type == RFSDCCB) && + (Ccb->Identifier.Size == sizeof(RFSD_CCB))); + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + FileInformationClass = + IoStackLocation->Parameters.QueryFile.FileInformationClass; + + Length = IoStackLocation->Parameters.QueryFile.Length; + + Buffer = Irp->AssociatedIrp.SystemBuffer; + + RtlZeroMemory(Buffer, Length); + + FileSize = (LONGLONG) Fcb->Inode->i_size; + + AllocationSize = CEILING_ALIGNED(FileSize, (ULONGLONG)Vcb->BlockSize); + + switch (FileInformationClass) { + + case FileBasicInformation: + { + PFILE_BASIC_INFORMATION FileBasicInformation; + + if (Length < sizeof(FILE_BASIC_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileBasicInformation = (PFILE_BASIC_INFORMATION) Buffer; + + FileBasicInformation->CreationTime = RfsdSysTime(Fcb->Inode->i_ctime); + + FileBasicInformation->LastAccessTime = RfsdSysTime(Fcb->Inode->i_atime); + + FileBasicInformation->LastWriteTime = RfsdSysTime(Fcb->Inode->i_mtime); + + FileBasicInformation->ChangeTime = RfsdSysTime(Fcb->Inode->i_mtime); + + FileBasicInformation->FileAttributes = Fcb->RfsdMcb->FileAttr; + + Irp->IoStatus.Information = sizeof(FILE_BASIC_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + +#if (_WIN32_WINNT >= 0x0500) + + case FileAttributeTagInformation: + { + PFILE_ATTRIBUTE_TAG_INFORMATION FATI; + + if (Length < sizeof(FILE_ATTRIBUTE_TAG_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FATI = (PFILE_ATTRIBUTE_TAG_INFORMATION) Buffer; + + FATI->FileAttributes = Fcb->RfsdMcb->FileAttr; + FATI->ReparseTag = 0; + + Irp->IoStatus.Information = sizeof(FILE_ATTRIBUTE_TAG_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } +#endif // (_WIN32_WINNT >= 0x0500) + + case FileStandardInformation: + { + PFILE_STANDARD_INFORMATION FileStandardInformation; + + if (Length < sizeof(FILE_STANDARD_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileStandardInformation = (PFILE_STANDARD_INFORMATION) Buffer; + + FileStandardInformation->AllocationSize.QuadPart = AllocationSize; + FileStandardInformation->EndOfFile.QuadPart = FileSize; + + FileStandardInformation->NumberOfLinks = Fcb->Inode->i_links_count; + + if (IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY)) + FileStandardInformation->DeletePending = FALSE; + else + FileStandardInformation->DeletePending = IsFlagOn(Fcb->Flags, FCB_DELETE_PENDING); + + if (Fcb->RfsdMcb->FileAttr & FILE_ATTRIBUTE_DIRECTORY) { + FileStandardInformation->Directory = TRUE; + } else { + FileStandardInformation->Directory = FALSE; + } + + Irp->IoStatus.Information = sizeof(FILE_STANDARD_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + case FileInternalInformation: + { + PFILE_INTERNAL_INFORMATION FileInternalInformation; + + if (Length < sizeof(FILE_INTERNAL_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileInternalInformation = (PFILE_INTERNAL_INFORMATION) Buffer; + + // The "inode number" + FileInternalInformation->IndexNumber.LowPart = Fcb->RfsdMcb->Key.k_dir_id; + FileInternalInformation->IndexNumber.HighPart = Fcb->RfsdMcb->Key.k_objectid; + + Irp->IoStatus.Information = sizeof(FILE_INTERNAL_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + case FileEaInformation: + { + PFILE_EA_INFORMATION FileEaInformation; + + if (Length < sizeof(FILE_EA_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileEaInformation = (PFILE_EA_INFORMATION) Buffer; + + // Romfs doesn't have any extended attributes + FileEaInformation->EaSize = 0; + + Irp->IoStatus.Information = sizeof(FILE_EA_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + case FileNameInformation: + { + PFILE_NAME_INFORMATION FileNameInformation; + + if (Length < sizeof(FILE_NAME_INFORMATION) + + Fcb->RfsdMcb->ShortName.Length - sizeof(WCHAR)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileNameInformation = (PFILE_NAME_INFORMATION) Buffer; + + FileNameInformation->FileNameLength = Fcb->RfsdMcb->ShortName.Length; + + RtlCopyMemory( + FileNameInformation->FileName, + Fcb->RfsdMcb->ShortName.Buffer, + Fcb->RfsdMcb->ShortName.Length ); + + Irp->IoStatus.Information = sizeof(FILE_NAME_INFORMATION) + + Fcb->RfsdMcb->ShortName.Length - sizeof(WCHAR); + Status = STATUS_SUCCESS; + __leave; + } + + case FilePositionInformation: + { + PFILE_POSITION_INFORMATION FilePositionInformation; + + if (Length < sizeof(FILE_POSITION_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FilePositionInformation = (PFILE_POSITION_INFORMATION) Buffer; + + FilePositionInformation->CurrentByteOffset = + FileObject->CurrentByteOffset; + + Irp->IoStatus.Information = sizeof(FILE_POSITION_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + case FileAllInformation: + { + PFILE_ALL_INFORMATION FileAllInformation; + PFILE_BASIC_INFORMATION FileBasicInformation; + PFILE_STANDARD_INFORMATION FileStandardInformation; + PFILE_INTERNAL_INFORMATION FileInternalInformation; + PFILE_EA_INFORMATION FileEaInformation; + PFILE_POSITION_INFORMATION FilePositionInformation; + PFILE_NAME_INFORMATION FileNameInformation; + + if (Length < sizeof(FILE_ALL_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileAllInformation = (PFILE_ALL_INFORMATION) Buffer; + + FileBasicInformation = + &FileAllInformation->BasicInformation; + + FileStandardInformation = + &FileAllInformation->StandardInformation; + + FileInternalInformation = + &FileAllInformation->InternalInformation; + + FileEaInformation = + &FileAllInformation->EaInformation; + + FilePositionInformation = + &FileAllInformation->PositionInformation; + + FileNameInformation = + &FileAllInformation->NameInformation; + + FileBasicInformation->CreationTime = RfsdSysTime(Fcb->Inode->i_ctime); + + FileBasicInformation->LastAccessTime = RfsdSysTime(Fcb->Inode->i_atime); + + FileBasicInformation->LastWriteTime = RfsdSysTime(Fcb->Inode->i_mtime); + + FileBasicInformation->ChangeTime = RfsdSysTime(Fcb->Inode->i_mtime); + + FileBasicInformation->FileAttributes = Fcb->RfsdMcb->FileAttr; + + FileStandardInformation->AllocationSize.QuadPart = AllocationSize; + + FileStandardInformation->EndOfFile.QuadPart = FileSize; + + FileStandardInformation->NumberOfLinks = Fcb->Inode->i_links_count; + + if (IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY)) + FileStandardInformation->DeletePending = FALSE; + else + FileStandardInformation->DeletePending = IsFlagOn(Fcb->Flags, FCB_DELETE_PENDING); + + if (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + FileStandardInformation->Directory = TRUE; + } else { + FileStandardInformation->Directory = FALSE; + } + + // The "inode number" + FileInternalInformation->IndexNumber.LowPart = Fcb->RfsdMcb->Key.k_dir_id; + FileInternalInformation->IndexNumber.HighPart = Fcb->RfsdMcb->Key.k_objectid; + + // Romfs doesn't have any extended attributes + FileEaInformation->EaSize = 0; + + FilePositionInformation->CurrentByteOffset = + FileObject->CurrentByteOffset; + + if (Length < sizeof(FILE_ALL_INFORMATION) + + Fcb->RfsdMcb->ShortName.Length - sizeof(WCHAR)) { + Irp->IoStatus.Information = sizeof(FILE_ALL_INFORMATION); + Status = STATUS_BUFFER_OVERFLOW; + __leave; + } + + FileNameInformation->FileNameLength = Fcb->RfsdMcb->ShortName.Length; + + RtlCopyMemory( + FileNameInformation->FileName, + Fcb->RfsdMcb->ShortName.Buffer, + Fcb->RfsdMcb->ShortName.Length + ); + + Irp->IoStatus.Information = sizeof(FILE_ALL_INFORMATION) + + Fcb->RfsdMcb->ShortName.Length - sizeof(WCHAR); + Status = STATUS_SUCCESS; + __leave; + } + + /* + case FileAlternateNameInformation: + { + // TODO: [ext2fsd] Handle FileAlternateNameInformation + + // Here we would like to use RtlGenerate8dot3Name but I don't + // know how to use the argument PGENERATE_NAME_CONTEXT + } + */ + + case FileNetworkOpenInformation: + { + PFILE_NETWORK_OPEN_INFORMATION FileNetworkOpenInformation; + + if (Length < sizeof(FILE_NETWORK_OPEN_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FileNetworkOpenInformation = + (PFILE_NETWORK_OPEN_INFORMATION) Buffer; + + FileNetworkOpenInformation->CreationTime = RfsdSysTime(Fcb->Inode->i_ctime); + + FileNetworkOpenInformation->LastAccessTime = RfsdSysTime(Fcb->Inode->i_atime); + + FileNetworkOpenInformation->LastWriteTime = RfsdSysTime(Fcb->Inode->i_mtime); + + FileNetworkOpenInformation->ChangeTime = RfsdSysTime(Fcb->Inode->i_mtime); + + FileNetworkOpenInformation->AllocationSize.QuadPart = AllocationSize; + + FileNetworkOpenInformation->EndOfFile.QuadPart = FileSize; + + FileNetworkOpenInformation->FileAttributes = Fcb->RfsdMcb->FileAttr; + + Irp->IoStatus.Information = + sizeof(FILE_NETWORK_OPEN_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + default: + Status = STATUS_INVALID_INFO_CLASS; + } + + } __finally { + + if (FcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} + + +#if DISABLED +NTSTATUS +RfsdSetInformation (IN PRFSD_IRP_CONTEXT IrpContext) +{ +DbgBreak(); + + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_VCB Vcb; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + PRFSD_CCB Ccb; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + FILE_INFORMATION_CLASS FileInformationClass; + + ULONG NotifyFilter = 0; + + ULONG Length; + PVOID Buffer; + BOOLEAN FcbMainResourceAcquired = FALSE; + + BOOLEAN VcbResourceAcquired = FALSE; + BOOLEAN FcbPagingIoResourceAcquired = FALSE; + + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + // + // This request is not allowed on volumes + // + if (Fcb->Identifier.Type == RFSDVCB) { + DbgBreak(); + + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsFlagOn(Fcb->Flags, FCB_FILE_DELETED)) { + Status = STATUS_FILE_DELETED; + __leave; + } + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + ASSERT(Ccb != NULL); + + ASSERT((Ccb->Identifier.Type == RFSDCCB) && + (Ccb->Identifier.Size == sizeof(RFSD_CCB))); + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + FileInformationClass = + IoStackLocation->Parameters.SetFile.FileInformationClass; + + Length = IoStackLocation->Parameters.SetFile.Length; + + Buffer = Irp->AssociatedIrp.SystemBuffer; + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + + if (FileInformationClass == FileDispositionInformation || + FileInformationClass == FileRenameInformation || + FileInformationClass == FileLinkInformation) { + + if (!ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + IrpContext->IsSynchronous )) { + + Status = STATUS_PENDING; + __leave; + } + + VcbResourceAcquired = TRUE; + } + + } else if (!FlagOn(Fcb->Flags, FCB_PAGE_FILE)) { + + if (!ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + FcbMainResourceAcquired = TRUE; + } + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + + if (FileInformationClass != FilePositionInformation) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + } + + if (FileInformationClass == FileDispositionInformation || + FileInformationClass == FileRenameInformation || + FileInformationClass == FileLinkInformation || + FileInformationClass == FileAllocationInformation || + FileInformationClass == FileEndOfFileInformation) { + + if (!ExAcquireResourceExclusiveLite( + &Fcb->PagingIoResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + FcbPagingIoResourceAcquired = TRUE; + } + +/* + if (FileInformationClass != FileDispositionInformation + && FlagOn(Fcb->Flags, FCB_DELETE_PENDING)) + { + Status = STATUS_DELETE_PENDING; + __leave; + } +*/ + switch (FileInformationClass) { + + case FileBasicInformation: + { + PFILE_BASIC_INFORMATION FBI = (PFILE_BASIC_INFORMATION) Buffer; + PRFSD_INODE RfsdInode = Fcb->Inode; + + if (FBI->CreationTime.QuadPart) { + RfsdInode->i_ctime = (ULONG)(RfsdInodeTime(FBI->CreationTime)); + } + + if (FBI->LastAccessTime.QuadPart) { + RfsdInode->i_atime = (ULONG)(RfsdInodeTime(FBI->LastAccessTime)); + } + + if (FBI->LastWriteTime.QuadPart) { + RfsdInode->i_mtime = (ULONG)(RfsdInodeTime(FBI->LastWriteTime)); + } + + if (IsFlagOn(FBI->FileAttributes, FILE_ATTRIBUTE_READONLY)) { + RfsdSetReadOnly(Fcb->Inode->i_mode); + SetFlag(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_READONLY); + } else { + RfsdSetWritable(Fcb->Inode->i_mode); + ClearFlag(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_READONLY); + } + + if(RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, RfsdInode)) { + Status = STATUS_SUCCESS; + } + + if (FBI->FileAttributes & FILE_ATTRIBUTE_TEMPORARY) { + SetFlag(FileObject->Flags, FO_TEMPORARY_FILE); + } else { + ClearFlag(FileObject->Flags, FO_TEMPORARY_FILE); + } + + NotifyFilter = FILE_NOTIFY_CHANGE_ATTRIBUTES | + FILE_NOTIFY_CHANGE_CREATION | + FILE_NOTIFY_CHANGE_LAST_ACCESS | + FILE_NOTIFY_CHANGE_LAST_WRITE ; + + Status = STATUS_SUCCESS; + } + + break; + + case FileAllocationInformation: + { + PFILE_ALLOCATION_INFORMATION FAI = (PFILE_ALLOCATION_INFORMATION)Buffer; + + if (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + if ( FAI->AllocationSize.QuadPart == + Fcb->Header.AllocationSize.QuadPart) { + + Status = STATUS_SUCCESS; + + } else if ( FAI->AllocationSize.QuadPart > + Fcb->Header.AllocationSize.QuadPart ) { + + Status = RfsdExpandFile( + IrpContext, + Vcb, Fcb, + &(FAI->AllocationSize)); + + if (NT_SUCCESS(Status)) { + + RfsdSaveInode( IrpContext, + Vcb, + Fcb->RfsdMcb->Inode, + Fcb->Inode ); + } + + } else { + + if (MmCanFileBeTruncated(&(Fcb->SectionObject), &(FAI->AllocationSize))) { + + LARGE_INTEGER EndOfFile; + + EndOfFile.QuadPart = FAI->AllocationSize.QuadPart + + (LONGLONG)(Vcb->BlockSize - 1); + + Status = RfsdTruncateFile(IrpContext, Vcb, Fcb, &(EndOfFile)); + + if (NT_SUCCESS(Status)) { + + if ( FAI->AllocationSize.QuadPart < + Fcb->Header.FileSize.QuadPart) { + Fcb->Header.FileSize.QuadPart = + FAI->AllocationSize.QuadPart; + } + + RfsdSaveInode( IrpContext, + Vcb, + Fcb->RfsdMcb->Inode, + Fcb->Inode); + } + + } else { + + Status = STATUS_USER_MAPPED_FILE; + __leave; + } + } + + if (NT_SUCCESS(Status)) { + + CcSetFileSizes(FileObject, + (PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize))); + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + + NotifyFilter = FILE_NOTIFY_CHANGE_SIZE | + FILE_NOTIFY_CHANGE_LAST_WRITE ; + + } + + } + + break; + + case FileEndOfFileInformation: + { + PFILE_END_OF_FILE_INFORMATION FEOFI = (PFILE_END_OF_FILE_INFORMATION) Buffer; + + BOOLEAN CacheInitialized = FALSE; + + if (IsDirectory(Fcb)) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + if (FEOFI->EndOfFile.HighPart != 0) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + + if (IoStackLocation->Parameters.SetFile.AdvanceOnly) { + Status = STATUS_SUCCESS; + __leave; + } + + if ((FileObject->SectionObjectPointer->DataSectionObject != NULL) && + (FileObject->SectionObjectPointer->SharedCacheMap == NULL) && + !FlagOn(Irp->Flags, IRP_PAGING_IO)) { + + ASSERT( !FlagOn( FileObject->Flags, FO_CLEANUP_COMPLETE ) ); + + CcInitializeCacheMap( + FileObject, + (PCC_FILE_SIZES)&(Fcb->Header.AllocationSize), + FALSE, + &(RfsdGlobal->CacheManagerNoOpCallbacks), + Fcb ); + + CacheInitialized = TRUE; + } + + if ( FEOFI->EndOfFile.QuadPart == + Fcb->Header.AllocationSize.QuadPart) { + + Status = STATUS_SUCCESS; + + } else if ( FEOFI->EndOfFile.QuadPart > + Fcb->Header.AllocationSize.QuadPart) { + + LARGE_INTEGER FileSize = Fcb->Header.FileSize; + + Status = RfsdExpandFile(IrpContext, Vcb, Fcb, &(FEOFI->EndOfFile)); + + if (NT_SUCCESS(Status)) { + + Fcb->Header.FileSize.QuadPart = FEOFI->EndOfFile.QuadPart; + + Fcb->Inode->i_size = FEOFI->EndOfFile.QuadPart; + + Fcb->Header.ValidDataLength.QuadPart = + (LONGLONG)(0x7fffffffffffffff); + + RfsdSaveInode( IrpContext, + Vcb, + Fcb->RfsdMcb->Inode, + Fcb->Inode); + + + CcSetFileSizes(FileObject, + (PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize))); + + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + + RfsdZeroHoles( IrpContext, + Vcb, FileObject, + FileSize.QuadPart, + Fcb->Header.AllocationSize.QuadPart - + FileSize.QuadPart ); + + NotifyFilter = FILE_NOTIFY_CHANGE_SIZE | + FILE_NOTIFY_CHANGE_LAST_WRITE ; + + } + } else { + + if (MmCanFileBeTruncated(&(Fcb->SectionObject), &(FEOFI->EndOfFile))) { + + LARGE_INTEGER EndOfFile = FEOFI->EndOfFile; + + EndOfFile.QuadPart = EndOfFile.QuadPart + + (LONGLONG)(Vcb->BlockSize - 1); + + Status = RfsdTruncateFile(IrpContext, Vcb, Fcb, &(EndOfFile)); + + if (NT_SUCCESS(Status)) { + + Fcb->Header.FileSize.QuadPart = FEOFI->EndOfFile.QuadPart; + Fcb->Inode->i_size = FEOFI->EndOfFile.QuadPart; + + RfsdSaveInode( IrpContext, + Vcb, + Fcb->RfsdMcb->Inode, + Fcb->Inode); + + CcSetFileSizes(FileObject, + (PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize))); + + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + + NotifyFilter = FILE_NOTIFY_CHANGE_SIZE | + FILE_NOTIFY_CHANGE_LAST_WRITE ; + } + + } else { + + Status = STATUS_USER_MAPPED_FILE; + __leave; + } + } + } + + break; + + case FileDispositionInformation: + { + PFILE_DISPOSITION_INFORMATION FDI = (PFILE_DISPOSITION_INFORMATION)Buffer; + + Status = RfsdSetDispositionInfo(IrpContext, Vcb, Fcb, FDI->DeleteFile); + } + + break; + + case FileRenameInformation: + { + Status = RfsdSetRenameInfo(IrpContext, Vcb, Fcb); + } + + break; + + // + // This is the only set file information request supported on read + // only file systems + // + case FilePositionInformation: + { + PFILE_POSITION_INFORMATION FilePositionInformation; + + if (Length < sizeof(FILE_POSITION_INFORMATION)) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + FilePositionInformation = (PFILE_POSITION_INFORMATION) Buffer; + + if ((FlagOn(FileObject->Flags, FO_NO_INTERMEDIATE_BUFFERING)) && + (FilePositionInformation->CurrentByteOffset.LowPart & + DeviceObject->AlignmentRequirement) ) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + FileObject->CurrentByteOffset = + FilePositionInformation->CurrentByteOffset; + + Status = STATUS_SUCCESS; + __leave; + } + + break; + + default: + Status = STATUS_INVALID_INFO_CLASS; + } + + } __finally { + + if (FcbPagingIoResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->PagingIoResource, + ExGetCurrentResourceThread() ); + } + + if (NT_SUCCESS(Status) && (NotifyFilter != 0)) { + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + NotifyFilter, + FILE_ACTION_MODIFIED ); + + } + + if (FcbMainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} +#endif + +#if DISABLED +NTSTATUS +RfsdExpandFile( PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, PRFSD_FCB Fcb, + PLARGE_INTEGER AllocationSize) +{ +DbgBreak(); + + ULONG dwRet = 0; + NTSTATUS Status = STATUS_SUCCESS; + + if (AllocationSize->QuadPart <= Fcb->Header.AllocationSize.QuadPart) { + return Status; + } + + if (((LONGLONG)SUPER_BLOCK->s_free_blocks_count) * Vcb->BlockSize <= + (AllocationSize->QuadPart - Fcb->Header.AllocationSize.QuadPart) ) { + RfsdPrint((DBG_ERROR, "RfsdExpandFile: There is no enough disk space available.\n")); + return STATUS_DISK_FULL; + } + + while (NT_SUCCESS(Status) && (AllocationSize->QuadPart > Fcb->Header.AllocationSize.QuadPart)) { + Status = RfsdExpandInode(IrpContext, Vcb, Fcb, &dwRet); + } + + return Status; +} +#endif + +#if DISABLE +NTSTATUS +RfsdTruncateFile( PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, PRFSD_FCB Fcb, + PLARGE_INTEGER AllocationSize) +{ +DbgBreak(); + + NTSTATUS Status = STATUS_SUCCESS; + + while (NT_SUCCESS(Status) && (AllocationSize->QuadPart < + Fcb->Header.AllocationSize.QuadPart)) { + Status= RfsdTruncateInode(IrpContext, Vcb, Fcb); + } + + return Status; +} +#endif + +#if DISABLE +NTSTATUS +RfsdSetDispositionInfo( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + BOOLEAN bDelete) +{ +DbgBreak(); + + PIRP Irp = IrpContext->Irp; + PIO_STACK_LOCATION IrpSp; + + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + RfsdPrint((DBG_INFO, "RfsdSetDispositionInfo: bDelete=%x\n", bDelete)); + + if (bDelete) { + + RfsdPrint((DBG_INFO, "RfsdSetDispositionInformation: MmFlushImageSection on %s.\n", + Fcb->AnsiFileName.Buffer)); + + if (!MmFlushImageSection( &Fcb->SectionObject, + MmFlushForDelete )) { + return STATUS_CANNOT_DELETE; + } + + if (RFSD_IS_ROOT_KEY(Fcb->RfsdMcb->Key)) { + return STATUS_CANNOT_DELETE; + } + + if (IsDirectory(Fcb)) { + if (!RfsdIsDirectoryEmpty(Vcb, Fcb)) { + return STATUS_DIRECTORY_NOT_EMPTY; + } + } + + SetFlag(Fcb->Flags, FCB_DELETE_PENDING); + IrpSp->FileObject->DeletePending = TRUE; + + if (IsDirectory(Fcb)) { + FsRtlNotifyFullChangeDirectory( Vcb->NotifySync, + &Vcb->NotifyList, + Fcb, + NULL, + FALSE, + FALSE, + 0, + NULL, + NULL, + NULL ); + } + + } else { + + ClearFlag(Fcb->Flags, FCB_DELETE_PENDING); + IrpSp->FileObject->DeletePending = FALSE; + } + + return STATUS_SUCCESS; +} +#endif + +#if DISABLED +NTSTATUS +RfsdSetRenameInfo( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb ) +{ +DbgBreak(); + + PRFSD_FCB TargetDcb; + PRFSD_MCB TargetMcb; + + PRFSD_MCB Mcb; + RFSD_INODE Inode; + + UNICODE_STRING FileName; + + NTSTATUS Status; + + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + + PFILE_OBJECT FileObject; + PFILE_OBJECT TargetObject; + BOOLEAN ReplaceIfExists; + + BOOLEAN bMove = FALSE; + + PFILE_RENAME_INFORMATION FRI; + + if (Fcb->RfsdMcb->Inode == RFSD_ROOT_INO) { + Status = STATUS_INVALID_PARAMETER; + goto errorout; + } + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + FileObject = IrpSp->FileObject; + TargetObject = IrpSp->Parameters.SetFile.FileObject; + ReplaceIfExists = IrpSp->Parameters.SetFile.ReplaceIfExists; + + FRI = (PFILE_RENAME_INFORMATION)Irp->AssociatedIrp.SystemBuffer; + + if (TargetObject == NULL) { + + UNICODE_STRING NewName; + + NewName.Buffer = FRI->FileName; + NewName.MaximumLength = NewName.Length = (USHORT)FRI->FileNameLength; + + while (NewName.Length > 0 && NewName.Buffer[NewName.Length/2 - 1] == L'\\') { + NewName.Buffer[NewName.Length/2 - 1] = 0; + NewName.Length -= 2; + } + + while (NewName.Length > 0 && NewName.Buffer[NewName.Length/2 - 1] != L'\\') { + NewName.Length -= 2; + } + + NewName.Buffer = (USHORT *)((UCHAR *)NewName.Buffer + NewName.Length); + NewName.Length = (USHORT)(FRI->FileNameLength - NewName.Length); + + FileName = NewName; + + TargetDcb = NULL; + TargetMcb = Fcb->RfsdMcb->Parent; + + if (FileName.Length >= RFSD_NAME_LEN*sizeof(USHORT)) { + Status = STATUS_OBJECT_NAME_INVALID; + goto errorout; + } + + } else { + + TargetDcb = (PRFSD_FCB)(TargetObject->FsContext); + + if (!TargetDcb || TargetDcb->Vcb != Vcb) { + + DbgBreak(); + + Status = STATUS_INVALID_PARAMETER; + goto errorout; + } + + TargetMcb = TargetDcb->RfsdMcb; + + FileName = TargetObject->FileName; + } + + if (FsRtlDoesNameContainWildCards(&FileName)) { + Status = STATUS_OBJECT_NAME_INVALID; + goto errorout; + } + + if (TargetMcb->Inode == Fcb->RfsdMcb->Parent->Inode) { + if (FsRtlAreNamesEqual( &FileName, + &(Fcb->RfsdMcb->ShortName), + FALSE, + NULL )) { + Status = STATUS_SUCCESS; + goto errorout; + } + } else { + bMove = TRUE; + } + + TargetDcb = TargetMcb->RfsdFcb; + + if (!TargetDcb) + TargetDcb = RfsdCreateFcbFromMcb(Vcb, TargetMcb); + + if ((TargetMcb->Inode != Fcb->RfsdMcb->Parent->Inode) && + (Fcb->RfsdMcb->Parent->RfsdFcb == NULL) ) { + RfsdCreateFcbFromMcb(Vcb, Fcb->RfsdMcb->Parent); + } + + if (!TargetDcb || !(Fcb->RfsdMcb->Parent->RfsdFcb)) { + Status = STATUS_UNSUCCESSFUL; + + goto errorout; + } + + Mcb = NULL; + Status = RfsdLookupFileName( + Vcb, + &FileName, + TargetMcb, + &Mcb, + &Inode ); + + if (NT_SUCCESS(Status)) { + + if ( (!ReplaceIfExists) || + (IsFlagOn(Mcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) || + (IsFlagOn(Mcb->FileAttr, FILE_ATTRIBUTE_READONLY))) { + Status = STATUS_OBJECT_NAME_COLLISION; + goto errorout; + } + + if (ReplaceIfExists) { + Status = STATUS_NOT_IMPLEMENTED; + goto errorout; + } + } + + if (IsDirectory(Fcb)) { + + Status = RfsdRemoveEntry( IrpContext, Vcb, + Fcb->RfsdMcb->Parent->RfsdFcb, + RFSD_FT_DIR, + Fcb->RfsdMcb->Inode ); + + if (!NT_SUCCESS(Status)) { + DbgBreak(); + + goto errorout; + } + + Status = RfsdAddEntry( IrpContext, Vcb, + TargetDcb, + RFSD_FT_DIR, + Fcb->RfsdMcb->Inode, + &FileName ); + + if (!NT_SUCCESS(Status)) { + + DbgBreak(); + + RfsdAddEntry( IrpContext, Vcb, + Fcb->RfsdMcb->Parent->RfsdFcb, + RFSD_FT_DIR, + Fcb->RfsdMcb->Inode, + &Fcb->RfsdMcb->ShortName ); + + goto errorout; + } + + if( !RfsdSaveInode( IrpContext, + Vcb, + TargetMcb->Inode, + TargetDcb->Inode)) { + Status = STATUS_UNSUCCESSFUL; + + DbgBreak(); + + goto errorout; + } + + if( !RfsdSaveInode( IrpContext, + Vcb, + Fcb->RfsdMcb->Parent->Inode, + Fcb->RfsdMcb->Parent->RfsdFcb->Inode)) { + + Status = STATUS_UNSUCCESSFUL; + + DbgBreak(); + + goto errorout; + } + + Status = RfsdSetParentEntry( IrpContext, Vcb, Fcb, + Fcb->RfsdMcb->Parent->Inode, + TargetDcb->RfsdMcb->Inode ); + + + if (!NT_SUCCESS(Status)) { + DbgBreak(); + goto errorout; + } + + } else { + + Status = RfsdRemoveEntry( IrpContext, Vcb, + Fcb->RfsdMcb->Parent->RfsdFcb, + RFSD_FT_REG_FILE, + Fcb->RfsdMcb->Inode ); + if (!NT_SUCCESS(Status)) { + DbgBreak(); + goto errorout; + } + + Status = RfsdAddEntry( IrpContext, + Vcb, TargetDcb, + RFSD_FT_REG_FILE, + Fcb->RfsdMcb->Inode, + &FileName ); + + if (!NT_SUCCESS(Status)) { + + DbgBreak(); + + RfsdAddEntry( IrpContext, Vcb, + Fcb->RfsdMcb->Parent->RfsdFcb, + RFSD_FT_REG_FILE, + Fcb->RfsdMcb->Inode, + &Fcb->RfsdMcb->ShortName ); + + goto errorout; + } + } + + if (NT_SUCCESS(Status)) { + + if (Fcb->RfsdMcb->ShortName.MaximumLength < (FileName.Length + 2)) { + + ExFreePool(Fcb->RfsdMcb->ShortName.Buffer); + Fcb->RfsdMcb->ShortName.Buffer = + ExAllocatePool(PagedPool, FileName.Length + 2); + + if (!Fcb->RfsdMcb->ShortName.Buffer) { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto errorout; + } + + Fcb->RfsdMcb->ShortName.MaximumLength = FileName.Length + 2; + } + + { + RtlZeroMemory( Fcb->RfsdMcb->ShortName.Buffer, + Fcb->RfsdMcb->ShortName.MaximumLength); + + RtlCopyMemory( Fcb->RfsdMcb->ShortName.Buffer, + FileName.Buffer, FileName.Length); + + Fcb->RfsdMcb->ShortName.Length = FileName.Length; + } + +#if DBG + + Fcb->AnsiFileName.Length = (USHORT) + RfsdUnicodeToOEMSize(&FileName) + 1; + + if (Fcb->AnsiFileName.MaximumLength < FileName.Length) { + ExFreePool(Fcb->AnsiFileName.Buffer); + + Fcb->AnsiFileName.Buffer = + ExAllocatePool(PagedPool, Fcb->AnsiFileName.Length + 1); + + if (!Fcb->AnsiFileName.Buffer) { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto errorout; + } + + RtlZeroMemory( Fcb->AnsiFileName.Buffer, + Fcb->AnsiFileName.Length + 1); + Fcb->AnsiFileName.MaximumLength = + Fcb->AnsiFileName.Length + 1; + } + + RfsdUnicodeToOEM( &(Fcb->AnsiFileName), + &FileName ); + +#endif + + if (bMove) { + + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + (IsDirectory(Fcb) ? + FILE_NOTIFY_CHANGE_DIR_NAME : + FILE_NOTIFY_CHANGE_FILE_NAME ), + FILE_ACTION_REMOVED); + + } else { + + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + (IsDirectory(Fcb) ? + FILE_NOTIFY_CHANGE_DIR_NAME : + FILE_NOTIFY_CHANGE_FILE_NAME ), + FILE_ACTION_RENAMED_OLD_NAME); + + } + + RfsdDeleteMcbNode(Vcb, Fcb->RfsdMcb->Parent, Fcb->RfsdMcb); + RfsdAddMcbNode(Vcb, TargetMcb, Fcb->RfsdMcb); + + if (bMove) { + + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + (IsDirectory(Fcb) ? + FILE_NOTIFY_CHANGE_DIR_NAME : + FILE_NOTIFY_CHANGE_FILE_NAME ), + FILE_ACTION_ADDED); + } else { + + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + (IsDirectory(Fcb) ? + FILE_NOTIFY_CHANGE_DIR_NAME : + FILE_NOTIFY_CHANGE_FILE_NAME ), + FILE_ACTION_RENAMED_NEW_NAME ); + + } + } + +errorout: + + return Status; +} +#endif + +#if DISABLED +NTSTATUS +RfsdDeleteFile( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb ) +{ +DbgBreak(); + + BOOLEAN bRet = FALSE; + LARGE_INTEGER AllocationSize; + PRFSD_FCB Dcb = NULL; + + NTSTATUS Status = STATUS_SUCCESS; + + RfsdPrint((DBG_INFO, "RfsdDeleteFile: File %S (%xh) will be deleted!\n", + Fcb->RfsdMcb->ShortName.Buffer, Fcb->RfsdMcb->Inode)); + + if (IsFlagOn(Fcb->Flags, FCB_FILE_DELETED)) { + return Status; + } + + if (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + if (!RfsdIsDirectoryEmpty(Vcb, Fcb)) { + ClearFlag(Fcb->Flags, FCB_DELETE_PENDING); + + return STATUS_DIRECTORY_NOT_EMPTY; + } + } + + RfsdPrint((DBG_INFO, "RfsdDeleteFile: RFSDSB->S_FREE_BLOCKS = %xh .\n", + Vcb->SuperBlock->s_free_blocks_count)); + + if (IsDirectory(Fcb)) { + if (Fcb->Inode->i_links_count <= 2) { + } else { + Status = STATUS_CANNOT_DELETE; + } + } else { + if (Fcb->Inode->i_links_count <= 1) { + } else { + Status = STATUS_CANNOT_DELETE; + } + } + + if (!NT_SUCCESS(Status)) { + DbgBreak(); + return Status; + } + + if (Fcb->RfsdMcb->Parent->RfsdFcb) { + + Status = RfsdRemoveEntry( + IrpContext, Vcb, + Fcb->RfsdMcb->Parent->RfsdFcb, + (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY) ? + RFSD_FT_DIR : RFSD_FT_REG_FILE), + Fcb->RfsdMcb->Inode); + } else { + + Dcb = RfsdCreateFcbFromMcb(Vcb, Fcb->RfsdMcb->Parent); + if (Dcb) { + Status = RfsdRemoveEntry( + IrpContext, Vcb, Dcb, + (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY) ? + RFSD_FT_DIR : RFSD_FT_REG_FILE), + Fcb->RfsdMcb->Inode); + } + } + + if (NT_SUCCESS(Status)) { + + LARGE_INTEGER SysTime; + KeQuerySystemTime(&SysTime); + + AllocationSize.QuadPart = (LONGLONG)0; + + Status = RfsdTruncateFile(IrpContext, Vcb, Fcb, &AllocationSize); + + // + // Update the inode's data length . It should be ZERO if succeeds. + // + + if (Fcb->Header.FileSize.QuadPart > Fcb->Header.AllocationSize.QuadPart) { + + Fcb->Header.FileSize.QuadPart = Fcb->Header.AllocationSize.QuadPart; + Fcb->Inode->i_size = Fcb->Header.AllocationSize.QuadPart; + } + + Fcb->Inode->i_links_count = 0; + + RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, Fcb->Inode); + + if (IsDirectory(Fcb)) { + bRet = RfsdFreeInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, RFSD_FT_DIR); + } else { + bRet = RfsdFreeInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, RFSD_FT_REG_FILE); + } + + SetFlag(Fcb->Flags, FCB_FILE_DELETED); + RfsdDeleteMcbNode(Vcb, Fcb->RfsdMcb->Parent, Fcb->RfsdMcb); + + } else { + DbgBreak(); + RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, Fcb->Inode); + } + + RfsdPrint((DBG_INFO, "RfsdDeleteFile: Succeed... RFSDSB->S_FREE_BLOCKS = %xh .\n", + Vcb->SuperBlock->s_free_blocks_count)); + + return Status; +} +#endif Added: vendor/rfsd/current/RFSD/RFSD/flush.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/flush.c?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/flush.c (added) +++ vendor/rfsd/current/RFSD/RFSD/flush.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,270 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: flush.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdFlushFile) +#pragma alloc_text(PAGE, RfsdFlushFiles) +#pragma alloc_text(PAGE, RfsdFlushVolume) +#pragma alloc_text(PAGE, RfsdFlush) +#endif + + +NTSTATUS +RfsdFlushCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Contxt ) + +{ + if (Irp->PendingReturned) + IoMarkIrpPending( Irp ); + + + if (Irp->IoStatus.Status == STATUS_INVALID_DEVICE_REQUEST) + Irp->IoStatus.Status = STATUS_SUCCESS; + + return STATUS_SUCCESS; +} + +NTSTATUS +RfsdFlushFiles (IN PRFSD_VCB Vcb, BOOLEAN bShutDown) +{ + IO_STATUS_BLOCK IoStatus; + + PRFSD_FCB Fcb; + PLIST_ENTRY ListEntry; + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY) || + IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + return STATUS_SUCCESS; + } + + RfsdPrint((DBG_INFO, "Flushing Files ...\n")); + + // Flush all Fcbs in Vcb list queue. + { + for (ListEntry = Vcb->FcbList.Flink; + ListEntry != &Vcb->FcbList; + ListEntry = ListEntry->Flink ) { + + Fcb = CONTAINING_RECORD(ListEntry, RFSD_FCB, Next); + + if (ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + TRUE )) { + + IoStatus.Status = RfsdFlushFile(Fcb); +/* + if (bShutDown) + IoStatus.Status = RfsdPurgeFile(Fcb, TRUE); + else + IoStatus.Status = RfsdFlushFile(Fcb); +*/ + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread()); + } + } + } + + return IoStatus.Status; +} + +NTSTATUS +RfsdFlushVolume (IN PRFSD_VCB Vcb, BOOLEAN bShutDown) +{ + IO_STATUS_BLOCK IoStatus; + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY) || + IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + return STATUS_SUCCESS; + } + + RfsdPrint((DBG_INFO, "RfsdFlushVolume: Flushing Vcb ...\n")); + + ExAcquireSharedStarveExclusive(&Vcb->PagingIoResource, TRUE); + ExReleaseResource(&Vcb->PagingIoResource); + + CcFlushCache(&(Vcb->SectionObject), NULL, 0, &IoStatus); + + return IoStatus.Status; +} + +NTSTATUS +RfsdFlushFile (IN PRFSD_FCB Fcb) +{ + IO_STATUS_BLOCK IoStatus; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (IsDirectory(Fcb)) + return STATUS_SUCCESS; + + RfsdPrint((DBG_INFO, "RfsdFlushFile: Flushing File Key=%x,%xh %S ...\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, Fcb->RfsdMcb->ShortName.Buffer)); +/* + { + ULONG ResShCnt, ResExCnt; + ResShCnt = ExIsResourceAcquiredSharedLite(&Fcb->PagingIoResource); + ResExCnt = ExIsResourceAcquiredExclusiveLite(&Fcb->PagingIoResource); + + RfsdPrint((DBG_INFO, "RfsdFlushFile: PagingIoRes: %xh:%xh\n", ResShCnt, ResExCnt)); + } +*/ + CcFlushCache(&(Fcb->SectionObject), NULL, 0, &IoStatus); + + ClearFlag(Fcb->Flags, FCB_FILE_MODIFIED); + + return IoStatus.Status; +} + +NTSTATUS +RfsdFlush (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + + PRFSD_VCB Vcb; + PRFSD_FCBVCB FcbOrVcb; + PFILE_OBJECT FileObject; + + PDEVICE_OBJECT DeviceObject; + + BOOLEAN MainResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + if ( IsFlagOn(Vcb->Flags, VCB_READ_ONLY) || + IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + Status = STATUS_SUCCESS; + __leave; + } + + Irp = IrpContext->Irp; + + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + FileObject = IrpContext->FileObject; + + FcbOrVcb = (PRFSD_FCBVCB) FileObject->FsContext; + + ASSERT(FcbOrVcb != NULL); + + if (!ExAcquireResourceExclusiveLite( + &FcbOrVcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + MainResourceAcquired = TRUE; + + if (FcbOrVcb->Identifier.Type == RFSDVCB) { + + Status = RfsdFlushFiles((PRFSD_VCB)(FcbOrVcb), FALSE); + + if (NT_SUCCESS(Status)) { + __leave; + } + + Status = RfsdFlushVolume((PRFSD_VCB)(FcbOrVcb), FALSE); + + if (NT_SUCCESS(Status) && IsFlagOn(Vcb->StreamObj->Flags, FO_FILE_MODIFIED)) { + ClearFlag(Vcb->StreamObj->Flags, FO_FILE_MODIFIED); + } + + } else if (FcbOrVcb->Identifier.Type == RFSDFCB) { + + Status = RfsdFlushFile((PRFSD_FCB)(FcbOrVcb)); + + if (NT_SUCCESS(Status) && IsFlagOn(FileObject->Flags, FO_FILE_MODIFIED)) { + ClearFlag(FileObject->Flags, FO_FILE_MODIFIED); + } + } + + } __finally { + + if (MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &FcbOrVcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + + if (!IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + + // Call the disk driver to flush the physial media. + NTSTATUS DriverStatus; + PIO_STACK_LOCATION NextIrpSp; + + NextIrpSp = IoGetNextIrpStackLocation(Irp); + + *NextIrpSp = *IrpSp; + + IoSetCompletionRoutine( Irp, + RfsdFlushCompletionRoutine, + NULL, + TRUE, + TRUE, + TRUE ); + + DriverStatus = IoCallDriver(Vcb->TargetDeviceObject, Irp); + + Status = (DriverStatus == STATUS_INVALID_DEVICE_REQUEST) ? + Status : DriverStatus; + + IrpContext->Irp = Irp = NULL; + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/fsctl.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/fsctl.c?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/fsctl.c (added) +++ vendor/rfsd/current/RFSD/RFSD/fsctl.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1227 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: fsctl.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +BOOLEAN +RfsdIsMediaWriteProtected ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PDEVICE_OBJECT TargetDevice); + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdSetVpbFlag) +#pragma alloc_text(PAGE, RfsdClearVpbFlag) +#pragma alloc_text(PAGE, RfsdIsHandleCountZero) +#pragma alloc_text(PAGE, RfsdLockVcb) +#pragma alloc_text(PAGE, RfsdLockVolume) +#pragma alloc_text(PAGE, RfsdUnlockVcb) +#pragma alloc_text(PAGE, RfsdUnlockVolume) +#pragma alloc_text(PAGE, RfsdAllowExtendedDasdIo) +#pragma alloc_text(PAGE, RfsdUserFsRequest) +#pragma alloc_text(PAGE, RfsdIsMediaWriteProtected) +#pragma alloc_text(PAGE, RfsdMountVolume) +#pragma alloc_text(PAGE, RfsdCheckDismount) +#pragma alloc_text(PAGE, RfsdPurgeVolume) +#pragma alloc_text(PAGE, RfsdPurgeFile) +#pragma alloc_text(PAGE, RfsdDismountVolume) +#pragma alloc_text(PAGE, RfsdIsVolumeMounted) +#pragma alloc_text(PAGE, RfsdVerifyVolume) +#pragma alloc_text(PAGE, RfsdFileSystemControl) +#endif + + +VOID +RfsdSetVpbFlag ( + IN PVPB Vpb, + IN USHORT Flag ) +{ + KIRQL OldIrql; + + IoAcquireVpbSpinLock(&OldIrql); + + Vpb->Flags |= Flag; + + IoReleaseVpbSpinLock(OldIrql); +} + +VOID +RfsdClearVpbFlag ( + IN PVPB Vpb, + IN USHORT Flag ) +{ + KIRQL OldIrql; + + IoAcquireVpbSpinLock(&OldIrql); + + Vpb->Flags &= ~Flag; + + IoReleaseVpbSpinLock(OldIrql); +} + +BOOLEAN +RfsdIsHandleCountZero(IN PRFSD_VCB Vcb) +{ + PRFSD_FCB Fcb; + PLIST_ENTRY List; + + for( List = Vcb->FcbList.Flink; + List != &Vcb->FcbList; + List = List->Flink ) { + + Fcb = CONTAINING_RECORD(List, RFSD_FCB, Next); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + RfsdPrint((DBG_INFO, "RfsdIsHandleCountZero: Key:%x,%xh File:%S OpenHandleCount=%xh\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, Fcb->RfsdMcb->ShortName.Buffer, Fcb->OpenHandleCount)); + + if (Fcb->OpenHandleCount) { + return FALSE; + } + } + + return TRUE; +} + +NTSTATUS +RfsdLockVcb (IN PRFSD_VCB Vcb, + IN PFILE_OBJECT FileObject) +{ + NTSTATUS Status; + + __try { + + if (FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED)) { + RfsdPrint((DBG_INFO, "RfsdLockVolume: Volume is already locked.\n")); + + Status = STATUS_ACCESS_DENIED; + + __leave; + } + + if (Vcb->OpenFileHandleCount > (ULONG)(FileObject ? 1 : 0)) { + RfsdPrint((DBG_INFO, "RfsdLockVcb: There are still opened files.\n")); + + Status = STATUS_ACCESS_DENIED; + + __leave; + } + + if (!RfsdIsHandleCountZero(Vcb)) { + RfsdPrint((DBG_INFO, "RfsdLockVcb: Thare are still opened files.\n")); + + Status = STATUS_ACCESS_DENIED; + + __leave; + } + + SetFlag(Vcb->Flags, VCB_VOLUME_LOCKED); + + RfsdSetVpbFlag(Vcb->Vpb, VPB_LOCKED); + + Vcb->LockFile = FileObject; + + RfsdPrint((DBG_INFO, "RfsdLockVcb: Volume locked.\n")); + + Status = STATUS_SUCCESS; + + } __finally { + // Nothing + } + + return Status; +} + + +NTSTATUS +RfsdLockVolume (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PIO_STACK_LOCATION IrpSp; + PDEVICE_OBJECT DeviceObject; + PRFSD_VCB Vcb; + NTSTATUS Status; + BOOLEAN VcbResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + Status = STATUS_UNSUCCESSFUL; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + IrpSp = IoGetCurrentIrpStackLocation(IrpContext->Irp); + +#if (_WIN32_WINNT >= 0x0500) + CcWaitForCurrentLazyWriterActivity(); +#endif + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + TRUE ); + + VcbResourceAcquired = TRUE; + + Status = RfsdLockVcb(Vcb, IrpSp->FileObject); + + } __finally { + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() + ); + } + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + +NTSTATUS +RfsdUnlockVcb ( IN PRFSD_VCB Vcb, + IN PFILE_OBJECT FileObject ) +{ + NTSTATUS Status; + + __try { + + if (FileObject && FileObject->FsContext != Vcb) { + + Status = STATUS_NOT_LOCKED; + __leave; + } + + if (!FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED)) { + RfsdPrint((DBG_ERROR, ": RfsdUnlockVcb: Volume is not locked.\n")); + Status = STATUS_NOT_LOCKED; + __leave; + } + + if (Vcb->LockFile == FileObject) { + + ClearFlag(Vcb->Flags, VCB_VOLUME_LOCKED); + + RfsdClearVpbFlag(Vcb->Vpb, VPB_LOCKED); + + RfsdPrint((DBG_INFO, "RfsdUnlockVcb: Volume unlocked.\n")); + + Status = STATUS_SUCCESS; + } else { + Status = STATUS_NOT_LOCKED; + } + + } __finally { + // Nothing + } + + return Status; +} + +NTSTATUS +RfsdUnlockVolume ( + IN PRFSD_IRP_CONTEXT IrpContext + ) +{ + PIO_STACK_LOCATION IrpSp; + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status; + PRFSD_VCB Vcb; + BOOLEAN VcbResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + IrpSp = IoGetCurrentIrpStackLocation(IrpContext->Irp); + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + TRUE ); + + VcbResourceAcquired = TRUE; + + Status = RfsdUnlockVcb(Vcb, IrpSp->FileObject); + + } __finally { + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() + ); + } + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +NTSTATUS +RfsdInvalidateVolumes ( IN PRFSD_IRP_CONTEXT IrpContext ) +{ + NTSTATUS Status; + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + + HANDLE Handle; + + PLIST_ENTRY ListEntry; + + PFILE_OBJECT FileObject; + PDEVICE_OBJECT DeviceObject; + BOOLEAN GlobalResourceAcquired = FALSE; + + LUID Privilege = {SE_TCB_PRIVILEGE, 0}; + + __try { + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + if (!SeSinglePrivilegeCheck(Privilege, Irp->RequestorMode)) { + Status = STATUS_PRIVILEGE_NOT_HELD; + __leave; + } + + if ( +#ifndef _GNU_NTIFS_ + IrpSp->Parameters.FileSystemControl.InputBufferLength +#else + ((PEXTENDED_IO_STACK_LOCATION)(IrpSp))-> + Parameters.FileSystemControl.InputBufferLength +#endif + != sizeof(HANDLE)) { + + Status = STATUS_INVALID_PARAMETER; + + __leave; + } + + Handle = *(PHANDLE)Irp->AssociatedIrp.SystemBuffer; + + Status = ObReferenceObjectByHandle( Handle, + 0, + *IoFileObjectType, + KernelMode, + &FileObject, + NULL ); + + if (!NT_SUCCESS(Status)) { + __leave; + } else { + ObDereferenceObject(FileObject); + DeviceObject = FileObject->DeviceObject; + } + + RfsdPrint((DBG_INFO, "RfsdInvalidateVolumes: FileObject=%xh ...\n", FileObject)); + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->Resource, + TRUE ); + + GlobalResourceAcquired = TRUE; + + ListEntry = RfsdGlobal->VcbList.Flink; + + while (ListEntry != &RfsdGlobal->VcbList) { + + PRFSD_VCB Vcb; + + Vcb = CONTAINING_RECORD(ListEntry, RFSD_VCB, Next); + + ListEntry = ListEntry->Flink; + + RfsdPrint((DBG_INFO, "RfsdInvalidateVolumes: Vcb=%xh Vcb->Vpb=%xh...\n", Vcb, Vcb->Vpb)); + if (Vcb->Vpb && (Vcb->Vpb->RealDevice == DeviceObject)) + { + ExAcquireResourceExclusive(&Vcb->MainResource, TRUE); + RfsdPrint((DBG_INFO, "RfsdInvalidateVolumes: RfsdPurgeVolume...\n")); + RfsdPurgeVolume(Vcb, FALSE); + ClearFlag(Vcb->Flags, VCB_MOUNTED); + ExReleaseResource(&Vcb->MainResource); + + // + // Vcb is still attached on the list ...... + // + + if (ListEntry->Blink == &Vcb->Next) + { + RfsdPrint((DBG_INFO, "RfsdInvalidateVolumes: RfsdCheckDismount...\n")); + RfsdCheckDismount(IrpContext, Vcb, FALSE); + } + } + } + + } __finally { + + if (GlobalResourceAcquired) { + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() ); + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + + return Status; +} + +NTSTATUS +RfsdAllowExtendedDasdIo(IN PRFSD_IRP_CONTEXT IrpContext) +{ + PIO_STACK_LOCATION IrpSp; + PRFSD_VCB Vcb; + PRFSD_CCB Ccb; + + IrpSp = IoGetCurrentIrpStackLocation(IrpContext->Irp); + + Vcb = (PRFSD_VCB) IrpSp->FileObject->FsContext; + Ccb = (PRFSD_CCB) IrpSp->FileObject->FsContext2; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + if (Ccb) { + SetFlag(Ccb->Flags, CCB_ALLOW_EXTENDED_DASD_IO); + + RfsdCompleteIrpContext(IrpContext, STATUS_SUCCESS); + + return STATUS_SUCCESS; + } else { + return STATUS_INVALID_PARAMETER; + } +} + + +NTSTATUS +RfsdUserFsRequest (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + ULONG FsControlCode; + NTSTATUS Status; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + +#ifndef _GNU_NTIFS_ + FsControlCode = + IoStackLocation->Parameters.FileSystemControl.FsControlCode; +#else + FsControlCode = ((PEXTENDED_IO_STACK_LOCATION) + IoStackLocation)->Parameters.FileSystemControl.FsControlCode; +#endif + + switch (FsControlCode) { + + case FSCTL_LOCK_VOLUME: + Status = RfsdLockVolume(IrpContext); + break; + + case FSCTL_UNLOCK_VOLUME: + Status = RfsdUnlockVolume(IrpContext); + break; + + case FSCTL_DISMOUNT_VOLUME: + Status = RfsdDismountVolume(IrpContext); + break; + + case FSCTL_IS_VOLUME_MOUNTED: + Status = RfsdIsVolumeMounted(IrpContext); + break; + + case FSCTL_INVALIDATE_VOLUMES: + Status = RfsdInvalidateVolumes(IrpContext); + break; + +#if (_WIN32_WINNT >= 0x0500) + case FSCTL_ALLOW_EXTENDED_DASD_IO: + Status = RfsdAllowExtendedDasdIo(IrpContext); + break; +#endif //(_WIN32_WINNT >= 0x0500) + + default: + + RfsdPrint((DBG_ERROR, "RfsdUserFsRequest: Invalid User Request: %xh.\n", FsControlCode)); + Status = STATUS_INVALID_DEVICE_REQUEST; + + RfsdCompleteIrpContext(IrpContext, Status); + } + + return Status; +} + +BOOLEAN +RfsdIsMediaWriteProtected ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PDEVICE_OBJECT TargetDevice + ) +{ + PIRP Irp; + KEVENT Event; + NTSTATUS Status; + IO_STATUS_BLOCK IoStatus; + + KeInitializeEvent(&Event, NotificationEvent, FALSE); + + Irp = IoBuildDeviceIoControlRequest( IOCTL_DISK_IS_WRITABLE, + TargetDevice, + NULL, + 0, + NULL, + 0, + FALSE, + &Event, + &IoStatus ); + + if (Irp == NULL) { + return FALSE; + } + + SetFlag(IoGetNextIrpStackLocation(Irp)->Flags, SL_OVERRIDE_VERIFY_VOLUME); + + Status = IoCallDriver(TargetDevice, Irp); + + if (Status == STATUS_PENDING) { + + (VOID) KeWaitForSingleObject( &Event, + Executive, + KernelMode, + FALSE, + (PLARGE_INTEGER)NULL ); + + Status = IoStatus.Status; + } + + return (BOOLEAN)(Status == STATUS_MEDIA_WRITE_PROTECTED); +} + +NTSTATUS +RfsdMountVolume (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT MainDeviceObject; + BOOLEAN GlobalDataResourceAcquired = FALSE; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + PDEVICE_OBJECT TargetDeviceObject; + NTSTATUS Status = STATUS_UNRECOGNIZED_VOLUME; + PDEVICE_OBJECT VolumeDeviceObject = NULL; + PRFSD_VCB Vcb; + PRFSD_SUPER_BLOCK RfsdSb = NULL; + ULONG dwBytes; + DISK_GEOMETRY DiskGeometry; + + __try { + + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + MainDeviceObject = IrpContext->DeviceObject; + + // + // Make sure we can wait. + // + + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); + + // + // This request is only allowed on the main device object + // + if (MainDeviceObject != RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + ExAcquireResourceExclusiveLite( + &(RfsdGlobal->Resource), + TRUE ); + + GlobalDataResourceAcquired = TRUE; + + if (FlagOn(RfsdGlobal->Flags, RFSD_UNLOAD_PENDING)) { + Status = STATUS_UNRECOGNIZED_VOLUME; + __leave; + } + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + TargetDeviceObject = + IoStackLocation->Parameters.MountVolume.DeviceObject; + + dwBytes = sizeof(DISK_GEOMETRY); + Status = RfsdDiskIoControl( + TargetDeviceObject, + IOCTL_DISK_GET_DRIVE_GEOMETRY, + NULL, + 0, + &DiskGeometry, + &dwBytes ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + Status = IoCreateDevice( + MainDeviceObject->DriverObject, + sizeof(RFSD_VCB), + NULL, + FILE_DEVICE_DISK_FILE_SYSTEM, + 0, + FALSE, + &VolumeDeviceObject ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + VolumeDeviceObject->StackSize = (CCHAR)(TargetDeviceObject->StackSize + 1); + + if (TargetDeviceObject->AlignmentRequirement > + VolumeDeviceObject->AlignmentRequirement) { + + VolumeDeviceObject->AlignmentRequirement = + TargetDeviceObject->AlignmentRequirement; + } + + (IoStackLocation->Parameters.MountVolume.Vpb)->DeviceObject = + VolumeDeviceObject; + + Vcb = (PRFSD_VCB) VolumeDeviceObject->DeviceExtension; + + RtlZeroMemory(Vcb, sizeof(RFSD_VCB)); + + Vcb->Identifier.Type = RFSDVCB; + Vcb->Identifier.Size = sizeof(RFSD_VCB); + + Vcb->TargetDeviceObject = TargetDeviceObject; + Vcb->DiskGeometry = DiskGeometry; + + RfsdSb = RfsdLoadSuper(Vcb, FALSE); + + if (RfsdSb) { + if ( SuperblockContainsMagicKey(RfsdSb) ) { + RfsdPrint((DBG_INFO, "Volume of ReiserFS rfsd file system is found.\n")); + Status = STATUS_SUCCESS; + } else { + Status = STATUS_UNRECOGNIZED_VOLUME; + } + } + + if (!NT_SUCCESS(Status)) { + __leave; + } + + Vcb->BlockSize = RfsdSb->s_blocksize; // NOTE: FFS also does this here, since LoadGroup is not called in the non-ext2 drivers + Vcb->GroupDesc = NULL; // NOTE: GroupDesc is not used for ReiserFS. Setting it to NULL will keep other code from barfing. + // Vcb->SectorBits = RFSDLog(SECTOR_SIZE); // NOTE: SectorBits are unused for ReiserFS + + Status = RfsdInitializeVcb(IrpContext, Vcb, RfsdSb, TargetDeviceObject, + VolumeDeviceObject, IoStackLocation->Parameters.MountVolume.Vpb); + + if (NT_SUCCESS(Status)) { + if (RfsdIsMediaWriteProtected(IrpContext, TargetDeviceObject)) { + SetFlag(Vcb->Flags, VCB_WRITE_PROTECTED); + } else { + ClearFlag(Vcb->Flags, VCB_WRITE_PROTECTED); + } + + SetFlag(Vcb->Flags, VCB_MOUNTED); + + RfsdInsertVcb(Vcb); + + ClearFlag(VolumeDeviceObject->Flags, DO_DEVICE_INITIALIZING); + } + + } __finally { + + if (GlobalDataResourceAcquired) { + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() ); + } + + if (!NT_SUCCESS(Status)) { + + if (RfsdSb) { + ExFreePool(RfsdSb); + } + + if (VolumeDeviceObject) { + IoDeleteDevice(VolumeDeviceObject); + } + } + + if (!IrpContext->ExceptionInProgress) { + if (NT_SUCCESS(Status)) { + ClearFlag(VolumeDeviceObject->Flags, DO_DEVICE_INITIALIZING); + } + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +NTSTATUS +RfsdVerifyVolume (IN PRFSD_IRP_CONTEXT IrpContext) +{ + + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_SUPER_BLOCK rfsd_sb = NULL; + PRFSD_VCB Vcb; + BOOLEAN VcbResourceAcquired = FALSE; + BOOLEAN GlobalResourceAcquired = FALSE; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + ULONG ChangeCount; + ULONG dwReturn; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->Resource, + TRUE ); + + GlobalResourceAcquired = TRUE; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + TRUE ); + + VcbResourceAcquired = TRUE; + + if (!FlagOn(Vcb->TargetDeviceObject->Flags, DO_VERIFY_VOLUME)) { + Status = STATUS_SUCCESS; + __leave; + } + + if (!IsMounted(Vcb)) { + Status = STATUS_WRONG_VOLUME; + __leave; + } + + dwReturn = sizeof(ULONG); + Status = RfsdDiskIoControl( + Vcb->TargetDeviceObject, + IOCTL_DISK_CHECK_VERIFY, + NULL, + 0, + &ChangeCount, + &dwReturn ); + + if (ChangeCount != Vcb->ChangeCount) { + Status = STATUS_WRONG_VOLUME; + __leave; + } + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + rfsd_sb = RfsdLoadSuper(Vcb, TRUE); + + // FUTURE: use the volume name and uuid from the extended superblock to make this happen. + // NOTE: The magic check will have to use the same thing as mount did! + if ((rfsd_sb != NULL) /*&& (rfsd_sb->s_magic == RFSD_SUPER_MAGIC) && + (memcmp(rfsd_sb->s_uuid, SUPER_BLOCK->s_uuid, 16) == 0) && + (memcmp(rfsd_sb->s_volume_name, SUPER_BLOCK->s_volume_name, 16) ==0)*/) { + ClearFlag(Vcb->TargetDeviceObject->Flags, DO_VERIFY_VOLUME); + + if (RfsdIsMediaWriteProtected(IrpContext, Vcb->TargetDeviceObject)) { + SetFlag(Vcb->Flags, VCB_WRITE_PROTECTED); + } else { + ClearFlag(Vcb->Flags, VCB_WRITE_PROTECTED); + } + + RfsdPrint((DBG_INFO, "RfsdVerifyVolume: Volume verify succeeded.\n")); + + Status = STATUS_SUCCESS; + } else { + Status = STATUS_WRONG_VOLUME; + + RfsdPurgeVolume(Vcb, FALSE); + + SetFlag(Vcb->Flags, VCB_DISMOUNT_PENDING); + + ClearFlag(Vcb->TargetDeviceObject->Flags, DO_VERIFY_VOLUME); + + RfsdPrint((DBG_INFO, "RfsdVerifyVolume: Volume verify failed.\n")); + } + + } __finally { + + if (rfsd_sb) + ExFreePool(rfsd_sb); + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() + ); + } + + if (GlobalResourceAcquired) { + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +NTSTATUS +RfsdIsVolumeMounted (IN PRFSD_IRP_CONTEXT IrpContext) +{ + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + return RfsdVerifyVolume(IrpContext); +} + + +NTSTATUS +RfsdDismountVolume (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_VCB Vcb; + BOOLEAN VcbResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + TRUE ); + + VcbResourceAcquired = TRUE; + + if ( IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) { + Status = STATUS_VOLUME_DISMOUNTED; + __leave; + } + +/* + if (!FlagOn(Vcb->Flags, VCB_VOLUME_LOCKED)) { + RfsdPrint((DBG_ERROR, "RfsdDismount: Volume is not locked.\n")); + + Status = STATUS_ACCESS_DENIED; + + __leave; + } +*/ +#if DISABLED + RfsdFlushFiles(Vcb, FALSE); + + RfsdFlushVolume(Vcb, FALSE); + + RfsdPurgeVolume(Vcb, TRUE); +#endif + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + + VcbResourceAcquired = FALSE; + + RfsdCheckDismount(IrpContext, Vcb, TRUE); + + RfsdPrint((DBG_INFO, "RfsdDismount: Volume dismount pending.\n")); + + Status = STATUS_SUCCESS; + + } __finally { + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() + ); + } + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + +BOOLEAN +RfsdCheckDismount ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN BOOLEAN bForce ) +{ + KIRQL Irql; + PVPB Vpb = Vcb->Vpb; + BOOLEAN bDeleted = FALSE; + ULONG UnCleanCount = 0; + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->Resource, TRUE ); + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + if ((IrpContext->MajorFunction == IRP_MJ_CREATE) && + (IrpContext->RealDevice == Vcb->RealDevice)) { + UnCleanCount = 3; + } else { + UnCleanCount = 2; + } + + IoAcquireVpbSpinLock (&Irql); + + if ((Vpb->ReferenceCount == UnCleanCount) || bForce) { + + if ((Vpb->ReferenceCount != UnCleanCount) && bForce) { + KdPrint(("RfsdCheckDismount: force dismount ...\n")); + } + + ClearFlag( Vpb->Flags, VPB_MOUNTED ); + ClearFlag( Vpb->Flags, VPB_LOCKED ); + + if ((Vcb->RealDevice != Vpb->RealDevice) && + (Vcb->RealDevice->Vpb == Vpb)) { + SetFlag( Vcb->RealDevice->Flags, DO_DEVICE_INITIALIZING ); + SetFlag( Vpb->Flags, VPB_PERSISTENT ); + } + + RfsdRemoveVcb(Vcb); + + ClearFlag(Vpb->Flags, VPB_MOUNTED); + SetFlag(Vcb->Flags, VCB_DISMOUNT_PENDING); + + Vpb->DeviceObject = NULL; + + bDeleted = TRUE; + } + + IoReleaseVpbSpinLock(Irql); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() ); + + if (bDeleted) { + KdPrint(("RfsdCheckDismount: now free the vcb ...\n")); + RfsdFreeVcb(Vcb); + } + + return bDeleted; +} + + +NTSTATUS +RfsdPurgeVolume (IN PRFSD_VCB Vcb, + IN BOOLEAN FlushBeforePurge ) +{ + PRFSD_FCB Fcb; + LIST_ENTRY FcbList; + PLIST_ENTRY ListEntry; + PFCB_LIST_ENTRY FcbListEntry; + + __try { + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + if ( IsFlagOn(Vcb->Flags, VCB_READ_ONLY) || + IsFlagOn(Vcb->Flags, VCB_WRITE_PROTECTED)) { + FlushBeforePurge = FALSE; + } + + FcbListEntry= NULL; + InitializeListHead(&FcbList); + + for (ListEntry = Vcb->FcbList.Flink; + ListEntry != &Vcb->FcbList; + ListEntry = ListEntry->Flink ) { + + Fcb = CONTAINING_RECORD(ListEntry, RFSD_FCB, Next); + + Fcb->ReferenceCount++; + + RfsdPrint((DBG_INFO, "RfsdPurgeVolume: %s refercount=%xh\n", Fcb->AnsiFileName.Buffer, Fcb->ReferenceCount)); + + FcbListEntry = ExAllocatePool(PagedPool, sizeof(FCB_LIST_ENTRY)); + + if (FcbListEntry) { + + FcbListEntry->Fcb = Fcb; + + InsertTailList(&FcbList, &FcbListEntry->Next); + } else { + RfsdPrint((DBG_ERROR, "RfsdPurgeVolume: Error allocating FcbListEntry ...\n")); + } + } + + while (!IsListEmpty(&FcbList)) { + + ListEntry = RemoveHeadList(&FcbList); + + FcbListEntry = CONTAINING_RECORD(ListEntry, FCB_LIST_ENTRY, Next); + + Fcb = FcbListEntry->Fcb; + + if (ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + TRUE )) { + + RfsdPurgeFile(Fcb, FlushBeforePurge); + + if (!Fcb->OpenHandleCount && Fcb->ReferenceCount == 1) { + RemoveEntryList(&Fcb->Next); + RfsdFreeFcb(Fcb); + } else { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread()); + } + } + + ExFreePool(FcbListEntry); + } + + if (FlushBeforePurge) { + ExAcquireSharedStarveExclusive(&Vcb->PagingIoResource, TRUE); + ExReleaseResource(&Vcb->PagingIoResource); + + CcFlushCache(&Vcb->SectionObject, NULL, 0, NULL); + } + + if (Vcb->SectionObject.ImageSectionObject) { + MmFlushImageSection(&Vcb->SectionObject, MmFlushForWrite); + } + + if (Vcb->SectionObject.DataSectionObject) { + CcPurgeCacheSection(&Vcb->SectionObject, NULL, 0, FALSE); + } + + RfsdPrint((DBG_INFO, "RfsdPurgeVolume: Volume flushed and purged.\n")); + + } __finally { + // Nothing + } + + return STATUS_SUCCESS; +} + +NTSTATUS +RfsdPurgeFile ( IN PRFSD_FCB Fcb, + IN BOOLEAN FlushBeforePurge ) +{ + IO_STATUS_BLOCK IoStatus; + + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + + if( !IsFlagOn(Fcb->Vcb->Flags, VCB_READ_ONLY) && FlushBeforePurge && + !IsFlagOn(Fcb->Vcb->Flags, VCB_WRITE_PROTECTED)) { + + RfsdPrint((DBG_INFO, "RfsdPurgeFile: CcFlushCache on %s.\n", + Fcb->AnsiFileName.Buffer)); + + ExAcquireSharedStarveExclusive(&Fcb->PagingIoResource, TRUE); + ExReleaseResource(&Fcb->PagingIoResource); + + CcFlushCache(&Fcb->SectionObject, NULL, 0, &IoStatus); + + ClearFlag(Fcb->Flags, FCB_FILE_MODIFIED); + } + + if (Fcb->SectionObject.ImageSectionObject) { + + RfsdPrint((DBG_INFO, "RfsdPurgeFile: MmFlushImageSection on %s.\n", + Fcb->AnsiFileName.Buffer)); + + MmFlushImageSection(&Fcb->SectionObject, MmFlushForWrite); + } + + if (Fcb->SectionObject.DataSectionObject) { + + RfsdPrint((DBG_INFO, "RfsdPurgeFile: CcPurgeCacheSection on %s.\n", + Fcb->AnsiFileName.Buffer)); + + CcPurgeCacheSection(&Fcb->SectionObject, NULL, 0, FALSE); + } + + return STATUS_SUCCESS; +} + + +NTSTATUS +RfsdFileSystemControl (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + switch (IrpContext->MinorFunction) { + + case IRP_MN_USER_FS_REQUEST: + Status = RfsdUserFsRequest(IrpContext); + break; + + case IRP_MN_MOUNT_VOLUME: + Status = RfsdMountVolume(IrpContext); + break; + + case IRP_MN_VERIFY_VOLUME: + Status = RfsdVerifyVolume(IrpContext); + break; + + default: + + RfsdPrint((DBG_ERROR, "RfsdFilsSystemControl: Invalid Device Request.\n")); + Status = STATUS_INVALID_DEVICE_REQUEST; + RfsdCompleteIrpContext(IrpContext, Status); + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/fsparameters.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/fsparameter…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/fsparameters.h (added) +++ vendor/rfsd/current/RFSD/RFSD/fsparameters.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,46 @@ +#ifndef __FS_PARAMETERS_H__ +#define __FS_PARAMETERS_H__ + +#include "reiserfs.h" // Simplified ReiserFS header +//#include <linux/reiserfs_fs.h> // Full ReiserFS header + + +typedef struct reiserfs_super_block_v1 RFSD_SUPER_BLOCK, *PRFSD_SUPER_BLOCK; +typedef struct stat_data RFSD_INODE, *PRFSD_INODE; + +#define RFSD_CALLBACK(name) NTSTATUS(* name )(ULONG BlockNumber, PVOID pContext) + + +typedef struct block_head RFSD_BLOCK_HEAD, *PRFSD_BLOCK_HEAD; // [mark] +typedef struct reiserfs_de_head RFSD_DENTRY_HEAD, *PRFSD_DENTRY_HEAD; // [mark] +typedef struct item_head RFSD_ITEM_HEAD, *PRFSD_ITEM_HEAD; // [mark] +typedef struct reiserfs_key RFSD_KEY_ON_DISK, *PRFSD_KEY_ON_DISK; +typedef struct reiserfs_cpu_key RFSD_KEY_IN_MEMORY, *PRFSD_KEY_IN_MEMORY; +typedef struct disk_child RFSD_DISK_NODE_REF, *PRFSD_DISK_NODE_REF; + +#define RFSD_NAME_LEN 255 /// Default length of buffers for filenames (although filenames may be longer) + +#define SUPER_BLOCK_OFFSET REISERFS_DISK_OFFSET_IN_BYTES +#define SUPER_BLOCK_SIZE sizeof(RFSD_SUPER_BLOCK) + +#define RFSD_ROOT_PARENT_ID 1 /// Part of the key for the root node +#define RFSD_ROOT_OBJECT_ID 2 /// Part of the key for the root node +#define RFSD_IS_ROOT_KEY(x) (x.k_dir_id == RFSD_ROOT_PARENT_ID && x.k_objectid == RFSD_ROOT_OBJECT_ID) +#define RFSD_IS_PTR_TO_ROOT_KEY(x) (x->k_dir_id == RFSD_ROOT_PARENT_ID && x->k_objectid == RFSD_ROOT_OBJECT_ID) + +typedef short RFSD_KEY_COMPARISON; +typedef __u16 RFSD_KEY_VERSION; + +#define RFSD_KEY_VERSION_1 0 +#define RFSD_KEY_VERSION_2 1 +#define RFSD_KEY_VERSION_UNKNOWN 7 + +// Results of a key comparison (as returned by CompareKeys) +#define RFSD_KEYS_MATCH 0 +#define RFSD_KEY_SMALLER -1 +#define RFSD_KEY_LARGER 1 + + +#define RFSD_LEAF_BLOCK_LEVEL 1 + +#endif Added: vendor/rfsd/current/RFSD/RFSD/init.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/init.c?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/init.c (added) +++ vendor/rfsd/current/RFSD/RFSD/init.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,448 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: init.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +PRFSD_GLOBAL RfsdGlobal = NULL; + +/* DEFINITIONS ***********************************************************/ + +NTSTATUS +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath ); + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(INIT, RfsdQueryParameters) +#pragma alloc_text(INIT, DriverEntry) +#if RFSD_UNLOAD +#pragma alloc_text(PAGE, DriverUnload) +#endif +#endif + +/* FUNCTIONS ***************************************************************/ + +#if RFSD_UNLOAD + +/* + * FUNCTION: Called by the system to unload the driver + * ARGUMENTS: + * DriverObject = object describing this driver + * RETURNS: None + */ + +VOID +DriverUnload (IN PDRIVER_OBJECT DriverObject) +{ + UNICODE_STRING DosDeviceName; + + RfsdPrint((DBG_FUNC, "RfsdFsd: Unloading routine.\n")); + + RtlInitUnicodeString(&DosDeviceName, DOS_DEVICE_NAME); + IoDeleteSymbolicLink(&DosDeviceName); + + ExDeleteResourceLite(&RfsdGlobal->LAResource); + ExDeleteResourceLite(&RfsdGlobal->CountResource); + ExDeleteResourceLite(&RfsdGlobal->Resource); + + ExDeletePagedLookasideList(&(RfsdGlobal->RfsdMcbLookasideList)); + ExDeleteNPagedLookasideList(&(RfsdGlobal->RfsdCcbLookasideList)); + ExDeleteNPagedLookasideList(&(RfsdGlobal->RfsdFcbLookasideList)); + ExDeleteNPagedLookasideList(&(RfsdGlobal->RfsdIrpContextLookasideList)); + + RfsdUnloadAllNls(); + + IoDeleteDevice(RfsdGlobal->DeviceObject); +} + +#endif + +BOOLEAN +RfsdQueryParameters( IN PUNICODE_STRING RegistryPath) +{ + NTSTATUS Status; + UNICODE_STRING ParameterPath; + RTL_QUERY_REGISTRY_TABLE QueryTable[2]; + + ULONG WritingSupport; + ULONG CheckingBitmap; + ULONG Ext3ForceWriting; + + UNICODE_STRING CodePage; + ANSI_STRING AnsiName; + + ParameterPath.Length = 0; + + ParameterPath.MaximumLength = + RegistryPath->Length + sizeof(PARAMETERS_KEY) + sizeof(WCHAR); + + ParameterPath.Buffer = + (PWSTR) ExAllocatePool(PagedPool, ParameterPath.MaximumLength); + + if (!ParameterPath.Buffer) { + return FALSE; + } + + WritingSupport = 0; + CheckingBitmap = 0; + Ext3ForceWriting = 0; + + RtlCopyUnicodeString(&ParameterPath, RegistryPath); + + RtlAppendUnicodeToString(&ParameterPath, PARAMETERS_KEY); + + RtlZeroMemory(&QueryTable[0], sizeof(RTL_QUERY_REGISTRY_TABLE) * 2); + + QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[0].Name = WRITING_SUPPORT; + QueryTable[0].EntryContext = &WritingSupport; + + Status = RtlQueryRegistryValues( + RTL_REGISTRY_ABSOLUTE, + ParameterPath.Buffer, + &QueryTable[0], + NULL, + NULL ); + + RfsdPrint((DBG_USER, "RfsdQueryParameters: WritingSupport=%xh\n", WritingSupport)); + + RtlZeroMemory(&QueryTable[0], sizeof(RTL_QUERY_REGISTRY_TABLE) * 2); + + QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[0].Name = CHECKING_BITMAP; + QueryTable[0].EntryContext = &CheckingBitmap; + + Status = RtlQueryRegistryValues( + RTL_REGISTRY_ABSOLUTE, + ParameterPath.Buffer, + &QueryTable[0], + NULL, + NULL ); + + RfsdPrint((DBG_USER, "RfsdQueryParameters: CheckingBitmap=%xh\n", CheckingBitmap)); + + RtlZeroMemory(&QueryTable[0], sizeof(RTL_QUERY_REGISTRY_TABLE) * 2); + + QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[0].Name = EXT3_FORCEWRITING; + QueryTable[0].EntryContext = &Ext3ForceWriting; + + Status = RtlQueryRegistryValues( + RTL_REGISTRY_ABSOLUTE, + ParameterPath.Buffer, + &QueryTable[0], + NULL, + NULL ); + + RfsdPrint((DBG_USER, "RfsdQueryParameters: Ext3ForceWriting=%xh\n", Ext3ForceWriting)); + + RtlZeroMemory(&QueryTable[0], sizeof(RTL_QUERY_REGISTRY_TABLE) * 2); + + QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[0].Name = EXT3_CODEPAGE; + QueryTable[0].EntryContext = &(CodePage); + CodePage.MaximumLength = CODEPAGE_MAXLEN * sizeof(WCHAR); + CodePage.Length = 0; + CodePage.Buffer = &(RfsdGlobal->CodePage.UniName[0]); + + Status = RtlQueryRegistryValues( + RTL_REGISTRY_ABSOLUTE, + ParameterPath.Buffer, + &QueryTable[0], + NULL, + NULL ); + + if (NT_SUCCESS(Status)) { + RfsdPrint((DBG_USER, "RfsdQueryParameters: RfsdCodePage=%S\n", CodePage.Buffer)); + AnsiName.MaximumLength = CODEPAGE_MAXLEN; + AnsiName.Length = 0; + AnsiName.Buffer = &(RfsdGlobal->CodePage.AnsiName[0]); + + Status = RtlUnicodeStringToAnsiString( + &AnsiName, + &CodePage, + FALSE); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_USER, "RfsdQueryParameters: Wrong CodePage ...\n")); + RtlCopyMemory(&(RfsdGlobal->CodePage.AnsiName[0]),"default\0", 8); + } + + } else { + RfsdPrint((DBG_USER, "RfsdQueryParameters: CodePage not specified.\n")); + RtlCopyMemory(&(RfsdGlobal->CodePage.AnsiName[0]),"default\0", 8); + } + + { + if (WritingSupport) { + SetFlag(RfsdGlobal->Flags, RFSD_SUPPORT_WRITING); + } else { + ClearFlag(RfsdGlobal->Flags, RFSD_SUPPORT_WRITING); + } + + if (CheckingBitmap) { + SetFlag(RfsdGlobal->Flags, RFSD_CHECKING_BITMAP); + } else { + ClearFlag(RfsdGlobal->Flags, RFSD_CHECKING_BITMAP); + } + + if (Ext3ForceWriting) { + DbgPrint("RfsdFsd -- Warning: Ext3ForceWriring enabled !!!\n"); + + SetFlag(RfsdGlobal->Flags, EXT3_FORCE_WRITING); + SetFlag(RfsdGlobal->Flags, RFSD_SUPPORT_WRITING); + } else { + ClearFlag(RfsdGlobal->Flags, EXT3_FORCE_WRITING); + } + } + + ExFreePool(ParameterPath.Buffer); + + return TRUE; +} + + +#define NLS_OEM_LEAD_BYTE_INFO (*NlsOemLeadByteInfo) + +#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \ + (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \ + (NLS_MB_CODE_PAGE_TAG && \ + (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \ +) + + +/* + * NAME: DriverEntry + * FUNCTION: Called by the system to initalize the driver + * + * ARGUMENTS: + * DriverObject = object describing this driver + * RegistryPath = path to our configuration entries + * RETURNS: Success or failure + */ +NTSTATUS +DriverEntry ( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath + ) +{ + PDEVICE_OBJECT DeviceObject; + PFAST_IO_DISPATCH FastIoDispatch; + PCACHE_MANAGER_CALLBACKS CacheManagerCallbacks; + PRFSDFS_EXT DeviceExt; + + UNICODE_STRING DeviceName; + NTSTATUS Status; + +#if RFSD_UNLOAD + UNICODE_STRING DosDeviceName; +#endif + + DbgPrint( + "RfsdFsd --" + " Version " + RFSDFSD_VERSION +#if RFSD_READ_ONLY + " (ReadOnly)" +#endif +#if DBG + " Checked" +#else + " Free" +#endif + " - Built at " + __DATE__" " + __TIME__".\n"); + + RfsdPrint((DBG_FUNC, "Rfsd DriverEntry ...\n")); + + RtlInitUnicodeString(&DeviceName, DEVICE_NAME); + + Status = IoCreateDevice( + DriverObject, + sizeof(RFSDFS_EXT), + &DeviceName, + FILE_DEVICE_DISK_FILE_SYSTEM, + 0, + FALSE, + &DeviceObject ); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, "IoCreateDevice fs object error.\n")); + return Status; + } + + DeviceExt = (PRFSDFS_EXT) DeviceObject->DeviceExtension; + RtlZeroMemory(DeviceExt, sizeof(RFSDFS_EXT)); + + RfsdGlobal = &(DeviceExt->RfsdGlobal); + + RfsdGlobal->Identifier.Type = RFSDFGD; + RfsdGlobal->Identifier.Size = sizeof(RFSD_GLOBAL); + RfsdGlobal->DeviceObject = DeviceObject; + RfsdGlobal->DriverObject = DriverObject; + + RfsdQueryParameters(RegistryPath); + + DriverObject->MajorFunction[IRP_MJ_CREATE] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_READ] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_WRITE] = RfsdBuildRequest; + + DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = RfsdBuildRequest; + + DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = RfsdBuildRequest; + + DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_SET_VOLUME_INFORMATION] = RfsdBuildRequest; + + DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = RfsdBuildRequest; + DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = RfsdBuildRequest; + + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = RfsdBuildRequest; + +#if (_WIN32_WINNT >= 0x0500) + DriverObject->MajorFunction[IRP_MJ_PNP] = RfsdBuildRequest; +#endif //(_WIN32_WINNT >= 0x0500) + +#if RFSD_UNLOAD + DriverObject->DriverUnload = DriverUnload; +#else + DriverObject->DriverUnload = NULL; +#endif + + // + // Initialize the fast I/O entry points + // + FastIoDispatch = &(RfsdGlobal->FastIoDispatch); + + FastIoDispatch->SizeOfFastIoDispatch = sizeof(FAST_IO_DISPATCH); + FastIoDispatch->FastIoCheckIfPossible = RfsdFastIoCheckIfPossible; +#if DBG + FastIoDispatch->FastIoRead = RfsdFastIoRead; + FastIoDispatch->FastIoWrite = RfsdFastIoWrite; +#else + FastIoDispatch->FastIoRead = FsRtlCopyRead; + FastIoDispatch->FastIoWrite = FsRtlCopyWrite; +#endif + FastIoDispatch->FastIoQueryBasicInfo = RfsdFastIoQueryBasicInfo; + FastIoDispatch->FastIoQueryStandardInfo = RfsdFastIoQueryStandardInfo; + FastIoDispatch->FastIoLock = RfsdFastIoLock; + FastIoDispatch->FastIoUnlockSingle = RfsdFastIoUnlockSingle; + FastIoDispatch->FastIoUnlockAll = RfsdFastIoUnlockAll; + FastIoDispatch->FastIoUnlockAllByKey = RfsdFastIoUnlockAllByKey; + FastIoDispatch->FastIoQueryNetworkOpenInfo = RfsdFastIoQueryNetworkOpenInfo; + + DriverObject->FastIoDispatch = FastIoDispatch; + + switch ( MmQuerySystemSize() ) { + + case MmSmallSystem: + + RfsdGlobal->MaxDepth = 16; + break; + + case MmMediumSystem: + + RfsdGlobal->MaxDepth = 64; + break; + + case MmLargeSystem: + + RfsdGlobal->MaxDepth = 256; + break; + } + + // + // Initialize the Cache Manager callbacks + // + CacheManagerCallbacks = &(RfsdGlobal->CacheManagerCallbacks); + CacheManagerCallbacks->AcquireForLazyWrite = RfsdAcquireForLazyWrite; + CacheManagerCallbacks->ReleaseFromLazyWrite = RfsdReleaseFromLazyWrite; + CacheManagerCallbacks->AcquireForReadAhead = RfsdAcquireForReadAhead; + CacheManagerCallbacks->ReleaseFromReadAhead = RfsdReleaseFromReadAhead; + + RfsdGlobal->CacheManagerNoOpCallbacks.AcquireForLazyWrite = RfsdNoOpAcquire; + RfsdGlobal->CacheManagerNoOpCallbacks.ReleaseFromLazyWrite = RfsdNoOpRelease; + RfsdGlobal->CacheManagerNoOpCallbacks.AcquireForReadAhead = RfsdNoOpAcquire; + RfsdGlobal->CacheManagerNoOpCallbacks.ReleaseFromReadAhead = RfsdNoOpRelease; + + // + // Initialize the global data + // + + InitializeListHead(&(RfsdGlobal->VcbList)); + ExInitializeResourceLite(&(RfsdGlobal->Resource)); + ExInitializeResourceLite(&(RfsdGlobal->CountResource)); + ExInitializeResourceLite(&(RfsdGlobal->LAResource)); + + ExInitializeNPagedLookasideList( &(RfsdGlobal->RfsdIrpContextLookasideList), + NULL, + NULL, + 0, + sizeof(RFSD_IRP_CONTEXT), + '2TXE', + 0 ); + + ExInitializeNPagedLookasideList( &(RfsdGlobal->RfsdFcbLookasideList), + NULL, + NULL, + 0, + sizeof(RFSD_FCB), + '2TXE', + 0 ); + + ExInitializeNPagedLookasideList( &(RfsdGlobal->RfsdCcbLookasideList), + NULL, + NULL, + 0, + sizeof(RFSD_CCB), + '2TXE', + 0 ); + + ExInitializePagedLookasideList( &(RfsdGlobal->RfsdMcbLookasideList), + NULL, + NULL, + 0, + sizeof(RFSD_MCB), + '2TXE', + 0 ); + +#if RFSD_UNLOAD + RtlInitUnicodeString(&DosDeviceName, DOS_DEVICE_NAME); + IoCreateSymbolicLink(&DosDeviceName, &DeviceName); +#endif + +#if DBG + ProcessNameOffset = RfsdGetProcessNameOffset(); +#endif + + RfsdLoadAllNls(); + + PAGE_TABLE = load_nls(RfsdGlobal->CodePage.AnsiName); + + if (!PAGE_TABLE) { + DbgPrint( "RfsdFsd: User specified codepage (%s) was not found.\n" + " Defulat system OEM codepage will be adopted.\n", + RfsdGlobal->CodePage.AnsiName ); + //DbgBreak(); + } + + IoRegisterFileSystem(DeviceObject); + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/CVS/E…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,16 @@ +/config.h/1.1/Tue Jul 26 21:19:42 2005// +/errno.h/1.1/Tue Jul 26 21:19:42 2005// +/kernel.h/1.1/Tue Jul 26 21:19:42 2005// +/module.h/1.1/Tue Jul 26 21:19:42 2005// +/nls.h/1.1/Tue Jul 26 21:19:42 2005// +/reiserfs_acl.h/1.1/Tue Jul 26 21:19:42 2005// +/reiserfs_fs.h/1.1/Tue Jul 26 21:19:42 2005// +/reiserfs_fs_i.h/1.1/Tue Jul 26 21:19:42 2005// +/reiserfs_fs_sb.h/1.1/Tue Jul 26 21:19:42 2005// +/reiserfs_xattr.h/1.1/Tue Jul 26 21:19:42 2005// +/slab.h/1.1/Tue Jul 26 21:19:42 2005// +/spinlock.h/1.1/Tue Jul 26 21:19:42 2005// +/string.h/1.1/Tue Jul 26 21:19:42 2005// +/types.h/1.1/Tue Jul 26 21:19:42 2005// +/version.h/1.1/Tue Jul 26 21:19:42 2005// +D Added: vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/CVS/E…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Extra (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,15 @@ +/config.h////*/// +/errno.h////*/// +/kernel.h////*/// +/module.h////*/// +/nls.h////*/// +/reiserfs_acl.h////*/// +/reiserfs_fs.h////*/// +/reiserfs_fs_i.h////*/// +/reiserfs_fs_sb.h////*/// +/reiserfs_xattr.h////*/// +/slab.h////*/// +/spinlock.h////*/// +/string.h////*/// +/types.h////*/// +/version.h////*/// Added: vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/CVS/E…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/CVS/E…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/CVS/R…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/CVS/Repository (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/RFSD/RFSD/linux Added: vendor/rfsd/current/RFSD/RFSD/linux/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/CVS/R…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/CVS/Root (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/RFSD/RFSD/linux/config.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/confi…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/errno.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/errno…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/errno.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/errno.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,138 @@ +#ifndef _I386_ERRNO_H +#define _I386_ERRNO_H + +#define EPERM 1 /* Operation not permitted */ +#define ENOENT 2 /* No such file or directory */ +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted system call */ +#define EIO 5 /* I/O error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file number */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Try again */ +#define ENOMEM 12 /* Out of memory */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +#define ENOTBLK 15 /* Block device required */ +#define EBUSY 16 /* Device or resource busy */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Cross-device link */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* File table overflow */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Not a typewriter */ +#define ETXTBSY 26 /* Text file busy */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Illegal seek */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Math argument out of domain of func */ +#define ERANGE 34 /* Math result not representable */ +#undef EDEADLK +#define EDEADLK 35 /* Resource deadlock would occur */ +#undef ENAMETOOLONG +#define ENAMETOOLONG 36 /* File name too long */ +#undef ENOLCK +#define ENOLCK 37 /* No record locks available */ +#undef ENOSYS +#define ENOSYS 38 /* Function not implemented */ +#undef ENOTEMPTY +#define ENOTEMPTY 39 /* Directory not empty */ +#define ELOOP 40 /* Too many symbolic links encountered */ +#define EWOULDBLOCK EAGAIN /* Operation would block */ +#define ENOMSG 42 /* No message of desired type */ +#define EIDRM 43 /* Identifier removed */ +#define ECHRNG 44 /* Channel number out of range */ +#define EL2NSYNC 45 /* Level 2 not synchronized */ +#define EL3HLT 46 /* Level 3 halted */ +#define EL3RST 47 /* Level 3 reset */ +#define ELNRNG 48 /* Link number out of range */ +#define EUNATCH 49 /* Protocol driver not attached */ +#define ENOCSI 50 /* No CSI structure available */ +#define EL2HLT 51 /* Level 2 halted */ +#define EBADE 52 /* Invalid exchange */ +#define EBADR 53 /* Invalid request descriptor */ +#define EXFULL 54 /* Exchange full */ +#define ENOANO 55 /* No anode */ +#define EBADRQC 56 /* Invalid request code */ +#define EBADSLT 57 /* Invalid slot */ + +#define EDEADLOCK EDEADLK + +#define EBFONT 59 /* Bad font file format */ +#define ENOSTR 60 /* Device not a stream */ +#define ENODATA 61 /* No data available */ +#define ETIME 62 /* Timer expired */ +#define ENOSR 63 /* Out of streams resources */ +#define ENONET 64 /* Machine is not on the network */ +#define ENOPKG 65 /* Package not installed */ +#define EREMOTE 66 /* Object is remote */ +#define ENOLINK 67 /* Link has been severed */ +#define EADV 68 /* Advertise error */ +#define ESRMNT 69 /* Srmount error */ +#define ECOMM 70 /* Communication error on send */ +#define EPROTO 71 /* Protocol error */ +#define EMULTIHOP 72 /* Multihop attempted */ +#define EDOTDOT 73 /* RFS specific error */ +#define EBADMSG 74 /* Not a data message */ +#define EOVERFLOW 75 /* Value too large for defined data type */ +#define ENOTUNIQ 76 /* Name not unique on network */ +#define EBADFD 77 /* File descriptor in bad state */ +#define EREMCHG 78 /* Remote address changed */ +#define ELIBACC 79 /* Can not access a needed shared library */ +#define ELIBBAD 80 /* Accessing a corrupted shared library */ +#define ELIBSCN 81 /* .lib section in a.out corrupted */ +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ +#define ELIBEXEC 83 /* Cannot exec a shared library directly */ +#undef EILSEQ +#define EILSEQ 84 /* Illegal byte sequence */ +#define ERESTART 85 /* Interrupted system call should be restarted */ +#define ESTRPIPE 86 /* Streams pipe error */ +#define EUSERS 87 /* Too many users */ +#define ENOTSOCK 88 /* Socket operation on non-socket */ +#define EDESTADDRREQ 89 /* Destination address required */ +#define EMSGSIZE 90 /* Message too long */ +#define EPROTOTYPE 91 /* Protocol wrong type for socket */ +#define ENOPROTOOPT 92 /* Protocol not available */ +#define EPROTONOSUPPORT 93 /* Protocol not supported */ +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ +#define EPFNOSUPPORT 96 /* Protocol family not supported */ +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ +#define EADDRINUSE 98 /* Address already in use */ +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ +#define ENETDOWN 100 /* Network is down */ +#define ENETUNREACH 101 /* Network is unreachable */ +#define ENETRESET 102 /* Network dropped connection because of reset */ +#define ECONNABORTED 103 /* Software caused connection abort */ +#define ECONNRESET 104 /* Connection reset by peer */ +#define ENOBUFS 105 /* No buffer space available */ +#define EISCONN 106 /* Transport endpoint is already connected */ +#define ENOTCONN 107 /* Transport endpoint is not connected */ +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ +#define ETOOMANYREFS 109 /* Too many references: cannot splice */ +#define ETIMEDOUT 110 /* Connection timed out */ +#define ECONNREFUSED 111 /* Connection refused */ +#define EHOSTDOWN 112 /* Host is down */ +#define EHOSTUNREACH 113 /* No route to host */ +#define EALREADY 114 /* Operation already in progress */ +#define EINPROGRESS 115 /* Operation now in progress */ +#define ESTALE 116 /* Stale NFS file handle */ +#define EUCLEAN 117 /* Structure needs cleaning */ +#define ENOTNAM 118 /* Not a XENIX named type file */ +#define ENAVAIL 119 /* No XENIX semaphores available */ +#define EISNAM 120 /* Is a named type file */ +#define EREMOTEIO 121 /* Remote I/O error */ +#define EDQUOT 122 /* Quota exceeded */ + +#define ENOMEDIUM 123 /* No medium found */ +#define EMEDIUMTYPE 124 /* Wrong medium type */ + +#endif Added: vendor/rfsd/current/RFSD/RFSD/linux/kernel.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/kerne…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/module.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/modul…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/module.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/module.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,100 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: Modules.h + * PURPOSE: Header file: nls structures & linux kernel ... + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +#ifndef _RFSD_MODULE_HEADER_ +#define _RFSD_MODULE_HEADER_ + +/* INCLUDES *************************************************************/ + +#include "ntifs.h" +#include "linux/types.h" + +/* STRUCTS & S******************************************************/ + +// +// Linux modules +// + +#define __init +#define __exit + +#define try_inc_mod_count(x) TRUE +#define __MOD_DEC_USE_COUNT(x) do {} while(FALSE); +#define EXPORT_SYMBOL(x) +#define THIS_MODULE NULL + +#define module_init(X) int __init module_##X() {return X();} +#define module_exit(X) void __exit module_##X() {X();} + +#define MODULE_LICENSE(x) + +#define inline __inline + +#define DECLARE_INIT(X) extern int __init module_##X(void) +#define DECLARE_EXIT(X) extern void __exit module_##X(void) + +#define LOAD_NLS(X) do { rc = module_##X(); \ + if (rc != 0) { \ + KdBreakPoint(); \ + goto errorout; \ + } \ + } while(0) + + +#define UNLOAD_NLS(X) do { module_##X(); } while(0) + +// +// Spin locks ..... +// + +typedef struct _spinlock_t { + + KSPIN_LOCK SpinLock; + KIRQL Irql; +} spinlock_t; + +#define spin_lock_init(lock) KeInitializeSpinLock(&((lock)->SpinLock)) +#define spin_lock(lock) KeAcquireSpinLock(&((lock)->SpinLock), &((lock)->Irql)) +#define spin_unlock(lock) KeReleaseSpinLock(&((lock)->SpinLock), (lock)->Irql) + + +// +// unicode character +// + +struct nls_table { + char *charset; + int (*uni2char) (wchar_t uni, unsigned char *out, int boundlen); + int (*char2uni) ( unsigned char *rawstring, int boundlen, + wchar_t *uni); + unsigned char *charset2lower; + unsigned char *charset2upper; + struct module *owner; + struct nls_table *next; +}; + +/* this value hold the maximum octet of charset */ +#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */ + +/* nls.c */ +extern int register_nls(struct nls_table *); +extern int unregister_nls(struct nls_table *); +extern struct nls_table *load_nls(char *); +extern void unload_nls(struct nls_table *); +extern struct nls_table *load_nls_default(void); + +extern int utf8_mbtowc(wchar_t *, const __u8 *, int); +extern int utf8_mbstowcs(wchar_t *, const __u8 *, int); +extern int utf8_wctomb(__u8 *, wchar_t, int); +extern int utf8_wcstombs(__u8 *, const wchar_t *, int); + +/* FUNCTIONS DECLARATION *****************************************************/ + +#endif // _RFSD_MODULE_HEADER_ Added: vendor/rfsd/current/RFSD/RFSD/linux/nls.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/nls.h…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_acl.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/reise…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_acl.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_acl.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,89 @@ +#include <linux/init.h> +#include <linux/posix_acl.h> +#include <linux/xattr_acl.h> + +#define REISERFS_ACL_VERSION 0x0001 + +typedef struct { + __u16 e_tag; + __u16 e_perm; + __u32 e_id; +} reiserfs_acl_entry; + +typedef struct { + __u16 e_tag; + __u16 e_perm; +} reiserfs_acl_entry_short; + +typedef struct { + __u32 a_version; +} reiserfs_acl_header; + +static inline size_t reiserfs_acl_size(int count) +{ + if (count <= 4) { + return sizeof(reiserfs_acl_header) + + count * sizeof(reiserfs_acl_entry_short); + } else { + return sizeof(reiserfs_acl_header) + + 4 * sizeof(reiserfs_acl_entry_short) + + (count - 4) * sizeof(reiserfs_acl_entry); + } +} + +static inline int reiserfs_acl_count(size_t size) +{ + ssize_t s; + size -= sizeof(reiserfs_acl_header); + s = size - 4 * sizeof(reiserfs_acl_entry_short); + if (s < 0) { + if (size % sizeof(reiserfs_acl_entry_short)) + return -1; + return size / sizeof(reiserfs_acl_entry_short); + } else { + if (s % sizeof(reiserfs_acl_entry)) + return -1; + return s / sizeof(reiserfs_acl_entry) + 4; + } +} + + +#ifdef CONFIG_REISERFS_FS_POSIX_ACL +struct posix_acl * reiserfs_get_acl(struct inode *inode, int type); +int reiserfs_acl_chmod (struct inode *inode); +int reiserfs_inherit_default_acl (struct inode *dir, struct dentry *dentry, struct inode *inode); +int reiserfs_cache_default_acl (struct inode *dir); +extern int reiserfs_xattr_posix_acl_init (void) __init; +extern int reiserfs_xattr_posix_acl_exit (void); +extern struct reiserfs_xattr_handler posix_acl_default_handler; +extern struct reiserfs_xattr_handler posix_acl_access_handler; +#else + +#define reiserfs_get_acl NULL +#define reiserfs_cache_default_acl(inode) 0 + +static inline int +reiserfs_xattr_posix_acl_init (void) +{ + return 0; +} + +static inline int +reiserfs_xattr_posix_acl_exit (void) +{ + return 0; +} + +static inline int +reiserfs_acl_chmod (struct inode *inode) +{ + return 0; +} + +static inline int +reiserfs_inherit_default_acl (const struct inode *dir, struct dentry *dentry, struct inode *inode) +{ + return 0; +} + +#endif Added: vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/reise…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2210 @@ +/* + * Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details + */ + +#ifdef __GCC__ + #define __PACKED __PACKED +#else + #define __PACKED +#endif + + /* this file has an amazingly stupid + name, yura please fix it to be + reiserfs.h, and merge all the rest + of our .h files that are in this + directory into it. */ + + +#ifndef _LINUX_REISER_FS_H +#define _LINUX_REISER_FS_H + +#include <linux/types.h> +#ifdef __KERNEL__ +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/sched.h> +#include <linux/workqueue.h> +#include <asm/unaligned.h> +#include <linux/bitops.h> +#include <linux/proc_fs.h> +#include <linux/smp_lock.h> +#include <linux/buffer_head.h> +#include <linux/reiserfs_fs_i.h> +#include <linux/reiserfs_fs_sb.h> +#endif + +/* + * include/linux/reiser_fs.h + * + * Reiser File System constants and structures + * + */ + +/* in reading the #defines, it may help to understand that they employ + the following abbreviations: + + B = Buffer + I = Item header + H = Height within the tree (should be changed to LEV) + N = Number of the item in the node + STAT = stat data + DEH = Directory Entry Header + EC = Entry Count + E = Entry number + UL = Unsigned Long + BLKH = BLocK Header + UNFM = UNForMatted node + DC = Disk Child + P = Path + + These #defines are named by concatenating these abbreviations, + where first comes the arguments, and last comes the return value, + of the macro. + +*/ + +#define USE_INODE_GENERATION_COUNTER + +#define REISERFS_PREALLOCATE +#define DISPLACE_NEW_PACKING_LOCALITIES +#define PREALLOCATION_SIZE 9 + +/* n must be power of 2 */ +#define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u)) + +// to be ok for alpha and others we have to align structures to 8 byte +// boundary. +// FIXME: do not change 4 by anything else: there is code which relies on that +#define ROUND_UP(x) _ROUND_UP(x,8LL) + +/* debug levels. Right now, CONFIG_REISERFS_CHECK means print all debug +** messages. +*/ +#define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ + +void reiserfs_warning (struct super_block *s, const char * fmt, ...); +/* assertions handling */ + +#ifdef __GCC__ +#define CONSTF __attribute_const__ +#else +#define CONSTF +#endif + +/* + * Disk Data Structures + */ + +/***************************************************************************/ +/* SUPER BLOCK */ +/***************************************************************************/ + +/* + * Structure of super block on disk, a version of which in RAM is often accessed as REISERFS_SB(s)->s_rs + * the version in RAM is part of a larger structure containing fields never written to disk. + */ +#define UNSET_HASH 0 // read_super will guess about, what hash names + // in directories were sorted with +#define TEA_HASH 1 +#define YURA_HASH 2 +#define R5_HASH 3 +#define DEFAULT_HASH R5_HASH + + +struct journal_params { + __u32 jp_journal_1st_block; /* where does journal start from on its + * device */ + __u32 jp_journal_dev; /* journal device st_rdev */ + __u32 jp_journal_size; /* size of the journal */ + __u32 jp_journal_trans_max; /* max number of blocks in a transaction. */ + __u32 jp_journal_magic; /* random value made on fs creation (this + * was sb_journal_block_count) */ + __u32 jp_journal_max_batch; /* max number of blocks to batch into a + * trans */ + __u32 jp_journal_max_commit_age; /* in seconds, how old can an async + * commit be */ + __u32 jp_journal_max_trans_age; /* in seconds, how old can a transaction + * be */ +}; + +/* this is the super from 3.5.X, where X >= 10 */ +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct reiserfs_super_block_v1 +{ + __u32 s_block_count; /* blocks count */ + __u32 s_free_blocks; /* free blocks count */ + __u32 s_root_block; /* root block number */ + struct journal_params s_journal; + __u16 s_blocksize; /* block size */ + __u16 s_oid_maxsize; /* max size of object id array, see + * get_objectid() commentary */ + __u16 s_oid_cursize; /* current size of object id array */ + __u16 s_umount_state; /* this is set to 1 when filesystem was + * umounted, to 2 - when not */ + char s_magic[10]; /* reiserfs magic string indicates that + * file system is reiserfs: + * "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs" */ + __u16 s_fs_state; /* it is set to used by fsck to mark which + * phase of rebuilding is done */ + __u32 s_hash_function_code; /* indicate, what hash function is being use + * to sort names in a directory*/ + __u16 s_tree_height; /* height of disk tree */ + __u16 s_bmap_nr; /* amount of bitmap blocks needed to address + * each block of file system */ + __u16 s_version; /* this field is only reliable on filesystem + * with non-standard journal */ + __u16 s_reserved_for_journal; /* size in blocks of journal area on main + * device, we need to keep after + * making fs with non-standard journal */ +} __PACKED; +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +#define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1)) + +/* this is the on disk super block */ +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct reiserfs_super_block +{ + struct reiserfs_super_block_v1 s_v1; + __u32 s_inode_generation; + __u32 s_flags; /* Right now used only by inode-attributes, if enabled */ + unsigned char s_uuid[16]; /* filesystem unique identifier */ + unsigned char s_label[16]; /* filesystem volume label */ + char s_unused[88] ; /* zero filled by mkreiserfs and + * reiserfs_convert_objectid_map_v1() + * so any additions must be updated + * there as well. */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +#define SB_SIZE (sizeof(struct reiserfs_super_block)) + +#define REISERFS_VERSION_1 0 +#define REISERFS_VERSION_2 2 + + +// on-disk super block fields converted to cpu form +#define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs) +#define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1)) +#define SB_BLOCKSIZE(s) \ + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize)) +#define SB_BLOCK_COUNT(s) \ + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count)) +#define SB_FREE_BLOCKS(s) \ + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks)) +#define SB_REISERFS_MAGIC(s) \ + (SB_V1_DISK_SUPER_BLOCK(s)->s_magic) +#define SB_ROOT_BLOCK(s) \ + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_root_block)) +#define SB_TREE_HEIGHT(s) \ + le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height)) +#define SB_REISERFS_STATE(s) \ + le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state)) +#define SB_VERSION(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_version)) +#define SB_BMAP_NR(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr)) + +#define PUT_SB_BLOCK_COUNT(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_block_count = cpu_to_le32(val); } while (0) +#define PUT_SB_FREE_BLOCKS(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks = cpu_to_le32(val); } while (0) +#define PUT_SB_ROOT_BLOCK(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_root_block = cpu_to_le32(val); } while (0) +#define PUT_SB_TREE_HEIGHT(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height = cpu_to_le16(val); } while (0) +#define PUT_SB_REISERFS_STATE(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state = cpu_to_le16(val); } while (0) +#define PUT_SB_VERSION(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_version = cpu_to_le16(val); } while (0) +#define PUT_SB_BMAP_NR(s, val) \ + do { SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr = cpu_to_le16 (val); } while (0) + + +#define SB_ONDISK_JP(s) (&SB_V1_DISK_SUPER_BLOCK(s)->s_journal) +#define SB_ONDISK_JOURNAL_SIZE(s) \ + le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_size)) +#define SB_ONDISK_JOURNAL_1st_BLOCK(s) \ + le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_1st_block)) +#define SB_ONDISK_JOURNAL_DEVICE(s) \ + le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_dev)) +#define SB_ONDISK_RESERVED_FOR_JOURNAL(s) \ + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_reserved_for_journal)) + +#define is_block_in_log_or_reserved_area(s, block) \ + block >= SB_JOURNAL_1st_RESERVED_BLOCK(s) \ + && block < SB_JOURNAL_1st_RESERVED_BLOCK(s) + \ + ((!is_reiserfs_jr(SB_DISK_SUPER_BLOCK(s)) ? \ + SB_ONDISK_JOURNAL_SIZE(s) + 1 : SB_ONDISK_RESERVED_FOR_JOURNAL(s))) + + + + /* used by gcc */ +#define REISERFS_SUPER_MAGIC 0x52654973 + /* used by file system utilities that + look at the superblock, etc. */ +#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs" +#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs" +#define REISER2FS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs" + +int is_reiserfs_3_5 (struct reiserfs_super_block * rs); +int is_reiserfs_3_6 (struct reiserfs_super_block * rs); +int is_reiserfs_jr (struct reiserfs_super_block * rs); + +/* ReiserFS leaves the first 64k unused, so that partition labels have + enough space. If someone wants to write a fancy bootloader that + needs more than 64k, let us know, and this will be increased in size. + This number must be larger than than the largest block size on any + platform, or code will break. -Hans */ +#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) +#define REISERFS_FIRST_BLOCK unused_define +#define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES + +/* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ +#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) + +// reiserfs internal error code (used by search_by_key adn fix_nodes)) +#define CARRY_ON 0 +#define REPEAT_SEARCH -1 +#define IO_ERROR -2 +#define NO_DISK_SPACE -3 +#define NO_BALANCING_NEEDED (-4) +#define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5) +#define QUOTA_EXCEEDED -6 + +typedef __u32 b_blocknr_t; +typedef __u32 unp_t; + +struct unfm_nodeinfo { + unp_t unfm_nodenum; + unsigned short unfm_freespace; +}; + +/* there are two formats of keys: 3.5 and 3.6 + */ +#define KEY_FORMAT_3_5 0 +#define KEY_FORMAT_3_6 1 + +/* there are two stat datas */ +#define STAT_DATA_V1 0 +#define STAT_DATA_V2 1 + +/** this says about version of key of all items (but stat data) the + object consists of */ +#define get_inode_item_key_version( inode ) \ + ((REISERFS_I(inode)->i_flags & i_item_key_version_mask) ? KEY_FORMAT_3_6 : KEY_FORMAT_3_5) + +#define set_inode_item_key_version( inode, version ) \ + ({ if((version)==KEY_FORMAT_3_6) \ + REISERFS_I(inode)->i_flags |= i_item_key_version_mask; \ + else \ + REISERFS_I(inode)->i_flags &= ~i_item_key_version_mask; }) + +#define get_inode_sd_version(inode) \ + ((REISERFS_I(inode)->i_flags & i_stat_data_version_mask) ? STAT_DATA_V2 : STAT_DATA_V1) + +#define set_inode_sd_version(inode, version) \ + ({ if((version)==STAT_DATA_V2) \ + REISERFS_I(inode)->i_flags |= i_stat_data_version_mask; \ + else \ + REISERFS_I(inode)->i_flags &= ~i_stat_data_version_mask; }) + +/* This is an aggressive tail suppression policy, I am hoping it + improves our benchmarks. The principle behind it is that percentage + space saving is what matters, not absolute space saving. This is + non-intuitive, but it helps to understand it if you consider that the + cost to access 4 blocks is not much more than the cost to access 1 + block, if you have to do a seek and rotate. A tail risks a + non-linear disk access that is significant as a percentage of total + time cost for a 4 block file and saves an amount of space that is + less significant as a percentage of space, or so goes the hypothesis. + -Hans */ +#define STORE_TAIL_IN_UNFM_S1(n_file_size,n_tail_size,n_block_size) \ +(\ + (!(n_tail_size)) || \ + (((n_tail_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) || \ + ( (n_file_size) >= (n_block_size) * 4 ) || \ + ( ( (n_file_size) >= (n_block_size) * 3 ) && \ + ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/4) ) || \ + ( ( (n_file_size) >= (n_block_size) * 2 ) && \ + ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/2) ) || \ + ( ( (n_file_size) >= (n_block_size) ) && \ + ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size) * 3)/4) ) ) \ +) + +/* Another strategy for tails, this one means only create a tail if all the + file would fit into one DIRECT item. + Primary intention for this one is to increase performance by decreasing + seeking. +*/ +#define STORE_TAIL_IN_UNFM_S2(n_file_size,n_tail_size,n_block_size) \ +(\ + (!(n_tail_size)) || \ + (((n_file_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) ) \ +) + + + +/* + * values for s_umount_state field + */ +#define REISERFS_VALID_FS 1 +#define REISERFS_ERROR_FS 2 + +// +// there are 5 item types currently +// +#define TYPE_STAT_DATA 0 +#define TYPE_INDIRECT 1 +#define TYPE_DIRECT 2 +#define TYPE_DIRENTRY 3 +#define TYPE_MAXTYPE 3 +#define TYPE_ANY 15 // FIXME: comment is required + +/***************************************************************************/ +/* KEY & ITEM HEAD */ +/***************************************************************************/ + +// +// directories use this key as well as old files +// +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct offset_v1 { + __u32 k_offset; + __u32 k_uniqueness; +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct offset_v2 { +#ifdef __LITTLE_ENDIAN + /* little endian version */ + __u64 k_offset:60; + __u64 k_type: 4; +#else + /* big endian version */ + __u64 k_type: 4; + __u64 k_offset:60; +#endif +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +#ifndef __LITTLE_ENDIAN + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +typedef union { + struct offset_v2 offset_v2; + __u64 linear; +} __PACKED offset_v2_esafe_overlay; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +#else +# define offset_v2_k_type(v2) ((v2)->k_type) +# define set_offset_v2_k_type(v2,val) (offset_v2_k_type(v2) = (val)) +# define offset_v2_k_offset(v2) ((v2)->k_offset) +# define set_offset_v2_k_offset(v2,val) (offset_v2_k_offset(v2) = (val)) +#endif + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* Key of an item determines its location in the S+tree, and + is composed of 4 components */ +struct reiserfs_key { + __u32 k_dir_id; /* packing locality: by default parent + directory object id */ + __u32 k_objectid; /* object identifier */ + union { + struct offset_v1 k_offset_v1; + struct offset_v2 k_offset_v2; + } __PACKED u; +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +struct cpu_key { + struct reiserfs_key on_disk_key; + int version; + int key_length; /* 3 in all cases but direct2indirect and + indirect2direct conversion */ +}; + +/* Our function for comparing keys can compare keys of different + lengths. It takes as a parameter the length of the keys it is to + compare. These defines are used in determining what is to be passed + to it as that parameter. */ +#define REISERFS_FULL_KEY_LEN 4 +#define REISERFS_SHORT_KEY_LEN 2 + +/* The result of the key compare */ +#define FIRST_GREATER 1 +#define SECOND_GREATER -1 +#define KEYS_IDENTICAL 0 +#define KEY_FOUND 1 +#define KEY_NOT_FOUND 0 + +#define KEY_SIZE (sizeof(struct reiserfs_key)) +#define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32)) + +/* return values for search_by_key and clones */ +#define ITEM_FOUND 1 +#define ITEM_NOT_FOUND 0 +#define ENTRY_FOUND 1 +#define ENTRY_NOT_FOUND 0 +#define DIRECTORY_NOT_FOUND -1 +#define REGULAR_FILE_FOUND -2 +#define DIRECTORY_FOUND -3 +#define BYTE_FOUND 1 +#define BYTE_NOT_FOUND 0 +#define FILE_NOT_FOUND -1 + +#define POSITION_FOUND 1 +#define POSITION_NOT_FOUND 0 + +// return values for reiserfs_find_entry and search_by_entry_key +#define NAME_FOUND 1 +#define NAME_NOT_FOUND 0 +#define GOTO_PREVIOUS_ITEM 2 +#define NAME_FOUND_INVISIBLE 3 + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* Everything in the filesystem is stored as a set of items. The + item head contains the key of the item, its free space (for + indirect items) and specifies the location of the item itself + within the block. */ +struct item_head +{ + /* Everything in the tree is found by searching for it based on + * its key.*/ + struct reiserfs_key ih_key; + union { + /* The free space in the last unformatted node of an + indirect item if this is an indirect item. This + equals 0xFFFF iff this is a direct item or stat data + item. Note that the key, not this field, is used to + determine the item type, and thus which field this + union contains. */ + __u16 ih_free_space_reserved; + /* Iff this is a directory item, this field equals the + number of directory entries in the directory item. */ + __u16 ih_entry_count; + } __PACKED u; + __u16 ih_item_len; /* total size of the item body */ + __u16 ih_item_location; /* an offset to the item body + * within the block */ + __u16 ih_version; /* 0 for all old items, 2 for new + ones. Highest bit is set by fsck + temporary, cleaned after all + done */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +/* size of item header */ +#define IH_SIZE (sizeof(struct item_head)) + +#define ih_free_space(ih) le16_to_cpu((ih)->u.ih_free_space_reserved) +#define ih_version(ih) le16_to_cpu((ih)->ih_version) +#define ih_entry_count(ih) le16_to_cpu((ih)->u.ih_entry_count) +#define ih_location(ih) le16_to_cpu((ih)->ih_item_location) +#define ih_item_len(ih) le16_to_cpu((ih)->ih_item_len) + +#define put_ih_free_space(ih, val) do { (ih)->u.ih_free_space_reserved = cpu_to_le16(val); } while(0) +#define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0) +#define put_ih_entry_count(ih, val) do { (ih)->u.ih_entry_count = cpu_to_le16(val); } while (0) +#define put_ih_location(ih, val) do { (ih)->ih_item_location = cpu_to_le16(val); } while (0) +#define put_ih_item_len(ih, val) do { (ih)->ih_item_len = cpu_to_le16(val); } while (0) + + +#define unreachable_item(ih) (ih_version(ih) & (1 << 15)) + +#define get_ih_free_space(ih) (ih_version (ih) == KEY_FORMAT_3_6 ? 0 : ih_free_space (ih)) +#define set_ih_free_space(ih,val) put_ih_free_space((ih), ((ih_version(ih) == KEY_FORMAT_3_6) ? 0 : (val))) + +/* these operate on indirect items, where you've got an array of ints +** at a possibly unaligned location. These are a noop on ia32 +** +** p is the array of __u32, i is the index into the array, v is the value +** to store there. +*/ +#define get_block_num(p, i) le32_to_cpu(get_unaligned((p) + (i))) +#define put_block_num(p, i, v) put_unaligned(cpu_to_le32(v), (p) + (i)) + +// +// in old version uniqueness field shows key type +// +#define V1_SD_UNIQUENESS 0 +#define V1_INDIRECT_UNIQUENESS 0xfffffffe +#define V1_DIRECT_UNIQUENESS 0xffffffff +#define V1_DIRENTRY_UNIQUENESS 500 +#define V1_ANY_UNIQUENESS 555 // FIXME: comment is required + +// +// here are conversion routines +// +static inline int uniqueness2type (__u32 uniqueness) CONSTF; +static inline int uniqueness2type (__u32 uniqueness) +{ + switch ((int)uniqueness) { + case V1_SD_UNIQUENESS: return TYPE_STAT_DATA; + case V1_INDIRECT_UNIQUENESS: return TYPE_INDIRECT; + case V1_DIRECT_UNIQUENESS: return TYPE_DIRECT; + case V1_DIRENTRY_UNIQUENESS: return TYPE_DIRENTRY; + default: + reiserfs_warning (NULL, "vs-500: unknown uniqueness %d", + uniqueness); + case V1_ANY_UNIQUENESS: + return TYPE_ANY; + } +} + +static inline __u32 type2uniqueness (int type) CONSTF; +static inline __u32 type2uniqueness (int type) +{ + switch (type) { + case TYPE_STAT_DATA: return V1_SD_UNIQUENESS; + case TYPE_INDIRECT: return V1_INDIRECT_UNIQUENESS; + case TYPE_DIRECT: return V1_DIRECT_UNIQUENESS; + case TYPE_DIRENTRY: return V1_DIRENTRY_UNIQUENESS; + default: + reiserfs_warning (NULL, "vs-501: unknown type %d", type); + case TYPE_ANY: + return V1_ANY_UNIQUENESS; + } +} + +#define is_direntry_le_key(version,key) (le_key_k_type (version, key) == TYPE_DIRENTRY) +#define is_direct_le_key(version,key) (le_key_k_type (version, key) == TYPE_DIRECT) +#define is_indirect_le_key(version,key) (le_key_k_type (version, key) == TYPE_INDIRECT) +#define is_statdata_le_key(version,key) (le_key_k_type (version, key) == TYPE_STAT_DATA) + +// +// item header has version. +// +#define is_direntry_le_ih(ih) is_direntry_le_key (ih_version (ih), &((ih)->ih_key)) +#define is_direct_le_ih(ih) is_direct_le_key (ih_version (ih), &((ih)->ih_key)) +#define is_indirect_le_ih(ih) is_indirect_le_key (ih_version(ih), &((ih)->ih_key)) +#define is_statdata_le_ih(ih) is_statdata_le_key (ih_version (ih), &((ih)->ih_key)) + +#define is_direntry_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRENTRY) +#define is_direct_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRECT) +#define is_indirect_cpu_key(key) (cpu_key_k_type (key) == TYPE_INDIRECT) +#define is_statdata_cpu_key(key) (cpu_key_k_type (key) == TYPE_STAT_DATA) + + +/* are these used ? */ +#define is_direntry_cpu_ih(ih) (is_direntry_cpu_key (&((ih)->ih_key))) +#define is_direct_cpu_ih(ih) (is_direct_cpu_key (&((ih)->ih_key))) +#define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key))) +#define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key))) + + + + + +#define I_K_KEY_IN_ITEM(p_s_ih, p_s_key, n_blocksize) \ + ( ! COMP_SHORT_KEYS(p_s_ih, p_s_key) && \ + I_OFF_BYTE_IN_ITEM(p_s_ih, k_offset (p_s_key), n_blocksize) ) + +/* maximal length of item */ +#define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE) +#define MIN_ITEM_LEN 1 + + +/* object identifier for root dir */ +#define REISERFS_ROOT_OBJECTID 2 +#define REISERFS_ROOT_PARENT_OBJECTID 1 +extern struct reiserfs_key root_key; + + + + +/* + * Picture represents a leaf of the S+tree + * ______________________________________________________ + * | | Array of | | | + * |Block | Object-Item | F r e e | Objects- | + * | head | Headers | S p a c e | Items | + * |______|_______________|___________________|___________| + */ + +/* Header of a disk block. More precisely, header of a formatted leaf + or internal node, and not the header of an unformatted node. */ +struct block_head { + __u16 blk_level; /* Level of a block in the tree. */ + __u16 blk_nr_item; /* Number of keys/items in a block. */ + __u16 blk_free_space; /* Block free space in bytes. */ + __u16 blk_reserved; + /* dump this in v4/planA */ + struct reiserfs_key blk_right_delim_key; /* kept only for compatibility */ +}; + +#define BLKH_SIZE (sizeof(struct block_head)) +#define blkh_level(p_blkh) (le16_to_cpu((p_blkh)->blk_level)) +#define blkh_nr_item(p_blkh) (le16_to_cpu((p_blkh)->blk_nr_item)) +#define blkh_free_space(p_blkh) (le16_to_cpu((p_blkh)->blk_free_space)) +#define blkh_reserved(p_blkh) (le16_to_cpu((p_blkh)->blk_reserved)) +#define set_blkh_level(p_blkh,val) ((p_blkh)->blk_level = cpu_to_le16(val)) +#define set_blkh_nr_item(p_blkh,val) ((p_blkh)->blk_nr_item = cpu_to_le16(val)) +#define set_blkh_free_space(p_blkh,val) ((p_blkh)->blk_free_space = cpu_to_le16(val)) +#define set_blkh_reserved(p_blkh,val) ((p_blkh)->blk_reserved = cpu_to_le16(val)) +#define blkh_right_delim_key(p_blkh) ((p_blkh)->blk_right_delim_key) +#define set_blkh_right_delim_key(p_blkh,val) ((p_blkh)->blk_right_delim_key = val) + +/* + * values for blk_level field of the struct block_head + */ + +#define FREE_LEVEL 0 /* when node gets removed from the tree its + blk_level is set to FREE_LEVEL. It is then + used to see whether the node is still in the + tree */ + +#define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level.*/ + +/* Given the buffer head of a formatted node, resolve to the block head of that node. */ +#define B_BLK_HEAD(p_s_bh) ((struct block_head *)((p_s_bh)->b_data)) +/* Number of items that are in buffer. */ +#define B_NR_ITEMS(p_s_bh) (blkh_nr_item(B_BLK_HEAD(p_s_bh))) +#define B_LEVEL(p_s_bh) (blkh_level(B_BLK_HEAD(p_s_bh))) +#define B_FREE_SPACE(p_s_bh) (blkh_free_space(B_BLK_HEAD(p_s_bh))) + +#define PUT_B_NR_ITEMS(p_s_bh,val) do { set_blkh_nr_item(B_BLK_HEAD(p_s_bh),val); } while (0) +#define PUT_B_LEVEL(p_s_bh,val) do { set_blkh_level(B_BLK_HEAD(p_s_bh),val); } while (0) +#define PUT_B_FREE_SPACE(p_s_bh,val) do { set_blkh_free_space(B_BLK_HEAD(p_s_bh),val); } while (0) + + +/* Get right delimiting key. -- little endian */ +#define B_PRIGHT_DELIM_KEY(p_s_bh) (&(blk_right_delim_key(B_BLK_HEAD(p_s_bh)) + +/* Does the buffer contain a disk leaf. */ +#define B_IS_ITEMS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) == DISK_LEAF_NODE_LEVEL) + +/* Does the buffer contain a disk internal node */ +#define B_IS_KEYS_LEVEL(p_s_bh) (B_LEVEL(p_s_bh) > DISK_LEAF_NODE_LEVEL \ + && B_LEVEL(p_s_bh) <= MAX_HEIGHT) + + + + +/***************************************************************************/ +/* STAT DATA */ +/***************************************************************************/ + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +// +// old stat data is 32 bytes long. We are going to distinguish new one by +// different size +// +struct stat_data_v1 +{ + __u16 sd_mode; /* file type, permissions */ + __u16 sd_nlink; /* number of hard links */ + __u16 sd_uid; /* owner */ + __u16 sd_gid; /* group */ + __u32 sd_size; /* file size */ + __u32 sd_atime; /* time of last access */ + __u32 sd_mtime; /* time file was last modified */ + __u32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ + union { + __u32 sd_rdev; + __u32 sd_blocks; /* number of blocks file uses */ + } __PACKED u; + __u32 sd_first_direct_byte; /* first byte of file which is stored + in a direct item: except that if it + equals 1 it is a symlink and if it + equals ~(__u32)0 there is no + direct item. The existence of this + field really grates on me. Let's + replace it with a macro based on + sd_size and our tail suppression + policy. Someday. -Hans */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +#define SD_V1_SIZE (sizeof(struct stat_data_v1)) +#define stat_data_v1(ih) (ih_version (ih) == KEY_FORMAT_3_5) +#define sd_v1_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) +#define set_sd_v1_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) +#define sd_v1_nlink(sdp) (le16_to_cpu((sdp)->sd_nlink)) +#define set_sd_v1_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le16(v)) +#define sd_v1_uid(sdp) (le16_to_cpu((sdp)->sd_uid)) +#define set_sd_v1_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le16(v)) +#define sd_v1_gid(sdp) (le16_to_cpu((sdp)->sd_gid)) +#define set_sd_v1_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le16(v)) +#define sd_v1_size(sdp) (le32_to_cpu((sdp)->sd_size)) +#define set_sd_v1_size(sdp,v) ((sdp)->sd_size = cpu_to_le32(v)) +#define sd_v1_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) +#define set_sd_v1_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) +#define sd_v1_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) +#define set_sd_v1_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) +#define sd_v1_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) +#define set_sd_v1_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) +#define sd_v1_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) +#define set_sd_v1_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) +#define sd_v1_blocks(sdp) (le32_to_cpu((sdp)->u.sd_blocks)) +#define set_sd_v1_blocks(sdp,v) ((sdp)->u.sd_blocks = cpu_to_le32(v)) +#define sd_v1_first_direct_byte(sdp) \ + (le32_to_cpu((sdp)->sd_first_direct_byte)) +#define set_sd_v1_first_direct_byte(sdp,v) \ + ((sdp)->sd_first_direct_byte = cpu_to_le32(v)) + +#include <linux/ext2_fs.h> + +/* inode flags stored in sd_attrs (nee sd_reserved) */ + +/* we want common flags to have the same values as in ext2, + so chattr(1) will work without problems */ +#define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL +#define REISERFS_APPEND_FL EXT2_APPEND_FL +#define REISERFS_SYNC_FL EXT2_SYNC_FL +#define REISERFS_NOATIME_FL EXT2_NOATIME_FL +#define REISERFS_NODUMP_FL EXT2_NODUMP_FL +#define REISERFS_SECRM_FL EXT2_SECRM_FL +#define REISERFS_UNRM_FL EXT2_UNRM_FL +#define REISERFS_COMPR_FL EXT2_COMPR_FL +#define REISERFS_NOTAIL_FL EXT2_NOTAIL_FL + +/* persistent flags that file inherits from the parent directory */ +#define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ + REISERFS_SYNC_FL | \ + REISERFS_NOATIME_FL | \ + REISERFS_NODUMP_FL | \ + REISERFS_SECRM_FL | \ + REISERFS_COMPR_FL | \ + REISERFS_NOTAIL_FL ) + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* Stat Data on disk (reiserfs version of UFS disk inode minus the + address blocks) */ +struct stat_data { + __u16 sd_mode; /* file type, permissions */ + __u16 sd_attrs; /* persistent inode flags */ + __u32 sd_nlink; /* number of hard links */ + __u64 sd_size; /* file size */ + __u32 sd_uid; /* owner */ + __u32 sd_gid; /* group */ + __u32 sd_atime; /* time of last access */ + __u32 sd_mtime; /* time file was last modified */ + __u32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ + __u32 sd_blocks; + union { + __u32 sd_rdev; + __u32 sd_generation; + //__u32 sd_first_direct_byte; + /* first byte of file which is stored in a + direct item: except that if it equals 1 + it is a symlink and if it equals + ~(__u32)0 there is no direct item. The + existence of this field really grates + on me. Let's replace it with a macro + based on sd_size and our tail + suppression policy? */ + } __PACKED u; +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +// +// this is 44 bytes long +// +#define SD_SIZE (sizeof(struct stat_data)) +#define SD_V2_SIZE SD_SIZE +#define stat_data_v2(ih) (ih_version (ih) == KEY_FORMAT_3_6) +#define sd_v2_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) +#define set_sd_v2_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) +/* sd_reserved */ +/* set_sd_reserved */ +#define sd_v2_nlink(sdp) (le32_to_cpu((sdp)->sd_nlink)) +#define set_sd_v2_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le32(v)) +#define sd_v2_size(sdp) (le64_to_cpu((sdp)->sd_size)) +#define set_sd_v2_size(sdp,v) ((sdp)->sd_size = cpu_to_le64(v)) +#define sd_v2_uid(sdp) (le32_to_cpu((sdp)->sd_uid)) +#define set_sd_v2_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le32(v)) +#define sd_v2_gid(sdp) (le32_to_cpu((sdp)->sd_gid)) +#define set_sd_v2_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le32(v)) +#define sd_v2_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) +#define set_sd_v2_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) +#define sd_v2_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) +#define set_sd_v2_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) +#define sd_v2_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) +#define set_sd_v2_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) +#define sd_v2_blocks(sdp) (le32_to_cpu((sdp)->sd_blocks)) +#define set_sd_v2_blocks(sdp,v) ((sdp)->sd_blocks = cpu_to_le32(v)) +#define sd_v2_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) +#define set_sd_v2_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) +#define sd_v2_generation(sdp) (le32_to_cpu((sdp)->u.sd_generation)) +#define set_sd_v2_generation(sdp,v) ((sdp)->u.sd_generation = cpu_to_le32(v)) +#define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs)) +#define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v)) + + +/***************************************************************************/ +/* DIRECTORY STRUCTURE */ +/***************************************************************************/ +/* + Picture represents the structure of directory items + ________________________________________________ + | Array of | | | | | | + | directory |N-1| N-2 | .... | 1st |0th| + | entry headers | | | | | | + |_______________|___|_____|________|_______|___| + <---- directory entries ------> + + First directory item has k_offset component 1. We store "." and ".." + in one item, always, we never split "." and ".." into differing + items. This makes, among other things, the code for removing + directories simpler. */ +#define SD_OFFSET 0 +#define SD_UNIQUENESS 0 +#define DOT_OFFSET 1 +#define DOT_DOT_OFFSET 2 +#define DIRENTRY_UNIQUENESS 500 + +/* */ +#define FIRST_ITEM_OFFSET 1 + +/* + Q: How to get key of object pointed to by entry from entry? + + A: Each directory entry has its header. This header has deh_dir_id and deh_objectid fields, those are key + of object, entry points to */ + +/* NOT IMPLEMENTED: + Directory will someday contain stat data of object */ + + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct reiserfs_de_head +{ + __u32 deh_offset; /* third component of the directory entry key */ + __u32 deh_dir_id; /* objectid of the parent directory of the object, that is referenced + by directory entry */ + __u32 deh_objectid; /* objectid of the object, that is referenced by directory entry */ + __u16 deh_location; /* offset of name in the whole item */ + __u16 deh_state; /* whether 1) entry contains stat data (for future), and 2) whether + entry is hidden (unlinked) */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +#define DEH_SIZE sizeof(struct reiserfs_de_head) +#define deh_offset(p_deh) (le32_to_cpu((p_deh)->deh_offset)) +#define deh_dir_id(p_deh) (le32_to_cpu((p_deh)->deh_dir_id)) +#define deh_objectid(p_deh) (le32_to_cpu((p_deh)->deh_objectid)) +#define deh_location(p_deh) (le16_to_cpu((p_deh)->deh_location)) +#define deh_state(p_deh) (le16_to_cpu((p_deh)->deh_state)) + +#define put_deh_offset(p_deh,v) ((p_deh)->deh_offset = cpu_to_le32((v))) +#define put_deh_dir_id(p_deh,v) ((p_deh)->deh_dir_id = cpu_to_le32((v))) +#define put_deh_objectid(p_deh,v) ((p_deh)->deh_objectid = cpu_to_le32((v))) +#define put_deh_location(p_deh,v) ((p_deh)->deh_location = cpu_to_le16((v))) +#define put_deh_state(p_deh,v) ((p_deh)->deh_state = cpu_to_le16((v))) + +/* empty directory contains two entries "." and ".." and their headers */ +#define EMPTY_DIR_SIZE \ +(DEH_SIZE * 2 + ROUND_UP (strlen (".")) + ROUND_UP (strlen (".."))) + +/* old format directories have this size when empty */ +#define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3) + +#define DEH_Statdata 0 /* not used now */ +#define DEH_Visible 2 + +/* 64 bit systems (and the S/390) need to be aligned explicitly -jdm */ +#if BITS_PER_LONG == 64 || defined(__s390__) || defined(__hppa__) +# define ADDR_UNALIGNED_BITS (3) +#endif + +/* These are only used to manipulate deh_state. + * Because of this, we'll use the ext2_ bit routines, + * since they are little endian */ +#ifdef ADDR_UNALIGNED_BITS + +# define aligned_address(addr) ((void *)((long)(addr) & ~((1UL << ADDR_UNALIGNED_BITS) - 1))) +# define unaligned_offset(addr) (((int)((long)(addr) & ((1 << ADDR_UNALIGNED_BITS) - 1))) << 3) + +# define set_bit_unaligned(nr, addr) ext2_set_bit((nr) + unaligned_offset(addr), aligned_address(addr)) +# define clear_bit_unaligned(nr, addr) ext2_clear_bit((nr) + unaligned_offset(addr), aligned_address(addr)) +# define test_bit_unaligned(nr, addr) ext2_test_bit((nr) + unaligned_offset(addr), aligned_address(addr)) + +#else + +# define set_bit_unaligned(nr, addr) ext2_set_bit(nr, addr) +# define clear_bit_unaligned(nr, addr) ext2_clear_bit(nr, addr) +# define test_bit_unaligned(nr, addr) ext2_test_bit(nr, addr) + +#endif + +#define mark_de_with_sd(deh) set_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) +#define mark_de_without_sd(deh) clear_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) +#define mark_de_visible(deh) set_bit_unaligned (DEH_Visible, &((deh)->deh_state)) +#define mark_de_hidden(deh) clear_bit_unaligned (DEH_Visible, &((deh)->deh_state)) + +#define de_with_sd(deh) test_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) +#define de_visible(deh) test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) +#define de_hidden(deh) !test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) + +extern void make_empty_dir_item_v1 (char * body, __u32 dirid, __u32 objid, + __u32 par_dirid, __u32 par_objid); +extern void make_empty_dir_item (char * body, __u32 dirid, __u32 objid, + __u32 par_dirid, __u32 par_objid); + +/* array of the entry headers */ + /* get item body */ +#define B_I_PITEM(bh,ih) ( (bh)->b_data + ih_location(ih) ) +#define B_I_DEH(bh,ih) ((struct reiserfs_de_head *)(B_I_PITEM(bh,ih))) + +/* length of the directory entry in directory item. This define + calculates length of i-th directory entry using directory entry + locations from dir entry head. When it calculates length of 0-th + directory entry, it uses length of whole item in place of entry + location of the non-existent following entry in the calculation. + See picture above.*/ +/* +#define I_DEH_N_ENTRY_LENGTH(ih,deh,i) \ +((i) ? (deh_location((deh)-1) - deh_location((deh))) : (ih_item_len((ih)) - deh_location((deh)))) +*/ +static inline int entry_length (const struct buffer_head * bh, + const struct item_head * ih, int pos_in_item) +{ + struct reiserfs_de_head * deh; + + deh = B_I_DEH (bh, ih) + pos_in_item; + if (pos_in_item) + return deh_location(deh-1) - deh_location(deh); + + return ih_item_len(ih) - deh_location(deh); +} + + + +/* number of entries in the directory item, depends on ENTRY_COUNT being at the start of directory dynamic data. */ +#define I_ENTRY_COUNT(ih) (ih_entry_count((ih))) + + +/* name by bh, ih and entry_num */ +#define B_I_E_NAME(bh,ih,entry_num) ((char *)(bh->b_data + ih_location(ih) + deh_location(B_I_DEH(bh,ih)+(entry_num)))) + +// two entries per block (at least) +#define REISERFS_MAX_NAME(block_size) 255 + + +/* this structure is used for operations on directory entries. It is + not a disk structure. */ +/* When reiserfs_find_entry or search_by_entry_key find directory + entry, they return filled reiserfs_dir_entry structure */ +struct reiserfs_dir_entry +{ + struct buffer_head * de_bh; + int de_item_num; + struct item_head * de_ih; + int de_entry_num; + struct reiserfs_de_head * de_deh; + int de_entrylen; + int de_namelen; + char * de_name; + char * de_gen_number_bit_string; + + __u32 de_dir_id; + __u32 de_objectid; + + struct cpu_key de_entry_key; +}; + +/* these defines are useful when a particular member of a reiserfs_dir_entry is needed */ + +/* pointer to file name, stored in entry */ +#define B_I_DEH_ENTRY_FILE_NAME(bh,ih,deh) (B_I_PITEM (bh, ih) + deh_location(deh)) + +/* length of name */ +#define I_DEH_N_ENTRY_FILE_NAME_LENGTH(ih,deh,entry_num) \ +(I_DEH_N_ENTRY_LENGTH (ih, deh, entry_num) - (de_with_sd (deh) ? SD_SIZE : 0)) + + + +/* hash value occupies bits from 7 up to 30 */ +#define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80LL) +/* generation number occupies 7 bits starting from 0 up to 6 */ +#define GET_GENERATION_NUMBER(offset) ((offset) & 0x7fLL) +#define MAX_GENERATION_NUMBER 127 + +#define SET_GENERATION_NUMBER(offset,gen_number) (GET_HASH_VALUE(offset)|(gen_number)) + + +/* + * Picture represents an internal node of the reiserfs tree + * ______________________________________________________ + * | | Array of | Array of | Free | + * |block | keys | pointers | space | + * | head | N | N+1 | | + * |______|_______________|___________________|___________| + */ + +/***************************************************************************/ +/* DISK CHILD */ +/***************************************************************************/ +/* Disk child pointer: The pointer from an internal node of the tree + to a node that is on disk. */ +struct disk_child { + __u32 dc_block_number; /* Disk child's block number. */ + __u16 dc_size; /* Disk child's used space. */ + __u16 dc_reserved; +}; + +#define DC_SIZE (sizeof(struct disk_child)) +#define dc_block_number(dc_p) (le32_to_cpu((dc_p)->dc_block_number)) +#define dc_size(dc_p) (le16_to_cpu((dc_p)->dc_size)) +#define put_dc_block_number(dc_p, val) do { (dc_p)->dc_block_number = cpu_to_le32(val); } while(0) +#define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0) + +/* Get disk child by buffer header and position in the tree node. */ +#define B_N_CHILD(p_s_bh,n_pos) ((struct disk_child *)\ +((p_s_bh)->b_data+BLKH_SIZE+B_NR_ITEMS(p_s_bh)*KEY_SIZE+DC_SIZE*(n_pos))) + +/* Get disk child number by buffer header and position in the tree node. */ +#define B_N_CHILD_NUM(p_s_bh,n_pos) (dc_block_number(B_N_CHILD(p_s_bh,n_pos))) +#define PUT_B_N_CHILD_NUM(p_s_bh,n_pos, val) (put_dc_block_number(B_N_CHILD(p_s_bh,n_pos), val )) + + /* maximal value of field child_size in structure disk_child */ + /* child size is the combined size of all items and their headers */ +#define MAX_CHILD_SIZE(bh) ((int)( (bh)->b_size - BLKH_SIZE )) + +/* amount of used space in buffer (not including block head) */ +#define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur)-(B_FREE_SPACE(cur))) + +/* max and min number of keys in internal node */ +#define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh)-DC_SIZE)/(KEY_SIZE+DC_SIZE) ) +#define MIN_NR_KEY(bh) (MAX_NR_KEY(bh)/2) + +/***************************************************************************/ +/* PATH STRUCTURES AND DEFINES */ +/***************************************************************************/ + + +/* Search_by_key fills up the path from the root to the leaf as it descends the tree looking for the + key. It uses reiserfs_bread to try to find buffers in the cache given their block number. If it + does not find them in the cache it reads them from disk. For each node search_by_key finds using + reiserfs_bread it then uses bin_search to look through that node. bin_search will find the + position of the block_number of the next node if it is looking through an internal node. If it + is looking through a leaf node bin_search will find the position of the item which has key either + equal to given key, or which is the maximal key less than the given key. */ + +struct path_element { + struct buffer_head * pe_buffer; /* Pointer to the buffer at the path in the tree. */ + int pe_position; /* Position in the tree node which is placed in the */ + /* buffer above. */ +}; + +#define MAX_HEIGHT 5 /* maximal height of a tree. don't change this without changing JOURNAL_PER_BALANCE_CNT */ +#define EXTENDED_MAX_HEIGHT 7 /* Must be equals MAX_HEIGHT + FIRST_PATH_ELEMENT_OFFSET */ +#define FIRST_PATH_ELEMENT_OFFSET 2 /* Must be equal to at least 2. */ + +#define ILLEGAL_PATH_ELEMENT_OFFSET 1 /* Must be equal to FIRST_PATH_ELEMENT_OFFSET - 1 */ +#define MAX_FEB_SIZE 6 /* this MUST be MAX_HEIGHT + 1. See about FEB below */ + + + +/* We need to keep track of who the ancestors of nodes are. When we + perform a search we record which nodes were visited while + descending the tree looking for the node we searched for. This list + of nodes is called the path. This information is used while + performing balancing. Note that this path information may become + invalid, and this means we must check it when using it to see if it + is still valid. You'll need to read search_by_key and the comments + in it, especially about decrement_counters_in_path(), to understand + this structure. + +Paths make the code so much harder to work with and debug.... An +enormous number of bugs are due to them, and trying to write or modify +code that uses them just makes my head hurt. They are based on an +excessive effort to avoid disturbing the precious VFS code.:-( The +gods only know how we are going to SMP the code that uses them. +znodes are the way! */ + +#define PATH_READA 0x1 /* do read ahead */ +#define PATH_READA_BACK 0x2 /* read backwards */ + +struct path { + int path_length; /* Length of the array above. */ + int reada; + struct path_element path_elements[EXTENDED_MAX_HEIGHT]; /* Array of the path elements. */ + int pos_in_item; +}; + +#define pos_in_item(path) ((path)->pos_in_item) + +#define INITIALIZE_PATH(var) \ +struct path var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,} + +/* Get path element by path and path position. */ +#define PATH_OFFSET_PELEMENT(p_s_path,n_offset) ((p_s_path)->path_elements +(n_offset)) + +/* Get buffer header at the path by path and path position. */ +#define PATH_OFFSET_PBUFFER(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_buffer) + +/* Get position in the element at the path by path and path position. */ +#define PATH_OFFSET_POSITION(p_s_path,n_offset) (PATH_OFFSET_PELEMENT(p_s_path,n_offset)->pe_position) + + +#define PATH_PLAST_BUFFER(p_s_path) (PATH_OFFSET_PBUFFER((p_s_path), (p_s_path)->path_length)) + /* you know, to the person who didn't + write this the macro name does not + at first suggest what it does. + Maybe POSITION_FROM_PATH_END? Or + maybe we should just focus on + dumping paths... -Hans */ +#define PATH_LAST_POSITION(p_s_path) (PATH_OFFSET_POSITION((p_s_path), (p_s_path)->path_length)) + + +#define PATH_PITEM_HEAD(p_s_path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(p_s_path),PATH_LAST_POSITION(p_s_path)) + +/* in do_balance leaf has h == 0 in contrast with path structure, + where root has level == 0. That is why we need these defines */ +#define PATH_H_PBUFFER(p_s_path, h) PATH_OFFSET_PBUFFER (p_s_path, p_s_path->path_length - (h)) /* tb->S[h] */ +#define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1) /* tb->F[h] or tb->S[0]->b_parent */ +#define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h)) +#define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1) /* tb->S[h]->b_item_order */ + +#define PATH_H_PATH_OFFSET(p_s_path, n_h) ((p_s_path)->path_length - (n_h)) + +#define get_last_bh(path) PATH_PLAST_BUFFER(path) +#define get_ih(path) PATH_PITEM_HEAD(path) +#define get_item_pos(path) PATH_LAST_POSITION(path) +#define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path))) +#define item_moved(ih,path) comp_items(ih, path) +#define path_changed(ih,path) comp_items (ih, path) + + +/***************************************************************************/ +/* MISC */ +/***************************************************************************/ + +/* Size of pointer to the unformatted node. */ +#define UNFM_P_SIZE (sizeof(unp_t)) +#define UNFM_P_SHIFT 2 + +// in in-core inode key is stored on le form +#define INODE_PKEY(inode) ((struct reiserfs_key *)(REISERFS_I(inode)->i_key)) + +#define MAX_UL_INT 0xffffffff +#define MAX_INT 0x7ffffff +#define MAX_US_INT 0xffff + +// reiserfs version 2 has max offset 60 bits. Version 1 - 32 bit offset +#define U32_MAX (~(__u32)0) + +static inline loff_t max_reiserfs_offset (struct inode * inode) +{ + if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5) + return (loff_t)U32_MAX; + + return (loff_t)((~(__u64)0) >> 4); +} + + +/*#define MAX_KEY_UNIQUENESS MAX_UL_INT*/ +#define MAX_KEY_OBJECTID MAX_UL_INT + + +#define MAX_B_NUM MAX_UL_INT +#define MAX_FC_NUM MAX_US_INT + + +/* the purpose is to detect overflow of an unsigned short */ +#define REISERFS_LINK_MAX (MAX_US_INT - 1000) + + +/* The following defines are used in reiserfs_insert_item and reiserfs_append_item */ +#define REISERFS_KERNEL_MEM 0 /* reiserfs kernel memory mode */ +#define REISERFS_USER_MEM 1 /* reiserfs user memory mode */ + +#define fs_generation(s) (REISERFS_SB(s)->s_generation_counter) +#define get_generation(s) atomic_read (&fs_generation(s)) +#define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen) +#define __fs_changed(gen,s) (gen != get_generation (s)) +#define fs_changed(gen,s) ({cond_resched(); __fs_changed(gen, s);}) + + +/***************************************************************************/ +/* FIXATE NODES */ +/***************************************************************************/ + +#define VI_TYPE_LEFT_MERGEABLE 1 +#define VI_TYPE_RIGHT_MERGEABLE 2 + +/* To make any changes in the tree we always first find node, that + contains item to be changed/deleted or place to insert a new + item. We call this node S. To do balancing we need to decide what + we will shift to left/right neighbor, or to a new node, where new + item will be etc. To make this analysis simpler we build virtual + node. Virtual node is an array of items, that will replace items of + node S. (For instance if we are going to delete an item, virtual + node does not contain it). Virtual node keeps information about + item sizes and types, mergeability of first and last items, sizes + of all entries in directory item. We use this array of items when + calculating what we can shift to neighbors and how many nodes we + have to have if we do not any shiftings, if we shift to left/right + neighbor or to both. */ +struct virtual_item +{ + int vi_index; // index in the array of item operations + unsigned short vi_type; // left/right mergeability + unsigned short vi_item_len; /* length of item that it will have after balancing */ + struct item_head * vi_ih; + const char * vi_item; // body of item (old or new) + const void * vi_new_data; // 0 always but paste mode + void * vi_uarea; // item specific area +}; + + +struct virtual_node +{ + char * vn_free_ptr; /* this is a pointer to the free space in the buffer */ + unsigned short vn_nr_item; /* number of items in virtual node */ + short vn_size; /* size of node , that node would have if it has unlimited size and no balancing is performed */ + short vn_mode; /* mode of balancing (paste, insert, delete, cut) */ + short vn_affected_item_num; + short vn_pos_in_item; + struct item_head * vn_ins_ih; /* item header of inserted item, 0 for other modes */ + const void * vn_data; + struct virtual_item * vn_vi; /* array of items (including a new one, excluding item to be deleted) */ +}; + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* used by directory items when creating virtual nodes */ +struct direntry_uarea { + int flags; + __u16 entry_count; + __u16 entry_sizes[1]; +} __PACKED ; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +/***************************************************************************/ +/* TREE BALANCE */ +/***************************************************************************/ + +/* This temporary structure is used in tree balance algorithms, and + constructed as we go to the extent that its various parts are + needed. It contains arrays of nodes that can potentially be + involved in the balancing of node S, and parameters that define how + each of the nodes must be balanced. Note that in these algorithms + for balancing the worst case is to need to balance the current node + S and the left and right neighbors and all of their parents plus + create a new node. We implement S1 balancing for the leaf nodes + and S0 balancing for the internal nodes (S1 and S0 are defined in + our papers.)*/ + +#define MAX_FREE_BLOCK 7 /* size of the array of buffers to free at end of do_balance */ + +/* maximum number of FEB blocknrs on a single level */ +#define MAX_AMOUNT_NEEDED 2 + +/* someday somebody will prefix every field in this struct with tb_ */ +struct tree_balance +{ + int tb_mode; + int need_balance_dirty; + struct super_block * tb_sb; + struct reiserfs_transaction_handle *transaction_handle ; + struct path * tb_path; + struct buffer_head * L[MAX_HEIGHT]; /* array of left neighbors of nodes in the path */ + struct buffer_head * R[MAX_HEIGHT]; /* array of right neighbors of nodes in the path*/ + struct buffer_head * FL[MAX_HEIGHT]; /* array of fathers of the left neighbors */ + struct buffer_head * FR[MAX_HEIGHT]; /* array of fathers of the right neighbors */ + struct buffer_head * CFL[MAX_HEIGHT]; /* array of common parents of center node and its left neighbor */ + struct buffer_head * CFR[MAX_HEIGHT]; /* array of common parents of center node and its right neighbor */ + + struct buffer_head * FEB[MAX_FEB_SIZE]; /* array of empty buffers. Number of buffers in array equals + cur_blknum. */ + struct buffer_head * used[MAX_FEB_SIZE]; + struct buffer_head * thrown[MAX_FEB_SIZE]; + int lnum[MAX_HEIGHT]; /* array of number of items which must be + shifted to the left in order to balance the + current node; for leaves includes item that + will be partially shifted; for internal + nodes, it is the number of child pointers + rather than items. It includes the new item + being created. The code sometimes subtracts + one to get the number of wholly shifted + items for other purposes. */ + int rnum[MAX_HEIGHT]; /* substitute right for left in comment above */ + int lkey[MAX_HEIGHT]; /* array indexed by height h mapping the key delimiting L[h] and + S[h] to its item number within the node CFL[h] */ + int rkey[MAX_HEIGHT]; /* substitute r for l in comment above */ + int insert_size[MAX_HEIGHT]; /* the number of bytes by we are trying to add or remove from + S[h]. A negative value means removing. */ + int blknum[MAX_HEIGHT]; /* number of nodes that will replace node S[h] after + balancing on the level h of the tree. If 0 then S is + being deleted, if 1 then S is remaining and no new nodes + are being created, if 2 or 3 then 1 or 2 new nodes is + being created */ + + /* fields that are used only for balancing leaves of the tree */ + int cur_blknum; /* number of empty blocks having been already allocated */ + int s0num; /* number of items that fall into left most node when S[0] splits */ + int s1num; /* number of items that fall into first new node when S[0] splits */ + int s2num; /* number of items that fall into second new node when S[0] splits */ + int lbytes; /* number of bytes which can flow to the left neighbor from the left */ + /* most liquid item that cannot be shifted from S[0] entirely */ + /* if -1 then nothing will be partially shifted */ + int rbytes; /* number of bytes which will flow to the right neighbor from the right */ + /* most liquid item that cannot be shifted from S[0] entirely */ + /* if -1 then nothing will be partially shifted */ + int s1bytes; /* number of bytes which flow to the first new node when S[0] splits */ + /* note: if S[0] splits into 3 nodes, then items do not need to be cut */ + int s2bytes; + struct buffer_head * buf_to_free[MAX_FREE_BLOCK]; /* buffers which are to be freed after do_balance finishes by unfix_nodes */ + char * vn_buf; /* kmalloced memory. Used to create + virtual node and keep map of + dirtied bitmap blocks */ + int vn_buf_size; /* size of the vn_buf */ + struct virtual_node * tb_vn; /* VN starts after bitmap of bitmap blocks */ + + int fs_gen; /* saved value of `reiserfs_generation' counter + see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */ +#ifdef DISPLACE_NEW_PACKING_LOCALITIES + struct reiserfs_key key; /* key pointer, to pass to block allocator or + another low-level subsystem */ +#endif +} ; + +/* These are modes of balancing */ + +/* When inserting an item. */ +#define M_INSERT 'i' +/* When inserting into (directories only) or appending onto an already + existant item. */ +#define M_PASTE 'p' +/* When deleting an item. */ +#define M_DELETE 'd' +/* When truncating an item or removing an entry from a (directory) item. */ +#define M_CUT 'c' + +/* used when balancing on leaf level skipped (in reiserfsck) */ +#define M_INTERNAL 'n' + +/* When further balancing is not needed, then do_balance does not need + to be called. */ +#define M_SKIP_BALANCING 's' +#define M_CONVERT 'v' + +/* modes of leaf_move_items */ +#define LEAF_FROM_S_TO_L 0 +#define LEAF_FROM_S_TO_R 1 +#define LEAF_FROM_R_TO_L 2 +#define LEAF_FROM_L_TO_R 3 +#define LEAF_FROM_S_TO_SNEW 4 + +#define FIRST_TO_LAST 0 +#define LAST_TO_FIRST 1 + +/* used in do_balance for passing parent of node information that has + been gotten from tb struct */ +struct buffer_info { + struct tree_balance * tb; + struct buffer_head * bi_bh; + struct buffer_head * bi_parent; + int bi_position; +}; + + +/* there are 4 types of items: stat data, directory item, indirect, direct. ++-------------------+------------+--------------+------------+ +| | k_offset | k_uniqueness | mergeable? | ++-------------------+------------+--------------+------------+ +| stat data | 0 | 0 | no | ++-------------------+------------+--------------+------------+ +| 1st directory item| DOT_OFFSET |DIRENTRY_UNIQUENESS| no | +| non 1st directory | hash value | | yes | +| item | | | | ++-------------------+------------+--------------+------------+ +| indirect item | offset + 1 |TYPE_INDIRECT | if this is not the first indirect item of the object ++-------------------+------------+--------------+------------+ +| direct item | offset + 1 |TYPE_DIRECT | if not this is not the first direct item of the object ++-------------------+------------+--------------+------------+ +*/ + +struct item_operations { + int (*bytes_number) (struct item_head * ih, int block_size); + void (*decrement_key) (struct cpu_key *); + int (*is_left_mergeable) (struct reiserfs_key * ih, unsigned long bsize); + void (*print_item) (struct item_head *, char * item); + void (*check_item) (struct item_head *, char * item); + + int (*create_vi) (struct virtual_node * vn, struct virtual_item * vi, + int is_affected, int insert_size); + int (*check_left) (struct virtual_item * vi, int free, + int start_skip, int end_skip); + int (*check_right) (struct virtual_item * vi, int free); + int (*part_size) (struct virtual_item * vi, int from, int to); + int (*unit_num) (struct virtual_item * vi); + void (*print_vi) (struct virtual_item * vi); +}; + + +extern struct item_operations * item_ops [TYPE_ANY + 1]; + +#define op_bytes_number(ih,bsize) item_ops[le_ih_k_type (ih)]->bytes_number (ih, bsize) +#define op_is_left_mergeable(key,bsize) item_ops[le_key_k_type (le_key_version (key), key)]->is_left_mergeable (key, bsize) +#define op_print_item(ih,item) item_ops[le_ih_k_type (ih)]->print_item (ih, item) +#define op_check_item(ih,item) item_ops[le_ih_k_type (ih)]->check_item (ih, item) +#define op_create_vi(vn,vi,is_affected,insert_size) item_ops[le_ih_k_type ((vi)->vi_ih)]->create_vi (vn,vi,is_affected,insert_size) +#define op_check_left(vi,free,start_skip,end_skip) item_ops[(vi)->vi_index]->check_left (vi, free, start_skip, end_skip) +#define op_check_right(vi,free) item_ops[(vi)->vi_index]->check_right (vi, free) +#define op_part_size(vi,from,to) item_ops[(vi)->vi_index]->part_size (vi, from, to) +#define op_unit_num(vi) item_ops[(vi)->vi_index]->unit_num (vi) +#define op_print_vi(vi) item_ops[(vi)->vi_index]->print_vi (vi) + + + +#define COMP_SHORT_KEYS comp_short_keys + +/* number of blocks pointed to by the indirect item */ +#define I_UNFM_NUM(p_s_ih) ( ih_item_len(p_s_ih) / UNFM_P_SIZE ) + +/* the used space within the unformatted node corresponding to pos within the item pointed to by ih */ +#define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size)) + +/* number of bytes contained by the direct item or the unformatted nodes the indirect item points to */ + + +/* get the item header */ +#define B_N_PITEM_HEAD(bh,item_num) ( (struct item_head * )((bh)->b_data + BLKH_SIZE) + (item_num) ) + +/* get key */ +#define B_N_PDELIM_KEY(bh,item_num) ( (struct reiserfs_key * )((bh)->b_data + BLKH_SIZE) + (item_num) ) + +/* get the key */ +#define B_N_PKEY(bh,item_num) ( &(B_N_PITEM_HEAD(bh,item_num)->ih_key) ) + +/* get item body */ +#define B_N_PITEM(bh,item_num) ( (bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(item_num)))) + +/* get the stat data by the buffer header and the item order */ +#define B_N_STAT_DATA(bh,nr) \ +( (struct stat_data *)((bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(nr))) ) ) + + /* following defines use reiserfs buffer header and item header */ + +/* get stat-data */ +#define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )((bh)->b_data + ih_location(ih)) ) + +// this is 3976 for size==4096 +#define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE) + +/* indirect items consist of entries which contain blocknrs, pos + indicates which entry, and B_I_POS_UNFM_POINTER resolves to the + blocknr contained by the entry pos points to */ +#define B_I_POS_UNFM_POINTER(bh,ih,pos) le32_to_cpu(*(((unp_t *)B_I_PITEM(bh,ih)) + (pos))) +#define PUT_B_I_POS_UNFM_POINTER(bh,ih,pos, val) do {*(((unp_t *)B_I_PITEM(bh,ih)) + (pos)) = cpu_to_le32(val); } while (0) + +struct reiserfs_iget_args { + __u32 objectid ; + __u32 dirid ; +} ; + +/***************************************************************************/ +/* FUNCTION DECLARATIONS */ +/***************************************************************************/ + +/*#ifdef __KERNEL__*/ +#define get_journal_desc_magic(bh) (bh->b_data + bh->b_size - 12) + +#define journal_trans_half(blocksize) \ + ((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32)) + +/* journal.c see journal.c for all the comments here */ + +/* first block written in a commit. */ +struct reiserfs_journal_desc { + __u32 j_trans_id ; /* id of commit */ + __u32 j_len ; /* length of commit. len +1 is the commit block */ + __u32 j_mount_id ; /* mount id of this trans*/ + __u32 j_realblock[1] ; /* real locations for each block */ +} ; + +#define get_desc_trans_id(d) le32_to_cpu((d)->j_trans_id) +#define get_desc_trans_len(d) le32_to_cpu((d)->j_len) +#define get_desc_mount_id(d) le32_to_cpu((d)->j_mount_id) + +#define set_desc_trans_id(d,val) do { (d)->j_trans_id = cpu_to_le32 (val); } while (0) +#define set_desc_trans_len(d,val) do { (d)->j_len = cpu_to_le32 (val); } while (0) +#define set_desc_mount_id(d,val) do { (d)->j_mount_id = cpu_to_le32 (val); } while (0) + +/* last block written in a commit */ +struct reiserfs_journal_commit { + __u32 j_trans_id ; /* must match j_trans_id from the desc block */ + __u32 j_len ; /* ditto */ + __u32 j_realblock[1] ; /* real locations for each block */ +} ; + +#define get_commit_trans_id(c) le32_to_cpu((c)->j_trans_id) +#define get_commit_trans_len(c) le32_to_cpu((c)->j_len) +#define get_commit_mount_id(c) le32_to_cpu((c)->j_mount_id) + +#define set_commit_trans_id(c,val) do { (c)->j_trans_id = cpu_to_le32 (val); } while (0) +#define set_commit_trans_len(c,val) do { (c)->j_len = cpu_to_le32 (val); } while (0) + +/* this header block gets written whenever a transaction is considered fully flushed, and is more recent than the +** last fully flushed transaction. fully flushed means all the log blocks and all the real blocks are on disk, +** and this transaction does not need to be replayed. +*/ +struct reiserfs_journal_header { + __u32 j_last_flush_trans_id ; /* id of last fully flushed transaction */ + __u32 j_first_unflushed_offset ; /* offset in the log of where to start replay after a crash */ + __u32 j_mount_id ; + /* 12 */ struct journal_params jh_journal; +} ; + +/* biggest tunable defines are right here */ +#define JOURNAL_BLOCK_COUNT 8192 /* number of blocks in the journal */ +#define JOURNAL_TRANS_MAX_DEFAULT 1024 /* biggest possible single transaction, don't change for now (8/3/99) */ +#define JOURNAL_TRANS_MIN_DEFAULT 256 +#define JOURNAL_MAX_BATCH_DEFAULT 900 /* max blocks to batch into one transaction, don't make this any bigger than 900 */ +#define JOURNAL_MIN_RATIO 2 +#define JOURNAL_MAX_COMMIT_AGE 30 +#define JOURNAL_MAX_TRANS_AGE 30 +#define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9) +#ifdef CONFIG_QUOTA +#define REISERFS_QUOTA_TRANS_BLOCKS 2 /* We need to update data and inode (atime) */ +#define REISERFS_QUOTA_INIT_BLOCKS (DQUOT_MAX_WRITES*(JOURNAL_PER_BALANCE_CNT+2)+1) /* 1 balancing, 1 bitmap, 1 data per write + stat data update */ +#else +#define REISERFS_QUOTA_TRANS_BLOCKS 0 +#define REISERFS_QUOTA_INIT_BLOCKS 0 +#endif + +/* both of these can be as low as 1, or as high as you want. The min is the +** number of 4k bitmap nodes preallocated on mount. New nodes are allocated +** as needed, and released when transactions are committed. On release, if +** the current number of nodes is > max, the node is freed, otherwise, +** it is put on a free list for faster use later. +*/ +#define REISERFS_MIN_BITMAP_NODES 10 +#define REISERFS_MAX_BITMAP_NODES 100 + +#define JBH_HASH_SHIFT 13 /* these are based on journal hash size of 8192 */ +#define JBH_HASH_MASK 8191 + +#define _jhashfn(sb,block) \ + (((unsigned long)sb>>L1_CACHE_SHIFT) ^ \ + (((block)<<(JBH_HASH_SHIFT - 6)) ^ ((block) >> 13) ^ ((block) << (JBH_HASH_SHIFT - 12)))) +#define journal_hash(t,sb,block) ((t)[_jhashfn((sb),(block)) & JBH_HASH_MASK]) + +// We need these to make journal.c code more readable +#define journal_find_get_block(s, block) __find_get_block(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) +#define journal_getblk(s, block) __getblk(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) +#define journal_bread(s, block) __bread(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) + +enum reiserfs_bh_state_bits { + BH_JDirty = BH_PrivateStart, /* buffer is in current transaction */ + BH_JDirty_wait, + BH_JNew, /* disk block was taken off free list before + * being in a finished transaction, or + * written to disk. Can be reused immed. */ + BH_JPrepared, + BH_JRestore_dirty, + BH_JTest, // debugging only will go away +}; + +BUFFER_FNS(JDirty, journaled); +TAS_BUFFER_FNS(JDirty, journaled); +BUFFER_FNS(JDirty_wait, journal_dirty); +TAS_BUFFER_FNS(JDirty_wait, journal_dirty); +BUFFER_FNS(JNew, journal_new); +TAS_BUFFER_FNS(JNew, journal_new); +BUFFER_FNS(JPrepared, journal_prepared); +TAS_BUFFER_FNS(JPrepared, journal_prepared); +BUFFER_FNS(JRestore_dirty, journal_restore_dirty); +TAS_BUFFER_FNS(JRestore_dirty, journal_restore_dirty); +BUFFER_FNS(JTest, journal_test); +TAS_BUFFER_FNS(JTest, journal_test); + +/* +** transaction handle which is passed around for all journal calls +*/ +struct reiserfs_transaction_handle { + struct super_block *t_super ; /* super for this FS when journal_begin was + called. saves calls to reiserfs_get_super + also used by nested transactions to make + sure they are nesting on the right FS + _must_ be first in the handle + */ + int t_refcount; + int t_blocks_logged ; /* number of blocks this writer has logged */ + int t_blocks_allocated ; /* number of blocks this writer allocated */ + unsigned long t_trans_id ; /* sanity check, equals the current trans id */ + void *t_handle_save ; /* save existing current->journal_info */ + unsigned displace_new_blocks:1; /* if new block allocation occurres, that block + should be displaced from others */ + struct list_head t_list; +} ; + +/* used to keep track of ordered and tail writes, attached to the buffer + * head through b_journal_head. + */ +struct reiserfs_jh { + struct reiserfs_journal_list *jl; + struct buffer_head *bh; + struct list_head list; +}; + +void reiserfs_free_jh(struct buffer_head *bh); +int reiserfs_add_tail_list(struct inode *inode, struct buffer_head *bh); +int reiserfs_add_ordered_list(struct inode *inode, struct buffer_head *bh); +int journal_mark_dirty(struct reiserfs_transaction_handle *, struct super_block *, struct buffer_head *bh) ; + +static inline int +reiserfs_file_data_log(struct inode *inode) { + if (reiserfs_data_log(inode->i_sb) || + (REISERFS_I(inode)->i_flags & i_data_log)) + return 1 ; + return 0 ; +} + +static inline int reiserfs_transaction_running(struct super_block *s) { + struct reiserfs_transaction_handle *th = current->journal_info ; + if (th && th->t_super == s) + return 1 ; + if (th && th->t_super == NULL) + BUG(); + return 0 ; +} + +int reiserfs_async_progress_wait(struct super_block *s); + +struct reiserfs_transaction_handle * +reiserfs_persistent_transaction(struct super_block *, int count); +int reiserfs_end_persistent_transaction(struct reiserfs_transaction_handle *); +int reiserfs_commit_page(struct inode *inode, struct page *page, + unsigned from, unsigned to); +int reiserfs_flush_old_commits(struct super_block *); +int reiserfs_commit_for_inode(struct inode *) ; +int reiserfs_inode_needs_commit(struct inode *) ; +void reiserfs_update_inode_transaction(struct inode *) ; +void reiserfs_wait_on_write_block(struct super_block *s) ; +void reiserfs_block_writes(struct reiserfs_transaction_handle *th) ; +void reiserfs_allow_writes(struct super_block *s) ; +void reiserfs_check_lock_depth(struct super_block *s, char *caller) ; +int reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh, int wait) ; +void reiserfs_restore_prepared_buffer(struct super_block *, struct buffer_head *bh) ; +int journal_init(struct super_block *, const char * j_dev_name, int old_format, unsigned int) ; +int journal_release(struct reiserfs_transaction_handle*, struct super_block *) ; +int journal_release_error(struct reiserfs_transaction_handle*, struct super_block *) ; +int journal_end(struct reiserfs_transaction_handle *, struct super_block *, unsigned long) ; +int journal_end_sync(struct reiserfs_transaction_handle *, struct super_block *, unsigned long) ; +int journal_mark_freed(struct reiserfs_transaction_handle *, struct super_block *, b_blocknr_t blocknr) ; +int journal_transaction_should_end(struct reiserfs_transaction_handle *, int) ; +int reiserfs_in_journal(struct super_block *p_s_sb, int bmap_nr, int bit_nr, int searchall, b_blocknr_t *next) ; +int journal_begin(struct reiserfs_transaction_handle *, struct super_block *p_s_sb, unsigned long) ; +int journal_join_abort(struct reiserfs_transaction_handle *, struct super_block *p_s_sb, unsigned long) ; +void reiserfs_journal_abort (struct super_block *sb, int errno); +void reiserfs_abort (struct super_block *sb, int errno, const char *fmt, ...); +int reiserfs_allocate_list_bitmaps(struct super_block *s, struct reiserfs_list_bitmap *, int) ; + +void add_save_link (struct reiserfs_transaction_handle * th, + struct inode * inode, int truncate); +int remove_save_link (struct inode * inode, int truncate); + +/* objectid.c */ +__u32 reiserfs_get_unused_objectid (struct reiserfs_transaction_handle *th); +void reiserfs_release_objectid (struct reiserfs_transaction_handle *th, __u32 objectid_to_release); +int reiserfs_convert_objectid_map_v1(struct super_block *) ; + +/* stree.c */ +int B_IS_IN_TREE(const struct buffer_head *); +extern void copy_item_head(struct item_head * p_v_to, + const struct item_head * p_v_from); + +// first key is in cpu form, second - le +extern int comp_short_keys (const struct reiserfs_key * le_key, + const struct cpu_key * cpu_key); +extern void le_key2cpu_key (struct cpu_key * to, const struct reiserfs_key * from); + +// both are in le form +extern int comp_le_keys (const struct reiserfs_key *, const struct reiserfs_key *); +extern int comp_short_le_keys (const struct reiserfs_key *, const struct reiserfs_key *); + +// +// get key version from on disk key - kludge +// +static inline int le_key_version (const struct reiserfs_key * key) +{ + int type; + + type = offset_v2_k_type( &(key->u.k_offset_v2)); + if (type != TYPE_DIRECT && type != TYPE_INDIRECT && type != TYPE_DIRENTRY) + return KEY_FORMAT_3_5; + + return KEY_FORMAT_3_6; + +} + + +static inline void copy_key (struct reiserfs_key *to, const struct reiserfs_key *from) +{ + memcpy (to, from, KEY_SIZE); +} + + +int comp_items (const struct item_head * stored_ih, const struct path * p_s_path); +const struct reiserfs_key * get_rkey (const struct path * p_s_chk_path, + const struct super_block * p_s_sb); +int search_by_key (struct super_block *, const struct cpu_key *, + struct path *, int); +#define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL) +int search_for_position_by_key (struct super_block * p_s_sb, + const struct cpu_key * p_s_cpu_key, + struct path * p_s_search_path); +extern void decrement_bcount (struct buffer_head * p_s_bh); +void decrement_counters_in_path (struct path * p_s_search_path); +void pathrelse (struct path * p_s_search_path); +int reiserfs_check_path(struct path *p) ; +void pathrelse_and_restore (struct super_block *s, struct path * p_s_search_path); + +int reiserfs_insert_item (struct reiserfs_transaction_handle *th, + struct path * path, + const struct cpu_key * key, + struct item_head * ih, + struct inode *inode, const char * body); + +int reiserfs_paste_into_item (struct reiserfs_transaction_handle *th, + struct path * path, + const struct cpu_key * key, + struct inode *inode, + const char * body, int paste_size); + +int reiserfs_cut_from_item (struct reiserfs_transaction_handle *th, + struct path * path, + struct cpu_key * key, + struct inode * inode, + struct page *page, + loff_t new_file_size); + +int reiserfs_delete_item (struct reiserfs_transaction_handle *th, + struct path * path, + const struct cpu_key * key, + struct inode * inode, + struct buffer_head * p_s_un_bh); + +void reiserfs_delete_solid_item (struct reiserfs_transaction_handle *th, + struct inode *inode, struct reiserfs_key * key); +int reiserfs_delete_object (struct reiserfs_transaction_handle *th, struct inode * p_s_inode); +int reiserfs_do_truncate (struct reiserfs_transaction_handle *th, + struct inode * p_s_inode, struct page *, + int update_timestamps); + +#define i_block_size(inode) ((inode)->i_sb->s_blocksize) +#define file_size(inode) ((inode)->i_size) +#define tail_size(inode) (file_size (inode) & (i_block_size (inode) - 1)) + +#define tail_has_to_be_packed(inode) (have_large_tails ((inode)->i_sb)?\ +!STORE_TAIL_IN_UNFM_S1(file_size (inode), tail_size(inode), inode->i_sb->s_blocksize):have_small_tails ((inode)->i_sb)?!STORE_TAIL_IN_UNFM_S2(file_size (inode), tail_size(inode), inode->i_sb->s_blocksize):0 ) + +void padd_item (char * item, int total_length, int length); + +/* inode.c */ +/* args for the create parameter of reiserfs_get_block */ +#define GET_BLOCK_NO_CREATE 0 /* don't create new blocks or convert tails */ +#define GET_BLOCK_CREATE 1 /* add anything you need to find block */ +#define GET_BLOCK_NO_HOLE 2 /* return -ENOENT for file holes */ +#define GET_BLOCK_READ_DIRECT 4 /* read the tail if indirect item not found */ +#define GET_BLOCK_NO_ISEM 8 /* i_sem is not held, don't preallocate */ +#define GET_BLOCK_NO_DANGLE 16 /* don't leave any transactions running */ + +int restart_transaction(struct reiserfs_transaction_handle *th, struct inode *inode, struct path *path); +void reiserfs_read_locked_inode(struct inode * inode, struct reiserfs_iget_args *args) ; +int reiserfs_find_actor(struct inode * inode, void *p) ; +int reiserfs_init_locked_inode(struct inode * inode, void *p) ; +void reiserfs_delete_inode (struct inode * inode); +int reiserfs_write_inode (struct inode * inode, int) ; +int reiserfs_get_block (struct inode * inode, sector_t block, struct buffer_head * bh_result, int create); +struct dentry *reiserfs_get_dentry(struct super_block *, void *) ; +struct dentry *reiserfs_decode_fh(struct super_block *sb, __u32 *data, + int len, int fhtype, + int (*acceptable)(void *contect, struct dentry *de), + void *context) ; +int reiserfs_encode_fh( struct dentry *dentry, __u32 *data, int *lenp, + int connectable ); + +int reiserfs_truncate_file(struct inode *, int update_timestamps) ; +void make_cpu_key (struct cpu_key * cpu_key, struct inode * inode, loff_t offset, + int type, int key_length); +void make_le_item_head (struct item_head * ih, const struct cpu_key * key, + int version, + loff_t offset, int type, int length, int entry_count); +struct inode * reiserfs_iget (struct super_block * s, + const struct cpu_key * key); + + +int reiserfs_new_inode (struct reiserfs_transaction_handle *th, + struct inode * dir, int mode, + const char * symname, loff_t i_size, + struct dentry *dentry, struct inode *inode); + +void reiserfs_update_sd_size (struct reiserfs_transaction_handle *th, + struct inode * inode, loff_t size); + +static inline void reiserfs_update_sd(struct reiserfs_transaction_handle *th, + struct inode *inode) +{ + reiserfs_update_sd_size(th, inode, inode->i_size) ; +} + +void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode ); +void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs ); +int reiserfs_setattr(struct dentry *dentry, struct iattr *attr); + +/* namei.c */ +void set_de_name_and_namelen (struct reiserfs_dir_entry * de); +int search_by_entry_key (struct super_block * sb, const struct cpu_key * key, + struct path * path, + struct reiserfs_dir_entry * de); +struct dentry *reiserfs_get_parent(struct dentry *) ; +/* procfs.c */ + +#if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO ) +#define REISERFS_PROC_INFO +#else +#undef REISERFS_PROC_INFO +#endif + +int reiserfs_proc_info_init( struct super_block *sb ); +int reiserfs_proc_info_done( struct super_block *sb ); +struct proc_dir_entry *reiserfs_proc_register_global( char *name, + read_proc_t *func ); +void reiserfs_proc_unregister_global( const char *name ); +int reiserfs_proc_info_global_init( void ); +int reiserfs_proc_info_global_done( void ); +int reiserfs_global_version_in_proc( char *buffer, char **start, off_t offset, + int count, int *eof, void *data ); + +#if defined( REISERFS_PROC_INFO ) + +#define PROC_EXP( e ) e + +#define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data +#define PROC_INFO_MAX( sb, field, value ) \ + __PINFO( sb ).field = \ + max( REISERFS_SB( sb ) -> s_proc_info_data.field, value ) +#define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) ) +#define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) ) +#define PROC_INFO_BH_STAT( sb, bh, level ) \ + PROC_INFO_INC( sb, sbk_read_at[ ( level ) ] ); \ + PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \ + PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) ) +#else +#define PROC_EXP( e ) +#define VOID_V ( ( void ) 0 ) +#define PROC_INFO_MAX( sb, field, value ) VOID_V +#define PROC_INFO_INC( sb, field ) VOID_V +#define PROC_INFO_ADD( sb, field, val ) VOID_V +#define PROC_INFO_BH_STAT( p_s_sb, p_s_bh, n_node_level ) VOID_V +#endif + +/* dir.c */ +extern struct inode_operations reiserfs_dir_inode_operations; +extern struct inode_operations reiserfs_symlink_inode_operations; +extern struct inode_operations reiserfs_special_inode_operations; +extern struct file_operations reiserfs_dir_operations; + +/* tail_conversion.c */ +int direct2indirect (struct reiserfs_transaction_handle *, struct inode *, struct path *, struct buffer_head *, loff_t); +int indirect2direct (struct reiserfs_transaction_handle *, struct inode *, struct page *, struct path *, const struct cpu_key *, loff_t, char *); +void reiserfs_unmap_buffer(struct buffer_head *) ; + + +/* file.c */ +extern struct inode_operations reiserfs_file_inode_operations; +extern struct file_operations reiserfs_file_operations; +extern struct address_space_operations reiserfs_address_space_operations ; + +/* fix_nodes.c */ +#ifdef CONFIG_REISERFS_CHECK +void * reiserfs_kmalloc (size_t size, int flags, struct super_block * s); +void reiserfs_kfree (const void * vp, size_t size, struct super_block * s); +#else +static inline void *reiserfs_kmalloc(size_t size, int flags, + struct super_block *s) +{ + return kmalloc(size, flags); +} + +static inline void reiserfs_kfree(const void *vp, size_t size, + struct super_block *s) +{ + kfree(vp); +} +#endif + +int fix_nodes (int n_op_mode, struct tree_balance * p_s_tb, + struct item_head * p_s_ins_ih, const void *); +void unfix_nodes (struct tree_balance *); + + +/* prints.c */ +void reiserfs_panic (struct super_block * s, const char * fmt, ...) __attribute__ ( ( noreturn ) ); +void reiserfs_info (struct super_block *s, const char * fmt, ...); +void reiserfs_debug (struct super_block *s, int level, const char * fmt, ...); +void print_indirect_item (struct buffer_head * bh, int item_num); +void store_print_tb (struct tree_balance * tb); +void print_cur_tb (char * mes); +void print_de (struct reiserfs_dir_entry * de); +void print_bi (struct buffer_info * bi, char * mes); +#define PRINT_LEAF_ITEMS 1 /* print all items */ +#define PRINT_DIRECTORY_ITEMS 2 /* print directory items */ +#define PRINT_DIRECT_ITEMS 4 /* print contents of direct items */ +void print_block (struct buffer_head * bh, ...); +void print_bmap (struct super_block * s, int silent); +void print_bmap_block (int i, char * data, int size, int silent); +/*void print_super_block (struct super_block * s, char * mes);*/ +void print_objectid_map (struct super_block * s); +void print_block_head (struct buffer_head * bh, char * mes); +void check_leaf (struct buffer_head * bh); +void check_internal (struct buffer_head * bh); +void print_statistics (struct super_block * s); +char * reiserfs_hashname(int code); + +/* lbalance.c */ +int leaf_move_items (int shift_mode, struct tree_balance * tb, int mov_num, int mov_bytes, struct buffer_head * Snew); +int leaf_shift_left (struct tree_balance * tb, int shift_num, int shift_bytes); +int leaf_shift_right (struct tree_balance * tb, int shift_num, int shift_bytes); +void leaf_delete_items (struct buffer_info * cur_bi, int last_first, int first, int del_num, int del_bytes); +void leaf_insert_into_buf (struct buffer_info * bi, int before, + struct item_head * inserted_item_ih, const char * inserted_item_body, int zeros_number); +void leaf_paste_in_buffer (struct buffer_info * bi, int pasted_item_num, + int pos_in_item, int paste_size, const char * body, int zeros_number); +void leaf_cut_from_buffer (struct buffer_info * bi, int cut_item_num, int pos_in_item, + int cut_size); +void leaf_paste_entries (struct buffer_head * bh, int item_num, int before, + int new_entry_count, struct reiserfs_de_head * new_dehs, const char * records, int paste_size); +/* ibalance.c */ +int balance_internal (struct tree_balance * , int, int, struct item_head * , + struct buffer_head **); + +/* do_balance.c */ +void do_balance_mark_leaf_dirty (struct tree_balance * tb, + struct buffer_head * bh, int flag); +#define do_balance_mark_internal_dirty do_balance_mark_leaf_dirty +#define do_balance_mark_sb_dirty do_balance_mark_leaf_dirty + +void do_balance (struct tree_balance * tb, struct item_head * ih, + const char * body, int flag); +void reiserfs_invalidate_buffer (struct tree_balance * tb, struct buffer_head * bh); + +int get_left_neighbor_position (struct tree_balance * tb, int h); +int get_right_neighbor_position (struct tree_balance * tb, int h); +void replace_key (struct tree_balance * tb, struct buffer_head *, int, struct buffer_head *, int); +void make_empty_node (struct buffer_info *); +struct buffer_head * get_FEB (struct tree_balance *); + +/* bitmap.c */ + +/* structure contains hints for block allocator, and it is a container for + * arguments, such as node, search path, transaction_handle, etc. */ + struct __reiserfs_blocknr_hint { + struct inode * inode; /* inode passed to allocator, if we allocate unf. nodes */ + long block; /* file offset, in blocks */ + struct reiserfs_key key; + struct path * path; /* search path, used by allocator to deternine search_start by + * various ways */ + struct reiserfs_transaction_handle * th; /* transaction handle is needed to log super blocks and + * bitmap blocks changes */ + b_blocknr_t beg, end; + b_blocknr_t search_start; /* a field used to transfer search start value (block number) + * between different block allocator procedures + * (determine_search_start() and others) */ + int prealloc_size; /* is set in determine_prealloc_size() function, used by underlayed + * function that do actual allocation */ + + unsigned formatted_node:1; /* the allocator uses different polices for getting disk space for + * formatted/unformatted blocks with/without preallocation */ + unsigned preallocate:1; +}; + +typedef struct __reiserfs_blocknr_hint reiserfs_blocknr_hint_t; + +int reiserfs_parse_alloc_options (struct super_block *, char *); +void reiserfs_init_alloc_options (struct super_block *s); + +/* + * given a directory, this will tell you what packing locality + * to use for a new object underneat it. The locality is returned + * in disk byte order (le). + */ +u32 reiserfs_choose_packing(struct inode *dir); + +int is_reusable (struct super_block * s, b_blocknr_t block, int bit_value); +void reiserfs_free_block (struct reiserfs_transaction_handle *th, struct inode *, b_blocknr_t, int for_unformatted); +int reiserfs_allocate_blocknrs(reiserfs_blocknr_hint_t *, b_blocknr_t * , int, int); +extern inline int reiserfs_new_form_blocknrs (struct tree_balance * tb, + b_blocknr_t *new_blocknrs, int amount_needed) +{ + reiserfs_blocknr_hint_t hint = { + .th = tb->transaction_handle, + .path = tb->tb_path, + .inode = NULL, + .key = tb->key, + .block = 0, + .formatted_node = 1 + }; + return reiserfs_allocate_blocknrs(&hint, new_blocknrs, amount_needed, 0); +} + +extern inline int reiserfs_new_unf_blocknrs (struct reiserfs_transaction_handle *th, + struct inode *inode, + b_blocknr_t *new_blocknrs, + struct path * path, long block) +{ + reiserfs_blocknr_hint_t hint = { + .th = th, + .path = path, + .inode = inode, + .block = block, + .formatted_node = 0, + .preallocate = 0 + }; + return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); +} + +#ifdef REISERFS_PREALLOCATE +extern inline int reiserfs_new_unf_blocknrs2(struct reiserfs_transaction_handle *th, + struct inode * inode, + b_blocknr_t *new_blocknrs, + struct path * path, long block) +{ + reiserfs_blocknr_hint_t hint = { + .th = th, + .path = path, + .inode = inode, + .block = block, + .formatted_node = 0, + .preallocate = 1 + }; + return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); +} + +void reiserfs_discard_prealloc (struct reiserfs_transaction_handle *th, + struct inode * inode); +void reiserfs_discard_all_prealloc (struct reiserfs_transaction_handle *th); +#endif +void reiserfs_claim_blocks_to_be_allocated( struct super_block *sb, int blocks); +void reiserfs_release_claimed_blocks( struct super_block *sb, int blocks); +int reiserfs_can_fit_pages(struct super_block *sb); + +/* hashes.c */ +__u32 keyed_hash (const signed char *msg, int len); +__u32 yura_hash (const signed char *msg, int len); +__u32 r5_hash (const signed char *msg, int len); + +/* the ext2 bit routines adjust for big or little endian as +** appropriate for the arch, so in our laziness we use them rather +** than using the bit routines they call more directly. These +** routines must be used when changing on disk bitmaps. */ +#define reiserfs_test_and_set_le_bit ext2_set_bit +#define reiserfs_test_and_clear_le_bit ext2_clear_bit +#define reiserfs_test_le_bit ext2_test_bit +#define reiserfs_find_next_zero_le_bit ext2_find_next_zero_bit + +/* sometimes reiserfs_truncate may require to allocate few new blocks + to perform indirect2direct conversion. People probably used to + think, that truncate should work without problems on a filesystem + without free disk space. They may complain that they can not + truncate due to lack of free disk space. This spare space allows us + to not worry about it. 500 is probably too much, but it should be + absolutely safe */ +#define SPARE_SPACE 500 + + +/* prototypes from ioctl.c */ +int reiserfs_ioctl (struct inode * inode, struct file * filp, + unsigned int cmd, unsigned long arg); + +/* ioctl's command */ +#define REISERFS_IOC_UNPACK _IOW(0xCD,1,long) +/* define following flags to be the same as in ext2, so that chattr(1), + lsattr(1) will work with us. */ +#define REISERFS_IOC_GETFLAGS EXT2_IOC_GETFLAGS +#define REISERFS_IOC_SETFLAGS EXT2_IOC_SETFLAGS +#define REISERFS_IOC_GETVERSION EXT2_IOC_GETVERSION +#define REISERFS_IOC_SETVERSION EXT2_IOC_SETVERSION + +/* Locking primitives */ +/* Right now we are still falling back to (un)lock_kernel, but eventually that + would evolve into real per-fs locks */ +#define reiserfs_write_lock( sb ) lock_kernel() +#define reiserfs_write_unlock( sb ) unlock_kernel() + +/* xattr stuff */ +#define REISERFS_XATTR_DIR_SEM(s) (REISERFS_SB(s)->xattr_dir_sem) + +#endif /* _LINUX_REISER_FS_H */ + + Added: vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_i.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/reise…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_i.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_i.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,64 @@ +#ifndef _REISER_FS_I +#define _REISER_FS_I + +#include <linux/list.h> + +struct reiserfs_journal_list; + +/** bitmasks for i_flags field in reiserfs-specific part of inode */ +typedef enum { + /** this says what format of key do all items (but stat data) of + an object have. If this is set, that format is 3.6 otherwise + - 3.5 */ + i_item_key_version_mask = 0x0001, + /** If this is unset, object has 3.5 stat data, otherwise, it has + 3.6 stat data with 64bit size, 32bit nlink etc. */ + i_stat_data_version_mask = 0x0002, + /** file might need tail packing on close */ + i_pack_on_close_mask = 0x0004, + /** don't pack tail of file */ + i_nopack_mask = 0x0008, + /** If those is set, "safe link" was created for this file during + truncate or unlink. Safe link is used to avoid leakage of disk + space on crash with some files open, but unlinked. */ + i_link_saved_unlink_mask = 0x0010, + i_link_saved_truncate_mask = 0x0020, + i_priv_object = 0x0080, + i_has_xattr_dir = 0x0100, + i_data_log = 0x0200, +} reiserfs_inode_flags; + + +struct reiserfs_inode_info { + __u32 i_key [4];/* key is still 4 32 bit integers */ + /** transient inode flags that are never stored on disk. Bitmasks + for this field are defined above. */ + __u32 i_flags; + + __u32 i_first_direct_byte; // offset of first byte stored in direct item. + + /* copy of persistent inode flags read from sd_attrs. */ + __u32 i_attrs; + + int i_prealloc_block; /* first unused block of a sequence of unused blocks */ + int i_prealloc_count; /* length of that sequence */ + struct list_head i_prealloc_list; /* per-transaction list of inodes which + * have preallocated blocks */ + + unsigned new_packing_locality:1; /* new_packig_locality is created; new blocks + * for the contents of this directory should be + * displaced */ + + /* we use these for fsync or O_SYNC to decide which transaction + ** needs to be committed in order for this inode to be properly + ** flushed */ + unsigned long i_trans_id ; + struct reiserfs_journal_list *i_jl; + + struct posix_acl *i_acl_access; + struct posix_acl *i_acl_default; + struct rw_semaphore xattr_sem; + struct inode vfs_inode; +}; + +#endif Added: vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_sb.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/reise…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_sb.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_fs_sb.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,535 @@ +/* Copyright 1996-2000 Hans Reiser, see reiserfs/README for licensing + * and copyright details */ + +#ifndef _LINUX_REISER_FS_SB +#define _LINUX_REISER_FS_SB + +#ifdef __KERNEL__ +#include <linux/workqueue.h> +#include <linux/rwsem.h> +#endif + +typedef enum { + reiserfs_attrs_cleared = 0x00000001, +} reiserfs_super_block_flags; + +/* struct reiserfs_super_block accessors/mutators + * since this is a disk structure, it will always be in + * little endian format. */ +#define sb_block_count(sbp) (le32_to_cpu((sbp)->s_v1.s_block_count)) +#define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = cpu_to_le32(v)) +#define sb_free_blocks(sbp) (le32_to_cpu((sbp)->s_v1.s_free_blocks)) +#define set_sb_free_blocks(sbp,v) ((sbp)->s_v1.s_free_blocks = cpu_to_le32(v)) +#define sb_root_block(sbp) (le32_to_cpu((sbp)->s_v1.s_root_block)) +#define set_sb_root_block(sbp,v) ((sbp)->s_v1.s_root_block = cpu_to_le32(v)) + +#define sb_jp_journal_1st_block(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_1st_block)) +#define set_sb_jp_journal_1st_block(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_1st_block = cpu_to_le32(v)) +#define sb_jp_journal_dev(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_dev)) +#define set_sb_jp_journal_dev(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_dev = cpu_to_le32(v)) +#define sb_jp_journal_size(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_size)) +#define set_sb_jp_journal_size(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_size = cpu_to_le32(v)) +#define sb_jp_journal_trans_max(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_trans_max)) +#define set_sb_jp_journal_trans_max(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_trans_max = cpu_to_le32(v)) +#define sb_jp_journal_magic(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_magic)) +#define set_sb_jp_journal_magic(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_magic = cpu_to_le32(v)) +#define sb_jp_journal_max_batch(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_batch)) +#define set_sb_jp_journal_max_batch(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_max_batch = cpu_to_le32(v)) +#define sb_jp_jourmal_max_commit_age(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_commit_age)) +#define set_sb_jp_journal_max_commit_age(sbp,v) \ + ((sbp)->s_v1.s_journal.jp_journal_max_commit_age = cpu_to_le32(v)) + +#define sb_blocksize(sbp) (le16_to_cpu((sbp)->s_v1.s_blocksize)) +#define set_sb_blocksize(sbp,v) ((sbp)->s_v1.s_blocksize = cpu_to_le16(v)) +#define sb_oid_maxsize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_maxsize)) +#define set_sb_oid_maxsize(sbp,v) ((sbp)->s_v1.s_oid_maxsize = cpu_to_le16(v)) +#define sb_oid_cursize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_cursize)) +#define set_sb_oid_cursize(sbp,v) ((sbp)->s_v1.s_oid_cursize = cpu_to_le16(v)) +#define sb_umount_state(sbp) (le16_to_cpu((sbp)->s_v1.s_umount_state)) +#define set_sb_umount_state(sbp,v) ((sbp)->s_v1.s_umount_state = cpu_to_le16(v)) +#define sb_fs_state(sbp) (le16_to_cpu((sbp)->s_v1.s_fs_state)) +#define set_sb_fs_state(sbp,v) ((sbp)->s_v1.s_fs_state = cpu_to_le16(v)) +#define sb_hash_function_code(sbp) \ + (le32_to_cpu((sbp)->s_v1.s_hash_function_code)) +#define set_sb_hash_function_code(sbp,v) \ + ((sbp)->s_v1.s_hash_function_code = cpu_to_le32(v)) +#define sb_tree_height(sbp) (le16_to_cpu((sbp)->s_v1.s_tree_height)) +#define set_sb_tree_height(sbp,v) ((sbp)->s_v1.s_tree_height = cpu_to_le16(v)) +#define sb_bmap_nr(sbp) (le16_to_cpu((sbp)->s_v1.s_bmap_nr)) +#define set_sb_bmap_nr(sbp,v) ((sbp)->s_v1.s_bmap_nr = cpu_to_le16(v)) +#define sb_version(sbp) (le16_to_cpu((sbp)->s_v1.s_version)) +#define set_sb_version(sbp,v) ((sbp)->s_v1.s_version = cpu_to_le16(v)) + +#define sb_reserved_for_journal(sbp) \ + (le16_to_cpu((sbp)->s_v1.s_reserved_for_journal)) +#define set_sb_reserved_for_journal(sbp,v) \ + ((sbp)->s_v1.s_reserved_for_journal = cpu_to_le16(v)) + +/* LOGGING -- */ + +/* These all interelate for performance. +** +** If the journal block count is smaller than n transactions, you lose speed. +** I don't know what n is yet, I'm guessing 8-16. +** +** typical transaction size depends on the application, how often fsync is +** called, and how many metadata blocks you dirty in a 30 second period. +** The more small files (<16k) you use, the larger your transactions will +** be. +** +** If your journal fills faster than dirty buffers get flushed to disk, it must flush them before allowing the journal +** to wrap, which slows things down. If you need high speed meta data updates, the journal should be big enough +** to prevent wrapping before dirty meta blocks get to disk. +** +** If the batch max is smaller than the transaction max, you'll waste space at the end of the journal +** because journal_end sets the next transaction to start at 0 if the next transaction has any chance of wrapping. +** +** The large the batch max age, the better the speed, and the more meta data changes you'll lose after a crash. +** +*/ + +/* don't mess with these for a while */ + /* we have a node size define somewhere in reiserfs_fs.h. -Hans */ +#define JOURNAL_BLOCK_SIZE 4096 /* BUG gotta get rid of this */ +#define JOURNAL_MAX_CNODE 1500 /* max cnodes to allocate. */ +#define JOURNAL_HASH_SIZE 8192 +#define JOURNAL_NUM_BITMAPS 5 /* number of copies of the bitmaps to have floating. Must be >= 2 */ + +/* One of these for every block in every transaction +** Each one is in two hash tables. First, a hash of the current transaction, and after journal_end, a +** hash of all the in memory transactions. +** next and prev are used by the current transaction (journal_hash). +** hnext and hprev are used by journal_list_hash. If a block is in more than one transaction, the journal_list_hash +** links it in multiple times. This allows flush_journal_list to remove just the cnode belonging +** to a given transaction. +*/ +struct reiserfs_journal_cnode { + struct buffer_head *bh ; /* real buffer head */ + struct super_block *sb ; /* dev of real buffer head */ + __u32 blocknr ; /* block number of real buffer head, == 0 when buffer on disk */ + long state ; + struct reiserfs_journal_list *jlist ; /* journal list this cnode lives in */ + struct reiserfs_journal_cnode *next ; /* next in transaction list */ + struct reiserfs_journal_cnode *prev ; /* prev in transaction list */ + struct reiserfs_journal_cnode *hprev ; /* prev in hash list */ + struct reiserfs_journal_cnode *hnext ; /* next in hash list */ +}; + +struct reiserfs_bitmap_node { + int id ; + char *data ; + struct list_head list ; +} ; + +struct reiserfs_list_bitmap { + struct reiserfs_journal_list *journal_list ; + struct reiserfs_bitmap_node **bitmaps ; +} ; + +/* +** one of these for each transaction. The most important part here is the j_realblock. +** this list of cnodes is used to hash all the blocks in all the commits, to mark all the +** real buffer heads dirty once all the commits hit the disk, +** and to make sure every real block in a transaction is on disk before allowing the log area +** to be overwritten */ +struct reiserfs_journal_list { + unsigned long j_start ; + unsigned long j_state; + unsigned long j_len ; + atomic_t j_nonzerolen ; + atomic_t j_commit_left ; + atomic_t j_older_commits_done ; /* all commits older than this on disk*/ + struct semaphore j_commit_lock; + unsigned long j_trans_id ; + time_t j_timestamp ; + struct reiserfs_list_bitmap *j_list_bitmap ; + struct buffer_head *j_commit_bh ; /* commit buffer head */ + struct reiserfs_journal_cnode *j_realblock ; + struct reiserfs_journal_cnode *j_freedlist ; /* list of buffers that were freed during this trans. free each of these on flush */ + /* time ordered list of all active transactions */ + struct list_head j_list; + + /* time ordered list of all transactions we haven't tried to flush yet */ + struct list_head j_working_list; + + /* list of tail conversion targets in need of flush before commit */ + struct list_head j_tail_bh_list; + /* list of data=ordered buffers in need of flush before commit */ + struct list_head j_bh_list; + int j_refcount; +} ; + +struct reiserfs_journal { + struct buffer_head ** j_ap_blocks ; /* journal blocks on disk */ + struct reiserfs_journal_cnode *j_last ; /* newest journal block */ + struct reiserfs_journal_cnode *j_first ; /* oldest journal block. start here for traverse */ + + struct file *j_dev_file; + struct block_device *j_dev_bd; + int j_1st_reserved_block; /* first block on s_dev of reserved area journal */ + + long j_state ; + unsigned long j_trans_id ; + unsigned long j_mount_id ; + unsigned long j_start ; /* start of current waiting commit (index into j_ap_blocks) */ + unsigned long j_len ; /* lenght of current waiting commit */ + unsigned long j_len_alloc ; /* number of buffers requested by journal_begin() */ + atomic_t j_wcount ; /* count of writers for current commit */ + unsigned long j_bcount ; /* batch count. allows turning X transactions into 1 */ + unsigned long j_first_unflushed_offset ; /* first unflushed transactions offset */ + unsigned long j_last_flush_trans_id ; /* last fully flushed journal timestamp */ + struct buffer_head *j_header_bh ; + + time_t j_trans_start_time ; /* time this transaction started */ + struct semaphore j_lock; + struct semaphore j_flush_sem; + wait_queue_head_t j_join_wait ; /* wait for current transaction to finish before starting new one */ + atomic_t j_jlock ; /* lock for j_join_wait */ + int j_list_bitmap_index ; /* number of next list bitmap to use */ + int j_must_wait ; /* no more journal begins allowed. MUST sleep on j_join_wait */ + int j_next_full_flush ; /* next journal_end will flush all journal list */ + int j_next_async_flush ; /* next journal_end will flush all async commits */ + + int j_cnode_used ; /* number of cnodes on the used list */ + int j_cnode_free ; /* number of cnodes on the free list */ + + unsigned int j_trans_max ; /* max number of blocks in a transaction. */ + unsigned int j_max_batch ; /* max number of blocks to batch into a trans */ + unsigned int j_max_commit_age ; /* in seconds, how old can an async commit be */ + unsigned int j_max_trans_age ; /* in seconds, how old can a transaction be */ + unsigned int j_default_max_commit_age ; /* the default for the max commit age */ + + struct reiserfs_journal_cnode *j_cnode_free_list ; + struct reiserfs_journal_cnode *j_cnode_free_orig ; /* orig pointer returned from vmalloc */ + + struct reiserfs_journal_list *j_current_jl; + int j_free_bitmap_nodes ; + int j_used_bitmap_nodes ; + + int j_num_lists; /* total number of active transactions */ + int j_num_work_lists; /* number that need attention from kreiserfsd */ + + /* debugging to make sure things are flushed in order */ + int j_last_flush_id; + + /* debugging to make sure things are committed in order */ + int j_last_commit_id; + + struct list_head j_bitmap_nodes ; + struct list_head j_dirty_buffers ; + spinlock_t j_dirty_buffers_lock ; /* protects j_dirty_buffers */ + + /* list of all active transactions */ + struct list_head j_journal_list; + /* lists that haven't been touched by writeback attempts */ + struct list_head j_working_list; + + struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS] ; /* array of bitmaps to record the deleted blocks */ + struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for real buffer heads in current trans */ + struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE] ; /* hash table for all the real buffer heads in all + the transactions */ + struct list_head j_prealloc_list; /* list of inodes which have preallocated blocks */ + int j_persistent_trans; + unsigned long j_max_trans_size ; + unsigned long j_max_batch_size ; + + int j_errno; + + /* when flushing ordered buffers, throttle new ordered writers */ + struct work_struct j_work; + atomic_t j_async_throttle; +}; + +enum journal_state_bits { + J_WRITERS_BLOCKED = 1, /* set when new writers not allowed */ + J_WRITERS_QUEUED, /* set when log is full due to too many writers */ + J_ABORTED, /* set when log is aborted */ +}; + + +#define JOURNAL_DESC_MAGIC "ReIsErLB" /* ick. magic string to find desc blocks in the journal */ + +typedef __u32 (*hashf_t) (const signed char *, int); + +struct reiserfs_bitmap_info +{ + // FIXME: Won't work with block sizes > 8K + __u16 first_zero_hint; + __u16 free_count; + struct buffer_head *bh; /* the actual bitmap */ +}; + +struct proc_dir_entry; + +#if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO ) +typedef unsigned long int stat_cnt_t; +typedef struct reiserfs_proc_info_data +{ + spinlock_t lock; + int exiting; + int max_hash_collisions; + + stat_cnt_t breads; + stat_cnt_t bread_miss; + stat_cnt_t search_by_key; + stat_cnt_t search_by_key_fs_changed; + stat_cnt_t search_by_key_restarted; + + stat_cnt_t insert_item_restarted; + stat_cnt_t paste_into_item_restarted; + stat_cnt_t cut_from_item_restarted; + stat_cnt_t delete_solid_item_restarted; + stat_cnt_t delete_item_restarted; + + stat_cnt_t leaked_oid; + stat_cnt_t leaves_removable; + + /* balances per level. Use explicit 5 as MAX_HEIGHT is not visible yet. */ + stat_cnt_t balance_at[ 5 ]; /* XXX */ + /* sbk == search_by_key */ + stat_cnt_t sbk_read_at[ 5 ]; /* XXX */ + stat_cnt_t sbk_fs_changed[ 5 ]; + stat_cnt_t sbk_restarted[ 5 ]; + stat_cnt_t items_at[ 5 ]; /* XXX */ + stat_cnt_t free_at[ 5 ]; /* XXX */ + stat_cnt_t can_node_be_removed[ 5 ]; /* XXX */ + long int lnum[ 5 ]; /* XXX */ + long int rnum[ 5 ]; /* XXX */ + long int lbytes[ 5 ]; /* XXX */ + long int rbytes[ 5 ]; /* XXX */ + stat_cnt_t get_neighbors[ 5 ]; + stat_cnt_t get_neighbors_restart[ 5 ]; + stat_cnt_t need_l_neighbor[ 5 ]; + stat_cnt_t need_r_neighbor[ 5 ]; + + stat_cnt_t free_block; + struct __scan_bitmap_stats { + stat_cnt_t call; + stat_cnt_t wait; + stat_cnt_t bmap; + stat_cnt_t retry; + stat_cnt_t in_journal_hint; + stat_cnt_t in_journal_nohint; + stat_cnt_t stolen; + } scan_bitmap; + struct __journal_stats { + stat_cnt_t in_journal; + stat_cnt_t in_journal_bitmap; + stat_cnt_t in_journal_reusable; + stat_cnt_t lock_journal; + stat_cnt_t lock_journal_wait; + stat_cnt_t journal_being; + stat_cnt_t journal_relock_writers; + stat_cnt_t journal_relock_wcount; + stat_cnt_t mark_dirty; + stat_cnt_t mark_dirty_already; + stat_cnt_t mark_dirty_notjournal; + stat_cnt_t restore_prepared; + stat_cnt_t prepare; + stat_cnt_t prepare_retry; + } journal; +} reiserfs_proc_info_data_t; +#else +typedef struct reiserfs_proc_info_data +{} reiserfs_proc_info_data_t; +#endif + +/* reiserfs union of in-core super block data */ +struct reiserfs_sb_info +{ + struct buffer_head * s_sbh; /* Buffer containing the super block */ + /* both the comment and the choice of + name are unclear for s_rs -Hans */ + struct reiserfs_super_block * s_rs; /* Pointer to the super block in the buffer */ + struct reiserfs_bitmap_info * s_ap_bitmap; + struct reiserfs_journal *s_journal ; /* pointer to journal information */ + unsigned short s_mount_state; /* reiserfs state (valid, invalid) */ + + /* Comment? -Hans */ + void (*end_io_handler)(struct buffer_head *, int); + hashf_t s_hash_function; /* pointer to function which is used + to sort names in directory. Set on + mount */ + unsigned long s_mount_opt; /* reiserfs's mount options are set + here (currently - NOTAIL, NOLOG, + REPLAYONLY) */ + + struct { /* This is a structure that describes block allocator options */ + unsigned long bits; /* Bitfield for enable/disable kind of options */ + unsigned long large_file_size; /* size started from which we consider file to be a large one(in blocks) */ + int border; /* percentage of disk, border takes */ + int preallocmin; /* Minimal file size (in blocks) starting from which we do preallocations */ + int preallocsize; /* Number of blocks we try to prealloc when file + reaches preallocmin size (in blocks) or + prealloc_list is empty. */ + } s_alloc_options; + + /* Comment? -Hans */ + wait_queue_head_t s_wait; + /* To be obsoleted soon by per buffer seals.. -Hans */ + atomic_t s_generation_counter; // increased by one every time the + // tree gets re-balanced + unsigned long s_properties; /* File system properties. Currently holds + on-disk FS format */ + + /* session statistics */ + int s_kmallocs; + int s_disk_reads; + int s_disk_writes; + int s_fix_nodes; + int s_do_balance; + int s_unneeded_left_neighbor; + int s_good_search_by_key_reada; + int s_bmaps; + int s_bmaps_without_search; + int s_direct2indirect; + int s_indirect2direct; + /* set up when it's ok for reiserfs_read_inode2() to read from + disk inode with nlink==0. Currently this is only used during + finish_unfinished() processing at mount time */ + int s_is_unlinked_ok; + reiserfs_proc_info_data_t s_proc_info_data; + struct proc_dir_entry *procdir; + int reserved_blocks; /* amount of blocks reserved for further allocations */ + spinlock_t bitmap_lock; /* this lock on now only used to protect reserved_blocks variable */ + struct dentry *priv_root; /* root of /.reiserfs_priv */ + struct dentry *xattr_root; /* root of /.reiserfs_priv/.xa */ + struct rw_semaphore xattr_dir_sem; + + int j_errno; +#ifdef CONFIG_QUOTA + char *s_qf_names[MAXQUOTAS]; + int s_jquota_fmt; +#endif +}; + +/* Definitions of reiserfs on-disk properties: */ +#define REISERFS_3_5 0 +#define REISERFS_3_6 1 + +enum reiserfs_mount_options { +/* Mount options */ + REISERFS_LARGETAIL, /* large tails will be created in a session */ + REISERFS_SMALLTAIL, /* small (for files less than block size) tails will be created in a session */ + REPLAYONLY, /* replay journal and return 0. Use by fsck */ + REISERFS_CONVERT, /* -o conv: causes conversion of old + format super block to the new + format. If not specified - old + partition will be dealt with in a + manner of 3.5.x */ + +/* -o hash={tea, rupasov, r5, detect} is meant for properly mounting +** reiserfs disks from 3.5.19 or earlier. 99% of the time, this option +** is not required. If the normal autodection code can't determine which +** hash to use (because both hases had the same value for a file) +** use this option to force a specific hash. It won't allow you to override +** the existing hash on the FS, so if you have a tea hash disk, and mount +** with -o hash=rupasov, the mount will fail. +*/ + FORCE_TEA_HASH, /* try to force tea hash on mount */ + FORCE_RUPASOV_HASH, /* try to force rupasov hash on mount */ + FORCE_R5_HASH, /* try to force rupasov hash on mount */ + FORCE_HASH_DETECT, /* try to detect hash function on mount */ + + REISERFS_DATA_LOG, + REISERFS_DATA_ORDERED, + REISERFS_DATA_WRITEBACK, + +/* used for testing experimental features, makes benchmarking new + features with and without more convenient, should never be used by + users in any code shipped to users (ideally) */ + + REISERFS_NO_BORDER, + REISERFS_NO_UNHASHED_RELOCATION, + REISERFS_HASHED_RELOCATION, + REISERFS_ATTRS, + REISERFS_XATTRS, + REISERFS_XATTRS_USER, + REISERFS_POSIXACL, + REISERFS_BARRIER_NONE, + REISERFS_BARRIER_FLUSH, + + /* Actions on error */ + REISERFS_ERROR_PANIC, + REISERFS_ERROR_RO, + REISERFS_ERROR_CONTINUE, + + REISERFS_TEST1, + REISERFS_TEST2, + REISERFS_TEST3, + REISERFS_TEST4, + REISERFS_UNSUPPORTED_OPT, +}; + +#define reiserfs_r5_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_R5_HASH)) +#define reiserfs_rupasov_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_RUPASOV_HASH)) +#define reiserfs_tea_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_TEA_HASH)) +#define reiserfs_hash_detect(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_HASH_DETECT)) +#define reiserfs_no_border(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_BORDER)) +#define reiserfs_no_unhashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_UNHASHED_RELOCATION)) +#define reiserfs_hashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_HASHED_RELOCATION)) +#define reiserfs_test4(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_TEST4)) + +#define have_large_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_LARGETAIL)) +#define have_small_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_SMALLTAIL)) +#define replay_only(s) (REISERFS_SB(s)->s_mount_opt & (1 << REPLAYONLY)) +#define reiserfs_attrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ATTRS)) +#define old_format_only(s) (REISERFS_SB(s)->s_properties & (1 << REISERFS_3_5)) +#define convert_reiserfs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_CONVERT)) +#define reiserfs_data_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_LOG)) +#define reiserfs_data_ordered(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_ORDERED)) +#define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK)) +#define reiserfs_xattrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS)) +#define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER)) +#define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL)) +#define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s)) +#define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE)) +#define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH)) + +#define reiserfs_error_panic(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_PANIC)) +#define reiserfs_error_ro(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_RO)) + +void reiserfs_file_buffer (struct buffer_head * bh, int list); +extern struct file_system_type reiserfs_fs_type; +int reiserfs_resize(struct super_block *, unsigned long) ; + +#define CARRY_ON 0 +#define SCHEDULE_OCCURRED 1 + + +#define SB_BUFFER_WITH_SB(s) (REISERFS_SB(s)->s_sbh) +#define SB_JOURNAL(s) (REISERFS_SB(s)->s_journal) +#define SB_JOURNAL_1st_RESERVED_BLOCK(s) (SB_JOURNAL(s)->j_1st_reserved_block) +#define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free) +#define SB_AP_BITMAP(s) (REISERFS_SB(s)->s_ap_bitmap) + +#define SB_DISK_JOURNAL_HEAD(s) (SB_JOURNAL(s)->j_header_bh->) + +/* A safe version of the "bdevname", which returns the "s_id" field of + * a superblock or else "Null superblock" if the super block is NULL. + */ +static inline char *reiserfs_bdevname(struct super_block *s) +{ + return (s == NULL) ? "Null superblock" : s -> s_id; +} + +#define reiserfs_is_journal_aborted(journal) (unlikely (__reiserfs_is_journal_aborted (journal))) +static inline int __reiserfs_is_journal_aborted (struct reiserfs_journal *journal) +{ + return test_bit (J_ABORTED, &journal->j_state); +} + +#endif /* _LINUX_REISER_FS_SB */ Added: vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_xattr.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/reise…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_xattr.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/reiserfs_xattr.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,132 @@ +/* + File: linux/reiserfs_xattr.h +*/ + +#include <linux/config.h> +#include <linux/init.h> +#include <linux/xattr.h> + +/* Magic value in header */ +#define REISERFS_XATTR_MAGIC 0x52465841 /* "RFXA" */ + +struct reiserfs_xattr_header { + __u32 h_magic; /* magic number for identification */ + __u32 h_hash; /* hash of the value */ +}; + +#ifdef __KERNEL__ + +struct reiserfs_xattr_handler { + char *prefix; + int (*init)(void); + void (*exit)(void); + int (*get)(struct inode *inode, const char *name, void *buffer, + size_t size); + int (*set)(struct inode *inode, const char *name, const void *buffer, + size_t size, int flags); + int (*del)(struct inode *inode, const char *name); + int (*list)(struct inode *inode, const char *name, int namelen, char *out); + struct list_head handlers; +}; + + +#ifdef CONFIG_REISERFS_FS_XATTR +#define is_reiserfs_priv_object(inode) (REISERFS_I(inode)->i_flags & i_priv_object) +#define has_xattr_dir(inode) (REISERFS_I(inode)->i_flags & i_has_xattr_dir) +ssize_t reiserfs_getxattr (struct dentry *dentry, const char *name, + void *buffer, size_t size); +int reiserfs_setxattr (struct dentry *dentry, const char *name, + const void *value, size_t size, int flags); +ssize_t reiserfs_listxattr (struct dentry *dentry, char *buffer, size_t size); +int reiserfs_removexattr (struct dentry *dentry, const char *name); +int reiserfs_delete_xattrs (struct inode *inode); +int reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs); +int reiserfs_xattr_init (struct super_block *sb, int mount_flags); +int reiserfs_permission (struct inode *inode, int mask, struct nameidata *nd); +int reiserfs_permission_locked (struct inode *inode, int mask, struct nameidata *nd); + +int reiserfs_xattr_del (struct inode *, const char *); +int reiserfs_xattr_get (const struct inode *, const char *, void *, size_t); +int reiserfs_xattr_set (struct inode *, const char *, const void *, + size_t, int); + +extern struct reiserfs_xattr_handler user_handler; +extern struct reiserfs_xattr_handler trusted_handler; +#ifdef CONFIG_REISERFS_FS_SECURITY +extern struct reiserfs_xattr_handler security_handler; +#endif + +int reiserfs_xattr_register_handlers (void) __init; +void reiserfs_xattr_unregister_handlers (void); + +static inline void +reiserfs_write_lock_xattrs(struct super_block *sb) +{ + down_write (&REISERFS_XATTR_DIR_SEM(sb)); +} +static inline void +reiserfs_write_unlock_xattrs(struct super_block *sb) +{ + up_write (&REISERFS_XATTR_DIR_SEM(sb)); +} +static inline void +reiserfs_read_lock_xattrs(struct super_block *sb) +{ + down_read (&REISERFS_XATTR_DIR_SEM(sb)); +} + +static inline void +reiserfs_read_unlock_xattrs(struct super_block *sb) +{ + up_read (&REISERFS_XATTR_DIR_SEM(sb)); +} + +static inline void +reiserfs_write_lock_xattr_i(struct inode *inode) +{ + down_write (&REISERFS_I(inode)->xattr_sem); +} +static inline void +reiserfs_write_unlock_xattr_i(struct inode *inode) +{ + up_write (&REISERFS_I(inode)->xattr_sem); +} +static inline void +reiserfs_read_lock_xattr_i(struct inode *inode) +{ + down_read (&REISERFS_I(inode)->xattr_sem); +} + +static inline void +reiserfs_read_unlock_xattr_i(struct inode *inode) +{ + up_read (&REISERFS_I(inode)->xattr_sem); +} + +#else + +#define is_reiserfs_priv_object(inode) 0 +#define reiserfs_getxattr NULL +#define reiserfs_setxattr NULL +#define reiserfs_listxattr NULL +#define reiserfs_removexattr NULL +#define reiserfs_write_lock_xattrs(sb) +#define reiserfs_write_unlock_xattrs(sb) +#define reiserfs_read_lock_xattrs(sb) +#define reiserfs_read_unlock_xattrs(sb) + +#define reiserfs_permission NULL + +#define reiserfs_xattr_register_handlers() 0 +#define reiserfs_xattr_unregister_handlers() + +static inline int reiserfs_delete_xattrs (struct inode *inode) { return 0; }; +static inline int reiserfs_chown_xattrs (struct inode *inode, struct iattr *attrs) { return 0; }; +static inline int reiserfs_xattr_init (struct super_block *sb, int mount_flags) +{ + sb->s_flags = (sb->s_flags & ~MS_POSIXACL); /* to be sure */ + return 0; +}; +#endif + +#endif /* __KERNEL__ */ Added: vendor/rfsd/current/RFSD/RFSD/linux/slab.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/slab.…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/spinlock.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/spinl…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/string.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/strin…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/linux/types.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/types…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/linux/types.h (added) +++ vendor/rfsd/current/RFSD/RFSD/linux/types.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,72 @@ +#ifndef _LINUX_TYPES_H +#define _LINUX_TYPES_H + +#ifndef _MSC_VER +#error _MSC_VER not defined +#endif + + +typedef unsigned __int8 __u8; +typedef signed __int8 __s8; + +typedef signed __int64 __s64; +typedef unsigned __int64 __u64; + +typedef signed __int16 __s16; +typedef unsigned __int16 __u16; + +typedef signed __int32 __s32; +typedef unsigned __int32 __u32; + +typedef signed __int64 __s64; +typedef unsigned __int64 __u64; + + +typedef __u16 u16; +typedef __u32 u32; +typedef __u32 ino_t; +typedef __u32 blk_t; + +/** + * container_of - cast a member of a structure out to the containing structure + * + * @ptr: the pointer to the member. + * @type: the type of the container struct this is embedded in. + * @member: the name of the member within the struct. + * + */ +#define container_of(ptr, type, member) ({ \ + const typeof( ((type *)0)->member ) *__mptr = (ptr); \ + (type *)( (char *)__mptr - offsetof(type,member) );}) + + + +/* + * Inode flags [from original ext2 sources] + */ +#define EXT2_SECRM_FL 0x00000001 /* Secure deletion */ +#define EXT2_UNRM_FL 0x00000002 /* Undelete */ +#define EXT2_COMPR_FL 0x00000004 /* Compress file */ +#define EXT2_SYNC_FL 0x00000008 /* Synchronous updates */ +#define EXT2_IMMUTABLE_FL 0x00000010 /* Immutable file */ +#define EXT2_APPEND_FL 0x00000020 /* writes to file may only append */ +#define EXT2_NODUMP_FL 0x00000040 /* do not dump file */ +#define EXT2_NOATIME_FL 0x00000080 /* do not update atime */ +/* Reserved for compression usage... */ +#define EXT2_DIRTY_FL 0x00000100 +#define EXT2_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */ +#define EXT2_NOCOMP_FL 0x00000400 /* Don't compress */ +#define EXT2_ECOMPR_FL 0x00000800 /* Compression error */ +/* End compression flags --- maybe not all used */ +#define EXT2_BTREE_FL 0x00001000 /* btree format dir */ +#define EXT2_RESERVED_FL 0x80000000 /* reserved for ext2 lib */ + +#define EXT2_FL_USER_VISIBLE 0x00001FFF /* User visible flags */ +#define EXT2_FL_USER_MODIFIABLE 0x000000FF /* User modifiable flags */ + + +#define __LITTLE_ENDIAN +#define le16_to_cpu(x) (x) +#define cpu_to_le16(x) (x) + +#endif /* LINUX_TYPES_H */ Added: vendor/rfsd/current/RFSD/RFSD/linux/version.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/linux/versi…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/lock.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/lock.c?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/lock.c (added) +++ vendor/rfsd/current/RFSD/RFSD/lock.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,125 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: lock.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdLockControl) +#endif + +NTSTATUS +RfsdLockControl (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + BOOLEAN CompleteRequest; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + PIRP Irp; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + + CompleteRequest = TRUE; + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb != NULL); + + if (Fcb->Identifier.Type == RFSDVCB) { + + CompleteRequest = TRUE; + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + if (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + + CompleteRequest = TRUE; + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + Irp = IrpContext->Irp; + + // + // While the file has any byte range locks we set IsFastIoPossible to + // FastIoIsQuestionable so that the FastIoCheckIfPossible function is + // called to check the locks for any fast I/O read/write operation. + // + if (Fcb->Header.IsFastIoPossible != FastIoIsQuestionable) { + + RfsdPrint((DBG_INFO, + "RfsdLockControl: %-16.16s %-31s %s\n", + RfsdGetCurrentProcessName(), + "FastIoIsQuestionable", + Fcb->AnsiFileName.Buffer + )); + + Fcb->Header.IsFastIoPossible = FastIoIsQuestionable; + } + + // + // FsRtlProcessFileLock acquires FileObject->FsContext->Resource while + // modifying the file locks and calls IoCompleteRequest when it's done. + // + + CompleteRequest = FALSE; + + Status = FsRtlProcessFileLock( + &Fcb->FileLockAnchor, + Irp, + NULL ); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, + "RfsdLockControl: %-16.16s %-31s *** Status: %s (%#x) ***\n", + RfsdGetCurrentProcessName(), + "IRP_MJ_LOCK_CONTROL", + RfsdNtStatusToString(Status), + Status )); + } + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + if (!CompleteRequest) { + IrpContext->Irp = NULL; + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/memory.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/memory.c?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/memory.c (added) +++ vendor/rfsd/current/RFSD/RFSD/memory.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1634 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: memory.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdAllocateIrpContext) +#pragma alloc_text(PAGE, RfsdFreeIrpContext) +#pragma alloc_text(PAGE, RfsdAllocateFcb) +#pragma alloc_text(PAGE, RfsdFreeFcb) +#pragma alloc_text(PAGE, RfsdAllocateMcb) +#pragma alloc_text(PAGE, RfsdSearchMcbTree) +#pragma alloc_text(PAGE, RfsdSearchMcb) +#pragma alloc_text(PAGE, RfsdGetFullFileName) +#pragma alloc_text(PAGE, RfsdRefreshMcb) +#pragma alloc_text(PAGE, RfsdAddMcbNode) +#pragma alloc_text(PAGE, RfsdDeleteMcbNode) +#pragma alloc_text(PAGE, RfsdFreeMcbTree) + +#if DISABLED +#pragma alloc_text(PAGE, RfsdCheckBitmapConsistency) +#pragma alloc_text(PAGE, RfsdCheckSetBlock) +#endif + +#pragma alloc_text(PAGE, RfsdInitializeVcb) +#pragma alloc_text(PAGE, RfsdFreeCcb) +#pragma alloc_text(PAGE, RfsdAllocateCcb) +#pragma alloc_text(PAGE, RfsdFreeVcb) +#pragma alloc_text(PAGE, RfsdCreateFcbFromMcb) +#pragma alloc_text(PAGE, RfsdSyncUninitializeCacheMap) +#endif + +PRFSD_IRP_CONTEXT +RfsdAllocateIrpContext (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp ) +{ + PIO_STACK_LOCATION IoStackLocation; + PRFSD_IRP_CONTEXT IrpContext; + + ASSERT(DeviceObject != NULL); + ASSERT(Irp != NULL); + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + IrpContext = (PRFSD_IRP_CONTEXT) ( + ExAllocateFromNPagedLookasideList( + &(RfsdGlobal->RfsdIrpContextLookasideList))); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + + if (IrpContext == NULL) { + + IrpContext = ExAllocatePool( NonPagedPool, sizeof(RFSD_IRP_CONTEXT) ); + + // + // Zero out the irp context and indicate that it is from pool and + // not region allocated + // + + RtlZeroMemory(IrpContext, sizeof(RFSD_IRP_CONTEXT)); + + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_FROM_POOL); + + } else { + + // + // Zero out the irp context and indicate that it is from zone and + // not pool allocated + // + + RtlZeroMemory(IrpContext, sizeof(RFSD_IRP_CONTEXT) ); + } + + if (!IrpContext) { + return NULL; + } + + IrpContext->Identifier.Type = RFSDICX; + IrpContext->Identifier.Size = sizeof(RFSD_IRP_CONTEXT); + + IrpContext->Irp = Irp; + + IrpContext->MajorFunction = IoStackLocation->MajorFunction; + IrpContext->MinorFunction = IoStackLocation->MinorFunction; + + IrpContext->DeviceObject = DeviceObject; + + IrpContext->FileObject = IoStackLocation->FileObject; + + if (IrpContext->FileObject != NULL) { + IrpContext->RealDevice = IrpContext->FileObject->DeviceObject; + } else if (IrpContext->MajorFunction == IRP_MJ_FILE_SYSTEM_CONTROL) { + if (IoStackLocation->Parameters.MountVolume.Vpb) { + IrpContext->RealDevice = + IoStackLocation->Parameters.MountVolume.Vpb->RealDevice; + } + } + + if (IrpContext->MajorFunction == IRP_MJ_FILE_SYSTEM_CONTROL || + IrpContext->MajorFunction == IRP_MJ_DEVICE_CONTROL || + IrpContext->MajorFunction == IRP_MJ_SHUTDOWN) { + IrpContext->IsSynchronous = TRUE; + } else if (IrpContext->MajorFunction == IRP_MJ_CLEANUP || + IrpContext->MajorFunction == IRP_MJ_CLOSE) { + IrpContext->IsSynchronous = FALSE; + } +#if (_WIN32_WINNT >= 0x0500) + else if (IrpContext->MajorFunction == IRP_MJ_PNP) { + if (IoGetCurrentIrpStackLocation(Irp)->FileObject == NULL) { + IrpContext->IsSynchronous = TRUE; + } else { + IrpContext->IsSynchronous = IoIsOperationSynchronous(Irp); + } + } +#endif //(_WIN32_WINNT >= 0x0500) + else { + IrpContext->IsSynchronous = IoIsOperationSynchronous(Irp); + } + +#if 0 + // + // Temporary workaround for a bug in close that makes it reference a + // fileobject when it is no longer valid. + // + if (IrpContext->MajorFunction == IRP_MJ_CLOSE) { + IrpContext->IsSynchronous = TRUE; + } +#endif + + IrpContext->IsTopLevel = (IoGetTopLevelIrp() == Irp); + + IrpContext->ExceptionInProgress = FALSE; + + return IrpContext; +} + + +NTSTATUS +RfsdCompleteIrpContext ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN NTSTATUS Status ) +{ + PIRP Irp = NULL; + BOOLEAN bPrint; + + Irp = IrpContext->Irp; + + if (Irp != NULL) { + + if (NT_ERROR(Status)) { + Irp->IoStatus.Information = 0; + } + + Irp->IoStatus.Status = Status; + bPrint = !IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED); + + RfsdCompleteRequest( + Irp, bPrint, (CCHAR)(NT_SUCCESS(Status)? + IO_DISK_INCREMENT : IO_NO_INCREMENT) ); + + IrpContext->Irp = NULL; + } + + RfsdFreeIrpContext(IrpContext); + + return Status; +} + +VOID +RfsdFreeIrpContext (IN PRFSD_IRP_CONTEXT IrpContext) +{ + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + RfsdUnpinRepinnedBcbs(IrpContext); + + // Return the Irp context record to the region or to pool depending on + // its flag + + if (FlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_FROM_POOL)) { + + IrpContext->Identifier.Type = 0; + IrpContext->Identifier.Size = 0; + + ExFreePool( IrpContext ); + + } else { + + IrpContext->Identifier.Type = 0; + IrpContext->Identifier.Size = 0; + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + ExFreeToNPagedLookasideList(&(RfsdGlobal->RfsdIrpContextLookasideList), IrpContext); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + + } +} + +VOID +RfsdRepinBcb ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PBCB Bcb + ) +{ + PRFSD_REPINNED_BCBS Repinned; + + Repinned = &IrpContext->Repinned; + + return; + +#if 0 + + ULONG i; + + while (Repinned) { + + for (i = 0; i < RFSD_REPINNED_BCBS_ARRAY_SIZE; i += 1) { + if (Repinned->Bcb[i] == Bcb) { + return; + } + } + + Repinned = Repinned->Next; + } + + while (TRUE) { + + for (i = 0; i < RFSD_REPINNED_BCBS_ARRAY_SIZE; i += 1) { + if (Repinned->Bcb[i] == Bcb) { + return; + } + + if (Repinned->Bcb[i] == NULL) { + Repinned->Bcb[i] = Bcb; + CcRepinBcb( Bcb ); + + return; + } + } + + if (Repinned->Next == NULL) { + Repinned->Next = ExAllocatePool( PagedPool, sizeof(RFSD_REPINNED_BCBS) ); + RtlZeroMemory( Repinned->Next, sizeof(RFSD_REPINNED_BCBS) ); + } + + Repinned = Repinned->Next; + } + +#endif + +} + +VOID +RfsdUnpinRepinnedBcbs ( + IN PRFSD_IRP_CONTEXT IrpContext + ) +{ + IO_STATUS_BLOCK RaiseIosb; + PRFSD_REPINNED_BCBS Repinned; + BOOLEAN WriteThroughToDisk; + PFILE_OBJECT FileObject = NULL; + BOOLEAN ForceVerify = FALSE; + ULONG i; + + Repinned = &IrpContext->Repinned; + RaiseIosb.Status = STATUS_SUCCESS; + + WriteThroughToDisk = (BOOLEAN) (IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WRITE_THROUGH) || + IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_FLOPPY)); + + while (Repinned != NULL) { + for (i = 0; i < RFSD_REPINNED_BCBS_ARRAY_SIZE; i += 1) { + if (Repinned->Bcb[i] != NULL) { + IO_STATUS_BLOCK Iosb; + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + + if ( FlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_FLOPPY) ) { + FileObject = CcGetFileObjectFromBcb( Repinned->Bcb[i] ); + } + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + + CcUnpinRepinnedBcb( Repinned->Bcb[i], + WriteThroughToDisk, + &Iosb ); + + ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); + + if ( !NT_SUCCESS(Iosb.Status) ) { + if (RaiseIosb.Status == STATUS_SUCCESS) { + RaiseIosb = Iosb; + } + + if (FlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_FLOPPY) && + (IrpContext->MajorFunction != IRP_MJ_CLEANUP) && + (IrpContext->MajorFunction != IRP_MJ_FLUSH_BUFFERS) && + (IrpContext->MajorFunction != IRP_MJ_SET_INFORMATION)) { + + CcPurgeCacheSection( FileObject->SectionObjectPointer, + NULL, + 0, + FALSE ); + + ForceVerify = TRUE; + } + } + + Repinned->Bcb[i] = NULL; + + } else { + + break; + } + } + + if (Repinned != &IrpContext->Repinned) +{ + PRFSD_REPINNED_BCBS Saved; + + Saved = Repinned->Next; + ExFreePool( Repinned ); + Repinned = Saved; + + } else { + + Repinned = Repinned->Next; + IrpContext->Repinned.Next = NULL; + } + } + + if (!NT_SUCCESS(RaiseIosb.Status)) { + + DbgBreak(); + + if (ForceVerify && FileObject) { + SetFlag(FileObject->DeviceObject->Flags, DO_VERIFY_VOLUME); + IoSetHardErrorOrVerifyDevice( IrpContext->Irp, + FileObject->DeviceObject ); + } + + IrpContext->Irp->IoStatus = RaiseIosb; + RfsdNormalizeAndRaiseStatus(IrpContext, RaiseIosb.Status ); + } + + return; +} + + +PRFSD_FCB +RfsdAllocateFcb (IN PRFSD_VCB Vcb, + IN PRFSD_MCB RfsdMcb, + IN PRFSD_INODE Inode ) +{ + PRFSD_FCB Fcb; + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + Fcb = (PRFSD_FCB) ExAllocateFromNPagedLookasideList( + &(RfsdGlobal->RfsdFcbLookasideList)); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + + if (Fcb == NULL) { + Fcb = (PRFSD_FCB)ExAllocatePool(NonPagedPool, sizeof(RFSD_FCB)); + + RtlZeroMemory(Fcb, sizeof(RFSD_FCB)); + + SetFlag(Fcb->Flags, FCB_FROM_POOL); + } else { + RtlZeroMemory(Fcb, sizeof(RFSD_FCB)); + } + + if (!Fcb) { + return NULL; + } + + Fcb->Identifier.Type = RFSDFCB; + Fcb->Identifier.Size = sizeof(RFSD_FCB); + + FsRtlInitializeFileLock ( + &Fcb->FileLockAnchor, + NULL, + NULL ); + + Fcb->OpenHandleCount = 0; + Fcb->ReferenceCount = 0; + + Fcb->Vcb = Vcb; + +#if DBG + + Fcb->AnsiFileName.MaximumLength = (USHORT) + RfsdUnicodeToOEMSize(&(RfsdMcb->ShortName)) + 1; + + Fcb->AnsiFileName.Buffer = (PUCHAR) + ExAllocatePool(PagedPool, Fcb->AnsiFileName.MaximumLength); + + if (!Fcb->AnsiFileName.Buffer) { + goto errorout; + } + + RtlZeroMemory(Fcb->AnsiFileName.Buffer, Fcb->AnsiFileName.MaximumLength); + + RfsdUnicodeToOEM( &(Fcb->AnsiFileName), + &(RfsdMcb->ShortName)); + +#endif + + RfsdMcb->FileAttr = FILE_ATTRIBUTE_NORMAL; + + if (S_ISDIR(Inode->i_mode)) { + SetFlag(RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY); + } + + if ( IsFlagOn(Vcb->Flags, VCB_READ_ONLY) || + RfsdIsReadOnly(Inode->i_mode)) { + SetFlag(RfsdMcb->FileAttr, FILE_ATTRIBUTE_READONLY); + } + + Fcb->Inode = Inode; + + Fcb->RfsdMcb = RfsdMcb; + RfsdMcb->RfsdFcb = Fcb; + + RtlZeroMemory(&Fcb->Header, sizeof(FSRTL_COMMON_FCB_HEADER)); + + Fcb->Header.NodeTypeCode = (USHORT) RFSDFCB; + Fcb->Header.NodeByteSize = sizeof(RFSD_FCB); + Fcb->Header.IsFastIoPossible = FastIoIsNotPossible; + Fcb->Header.Resource = &(Fcb->MainResource); + Fcb->Header.PagingIoResource = &(Fcb->PagingIoResource); + + // NOTE: In EXT2, the low part was stored in i_size (a 32-bit value); the high part would be stored in the acl field... + // However, on ReiserFS, the i_size is a 64-bit value. + Fcb->Header.FileSize.QuadPart = Fcb->Inode->i_size; + + + Fcb->Header.AllocationSize.QuadPart = + CEILING_ALIGNED(Fcb->Header.FileSize.QuadPart, (ULONGLONG)Vcb->BlockSize); + + Fcb->Header.ValidDataLength.QuadPart = (LONGLONG)(0x7fffffffffffffff); + + Fcb->SectionObject.DataSectionObject = NULL; + Fcb->SectionObject.SharedCacheMap = NULL; + Fcb->SectionObject.ImageSectionObject = NULL; + + ExInitializeResourceLite(&(Fcb->MainResource)); + ExInitializeResourceLite(&(Fcb->PagingIoResource)); + + InsertTailList(&Vcb->FcbList, &Fcb->Next); + +#if DBG + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->CountResource, + TRUE ); + + RfsdGlobal->FcbAllocated++; + + ExReleaseResourceForThreadLite( + &RfsdGlobal->CountResource, + ExGetCurrentResourceThread() ); +#endif + + return Fcb; + +#if DBG +errorout: +#endif + + if (Fcb) { + +#if DBG + if (Fcb->AnsiFileName.Buffer) + ExFreePool(Fcb->AnsiFileName.Buffer); +#endif + + if (FlagOn(Fcb->Flags, FCB_FROM_POOL)) { + + ExFreePool( Fcb ); + + } else { + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + ExFreeToNPagedLookasideList(&(RfsdGlobal->RfsdFcbLookasideList), Fcb); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + } + + } + + return NULL; +} + +VOID +RfsdFreeFcb (IN PRFSD_FCB Fcb) +{ + PRFSD_VCB Vcb; + ASSERT(Fcb != NULL); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + Vcb = Fcb->Vcb; + + FsRtlUninitializeFileLock(&Fcb->FileLockAnchor); + + ExDeleteResourceLite(&Fcb->MainResource); + + ExDeleteResourceLite(&Fcb->PagingIoResource); + + Fcb->RfsdMcb->RfsdFcb = NULL; + + if(IsFlagOn(Fcb->Flags, FCB_FILE_DELETED)) { + if (Fcb->RfsdMcb) { + RfsdDeleteMcbNode(Vcb, Fcb->RfsdMcb->Parent, Fcb->RfsdMcb); + RfsdFreeMcb(Fcb->RfsdMcb); + } + } + + if (Fcb->LongName.Buffer) { + ExFreePool(Fcb->LongName.Buffer); + Fcb->LongName.Buffer = NULL; + } + +#if DBG + ExFreePool(Fcb->AnsiFileName.Buffer); +#endif + + ExFreePool(Fcb->Inode); + + Fcb->Header.NodeTypeCode = (SHORT)0xCCCC; + Fcb->Header.NodeByteSize = (SHORT)0xC0C0; + + if (FlagOn(Fcb->Flags, FCB_FROM_POOL)) { + + ExFreePool( Fcb ); + + } else { + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + ExFreeToNPagedLookasideList(&(RfsdGlobal->RfsdFcbLookasideList), Fcb); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + } + +#if DBG + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->CountResource, + TRUE ); + + RfsdGlobal->FcbAllocated--; + + ExReleaseResourceForThreadLite( + &RfsdGlobal->CountResource, + ExGetCurrentResourceThread() ); +#endif + +} + +PRFSD_CCB +RfsdAllocateCcb (VOID) +{ + PRFSD_CCB Ccb; + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + Ccb = (PRFSD_CCB) (ExAllocateFromNPagedLookasideList( &(RfsdGlobal->RfsdCcbLookasideList))); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + + if (Ccb == NULL) { + Ccb = (PRFSD_CCB)ExAllocatePool(NonPagedPool, sizeof(RFSD_CCB)); + + RtlZeroMemory(Ccb, sizeof(RFSD_CCB)); + + SetFlag(Ccb->Flags, CCB_FROM_POOL); + } else { + RtlZeroMemory(Ccb, sizeof(RFSD_CCB)); + } + + if (!Ccb) { + return NULL; + } + + Ccb->Identifier.Type = RFSDCCB; + Ccb->Identifier.Size = sizeof(RFSD_CCB); + + Ccb->CurrentByteOffset = 0; + + Ccb->DirectorySearchPattern.Length = 0; + Ccb->DirectorySearchPattern.MaximumLength = 0; + Ccb->DirectorySearchPattern.Buffer = 0; + + return Ccb; +} + +VOID +RfsdFreeCcb (IN PRFSD_CCB Ccb) +{ + ASSERT(Ccb != NULL); + + ASSERT((Ccb->Identifier.Type == RFSDCCB) && + (Ccb->Identifier.Size == sizeof(RFSD_CCB))); + + if (Ccb->DirectorySearchPattern.Buffer != NULL) { + ExFreePool(Ccb->DirectorySearchPattern.Buffer); + } + + if (FlagOn(Ccb->Flags, CCB_FROM_POOL)) { + + ExFreePool( Ccb ); + + } else { + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + ExFreeToNPagedLookasideList(&(RfsdGlobal->RfsdCcbLookasideList), Ccb); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + } +} + +PRFSD_MCB +RfsdAllocateMcb (PRFSD_VCB Vcb, PUNICODE_STRING FileName, ULONG FileAttr) +{ + PRFSD_MCB Mcb = NULL; + PLIST_ENTRY List = NULL; + + ULONG Extra = 0; + +#define MCB_NUM_SHIFT 0x04 + + if (RfsdGlobal->McbAllocated > (RfsdGlobal->MaxDepth << MCB_NUM_SHIFT)) + Extra = RfsdGlobal->McbAllocated - + (RfsdGlobal->MaxDepth << MCB_NUM_SHIFT) + + RfsdGlobal->MaxDepth; + + RfsdPrint((DBG_INFO, + "RfsdAllocateMcb: CurrDepth=%xh/%xh/%xh FileName=%S\n", + RfsdGlobal->McbAllocated, + RfsdGlobal->MaxDepth << MCB_NUM_SHIFT, + RfsdGlobal->FcbAllocated, + FileName->Buffer)); + + List = Vcb->McbList.Flink; + + while ((List != &(Vcb->McbList)) && (Extra > 0)) { + Mcb = CONTAINING_RECORD(List, RFSD_MCB, Link); + List = List->Flink; + + if ((!RFSD_IS_ROOT_KEY(Mcb->Key)) && (Mcb->Child == NULL) && + (Mcb->RfsdFcb == NULL) && (!IsMcbUsed(Mcb))) { + RfsdPrint((DBG_INFO, "RfsdAllocateMcb: Mcb %S will be freed.\n", + Mcb->ShortName.Buffer)); + + if (RfsdDeleteMcbNode(Vcb, Vcb->McbTree, Mcb)) { + RfsdFreeMcb(Mcb); + + Extra--; + } + } + } + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + Mcb = (PRFSD_MCB) (ExAllocateFromPagedLookasideList( + &(RfsdGlobal->RfsdMcbLookasideList))); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + + if (Mcb == NULL) { + Mcb = (PRFSD_MCB)ExAllocatePool(PagedPool, sizeof(RFSD_MCB)); + + RtlZeroMemory(Mcb, sizeof(RFSD_MCB)); + + SetFlag(Mcb->Flags, MCB_FROM_POOL); + } else { + RtlZeroMemory(Mcb, sizeof(RFSD_MCB)); + } + + if (!Mcb) { + return NULL; + } + + Mcb->Identifier.Type = RFSDMCB; + Mcb->Identifier.Size = sizeof(RFSD_MCB); + + if (FileName && FileName->Length) { + + Mcb->ShortName.Length = FileName->Length; + Mcb->ShortName.MaximumLength = Mcb->ShortName.Length + 2; + + Mcb->ShortName.Buffer = ExAllocatePool(PagedPool, Mcb->ShortName.MaximumLength); + + if (!Mcb->ShortName.Buffer) + goto errorout; + + RtlZeroMemory(Mcb->ShortName.Buffer, Mcb->ShortName.MaximumLength); + RtlCopyMemory(Mcb->ShortName.Buffer, FileName->Buffer, Mcb->ShortName.Length); + } + + Mcb->FileAttr = FileAttr; + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->CountResource, + TRUE ); + + RfsdGlobal->McbAllocated++; + + ExReleaseResourceForThreadLite( + &RfsdGlobal->CountResource, + ExGetCurrentResourceThread() ); + + return Mcb; + +errorout: + + if (Mcb) { + + if (Mcb->ShortName.Buffer) + ExFreePool(Mcb->ShortName.Buffer); + + if (FlagOn(Mcb->Flags, MCB_FROM_POOL)) { + + ExFreePool( Mcb ); + + } else { + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + ExFreeToPagedLookasideList(&(RfsdGlobal->RfsdMcbLookasideList), Mcb); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + } + } + + return NULL; +} + +VOID +RfsdFreeMcb (IN PRFSD_MCB Mcb) +{ + PRFSD_MCB Parent = Mcb->Parent; + + ASSERT(Mcb != NULL); + + ASSERT((Mcb->Identifier.Type == RFSDMCB) && + (Mcb->Identifier.Size == sizeof(RFSD_MCB))); + + RfsdPrint((DBG_INFO, "RfsdFreeMcb: Mcb %S will be freed.\n", Mcb->ShortName.Buffer)); + + if (Mcb->ShortName.Buffer) + ExFreePool(Mcb->ShortName.Buffer); + + if (FlagOn(Mcb->Flags, MCB_FROM_POOL)) { + + ExFreePool( Mcb ); + + } else { + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->LAResource, + TRUE ); + + ExFreeToPagedLookasideList(&(RfsdGlobal->RfsdMcbLookasideList), Mcb); + + ExReleaseResourceForThreadLite( + &RfsdGlobal->LAResource, + ExGetCurrentResourceThread() ); + } + + ExAcquireResourceExclusiveLite( + &RfsdGlobal->CountResource, + TRUE ); + + RfsdGlobal->McbAllocated--; + + ExReleaseResourceForThreadLite( + &RfsdGlobal->CountResource, + ExGetCurrentResourceThread() ); +} + +PRFSD_FCB +RfsdCreateFcbFromMcb(PRFSD_VCB Vcb, PRFSD_MCB Mcb) +{ + PRFSD_FCB Fcb = NULL; + RFSD_INODE RfsdIno; + + if (Mcb->RfsdFcb) + return Mcb->RfsdFcb; + + if (RfsdLoadInode(Vcb, &(Mcb->Key), &RfsdIno)) { + PRFSD_INODE pTmpInode = ExAllocatePool(PagedPool, sizeof(RFSD_INODE)); + if (!pTmpInode) { + goto errorout; + } + + RtlCopyMemory(pTmpInode, &RfsdIno, sizeof(RFSD_INODE)); + Fcb = RfsdAllocateFcb(Vcb, Mcb, pTmpInode); + if (!Fcb) { + ExFreePool(pTmpInode); + } + } + +errorout: + + return Fcb; +} + +BOOLEAN +RfsdGetFullFileName(PRFSD_MCB Mcb, PUNICODE_STRING FileName) +{ + USHORT Length = 0; + PRFSD_MCB TmpMcb = Mcb; + PUNICODE_STRING FileNames[256]; + SHORT Count = 0 , i = 0, j = 0; + + while(TmpMcb && Count < 256) { + if (RFSD_IS_ROOT_KEY(TmpMcb->Key)) + break; + + FileNames[Count++] = &TmpMcb->ShortName; + Length += (2 + TmpMcb->ShortName.Length); + + TmpMcb = TmpMcb->Parent; + } + + if (Count >= 256) + return FALSE; + + if (Count ==0) + Length = 2; + + FileName->Length = Length; + FileName->MaximumLength = Length + 2; + FileName->Buffer = ExAllocatePool(PagedPool, Length + 2); + + if (!FileName->Buffer) { + return FALSE; + } + + RtlZeroMemory(FileName->Buffer, FileName->MaximumLength); + + if (Count == 0) { + FileName->Buffer[0] = L'\\'; + return TRUE; + } + + for (i = Count - 1; i >= 0 && j < (SHORT)(FileName->MaximumLength); i--) { + FileName->Buffer[j++] = L'\\'; + + RtlCopyMemory( &(FileName->Buffer[j]), + FileNames[i]->Buffer, + FileNames[i]->Length ); + + j += FileNames[i]->Length / 2; + } + + return TRUE; +} + +PRFSD_MCB +RfsdSearchMcbTree( PRFSD_VCB Vcb, + PRFSD_MCB RfsdMcb, + PRFSD_KEY_IN_MEMORY Key) +{ + PRFSD_MCB Mcb = NULL; + PLIST_ENTRY List = NULL; + BOOLEAN bFind = FALSE; + + List = Vcb->McbList.Flink; + + while ((!bFind) && (List != &(Vcb->McbList))) { + Mcb = CONTAINING_RECORD(List, RFSD_MCB, Link); + List = List->Flink; + + if (CompareShortKeys(&(Mcb->Key), Key) == RFSD_KEYS_MATCH) { + bFind = TRUE; + break; + } + } + + if (bFind) { + ASSERT(Mcb != NULL); + RfsdRefreshMcb(Vcb, Mcb); + } else { + Mcb = NULL; + } + + return Mcb; +} + +/** + Returns NULL is the parent has no child, or if we search through the child's brothers and hit a NULL + Otherwise, returns the MCB of one of the the parent's children, which matches FileName. +*/ +PRFSD_MCB +RfsdSearchMcb( PRFSD_VCB Vcb, + PRFSD_MCB Parent, + PUNICODE_STRING FileName ) +{ + PRFSD_MCB TmpMcb = Parent->Child; + + while (TmpMcb) { + if (!RtlCompareUnicodeString( + &(TmpMcb->ShortName), + FileName, TRUE )) + break; + + TmpMcb = TmpMcb->Next; + } + + if (TmpMcb) { + RfsdRefreshMcb(Vcb, TmpMcb); + } + + return TmpMcb; +} + +VOID +RfsdRefreshMcb(PRFSD_VCB Vcb, PRFSD_MCB Mcb) +{ + ASSERT (IsFlagOn(Mcb->Flags, MCB_IN_TREE)); + + RemoveEntryList(&(Mcb->Link)); + InsertTailList(&(Vcb->McbList), &(Mcb->Link)); +} + +VOID +RfsdAddMcbNode(PRFSD_VCB Vcb, PRFSD_MCB Parent, PRFSD_MCB Child) +{ + PRFSD_MCB TmpMcb = Parent->Child; + + if(IsFlagOn(Child->Flags, MCB_IN_TREE)) { + DbgBreak(); + RfsdPrint((DBG_ERROR, "RfsdAddMcbNode: Child Mcb is alreay in the tree.\n")); + return; + } + + if (TmpMcb) { + ASSERT(TmpMcb->Parent == Parent); + + while (TmpMcb->Next) { + TmpMcb = TmpMcb->Next; + ASSERT(TmpMcb->Parent == Parent); + } + + TmpMcb->Next = Child; + Child->Parent = Parent; + Child->Next = NULL; + } else { + Parent->Child = Child; + Child->Parent = Parent; + Child->Next = NULL; + } + + InsertTailList(&(Vcb->McbList), &(Child->Link)); + SetFlag(Child->Flags, MCB_IN_TREE); +} + +BOOLEAN +RfsdDeleteMcbNode(PRFSD_VCB Vcb, PRFSD_MCB McbTree, PRFSD_MCB RfsdMcb) +{ + PRFSD_MCB TmpMcb; + + if(!IsFlagOn(RfsdMcb->Flags, MCB_IN_TREE)) { + return TRUE; + } + + if (RfsdMcb->Parent) { + if (RfsdMcb->Parent->Child == RfsdMcb) { + RfsdMcb->Parent->Child = RfsdMcb->Next; + } else { + TmpMcb = RfsdMcb->Parent->Child; + + while (TmpMcb && TmpMcb->Next != RfsdMcb) + TmpMcb = TmpMcb->Next; + + if (TmpMcb) { + TmpMcb->Next = RfsdMcb->Next; + } else { + // error + return FALSE; + } + } + } else if (RfsdMcb->Child) { + return FALSE; + } + + RemoveEntryList(&(RfsdMcb->Link)); + ClearFlag(RfsdMcb->Flags, MCB_IN_TREE); + + return TRUE; +} + + +VOID RfsdFreeMcbTree(PRFSD_MCB McbTree) +{ + if (!McbTree) + return; + + if (McbTree->Child) { + RfsdFreeMcbTree(McbTree->Child); + } + + if (McbTree->Next) { + + PRFSD_MCB Current; + PRFSD_MCB Next; + + Current = McbTree->Next; + + while (Current) { + + Next = Current->Next; + + if (Current->Child) { + RfsdFreeMcbTree(Current->Child); + } + + RfsdFreeMcb(Current); + Current = Next; + } + } + + RfsdFreeMcb(McbTree); +} + +#if DISABLED +BOOLEAN +RfsdCheckSetBlock(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb, ULONG Block) +{ + DbgBreak(); + + ULONG Group, dwBlk, Length; + + RTL_BITMAP BlockBitmap; + PVOID BitmapCache; + PBCB BitmapBcb; + + LARGE_INTEGER Offset; + + BOOLEAN bModified = FALSE; + + + Group = (Block - RFSD_FIRST_DATA_BLOCK) / BLOCKS_PER_GROUP; + + dwBlk = (Block - RFSD_FIRST_DATA_BLOCK) % BLOCKS_PER_GROUP; + + + Offset.QuadPart = (LONGLONG) Vcb->BlockSize; + Offset.QuadPart = Offset.QuadPart * Vcb->GroupDesc[Group].bg_block_bitmap; + + if (Group == Vcb->NumOfGroups - 1) { + Length = TOTAL_BLOCKS % BLOCKS_PER_GROUP; + + /* s_blocks_count is integer multiple of s_blocks_per_group */ + if (Length == 0) + Length = BLOCKS_PER_GROUP; + } else { + Length = BLOCKS_PER_GROUP; + } + + if (dwBlk >= Length) + return FALSE; + + if (!CcPinRead( Vcb->StreamObj, + &Offset, + Vcb->BlockSize, + PIN_WAIT, + &BitmapBcb, + &BitmapCache ) ) { + + RfsdPrint((DBG_ERROR, "RfsdDeleteBlock: PinReading error ...\n")); + return FALSE; + } + + RtlInitializeBitMap( &BlockBitmap, + BitmapCache, + Length ); + + if (RtlCheckBit(&BlockBitmap, dwBlk) == 0) { + DbgBreak(); + RtlSetBits(&BlockBitmap, dwBlk, 1); + bModified = TRUE; + } + + if (bModified) { + + CcSetDirtyPinnedData(BitmapBcb, NULL ); + + RfsdRepinBcb(IrpContext, BitmapBcb); + + RfsdAddMcbEntry(Vcb, Offset.QuadPart, (LONGLONG)Vcb->BlockSize); + } + + { + CcUnpinData(BitmapBcb); + BitmapBcb = NULL; + BitmapCache = NULL; + + RtlZeroMemory(&BlockBitmap, sizeof(RTL_BITMAP)); + } + + return (!bModified); +} +#endif + + +#if DISABLED +BOOLEAN +RfsdCheckBitmapConsistency(PRFSD_IRP_CONTEXT IrpContext, PRFSD_VCB Vcb) +{ + DbgBreak(); + + ULONG i, j, InodeBlocks; + + for (i = 0; i < Vcb->NumOfGroups; i++) { + + RfsdCheckSetBlock(IrpContext, Vcb, Vcb->GroupDesc[i].bg_block_bitmap); + RfsdCheckSetBlock(IrpContext, Vcb, Vcb->GroupDesc[i].bg_inode_bitmap); + + + if (i == Vcb->NumOfGroups - 1) { + InodeBlocks = ((INODES_COUNT % INODES_PER_GROUP) * + sizeof(RFSD_INODE) + Vcb->BlockSize - 1) / + (Vcb->BlockSize); + } else { + InodeBlocks = (INODES_PER_GROUP * sizeof(RFSD_INODE) + Vcb->BlockSize - 1) / (Vcb->BlockSize); + } + + for (j = 0; j < InodeBlocks; j++ ) + RfsdCheckSetBlock(IrpContext, Vcb, Vcb->GroupDesc[i].bg_inode_table + j); + } + + return TRUE; +} +#endif + +VOID +RfsdInsertVcb(PRFSD_VCB Vcb) +{ + InsertTailList(&(RfsdGlobal->VcbList), &Vcb->Next); +} + +VOID +RfsdRemoveVcb(PRFSD_VCB Vcb) +{ + RemoveEntryList(&Vcb->Next); +} + +NTSTATUS +RfsdInitializeVcb( IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_SUPER_BLOCK RfsdSb, + IN PDEVICE_OBJECT TargetDevice, + IN PDEVICE_OBJECT VolumeDevice, + IN PVPB Vpb ) +{ + BOOLEAN VcbResourceInitialized = FALSE; + USHORT VolumeLabelLength; + ULONG IoctlSize; + BOOLEAN NotifySyncInitialized = FALSE; + LONGLONG DiskSize; + LONGLONG PartSize; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + UNICODE_STRING RootNode; + USHORT Buffer[2]; + ULONG ChangeCount; + char s_volume_name[16] = "ReiserFS\0"; /* volume name */ // FUTURE: pull in from v2 superblock, if available + int templen; + + __try { + + if (!Vpb) { + + Status = STATUS_DEVICE_NOT_READY; + __leave; + } + + RfsdPrint((DBG_ERROR, "RfsdInitializeVcb: Flink = %xh McbList = %xh\n", + Vcb->McbList.Flink, &(Vcb->McbList.Flink))); + +#if RFSD_READ_ONLY + SetFlag(Vcb->Flags, VCB_READ_ONLY); +#endif //READ_ONLY + + if (IsFlagOn(Vpb->RealDevice->Characteristics, FILE_REMOVABLE_MEDIA)) { + SetFlag(Vcb->Flags, VCB_REMOVABLE_MEDIA); + } + + if (IsFlagOn(Vpb->RealDevice->Characteristics, FILE_FLOPPY_DISKETTE)) { + SetFlag(Vcb->Flags, VCB_FLOPPY_DISK); + } + + /*if (IsFlagOn(RfsdGlobal->Flags, RFSD_SUPPORT_WRITING)) { + if ((IsFlagOn(RfsdSb->s_feature_incompat, EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) || + IsFlagOn(RfsdSb->s_feature_incompat, EXT3_FEATURE_INCOMPAT_RECOVER) || + IsFlagOn(RfsdSb->s_feature_compat, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) ) { + if(IsFlagOn(RfsdGlobal->Flags, EXT3_FORCE_WRITING)) { + ClearFlag(Vcb->Flags, VCB_READ_ONLY); + } else { + SetFlag(Vcb->Flags, VCB_READ_ONLY); + } + } else { + ClearFlag(Vcb->Flags, VCB_READ_ONLY); + } + } else { + SetFlag(Vcb->Flags, VCB_READ_ONLY); + }*/ + // RFSD will be read only. + SetFlag(Vcb->Flags, VCB_READ_ONLY); + + ExInitializeResourceLite(&Vcb->MainResource); + ExInitializeResourceLite(&Vcb->PagingIoResource); + + ExInitializeResourceLite(&Vcb->McbResource); + + VcbResourceInitialized = TRUE; + + Vcb->Vpb = Vpb; + + Vcb->RealDevice = Vpb->RealDevice; + Vpb->DeviceObject = VolumeDevice; + + { + UNICODE_STRING LabelName; + OEM_STRING OemName; + + + + LabelName.MaximumLength = 16 * 2; + LabelName.Length = 0; + LabelName.Buffer = Vcb->Vpb->VolumeLabel; + + RtlZeroMemory(LabelName.Buffer, LabelName.MaximumLength); + + VolumeLabelLength = 16; + + while( (VolumeLabelLength > 0) && + ((s_volume_name[VolumeLabelLength-1] == '\0') || + (s_volume_name[VolumeLabelLength-1] == ' ')) ) { + VolumeLabelLength--; + } + + OemName.Buffer = s_volume_name; + OemName.MaximumLength = 16; + OemName.Length = VolumeLabelLength; + + templen = RtlOemStringToUnicodeSize(&OemName); + + Status = RfsdOEMToUnicode( &LabelName, + &OemName ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + Vpb->VolumeLabelLength = LabelName.Length; + } + +#if DISABLED + Vpb->SerialNumber = ((ULONG*)RfsdSb->s_uuid)[0] + ((ULONG*)RfsdSb->s_uuid)[1] + + ((ULONG*)RfsdSb->s_uuid)[2] + ((ULONG*)RfsdSb->s_uuid)[3]; +#endif + + Vcb->StreamObj = IoCreateStreamFileObject( NULL, Vcb->Vpb->RealDevice); + + if (Vcb->StreamObj) { + + Vcb->StreamObj->SectionObjectPointer = &(Vcb->SectionObject); + Vcb->StreamObj->Vpb = Vcb->Vpb; + Vcb->StreamObj->ReadAccess = TRUE; + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) + { + Vcb->StreamObj->WriteAccess = TRUE; + Vcb->StreamObj->DeleteAccess = TRUE; + } + else + { + Vcb->StreamObj->WriteAccess = TRUE; + Vcb->StreamObj->DeleteAccess = TRUE; + } + Vcb->StreamObj->FsContext = (PVOID) Vcb; + Vcb->StreamObj->FsContext2 = NULL; + Vcb->StreamObj->Vpb = Vcb->Vpb; + + SetFlag(Vcb->StreamObj->Flags, FO_NO_INTERMEDIATE_BUFFERING); + } else { + __leave; + } + + InitializeListHead(&Vcb->FcbList); + + InitializeListHead(&Vcb->NotifyList); + + FsRtlNotifyInitializeSync(&Vcb->NotifySync); + + NotifySyncInitialized = TRUE; + + Vcb->DeviceObject = VolumeDevice; + + Vcb->TargetDeviceObject = TargetDevice; + + Vcb->OpenFileHandleCount = 0; + + Vcb->ReferenceCount = 0; + + Vcb->SuperBlock = RfsdSb; + + Vcb->Header.NodeTypeCode = (USHORT) RFSDVCB; + Vcb->Header.NodeByteSize = sizeof(RFSD_VCB); + Vcb->Header.IsFastIoPossible = FastIoIsNotPossible; + Vcb->Header.Resource = &(Vcb->MainResource); + Vcb->Header.PagingIoResource = &(Vcb->PagingIoResource); + + Vcb->Vpb->SerialNumber = 'MATT'; + + DiskSize = + Vcb->DiskGeometry.Cylinders.QuadPart * + Vcb->DiskGeometry.TracksPerCylinder * + Vcb->DiskGeometry.SectorsPerTrack * + Vcb->DiskGeometry.BytesPerSector; + + IoctlSize = sizeof(PARTITION_INFORMATION); + + Status = RfsdDiskIoControl( + TargetDevice, + IOCTL_DISK_GET_PARTITION_INFO, + NULL, + 0, + &Vcb->PartitionInformation, + &IoctlSize ); + + PartSize = Vcb->PartitionInformation.PartitionLength.QuadPart; + + if (!NT_SUCCESS(Status)) { + Vcb->PartitionInformation.StartingOffset.QuadPart = 0; + + Vcb->PartitionInformation.PartitionLength.QuadPart = + DiskSize; + + PartSize = DiskSize; + + Status = STATUS_SUCCESS; + } + + IoctlSize = sizeof(ULONG); + Status = RfsdDiskIoControl( + TargetDevice, + IOCTL_DISK_CHECK_VERIFY, + NULL, + 0, + &ChangeCount, + &IoctlSize ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + Vcb->ChangeCount = ChangeCount; + + Vcb->Header.AllocationSize.QuadPart = + Vcb->Header.FileSize.QuadPart = PartSize; + + Vcb->Header.ValidDataLength.QuadPart = + (LONGLONG)(0x7fffffffffffffff); +/* + Vcb->Header.AllocationSize.QuadPart = (LONGLONG)(rfsd_super_block->s_blocks_count - rfsd_super_block->s_free_blocks_count) + * (RFSD_MIN_BLOCK << rfsd_super_block->s_log_block_size); + Vcb->Header.FileSize.QuadPart = Vcb->Header.AllocationSize.QuadPart; + Vcb->Header.ValidDataLength.QuadPart = Vcb->Header.AllocationSize.QuadPart; +*/ + { + CC_FILE_SIZES FileSizes; + + FileSizes.AllocationSize.QuadPart = + FileSizes.FileSize.QuadPart = + Vcb->Header.AllocationSize.QuadPart; + + FileSizes.ValidDataLength.QuadPart= (LONGLONG)(0x7fffffffffffffff); + + CcInitializeCacheMap( Vcb->StreamObj, + &FileSizes, + TRUE, + &(RfsdGlobal->CacheManagerNoOpCallbacks), + Vcb ); + } +#if DISABLED // IN FFFS TOO + if (!RfsdLoadGroup(Vcb)) { + Status = STATUS_UNSUCCESSFUL; + __leave; + } +#endif + + FsRtlInitializeLargeMcb(&(Vcb->DirtyMcbs), PagedPool); + InitializeListHead(&(Vcb->McbList)); + + + // + // Now allocating the mcb for root ... + // + + Buffer[0] = L'\\'; + Buffer[1] = 0; + + RootNode.Buffer = Buffer; + RootNode.MaximumLength = RootNode.Length = 2; + + Vcb->McbTree = RfsdAllocateMcb( Vcb, &RootNode, + FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_NORMAL); + + if (!Vcb->McbTree) { + __leave; + } + + // Set the root of the filesystem to the root directory's inode / stat data structure + Vcb->McbTree->Key.k_dir_id = RFSD_ROOT_PARENT_ID; + Vcb->McbTree->Key.k_objectid = RFSD_ROOT_OBJECT_ID; + Vcb->McbTree->Key.k_offset = 0; + Vcb->McbTree->Key.k_type = RFSD_KEY_TYPE_v1_STAT_DATA; + +#ifdef DISABLED + if (IsFlagOn(RfsdGlobal->Flags, RFSD_CHECKING_BITMAP)) { + RfsdCheckBitmapConsistency(IrpContext, Vcb); + } + + { + ULONG dwData[RFSD_BLOCK_TYPES] = {RFSD_NDIR_BLOCKS, 1, 1, 1}; + ULONG dwMeta[RFSD_BLOCK_TYPES] = {0, 0, 0, 0}; + ULONG i; + + DbgPrint("Reminder: " __FUNCTION__ ", dwData, dwMeta??\n"); + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + dwData[i] = dwData[i] << ((BLOCK_BITS - 2) * i); + + if (i > 0) { + dwMeta[i] = 1 + (dwMeta[i - 1] << (BLOCK_BITS - 2)); + } + + Vcb->dwData[i] = dwData[i]; + Vcb->dwMeta[i] = dwMeta[i]; + } + } +#endif + + SetFlag(Vcb->Flags, VCB_INITIALIZED); + + } __finally { + + if (!NT_SUCCESS(Status)) { + + if (NotifySyncInitialized) { + FsRtlNotifyUninitializeSync(&Vcb->NotifySync); + } + + if (Vcb->GroupDesc) { + ExFreePool(Vcb->GroupDesc); + // CcUnpinData(Vcb->GroupDescBcb); + Vcb->GroupDesc = NULL; + } + + if (Vcb->SuperBlock) { + ExFreePool(Vcb->SuperBlock); + Vcb->SuperBlock = NULL; + } + + if (VcbResourceInitialized) { + ExDeleteResourceLite(&Vcb->MainResource); + ExDeleteResourceLite(&Vcb->PagingIoResource); + } + } + } + + return Status; +} + + +VOID +RfsdFreeVcb (IN PRFSD_VCB Vcb ) +{ + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + FsRtlNotifyUninitializeSync(&Vcb->NotifySync); + + if (Vcb->StreamObj) { + if (IsFlagOn(Vcb->StreamObj->Flags, FO_FILE_MODIFIED)) { + IO_STATUS_BLOCK IoStatus; + + CcFlushCache(&(Vcb->SectionObject), NULL, 0, &IoStatus); + ClearFlag(Vcb->StreamObj->Flags, FO_FILE_MODIFIED); + } + + if (Vcb->StreamObj->PrivateCacheMap) + RfsdSyncUninitializeCacheMap(Vcb->StreamObj); + + ObDereferenceObject(Vcb->StreamObj); + Vcb->StreamObj = NULL; + } + +#if DBG + if (FsRtlNumberOfRunsInLargeMcb(&(Vcb->DirtyMcbs)) != 0) { + LONGLONG DirtyVba; + LONGLONG DirtyLba; + LONGLONG DirtyLength; + int i; + + for (i = 0; FsRtlGetNextLargeMcbEntry (&(Vcb->DirtyMcbs), i, &DirtyVba, &DirtyLba, &DirtyLength); i++) + { + RfsdPrint((DBG_INFO, "DirtyVba = %I64xh\n", DirtyVba)); + RfsdPrint((DBG_INFO, "DirtyLba = %I64xh\n", DirtyLba)); + RfsdPrint((DBG_INFO, "DirtyLen = %I64xh\n\n", DirtyLength)); + } + + DbgBreak(); + } +#endif + + FsRtlUninitializeLargeMcb(&(Vcb->DirtyMcbs)); + + RfsdFreeMcbTree(Vcb->McbTree); + + if (Vcb->GroupDesc) { + ExFreePool(Vcb->GroupDesc); + // CcUnpinData(Vcb->GroupDescBcb); + Vcb->GroupDesc = NULL; + } + + if (Vcb->SuperBlock) { + ExFreePool(Vcb->SuperBlock); + Vcb->SuperBlock = NULL; + } + + ExDeleteResourceLite(&Vcb->McbResource); + + ExDeleteResourceLite(&Vcb->PagingIoResource); + + ExDeleteResourceLite(&Vcb->MainResource); + + IoDeleteDevice(Vcb->DeviceObject); +} + + +VOID +RfsdSyncUninitializeCacheMap ( + IN PFILE_OBJECT FileObject + ) +{ + CACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent; + NTSTATUS WaitStatus; + LARGE_INTEGER RfsdLargeZero = {0,0}; + + + KeInitializeEvent( &UninitializeCompleteEvent.Event, + SynchronizationEvent, + FALSE); + + CcUninitializeCacheMap( FileObject, + &RfsdLargeZero, + &UninitializeCompleteEvent ); + + WaitStatus = KeWaitForSingleObject( &UninitializeCompleteEvent.Event, + Executive, + KernelMode, + FALSE, + NULL); + + ASSERT (NT_SUCCESS(WaitStatus)); +} Added: vendor/rfsd/current/RFSD/RFSD/misc.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/misc.c?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/misc.c (added) +++ vendor/rfsd/current/RFSD/RFSD/misc.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,279 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: misc.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdLog2) +#pragma alloc_text(PAGE, RfsdSysTime) +#pragma alloc_text(PAGE, RfsdInodeTime) +#pragma alloc_text(PAGE, RfsdOEMToUnicode) +#pragma alloc_text(PAGE, RfsdUnicodeToOEM) +#endif + + + + +ULONG +RfsdLog2(ULONG Value) +{ + ULONG Order = 0; + + ASSERT(Value > 0); + + while (Value) { + Order++; + Value >>= 1; + } + + return (Order - 1); +} + +LARGE_INTEGER +RfsdSysTime (IN ULONG i_time) +{ + LARGE_INTEGER SysTime; + + RtlSecondsSince1970ToTime(i_time, &SysTime); + + return SysTime; +} + +ULONG +RfsdInodeTime (IN LARGE_INTEGER SysTime) +{ + ULONG RfsdTime; + + RtlTimeToSecondsSince1970(&SysTime, &RfsdTime); + + return RfsdTime; +} + + +ULONG +RfsdMbsToUnicode( + IN OUT PUNICODE_STRING Unicode, + IN PANSI_STRING Mbs ) +{ + ULONG Length = 0; + int i, mbc = 0; + WCHAR uc; + + /* Count the length of the resulting Unicode. */ + for (i = 0; i < Mbs->Length; i += mbc) { + + mbc = PAGE_TABLE->char2uni( + (PUCHAR)&(Mbs->Buffer[i]), + Mbs->Length - i, + &uc + ); + + if (mbc <= 0) { + + /* Invalid character. */ + return 0; + } + + Length += 2; + } + + if (Unicode) { + if (Unicode->MaximumLength < Length) { + + DbgBreak(); + return 0; + } + + Unicode->Length = 0; + mbc = 0; + + for (i = 0; i < Mbs->Length; i += mbc) { + + mbc = PAGE_TABLE->char2uni( + (PUCHAR)&(Mbs->Buffer[i]), + Mbs->Length - i, + &uc + ); + Unicode->Buffer[Unicode->Length/2] = uc; + + Unicode->Length += 2; + } + } + + return Length; +} + +ULONG +RfsdUnicodeToMbs ( + IN OUT PANSI_STRING Mbs, + IN PUNICODE_STRING Unicode) +{ + ULONG Length = 0; + UCHAR mbs[0x10]; + int i, mbc; + + /* Count the length of the resulting mbc-8. */ + for (i = 0; i < (Unicode->Length / 2); i++) { + + RtlZeroMemory(mbs, 0x10); + mbc = PAGE_TABLE->uni2char( + Unicode->Buffer[i], + mbs, + 0x10 + ); + + if (mbc <= 0) { + + /* Invalid character. */ + return 0; + } + + Length += mbc; + } + + if (Mbs) { + + if (Mbs->MaximumLength < Length) { + + DbgBreak(); + return 0; + } + + Mbs->Length = 0; + + for (i = 0; i < (Unicode->Length / 2); i++) { + + mbc = PAGE_TABLE->uni2char( + Unicode->Buffer[i], + mbs, + 0x10 + ); + + RtlCopyMemory( + (PUCHAR)&(Mbs->Buffer[Mbs->Length]), + &mbs[0], + mbc + ); + + Mbs->Length += (USHORT)mbc; + } + } + + return Length; +} + + +ULONG +RfsdOEMToUnicodeSize( + IN PANSI_STRING Oem + ) +{ + if (PAGE_TABLE) { + return RfsdMbsToUnicode(NULL, Oem); + } + + return RtlOemStringToCountedUnicodeSize(Oem); +} + + +NTSTATUS +RfsdOEMToUnicode( + IN OUT PUNICODE_STRING Unicode, + IN POEM_STRING Oem ) +{ + NTSTATUS Status; + + + if (PAGE_TABLE) { + Status = RfsdMbsToUnicode(Unicode, Oem); + + if (Status == Unicode->Length) { + Status = STATUS_SUCCESS; + } else { + Status = STATUS_UNSUCCESSFUL; + } + + goto errorout; + } + + + Status = RtlOemStringToUnicodeString( + Unicode, + Oem, + FALSE ); + + if (!NT_SUCCESS(Status)) + { + DbgBreak(); + goto errorout; + } + +errorout: + + return Status; +} + +ULONG +RfsdUnicodeToOEMSize( + IN PUNICODE_STRING Unicode + ) +{ + if (PAGE_TABLE) { + + return RfsdUnicodeToMbs(NULL, Unicode); + } + + return RtlxUnicodeStringToOemSize(Unicode); +} + + +NTSTATUS +RfsdUnicodeToOEM ( + IN OUT POEM_STRING Oem, + IN PUNICODE_STRING Unicode) +{ + NTSTATUS Status; + + if (PAGE_TABLE) { + + Status = RfsdUnicodeToMbs(Oem, Unicode); + + if (Status == Oem->Length) { + Status = STATUS_SUCCESS; + } else { + Status = STATUS_UNSUCCESSFUL; + } + + goto errorout; + } + + Status = RtlUnicodeStringToOemString( + Oem, + Unicode, + FALSE ); + + if (!NT_SUCCESS(Status)) + { + DbgBreak(); + goto errorout; + } + +errorout: + + return Status; +} + Added: vendor/rfsd/current/RFSD/RFSD/nls.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls.c?rev=2…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,276 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: nls.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GOBALS** ****************************************************************/ + +extern struct nls_table *tables; +extern spinlock_t nls_lock; + +/* DECLARES ****************************************************************/ + +#undef FULL_CODEPAGES_SUPPORT + +#ifdef FULL_CODEPAGES_SUPPORT + +DECLARE_INIT(init_nls_cp1251); +DECLARE_EXIT(exit_nls_cp1251); +DECLARE_INIT(init_nls_cp1255); +DECLARE_EXIT(exit_nls_cp1255); +DECLARE_INIT(init_nls_cp437); +DECLARE_EXIT(exit_nls_cp437); +DECLARE_INIT(init_nls_cp737); +DECLARE_EXIT(exit_nls_cp737); +DECLARE_INIT(init_nls_cp775); +DECLARE_EXIT(exit_nls_cp775); +DECLARE_INIT(init_nls_cp850); +DECLARE_EXIT(exit_nls_cp850); +DECLARE_INIT(init_nls_cp852); +DECLARE_EXIT(exit_nls_cp852); +DECLARE_INIT(init_nls_cp855); +DECLARE_EXIT(exit_nls_cp855); +DECLARE_INIT(init_nls_cp857); +DECLARE_EXIT(exit_nls_cp857); +DECLARE_INIT(init_nls_cp860); +DECLARE_EXIT(exit_nls_cp860); +DECLARE_INIT(init_nls_cp861); +DECLARE_EXIT(exit_nls_cp861); +DECLARE_INIT(init_nls_cp862); +DECLARE_EXIT(exit_nls_cp862); +DECLARE_INIT(init_nls_cp863); +DECLARE_EXIT(exit_nls_cp863); +DECLARE_INIT(init_nls_cp864); +DECLARE_EXIT(exit_nls_cp864); +DECLARE_INIT(init_nls_cp865); +DECLARE_EXIT(exit_nls_cp865); +DECLARE_INIT(init_nls_cp866); +DECLARE_EXIT(exit_nls_cp866); +DECLARE_INIT(init_nls_cp869); +DECLARE_EXIT(exit_nls_cp869); +DECLARE_INIT(init_nls_cp874); +DECLARE_EXIT(exit_nls_cp874); +DECLARE_INIT(init_nls_cp932); +DECLARE_EXIT(exit_nls_cp932); +DECLARE_INIT(init_nls_cp949); +DECLARE_EXIT(exit_nls_cp949); +DECLARE_INIT(init_nls_cp950); +DECLARE_EXIT(exit_nls_cp950); +DECLARE_INIT(init_nls_euc_jp); +DECLARE_EXIT(exit_nls_euc_jp); +DECLARE_INIT(init_nls_euc_kr); +DECLARE_EXIT(exit_nls_euc_kr); +DECLARE_INIT(init_nls_iso8859_1); +DECLARE_EXIT(exit_nls_iso8859_1); +DECLARE_INIT(init_nls_iso8859_13); +DECLARE_EXIT(exit_nls_iso8859_13); +DECLARE_INIT(init_nls_iso8859_14); +DECLARE_EXIT(exit_nls_iso8859_14); +DECLARE_INIT(init_nls_iso8859_15); +DECLARE_EXIT(exit_nls_iso8859_15); +DECLARE_INIT(init_nls_iso8859_2); +DECLARE_EXIT(exit_nls_iso8859_2); +DECLARE_INIT(init_nls_iso8859_3); +DECLARE_EXIT(exit_nls_iso8859_3); +DECLARE_INIT(init_nls_iso8859_4); +DECLARE_EXIT(exit_nls_iso8859_4); +DECLARE_INIT(init_nls_iso8859_5); +DECLARE_EXIT(exit_nls_iso8859_5); +DECLARE_INIT(init_nls_iso8859_6); +DECLARE_EXIT(exit_nls_iso8859_6); +DECLARE_INIT(init_nls_iso8859_7); +DECLARE_EXIT(exit_nls_iso8859_7); +DECLARE_INIT(init_nls_iso8859_8); +DECLARE_EXIT(exit_nls_iso8859_8); +DECLARE_INIT(init_nls_iso8859_9); +DECLARE_EXIT(exit_nls_iso8859_9); +DECLARE_INIT(init_nls_koi8_r); +DECLARE_EXIT(exit_nls_koi8_r); +DECLARE_INIT(init_nls_koi8_ru); +DECLARE_EXIT(exit_nls_koi8_ru); +DECLARE_INIT(init_nls_koi8_u); +DECLARE_EXIT(exit_nls_koi8_u); +DECLARE_INIT(init_nls_sjis); +DECLARE_EXIT(exit_nls_sjis); +DECLARE_INIT(init_nls_tis_620); +DECLARE_EXIT(exit_nls_tis_620); +DECLARE_INIT(init_nls_big5); +DECLARE_EXIT(exit_nls_big5); +DECLARE_INIT(init_nls_cp936); +DECLARE_EXIT(exit_nls_cp936); +DECLARE_INIT(init_nls_gb2312); +DECLARE_EXIT(exit_nls_gb2312); + +#endif //FULL_CODEPAGES_SUPPORT + +DECLARE_INIT(init_nls_utf8); +DECLARE_EXIT(exit_nls_utf8); + + +/* FUNCTIONS ****************************************************************/ + + +int +RfsdLoadAllNls() +{ + int rc; + + tables = NULL; + spin_lock_init(&nls_lock); + + // + // Loading nls for utf8 ... + // + + LOAD_NLS(init_nls_utf8); + +#ifdef FULL_CODEPAGES_SUPPORT + + // + // Loading nls for chinese gb2312 ... + // + + LOAD_NLS(init_nls_cp936); + LOAD_NLS(init_nls_gb2312); + + + LOAD_NLS(init_nls_cp1251); + LOAD_NLS(init_nls_cp1255); + LOAD_NLS(init_nls_cp437); + LOAD_NLS(init_nls_cp737); + LOAD_NLS(init_nls_cp775); + LOAD_NLS(init_nls_cp850); + LOAD_NLS(init_nls_cp852); + LOAD_NLS(init_nls_cp855); + LOAD_NLS(init_nls_cp857); + LOAD_NLS(init_nls_cp860); + LOAD_NLS(init_nls_cp861); + LOAD_NLS(init_nls_cp862); + LOAD_NLS(init_nls_cp863); + LOAD_NLS(init_nls_cp864); + LOAD_NLS(init_nls_cp865); + LOAD_NLS(init_nls_cp866); + LOAD_NLS(init_nls_cp869); + LOAD_NLS(init_nls_cp874); + + // + // Loading nls for chinese big5 + // + + LOAD_NLS(init_nls_cp950); + LOAD_NLS(init_nls_big5); + + // + // Loading jp codepage + // + + LOAD_NLS(init_nls_cp932); + LOAD_NLS(init_nls_euc_jp); + LOAD_NLS(init_nls_sjis); + + // + // Loading korean nls codepage + // + + LOAD_NLS(init_nls_cp949); + LOAD_NLS(init_nls_euc_kr); + + LOAD_NLS(init_nls_iso8859_1); + LOAD_NLS(init_nls_iso8859_13); + LOAD_NLS(init_nls_iso8859_14); + LOAD_NLS(init_nls_iso8859_15); + LOAD_NLS(init_nls_iso8859_2); + LOAD_NLS(init_nls_iso8859_3); + LOAD_NLS(init_nls_iso8859_4); + LOAD_NLS(init_nls_iso8859_5); + LOAD_NLS(init_nls_iso8859_6); + LOAD_NLS(init_nls_iso8859_7); + LOAD_NLS(init_nls_iso8859_8); + LOAD_NLS(init_nls_iso8859_9); + LOAD_NLS(init_nls_koi8_r); + LOAD_NLS(init_nls_koi8_u); + + LOAD_NLS(init_nls_koi8_ru); + LOAD_NLS(init_nls_tis_620); + +#endif //FULL_CODEPAGES_SUPPORT + + + DbgPrint("RfsdLoadAllNls: succeed to load all codepages ...\n"); + +errorout: + + return rc; +} + + +VOID +RfsdUnloadAllNls() +{ +#ifdef FULL_CODEPAGES_SUPPORT + + UNLOAD_NLS(exit_nls_cp1251); + UNLOAD_NLS(exit_nls_cp1255); + UNLOAD_NLS(exit_nls_cp437); + UNLOAD_NLS(exit_nls_cp737); + UNLOAD_NLS(exit_nls_cp775); + UNLOAD_NLS(exit_nls_cp850); + UNLOAD_NLS(exit_nls_cp852); + UNLOAD_NLS(exit_nls_cp855); + UNLOAD_NLS(exit_nls_cp857); + UNLOAD_NLS(exit_nls_cp860); + UNLOAD_NLS(exit_nls_cp861); + UNLOAD_NLS(exit_nls_cp862); + UNLOAD_NLS(exit_nls_cp863); + UNLOAD_NLS(exit_nls_cp864); + UNLOAD_NLS(exit_nls_cp865); + UNLOAD_NLS(exit_nls_cp866); + UNLOAD_NLS(exit_nls_cp869); + UNLOAD_NLS(exit_nls_cp874); + UNLOAD_NLS(exit_nls_cp949); + UNLOAD_NLS(exit_nls_cp950); + UNLOAD_NLS(exit_nls_cp932); + UNLOAD_NLS(exit_nls_euc_jp); + UNLOAD_NLS(exit_nls_big5); + UNLOAD_NLS(exit_nls_euc_kr); + UNLOAD_NLS(exit_nls_iso8859_1); + UNLOAD_NLS(exit_nls_iso8859_13); + UNLOAD_NLS(exit_nls_iso8859_14); + UNLOAD_NLS(exit_nls_iso8859_15); + UNLOAD_NLS(exit_nls_iso8859_2); + UNLOAD_NLS(exit_nls_iso8859_3); + UNLOAD_NLS(exit_nls_iso8859_4); + UNLOAD_NLS(exit_nls_iso8859_5); + UNLOAD_NLS(exit_nls_iso8859_6); + UNLOAD_NLS(exit_nls_iso8859_7); + UNLOAD_NLS(exit_nls_iso8859_8); + UNLOAD_NLS(exit_nls_iso8859_9); + UNLOAD_NLS(exit_nls_koi8_r); + UNLOAD_NLS(exit_nls_koi8_ru); + UNLOAD_NLS(exit_nls_koi8_u); + UNLOAD_NLS(exit_nls_sjis); + UNLOAD_NLS(exit_nls_tis_620); + + // + // Unloading nls of chinese ... + // + + UNLOAD_NLS(exit_nls_gb2312); + UNLOAD_NLS(exit_nls_cp936); + +#endif //FULL_CODEPAGES_SUPPORT + + // + // Unloading nls of utf8 ... + // + + UNLOAD_NLS(exit_nls_utf8); +} Added: vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/CVS/Ent…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,48 @@ +/MAKEFILE/1.1/Tue Jul 26 21:19:42 2005// +/Sources/1.1/Tue Jul 26 21:19:42 2005// +/nls_base.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_big5.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp1251.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp1255.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp437.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp737.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp775.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp850.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp852.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp855.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp857.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp860.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp861.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp862.c/1.1/Tue Jul 26 21:19:42 2005// +/nls_cp863.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp864.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp865.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp866.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp869.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp874.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp932.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp936.c/1.1/Tue Jul 26 21:19:43 2005// +/nls_cp949.c/1.1/Tue Jul 26 21:19:44 2005// +/nls_cp950.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_euc-jp.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_euc-kr.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_gb2312.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_iso8859-1.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_iso8859-13.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_iso8859-14.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_iso8859-15.c/1.1/Tue Jul 26 21:19:45 2005// +/nls_iso8859-2.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-3.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-4.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-5.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-6.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-7.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-8.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_iso8859-9.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_koi8-r.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_koi8-ru.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_koi8-u.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_sjis.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_tis-620.c/1.1/Tue Jul 26 21:19:46 2005// +/nls_utf8.c/1.1/Tue Jul 26 21:19:46 2005// +D Added: vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/CVS/Ent…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Extra (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,47 @@ +/MAKEFILE////*/// +/Sources////*/// +/nls_base.c////*/// +/nls_big5.c////*/// +/nls_cp1251.c////*/// +/nls_cp1255.c////*/// +/nls_cp437.c////*/// +/nls_cp737.c////*/// +/nls_cp775.c////*/// +/nls_cp850.c////*/// +/nls_cp852.c////*/// +/nls_cp855.c////*/// +/nls_cp857.c////*/// +/nls_cp860.c////*/// +/nls_cp861.c////*/// +/nls_cp862.c////*/// +/nls_cp863.c////*/// +/nls_cp864.c////*/// +/nls_cp865.c////*/// +/nls_cp866.c////*/// +/nls_cp869.c////*/// +/nls_cp874.c////*/// +/nls_cp932.c////*/// +/nls_cp936.c////*/// +/nls_cp949.c////*/// +/nls_cp950.c////*/// +/nls_euc-jp.c////*/// +/nls_euc-kr.c////*/// +/nls_gb2312.c////*/// +/nls_iso8859-1.c////*/// +/nls_iso8859-13.c////*/// +/nls_iso8859-14.c////*/// +/nls_iso8859-15.c////*/// +/nls_iso8859-2.c////*/// +/nls_iso8859-3.c////*/// +/nls_iso8859-4.c////*/// +/nls_iso8859-5.c////*/// +/nls_iso8859-6.c////*/// +/nls_iso8859-7.c////*/// +/nls_iso8859-8.c////*/// +/nls_iso8859-9.c////*/// +/nls_koi8-r.c////*/// +/nls_koi8-ru.c////*/// +/nls_koi8-u.c////*/// +/nls_sjis.c////*/// +/nls_tis-620.c////*/// +/nls_utf8.c////*/// Added: vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/CVS/Ent…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/nls/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/CVS/Ent…
============================================================================== (empty) Added: vendor/rfsd/current/RFSD/RFSD/nls/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/CVS/Rep…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/CVS/Repository (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/RFSD/RFSD/nls Added: vendor/rfsd/current/RFSD/RFSD/nls/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/CVS/Roo…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/CVS/Root (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/RFSD/RFSD/nls/MAKEFILE URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/MAKEFIL…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/MAKEFILE (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/MAKEFILE Fri Apr 14 13:01:12 2006 @@ -1,0 +1,7 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the driver components of the Windows NT DDK +# + +!INCLUDE $(NTMAKEENV)\makefile.def Added: vendor/rfsd/current/RFSD/RFSD/nls/Sources URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/Sources…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/Sources (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/Sources Fri Apr 14 13:01:12 2006 @@ -1,0 +1,43 @@ +# +# Sources for Rfsd file system driver for windows +# mattwu(a)163.com /
http://rfsdfsd.sf.net
+# + +# Name and type of the output file: +MAJORCOMP=rfsdfsd +MINORCOMP=nlssup + +TARGETNAME=nlssup +TARGETTYPE=LIBRARY +TARGETPATH=..\$(DDKBUILDENV)\ + +# Creates a file used by Visual Studio to navigate the source code. +# BROWSER_INFO=FALSE +RCNOFONTMAP=TRUE + +INCLUDES=..;.;$(DRIVER_INC_PATH); + +# The source code: +SOURCES=nls_base.c nls_big5.c \ + nls_cp1251.c nls_cp1255.c \ + nls_cp437.c nls_cp737.c \ + nls_cp775.c nls_cp850.c \ + nls_cp852.c nls_cp855.c \ + nls_cp857.c nls_cp860.c \ + nls_cp861.c nls_cp862.c \ + nls_cp863.c nls_cp864.c \ + nls_cp865.c nls_cp866.c \ + nls_cp869.c nls_cp874.c \ + nls_cp932.c nls_cp936.c \ + nls_cp949.c nls_cp950.c \ + nls_euc-jp.c nls_euc-kr.c \ + nls_gb2312.c nls_iso8859-1.c \ + nls_iso8859-13.c nls_iso8859-14.c \ + nls_iso8859-15.c nls_iso8859-2.c \ + nls_iso8859-3.c nls_iso8859-4.c \ + nls_iso8859-5.c nls_iso8859-6.c \ + nls_iso8859-7.c nls_iso8859-8.c \ + nls_iso8859-9.c nls_koi8-r.c \ + nls_koi8-ru.c nls_koi8-u.c \ + nls_utf8.c nls_sjis.c \ + nls_tis-620.c Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_base.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_bas…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_base.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_base.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,506 @@ +/* + * linux/fs/nls.c + * + * Native language support--charsets and unicode translations. + * By Gordon Chaffee 1996, 1997 + * + * Unicode based case conversion 1999 by Wolfram Pienkoss + * + */ + +#include <linux/version.h> +#include <linux/module.h> +#include <linux/string.h> +#include <linux/config.h> +#include <linux/nls.h> +#include <linux/slab.h> +#include <linux/errno.h> +#ifdef CONFIG_KMOD +#include <linux/kmod.h> +#endif +#include <linux/spinlock.h> + +struct nls_table *tables; +spinlock_t nls_lock; + +/* + * Sample implementation from Unicode home page. + *
http://www.stonehand.com/unicode/standard/fss-utf.html
+ */ +struct utf8_table { + int cmask; + int cval; + int shift; + long lmask; + long lval; +}; + +static struct utf8_table utf8_table[] = +{ + {0x80, 0x00, 0*6, 0x7F, 0, /* 1 byte sequence */}, + {0xE0, 0xC0, 1*6, 0x7FF, 0x80, /* 2 byte sequence */}, + {0xF0, 0xE0, 2*6, 0xFFFF, 0x800, /* 3 byte sequence */}, + {0xF8, 0xF0, 3*6, 0x1FFFFF, 0x10000, /* 4 byte sequence */}, + {0xFC, 0xF8, 4*6, 0x3FFFFFF, 0x200000, /* 5 byte sequence */}, + {0xFE, 0xFC, 5*6, 0x7FFFFFFF, 0x4000000, /* 6 byte sequence */}, + {0, /* end of table */} +}; + +int +utf8_mbtowc(wchar_t *p, const __u8 *s, int n) +{ + long l; + int c0, c, nc; + struct utf8_table *t; + + nc = 0; + c0 = *s; + l = c0; + for (t = utf8_table; t->cmask; t++) { + nc++; + if ((c0 & t->cmask) == t->cval) { + l &= t->lmask; + if (l < t->lval) + return -1; + *p = (wchar_t) l; + return nc; + } + if (n <= nc) + return -1; + s++; + c = (*s ^ 0x80) & 0xFF; + if (c & 0xC0) + return -1; + l = (l << 6) | c; + } + return -1; +} + +int +utf8_mbstowcs(wchar_t *pwcs, const __u8 *s, int n) +{ + __u16 *op; + const __u8 *ip; + int size; + + op = pwcs; + ip = s; + while (*ip && n > 0) { + if (*ip & 0x80) { + size = utf8_mbtowc(op, ip, n); + if (size == -1) { + /* Ignore character and move on */ + ip++; + n--; + } else { + op += size; + ip += size; + n -= size; + } + } else { + *op++ = *ip++; + } + } + return (op - pwcs); +} + +int +utf8_wctomb(__u8 *s, wchar_t wc, int maxlen) +{ + long l; + int c, nc; + struct utf8_table *t; + + if (s == 0) + return 0; + + l = wc; + nc = 0; + for (t = utf8_table; t->cmask && maxlen; t++, maxlen--) { + nc++; + if (l <= t->lmask) { + c = t->shift; + *s = (__u8)(t->cval | (l >> c)); + while (c > 0) { + c -= 6; + s++; + *s = 0x80 | (__u8)((l >> c) & 0x3F); + } + return nc; + } + } + return -1; +} + +int +utf8_wcstombs(__u8 *s, const wchar_t *pwcs, int maxlen) +{ + const __u16 *ip; + __u8 *op; + int size; + + op = s; + ip = pwcs; + while (*ip && maxlen > 0) { + if (*ip > 0x7f) { + size = utf8_wctomb(op, *ip, maxlen); + if (size == -1) { + /* Ignore character and move on */ + maxlen--; + } else { + op += size; + maxlen -= size; + } + } else { + *op++ = (__u8) *ip; + } + ip++; + } + return (op - s); +} + +int register_nls(struct nls_table * nls) +{ + struct nls_table ** tmp = &tables; + + if (!nls) + return -EINVAL; + if (nls->next) + return -EBUSY; + + spin_lock(&nls_lock); + while (*tmp) { + if (nls == *tmp) { + spin_unlock(&nls_lock); + return -EBUSY; + } + tmp = &(*tmp)->next; + } + nls->next = tables; + tables = nls; + spin_unlock(&nls_lock); + return 0; +} + +int unregister_nls(struct nls_table * nls) +{ + struct nls_table ** tmp = &tables; + + spin_lock(&nls_lock); + while (*tmp) { + if (nls == *tmp) { + *tmp = nls->next; + spin_unlock(&nls_lock); + return 0; + } + tmp = &(*tmp)->next; + } + spin_unlock(&nls_lock); + return -EINVAL; +} + +static struct nls_table *find_nls(char *charset) +{ + struct nls_table *nls; + spin_lock(&nls_lock); + for (nls = tables; nls; nls = nls->next) + if (! _stricmp(nls->charset, charset)) + break; + if (nls && !try_inc_mod_count(nls->owner)) + nls = NULL; + spin_unlock(&nls_lock); + return nls; +} + +struct nls_table *load_nls(char *charset) +{ + struct nls_table *nls; +#ifdef CONFIG_KMOD + char buf[40]; + int ret; +#endif + + nls = find_nls(charset); + if (nls) + return nls; + +#ifdef CONFIG_KMOD + if (strlen(charset) > sizeof(buf) - sizeof("nls_")) { + printk("Unable to load NLS charset %s: name too long\n", + charset); + return NULL; + } + + sprintf(buf, "nls_%s", charset); + ret = request_module(buf); + if (ret != 0) { + printk("Unable to load NLS charset %s\n", charset); + return NULL; + } + nls = find_nls(charset); +#endif + return nls; +} + +void unload_nls(struct nls_table *nls) +{ + if (nls->owner) + __MOD_DEC_USE_COUNT(nls->owner); +} + +wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0080, 0x0081, 0x0082, 0x0083, + 0x0084, 0x0085, 0x0086, 0x0087, + 0x0088, 0x0089, 0x008a, 0x008b, + 0x008c, 0x008d, 0x008e, 0x008f, + /* 0x90*/ + 0x0090, 0x0091, 0x0092, 0x0093, + 0x0094, 0x0095, 0x0096, 0x0097, + 0x0098, 0x0099, 0x009a, 0x009b, + 0x009c, 0x009d, 0x009e, 0x009f, + /* 0xa0*/ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, + 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, + 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0*/ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, + 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, + 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0*/ + 0x00d0, 0x00d1, 0x00d2, 0x00d3, + 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, + 0x00dc, 0x00dd, 0x00de, 0x00df, + /* 0xe0*/ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, + 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0*/ + 0x00f0, 0x00f1, 0x00f2, 0x00f3, + 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x00fd, 0x00fe, 0x00ff, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char *page_uni2charset[256] = { + page00 +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +#if 0 // Masked by Matt + +static struct nls_table default_table = { + "default", + uni2char, + char2uni, + charset2lower, + charset2upper, + NULL, +}; + +/* Returns a simple default translation table */ +struct nls_table *load_nls_default(void) +{ + struct nls_table *default_nls; + + default_nls = load_nls(CONFIG_NLS_DEFAULT); + if (default_nls != NULL) + return default_nls; + else + return &default_table; + return NULL; +} + +#endif + +EXPORT_SYMBOL(register_nls); +EXPORT_SYMBOL(unregister_nls); +EXPORT_SYMBOL(unload_nls); +EXPORT_SYMBOL(load_nls); +EXPORT_SYMBOL(load_nls_default); +EXPORT_SYMBOL(utf8_mbtowc); +EXPORT_SYMBOL(utf8_mbstowcs); +EXPORT_SYMBOL(utf8_wctomb); +EXPORT_SYMBOL(utf8_wcstombs); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_big5.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_big…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_big5.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_big5.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * linux/fs/nls_big5.c + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static struct nls_table table = { + "big5", + NULL, + NULL, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_big5(void) +{ + p_nls = load_nls("cp950"); + + if (p_nls) { + table.uni2char = p_nls->uni2char; + table.char2uni = p_nls->char2uni; + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_big5(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_big5) +module_exit(exit_nls_big5) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1251.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1251.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1251.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,318 @@ +/* + * linux/fs/nls_cp1251.c + * + * Charset cp1251 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0402, 0x0403, 0x201a, 0x0453, + 0x201e, 0x2026, 0x2020, 0x2021, + 0x20ac, 0x2030, 0x0409, 0x2039, + 0x040a, 0x040c, 0x040b, 0x040f, + /* 0x90*/ + 0x0452, 0x2018, 0x2019, 0x201c, + 0x201d, 0x2022, 0x2013, 0x2014, + 0x0000, 0x2122, 0x0459, 0x203a, + 0x045a, 0x045c, 0x045b, 0x045f, + /* 0xa0*/ + 0x00a0, 0x040e, 0x045e, 0x0408, + 0x00a4, 0x0490, 0x00a6, 0x00a7, + 0x0401, 0x00a9, 0x0404, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x0407, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x0406, 0x0456, + 0x0491, 0x00b5, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x0454, 0x00bb, + 0x0458, 0x0405, 0x0455, 0x0457, + /* 0xc0*/ + 0x0410, 0x0411, 0x0412, 0x0413, + 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, + 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xd0*/ + 0x0420, 0x0421, 0x0422, 0x0423, + 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, + 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xe0*/ + 0x0430, 0x0431, 0x0432, 0x0433, + 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, + 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xf0*/ + 0x0440, 0x0441, 0x0442, 0x0443, + 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, + 0x044c, 0x044d, 0x044e, 0x044f, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0x00, 0x00, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page04[256] = { + 0x00, 0xa8, 0x80, 0x81, 0xaa, 0xbd, 0xb2, 0xaf, /* 0x00-0x07 */ + 0xa3, 0x8a, 0x8c, 0x8e, 0x8d, 0x00, 0xa1, 0x8f, /* 0x08-0x0f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x10-0x17 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x18-0x1f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x20-0x27 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x28-0x2f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x30-0x37 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x38-0x3f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x40-0x47 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0x48-0x4f */ + 0x00, 0xb8, 0x90, 0x83, 0xba, 0xbe, 0xb3, 0xbf, /* 0x50-0x57 */ + 0xbc, 0x9a, 0x9c, 0x9e, 0x9d, 0x00, 0xa2, 0x9f, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xa5, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ +}; + +static unsigned char page21[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, page21, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + 0x90, 0x83, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x9a, 0x8b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa2, 0xa2, 0xbc, 0xa4, 0xb4, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xb8, 0xa9, 0xba, 0xab, 0xac, 0xad, 0xae, 0xbf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb3, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbe, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + 0x80, 0x81, 0x82, 0x81, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x80, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x8a, 0x9b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa1, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb2, 0xa5, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xa8, 0xb9, 0xaa, 0xbb, 0xa3, 0xbd, 0xbd, 0xaf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp1251", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp1251(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp1251(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp1251) +module_exit(exit_nls_cp1251) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1255.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1255.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp1255.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,399 @@ +/* + * linux/fs/nls_cp1255.c + * + * Charset cp1255 translation tables. + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x20ac, 0x0000, 0x201a, 0x0192, + 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0000, 0x2039, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x2018, 0x2019, 0x201c, + 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0000, 0x203a, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, + 0x20aa, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00d7, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x203e, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00f7, 0x00bb, + 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0*/ + 0x05b0, 0x05b1, 0x05b2, 0x05b3, + 0x05b4, 0x05b5, 0x05b6, 0x05b7, + 0x05b8, 0x05b9, 0x0000, 0x05bb, + 0x05bc, 0x05bd, 0x05be, 0x05bf, + /* 0xd0*/ + 0x05c0, 0x05c1, 0x05c2, 0x05c3, + 0x05f0, 0x05f1, 0x05f2, 0x05f3, + 0x05f4, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2017, + /* 0xe0*/ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, + 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, + 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0xf0*/ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, + 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0xa2, 0xa3, 0x00, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, /* 0xf0-0xf7 */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page02[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static unsigned char page05[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xb0-0xb7 */ + 0xc8, 0xc9, 0x00, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xb8-0xbf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xd0-0xd7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xd8-0xdf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xe0-0xe7 */ + 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfe, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x82, 0x00, 0x93, 0x94, 0x84, 0x00, /* 0x18-0x1f */ + 0x86, 0x87, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x8b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa4, 0x00, 0x80, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static unsigned char page21[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, page02, NULL, NULL, page05, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, page21, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp1255", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp1255(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp1255(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp1255) +module_exit(exit_nls_cp1255) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp437.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp4…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp437.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp437.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,404 @@ +/* + * linux/fs/nls_cp437.c + * + * Charset cp437 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, + 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90*/ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, + 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00a2, + 0x00a3, 0x00a5, 0x20a7, 0x0192, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03b1, 0x00df, 0x0393, 0x03c0, + 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, + 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0*/ + 0x2261, 0x00b1, 0x2265, 0x2264, + 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x9d, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x98, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xa0-0xa7 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x91, 0x91, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x94, 0x81, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa4, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0x00, 0xe3, 0xe5, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xed, 0x00, 0x00, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0x00, 0x8e, 0x00, 0x8f, 0x80, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x92, 0x92, 0x00, 0x99, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0xe4, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xe8, 0x00, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp437", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp437(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp437(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp437) +module_exit(exit_nls_cp437) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp737.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp7…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp737.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp737.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,367 @@ +/* + * linux/fs/nls_cp737.c + * + * Charset cp737 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0391, 0x0392, 0x0393, 0x0394, + 0x0395, 0x0396, 0x0397, 0x0398, + 0x0399, 0x039a, 0x039b, 0x039c, + 0x039d, 0x039e, 0x039f, 0x03a0, + /* 0x90*/ + 0x03a1, 0x03a3, 0x03a4, 0x03a5, + 0x03a6, 0x03a7, 0x03a8, 0x03a9, + 0x03b1, 0x03b2, 0x03b3, 0x03b4, + 0x03b5, 0x03b6, 0x03b7, 0x03b8, + /* 0xa0*/ + 0x03b9, 0x03ba, 0x03bb, 0x03bc, + 0x03bd, 0x03be, 0x03bf, 0x03c0, + 0x03c1, 0x03c3, 0x03c2, 0x03c4, + 0x03c5, 0x03c6, 0x03c7, 0x03c8, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03c9, 0x03ac, 0x03ad, 0x03ae, + 0x03ca, 0x03af, 0x03cc, 0x03cd, + 0x03cb, 0x03ce, 0x0386, 0x0388, + 0x0389, 0x038a, 0x038c, 0x038e, + /* 0xf0*/ + 0x038f, 0x00b1, 0x2265, 0x2264, + 0x03aa, 0x03ab, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, /* 0xf0-0xf7 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, /* 0x80-0x87 */ + 0xeb, 0xec, 0xed, 0x00, 0xee, 0x00, 0xef, 0xf0, /* 0x88-0x8f */ + 0x00, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, /* 0x90-0x97 */ + 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, /* 0x98-0x9f */ + 0x8f, 0x90, 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, /* 0xa0-0xa7 */ + 0x96, 0x97, 0xf4, 0xf5, 0xe1, 0xe2, 0xe3, 0xe5, /* 0xa8-0xaf */ + 0x00, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, /* 0xb0-0xb7 */ + 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 0xb8-0xbf */ + 0xa7, 0xa8, 0xaa, 0xa9, 0xab, 0xac, 0xad, 0xae, /* 0xc0-0xc7 */ + 0xaf, 0xe0, 0xe4, 0xe8, 0xe6, 0xe7, 0xe9, 0x00, /* 0xc8-0xcf */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x80-0x87 */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x88-0x8f */ + 0xa8, 0xa9, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xe0, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xe1, 0xe2, 0xe3, 0xe5, 0xe6, 0xe7, /* 0xe8-0xef */ + 0xe9, 0xf1, 0xf2, 0xf3, 0xe4, 0xe8, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x98-0x9f */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0xa0-0xa7 */ + 0x90, 0x91, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x97, 0xea, 0xeb, 0xec, 0xf4, 0xed, 0xee, 0xef, /* 0xe0-0xe7 */ + 0xf5, 0xf0, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp737", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp737(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp737(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp737) +module_exit(exit_nls_cp737) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp775.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp7…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp775.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp775.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,336 @@ +/* + * linux/fs/nls_cp775.c + * + * Charset cp775 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0106, 0x00fc, 0x00e9, 0x0101, + 0x00e4, 0x0123, 0x00e5, 0x0107, + 0x0142, 0x0113, 0x0156, 0x0157, + 0x012b, 0x0179, 0x00c4, 0x00c5, + /* 0x90*/ + 0x00c9, 0x00e6, 0x00c6, 0x014d, + 0x00f6, 0x0122, 0x00a2, 0x015a, + 0x015b, 0x00d6, 0x00dc, 0x00f8, + 0x00a3, 0x00d8, 0x00d7, 0x00a4, + /* 0xa0*/ + 0x0100, 0x012a, 0x00f3, 0x017b, + 0x017c, 0x017a, 0x201d, 0x00a6, + 0x00a9, 0x00ae, 0x00ac, 0x00bd, + 0x00bc, 0x0141, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x0104, 0x010c, 0x0118, + 0x0116, 0x2563, 0x2551, 0x2557, + 0x255d, 0x012e, 0x0160, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x0172, 0x016a, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x017d, + /* 0xd0*/ + 0x0105, 0x010d, 0x0119, 0x0117, + 0x012f, 0x0161, 0x0173, 0x016b, + 0x017e, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x00d3, 0x00df, 0x014c, 0x0143, + 0x00f5, 0x00d5, 0x00b5, 0x0144, + 0x0136, 0x0137, 0x013b, 0x013c, + 0x0146, 0x0112, 0x0145, 0x2019, + /* 0xf0*/ + 0x00ad, 0x00b1, 0x201c, 0x00be, + 0x00b6, 0x00a7, 0x00f7, 0x201e, + 0x00b0, 0x2219, 0x00b7, 0x00b9, + 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x96, 0x9c, 0x9f, 0x00, 0xa7, 0xf5, /* 0xa0-0xa7 */ + 0x00, 0xa8, 0x00, 0xae, 0xaa, 0xf0, 0xa9, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0x00, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0xfb, 0x00, 0xaf, 0xac, 0xab, 0xf3, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xe0, 0x00, 0xe5, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x9d, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x84, 0x86, 0x91, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xa2, 0x00, 0xe4, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0xa0, 0x83, 0x00, 0x00, 0xb5, 0xd0, 0x80, 0x87, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xb6, 0xd1, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0xed, 0x89, 0x00, 0x00, 0xb8, 0xd3, /* 0x10-0x17 */ + 0xb7, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x95, 0x85, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xa1, 0x8c, 0x00, 0x00, 0xbd, 0xd4, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe9, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0xea, 0xeb, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xad, 0x88, 0xe3, 0xe7, 0xee, 0xec, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xe2, 0x93, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x8b, /* 0x50-0x57 */ + 0x00, 0x00, 0x97, 0x98, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xbe, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xc7, 0xd7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xc6, 0xd6, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8d, 0xa5, 0xa3, 0xa4, 0xcf, 0xd8, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xef, 0x00, 0x00, 0xf2, 0xa6, 0xf7, 0x00, /* 0x18-0x1f */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8b, 0x8b, 0x8c, 0xa5, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x91, 0x91, 0x93, 0x94, 0x85, 0x96, 0x98, /* 0x90-0x97 */ + 0x98, 0x94, 0x81, 0x9b, 0x9c, 0x9b, 0x9e, 0x9f, /* 0x98-0x9f */ + 0x83, 0x8c, 0xa2, 0xa4, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x88, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xd0, 0xd1, 0xd2, /* 0xb0-0xb7 */ + 0xd3, 0xb9, 0xba, 0xbb, 0xbc, 0xd4, 0xd5, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xd6, 0xd7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xd8, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xa2, 0xe1, 0x93, 0xe7, 0xe4, 0xe4, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe9, 0xe9, 0xeb, 0xeb, 0xec, 0x89, 0xec, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0xa0, 0x8e, 0x95, 0x8f, 0x80, /* 0x80-0x87 */ + 0xad, 0xed, 0x8a, 0x8a, 0xa1, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x92, 0x92, 0xe2, 0x99, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x97, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xe0, 0xa3, 0xa3, 0x8d, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xb5, 0xb6, 0xb7, 0xb8, 0xbd, 0xbe, 0xc6, 0xc7, /* 0xd0-0xd7 */ + 0xcf, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe5, 0x00, 0xe3, /* 0xe0-0xe7 */ + 0xe8, 0xe8, 0xea, 0xea, 0xee, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp775", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp775(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp775(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp775) +module_exit(exit_nls_cp775) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp850.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp850.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp850.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,332 @@ +/* + * linux/fs/nls_cp850.c + * + * Charset cp850 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, + 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90*/ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, + 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00f8, + 0x00a3, 0x00d8, 0x00d7, 0x0192, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x00ae, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x00c1, 0x00c2, 0x00c0, + 0x00a9, 0x2563, 0x2551, 0x2557, + 0x255d, 0x00a2, 0x00a5, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x00e3, 0x00c3, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0*/ + 0x00f0, 0x00d0, 0x00ca, 0x00cb, + 0x00c8, 0x0131, 0x00cd, 0x00ce, + 0x00cf, 0x2518, 0x250c, 0x2588, + 0x2584, 0x00a6, 0x00cc, 0x2580, + /* 0xe0*/ + 0x00d3, 0x00df, 0x00d4, 0x00d2, + 0x00f5, 0x00d5, 0x00b5, 0x00fe, + 0x00de, 0x00da, 0x00db, 0x00d9, + 0x00fd, 0x00dd, 0x00af, 0x00b4, + /* 0xf0*/ + 0x00ad, 0x00b1, 0x2017, 0x00be, + 0x00b6, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x00b7, 0x00b9, + 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0xb8, 0xa6, 0xae, 0xaa, 0xf0, 0xa9, 0xee, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0xf7, 0xfb, 0xa7, 0xaf, 0xac, 0xab, 0xf3, 0xa8, /* 0xb8-0xbf */ + 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, /* 0xc8-0xcf */ + 0xd1, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0xed, 0xe8, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0xd0, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0xec, 0xe7, 0x98, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, /* 0x10-0x17 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, NULL, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x91, 0x91, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x94, 0x81, 0x9b, 0x9c, 0x9b, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa4, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xa0, 0x83, 0x85, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd0, 0x88, 0x89, 0x8a, 0xd5, 0xa1, 0x8c, /* 0xd0-0xd7 */ + 0x8b, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x8d, 0xdf, /* 0xd8-0xdf */ + 0xa2, 0xe1, 0x93, 0x95, 0xe4, 0xe4, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe7, 0xa3, 0x96, 0x97, 0xec, 0xec, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0xb6, 0x8e, 0xb7, 0x8f, 0x80, /* 0x80-0x87 */ + 0xd2, 0xd3, 0xd4, 0xd8, 0xd7, 0xde, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x92, 0x92, 0xe2, 0x99, 0xe3, 0xea, 0xeb, /* 0x90-0x97 */ + 0x00, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0xb5, 0xd6, 0xe0, 0xe9, 0xa5, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc7, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd1, 0xd1, 0xd2, 0xd3, 0xd4, 0x49, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe5, 0x00, 0xe8, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xed, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp850", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp850(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp850(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp850) +module_exit(exit_nls_cp850) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp852.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp852.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp852.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,354 @@ +/* + * linux/fs/nls_cp852.c + * + * Charset cp852 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e4, 0x016f, 0x0107, 0x00e7, + 0x0142, 0x00eb, 0x0150, 0x0151, + 0x00ee, 0x0179, 0x00c4, 0x0106, + /* 0x90*/ + 0x00c9, 0x0139, 0x013a, 0x00f4, + 0x00f6, 0x013d, 0x013e, 0x015a, + 0x015b, 0x00d6, 0x00dc, 0x0164, + 0x0165, 0x0141, 0x00d7, 0x010d, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x0104, 0x0105, 0x017d, 0x017e, + 0x0118, 0x0119, 0x00ac, 0x017a, + 0x010c, 0x015f, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x00c1, 0x00c2, 0x011a, + 0x015e, 0x2563, 0x2551, 0x2557, + 0x255d, 0x017b, 0x017c, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x0102, 0x0103, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0*/ + 0x0111, 0x0110, 0x010e, 0x00cb, + 0x010f, 0x0147, 0x00cd, 0x00ce, + 0x011b, 0x2518, 0x250c, 0x2588, + 0x2584, 0x0162, 0x016e, 0x2580, + /* 0xe0*/ + 0x00d3, 0x00df, 0x00d4, 0x0143, + 0x0144, 0x0148, 0x0160, 0x0161, + 0x0154, 0x00da, 0x0155, 0x0170, + 0x00fd, 0x00dd, 0x0163, 0x00b4, + /* 0xf0*/ + 0x00ad, 0x02dd, 0x02db, 0x02c7, + 0x02d8, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x02d9, 0x0171, + 0x0158, 0x0159, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0x00, 0x00, 0xae, 0xaa, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xf7, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xb5, 0xb6, 0x00, 0x8e, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0xd3, 0x00, 0xd6, 0xd7, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xe0, 0xe2, 0x00, 0x99, 0x9e, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xe9, 0x00, 0x9a, 0xed, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x00, 0xa0, 0x83, 0x00, 0x84, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x00, 0x82, 0x00, 0x89, 0x00, 0xa1, 0x8c, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xa3, 0x00, 0x81, 0xec, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0xc6, 0xc7, 0xa4, 0xa5, 0x8f, 0x86, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0x9f, 0xd2, 0xd4, /* 0x08-0x0f */ + 0xd1, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xa8, 0xa9, 0xb7, 0xd8, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x91, 0x92, 0x00, 0x00, 0x95, 0x96, 0x00, /* 0x38-0x3f */ + 0x00, 0x9d, 0x88, 0xe3, 0xe4, 0x00, 0x00, 0xd5, /* 0x40-0x47 */ + 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x8a, 0x8b, 0x00, 0x00, 0xe8, 0xea, 0x00, 0x00, /* 0x50-0x57 */ + 0xfc, 0xfd, 0x97, 0x98, 0x00, 0x00, 0xb8, 0xad, /* 0x58-0x5f */ + 0xe6, 0xe7, 0xdd, 0xee, 0x9b, 0x9c, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x85, /* 0x68-0x6f */ + 0xeb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x8d, 0xab, 0xbd, 0xbe, 0xa6, 0xa7, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page02[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xf4, 0xfa, 0x00, 0xf2, 0x00, 0xf1, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, page02, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8b, 0x8b, 0x8c, 0xab, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x92, 0x92, 0x93, 0x94, 0x96, 0x96, 0x98, /* 0x90-0x97 */ + 0x98, 0x94, 0x81, 0x9c, 0x9c, 0x88, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa5, 0xa5, 0xa7, 0xa7, /* 0xa0-0xa7 */ + 0xa9, 0xa9, 0xaa, 0xab, 0x9f, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xa0, 0x83, 0xd8, /* 0xb0-0xb7 */ + 0xad, 0xb9, 0xba, 0xbb, 0xbc, 0xbe, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc7, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd0, 0xd4, 0x89, 0xd4, 0xe5, 0xa1, 0x8c, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xee, 0x85, 0xdf, /* 0xd8-0xdf */ + 0xa2, 0xe1, 0x93, 0xe4, 0xe4, 0xe5, 0xe7, 0xe7, /* 0xe0-0xe7 */ + 0xea, 0xa3, 0xea, 0xfb, 0xec, 0xec, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfd, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0xb6, 0x8e, 0xde, 0x8f, 0x80, /* 0x80-0x87 */ + 0x9d, 0xd3, 0x8a, 0x8a, 0xd7, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x91, 0xe2, 0x99, 0x95, 0x95, 0x97, /* 0x90-0x97 */ + 0x97, 0x99, 0x9a, 0x9b, 0x9b, 0x9d, 0x9e, 0xac, /* 0x98-0x9f */ + 0xb5, 0xd6, 0xe0, 0xe9, 0xa4, 0xa4, 0xa6, 0xa6, /* 0xa0-0xa7 */ + 0xa8, 0xa8, 0xaa, 0x8d, 0xac, 0xb8, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbd, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd1, 0xd1, 0xd2, 0xd3, 0xd2, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xb7, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe3, 0xd5, 0xe6, 0xe6, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xe8, 0xeb, 0xed, 0xed, 0xdd, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xeb, 0xfc, 0xfc, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp852", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp852(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp852(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp852) +module_exit(exit_nls_cp852) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp855.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp855.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp855.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,316 @@ +/* + * linux/fs/nls_cp855.c + * + * Charset cp855 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0452, 0x0402, 0x0453, 0x0403, + 0x0451, 0x0401, 0x0454, 0x0404, + 0x0455, 0x0405, 0x0456, 0x0406, + 0x0457, 0x0407, 0x0458, 0x0408, + /* 0x90*/ + 0x0459, 0x0409, 0x045a, 0x040a, + 0x045b, 0x040b, 0x045c, 0x040c, + 0x045e, 0x040e, 0x045f, 0x040f, + 0x044e, 0x042e, 0x044a, 0x042a, + /* 0xa0*/ + 0x0430, 0x0410, 0x0431, 0x0411, + 0x0446, 0x0426, 0x0434, 0x0414, + 0x0435, 0x0415, 0x0444, 0x0424, + 0x0433, 0x0413, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x0445, 0x0425, 0x0438, + 0x0418, 0x2563, 0x2551, 0x2557, + 0x255d, 0x0439, 0x0419, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x043a, 0x041a, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0*/ + 0x043b, 0x041b, 0x043c, 0x041c, + 0x043d, 0x041d, 0x043e, 0x041e, + 0x043f, 0x2518, 0x250c, 0x2588, + 0x2584, 0x041f, 0x044f, 0x2580, + /* 0xe0*/ + 0x042f, 0x0440, 0x0420, 0x0441, + 0x0421, 0x0442, 0x0422, 0x0443, + 0x0423, 0x0436, 0x0416, 0x0432, + 0x0412, 0x044c, 0x042c, 0x2116, + /* 0xf0*/ + 0x00ad, 0x044b, 0x042b, 0x0437, + 0x0417, 0x0448, 0x0428, 0x044d, + 0x042d, 0x0449, 0x0429, 0x0447, + 0x0427, 0x00a7, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0xae, 0x00, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ +}; + +static unsigned char page04[256] = { + 0x00, 0x85, 0x81, 0x83, 0x87, 0x89, 0x8b, 0x8d, /* 0x00-0x07 */ + 0x8f, 0x91, 0x93, 0x95, 0x97, 0x00, 0x99, 0x9b, /* 0x08-0x0f */ + 0xa1, 0xa3, 0xec, 0xad, 0xa7, 0xa9, 0xea, 0xf4, /* 0x10-0x17 */ + 0xb8, 0xbe, 0xc7, 0xd1, 0xd3, 0xd5, 0xd7, 0xdd, /* 0x18-0x1f */ + 0xe2, 0xe4, 0xe6, 0xe8, 0xab, 0xb6, 0xa5, 0xfc, /* 0x20-0x27 */ + 0xf6, 0xfa, 0x9f, 0xf2, 0xee, 0xf8, 0x9d, 0xe0, /* 0x28-0x2f */ + 0xa0, 0xa2, 0xeb, 0xac, 0xa6, 0xa8, 0xe9, 0xf3, /* 0x30-0x37 */ + 0xb7, 0xbd, 0xc6, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, /* 0x38-0x3f */ + 0xe1, 0xe3, 0xe5, 0xe7, 0xaa, 0xb5, 0xa4, 0xfb, /* 0x40-0x47 */ + 0xf5, 0xf9, 0x9e, 0xf1, 0xed, 0xf7, 0x9c, 0xde, /* 0x48-0x4f */ + 0x00, 0x84, 0x80, 0x82, 0x86, 0x88, 0x8a, 0x8c, /* 0x50-0x57 */ + 0x8e, 0x90, 0x92, 0x94, 0x96, 0x00, 0x98, 0x9a, /* 0x58-0x5f */ +}; + +static unsigned char page21[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x00, /* 0x10-0x17 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, page21, NULL, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86, 0x86, /* 0x80-0x87 */ + 0x88, 0x88, 0x8a, 0x8a, 0x8c, 0x8c, 0x8e, 0x8e, /* 0x88-0x8f */ + 0x90, 0x90, 0x92, 0x92, 0x94, 0x94, 0x96, 0x96, /* 0x90-0x97 */ + 0x98, 0x98, 0x9a, 0x9a, 0x9c, 0x9c, 0x9e, 0x9e, /* 0x98-0x9f */ + 0xa0, 0xa0, 0xa2, 0xa2, 0xa4, 0xa4, 0xa6, 0xa6, /* 0xa0-0xa7 */ + 0xa8, 0xa8, 0xaa, 0xaa, 0xac, 0xac, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb5, 0xb7, /* 0xb0-0xb7 */ + 0xb7, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbd, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd0, 0xd2, 0xd2, 0xd4, 0xd4, 0xd6, 0xd6, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xd8, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xde, 0xe1, 0xe1, 0xe3, 0xe3, 0xe5, 0xe5, 0xe7, /* 0xe0-0xe7 */ + 0xe7, 0xe9, 0xe9, 0xeb, 0xeb, 0xed, 0xed, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf1, 0xf3, 0xf3, 0xf5, 0xf5, 0xf7, /* 0xf0-0xf7 */ + 0xf7, 0xf9, 0xf9, 0xfb, 0xfb, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x81, 0x81, 0x83, 0x83, 0x85, 0x85, 0x87, 0x87, /* 0x80-0x87 */ + 0x89, 0x89, 0x8b, 0x8b, 0x8d, 0x8d, 0x8f, 0x8f, /* 0x88-0x8f */ + 0x91, 0x91, 0x93, 0x93, 0x95, 0x95, 0x97, 0x97, /* 0x90-0x97 */ + 0x99, 0x99, 0x9b, 0x9b, 0x9d, 0x9d, 0x9f, 0x9f, /* 0x98-0x9f */ + 0xa1, 0xa1, 0xa3, 0xa3, 0xa5, 0xa5, 0xa7, 0xa7, /* 0xa0-0xa7 */ + 0xa9, 0xa9, 0xab, 0xab, 0xad, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb6, 0xb6, 0xb8, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbe, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc7, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd1, 0xd1, 0xd3, 0xd3, 0xd5, 0xd5, 0xd7, 0xd7, /* 0xd0-0xd7 */ + 0xdd, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xe0, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe2, 0xe2, 0xe4, 0xe4, 0xe6, 0xe6, 0xe8, /* 0xe0-0xe7 */ + 0xe8, 0xea, 0xea, 0xec, 0xec, 0xee, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf2, 0xf2, 0xf4, 0xf4, 0xf6, 0xf6, 0xf8, /* 0xf0-0xf7 */ + 0xf8, 0xfa, 0xfa, 0xfc, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp855", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp855(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp855(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp855) +module_exit(exit_nls_cp855) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp857.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp857.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp857.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,318 @@ +/* + * linux/fs/nls_cp857.c + * + * Charset cp857 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, + 0x00ee, 0x0131, 0x00c4, 0x00c5, + /* 0x90*/ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, + 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x0130, 0x00d6, 0x00dc, 0x00f8, + 0x00a3, 0x00d8, 0x015e, 0x015f, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00f1, 0x00d1, 0x011e, 0x011f, + 0x00bf, 0x00ae, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x00c1, 0x00c2, 0x00c0, + 0x00a9, 0x2563, 0x2551, 0x2557, + 0x255d, 0x00a2, 0x00a5, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x00e3, 0x00c3, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x00a4, + /* 0xd0*/ + 0x00ba, 0x00aa, 0x00ca, 0x00cb, + 0x00c8, 0x0000, 0x00cd, 0x00ce, + 0x00cf, 0x2518, 0x250c, 0x2588, + 0x2584, 0x00a6, 0x00cc, 0x2580, + /* 0xe0*/ + 0x00d3, 0x00df, 0x00d4, 0x00d2, + 0x00f5, 0x00d5, 0x00b5, 0x0000, + 0x00d7, 0x00da, 0x00db, 0x00d9, + 0x00ec, 0x00ff, 0x00af, 0x00b4, + /* 0xf0*/ + 0x00ad, 0x00b1, 0x0000, 0x00be, + 0x00b6, 0x00a7, 0x00f7, 0x00b8, + 0x00b0, 0x00a8, 0x00b7, 0x00b9, + 0x00b3, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0xbd, 0x9c, 0xcf, 0xbe, 0xdd, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0xb8, 0xd1, 0xae, 0xaa, 0xf0, 0xa9, 0xee, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xfc, 0xef, 0xe6, 0xf4, 0xfa, /* 0xb0-0xb7 */ + 0xf7, 0xfb, 0xd0, 0xaf, 0xac, 0xab, 0xf3, 0xa8, /* 0xb8-0xbf */ + 0xb7, 0xb5, 0xb6, 0xc7, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0xd4, 0x90, 0xd2, 0xd3, 0xde, 0xd6, 0xd7, 0xd8, /* 0xc8-0xcf */ + 0x00, 0xa5, 0xe3, 0xe0, 0xe2, 0xe5, 0x99, 0xe8, /* 0xd0-0xd7 */ + 0x9d, 0xeb, 0xe9, 0xea, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0xc6, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0xec, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0xe4, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0xed, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0xa7, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x98, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x9f, /* 0x58-0x5f */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x91, 0x91, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x69, 0x94, 0x81, 0x9b, 0x9c, 0x9b, 0x9f, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa4, 0xa7, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xa0, 0x83, 0x85, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0x88, 0x89, 0x8a, 0x00, 0xa1, 0x8c, /* 0xd0-0xd7 */ + 0x8b, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xec, 0xdf, /* 0xd8-0xdf */ + 0xa2, 0xe1, 0x93, 0x95, 0xe4, 0xe4, 0xe6, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xa3, 0x96, 0x97, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0xb6, 0x8e, 0xb7, 0x8f, 0x80, /* 0x80-0x87 */ + 0xd2, 0xd3, 0xd4, 0xd8, 0xd7, 0x49, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x92, 0x92, 0xe2, 0x99, 0xe3, 0xea, 0xeb, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x9e, /* 0x98-0x9f */ + 0xb5, 0xd6, 0xe0, 0xe9, 0xa5, 0xa5, 0xa6, 0xa6, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc7, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe5, 0xe5, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xde, 0x00, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp857", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp857(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp857(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp857) +module_exit(exit_nls_cp857) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp860.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp860.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp860.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,381 @@ +/* + * linux/fs/nls_cp860.c + * + * Charset cp860 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e3, 0x00e0, 0x00c1, 0x00e7, + 0x00ea, 0x00ca, 0x00e8, 0x00cd, + 0x00d4, 0x00ec, 0x00c3, 0x00c2, + /* 0x90*/ + 0x00c9, 0x00c0, 0x00c8, 0x00f4, + 0x00f5, 0x00f2, 0x00da, 0x00f9, + 0x00cc, 0x00d5, 0x00dc, 0x00a2, + 0x00a3, 0x00d9, 0x20a7, 0x00d3, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x00d2, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03b1, 0x00df, 0x0393, 0x03c0, + 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, + 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0*/ + 0x2261, 0x00b1, 0x2265, 0x2264, + 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x91, 0x86, 0x8f, 0x8e, 0x00, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0x92, 0x90, 0x89, 0x00, 0x98, 0x8b, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0xa9, 0x9f, 0x8c, 0x99, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x9d, 0x96, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x84, 0x00, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x00, 0x8d, 0xa1, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x94, 0x00, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x00, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xa0-0xa7 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0xa0, 0x87, /* 0x80-0x87 */ + 0x88, 0x88, 0x8a, 0xa1, 0x93, 0x8d, 0x84, 0x83, /* 0x88-0x8f */ + 0x82, 0x85, 0x8a, 0x93, 0x94, 0x95, 0xa3, 0x97, /* 0x90-0x97 */ + 0x8d, 0x94, 0x81, 0x9b, 0x9c, 0x97, 0x9e, 0xa2, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa4, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x95, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0x00, 0xe3, 0xe5, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xed, 0x00, 0x00, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0x8f, 0x8e, 0x91, 0x86, 0x80, /* 0x80-0x87 */ + 0x89, 0x89, 0x92, 0x8b, 0x8c, 0x98, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x8c, 0x99, 0xa9, 0x96, 0x9d, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0x86, 0x8b, 0x9f, 0x96, 0xa5, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0xe4, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xe8, 0x00, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp860", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp860(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp860(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp860) +module_exit(exit_nls_cp860) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp861.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp861.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp861.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,404 @@ +/* + * linux/fs/nls_cp861.c + * + * Charset cp861 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00d0, + 0x00f0, 0x00de, 0x00c4, 0x00c5, + /* 0x90*/ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, + 0x00f6, 0x00fe, 0x00fb, 0x00dd, + 0x00fd, 0x00d6, 0x00dc, 0x00f8, + 0x00a3, 0x00d8, 0x20a7, 0x0192, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00c1, 0x00cd, 0x00d3, 0x00da, + 0x00bf, 0x2310, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03b1, 0x00df, 0x0393, 0x03c0, + 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, + 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0*/ + 0x2261, 0x00b1, 0x2265, 0x2264, + 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0xa4, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, /* 0xc8-0xcf */ + 0x8b, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x99, 0x00, /* 0xd0-0xd7 */ + 0x9d, 0x00, 0xa7, 0x00, 0x9a, 0x97, 0x8d, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x00, 0xa1, 0x00, 0x00, /* 0xe8-0xef */ + 0x8c, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x00, 0xa3, 0x96, 0x81, 0x98, 0x95, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xa0-0xa7 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8c, 0x8c, 0x95, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x91, 0x91, 0x93, 0x94, 0x95, 0x96, 0x98, /* 0x90-0x97 */ + 0x98, 0x94, 0x81, 0x9b, 0x9c, 0x9b, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa0, 0xa1, 0xa2, 0xa3, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0x00, 0xe3, 0xe5, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xed, 0x00, 0x00, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0x00, 0x8e, 0x00, 0x8f, 0x80, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x8b, 0x8b, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x92, 0x92, 0x00, 0x99, 0x8d, 0x00, 0x97, /* 0x90-0x97 */ + 0x97, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0xa4, 0xa5, 0xa6, 0xa7, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0xe4, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xe8, 0x00, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp861", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp861(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp861(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp861) +module_exit(exit_nls_cp861) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp862.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp862.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp862.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,438 @@ +/* + * linux/fs/nls_cp862.c + * + * Charset cp862 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x05d0, 0x05d1, 0x05d2, 0x05d3, + 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, + 0x05dc, 0x05dd, 0x05de, 0x05df, + /* 0x90*/ + 0x05e0, 0x05e1, 0x05e2, 0x05e3, + 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0x00a2, + 0x00a3, 0x00a5, 0x20a7, 0x0192, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03b1, 0x00df, 0x0393, 0x03c0, + 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, + 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0*/ + 0x2261, 0x00b1, 0x2265, 0x2264, + 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0x9b, 0x9c, 0x00, 0x9d, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0xaf, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0xa4, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page05[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0xd0-0xd7 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0xd8-0xdf */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0xe0-0xe7 */ + 0x98, 0x99, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xa0-0xa7 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, page03, NULL, page05, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa4, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0x00, 0xe3, 0xe5, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xed, 0x00, 0x00, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0xe4, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xe8, 0x00, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp862", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp862(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp862(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp862) +module_exit(exit_nls_cp862) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp863.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp863.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp863.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,398 @@ +/* + * linux/fs/nls_cp863.c + * + * Charset cp863 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00c2, 0x00e0, 0x00b6, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, + 0x00ee, 0x2017, 0x00c0, 0x00a7, + /* 0x90*/ + 0x00c9, 0x00c8, 0x00ca, 0x00f4, + 0x00cb, 0x00cf, 0x00fb, 0x00f9, + 0x00a4, 0x00d4, 0x00dc, 0x00a2, + 0x00a3, 0x00d9, 0x00db, 0x0192, + /* 0xa0*/ + 0x00a6, 0x00b4, 0x00f3, 0x00fa, + 0x00a8, 0x00b8, 0x00b3, 0x00af, + 0x00ce, 0x2310, 0x00ac, 0x00bd, + 0x00bc, 0x00be, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03b1, 0x00df, 0x0393, 0x03c0, + 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, + 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0*/ + 0x2261, 0x00b1, 0x2265, 0x2264, + 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x9b, 0x9c, 0x98, 0x00, 0xa0, 0x8f, /* 0xa0-0xa7 */ + 0xa4, 0x00, 0x00, 0xae, 0xaa, 0x00, 0x00, 0xa7, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0xa6, 0xa1, 0xe6, 0x86, 0xfa, /* 0xb0-0xb7 */ + 0xa5, 0x00, 0x00, 0xaf, 0xac, 0xab, 0xad, 0x00, /* 0xb8-0xbf */ + 0x8e, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xc0-0xc7 */ + 0x91, 0x90, 0x92, 0x94, 0x00, 0x00, 0xa8, 0x95, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x9d, 0x00, 0x9e, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x00, 0x00, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xa2, 0x93, 0x00, 0x00, 0xf6, /* 0xf0-0xf7 */ + 0x00, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8d, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x83, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x85, 0x8f, /* 0x88-0x8f */ + 0x82, 0x8a, 0x88, 0x93, 0x89, 0x8b, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x93, 0x81, 0x9b, 0x9c, 0x97, 0x96, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x8c, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0x00, 0xe3, 0xe5, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xed, 0x00, 0x00, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0x84, 0x84, 0x8e, 0x86, 0x80, /* 0x80-0x87 */ + 0x92, 0x94, 0x91, 0x95, 0xa8, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x99, 0x94, 0x95, 0x9e, 0x9d, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0x00, 0x00, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0xe4, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xe8, 0x00, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp863", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp863(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp863(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp863) +module_exit(exit_nls_cp863) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp864.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp864.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp864.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,424 @@ +/* + * linux/fs/nls_cp864.c + * + * Charset cp864 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x066a, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00b0, 0x00b7, 0x2219, 0x221a, + 0x2592, 0x2500, 0x2502, 0x253c, + 0x2524, 0x252c, 0x251c, 0x2534, + 0x2510, 0x250c, 0x2514, 0x2518, + /* 0x90*/ + 0x03b2, 0x221e, 0x03c6, 0x00b1, + 0x00bd, 0x00bc, 0x2248, 0x00ab, + 0x00bb, 0xfef7, 0xfef8, 0x0000, + 0x0000, 0xfefb, 0xfefc, 0x0000, + /* 0xa0*/ + 0x00a0, 0x00ad, 0xfe82, 0x00a3, + 0x00a4, 0xfe84, 0x0000, 0x0000, + 0xfe8e, 0xfe8f, 0xfe95, 0xfe99, + 0x060c, 0xfe9d, 0xfea1, 0xfea5, + /* 0xb0*/ + 0x0660, 0x0661, 0x0662, 0x0663, + 0x0664, 0x0665, 0x0666, 0x0667, + 0x0668, 0x0669, 0xfed1, 0x061b, + 0xfeb1, 0xfeb5, 0xfeb9, 0x061f, + /* 0xc0*/ + 0x00a2, 0xfe80, 0xfe81, 0xfe83, + 0xfe85, 0xfeca, 0xfe8b, 0xfe8d, + 0xfe91, 0xfe93, 0xfe97, 0xfe9b, + 0xfe9f, 0xfea3, 0xfea7, 0xfea9, + /* 0xd0*/ + 0xfeab, 0xfead, 0xfeaf, 0xfeb3, + 0xfeb7, 0xfebb, 0xfebf, 0xfec1, + 0xfec5, 0xfecb, 0xfecf, 0x00a6, + 0x00ac, 0x00f7, 0x00d7, 0xfec9, + /* 0xe0*/ + 0x0640, 0xfed3, 0xfed7, 0xfedb, + 0xfedf, 0xfee3, 0xfee7, 0xfeeb, + 0xfeed, 0xfeef, 0xfef3, 0xfebd, + 0xfecc, 0xfece, 0xfecd, 0xfee1, + /* 0xf0*/ + 0xfe7d, 0x0651, 0xfee5, 0xfee9, + 0xfeec, 0xfef0, 0xfef2, 0xfed0, + 0xfed5, 0xfef5, 0xfef6, 0xfedd, + 0xfed9, 0xfef1, 0x25a0, 0x0000, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x00, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0xc0, 0xa3, 0xa4, 0x00, 0xdb, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x97, 0xdc, 0xa1, 0x00, 0x00, /* 0xa8-0xaf */ + 0x80, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x98, 0x95, 0x94, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, /* 0xf0-0xf7 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page06[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x60-0x67 */ + 0xb8, 0xb9, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x82, 0x83, 0x00, 0x00, 0x00, 0x91, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ +}; + +static unsigned char page25[256] = { + 0x85, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x8c, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x8f, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char pagefe[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, /* 0x78-0x7f */ + + 0xc1, 0xc2, 0xa2, 0xc3, 0xa5, 0xc4, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc7, 0xa8, 0xa9, /* 0x88-0x8f */ + 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xaa, 0x00, 0xca, /* 0x90-0x97 */ + 0x00, 0xab, 0x00, 0xcb, 0x00, 0xad, 0x00, 0xcc, /* 0x98-0x9f */ + 0x00, 0xae, 0x00, 0xcd, 0x00, 0xaf, 0x00, 0xce, /* 0xa0-0xa7 */ + 0x00, 0xcf, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xd2, /* 0xa8-0xaf */ + 0x00, 0xbc, 0x00, 0xd3, 0x00, 0xbd, 0x00, 0xd4, /* 0xb0-0xb7 */ + 0x00, 0xbe, 0x00, 0xd5, 0x00, 0xeb, 0x00, 0xd6, /* 0xb8-0xbf */ + 0x00, 0xd7, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xdf, 0xc5, 0xd9, 0xec, 0xee, 0xed, 0xda, /* 0xc8-0xcf */ + 0xf7, 0xba, 0x00, 0xe1, 0x00, 0xf8, 0x00, 0xe2, /* 0xd0-0xd7 */ + 0x00, 0xfc, 0x00, 0xe3, 0x00, 0xfb, 0x00, 0xe4, /* 0xd8-0xdf */ + 0x00, 0xef, 0x00, 0xe5, 0x00, 0xf2, 0x00, 0xe6, /* 0xe0-0xe7 */ + 0x00, 0xf3, 0x00, 0xe7, 0xf4, 0xe8, 0x00, 0xe9, /* 0xe8-0xef */ + 0xf5, 0xfd, 0xf6, 0xea, 0x00, 0xf9, 0xfa, 0x99, /* 0xf0-0xf7 */ + 0x9a, 0x00, 0x00, 0x9d, 0x9e, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, page03, NULL, NULL, page06, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, page22, NULL, NULL, page25, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, pagefe, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x00, 0x91, 0x00, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x00, 0x00, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp864", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp864(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp864(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp864) +module_exit(exit_nls_cp864) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp865.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp865.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp865.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,404 @@ +/* + * linux/fs/nls_cp865.c + * + * Charset cp865 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x00c7, 0x00fc, 0x00e9, 0x00e2, + 0x00e4, 0x00e0, 0x00e5, 0x00e7, + 0x00ea, 0x00eb, 0x00e8, 0x00ef, + 0x00ee, 0x00ec, 0x00c4, 0x00c5, + /* 0x90*/ + 0x00c9, 0x00e6, 0x00c6, 0x00f4, + 0x00f6, 0x00f2, 0x00fb, 0x00f9, + 0x00ff, 0x00d6, 0x00dc, 0x00f8, + 0x00a3, 0x00d8, 0x20a7, 0x0192, + /* 0xa0*/ + 0x00e1, 0x00ed, 0x00f3, 0x00fa, + 0x00f1, 0x00d1, 0x00aa, 0x00ba, + 0x00bf, 0x2310, 0x00ac, 0x00bd, + 0x00bc, 0x00a1, 0x00ab, 0x00a4, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x03b1, 0x00df, 0x0393, 0x03c0, + 0x03a3, 0x03c3, 0x00b5, 0x03c4, + 0x03a6, 0x0398, 0x03a9, 0x03b4, + 0x221e, 0x03c6, 0x03b5, 0x2229, + /* 0xf0*/ + 0x2261, 0x00b1, 0x2265, 0x2264, + 0x2320, 0x2321, 0x00f7, 0x2248, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x207f, 0x00b2, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0xad, 0x00, 0x9c, 0xaf, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0xa6, 0xae, 0xaa, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0xfd, 0x00, 0x00, 0xe6, 0x00, 0xfa, /* 0xb0-0xb7 */ + 0x00, 0x00, 0xa7, 0x00, 0xac, 0xab, 0x00, 0xa8, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, 0x92, 0x80, /* 0xc0-0xc7 */ + 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, /* 0xd0-0xd7 */ + 0x9d, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0xe1, /* 0xd8-0xdf */ + 0x85, 0xa0, 0x83, 0x00, 0x84, 0x86, 0x91, 0x87, /* 0xe0-0xe7 */ + 0x8a, 0x82, 0x88, 0x89, 0x8d, 0xa1, 0x8c, 0x8b, /* 0xe8-0xef */ + 0x00, 0xa4, 0x95, 0xa2, 0x93, 0x00, 0x94, 0xf6, /* 0xf0-0xf7 */ + 0x9b, 0x97, 0xa3, 0x96, 0x81, 0x00, 0x00, 0x98, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe8, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0xe0, 0x00, 0x00, 0xeb, 0xee, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xe3, 0x00, 0x00, 0xe5, 0xe7, 0x00, 0xed, 0x00, /* 0xc0-0xc7 */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xa0-0xa7 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0xec, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0xf0, 0x00, 0x00, 0xf3, 0xf2, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0xf4, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x87, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x84, 0x86, /* 0x88-0x8f */ + 0x82, 0x91, 0x91, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x94, 0x81, 0x9b, 0x9c, 0x9b, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa4, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0x00, 0xe3, 0xe5, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xed, 0x00, 0x00, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x9a, 0x90, 0x00, 0x8e, 0x00, 0x8f, 0x80, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x92, 0x92, 0x00, 0x99, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x99, 0x9a, 0x9d, 0x9c, 0x9d, 0x9e, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0xe4, 0x00, 0x00, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0x00, 0xec, 0xe8, 0x00, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp865", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp865(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp865(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp865) +module_exit(exit_nls_cp865) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp866.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp866.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp866.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,322 @@ +/* + * linux/fs/nls_cp866.c + * + * Charset cp866 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0410, 0x0411, 0x0412, 0x0413, + 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, + 0x041c, 0x041d, 0x041e, 0x041f, + /* 0x90*/ + 0x0420, 0x0421, 0x0422, 0x0423, + 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, + 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xa0*/ + 0x0430, 0x0431, 0x0432, 0x0433, + 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, + 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, + 0x255d, 0x255c, 0x255b, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x2567, + /* 0xd0*/ + 0x2568, 0x2564, 0x2565, 0x2559, + 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, + 0x2584, 0x258c, 0x2590, 0x2580, + /* 0xe0*/ + 0x0440, 0x0441, 0x0442, 0x0443, + 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, + 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0*/ + 0x0401, 0x0451, 0x0404, 0x0454, + 0x0407, 0x0457, 0x040e, 0x045e, + 0x00b0, 0x2219, 0x00b7, 0x221a, + 0x2116, 0x00a4, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, /* 0xb0-0xb7 */ +}; + +static unsigned char page04[256] = { + 0x00, 0xf0, 0x00, 0x00, 0xf2, 0x00, 0x00, 0xf4, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, /* 0x08-0x0f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x10-0x17 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x18-0x1f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x20-0x27 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x28-0x2f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x30-0x37 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0x00, 0x00, 0xf3, 0x00, 0x00, 0xf5, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x00, /* 0x58-0x5f */ +}; + +static unsigned char page21[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, /* 0x10-0x17 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xf9, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0xd5, 0xd6, 0xc9, 0xb8, 0xb7, 0xbb, /* 0x50-0x57 */ + 0xd4, 0xd3, 0xc8, 0xbe, 0xbd, 0xbc, 0xc6, 0xc7, /* 0x58-0x5f */ + 0xcc, 0xb5, 0xb6, 0xb9, 0xd1, 0xd2, 0xcb, 0xcf, /* 0x60-0x67 */ + 0xd0, 0xca, 0xd8, 0xd7, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xde, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, page21, page22, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x80-0x87 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x88-0x8f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x90-0x97 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf1, 0xf1, 0xf3, 0xf3, 0xf5, 0xf5, 0xf7, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0xa0-0xa7 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0xe0-0xe7 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0xe8-0xef */ + 0xf0, 0xf0, 0xf2, 0xf2, 0xf4, 0xf4, 0xf6, 0xf6, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp866", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp866(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp866(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp866) +module_exit(exit_nls_cp866) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp869.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp869.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp869.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,332 @@ +/* + * linux/fs/nls_cp869.c + * + * Charset cp869 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0386, 0x0000, + 0x00b7, 0x00ac, 0x00a6, 0x2018, + 0x2019, 0x0388, 0x2015, 0x0389, + /* 0x90*/ + 0x038a, 0x03aa, 0x038c, 0x0000, + 0x0000, 0x038e, 0x03ab, 0x00a9, + 0x038f, 0x00b2, 0x00b3, 0x03ac, + 0x00a3, 0x03ad, 0x03ae, 0x03af, + /* 0xa0*/ + 0x03ca, 0x0390, 0x03cc, 0x03cd, + 0x0391, 0x0392, 0x0393, 0x0394, + 0x0395, 0x0396, 0x0397, 0x00bd, + 0x0398, 0x0399, 0x00ab, 0x00bb, + /* 0xb0*/ + 0x2591, 0x2592, 0x2593, 0x2502, + 0x2524, 0x039a, 0x039b, 0x039c, + 0x039d, 0x2563, 0x2551, 0x2557, + 0x255d, 0x039e, 0x039f, 0x2510, + /* 0xc0*/ + 0x2514, 0x2534, 0x252c, 0x251c, + 0x2500, 0x253c, 0x03a0, 0x03a1, + 0x255a, 0x2554, 0x2569, 0x2566, + 0x2560, 0x2550, 0x256c, 0x03a3, + /* 0xd0*/ + 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03b1, 0x03b2, + 0x03b3, 0x2518, 0x250c, 0x2588, + 0x2584, 0x03b4, 0x03b5, 0x2580, + /* 0xe0*/ + 0x03b6, 0x03b7, 0x03b8, 0x03b9, + 0x03ba, 0x03bb, 0x03bc, 0x03bd, + 0x03be, 0x03bf, 0x03c0, 0x03c1, + 0x03c3, 0x03c2, 0x03c4, 0x0384, + /* 0xf0*/ + 0x00ad, 0x00b1, 0x03c5, 0x03c6, + 0x03c7, 0x00a7, 0x03c8, 0x0385, + 0x00b0, 0x00a8, 0x03c9, 0x03cb, + 0x03b0, 0x03ce, 0x25a0, 0x00a0, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xff, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x8a, 0xf5, /* 0xa0-0xa7 */ + 0xf9, 0x97, 0x00, 0xae, 0x89, 0xf0, 0x00, 0x00, /* 0xa8-0xaf */ + 0xf8, 0xf1, 0x99, 0x9a, 0x00, 0x00, 0x00, 0x88, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xaf, 0x00, 0xab, 0x00, 0x00, /* 0xb8-0xbf */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0xef, 0xf7, 0x86, 0x00, /* 0x80-0x87 */ + 0x8d, 0x8f, 0x90, 0x00, 0x92, 0x00, 0x95, 0x98, /* 0x88-0x8f */ + 0xa1, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, /* 0x90-0x97 */ + 0xac, 0xad, 0xb5, 0xb6, 0xb7, 0xb8, 0xbd, 0xbe, /* 0x98-0x9f */ + 0xc6, 0xc7, 0x00, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, /* 0xa0-0xa7 */ + 0xd4, 0xd5, 0x91, 0x96, 0x9b, 0x9d, 0x9e, 0x9f, /* 0xa8-0xaf */ + 0xfc, 0xd6, 0xd7, 0xd8, 0xdd, 0xde, 0xe0, 0xe1, /* 0xb0-0xb7 */ + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, /* 0xb8-0xbf */ + 0xea, 0xeb, 0xed, 0xec, 0xee, 0xf2, 0xf3, 0xf4, /* 0xc0-0xc7 */ + 0xf6, 0xfa, 0xa0, 0xfb, 0xa2, 0xa3, 0xfd, 0x00, /* 0xc8-0xcf */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, /* 0x10-0x17 */ + 0x8b, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ +}; + +static unsigned char page25[256] = { + 0xc4, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xd9, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xcd, 0xba, 0x00, 0x00, 0xc9, 0x00, 0x00, 0xbb, /* 0x50-0x57 */ + 0x00, 0x00, 0xc8, 0x00, 0x00, 0xbc, 0x00, 0x00, /* 0x58-0x5f */ + 0xcc, 0x00, 0x00, 0xb9, 0x00, 0x00, 0xcb, 0x00, /* 0x60-0x67 */ + 0x00, 0xca, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xdf, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0xb0, 0xb1, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, NULL, NULL, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x9d, 0x8e, 0x9e, /* 0x88-0x8f */ + 0x9f, 0xa0, 0xa2, 0x00, 0x00, 0xa3, 0xfb, 0x97, /* 0x90-0x97 */ + 0xfd, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xd6, 0xd7, 0xd8, 0xdd, /* 0xa0-0xa7 */ + 0xde, 0xe0, 0xe1, 0xab, 0xe2, 0xe3, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xe4, 0xe5, 0xe6, /* 0xb0-0xb7 */ + 0xe7, 0xb9, 0xba, 0xbb, 0xbc, 0xe8, 0xe9, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xea, 0xeb, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xec, /* 0xc8-0xcf */ + 0xee, 0xf2, 0xf3, 0xf4, 0xf6, 0xfa, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x00, 0x00, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x86, 0x9c, 0x8d, 0x8f, 0x90, /* 0x98-0x9f */ + 0x91, 0xa1, 0x92, 0x95, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xa4, 0xa5, /* 0xd0-0xd7 */ + 0xa6, 0xd9, 0xda, 0xdb, 0xdc, 0xa7, 0xa8, 0xdf, /* 0xd8-0xdf */ + 0xa9, 0xaa, 0xac, 0xad, 0xb5, 0xb6, 0xb7, 0xb8, /* 0xe0-0xe7 */ + 0xbd, 0xbe, 0xc6, 0xc7, 0xcf, 0xcf, 0xd0, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xd1, 0xd2, 0xd3, 0xf5, 0xd4, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xd5, 0x96, 0xfc, 0x98, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp869", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp869(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp869(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp869) +module_exit(exit_nls_cp869) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp874.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp8…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp874.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp874.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,290 @@ +/* + * linux/fs/nls_cp874.c + * + * Charset cp874 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x2026, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x2018, 0x2019, 0x201c, + 0x201d, 0x2022, 0x2013, 0x2014, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x0e01, 0x0e02, 0x0e03, + 0x0e04, 0x0e05, 0x0e06, 0x0e07, + 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, + 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, + /* 0xb0*/ + 0x0e10, 0x0e11, 0x0e12, 0x0e13, + 0x0e14, 0x0e15, 0x0e16, 0x0e17, + 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, + 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, + /* 0xc0*/ + 0x0e20, 0x0e21, 0x0e22, 0x0e23, + 0x0e24, 0x0e25, 0x0e26, 0x0e27, + 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, + 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, + /* 0xd0*/ + 0x0e30, 0x0e31, 0x0e32, 0x0e33, + 0x0e34, 0x0e35, 0x0e36, 0x0e37, + 0x0e38, 0x0e39, 0x0e3a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0e3f, + /* 0xe0*/ + 0x0e40, 0x0e41, 0x0e42, 0x0e43, + 0x0e44, 0x0e45, 0x0e46, 0x0e47, + 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, + 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, + /* 0xf0*/ + 0x0e50, 0x0e51, 0x0e52, 0x0e53, + 0x0e54, 0x0e55, 0x0e56, 0x0e57, + 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, + 0x0000, 0x0000, 0x0000, 0x0000, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char page0e[256] = { + 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0x08-0x0f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x96, 0x97, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x91, 0x92, 0x00, 0x00, 0x93, 0x94, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x85, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, page0e, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "cp874", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp874(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp874(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp874) +module_exit(exit_nls_cp874) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ +MODULE_LICENSE("BSD without advertising clause"); Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp932.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp9…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp932.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp932.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,7924 @@ +/* + * linux/fs/nls_cp932.c + * + * Charset cp932 translation tables. + * This translation table was generated automatically, the + * original table can be download from the Microsoft website. + * (
http://www.microsoft.com/typography/unicode/unicodecp.htm
) + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t c2u_81[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B,/* 0x40-0x47 */ + 0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E,/* 0x48-0x4F */ + 0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD,/* 0x50-0x57 */ + 0x3005,0x3006,0x3007,0x30FC,0x2015,0x2010,0xFF0F,0xFF3C,/* 0x58-0x5F */ + 0xFF5E,0x2225,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C,/* 0x60-0x67 */ + 0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B,/* 0x68-0x6F */ + 0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,/* 0x70-0x77 */ + 0x300F,0x3010,0x3011,0xFF0B,0xFF0D,0x00B1,0x00D7,0x0000,/* 0x78-0x7F */ + + 0x00F7,0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,/* 0x80-0x87 */ + 0x2234,0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,/* 0x88-0x8F */ + 0xFF04,0xFFE0,0xFFE1,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,/* 0x90-0x97 */ + 0x00A7,0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,/* 0x98-0x9F */ + 0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B,0x3012,/* 0xA0-0xA7 */ + 0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,0x0000,0x0000,/* 0xA8-0xAF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB0-0xB7 */ + 0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A,0x2229,/* 0xB8-0xBF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC0-0xC7 */ + 0x2227,0x2228,0xFFE2,0x21D2,0x21D4,0x2200,0x2203,0x0000,/* 0xC8-0xCF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD0-0xD7 */ + 0x0000,0x0000,0x2220,0x22A5,0x2312,0x2202,0x2207,0x2261,/* 0xD8-0xDF */ + 0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x2235,0x222B,/* 0xE0-0xE7 */ + 0x222C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE8-0xEF */ + 0x212B,0x2030,0x266F,0x266D,0x266A,0x2020,0x2021,0x00B6,/* 0xF0-0xF7 */ + 0x0000,0x0000,0x0000,0x0000,0x25EF,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_82[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFF10,/* 0x48-0x4F */ + 0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18,/* 0x50-0x57 */ + 0xFF19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,/* 0x60-0x67 */ + 0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,/* 0x68-0x6F */ + 0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,/* 0x70-0x77 */ + 0xFF39,0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,/* 0x80-0x87 */ + 0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,/* 0x88-0x8F */ + 0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,/* 0x90-0x97 */ + 0xFF58,0xFF59,0xFF5A,0x0000,0x0000,0x0000,0x0000,0x3041,/* 0x98-0x9F */ + 0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049,/* 0xA0-0xA7 */ + 0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050,0x3051,/* 0xA8-0xAF */ + 0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058,0x3059,/* 0xB0-0xB7 */ + 0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060,0x3061,/* 0xB8-0xBF */ + 0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068,0x3069,/* 0xC0-0xC7 */ + 0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070,0x3071,/* 0xC8-0xCF */ + 0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,0x3079,/* 0xD0-0xD7 */ + 0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080,0x3081,/* 0xD8-0xDF */ + 0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088,0x3089,/* 0xE0-0xE7 */ + 0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090,0x3091,/* 0xE8-0xEF */ + 0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_83[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8,/* 0x40-0x47 */ + 0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0,/* 0x48-0x4F */ + 0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8,/* 0x50-0x57 */ + 0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0,/* 0x58-0x5F */ + 0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8,/* 0x60-0x67 */ + 0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0,/* 0x68-0x6F */ + 0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8,/* 0x70-0x77 */ + 0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x0000,/* 0x78-0x7F */ + + 0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,/* 0x80-0x87 */ + 0x30E8,0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,/* 0x88-0x8F */ + 0x30F0,0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0391,/* 0x98-0x9F */ + 0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,/* 0xA0-0xA7 */ + 0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0,0x03A1,/* 0xA8-0xAF */ + 0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9,0x0000,/* 0xB0-0xB7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03B1,/* 0xB8-0xBF */ + 0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,/* 0xC0-0xC7 */ + 0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,/* 0xC8-0xCF */ + 0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9,0x0000,/* 0xD0-0xD7 */ +}; + +static wchar_t c2u_84[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416,/* 0x40-0x47 */ + 0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E,/* 0x48-0x4F */ + 0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,/* 0x50-0x57 */ + 0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E,/* 0x58-0x5F */ + 0x042F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436,/* 0x70-0x77 */ + 0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x0000,/* 0x78-0x7F */ + + 0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,/* 0x80-0x87 */ + 0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,/* 0x88-0x8F */ + 0x044E,0x044F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2500,/* 0x98-0x9F */ + 0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,0x252C,0x2524,/* 0xA0-0xA7 */ + 0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,0x251B,0x2517,/* 0xA8-0xAF */ + 0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,0x252F,0x2528,/* 0xB0-0xB7 */ + 0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,0x2542,0x0000,/* 0xB8-0xBF */ +}; + +static wchar_t c2u_87[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,/* 0x40-0x47 */ + 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F,/* 0x48-0x4F */ + 0x2470,0x2471,0x2472,0x2473,0x2160,0x2161,0x2162,0x2163,/* 0x50-0x57 */ + 0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x0000,0x3349,/* 0x58-0x5F */ + 0x3314,0x3322,0x334D,0x3318,0x3327,0x3303,0x3336,0x3351,/* 0x60-0x67 */ + 0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,0x333B,0x339C,/* 0x68-0x6F */ + 0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x337B,0x0000,/* 0x78-0x7F */ + + 0x301D,0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,/* 0x80-0x87 */ + 0x32A7,0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,/* 0x88-0x8F */ + 0x2252,0x2261,0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,/* 0x90-0x97 */ + 0x221F,0x22BF,0x2235,0x2229,0x222A,0x0000,0x0000,0x0000,/* 0x98-0x9F */ +}; + +static wchar_t c2u_88[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4E9C,/* 0x98-0x9F */ + 0x5516,0x5A03,0x963F,0x54C0,0x611B,0x6328,0x59F6,0x9022,/* 0xA0-0xA7 */ + 0x8475,0x831C,0x7A50,0x60AA,0x63E1,0x6E25,0x65ED,0x8466,/* 0xA8-0xAF */ + 0x82A6,0x9BF5,0x6893,0x5727,0x65A1,0x6271,0x5B9B,0x59D0,/* 0xB0-0xB7 */ + 0x867B,0x98F4,0x7D62,0x7DBE,0x9B8E,0x6216,0x7C9F,0x88B7,/* 0xB8-0xBF */ + 0x5B89,0x5EB5,0x6309,0x6697,0x6848,0x95C7,0x978D,0x674F,/* 0xC0-0xC7 */ + 0x4EE5,0x4F0A,0x4F4D,0x4F9D,0x5049,0x56F2,0x5937,0x59D4,/* 0xC8-0xCF */ + 0x5A01,0x5C09,0x60DF,0x610F,0x6170,0x6613,0x6905,0x70BA,/* 0xD0-0xD7 */ + 0x754F,0x7570,0x79FB,0x7DAD,0x7DEF,0x80C3,0x840E,0x8863,/* 0xD8-0xDF */ + 0x8B02,0x9055,0x907A,0x533B,0x4E95,0x4EA5,0x57DF,0x80B2,/* 0xE0-0xE7 */ + 0x90C1,0x78EF,0x4E00,0x58F1,0x6EA2,0x9038,0x7A32,0x8328,/* 0xE8-0xEF */ + 0x828B,0x9C2F,0x5141,0x5370,0x54BD,0x54E1,0x56E0,0x59FB,/* 0xF0-0xF7 */ + 0x5F15,0x98F2,0x6DEB,0x80E4,0x852D,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_89[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9662,0x9670,0x96A0,0x97FB,0x540B,0x53F3,0x5B87,0x70CF,/* 0x40-0x47 */ + 0x7FBD,0x8FC2,0x96E8,0x536F,0x9D5C,0x7ABA,0x4E11,0x7893,/* 0x48-0x4F */ + 0x81FC,0x6E26,0x5618,0x5504,0x6B1D,0x851A,0x9C3B,0x59E5,/* 0x50-0x57 */ + 0x53A9,0x6D66,0x74DC,0x958F,0x5642,0x4E91,0x904B,0x96F2,/* 0x58-0x5F */ + 0x834F,0x990C,0x53E1,0x55B6,0x5B30,0x5F71,0x6620,0x66F3,/* 0x60-0x67 */ + 0x6804,0x6C38,0x6CF3,0x6D29,0x745B,0x76C8,0x7A4E,0x9834,/* 0x68-0x6F */ + 0x82F1,0x885B,0x8A60,0x92ED,0x6DB2,0x75AB,0x76CA,0x99C5,/* 0x70-0x77 */ + 0x60A6,0x8B01,0x8D8A,0x95B2,0x698E,0x53AD,0x5186,0x0000,/* 0x78-0x7F */ + + 0x5712,0x5830,0x5944,0x5BB4,0x5EF6,0x6028,0x63A9,0x63F4,/* 0x80-0x87 */ + 0x6CBF,0x6F14,0x708E,0x7114,0x7159,0x71D5,0x733F,0x7E01,/* 0x88-0x8F */ + 0x8276,0x82D1,0x8597,0x9060,0x925B,0x9D1B,0x5869,0x65BC,/* 0x90-0x97 */ + 0x6C5A,0x7525,0x51F9,0x592E,0x5965,0x5F80,0x5FDC,0x62BC,/* 0x98-0x9F */ + 0x65FA,0x6A2A,0x6B27,0x6BB4,0x738B,0x7FC1,0x8956,0x9D2C,/* 0xA0-0xA7 */ + 0x9D0E,0x9EC4,0x5CA1,0x6C96,0x837B,0x5104,0x5C4B,0x61B6,/* 0xA8-0xAF */ + 0x81C6,0x6876,0x7261,0x4E59,0x4FFA,0x5378,0x6069,0x6E29,/* 0xB0-0xB7 */ + 0x7A4F,0x97F3,0x4E0B,0x5316,0x4EEE,0x4F55,0x4F3D,0x4FA1,/* 0xB8-0xBF */ + 0x4F73,0x52A0,0x53EF,0x5609,0x590F,0x5AC1,0x5BB6,0x5BE1,/* 0xC0-0xC7 */ + 0x79D1,0x6687,0x679C,0x67B6,0x6B4C,0x6CB3,0x706B,0x73C2,/* 0xC8-0xCF */ + 0x798D,0x79BE,0x7A3C,0x7B87,0x82B1,0x82DB,0x8304,0x8377,/* 0xD0-0xD7 */ + 0x83EF,0x83D3,0x8766,0x8AB2,0x5629,0x8CA8,0x8FE6,0x904E,/* 0xD8-0xDF */ + 0x971E,0x868A,0x4FC4,0x5CE8,0x6211,0x7259,0x753B,0x81E5,/* 0xE0-0xE7 */ + 0x82BD,0x86FE,0x8CC0,0x96C5,0x9913,0x99D5,0x4ECB,0x4F1A,/* 0xE8-0xEF */ + 0x89E3,0x56DE,0x584A,0x58CA,0x5EFB,0x5FEB,0x602A,0x6094,/* 0xF0-0xF7 */ + 0x6062,0x61D0,0x6212,0x62D0,0x6539,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8A[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9B41,0x6666,0x68B0,0x6D77,0x7070,0x754C,0x7686,0x7D75,/* 0x40-0x47 */ + 0x82A5,0x87F9,0x958B,0x968E,0x8C9D,0x51F1,0x52BE,0x5916,/* 0x48-0x4F */ + 0x54B3,0x5BB3,0x5D16,0x6168,0x6982,0x6DAF,0x788D,0x84CB,/* 0x50-0x57 */ + 0x8857,0x8A72,0x93A7,0x9AB8,0x6D6C,0x99A8,0x86D9,0x57A3,/* 0x58-0x5F */ + 0x67FF,0x86CE,0x920E,0x5283,0x5687,0x5404,0x5ED3,0x62E1,/* 0x60-0x67 */ + 0x64B9,0x683C,0x6838,0x6BBB,0x7372,0x78BA,0x7A6B,0x899A,/* 0x68-0x6F */ + 0x89D2,0x8D6B,0x8F03,0x90ED,0x95A3,0x9694,0x9769,0x5B66,/* 0x70-0x77 */ + 0x5CB3,0x697D,0x984D,0x984E,0x639B,0x7B20,0x6A2B,0x0000,/* 0x78-0x7F */ + + 0x6A7F,0x68B6,0x9C0D,0x6F5F,0x5272,0x559D,0x6070,0x62EC,/* 0x80-0x87 */ + 0x6D3B,0x6E07,0x6ED1,0x845B,0x8910,0x8F44,0x4E14,0x9C39,/* 0x88-0x8F */ + 0x53F6,0x691B,0x6A3A,0x9784,0x682A,0x515C,0x7AC3,0x84B2,/* 0x90-0x97 */ + 0x91DC,0x938C,0x565B,0x9D28,0x6822,0x8305,0x8431,0x7CA5,/* 0x98-0x9F */ + 0x5208,0x82C5,0x74E6,0x4E7E,0x4F83,0x51A0,0x5BD2,0x520A,/* 0xA0-0xA7 */ + 0x52D8,0x52E7,0x5DFB,0x559A,0x582A,0x59E6,0x5B8C,0x5B98,/* 0xA8-0xAF */ + 0x5BDB,0x5E72,0x5E79,0x60A3,0x611F,0x6163,0x61BE,0x63DB,/* 0xB0-0xB7 */ + 0x6562,0x67D1,0x6853,0x68FA,0x6B3E,0x6B53,0x6C57,0x6F22,/* 0xB8-0xBF */ + 0x6F97,0x6F45,0x74B0,0x7518,0x76E3,0x770B,0x7AFF,0x7BA1,/* 0xC0-0xC7 */ + 0x7C21,0x7DE9,0x7F36,0x7FF0,0x809D,0x8266,0x839E,0x89B3,/* 0xC8-0xCF */ + 0x8ACC,0x8CAB,0x9084,0x9451,0x9593,0x9591,0x95A2,0x9665,/* 0xD0-0xD7 */ + 0x97D3,0x9928,0x8218,0x4E38,0x542B,0x5CB8,0x5DCC,0x73A9,/* 0xD8-0xDF */ + 0x764C,0x773C,0x5CA9,0x7FEB,0x8D0B,0x96C1,0x9811,0x9854,/* 0xE0-0xE7 */ + 0x9858,0x4F01,0x4F0E,0x5371,0x559C,0x5668,0x57FA,0x5947,/* 0xE8-0xEF */ + 0x5B09,0x5BC4,0x5C90,0x5E0C,0x5E7E,0x5FCC,0x63EE,0x673A,/* 0xF0-0xF7 */ + 0x65D7,0x65E2,0x671F,0x68CB,0x68C4,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8B[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6A5F,0x5E30,0x6BC5,0x6C17,0x6C7D,0x757F,0x7948,0x5B63,/* 0x40-0x47 */ + 0x7A00,0x7D00,0x5FBD,0x898F,0x8A18,0x8CB4,0x8D77,0x8ECC,/* 0x48-0x4F */ + 0x8F1D,0x98E2,0x9A0E,0x9B3C,0x4E80,0x507D,0x5100,0x5993,/* 0x50-0x57 */ + 0x5B9C,0x622F,0x6280,0x64EC,0x6B3A,0x72A0,0x7591,0x7947,/* 0x58-0x5F */ + 0x7FA9,0x87FB,0x8ABC,0x8B70,0x63AC,0x83CA,0x97A0,0x5409,/* 0x60-0x67 */ + 0x5403,0x55AB,0x6854,0x6A58,0x8A70,0x7827,0x6775,0x9ECD,/* 0x68-0x6F */ + 0x5374,0x5BA2,0x811A,0x8650,0x9006,0x4E18,0x4E45,0x4EC7,/* 0x70-0x77 */ + 0x4F11,0x53CA,0x5438,0x5BAE,0x5F13,0x6025,0x6551,0x0000,/* 0x78-0x7F */ + + 0x673D,0x6C42,0x6C72,0x6CE3,0x7078,0x7403,0x7A76,0x7AAE,/* 0x80-0x87 */ + 0x7B08,0x7D1A,0x7CFE,0x7D66,0x65E7,0x725B,0x53BB,0x5C45,/* 0x88-0x8F */ + 0x5DE8,0x62D2,0x62E0,0x6319,0x6E20,0x865A,0x8A31,0x8DDD,/* 0x90-0x97 */ + 0x92F8,0x6F01,0x79A6,0x9B5A,0x4EA8,0x4EAB,0x4EAC,0x4F9B,/* 0x98-0x9F */ + 0x4FA0,0x50D1,0x5147,0x7AF6,0x5171,0x51F6,0x5354,0x5321,/* 0xA0-0xA7 */ + 0x537F,0x53EB,0x55AC,0x5883,0x5CE1,0x5F37,0x5F4A,0x602F,/* 0xA8-0xAF */ + 0x6050,0x606D,0x631F,0x6559,0x6A4B,0x6CC1,0x72C2,0x72ED,/* 0xB0-0xB7 */ + 0x77EF,0x80F8,0x8105,0x8208,0x854E,0x90F7,0x93E1,0x97FF,/* 0xB8-0xBF */ + 0x9957,0x9A5A,0x4EF0,0x51DD,0x5C2D,0x6681,0x696D,0x5C40,/* 0xC0-0xC7 */ + 0x66F2,0x6975,0x7389,0x6850,0x7C81,0x50C5,0x52E4,0x5747,/* 0xC8-0xCF */ + 0x5DFE,0x9326,0x65A4,0x6B23,0x6B3D,0x7434,0x7981,0x79BD,/* 0xD0-0xD7 */ + 0x7B4B,0x7DCA,0x82B9,0x83CC,0x887F,0x895F,0x8B39,0x8FD1,/* 0xD8-0xDF */ + 0x91D1,0x541F,0x9280,0x4E5D,0x5036,0x53E5,0x533A,0x72D7,/* 0xE0-0xE7 */ + 0x7396,0x77E9,0x82E6,0x8EAF,0x99C6,0x99C8,0x99D2,0x5177,/* 0xE8-0xEF */ + 0x611A,0x865E,0x55B0,0x7A7A,0x5076,0x5BD3,0x9047,0x9685,/* 0xF0-0xF7 */ + 0x4E32,0x6ADB,0x91E7,0x5C51,0x5C48,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8C[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6398,0x7A9F,0x6C93,0x9774,0x8F61,0x7AAA,0x718A,0x9688,/* 0x40-0x47 */ + 0x7C82,0x6817,0x7E70,0x6851,0x936C,0x52F2,0x541B,0x85AB,/* 0x48-0x4F */ + 0x8A13,0x7FA4,0x8ECD,0x90E1,0x5366,0x8888,0x7941,0x4FC2,/* 0x50-0x57 */ + 0x50BE,0x5211,0x5144,0x5553,0x572D,0x73EA,0x578B,0x5951,/* 0x58-0x5F */ + 0x5F62,0x5F84,0x6075,0x6176,0x6167,0x61A9,0x63B2,0x643A,/* 0x60-0x67 */ + 0x656C,0x666F,0x6842,0x6E13,0x7566,0x7A3D,0x7CFB,0x7D4C,/* 0x68-0x6F */ + 0x7D99,0x7E4B,0x7F6B,0x830E,0x834A,0x86CD,0x8A08,0x8A63,/* 0x70-0x77 */ + 0x8B66,0x8EFD,0x981A,0x9D8F,0x82B8,0x8FCE,0x9BE8,0x0000,/* 0x78-0x7F */ + + 0x5287,0x621F,0x6483,0x6FC0,0x9699,0x6841,0x5091,0x6B20,/* 0x80-0x87 */ + 0x6C7A,0x6F54,0x7A74,0x7D50,0x8840,0x8A23,0x6708,0x4EF6,/* 0x88-0x8F */ + 0x5039,0x5026,0x5065,0x517C,0x5238,0x5263,0x55A7,0x570F,/* 0x90-0x97 */ + 0x5805,0x5ACC,0x5EFA,0x61B2,0x61F8,0x62F3,0x6372,0x691C,/* 0x98-0x9F */ + 0x6A29,0x727D,0x72AC,0x732E,0x7814,0x786F,0x7D79,0x770C,/* 0xA0-0xA7 */ + 0x80A9,0x898B,0x8B19,0x8CE2,0x8ED2,0x9063,0x9375,0x967A,/* 0xA8-0xAF */ + 0x9855,0x9A13,0x9E78,0x5143,0x539F,0x53B3,0x5E7B,0x5F26,/* 0xB0-0xB7 */ + 0x6E1B,0x6E90,0x7384,0x73FE,0x7D43,0x8237,0x8A00,0x8AFA,/* 0xB8-0xBF */ + 0x9650,0x4E4E,0x500B,0x53E4,0x547C,0x56FA,0x59D1,0x5B64,/* 0xC0-0xC7 */ + 0x5DF1,0x5EAB,0x5F27,0x6238,0x6545,0x67AF,0x6E56,0x72D0,/* 0xC8-0xCF */ + 0x7CCA,0x88B4,0x80A1,0x80E1,0x83F0,0x864E,0x8A87,0x8DE8,/* 0xD0-0xD7 */ + 0x9237,0x96C7,0x9867,0x9F13,0x4E94,0x4E92,0x4F0D,0x5348,/* 0xD8-0xDF */ + 0x5449,0x543E,0x5A2F,0x5F8C,0x5FA1,0x609F,0x68A7,0x6A8E,/* 0xE0-0xE7 */ + 0x745A,0x7881,0x8A9E,0x8AA4,0x8B77,0x9190,0x4E5E,0x9BC9,/* 0xE8-0xEF */ + 0x4EA4,0x4F7C,0x4FAF,0x5019,0x5016,0x5149,0x516C,0x529F,/* 0xF0-0xF7 */ + 0x52B9,0x52FE,0x539A,0x53E3,0x5411,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8D[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x540E,0x5589,0x5751,0x57A2,0x597D,0x5B54,0x5B5D,0x5B8F,/* 0x40-0x47 */ + 0x5DE5,0x5DE7,0x5DF7,0x5E78,0x5E83,0x5E9A,0x5EB7,0x5F18,/* 0x48-0x4F */ + 0x6052,0x614C,0x6297,0x62D8,0x63A7,0x653B,0x6602,0x6643,/* 0x50-0x57 */ + 0x66F4,0x676D,0x6821,0x6897,0x69CB,0x6C5F,0x6D2A,0x6D69,/* 0x58-0x5F */ + 0x6E2F,0x6E9D,0x7532,0x7687,0x786C,0x7A3F,0x7CE0,0x7D05,/* 0x60-0x67 */ + 0x7D18,0x7D5E,0x7DB1,0x8015,0x8003,0x80AF,0x80B1,0x8154,/* 0x68-0x6F */ + 0x818F,0x822A,0x8352,0x884C,0x8861,0x8B1B,0x8CA2,0x8CFC,/* 0x70-0x77 */ + 0x90CA,0x9175,0x9271,0x783F,0x92FC,0x95A4,0x964D,0x0000,/* 0x78-0x7F */ + + 0x9805,0x9999,0x9AD8,0x9D3B,0x525B,0x52AB,0x53F7,0x5408,/* 0x80-0x87 */ + 0x58D5,0x62F7,0x6FE0,0x8C6A,0x8F5F,0x9EB9,0x514B,0x523B,/* 0x88-0x8F */ + 0x544A,0x56FD,0x7A40,0x9177,0x9D60,0x9ED2,0x7344,0x6F09,/* 0x90-0x97 */ + 0x8170,0x7511,0x5FFD,0x60DA,0x9AA8,0x72DB,0x8FBC,0x6B64,/* 0x98-0x9F */ + 0x9803,0x4ECA,0x56F0,0x5764,0x58BE,0x5A5A,0x6068,0x61C7,/* 0xA0-0xA7 */ + 0x660F,0x6606,0x6839,0x68B1,0x6DF7,0x75D5,0x7D3A,0x826E,/* 0xA8-0xAF */ + 0x9B42,0x4E9B,0x4F50,0x53C9,0x5506,0x5D6F,0x5DE6,0x5DEE,/* 0xB0-0xB7 */ + 0x67FB,0x6C99,0x7473,0x7802,0x8A50,0x9396,0x88DF,0x5750,/* 0xB8-0xBF */ + 0x5EA7,0x632B,0x50B5,0x50AC,0x518D,0x6700,0x54C9,0x585E,/* 0xC0-0xC7 */ + 0x59BB,0x5BB0,0x5F69,0x624D,0x63A1,0x683D,0x6B73,0x6E08,/* 0xC8-0xCF */ + 0x707D,0x91C7,0x7280,0x7815,0x7826,0x796D,0x658E,0x7D30,/* 0xD0-0xD7 */ + 0x83DC,0x88C1,0x8F09,0x969B,0x5264,0x5728,0x6750,0x7F6A,/* 0xD8-0xDF */ + 0x8CA1,0x51B4,0x5742,0x962A,0x583A,0x698A,0x80B4,0x54B2,/* 0xE0-0xE7 */ + 0x5D0E,0x57FC,0x7895,0x9DFA,0x4F5C,0x524A,0x548B,0x643E,/* 0xE8-0xEF */ + 0x6628,0x6714,0x67F5,0x7A84,0x7B56,0x7D22,0x932F,0x685C,/* 0xF0-0xF7 */ + 0x9BAD,0x7B39,0x5319,0x518A,0x5237,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8E[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5BDF,0x62F6,0x64AE,0x64E6,0x672D,0x6BBA,0x85A9,0x96D1,/* 0x40-0x47 */ + 0x7690,0x9BD6,0x634C,0x9306,0x9BAB,0x76BF,0x6652,0x4E09,/* 0x48-0x4F */ + 0x5098,0x53C2,0x5C71,0x60E8,0x6492,0x6563,0x685F,0x71E6,/* 0x50-0x57 */ + 0x73CA,0x7523,0x7B97,0x7E82,0x8695,0x8B83,0x8CDB,0x9178,/* 0x58-0x5F */ + 0x9910,0x65AC,0x66AB,0x6B8B,0x4ED5,0x4ED4,0x4F3A,0x4F7F,/* 0x60-0x67 */ + 0x523A,0x53F8,0x53F2,0x55E3,0x56DB,0x58EB,0x59CB,0x59C9,/* 0x68-0x6F */ + 0x59FF,0x5B50,0x5C4D,0x5E02,0x5E2B,0x5FD7,0x601D,0x6307,/* 0x70-0x77 */ + 0x652F,0x5B5C,0x65AF,0x65BD,0x65E8,0x679D,0x6B62,0x0000,/* 0x78-0x7F */ + + 0x6B7B,0x6C0F,0x7345,0x7949,0x79C1,0x7CF8,0x7D19,0x7D2B,/* 0x80-0x87 */ + 0x80A2,0x8102,0x81F3,0x8996,0x8A5E,0x8A69,0x8A66,0x8A8C,/* 0x88-0x8F */ + 0x8AEE,0x8CC7,0x8CDC,0x96CC,0x98FC,0x6B6F,0x4E8B,0x4F3C,/* 0x90-0x97 */ + 0x4F8D,0x5150,0x5B57,0x5BFA,0x6148,0x6301,0x6642,0x6B21,/* 0x98-0x9F */ + 0x6ECB,0x6CBB,0x723E,0x74BD,0x75D4,0x78C1,0x793A,0x800C,/* 0xA0-0xA7 */ + 0x8033,0x81EA,0x8494,0x8F9E,0x6C50,0x9E7F,0x5F0F,0x8B58,/* 0xA8-0xAF */ + 0x9D2B,0x7AFA,0x8EF8,0x5B8D,0x96EB,0x4E03,0x53F1,0x57F7,/* 0xB0-0xB7 */ + 0x5931,0x5AC9,0x5BA4,0x6089,0x6E7F,0x6F06,0x75BE,0x8CEA,/* 0xB8-0xBF */ + 0x5B9F,0x8500,0x7BE0,0x5072,0x67F4,0x829D,0x5C61,0x854A,/* 0xC0-0xC7 */ + 0x7E1E,0x820E,0x5199,0x5C04,0x6368,0x8D66,0x659C,0x716E,/* 0xC8-0xCF */ + 0x793E,0x7D17,0x8005,0x8B1D,0x8ECA,0x906E,0x86C7,0x90AA,/* 0xD0-0xD7 */ + 0x501F,0x52FA,0x5C3A,0x6753,0x707C,0x7235,0x914C,0x91C8,/* 0xD8-0xDF */ + 0x932B,0x82E5,0x5BC2,0x5F31,0x60F9,0x4E3B,0x53D6,0x5B88,/* 0xE0-0xE7 */ + 0x624B,0x6731,0x6B8A,0x72E9,0x73E0,0x7A2E,0x816B,0x8DA3,/* 0xE8-0xEF */ + 0x9152,0x9996,0x5112,0x53D7,0x546A,0x5BFF,0x6388,0x6A39,/* 0xF0-0xF7 */ + 0x7DAC,0x9700,0x56DA,0x53CE,0x5468,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8F[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5B97,0x5C31,0x5DDE,0x4FEE,0x6101,0x62FE,0x6D32,0x79C0,/* 0x40-0x47 */ + 0x79CB,0x7D42,0x7E4D,0x7FD2,0x81ED,0x821F,0x8490,0x8846,/* 0x48-0x4F */ + 0x8972,0x8B90,0x8E74,0x8F2F,0x9031,0x914B,0x916C,0x96C6,/* 0x50-0x57 */ + 0x919C,0x4EC0,0x4F4F,0x5145,0x5341,0x5F93,0x620E,0x67D4,/* 0x58-0x5F */ + 0x6C41,0x6E0B,0x7363,0x7E26,0x91CD,0x9283,0x53D4,0x5919,/* 0x60-0x67 */ + 0x5BBF,0x6DD1,0x795D,0x7E2E,0x7C9B,0x587E,0x719F,0x51FA,/* 0x68-0x6F */ + 0x8853,0x8FF0,0x4FCA,0x5CFB,0x6625,0x77AC,0x7AE3,0x821C,/* 0x70-0x77 */ + 0x99FF,0x51C6,0x5FAA,0x65EC,0x696F,0x6B89,0x6DF3,0x0000,/* 0x78-0x7F */ + + 0x6E96,0x6F64,0x76FE,0x7D14,0x5DE1,0x9075,0x9187,0x9806,/* 0x80-0x87 */ + 0x51E6,0x521D,0x6240,0x6691,0x66D9,0x6E1A,0x5EB6,0x7DD2,/* 0x88-0x8F */ + 0x7F72,0x66F8,0x85AF,0x85F7,0x8AF8,0x52A9,0x53D9,0x5973,/* 0x90-0x97 */ + 0x5E8F,0x5F90,0x6055,0x92E4,0x9664,0x50B7,0x511F,0x52DD,/* 0x98-0x9F */ + 0x5320,0x5347,0x53EC,0x54E8,0x5546,0x5531,0x5617,0x5968,/* 0xA0-0xA7 */ + 0x59BE,0x5A3C,0x5BB5,0x5C06,0x5C0F,0x5C11,0x5C1A,0x5E84,/* 0xA8-0xAF */ + 0x5E8A,0x5EE0,0x5F70,0x627F,0x6284,0x62DB,0x638C,0x6377,/* 0xB0-0xB7 */ + 0x6607,0x660C,0x662D,0x6676,0x677E,0x68A2,0x6A1F,0x6A35,/* 0xB8-0xBF */ + 0x6CBC,0x6D88,0x6E09,0x6E58,0x713C,0x7126,0x7167,0x75C7,/* 0xC0-0xC7 */ + 0x7701,0x785D,0x7901,0x7965,0x79F0,0x7AE0,0x7B11,0x7CA7,/* 0xC8-0xCF */ + 0x7D39,0x8096,0x83D6,0x848B,0x8549,0x885D,0x88F3,0x8A1F,/* 0xD0-0xD7 */ + 0x8A3C,0x8A54,0x8A73,0x8C61,0x8CDE,0x91A4,0x9266,0x937E,/* 0xD8-0xDF */ + 0x9418,0x969C,0x9798,0x4E0A,0x4E08,0x4E1E,0x4E57,0x5197,/* 0xE0-0xE7 */ + 0x5270,0x57CE,0x5834,0x58CC,0x5B22,0x5E38,0x60C5,0x64FE,/* 0xE8-0xEF */ + 0x6761,0x6756,0x6D44,0x72B6,0x7573,0x7A63,0x84B8,0x8B72,/* 0xF0-0xF7 */ + 0x91B8,0x9320,0x5631,0x57F4,0x98FE,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_90[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x62ED,0x690D,0x6B96,0x71ED,0x7E54,0x8077,0x8272,0x89E6,/* 0x40-0x47 */ + 0x98DF,0x8755,0x8FB1,0x5C3B,0x4F38,0x4FE1,0x4FB5,0x5507,/* 0x48-0x4F */ + 0x5A20,0x5BDD,0x5BE9,0x5FC3,0x614E,0x632F,0x65B0,0x664B,/* 0x50-0x57 */ + 0x68EE,0x699B,0x6D78,0x6DF1,0x7533,0x75B9,0x771F,0x795E,/* 0x58-0x5F */ + 0x79E6,0x7D33,0x81E3,0x82AF,0x85AA,0x89AA,0x8A3A,0x8EAB,/* 0x60-0x67 */ + 0x8F9B,0x9032,0x91DD,0x9707,0x4EBA,0x4EC1,0x5203,0x5875,/* 0x68-0x6F */ + 0x58EC,0x5C0B,0x751A,0x5C3D,0x814E,0x8A0A,0x8FC5,0x9663,/* 0x70-0x77 */ + 0x976D,0x7B25,0x8ACF,0x9808,0x9162,0x56F3,0x53A8,0x0000,/* 0x78-0x7F */ + + 0x9017,0x5439,0x5782,0x5E25,0x63A8,0x6C34,0x708A,0x7761,/* 0x80-0x87 */ + 0x7C8B,0x7FE0,0x8870,0x9042,0x9154,0x9310,0x9318,0x968F,/* 0x88-0x8F */ + 0x745E,0x9AC4,0x5D07,0x5D69,0x6570,0x67A2,0x8DA8,0x96DB,/* 0x90-0x97 */ + 0x636E,0x6749,0x6919,0x83C5,0x9817,0x96C0,0x88FE,0x6F84,/* 0x98-0x9F */ + 0x647A,0x5BF8,0x4E16,0x702C,0x755D,0x662F,0x51C4,0x5236,/* 0xA0-0xA7 */ + 0x52E2,0x59D3,0x5F81,0x6027,0x6210,0x653F,0x6574,0x661F,/* 0xA8-0xAF */ + 0x6674,0x68F2,0x6816,0x6B63,0x6E05,0x7272,0x751F,0x76DB,/* 0xB0-0xB7 */ + 0x7CBE,0x8056,0x58F0,0x88FD,0x897F,0x8AA0,0x8A93,0x8ACB,/* 0xB8-0xBF */ + 0x901D,0x9192,0x9752,0x9759,0x6589,0x7A0E,0x8106,0x96BB,/* 0xC0-0xC7 */ + 0x5E2D,0x60DC,0x621A,0x65A5,0x6614,0x6790,0x77F3,0x7A4D,/* 0xC8-0xCF */ + 0x7C4D,0x7E3E,0x810A,0x8CAC,0x8D64,0x8DE1,0x8E5F,0x78A9,/* 0xD0-0xD7 */ + 0x5207,0x62D9,0x63A5,0x6442,0x6298,0x8A2D,0x7A83,0x7BC0,/* 0xD8-0xDF */ + 0x8AAC,0x96EA,0x7D76,0x820C,0x8749,0x4ED9,0x5148,0x5343,/* 0xE0-0xE7 */ + 0x5360,0x5BA3,0x5C02,0x5C16,0x5DDD,0x6226,0x6247,0x64B0,/* 0xE8-0xEF */ + 0x6813,0x6834,0x6CC9,0x6D45,0x6D17,0x67D3,0x6F5C,0x714E,/* 0xF0-0xF7 */ + 0x717D,0x65CB,0x7A7F,0x7BAD,0x7DDA,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_91[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7E4A,0x7FA8,0x817A,0x821B,0x8239,0x85A6,0x8A6E,0x8CCE,/* 0x40-0x47 */ + 0x8DF5,0x9078,0x9077,0x92AD,0x9291,0x9583,0x9BAE,0x524D,/* 0x48-0x4F */ + 0x5584,0x6F38,0x7136,0x5168,0x7985,0x7E55,0x81B3,0x7CCE,/* 0x50-0x57 */ + 0x564C,0x5851,0x5CA8,0x63AA,0x66FE,0x66FD,0x695A,0x72D9,/* 0x58-0x5F */ + 0x758F,0x758E,0x790E,0x7956,0x79DF,0x7C97,0x7D20,0x7D44,/* 0x60-0x67 */ + 0x8607,0x8A34,0x963B,0x9061,0x9F20,0x50E7,0x5275,0x53CC,/* 0x68-0x6F */ + 0x53E2,0x5009,0x55AA,0x58EE,0x594F,0x723D,0x5B8B,0x5C64,/* 0x70-0x77 */ + 0x531D,0x60E3,0x60F3,0x635C,0x6383,0x633F,0x63BB,0x0000,/* 0x78-0x7F */ + + 0x64CD,0x65E9,0x66F9,0x5DE3,0x69CD,0x69FD,0x6F15,0x71E5,/* 0x80-0x87 */ + 0x4E89,0x75E9,0x76F8,0x7A93,0x7CDF,0x7DCF,0x7D9C,0x8061,/* 0x88-0x8F */ + 0x8349,0x8358,0x846C,0x84BC,0x85FB,0x88C5,0x8D70,0x9001,/* 0x90-0x97 */ + 0x906D,0x9397,0x971C,0x9A12,0x50CF,0x5897,0x618E,0x81D3,/* 0x98-0x9F */ + 0x8535,0x8D08,0x9020,0x4FC3,0x5074,0x5247,0x5373,0x606F,/* 0xA0-0xA7 */ + 0x6349,0x675F,0x6E2C,0x8DB3,0x901F,0x4FD7,0x5C5E,0x8CCA,/* 0xA8-0xAF */ + 0x65CF,0x7D9A,0x5352,0x8896,0x5176,0x63C3,0x5B58,0x5B6B,/* 0xB0-0xB7 */ + 0x5C0A,0x640D,0x6751,0x905C,0x4ED6,0x591A,0x592A,0x6C70,/* 0xB8-0xBF */ + 0x8A51,0x553E,0x5815,0x59A5,0x60F0,0x6253,0x67C1,0x8235,/* 0xC0-0xC7 */ + 0x6955,0x9640,0x99C4,0x9A28,0x4F53,0x5806,0x5BFE,0x8010,/* 0xC8-0xCF */ + 0x5CB1,0x5E2F,0x5F85,0x6020,0x614B,0x6234,0x66FF,0x6CF0,/* 0xD0-0xD7 */ + 0x6EDE,0x80CE,0x817F,0x82D4,0x888B,0x8CB8,0x9000,0x902E,/* 0xD8-0xDF */ + 0x968A,0x9EDB,0x9BDB,0x4EE3,0x53F0,0x5927,0x7B2C,0x918D,/* 0xE0-0xE7 */ + 0x984C,0x9DF9,0x6EDD,0x7027,0x5353,0x5544,0x5B85,0x6258,/* 0xE8-0xEF */ + 0x629E,0x62D3,0x6CA2,0x6FEF,0x7422,0x8A17,0x9438,0x6FC1,/* 0xF0-0xF7 */ + 0x8AFE,0x8338,0x51E7,0x86F8,0x53EA,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_92[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x53E9,0x4F46,0x9054,0x8FB0,0x596A,0x8131,0x5DFD,0x7AEA,/* 0x40-0x47 */ + 0x8FBF,0x68DA,0x8C37,0x72F8,0x9C48,0x6A3D,0x8AB0,0x4E39,/* 0x48-0x4F */ + 0x5358,0x5606,0x5766,0x62C5,0x63A2,0x65E6,0x6B4E,0x6DE1,/* 0x50-0x57 */ + 0x6E5B,0x70AD,0x77ED,0x7AEF,0x7BAA,0x7DBB,0x803D,0x80C6,/* 0x58-0x5F */ + 0x86CB,0x8A95,0x935B,0x56E3,0x58C7,0x5F3E,0x65AD,0x6696,/* 0x60-0x67 */ + 0x6A80,0x6BB5,0x7537,0x8AC7,0x5024,0x77E5,0x5730,0x5F1B,/* 0x68-0x6F */ + 0x6065,0x667A,0x6C60,0x75F4,0x7A1A,0x7F6E,0x81F4,0x8718,/* 0x70-0x77 */ + 0x9045,0x99B3,0x7BC9,0x755C,0x7AF9,0x7B51,0x84C4,0x0000,/* 0x78-0x7F */ + + 0x9010,0x79E9,0x7A92,0x8336,0x5AE1,0x7740,0x4E2D,0x4EF2,/* 0x80-0x87 */ + 0x5B99,0x5FE0,0x62BD,0x663C,0x67F1,0x6CE8,0x866B,0x8877,/* 0x88-0x8F */ + 0x8A3B,0x914E,0x92F3,0x99D0,0x6A17,0x7026,0x732A,0x82E7,/* 0x90-0x97 */ + 0x8457,0x8CAF,0x4E01,0x5146,0x51CB,0x558B,0x5BF5,0x5E16,/* 0x98-0x9F */ + 0x5E33,0x5E81,0x5F14,0x5F35,0x5F6B,0x5FB4,0x61F2,0x6311,/* 0xA0-0xA7 */ + 0x66A2,0x671D,0x6F6E,0x7252,0x753A,0x773A,0x8074,0x8139,/* 0xA8-0xAF */ + 0x8178,0x8776,0x8ABF,0x8ADC,0x8D85,0x8DF3,0x929A,0x9577,/* 0xB0-0xB7 */ + 0x9802,0x9CE5,0x52C5,0x6357,0x76F4,0x6715,0x6C88,0x73CD,/* 0xB8-0xBF */ + 0x8CC3,0x93AE,0x9673,0x6D25,0x589C,0x690E,0x69CC,0x8FFD,/* 0xC0-0xC7 */ + 0x939A,0x75DB,0x901A,0x585A,0x6802,0x63B4,0x69FB,0x4F43,/* 0xC8-0xCF */ + 0x6F2C,0x67D8,0x8FBB,0x8526,0x7DB4,0x9354,0x693F,0x6F70,/* 0xD0-0xD7 */ + 0x576A,0x58F7,0x5B2C,0x7D2C,0x722A,0x540A,0x91E3,0x9DB4,/* 0xD8-0xDF */ + 0x4EAD,0x4F4E,0x505C,0x5075,0x5243,0x8C9E,0x5448,0x5824,/* 0xE0-0xE7 */ + 0x5B9A,0x5E1D,0x5E95,0x5EAD,0x5EF7,0x5F1F,0x608C,0x62B5,/* 0xE8-0xEF */ + 0x633A,0x63D0,0x68AF,0x6C40,0x7887,0x798E,0x7A0B,0x7DE0,/* 0xF0-0xF7 */ + 0x8247,0x8A02,0x8AE6,0x8E44,0x9013,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_93[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x90B8,0x912D,0x91D8,0x9F0E,0x6CE5,0x6458,0x64E2,0x6575,/* 0x40-0x47 */ + 0x6EF4,0x7684,0x7B1B,0x9069,0x93D1,0x6EBA,0x54F2,0x5FB9,/* 0x48-0x4F */ + 0x64A4,0x8F4D,0x8FED,0x9244,0x5178,0x586B,0x5929,0x5C55,/* 0x50-0x57 */ + 0x5E97,0x6DFB,0x7E8F,0x751C,0x8CBC,0x8EE2,0x985B,0x70B9,/* 0x58-0x5F */ + 0x4F1D,0x6BBF,0x6FB1,0x7530,0x96FB,0x514E,0x5410,0x5835,/* 0x60-0x67 */ + 0x5857,0x59AC,0x5C60,0x5F92,0x6597,0x675C,0x6E21,0x767B,/* 0x68-0x6F */ + 0x83DF,0x8CED,0x9014,0x90FD,0x934D,0x7825,0x783A,0x52AA,/* 0x70-0x77 */ + 0x5EA6,0x571F,0x5974,0x6012,0x5012,0x515A,0x51AC,0x0000,/* 0x78-0x7F */ + + 0x51CD,0x5200,0x5510,0x5854,0x5858,0x5957,0x5B95,0x5CF6,/* 0x80-0x87 */ + 0x5D8B,0x60BC,0x6295,0x642D,0x6771,0x6843,0x68BC,0x68DF,/* 0x88-0x8F */ + 0x76D7,0x6DD8,0x6E6F,0x6D9B,0x706F,0x71C8,0x5F53,0x75D8,/* 0x90-0x97 */ + 0x7977,0x7B49,0x7B54,0x7B52,0x7CD6,0x7D71,0x5230,0x8463,/* 0x98-0x9F */ + 0x8569,0x85E4,0x8A0E,0x8B04,0x8C46,0x8E0F,0x9003,0x900F,/* 0xA0-0xA7 */ + 0x9419,0x9676,0x982D,0x9A30,0x95D8,0x50CD,0x52D5,0x540C,/* 0xA8-0xAF */ + 0x5802,0x5C0E,0x61A7,0x649E,0x6D1E,0x77B3,0x7AE5,0x80F4,/* 0xB0-0xB7 */ + 0x8404,0x9053,0x9285,0x5CE0,0x9D07,0x533F,0x5F97,0x5FB3,/* 0xB8-0xBF */ + 0x6D9C,0x7279,0x7763,0x79BF,0x7BE4,0x6BD2,0x72EC,0x8AAD,/* 0xC0-0xC7 */ + 0x6803,0x6A61,0x51F8,0x7A81,0x6934,0x5C4A,0x9CF6,0x82EB,/* 0xC8-0xCF */ + 0x5BC5,0x9149,0x701E,0x5678,0x5C6F,0x60C7,0x6566,0x6C8C,/* 0xD0-0xD7 */ + 0x8C5A,0x9041,0x9813,0x5451,0x66C7,0x920D,0x5948,0x90A3,/* 0xD8-0xDF */ + 0x5185,0x4E4D,0x51EA,0x8599,0x8B0E,0x7058,0x637A,0x934B,/* 0xE0-0xE7 */ + 0x6962,0x99B4,0x7E04,0x7577,0x5357,0x6960,0x8EDF,0x96E3,/* 0xE8-0xEF */ + 0x6C5D,0x4E8C,0x5C3C,0x5F10,0x8FE9,0x5302,0x8CD1,0x8089,/* 0xF0-0xF7 */ + 0x8679,0x5EFF,0x65E5,0x4E73,0x5165,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_94[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5982,0x5C3F,0x97EE,0x4EFB,0x598A,0x5FCD,0x8A8D,0x6FE1,/* 0x40-0x47 */ + 0x79B0,0x7962,0x5BE7,0x8471,0x732B,0x71B1,0x5E74,0x5FF5,/* 0x48-0x4F */ + 0x637B,0x649A,0x71C3,0x7C98,0x4E43,0x5EFC,0x4E4B,0x57DC,/* 0x50-0x57 */ + 0x56A2,0x60A9,0x6FC3,0x7D0D,0x80FD,0x8133,0x81BF,0x8FB2,/* 0x58-0x5F */ + 0x8997,0x86A4,0x5DF4,0x628A,0x64AD,0x8987,0x6777,0x6CE2,/* 0x60-0x67 */ + 0x6D3E,0x7436,0x7834,0x5A46,0x7F75,0x82AD,0x99AC,0x4FF3,/* 0x68-0x6F */ + 0x5EC3,0x62DD,0x6392,0x6557,0x676F,0x76C3,0x724C,0x80CC,/* 0x70-0x77 */ + 0x80BA,0x8F29,0x914D,0x500D,0x57F9,0x5A92,0x6885,0x0000,/* 0x78-0x7F */ + + 0x6973,0x7164,0x72FD,0x8CB7,0x58F2,0x8CE0,0x966A,0x9019,/* 0x80-0x87 */ + 0x877F,0x79E4,0x77E7,0x8429,0x4F2F,0x5265,0x535A,0x62CD,/* 0x88-0x8F */ + 0x67CF,0x6CCA,0x767D,0x7B94,0x7C95,0x8236,0x8584,0x8FEB,/* 0x90-0x97 */ + 0x66DD,0x6F20,0x7206,0x7E1B,0x83AB,0x99C1,0x9EA6,0x51FD,/* 0x98-0x9F */ + 0x7BB1,0x7872,0x7BB8,0x8087,0x7B48,0x6AE8,0x5E61,0x808C,/* 0xA0-0xA7 */ + 0x7551,0x7560,0x516B,0x9262,0x6E8C,0x767A,0x9197,0x9AEA,/* 0xA8-0xAF */ + 0x4F10,0x7F70,0x629C,0x7B4F,0x95A5,0x9CE9,0x567A,0x5859,/* 0xB0-0xB7 */ + 0x86E4,0x96BC,0x4F34,0x5224,0x534A,0x53CD,0x53DB,0x5E06,/* 0xB8-0xBF */ + 0x642C,0x6591,0x677F,0x6C3E,0x6C4E,0x7248,0x72AF,0x73ED,/* 0xC0-0xC7 */ + 0x7554,0x7E41,0x822C,0x85E9,0x8CA9,0x7BC4,0x91C6,0x7169,/* 0xC8-0xCF */ + 0x9812,0x98EF,0x633D,0x6669,0x756A,0x76E4,0x78D0,0x8543,/* 0xD0-0xD7 */ + 0x86EE,0x532A,0x5351,0x5426,0x5983,0x5E87,0x5F7C,0x60B2,/* 0xD8-0xDF */ + 0x6249,0x6279,0x62AB,0x6590,0x6BD4,0x6CCC,0x75B2,0x76AE,/* 0xE0-0xE7 */ + 0x7891,0x79D8,0x7DCB,0x7F77,0x80A5,0x88AB,0x8AB9,0x8CBB,/* 0xE8-0xEF */ + 0x907F,0x975E,0x98DB,0x6A0B,0x7C38,0x5099,0x5C3E,0x5FAE,/* 0xF0-0xF7 */ + 0x6787,0x6BD8,0x7435,0x7709,0x7F8E,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_95[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9F3B,0x67CA,0x7A17,0x5339,0x758B,0x9AED,0x5F66,0x819D,/* 0x40-0x47 */ + 0x83F1,0x8098,0x5F3C,0x5FC5,0x7562,0x7B46,0x903C,0x6867,/* 0x48-0x4F */ + 0x59EB,0x5A9B,0x7D10,0x767E,0x8B2C,0x4FF5,0x5F6A,0x6A19,/* 0x50-0x57 */ + 0x6C37,0x6F02,0x74E2,0x7968,0x8868,0x8A55,0x8C79,0x5EDF,/* 0x58-0x5F */ + 0x63CF,0x75C5,0x79D2,0x82D7,0x9328,0x92F2,0x849C,0x86ED,/* 0x60-0x67 */ + 0x9C2D,0x54C1,0x5F6C,0x658C,0x6D5C,0x7015,0x8CA7,0x8CD3,/* 0x68-0x6F */ + 0x983B,0x654F,0x74F6,0x4E0D,0x4ED8,0x57E0,0x592B,0x5A66,/* 0x70-0x77 */ + 0x5BCC,0x51A8,0x5E03,0x5E9C,0x6016,0x6276,0x6577,0x0000,/* 0x78-0x7F */ + + 0x65A7,0x666E,0x6D6E,0x7236,0x7B26,0x8150,0x819A,0x8299,/* 0x80-0x87 */ + 0x8B5C,0x8CA0,0x8CE6,0x8D74,0x961C,0x9644,0x4FAE,0x64AB,/* 0x88-0x8F */ + 0x6B66,0x821E,0x8461,0x856A,0x90E8,0x5C01,0x6953,0x98A8,/* 0x90-0x97 */ + 0x847A,0x8557,0x4F0F,0x526F,0x5FA9,0x5E45,0x670D,0x798F,/* 0x98-0x9F */ + 0x8179,0x8907,0x8986,0x6DF5,0x5F17,0x6255,0x6CB8,0x4ECF,/* 0xA0-0xA7 */ + 0x7269,0x9B92,0x5206,0x543B,0x5674,0x58B3,0x61A4,0x626E,/* 0xA8-0xAF */ + 0x711A,0x596E,0x7C89,0x7CDE,0x7D1B,0x96F0,0x6587,0x805E,/* 0xB0-0xB7 */ + 0x4E19,0x4F75,0x5175,0x5840,0x5E63,0x5E73,0x5F0A,0x67C4,/* 0xB8-0xBF */ + 0x4E26,0x853D,0x9589,0x965B,0x7C73,0x9801,0x50FB,0x58C1,/* 0xC0-0xC7 */ + 0x7656,0x78A7,0x5225,0x77A5,0x8511,0x7B86,0x504F,0x5909,/* 0xC8-0xCF */ + 0x7247,0x7BC7,0x7DE8,0x8FBA,0x8FD4,0x904D,0x4FBF,0x52C9,/* 0xD0-0xD7 */ + 0x5A29,0x5F01,0x97AD,0x4FDD,0x8217,0x92EA,0x5703,0x6355,/* 0xD8-0xDF */ + 0x6B69,0x752B,0x88DC,0x8F14,0x7A42,0x52DF,0x5893,0x6155,/* 0xE0-0xE7 */ + 0x620A,0x66AE,0x6BCD,0x7C3F,0x83E9,0x5023,0x4FF8,0x5305,/* 0xE8-0xEF */ + 0x5446,0x5831,0x5949,0x5B9D,0x5CF0,0x5CEF,0x5D29,0x5E96,/* 0xF0-0xF7 */ + 0x62B1,0x6367,0x653E,0x65B9,0x670B,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_96[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6CD5,0x6CE1,0x70F9,0x7832,0x7E2B,0x80DE,0x82B3,0x840C,/* 0x40-0x47 */ + 0x84EC,0x8702,0x8912,0x8A2A,0x8C4A,0x90A6,0x92D2,0x98FD,/* 0x48-0x4F */ + 0x9CF3,0x9D6C,0x4E4F,0x4EA1,0x508D,0x5256,0x574A,0x59A8,/* 0x50-0x57 */ + 0x5E3D,0x5FD8,0x5FD9,0x623F,0x66B4,0x671B,0x67D0,0x68D2,/* 0x58-0x5F */ + 0x5192,0x7D21,0x80AA,0x81A8,0x8B00,0x8C8C,0x8CBF,0x927E,/* 0x60-0x67 */ + 0x9632,0x5420,0x982C,0x5317,0x50D5,0x535C,0x58A8,0x64B2,/* 0x68-0x6F */ + 0x6734,0x7267,0x7766,0x7A46,0x91E6,0x52C3,0x6CA1,0x6B86,/* 0x70-0x77 */ + 0x5800,0x5E4C,0x5954,0x672C,0x7FFB,0x51E1,0x76C6,0x0000,/* 0x78-0x7F */ + + 0x6469,0x78E8,0x9B54,0x9EBB,0x57CB,0x59B9,0x6627,0x679A,/* 0x80-0x87 */ + 0x6BCE,0x54E9,0x69D9,0x5E55,0x819C,0x6795,0x9BAA,0x67FE,/* 0x88-0x8F */ + 0x9C52,0x685D,0x4EA6,0x4FE3,0x53C8,0x62B9,0x672B,0x6CAB,/* 0x90-0x97 */ + 0x8FC4,0x4FAD,0x7E6D,0x9EBF,0x4E07,0x6162,0x6E80,0x6F2B,/* 0x98-0x9F */ + 0x8513,0x5473,0x672A,0x9B45,0x5DF3,0x7B95,0x5CAC,0x5BC6,/* 0xA0-0xA7 */ + 0x871C,0x6E4A,0x84D1,0x7A14,0x8108,0x5999,0x7C8D,0x6C11,/* 0xA8-0xAF */ + 0x7720,0x52D9,0x5922,0x7121,0x725F,0x77DB,0x9727,0x9D61,/* 0xB0-0xB7 */ + 0x690B,0x5A7F,0x5A18,0x51A5,0x540D,0x547D,0x660E,0x76DF,/* 0xB8-0xBF */ + 0x8FF7,0x9298,0x9CF4,0x59EA,0x725D,0x6EC5,0x514D,0x68C9,/* 0xC0-0xC7 */ + 0x7DBF,0x7DEC,0x9762,0x9EBA,0x6478,0x6A21,0x8302,0x5984,/* 0xC8-0xCF */ + 0x5B5F,0x6BDB,0x731B,0x76F2,0x7DB2,0x8017,0x8499,0x5132,/* 0xD0-0xD7 */ + 0x6728,0x9ED9,0x76EE,0x6762,0x52FF,0x9905,0x5C24,0x623B,/* 0xD8-0xDF */ + 0x7C7E,0x8CB0,0x554F,0x60B6,0x7D0B,0x9580,0x5301,0x4E5F,/* 0xE0-0xE7 */ + 0x51B6,0x591C,0x723A,0x8036,0x91CE,0x5F25,0x77E2,0x5384,/* 0xE8-0xEF */ + 0x5F79,0x7D04,0x85AC,0x8A33,0x8E8D,0x9756,0x67F3,0x85AE,/* 0xF0-0xF7 */ + 0x9453,0x6109,0x6108,0x6CB9,0x7652,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_97[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8AED,0x8F38,0x552F,0x4F51,0x512A,0x52C7,0x53CB,0x5BA5,/* 0x40-0x47 */ + 0x5E7D,0x60A0,0x6182,0x63D6,0x6709,0x67DA,0x6E67,0x6D8C,/* 0x48-0x4F */ + 0x7336,0x7337,0x7531,0x7950,0x88D5,0x8A98,0x904A,0x9091,/* 0x50-0x57 */ + 0x90F5,0x96C4,0x878D,0x5915,0x4E88,0x4F59,0x4E0E,0x8A89,/* 0x58-0x5F */ + 0x8F3F,0x9810,0x50AD,0x5E7C,0x5996,0x5BB9,0x5EB8,0x63DA,/* 0x60-0x67 */ + 0x63FA,0x64C1,0x66DC,0x694A,0x69D8,0x6D0B,0x6EB6,0x7194,/* 0x68-0x6F */ + 0x7528,0x7AAF,0x7F8A,0x8000,0x8449,0x84C9,0x8981,0x8B21,/* 0x70-0x77 */ + 0x8E0A,0x9065,0x967D,0x990A,0x617E,0x6291,0x6B32,0x0000,/* 0x78-0x7F */ + + 0x6C83,0x6D74,0x7FCC,0x7FFC,0x6DC0,0x7F85,0x87BA,0x88F8,/* 0x80-0x87 */ + 0x6765,0x83B1,0x983C,0x96F7,0x6D1B,0x7D61,0x843D,0x916A,/* 0x88-0x8F */ + 0x4E71,0x5375,0x5D50,0x6B04,0x6FEB,0x85CD,0x862D,0x89A7,/* 0x90-0x97 */ + 0x5229,0x540F,0x5C65,0x674E,0x68A8,0x7406,0x7483,0x75E2,/* 0x98-0x9F */ + 0x88CF,0x88E1,0x91CC,0x96E2,0x9678,0x5F8B,0x7387,0x7ACB,/* 0xA0-0xA7 */ + 0x844E,0x63A0,0x7565,0x5289,0x6D41,0x6E9C,0x7409,0x7559,/* 0xA8-0xAF */ + 0x786B,0x7C92,0x9686,0x7ADC,0x9F8D,0x4FB6,0x616E,0x65C5,/* 0xB0-0xB7 */ + 0x865C,0x4E86,0x4EAE,0x50DA,0x4E21,0x51CC,0x5BEE,0x6599,/* 0xB8-0xBF */ + 0x6881,0x6DBC,0x731F,0x7642,0x77AD,0x7A1C,0x7CE7,0x826F,/* 0xC0-0xC7 */ + 0x8AD2,0x907C,0x91CF,0x9675,0x9818,0x529B,0x7DD1,0x502B,/* 0xC8-0xCF */ + 0x5398,0x6797,0x6DCB,0x71D0,0x7433,0x81E8,0x8F2A,0x96A3,/* 0xD0-0xD7 */ + 0x9C57,0x9E9F,0x7460,0x5841,0x6D99,0x7D2F,0x985E,0x4EE4,/* 0xD8-0xDF */ + 0x4F36,0x4F8B,0x51B7,0x52B1,0x5DBA,0x601C,0x73B2,0x793C,/* 0xE0-0xE7 */ + 0x82D3,0x9234,0x96B7,0x96F6,0x970A,0x9E97,0x9F62,0x66A6,/* 0xE8-0xEF */ + 0x6B74,0x5217,0x52A3,0x70C8,0x88C2,0x5EC9,0x604B,0x6190,/* 0xF0-0xF7 */ + 0x6F23,0x7149,0x7C3E,0x7DF4,0x806F,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_98[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x84EE,0x9023,0x932C,0x5442,0x9B6F,0x6AD3,0x7089,0x8CC2,/* 0x40-0x47 */ + 0x8DEF,0x9732,0x52B4,0x5A41,0x5ECA,0x5F04,0x6717,0x697C,/* 0x48-0x4F */ + 0x6994,0x6D6A,0x6F0F,0x7262,0x72FC,0x7BED,0x8001,0x807E,/* 0x50-0x57 */ + 0x874B,0x90CE,0x516D,0x9E93,0x7984,0x808B,0x9332,0x8AD6,/* 0x58-0x5F */ + 0x502D,0x548C,0x8A71,0x6B6A,0x8CC4,0x8107,0x60D1,0x67A0,/* 0x60-0x67 */ + 0x9DF2,0x4E99,0x4E98,0x9C10,0x8A6B,0x85C1,0x8568,0x6900,/* 0x68-0x6F */ + 0x6E7E,0x7897,0x8155,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5F0C,/* 0x98-0x9F */ + 0x4E10,0x4E15,0x4E2A,0x4E31,0x4E36,0x4E3C,0x4E3F,0x4E42,/* 0xA0-0xA7 */ + 0x4E56,0x4E58,0x4E82,0x4E85,0x8C6B,0x4E8A,0x8212,0x5F0D,/* 0xA8-0xAF */ + 0x4E8E,0x4E9E,0x4E9F,0x4EA0,0x4EA2,0x4EB0,0x4EB3,0x4EB6,/* 0xB0-0xB7 */ + 0x4ECE,0x4ECD,0x4EC4,0x4EC6,0x4EC2,0x4ED7,0x4EDE,0x4EED,/* 0xB8-0xBF */ + 0x4EDF,0x4EF7,0x4F09,0x4F5A,0x4F30,0x4F5B,0x4F5D,0x4F57,/* 0xC0-0xC7 */ + 0x4F47,0x4F76,0x4F88,0x4F8F,0x4F98,0x4F7B,0x4F69,0x4F70,/* 0xC8-0xCF */ + 0x4F91,0x4F6F,0x4F86,0x4F96,0x5118,0x4FD4,0x4FDF,0x4FCE,/* 0xD0-0xD7 */ + 0x4FD8,0x4FDB,0x4FD1,0x4FDA,0x4FD0,0x4FE4,0x4FE5,0x501A,/* 0xD8-0xDF */ + 0x5028,0x5014,0x502A,0x5025,0x5005,0x4F1C,0x4FF6,0x5021,/* 0xE0-0xE7 */ + 0x5029,0x502C,0x4FFE,0x4FEF,0x5011,0x5006,0x5043,0x5047,/* 0xE8-0xEF */ + 0x6703,0x5055,0x5050,0x5048,0x505A,0x5056,0x506C,0x5078,/* 0xF0-0xF7 */ + 0x5080,0x509A,0x5085,0x50B4,0x50B2,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_99[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x50C9,0x50CA,0x50B3,0x50C2,0x50D6,0x50DE,0x50E5,0x50ED,/* 0x40-0x47 */ + 0x50E3,0x50EE,0x50F9,0x50F5,0x5109,0x5101,0x5102,0x5116,/* 0x48-0x4F */ + 0x5115,0x5114,0x511A,0x5121,0x513A,0x5137,0x513C,0x513B,/* 0x50-0x57 */ + 0x513F,0x5140,0x5152,0x514C,0x5154,0x5162,0x7AF8,0x5169,/* 0x58-0x5F */ + 0x516A,0x516E,0x5180,0x5182,0x56D8,0x518C,0x5189,0x518F,/* 0x60-0x67 */ + 0x5191,0x5193,0x5195,0x5196,0x51A4,0x51A6,0x51A2,0x51A9,/* 0x68-0x6F */ + 0x51AA,0x51AB,0x51B3,0x51B1,0x51B2,0x51B0,0x51B5,0x51BD,/* 0x70-0x77 */ + 0x51C5,0x51C9,0x51DB,0x51E0,0x8655,0x51E9,0x51ED,0x0000,/* 0x78-0x7F */ + + 0x51F0,0x51F5,0x51FE,0x5204,0x520B,0x5214,0x520E,0x5227,/* 0x80-0x87 */ + 0x522A,0x522E,0x5233,0x5239,0x524F,0x5244,0x524B,0x524C,/* 0x88-0x8F */ + 0x525E,0x5254,0x526A,0x5274,0x5269,0x5273,0x527F,0x527D,/* 0x90-0x97 */ + 0x528D,0x5294,0x5292,0x5271,0x5288,0x5291,0x8FA8,0x8FA7,/* 0x98-0x9F */ + 0x52AC,0x52AD,0x52BC,0x52B5,0x52C1,0x52CD,0x52D7,0x52DE,/* 0xA0-0xA7 */ + 0x52E3,0x52E6,0x98ED,0x52E0,0x52F3,0x52F5,0x52F8,0x52F9,/* 0xA8-0xAF */ + 0x5306,0x5308,0x7538,0x530D,0x5310,0x530F,0x5315,0x531A,/* 0xB0-0xB7 */ + 0x5323,0x532F,0x5331,0x5333,0x5338,0x5340,0x5346,0x5345,/* 0xB8-0xBF */ + 0x4E17,0x5349,0x534D,0x51D6,0x535E,0x5369,0x536E,0x5918,/* 0xC0-0xC7 */ + 0x537B,0x5377,0x5382,0x5396,0x53A0,0x53A6,0x53A5,0x53AE,/* 0xC8-0xCF */ + 0x53B0,0x53B6,0x53C3,0x7C12,0x96D9,0x53DF,0x66FC,0x71EE,/* 0xD0-0xD7 */ + 0x53EE,0x53E8,0x53ED,0x53FA,0x5401,0x543D,0x5440,0x542C,/* 0xD8-0xDF */ + 0x542D,0x543C,0x542E,0x5436,0x5429,0x541D,0x544E,0x548F,/* 0xE0-0xE7 */ + 0x5475,0x548E,0x545F,0x5471,0x5477,0x5470,0x5492,0x547B,/* 0xE8-0xEF */ + 0x5480,0x5476,0x5484,0x5490,0x5486,0x54C7,0x54A2,0x54B8,/* 0xF0-0xF7 */ + 0x54A5,0x54AC,0x54C4,0x54C8,0x54A8,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9A[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x54AB,0x54C2,0x54A4,0x54BE,0x54BC,0x54D8,0x54E5,0x54E6,/* 0x40-0x47 */ + 0x550F,0x5514,0x54FD,0x54EE,0x54ED,0x54FA,0x54E2,0x5539,/* 0x48-0x4F */ + 0x5540,0x5563,0x554C,0x552E,0x555C,0x5545,0x5556,0x5557,/* 0x50-0x57 */ + 0x5538,0x5533,0x555D,0x5599,0x5580,0x54AF,0x558A,0x559F,/* 0x58-0x5F */ + 0x557B,0x557E,0x5598,0x559E,0x55AE,0x557C,0x5583,0x55A9,/* 0x60-0x67 */ + 0x5587,0x55A8,0x55DA,0x55C5,0x55DF,0x55C4,0x55DC,0x55E4,/* 0x68-0x6F */ + 0x55D4,0x5614,0x55F7,0x5616,0x55FE,0x55FD,0x561B,0x55F9,/* 0x70-0x77 */ + 0x564E,0x5650,0x71DF,0x5634,0x5636,0x5632,0x5638,0x0000,/* 0x78-0x7F */ + + 0x566B,0x5664,0x562F,0x566C,0x566A,0x5686,0x5680,0x568A,/* 0x80-0x87 */ + 0x56A0,0x5694,0x568F,0x56A5,0x56AE,0x56B6,0x56B4,0x56C2,/* 0x88-0x8F */ + 0x56BC,0x56C1,0x56C3,0x56C0,0x56C8,0x56CE,0x56D1,0x56D3,/* 0x90-0x97 */ + 0x56D7,0x56EE,0x56F9,0x5700,0x56FF,0x5704,0x5709,0x5708,/* 0x98-0x9F */ + 0x570B,0x570D,0x5713,0x5718,0x5716,0x55C7,0x571C,0x5726,/* 0xA0-0xA7 */ + 0x5737,0x5738,0x574E,0x573B,0x5740,0x574F,0x5769,0x57C0,/* 0xA8-0xAF */ + 0x5788,0x5761,0x577F,0x5789,0x5793,0x57A0,0x57B3,0x57A4,/* 0xB0-0xB7 */ + 0x57AA,0x57B0,0x57C3,0x57C6,0x57D4,0x57D2,0x57D3,0x580A,/* 0xB8-0xBF */ + 0x57D6,0x57E3,0x580B,0x5819,0x581D,0x5872,0x5821,0x5862,/* 0xC0-0xC7 */ + 0x584B,0x5870,0x6BC0,0x5852,0x583D,0x5879,0x5885,0x58B9,/* 0xC8-0xCF */ + 0x589F,0x58AB,0x58BA,0x58DE,0x58BB,0x58B8,0x58AE,0x58C5,/* 0xD0-0xD7 */ + 0x58D3,0x58D1,0x58D7,0x58D9,0x58D8,0x58E5,0x58DC,0x58E4,/* 0xD8-0xDF */ + 0x58DF,0x58EF,0x58FA,0x58F9,0x58FB,0x58FC,0x58FD,0x5902,/* 0xE0-0xE7 */ + 0x590A,0x5910,0x591B,0x68A6,0x5925,0x592C,0x592D,0x5932,/* 0xE8-0xEF */ + 0x5938,0x593E,0x7AD2,0x5955,0x5950,0x594E,0x595A,0x5958,/* 0xF0-0xF7 */ + 0x5962,0x5960,0x5967,0x596C,0x5969,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9B[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5978,0x5981,0x599D,0x4F5E,0x4FAB,0x59A3,0x59B2,0x59C6,/* 0x40-0x47 */ + 0x59E8,0x59DC,0x598D,0x59D9,0x59DA,0x5A25,0x5A1F,0x5A11,/* 0x48-0x4F */ + 0x5A1C,0x5A09,0x5A1A,0x5A40,0x5A6C,0x5A49,0x5A35,0x5A36,/* 0x50-0x57 */ + 0x5A62,0x5A6A,0x5A9A,0x5ABC,0x5ABE,0x5ACB,0x5AC2,0x5ABD,/* 0x58-0x5F */ + 0x5AE3,0x5AD7,0x5AE6,0x5AE9,0x5AD6,0x5AFA,0x5AFB,0x5B0C,/* 0x60-0x67 */ + 0x5B0B,0x5B16,0x5B32,0x5AD0,0x5B2A,0x5B36,0x5B3E,0x5B43,/* 0x68-0x6F */ + 0x5B45,0x5B40,0x5B51,0x5B55,0x5B5A,0x5B5B,0x5B65,0x5B69,/* 0x70-0x77 */ + 0x5B70,0x5B73,0x5B75,0x5B78,0x6588,0x5B7A,0x5B80,0x0000,/* 0x78-0x7F */ + + 0x5B83,0x5BA6,0x5BB8,0x5BC3,0x5BC7,0x5BC9,0x5BD4,0x5BD0,/* 0x80-0x87 */ + 0x5BE4,0x5BE6,0x5BE2,0x5BDE,0x5BE5,0x5BEB,0x5BF0,0x5BF6,/* 0x88-0x8F */ + 0x5BF3,0x5C05,0x5C07,0x5C08,0x5C0D,0x5C13,0x5C20,0x5C22,/* 0x90-0x97 */ + 0x5C28,0x5C38,0x5C39,0x5C41,0x5C46,0x5C4E,0x5C53,0x5C50,/* 0x98-0x9F */ + 0x5C4F,0x5B71,0x5C6C,0x5C6E,0x4E62,0x5C76,0x5C79,0x5C8C,/* 0xA0-0xA7 */ + 0x5C91,0x5C94,0x599B,0x5CAB,0x5CBB,0x5CB6,0x5CBC,0x5CB7,/* 0xA8-0xAF */ + 0x5CC5,0x5CBE,0x5CC7,0x5CD9,0x5CE9,0x5CFD,0x5CFA,0x5CED,/* 0xB0-0xB7 */ + 0x5D8C,0x5CEA,0x5D0B,0x5D15,0x5D17,0x5D5C,0x5D1F,0x5D1B,/* 0xB8-0xBF */ + 0x5D11,0x5D14,0x5D22,0x5D1A,0x5D19,0x5D18,0x5D4C,0x5D52,/* 0xC0-0xC7 */ + 0x5D4E,0x5D4B,0x5D6C,0x5D73,0x5D76,0x5D87,0x5D84,0x5D82,/* 0xC8-0xCF */ + 0x5DA2,0x5D9D,0x5DAC,0x5DAE,0x5DBD,0x5D90,0x5DB7,0x5DBC,/* 0xD0-0xD7 */ + 0x5DC9,0x5DCD,0x5DD3,0x5DD2,0x5DD6,0x5DDB,0x5DEB,0x5DF2,/* 0xD8-0xDF */ + 0x5DF5,0x5E0B,0x5E1A,0x5E19,0x5E11,0x5E1B,0x5E36,0x5E37,/* 0xE0-0xE7 */ + 0x5E44,0x5E43,0x5E40,0x5E4E,0x5E57,0x5E54,0x5E5F,0x5E62,/* 0xE8-0xEF */ + 0x5E64,0x5E47,0x5E75,0x5E76,0x5E7A,0x9EBC,0x5E7F,0x5EA0,/* 0xF0-0xF7 */ + 0x5EC1,0x5EC2,0x5EC8,0x5ED0,0x5ECF,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9C[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5ED6,0x5EE3,0x5EDD,0x5EDA,0x5EDB,0x5EE2,0x5EE1,0x5EE8,/* 0x40-0x47 */ + 0x5EE9,0x5EEC,0x5EF1,0x5EF3,0x5EF0,0x5EF4,0x5EF8,0x5EFE,/* 0x48-0x4F */ + 0x5F03,0x5F09,0x5F5D,0x5F5C,0x5F0B,0x5F11,0x5F16,0x5F29,/* 0x50-0x57 */ + 0x5F2D,0x5F38,0x5F41,0x5F48,0x5F4C,0x5F4E,0x5F2F,0x5F51,/* 0x58-0x5F */ + 0x5F56,0x5F57,0x5F59,0x5F61,0x5F6D,0x5F73,0x5F77,0x5F83,/* 0x60-0x67 */ + 0x5F82,0x5F7F,0x5F8A,0x5F88,0x5F91,0x5F87,0x5F9E,0x5F99,/* 0x68-0x6F */ + 0x5F98,0x5FA0,0x5FA8,0x5FAD,0x5FBC,0x5FD6,0x5FFB,0x5FE4,/* 0x70-0x77 */ + 0x5FF8,0x5FF1,0x5FDD,0x60B3,0x5FFF,0x6021,0x6060,0x0000,/* 0x78-0x7F */ + + 0x6019,0x6010,0x6029,0x600E,0x6031,0x601B,0x6015,0x602B,/* 0x80-0x87 */ + 0x6026,0x600F,0x603A,0x605A,0x6041,0x606A,0x6077,0x605F,/* 0x88-0x8F */ + 0x604A,0x6046,0x604D,0x6063,0x6043,0x6064,0x6042,0x606C,/* 0x90-0x97 */ + 0x606B,0x6059,0x6081,0x608D,0x60E7,0x6083,0x609A,0x6084,/* 0x98-0x9F */ + 0x609B,0x6096,0x6097,0x6092,0x60A7,0x608B,0x60E1,0x60B8,/* 0xA0-0xA7 */ + 0x60E0,0x60D3,0x60B4,0x5FF0,0x60BD,0x60C6,0x60B5,0x60D8,/* 0xA8-0xAF */ + 0x614D,0x6115,0x6106,0x60F6,0x60F7,0x6100,0x60F4,0x60FA,/* 0xB0-0xB7 */ + 0x6103,0x6121,0x60FB,0x60F1,0x610D,0x610E,0x6147,0x613E,/* 0xB8-0xBF */ + 0x6128,0x6127,0x614A,0x613F,0x613C,0x612C,0x6134,0x613D,/* 0xC0-0xC7 */ + 0x6142,0x6144,0x6173,0x6177,0x6158,0x6159,0x615A,0x616B,/* 0xC8-0xCF */ + 0x6174,0x616F,0x6165,0x6171,0x615F,0x615D,0x6153,0x6175,/* 0xD0-0xD7 */ + 0x6199,0x6196,0x6187,0x61AC,0x6194,0x619A,0x618A,0x6191,/* 0xD8-0xDF */ + 0x61AB,0x61AE,0x61CC,0x61CA,0x61C9,0x61F7,0x61C8,0x61C3,/* 0xE0-0xE7 */ + 0x61C6,0x61BA,0x61CB,0x7F79,0x61CD,0x61E6,0x61E3,0x61F6,/* 0xE8-0xEF */ + 0x61FA,0x61F4,0x61FF,0x61FD,0x61FC,0x61FE,0x6200,0x6208,/* 0xF0-0xF7 */ + 0x6209,0x620D,0x620C,0x6214,0x621B,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9D[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x621E,0x6221,0x622A,0x622E,0x6230,0x6232,0x6233,0x6241,/* 0x40-0x47 */ + 0x624E,0x625E,0x6263,0x625B,0x6260,0x6268,0x627C,0x6282,/* 0x48-0x4F */ + 0x6289,0x627E,0x6292,0x6293,0x6296,0x62D4,0x6283,0x6294,/* 0x50-0x57 */ + 0x62D7,0x62D1,0x62BB,0x62CF,0x62FF,0x62C6,0x64D4,0x62C8,/* 0x58-0x5F */ + 0x62DC,0x62CC,0x62CA,0x62C2,0x62C7,0x629B,0x62C9,0x630C,/* 0x60-0x67 */ + 0x62EE,0x62F1,0x6327,0x6302,0x6308,0x62EF,0x62F5,0x6350,/* 0x68-0x6F */ + 0x633E,0x634D,0x641C,0x634F,0x6396,0x638E,0x6380,0x63AB,/* 0x70-0x77 */ + 0x6376,0x63A3,0x638F,0x6389,0x639F,0x63B5,0x636B,0x0000,/* 0x78-0x7F */ + + 0x6369,0x63BE,0x63E9,0x63C0,0x63C6,0x63E3,0x63C9,0x63D2,/* 0x80-0x87 */ + 0x63F6,0x63C4,0x6416,0x6434,0x6406,0x6413,0x6426,0x6436,/* 0x88-0x8F */ + 0x651D,0x6417,0x6428,0x640F,0x6467,0x646F,0x6476,0x644E,/* 0x90-0x97 */ + 0x652A,0x6495,0x6493,0x64A5,0x64A9,0x6488,0x64BC,0x64DA,/* 0x98-0x9F */ + 0x64D2,0x64C5,0x64C7,0x64BB,0x64D8,0x64C2,0x64F1,0x64E7,/* 0xA0-0xA7 */ + 0x8209,0x64E0,0x64E1,0x62AC,0x64E3,0x64EF,0x652C,0x64F6,/* 0xA8-0xAF */ + 0x64F4,0x64F2,0x64FA,0x6500,0x64FD,0x6518,0x651C,0x6505,/* 0xB0-0xB7 */ + 0x6524,0x6523,0x652B,0x6534,0x6535,0x6537,0x6536,0x6538,/* 0xB8-0xBF */ + 0x754B,0x6548,0x6556,0x6555,0x654D,0x6558,0x655E,0x655D,/* 0xC0-0xC7 */ + 0x6572,0x6578,0x6582,0x6583,0x8B8A,0x659B,0x659F,0x65AB,/* 0xC8-0xCF */ + 0x65B7,0x65C3,0x65C6,0x65C1,0x65C4,0x65CC,0x65D2,0x65DB,/* 0xD0-0xD7 */ + 0x65D9,0x65E0,0x65E1,0x65F1,0x6772,0x660A,0x6603,0x65FB,/* 0xD8-0xDF */ + 0x6773,0x6635,0x6636,0x6634,0x661C,0x664F,0x6644,0x6649,/* 0xE0-0xE7 */ + 0x6641,0x665E,0x665D,0x6664,0x6667,0x6668,0x665F,0x6662,/* 0xE8-0xEF */ + 0x6670,0x6683,0x6688,0x668E,0x6689,0x6684,0x6698,0x669D,/* 0xF0-0xF7 */ + 0x66C1,0x66B9,0x66C9,0x66BE,0x66BC,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9E[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x66C4,0x66B8,0x66D6,0x66DA,0x66E0,0x663F,0x66E6,0x66E9,/* 0x40-0x47 */ + 0x66F0,0x66F5,0x66F7,0x670F,0x6716,0x671E,0x6726,0x6727,/* 0x48-0x4F */ + 0x9738,0x672E,0x673F,0x6736,0x6741,0x6738,0x6737,0x6746,/* 0x50-0x57 */ + 0x675E,0x6760,0x6759,0x6763,0x6764,0x6789,0x6770,0x67A9,/* 0x58-0x5F */ + 0x677C,0x676A,0x678C,0x678B,0x67A6,0x67A1,0x6785,0x67B7,/* 0x60-0x67 */ + 0x67EF,0x67B4,0x67EC,0x67B3,0x67E9,0x67B8,0x67E4,0x67DE,/* 0x68-0x6F */ + 0x67DD,0x67E2,0x67EE,0x67B9,0x67CE,0x67C6,0x67E7,0x6A9C,/* 0x70-0x77 */ + 0x681E,0x6846,0x6829,0x6840,0x684D,0x6832,0x684E,0x0000,/* 0x78-0x7F */ + + 0x68B3,0x682B,0x6859,0x6863,0x6877,0x687F,0x689F,0x688F,/* 0x80-0x87 */ + 0x68AD,0x6894,0x689D,0x689B,0x6883,0x6AAE,0x68B9,0x6874,/* 0x88-0x8F */ + 0x68B5,0x68A0,0x68BA,0x690F,0x688D,0x687E,0x6901,0x68CA,/* 0x90-0x97 */ + 0x6908,0x68D8,0x6922,0x6926,0x68E1,0x690C,0x68CD,0x68D4,/* 0x98-0x9F */ + 0x68E7,0x68D5,0x6936,0x6912,0x6904,0x68D7,0x68E3,0x6925,/* 0xA0-0xA7 */ + 0x68F9,0x68E0,0x68EF,0x6928,0x692A,0x691A,0x6923,0x6921,/* 0xA8-0xAF */ + 0x68C6,0x6979,0x6977,0x695C,0x6978,0x696B,0x6954,0x697E,/* 0xB0-0xB7 */ + 0x696E,0x6939,0x6974,0x693D,0x6959,0x6930,0x6961,0x695E,/* 0xB8-0xBF */ + 0x695D,0x6981,0x696A,0x69B2,0x69AE,0x69D0,0x69BF,0x69C1,/* 0xC0-0xC7 */ + 0x69D3,0x69BE,0x69CE,0x5BE8,0x69CA,0x69DD,0x69BB,0x69C3,/* 0xC8-0xCF */ + 0x69A7,0x6A2E,0x6991,0x69A0,0x699C,0x6995,0x69B4,0x69DE,/* 0xD0-0xD7 */ + 0x69E8,0x6A02,0x6A1B,0x69FF,0x6B0A,0x69F9,0x69F2,0x69E7,/* 0xD8-0xDF */ + 0x6A05,0x69B1,0x6A1E,0x69ED,0x6A14,0x69EB,0x6A0A,0x6A12,/* 0xE0-0xE7 */ + 0x6AC1,0x6A23,0x6A13,0x6A44,0x6A0C,0x6A72,0x6A36,0x6A78,/* 0xE8-0xEF */ + 0x6A47,0x6A62,0x6A59,0x6A66,0x6A48,0x6A38,0x6A22,0x6A90,/* 0xF0-0xF7 */ + 0x6A8D,0x6AA0,0x6A84,0x6AA2,0x6AA3,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9F[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6A97,0x8617,0x6ABB,0x6AC3,0x6AC2,0x6AB8,0x6AB3,0x6AAC,/* 0x40-0x47 */ + 0x6ADE,0x6AD1,0x6ADF,0x6AAA,0x6ADA,0x6AEA,0x6AFB,0x6B05,/* 0x48-0x4F */ + 0x8616,0x6AFA,0x6B12,0x6B16,0x9B31,0x6B1F,0x6B38,0x6B37,/* 0x50-0x57 */ + 0x76DC,0x6B39,0x98EE,0x6B47,0x6B43,0x6B49,0x6B50,0x6B59,/* 0x58-0x5F */ + 0x6B54,0x6B5B,0x6B5F,0x6B61,0x6B78,0x6B79,0x6B7F,0x6B80,/* 0x60-0x67 */ + 0x6B84,0x6B83,0x6B8D,0x6B98,0x6B95,0x6B9E,0x6BA4,0x6BAA,/* 0x68-0x6F */ + 0x6BAB,0x6BAF,0x6BB2,0x6BB1,0x6BB3,0x6BB7,0x6BBC,0x6BC6,/* 0x70-0x77 */ + 0x6BCB,0x6BD3,0x6BDF,0x6BEC,0x6BEB,0x6BF3,0x6BEF,0x0000,/* 0x78-0x7F */ + + 0x9EBE,0x6C08,0x6C13,0x6C14,0x6C1B,0x6C24,0x6C23,0x6C5E,/* 0x80-0x87 */ + 0x6C55,0x6C62,0x6C6A,0x6C82,0x6C8D,0x6C9A,0x6C81,0x6C9B,/* 0x88-0x8F */ + 0x6C7E,0x6C68,0x6C73,0x6C92,0x6C90,0x6CC4,0x6CF1,0x6CD3,/* 0x90-0x97 */ + 0x6CBD,0x6CD7,0x6CC5,0x6CDD,0x6CAE,0x6CB1,0x6CBE,0x6CBA,/* 0x98-0x9F */ + 0x6CDB,0x6CEF,0x6CD9,0x6CEA,0x6D1F,0x884D,0x6D36,0x6D2B,/* 0xA0-0xA7 */ + 0x6D3D,0x6D38,0x6D19,0x6D35,0x6D33,0x6D12,0x6D0C,0x6D63,/* 0xA8-0xAF */ + 0x6D93,0x6D64,0x6D5A,0x6D79,0x6D59,0x6D8E,0x6D95,0x6FE4,/* 0xB0-0xB7 */ + 0x6D85,0x6DF9,0x6E15,0x6E0A,0x6DB5,0x6DC7,0x6DE6,0x6DB8,/* 0xB8-0xBF */ + 0x6DC6,0x6DEC,0x6DDE,0x6DCC,0x6DE8,0x6DD2,0x6DC5,0x6DFA,/* 0xC0-0xC7 */ + 0x6DD9,0x6DE4,0x6DD5,0x6DEA,0x6DEE,0x6E2D,0x6E6E,0x6E2E,/* 0xC8-0xCF */ + 0x6E19,0x6E72,0x6E5F,0x6E3E,0x6E23,0x6E6B,0x6E2B,0x6E76,/* 0xD0-0xD7 */ + 0x6E4D,0x6E1F,0x6E43,0x6E3A,0x6E4E,0x6E24,0x6EFF,0x6E1D,/* 0xD8-0xDF */ + 0x6E38,0x6E82,0x6EAA,0x6E98,0x6EC9,0x6EB7,0x6ED3,0x6EBD,/* 0xE0-0xE7 */ + 0x6EAF,0x6EC4,0x6EB2,0x6ED4,0x6ED5,0x6E8F,0x6EA5,0x6EC2,/* 0xE8-0xEF */ + 0x6E9F,0x6F41,0x6F11,0x704C,0x6EEC,0x6EF8,0x6EFE,0x6F3F,/* 0xF0-0xF7 */ + 0x6EF2,0x6F31,0x6EEF,0x6F32,0x6ECC,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6F3E,0x6F13,0x6EF7,0x6F86,0x6F7A,0x6F78,0x6F81,0x6F80,/* 0x40-0x47 */ + 0x6F6F,0x6F5B,0x6FF3,0x6F6D,0x6F82,0x6F7C,0x6F58,0x6F8E,/* 0x48-0x4F */ + 0x6F91,0x6FC2,0x6F66,0x6FB3,0x6FA3,0x6FA1,0x6FA4,0x6FB9,/* 0x50-0x57 */ + 0x6FC6,0x6FAA,0x6FDF,0x6FD5,0x6FEC,0x6FD4,0x6FD8,0x6FF1,/* 0x58-0x5F */ + 0x6FEE,0x6FDB,0x7009,0x700B,0x6FFA,0x7011,0x7001,0x700F,/* 0x60-0x67 */ + 0x6FFE,0x701B,0x701A,0x6F74,0x701D,0x7018,0x701F,0x7030,/* 0x68-0x6F */ + 0x703E,0x7032,0x7051,0x7063,0x7099,0x7092,0x70AF,0x70F1,/* 0x70-0x77 */ + 0x70AC,0x70B8,0x70B3,0x70AE,0x70DF,0x70CB,0x70DD,0x0000,/* 0x78-0x7F */ + + 0x70D9,0x7109,0x70FD,0x711C,0x7119,0x7165,0x7155,0x7188,/* 0x80-0x87 */ + 0x7166,0x7162,0x714C,0x7156,0x716C,0x718F,0x71FB,0x7184,/* 0x88-0x8F */ + 0x7195,0x71A8,0x71AC,0x71D7,0x71B9,0x71BE,0x71D2,0x71C9,/* 0x90-0x97 */ + 0x71D4,0x71CE,0x71E0,0x71EC,0x71E7,0x71F5,0x71FC,0x71F9,/* 0x98-0x9F */ + 0x71FF,0x720D,0x7210,0x721B,0x7228,0x722D,0x722C,0x7230,/* 0xA0-0xA7 */ + 0x7232,0x723B,0x723C,0x723F,0x7240,0x7246,0x724B,0x7258,/* 0xA8-0xAF */ + 0x7274,0x727E,0x7282,0x7281,0x7287,0x7292,0x7296,0x72A2,/* 0xB0-0xB7 */ + 0x72A7,0x72B9,0x72B2,0x72C3,0x72C6,0x72C4,0x72CE,0x72D2,/* 0xB8-0xBF */ + 0x72E2,0x72E0,0x72E1,0x72F9,0x72F7,0x500F,0x7317,0x730A,/* 0xC0-0xC7 */ + 0x731C,0x7316,0x731D,0x7334,0x732F,0x7329,0x7325,0x733E,/* 0xC8-0xCF */ + 0x734E,0x734F,0x9ED8,0x7357,0x736A,0x7368,0x7370,0x7378,/* 0xD0-0xD7 */ + 0x7375,0x737B,0x737A,0x73C8,0x73B3,0x73CE,0x73BB,0x73C0,/* 0xD8-0xDF */ + 0x73E5,0x73EE,0x73DE,0x74A2,0x7405,0x746F,0x7425,0x73F8,/* 0xE0-0xE7 */ + 0x7432,0x743A,0x7455,0x743F,0x745F,0x7459,0x7441,0x745C,/* 0xE8-0xEF */ + 0x7469,0x7470,0x7463,0x746A,0x7476,0x747E,0x748B,0x749E,/* 0xF0-0xF7 */ + 0x74A7,0x74CA,0x74CF,0x74D4,0x73F1,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x74E0,0x74E3,0x74E7,0x74E9,0x74EE,0x74F2,0x74F0,0x74F1,/* 0x40-0x47 */ + 0x74F8,0x74F7,0x7504,0x7503,0x7505,0x750C,0x750E,0x750D,/* 0x48-0x4F */ + 0x7515,0x7513,0x751E,0x7526,0x752C,0x753C,0x7544,0x754D,/* 0x50-0x57 */ + 0x754A,0x7549,0x755B,0x7546,0x755A,0x7569,0x7564,0x7567,/* 0x58-0x5F */ + 0x756B,0x756D,0x7578,0x7576,0x7586,0x7587,0x7574,0x758A,/* 0x60-0x67 */ + 0x7589,0x7582,0x7594,0x759A,0x759D,0x75A5,0x75A3,0x75C2,/* 0x68-0x6F */ + 0x75B3,0x75C3,0x75B5,0x75BD,0x75B8,0x75BC,0x75B1,0x75CD,/* 0x70-0x77 */ + 0x75CA,0x75D2,0x75D9,0x75E3,0x75DE,0x75FE,0x75FF,0x0000,/* 0x78-0x7F */ + + 0x75FC,0x7601,0x75F0,0x75FA,0x75F2,0x75F3,0x760B,0x760D,/* 0x80-0x87 */ + 0x7609,0x761F,0x7627,0x7620,0x7621,0x7622,0x7624,0x7634,/* 0x88-0x8F */ + 0x7630,0x763B,0x7647,0x7648,0x7646,0x765C,0x7658,0x7661,/* 0x90-0x97 */ + 0x7662,0x7668,0x7669,0x766A,0x7667,0x766C,0x7670,0x7672,/* 0x98-0x9F */ + 0x7676,0x7678,0x767C,0x7680,0x7683,0x7688,0x768B,0x768E,/* 0xA0-0xA7 */ + 0x7696,0x7693,0x7699,0x769A,0x76B0,0x76B4,0x76B8,0x76B9,/* 0xA8-0xAF */ + 0x76BA,0x76C2,0x76CD,0x76D6,0x76D2,0x76DE,0x76E1,0x76E5,/* 0xB0-0xB7 */ + 0x76E7,0x76EA,0x862F,0x76FB,0x7708,0x7707,0x7704,0x7729,/* 0xB8-0xBF */ + 0x7724,0x771E,0x7725,0x7726,0x771B,0x7737,0x7738,0x7747,/* 0xC0-0xC7 */ + 0x775A,0x7768,0x776B,0x775B,0x7765,0x777F,0x777E,0x7779,/* 0xC8-0xCF */ + 0x778E,0x778B,0x7791,0x77A0,0x779E,0x77B0,0x77B6,0x77B9,/* 0xD0-0xD7 */ + 0x77BF,0x77BC,0x77BD,0x77BB,0x77C7,0x77CD,0x77D7,0x77DA,/* 0xD8-0xDF */ + 0x77DC,0x77E3,0x77EE,0x77FC,0x780C,0x7812,0x7926,0x7820,/* 0xE0-0xE7 */ + 0x792A,0x7845,0x788E,0x7874,0x7886,0x787C,0x789A,0x788C,/* 0xE8-0xEF */ + 0x78A3,0x78B5,0x78AA,0x78AF,0x78D1,0x78C6,0x78CB,0x78D4,/* 0xF0-0xF7 */ + 0x78BE,0x78BC,0x78C5,0x78CA,0x78EC,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x78E7,0x78DA,0x78FD,0x78F4,0x7907,0x7912,0x7911,0x7919,/* 0x40-0x47 */ + 0x792C,0x792B,0x7940,0x7960,0x7957,0x795F,0x795A,0x7955,/* 0x48-0x4F */ + 0x7953,0x797A,0x797F,0x798A,0x799D,0x79A7,0x9F4B,0x79AA,/* 0x50-0x57 */ + 0x79AE,0x79B3,0x79B9,0x79BA,0x79C9,0x79D5,0x79E7,0x79EC,/* 0x58-0x5F */ + 0x79E1,0x79E3,0x7A08,0x7A0D,0x7A18,0x7A19,0x7A20,0x7A1F,/* 0x60-0x67 */ + 0x7980,0x7A31,0x7A3B,0x7A3E,0x7A37,0x7A43,0x7A57,0x7A49,/* 0x68-0x6F */ + 0x7A61,0x7A62,0x7A69,0x9F9D,0x7A70,0x7A79,0x7A7D,0x7A88,/* 0x70-0x77 */ + 0x7A97,0x7A95,0x7A98,0x7A96,0x7AA9,0x7AC8,0x7AB0,0x0000,/* 0x78-0x7F */ + + 0x7AB6,0x7AC5,0x7AC4,0x7ABF,0x9083,0x7AC7,0x7ACA,0x7ACD,/* 0x80-0x87 */ + 0x7ACF,0x7AD5,0x7AD3,0x7AD9,0x7ADA,0x7ADD,0x7AE1,0x7AE2,/* 0x88-0x8F */ + 0x7AE6,0x7AED,0x7AF0,0x7B02,0x7B0F,0x7B0A,0x7B06,0x7B33,/* 0x90-0x97 */ + 0x7B18,0x7B19,0x7B1E,0x7B35,0x7B28,0x7B36,0x7B50,0x7B7A,/* 0x98-0x9F */ + 0x7B04,0x7B4D,0x7B0B,0x7B4C,0x7B45,0x7B75,0x7B65,0x7B74,/* 0xA0-0xA7 */ + 0x7B67,0x7B70,0x7B71,0x7B6C,0x7B6E,0x7B9D,0x7B98,0x7B9F,/* 0xA8-0xAF */ + 0x7B8D,0x7B9C,0x7B9A,0x7B8B,0x7B92,0x7B8F,0x7B5D,0x7B99,/* 0xB0-0xB7 */ + 0x7BCB,0x7BC1,0x7BCC,0x7BCF,0x7BB4,0x7BC6,0x7BDD,0x7BE9,/* 0xB8-0xBF */ + 0x7C11,0x7C14,0x7BE6,0x7BE5,0x7C60,0x7C00,0x7C07,0x7C13,/* 0xC0-0xC7 */ + 0x7BF3,0x7BF7,0x7C17,0x7C0D,0x7BF6,0x7C23,0x7C27,0x7C2A,/* 0xC8-0xCF */ + 0x7C1F,0x7C37,0x7C2B,0x7C3D,0x7C4C,0x7C43,0x7C54,0x7C4F,/* 0xD0-0xD7 */ + 0x7C40,0x7C50,0x7C58,0x7C5F,0x7C64,0x7C56,0x7C65,0x7C6C,/* 0xD8-0xDF */ + 0x7C75,0x7C83,0x7C90,0x7CA4,0x7CAD,0x7CA2,0x7CAB,0x7CA1,/* 0xE0-0xE7 */ + 0x7CA8,0x7CB3,0x7CB2,0x7CB1,0x7CAE,0x7CB9,0x7CBD,0x7CC0,/* 0xE8-0xEF */ + 0x7CC5,0x7CC2,0x7CD8,0x7CD2,0x7CDC,0x7CE2,0x9B3B,0x7CEF,/* 0xF0-0xF7 */ + 0x7CF2,0x7CF4,0x7CF6,0x7CFA,0x7D06,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7D02,0x7D1C,0x7D15,0x7D0A,0x7D45,0x7D4B,0x7D2E,0x7D32,/* 0x40-0x47 */ + 0x7D3F,0x7D35,0x7D46,0x7D73,0x7D56,0x7D4E,0x7D72,0x7D68,/* 0x48-0x4F */ + 0x7D6E,0x7D4F,0x7D63,0x7D93,0x7D89,0x7D5B,0x7D8F,0x7D7D,/* 0x50-0x57 */ + 0x7D9B,0x7DBA,0x7DAE,0x7DA3,0x7DB5,0x7DC7,0x7DBD,0x7DAB,/* 0x58-0x5F */ + 0x7E3D,0x7DA2,0x7DAF,0x7DDC,0x7DB8,0x7D9F,0x7DB0,0x7DD8,/* 0x60-0x67 */ + 0x7DDD,0x7DE4,0x7DDE,0x7DFB,0x7DF2,0x7DE1,0x7E05,0x7E0A,/* 0x68-0x6F */ + 0x7E23,0x7E21,0x7E12,0x7E31,0x7E1F,0x7E09,0x7E0B,0x7E22,/* 0x70-0x77 */ + 0x7E46,0x7E66,0x7E3B,0x7E35,0x7E39,0x7E43,0x7E37,0x0000,/* 0x78-0x7F */ + + 0x7E32,0x7E3A,0x7E67,0x7E5D,0x7E56,0x7E5E,0x7E59,0x7E5A,/* 0x80-0x87 */ + 0x7E79,0x7E6A,0x7E69,0x7E7C,0x7E7B,0x7E83,0x7DD5,0x7E7D,/* 0x88-0x8F */ + 0x8FAE,0x7E7F,0x7E88,0x7E89,0x7E8C,0x7E92,0x7E90,0x7E93,/* 0x90-0x97 */ + 0x7E94,0x7E96,0x7E8E,0x7E9B,0x7E9C,0x7F38,0x7F3A,0x7F45,/* 0x98-0x9F */ + 0x7F4C,0x7F4D,0x7F4E,0x7F50,0x7F51,0x7F55,0x7F54,0x7F58,/* 0xA0-0xA7 */ + 0x7F5F,0x7F60,0x7F68,0x7F69,0x7F67,0x7F78,0x7F82,0x7F86,/* 0xA8-0xAF */ + 0x7F83,0x7F88,0x7F87,0x7F8C,0x7F94,0x7F9E,0x7F9D,0x7F9A,/* 0xB0-0xB7 */ + 0x7FA3,0x7FAF,0x7FB2,0x7FB9,0x7FAE,0x7FB6,0x7FB8,0x8B71,/* 0xB8-0xBF */ + 0x7FC5,0x7FC6,0x7FCA,0x7FD5,0x7FD4,0x7FE1,0x7FE6,0x7FE9,/* 0xC0-0xC7 */ + 0x7FF3,0x7FF9,0x98DC,0x8006,0x8004,0x800B,0x8012,0x8018,/* 0xC8-0xCF */ + 0x8019,0x801C,0x8021,0x8028,0x803F,0x803B,0x804A,0x8046,/* 0xD0-0xD7 */ + 0x8052,0x8058,0x805A,0x805F,0x8062,0x8068,0x8073,0x8072,/* 0xD8-0xDF */ + 0x8070,0x8076,0x8079,0x807D,0x807F,0x8084,0x8086,0x8085,/* 0xE0-0xE7 */ + 0x809B,0x8093,0x809A,0x80AD,0x5190,0x80AC,0x80DB,0x80E5,/* 0xE8-0xEF */ + 0x80D9,0x80DD,0x80C4,0x80DA,0x80D6,0x8109,0x80EF,0x80F1,/* 0xF0-0xF7 */ + 0x811B,0x8129,0x8123,0x812F,0x814B,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x968B,0x8146,0x813E,0x8153,0x8151,0x80FC,0x8171,0x816E,/* 0x40-0x47 */ + 0x8165,0x8166,0x8174,0x8183,0x8188,0x818A,0x8180,0x8182,/* 0x48-0x4F */ + 0x81A0,0x8195,0x81A4,0x81A3,0x815F,0x8193,0x81A9,0x81B0,/* 0x50-0x57 */ + 0x81B5,0x81BE,0x81B8,0x81BD,0x81C0,0x81C2,0x81BA,0x81C9,/* 0x58-0x5F */ + 0x81CD,0x81D1,0x81D9,0x81D8,0x81C8,0x81DA,0x81DF,0x81E0,/* 0x60-0x67 */ + 0x81E7,0x81FA,0x81FB,0x81FE,0x8201,0x8202,0x8205,0x8207,/* 0x68-0x6F */ + 0x820A,0x820D,0x8210,0x8216,0x8229,0x822B,0x8238,0x8233,/* 0x70-0x77 */ + 0x8240,0x8259,0x8258,0x825D,0x825A,0x825F,0x8264,0x0000,/* 0x78-0x7F */ + + 0x8262,0x8268,0x826A,0x826B,0x822E,0x8271,0x8277,0x8278,/* 0x80-0x87 */ + 0x827E,0x828D,0x8292,0x82AB,0x829F,0x82BB,0x82AC,0x82E1,/* 0x88-0x8F */ + 0x82E3,0x82DF,0x82D2,0x82F4,0x82F3,0x82FA,0x8393,0x8303,/* 0x90-0x97 */ + 0x82FB,0x82F9,0x82DE,0x8306,0x82DC,0x8309,0x82D9,0x8335,/* 0x98-0x9F */ + 0x8334,0x8316,0x8332,0x8331,0x8340,0x8339,0x8350,0x8345,/* 0xA0-0xA7 */ + 0x832F,0x832B,0x8317,0x8318,0x8385,0x839A,0x83AA,0x839F,/* 0xA8-0xAF */ + 0x83A2,0x8396,0x8323,0x838E,0x8387,0x838A,0x837C,0x83B5,/* 0xB0-0xB7 */ + 0x8373,0x8375,0x83A0,0x8389,0x83A8,0x83F4,0x8413,0x83EB,/* 0xB8-0xBF */ + 0x83CE,0x83FD,0x8403,0x83D8,0x840B,0x83C1,0x83F7,0x8407,/* 0xC0-0xC7 */ + 0x83E0,0x83F2,0x840D,0x8422,0x8420,0x83BD,0x8438,0x8506,/* 0xC8-0xCF */ + 0x83FB,0x846D,0x842A,0x843C,0x855A,0x8484,0x8477,0x846B,/* 0xD0-0xD7 */ + 0x84AD,0x846E,0x8482,0x8469,0x8446,0x842C,0x846F,0x8479,/* 0xD8-0xDF */ + 0x8435,0x84CA,0x8462,0x84B9,0x84BF,0x849F,0x84D9,0x84CD,/* 0xE0-0xE7 */ + 0x84BB,0x84DA,0x84D0,0x84C1,0x84C6,0x84D6,0x84A1,0x8521,/* 0xE8-0xEF */ + 0x84FF,0x84F4,0x8517,0x8518,0x852C,0x851F,0x8515,0x8514,/* 0xF0-0xF7 */ + 0x84FC,0x8540,0x8563,0x8558,0x8548,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8541,0x8602,0x854B,0x8555,0x8580,0x85A4,0x8588,0x8591,/* 0x40-0x47 */ + 0x858A,0x85A8,0x856D,0x8594,0x859B,0x85EA,0x8587,0x859C,/* 0x48-0x4F */ + 0x8577,0x857E,0x8590,0x85C9,0x85BA,0x85CF,0x85B9,0x85D0,/* 0x50-0x57 */ + 0x85D5,0x85DD,0x85E5,0x85DC,0x85F9,0x860A,0x8613,0x860B,/* 0x58-0x5F */ + 0x85FE,0x85FA,0x8606,0x8622,0x861A,0x8630,0x863F,0x864D,/* 0x60-0x67 */ + 0x4E55,0x8654,0x865F,0x8667,0x8671,0x8693,0x86A3,0x86A9,/* 0x68-0x6F */ + 0x86AA,0x868B,0x868C,0x86B6,0x86AF,0x86C4,0x86C6,0x86B0,/* 0x70-0x77 */ + 0x86C9,0x8823,0x86AB,0x86D4,0x86DE,0x86E9,0x86EC,0x0000,/* 0x78-0x7F */ + + 0x86DF,0x86DB,0x86EF,0x8712,0x8706,0x8708,0x8700,0x8703,/* 0x80-0x87 */ + 0x86FB,0x8711,0x8709,0x870D,0x86F9,0x870A,0x8734,0x873F,/* 0x88-0x8F */ + 0x8737,0x873B,0x8725,0x8729,0x871A,0x8760,0x875F,0x8778,/* 0x90-0x97 */ + 0x874C,0x874E,0x8774,0x8757,0x8768,0x876E,0x8759,0x8753,/* 0x98-0x9F */ + 0x8763,0x876A,0x8805,0x87A2,0x879F,0x8782,0x87AF,0x87CB,/* 0xA0-0xA7 */ + 0x87BD,0x87C0,0x87D0,0x96D6,0x87AB,0x87C4,0x87B3,0x87C7,/* 0xA8-0xAF */ + 0x87C6,0x87BB,0x87EF,0x87F2,0x87E0,0x880F,0x880D,0x87FE,/* 0xB0-0xB7 */ + 0x87F6,0x87F7,0x880E,0x87D2,0x8811,0x8816,0x8815,0x8822,/* 0xB8-0xBF */ + 0x8821,0x8831,0x8836,0x8839,0x8827,0x883B,0x8844,0x8842,/* 0xC0-0xC7 */ + 0x8852,0x8859,0x885E,0x8862,0x886B,0x8881,0x887E,0x889E,/* 0xC8-0xCF */ + 0x8875,0x887D,0x88B5,0x8872,0x8882,0x8897,0x8892,0x88AE,/* 0xD0-0xD7 */ + 0x8899,0x88A2,0x888D,0x88A4,0x88B0,0x88BF,0x88B1,0x88C3,/* 0xD8-0xDF */ + 0x88C4,0x88D4,0x88D8,0x88D9,0x88DD,0x88F9,0x8902,0x88FC,/* 0xE0-0xE7 */ + 0x88F4,0x88E8,0x88F2,0x8904,0x890C,0x890A,0x8913,0x8943,/* 0xE8-0xEF */ + 0x891E,0x8925,0x892A,0x892B,0x8941,0x8944,0x893B,0x8936,/* 0xF0-0xF7 */ + 0x8938,0x894C,0x891D,0x8960,0x895E,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8966,0x8964,0x896D,0x896A,0x896F,0x8974,0x8977,0x897E,/* 0x40-0x47 */ + 0x8983,0x8988,0x898A,0x8993,0x8998,0x89A1,0x89A9,0x89A6,/* 0x48-0x4F */ + 0x89AC,0x89AF,0x89B2,0x89BA,0x89BD,0x89BF,0x89C0,0x89DA,/* 0x50-0x57 */ + 0x89DC,0x89DD,0x89E7,0x89F4,0x89F8,0x8A03,0x8A16,0x8A10,/* 0x58-0x5F */ + 0x8A0C,0x8A1B,0x8A1D,0x8A25,0x8A36,0x8A41,0x8A5B,0x8A52,/* 0x60-0x67 */ + 0x8A46,0x8A48,0x8A7C,0x8A6D,0x8A6C,0x8A62,0x8A85,0x8A82,/* 0x68-0x6F */ + 0x8A84,0x8AA8,0x8AA1,0x8A91,0x8AA5,0x8AA6,0x8A9A,0x8AA3,/* 0x70-0x77 */ + 0x8AC4,0x8ACD,0x8AC2,0x8ADA,0x8AEB,0x8AF3,0x8AE7,0x0000,/* 0x78-0x7F */ + + 0x8AE4,0x8AF1,0x8B14,0x8AE0,0x8AE2,0x8AF7,0x8ADE,0x8ADB,/* 0x80-0x87 */ + 0x8B0C,0x8B07,0x8B1A,0x8AE1,0x8B16,0x8B10,0x8B17,0x8B20,/* 0x88-0x8F */ + 0x8B33,0x97AB,0x8B26,0x8B2B,0x8B3E,0x8B28,0x8B41,0x8B4C,/* 0x90-0x97 */ + 0x8B4F,0x8B4E,0x8B49,0x8B56,0x8B5B,0x8B5A,0x8B6B,0x8B5F,/* 0x98-0x9F */ + 0x8B6C,0x8B6F,0x8B74,0x8B7D,0x8B80,0x8B8C,0x8B8E,0x8B92,/* 0xA0-0xA7 */ + 0x8B93,0x8B96,0x8B99,0x8B9A,0x8C3A,0x8C41,0x8C3F,0x8C48,/* 0xA8-0xAF */ + 0x8C4C,0x8C4E,0x8C50,0x8C55,0x8C62,0x8C6C,0x8C78,0x8C7A,/* 0xB0-0xB7 */ + 0x8C82,0x8C89,0x8C85,0x8C8A,0x8C8D,0x8C8E,0x8C94,0x8C7C,/* 0xB8-0xBF */ + 0x8C98,0x621D,0x8CAD,0x8CAA,0x8CBD,0x8CB2,0x8CB3,0x8CAE,/* 0xC0-0xC7 */ + 0x8CB6,0x8CC8,0x8CC1,0x8CE4,0x8CE3,0x8CDA,0x8CFD,0x8CFA,/* 0xC8-0xCF */ + 0x8CFB,0x8D04,0x8D05,0x8D0A,0x8D07,0x8D0F,0x8D0D,0x8D10,/* 0xD0-0xD7 */ + 0x9F4E,0x8D13,0x8CCD,0x8D14,0x8D16,0x8D67,0x8D6D,0x8D71,/* 0xD8-0xDF */ + 0x8D73,0x8D81,0x8D99,0x8DC2,0x8DBE,0x8DBA,0x8DCF,0x8DDA,/* 0xE0-0xE7 */ + 0x8DD6,0x8DCC,0x8DDB,0x8DCB,0x8DEA,0x8DEB,0x8DDF,0x8DE3,/* 0xE8-0xEF */ + 0x8DFC,0x8E08,0x8E09,0x8DFF,0x8E1D,0x8E1E,0x8E10,0x8E1F,/* 0xF0-0xF7 */ + 0x8E42,0x8E35,0x8E30,0x8E34,0x8E4A,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8E47,0x8E49,0x8E4C,0x8E50,0x8E48,0x8E59,0x8E64,0x8E60,/* 0x40-0x47 */ + 0x8E2A,0x8E63,0x8E55,0x8E76,0x8E72,0x8E7C,0x8E81,0x8E87,/* 0x48-0x4F */ + 0x8E85,0x8E84,0x8E8B,0x8E8A,0x8E93,0x8E91,0x8E94,0x8E99,/* 0x50-0x57 */ + 0x8EAA,0x8EA1,0x8EAC,0x8EB0,0x8EC6,0x8EB1,0x8EBE,0x8EC5,/* 0x58-0x5F */ + 0x8EC8,0x8ECB,0x8EDB,0x8EE3,0x8EFC,0x8EFB,0x8EEB,0x8EFE,/* 0x60-0x67 */ + 0x8F0A,0x8F05,0x8F15,0x8F12,0x8F19,0x8F13,0x8F1C,0x8F1F,/* 0x68-0x6F */ + 0x8F1B,0x8F0C,0x8F26,0x8F33,0x8F3B,0x8F39,0x8F45,0x8F42,/* 0x70-0x77 */ + 0x8F3E,0x8F4C,0x8F49,0x8F46,0x8F4E,0x8F57,0x8F5C,0x0000,/* 0x78-0x7F */ + + 0x8F62,0x8F63,0x8F64,0x8F9C,0x8F9F,0x8FA3,0x8FAD,0x8FAF,/* 0x80-0x87 */ + 0x8FB7,0x8FDA,0x8FE5,0x8FE2,0x8FEA,0x8FEF,0x9087,0x8FF4,/* 0x88-0x8F */ + 0x9005,0x8FF9,0x8FFA,0x9011,0x9015,0x9021,0x900D,0x901E,/* 0x90-0x97 */ + 0x9016,0x900B,0x9027,0x9036,0x9035,0x9039,0x8FF8,0x904F,/* 0x98-0x9F */ + 0x9050,0x9051,0x9052,0x900E,0x9049,0x903E,0x9056,0x9058,/* 0xA0-0xA7 */ + 0x905E,0x9068,0x906F,0x9076,0x96A8,0x9072,0x9082,0x907D,/* 0xA8-0xAF */ + 0x9081,0x9080,0x908A,0x9089,0x908F,0x90A8,0x90AF,0x90B1,/* 0xB0-0xB7 */ + 0x90B5,0x90E2,0x90E4,0x6248,0x90DB,0x9102,0x9112,0x9119,/* 0xB8-0xBF */ + 0x9132,0x9130,0x914A,0x9156,0x9158,0x9163,0x9165,0x9169,/* 0xC0-0xC7 */ + 0x9173,0x9172,0x918B,0x9189,0x9182,0x91A2,0x91AB,0x91AF,/* 0xC8-0xCF */ + 0x91AA,0x91B5,0x91B4,0x91BA,0x91C0,0x91C1,0x91C9,0x91CB,/* 0xD0-0xD7 */ + 0x91D0,0x91D6,0x91DF,0x91E1,0x91DB,0x91FC,0x91F5,0x91F6,/* 0xD8-0xDF */ + 0x921E,0x91FF,0x9214,0x922C,0x9215,0x9211,0x925E,0x9257,/* 0xE0-0xE7 */ + 0x9245,0x9249,0x9264,0x9248,0x9295,0x923F,0x924B,0x9250,/* 0xE8-0xEF */ + 0x929C,0x9296,0x9293,0x929B,0x925A,0x92CF,0x92B9,0x92B7,/* 0xF0-0xF7 */ + 0x92E9,0x930F,0x92FA,0x9344,0x932E,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9319,0x9322,0x931A,0x9323,0x933A,0x9335,0x933B,0x935C,/* 0x40-0x47 */ + 0x9360,0x937C,0x936E,0x9356,0x93B0,0x93AC,0x93AD,0x9394,/* 0x48-0x4F */ + 0x93B9,0x93D6,0x93D7,0x93E8,0x93E5,0x93D8,0x93C3,0x93DD,/* 0x50-0x57 */ + 0x93D0,0x93C8,0x93E4,0x941A,0x9414,0x9413,0x9403,0x9407,/* 0x58-0x5F */ + 0x9410,0x9436,0x942B,0x9435,0x9421,0x943A,0x9441,0x9452,/* 0x60-0x67 */ + 0x9444,0x945B,0x9460,0x9462,0x945E,0x946A,0x9229,0x9470,/* 0x68-0x6F */ + 0x9475,0x9477,0x947D,0x945A,0x947C,0x947E,0x9481,0x947F,/* 0x70-0x77 */ + 0x9582,0x9587,0x958A,0x9594,0x9596,0x9598,0x9599,0x0000,/* 0x78-0x7F */ + + 0x95A0,0x95A8,0x95A7,0x95AD,0x95BC,0x95BB,0x95B9,0x95BE,/* 0x80-0x87 */ + 0x95CA,0x6FF6,0x95C3,0x95CD,0x95CC,0x95D5,0x95D4,0x95D6,/* 0x88-0x8F */ + 0x95DC,0x95E1,0x95E5,0x95E2,0x9621,0x9628,0x962E,0x962F,/* 0x90-0x97 */ + 0x9642,0x964C,0x964F,0x964B,0x9677,0x965C,0x965E,0x965D,/* 0x98-0x9F */ + 0x965F,0x9666,0x9672,0x966C,0x968D,0x9698,0x9695,0x9697,/* 0xA0-0xA7 */ + 0x96AA,0x96A7,0x96B1,0x96B2,0x96B0,0x96B4,0x96B6,0x96B8,/* 0xA8-0xAF */ + 0x96B9,0x96CE,0x96CB,0x96C9,0x96CD,0x894D,0x96DC,0x970D,/* 0xB0-0xB7 */ + 0x96D5,0x96F9,0x9704,0x9706,0x9708,0x9713,0x970E,0x9711,/* 0xB8-0xBF */ + 0x970F,0x9716,0x9719,0x9724,0x972A,0x9730,0x9739,0x973D,/* 0xC0-0xC7 */ + 0x973E,0x9744,0x9746,0x9748,0x9742,0x9749,0x975C,0x9760,/* 0xC8-0xCF */ + 0x9764,0x9766,0x9768,0x52D2,0x976B,0x9771,0x9779,0x9785,/* 0xD0-0xD7 */ + 0x977C,0x9781,0x977A,0x9786,0x978B,0x978F,0x9790,0x979C,/* 0xD8-0xDF */ + 0x97A8,0x97A6,0x97A3,0x97B3,0x97B4,0x97C3,0x97C6,0x97C8,/* 0xE0-0xE7 */ + 0x97CB,0x97DC,0x97ED,0x9F4F,0x97F2,0x7ADF,0x97F6,0x97F5,/* 0xE8-0xEF */ + 0x980F,0x980C,0x9838,0x9824,0x9821,0x9837,0x983D,0x9846,/* 0xF0-0xF7 */ + 0x984F,0x984B,0x986B,0x986F,0x9870,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9871,0x9874,0x9873,0x98AA,0x98AF,0x98B1,0x98B6,0x98C4,/* 0x40-0x47 */ + 0x98C3,0x98C6,0x98E9,0x98EB,0x9903,0x9909,0x9912,0x9914,/* 0x48-0x4F */ + 0x9918,0x9921,0x991D,0x991E,0x9924,0x9920,0x992C,0x992E,/* 0x50-0x57 */ + 0x993D,0x993E,0x9942,0x9949,0x9945,0x9950,0x994B,0x9951,/* 0x58-0x5F */ + 0x9952,0x994C,0x9955,0x9997,0x9998,0x99A5,0x99AD,0x99AE,/* 0x60-0x67 */ + 0x99BC,0x99DF,0x99DB,0x99DD,0x99D8,0x99D1,0x99ED,0x99EE,/* 0x68-0x6F */ + 0x99F1,0x99F2,0x99FB,0x99F8,0x9A01,0x9A0F,0x9A05,0x99E2,/* 0x70-0x77 */ + 0x9A19,0x9A2B,0x9A37,0x9A45,0x9A42,0x9A40,0x9A43,0x0000,/* 0x78-0x7F */ + + 0x9A3E,0x9A55,0x9A4D,0x9A5B,0x9A57,0x9A5F,0x9A62,0x9A65,/* 0x80-0x87 */ + 0x9A64,0x9A69,0x9A6B,0x9A6A,0x9AAD,0x9AB0,0x9ABC,0x9AC0,/* 0x88-0x8F */ + 0x9ACF,0x9AD1,0x9AD3,0x9AD4,0x9ADE,0x9ADF,0x9AE2,0x9AE3,/* 0x90-0x97 */ + 0x9AE6,0x9AEF,0x9AEB,0x9AEE,0x9AF4,0x9AF1,0x9AF7,0x9AFB,/* 0x98-0x9F */ + 0x9B06,0x9B18,0x9B1A,0x9B1F,0x9B22,0x9B23,0x9B25,0x9B27,/* 0xA0-0xA7 */ + 0x9B28,0x9B29,0x9B2A,0x9B2E,0x9B2F,0x9B32,0x9B44,0x9B43,/* 0xA8-0xAF */ + 0x9B4F,0x9B4D,0x9B4E,0x9B51,0x9B58,0x9B74,0x9B93,0x9B83,/* 0xB0-0xB7 */ + 0x9B91,0x9B96,0x9B97,0x9B9F,0x9BA0,0x9BA8,0x9BB4,0x9BC0,/* 0xB8-0xBF */ + 0x9BCA,0x9BB9,0x9BC6,0x9BCF,0x9BD1,0x9BD2,0x9BE3,0x9BE2,/* 0xC0-0xC7 */ + 0x9BE4,0x9BD4,0x9BE1,0x9C3A,0x9BF2,0x9BF1,0x9BF0,0x9C15,/* 0xC8-0xCF */ + 0x9C14,0x9C09,0x9C13,0x9C0C,0x9C06,0x9C08,0x9C12,0x9C0A,/* 0xD0-0xD7 */ + 0x9C04,0x9C2E,0x9C1B,0x9C25,0x9C24,0x9C21,0x9C30,0x9C47,/* 0xD8-0xDF */ + 0x9C32,0x9C46,0x9C3E,0x9C5A,0x9C60,0x9C67,0x9C76,0x9C78,/* 0xE0-0xE7 */ + 0x9CE7,0x9CEC,0x9CF0,0x9D09,0x9D08,0x9CEB,0x9D03,0x9D06,/* 0xE8-0xEF */ + 0x9D2A,0x9D26,0x9DAF,0x9D23,0x9D1F,0x9D44,0x9D15,0x9D12,/* 0xF0-0xF7 */ + 0x9D41,0x9D3F,0x9D3E,0x9D46,0x9D48,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9D5D,0x9D5E,0x9D64,0x9D51,0x9D50,0x9D59,0x9D72,0x9D89,/* 0x40-0x47 */ + 0x9D87,0x9DAB,0x9D6F,0x9D7A,0x9D9A,0x9DA4,0x9DA9,0x9DB2,/* 0x48-0x4F */ + 0x9DC4,0x9DC1,0x9DBB,0x9DB8,0x9DBA,0x9DC6,0x9DCF,0x9DC2,/* 0x50-0x57 */ + 0x9DD9,0x9DD3,0x9DF8,0x9DE6,0x9DED,0x9DEF,0x9DFD,0x9E1A,/* 0x58-0x5F */ + 0x9E1B,0x9E1E,0x9E75,0x9E79,0x9E7D,0x9E81,0x9E88,0x9E8B,/* 0x60-0x67 */ + 0x9E8C,0x9E92,0x9E95,0x9E91,0x9E9D,0x9EA5,0x9EA9,0x9EB8,/* 0x68-0x6F */ + 0x9EAA,0x9EAD,0x9761,0x9ECC,0x9ECE,0x9ECF,0x9ED0,0x9ED4,/* 0x70-0x77 */ + 0x9EDC,0x9EDE,0x9EDD,0x9EE0,0x9EE5,0x9EE8,0x9EEF,0x0000,/* 0x78-0x7F */ + + 0x9EF4,0x9EF6,0x9EF7,0x9EF9,0x9EFB,0x9EFC,0x9EFD,0x9F07,/* 0x80-0x87 */ + 0x9F08,0x76B7,0x9F15,0x9F21,0x9F2C,0x9F3E,0x9F4A,0x9F52,/* 0x88-0x8F */ + 0x9F54,0x9F63,0x9F5F,0x9F60,0x9F61,0x9F66,0x9F67,0x9F6C,/* 0x90-0x97 */ + 0x9F6A,0x9F77,0x9F72,0x9F76,0x9F95,0x9F9C,0x9FA0,0x582F,/* 0x98-0x9F */ + 0x69C7,0x9059,0x7464,0x51DC,0x7199,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA8-0xAF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB0-0xB7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB8-0xBF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC0-0xC7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC8-0xCF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD0-0xD7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD8-0xDF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE0-0xE7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE8-0xEF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_ED[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7E8A,0x891C,0x9348,0x9288,0x84DC,0x4FC9,0x70BB,0x6631,/* 0x40-0x47 */ + 0x68C8,0x92F9,0x66FB,0x5F45,0x4E28,0x4EE1,0x4EFC,0x4F00,/* 0x48-0x4F */ + 0x4F03,0x4F39,0x4F56,0x4F92,0x4F8A,0x4F9A,0x4F94,0x4FCD,/* 0x50-0x57 */ + 0x5040,0x5022,0x4FFF,0x501E,0x5046,0x5070,0x5042,0x5094,/* 0x58-0x5F */ + 0x50F4,0x50D8,0x514A,0x5164,0x519D,0x51BE,0x51EC,0x5215,/* 0x60-0x67 */ + 0x529C,0x52A6,0x52C0,0x52DB,0x5300,0x5307,0x5324,0x5372,/* 0x68-0x6F */ + 0x5393,0x53B2,0x53DD,0xFA0E,0x549C,0x548A,0x54A9,0x54FF,/* 0x70-0x77 */ + 0x5586,0x5759,0x5765,0x57AC,0x57C8,0x57C7,0xFA0F,0x0000,/* 0x78-0x7F */ + + 0xFA10,0x589E,0x58B2,0x590B,0x5953,0x595B,0x595D,0x5963,/* 0x80-0x87 */ + 0x59A4,0x59BA,0x5B56,0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,/* 0x88-0x8F */ + 0x5CA6,0x5CBA,0x5CF5,0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,/* 0x90-0x97 */ + 0x5DB8,0x5DB9,0x5DD0,0x5F21,0x5F34,0x5F67,0x5FB7,0x5FDE,/* 0x98-0x9F */ + 0x605D,0x6085,0x608A,0x60DE,0x60D5,0x6120,0x60F2,0x6111,/* 0xA0-0xA7 */ + 0x6137,0x6130,0x6198,0x6213,0x62A6,0x63F5,0x6460,0x649D,/* 0xA8-0xAF */ + 0x64CE,0x654E,0x6600,0x6615,0x663B,0x6609,0x662E,0x661E,/* 0xB0-0xB7 */ + 0x6624,0x6665,0x6657,0x6659,0xFA12,0x6673,0x6699,0x66A0,/* 0xB8-0xBF */ + 0x66B2,0x66BF,0x66FA,0x670E,0xF929,0x6766,0x67BB,0x6852,/* 0xC0-0xC7 */ + 0x67C0,0x6801,0x6844,0x68CF,0xFA13,0x6968,0xFA14,0x6998,/* 0xC8-0xCF */ + 0x69E2,0x6A30,0x6A6B,0x6A46,0x6A73,0x6A7E,0x6AE2,0x6AE4,/* 0xD0-0xD7 */ + 0x6BD6,0x6C3F,0x6C5C,0x6C86,0x6C6F,0x6CDA,0x6D04,0x6D87,/* 0xD8-0xDF */ + 0x6D6F,0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,0x6E39,/* 0xE0-0xE7 */ + 0x6E5C,0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,0x7005,/* 0xE8-0xEF */ + 0x7007,0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,0x7146,/* 0xF0-0xF7 */ + 0x7147,0xFA15,0x71C1,0x71FE,0x72B1,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x72BE,0x7324,0xFA16,0x7377,0x73BD,0x73C9,0x73D6,0x73E3,/* 0x40-0x47 */ + 0x73D2,0x7407,0x73F5,0x7426,0x742A,0x7429,0x742E,0x7462,/* 0x48-0x4F */ + 0x7489,0x749F,0x7501,0x756F,0x7682,0x769C,0x769E,0x769B,/* 0x50-0x57 */ + 0x76A6,0xFA17,0x7746,0x52AF,0x7821,0x784E,0x7864,0x787A,/* 0x58-0x5F */ + 0x7930,0xFA18,0xFA19,0xFA1A,0x7994,0xFA1B,0x799B,0x7AD1,/* 0x60-0x67 */ + 0x7AE7,0xFA1C,0x7AEB,0x7B9E,0xFA1D,0x7D48,0x7D5C,0x7DB7,/* 0x68-0x6F */ + 0x7DA0,0x7DD6,0x7E52,0x7F47,0x7FA1,0xFA1E,0x8301,0x8362,/* 0x70-0x77 */ + 0x837F,0x83C7,0x83F6,0x8448,0x84B4,0x8553,0x8559,0x0000,/* 0x78-0x7F */ + + 0x856B,0xFA1F,0x85B0,0xFA20,0xFA21,0x8807,0x88F5,0x8A12,/* 0x80-0x87 */ + 0x8A37,0x8A79,0x8AA7,0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,/* 0x88-0x8F */ + 0x8B7F,0x8CF0,0x8CF4,0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,/* 0x90-0x97 */ + 0xFA25,0x9067,0x90DE,0xFA26,0x9115,0x9127,0x91DA,0x91D7,/* 0x98-0x9F */ + 0x91DE,0x91ED,0x91EE,0x91E4,0x91E5,0x9206,0x9210,0x920A,/* 0xA0-0xA7 */ + 0x923A,0x9240,0x923C,0x924E,0x9259,0x9251,0x9239,0x9267,/* 0xA8-0xAF */ + 0x92A7,0x9277,0x9278,0x92E7,0x92D7,0x92D9,0x92D0,0xFA27,/* 0xB0-0xB7 */ + 0x92D5,0x92E0,0x92D3,0x9325,0x9321,0x92FB,0xFA28,0x931E,/* 0xB8-0xBF */ + 0x92FF,0x931D,0x9302,0x9370,0x9357,0x93A4,0x93C6,0x93DE,/* 0xC0-0xC7 */ + 0x93F8,0x9431,0x9445,0x9448,0x9592,0xF9DC,0xFA29,0x969D,/* 0xC8-0xCF */ + 0x96AF,0x9733,0x973B,0x9743,0x974D,0x974F,0x9751,0x9755,/* 0xD0-0xD7 */ + 0x9857,0x9865,0xFA2A,0xFA2B,0x9927,0xFA2C,0x999E,0x9A4E,/* 0xD8-0xDF */ + 0x9AD9,0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,0x9C00,/* 0xE0-0xE7 */ + 0x9D70,0x9D6B,0xFA2D,0x9E19,0x9ED1,0x0000,0x0000,0x2170,/* 0xE8-0xEF */ + 0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,0x2178,/* 0xF0-0xF7 */ + 0x2179,0xFFE2,0xFFE4,0xFF07,0xFF02,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177,/* 0x40-0x47 */ + 0x2178,0x2179,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,/* 0x48-0x4F */ + 0x2166,0x2167,0x2168,0x2169,0x0000,0xFFE4,0xFF07,0xFF02,/* 0x50-0x57 */ + 0x3231,0x2116,0x2121,0x2235,0x7E8A,0x891C,0x9348,0x9288,/* 0x58-0x5F */ + 0x84DC,0x4FC9,0x70BB,0x6631,0x68C8,0x92F9,0x66FB,0x5F45,/* 0x60-0x67 */ + 0x4E28,0x4EE1,0x4EFC,0x4F00,0x4F03,0x4F39,0x4F56,0x4F92,/* 0x68-0x6F */ + 0x4F8A,0x4F9A,0x4F94,0x4FCD,0x5040,0x5022,0x4FFF,0x501E,/* 0x70-0x77 */ + 0x5046,0x5070,0x5042,0x5094,0x50F4,0x50D8,0x514A,0x0000,/* 0x78-0x7F */ + + 0x5164,0x519D,0x51BE,0x51EC,0x5215,0x529C,0x52A6,0x52C0,/* 0x80-0x87 */ + 0x52DB,0x5300,0x5307,0x5324,0x5372,0x5393,0x53B2,0x53DD,/* 0x88-0x8F */ + 0xFA0E,0x549C,0x548A,0x54A9,0x54FF,0x5586,0x5759,0x5765,/* 0x90-0x97 */ + 0x57AC,0x57C8,0x57C7,0xFA0F,0xFA10,0x589E,0x58B2,0x590B,/* 0x98-0x9F */ + 0x5953,0x595B,0x595D,0x5963,0x59A4,0x59BA,0x5B56,0x5BC0,/* 0xA0-0xA7 */ + 0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6,0x5CBA,0x5CF5,0x5D27,/* 0xA8-0xAF */ + 0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8,0x5DB9,0x5DD0,0x5F21,/* 0xB0-0xB7 */ + 0x5F34,0x5F67,0x5FB7,0x5FDE,0x605D,0x6085,0x608A,0x60DE,/* 0xB8-0xBF */ + 0x60D5,0x6120,0x60F2,0x6111,0x6137,0x6130,0x6198,0x6213,/* 0xC0-0xC7 */ + 0x62A6,0x63F5,0x6460,0x649D,0x64CE,0x654E,0x6600,0x6615,/* 0xC8-0xCF */ + 0x663B,0x6609,0x662E,0x661E,0x6624,0x6665,0x6657,0x6659,/* 0xD0-0xD7 */ + 0xFA12,0x6673,0x6699,0x66A0,0x66B2,0x66BF,0x66FA,0x670E,/* 0xD8-0xDF */ + 0xF929,0x6766,0x67BB,0x6852,0x67C0,0x6801,0x6844,0x68CF,/* 0xE0-0xE7 */ + 0xFA13,0x6968,0xFA14,0x6998,0x69E2,0x6A30,0x6A6B,0x6A46,/* 0xE8-0xEF */ + 0x6A73,0x6A7E,0x6AE2,0x6AE4,0x6BD6,0x6C3F,0x6C5C,0x6C86,/* 0xF0-0xF7 */ + 0x6C6F,0x6CDA,0x6D04,0x6D87,0x6D6F,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,0x6E39,0x6E5C,/* 0x40-0x47 */ + 0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,0x7005,0x7007,/* 0x48-0x4F */ + 0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,0x7146,0x7147,/* 0x50-0x57 */ + 0xFA15,0x71C1,0x71FE,0x72B1,0x72BE,0x7324,0xFA16,0x7377,/* 0x58-0x5F */ + 0x73BD,0x73C9,0x73D6,0x73E3,0x73D2,0x7407,0x73F5,0x7426,/* 0x60-0x67 */ + 0x742A,0x7429,0x742E,0x7462,0x7489,0x749F,0x7501,0x756F,/* 0x68-0x6F */ + 0x7682,0x769C,0x769E,0x769B,0x76A6,0xFA17,0x7746,0x52AF,/* 0x70-0x77 */ + 0x7821,0x784E,0x7864,0x787A,0x7930,0xFA18,0xFA19,0x0000,/* 0x78-0x7F */ + + 0xFA1A,0x7994,0xFA1B,0x799B,0x7AD1,0x7AE7,0xFA1C,0x7AEB,/* 0x80-0x87 */ + 0x7B9E,0xFA1D,0x7D48,0x7D5C,0x7DB7,0x7DA0,0x7DD6,0x7E52,/* 0x88-0x8F */ + 0x7F47,0x7FA1,0xFA1E,0x8301,0x8362,0x837F,0x83C7,0x83F6,/* 0x90-0x97 */ + 0x8448,0x84B4,0x8553,0x8559,0x856B,0xFA1F,0x85B0,0xFA20,/* 0x98-0x9F */ + 0xFA21,0x8807,0x88F5,0x8A12,0x8A37,0x8A79,0x8AA7,0x8ABE,/* 0xA0-0xA7 */ + 0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F,0x8CF0,0x8CF4,0x8D12,/* 0xA8-0xAF */ + 0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25,0x9067,0x90DE,0xFA26,/* 0xB0-0xB7 */ + 0x9115,0x9127,0x91DA,0x91D7,0x91DE,0x91ED,0x91EE,0x91E4,/* 0xB8-0xBF */ + 0x91E5,0x9206,0x9210,0x920A,0x923A,0x9240,0x923C,0x924E,/* 0xC0-0xC7 */ + 0x9259,0x9251,0x9239,0x9267,0x92A7,0x9277,0x9278,0x92E7,/* 0xC8-0xCF */ + 0x92D7,0x92D9,0x92D0,0xFA27,0x92D5,0x92E0,0x92D3,0x9325,/* 0xD0-0xD7 */ + 0x9321,0x92FB,0xFA28,0x931E,0x92FF,0x931D,0x9302,0x9370,/* 0xD8-0xDF */ + 0x9357,0x93A4,0x93C6,0x93DE,0x93F8,0x9431,0x9445,0x9448,/* 0xE0-0xE7 */ + 0x9592,0xF9DC,0xFA29,0x969D,0x96AF,0x9733,0x973B,0x9743,/* 0xE8-0xEF */ + 0x974D,0x974F,0x9751,0x9755,0x9857,0x9865,0xFA2A,0xFA2B,/* 0xF0-0xF7 */ + 0x9927,0xFA2C,0x999E,0x9A4E,0x9AD9,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,0x9C00,0x9D70,/* 0x40-0x47 */ + 0x9D6B,0xFA2D,0x9E19,0x9ED1,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ +}; + +static wchar_t *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_81, c2u_82, c2u_83, c2u_84, NULL, NULL, c2u_87, + c2u_88, c2u_89, c2u_8A, c2u_8B, c2u_8C, c2u_8D, c2u_8E, c2u_8F, + c2u_90, c2u_91, c2u_92, c2u_93, c2u_94, c2u_95, c2u_96, c2u_97, + c2u_98, c2u_99, c2u_9A, c2u_9B, c2u_9C, c2u_9D, c2u_9E, c2u_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, NULL, NULL, c2u_ED, c2u_EE, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, c2u_FA, c2u_FB, c2u_FC, NULL, NULL, NULL, +}; + +static unsigned char u2c_03[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x83, 0x9F, 0x83, 0xA0, 0x83, 0xA1, /* 0x90-0x93 */ + 0x83, 0xA2, 0x83, 0xA3, 0x83, 0xA4, 0x83, 0xA5, /* 0x94-0x97 */ + 0x83, 0xA6, 0x83, 0xA7, 0x83, 0xA8, 0x83, 0xA9, /* 0x98-0x9B */ + 0x83, 0xAA, 0x83, 0xAB, 0x83, 0xAC, 0x83, 0xAD, /* 0x9C-0x9F */ + 0x83, 0xAE, 0x83, 0xAF, 0x00, 0x00, 0x83, 0xB0, /* 0xA0-0xA3 */ + 0x83, 0xB1, 0x83, 0xB2, 0x83, 0xB3, 0x83, 0xB4, /* 0xA4-0xA7 */ + 0x83, 0xB5, 0x83, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x83, 0xBF, 0x83, 0xC0, 0x83, 0xC1, /* 0xB0-0xB3 */ + 0x83, 0xC2, 0x83, 0xC3, 0x83, 0xC4, 0x83, 0xC5, /* 0xB4-0xB7 */ + 0x83, 0xC6, 0x83, 0xC7, 0x83, 0xC8, 0x83, 0xC9, /* 0xB8-0xBB */ + 0x83, 0xCA, 0x83, 0xCB, 0x83, 0xCC, 0x83, 0xCD, /* 0xBC-0xBF */ + 0x83, 0xCE, 0x83, 0xCF, 0x00, 0x00, 0x83, 0xD0, /* 0xC0-0xC3 */ + 0x83, 0xD1, 0x83, 0xD2, 0x83, 0xD3, 0x83, 0xD4, /* 0xC4-0xC7 */ + 0x83, 0xD5, 0x83, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ +}; + +static unsigned char u2c_04[512] = { + 0x00, 0x00, 0x84, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x84, 0x40, 0x84, 0x41, 0x84, 0x42, 0x84, 0x43, /* 0x10-0x13 */ + 0x84, 0x44, 0x84, 0x45, 0x84, 0x47, 0x84, 0x48, /* 0x14-0x17 */ + 0x84, 0x49, 0x84, 0x4A, 0x84, 0x4B, 0x84, 0x4C, /* 0x18-0x1B */ + 0x84, 0x4D, 0x84, 0x4E, 0x84, 0x4F, 0x84, 0x50, /* 0x1C-0x1F */ + 0x84, 0x51, 0x84, 0x52, 0x84, 0x53, 0x84, 0x54, /* 0x20-0x23 */ + 0x84, 0x55, 0x84, 0x56, 0x84, 0x57, 0x84, 0x58, /* 0x24-0x27 */ + 0x84, 0x59, 0x84, 0x5A, 0x84, 0x5B, 0x84, 0x5C, /* 0x28-0x2B */ + 0x84, 0x5D, 0x84, 0x5E, 0x84, 0x5F, 0x84, 0x60, /* 0x2C-0x2F */ + 0x84, 0x70, 0x84, 0x71, 0x84, 0x72, 0x84, 0x73, /* 0x30-0x33 */ + 0x84, 0x74, 0x84, 0x75, 0x84, 0x77, 0x84, 0x78, /* 0x34-0x37 */ + 0x84, 0x79, 0x84, 0x7A, 0x84, 0x7B, 0x84, 0x7C, /* 0x38-0x3B */ + 0x84, 0x7D, 0x84, 0x7E, 0x84, 0x80, 0x84, 0x81, /* 0x3C-0x3F */ + 0x84, 0x82, 0x84, 0x83, 0x84, 0x84, 0x84, 0x85, /* 0x40-0x43 */ + 0x84, 0x86, 0x84, 0x87, 0x84, 0x88, 0x84, 0x89, /* 0x44-0x47 */ + 0x84, 0x8A, 0x84, 0x8B, 0x84, 0x8C, 0x84, 0x8D, /* 0x48-0x4B */ + 0x84, 0x8E, 0x84, 0x8F, 0x84, 0x90, 0x84, 0x91, /* 0x4C-0x4F */ + 0x00, 0x00, 0x84, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ +}; + +static unsigned char u2c_20[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x81, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x81, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x81, 0x65, 0x81, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x81, 0x67, 0x81, 0x68, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x81, 0xF5, 0x81, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x81, 0x64, 0x81, 0x63, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x81, 0xF1, 0x00, 0x00, 0x81, 0x8C, 0x81, 0x8D, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xA6, /* 0x38-0x3B */ +}; + +static unsigned char u2c_21[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x8E, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0x59, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xFA, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xF0, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xFA, 0x4A, 0xFA, 0x4B, 0xFA, 0x4C, 0xFA, 0x4D, /* 0x60-0x63 */ + 0xFA, 0x4E, 0xFA, 0x4F, 0xFA, 0x50, 0xFA, 0x51, /* 0x64-0x67 */ + 0xFA, 0x52, 0xFA, 0x53, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xEE, 0xEF, 0xEE, 0xF0, 0xEE, 0xF1, 0xEE, 0xF2, /* 0x70-0x73 */ + 0xEE, 0xF3, 0xEE, 0xF4, 0xEE, 0xF5, 0xEE, 0xF6, /* 0x74-0x77 */ + 0xEE, 0xF7, 0xEE, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x81, 0xA9, 0x81, 0xAA, 0x81, 0xA8, 0x81, 0xAB, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0xCB, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x81, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ +}; + +static unsigned char u2c_22[512] = { + 0x81, 0xCD, 0x00, 0x00, 0x81, 0xDD, 0x81, 0xCE, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xDE, /* 0x04-0x07 */ + 0x81, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x81, 0xB9, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x87, 0x94, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x95, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x81, 0xE5, 0x81, 0x87, 0x87, 0x98, /* 0x1C-0x1F */ + 0x87, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x81, 0x61, 0x00, 0x00, 0x81, 0xC8, /* 0x24-0x27 */ + 0x81, 0xC9, 0x87, 0x9B, 0x87, 0x9C, 0x87, 0x92, /* 0x28-0x2B */ + 0x81, 0xE8, 0x00, 0x00, 0x87, 0x93, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x81, 0x88, 0xFA, 0x5B, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x81, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x90, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x81, 0x82, 0x87, 0x91, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0x85, 0x81, 0x86, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0xE1, 0x81, 0xE2, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x81, 0xBC, 0x81, 0xBD, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0xBA, 0x81, 0xBB, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x87, 0x96, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x99, /* 0xBC-0xBF */ +}; + +static unsigned char u2c_23[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0xDC, 0x00, 0x00, /* 0x10-0x13 */ +}; + +static unsigned char u2c_24[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x87, 0x40, 0x87, 0x41, 0x87, 0x42, 0x87, 0x43, /* 0x60-0x63 */ + 0x87, 0x44, 0x87, 0x45, 0x87, 0x46, 0x87, 0x47, /* 0x64-0x67 */ + 0x87, 0x48, 0x87, 0x49, 0x87, 0x4A, 0x87, 0x4B, /* 0x68-0x6B */ + 0x87, 0x4C, 0x87, 0x4D, 0x87, 0x4E, 0x87, 0x4F, /* 0x6C-0x6F */ + 0x87, 0x50, 0x87, 0x51, 0x87, 0x52, 0x87, 0x53, /* 0x70-0x73 */ +}; + +static unsigned char u2c_25[512] = { + 0x84, 0x9F, 0x84, 0xAA, 0x84, 0xA0, 0x84, 0xAB, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x84, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x84, 0xAC, /* 0x0C-0x0F */ + 0x84, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x84, 0xAD, /* 0x10-0x13 */ + 0x84, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x84, 0xAF, /* 0x14-0x17 */ + 0x84, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x84, 0xAE, /* 0x18-0x1B */ + 0x84, 0xA5, 0x84, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x84, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB0, /* 0x20-0x23 */ + 0x84, 0xA7, 0x84, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x84, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB2, /* 0x28-0x2B */ + 0x84, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB6, /* 0x2C-0x2F */ + 0x84, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB1, /* 0x30-0x33 */ + 0x84, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB8, /* 0x34-0x37 */ + 0x84, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB3, /* 0x38-0x3B */ + 0x84, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB9, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x84, 0xBE, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xB4, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x81, 0xA1, 0x81, 0xA0, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0xA3, 0x81, 0xA2, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x81, 0xA5, 0x81, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0x9F, 0x81, 0x9E, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x9B, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0x9D, 0x81, 0x9C, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFC, /* 0xEC-0xEF */ +}; + +static unsigned char u2c_26[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x81, 0x9A, 0x81, 0x99, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x81, 0x8A, 0x00, 0x00, 0x81, 0x89, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x81, 0xF4, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x81, 0xF3, 0x00, 0x00, 0x81, 0xF2, /* 0x6C-0x6F */ +}; + +static unsigned char u2c_30[512] = { + 0x81, 0x40, 0x81, 0x41, 0x81, 0x42, 0x81, 0x56, /* 0x00-0x03 */ + 0x00, 0x00, 0x81, 0x58, 0x81, 0x59, 0x81, 0x5A, /* 0x04-0x07 */ + 0x81, 0x71, 0x81, 0x72, 0x81, 0x73, 0x81, 0x74, /* 0x08-0x0B */ + 0x81, 0x75, 0x81, 0x76, 0x81, 0x77, 0x81, 0x78, /* 0x0C-0x0F */ + 0x81, 0x79, 0x81, 0x7A, 0x81, 0xA7, 0x81, 0xAC, /* 0x10-0x13 */ + 0x81, 0x6B, 0x81, 0x6C, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x87, 0x80, 0x00, 0x00, 0x87, 0x81, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x82, 0x9F, 0x82, 0xA0, 0x82, 0xA1, /* 0x40-0x43 */ + 0x82, 0xA2, 0x82, 0xA3, 0x82, 0xA4, 0x82, 0xA5, /* 0x44-0x47 */ + 0x82, 0xA6, 0x82, 0xA7, 0x82, 0xA8, 0x82, 0xA9, /* 0x48-0x4B */ + 0x82, 0xAA, 0x82, 0xAB, 0x82, 0xAC, 0x82, 0xAD, /* 0x4C-0x4F */ + 0x82, 0xAE, 0x82, 0xAF, 0x82, 0xB0, 0x82, 0xB1, /* 0x50-0x53 */ + 0x82, 0xB2, 0x82, 0xB3, 0x82, 0xB4, 0x82, 0xB5, /* 0x54-0x57 */ + 0x82, 0xB6, 0x82, 0xB7, 0x82, 0xB8, 0x82, 0xB9, /* 0x58-0x5B */ + 0x82, 0xBA, 0x82, 0xBB, 0x82, 0xBC, 0x82, 0xBD, /* 0x5C-0x5F */ + 0x82, 0xBE, 0x82, 0xBF, 0x82, 0xC0, 0x82, 0xC1, /* 0x60-0x63 */ + 0x82, 0xC2, 0x82, 0xC3, 0x82, 0xC4, 0x82, 0xC5, /* 0x64-0x67 */ + 0x82, 0xC6, 0x82, 0xC7, 0x82, 0xC8, 0x82, 0xC9, /* 0x68-0x6B */ + 0x82, 0xCA, 0x82, 0xCB, 0x82, 0xCC, 0x82, 0xCD, /* 0x6C-0x6F */ + 0x82, 0xCE, 0x82, 0xCF, 0x82, 0xD0, 0x82, 0xD1, /* 0x70-0x73 */ + 0x82, 0xD2, 0x82, 0xD3, 0x82, 0xD4, 0x82, 0xD5, /* 0x74-0x77 */ + 0x82, 0xD6, 0x82, 0xD7, 0x82, 0xD8, 0x82, 0xD9, /* 0x78-0x7B */ + 0x82, 0xDA, 0x82, 0xDB, 0x82, 0xDC, 0x82, 0xDD, /* 0x7C-0x7F */ + + 0x82, 0xDE, 0x82, 0xDF, 0x82, 0xE0, 0x82, 0xE1, /* 0x80-0x83 */ + 0x82, 0xE2, 0x82, 0xE3, 0x82, 0xE4, 0x82, 0xE5, /* 0x84-0x87 */ + 0x82, 0xE6, 0x82, 0xE7, 0x82, 0xE8, 0x82, 0xE9, /* 0x88-0x8B */ + 0x82, 0xEA, 0x82, 0xEB, 0x82, 0xEC, 0x82, 0xED, /* 0x8C-0x8F */ + 0x82, 0xEE, 0x82, 0xEF, 0x82, 0xF0, 0x82, 0xF1, /* 0x90-0x93 */ + 0x83, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x4A, /* 0x98-0x9B */ + 0x81, 0x4B, 0x81, 0x54, 0x81, 0x55, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x83, 0x40, 0x83, 0x41, 0x83, 0x42, /* 0xA0-0xA3 */ + 0x83, 0x43, 0x83, 0x44, 0x83, 0x45, 0x83, 0x46, /* 0xA4-0xA7 */ + 0x83, 0x47, 0x83, 0x48, 0x83, 0x49, 0x83, 0x4A, /* 0xA8-0xAB */ + 0x83, 0x4B, 0x83, 0x4C, 0x83, 0x4D, 0x83, 0x4E, /* 0xAC-0xAF */ + 0x83, 0x4F, 0x83, 0x50, 0x83, 0x51, 0x83, 0x52, /* 0xB0-0xB3 */ + 0x83, 0x53, 0x83, 0x54, 0x83, 0x55, 0x83, 0x56, /* 0xB4-0xB7 */ + 0x83, 0x57, 0x83, 0x58, 0x83, 0x59, 0x83, 0x5A, /* 0xB8-0xBB */ + 0x83, 0x5B, 0x83, 0x5C, 0x83, 0x5D, 0x83, 0x5E, /* 0xBC-0xBF */ + 0x83, 0x5F, 0x83, 0x60, 0x83, 0x61, 0x83, 0x62, /* 0xC0-0xC3 */ + 0x83, 0x63, 0x83, 0x64, 0x83, 0x65, 0x83, 0x66, /* 0xC4-0xC7 */ + 0x83, 0x67, 0x83, 0x68, 0x83, 0x69, 0x83, 0x6A, /* 0xC8-0xCB */ + 0x83, 0x6B, 0x83, 0x6C, 0x83, 0x6D, 0x83, 0x6E, /* 0xCC-0xCF */ + 0x83, 0x6F, 0x83, 0x70, 0x83, 0x71, 0x83, 0x72, /* 0xD0-0xD3 */ + 0x83, 0x73, 0x83, 0x74, 0x83, 0x75, 0x83, 0x76, /* 0xD4-0xD7 */ + 0x83, 0x77, 0x83, 0x78, 0x83, 0x79, 0x83, 0x7A, /* 0xD8-0xDB */ + 0x83, 0x7B, 0x83, 0x7C, 0x83, 0x7D, 0x83, 0x7E, /* 0xDC-0xDF */ + 0x83, 0x80, 0x83, 0x81, 0x83, 0x82, 0x83, 0x83, /* 0xE0-0xE3 */ + 0x83, 0x84, 0x83, 0x85, 0x83, 0x86, 0x83, 0x87, /* 0xE4-0xE7 */ + 0x83, 0x88, 0x83, 0x89, 0x83, 0x8A, 0x83, 0x8B, /* 0xE8-0xEB */ + 0x83, 0x8C, 0x83, 0x8D, 0x83, 0x8E, 0x83, 0x8F, /* 0xEC-0xEF */ + 0x83, 0x90, 0x83, 0x91, 0x83, 0x92, 0x83, 0x93, /* 0xF0-0xF3 */ + 0x83, 0x94, 0x83, 0x95, 0x83, 0x96, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x45, /* 0xF8-0xFB */ + 0x81, 0x5B, 0x81, 0x52, 0x81, 0x53, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_32[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xFA, 0x58, 0x87, 0x8B, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x87, 0x8C, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x87, 0x85, 0x87, 0x86, 0x87, 0x87, 0x87, 0x88, /* 0xA4-0xA7 */ + 0x87, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ +}; + +static unsigned char u2c_33[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x65, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x87, 0x69, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x87, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x87, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x61, 0x87, 0x6B, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x6A, 0x87, 0x64, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x6C, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x66, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x6E, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x87, 0x5F, 0x87, 0x6D, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x87, 0x62, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x87, 0x67, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x68, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x7E, /* 0x78-0x7B */ + 0x87, 0x8F, 0x87, 0x8E, 0x87, 0x8D, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x72, 0x87, 0x73, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x87, 0x6F, 0x87, 0x70, 0x87, 0x71, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x87, 0x75, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x87, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x87, 0x83, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ +}; + +static unsigned char u2c_4E[512] = { + 0x88, 0xEA, 0x92, 0x9A, 0x00, 0x00, 0x8E, 0xB5, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x9C, /* 0x04-0x07 */ + 0x8F, 0xE4, 0x8E, 0x4F, 0x8F, 0xE3, 0x89, 0xBA, /* 0x08-0x0B */ + 0x00, 0x00, 0x95, 0x73, 0x97, 0x5E, 0x00, 0x00, /* 0x0C-0x0F */ + 0x98, 0xA0, 0x89, 0x4E, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x8A, 0x8E, 0x98, 0xA1, 0x90, 0xA2, 0x99, 0xC0, /* 0x14-0x17 */ + 0x8B, 0x75, 0x95, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xE5, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x97, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xC0, 0x00, 0x00, /* 0x24-0x27 */ + 0xED, 0x4C, 0x00, 0x00, 0x98, 0xA2, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x92, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x98, 0xA3, 0x8B, 0xF8, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xA4, 0x00, 0x00, /* 0x34-0x37 */ + 0x8A, 0xDB, 0x92, 0x4F, 0x00, 0x00, 0x8E, 0xE5, /* 0x38-0x3B */ + 0x98, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x98, 0xA6, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xA7, 0x94, 0x54, /* 0x40-0x43 */ + 0x00, 0x00, 0x8B, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x56, /* 0x48-0x4B */ + 0x00, 0x00, 0x93, 0xE1, 0x8C, 0xC1, 0x96, 0x52, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE5, 0x68, 0x98, 0xA8, 0x8F, 0xE6, /* 0x54-0x57 */ + 0x98, 0xA9, 0x89, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x8B, 0xE3, 0x8C, 0xEE, 0x96, 0xE7, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xA4, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x97, 0x90, 0x00, 0x00, 0x93, 0xFB, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xA3, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x8B, 0x54, 0x00, 0x00, 0x98, 0xAA, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x98, 0xAB, 0x97, 0xB9, 0x00, 0x00, /* 0x84-0x87 */ + 0x97, 0x5C, 0x91, 0x88, 0x98, 0xAD, 0x8E, 0x96, /* 0x88-0x8B */ + 0x93, 0xF1, 0x00, 0x00, 0x98, 0xB0, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x89, 0x5D, 0x8C, 0xDD, 0x00, 0x00, /* 0x90-0x93 */ + 0x8C, 0xDC, 0x88, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x98, 0x6A, 0x98, 0x69, 0x00, 0x00, 0x8D, 0xB1, /* 0x98-0x9B */ + 0x88, 0x9F, 0x00, 0x00, 0x98, 0xB1, 0x98, 0xB2, /* 0x9C-0x9F */ + 0x98, 0xB3, 0x96, 0x53, 0x98, 0xB4, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x8C, 0xF0, 0x88, 0xE5, 0x96, 0x92, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x8B, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x9D, /* 0xA8-0xAB */ + 0x8B, 0x9E, 0x92, 0xE0, 0x97, 0xBA, 0x00, 0x00, /* 0xAC-0xAF */ + 0x98, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x98, 0xB6, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xB7, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x6C, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x8F, 0x59, 0x90, 0x6D, 0x98, 0xBC, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x98, 0xBA, 0x00, 0x00, 0x98, 0xBB, 0x8B, 0x77, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xA1, 0x89, 0xEE, /* 0xC8-0xCB */ + 0x00, 0x00, 0x98, 0xB9, 0x98, 0xB8, 0x95, 0xA7, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x8E, 0x65, 0x8E, 0x64, 0x91, 0xBC, 0x98, 0xBD, /* 0xD4-0xD7 */ + 0x95, 0x74, 0x90, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x81, 0x57, 0x98, 0xBE, 0x98, 0xC0, /* 0xDC-0xDF */ + 0x00, 0x00, 0xED, 0x4D, 0x00, 0x00, 0x91, 0xE3, /* 0xE0-0xE3 */ + 0x97, 0xDF, 0x88, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x98, 0xBF, 0x89, 0xBC, 0x00, 0x00, /* 0xEC-0xEF */ + 0x8B, 0xC2, 0x00, 0x00, 0x92, 0x87, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x8F, 0x98, 0xC1, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x43, /* 0xF8-0xFB */ + 0xED, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0xED, 0x4F, 0x8A, 0xE9, 0x00, 0x00, 0xED, 0x50, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x98, 0xC2, 0x88, 0xC9, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x8C, 0xDE, 0x8A, 0xEA, 0x95, 0x9A, /* 0x0C-0x0F */ + 0x94, 0xB0, 0x8B, 0x78, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xEF, 0x00, 0x00, /* 0x18-0x1B */ + 0x98, 0xE5, 0x93, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x8C, /* 0x2C-0x2F */ + 0x98, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x94, 0xBA, 0x00, 0x00, 0x97, 0xE0, 0x00, 0x00, /* 0x34-0x37 */ + 0x90, 0x4C, 0xED, 0x51, 0x8E, 0x66, 0x00, 0x00, /* 0x38-0x3B */ + 0x8E, 0x97, 0x89, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xCF, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x41, 0x98, 0xC8, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x88, 0xCA, 0x92, 0xE1, 0x8F, 0x5A, /* 0x4C-0x4F */ + 0x8D, 0xB2, 0x97, 0x43, 0x00, 0x00, 0x91, 0xCC, /* 0x50-0x53 */ + 0x00, 0x00, 0x89, 0xBD, 0xED, 0x52, 0x98, 0xC7, /* 0x54-0x57 */ + 0x00, 0x00, 0x97, 0x5D, 0x98, 0xC3, 0x98, 0xC5, /* 0x58-0x5B */ + 0x8D, 0xEC, 0x98, 0xC6, 0x9B, 0x43, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x98, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xD1, /* 0x6C-0x6F */ + 0x98, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x89, 0xC0, /* 0x70-0x73 */ + 0x00, 0x00, 0x95, 0xB9, 0x98, 0xC9, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xCD, /* 0x78-0x7B */ + 0x8C, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x67, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xA4, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xD2, 0x00, 0x00, /* 0x84-0x87 */ + 0x98, 0xCA, 0x00, 0x00, 0xED, 0x54, 0x97, 0xE1, /* 0x88-0x8B */ + 0x00, 0x00, 0x8E, 0x98, 0x00, 0x00, 0x98, 0xCB, /* 0x8C-0x8F */ + 0x00, 0x00, 0x98, 0xD0, 0xED, 0x53, 0x00, 0x00, /* 0x90-0x93 */ + 0xED, 0x56, 0x00, 0x00, 0x98, 0xD3, 0x00, 0x00, /* 0x94-0x97 */ + 0x98, 0xCC, 0x00, 0x00, 0xED, 0x55, 0x8B, 0x9F, /* 0x98-0x9B */ + 0x00, 0x00, 0x88, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x8B, 0xA0, 0x89, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x44, /* 0xA8-0xAB */ + 0x00, 0x00, 0x96, 0x99, 0x95, 0x8E, 0x8C, 0xF2, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x90, 0x4E, 0x97, 0xB5, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xD6, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x57, 0x91, 0xA3, /* 0xC0-0xC3 */ + 0x89, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xED, 0x45, 0x8F, 0x72, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xED, 0x57, 0x98, 0xD7, 0x00, 0x00, /* 0xCC-0xCF */ + 0x98, 0xDC, 0x98, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x98, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x91, 0xAD, /* 0xD4-0xD7 */ + 0x98, 0xD8, 0x00, 0x00, 0x98, 0xDB, 0x98, 0xD9, /* 0xD8-0xDB */ + 0x00, 0x00, 0x95, 0xDB, 0x00, 0x00, 0x98, 0xD6, /* 0xDC-0xDF */ + 0x00, 0x00, 0x90, 0x4D, 0x00, 0x00, 0x96, 0x93, /* 0xE0-0xE3 */ + 0x98, 0xDD, 0x98, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x43, 0x98, 0xEB, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x6F, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x95, 0x55, 0x98, 0xE6, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x95, 0xEE, 0x00, 0x00, 0x89, 0xB4, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xEA, 0xED, 0x5A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x98, 0xE4, 0x98, 0xED, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x91, 0x71, 0x00, 0x00, 0x8C, 0xC2, /* 0x08-0x0B */ + 0x00, 0x00, 0x94, 0x7B, 0x00, 0x00, 0xE0, 0xC5, /* 0x0C-0x0F */ + 0x00, 0x00, 0x98, 0xEC, 0x93, 0x7C, 0x00, 0x00, /* 0x10-0x13 */ + 0x98, 0xE1, 0x00, 0x00, 0x8C, 0xF4, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x8C, 0xF3, 0x98, 0xDF, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x5B, 0x8E, 0xD8, /* 0x1C-0x1F */ + 0x00, 0x00, 0x98, 0xE7, 0xED, 0x59, 0x95, 0xED, /* 0x20-0x23 */ + 0x92, 0x6C, 0x98, 0xE3, 0x8C, 0x91, 0x00, 0x00, /* 0x24-0x27 */ + 0x98, 0xE0, 0x98, 0xE8, 0x98, 0xE2, 0x97, 0xCF, /* 0x28-0x2B */ + 0x98, 0xE9, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xE4, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x8C, 0x90, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xED, 0x58, 0x00, 0x00, 0xED, 0x5E, 0x98, 0xEE, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x5C, 0x98, 0xEF, /* 0x44-0x47 */ + 0x98, 0xF3, 0x88, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xCE, /* 0x4C-0x4F */ + 0x98, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x98, 0xF1, 0x98, 0xF5, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xF4, 0x00, 0x00, /* 0x58-0x5B */ + 0x92, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x8C, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x98, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xED, 0x5D, 0x00, 0x00, 0x8E, 0xC3, 0x00, 0x00, /* 0x70-0x73 */ + 0x91, 0xA4, 0x92, 0xE3, 0x8B, 0xF4, 0x00, 0x00, /* 0x74-0x77 */ + 0x98, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x8B, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x98, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x98, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x96, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x8C, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xED, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x8E, 0x50, 0x94, 0xF5, 0x98, 0xF9, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x8D, 0xC3, 0x97, 0x62, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0xFC, 0x99, 0x42, /* 0xB0-0xB3 */ + 0x98, 0xFB, 0x8D, 0xC2, 0x00, 0x00, 0x8F, 0x9D, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x58, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x43, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x8B, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x99, 0x40, 0x99, 0x41, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x93, 0xAD, 0x00, 0x00, 0x91, 0x9C, /* 0xCC-0xCF */ + 0x00, 0x00, 0x8B, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x96, 0x6C, 0x99, 0x44, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xED, 0x61, 0x00, 0x00, 0x97, 0xBB, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x45, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x48, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x99, 0x46, 0x00, 0x00, 0x91, 0x6D, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x99, 0x47, 0x99, 0x49, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xED, 0x60, 0x99, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x99, 0x4A, 0x00, 0x00, 0x95, 0xC6, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_51[512] = { + 0x8B, 0x56, 0x99, 0x4D, 0x99, 0x4E, 0x00, 0x00, /* 0x00-0x03 */ + 0x89, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x99, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xF2, 0x00, 0x00, /* 0x10-0x13 */ + 0x99, 0x51, 0x99, 0x50, 0x99, 0x4F, 0x00, 0x00, /* 0x14-0x17 */ + 0x98, 0xD4, 0x00, 0x00, 0x99, 0x52, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x9E, /* 0x1C-0x1F */ + 0x00, 0x00, 0x99, 0x53, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x44, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xD7, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x55, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x54, 0x99, 0x57, /* 0x38-0x3B */ + 0x99, 0x56, 0x00, 0x00, 0x00, 0x00, 0x99, 0x58, /* 0x3C-0x3F */ + 0x99, 0x59, 0x88, 0xF2, 0x00, 0x00, 0x8C, 0xB3, /* 0x40-0x43 */ + 0x8C, 0x5A, 0x8F, 0x5B, 0x92, 0x9B, 0x8B, 0xA2, /* 0x44-0x47 */ + 0x90, 0xE6, 0x8C, 0xF5, 0xED, 0x62, 0x8D, 0x8E, /* 0x48-0x4B */ + 0x99, 0x5B, 0x96, 0xC6, 0x93, 0x65, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8E, 0x99, 0x00, 0x00, 0x99, 0x5A, 0x00, 0x00, /* 0x50-0x53 */ + 0x99, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x7D, 0x00, 0x00, /* 0x58-0x5B */ + 0x8A, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x5D, 0x00, 0x00, /* 0x60-0x63 */ + 0xED, 0x63, 0x93, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x91, 0x53, 0x99, 0x5F, 0x99, 0x60, 0x94, 0xAA, /* 0x68-0x6B */ + 0x8C, 0xF6, 0x98, 0x5A, 0x99, 0x61, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x8B, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x95, 0xBA, 0x91, 0xB4, 0x8B, 0xEF, /* 0x74-0x77 */ + 0x93, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x8C, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x99, 0x62, 0x00, 0x00, 0x99, 0x63, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x93, 0xE0, 0x89, 0x7E, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x99, 0x66, 0x8D, 0xFB, 0x00, 0x00, /* 0x88-0x8B */ + 0x99, 0x65, 0x8D, 0xC4, 0x00, 0x00, 0x99, 0x67, /* 0x8C-0x8F */ + 0xE3, 0xEC, 0x99, 0x68, 0x96, 0x60, 0x99, 0x69, /* 0x90-0x93 */ + 0x00, 0x00, 0x99, 0x6A, 0x99, 0x6B, 0x8F, 0xE7, /* 0x94-0x97 */ + 0x00, 0x00, 0x8E, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xED, 0x64, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x8A, 0xA5, 0x00, 0x00, 0x99, 0x6E, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x99, 0x6C, 0x96, 0xBB, 0x99, 0x6D, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x95, 0x79, 0x99, 0x6F, 0x99, 0x70, 0x99, 0x71, /* 0xA8-0xAB */ + 0x93, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x99, 0x75, 0x99, 0x73, 0x99, 0x74, 0x99, 0x72, /* 0xB0-0xB3 */ + 0x8D, 0xE1, 0x99, 0x76, 0x96, 0xE8, 0x97, 0xE2, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x99, 0x77, 0xED, 0x65, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x90, 0xA6, 0x99, 0x78, 0x8F, 0x79, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x99, 0x79, 0x00, 0x00, 0x92, 0x9C, /* 0xC8-0xCB */ + 0x97, 0xBD, 0x93, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xC3, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x7A, /* 0xD8-0xDB */ + 0xEA, 0xA3, 0x8B, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x99, 0x7B, 0x96, 0x7D, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x88, 0x91, 0xFA, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x99, 0x7D, 0x93, 0xE2, 0x00, 0x00, /* 0xE8-0xEB */ + 0xED, 0x66, 0x99, 0x7E, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x99, 0x80, 0x8A, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x99, 0x81, 0x8B, 0xA5, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x93, 0xCA, 0x89, 0x9A, 0x8F, 0x6F, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x94, 0x9F, 0x99, 0x82, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0x93, 0x81, 0x00, 0x00, 0x00, 0x00, 0x90, 0x6E, /* 0x00-0x03 */ + 0x99, 0x83, 0x00, 0x00, 0x95, 0xAA, 0x90, 0xD8, /* 0x04-0x07 */ + 0x8A, 0xA0, 0x00, 0x00, 0x8A, 0xA7, 0x99, 0x84, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x86, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x8C, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x99, 0x85, 0xED, 0x67, 0x00, 0x00, 0x97, 0xF1, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x8F, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x94, 0xBB, 0x95, 0xCA, 0x00, 0x00, 0x99, 0x87, /* 0x24-0x27 */ + 0x00, 0x00, 0x97, 0x98, 0x99, 0x88, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x89, 0x00, 0x00, /* 0x2C-0x2F */ + 0x93, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x99, 0x8A, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xA7, 0x8D, 0xFC, /* 0x34-0x37 */ + 0x8C, 0x94, 0x99, 0x8B, 0x8E, 0x68, 0x8D, 0x8F, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xE4, /* 0x40-0x43 */ + 0x99, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x91, 0xA5, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xED, 0x99, 0x8E, /* 0x48-0x4B */ + 0x99, 0x8F, 0x91, 0x4F, 0x00, 0x00, 0x99, 0x8C, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x99, 0x91, 0x00, 0x00, 0x96, 0x55, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x84, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0x90, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x95, /* 0x60-0x63 */ + 0x8D, 0xDC, 0x94, 0x8D, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x99, 0x94, 0x99, 0x92, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x9B, /* 0x6C-0x6F */ + 0x8F, 0xE8, 0x99, 0x9B, 0x8A, 0x84, 0x99, 0x95, /* 0x70-0x73 */ + 0x99, 0x93, 0x91, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x99, 0x97, 0x00, 0x00, 0x99, 0x96, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x63, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x80, /* 0x84-0x87 */ + 0x99, 0x9C, 0x97, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x99, 0x98, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x99, 0x9D, 0x99, 0x9A, 0x00, 0x00, /* 0x90-0x93 */ + 0x99, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xCD, /* 0x98-0x9B */ + 0xED, 0x68, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xF7, /* 0x9C-0x9F */ + 0x89, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x97, 0xF2, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x69, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x8F, 0x95, 0x93, 0x77, 0x8D, 0x85, /* 0xA8-0xAB */ + 0x99, 0xA0, 0x99, 0xA1, 0x00, 0x00, 0xEE, 0x5B, /* 0xAC-0xAF */ + 0x00, 0x00, 0x97, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x98, 0x4A, 0x99, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x8C, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x99, 0xA2, 0x00, 0x00, 0x8A, 0x4E, 0x00, 0x00, /* 0xBC-0xBF */ + 0xED, 0x6A, 0x99, 0xA4, 0x00, 0x00, 0x96, 0x75, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x92, 0xBA, 0x00, 0x00, 0x97, 0x45, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x95, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x99, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xD3, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x93, 0xAE, 0x00, 0x00, 0x99, 0xA6, /* 0xD4-0xD7 */ + 0x8A, 0xA8, 0x96, 0xB1, 0x00, 0x00, 0xED, 0x6B, /* 0xD8-0xDB */ + 0x00, 0x00, 0x8F, 0x9F, 0x99, 0xA7, 0x95, 0xE5, /* 0xDC-0xDF */ + 0x99, 0xAB, 0x00, 0x00, 0x90, 0xA8, 0x99, 0xA8, /* 0xE0-0xE3 */ + 0x8B, 0xCE, 0x00, 0x00, 0x99, 0xA9, 0x8A, 0xA9, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x4D, 0x99, 0xAC, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x99, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x99, 0xAE, 0x99, 0xAF, 0x8E, 0xD9, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xF9, 0x96, 0xDC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0xED, 0x6C, 0x96, 0xE6, 0x93, 0xF5, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x95, 0xEF, 0x99, 0xB0, 0xED, 0x6D, /* 0x04-0x07 */ + 0x99, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x99, 0xB3, 0x00, 0x00, 0x99, 0xB5, /* 0x0C-0x0F */ + 0x99, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x99, 0xB6, 0x89, 0xBB, 0x96, 0x6B, /* 0x14-0x17 */ + 0x00, 0x00, 0x8D, 0xFA, 0x99, 0xB7, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x91, 0x78, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x8F, 0xA0, 0x8B, 0xA7, 0x00, 0x00, 0x99, 0xB8, /* 0x20-0x23 */ + 0xED, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xD9, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0xB9, /* 0x2C-0x2F */ + 0x00, 0x00, 0x99, 0xBA, 0x00, 0x00, 0x99, 0xBB, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x99, 0xBC, 0x95, 0x43, 0x8B, 0xE6, 0x88, 0xE3, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xBD, /* 0x3C-0x3F */ + 0x99, 0xBD, 0x8F, 0x5C, 0x00, 0x00, 0x90, 0xE7, /* 0x40-0x43 */ + 0x00, 0x00, 0x99, 0xBF, 0x99, 0xBE, 0x8F, 0xA1, /* 0x44-0x47 */ + 0x8C, 0xDF, 0x99, 0xC1, 0x94, 0xBC, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x99, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x94, 0xDA, 0x91, 0xB2, 0x91, 0xEC, /* 0x50-0x53 */ + 0x8B, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x93, 0xEC, /* 0x54-0x57 */ + 0x92, 0x50, 0x00, 0x00, 0x94, 0x8E, 0x00, 0x00, /* 0x58-0x5B */ + 0x96, 0x6D, 0x00, 0x00, 0x99, 0xC4, 0x00, 0x00, /* 0x5C-0x5F */ + 0x90, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x54, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x99, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xC6, 0x89, 0x4B, /* 0x6C-0x6F */ + 0x88, 0xF3, 0x8A, 0xEB, 0xED, 0x6F, 0x91, 0xA6, /* 0x70-0x73 */ + 0x8B, 0x70, 0x97, 0x91, 0x00, 0x00, 0x99, 0xC9, /* 0x74-0x77 */ + 0x89, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x99, 0xC8, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xA8, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x99, 0xCA, 0x00, 0x00, /* 0x80-0x83 */ + 0x96, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0x70, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xCB, 0x00, 0x00, /* 0x94-0x97 */ + 0x97, 0xD0, 0x00, 0x00, 0x8C, 0xFA, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xB4, /* 0x9C-0x9F */ + 0x99, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x99, 0xCE, 0x99, 0xCD, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x90, 0x7E, 0x89, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x89, 0x7D, 0x99, 0xCF, 0x00, 0x00, /* 0xAC-0xAF */ + 0x99, 0xD0, 0x00, 0x00, 0xED, 0x71, 0x8C, 0xB5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xD1, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x8E, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x51, 0x99, 0xD2, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x96, 0x94, 0x8D, 0xB3, 0x8B, 0x79, 0x97, 0x46, /* 0xC8-0xCB */ + 0x91, 0x6F, 0x94, 0xBD, 0x8E, 0xFB, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x8F, 0x66, 0x00, 0x00, 0x8E, 0xE6, 0x8E, 0xF3, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x8F, 0x96, 0x00, 0x00, 0x94, 0xBE, /* 0xD8-0xDB */ + 0x00, 0x00, 0xED, 0x72, 0x00, 0x00, 0x99, 0xD5, /* 0xDC-0xDF */ + 0x00, 0x00, 0x89, 0x62, 0x91, 0x70, 0x8C, 0xFB, /* 0xE0-0xE3 */ + 0x8C, 0xC3, 0x8B, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x99, 0xD9, 0x92, 0x40, 0x91, 0xFC, 0x8B, 0xA9, /* 0xE8-0xEB */ + 0x8F, 0xA2, 0x99, 0xDA, 0x99, 0xD8, 0x89, 0xC2, /* 0xEC-0xEF */ + 0x91, 0xE4, 0x8E, 0xB6, 0x8E, 0x6A, 0x89, 0x45, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x90, 0x8D, 0x86, /* 0xF4-0xF7 */ + 0x8E, 0x69, 0x00, 0x00, 0x99, 0xDB, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_54[512] = { + 0x00, 0x00, 0x99, 0xDC, 0x00, 0x00, 0x8B, 0x68, /* 0x00-0x03 */ + 0x8A, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x8D, 0x87, 0x8B, 0x67, 0x92, 0xDD, 0x89, 0x44, /* 0x08-0x0B */ + 0x93, 0xAF, 0x96, 0xBC, 0x8D, 0x40, 0x97, 0x99, /* 0x0C-0x0F */ + 0x93, 0x66, 0x8C, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x4E, /* 0x18-0x1B */ + 0x00, 0x00, 0x99, 0xE5, 0x00, 0x00, 0x8B, 0xE1, /* 0x1C-0x1F */ + 0x96, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xDB, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x99, 0xE4, 0x00, 0x00, 0x8A, 0xDC, /* 0x28-0x2B */ + 0x99, 0xDF, 0x99, 0xE0, 0x99, 0xE2, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xE3, 0x00, 0x00, /* 0x34-0x37 */ + 0x8B, 0x7A, 0x90, 0x81, 0x00, 0x00, 0x95, 0xAB, /* 0x38-0x3B */ + 0x99, 0xE1, 0x99, 0xDD, 0x8C, 0xE1, 0x00, 0x00, /* 0x3C-0x3F */ + 0x99, 0xDE, 0x00, 0x00, 0x98, 0x43, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xF0, 0x00, 0x00, /* 0x44-0x47 */ + 0x92, 0xE6, 0x8C, 0xE0, 0x8D, 0x90, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xE6, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x93, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0xEA, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x8E, 0xFC, 0x00, 0x00, 0x8E, 0xF4, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x99, 0xED, 0x99, 0xEB, 0x00, 0x00, 0x96, 0xA1, /* 0x70-0x73 */ + 0x00, 0x00, 0x99, 0xE8, 0x99, 0xF1, 0x99, 0xEC, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0xEF, /* 0x78-0x7B */ + 0x8C, 0xC4, 0x96, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x99, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x99, 0xF2, 0x00, 0x00, 0x99, 0xF4, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x75, 0x8D, 0xEE, /* 0x88-0x8B */ + 0x98, 0x61, 0x00, 0x00, 0x99, 0xE9, 0x99, 0xE7, /* 0x8C-0x8F */ + 0x99, 0xF3, 0x00, 0x00, 0x99, 0xEE, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xED, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x99, 0xF6, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x9A, 0x42, 0x99, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x99, 0xFC, 0xED, 0x76, 0x00, 0x00, 0x9A, 0x40, /* 0xA8-0xAB */ + 0x99, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x5D, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xE7, 0x8A, 0x50, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x99, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x9A, 0x44, 0x88, 0xF4, 0x9A, 0x43, 0x00, 0x00, /* 0xBC-0xBF */ + 0x88, 0xA3, 0x95, 0x69, 0x9A, 0x41, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x99, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x99, 0xF5, /* 0xC4-0xC7 */ + 0x99, 0xFB, 0x8D, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x9A, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x88, 0xF5, 0x9A, 0x4E, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x9A, 0x46, 0x9A, 0x47, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x8F, 0xA3, 0x96, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x9A, 0x4C, 0x9A, 0x4B, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x4E, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x4D, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x9A, 0x4A, 0x00, 0x00, 0xED, 0x77, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x89, 0x53, 0x00, 0x00, 0x8D, 0xB4, 0x90, 0x4F, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x48, /* 0x0C-0x0F */ + 0x93, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x9A, 0x49, 0x00, 0x00, 0x88, 0xA0, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x53, 0x97, 0x42, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8F, 0xA5, 0x00, 0x00, 0x9A, 0x59, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x9A, 0x58, 0x9A, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xC1, 0x00, 0x00, /* 0x3C-0x3F */ + 0x9A, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x91, 0xED, 0x9A, 0x55, 0x8F, 0xA4, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x9A, 0x52, 0x00, 0x00, 0x00, 0x00, 0x96, 0xE2, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x5B, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x56, 0x9A, 0x57, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x9A, 0x54, 0x9A, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x51, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x60, /* 0x78-0x7B */ + 0x9A, 0x65, 0x00, 0x00, 0x9A, 0x61, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x9A, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x66, /* 0x80-0x83 */ + 0x91, 0x50, 0x00, 0x00, 0xED, 0x78, 0x9A, 0x68, /* 0x84-0x87 */ + 0x00, 0x00, 0x8D, 0x41, 0x9A, 0x5E, 0x92, 0x9D, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x9A, 0x62, 0x9A, 0x5B, 0x8A, 0xAB, 0x00, 0x00, /* 0x98-0x9B */ + 0x8A, 0xEC, 0x8A, 0x85, 0x9A, 0x63, 0x9A, 0x5F, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x96, /* 0xA4-0xA7 */ + 0x9A, 0x69, 0x9A, 0x67, 0x91, 0x72, 0x8B, 0x69, /* 0xA8-0xAB */ + 0x8B, 0xAA, 0x00, 0x00, 0x9A, 0x64, 0x00, 0x00, /* 0xAC-0xAF */ + 0x8B, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x63, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x9A, 0x6D, 0x9A, 0x6B, 0x00, 0x00, 0x9A, 0xA5, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x9A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x6A, 0x00, 0x00, /* 0xD8-0xDB */ + 0x9A, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x6C, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x6B, /* 0xE0-0xE3 */ + 0x9A, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x72, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x9A, 0x77, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x9A, 0x75, 0x9A, 0x74, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x51, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x89, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x9A, 0x71, 0x00, 0x00, 0x9A, 0x73, 0x8F, 0xA6, /* 0x14-0x17 */ + 0x89, 0x52, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x76, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x89, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x82, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8F, 0xFA, 0x9A, 0x7D, 0x00, 0x00, /* 0x30-0x33 */ + 0x9A, 0x7B, 0x00, 0x00, 0x9A, 0x7C, 0x00, 0x00, /* 0x34-0x37 */ + 0x9A, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x5C, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x91, 0x58, 0x00, 0x00, 0x9A, 0x78, 0x00, 0x00, /* 0x4C-0x4F */ + 0x9A, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x9A, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x9A, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x8A, 0xED, 0x00, 0x00, 0x9A, 0x84, 0x9A, 0x80, /* 0x68-0x6B */ + 0x9A, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x95, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x93, 0xD3, 0x00, 0x00, 0x94, 0xB6, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x9A, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x85, 0x8A, 0x64, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x87, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x8A, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x9A, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x9A, 0x88, 0x00, 0x00, 0x94, 0x58, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x9A, 0x8B, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x8C, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x9A, 0x8E, 0x00, 0x00, 0x9A, 0x8D, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x9A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x9A, 0x93, 0x9A, 0x91, 0x9A, 0x8F, 0x9A, 0x92, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x9A, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x95, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x9A, 0x96, 0x00, 0x00, 0x9A, 0x97, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x98, /* 0xD4-0xD7 */ + 0x99, 0x64, 0x00, 0x00, 0x8E, 0xFA, 0x8E, 0x6C, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xF1, 0x00, 0x00, /* 0xDC-0xDF */ + 0x88, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x92, 0x63, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0x99, 0x00, 0x00, /* 0xEC-0xEF */ + 0x8D, 0xA2, 0x00, 0x00, 0x88, 0xCD, 0x90, 0x7D, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x9A, 0x9A, 0x8C, 0xC5, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x8D, 0x91, 0x00, 0x00, 0x9A, 0x9C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x9A, 0x9B, 0x00, 0x00, 0x00, 0x00, 0x95, 0xDE, /* 0x00-0x03 */ + 0x9A, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x9A, 0x9F, 0x9A, 0x9E, 0x00, 0x00, 0x9A, 0xA0, /* 0x08-0x0B */ + 0x00, 0x00, 0x9A, 0xA1, 0x00, 0x00, 0x8C, 0x97, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x80, 0x9A, 0xA2, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xA4, 0x00, 0x00, /* 0x14-0x17 */ + 0x9A, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x9A, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x93, 0x79, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xA7, 0x88, 0xB3, /* 0x24-0x27 */ + 0x8D, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x8C, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x92, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xA8, /* 0x34-0x37 */ + 0x9A, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xAB, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x9A, 0xAC, 0x00, 0x00, 0x8D, 0xE2, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xCF, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x56, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xAA, 0x9A, 0xAD, /* 0x4C-0x4F */ + 0x8D, 0xBF, 0x8D, 0x42, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xED, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x9A, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x8D, 0xA3, 0xED, 0x7A, 0x92, 0x52, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x9A, 0xAE, 0x92, 0xD8, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB2, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x90, 0x82, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x9A, 0xB0, 0x9A, 0xB3, 0x00, 0x00, 0x8C, 0x5E, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB4, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x9A, 0xB5, 0x00, 0x00, 0x8D, 0x43, 0x8A, 0x5F, /* 0xA0-0xA3 */ + 0x9A, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB8, 0x00, 0x00, /* 0xA8-0xAB */ + 0xED, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x9A, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xB6, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x9A, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xBA, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xBB, 0xED, 0x7D, /* 0xC4-0xC7 */ + 0xED, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x96, 0x84, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xE9, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xBD, 0x9A, 0xBE, /* 0xD0-0xD3 */ + 0x9A, 0xBC, 0x00, 0x00, 0x9A, 0xC0, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x94, 0x57, 0x00, 0x00, 0x00, 0x00, 0x88, 0xE6, /* 0xDC-0xDF */ + 0x95, 0x75, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xC1, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x8F, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xB7, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x94, 0x7C, 0x8A, 0xEE, 0x00, 0x00, /* 0xF8-0xFB */ + 0x8D, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0x96, 0x78, 0x00, 0x00, 0x93, 0xB0, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x8C, 0x98, 0x91, 0xCD, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xBF, 0x9A, 0xC2, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x91, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x9A, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x9A, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x9A, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x92, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xAC, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x9F, /* 0x2C-0x2F */ + 0x89, 0x81, 0x95, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x8F, 0xEA, 0x93, 0x67, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xE4, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x9A, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x95, 0xBB, 0x97, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xF2, 0x9A, 0xC8, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x91, 0x59, 0x9A, 0xCB, 0x00, 0x00, /* 0x50-0x53 */ + 0x93, 0x83, 0x00, 0x00, 0x00, 0x00, 0x93, 0x68, /* 0x54-0x57 */ + 0x93, 0x84, 0x94, 0xB7, 0x92, 0xCB, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xC7, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xC7, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x89, 0x96, 0x00, 0x00, 0x93, 0x55, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x9A, 0xC9, 0x00, 0x00, 0x9A, 0xC5, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x90, 0x6F, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x9A, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x6D, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xAB, /* 0x80-0x83 */ + 0x00, 0x00, 0x9A, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xE6, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x9D, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x92, 0xC4, 0x00, 0x00, 0xED, 0x81, 0x9A, 0xD0, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x96, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x9A, 0xD1, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xD6, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x82, 0x95, 0xAD, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x9A, 0xD5, 0x9A, 0xCF, 0x9A, 0xD2, 0x9A, 0xD4, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xA4, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x95, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x9A, 0xD7, 0x00, 0x00, 0x92, 0x64, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xF3, 0x00, 0x00, /* 0xC8-0xCB */ + 0x8F, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x9A, 0xD9, 0x00, 0x00, 0x9A, 0xD8, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x8D, 0x88, 0x00, 0x00, 0x9A, 0xDA, /* 0xD4-0xD7 */ + 0x9A, 0xDC, 0x9A, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x9A, 0xDE, 0x00, 0x00, 0x9A, 0xD3, 0x9A, 0xE0, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x9A, 0xDF, 0x9A, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x6D, /* 0xE8-0xEB */ + 0x90, 0x70, 0x00, 0x00, 0x91, 0x73, 0x9A, 0xE1, /* 0xEC-0xEF */ + 0x90, 0xBA, 0x88, 0xEB, 0x94, 0x84, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xD9, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x9A, 0xE3, 0x9A, 0xE2, 0x9A, 0xE4, /* 0xF8-0xFB */ + 0x9A, 0xE5, 0x9A, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xE7, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x95, 0xCF, 0x9A, 0xE8, 0xED, 0x83, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xC4, /* 0x0C-0x0F */ + 0x9A, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x97, 0x5B, 0x8A, 0x4F, 0x00, 0x00, /* 0x14-0x17 */ + 0x99, 0xC7, 0x8F, 0x67, 0x91, 0xBD, 0x9A, 0xEA, /* 0x18-0x1B */ + 0x96, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xB2, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x9A, 0xEC, 0x00, 0x00, 0x91, 0xE5, /* 0x24-0x27 */ + 0x00, 0x00, 0x93, 0x56, 0x91, 0xBE, 0x95, 0x76, /* 0x28-0x2B */ + 0x9A, 0xED, 0x9A, 0xEE, 0x89, 0x9B, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8E, 0xB8, 0x9A, 0xEF, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xCE, /* 0x34-0x37 */ + 0x9A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xF1, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x89, 0x82, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xEF, /* 0x44-0x47 */ + 0x93, 0xDE, 0x95, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xF5, 0x91, 0x74, /* 0x4C-0x4F */ + 0x9A, 0xF4, 0x8C, 0x5F, 0x00, 0x00, 0xED, 0x84, /* 0x50-0x53 */ + 0x96, 0x7A, 0x9A, 0xF3, 0x00, 0x00, 0x93, 0x85, /* 0x54-0x57 */ + 0x9A, 0xF7, 0x00, 0x00, 0x9A, 0xF6, 0xED, 0x85, /* 0x58-0x5B */ + 0x00, 0x00, 0xED, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x9A, 0xF9, 0x00, 0x00, 0x9A, 0xF8, 0xED, 0x87, /* 0x60-0x63 */ + 0x00, 0x00, 0x89, 0x9C, 0x00, 0x00, 0x9A, 0xFA, /* 0x64-0x67 */ + 0x8F, 0xA7, 0x9A, 0xFC, 0x92, 0x44, 0x00, 0x00, /* 0x68-0x6B */ + 0x9A, 0xFB, 0x00, 0x00, 0x95, 0xB1, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x97, /* 0x70-0x73 */ + 0x93, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x9B, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x8D, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x9B, 0x41, 0x94, 0x40, 0x94, 0xDC, /* 0x80-0x83 */ + 0x96, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x44, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x9B, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x57, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x64, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x96, 0xAD, 0x00, 0x00, 0x9B, 0xAA, /* 0x98-0x9B */ + 0x00, 0x00, 0x9B, 0x42, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x45, /* 0xA0-0xA3 */ + 0xED, 0x88, 0x91, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x96, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x93, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x46, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x96, 0x85, 0xED, 0x89, 0x8D, 0xC8, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xA8, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x47, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x8E, 0x6F, 0x00, 0x00, 0x8E, 0x6E, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x88, 0xB7, 0x8C, 0xC6, 0x00, 0x00, 0x90, 0xA9, /* 0xD0-0xD3 */ + 0x88, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x9B, 0x4B, 0x9B, 0x4C, 0x00, 0x00, /* 0xD8-0xDB */ + 0x9B, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x89, 0x57, 0x8A, 0xAD, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x9B, 0x48, 0x00, 0x00, 0x96, 0xC3, 0x95, 0x50, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0xA6, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xF7, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x70, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0x00, 0x00, 0x88, 0xD0, 0x00, 0x00, 0x88, 0xA1, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x9B, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x9B, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x96, 0xBA, 0x00, 0x00, 0x9B, 0x52, 0x00, 0x00, /* 0x18-0x1B */ + 0x9B, 0x50, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x4E, /* 0x1C-0x1F */ + 0x90, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x9B, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x95, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xE2, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x9B, 0x56, 0x9B, 0x57, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x8F, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x9B, 0x53, 0x98, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x6B, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x9B, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xA5, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x58, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x77, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x59, 0x00, 0x00, /* 0x68-0x6B */ + 0x9B, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0xB9, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x7D, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x5A, 0x95, 0x51, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x9B, 0x5B, 0x9B, 0x5F, 0x9B, 0x5C, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x89, 0xC5, 0x9B, 0x5E, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x8E, 0xB9, 0x00, 0x00, 0x9B, 0x5D, /* 0xC8-0xCB */ + 0x8C, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x9B, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x64, 0x9B, 0x61, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x92, 0x84, 0x00, 0x00, 0x9B, 0x60, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x62, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x9B, 0x63, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x65, 0x9B, 0x66, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_5B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x8A, 0xF0, 0x00, 0x00, 0x9B, 0x68, /* 0x08-0x0B */ + 0x9B, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x69, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xEC, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x6C, 0x00, 0x00, /* 0x28-0x2B */ + 0x92, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x89, 0x64, 0x00, 0x00, 0x9B, 0x6A, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x6D, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0x6E, 0x00, 0x00, /* 0x3C-0x3F */ + 0x9B, 0x71, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x6F, /* 0x40-0x43 */ + 0x00, 0x00, 0x9B, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8E, 0x71, 0x9B, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x8D, 0x45, 0x9B, 0x73, 0xED, 0x8A, 0x8E, 0x9A, /* 0x54-0x57 */ + 0x91, 0xB6, 0x00, 0x00, 0x9B, 0x74, 0x9B, 0x75, /* 0x58-0x5B */ + 0x8E, 0x79, 0x8D, 0x46, 0x00, 0x00, 0x96, 0xD0, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x47, /* 0x60-0x63 */ + 0x8C, 0xC7, 0x9B, 0x76, 0x8A, 0x77, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x9B, 0x77, 0x00, 0x00, 0x91, 0xB7, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x9B, 0x78, 0x9B, 0xA1, 0x00, 0x00, 0x9B, 0x79, /* 0x70-0x73 */ + 0x00, 0x00, 0x9B, 0x7A, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x9B, 0x7B, 0x00, 0x00, 0x9B, 0x7D, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x9B, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x80, /* 0x80-0x83 */ + 0x00, 0x00, 0x91, 0xEE, 0x00, 0x00, 0x89, 0x46, /* 0x84-0x87 */ + 0x8E, 0xE7, 0x88, 0xC0, 0x00, 0x00, 0x91, 0x76, /* 0x88-0x8B */ + 0x8A, 0xAE, 0x8E, 0xB3, 0x00, 0x00, 0x8D, 0x47, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x93, 0x86, 0x00, 0x00, 0x8F, 0x40, /* 0x94-0x97 */ + 0x8A, 0xAF, 0x92, 0x88, 0x92, 0xE8, 0x88, 0xB6, /* 0x98-0x9B */ + 0x8B, 0x58, 0x95, 0xF3, 0x00, 0x00, 0x8E, 0xC0, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x71, 0x90, 0xE9, /* 0xA0-0xA3 */ + 0x8E, 0xBA, 0x97, 0x47, 0x9B, 0x81, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x7B, 0x00, 0x00, /* 0xAC-0xAF */ + 0x8D, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x51, /* 0xB0-0xB3 */ + 0x89, 0x83, 0x8F, 0xAA, 0x89, 0xC6, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x9B, 0x82, 0x97, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x68, /* 0xBC-0xBF */ + 0xED, 0x8B, 0x00, 0x00, 0x8E, 0xE2, 0x9B, 0x83, /* 0xC0-0xC3 */ + 0x8A, 0xF1, 0x93, 0xD0, 0x96, 0xA7, 0x9B, 0x84, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x9B, 0x85, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x95, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x9B, 0x87, 0x00, 0x00, 0x8A, 0xA6, 0x8B, 0xF5, /* 0xD0-0xD3 */ + 0x9B, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xED, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB0, /* 0xD8-0xDB */ + 0x00, 0x00, 0x90, 0x51, 0x9B, 0x8B, 0x8E, 0x40, /* 0xDC-0xDF */ + 0x00, 0x00, 0x89, 0xC7, 0x9B, 0x8A, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x9B, 0x88, 0x9B, 0x8C, 0x9B, 0x89, 0x94, 0x4A, /* 0xE4-0xE7 */ + 0x9E, 0xCB, 0x90, 0x52, 0x00, 0x00, 0x9B, 0x8D, /* 0xE8-0xEB */ + 0xED, 0x8E, 0x00, 0x00, 0x97, 0xBE, 0x00, 0x00, /* 0xEC-0xEF */ + 0x9B, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x90, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x92, 0x9E, 0x9B, 0x8F, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x90, 0xA1, 0x00, 0x00, 0x8E, 0x9B, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xCE, 0x8E, 0xF5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x00, 0x00, 0x95, 0x95, 0x90, 0xEA, 0x00, 0x00, /* 0x00-0x03 */ + 0x8E, 0xCB, 0x9B, 0x91, 0x8F, 0xAB, 0x9B, 0x92, /* 0x04-0x07 */ + 0x9B, 0x93, 0x88, 0xD1, 0x91, 0xB8, 0x90, 0x71, /* 0x08-0x0B */ + 0x00, 0x00, 0x9B, 0x94, 0x93, 0xB1, 0x8F, 0xAC, /* 0x0C-0x0F */ + 0x00, 0x00, 0x8F, 0xAD, 0x00, 0x00, 0x9B, 0x95, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xEB, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xAE, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x8F, 0x00, 0x00, /* 0x1C-0x1F */ + 0x9B, 0x96, 0x00, 0x00, 0x9B, 0x97, 0x00, 0x00, /* 0x20-0x23 */ + 0x96, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x9B, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x8B, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8F, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x9B, 0x99, 0x9B, 0x9A, 0x8E, 0xDA, 0x90, 0x4B, /* 0x38-0x3B */ + 0x93, 0xF2, 0x90, 0x73, 0x94, 0xF6, 0x94, 0x41, /* 0x3C-0x3F */ + 0x8B, 0xC7, 0x9B, 0x9B, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x8B, 0x8F, 0x9B, 0x9C, 0x00, 0x00, /* 0x44-0x47 */ + 0x8B, 0xFC, 0x00, 0x00, 0x93, 0xCD, 0x89, 0xAE, /* 0x48-0x4B */ + 0x00, 0x00, 0x8E, 0x72, 0x9B, 0x9D, 0x9B, 0xA0, /* 0x4C-0x4F */ + 0x9B, 0x9F, 0x8B, 0xFB, 0x00, 0x00, 0x9B, 0x9E, /* 0x50-0x53 */ + 0x00, 0x00, 0x93, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xAE, 0x00, 0x00, /* 0x5C-0x5F */ + 0x93, 0x6A, 0x8E, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x91, 0x77, 0x97, 0x9A, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x9B, 0xA2, 0x00, 0x00, 0x9B, 0xA3, 0x93, 0xD4, /* 0x6C-0x6F */ + 0x00, 0x00, 0x8E, 0x52, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xA5, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x9B, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x9B, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x8A, 0xF2, 0x9B, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x9B, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x89, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x90, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x91, 0x5A, 0x8A, 0xE2, 0x00, 0x00, 0x9B, 0xAB, /* 0xA8-0xAB */ + 0x96, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x91, 0xD0, 0x00, 0x00, 0x8A, 0x78, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xAD, 0x9B, 0xAF, /* 0xB4-0xB7 */ + 0x8A, 0xDD, 0x00, 0x00, 0xED, 0x91, 0x9B, 0xAC, /* 0xB8-0xBB */ + 0x9B, 0xAE, 0x00, 0x00, 0x9B, 0xB1, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x9B, 0xB0, 0x00, 0x00, 0x9B, 0xB2, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x9B, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x93, 0xBB, 0x8B, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x89, 0xE3, 0x9B, 0xB4, 0x9B, 0xB9, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x9B, 0xB7, 0x00, 0x00, 0x95, 0xF5, /* 0xEC-0xEF */ + 0x95, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xED, 0x92, 0x93, 0x87, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xB6, 0x8F, 0x73, /* 0xF8-0xFB */ + 0x00, 0x00, 0x9B, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x92, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xBA, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xE8, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x9B, 0xC0, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x9B, 0xC1, 0x9B, 0xBB, 0x8A, 0x52, 0x9B, 0xBC, /* 0x14-0x17 */ + 0x9B, 0xC5, 0x9B, 0xC4, 0x9B, 0xC3, 0x9B, 0xBF, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xBE, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xC2, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0x93, /* 0x24-0x27 */ + 0x00, 0x00, 0x95, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x96, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xC9, /* 0x48-0x4B */ + 0x9B, 0xC6, 0x00, 0x00, 0x9B, 0xC8, 0x00, 0x00, /* 0x4C-0x4F */ + 0x97, 0x92, 0x00, 0x00, 0x9B, 0xC7, 0xED, 0x94, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x9B, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x90, 0x93, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x9B, 0xCA, 0xED, 0x97, 0x00, 0x00, 0x8D, 0xB5, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xCB, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xCC, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xCF, 0x00, 0x00, /* 0x80-0x83 */ + 0x9B, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xCD, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x88, /* 0x88-0x8B */ + 0x9B, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x9B, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x9B, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xD0, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x9B, 0xD2, 0x00, 0x00, 0x9B, 0xD3, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xD6, /* 0xB4-0xB7 */ + 0xED, 0x98, 0xED, 0x99, 0x97, 0xE4, 0x00, 0x00, /* 0xB8-0xBB */ + 0x9B, 0xD7, 0x9B, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x9B, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x8A, 0xDE, 0x9B, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xED, 0x9A, 0x00, 0x00, 0x9B, 0xDB, 0x9B, 0xDA, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xDC, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xDD, /* 0xD8-0xDB */ + 0x00, 0x00, 0x90, 0xEC, 0x8F, 0x42, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x8F, 0x84, 0x00, 0x00, 0x91, 0x83, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x8D, 0x48, 0x8D, 0xB6, 0x8D, 0x49, /* 0xE4-0xE7 */ + 0x8B, 0x90, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xDE, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xB7, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x8C, 0xC8, 0x9B, 0xDF, 0x96, 0xA4, /* 0xF0-0xF3 */ + 0x94, 0x62, 0x9B, 0xE0, 0x00, 0x00, 0x8D, 0x4A, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xAA, /* 0xF8-0xFB */ + 0x00, 0x00, 0x92, 0x46, 0x8B, 0xD0, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x73, 0x95, 0x7A, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xBF, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xE1, /* 0x08-0x0B */ + 0x8A, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x9B, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x9F, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x9B, 0xE3, 0x9B, 0xE2, 0x9B, 0xE5, /* 0x18-0x1B */ + 0x00, 0x00, 0x92, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x90, 0x83, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x74, /* 0x28-0x2B */ + 0x00, 0x00, 0x90, 0xC8, 0x00, 0x00, 0x91, 0xD1, /* 0x2C-0x2F */ + 0x8B, 0x41, 0x00, 0x00, 0x00, 0x00, 0x92, 0xA0, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x9B, 0xE6, 0x9B, 0xE7, /* 0x34-0x37 */ + 0x8F, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x96, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x9B, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xE9, /* 0x40-0x43 */ + 0x9B, 0xE8, 0x95, 0x9D, 0x00, 0x00, 0x9B, 0xF1, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x96, 0x79, 0x00, 0x00, 0x9B, 0xEB, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x9B, 0xED, 0x96, 0x8B, 0x00, 0x00, 0x9B, 0xEC, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xEE, /* 0x5C-0x5F */ + 0x00, 0x00, 0x94, 0xA6, 0x9B, 0xEF, 0x95, 0xBC, /* 0x60-0x63 */ + 0x9B, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB1, 0x95, 0xBD, /* 0x70-0x73 */ + 0x94, 0x4E, 0x9B, 0xF2, 0x9B, 0xF3, 0x00, 0x00, /* 0x74-0x77 */ + 0x8D, 0x4B, 0x8A, 0xB2, 0x9B, 0xF4, 0x8C, 0xB6, /* 0x78-0x7B */ + 0x97, 0x63, 0x97, 0x48, 0x8A, 0xF4, 0x9B, 0xF6, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x92, 0xA1, 0x00, 0x00, 0x8D, 0x4C, /* 0x80-0x83 */ + 0x8F, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x94, 0xDD, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xB0, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x98, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x92, 0xEA, 0x95, 0xF7, 0x93, 0x58, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0x4D, 0x00, 0x00, /* 0x98-0x9B */ + 0x95, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x9B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x78, 0x8D, 0xC0, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xC9, /* 0xA8-0xAB */ + 0x00, 0x00, 0x92, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x88, 0xC1, 0x8F, 0x8E, 0x8D, 0x4E, /* 0xB4-0xB7 */ + 0x97, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x9B, 0xF8, 0x9B, 0xF9, 0x94, 0x70, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x9B, 0xFA, 0x97, 0xF5, 0x98, 0x4C, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0xFC, /* 0xCC-0xCF */ + 0x9B, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x66, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x40, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x43, 0x9C, 0x44, /* 0xD8-0xDB */ + 0x00, 0x00, 0x9C, 0x42, 0x00, 0x00, 0x95, 0x5F, /* 0xDC-0xDF */ + 0x8F, 0xB1, 0x9C, 0x46, 0x9C, 0x45, 0x9C, 0x41, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x9C, 0x47, 0x9C, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x9C, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x9C, 0x4C, 0x9C, 0x4A, 0x00, 0x00, 0x9C, 0x4B, /* 0xF0-0xF3 */ + 0x9C, 0x4D, 0x00, 0x00, 0x89, 0x84, 0x92, 0xEC, /* 0xF4-0xF7 */ + 0x9C, 0x4E, 0x00, 0x00, 0x8C, 0x9A, 0x89, 0xF4, /* 0xF8-0xFB */ + 0x94, 0x55, 0x00, 0x00, 0x9C, 0x4F, 0x93, 0xF9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0x00, 0x00, 0x95, 0xD9, 0x00, 0x00, 0x9C, 0x50, /* 0x00-0x03 */ + 0x98, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x9C, 0x51, 0x95, 0xBE, 0x9C, 0x54, /* 0x08-0x0B */ + 0x98, 0x9F, 0x98, 0xAF, 0x00, 0x00, 0x8E, 0xAE, /* 0x0C-0x0F */ + 0x93, 0xF3, 0x9C, 0x55, 0x00, 0x00, 0x8B, 0x7C, /* 0x10-0x13 */ + 0x92, 0xA2, 0x88, 0xF8, 0x9C, 0x56, 0x95, 0xA4, /* 0x14-0x17 */ + 0x8D, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x92, 0x6F, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xED, /* 0x1C-0x1F */ + 0x00, 0x00, 0xED, 0x9B, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x96, 0xED, 0x8C, 0xB7, 0x8C, 0xCA, /* 0x24-0x27 */ + 0x00, 0x00, 0x9C, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x9C, 0x58, 0x00, 0x00, 0x9C, 0x5E, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8E, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xED, 0x9C, 0x92, 0xA3, 0x00, 0x00, 0x8B, 0xAD, /* 0x34-0x37 */ + 0x9C, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x95, 0x4A, 0x00, 0x00, 0x92, 0x65, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x9C, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xED, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x9C, 0x5B, 0x00, 0x00, 0x8B, 0xAE, 0x00, 0x00, /* 0x48-0x4B */ + 0x9C, 0x5C, 0x00, 0x00, 0x9C, 0x5D, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x9C, 0x5F, 0x00, 0x00, 0x93, 0x96, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x60, 0x9C, 0x61, /* 0x54-0x57 */ + 0x00, 0x00, 0x9C, 0x62, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x9C, 0x53, 0x9C, 0x52, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x9C, 0x63, 0x8C, 0x60, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x46, 0xED, 0x9D, /* 0x64-0x67 */ + 0x00, 0x00, 0x8D, 0xCA, 0x95, 0x56, 0x92, 0xA4, /* 0x68-0x6B */ + 0x95, 0x6A, 0x9C, 0x64, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x8F, 0xB2, 0x89, 0x65, 0x00, 0x00, 0x9C, 0x65, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x66, /* 0x74-0x77 */ + 0x00, 0x00, 0x96, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x94, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x69, /* 0x7C-0x7F */ + + 0x89, 0x9D, 0x90, 0xAA, 0x9C, 0x68, 0x9C, 0x67, /* 0x80-0x83 */ + 0x8C, 0x61, 0x91, 0xD2, 0x00, 0x00, 0x9C, 0x6D, /* 0x84-0x87 */ + 0x9C, 0x6B, 0x00, 0x00, 0x9C, 0x6A, 0x97, 0xA5, /* 0x88-0x8B */ + 0x8C, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x8F, 0x99, 0x9C, 0x6C, 0x93, 0x6B, 0x8F, 0x5D, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xBE, /* 0x94-0x97 */ + 0x9C, 0x70, 0x9C, 0x6F, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x6E, 0x00, 0x00, /* 0x9C-0x9F */ + 0x9C, 0x71, 0x8C, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x9C, 0x72, 0x95, 0x9C, 0x8F, 0x7A, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x9C, 0x73, 0x94, 0xF7, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xBF, /* 0xB0-0xB3 */ + 0x92, 0xA5, 0x00, 0x00, 0x00, 0x00, 0xED, 0x9E, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x93, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x9C, 0x74, 0x8B, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x53, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x95, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x8A, 0xF5, 0x94, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x75, 0x8E, 0x75, /* 0xD4-0xD7 */ + 0x96, 0x59, 0x96, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x89, 0x9E, 0x9C, 0x7A, 0xED, 0x9F, 0x00, 0x00, /* 0xDC-0xDF */ + 0x92, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x9C, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xF5, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x9C, 0xAB, 0x9C, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x94, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x9C, 0x78, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x76, /* 0xF8-0xFB */ + 0x00, 0x00, 0x8D, 0x9A, 0x00, 0x00, 0x9C, 0x7C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x83, 0x9C, 0x89, /* 0x0C-0x0F */ + 0x9C, 0x81, 0x00, 0x00, 0x93, 0x7B, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x9C, 0x86, 0x95, 0x7C, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x9C, 0x80, 0x00, 0x00, 0x9C, 0x85, /* 0x18-0x1B */ + 0x97, 0xE5, 0x8E, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x91, 0xD3, 0x9C, 0x7D, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x8B, 0x7D, 0x9C, 0x88, 0x90, 0xAB, /* 0x24-0x27 */ + 0x89, 0x85, 0x9C, 0x82, 0x89, 0xF6, 0x9C, 0x87, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xAF, /* 0x2C-0x2F */ + 0x00, 0x00, 0x9C, 0x84, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x8A, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x9C, 0x8C, 0x9C, 0x96, 0x9C, 0x94, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x91, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x90, 0x97, 0xF6, /* 0x48-0x4B */ + 0x00, 0x00, 0x9C, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8B, 0xB0, 0x00, 0x00, 0x8D, 0x50, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x8F, 0x9A, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x9C, 0x99, 0x9C, 0x8B, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xED, 0xA0, 0x00, 0x00, 0x9C, 0x8F, /* 0x5C-0x5F */ + 0x9C, 0x7E, 0x00, 0x00, 0x89, 0xF8, 0x9C, 0x93, /* 0x60-0x63 */ + 0x9C, 0x95, 0x92, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x8D, 0xA6, 0x89, 0xB6, 0x9C, 0x8D, 0x9C, 0x98, /* 0x68-0x6B */ + 0x9C, 0x97, 0x8B, 0xB1, 0x00, 0x00, 0x91, 0xA7, /* 0x6C-0x6F */ + 0x8A, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x8C, 0x62, 0x00, 0x00, 0x9C, 0x8E, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x9C, 0x9A, 0x00, 0x00, 0x9C, 0x9D, /* 0x80-0x83 */ + 0x9C, 0x9F, 0xED, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x8E, 0xBB, 0xED, 0xA2, 0x9C, 0xA5, /* 0x88-0x8B */ + 0x92, 0xEE, 0x9C, 0x9B, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xA3, 0x00, 0x00, /* 0x90-0x93 */ + 0x89, 0xF7, 0x00, 0x00, 0x9C, 0xA1, 0x9C, 0xA2, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0x9E, 0x9C, 0xA0, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xE5, /* 0x9C-0x9F */ + 0x97, 0x49, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB3, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x78, 0x9C, 0xA4, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x94, 0x59, 0x88, 0xAB, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xDF, 0x9C, 0x7B, /* 0xB0-0xB3 */ + 0x9C, 0xAA, 0x9C, 0xAE, 0x96, 0xE3, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x9C, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x93, 0x89, 0x9C, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x8F, 0xEE, 0x9C, 0xAD, 0x93, 0xD5, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x98, 0x66, 0x00, 0x00, 0x9C, 0xA9, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xED, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x9C, 0xAF, 0x00, 0x00, 0x8D, 0x9B, 0x00, 0x00, /* 0xD8-0xDB */ + 0x90, 0xC9, 0x00, 0x00, 0xED, 0xA3, 0x88, 0xD2, /* 0xDC-0xDF */ + 0x9C, 0xA8, 0x9C, 0xA6, 0x00, 0x00, 0x91, 0x79, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x9C, /* 0xE4-0xE7 */ + 0x8E, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x91, 0xC4, 0x9C, 0xBB, 0xED, 0xA6, 0x91, 0x7A, /* 0xF0-0xF3 */ + 0x9C, 0xB6, 0x00, 0x00, 0x9C, 0xB3, 0x9C, 0xB4, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x8E, 0xE4, 0x9C, 0xB7, 0x9C, 0xBA, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_61[512] = { + 0x9C, 0xB5, 0x8F, 0x44, 0x00, 0x00, 0x9C, 0xB8, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xB2, 0x00, 0x00, /* 0x04-0x07 */ + 0x96, 0xFA, 0x96, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x9C, 0xBC, 0x9C, 0xBD, 0x88, 0xD3, /* 0x0C-0x0F */ + 0x00, 0x00, 0xED, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x9C, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xF0, 0x88, 0xA4, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB4, /* 0x1C-0x1F */ + 0xED, 0xA5, 0x9C, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xC1, /* 0x24-0x27 */ + 0x9C, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x9C, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xED, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x9C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0xED, 0xA8, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x9C, 0xC4, 0x9C, 0xC7, 0x9C, 0xBF, 0x9C, 0xC3, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xC8, 0x00, 0x00, /* 0x40-0x43 */ + 0x9C, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xBE, /* 0x44-0x47 */ + 0x8E, 0x9C, 0x00, 0x00, 0x9C, 0xC2, 0x91, 0xD4, /* 0x48-0x4B */ + 0x8D, 0x51, 0x9C, 0xB0, 0x90, 0x54, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xD6, /* 0x50-0x53 */ + 0x00, 0x00, 0x95, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x9C, 0xCC, 0x9C, 0xCD, 0x9C, 0xCE, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x9C, 0xD5, 0x00, 0x00, 0x9C, 0xD4, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x9D, 0x8A, 0xB5, /* 0x60-0x63 */ + 0x00, 0x00, 0x9C, 0xD2, 0x00, 0x00, 0x8C, 0x64, /* 0x64-0x67 */ + 0x8A, 0x53, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xCF, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xB6, 0x9C, 0xD1, /* 0x6C-0x6F */ + 0x88, 0xD4, 0x9C, 0xD3, 0x00, 0x00, 0x9C, 0xCA, /* 0x70-0x73 */ + 0x9C, 0xD0, 0x9C, 0xD7, 0x8C, 0x63, 0x9C, 0xCB, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x7C, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x97, 0x4A, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xDA, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xDE, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x9E, 0x00, 0x00, /* 0x8C-0x8F */ + 0x97, 0xF7, 0x9C, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x9C, 0xDC, 0x00, 0x00, 0x9C, 0xD9, 0x00, 0x00, /* 0x94-0x97 */ + 0xED, 0xAA, 0x9C, 0xD8, 0x9C, 0xDD, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x95, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x93, 0xB2, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x8C, 0x65, 0x00, 0x00, 0x9C, 0xE0, /* 0xA8-0xAB */ + 0x9C, 0xDB, 0x00, 0x00, 0x9C, 0xE1, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x9B, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xAF, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xE9, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB6, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xE7, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xE8, 0x8D, 0xA7, /* 0xC4-0xC7 */ + 0x9C, 0xE6, 0x9C, 0xE4, 0x9C, 0xE3, 0x9C, 0xEA, /* 0xC8-0xCB */ + 0x9C, 0xE2, 0x9C, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x89, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xEE, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x9C, 0xED, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0xA6, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x9C, 0xF1, 0x00, 0x00, 0x9C, 0xEF, 0x9C, 0xE5, /* 0xF4-0xF7 */ + 0x8C, 0x9C, 0x00, 0x00, 0x9C, 0xF0, 0x00, 0x00, /* 0xF8-0xFB */ + 0x9C, 0xF4, 0x9C, 0xF3, 0x9C, 0xF5, 0x9C, 0xF2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0x9C, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x9C, 0xF7, 0x9C, 0xF8, 0x95, 0xE8, 0x00, 0x00, /* 0x08-0x0B */ + 0x9C, 0xFA, 0x9C, 0xF9, 0x8F, 0x5E, 0x00, 0x00, /* 0x0C-0x0F */ + 0x90, 0xAC, 0x89, 0xE4, 0x89, 0xFA, 0xED, 0xAB, /* 0x10-0x13 */ + 0x9C, 0xFB, 0x00, 0x00, 0x88, 0xBD, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xCA, 0x9C, 0xFC, /* 0x18-0x1B */ + 0x00, 0x00, 0xE6, 0xC1, 0x9D, 0x40, 0x8C, 0x81, /* 0x1C-0x1F */ + 0x00, 0x00, 0x9D, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xED, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x42, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x43, 0x8B, 0x59, /* 0x2C-0x2F */ + 0x9D, 0x44, 0x00, 0x00, 0x9D, 0x45, 0x9D, 0x46, /* 0x30-0x33 */ + 0x91, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x8C, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x96, 0xDF, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x5B, /* 0x3C-0x3F */ + 0x8F, 0x8A, 0x9D, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xEE, /* 0x44-0x47 */ + 0xE7, 0xBB, 0x94, 0xE0, 0x00, 0x00, 0x8E, 0xE8, /* 0x48-0x4B */ + 0x00, 0x00, 0x8D, 0xCB, 0x9D, 0x48, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xC5, /* 0x50-0x53 */ + 0x00, 0x00, 0x95, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x91, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x4B, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x49, 0x00, 0x00, /* 0x5C-0x5F */ + 0x9D, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x4A, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x9D, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xAF, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x88, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x7D, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x94, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x9D, 0x4E, 0x00, 0x00, 0x9D, 0x51, 0x8F, 0xB3, /* 0x7C-0x7F */ + + 0x8B, 0x5A, 0x00, 0x00, 0x9D, 0x4F, 0x9D, 0x56, /* 0x80-0x83 */ + 0x8F, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x9D, 0x50, 0x94, 0x63, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x97, 0x7D, 0x9D, 0x52, 0x9D, 0x53, /* 0x90-0x93 */ + 0x9D, 0x57, 0x93, 0x8A, 0x9D, 0x54, 0x8D, 0x52, /* 0x94-0x97 */ + 0x90, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x65, /* 0x98-0x9B */ + 0x94, 0xB2, 0x00, 0x00, 0x91, 0xF0, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xAC, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xE2, /* 0xA8-0xAB */ + 0x9D, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x95, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x92, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x96, 0x95, 0x00, 0x00, 0x9D, 0x5A, /* 0xB8-0xBB */ + 0x89, 0x9F, 0x92, 0x8A, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x63, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x92, 0x53, 0x9D, 0x5D, 0x9D, 0x64, /* 0xC4-0xC7 */ + 0x9D, 0x5F, 0x9D, 0x66, 0x9D, 0x62, 0x00, 0x00, /* 0xC8-0xCB */ + 0x9D, 0x61, 0x94, 0x8F, 0x00, 0x00, 0x9D, 0x5B, /* 0xCC-0xCF */ + 0x89, 0xFB, 0x9D, 0x59, 0x8B, 0x91, 0x91, 0xF1, /* 0xD0-0xD3 */ + 0x9D, 0x55, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x58, /* 0xD4-0xD7 */ + 0x8D, 0x53, 0x90, 0xD9, 0x00, 0x00, 0x8F, 0xB5, /* 0xD8-0xDB */ + 0x9D, 0x60, 0x94, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x8B, 0x92, 0x8A, 0x67, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x8A, 0x87, 0x90, 0x40, 0x9D, 0x68, 0x9D, 0x6D, /* 0xEC-0xEF */ + 0x00, 0x00, 0x9D, 0x69, 0x00, 0x00, 0x8C, 0x9D, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x9D, 0x6E, 0x8E, 0x41, 0x8D, 0x89, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x45, 0x9D, 0x5C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0x00, 0x00, 0x8E, 0x9D, 0x9D, 0x6B, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x77, /* 0x04-0x07 */ + 0x9D, 0x6C, 0x88, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x9D, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x92, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x8B, 0x93, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xB2, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x6A, /* 0x24-0x27 */ + 0x88, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xC1, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x55, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0xF0, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x94, 0xD2, 0x9D, 0x70, 0x91, 0x7D, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x91, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x8E, 0x4A, 0x9D, 0x71, 0x00, 0x00, 0x9D, 0x73, /* 0x4C-0x4F */ + 0x9D, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x95, 0xDF, 0x00, 0x00, 0x92, 0xBB, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x91, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xF9, /* 0x64-0x67 */ + 0x8E, 0xCC, 0x9D, 0x80, 0x00, 0x00, 0x9D, 0x7E, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x98, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x9E, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x78, 0x8F, 0xB7, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0xE6, 0x94, 0x50, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x9D, 0x76, 0x00, 0x00, 0x00, 0x00, 0x91, 0x7C, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x8E, 0xF6, 0x9D, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x8F, 0xB6, 0x00, 0x00, 0x9D, 0x75, 0x9D, 0x7A, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x72, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x74, 0x00, 0x00, /* 0x94-0x97 */ + 0x8C, 0x40, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x7C, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x7C, /* 0x9C-0x9F */ + 0x97, 0xA9, 0x8D, 0xCC, 0x92, 0x54, 0x9D, 0x79, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x90, 0xDA, 0x00, 0x00, 0x8D, 0x54, /* 0xA4-0xA7 */ + 0x90, 0x84, 0x89, 0x86, 0x91, 0x5B, 0x9D, 0x77, /* 0xA8-0xAB */ + 0x8B, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x66, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x92, 0xCD, 0x9D, 0x7D, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x7E, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x81, 0x00, 0x00, /* 0xBC-0xBF */ + 0x9D, 0x83, 0x00, 0x00, 0x00, 0x00, 0x91, 0xB5, /* 0xC0-0xC3 */ + 0x9D, 0x89, 0x00, 0x00, 0x9D, 0x84, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x9D, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x60, /* 0xCC-0xCF */ + 0x92, 0xF1, 0x00, 0x00, 0x9D, 0x87, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x4B, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x67, 0x8A, 0xB7, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x88, 0xAC, 0x00, 0x00, 0x9D, 0x85, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x9D, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xF6, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x89, 0x87, 0xED, 0xAD, 0x9D, 0x88, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x68, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_64[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x8C, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x91, 0xB9, 0x00, 0x00, 0x9D, 0x93, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x8D, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x8A, 0x9D, 0x91, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x9D, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x8E, 0x00, 0x00, /* 0x24-0x27 */ + 0x9D, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x94, 0xC0, 0x93, 0x8B, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x9D, 0x8B, 0x00, 0x00, 0x9D, 0x8F, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x67, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xEF, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xDB, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x97, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x93, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xED, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x94, /* 0x64-0x67 */ + 0x00, 0x00, 0x96, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x95, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x96, 0x00, 0x00, /* 0x74-0x77 */ + 0x96, 0xCC, 0x00, 0x00, 0x90, 0xA0, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x82, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x9D, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x54, 0x9D, 0x9A, /* 0x90-0x93 */ + 0x00, 0x00, 0x9D, 0x99, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x51, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xED, 0xAF, 0x93, 0xB3, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x93, 0x50, 0x9D, 0x9B, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x9D, 0x9C, 0x00, 0x00, 0x95, 0x8F, /* 0xA8-0xAB */ + 0x00, 0x00, 0x94, 0x64, 0x8E, 0x42, 0x00, 0x00, /* 0xAC-0xAF */ + 0x90, 0xEF, 0x00, 0x00, 0x96, 0x6F, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x8A, 0x68, 0x00, 0x00, 0x9D, 0xA3, /* 0xB8-0xBB */ + 0x9D, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x97, 0x69, 0x9D, 0xA5, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x9D, 0xA1, 0x00, 0x00, 0x9D, 0xA2, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x91, 0x80, 0xED, 0xB0, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xA0, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x9D, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x9D, 0xA4, 0x00, 0x00, 0x9D, 0x9F, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x9D, 0xA9, 0x9D, 0xAA, 0x93, 0x46, 0x9D, 0xAC, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x43, 0x9D, 0xA7, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x8B, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xAD, /* 0xEC-0xEF */ + 0x00, 0x00, 0x9D, 0xA6, 0x9D, 0xB1, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x9D, 0xB0, 0x00, 0x00, 0x9D, 0xAF, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xB2, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x9D, 0xB4, 0x8F, 0xEF, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0x9D, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x9D, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x9D, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x9D, 0xB6, 0x9D, 0x90, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xB9, /* 0x20-0x23 */ + 0x9D, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0x98, 0x9D, 0xBA, /* 0x28-0x2B */ + 0x9D, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x78, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x9D, 0xBB, 0x9D, 0xBC, 0x9D, 0xBE, 0x9D, 0xBD, /* 0x34-0x37 */ + 0x9D, 0xBF, 0x89, 0xFC, 0x00, 0x00, 0x8D, 0x55, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xFA, 0x90, 0xAD, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x8C, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x9D, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x9D, 0xC4, 0xED, 0xB1, 0x95, 0x71, /* 0x4C-0x4F */ + 0x00, 0x00, 0x8B, 0x7E, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x9D, 0xC3, 0x9D, 0xC2, 0x94, 0x73, /* 0x54-0x57 */ + 0x9D, 0xC5, 0x8B, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x9D, 0xC7, 0x9D, 0xC6, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xB8, 0x8E, 0x55, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0xD6, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x8C, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x90, 0x94, 0x00, 0x00, 0x9D, 0xC8, 0x00, 0x00, /* 0x70-0x73 */ + 0x90, 0xAE, 0x93, 0x47, 0x00, 0x00, 0x95, 0x7E, /* 0x74-0x77 */ + 0x9D, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xCA, 0x9D, 0xCB, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xB6, /* 0x84-0x87 */ + 0x9B, 0x7C, 0x90, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x95, 0x6B, 0x00, 0x00, 0x8D, 0xD6, 0x00, 0x00, /* 0x8C-0x8F */ + 0x94, 0xE3, 0x94, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x6C, /* 0x94-0x97 */ + 0x00, 0x00, 0x97, 0xBF, 0x00, 0x00, 0x9D, 0xCD, /* 0x98-0x9B */ + 0x8E, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xCE, /* 0x9C-0x9F */ + 0x00, 0x00, 0x88, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x8B, 0xD2, 0x90, 0xCB, 0x00, 0x00, 0x95, 0x80, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xCF, /* 0xA8-0xAB */ + 0x8E, 0x61, 0x92, 0x66, 0x00, 0x00, 0x8E, 0x7A, /* 0xAC-0xAF */ + 0x90, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xD0, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x95, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x89, 0x97, 0x8E, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x9D, 0xD3, 0x00, 0x00, 0x9D, 0xD1, /* 0xC0-0xC3 */ + 0x9D, 0xD4, 0x97, 0xB7, 0x9D, 0xD2, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xF9, /* 0xC8-0xCB */ + 0x9D, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x91, 0xB0, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xD6, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xF8, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x9D, 0xD8, 0x00, 0x00, 0x9D, 0xD7, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x9D, 0xD9, 0x9D, 0xDA, 0x8A, 0xF9, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x93, 0xFA, 0x92, 0x55, 0x8B, 0x8C, /* 0xE4-0xE7 */ + 0x8E, 0x7C, 0x91, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x8F, 0x7B, 0x88, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x9D, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xA0, 0x9D, 0xDF, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_66[512] = { + 0xED, 0xB2, 0x00, 0x00, 0x8D, 0x56, 0x9D, 0xDE, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xA9, 0x8F, 0xB8, /* 0x04-0x07 */ + 0x00, 0x00, 0xED, 0xB5, 0x9D, 0xDD, 0x00, 0x00, /* 0x08-0x0B */ + 0x8F, 0xB9, 0x00, 0x00, 0x96, 0xBE, 0x8D, 0xA8, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xD5, /* 0x10-0x13 */ + 0x90, 0xCC, 0xED, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x9D, 0xE4, 0x00, 0x00, 0xED, 0xB7, 0x90, 0xAF, /* 0x1C-0x1F */ + 0x89, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xED, 0xB8, 0x8F, 0x74, 0x00, 0x00, 0x96, 0x86, /* 0x24-0x27 */ + 0x8D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x8F, 0xBA, 0xED, 0xB6, 0x90, 0xA5, /* 0x2C-0x2F */ + 0x00, 0x00, 0xED, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x9D, 0xE3, 0x9D, 0xE1, 0x9D, 0xE2, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xB4, /* 0x38-0x3B */ + 0x92, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x45, /* 0x3C-0x3F */ + 0x00, 0x00, 0x9D, 0xE8, 0x8E, 0x9E, 0x8D, 0x57, /* 0x40-0x43 */ + 0x9D, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x9D, 0xE7, 0x00, 0x00, 0x90, 0x57, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0xE5, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x4E, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xBA, /* 0x54-0x57 */ + 0x00, 0x00, 0xED, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x9D, 0xEA, 0x9D, 0xE9, 0x9D, 0xEE, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xEF, 0x00, 0x00, /* 0x60-0x63 */ + 0x9D, 0xEB, 0xED, 0xB9, 0x8A, 0x41, 0x9D, 0xEC, /* 0x64-0x67 */ + 0x9D, 0xED, 0x94, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x81, 0x8C, 0x69, /* 0x6C-0x6F */ + 0x9D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xED, 0xBD, /* 0x70-0x73 */ + 0x90, 0xB0, 0x00, 0x00, 0x8F, 0xBB, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x71, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x8B, 0xC5, 0x00, 0x00, 0x9D, 0xF1, /* 0x80-0x83 */ + 0x9D, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x89, 0xC9, /* 0x84-0x87 */ + 0x9D, 0xF2, 0x9D, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xF3, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x8F, 0x8B, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x67, 0x88, 0xC3, /* 0x94-0x97 */ + 0x9D, 0xF6, 0xED, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x9D, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xED, 0xBF, 0x00, 0x00, 0x92, 0xA8, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xEF, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x62, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xE9, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xC0, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x96, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x9E, 0x41, 0x9D, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x9D, 0xFC, 0x00, 0x00, 0x9D, 0xFB, 0xED, 0xC1, /* 0xBC-0xBF */ + 0x00, 0x00, 0x9D, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x9E, 0x40, 0x00, 0x00, 0x00, 0x00, 0x93, 0xDC, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x9D, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x42, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x8F, 0x8C, 0x9E, 0x43, 0x00, 0x00, /* 0xD8-0xDB */ + 0x97, 0x6A, 0x94, 0x98, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x9E, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x46, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x9E, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x9E, 0x48, 0x00, 0x00, 0x8B, 0xC8, 0x89, 0x67, /* 0xF0-0xF3 */ + 0x8D, 0x58, 0x9E, 0x49, 0x00, 0x00, 0x9E, 0x4A, /* 0xF4-0xF7 */ + 0x8F, 0x91, 0x91, 0x82, 0xED, 0xC2, 0xED, 0x4A, /* 0xF8-0xFB */ + 0x99, 0xD6, 0x91, 0x5D, 0x91, 0x5C, 0x91, 0xD6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0x8D, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x98, 0xF0, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x8C, 0x8E, 0x97, 0x4C, 0x00, 0x00, 0x95, 0xFC, /* 0x08-0x0B */ + 0x00, 0x00, 0x95, 0x9E, 0xED, 0xC3, 0x9E, 0x4B, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x8D, 0xF1, 0x92, 0xBD, 0x9E, 0x4C, 0x98, 0x4E, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x5D, /* 0x18-0x1B */ + 0x00, 0x00, 0x92, 0xA9, 0x9E, 0x4D, 0x8A, 0xFA, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x4E, 0x9E, 0x4F, /* 0x24-0x27 */ + 0x96, 0xD8, 0x00, 0x00, 0x96, 0xA2, 0x96, 0x96, /* 0x28-0x2B */ + 0x96, 0x7B, 0x8E, 0x44, 0x9E, 0x51, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8E, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x96, 0x70, 0x00, 0x00, 0x9E, 0x53, 0x9E, 0x56, /* 0x34-0x37 */ + 0x9E, 0x55, 0x00, 0x00, 0x8A, 0xF7, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x8B, 0x80, 0x00, 0x00, 0x9E, 0x52, /* 0x3C-0x3F */ + 0x00, 0x00, 0x9E, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x57, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x90, 0x99, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x9B, 0x88, 0xC7, /* 0x4C-0x4F */ + 0x8D, 0xDE, 0x91, 0xBA, 0x00, 0x00, 0x8E, 0xDB, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xF1, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x9E, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x93, 0x6D, 0x00, 0x00, 0x9E, 0x58, 0x91, 0xA9, /* 0x5C-0x5F */ + 0x9E, 0x59, 0x8F, 0xF0, 0x96, 0xDB, 0x9E, 0x5B, /* 0x60-0x63 */ + 0x9E, 0x5C, 0x97, 0x88, 0xED, 0xC5, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x61, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x8D, 0x59, 0x00, 0x00, 0x94, 0x74, /* 0x6C-0x6F */ + 0x9E, 0x5E, 0x93, 0x8C, 0x9D, 0xDC, 0x9D, 0xE0, /* 0x70-0x73 */ + 0x00, 0x00, 0x8B, 0x6E, 0x00, 0x00, 0x94, 0x66, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x9E, 0x60, 0x00, 0x00, 0x8F, 0xBC, 0x94, 0xC2, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x9E, 0x66, 0x00, 0x00, 0x94, 0xF8, /* 0x84-0x87 */ + 0x00, 0x00, 0x9E, 0x5D, 0x00, 0x00, 0x9E, 0x63, /* 0x88-0x8B */ + 0x9E, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x90, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x96, 0x8D, 0x00, 0x00, 0x97, 0xD1, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x87, 0x00, 0x00, /* 0x98-0x9B */ + 0x89, 0xCA, 0x8E, 0x7D, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x98, 0x67, 0x9E, 0x65, 0x90, 0x95, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x64, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x9E, 0x5F, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xCD, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x6B, /* 0xB0-0xB3 */ + 0x9E, 0x69, 0x00, 0x00, 0x89, 0xCB, 0x9E, 0x67, /* 0xB4-0xB7 */ + 0x9E, 0x6D, 0x9E, 0x73, 0x00, 0x00, 0xED, 0xC6, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xED, 0xC8, 0x91, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x95, 0xBF, 0x00, 0x00, 0x9E, 0x75, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x41, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x74, 0x94, 0x90, /* 0xCC-0xCF */ + 0x96, 0x5E, 0x8A, 0xB9, 0x00, 0x00, 0x90, 0xF5, /* 0xD0-0xD3 */ + 0x8F, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x92, 0xD1, 0x00, 0x00, 0x97, 0x4D, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x9E, 0x70, 0x9E, 0x6F, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x71, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x9E, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x76, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x9E, 0x6C, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x9E, 0x6A, 0x00, 0x00, 0x9E, 0x72, 0x9E, 0x68, /* 0xEC-0xEF */ + 0x00, 0x00, 0x92, 0x8C, 0x00, 0x00, 0x96, 0xF6, /* 0xF0-0xF3 */ + 0x8E, 0xC4, 0x8D, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xB8, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x8F, 0x8A, 0x60, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0x00, 0x00, 0xED, 0xC9, 0x92, 0xCC, 0x93, 0xC8, /* 0x00-0x03 */ + 0x89, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xF0, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xB2, 0x8C, 0x49, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x78, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x8D, 0x5A, 0x8A, 0x9C, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x9E, 0x7A, 0x8A, 0x94, 0x9E, 0x81, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x7D, 0x00, 0x00, /* 0x30-0x33 */ + 0x90, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x8A, 0x6A, 0x8D, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x8A, 0x69, 0x8D, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x9E, 0x7B, 0x8C, 0x85, 0x8C, 0x6A, 0x93, 0x8D, /* 0x40-0x43 */ + 0xED, 0xCA, 0x00, 0x00, 0x9E, 0x79, 0x00, 0x00, /* 0x44-0x47 */ + 0x88, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x9E, 0x7C, 0x9E, 0x7E, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8B, 0xCB, 0x8C, 0x4B, 0xED, 0xC7, 0x8A, 0xBA, /* 0x50-0x53 */ + 0x8B, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x9E, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x8D, 0xF7, 0x96, 0x91, 0x00, 0x00, 0x8E, 0x56, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x83, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x4F, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x9E, 0x8F, 0x00, 0x00, 0x89, 0xB1, 0x9E, 0x84, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0x95, 0x9E, 0x85, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x97, 0xC0, 0x00, 0x00, 0x9E, 0x8C, /* 0x80-0x83 */ + 0x00, 0x00, 0x94, 0x7E, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x9E, 0x94, 0x00, 0x00, 0x9E, 0x87, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xB2, /* 0x90-0x93 */ + 0x9E, 0x89, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x5B, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x8B, /* 0x98-0x9B */ + 0x00, 0x00, 0x9E, 0x8A, 0x00, 0x00, 0x9E, 0x86, /* 0x9C-0x9F */ + 0x9E, 0x91, 0x00, 0x00, 0x8F, 0xBD, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x9A, 0xEB, 0x8C, 0xE6, /* 0xA4-0xA7 */ + 0x97, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x9E, 0x88, 0x00, 0x00, 0x92, 0xF2, /* 0xAC-0xAF */ + 0x8A, 0x42, 0x8D, 0xAB, 0x00, 0x00, 0x9E, 0x80, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x9E, 0x90, 0x8A, 0x81, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x9E, 0x8E, 0x9E, 0x92, 0x00, 0x00, /* 0xB8-0xBB */ + 0x93, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x8A, 0xFC, 0x00, 0x00, 0x9E, 0xB0, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xED, 0x48, 0x96, 0xC7, 0x9E, 0x97, 0x8A, 0xFB, /* 0xC8-0xCB */ + 0x00, 0x00, 0x9E, 0x9E, 0x00, 0x00, 0xED, 0xCB, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x5F, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x9E, 0x9F, 0x9E, 0xA1, 0x00, 0x00, 0x9E, 0xA5, /* 0xD4-0xD7 */ + 0x9E, 0x99, 0x00, 0x00, 0x92, 0x49, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x8F, /* 0xDC-0xDF */ + 0x9E, 0xA9, 0x9E, 0x9C, 0x00, 0x00, 0x9E, 0xA6, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xA0, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x58, 0x9E, 0xAA, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xB1, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x9E, 0xA8, 0x8A, 0xBB, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_69[512] = { + 0x98, 0x6F, 0x9E, 0x96, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x9E, 0xA4, 0x88, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x9E, 0x98, 0x00, 0x00, 0x00, 0x00, 0x96, 0xB8, /* 0x08-0x0B */ + 0x9E, 0x9D, 0x90, 0x41, 0x92, 0xC5, 0x9E, 0x93, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xA3, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x90, 0x9A, 0x9E, 0xAD, 0x8A, 0x91, /* 0x18-0x1B */ + 0x8C, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x9E, 0xAF, 0x9E, 0x9A, 0x9E, 0xAE, /* 0x20-0x23 */ + 0x00, 0x00, 0x9E, 0xA7, 0x9E, 0x9B, 0x00, 0x00, /* 0x24-0x27 */ + 0x9E, 0xAB, 0x00, 0x00, 0x9E, 0xAC, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x9E, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x93, 0xCC, 0x00, 0x00, 0x9E, 0xA2, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x9E, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x9E, 0xBB, 0x00, 0x00, 0x92, 0xD6, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x6B, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x96, /* 0x50-0x53 */ + 0x9E, 0xB6, 0x91, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x9E, 0xBC, 0x91, 0x5E, 0x00, 0x00, /* 0x58-0x5B */ + 0x9E, 0xB3, 0x9E, 0xC0, 0x9E, 0xBF, 0x00, 0x00, /* 0x5C-0x5F */ + 0x93, 0xED, 0x9E, 0xBE, 0x93, 0xE8, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xED, 0xCD, 0x00, 0x00, 0x9E, 0xC2, 0x9E, 0xB5, /* 0x68-0x6B */ + 0x00, 0x00, 0x8B, 0xC6, 0x9E, 0xB8, 0x8F, 0x7C, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x80, /* 0x70-0x73 */ + 0x9E, 0xBA, 0x8B, 0xC9, 0x00, 0x00, 0x9E, 0xB2, /* 0x74-0x77 */ + 0x9E, 0xB4, 0x9E, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x98, 0x4F, 0x8A, 0x79, 0x9E, 0xB7, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x9E, 0xC1, 0x8A, 0x54, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xE5, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x7C, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x9E, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x98, 0x50, 0x9E, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xED, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x90, 0x59, /* 0x98-0x9B */ + 0x9E, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x9E, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xD0, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xC4, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x9E, 0xE1, 0x9E, 0xC3, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x9E, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xCE, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xC9, 0x9E, 0xC6, /* 0xBC-0xBF */ + 0x00, 0x00, 0x9E, 0xC7, 0x00, 0x00, 0x9E, 0xCF, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xA0, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xCC, 0x8D, 0x5C, /* 0xC8-0xCB */ + 0x92, 0xC6, 0x91, 0x84, 0x9E, 0xCA, 0x00, 0x00, /* 0xCC-0xCF */ + 0x9E, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xC8, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x97, 0x6C, 0x96, 0x8A, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x9E, 0xCD, 0x9E, 0xD7, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xD0, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xDF, /* 0xE4-0xE7 */ + 0x9E, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x9E, 0xE5, /* 0xE8-0xEB */ + 0x00, 0x00, 0x9E, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xDE, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x9E, 0xDD, 0x00, 0x00, 0x92, 0xCE, /* 0xF8-0xFB */ + 0x00, 0x00, 0x91, 0x85, 0x00, 0x00, 0x9E, 0xDB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xD9, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x9E, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xE6, 0x94, 0xF3, /* 0x08-0x0B */ + 0x9E, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xE7, 0x9E, 0xEA, /* 0x10-0x13 */ + 0x9E, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x92, 0x94, /* 0x14-0x17 */ + 0x00, 0x00, 0x95, 0x57, 0x00, 0x00, 0x9E, 0xDA, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xE2, 0x8F, 0xBE, /* 0x1C-0x1F */ + 0x00, 0x00, 0x96, 0xCD, 0x9E, 0xF6, 0x9E, 0xE9, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x8C, 0xA0, 0x89, 0xA1, 0x8A, 0x7E, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xD1, 0x00, 0x00, /* 0x2C-0x2F */ + 0xED, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x8F, 0xBF, 0x9E, 0xEE, 0x00, 0x00, /* 0x34-0x37 */ + 0x9E, 0xF5, 0x8E, 0xF7, 0x8A, 0x92, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x92, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x9E, 0xEB, 0x00, 0x00, 0xED, 0xD3, 0x9E, 0xF0, /* 0x44-0x47 */ + 0x9E, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xB4, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x8B, 0x6B, 0x9E, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x40, /* 0x5C-0x5F */ + 0x00, 0x00, 0x93, 0xC9, 0x9E, 0xF1, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xF3, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xD2, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xED, 0xED, 0xD4, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x9E, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xD5, 0x8A, 0x80, /* 0x7C-0x7F */ + + 0x92, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x9E, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x9E, 0xF8, 0x8C, 0xE7, 0x00, 0x00, /* 0x8C-0x8F */ + 0x9E, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x40, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x9E, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x9E, 0xF9, 0x00, 0x00, 0x9E, 0xFB, 0x9E, 0xFC, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x4B, 0x00, 0x00, /* 0xA8-0xAB */ + 0x9F, 0x47, 0x00, 0x00, 0x9E, 0x8D, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x46, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x9F, 0x45, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x42, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x9E, 0xE8, 0x9F, 0x44, 0x9F, 0x43, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x9F, 0x49, 0x00, 0x00, 0x98, 0x45, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x4C, 0x8B, 0xF9, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x48, 0x9F, 0x4A, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xD6, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xED, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x94, 0xA5, 0x00, 0x00, 0x9F, 0x4D, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x51, 0x9F, 0x4E, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_6B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x97, 0x93, 0x9F, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x9E, 0xDC, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x52, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x53, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x89, 0x54, 0x00, 0x00, 0x9F, 0x55, /* 0x1C-0x1F */ + 0x8C, 0x87, 0x8E, 0x9F, 0x00, 0x00, 0x8B, 0xD3, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xA2, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x7E, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x57, /* 0x34-0x37 */ + 0x9F, 0x56, 0x9F, 0x59, 0x8B, 0x5C, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x8B, 0xD4, 0x8A, 0xBC, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x5C, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x5B, /* 0x44-0x47 */ + 0x00, 0x00, 0x9F, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x89, 0xCC, 0x00, 0x00, 0x92, 0x56, 0x00, 0x00, /* 0x4C-0x4F */ + 0x9F, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xBD, /* 0x50-0x53 */ + 0x9F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x9F, 0x5F, 0x00, 0x00, 0x9F, 0x61, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x62, /* 0x5C-0x5F */ + 0x00, 0x00, 0x9F, 0x63, 0x8E, 0x7E, 0x90, 0xB3, /* 0x60-0x63 */ + 0x8D, 0x9F, 0x00, 0x00, 0x95, 0x90, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x95, 0xE0, 0x98, 0x63, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x95, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xCE, /* 0x70-0x73 */ + 0x97, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x9F, 0x64, 0x9F, 0x65, 0x00, 0x00, 0x8E, 0x80, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x66, /* 0x7C-0x7F */ + + 0x9F, 0x67, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x69, /* 0x80-0x83 */ + 0x9F, 0x68, 0x00, 0x00, 0x96, 0x77, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x8F, 0x7D, 0x8E, 0xEA, 0x8E, 0x63, /* 0x88-0x8B */ + 0x00, 0x00, 0x9F, 0x6A, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x9F, 0x6C, 0x90, 0x42, 0x00, 0x00, /* 0x94-0x97 */ + 0x9F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x6D, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x9F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x6F, 0x9F, 0x70, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x71, /* 0xAC-0xAF */ + 0x00, 0x00, 0x9F, 0x73, 0x9F, 0x72, 0x9F, 0x74, /* 0xB0-0xB3 */ + 0x89, 0xA3, 0x92, 0x69, 0x00, 0x00, 0x9F, 0x75, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x45, 0x8A, 0x6B, /* 0xB8-0xBB */ + 0x9F, 0x76, 0x00, 0x00, 0x00, 0x00, 0x93, 0x61, /* 0xBC-0xBF */ + 0x9A, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x8B, 0x42, 0x9F, 0x77, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x78, /* 0xC8-0xCB */ + 0x00, 0x00, 0x95, 0xEA, 0x96, 0x88, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0xC5, 0x9F, 0x79, /* 0xD0-0xD3 */ + 0x94, 0xE4, 0x00, 0x00, 0xED, 0xD8, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x94, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x96, 0xD1, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x7A, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x7C, /* 0xE8-0xEB */ + 0x9F, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x7E, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x7D, /* 0xF0-0xF3 */ +}; + +static unsigned char u2c_6C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x9F, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x81, /* 0x0C-0x0F */ + 0x00, 0x00, 0x96, 0xAF, 0x00, 0x00, 0x9F, 0x82, /* 0x10-0x13 */ + 0x9F, 0x83, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x43, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x84, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x86, /* 0x20-0x23 */ + 0x9F, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x90, 0x85, 0x00, 0x00, 0x00, 0x00, 0x95, 0x58, /* 0x34-0x37 */ + 0x89, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xC3, 0xED, 0xD9, /* 0x3C-0x3F */ + 0x92, 0xF3, 0x8F, 0x60, 0x8B, 0x81, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xC4, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8E, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x9F, 0x88, 0x00, 0x00, 0x8A, 0xBE, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x98, 0x00, 0x00, /* 0x58-0x5B */ + 0xED, 0xDA, 0x93, 0xF0, 0x9F, 0x87, 0x8D, 0x5D, /* 0x5C-0x5F */ + 0x92, 0x72, 0x00, 0x00, 0x9F, 0x89, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x9F, 0x91, 0x00, 0x00, 0x9F, 0x8A, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xDC, /* 0x6C-0x6F */ + 0x91, 0xBF, 0x00, 0x00, 0x8B, 0x82, 0x9F, 0x92, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x88, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x8B, 0x44, 0x9F, 0x90, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x9F, 0x8E, 0x9F, 0x8B, 0x97, 0x80, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xDB, 0x00, 0x00, /* 0x84-0x87 */ + 0x92, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x93, 0xD7, 0x9F, 0x8C, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x9F, 0x94, 0x00, 0x00, 0x9F, 0x93, 0x8C, 0x42, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xAB, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x8D, 0xB9, 0x9F, 0x8D, 0x9F, 0x8F, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x96, 0x76, 0x91, 0xF2, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x97, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x9C, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x9F, 0x9D, 0x00, 0x00, 0x89, 0xCD, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x95, 0xA6, 0x96, 0xFB, 0x9F, 0x9F, 0x8E, 0xA1, /* 0xB8-0xBB */ + 0x8F, 0xC0, 0x9F, 0x98, 0x9F, 0x9E, 0x89, 0x88, /* 0xBC-0xBF */ + 0x00, 0x00, 0x8B, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x9F, 0x95, 0x9F, 0x9A, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x90, 0xF2, 0x94, 0x91, 0x00, 0x00, /* 0xC8-0xCB */ + 0x94, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0x97, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x96, 0x40, 0x00, 0x00, 0x9F, 0x99, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x9F, 0xA2, 0xED, 0xDD, 0x9F, 0xA0, /* 0xD8-0xDB */ + 0x00, 0x00, 0x9F, 0x9B, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x96, 0x41, 0x94, 0x67, 0x8B, 0x83, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x93, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x92, 0x8D, 0x00, 0x00, 0x9F, 0xA3, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xA1, /* 0xEC-0xEF */ + 0x91, 0xD7, 0x9F, 0x96, 0x00, 0x00, 0x89, 0x6A, /* 0xF0-0xF3 */ +}; + +static unsigned char u2c_6D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xED, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x6D, /* 0x08-0x0B */ + 0x9F, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xAD, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xF4, /* 0x14-0x17 */ + 0x00, 0x00, 0x9F, 0xAA, 0x00, 0x00, 0x97, 0x8C, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0xB4, 0x9F, 0xA4, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x92, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x89, 0x6B, 0x8D, 0x5E, 0x9F, 0xA7, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x46, 0x9F, 0xAC, /* 0x30-0x33 */ + 0x00, 0x00, 0x9F, 0xAB, 0x9F, 0xA6, 0x00, 0x00, /* 0x34-0x37 */ + 0x9F, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x88, /* 0x38-0x3B */ + 0x00, 0x00, 0x9F, 0xA8, 0x94, 0x68, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x97, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x8F, 0xF2, 0x90, 0xF3, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x9F, 0xB4, 0x9F, 0xB2, 0x00, 0x00, /* 0x58-0x5B */ + 0x95, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xAF, /* 0x60-0x63 */ + 0x9F, 0xB1, 0x00, 0x00, 0x89, 0x59, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x8D, 0x5F, 0x98, 0x51, 0x00, 0x00, /* 0x68-0x6B */ + 0x8A, 0x5C, 0x00, 0x00, 0x95, 0x82, 0xED, 0xE0, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x97, 0x81, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x43, /* 0x74-0x77 */ + 0x90, 0x5A, 0x9F, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x9F, 0xB8, 0x00, 0x00, 0xED, 0xDF, /* 0x84-0x87 */ + 0x8F, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x97, 0x4F, 0x00, 0x00, 0x9F, 0xB5, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xB0, /* 0x90-0x93 */ + 0x00, 0x00, 0x9F, 0xB6, 0xED, 0xE1, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x97, 0xDC, 0x00, 0x00, 0x93, 0x93, /* 0x98-0x9B */ + 0x93, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xED, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x55, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x74, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x9F, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x9F, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x97, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x97, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x9F, 0xC6, 0x9F, 0xC0, 0x9F, 0xBD, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xD2, /* 0xC8-0xCB */ + 0x9F, 0xC3, 0x00, 0x00, 0x00, 0x00, 0xED, 0xE3, /* 0xCC-0xCF */ + 0x00, 0x00, 0x8F, 0x69, 0x9F, 0xC5, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x9F, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x93, 0x91, 0x9F, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xC2, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x92, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x9F, 0xC9, 0x00, 0x00, 0x9F, 0xBE, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x9F, 0xC4, 0x00, 0x00, 0x9F, 0xCB, 0x88, 0xFA, /* 0xE8-0xEB */ + 0x9F, 0xC1, 0x00, 0x00, 0x9F, 0xCC, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x90, 0x5B, 0xED, 0xE5, 0x8F, 0x7E, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x95, 0xA3, 0x00, 0x00, 0x8D, 0xAC, /* 0xF4-0xF7 */ + 0xED, 0xE4, 0x9F, 0xB9, 0x9F, 0xC7, 0x93, 0x59, /* 0xF8-0xFB */ + 0xED, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x90, 0xB4, 0x00, 0x00, 0x8A, 0x89, /* 0x04-0x07 */ + 0x8D, 0xCF, 0x8F, 0xC2, 0x9F, 0xBB, 0x8F, 0x61, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x6B, /* 0x10-0x13 */ + 0x00, 0x00, 0x9F, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x9F, 0xD0, 0x8F, 0x8D, 0x8C, 0xB8, /* 0x18-0x1B */ + 0x00, 0x00, 0x9F, 0xDF, 0x00, 0x00, 0x9F, 0xD9, /* 0x1C-0x1F */ + 0x8B, 0x94, 0x93, 0x6E, 0x00, 0x00, 0x9F, 0xD4, /* 0x20-0x23 */ + 0x9F, 0xDD, 0x88, 0xAD, 0x89, 0x51, 0xED, 0xE9, /* 0x24-0x27 */ + 0x00, 0x00, 0x89, 0xB7, 0x00, 0x00, 0x9F, 0xD6, /* 0x28-0x2B */ + 0x91, 0xAA, 0x9F, 0xCD, 0x9F, 0xCF, 0x8D, 0x60, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x9F, 0xE0, 0xED, 0xE7, 0x9F, 0xDB, 0x00, 0x00, /* 0x38-0x3B */ + 0xED, 0xEA, 0x00, 0x00, 0x9F, 0xD3, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xDA, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xA9, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x9F, 0xD8, 0x9F, 0xDC, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xCE, 0x00, 0x00, /* 0x54-0x57 */ + 0x8F, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x92, 0x58, /* 0x58-0x5B */ + 0xED, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xD2, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x4E, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xD5, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xCE, 0x93, 0x92, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xD1, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xD7, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x70, 0x8E, 0xBC, /* 0x7C-0x7F */ + + 0x96, 0x9E, 0x00, 0x00, 0x9F, 0xE1, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x94, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xED, /* 0x8C-0x8F */ + 0x8C, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x80, 0x00, 0x00, /* 0x94-0x97 */ + 0x9F, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x97, 0xAD, 0x8D, 0x61, 0x00, 0x00, 0x9F, 0xF0, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0xEC, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x9F, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xE2, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xE8, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xEA, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x6E, 0x9F, 0xE5, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x4D, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x9F, 0xE7, 0x00, 0x00, 0xED, 0xEB, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xEF, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x9F, 0xE9, 0x96, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x9F, 0xE4, 0x00, 0x00, 0x8E, 0xA0, /* 0xC8-0xCB */ + 0x9F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x8A, 0x8A, 0x00, 0x00, 0x9F, 0xE6, /* 0xD0-0xD3 */ + 0x9F, 0xEB, 0x9F, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x91, 0xEA, 0x91, 0xD8, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x9F, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x9F, 0xFA, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xF8, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x93, 0x48, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x42, /* 0xF4-0xF7 */ + 0x9F, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0xF6, 0x9F, 0xDE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0x00, 0x00, 0x8B, 0x99, 0x95, 0x59, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xBD, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x8D, 0x97, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x52, /* 0x0C-0x0F */ + 0x00, 0x00, 0x9F, 0xF2, 0x00, 0x00, 0xE0, 0x41, /* 0x10-0x13 */ + 0x89, 0x89, 0x91, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x94, 0x99, 0x00, 0x00, 0x8A, 0xBF, 0x97, 0xF8, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x9F, /* 0x28-0x2B */ + 0x92, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x9F, 0xF9, 0x9F, 0xFB, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x91, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x40, 0x9F, 0xF7, /* 0x3C-0x3F */ + 0x00, 0x00, 0x9F, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x8A, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x8C, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xE0, 0x4E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x49, /* 0x58-0x5B */ + 0x90, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x83, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x8F, 0x81, 0x00, 0x00, 0xE0, 0x52, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xE0, 0x4B, 0x92, 0xAA, 0xE0, 0x48, /* 0x6C-0x6F */ + 0x92, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE0, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xE0, 0x45, 0x00, 0x00, 0xE0, 0x44, 0x00, 0x00, /* 0x78-0x7B */ + 0xE0, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xE0, 0x47, 0xE0, 0x46, 0xE0, 0x4C, 0x00, 0x00, /* 0x80-0x83 */ + 0x90, 0x9F, 0x00, 0x00, 0xE0, 0x43, 0x00, 0x00, /* 0x84-0x87 */ + 0xED, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x4F, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE0, 0x50, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xC0, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE0, 0x55, 0x00, 0x00, 0xE0, 0x54, /* 0xA0-0xA3 */ + 0xE0, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x59, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x93, 0x62, 0x00, 0x00, 0xE0, 0x53, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xED, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE0, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x8C, 0x83, 0x91, 0xF7, 0xE0, 0x51, 0x94, 0x5A, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x58, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE0, 0x5D, 0xE0, 0x5B, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE0, 0x5E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x61, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x5A, /* 0xDC-0xDF */ + 0x8D, 0x8A, 0x94, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x9F, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x94, /* 0xE8-0xEB */ + 0xE0, 0x5C, 0x00, 0x00, 0xE0, 0x60, 0x91, 0xF3, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE0, 0x5F, 0x00, 0x00, 0xE0, 0x4A, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xED, 0xEE, 0xE8, 0x89, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x64, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x68, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0x00, 0x00, 0xE0, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xED, 0xEF, 0x00, 0x00, 0xED, 0xF0, /* 0x04-0x07 */ + 0x00, 0x00, 0xE0, 0x62, 0x00, 0x00, 0xE0, 0x63, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x67, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE0, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x95, 0x6D, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE0, 0x6D, 0x00, 0x00, 0xE0, 0x6A, 0xE0, 0x69, /* 0x18-0x1B */ + 0x00, 0x00, 0xE0, 0x6C, 0x93, 0xD2, 0xE0, 0x6E, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x95, 0x91, 0xEB, /* 0x24-0x27 */ + 0xED, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x90, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE0, 0x6F, 0x00, 0x00, 0xE0, 0x71, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x70, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x9F, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xE0, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x93, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x73, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xCE, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x94, /* 0x6C-0x6F */ + 0x8A, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x8B, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x8E, 0xDC, 0x8D, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xED, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x98, 0x46, 0x90, 0x86, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x8A, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x75, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xE0, 0x74, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xF3, /* 0xA8-0xAB */ + 0xE0, 0x78, 0x92, 0x59, 0xE0, 0x7B, 0xE0, 0x76, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7A, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE0, 0x79, 0x93, 0x5F, 0x88, 0xD7, 0xED, 0x46, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x97, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x7D, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x47, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE0, 0x7E, 0x00, 0x00, 0xE0, 0x7C, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE0, 0x77, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x96, 0x42, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE0, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xED, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE0, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xF4, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x89, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE0, 0x84, 0x95, 0xB0, 0x00, 0x00, /* 0x18-0x1B */ + 0xE0, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x96, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xC5, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x52, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x8F, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xF7, 0xED, 0xF8, /* 0x44-0x47 */ + 0x00, 0x00, 0x97, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE0, 0x8A, 0x00, 0x00, 0x90, 0xF7, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE0, 0x86, 0xE0, 0x8B, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x89, 0x8C, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xED, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x89, 0x00, 0x00, /* 0x60-0x63 */ + 0x94, 0x81, 0xE0, 0x85, 0xE0, 0x88, 0x8F, 0xC6, /* 0x64-0x67 */ + 0x00, 0x00, 0x94, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE0, 0x8C, 0x00, 0x00, 0x8E, 0xCF, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x90, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xE0, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE0, 0x87, 0x00, 0x00, 0x8C, 0x46, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x8D, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x97, 0x6F, 0xE0, 0x90, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xEA, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x6E, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE0, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE0, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x94, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE0, 0x94, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x95, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xED, 0xFA, 0x00, 0x00, 0x94, 0x52, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x93, 0x95, 0xE0, 0x97, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0x99, 0x00, 0x00, /* 0xCC-0xCF */ + 0x97, 0xD3, 0x00, 0x00, 0xE0, 0x96, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE0, 0x98, 0x89, 0x8D, 0x00, 0x00, 0xE0, 0x93, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x7A, /* 0xDC-0xDF */ + 0xE0, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x91, 0x87, 0x8E, 0x57, 0xE0, 0x9C, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE0, 0x9B, 0x90, 0x43, 0x99, 0xD7, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xE0, 0x9D, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE0, 0x9F, 0x00, 0x00, 0xE0, 0x8E, /* 0xF8-0xFB */ + 0xE0, 0x9E, 0x00, 0x00, 0xED, 0xFB, 0xE0, 0xA0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x9A, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE0, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE0, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xA3, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xE0, 0xA4, 0x00, 0x00, 0x92, 0xDC, 0x00, 0x00, /* 0x28-0x2B */ + 0xE0, 0xA6, 0xE0, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE0, 0xA7, 0x00, 0x00, 0xE0, 0xA8, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x8E, 0xDD, 0x95, 0x83, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xEA, 0xE0, 0xA9, /* 0x38-0x3B */ + 0xE0, 0xAA, 0x91, 0x75, 0x8E, 0xA2, 0xE0, 0xAB, /* 0x3C-0x3F */ + 0xE0, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xAD, 0x95, 0xD0, /* 0x44-0x47 */ + 0x94, 0xC5, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xAE, /* 0x48-0x4B */ + 0x94, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0xAB, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xE0, 0xAF, 0x89, 0xE5, 0x00, 0x00, 0x8B, 0x8D, /* 0x58-0x5B */ + 0x00, 0x00, 0x96, 0xC4, 0x00, 0x00, 0x96, 0xB4, /* 0x5C-0x5F */ + 0x00, 0x00, 0x89, 0xB2, 0x98, 0x53, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x71, /* 0x64-0x67 */ + 0x00, 0x00, 0x95, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xB5, 0x00, 0x00, /* 0x70-0x73 */ + 0xE0, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x93, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x8C, 0xA1, 0xE0, 0xB1, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x8D, 0xD2, 0xE0, 0xB3, 0xE0, 0xB2, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB4, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB5, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB6, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x8B, 0x5D, 0x00, 0x00, 0xE0, 0xB7, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB8, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x8C, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x94, 0xC6, /* 0xAC-0xAF */ + 0x00, 0x00, 0xED, 0xFC, 0xE0, 0xBA, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xF3, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE0, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x40, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xB6, 0xE0, 0xBB, /* 0xC0-0xC3 */ + 0xE0, 0xBD, 0x00, 0x00, 0xE0, 0xBC, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBE, 0x00, 0x00, /* 0xCC-0xCF */ + 0x8C, 0xCF, 0x00, 0x00, 0xE0, 0xBF, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xE7, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x91, 0x5F, 0x00, 0x00, 0x8D, 0x9D, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xE0, 0xC1, 0xE0, 0xC2, 0xE0, 0xC0, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x8E, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x93, 0xC6, 0x8B, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC4, /* 0xF4-0xF7 */ + 0x92, 0x4B, 0xE0, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x98, 0x54, 0x94, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC7, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC9, 0xE0, 0xC6, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0xD2, /* 0x18-0x1B */ + 0xE0, 0xC8, 0xE0, 0xCA, 0x00, 0x00, 0x97, 0xC2, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xEE, 0x41, 0xE0, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE0, 0xCD, 0x92, 0x96, 0x94, 0x4C, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA3, 0xE0, 0xCC, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE0, 0xCB, 0x00, 0x00, 0x97, 0x50, 0x97, 0x51, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xCF, 0x89, 0x8E, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x8D, 0x96, 0x8E, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xD0, 0xE0, 0xD1, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xD3, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x62, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xE0, 0xD5, 0x00, 0x00, 0xE0, 0xD4, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE0, 0xD6, 0x00, 0x00, 0x8A, 0x6C, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xE0, 0xD8, 0x00, 0x00, 0xEE, 0x43, /* 0x74-0x77 */ + 0xE0, 0xD7, 0x00, 0x00, 0xE0, 0xDA, 0xE0, 0xD9, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x8C, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x97, 0xA6, /* 0x84-0x87 */ + 0x00, 0x00, 0x8B, 0xCA, 0x00, 0x00, 0x89, 0xA4, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xE8, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x8A, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xE6, 0xE0, 0xDC, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xDE, /* 0xB8-0xBB */ + 0x00, 0x00, 0xEE, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE0, 0xDF, 0x00, 0x00, 0x89, 0xCF, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE0, 0xDB, 0xEE, 0x45, 0x8E, 0x58, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x92, 0xBF, 0xE0, 0xDD, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x48, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x46, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE2, 0x00, 0x00, /* 0xDC-0xDF */ + 0x8E, 0xEC, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x47, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x5D, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x94, 0xC7, 0xE0, 0xE1, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE0, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xEE, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xE0, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xBB, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x85, /* 0x00-0x03 */ + 0x00, 0x00, 0xE0, 0xE4, 0x97, 0x9D, 0xEE, 0x49, /* 0x04-0x07 */ + 0x00, 0x00, 0x97, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xF4, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE0, 0xE6, 0xEE, 0x4B, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xEE, 0x4D, 0xEE, 0x4C, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x4E, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE8, 0x97, 0xD4, /* 0x30-0x33 */ + 0x8B, 0xD5, 0x94, 0xFA, 0x94, 0x69, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE9, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xEB, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE0, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE0, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE0, 0xED, 0x8C, 0xE8, 0x89, 0x6C, /* 0x58-0x5B */ + 0xE0, 0xEF, 0x00, 0x00, 0x90, 0x90, 0xE0, 0xEC, /* 0x5C-0x5F */ + 0x97, 0xDA, 0x00, 0x00, 0xEE, 0x4F, 0xE0, 0xF2, /* 0x60-0x63 */ + 0xEA, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE0, 0xF0, 0xE0, 0xF3, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE5, /* 0x6C-0x6F */ + 0xE0, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xBA, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF4, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF5, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x9E, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xEE, 0x50, 0x00, 0x00, 0xE0, 0xF6, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF7, 0xEE, 0x51, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x8A, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x8E, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF9, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFA, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE0, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x89, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xE1, 0x40, 0x00, 0x00, 0x95, 0x5A, 0xE1, 0x41, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xA2, 0xE1, 0x42, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE1, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x44, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE1, 0x46, 0xE1, 0x47, 0xE1, 0x45, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x72, 0xE1, 0x49, /* 0xF4-0xF7 */ + 0xE1, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_75[512] = { + 0x00, 0x00, 0xEE, 0x52, 0x00, 0x00, 0xE1, 0x4B, /* 0x00-0x03 */ + 0xE1, 0x4A, 0xE1, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xE1, 0x4D, 0xE1, 0x4F, 0xE1, 0x4E, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x8D, 0x99, 0x00, 0x00, 0xE1, 0x51, /* 0x10-0x13 */ + 0x00, 0x00, 0xE1, 0x50, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x8A, 0xC3, 0x00, 0x00, 0x90, 0x72, 0x00, 0x00, /* 0x18-0x1B */ + 0x93, 0x5B, 0x00, 0x00, 0xE1, 0x52, 0x90, 0xB6, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x59, /* 0x20-0x23 */ + 0x00, 0x00, 0x89, 0x99, 0xE1, 0x53, 0x00, 0x00, /* 0x24-0x27 */ + 0x97, 0x70, 0x00, 0x00, 0x00, 0x00, 0x95, 0xE1, /* 0x28-0x2B */ + 0xE1, 0x54, 0x00, 0x00, 0x00, 0x00, 0xED, 0x8C, /* 0x2C-0x2F */ + 0x93, 0x63, 0x97, 0x52, 0x8D, 0x62, 0x90, 0x5C, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x6A, /* 0x34-0x37 */ + 0x99, 0xB2, 0x00, 0x00, 0x92, 0xAC, 0x89, 0xE6, /* 0x38-0x3B */ + 0xE1, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE1, 0x56, 0x00, 0x00, 0xE1, 0x5B, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE1, 0x59, 0xE1, 0x58, 0x9D, 0xC0, /* 0x48-0x4B */ + 0x8A, 0x45, 0xE1, 0x57, 0x00, 0x00, 0x88, 0xD8, /* 0x4C-0x4F */ + 0x00, 0x00, 0x94, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x94, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x97, 0xAF, 0xE1, 0x5C, 0xE1, 0x5A, /* 0x58-0x5B */ + 0x92, 0x7B, 0x90, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x94, 0xA9, 0x00, 0x00, 0x95, 0x4C, 0x00, 0x00, /* 0x60-0x63 */ + 0xE1, 0x5E, 0x97, 0xAA, 0x8C, 0x6C, 0xE1, 0x5F, /* 0x64-0x67 */ + 0x00, 0x00, 0xE1, 0x5D, 0x94, 0xD4, 0xE1, 0x60, /* 0x68-0x6B */ + 0x00, 0x00, 0xE1, 0x61, 0x00, 0x00, 0xEE, 0x53, /* 0x6C-0x6F */ + 0x88, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xF4, /* 0x70-0x73 */ + 0xE1, 0x66, 0x00, 0x00, 0xE1, 0x63, 0x93, 0xEB, /* 0x74-0x77 */ + 0xE1, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x45, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x69, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x64, 0xE1, 0x65, /* 0x84-0x87 */ + 0x00, 0x00, 0xE1, 0x68, 0xE1, 0x67, 0x95, 0x44, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x61, 0x91, 0x60, /* 0x8C-0x8F */ + 0x00, 0x00, 0x8B, 0x5E, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE1, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x6B, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xE1, 0x6C, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x6E, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xE1, 0x6D, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x75, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE1, 0x76, 0x94, 0xE6, 0xE1, 0x70, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE1, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE1, 0x74, 0x90, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE1, 0x75, 0xE1, 0x73, 0x8E, 0xBE, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x6F, 0xE1, 0x71, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x95, 0x61, 0x00, 0x00, 0x8F, 0xC7, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x78, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE1, 0x77, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x79, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x8E, 0xA4, 0x8D, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x93, 0x97, 0xE1, 0x7A, 0x00, 0x00, 0x92, 0xC9, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x7C, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x9F, 0xE1, 0x7B, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x91, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE1, 0x82, 0x00, 0x00, 0xE1, 0x84, 0xE1, 0x85, /* 0xF0-0xF3 */ + 0x92, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x83, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE1, 0x80, 0x00, 0x00, 0xE1, 0x7D, 0xE1, 0x7E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0x00, 0x00, 0xE1, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE1, 0x88, 0x00, 0x00, 0xE1, 0x86, /* 0x08-0x0B */ + 0x00, 0x00, 0xE1, 0x87, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x89, /* 0x1C-0x1F */ + 0xE1, 0x8B, 0xE1, 0x8C, 0xE1, 0x8D, 0x00, 0x00, /* 0x20-0x23 */ + 0xE1, 0x8E, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x8A, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE1, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE1, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x91, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xC3, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x94, 0xE1, 0x92, /* 0x44-0x47 */ + 0xE1, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x8A, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xFC, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xC8, 0x00, 0x00, /* 0x54-0x57 */ + 0xE1, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xE1, 0x95, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE1, 0x97, 0xE1, 0x98, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x9C, /* 0x64-0x67 */ + 0xE1, 0x99, 0xE1, 0x9A, 0xE1, 0x9B, 0x00, 0x00, /* 0x68-0x6B */ + 0xE1, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE1, 0x9E, 0x00, 0x00, 0xE1, 0x9F, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA0, 0x00, 0x00, /* 0x74-0x77 */ + 0xE1, 0xA1, 0x00, 0x00, 0x94, 0xAD, 0x93, 0x6F, /* 0x78-0x7B */ + 0xE1, 0xA2, 0x94, 0x92, 0x95, 0x53, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xE1, 0xA3, 0x00, 0x00, 0xEE, 0x54, 0xE1, 0xA4, /* 0x80-0x83 */ + 0x93, 0x49, 0x00, 0x00, 0x8A, 0x46, 0x8D, 0x63, /* 0x84-0x87 */ + 0xE1, 0xA5, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA6, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA7, 0x00, 0x00, /* 0x8C-0x8F */ + 0x8E, 0x48, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA9, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA8, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xE1, 0xAA, 0xE1, 0xAB, 0xEE, 0x57, /* 0x98-0x9B */ + 0xEE, 0x55, 0x00, 0x00, 0xEE, 0x56, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x58, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xE7, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE1, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE1, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x89, /* 0xB4-0xB7 */ + 0xE1, 0xAE, 0xE1, 0xAF, 0xE1, 0xB0, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x4D, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB1, 0x94, 0x75, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x7E, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x89, 0x6D, 0x00, 0x00, 0x89, 0x76, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE1, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB4, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB3, 0x93, 0x90, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xB7, /* 0xD8-0xDB */ + 0x9F, 0x58, 0x00, 0x00, 0xE1, 0xB5, 0x96, 0xBF, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE1, 0xB6, 0x00, 0x00, 0x8A, 0xC4, /* 0xE0-0xE3 */ + 0x94, 0xD5, 0xE1, 0xB7, 0x00, 0x00, 0xE1, 0xB8, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB9, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xDA, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xD3, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x92, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x91, 0x8A, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xBB, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x82, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0x00, 0x00, 0x8F, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xE1, 0xBE, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xBD, /* 0x04-0x07 */ + 0xE1, 0xBC, 0x94, 0xFB, 0x00, 0x00, 0x8A, 0xC5, /* 0x08-0x0B */ + 0x8C, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xC4, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xC1, 0x90, 0x5E, /* 0x1C-0x1F */ + 0x96, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE1, 0xC0, 0xE1, 0xC2, 0xE1, 0xC3, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE1, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xC5, /* 0x34-0x37 */ + 0xE1, 0xC6, 0x00, 0x00, 0x92, 0xAD, 0x00, 0x00, /* 0x38-0x3B */ + 0x8A, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x92, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x5A, 0xE1, 0xC7, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xC8, 0xE1, 0xCB, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x90, 0x87, 0x00, 0x00, 0x93, 0xC2, /* 0x60-0x63 */ + 0x00, 0x00, 0xE1, 0xCC, 0x96, 0x72, 0x00, 0x00, /* 0x64-0x67 */ + 0xE1, 0xC9, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xCA, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xE1, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xCE, 0xE1, 0xCD, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD1, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD0, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE1, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD4, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE1, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x95, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x8F, 0x75, 0x97, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE1, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x93, 0xB5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD6, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE1, 0xD7, 0x00, 0x00, 0xE1, 0xDB, /* 0xB8-0xBB */ + 0xE1, 0xD9, 0xE1, 0xDA, 0x00, 0x00, 0xE1, 0xD8, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xDC, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE1, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xDE, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xDF, 0x96, 0xB5, /* 0xD8-0xDB */ + 0xE1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xEE, 0xE1, 0xE1, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x92, 0x6D, 0x00, 0x00, 0x94, 0x8A, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x8B, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x92, 0x5A, 0xE1, 0xE2, 0x8B, 0xB8, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xCE, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE1, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xBB, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xE1, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE5, 0x00, 0x00, /* 0x10-0x13 */ + 0x8C, 0xA4, 0x8D, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE1, 0xE7, 0xEE, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x93, 0x75, 0x8D, 0xD4, 0x8B, 0x6D, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x43, 0x00, 0x00, /* 0x30-0x33 */ + 0x94, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x76, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x7B, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xE1, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x5D, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x8F, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xEE, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xB0, /* 0x68-0x6B */ + 0x8D, 0x64, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xA5, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xA1, 0x00, 0x00, /* 0x70-0x73 */ + 0xE1, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x5F, 0x00, 0x00, /* 0x78-0x7B */ + 0xE1, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x8C, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xEC, 0x92, 0xF4, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xE1, 0xEF, 0x8A, 0x56, 0xE1, 0xEA, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x94, 0xE8, 0x00, 0x00, 0x89, 0x4F, /* 0x90-0x93 */ + 0x00, 0x00, 0x8D, 0xEA, 0x00, 0x00, 0x98, 0x71, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xEE, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF0, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xC9, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x90, 0xD7, 0xE1, 0xF2, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF3, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE1, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x6D, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE1, 0xF9, 0x00, 0x00, 0xE1, 0xF8, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x8E, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE1, 0xFA, 0xE1, 0xF5, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFB, 0xE1, 0xF6, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x94, 0xD6, 0xE1, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE1, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x41, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x40, /* 0xE4-0xE7 */ + 0x96, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x88, 0xE9, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE2, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE2, 0x42, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0x00, 0x00, 0x8F, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x44, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x62, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE2, 0x46, 0xE2, 0x45, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE2, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE6, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE8, 0xE2, 0x49, /* 0x28-0x2B */ + 0xE2, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xEE, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xA6, 0x00, 0x00, /* 0x38-0x3B */ + 0x97, 0xE7, 0x00, 0x00, 0x8E, 0xD0, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE2, 0x4A, 0x8C, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x5F, /* 0x44-0x47 */ + 0x8B, 0x46, 0x8E, 0x83, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x97, 0x53, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x50, /* 0x50-0x53 */ + 0x00, 0x00, 0xE2, 0x4F, 0x91, 0x63, 0xE2, 0x4C, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x4E, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x8F, 0x6A, 0x90, 0x5F, 0xE2, 0x4D, /* 0x5C-0x5F */ + 0xE2, 0x4B, 0x00, 0x00, 0x94, 0x49, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x8F, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x95, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x8D, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x98, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x51, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x52, /* 0x7C-0x7F */ + + 0xE2, 0x68, 0x8B, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x98, 0x5C, 0x91, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x53, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x89, 0xD0, 0x92, 0xF5, 0x95, 0x9F, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xEE, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x66, /* 0x98-0x9B */ + 0x00, 0x00, 0xE2, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x9A, 0xE2, 0x55, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x57, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x58, 0x00, 0x00, /* 0xAC-0xAF */ + 0x94, 0x48, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x59, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE2, 0x5A, 0xE2, 0x5B, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x8B, 0xD7, 0x89, 0xD1, 0x93, 0xC3, /* 0xBC-0xBF */ + 0x8F, 0x47, 0x8E, 0x84, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE2, 0x5C, 0x00, 0x00, 0x8F, 0x48, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x89, 0xC8, 0x95, 0x62, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE2, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x94, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x64, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE2, 0x60, 0x00, 0x00, 0xE2, 0x61, /* 0xE0-0xE3 */ + 0x94, 0x89, 0x00, 0x00, 0x90, 0x60, 0xE2, 0x5E, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x92, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE2, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x8F, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xDA, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_7A[512] = { + 0x8B, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xE2, 0x62, 0x00, 0x00, 0x00, 0x00, 0x92, 0xF6, /* 0x08-0x0B */ + 0x00, 0x00, 0xE2, 0x63, 0x90, 0xC5, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x96, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x95, 0x42, /* 0x14-0x17 */ + 0xE2, 0x64, 0xE2, 0x65, 0x92, 0x74, 0x00, 0x00, /* 0x18-0x1B */ + 0x97, 0xC5, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x67, /* 0x1C-0x1F */ + 0xE2, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xED, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE2, 0x69, 0x88, 0xEE, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x6C, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x6A, /* 0x38-0x3B */ + 0x89, 0xD2, 0x8C, 0x6D, 0xE2, 0x6B, 0x8D, 0x65, /* 0x3C-0x3F */ + 0x8D, 0x92, 0x00, 0x00, 0x95, 0xE4, 0xE2, 0x6D, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x73, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE2, 0x6F, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x90, 0xCF, 0x89, 0x6E, 0x89, 0xB8, /* 0x4C-0x4F */ + 0x88, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x6E, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE2, 0x70, 0xE2, 0x71, 0x8F, 0xF5, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE2, 0x72, 0x00, 0x00, 0x8A, 0x6E, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE2, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x8C, 0x8A, 0x00, 0x00, 0x8B, 0x86, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xE2, 0x75, 0x8B, 0xF3, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE2, 0x76, 0x00, 0x00, 0x90, 0xFA, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x93, 0xCB, 0x00, 0x00, 0x90, 0xDE, /* 0x80-0x83 */ + 0x8D, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE2, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x82, 0x91, 0x8B, /* 0x90-0x93 */ + 0x00, 0x00, 0xE2, 0x79, 0xE2, 0x7B, 0xE2, 0x78, /* 0x94-0x97 */ + 0xE2, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x41, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE2, 0x7C, 0x8C, 0x45, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x87, 0x97, 0x71, /* 0xAC-0xAF */ + 0xE2, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x80, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x4D, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x83, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x96, /* 0xC0-0xC3 */ + 0xE2, 0x82, 0xE2, 0x81, 0x00, 0x00, 0xE2, 0x85, /* 0xC4-0xC7 */ + 0xE2, 0x7D, 0x00, 0x00, 0xE2, 0x86, 0x97, 0xA7, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE2, 0x87, 0x00, 0x00, 0xE2, 0x88, /* 0xCC-0xCF */ + 0x00, 0x00, 0xEE, 0x67, 0x9A, 0xF2, 0xE2, 0x8A, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE2, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE2, 0x8B, 0xE2, 0x8C, 0x00, 0x00, /* 0xD8-0xDB */ + 0x97, 0xB3, 0xE2, 0x8D, 0x00, 0x00, 0xE8, 0xED, /* 0xDC-0xDF */ + 0x8F, 0xCD, 0xE2, 0x8E, 0xE2, 0x8F, 0x8F, 0x76, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x93, 0xB6, 0xE2, 0x90, 0xEE, 0x68, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x47, 0xEE, 0x6A, /* 0xE8-0xEB */ + 0x00, 0x00, 0xE2, 0x91, 0x00, 0x00, 0x92, 0x5B, /* 0xEC-0xEF */ + 0xE2, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xA3, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x99, 0x5E, 0x92, 0x7C, 0x8E, 0xB1, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xC6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x93, 0x00, 0x00, /* 0x00-0x03 */ + 0xE2, 0xA0, 0x00, 0x00, 0xE2, 0x96, 0x00, 0x00, /* 0x04-0x07 */ + 0x8B, 0x88, 0x00, 0x00, 0xE2, 0x95, 0xE2, 0xA2, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x94, /* 0x0C-0x0F */ + 0x00, 0x00, 0x8F, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE2, 0x98, 0xE2, 0x99, 0x00, 0x00, 0x93, 0x4A, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x9A, 0x00, 0x00, /* 0x1C-0x1F */ + 0x8A, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x90, 0x79, 0x95, 0x84, 0x00, 0x00, /* 0x24-0x27 */ + 0xE2, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x91, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x97, /* 0x30-0x33 */ + 0x00, 0x00, 0xE2, 0x9B, 0xE2, 0x9D, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x8D, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xE2, 0xA4, 0x95, 0x4D, 0x00, 0x00, /* 0x44-0x47 */ + 0x94, 0xA4, 0x93, 0x99, 0x00, 0x00, 0x8B, 0xD8, /* 0x48-0x4B */ + 0xE2, 0xA3, 0xE2, 0xA1, 0x00, 0x00, 0x94, 0xB3, /* 0x4C-0x4F */ + 0xE2, 0x9E, 0x92, 0x7D, 0x93, 0x9B, 0x00, 0x00, /* 0x50-0x53 */ + 0x93, 0x9A, 0x00, 0x00, 0x8D, 0xF4, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xE2, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xE2, 0xA6, 0x00, 0x00, 0xE2, 0xA8, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE2, 0xAB, 0x00, 0x00, 0xE2, 0xAC, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE2, 0xA9, 0xE2, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE2, 0xA7, 0xE2, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x9F, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xCD, 0x89, 0xD3, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xB3, /* 0x88-0x8B */ + 0x00, 0x00, 0xE2, 0xB0, 0x00, 0x00, 0xE2, 0xB5, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xB4, 0x00, 0x00, /* 0x90-0x93 */ + 0x94, 0x93, 0x96, 0xA5, 0x00, 0x00, 0x8E, 0x5A, /* 0x94-0x97 */ + 0xE2, 0xAE, 0xE2, 0xB7, 0xE2, 0xB2, 0x00, 0x00, /* 0x98-0x9B */ + 0xE2, 0xB1, 0xE2, 0xAD, 0xEE, 0x6B, 0xE2, 0xAF, /* 0x9C-0x9F */ + 0x00, 0x00, 0x8A, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x5C, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x90, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x94, 0xA0, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE2, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x94, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x90, 0xDF, 0xE2, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x94, 0xCD, 0x00, 0x00, 0xE2, 0xBD, 0x95, 0xD1, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x92, 0x7A, 0x00, 0x00, 0xE2, 0xB8, /* 0xC8-0xCB */ + 0xE2, 0xBA, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xBB, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE2, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x8E, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x93, 0xC4, 0xE2, 0xC3, 0xE2, 0xC2, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE2, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x98, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC8, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCC, 0xE2, 0xC9, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_7C[512] = { + 0xE2, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC6, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE2, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE2, 0xC0, 0x99, 0xD3, 0xE2, 0xC7, /* 0x10-0x13 */ + 0xE2, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCA, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD0, /* 0x1C-0x1F */ + 0x00, 0x00, 0x8A, 0xC8, 0x00, 0x00, 0xE2, 0xCD, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCE, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCF, 0xE2, 0xD2, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD1, /* 0x34-0x37 */ + 0x94, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xE2, 0xD3, 0x97, 0xFA, 0x95, 0xEB, /* 0x3C-0x3F */ + 0xE2, 0xD8, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD5, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE2, 0xD4, 0x90, 0xD0, 0x00, 0x00, 0xE2, 0xD7, /* 0x4C-0x4F */ + 0xE2, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE2, 0xD6, 0x00, 0x00, 0xE2, 0xDD, 0x00, 0x00, /* 0x54-0x57 */ + 0xE2, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xDB, /* 0x5C-0x5F */ + 0xE2, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xE2, 0xDC, 0xE2, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE2, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xC4, /* 0x70-0x73 */ + 0x00, 0x00, 0xE2, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xE0, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x8B, 0xCC, 0x8C, 0x48, 0xE2, 0xE1, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x95, 0xB2, 0x00, 0x00, 0x90, 0x88, /* 0x88-0x8B */ + 0x00, 0x00, 0x96, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE2, 0xE2, 0x00, 0x00, 0x97, 0xB1, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x94, 0x94, 0x00, 0x00, 0x91, 0x65, /* 0x94-0x97 */ + 0x94, 0x53, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x6C, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xBE, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE2, 0xE7, 0xE2, 0xE5, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE2, 0xE3, 0x8A, 0x9F, 0x00, 0x00, 0x8F, 0xCF, /* 0xA4-0xA7 */ + 0xE2, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xE6, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE2, 0xE4, 0xE2, 0xEC, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE2, 0xEB, 0xE2, 0xEA, 0xE2, 0xE9, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE2, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE2, 0xEE, 0x90, 0xB8, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE2, 0xEF, 0x00, 0x00, 0xE2, 0xF1, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE2, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xD0, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x57, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF3, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x9C, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE2, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE2, 0xF4, 0x00, 0x00, 0x95, 0xB3, 0x91, 0x8C, /* 0xDC-0xDF */ + 0x8D, 0x66, 0x00, 0x00, 0xE2, 0xF5, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xC6, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF7, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF8, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE2, 0xF9, 0x00, 0x00, 0xE2, 0xFA, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x8E, 0x85, 0x00, 0x00, 0xE2, 0xFB, 0x8C, 0x6E, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x8A, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0x8B, 0x49, 0x00, 0x00, 0xE3, 0x40, 0x00, 0x00, /* 0x00-0x03 */ + 0x96, 0xF1, 0x8D, 0x67, 0xE2, 0xFC, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x43, 0x96, 0xE4, /* 0x08-0x0B */ + 0x00, 0x00, 0x94, 0x5B, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x95, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x8F, 0x83, 0xE3, 0x42, 0x00, 0x00, 0x8E, 0xD1, /* 0x14-0x17 */ + 0x8D, 0x68, 0x8E, 0x86, 0x8B, 0x89, 0x95, 0xB4, /* 0x18-0x1B */ + 0xE3, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x91, 0x66, 0x96, 0x61, 0x8D, 0xF5, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x87, /* 0x28-0x2B */ + 0x92, 0xDB, 0x00, 0x00, 0xE3, 0x46, 0x97, 0xDD, /* 0x2C-0x2F */ + 0x8D, 0xD7, 0x00, 0x00, 0xE3, 0x47, 0x90, 0x61, /* 0x30-0x33 */ + 0x00, 0x00, 0xE3, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x8F, 0xD0, 0x8D, 0xAE, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x48, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x49, 0x8C, 0xBC, /* 0x40-0x43 */ + 0x91, 0x67, 0xE3, 0x44, 0xE3, 0x4A, 0x00, 0x00, /* 0x44-0x47 */ + 0xEE, 0x6D, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x45, /* 0x48-0x4B */ + 0x8C, 0x6F, 0x00, 0x00, 0xE3, 0x4D, 0xE3, 0x51, /* 0x4C-0x4F */ + 0x8C, 0x8B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x4C, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x55, /* 0x58-0x5B */ + 0xEE, 0x6E, 0x00, 0x00, 0x8D, 0x69, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x97, 0x8D, 0x88, 0xBA, 0xE3, 0x52, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x8B, 0x00, 0x00, /* 0x64-0x67 */ + 0xE3, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x50, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x93, 0x9D, 0xE3, 0x4E, 0xE3, 0x4B, /* 0x70-0x73 */ + 0x00, 0x00, 0x8A, 0x47, 0x90, 0xE2, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x8C, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE3, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE3, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x56, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x53, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x8C, 0x70, 0x91, 0xB1, 0xE3, 0x58, /* 0x98-0x9B */ + 0x91, 0x8E, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x65, /* 0x9C-0x9F */ + 0xEE, 0x70, 0x00, 0x00, 0xE3, 0x61, 0xE3, 0x5B, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x5F, /* 0xA8-0xAB */ + 0x8E, 0xF8, 0x88, 0xDB, 0xE3, 0x5A, 0xE3, 0x62, /* 0xAC-0xAF */ + 0xE3, 0x66, 0x8D, 0x6A, 0x96, 0xD4, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x92, 0xD4, 0xE3, 0x5C, 0x00, 0x00, 0xEE, 0x6F, /* 0xB4-0xB7 */ + 0xE3, 0x64, 0x00, 0x00, 0xE3, 0x59, 0x92, 0x5D, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE3, 0x5E, 0x88, 0xBB, 0x96, 0xC8, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x5D, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xD9, 0x94, 0xEA, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x8D, /* 0xCC-0xCF */ + 0x00, 0x00, 0x97, 0xCE, 0x8F, 0x8F, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE3, 0x8E, 0xEE, 0x71, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE3, 0x67, 0x00, 0x00, 0x90, 0xFC, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE3, 0x63, 0xE3, 0x68, 0xE3, 0x6A, 0x00, 0x00, /* 0xDC-0xDF */ + 0x92, 0xF7, 0xE3, 0x6D, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE3, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x95, 0xD2, 0x8A, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x96, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x88, 0xDC, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x6C, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x97, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x6B, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_7E[512] = { + 0x00, 0x00, 0x89, 0x8F, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x93, 0xEA, 0xE3, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE3, 0x75, 0xE3, 0x6F, 0xE3, 0x76, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x72, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x9B, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xC8, 0xE3, 0x74, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE3, 0x71, 0xE3, 0x77, 0xE3, 0x70, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x63, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x44, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x6B, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE3, 0x73, 0xE3, 0x80, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE3, 0x7B, 0x00, 0x00, 0xE3, 0x7E, /* 0x34-0x37 */ + 0x00, 0x00, 0xE3, 0x7C, 0xE3, 0x81, 0xE3, 0x7A, /* 0x38-0x3B */ + 0x00, 0x00, 0xE3, 0x60, 0x90, 0xD1, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x94, 0xC9, 0x00, 0x00, 0xE3, 0x7D, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x78, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x40, 0x8C, 0x71, /* 0x48-0x4B */ + 0x00, 0x00, 0x8F, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x72, 0x00, 0x00, /* 0x50-0x53 */ + 0x90, 0x44, 0x91, 0x55, 0xE3, 0x84, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE3, 0x86, 0xE3, 0x87, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xE3, 0x83, 0xE3, 0x85, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x79, 0xE3, 0x82, /* 0x64-0x67 */ + 0x00, 0x00, 0xE3, 0x8A, 0xE3, 0x89, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x96, 0x9A, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x8C, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xE3, 0x88, 0x00, 0x00, 0xE3, 0x8C, /* 0x78-0x7B */ + 0xE3, 0x8B, 0xE3, 0x8F, 0x00, 0x00, 0xE3, 0x91, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x5B, 0xE3, 0x8D, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE3, 0x92, 0xE3, 0x93, 0xED, 0x40, 0x00, 0x00, /* 0x88-0x8B */ + 0xE3, 0x94, 0x00, 0x00, 0xE3, 0x9A, 0x93, 0x5A, /* 0x8C-0x8F */ + 0xE3, 0x96, 0x00, 0x00, 0xE3, 0x95, 0xE3, 0x97, /* 0x90-0x93 */ + 0xE3, 0x98, 0x00, 0x00, 0xE3, 0x99, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x9B, /* 0x98-0x9B */ + 0xE3, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_7F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xCA, 0x00, 0x00, /* 0x34-0x37 */ + 0xE3, 0x9D, 0x00, 0x00, 0xE3, 0x9E, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xE3, 0x9F, 0x00, 0x00, 0xEE, 0x73, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE3, 0xA0, 0xE3, 0xA1, 0xE3, 0xA2, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE3, 0xA3, 0xE3, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE3, 0xA6, 0xE3, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xE3, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xA8, /* 0x5C-0x5F */ + 0xE3, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xAC, /* 0x64-0x67 */ + 0xE3, 0xAA, 0xE3, 0xAB, 0x8D, 0xDF, 0x8C, 0x72, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0x75, 0x00, 0x00, /* 0x6C-0x6F */ + 0x94, 0xB1, 0x00, 0x00, 0x8F, 0x90, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x94, 0x6C, 0x00, 0x00, 0x94, 0xEB, /* 0x74-0x77 */ + 0xE3, 0xAD, 0x9C, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xAE, 0xE3, 0xB0, /* 0x80-0x83 */ + 0x00, 0x00, 0x97, 0x85, 0xE3, 0xAF, 0xE3, 0xB2, /* 0x84-0x87 */ + 0xE3, 0xB1, 0x00, 0x00, 0x97, 0x72, 0x00, 0x00, /* 0x88-0x8B */ + 0xE3, 0xB3, 0x00, 0x00, 0x94, 0xFC, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE3, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xB7, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xE3, 0xB6, 0xE3, 0xB5, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xEE, 0x74, 0x00, 0x00, 0xE3, 0xB8, /* 0xA0-0xA3 */ + 0x8C, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x91, 0x41, 0x8B, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xBC, 0xE3, 0xB9, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xBA, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xBD, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE3, 0xBE, 0xE3, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x89, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x89, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE3, 0xC0, 0xE3, 0xC1, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xC2, 0x00, 0x00, /* 0xC8-0xCB */ + 0x97, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x4B, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE3, 0xC4, 0xE3, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x90, 0x89, 0xE3, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xC6, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE3, 0xC7, 0x00, 0x00, 0x8A, 0xE3, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x8A, 0xCB, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xC8, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE3, 0xC9, 0x00, 0x00, 0x96, 0x7C, /* 0xF8-0xFB */ + 0x97, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0x97, 0x73, 0x98, 0x56, 0x00, 0x00, 0x8D, 0x6C, /* 0x00-0x03 */ + 0xE3, 0xCC, 0x8E, 0xD2, 0xE3, 0xCB, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xCD, /* 0x08-0x0B */ + 0x8E, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x91, 0xCF, 0x00, 0x00, 0xE3, 0xCE, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x8D, 0x6B, 0x00, 0x00, 0x96, 0xD5, /* 0x14-0x17 */ + 0xE3, 0xCF, 0xE3, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xE3, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE3, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xE3, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xA8, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0xEB, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD5, /* 0x38-0x3B */ + 0x00, 0x00, 0x92, 0x5E, 0x00, 0x00, 0xE3, 0xD4, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD7, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD6, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD8, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0xB9, 0x00, 0x00, /* 0x54-0x57 */ + 0xE3, 0xD9, 0x00, 0x00, 0xE3, 0xDA, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xB7, 0xE3, 0xDB, /* 0x5C-0x5F */ + 0x00, 0x00, 0x91, 0x8F, 0xE3, 0xDC, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xE3, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xFC, /* 0x6C-0x6F */ + 0xE3, 0xE0, 0x00, 0x00, 0xE3, 0xDF, 0xE3, 0xDE, /* 0x70-0x73 */ + 0x92, 0xAE, 0x00, 0x00, 0xE3, 0xE1, 0x90, 0x45, /* 0x74-0x77 */ + 0x00, 0x00, 0xE3, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE3, 0xE3, 0x98, 0x57, 0xE3, 0xE4, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xE3, 0xE5, 0xE3, 0xE7, 0xE3, 0xE6, 0x94, 0xA3, /* 0x84-0x87 */ + 0x00, 0x00, 0x93, 0xF7, 0x00, 0x00, 0x98, 0x5D, /* 0x88-0x8B */ + 0x94, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xE9, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xD1, 0x00, 0x00, /* 0x94-0x97 */ + 0x95, 0x49, 0x00, 0x00, 0xE3, 0xEA, 0xE3, 0xE8, /* 0x98-0x9B */ + 0x00, 0x00, 0x8A, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x8C, 0xD2, 0x8E, 0x88, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x94, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x8C, 0xA8, 0x96, 0x62, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE3, 0xED, 0xE3, 0xEB, 0x00, 0x00, 0x8D, 0x6D, /* 0xAC-0xAF */ + 0x00, 0x00, 0x8D, 0x6E, 0x88, 0xE7, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x8D, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x78, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xDD, /* 0xC0-0xC3 */ + 0xE3, 0xF2, 0x00, 0x00, 0x92, 0x5F, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x94, 0x77, 0x00, 0x00, 0x91, 0xD9, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xF4, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE3, 0xF0, 0xE3, 0xF3, 0xE3, 0xEE, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE3, 0xF1, 0x96, 0x45, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x8C, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x88, 0xFB, 0xE3, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xF6, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE3, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x93, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x8B, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE4, 0x45, 0x94, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x89, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x8B, 0xBA, 0x90, 0xC6, 0x98, 0x65, /* 0x04-0x07 */ + 0x96, 0xAC, 0xE3, 0xF5, 0x90, 0xD2, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x72, 0xE3, 0xF8, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFA, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE3, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFB, /* 0x2C-0x2F */ + 0x00, 0x00, 0x92, 0x45, 0x00, 0x00, 0x94, 0x5D, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x92, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x42, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x41, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFC, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x74, 0x00, 0x00, /* 0x4C-0x4F */ + 0x95, 0x85, 0xE4, 0x44, 0x00, 0x00, 0xE4, 0x43, /* 0x50-0x53 */ + 0x8D, 0x6F, 0x98, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x54, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xE4, 0x48, 0xE4, 0x49, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xEE, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x47, 0x00, 0x00, /* 0x6C-0x6F */ + 0x8D, 0x98, 0xE4, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE4, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x92, 0xB0, 0x95, 0xA0, 0x91, 0x42, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xDA, /* 0x7C-0x7F */ + + 0xE4, 0x4E, 0x00, 0x00, 0xE4, 0x4F, 0xE4, 0x4B, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE4, 0x4C, 0x00, 0x00, 0xE4, 0x4D, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x70, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x55, /* 0x90-0x93 */ + 0x00, 0x00, 0xE4, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x86, 0x00, 0x00, /* 0x98-0x9B */ + 0x96, 0x8C, 0x95, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE4, 0x50, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x53, /* 0xA0-0xA3 */ + 0xE4, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x96, 0x63, 0xE4, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE4, 0x57, 0x00, 0x00, 0x00, 0x00, 0x91, 0x56, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE4, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE4, 0x5A, 0x00, 0x00, 0xE4, 0x5E, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE4, 0x5B, 0xE4, 0x59, 0x94, 0x5E, /* 0xBC-0xBF */ + 0xE4, 0x5C, 0x00, 0x00, 0xE4, 0x5D, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xB0, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE4, 0x64, 0xE4, 0x5F, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE4, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE4, 0x61, 0x00, 0x00, 0x91, 0x9F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE4, 0x63, 0xE4, 0x62, 0xE4, 0x65, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x66, /* 0xDC-0xDF */ + 0xE4, 0x67, 0x00, 0x00, 0x00, 0x00, 0x90, 0x62, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x89, 0xE7, 0x00, 0x00, 0xE4, 0x68, /* 0xE4-0xE7 */ + 0x97, 0xD5, 0x00, 0x00, 0x8E, 0xA9, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x8F, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x8A, /* 0xF0-0xF3 */ + 0x92, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x69, 0xE4, 0x6A, /* 0xF8-0xFB */ + 0x89, 0x50, 0x00, 0x00, 0xE4, 0x6B, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0x00, 0x00, 0xE4, 0x6C, 0xE4, 0x6D, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xE4, 0x6E, 0x00, 0x00, 0xE4, 0x6F, /* 0x04-0x07 */ + 0x8B, 0xBB, 0x9D, 0xA8, 0xE4, 0x70, 0x00, 0x00, /* 0x08-0x0B */ + 0x90, 0xE3, 0xE4, 0x71, 0x8E, 0xC9, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE4, 0x72, 0x00, 0x00, 0x98, 0xAE, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x73, 0x95, 0xDC, /* 0x14-0x17 */ + 0x8A, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x91, 0x43, /* 0x18-0x1B */ + 0x8F, 0x77, 0x00, 0x00, 0x95, 0x91, 0x8F, 0x4D, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE4, 0x74, 0x8D, 0x71, 0xE4, 0x75, /* 0x28-0x2B */ + 0x94, 0xCA, 0x00, 0x00, 0xE4, 0x84, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x77, /* 0x30-0x33 */ + 0x00, 0x00, 0x91, 0xC7, 0x94, 0x95, 0x8C, 0xBD, /* 0x34-0x37 */ + 0xE4, 0x76, 0x91, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE4, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xF8, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xE4, 0x7A, 0xE4, 0x79, 0xE4, 0x7C, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xE4, 0x7B, 0x00, 0x00, 0xE4, 0x7D, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x80, 0x00, 0x00, /* 0x60-0x63 */ + 0xE4, 0x7E, 0x00, 0x00, 0x8A, 0xCD, 0x00, 0x00, /* 0x64-0x67 */ + 0xE4, 0x81, 0x00, 0x00, 0xE4, 0x82, 0xE4, 0x83, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0xAF, 0x97, 0xC7, /* 0x6C-0x6F */ + 0x00, 0x00, 0xE4, 0x85, 0x90, 0x46, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x90, 0xE4, 0x86, /* 0x74-0x77 */ + 0xE4, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x88, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xF0, /* 0x88-0x8B */ + 0x00, 0x00, 0xE4, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x8A, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x95, 0x87, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x8E, 0xC5, 0x00, 0x00, 0xE4, 0x8C, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x8A, 0x48, 0x88, 0xB0, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x8B, /* 0xA8-0xAB */ + 0xE4, 0x8E, 0x94, 0x6D, 0x00, 0x00, 0x90, 0x63, /* 0xAC-0xAF */ + 0x00, 0x00, 0x89, 0xD4, 0x00, 0x00, 0x96, 0x46, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x8C, 0x7C, 0x8B, 0xDA, 0x00, 0x00, 0xE4, 0x8D, /* 0xB8-0xBB */ + 0x00, 0x00, 0x89, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x8A, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x89, 0x91, 0xE4, 0x92, 0x97, 0xE8, /* 0xD0-0xD3 */ + 0x91, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x95, 0x63, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE4, 0x9E, 0x00, 0x00, 0x89, 0xD5, /* 0xD8-0xDB */ + 0xE4, 0x9C, 0x00, 0x00, 0xE4, 0x9A, 0xE4, 0x91, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE4, 0x8F, 0x00, 0x00, 0xE4, 0x90, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x8E, 0xE1, 0x8B, 0xEA, 0x92, 0x97, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xCF, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x89, 0x70, 0x00, 0x00, 0xE4, 0x94, /* 0xF0-0xF3 */ + 0xE4, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE4, 0x99, 0xE4, 0x95, 0xE4, 0x98, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_83[512] = { + 0x00, 0x00, 0xEE, 0x76, 0x96, 0xCE, 0xE4, 0x97, /* 0x00-0x03 */ + 0x89, 0xD6, 0x8A, 0x9D, 0xE4, 0x9B, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE4, 0x9D, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x73, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xA1, 0xE4, 0xAA, /* 0x14-0x17 */ + 0xE4, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x88, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xB2, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x88, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xA9, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xA8, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE4, 0xA3, 0xE4, 0xA2, 0x00, 0x00, /* 0x30-0x33 */ + 0xE4, 0xA0, 0xE4, 0x9F, 0x92, 0x83, 0x00, 0x00, /* 0x34-0x37 */ + 0x91, 0xF9, 0xE4, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE4, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xE4, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x91, 0x90, 0x8C, 0x74, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x60, /* 0x4C-0x4F */ + 0xE4, 0xA6, 0x00, 0x00, 0x8D, 0x72, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x91, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x77, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xB8, /* 0x70-0x73 */ + 0x00, 0x00, 0xE4, 0xB9, 0x00, 0x00, 0x89, 0xD7, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xAC, /* 0x78-0x7B */ + 0xE4, 0xB6, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x78, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xE4, 0xAC, 0x00, 0x00, 0xE4, 0xB4, /* 0x84-0x87 */ + 0x00, 0x00, 0xE4, 0xBB, 0xE4, 0xB5, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xB3, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x96, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xB1, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xAD, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0xCE, 0xE4, 0xAF, /* 0x9C-0x9F */ + 0xE4, 0xBA, 0x00, 0x00, 0xE4, 0xB0, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE4, 0xBC, 0x00, 0x00, 0xE4, 0xAE, 0x94, 0x9C, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x97, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE4, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE4, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE4, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x90, 0x9B, 0x00, 0x00, 0xEE, 0x79, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x65, 0x00, 0x00, /* 0xC8-0xCB */ + 0x8B, 0xDB, 0x00, 0x00, 0xE4, 0xC0, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xD9, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0xD2, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE4, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x8D, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x93, 0x70, /* 0xDC-0xDF */ + 0xE4, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x95, 0xEC, 0x00, 0x00, 0xE4, 0xBF, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xD8, /* 0xEC-0xEF */ + 0x8C, 0xD4, 0x95, 0x48, 0xE4, 0xC9, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE4, 0xBD, 0x00, 0x00, 0xEE, 0x7A, 0xE4, 0xC6, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xD0, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE4, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xC2, /* 0x00-0x03 */ + 0x93, 0xB8, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xC7, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xC4, /* 0x08-0x0B */ + 0x96, 0x47, 0xE4, 0xCA, 0x88, 0xDE, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xBE, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE4, 0xCC, 0x00, 0x00, 0xE4, 0xCB, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x94, 0x8B, 0xE4, 0xD2, 0x00, 0x00, /* 0x28-0x2B */ + 0xE4, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8A, 0x9E, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE4, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xE4, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xE4, 0xD3, 0x97, 0x8E, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xDC, 0x00, 0x00, /* 0x44-0x47 */ + 0xEE, 0x7B, 0x97, 0x74, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xA8, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x98, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x8B, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x95, 0x92, 0xE4, 0xE2, 0x93, 0x9F, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0xAF, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE4, 0xDB, 0x00, 0x00, 0xE4, 0xD7, /* 0x68-0x6B */ + 0x91, 0x92, 0xE4, 0xD1, 0xE4, 0xD9, 0xE4, 0xDE, /* 0x6C-0x6F */ + 0x00, 0x00, 0x94, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x88, 0xA8, 0x00, 0x00, 0xE4, 0xD6, /* 0x74-0x77 */ + 0x00, 0x00, 0xE4, 0xDF, 0x95, 0x98, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xDA, 0x00, 0x00, /* 0x80-0x83 */ + 0xE4, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0xD3, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x8F, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x8E, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x96, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x95, 0x66, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xE5, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE4, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE4, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x97, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xEE, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x8F, 0xF6, 0xE4, 0xE3, 0x00, 0x00, 0xE4, 0xE8, /* 0xB8-0xBB */ + 0x91, 0x93, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xE4, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE4, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x92, 0x7E, 0x00, 0x00, 0xE4, 0xEC, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x97, 0x75, 0xE4, 0xE1, 0x8A, 0x57, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE4, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xE4, 0xEA, 0x96, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xED, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE4, 0xE6, 0xE4, 0xE9, 0x00, 0x00, /* 0xD8-0xDB */ + 0xED, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x96, 0x48, 0x00, 0x00, 0x98, 0x40, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE4, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE4, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xF0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0x8E, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xCF, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x95, 0xCC, 0x00, 0x00, 0x96, 0xA0, /* 0x10-0x13 */ + 0xE4, 0xF7, 0xE4, 0xF6, 0x00, 0x00, 0xE4, 0xF2, /* 0x14-0x17 */ + 0xE4, 0xF3, 0x00, 0x00, 0x89, 0x55, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xF5, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE4, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0xD3, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xE4, 0xF4, 0x88, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x91, 0xA0, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x95, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE4, 0xF9, 0xE5, 0x40, 0x00, 0x00, 0x94, 0xD7, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xE4, 0xFC, 0x8F, 0xD4, 0x8E, 0xC7, 0xE5, 0x42, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xBC, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x7D, /* 0x50-0x53 */ + 0x00, 0x00, 0xE5, 0x43, 0x00, 0x00, 0x95, 0x99, /* 0x54-0x57 */ + 0xE4, 0xFB, 0xEE, 0x7E, 0xE4, 0xD4, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFA, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x98, 0x6E, 0x93, 0xA0, 0x95, 0x93, 0xEE, 0x80, /* 0x68-0x6B */ + 0x00, 0x00, 0xE5, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x50, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x51, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xE5, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x94, 0x96, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x4E, /* 0x84-0x87 */ + 0xE5, 0x46, 0x00, 0x00, 0xE5, 0x48, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE5, 0x52, 0xE5, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE5, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x89, 0x92, /* 0x94-0x97 */ + 0x00, 0x00, 0x93, 0xE3, 0x00, 0x00, 0xE5, 0x4C, /* 0x98-0x9B */ + 0xE5, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE5, 0x45, 0x00, 0x00, 0x91, 0x45, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE5, 0x49, 0x8E, 0x46, 0x90, 0x64, 0x8C, 0x4F, /* 0xA8-0xAB */ + 0x96, 0xF2, 0x00, 0x00, 0x96, 0xF7, 0x8F, 0x92, /* 0xAC-0xAF */ + 0xEE, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE5, 0x56, 0xE5, 0x54, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x98, 0x6D, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE5, 0x53, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x97, 0x95, 0x00, 0x00, 0xE5, 0x55, /* 0xCC-0xCF */ + 0xE5, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE5, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE5, 0x5B, 0xE5, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x93, 0xA1, 0xE5, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x94, 0xCB, 0xE5, 0x4D, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x93, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE5, 0x5C, 0xE5, 0x61, 0x91, 0x94, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x60, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x41, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x62, 0x91, 0x68, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x5D, 0xE5, 0x5F, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x5E, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x9F, 0x50, 0x9F, 0x41, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x64, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x63, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x97, 0x96, 0x00, 0x00, 0xE1, 0xBA, /* 0x2C-0x2F */ + 0xE5, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x66, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xE5, 0x67, 0x8C, 0xD5, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8B, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE5, 0x69, 0x99, 0x7C, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x95, 0x00, 0x00, /* 0x58-0x5B */ + 0x97, 0xB8, 0x00, 0x00, 0x8B, 0xF1, 0xE5, 0x6A, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x6B, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x8E, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xE5, 0x6C, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x93, 0xF8, 0x00, 0x00, 0x88, 0xB8, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xE1, 0xE5, 0x71, /* 0x88-0x8B */ + 0xE5, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x6D, /* 0x90-0x93 */ + 0x00, 0x00, 0x8E, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x6E, /* 0xA0-0xA3 */ + 0x94, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE5, 0x6F, 0xE5, 0x70, 0xE5, 0x7A, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x74, /* 0xAC-0xAF */ + 0xE5, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x73, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE5, 0x75, 0x00, 0x00, 0xE5, 0x76, 0x8E, 0xD6, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE5, 0x78, 0x00, 0x00, 0x92, 0x60, /* 0xC8-0xCB */ + 0x00, 0x00, 0x8C, 0x75, 0x8A, 0x61, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE5, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x8A, 0x5E, 0x00, 0x00, 0xE5, 0x81, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x7C, 0xE5, 0x80, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x94, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE5, 0x7D, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE5, 0x7E, 0x95, 0x67, 0x94, 0xD8, 0xE5, 0x82, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x91, 0xFB, 0xE5, 0x8C, 0x00, 0x00, 0xE5, 0x88, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xE9, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xE5, 0x86, 0x00, 0x00, 0x96, 0x49, 0xE5, 0x87, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x84, 0x00, 0x00, /* 0x04-0x07 */ + 0xE5, 0x85, 0xE5, 0x8A, 0xE5, 0x8D, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE5, 0x8B, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE5, 0x89, 0xE5, 0x83, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x92, 0x77, 0x00, 0x00, 0xE5, 0x94, 0x00, 0x00, /* 0x18-0x1B */ + 0x96, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE5, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE5, 0x93, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE5, 0x8E, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x90, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x91, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x8F, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x90, 0xE4, 0x00, 0x00, 0x98, 0x58, /* 0x48-0x4B */ + 0xE5, 0x98, 0x00, 0x00, 0xE5, 0x99, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x9F, /* 0x50-0x53 */ + 0x00, 0x00, 0x90, 0x49, 0x00, 0x00, 0xE5, 0x9B, /* 0x54-0x57 */ + 0x00, 0x00, 0xE5, 0x9E, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x96, /* 0x5C-0x5F */ + 0xE5, 0x95, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA0, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xDA, 0x00, 0x00, /* 0x64-0x67 */ + 0xE5, 0x9C, 0x00, 0x00, 0xE5, 0xA1, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x9D, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE5, 0x9A, 0x00, 0x00, 0x92, 0xB1, 0x00, 0x00, /* 0x74-0x77 */ + 0xE5, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0x88, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA5, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x97, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA4, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA3, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xAC, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA6, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xAE, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0x86, 0xE5, 0xB1, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE5, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE5, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE5, 0xAD, 0x00, 0x00, 0xE5, 0xB0, 0xE5, 0xAF, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA7, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xE5, 0xAA, 0x00, 0x00, 0xE5, 0xBB, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xE5, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB2, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB3, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB8, 0xE5, 0xB9, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x8A, 0x49, 0x00, 0x00, 0x8B, 0x61, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB7, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xE5, 0xA2, 0x00, 0x00, 0xEE, 0x85, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE5, 0xB6, 0xE5, 0xBA, 0xE5, 0xB5, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE5, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xE5, 0xBE, 0xE5, 0xBD, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE5, 0xC0, 0xE5, 0xBF, 0xE5, 0x79, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xC4, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE5, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xC2, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xE5, 0xC3, 0x00, 0x00, 0xE5, 0xC5, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x8C, 0x8C, 0x00, 0x00, 0xE5, 0xC7, 0x00, 0x00, /* 0x40-0x43 */ + 0xE5, 0xC6, 0x00, 0x00, 0x8F, 0x4F, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x8D, 0x73, 0x9F, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xC8, 0x8F, 0x70, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x58, /* 0x54-0x57 */ + 0x00, 0x00, 0xE5, 0xC9, 0x00, 0x00, 0x89, 0x71, /* 0x58-0x5B */ + 0x00, 0x00, 0x8F, 0xD5, 0xE5, 0xCA, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x8D, 0x74, 0xE5, 0xCB, 0x88, 0xDF, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x95, 0x5C, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xCC, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x90, 0x8A, 0x00, 0x00, 0xE5, 0xD3, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xE5, 0xD0, 0x00, 0x00, 0x92, 0x8F, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE5, 0xD1, 0xE5, 0xCE, 0x8B, 0xDC, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE5, 0xCD, 0xE5, 0xD4, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x8C, 0x55, 0x00, 0x00, 0x00, 0x00, 0x91, 0xDC, /* 0x88-0x8B */ + 0x00, 0x00, 0xE5, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xD6, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xB3, 0xE5, 0xD5, /* 0x94-0x97 */ + 0x00, 0x00, 0xE5, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xCF, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xD9, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE5, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xED, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xD7, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE5, 0xDC, 0xE5, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x8C, 0xD1, 0xE5, 0xD2, 0x00, 0x00, 0x88, 0xBF, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xDD, /* 0xBC-0xBF */ + 0x00, 0x00, 0x8D, 0xD9, 0x97, 0xF4, 0xE5, 0xDF, /* 0xC0-0xC3 */ + 0xE5, 0xE0, 0x91, 0x95, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xA0, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE5, 0xE1, 0x97, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE5, 0xE2, 0xE5, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x95, 0xE2, 0xE5, 0xE4, 0x00, 0x00, 0x8D, 0xBE, /* 0xDC-0xDF */ + 0x00, 0x00, 0x97, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE5, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xEA, 0x8F, 0xD6, /* 0xF0-0xF3 */ + 0xE5, 0xE8, 0xEE, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x97, 0x87, 0xE5, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE5, 0xE7, 0x90, 0xBB, 0x90, 0x9E, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE6, 0x00, 0x00, /* 0x00-0x03 */ + 0xE5, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x95, 0xA1, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xED, 0x00, 0x00, /* 0x08-0x0B */ + 0xE5, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x8A, 0x8C, 0x00, 0x00, 0x96, 0x4A, 0xE5, 0xEE, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xED, 0x41, 0xE5, 0xFA, 0xE5, 0xF0, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE5, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xF2, 0xE5, 0xF3, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xF7, 0x00, 0x00, /* 0x34-0x37 */ + 0xE5, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xF6, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE5, 0xF4, 0x00, 0x00, 0xE5, 0xEF, /* 0x40-0x43 */ + 0xE5, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE5, 0xF9, 0xE8, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xA6, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xFC, 0x8B, 0xDD, /* 0x5C-0x5F */ + 0xE5, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xE6, 0x41, 0x00, 0x00, 0xE6, 0x40, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x43, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xE6, 0x42, 0x00, 0x00, 0xE6, 0x44, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x8F, 0x50, 0x00, 0x00, /* 0x70-0x73 */ + 0xE6, 0x45, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x46, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x47, 0x90, 0xBC, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x97, 0x76, 0x00, 0x00, 0xE6, 0x48, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xA2, 0x94, 0x65, /* 0x84-0x87 */ + 0xE6, 0x49, 0x00, 0x00, 0xE6, 0x4A, 0x8C, 0xA9, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x4B, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x4B, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x8B, 0x94, 0x60, /* 0x94-0x97 */ + 0xE6, 0x4C, 0x00, 0x00, 0x8A, 0x6F, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE6, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x4F, 0x97, 0x97, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE6, 0x4E, 0x90, 0x65, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE6, 0x50, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x51, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x52, 0x8A, 0xCF, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x53, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE6, 0x54, 0x00, 0x00, 0xE6, 0x55, /* 0xBC-0xBF */ + 0xE6, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x8A, 0x70, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x57, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE6, 0x58, 0xE6, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xF0, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x47, 0xE6, 0x5A, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE6, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xE6, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_8A[512] = { + 0x8C, 0xBE, 0x00, 0x00, 0x92, 0xF9, 0xE6, 0x5D, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x8C, 0x76, 0x00, 0x00, 0x90, 0x75, 0x00, 0x00, /* 0x08-0x0B */ + 0xE6, 0x60, 0x00, 0x00, 0x93, 0xA2, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE6, 0x5F, 0x00, 0x00, 0xEE, 0x87, 0x8C, 0x50, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x5E, 0x91, 0xF5, /* 0x14-0x17 */ + 0x8B, 0x4C, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x61, /* 0x18-0x1B */ + 0x00, 0x00, 0xE6, 0x62, 0x00, 0x00, 0x8F, 0xD7, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x8D, /* 0x20-0x23 */ + 0x00, 0x00, 0xE6, 0x63, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x4B, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x90, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8B, 0x96, 0x00, 0x00, 0x96, 0xF3, /* 0x30-0x33 */ + 0x91, 0x69, 0x00, 0x00, 0xE6, 0x64, 0xEE, 0x88, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x66, 0x92, 0x90, /* 0x38-0x3B */ + 0x8F, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE6, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x68, 0x00, 0x00, /* 0x44-0x47 */ + 0xE6, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x8D, 0xBC, 0x91, 0xC0, 0xE6, 0x67, 0x00, 0x00, /* 0x50-0x53 */ + 0x8F, 0xD9, 0x95, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x66, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x8C, 0x00, 0x00, /* 0x5C-0x5F */ + 0x89, 0x72, 0x00, 0x00, 0xE6, 0x6D, 0x8C, 0x77, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x8E, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x8E, 0x8D, 0x00, 0x00, 0x98, 0x6C, /* 0x68-0x6B */ + 0xE6, 0x6C, 0xE6, 0x6B, 0x91, 0x46, 0x00, 0x00, /* 0x6C-0x6F */ + 0x8B, 0x6C, 0x98, 0x62, 0x8A, 0x59, 0x8F, 0xDA, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xEE, 0x89, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE6, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x6F, 0x00, 0x00, /* 0x80-0x83 */ + 0xE6, 0x70, 0xE6, 0x6E, 0x00, 0x00, 0x8C, 0xD6, /* 0x84-0x87 */ + 0x00, 0x00, 0x97, 0x5F, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x8E, 0x8F, 0x94, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE6, 0x73, 0x00, 0x00, 0x90, 0xBE, /* 0x90-0x93 */ + 0x00, 0x00, 0x92, 0x61, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x97, 0x55, 0x00, 0x00, 0xE6, 0x76, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xEA, 0x00, 0x00, /* 0x9C-0x9F */ + 0x90, 0xBD, 0xE6, 0x72, 0x00, 0x00, 0xE6, 0x77, /* 0xA0-0xA3 */ + 0x8C, 0xEB, 0xE6, 0x74, 0xE6, 0x75, 0xEE, 0x8A, /* 0xA4-0xA7 */ + 0xE6, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x90, 0xE0, 0x93, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x92, 0x4E, 0x00, 0x00, 0x89, 0xDB, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x94, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x8B, 0x62, 0x00, 0x00, 0xEE, 0x8B, 0x92, 0xB2, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x7A, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE6, 0x78, 0x00, 0x00, 0x00, 0x00, 0x92, 0x6B, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xBF, /* 0xC8-0xCB */ + 0x8A, 0xD0, 0xE6, 0x79, 0x00, 0x00, 0x90, 0x7A, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xC8, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x5F, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x7B, 0xE6, 0x87, /* 0xD8-0xDB */ + 0x92, 0xB3, 0x00, 0x00, 0xE6, 0x86, 0xEE, 0x8C, /* 0xDC-0xDF */ + 0xE6, 0x83, 0xE6, 0x8B, 0xE6, 0x84, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE6, 0x80, 0x00, 0x00, 0x92, 0xFA, 0xE6, 0x7E, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x7C, /* 0xE8-0xEB */ + 0x00, 0x00, 0x97, 0x40, 0x8E, 0x90, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE6, 0x81, 0x00, 0x00, 0xE6, 0x7D, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x8E, 0xE6, 0x85, /* 0xF4-0xF7 */ + 0x8F, 0x94, 0x00, 0x00, 0x8C, 0xBF, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xF8, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0x96, 0x64, 0x89, 0x79, 0x88, 0xE0, 0x00, 0x00, /* 0x00-0x03 */ + 0x93, 0xA3, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x89, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xE6, 0x88, 0x00, 0x00, 0x93, 0xE4, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE6, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xE6, 0x82, 0x00, 0x00, 0xE6, 0x8C, 0xE6, 0x8E, /* 0x14-0x17 */ + 0x00, 0x00, 0x8C, 0xAA, 0xE6, 0x8A, 0x8D, 0x75, /* 0x18-0x1B */ + 0x00, 0x00, 0x8E, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE6, 0x8F, 0x97, 0x77, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x92, 0x00, 0x00, /* 0x24-0x27 */ + 0xE6, 0x95, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x93, /* 0x28-0x2B */ + 0x95, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x90, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x8B, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x94, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE6, 0x96, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE6, 0x9A, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE6, 0x97, 0x00, 0x00, 0xE6, 0x99, 0xE6, 0x98, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x8F, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x9B, 0x00, 0x00, /* 0x54-0x57 */ + 0x8E, 0xAF, 0x00, 0x00, 0xE6, 0x9D, 0xE6, 0x9C, /* 0x58-0x5B */ + 0x95, 0x88, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x9F, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x78, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x9E, /* 0x68-0x6B */ + 0xE6, 0xA0, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xA1, /* 0x6C-0x6F */ + 0x8B, 0x63, 0xE3, 0xBF, 0x8F, 0xF7, 0x00, 0x00, /* 0x70-0x73 */ + 0xE6, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xEC, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE6, 0xA3, 0x00, 0x00, 0xEE, 0x90, /* 0x7C-0x7F */ + + 0xE6, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x5D, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x9D, 0xCC, 0x00, 0x00, /* 0x88-0x8B */ + 0xE6, 0xA5, 0x00, 0x00, 0xE6, 0xA6, 0x00, 0x00, /* 0x8C-0x8F */ + 0x8F, 0x51, 0x00, 0x00, 0xE6, 0xA7, 0xE6, 0xA8, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xA9, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xE6, 0xAA, 0xE6, 0xAB, 0x00, 0x00, /* 0x98-0x9B */ +}; + +static unsigned char u2c_8C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x4A, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xAC, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xAE, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE6, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0xA4, 0x00, 0x00, /* 0x44-0x47 */ + 0xE6, 0xAF, 0x00, 0x00, 0x96, 0x4C, 0x00, 0x00, /* 0x48-0x4B */ + 0xE6, 0xB0, 0x00, 0x00, 0xE6, 0xB1, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE6, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE6, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0xD8, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x8F, 0xDB, 0xE6, 0xB4, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0x8B, 0x98, 0xAC, /* 0x68-0x6B */ + 0xE6, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xE6, 0xB6, 0x95, 0x5E, 0xE6, 0xB7, 0x00, 0x00, /* 0x78-0x7B */ + 0xE6, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xB8, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xE6, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE6, 0xB9, 0xE6, 0xBB, 0x00, 0x00, /* 0x88-0x8B */ + 0x96, 0x65, 0xE6, 0xBC, 0xE6, 0xBD, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE6, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xE6, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x8A, 0x4C, 0x92, 0xE5, 0x00, 0x00, /* 0x9C-0x9F */ + 0x95, 0x89, 0x8D, 0xE0, 0x8D, 0x76, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x6E, /* 0xA4-0xA7 */ + 0x89, 0xDD, 0x94, 0xCC, 0xE6, 0xC3, 0x8A, 0xD1, /* 0xA8-0xAB */ + 0x90, 0xD3, 0xE6, 0xC2, 0xE6, 0xC7, 0x92, 0x99, /* 0xAC-0xAF */ + 0x96, 0xE1, 0x00, 0x00, 0xE6, 0xC5, 0xE6, 0xC6, /* 0xB0-0xB3 */ + 0x8B, 0x4D, 0x00, 0x00, 0xE6, 0xC8, 0x94, 0x83, /* 0xB4-0xB7 */ + 0x91, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x94, 0xEF, /* 0xB8-0xBB */ + 0x93, 0x5C, 0xE6, 0xC4, 0x00, 0x00, 0x96, 0x66, /* 0xBC-0xBF */ + 0x89, 0xEA, 0xE6, 0xCA, 0x98, 0x47, 0x92, 0xC0, /* 0xC0-0xC3 */ + 0x98, 0x64, 0x00, 0x00, 0x00, 0x00, 0x8E, 0x91, /* 0xC4-0xC7 */ + 0xE6, 0xC9, 0x00, 0x00, 0x91, 0xAF, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE6, 0xDA, 0x91, 0x47, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x93, 0xF6, 0x00, 0x00, 0x95, 0x6F, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xCD, 0x8E, 0x5E, /* 0xD8-0xDB */ + 0x8E, 0x92, 0x00, 0x00, 0x8F, 0xDC, 0x00, 0x00, /* 0xDC-0xDF */ + 0x94, 0x85, 0x00, 0x00, 0x8C, 0xAB, 0xE6, 0xCC, /* 0xE0-0xE3 */ + 0xE6, 0xCB, 0x00, 0x00, 0x95, 0x8A, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xBF, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x93, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xEE, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xEE, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xCF, 0xE6, 0xD0, /* 0xF8-0xFB */ + 0x8D, 0x77, 0xE6, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xE6, 0xD1, 0xE6, 0xD2, 0x00, 0x00, 0xE6, 0xD4, /* 0x04-0x07 */ + 0x91, 0xA1, 0x00, 0x00, 0xE6, 0xD3, 0x8A, 0xE4, /* 0x08-0x0B */ + 0x00, 0x00, 0xE6, 0xD6, 0x00, 0x00, 0xE6, 0xD5, /* 0x0C-0x0F */ + 0xE6, 0xD7, 0x00, 0x00, 0xEE, 0x93, 0xE6, 0xD9, /* 0x10-0x13 */ + 0xE6, 0xDB, 0x00, 0x00, 0xE6, 0xDC, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x90, 0xD4, 0x00, 0x00, 0x8E, 0xCD, 0xE6, 0xDD, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x71, /* 0x68-0x6B */ + 0x00, 0x00, 0xE6, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x91, 0x96, 0xE6, 0xDF, 0x00, 0x00, 0xE6, 0xE0, /* 0x70-0x73 */ + 0x95, 0x8B, 0x00, 0x00, 0xEE, 0x94, 0x8B, 0x4E, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE6, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x92, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x7A, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xE6, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xEF, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x90, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xAB, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE5, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE4, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE3, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xEB, /* 0xC8-0xCB */ + 0xE6, 0xE9, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE6, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE8, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE7, 0xE6, 0xEA, /* 0xD8-0xDB */ + 0x00, 0x00, 0x8B, 0x97, 0x00, 0x00, 0xE6, 0xEE, /* 0xDC-0xDF */ + 0x00, 0x00, 0x90, 0xD5, 0x00, 0x00, 0xE6, 0xEF, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x8C, 0xD7, 0x00, 0x00, 0xE6, 0xEC, 0xE6, 0xED, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x48, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xB5, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x91, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xE6, 0xF1, 0xE6, 0xF2, 0x97, 0x78, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xA5, /* 0x0C-0x0F */ + 0xE6, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xE6, 0xF4, 0xE6, 0xF5, 0xE6, 0xF7, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x48, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE6, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE6, 0xFB, 0xE6, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xF8, 0x00, 0x00, /* 0x40-0x43 */ + 0x92, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x40, /* 0x44-0x47 */ + 0xE7, 0x44, 0xE7, 0x41, 0xE6, 0xFC, 0x00, 0x00, /* 0x48-0x4B */ + 0xE7, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE7, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE7, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE7, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xD6, /* 0x5C-0x5F */ + 0xE7, 0x47, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x49, /* 0x60-0x63 */ + 0xE7, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x4C, 0x00, 0x00, /* 0x70-0x73 */ + 0x8F, 0x52, 0x00, 0x00, 0xE7, 0x4B, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE7, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE7, 0x4E, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xE7, 0x51, 0xE7, 0x50, 0x00, 0x00, 0xE7, 0x4F, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x53, 0xE7, 0x52, /* 0x88-0x8B */ + 0x00, 0x00, 0x96, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE7, 0x55, 0x00, 0x00, 0xE7, 0x54, /* 0x90-0x93 */ + 0xE7, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xE7, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE7, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x58, 0x90, 0x67, /* 0xA8-0xAB */ + 0xE7, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xEB, /* 0xAC-0xAF */ + 0xE7, 0x5B, 0xE7, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x5E, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE7, 0x5F, 0xE7, 0x5C, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE7, 0x60, 0x00, 0x00, 0x8E, 0xD4, 0xE7, 0x61, /* 0xC8-0xCB */ + 0x8B, 0x4F, 0x8C, 0x52, 0x00, 0x00, 0xEE, 0x96, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0xAC, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x62, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xEE, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x5D, 0xE7, 0x63, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x66, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x8E, 0xB2, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x65, /* 0xF8-0xFB */ + 0xE7, 0x64, 0x8C, 0x79, 0xE7, 0x67, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x72, /* 0x00-0x03 */ + 0x00, 0x00, 0xE7, 0x69, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x8D, 0xDA, 0xE7, 0x68, 0x00, 0x00, /* 0x08-0x0B */ + 0xE7, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x6B, 0xE7, 0x6D, /* 0x10-0x13 */ + 0x95, 0xE3, 0xE7, 0x6A, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE7, 0x6C, 0x00, 0x00, 0xE7, 0x70, /* 0x18-0x1B */ + 0xE7, 0x6E, 0x8B, 0x50, 0x00, 0x00, 0xE7, 0x6F, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x72, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x94, 0x79, 0x97, 0xD6, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x53, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x73, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x97, 0x41, 0xE7, 0x75, 0x00, 0x00, 0xE7, 0x74, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x78, 0x97, 0x60, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x77, 0x00, 0x00, /* 0x40-0x43 */ + 0x8A, 0x8D, 0xE7, 0x76, 0xE7, 0x7B, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE7, 0x7A, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE7, 0x79, 0x93, 0x51, 0xE7, 0x7C, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x7D, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xE7, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x8C, /* 0x5C-0x5F */ + 0x00, 0x00, 0x8C, 0x44, 0xE7, 0x80, 0xE7, 0x81, /* 0x60-0x63 */ + 0xE7, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x68, /* 0x98-0x9B */ + 0xE7, 0x83, 0x00, 0x00, 0x8E, 0xAB, 0xE7, 0x84, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x85, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x9F, /* 0xA4-0xA7 */ + 0x99, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE7, 0x86, 0xE3, 0x90, 0xE7, 0x87, /* 0xAC-0xAF */ + 0x92, 0x43, 0x90, 0x4A, 0x94, 0x5F, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x88, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0xD3, 0x92, 0xD2, /* 0xB8-0xBB */ + 0x8D, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x92, 0x48, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x49, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x96, 0x98, 0x90, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x8C, 0x7D, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x8B, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x95, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x89, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x8B, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE7, 0x8A, 0x89, 0xDE, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x93, 0xF4, 0xE7, 0x8C, 0x94, 0x97, /* 0xE8-0xEB */ + 0x00, 0x00, 0x93, 0x52, 0x00, 0x00, 0xE7, 0x8D, /* 0xEC-0xEF */ + 0x8F, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE7, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x96, 0xC0, /* 0xF4-0xF7 */ + 0xE7, 0x9E, 0xE7, 0x91, 0xE7, 0x92, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x92, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0x91, 0xDE, 0x91, 0x97, 0x00, 0x00, 0x93, 0xA6, /* 0x00-0x03 */ + 0x00, 0x00, 0xE7, 0x90, 0x8B, 0x74, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x99, /* 0x08-0x0B */ + 0x00, 0x00, 0xE7, 0x96, 0xE7, 0xA3, 0x93, 0xA7, /* 0x0C-0x0F */ + 0x92, 0x80, 0xE7, 0x93, 0x00, 0x00, 0x92, 0xFC, /* 0x10-0x13 */ + 0x93, 0x72, 0xE7, 0x94, 0xE7, 0x98, 0x90, 0x80, /* 0x14-0x17 */ + 0x00, 0x00, 0x94, 0x87, 0x92, 0xCA, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x90, 0xC0, 0xE7, 0x97, 0x91, 0xAC, /* 0x1C-0x1F */ + 0x91, 0xA2, 0xE7, 0x95, 0x88, 0xA7, 0x98, 0x41, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x9A, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0xDF, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x8F, 0x54, 0x90, 0x69, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE7, 0x9C, 0xE7, 0x9B, 0x00, 0x00, /* 0x34-0x37 */ + 0x88, 0xED, 0xE7, 0x9D, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x95, 0x4E, 0x00, 0x00, 0xE7, 0xA5, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x93, 0xD9, 0x90, 0x8B, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x92, 0x78, 0x00, 0x00, 0x8B, 0xF6, /* 0x44-0x47 */ + 0x00, 0x00, 0xE7, 0xA4, 0x97, 0x56, 0x89, 0x5E, /* 0x48-0x4B */ + 0x00, 0x00, 0x95, 0xD5, 0x89, 0xDF, 0xE7, 0x9F, /* 0x4C-0x4F */ + 0xE7, 0xA0, 0xE7, 0xA1, 0xE7, 0xA2, 0x93, 0xB9, /* 0x50-0x53 */ + 0x92, 0x42, 0x88, 0xE1, 0xE7, 0xA6, 0x00, 0x00, /* 0x54-0x57 */ + 0xE7, 0xA7, 0xEA, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x91, 0xBB, 0x00, 0x00, 0xE7, 0xA8, 0x00, 0x00, /* 0x5C-0x5F */ + 0x89, 0x93, 0x91, 0x6B, 0x00, 0x00, 0x8C, 0xAD, /* 0x60-0x63 */ + 0x00, 0x00, 0x97, 0x79, 0x00, 0x00, 0xEE, 0x99, /* 0x64-0x67 */ + 0xE7, 0xA9, 0x93, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x91, 0x98, 0x8E, 0xD5, 0xE7, 0xAA, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xAD, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x8F, 0x85, 0xE7, 0xAB, 0x91, 0x4A, /* 0x74-0x77 */ + 0x91, 0x49, 0x00, 0x00, 0x88, 0xE2, 0x00, 0x00, /* 0x78-0x7B */ + 0x97, 0xC9, 0xE7, 0xAF, 0x00, 0x00, 0x94, 0xF0, /* 0x7C-0x7F */ + + 0xE7, 0xB1, 0xE7, 0xB0, 0xE7, 0xAE, 0xE2, 0x84, /* 0x80-0x83 */ + 0x8A, 0xD2, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x8E, /* 0x84-0x87 */ + 0x00, 0x00, 0xE7, 0xB3, 0xE7, 0xB2, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xB4, /* 0x8C-0x8F */ + 0x00, 0x00, 0x97, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0xDF, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x4D, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE7, 0xB5, 0x00, 0x00, 0x8E, 0xD7, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xB6, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE7, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE7, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x93, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x88, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x8D, 0x78, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x59, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xBC, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x9A, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x8C, 0x53, 0xE7, 0xB9, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE7, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x95, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x8A, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x97, 0x58, 0x00, 0x00, 0x8B, 0xBD, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x93, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xBD, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xBE, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xEE, 0x9C, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE7, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0x9D, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x93, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE7, 0xC1, 0x00, 0x00, 0xE7, 0xC0, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x93, 0xD1, 0xE7, 0xC2, 0x8F, 0x55, /* 0x48-0x4B */ + 0x8E, 0xDE, 0x94, 0x7A, 0x92, 0x91, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xF0, 0x00, 0x00, /* 0x50-0x53 */ + 0x90, 0x8C, 0x00, 0x00, 0xE7, 0xC3, 0x00, 0x00, /* 0x54-0x57 */ + 0xE7, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x90, 0x7C, 0xE7, 0xC5, /* 0x60-0x63 */ + 0x00, 0x00, 0xE7, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE7, 0xC7, 0x97, 0x8F, 0x00, 0x00, /* 0x68-0x6B */ + 0x8F, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xC9, 0xE7, 0xC8, /* 0x70-0x73 */ + 0x00, 0x00, 0x8D, 0x79, 0x00, 0x00, 0x8D, 0x93, /* 0x74-0x77 */ + 0x8E, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xCC, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x86, /* 0x84-0x87 */ + 0x00, 0x00, 0xE7, 0xCB, 0x00, 0x00, 0xE7, 0xCA, /* 0x88-0x8B */ + 0x00, 0x00, 0x91, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x8C, 0xED, 0x00, 0x00, 0x90, 0xC1, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xAE, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x8F, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xCD, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x8F, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xD0, 0xE7, 0xCE, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xCF, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE7, 0xD2, 0xE7, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x8F, 0xF8, 0x00, 0x00, 0xE7, 0xD3, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE7, 0xD4, 0xE7, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xCE, 0x8D, 0xD1, /* 0xC4-0xC7 */ + 0x8E, 0xDF, 0xE7, 0xD6, 0x00, 0x00, 0xE7, 0xD7, /* 0xC8-0xCB */ + 0x97, 0xA2, 0x8F, 0x64, 0x96, 0xEC, 0x97, 0xCA, /* 0xCC-0xCF */ + 0xE7, 0xD8, 0x8B, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xD9, 0xEE, 0x9F, /* 0xD4-0xD7 */ + 0x93, 0x42, 0x00, 0x00, 0xEE, 0x9E, 0xE7, 0xDC, /* 0xD8-0xDB */ + 0x8A, 0x98, 0x90, 0x6A, 0xEE, 0xA0, 0xE7, 0xDA, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE7, 0xDB, 0x00, 0x00, 0x92, 0xDE, /* 0xE0-0xE3 */ + 0xEE, 0xA3, 0xEE, 0xA4, 0x96, 0x74, 0x8B, 0xFA, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xEE, 0xA1, 0xEE, 0xA2, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xE7, 0xDE, 0xE7, 0xDF, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE7, 0xDD, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xE1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xA5, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xA7, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x93, 0xDD, 0x8A, 0x62, 0x00, 0x00, /* 0x0C-0x0F */ + 0xEE, 0xA6, 0xE7, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xE7, 0xE2, 0xE7, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xE0, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE8, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xE7, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x97, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xD8, /* 0x34-0x37 */ + 0x00, 0x00, 0xEE, 0xAE, 0xEE, 0xA8, 0x00, 0x00, /* 0x38-0x3B */ + 0xEE, 0xAA, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xED, /* 0x3C-0x3F */ + 0xEE, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x93, 0x53, 0xE7, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xE7, 0xEB, 0xE7, 0xE9, 0x00, 0x00, 0xE7, 0xEE, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xAB, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE7, 0xEF, 0xEE, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xE7, /* 0x54-0x57 */ + 0x00, 0x00, 0xEE, 0xAC, 0xE7, 0xF4, 0x89, 0x94, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xE6, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xAB, 0x00, 0x00, /* 0x60-0x63 */ + 0xE7, 0xEA, 0x00, 0x00, 0x8F, 0xDE, 0xEE, 0xAF, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x8D, 0x7A, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xB1, /* 0x74-0x77 */ + 0xEE, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x67, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x8B, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x65, /* 0x80-0x83 */ + 0x00, 0x00, 0x93, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xED, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x91, 0x4C, 0x00, 0x00, 0xE7, 0xF2, /* 0x90-0x93 */ + 0x00, 0x00, 0xE7, 0xEC, 0xE7, 0xF1, 0x00, 0x00, /* 0x94-0x97 */ + 0x96, 0xC1, 0x00, 0x00, 0x92, 0xB6, 0xE7, 0xF3, /* 0x98-0x9B */ + 0xE7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xB0, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x91, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF7, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE7, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF5, /* 0xCC-0xCF */ + 0xEE, 0xB6, 0x00, 0x00, 0x96, 0x4E, 0xEE, 0xBA, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xEE, 0xB8, 0x00, 0x00, 0xEE, 0xB4, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xEE, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xEE, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x8F, 0x9B, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xB3, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE7, 0xF8, 0x95, 0xDD, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x89, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x95, 0x65, 0x92, 0x92, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x8B, 0x98, 0xED, 0x49, 0xE7, 0xFA, 0xEE, 0xBD, /* 0xF8-0xFB */ + 0x8D, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xC2, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0x4B, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF9, /* 0x0C-0x0F */ + 0x90, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x90, 0x8E, 0xE8, 0x40, 0xE8, 0x42, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xEE, 0xC1, 0xEE, 0xBF, 0x00, 0x00, /* 0x1C-0x1F */ + 0x8F, 0xF9, 0xEE, 0xBC, 0xE8, 0x41, 0xE8, 0x43, /* 0x20-0x23 */ + 0x00, 0x00, 0xEE, 0xBB, 0x8B, 0xD1, 0x00, 0x00, /* 0x24-0x27 */ + 0x95, 0x64, 0x00, 0x00, 0x00, 0x00, 0x8E, 0xE0, /* 0x28-0x2B */ + 0x98, 0x42, 0x00, 0x00, 0xE7, 0xFC, 0x8D, 0xF6, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x5E, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE8, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x44, 0xE8, 0x46, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE7, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xED, 0x42, 0x00, 0x00, 0x00, 0x00, 0x93, 0xE7, /* 0x48-0x4B */ + 0x00, 0x00, 0x93, 0x74, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x92, 0xD5, 0x00, 0x00, 0xE8, 0x4B, 0xEE, 0xC4, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x62, /* 0x58-0x5B */ + 0xE8, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE8, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x8C, 0x4C, 0x00, 0x00, 0xE8, 0x4A, 0x00, 0x00, /* 0x6C-0x6F */ + 0xEE, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x8C, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE8, 0x49, 0x00, 0x00, 0x8F, 0xDF, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x8A, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE8, 0x4F, 0x00, 0x00, 0x8D, 0xBD, 0x91, 0x99, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x92, 0xC8, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xEE, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x5A, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE8, 0x4D, 0xE8, 0x4E, 0x92, 0xC1, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE8, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE8, 0x50, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x56, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xC6, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE8, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xE8, 0x58, 0x93, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x51, 0xE8, 0x52, /* 0xD4-0xD7 */ + 0xE8, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE8, 0x57, 0xEE, 0xC7, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x8B, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE8, 0x5A, 0xE8, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE8, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xEE, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_94[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x5E, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x5F, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE8, 0x60, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x5D, /* 0x10-0x13 */ + 0xE8, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x8F, 0xE0, 0x93, 0xA8, 0xE8, 0x5B, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE8, 0x64, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x62, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xEE, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE8, 0x63, 0xE8, 0x61, 0x00, 0x00, /* 0x34-0x37 */ + 0x91, 0xF6, 0x00, 0x00, 0xE8, 0x65, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE8, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE8, 0x68, 0xEE, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xEE, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x8A, 0xD3, 0xE8, 0x67, 0x96, 0xF8, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x73, 0xE8, 0x69, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x6C, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE8, 0x6A, 0x00, 0x00, 0xE8, 0x6B, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x6D, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE8, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xE8, 0x70, 0x00, 0x00, 0xE8, 0x71, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE8, 0x74, 0xE8, 0x72, 0xE8, 0x75, 0xE8, 0x77, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE8, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ +}; + +static unsigned char u2c_95[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xB7, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x96, 0xE5, 0x00, 0x00, 0xE8, 0x78, 0x91, 0x4D, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x79, /* 0x84-0x87 */ + 0x00, 0x00, 0x95, 0xC2, 0xE8, 0x7A, 0x8A, 0x4A, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x5B, /* 0x8C-0x8F */ + 0x00, 0x00, 0x8A, 0xD5, 0xEE, 0xCC, 0x8A, 0xD4, /* 0x90-0x93 */ + 0xE8, 0x7B, 0x00, 0x00, 0xE8, 0x7C, 0x00, 0x00, /* 0x94-0x97 */ + 0xE8, 0x7D, 0xE8, 0x7E, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE8, 0x80, 0x00, 0x00, 0x8A, 0xD6, 0x8A, 0x74, /* 0xA0-0xA3 */ + 0x8D, 0x7D, 0x94, 0xB4, 0x00, 0x00, 0xE8, 0x82, /* 0xA4-0xA7 */ + 0xE8, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE8, 0x83, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x7B, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE8, 0x86, 0x00, 0x00, 0xE8, 0x85, /* 0xB8-0xBB */ + 0xE8, 0x84, 0x00, 0x00, 0xE8, 0x87, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x8A, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xC5, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x88, 0x00, 0x00, /* 0xC8-0xCB */ + 0xE8, 0x8C, 0xE8, 0x8B, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE8, 0x8E, 0xE8, 0x8D, 0xE8, 0x8F, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x93, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE8, 0x91, 0xE8, 0x93, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE8, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char u2c_96[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x95, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE8, 0x94, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xE8, 0x95, 0x00, 0x00, 0x8D, 0xE3, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0x96, 0xE8, 0x97, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x68, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x6A, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xA2, /* 0x3C-0x3F */ + 0x91, 0xC9, 0x00, 0x00, 0xE8, 0x98, 0x00, 0x00, /* 0x40-0x43 */ + 0x95, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x9B, /* 0x48-0x4B */ + 0xE8, 0x99, 0x8D, 0x7E, 0x00, 0x00, 0xE8, 0x9A, /* 0x4C-0x4F */ + 0x8C, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xC3, /* 0x58-0x5B */ + 0xE8, 0x9D, 0xE8, 0x9F, 0xE8, 0x9E, 0xE8, 0xA0, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x40, 0x90, 0x77, /* 0x60-0x63 */ + 0x8F, 0x9C, 0x8A, 0xD7, 0xE8, 0xA1, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0x86, 0x00, 0x00, /* 0x68-0x6B */ + 0xE8, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x89, 0x41, 0x00, 0x00, 0xE8, 0xA2, 0x92, 0xC2, /* 0x70-0x73 */ + 0x00, 0x00, 0x97, 0xCB, 0x93, 0xA9, 0xE8, 0x9C, /* 0x74-0x77 */ + 0x97, 0xA4, 0x00, 0x00, 0x8C, 0xAF, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x97, 0x7A, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x8B, 0xF7, 0x97, 0xB2, 0x00, 0x00, /* 0x84-0x87 */ + 0x8C, 0x47, 0x00, 0x00, 0x91, 0xE0, 0xE4, 0x40, /* 0x88-0x8B */ + 0x00, 0x00, 0xE8, 0xA4, 0x8A, 0x4B, 0x90, 0x8F, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x8A, 0x75, 0xE8, 0xA6, 0x00, 0x00, 0xE8, 0xA7, /* 0x94-0x97 */ + 0xE8, 0xA5, 0x8C, 0x84, 0x00, 0x00, 0x8D, 0xDB, /* 0x98-0x9B */ + 0x8F, 0xE1, 0xEE, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x89, 0x42, 0x00, 0x00, 0x00, 0x00, 0x97, 0xD7, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xA9, /* 0xA4-0xA7 */ + 0xE7, 0xAC, 0x00, 0x00, 0xE8, 0xA8, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xD0, /* 0xAC-0xAF */ + 0xE8, 0xAC, 0xE8, 0xAA, 0xE8, 0xAB, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE8, 0xAD, 0x00, 0x00, 0xE8, 0xAE, 0x97, 0xEA, /* 0xB4-0xB7 */ + 0xE8, 0xAF, 0xE8, 0xB0, 0x00, 0x00, 0x90, 0xC7, /* 0xB8-0xBB */ + 0x94, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x90, 0x9D, 0x8A, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x97, 0x59, 0x89, 0xEB, 0x8F, 0x57, 0x8C, 0xD9, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE8, 0xB3, 0x00, 0x00, 0xE8, 0xB2, /* 0xC8-0xCB */ + 0x8E, 0x93, 0xE8, 0xB4, 0xE8, 0xB1, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x8E, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE8, 0xB8, 0xE5, 0xAB, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x99, 0xD4, 0x00, 0x00, 0x90, 0x97, /* 0xD8-0xDB */ + 0xE8, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xA3, 0x93, 0xEF, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x89, 0x4A, 0x00, 0x00, 0x90, 0xE1, 0x8E, 0xB4, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x95, 0xB5, 0x00, 0x00, 0x89, 0x5F, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xEB, 0x97, 0x8B, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE8, 0xB9, 0x00, 0x00, 0x93, 0x64, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_97[512] = { + 0x8E, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xE8, 0xBA, 0x00, 0x00, 0xE8, 0xBB, 0x90, 0x6B, /* 0x04-0x07 */ + 0xE8, 0xBC, 0x00, 0x00, 0x97, 0xEC, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE8, 0xB7, 0xE8, 0xBE, 0xE8, 0xC0, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE8, 0xBF, 0x00, 0x00, 0xE8, 0xBD, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC1, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE8, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x91, 0x9A, 0x00, 0x00, 0x89, 0xE0, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE8, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x96, 0xB6, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC4, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE8, 0xC5, 0x00, 0x00, 0x98, 0x49, 0xEE, 0xD1, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x9E, 0x50, 0xE8, 0xC6, 0x00, 0x00, 0xEE, 0xD2, /* 0x38-0x3B */ + 0x00, 0x00, 0xE8, 0xC7, 0xE8, 0xC8, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xCC, 0xEE, 0xD3, /* 0x40-0x43 */ + 0xE8, 0xC9, 0x00, 0x00, 0xE8, 0xCA, 0x00, 0x00, /* 0x44-0x47 */ + 0xE8, 0xCB, 0xE8, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xEE, 0xD4, 0x00, 0x00, 0xEE, 0xD5, /* 0x4C-0x4F */ + 0x00, 0x00, 0xEE, 0xD6, 0x90, 0xC2, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xEE, 0xD7, 0x96, 0xF5, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x90, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xE8, 0xCE, 0x00, 0x00, 0x94, 0xF1, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE8, 0xCF, 0xEA, 0x72, 0x96, 0xCA, 0x00, 0x00, /* 0x60-0x63 */ + 0xE8, 0xD0, 0x00, 0x00, 0xE8, 0xD1, 0x00, 0x00, /* 0x64-0x67 */ + 0xE8, 0xD2, 0x8A, 0x76, 0x00, 0x00, 0xE8, 0xD4, /* 0x68-0x6B */ + 0x00, 0x00, 0x90, 0x78, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xE8, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x8C, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xE8, 0xD6, 0xE8, 0xDA, 0x00, 0x00, /* 0x78-0x7B */ + 0xE8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE8, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x8A, 0x93, 0xE8, 0xD7, 0xE8, 0xDB, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xDC, /* 0x88-0x8B */ + 0x00, 0x00, 0x88, 0xC6, 0x00, 0x00, 0xE8, 0xDD, /* 0x8C-0x8F */ + 0xE8, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x8F, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xE8, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x8B, 0x66, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE2, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE1, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x91, /* 0xA8-0xAB */ + 0x00, 0x00, 0x95, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE3, /* 0xB0-0xB3 */ + 0xE8, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE5, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE6, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE8, 0xE7, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE8, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0xD8, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE8, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xE8, 0xEA, 0x94, 0x42, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xEC, 0x89, 0xB9, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xE8, 0xEF, 0xE8, 0xEE, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x43, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0xBF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0x00, 0x00, 0x95, 0xC5, 0x92, 0xB8, 0x8D, 0xA0, /* 0x00-0x03 */ + 0x00, 0x00, 0x8D, 0x80, 0x8F, 0x87, 0x00, 0x00, /* 0x04-0x07 */ + 0x90, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xE8, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xF0, /* 0x0C-0x0F */ + 0x97, 0x61, 0x8A, 0xE6, 0x94, 0xD0, 0x93, 0xDA, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x9C, /* 0x14-0x17 */ + 0x97, 0xCC, 0x00, 0x00, 0x8C, 0x7A, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE8, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE8, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x96, 0x6A, 0x93, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x89, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xF5, /* 0x34-0x37 */ + 0xE8, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x95, 0x70, /* 0x38-0x3B */ + 0x97, 0x8A, 0xE8, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xF7, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xF9, /* 0x48-0x4B */ + 0x91, 0xE8, 0x8A, 0x7A, 0x8A, 0x7B, 0xE8, 0xF8, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x8A, 0xE7, 0x8C, 0xB0, 0x00, 0x00, 0xEE, 0xD8, /* 0x54-0x57 */ + 0x8A, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x93, 0x5E, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x97, 0xDE, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xEE, 0xD9, 0x00, 0x00, 0x8C, 0xDA, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xFA, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xFB, /* 0x6C-0x6F */ + 0xE8, 0xFC, 0xE9, 0x40, 0x00, 0x00, 0xE9, 0x42, /* 0x70-0x73 */ + 0xE9, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x95, 0x97, 0x00, 0x00, 0xE9, 0x43, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x44, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE9, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x46, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x48, /* 0xC0-0xC3 */ + 0xE9, 0x47, 0x00, 0x00, 0xE9, 0x49, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xF2, /* 0xD8-0xDB */ + 0xE3, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x90, 0x48, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x51, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE9, 0x4A, 0x00, 0x00, 0xE9, 0x4B, /* 0xE8-0xEB */ + 0x00, 0x00, 0x99, 0xAA, 0x9F, 0x5A, 0x94, 0xD1, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0xF9, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x88, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x8E, 0x94, 0x96, 0x4F, 0x8F, 0xFC, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x4C, /* 0x00-0x03 */ + 0x00, 0x00, 0x96, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE9, 0x4D, 0x97, 0x7B, 0x00, 0x00, /* 0x08-0x0B */ + 0x89, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x8E, 0x60, 0x00, 0x00, 0xE9, 0x4E, 0x89, 0xEC, /* 0x10-0x13 */ + 0xE9, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE9, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xE9, 0x52, 0xE9, 0x53, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE9, 0x55, 0xE9, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE9, 0x54, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xDC, /* 0x24-0x27 */ + 0x8A, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xE9, 0x56, 0x00, 0x00, 0xE9, 0x57, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xE9, 0x58, 0xE9, 0x59, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x5A, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xE9, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE9, 0x5B, 0x00, 0x00, 0xE9, 0x5E, /* 0x48-0x4B */ + 0xE9, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE9, 0x5D, 0xE9, 0x5F, 0xE9, 0x60, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE9, 0x62, 0x00, 0x00, 0x8B, 0xC0, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x8E, 0xF1, 0xE9, 0x63, /* 0x94-0x97 */ + 0xE9, 0x64, 0x8D, 0x81, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xDE, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xE9, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x8A, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x94, 0x6E, 0xE9, 0x66, 0xE9, 0x67, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x79, /* 0xB0-0xB3 */ + 0x93, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE9, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x94, 0x9D, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x91, 0xCA, 0x89, 0x77, 0x8B, 0xEC, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x8B, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x92, 0x93, 0xE9, 0x6D, 0x8B, 0xEE, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x89, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE9, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x6A, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE9, 0x6B, 0x00, 0x00, 0xE9, 0x69, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x77, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xE9, 0x6E, 0xE9, 0x6F, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE9, 0x70, 0xE9, 0x71, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xE9, 0x73, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x72, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8F, 0x78, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0x00, 0x00, 0xE9, 0x74, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xE9, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0x52, 0xE9, 0x75, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x91, 0x9B, 0x8C, 0xB1, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE9, 0x78, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x91, 0xCB, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x79, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x93, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x7A, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x80, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE9, 0x7D, 0x00, 0x00, 0xE9, 0x7C, 0xE9, 0x7E, /* 0x40-0x43 */ + 0x00, 0x00, 0xE9, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xE9, 0x82, 0xEE, 0xDF, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE9, 0x81, 0x00, 0x00, 0xE9, 0x84, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x8B, 0xC1, 0xE9, 0x83, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x85, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x86, 0x00, 0x00, /* 0x60-0x63 */ + 0xE9, 0x88, 0xE9, 0x87, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE9, 0x89, 0xE9, 0x8B, 0xE9, 0x8A, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x8D, 0x9C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE9, 0x8C, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE9, 0x8D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x8A, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE9, 0x8E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE9, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x90, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x90, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE9, 0x91, 0x00, 0x00, 0xE9, 0x92, /* 0xD0-0xD3 */ + 0xE9, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x8D, 0x82, 0xEE, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xEE, 0xE1, 0x00, 0x00, 0xE9, 0x94, 0xE9, 0x95, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x96, 0xE9, 0x97, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x98, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x94, 0xAF, 0xE9, 0x9A, /* 0xE8-0xEB */ + 0x00, 0x00, 0x95, 0x45, 0xE9, 0x9B, 0xE9, 0x99, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE9, 0x9D, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE9, 0x9C, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x9E, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x9F, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_9B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xA0, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE9, 0xA1, 0x00, 0x00, 0xE9, 0xA2, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xA3, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xA4, 0xE9, 0xA5, /* 0x20-0x23 */ + 0x00, 0x00, 0xE9, 0xA6, 0x00, 0x00, 0xE9, 0xA7, /* 0x24-0x27 */ + 0xE9, 0xA8, 0xE9, 0xA9, 0xE9, 0xAA, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xAB, 0xE9, 0xAC, /* 0x2C-0x2F */ + 0x00, 0x00, 0x9F, 0x54, 0xE9, 0xAD, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF6, /* 0x38-0x3B */ + 0x8B, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x8A, 0x40, 0x8D, 0xB0, 0xE9, 0xAF, /* 0x40-0x43 */ + 0xE9, 0xAE, 0x96, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xE9, 0xB1, 0xE9, 0xB2, 0xE9, 0xB0, /* 0x4C-0x4F */ + 0x00, 0x00, 0xE9, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x96, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xE9, 0xB4, 0x00, 0x00, 0x8B, 0x9B, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x44, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE3, 0x00, 0x00, /* 0x70-0x73 */ + 0xE9, 0xB5, 0xEE, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xB7, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0xBC, 0xEE, 0xE4, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE9, 0xB8, 0x95, 0xA9, 0xE9, 0xB6, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xB9, 0xE9, 0xBA, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xBB, /* 0x9C-0x9F */ + 0xE9, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE9, 0xBD, 0x00, 0x00, 0x96, 0x8E, 0x8E, 0x4C, /* 0xA8-0xAB */ + 0x00, 0x00, 0x8D, 0xF8, 0x91, 0x4E, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xEE, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE9, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE9, 0xC1, 0x00, 0x00, 0xEE, 0xE6, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC2, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x8C, 0xEF, 0xE9, 0xC0, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC3, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE9, 0xC4, 0xE9, 0xC5, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE9, 0xC9, 0x00, 0x00, 0x8E, 0x49, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xE2, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE9, 0xCA, 0xE9, 0xC7, 0xE9, 0xC6, /* 0xE0-0xE3 */ + 0xE9, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x8C, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE9, 0xCE, 0xE9, 0xCD, 0xE9, 0xCC, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x88, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_9C[512] = { + 0xEE, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xE9, 0xD8, 0x00, 0x00, 0xE9, 0xD4, 0x00, 0x00, /* 0x04-0x07 */ + 0xE9, 0xD5, 0xE9, 0xD1, 0xE9, 0xD7, 0x00, 0x00, /* 0x08-0x0B */ + 0xE9, 0xD3, 0x8A, 0x82, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x98, 0x6B, 0x00, 0x00, 0xE9, 0xD6, 0xE9, 0xD2, /* 0x10-0x13 */ + 0xE9, 0xD0, 0xE9, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xDA, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xE9, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE9, 0xDC, 0xE9, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x95, 0x68, 0xE9, 0xD9, 0x88, 0xF1, /* 0x2C-0x2F */ + 0xE9, 0xDE, 0x00, 0x00, 0xE9, 0xE0, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x8A, 0x8F, 0xE9, 0xCB, 0x89, 0x56, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE2, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE1, 0xE9, 0xDF, /* 0x44-0x47 */ + 0x92, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x96, 0x90, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0xD8, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE3, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE9, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE5, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE6, 0x00, 0x00, /* 0x74-0x77 */ + 0xE9, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x92, 0xB9, 0x00, 0x00, 0xE9, 0xE8, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x94, 0xB5, 0x00, 0x00, 0xE9, 0xED, /* 0xE8-0xEB */ + 0xE9, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE9, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x96, 0x50, /* 0xF0-0xF3 */ + 0x96, 0xC2, 0x00, 0x00, 0x93, 0xCE, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_9D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xEE, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xEF, 0x93, 0xBC, /* 0x04-0x07 */ + 0xE9, 0xEC, 0xE9, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0xA8, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF7, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xE9, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x95, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF4, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF3, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF1, 0x00, 0x00, /* 0x24-0x27 */ + 0x8A, 0x9B, 0x00, 0x00, 0xE9, 0xF0, 0x8E, 0xB0, /* 0x28-0x2B */ + 0x89, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x83, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xFA, 0xE9, 0xF9, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE9, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE9, 0xF5, 0x00, 0x00, 0xE9, 0xFB, 0x00, 0x00, /* 0x44-0x47 */ + 0xE9, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xEA, 0x44, 0xEA, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xEA, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x89, 0x4C, 0xEA, 0x40, 0xEA, 0x41, 0x00, 0x00, /* 0x5C-0x5F */ + 0x8D, 0x94, 0x96, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xEA, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE9, /* 0x68-0x6B */ + 0x96, 0x51, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x4A, /* 0x6C-0x6F */ + 0xEE, 0xE8, 0x00, 0x00, 0xEA, 0x46, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x4B, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x48, /* 0x84-0x87 */ + 0x00, 0x00, 0xEA, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0x7B, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x4C, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xEA, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xEA, 0x4E, 0x00, 0x00, 0xEA, 0x49, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF2, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x4F, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x92, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xEA, 0x53, 0x00, 0x00, 0xEA, 0x54, 0xEA, 0x52, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xEA, 0x51, 0xEA, 0x57, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xEA, 0x50, 0x00, 0x00, 0xEA, 0x55, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x56, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x59, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xEA, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x5B, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xEA, 0x5C, 0x00, 0x00, 0xEA, 0x5D, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x68, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xEA, 0x5A, 0x91, 0xE9, 0x8D, 0xEB, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xEA, 0x5E, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xEE, 0xEB, 0xEA, 0x5F, 0xEA, 0x60, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x61, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xEA, 0x62, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x8C, 0xB2, 0xEA, 0x63, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xEA, 0x64, 0x00, 0x00, 0x8E, 0xAD, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xEA, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xEA, 0x66, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x67, /* 0x88-0x8B */ + 0xEA, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xEA, 0x6B, 0xEA, 0x69, 0x98, 0x5B, /* 0x90-0x93 */ + 0x00, 0x00, 0xEA, 0x6A, 0x00, 0x00, 0x97, 0xED, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0x97, 0xD9, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xEA, 0x6D, 0x94, 0x9E, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xEA, 0x6E, 0xEA, 0x70, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xEA, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xEA, 0x6F, 0x8D, 0x8D, 0x96, 0xCB, 0x96, 0x83, /* 0xB8-0xBB */ + 0x9B, 0xF5, 0x00, 0x00, 0x9F, 0x80, 0x96, 0x9B, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x89, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xEA, 0x73, 0x8B, 0x6F, 0xEA, 0x74, 0xEA, 0x75, /* 0xCC-0xCF */ + 0xEA, 0x76, 0xEE, 0xEC, 0x8D, 0x95, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xEA, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xE0, 0xD2, 0x96, 0xD9, 0x00, 0x00, 0x91, 0xE1, /* 0xD8-0xDB */ + 0xEA, 0x78, 0xEA, 0x7A, 0xEA, 0x79, 0x00, 0x00, /* 0xDC-0xDF */ + 0xEA, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xEA, 0x7C, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xEA, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x7E, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xEA, 0x80, 0x00, 0x00, 0xEA, 0x81, 0xEA, 0x82, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xEA, 0x83, 0x00, 0x00, 0xEA, 0x84, /* 0xF8-0xFB */ + 0xEA, 0x85, 0xEA, 0x86, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x87, /* 0x04-0x07 */ + 0xEA, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x93, 0x43, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8C, 0xDB, /* 0x10-0x13 */ + 0x00, 0x00, 0xEA, 0x8A, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x91, 0x6C, 0xEA, 0x8B, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xEA, 0x8C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x40, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x8D, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x8E, 0xE2, 0x56, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xD8, 0xE8, 0xEB, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x8F, 0x00, 0x00, /* 0x50-0x53 */ + 0xEA, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x92, /* 0x5C-0x5F */ + 0xEA, 0x93, 0xEA, 0x94, 0x97, 0xEE, 0xEA, 0x91, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x95, 0xEA, 0x96, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x98, 0x00, 0x00, /* 0x68-0x6B */ + 0xEA, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x9A, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0x9B, 0xEA, 0x99, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x97, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xEA, 0x9C, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xEA, 0x9D, 0xE2, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xEA, 0x9E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ +}; + +static unsigned char u2c_DC[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ +}; + +static unsigned char u2c_F9[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xED, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xEE, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ +}; + +static unsigned char u2c_FA[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x73, 0xED, 0x7E, /* 0x0C-0x0F */ + 0xED, 0x80, 0xED, 0x95, 0xED, 0xBC, 0xED, 0xCC, /* 0x10-0x13 */ + 0xED, 0xCE, 0xED, 0xF9, 0xEE, 0x42, 0xEE, 0x59, /* 0x14-0x17 */ + 0xEE, 0x61, 0xEE, 0x62, 0xEE, 0x63, 0xEE, 0x65, /* 0x18-0x1B */ + 0xEE, 0x69, 0xEE, 0x6C, 0xEE, 0x75, 0xEE, 0x81, /* 0x1C-0x1F */ + 0xEE, 0x83, 0xEE, 0x84, 0xEE, 0x8D, 0xEE, 0x95, /* 0x20-0x23 */ + 0xEE, 0x97, 0xEE, 0x98, 0xEE, 0x9B, 0xEE, 0xB7, /* 0x24-0x27 */ + 0xEE, 0xBE, 0xEE, 0xCE, 0xEE, 0xDA, 0xEE, 0xDB, /* 0x28-0x2B */ + 0xEE, 0xDD, 0xEE, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ +}; + +static unsigned char u2c_FF[512] = { + 0x00, 0x00, 0x81, 0x49, 0xEE, 0xFC, 0x81, 0x94, /* 0x00-0x03 */ + 0x81, 0x90, 0x81, 0x93, 0x81, 0x95, 0xEE, 0xFB, /* 0x04-0x07 */ + 0x81, 0x69, 0x81, 0x6A, 0x81, 0x96, 0x81, 0x7B, /* 0x08-0x0B */ + 0x81, 0x43, 0x81, 0x7C, 0x81, 0x44, 0x81, 0x5E, /* 0x0C-0x0F */ + 0x82, 0x4F, 0x82, 0x50, 0x82, 0x51, 0x82, 0x52, /* 0x10-0x13 */ + 0x82, 0x53, 0x82, 0x54, 0x82, 0x55, 0x82, 0x56, /* 0x14-0x17 */ + 0x82, 0x57, 0x82, 0x58, 0x81, 0x46, 0x81, 0x47, /* 0x18-0x1B */ + 0x81, 0x83, 0x81, 0x81, 0x81, 0x84, 0x81, 0x48, /* 0x1C-0x1F */ + 0x81, 0x97, 0x82, 0x60, 0x82, 0x61, 0x82, 0x62, /* 0x20-0x23 */ + 0x82, 0x63, 0x82, 0x64, 0x82, 0x65, 0x82, 0x66, /* 0x24-0x27 */ + 0x82, 0x67, 0x82, 0x68, 0x82, 0x69, 0x82, 0x6A, /* 0x28-0x2B */ + 0x82, 0x6B, 0x82, 0x6C, 0x82, 0x6D, 0x82, 0x6E, /* 0x2C-0x2F */ + 0x82, 0x6F, 0x82, 0x70, 0x82, 0x71, 0x82, 0x72, /* 0x30-0x33 */ + 0x82, 0x73, 0x82, 0x74, 0x82, 0x75, 0x82, 0x76, /* 0x34-0x37 */ + 0x82, 0x77, 0x82, 0x78, 0x82, 0x79, 0x81, 0x6D, /* 0x38-0x3B */ + 0x81, 0x5F, 0x81, 0x6E, 0x81, 0x4F, 0x81, 0x51, /* 0x3C-0x3F */ + 0x81, 0x4D, 0x82, 0x81, 0x82, 0x82, 0x82, 0x83, /* 0x40-0x43 */ + 0x82, 0x84, 0x82, 0x85, 0x82, 0x86, 0x82, 0x87, /* 0x44-0x47 */ + 0x82, 0x88, 0x82, 0x89, 0x82, 0x8A, 0x82, 0x8B, /* 0x48-0x4B */ + 0x82, 0x8C, 0x82, 0x8D, 0x82, 0x8E, 0x82, 0x8F, /* 0x4C-0x4F */ + 0x82, 0x90, 0x82, 0x91, 0x82, 0x92, 0x82, 0x93, /* 0x50-0x53 */ + 0x82, 0x94, 0x82, 0x95, 0x82, 0x96, 0x82, 0x97, /* 0x54-0x57 */ + 0x82, 0x98, 0x82, 0x99, 0x82, 0x9A, 0x81, 0x6F, /* 0x58-0x5B */ + 0x81, 0x62, 0x81, 0x70, 0x81, 0x60, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0xA1, 0x00, 0xA2, 0x00, 0xA3, /* 0x60-0x63 */ + 0x00, 0xA4, 0x00, 0xA5, 0x00, 0xA6, 0x00, 0xA7, /* 0x64-0x67 */ + 0x00, 0xA8, 0x00, 0xA9, 0x00, 0xAA, 0x00, 0xAB, /* 0x68-0x6B */ + 0x00, 0xAC, 0x00, 0xAD, 0x00, 0xAE, 0x00, 0xAF, /* 0x6C-0x6F */ + 0x00, 0xB0, 0x00, 0xB1, 0x00, 0xB2, 0x00, 0xB3, /* 0x70-0x73 */ + 0x00, 0xB4, 0x00, 0xB5, 0x00, 0xB6, 0x00, 0xB7, /* 0x74-0x77 */ + 0x00, 0xB8, 0x00, 0xB9, 0x00, 0xBA, 0x00, 0xBB, /* 0x78-0x7B */ + 0x00, 0xBC, 0x00, 0xBD, 0x00, 0xBE, 0x00, 0xBF, /* 0x7C-0x7F */ + + 0x00, 0xC0, 0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, /* 0x80-0x83 */ + 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC6, 0x00, 0xC7, /* 0x84-0x87 */ + 0x00, 0xC8, 0x00, 0xC9, 0x00, 0xCA, 0x00, 0xCB, /* 0x88-0x8B */ + 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, /* 0x8C-0x8F */ + 0x00, 0xD0, 0x00, 0xD1, 0x00, 0xD2, 0x00, 0xD3, /* 0x90-0x93 */ + 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD7, /* 0x94-0x97 */ + 0x00, 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, /* 0x98-0x9B */ + 0x00, 0xDC, 0x00, 0xDD, 0x00, 0xDE, 0x00, 0xDF, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x81, 0x91, 0x81, 0x92, 0xEE, 0xF9, 0x81, 0x50, /* 0xE0-0xE3 */ + 0xEE, 0xFA, 0x81, 0x8F, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, NULL, NULL, u2c_03, u2c_04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, u2c_24, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, NULL, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u2c_DC, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, NULL, u2c_FF, }; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(const wchar_t uni, + unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni&0xFF; + unsigned char ch = (uni>>8)&0xFF; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + if (ch == 0xFF && 0x61 <= cl && cl <= 0x9F) { + out[0] = cl + 0x40; + return 1; + } + uni2charset = page_uni2charset[ch]; + if (uni2charset) { + if (boundlen < 2) + return -ENAMETOOLONG; + + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + if (out[0] == 0x00 && out[1] == 0x00) + return -EINVAL; + return 2; + } else if ((ch == 0) && (cl <= 0x7F)) { + out[0] = cl; + return 1; + } + else + return -EINVAL; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, + wchar_t *uni) +{ + unsigned char ch, cl; + wchar_t *charset2uni; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + if (rawstring[0] <= 0x7F) { + *uni = rawstring[0]; + return 1; + } + if (0xA1 <= rawstring[0] && rawstring[0] <= 0xDF) { + *uni = 0xFF00 | (rawstring[0] - 0x40); + return 1; + } + + if (boundlen < 2) + return -ENAMETOOLONG; + ch = rawstring[0]; + cl = rawstring[1]; + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl) { + *uni = charset2uni[cl]; + if (*uni == 0x0000) + return -EINVAL; + return 2; + } + else + return -EINVAL; +} + +static struct nls_table table = { + "cp932", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp932(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp932(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp932) +module_exit(exit_nls_cp932) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp936.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp9…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp936.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp936.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,11044 @@ +/* + * linux/fs/nls_cp936.c + * + * Charset cp936 translation tables. + * This translation table was generated automatically, the + * original table can be download from the Microsoft website. + * (
http://www.microsoft.com/typography/unicode/unicodecp.htm
) + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t c2u_81[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x4E02,0x4E04,0x4E05,0x4E06,0x4E0F,0x4E12,0x4E17,0x4E1F,/* 0x40-0x47 */ + 0x4E20,0x4E21,0x4E23,0x4E26,0x4E29,0x4E2E,0x4E2F,0x4E31,/* 0x48-0x4F */ + 0x4E33,0x4E35,0x4E37,0x4E3C,0x4E40,0x4E41,0x4E42,0x4E44,/* 0x50-0x57 */ + 0x4E46,0x4E4A,0x4E51,0x4E55,0x4E57,0x4E5A,0x4E5B,0x4E62,/* 0x58-0x5F */ + 0x4E63,0x4E64,0x4E65,0x4E67,0x4E68,0x4E6A,0x4E6B,0x4E6C,/* 0x60-0x67 */ + 0x4E6D,0x4E6E,0x4E6F,0x4E72,0x4E74,0x4E75,0x4E76,0x4E77,/* 0x68-0x6F */ + 0x4E78,0x4E79,0x4E7A,0x4E7B,0x4E7C,0x4E7D,0x4E7F,0x4E80,/* 0x70-0x77 */ + 0x4E81,0xF91B,0x4E83,0x4E84,0x4E85,0x4E87,0x4E8A,0x0000,/* 0x78-0x7F */ + + 0x4E90,0x4E96,0x4E97,0x4E99,0x4E9C,0x4E9D,0x4E9E,0x4EA3,/* 0x80-0x87 */ + 0x4EAA,0x4EAF,0x4EB0,0x4EB1,0x4EB4,0x4EB6,0x4EB7,0x4EB8,/* 0x88-0x8F */ + 0x4EB9,0x4EBC,0x4EBD,0x4EBE,0x4EC8,0x4ECC,0x4ECF,0x4ED0,/* 0x90-0x97 */ + 0x4ED2,0x4EDA,0x4EDB,0x4EDC,0x4EE0,0x4EE2,0x4EE6,0x4EE7,/* 0x98-0x9F */ + 0x4EE9,0x4EED,0x4EEE,0x4EEF,0x4EF1,0x4EF4,0x4EF8,0x4EF9,/* 0xA0-0xA7 */ + 0x4EFA,0x4EFC,0x4EFE,0x4F00,0x4F02,0x4F03,0x4F04,0x4F05,/* 0xA8-0xAF */ + 0x4F06,0x4F07,0x4F08,0x4F0B,0x4F0C,0x4F12,0x4F13,0x4F14,/* 0xB0-0xB7 */ + 0x4F15,0x4F16,0x4F1C,0x4F1D,0x4F21,0x4F23,0x4F28,0x4F29,/* 0xB8-0xBF */ + 0x4F2C,0x4F2D,0x4F2E,0x4F31,0x4F33,0x4F35,0x4F37,0x4F39,/* 0xC0-0xC7 */ + 0x4F3B,0x4F3E,0x4F3F,0x4F40,0x4F41,0x4F42,0x4F44,0x4F45,/* 0xC8-0xCF */ + 0x4F47,0x4F48,0x4F49,0x4F4A,0x4F4B,0x4F4C,0x4F52,0x4F54,/* 0xD0-0xD7 */ + 0x4F56,0x4F61,0x4F62,0x4F66,0x4F68,0x4F6A,0x4F6B,0x4F6D,/* 0xD8-0xDF */ + 0x4F6E,0x4F71,0x4F72,0x4F75,0x4F77,0x4F78,0x4F79,0x4F7A,/* 0xE0-0xE7 */ + 0x4F7D,0x4F80,0x4F81,0x4F82,0x4F85,0xF92D,0x4F87,0x4F8A,/* 0xE8-0xEF */ + 0x4F8C,0x4F8E,0x4F90,0x4F92,0x4F93,0x4F95,0x4F96,0x4F98,/* 0xF0-0xF7 */ + 0x4F99,0x4F9A,0x4F9C,0x4F9E,0x4F9F,0x4FA1,0x4FA2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_82[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x4FA4,0x4FAB,0x4FAD,0x4FB0,0x4FB1,0x4FB2,0x4FB3,0x4FB4,/* 0x40-0x47 */ + 0x4FB6,0x4FB7,0x4FB8,0x4FB9,0x4FBA,0x4FBB,0x4FBC,0x4FBD,/* 0x48-0x4F */ + 0x4FBE,0x4FC0,0x4FC1,0x4FC2,0x4FC6,0x4FC7,0x4FC8,0x4FC9,/* 0x50-0x57 */ + 0x4FCB,0x4FCC,0x4FCD,0x4FD2,0x4FD3,0x4FD4,0x4FD5,0x4FD6,/* 0x58-0x5F */ + 0x4FD9,0x4FDB,0x4FE0,0x4FE2,0x4FE4,0x4FE5,0x4FE7,0x4FEB,/* 0x60-0x67 */ + 0x4FEC,0x4FF0,0x4FF2,0x4FF4,0x4FF5,0x4FF6,0x4FF7,0x4FF9,/* 0x68-0x6F */ + 0x4FFB,0x4FFC,0x4FFD,0x4FFF,0x5000,0x5001,0x5002,0x5003,/* 0x70-0x77 */ + 0x5004,0x5005,0x5006,0x5007,0x5008,0x5009,0x500A,0x0000,/* 0x78-0x7F */ + + 0x500B,0x500E,0x5010,0x5011,0x5013,0x5015,0x5016,0x5017,/* 0x80-0x87 */ + 0x501B,0x501D,0x501E,0x5020,0x5022,0x5023,0x5024,0x5027,/* 0x88-0x8F */ + 0xF9D4,0x502F,0x5030,0x5031,0x5032,0x5033,0x5034,0x5035,/* 0x90-0x97 */ + 0x5036,0x5037,0x5038,0x5039,0x503B,0x503D,0x503F,0x5040,/* 0x98-0x9F */ + 0x5041,0x5042,0x5044,0x5045,0x5046,0x5049,0x504A,0x504B,/* 0xA0-0xA7 */ + 0x504D,0x5050,0x5051,0x5052,0x5053,0x5054,0x5056,0x5057,/* 0xA8-0xAF */ + 0x5058,0x5059,0x505B,0x505D,0x505E,0x505F,0x5060,0x5061,/* 0xB0-0xB7 */ + 0x5062,0x5063,0x5064,0x5066,0x5067,0x5068,0x5069,0x506A,/* 0xB8-0xBF */ + 0x506B,0x506D,0x506E,0x506F,0x5070,0x5071,0x5072,0x5073,/* 0xC0-0xC7 */ + 0x5074,0x5075,0x5078,0x5079,0x507A,0x507C,0x507D,0x5081,/* 0xC8-0xCF */ + 0x5082,0x5083,0x5084,0x5086,0x5087,0x5089,0x508A,0x508B,/* 0xD0-0xD7 */ + 0x508C,0x508E,0x508F,0x5090,0x5091,0x5092,0x5093,0x5094,/* 0xD8-0xDF */ + 0x5095,0x5096,0x5097,0x5098,0x5099,0x509A,0x509B,0x509C,/* 0xE0-0xE7 */ + 0x509D,0x509E,0x509F,0x50A0,0x50A1,0x50A2,0x50A4,0x50A6,/* 0xE8-0xEF */ + 0x50AA,0x50AB,0x50AD,0x50AE,0x50AF,0x50B0,0x50B1,0x50B3,/* 0xF0-0xF7 */ + 0x50B4,0x50B5,0x50B6,0x50B7,0x50B8,0x50B9,0x50BC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_83[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x50BD,0x50BE,0x50BF,0x50C0,0x50C1,0x50C2,0x50C3,0x50C4,/* 0x40-0x47 */ + 0x50C5,0x50C6,0x50C7,0x50C8,0x50C9,0x50CA,0x50CB,0x50CC,/* 0x48-0x4F */ + 0x50CD,0x50CE,0x50D0,0x50D1,0x50D2,0x50D3,0x50D4,0x50D5,/* 0x50-0x57 */ + 0x50D7,0x50D8,0x50D9,0x50DB,0x50DC,0x50DD,0x50DE,0x50DF,/* 0x58-0x5F */ + 0x50E0,0x50E1,0x50E2,0x50E3,0x50E4,0x50E5,0x50E8,0x50E9,/* 0x60-0x67 */ + 0x50EA,0x50EB,0x50EF,0x50F0,0x50F1,0x50F2,0x50F4,0x50F6,/* 0x68-0x6F */ + 0x50F7,0x50F8,0x50F9,0x50FA,0x50FC,0x50FD,0x50FE,0x50FF,/* 0x70-0x77 */ + 0x5100,0x5101,0x5102,0x5103,0x5104,0x5105,0x5108,0x0000,/* 0x78-0x7F */ + + 0x5109,0x510A,0x510C,0x510D,0x510E,0x510F,0x5110,0x5111,/* 0x80-0x87 */ + 0x5113,0x5114,0x5115,0x5116,0x5117,0x5118,0x5119,0x511A,/* 0x88-0x8F */ + 0x511B,0x511C,0x511D,0x511E,0x511F,0x5120,0x5122,0x5123,/* 0x90-0x97 */ + 0x5124,0x5125,0x5126,0x5127,0x5128,0x5129,0x512A,0x512B,/* 0x98-0x9F */ + 0x512C,0x512D,0x512E,0x512F,0x5130,0x5131,0x5132,0x5133,/* 0xA0-0xA7 */ + 0x5134,0x5135,0x5136,0x5137,0x5138,0x5139,0x513A,0x513B,/* 0xA8-0xAF */ + 0x513C,0x513D,0x513E,0x5142,0x5147,0x514A,0x514C,0x514E,/* 0xB0-0xB7 */ + 0x514F,0x5150,0x5152,0x5153,0x5157,0x5158,0x5159,0x515B,/* 0xB8-0xBF */ + 0x515D,0x515E,0x515F,0x5160,0x5161,0x5163,0x5164,0x5166,/* 0xC0-0xC7 */ + 0x5167,0xF978,0x516A,0x516F,0x5172,0x517A,0x517E,0x517F,/* 0xC8-0xCF */ + 0x5183,0x5184,0x5186,0x5187,0x518A,0x518B,0x518E,0x518F,/* 0xD0-0xD7 */ + 0x5190,0x5191,0x5193,0x5194,0x5198,0x519A,0x519D,0x519E,/* 0xD8-0xDF */ + 0x519F,0x51A1,0x51A3,0x51A6,0x51A7,0x51A8,0x51A9,0x51AA,/* 0xE0-0xE7 */ + 0x51AD,0x51AE,0x51B4,0x51B8,0x51B9,0x51BA,0x51BE,0x51BF,/* 0xE8-0xEF */ + 0x51C1,0x51C2,0x51C3,0x51C5,0x51C8,0x51CA,0x51CD,0x51CE,/* 0xF0-0xF7 */ + 0x51D0,0x51D2,0x51D3,0x51D4,0x51D5,0x51D6,0x51D7,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_84[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x51D8,0x51D9,0x51DA,0xF954,0xFA15,0x51DF,0x51E2,0x51E3,/* 0x40-0x47 */ + 0x51E5,0x51E6,0x51E7,0x51E8,0x51E9,0x51EA,0x51EC,0x51EE,/* 0x48-0x4F */ + 0x51F1,0x51F2,0x51F4,0x51F7,0x51FE,0x5204,0x5205,0x5209,/* 0x50-0x57 */ + 0x520B,0x520C,0x520F,0x5210,0x5213,0x5214,0x5215,0x521C,/* 0x58-0x5F */ + 0x521E,0x521F,0x5221,0x5222,0x5223,0x5225,0x5226,0x5227,/* 0x60-0x67 */ + 0x522A,0x522C,0x522F,0x5231,0x5232,0x5234,0x5235,0x523C,/* 0x68-0x6F */ + 0x523E,0x5244,0x5245,0x5246,0x5247,0x5248,0x5249,0x524B,/* 0x70-0x77 */ + 0x524E,0x524F,0x5252,0x5253,0x5255,0x5257,0x5258,0x0000,/* 0x78-0x7F */ + + 0x5259,0x525A,0x525B,0x525D,0x525F,0x5260,0x5262,0x5263,/* 0x80-0x87 */ + 0x5264,0x5266,0x5268,0x526B,0x526C,0x526D,0x526E,0x5270,/* 0x88-0x8F */ + 0x5271,0x5273,0x5274,0x5275,0x5276,0x5277,0x5278,0x5279,/* 0x90-0x97 */ + 0x527A,0x527B,0x527C,0x527E,0x5280,0x5283,0x5284,0x5285,/* 0x98-0x9F */ + 0x5286,0x5287,0xF9C7,0x528A,0x528B,0x528C,0x528D,0x528E,/* 0xA0-0xA7 */ + 0x528F,0x5291,0x5292,0x5294,0x5295,0x5296,0x5297,0x5298,/* 0xA8-0xAF */ + 0x5299,0x529A,0x529C,0x52A4,0x52A5,0x52A6,0x52A7,0x52AE,/* 0xB0-0xB7 */ + 0x52AF,0x52B0,0x52B4,0x52B5,0x52B6,0x52B7,0x52B8,0x52B9,/* 0xB8-0xBF */ + 0x52BA,0x52BB,0x52BC,0x52BD,0x52C0,0x52C1,0x52C2,0x52C4,/* 0xC0-0xC7 */ + 0x52C5,0x52C6,0x52C8,0x52CA,0x52CC,0x52CD,0x52CE,0x52CF,/* 0xC8-0xCF */ + 0x52D1,0x52D3,0x52D4,0x52D5,0x52D7,0x52D9,0x52DA,0x52DB,/* 0xD0-0xD7 */ + 0x52DC,0x52DD,0xF92F,0x52E0,0x52E1,0x52E2,0x52E3,0x52E5,/* 0xD8-0xDF */ + 0x52E6,0x52E7,0x52E8,0x52E9,0x52EA,0x52EB,0x52EC,0x52ED,/* 0xE0-0xE7 */ + 0x52EE,0x52EF,0x52F1,0x52F2,0x52F3,0x52F4,0xF97F,0x52F6,/* 0xE8-0xEF */ + 0x52F7,0x52F8,0x52FB,0x52FC,0x52FD,0x5301,0x5302,0x5303,/* 0xF0-0xF7 */ + 0x5304,0x5307,0x5309,0x530A,0x530B,0x530C,0x530E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_85[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5311,0x5312,0x5313,0x5314,0x5318,0x531B,0x531C,0x531E,/* 0x40-0x47 */ + 0x531F,0x5322,0x5324,0x5325,0x5327,0x5328,0x5329,0x532B,/* 0x48-0x4F */ + 0x532C,0x532D,0x532F,0x5330,0x5331,0x5332,0x5333,0x5334,/* 0x50-0x57 */ + 0x5335,0x5336,0x5337,0x5338,0x533C,0x533D,0x5340,0x5342,/* 0x58-0x5F */ + 0x5344,0x5346,0x534B,0x534C,0x534D,0x5350,0x5354,0x5358,/* 0x60-0x67 */ + 0x5359,0x535B,0x535D,0x5365,0x5368,0x536A,0x536C,0x536D,/* 0x68-0x6F */ + 0x5372,0x5376,0x5379,0x537B,0x537C,0x537D,0x537E,0x5380,/* 0x70-0x77 */ + 0x5381,0x5383,0x5387,0x5388,0x538A,0x538E,0x538F,0x0000,/* 0x78-0x7F */ + + 0x5390,0x5391,0x5392,0x5393,0x5394,0x5396,0x5397,0x5399,/* 0x80-0x87 */ + 0x539B,0x539C,0x539E,0x53A0,0x53A1,0x53A4,0x53A7,0x53AA,/* 0x88-0x8F */ + 0x53AB,0x53AC,0x53AD,0x53AF,0x53B0,0x53B1,0x53B2,0x53B3,/* 0x90-0x97 */ + 0x53B4,0x53B5,0x53B7,0x53B8,0x53B9,0x53BA,0x53BC,0x53BD,/* 0x98-0x9F */ + 0x53BE,0x53C0,0xF96B,0x53C4,0x53C5,0x53C6,0x53C7,0x53CE,/* 0xA0-0xA7 */ + 0x53CF,0x53D0,0x53D2,0x53D3,0x53D5,0x53DA,0x53DC,0x53DD,/* 0xA8-0xAF */ + 0x53DE,0x53E1,0x53E2,0x53E7,0x53F4,0x53FA,0x53FE,0x53FF,/* 0xB0-0xB7 */ + 0x5400,0x5402,0x5405,0x5407,0x540B,0x5414,0x5418,0x5419,/* 0xB8-0xBF */ + 0x541A,0x541C,0x5422,0x5424,0x5425,0x542A,0x5430,0x5433,/* 0xC0-0xC7 */ + 0x5436,0x5437,0x543A,0x543D,0x543F,0x5441,0xF980,0x5444,/* 0xC8-0xCF */ + 0x5445,0x5447,0x5449,0x544C,0x544D,0x544E,0x544F,0x5451,/* 0xD0-0xD7 */ + 0x545A,0x545D,0x545E,0x545F,0x5460,0x5461,0x5463,0x5465,/* 0xD8-0xDF */ + 0x5467,0x5469,0x546A,0x546B,0x546C,0x546D,0x546E,0x546F,/* 0xE0-0xE7 */ + 0x5470,0x5474,0x5479,0x547A,0x547E,0x547F,0x5481,0x5483,/* 0xE8-0xEF */ + 0x5485,0x5487,0x5488,0x5489,0x548A,0x548D,0x5491,0x5493,/* 0xF0-0xF7 */ + 0x5497,0x5498,0x549C,0x549E,0x549F,0x54A0,0x54A1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_86[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x54A2,0x54A5,0x54AE,0x54B0,0x54B2,0x54B5,0x54B6,0x54B7,/* 0x40-0x47 */ + 0x54B9,0x54BA,0x54BC,0x54BE,0x54C3,0x54C5,0x54CA,0x54CB,/* 0x48-0x4F */ + 0x54D6,0x54D8,0x54DB,0x54E0,0x54E1,0x54E2,0x54E3,0x54E4,/* 0x50-0x57 */ + 0x54EB,0x54EC,0x54EF,0x54F0,0x54F1,0x54F4,0x54F5,0x54F6,/* 0x58-0x5F */ + 0x54F7,0x54F8,0x54F9,0x54FB,0x54FE,0x5500,0x5502,0x5503,/* 0x60-0x67 */ + 0x5504,0x5505,0x5508,0x550A,0x550B,0x550C,0x550D,0x550E,/* 0x68-0x6F */ + 0x5512,0x5513,0x5515,0x5516,0x5517,0x5518,0x5519,0x551A,/* 0x70-0x77 */ + 0x551C,0x551D,0x551E,0x551F,0x5521,0x5525,0x5526,0x0000,/* 0x78-0x7F */ + + 0x5528,0x5529,0x552B,0x552D,0x5532,0x5534,0x5535,0x5536,/* 0x80-0x87 */ + 0x5538,0x5539,0x553A,0x553B,0x553D,0x5540,0x5542,0x5545,/* 0x88-0x8F */ + 0x5547,0x5548,0x554B,0x554C,0x554D,0x554E,0x554F,0x5551,/* 0x90-0x97 */ + 0x5552,0x5553,0x5554,0x5557,0x5558,0x5559,0x555A,0x555B,/* 0x98-0x9F */ + 0x555D,0x555E,0x555F,0x5560,0x5562,0x5563,0x5568,0x5569,/* 0xA0-0xA7 */ + 0x556B,0x556F,0x5570,0x5571,0x5572,0x5573,0x5574,0x5579,/* 0xA8-0xAF */ + 0x557A,0x557D,0x557F,0x5585,0x5586,0x558C,0x558D,0x558E,/* 0xB0-0xB7 */ + 0x5590,0x5592,0x5593,0x5595,0x5596,0x5597,0x559A,0x559B,/* 0xB8-0xBF */ + 0x559E,0x55A0,0x55A1,0x55A2,0x55A3,0x55A4,0x55A5,0x55A6,/* 0xC0-0xC7 */ + 0x55A8,0x55A9,0x55AA,0x55AB,0x55AC,0x55AD,0x55AE,0x55AF,/* 0xC8-0xCF */ + 0x55B0,0x55B2,0x55B4,0x55B6,0x55B8,0x55BA,0x55BC,0x55BF,/* 0xD0-0xD7 */ + 0x55C0,0x55C1,0x55C2,0x55C3,0x55C6,0x55C7,0x55C8,0x55CA,/* 0xD8-0xDF */ + 0x55CB,0x55CE,0x55CF,0x55D0,0x55D5,0x55D7,0x55D8,0x55D9,/* 0xE0-0xE7 */ + 0x55DA,0x55DB,0x55DE,0x55E0,0x55E2,0x55E7,0x55E9,0x55ED,/* 0xE8-0xEF */ + 0x55EE,0x55F0,0x55F1,0x55F4,0x55F6,0x55F8,0x55F9,0x55FA,/* 0xF0-0xF7 */ + 0x55FB,0x55FC,0x55FF,0x5602,0x5603,0x5604,0x5605,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_87[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5606,0x5607,0x560A,0x560B,0x560D,0x5610,0x5611,0x5612,/* 0x40-0x47 */ + 0x5613,0x5614,0x5615,0x5616,0x5617,0x5619,0x561A,0x561C,/* 0x48-0x4F */ + 0x561D,0x5620,0x5621,0x5622,0x5625,0x5626,0x5628,0x5629,/* 0x50-0x57 */ + 0x562A,0x562B,0x562E,0x562F,0x5630,0x5633,0x5635,0x5637,/* 0x58-0x5F */ + 0x5638,0x563A,0x563C,0x563D,0x563E,0x5640,0x5641,0x5642,/* 0x60-0x67 */ + 0x5643,0x5644,0x5645,0x5646,0x5647,0x5648,0x5649,0x564A,/* 0x68-0x6F */ + 0x564B,0x564F,0x5650,0x5651,0x5652,0x5653,0x5655,0x5656,/* 0x70-0x77 */ + 0x565A,0x565B,0x565D,0x565E,0x565F,0x5660,0x5661,0x0000,/* 0x78-0x7F */ + + 0x5663,0x5665,0x5666,0x5667,0x566D,0x566E,0x566F,0x5670,/* 0x80-0x87 */ + 0x5672,0x5673,0x5674,0x5675,0x5677,0x5678,0x5679,0x567A,/* 0x88-0x8F */ + 0x567D,0x567E,0x567F,0x5680,0x5681,0x5682,0x5683,0x5684,/* 0x90-0x97 */ + 0x5687,0x5688,0x5689,0x568A,0x568B,0x568C,0x568D,0x5690,/* 0x98-0x9F */ + 0x5691,0x5692,0x5694,0x5695,0x5696,0x5697,0x5698,0x5699,/* 0xA0-0xA7 */ + 0x569A,0x569B,0x569C,0x569D,0x569E,0x569F,0x56A0,0x56A1,/* 0xA8-0xAF */ + 0x56A2,0x56A4,0x56A5,0x56A6,0x56A7,0x56A8,0x56A9,0x56AA,/* 0xB0-0xB7 */ + 0x56AB,0x56AC,0x56AD,0x56AE,0x56B0,0x56B1,0x56B2,0x56B3,/* 0xB8-0xBF */ + 0x56B4,0x56B5,0x56B6,0x56B8,0x56B9,0x56BA,0x56BB,0x56BD,/* 0xC0-0xC7 */ + 0x56BE,0x56BF,0x56C0,0x56C1,0x56C2,0x56C3,0x56C4,0x56C5,/* 0xC8-0xCF */ + 0x56C6,0x56C7,0x56C8,0x56C9,0x56CB,0x56CC,0x56CD,0x56CE,/* 0xD0-0xD7 */ + 0x56CF,0x56D0,0x56D1,0x56D2,0x56D3,0x56D5,0x56D6,0x56D8,/* 0xD8-0xDF */ + 0x56D9,0x56DC,0x56E3,0x56E5,0x56E6,0x56E7,0x56E8,0x56E9,/* 0xE0-0xE7 */ + 0x56EA,0x56EC,0x56EE,0x56EF,0x56F2,0x56F3,0x56F6,0x56F7,/* 0xE8-0xEF */ + 0x56F8,0x56FB,0x56FC,0x5700,0x5701,0x5702,0x5705,0x5707,/* 0xF0-0xF7 */ + 0x570B,0x570C,0x570D,0x570E,0x570F,0x5710,0x5711,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_88[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5712,0x5713,0x5714,0x5715,0x5716,0x5717,0x5718,0x5719,/* 0x40-0x47 */ + 0x571A,0x571B,0x571D,0x571E,0x5720,0x5721,0x5722,0x5724,/* 0x48-0x4F */ + 0x5725,0x5726,0x5727,0x572B,0x5731,0x5732,0x5734,0x5735,/* 0x50-0x57 */ + 0x5736,0x5737,0x5738,0x573C,0x573D,0x573F,0x5741,0x5743,/* 0x58-0x5F */ + 0x5744,0x5745,0x5746,0x5748,0x5749,0x574B,0x5752,0x5753,/* 0x60-0x67 */ + 0x5754,0x5755,0x5756,0x5758,0x5759,0x5762,0x5763,0x5765,/* 0x68-0x6F */ + 0x5767,0x576C,0x576E,0x5770,0x5771,0x5772,0x5774,0x5775,/* 0x70-0x77 */ + 0x5778,0x5779,0x577A,0x577D,0x577E,0x577F,0x5780,0x0000,/* 0x78-0x7F */ + + 0x5781,0x5787,0x5788,0x5789,0x578A,0x578D,0x578E,0x578F,/* 0x80-0x87 */ + 0x5790,0x5791,0x5794,0x5795,0x5796,0x5797,0x5798,0x5799,/* 0x88-0x8F */ + 0x579A,0x579C,0x579D,0x579E,0x579F,0x57A5,0x57A8,0x57AA,/* 0x90-0x97 */ + 0x57AC,0x57AF,0x57B0,0x57B1,0x57B3,0x57B5,0x57B6,0x57B7,/* 0x98-0x9F */ + 0x57B9,0x57BA,0x57BB,0x57BC,0x57BD,0x57BE,0x57BF,0x57C0,/* 0xA0-0xA7 */ + 0x57C1,0x57C4,0x57C5,0x57C6,0x57C7,0x57C8,0x57C9,0x57CA,/* 0xA8-0xAF */ + 0x57CC,0x57CD,0x57D0,0x57D1,0x57D3,0x57D6,0x57D7,0x57DB,/* 0xB0-0xB7 */ + 0x57DC,0x57DE,0x57E1,0x57E2,0x57E3,0x57E5,0x57E6,0x57E7,/* 0xB8-0xBF */ + 0x57E8,0x57E9,0x57EA,0x57EB,0x57EC,0x57EE,0x57F0,0x57F1,/* 0xC0-0xC7 */ + 0x57F2,0x57F3,0x57F5,0x57F6,0x57F7,0x57FB,0x57FC,0x57FE,/* 0xC8-0xCF */ + 0x57FF,0x5801,0x5803,0x5804,0x5805,0x5808,0x5809,0x580A,/* 0xD0-0xD7 */ + 0x580C,0x580E,0x580F,0x5810,0x5812,0x5813,0x5814,0x5816,/* 0xD8-0xDF */ + 0x5817,0x5818,0x581A,0x581B,0x581C,0x581D,0x581F,0x5822,/* 0xE0-0xE7 */ + 0x5823,0x5825,0x5826,0x5827,0x5828,0x5829,0x582B,0x582C,/* 0xE8-0xEF */ + 0x582D,0x582E,0x582F,0x5831,0x5832,0x5833,0x5834,0x5836,/* 0xF0-0xF7 */ + 0x5837,0x5838,0x5839,0x583A,0x583B,0x583C,0x583D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_89[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x583E,0x583F,0x5840,0x5841,0x5842,0x5843,0x5845,0x5846,/* 0x40-0x47 */ + 0x5847,0x5848,0x5849,0x584A,0x584B,0x584E,0x584F,0x5850,/* 0x48-0x4F */ + 0x5852,0x5853,0x5855,0x5856,0x5857,0x5859,0xFA10,0x585B,/* 0x50-0x57 */ + 0x585C,0x585D,0x585F,0x5860,0x5861,0x5862,0x5863,0x5864,/* 0x58-0x5F */ + 0x5866,0x5867,0x5868,0x5869,0x586A,0x586D,0x586E,0x586F,/* 0x60-0x67 */ + 0x5870,0x5871,0x5872,0x5873,0x5874,0x5875,0x5876,0x5877,/* 0x68-0x6F */ + 0x5878,0x5879,0x587A,0x587B,0x587C,0x587D,0x587F,0x5882,/* 0x70-0x77 */ + 0x5884,0x5886,0x5887,0x5888,0x588A,0x588B,0x588C,0x0000,/* 0x78-0x7F */ + + 0x588D,0x588E,0x588F,0x5890,0x5891,0x5894,0x5895,0x5896,/* 0x80-0x87 */ + 0x5897,0x5898,0x589B,0x589C,0x589D,0x58A0,0x58A1,0x58A2,/* 0x88-0x8F */ + 0x58A3,0x58A4,0x58A5,0x58A6,0x58A7,0x58AA,0x58AB,0x58AC,/* 0x90-0x97 */ + 0x58AD,0x58AE,0x58AF,0x58B0,0x58B1,0x58B2,0x58B3,0x58B4,/* 0x98-0x9F */ + 0x58B5,0x58B6,0x58B7,0x58B8,0x58B9,0x58BA,0x58BB,0x58BD,/* 0xA0-0xA7 */ + 0x58BE,0x58BF,0x58C0,0x58C2,0x58C3,0x58C4,0x58C6,0x58C7,/* 0xA8-0xAF */ + 0x58C8,0x58C9,0x58CA,0x58CB,0x58CC,0x58CD,0x58CE,0x58CF,/* 0xB0-0xB7 */ + 0x58D0,0x58D2,0x58D3,0x58D4,0x58D6,0x58D7,0xF94A,0x58D9,/* 0xB8-0xBF */ + 0x58DA,0x58DB,0x58DC,0x58DD,0x58DE,0xF942,0x58E0,0x58E1,/* 0xC0-0xC7 */ + 0x58E2,0x58E3,0x58E5,0x58E6,0x58E7,0x58E8,0x58E9,0x58EA,/* 0xC8-0xCF */ + 0x58ED,0x58EF,0x58F1,0x58F2,0x58F4,0x58F5,0x58F7,0x58F8,/* 0xD0-0xD7 */ + 0x58FA,0x58FB,0x58FC,0x58FD,0x58FE,0x58FF,0x5900,0x5901,/* 0xD8-0xDF */ + 0x5903,0x5905,0x5906,0x5908,0x5909,0x590A,0x590B,0x590C,/* 0xE0-0xE7 */ + 0x590E,0x5910,0x5911,0x5912,0x5913,0x5917,0x5918,0x591B,/* 0xE8-0xEF */ + 0x591D,0x591E,0x5920,0x5921,0x5922,0x5923,0x5926,0x5928,/* 0xF0-0xF7 */ + 0x592C,0x5930,0x5932,0x5933,0x5935,0x5936,0x593B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8A[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x593D,0x593E,0x593F,0x5940,0x5943,0x5945,0x5946,0x594A,/* 0x40-0x47 */ + 0x594C,0x594D,0x5950,0x5952,0x5953,0x5959,0x595B,0x595C,/* 0x48-0x4F */ + 0x595D,0x595E,0x595F,0x5961,0x5963,0x5964,0x5966,0x5967,/* 0x50-0x57 */ + 0x5968,0x5969,0x596A,0x596B,0x596C,0x596D,0x596E,0x596F,/* 0x58-0x5F */ + 0x5970,0x5971,0x5972,0x5975,0x5977,0x597A,0x597B,0x597C,/* 0x60-0x67 */ + 0x597E,0x597F,0x5980,0x5985,0x5989,0x598B,0x598C,0x598E,/* 0x68-0x6F */ + 0x598F,0x5990,0x5991,0x5994,0x5995,0x5998,0x599A,0x599B,/* 0x70-0x77 */ + 0x599C,0x599D,0x599F,0x59A0,0x59A1,0x59A2,0x59A6,0x0000,/* 0x78-0x7F */ + + 0x59A7,0x59AC,0x59AD,0x59B0,0x59B1,0x59B3,0x59B4,0x59B5,/* 0x80-0x87 */ + 0x59B6,0x59B7,0x59B8,0x59BA,0x59BC,0x59BD,0x59BF,0x59C0,/* 0x88-0x8F */ + 0x59C1,0x59C2,0x59C3,0x59C4,0x59C5,0x59C7,0x59C8,0x59C9,/* 0x90-0x97 */ + 0x59CC,0x59CD,0x59CE,0x59CF,0x59D5,0x59D6,0x59D9,0x59DB,/* 0x98-0x9F */ + 0x59DE,0x59DF,0x59E0,0x59E1,0x59E2,0x59E4,0x59E6,0x59E7,/* 0xA0-0xA7 */ + 0x59E9,0x59EA,0x59EB,0x59ED,0x59EE,0x59EF,0x59F0,0x59F1,/* 0xA8-0xAF */ + 0x59F2,0x59F3,0x59F4,0x59F5,0x59F6,0x59F7,0x59F8,0x59FA,/* 0xB0-0xB7 */ + 0x59FC,0x59FD,0x59FE,0x5A00,0x5A02,0x5A0A,0x5A0B,0x5A0D,/* 0xB8-0xBF */ + 0x5A0E,0x5A0F,0x5A10,0x5A12,0x5A14,0x5A15,0x5A16,0x5A17,/* 0xC0-0xC7 */ + 0x5A19,0x5A1A,0x5A1B,0x5A1D,0x5A1E,0x5A21,0x5A22,0x5A24,/* 0xC8-0xCF */ + 0x5A26,0x5A27,0x5A28,0x5A2A,0x5A2B,0x5A2C,0x5A2D,0x5A2E,/* 0xD0-0xD7 */ + 0x5A2F,0x5A30,0x5A33,0x5A35,0x5A37,0x5A38,0x5A39,0x5A3A,/* 0xD8-0xDF */ + 0x5A3B,0x5A3D,0x5A3E,0x5A3F,0x5A41,0x5A42,0x5A43,0x5A44,/* 0xE0-0xE7 */ + 0x5A45,0x5A47,0x5A48,0x5A4B,0x5A4C,0x5A4D,0x5A4E,0x5A4F,/* 0xE8-0xEF */ + 0x5A50,0x5A51,0x5A52,0x5A53,0x5A54,0x5A56,0x5A57,0x5A58,/* 0xF0-0xF7 */ + 0x5A59,0x5A5B,0x5A5C,0x5A5D,0x5A5E,0x5A5F,0x5A60,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8B[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5A61,0x5A63,0x5A64,0x5A65,0x5A66,0x5A68,0x5A69,0x5A6B,/* 0x40-0x47 */ + 0x5A6C,0x5A6D,0x5A6E,0x5A6F,0x5A70,0x5A71,0x5A72,0x5A73,/* 0x48-0x4F */ + 0x5A78,0x5A79,0x5A7B,0x5A7C,0x5A7D,0x5A7E,0x5A80,0x5A81,/* 0x50-0x57 */ + 0x5A82,0x5A83,0x5A84,0x5A85,0x5A86,0x5A87,0x5A88,0x5A89,/* 0x58-0x5F */ + 0x5A8A,0x5A8B,0x5A8C,0x5A8D,0x5A8E,0x5A8F,0x5A90,0x5A91,/* 0x60-0x67 */ + 0x5A93,0x5A94,0x5A95,0x5A96,0x5A97,0x5A98,0x5A99,0x5A9C,/* 0x68-0x6F */ + 0x5A9D,0x5A9E,0x5A9F,0x5AA0,0x5AA1,0x5AA2,0x5AA3,0x5AA4,/* 0x70-0x77 */ + 0x5AA5,0x5AA6,0x5AA7,0x5AA8,0x5AA9,0x5AAB,0x5AAC,0x0000,/* 0x78-0x7F */ + + 0x5AAD,0x5AAE,0x5AAF,0x5AB0,0x5AB1,0x5AB4,0x5AB6,0x5AB7,/* 0x80-0x87 */ + 0x5AB9,0x5ABA,0x5ABB,0x5ABC,0x5ABD,0x5ABF,0x5AC0,0x5AC3,/* 0x88-0x8F */ + 0x5AC4,0x5AC5,0x5AC6,0x5AC7,0x5AC8,0x5ACA,0x5ACB,0x5ACD,/* 0x90-0x97 */ + 0x5ACE,0x5ACF,0x5AD0,0x5AD1,0x5AD3,0x5AD5,0x5AD7,0x5AD9,/* 0x98-0x9F */ + 0x5ADA,0x5ADB,0x5ADD,0x5ADE,0x5ADF,0x5AE2,0x5AE4,0x5AE5,/* 0xA0-0xA7 */ + 0x5AE7,0x5AE8,0x5AEA,0x5AEC,0x5AED,0x5AEE,0x5AEF,0x5AF0,/* 0xA8-0xAF */ + 0x5AF2,0x5AF3,0x5AF4,0x5AF5,0x5AF6,0x5AF7,0x5AF8,0x5AF9,/* 0xB0-0xB7 */ + 0x5AFA,0x5AFB,0x5AFC,0x5AFD,0x5AFE,0x5AFF,0x5B00,0x5B01,/* 0xB8-0xBF */ + 0x5B02,0x5B03,0x5B04,0x5B05,0x5B06,0x5B07,0x5B08,0x5B0A,/* 0xC0-0xC7 */ + 0x5B0B,0x5B0C,0x5B0D,0x5B0E,0x5B0F,0x5B10,0x5B11,0x5B12,/* 0xC8-0xCF */ + 0x5B13,0x5B14,0x5B15,0x5B18,0x5B19,0x5B1A,0x5B1B,0x5B1C,/* 0xD0-0xD7 */ + 0x5B1D,0x5B1E,0x5B1F,0x5B20,0x5B21,0x5B22,0x5B23,0x5B24,/* 0xD8-0xDF */ + 0x5B25,0x5B26,0x5B27,0x5B28,0x5B29,0x5B2A,0x5B2B,0x5B2C,/* 0xE0-0xE7 */ + 0x5B2D,0x5B2E,0x5B2F,0x5B30,0x5B31,0x5B33,0x5B35,0x5B36,/* 0xE8-0xEF */ + 0x5B38,0x5B39,0x5B3A,0x5B3B,0x5B3C,0x5B3D,0x5B3E,0x5B3F,/* 0xF0-0xF7 */ + 0x5B41,0x5B42,0x5B43,0x5B44,0x5B45,0x5B46,0x5B47,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8C[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5B48,0x5B49,0x5B4A,0x5B4B,0x5B4C,0x5B4D,0x5B4E,0x5B4F,/* 0x40-0x47 */ + 0x5B52,0x5B56,0x5B5E,0x5B60,0x5B61,0x5B67,0x5B68,0x5B6B,/* 0x48-0x4F */ + 0x5B6D,0x5B6E,0x5B6F,0x5B72,0x5B74,0x5B76,0x5B77,0x5B78,/* 0x50-0x57 */ + 0x5B79,0x5B7B,0x5B7C,0x5B7E,0x5B7F,0x5B82,0x5B86,0x5B8A,/* 0x58-0x5F */ + 0x5B8D,0x5B8E,0x5B90,0x5B91,0x5B92,0x5B94,0x5B96,0x5B9F,/* 0x60-0x67 */ + 0x5BA7,0x5BA8,0x5BA9,0x5BAC,0x5BAD,0x5BAE,0x5BAF,0x5BB1,/* 0x68-0x6F */ + 0x5BB2,0x5BB7,0x5BBA,0x5BBB,0x5BBC,0x5BC0,0x5BC1,0x5BC3,/* 0x70-0x77 */ + 0x5BC8,0x5BC9,0x5BCA,0x5BCB,0x5BCD,0x5BCE,0x5BCF,0x0000,/* 0x78-0x7F */ + + 0x5BD1,0x5BD4,0x5BD5,0x5BD6,0x5BD7,0x5BD8,0x5BD9,0x5BDA,/* 0x80-0x87 */ + 0x5BDB,0x5BDC,0x5BE0,0x5BE2,0x5BE3,0x5BE6,0xF9AA,0x5BE9,/* 0x88-0x8F */ + 0x5BEA,0x5BEB,0x5BEC,0x5BED,0x5BEF,0x5BF1,0x5BF2,0x5BF3,/* 0x90-0x97 */ + 0x5BF4,0x5BF5,0x5BF6,0x5BF7,0x5BFD,0x5BFE,0x5C00,0x5C02,/* 0x98-0x9F */ + 0x5C03,0x5C05,0x5C07,0x5C08,0x5C0B,0x5C0C,0x5C0D,0x5C0E,/* 0xA0-0xA7 */ + 0x5C10,0x5C12,0x5C13,0x5C17,0x5C19,0x5C1B,0x5C1E,0x5C1F,/* 0xA8-0xAF */ + 0x5C20,0x5C21,0x5C23,0x5C26,0x5C28,0x5C29,0x5C2A,0x5C2B,/* 0xB0-0xB7 */ + 0x5C2D,0x5C2E,0x5C2F,0x5C30,0x5C32,0x5C33,0x5C35,0x5C36,/* 0xB8-0xBF */ + 0x5C37,0x5C43,0x5C44,0x5C46,0x5C47,0x5C4C,0x5C4D,0x5C52,/* 0xC0-0xC7 */ + 0x5C53,0x5C54,0x5C56,0x5C57,0x5C58,0x5C5A,0x5C5B,0x5C5C,/* 0xC8-0xCF */ + 0x5C5D,0x5C5F,0xF94B,0x5C64,0x5C67,0x5C68,0x5C69,0x5C6A,/* 0xD0-0xD7 */ + 0x5C6B,0x5C6C,0x5C6D,0x5C70,0x5C72,0x5C73,0x5C74,0x5C75,/* 0xD8-0xDF */ + 0x5C76,0x5C77,0x5C78,0x5C7B,0x5C7C,0x5C7D,0x5C7E,0x5C80,/* 0xE0-0xE7 */ + 0x5C83,0x5C84,0x5C85,0x5C86,0x5C87,0x5C89,0x5C8A,0x5C8B,/* 0xE8-0xEF */ + 0x5C8E,0x5C8F,0x5C92,0x5C93,0x5C95,0x5C9D,0x5C9E,0x5C9F,/* 0xF0-0xF7 */ + 0x5CA0,0x5CA1,0x5CA4,0x5CA5,0x5CA6,0x5CA7,0x5CA8,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8D[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5CAA,0x5CAE,0x5CAF,0x5CB0,0x5CB2,0x5CB4,0x5CB6,0x5CB9,/* 0x40-0x47 */ + 0x5CBA,0x5CBB,0x5CBC,0x5CBE,0x5CC0,0x5CC2,0x5CC3,0x5CC5,/* 0x48-0x4F */ + 0x5CC6,0x5CC7,0x5CC8,0x5CC9,0x5CCA,0x5CCC,0x5CCD,0x5CCE,/* 0x50-0x57 */ + 0x5CCF,0x5CD0,0x5CD1,0x5CD3,0x5CD4,0x5CD5,0x5CD6,0x5CD7,/* 0x58-0x5F */ + 0x5CD8,0x5CDA,0x5CDB,0x5CDC,0x5CDD,0x5CDE,0x5CDF,0x5CE0,/* 0x60-0x67 */ + 0x5CE2,0x5CE3,0x5CE7,0x5CE9,0x5CEB,0x5CEC,0x5CEE,0x5CEF,/* 0x68-0x6F */ + 0x5CF1,0x5CF2,0x5CF3,0x5CF4,0x5CF5,0x5CF6,0x5CF7,0x5CF8,/* 0x70-0x77 */ + 0x5CF9,0x5CFA,0x5CFC,0x5CFD,0x5CFE,0x5CFF,0x5D00,0x0000,/* 0x78-0x7F */ + + 0x5D01,0x5D04,0x5D05,0x5D08,0x5D09,0x5D0A,0x5D0B,0x5D0C,/* 0x80-0x87 */ + 0x5D0D,0x5D0F,0x5D10,0x5D11,0x5D12,0x5D13,0x5D15,0x5D17,/* 0x88-0x8F */ + 0x5D18,0xF9D5,0x5D1A,0x5D1C,0x5D1D,0x5D1F,0x5D20,0x5D21,/* 0x90-0x97 */ + 0x5D22,0x5D23,0x5D25,0x5D28,0x5D2A,0x5D2B,0x5D2C,0x5D2F,/* 0x98-0x9F */ + 0x5D30,0x5D31,0x5D32,0x5D33,0x5D35,0x5D36,0x5D37,0x5D38,/* 0xA0-0xA7 */ + 0x5D39,0x5D3A,0x5D3B,0x5D3C,0x5D3F,0x5D40,0x5D41,0x5D42,/* 0xA8-0xAF */ + 0x5D43,0x5D44,0x5D45,0x5D46,0x5D48,0x5D49,0x5D4D,0x5D4E,/* 0xB0-0xB7 */ + 0x5D4F,0xF921,0x5D51,0x5D52,0x5D53,0x5D54,0x5D55,0x5D56,/* 0xB8-0xBF */ + 0x5D57,0x5D59,0x5D5A,0x5D5C,0x5D5E,0x5D5F,0x5D60,0x5D61,/* 0xC0-0xC7 */ + 0x5D62,0x5D63,0x5D64,0x5D65,0x5D66,0x5D67,0x5D68,0x5D6A,/* 0xC8-0xCF */ + 0x5D6D,0x5D6E,0x5D70,0x5D71,0x5D72,0x5D73,0x5D75,0x5D76,/* 0xD0-0xD7 */ + 0x5D77,0x5D78,0x5D79,0x5D7A,0x5D7B,0x5D7C,0x5D7D,0x5D7E,/* 0xD8-0xDF */ + 0x5D7F,0x5D80,0x5D81,0x5D83,0x5D84,0x5D85,0x5D86,0x5D87,/* 0xE0-0xE7 */ + 0x5D88,0x5D89,0x5D8A,0x5D8B,0x5D8C,0x5D8D,0x5D8E,0x5D8F,/* 0xE8-0xEF */ + 0x5D90,0x5D91,0x5D92,0x5D93,0x5D94,0x5D95,0x5D96,0x5D97,/* 0xF0-0xF7 */ + 0x5D98,0x5D9A,0x5D9B,0x5D9C,0x5D9E,0x5D9F,0x5DA0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8E[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5DA1,0x5DA2,0x5DA3,0x5DA4,0x5DA5,0x5DA6,0x5DA7,0x5DA8,/* 0x40-0x47 */ + 0x5DA9,0x5DAA,0x5DAB,0x5DAC,0x5DAD,0x5DAE,0x5DAF,0x5DB0,/* 0x48-0x4F */ + 0x5DB1,0x5DB2,0x5DB3,0x5DB4,0x5DB5,0x5DB6,0x5DB8,0x5DB9,/* 0x50-0x57 */ + 0xF9AB,0x5DBB,0x5DBC,0x5DBD,0x5DBE,0x5DBF,0x5DC0,0x5DC1,/* 0x58-0x5F */ + 0x5DC2,0x5DC3,0x5DC4,0x5DC6,0x5DC7,0x5DC8,0x5DC9,0x5DCA,/* 0x60-0x67 */ + 0x5DCB,0x5DCC,0x5DCE,0x5DCF,0x5DD0,0x5DD1,0x5DD2,0x5DD3,/* 0x68-0x6F */ + 0x5DD4,0x5DD5,0x5DD6,0x5DD7,0x5DD8,0x5DD9,0x5DDA,0x5DDC,/* 0x70-0x77 */ + 0x5DDF,0x5DE0,0x5DE3,0x5DE4,0x5DEA,0x5DEC,0x5DED,0x0000,/* 0x78-0x7F */ + + 0x5DF0,0x5DF5,0x5DF6,0x5DF8,0x5DF9,0x5DFA,0x5DFB,0x5DFC,/* 0x80-0x87 */ + 0x5DFF,0x5E00,0x5E04,0x5E07,0x5E09,0x5E0A,0x5E0B,0x5E0D,/* 0x88-0x8F */ + 0x5E0E,0x5E12,0x5E13,0x5E17,0x5E1E,0x5E1F,0x5E20,0x5E21,/* 0x90-0x97 */ + 0x5E22,0x5E23,0x5E24,0x5E25,0x5E28,0x5E29,0x5E2A,0x5E2B,/* 0x98-0x9F */ + 0x5E2C,0x5E2F,0x5E30,0x5E32,0x5E33,0x5E34,0x5E35,0x5E36,/* 0xA0-0xA7 */ + 0x5E39,0x5E3A,0x5E3E,0x5E3F,0x5E40,0x5E41,0x5E43,0x5E46,/* 0xA8-0xAF */ + 0x5E47,0x5E48,0x5E49,0x5E4A,0x5E4B,0x5E4D,0x5E4E,0x5E4F,/* 0xB0-0xB7 */ + 0x5E50,0x5E51,0x5E52,0x5E53,0x5E56,0x5E57,0x5E58,0x5E59,/* 0xB8-0xBF */ + 0x5E5A,0x5E5C,0x5E5D,0x5E5F,0x5E60,0x5E63,0x5E64,0x5E65,/* 0xC0-0xC7 */ + 0x5E66,0x5E67,0x5E68,0x5E69,0x5E6A,0x5E6B,0x5E6C,0x5E6D,/* 0xC8-0xCF */ + 0x5E6E,0x5E6F,0x5E70,0x5E71,0x5E75,0x5E77,0x5E79,0x5E7E,/* 0xD0-0xD7 */ + 0x5E81,0x5E82,0x5E83,0x5E85,0x5E88,0x5E89,0x5E8C,0x5E8D,/* 0xD8-0xDF */ + 0x5E8E,0x5E92,0x5E98,0x5E9B,0x5E9D,0x5EA1,0x5EA2,0x5EA3,/* 0xE0-0xE7 */ + 0x5EA4,0x5EA8,0x5EA9,0x5EAA,0x5EAB,0x5EAC,0x5EAE,0x5EAF,/* 0xE8-0xEF */ + 0x5EB0,0x5EB1,0x5EB2,0x5EB4,0x5EBA,0x5EBB,0x5EBC,0x5EBD,/* 0xF0-0xF7 */ + 0x5EBF,0x5EC0,0x5EC1,0x5EC2,0x5EC3,0x5EC4,0x5EC5,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8F[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5EC6,0x5EC7,0x5EC8,0x5ECB,0x5ECC,0x5ECD,0x5ECE,0x5ECF,/* 0x40-0x47 */ + 0x5ED0,0x5ED4,0x5ED5,0x5ED7,0x5ED8,0x5ED9,0x5EDA,0x5EDC,/* 0x48-0x4F */ + 0x5EDD,0x5EDE,0x5EDF,0x5EE0,0x5EE1,0x5EE2,0x5EE3,0x5EE4,/* 0x50-0x57 */ + 0x5EE5,0x5EE6,0x5EE7,0x5EE9,0x5EEB,0xF982,0x5EED,0x5EEE,/* 0x58-0x5F */ + 0x5EEF,0x5EF0,0x5EF1,0x5EF2,0x5EF3,0x5EF5,0x5EF8,0x5EF9,/* 0x60-0x67 */ + 0x5EFB,0x5EFC,0x5EFD,0x5F05,0x5F06,0x5F07,0x5F09,0x5F0C,/* 0x68-0x6F */ + 0x5F0D,0x5F0E,0x5F10,0x5F12,0x5F14,0x5F16,0x5F19,0x5F1A,/* 0x70-0x77 */ + 0x5F1C,0x5F1D,0x5F1E,0x5F21,0x5F22,0x5F23,0x5F24,0x0000,/* 0x78-0x7F */ + + 0x5F28,0x5F2B,0x5F2C,0x5F2E,0x5F30,0x5F32,0x5F33,0x5F34,/* 0x80-0x87 */ + 0x5F35,0x5F36,0x5F37,0x5F38,0x5F3B,0x5F3D,0x5F3E,0x5F3F,/* 0x88-0x8F */ + 0x5F41,0x5F42,0x5F43,0x5F44,0x5F45,0x5F46,0x5F47,0x5F48,/* 0x90-0x97 */ + 0x5F49,0x5F4A,0x5F4B,0x5F4C,0x5F4D,0x5F4E,0x5F4F,0x5F51,/* 0x98-0x9F */ + 0x5F54,0x5F59,0x5F5A,0x5F5B,0x5F5C,0x5F5E,0x5F5F,0x5F60,/* 0xA0-0xA7 */ + 0x5F63,0x5F65,0x5F67,0x5F68,0x5F6B,0x5F6E,0x5F6F,0x5F72,/* 0xA8-0xAF */ + 0x5F74,0x5F75,0x5F76,0x5F78,0x5F7A,0x5F7D,0x5F7E,0x5F7F,/* 0xB0-0xB7 */ + 0x5F83,0x5F86,0x5F8D,0x5F8E,0x5F8F,0x5F91,0x5F93,0x5F94,/* 0xB8-0xBF */ + 0x5F96,0x5F9A,0x5F9B,0x5F9D,0x5F9E,0x5F9F,0x5FA0,0x5FA2,/* 0xC0-0xC7 */ + 0x5FA3,0x5FA4,0x5FA5,0x5FA6,0x5FA7,0xF966,0x5FAB,0x5FAC,/* 0xC8-0xCF */ + 0x5FAF,0x5FB0,0x5FB1,0x5FB2,0x5FB3,0x5FB4,0x5FB6,0x5FB8,/* 0xD0-0xD7 */ + 0x5FB9,0x5FBA,0x5FBB,0x5FBE,0x5FBF,0x5FC0,0x5FC1,0x5FC2,/* 0xD8-0xDF */ + 0x5FC7,0x5FC8,0x5FCA,0x5FCB,0x5FCE,0x5FD3,0x5FD4,0x5FD5,/* 0xE0-0xE7 */ + 0x5FDA,0x5FDB,0x5FDC,0x5FDE,0x5FDF,0x5FE2,0x5FE3,0x5FE5,/* 0xE8-0xEF */ + 0x5FE6,0x5FE8,0x5FE9,0x5FEC,0x5FEF,0x5FF0,0x5FF2,0x5FF3,/* 0xF0-0xF7 */ + 0x5FF4,0x5FF6,0x5FF7,0x5FF9,0x5FFA,0x5FFC,0x6007,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_90[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6008,0x6009,0x600B,0x600C,0x6010,0x6011,0x6013,0x6017,/* 0x40-0x47 */ + 0x6018,0x601A,0x601E,0x601F,0x6022,0x6023,0x6024,0x602C,/* 0x48-0x4F */ + 0x602D,0x602E,0x6030,0x6031,0x6032,0x6033,0x6034,0x6036,/* 0x50-0x57 */ + 0x6037,0x6038,0x6039,0x603A,0x603D,0x603E,0x6040,0x6044,/* 0x58-0x5F */ + 0x6045,0x6046,0x6047,0x6048,0x6049,0x604A,0x604C,0x604E,/* 0x60-0x67 */ + 0x604F,0x6051,0x6053,0x6054,0x6056,0x6057,0x6058,0x605B,/* 0x68-0x6F */ + 0x605C,0x605E,0x605F,0x6060,0x6061,0x6065,0x6066,0x606E,/* 0x70-0x77 */ + 0x6071,0x6072,0x6074,0x6075,0x6077,0x607E,0x6080,0x0000,/* 0x78-0x7F */ + + 0x6081,0x6082,0x6085,0x6086,0x6087,0x6088,0x608A,0x608B,/* 0x80-0x87 */ + 0x608E,0x608F,0x6090,0x6091,0x6093,0x6095,0x6097,0x6098,/* 0x88-0x8F */ + 0x6099,0x609C,0x609E,0x60A1,0x60A2,0x60A4,0x60A5,0x60A7,/* 0x90-0x97 */ + 0x60A9,0x60AA,0x60AE,0x60B0,0x60B3,0x60B5,0x60B6,0x60B7,/* 0x98-0x9F */ + 0x60B9,0x60BA,0x60BD,0x60BE,0x60BF,0x60C0,0x60C1,0x60C2,/* 0xA0-0xA7 */ + 0x60C3,0x60C4,0x60C7,0x60C8,0x60C9,0x60CC,0x60CD,0x60CE,/* 0xA8-0xAF */ + 0x60CF,0x60D0,0x60D2,0x60D3,0x60D4,0x60D6,0x60D7,0x60D9,/* 0xB0-0xB7 */ + 0x60DB,0x60DE,0xF9B9,0x60E2,0x60E3,0x60E4,0x60E5,0x60EA,/* 0xB8-0xBF */ + 0x60F1,0x60F2,0x60F5,0x60F7,0x60F8,0x60FB,0x60FC,0x60FD,/* 0xC0-0xC7 */ + 0x60FE,0x60FF,0x6102,0x6103,0x6104,0x6105,0x6107,0x610A,/* 0xC8-0xCF */ + 0x610B,0x610C,0x6110,0x6111,0x6112,0x6113,0x6114,0x6116,/* 0xD0-0xD7 */ + 0x6117,0x6118,0x6119,0x611B,0x611C,0x611D,0x611E,0x6121,/* 0xD8-0xDF */ + 0x6122,0x6125,0x6128,0x6129,0x612A,0x612C,0x612D,0x612E,/* 0xE0-0xE7 */ + 0x612F,0x6130,0x6131,0x6132,0x6133,0x6134,0x6135,0x6136,/* 0xE8-0xEF */ + 0x6137,0x6138,0x6139,0x613A,0x613B,0x613C,0x613D,0x613E,/* 0xF0-0xF7 */ + 0x6140,0x6141,0x6142,0x6143,0xF9D9,0x6145,0x6146,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_91[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6147,0x6149,0x614B,0x614D,0x614F,0x6150,0x6152,0x6153,/* 0x40-0x47 */ + 0x6154,0x6156,0x6157,0x6158,0x6159,0x615A,0x615B,0x615C,/* 0x48-0x4F */ + 0x615E,0x615F,0x6160,0x6161,0x6163,0x6164,0x6165,0x6166,/* 0x50-0x57 */ + 0x6169,0x616A,0x616B,0x616C,0x616D,0x616E,0x616F,0x6171,/* 0x58-0x5F */ + 0x6172,0x6173,0x6174,0x6176,0x6178,0x6179,0x617A,0x617B,/* 0x60-0x67 */ + 0x617C,0x617D,0x617E,0x617F,0x6180,0x6181,0x6182,0x6183,/* 0x68-0x6F */ + 0x6184,0x6185,0x6186,0x6187,0x6188,0x6189,0x618A,0x618C,/* 0x70-0x77 */ + 0x618D,0x618F,0xF98F,0x6191,0x6192,0x6193,0x6195,0x0000,/* 0x78-0x7F */ + + 0x6196,0x6197,0x6198,0x6199,0x619A,0x619B,0x619C,0x619E,/* 0x80-0x87 */ + 0x619F,0x61A0,0x61A1,0x61A2,0x61A3,0x61A4,0x61A5,0x61A6,/* 0x88-0x8F */ + 0x61AA,0x61AB,0x61AD,0x61AE,0x61AF,0x61B0,0x61B1,0x61B2,/* 0x90-0x97 */ + 0x61B3,0x61B4,0x61B5,0x61B6,0x61B8,0x61B9,0x61BA,0x61BB,/* 0x98-0x9F */ + 0x61BC,0x61BD,0x61BF,0x61C0,0x61C1,0x61C3,0x61C4,0x61C5,/* 0xA0-0xA7 */ + 0x61C6,0x61C7,0x61C9,0x61CC,0x61CD,0x61CE,0x61CF,0x61D0,/* 0xA8-0xAF */ + 0x61D3,0x61D5,0x61D6,0x61D7,0x61D8,0x61D9,0x61DA,0x61DB,/* 0xB0-0xB7 */ + 0x61DC,0x61DD,0x61DE,0x61DF,0x61E0,0x61E1,0x61E2,0x61E3,/* 0xB8-0xBF */ + 0x61E4,0x61E5,0x61E7,0x61E8,0x61E9,0x61EA,0x61EB,0x61EC,/* 0xC0-0xC7 */ + 0x61ED,0x61EE,0x61EF,0x61F0,0x61F1,0x61F2,0x61F3,0x61F4,/* 0xC8-0xCF */ + 0xF90D,0x61F7,0x61F8,0x61F9,0x61FA,0x61FB,0x61FC,0x61FD,/* 0xD0-0xD7 */ + 0x61FE,0xF990,0x6201,0x6202,0x6203,0x6204,0x6205,0x6207,/* 0xD8-0xDF */ + 0x6209,0x6213,0x6214,0x6219,0x621C,0x621D,0x621E,0x6220,/* 0xE0-0xE7 */ + 0x6223,0x6226,0x6227,0x6228,0x6229,0x622B,0x622D,0x622F,/* 0xE8-0xEF */ + 0x6230,0x6231,0x6232,0x6235,0x6236,0x6238,0x6239,0x623A,/* 0xF0-0xF7 */ + 0x623B,0x623C,0x6242,0x6244,0x6245,0x6246,0x624A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_92[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x624F,0x6250,0x6255,0x6256,0x6257,0x6259,0x625A,0x625C,/* 0x40-0x47 */ + 0x625D,0x625E,0x625F,0x6260,0x6261,0x6262,0x6264,0x6265,/* 0x48-0x4F */ + 0x6268,0x6271,0x6272,0x6274,0x6275,0x6277,0x6278,0x627A,/* 0x50-0x57 */ + 0x627B,0x627D,0x6281,0x6282,0x6283,0x6285,0x6286,0x6287,/* 0x58-0x5F */ + 0x6288,0x628B,0x628C,0x628D,0x628E,0x628F,0x6290,0x6294,/* 0x60-0x67 */ + 0x6299,0x629C,0x629D,0x629E,0x62A3,0x62A6,0x62A7,0x62A9,/* 0x68-0x6F */ + 0x62AA,0x62AD,0x62AE,0x62AF,0x62B0,0x62B2,0x62B3,0x62B4,/* 0x70-0x77 */ + 0x62B6,0x62B7,0x62B8,0x62BA,0x62BE,0x62C0,0x62C1,0x0000,/* 0x78-0x7F */ + + 0x62C3,0x62CB,0xF95B,0x62D1,0x62D5,0x62DD,0x62DE,0x62E0,/* 0x80-0x87 */ + 0x62E1,0x62E4,0x62EA,0x62EB,0x62F0,0x62F2,0x62F5,0x62F8,/* 0x88-0x8F */ + 0x62F9,0x62FA,0x62FB,0x6300,0x6303,0x6304,0x6305,0x6306,/* 0x90-0x97 */ + 0x630A,0x630B,0x630C,0x630D,0x630F,0x6310,0x6312,0x6313,/* 0x98-0x9F */ + 0x6314,0x6315,0x6317,0x6318,0x6319,0x631C,0x6326,0x6327,/* 0xA0-0xA7 */ + 0x6329,0x632C,0x632D,0x632E,0x6330,0x6331,0x6333,0x6334,/* 0xA8-0xAF */ + 0x6335,0x6336,0x6337,0x6338,0x633B,0x633C,0x633E,0x633F,/* 0xB0-0xB7 */ + 0x6340,0x6341,0x6344,0x6347,0x6348,0x634A,0x6351,0x6352,/* 0xB8-0xBF */ + 0x6353,0x6354,0x6356,0x6357,0x6358,0x6359,0x635A,0x635B,/* 0xC0-0xC7 */ + 0x635C,0x635D,0x6360,0x6364,0x6365,0x6366,0x6368,0x636A,/* 0xC8-0xCF */ + 0x636B,0x636C,0x636F,0x6370,0x6372,0x6373,0x6374,0x6375,/* 0xD0-0xD7 */ + 0x6378,0x6379,0x637C,0x637D,0x637E,0x637F,0x6381,0x6383,/* 0xD8-0xDF */ + 0x6384,0x6385,0x6386,0x638B,0x638D,0x6391,0x6393,0x6394,/* 0xE0-0xE7 */ + 0x6395,0x6397,0x6399,0x639A,0x639B,0x639C,0x639D,0x639E,/* 0xE8-0xEF */ + 0x639F,0x63A1,0x63A4,0x63A6,0x63AB,0x63AF,0x63B1,0x63B2,/* 0xF0-0xF7 */ + 0x63B5,0x63B6,0x63B9,0x63BB,0x63BD,0x63BF,0x63C0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_93[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x63C1,0x63C2,0x63C3,0x63C5,0x63C7,0x63C8,0x63CA,0x63CB,/* 0x40-0x47 */ + 0x63CC,0x63D1,0x63D3,0x63D4,0x63D5,0x63D7,0x63D8,0x63D9,/* 0x48-0x4F */ + 0x63DA,0x63DB,0x63DC,0x63DD,0x63DF,0x63E2,0x63E4,0x63E5,/* 0x50-0x57 */ + 0x63E6,0x63E7,0x63E8,0x63EB,0x63EC,0x63EE,0x63EF,0x63F0,/* 0x58-0x5F */ + 0x63F1,0x63F3,0x63F5,0x63F7,0x63F9,0x63FA,0x63FB,0x63FC,/* 0x60-0x67 */ + 0x63FE,0x6403,0x6404,0x6406,0x6407,0x6408,0x6409,0x640A,/* 0x68-0x6F */ + 0x640D,0x640E,0x6411,0x6412,0x6415,0x6416,0x6417,0x6418,/* 0x70-0x77 */ + 0x6419,0x641A,0x641D,0x641F,0x6422,0x6423,0x6424,0x0000,/* 0x78-0x7F */ + + 0x6425,0x6427,0x6428,0x6429,0x642B,0x642E,0x642F,0x6430,/* 0x80-0x87 */ + 0x6431,0x6432,0x6433,0x6435,0x6436,0x6437,0x6438,0x6439,/* 0x88-0x8F */ + 0x643B,0x643C,0x643E,0x6440,0x6442,0x6443,0x6449,0x644B,/* 0x90-0x97 */ + 0x644C,0x644D,0x644E,0x644F,0x6450,0x6451,0x6453,0x6455,/* 0x98-0x9F */ + 0x6456,0x6457,0x6459,0x645A,0x645B,0x645C,0x645D,0x645F,/* 0xA0-0xA7 */ + 0x6460,0x6461,0x6462,0x6463,0x6464,0x6465,0x6466,0x6468,/* 0xA8-0xAF */ + 0x646A,0x646B,0x646C,0x646E,0x646F,0x6470,0x6471,0x6472,/* 0xB0-0xB7 */ + 0x6473,0x6474,0x6475,0x6476,0x6477,0x647B,0x647C,0x647D,/* 0xB8-0xBF */ + 0x647E,0x647F,0x6480,0x6481,0x6483,0x6486,0x6488,0x6489,/* 0xC0-0xC7 */ + 0x648A,0x648B,0x648C,0x648D,0x648E,0x648F,0x6490,0x6493,/* 0xC8-0xCF */ + 0x6494,0x6497,0x6498,0xF991,0x649B,0x649C,0x649D,0x649F,/* 0xD0-0xD7 */ + 0x64A0,0x64A1,0x64A2,0x64A3,0x64A5,0x64A6,0x64A7,0x64A8,/* 0xD8-0xDF */ + 0x64AA,0x64AB,0x64AF,0x64B1,0x64B2,0x64B3,0x64B4,0x64B6,/* 0xE0-0xE7 */ + 0x64B9,0x64BB,0x64BD,0x64BE,0x64BF,0x64C1,0x64C3,0xF930,/* 0xE8-0xEF */ + 0x64C6,0x64C7,0x64C8,0x64C9,0x64CA,0x64CB,0x64CC,0x64CF,/* 0xF0-0xF7 */ + 0x64D1,0x64D3,0x64D4,0x64D5,0x64D6,0x64D9,0x64DA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_94[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x64DB,0x64DC,0x64DD,0x64DF,0x64E0,0x64E1,0x64E3,0x64E5,/* 0x40-0x47 */ + 0x64E7,0x64E8,0x64E9,0x64EA,0x64EB,0x64EC,0x64ED,0x64EE,/* 0x48-0x4F */ + 0x64EF,0x64F0,0x64F1,0x64F2,0x64F3,0x64F4,0x64F5,0x64F6,/* 0x50-0x57 */ + 0x64F7,0x64F8,0x64F9,0x64FA,0x64FB,0x64FC,0x64FD,0x64FE,/* 0x58-0x5F */ + 0x64FF,0x6501,0x6502,0x6503,0x6504,0x6505,0x6506,0x6507,/* 0x60-0x67 */ + 0x6508,0x650A,0x650B,0x650C,0x650D,0x650E,0x650F,0x6510,/* 0x68-0x6F */ + 0x6511,0x6513,0x6514,0x6515,0x6516,0x6517,0x6519,0x651A,/* 0x70-0x77 */ + 0x651B,0x651C,0x651D,0x651E,0x651F,0x6520,0x6521,0x0000,/* 0x78-0x7F */ + + 0x6522,0x6523,0x6524,0x6526,0x6527,0x6528,0x6529,0x652A,/* 0x80-0x87 */ + 0x652C,0x652D,0x6530,0x6531,0x6532,0x6533,0x6537,0x653A,/* 0x88-0x8F */ + 0x653C,0x653D,0x6540,0x6541,0x6542,0x6543,0x6544,0x6546,/* 0x90-0x97 */ + 0x6547,0x654A,0x654B,0x654D,0x654E,0x6550,0x6552,0x6553,/* 0x98-0x9F */ + 0x6554,0x6557,0x6558,0x655A,0x655C,0x655F,0x6560,0x6561,/* 0xA0-0xA7 */ + 0x6564,0x6565,0x6567,0x6568,0x6569,0x656A,0x656D,0x656E,/* 0xA8-0xAF */ + 0x656F,0x6571,0x6573,0x6575,0x6576,0xF969,0x6579,0x657A,/* 0xB0-0xB7 */ + 0x657B,0x657C,0x657D,0x657E,0x657F,0x6580,0x6581,0x6582,/* 0xB8-0xBF */ + 0x6583,0x6584,0x6585,0x6586,0x6588,0x6589,0x658A,0x658D,/* 0xC0-0xC7 */ + 0x658E,0x658F,0x6592,0x6594,0x6595,0x6596,0x6598,0x659A,/* 0xC8-0xCF */ + 0x659D,0x659E,0x65A0,0x65A2,0x65A3,0x65A6,0x65A8,0x65AA,/* 0xD0-0xD7 */ + 0x65AC,0x65AE,0x65B1,0x65B2,0x65B3,0x65B4,0x65B5,0x65B6,/* 0xD8-0xDF */ + 0x65B7,0x65B8,0x65BA,0x65BB,0x65BE,0x65BF,0x65C0,0x65C2,/* 0xE0-0xE7 */ + 0x65C7,0x65C8,0x65C9,0x65CA,0x65CD,0x65D0,0x65D1,0x65D3,/* 0xE8-0xEF */ + 0x65D4,0x65D5,0x65D8,0x65D9,0x65DA,0x65DB,0x65DC,0x65DD,/* 0xF0-0xF7 */ + 0x65DE,0x65DF,0x65E1,0x65E3,0x65E4,0x65EA,0x65EB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_95[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x65F2,0x65F3,0x65F4,0x65F5,0x65F8,0x65F9,0x65FB,0x65FC,/* 0x40-0x47 */ + 0x65FD,0x65FE,0x65FF,0x6601,0x6604,0x6605,0x6607,0x6608,/* 0x48-0x4F */ + 0x6609,0x660B,0x660D,0x6610,0x6611,0x6612,0x6616,0x6617,/* 0x50-0x57 */ + 0x6618,0x661A,0x661B,0x661C,0x661E,0x6621,0x6622,0x6623,/* 0x58-0x5F */ + 0x6624,0x6626,0x6629,0x662A,0x662B,0x662C,0x662E,0x6630,/* 0x60-0x67 */ + 0x6632,0x6633,0x6637,0x6638,0x6639,0x663A,0x663B,0x663D,/* 0x68-0x6F */ + 0x663F,0x6640,0x6642,0x6644,0x6645,0x6646,0x6647,0x6648,/* 0x70-0x77 */ + 0x6649,0x664A,0x664D,0x664E,0x6650,0x6651,0x6658,0x0000,/* 0x78-0x7F */ + + 0x6659,0x665B,0x665C,0x665D,0x665E,0x6660,0x6662,0x6663,/* 0x80-0x87 */ + 0x6665,0x6667,0x6669,0x666A,0x666B,0x666C,0x666D,0x6671,/* 0x88-0x8F */ + 0x6672,0x6673,0x6675,0x6678,0x6679,0x667B,0x667C,0x667D,/* 0x90-0x97 */ + 0x667F,0x6680,0x6681,0x6683,0x6685,0x6686,0xF9C5,0x6689,/* 0x98-0x9F */ + 0x668A,0x668B,0x668D,0x668E,0x668F,0x6690,0x6692,0x6693,/* 0xA0-0xA7 */ + 0x6694,0x6695,0x6698,0x6699,0x669A,0x669B,0x669C,0x669E,/* 0xA8-0xAF */ + 0x669F,0x66A0,0x66A1,0x66A2,0x66A3,0x66A4,0x66A5,0x66A6,/* 0xB0-0xB7 */ + 0x66A9,0x66AA,0x66AB,0x66AC,0x66AD,0x66AF,0x66B0,0x66B1,/* 0xB8-0xBF */ + 0x66B2,0x66B3,0x66B5,0x66B6,0x66B7,0x66B8,0x66BA,0x66BB,/* 0xC0-0xC7 */ + 0x66BC,0x66BD,0x66BF,0x66C0,0x66C1,0x66C2,0x66C3,0x66C4,/* 0xC8-0xCF */ + 0x66C5,0xF98B,0x66C7,0x66C8,0x66C9,0x66CA,0x66CB,0x66CC,/* 0xD0-0xD7 */ + 0x66CD,0x66CE,0x66CF,0x66D0,0x66D1,0x66D2,0x66D3,0x66D4,/* 0xD8-0xDF */ + 0x66D5,0x66D6,0x66D7,0x66D8,0x66DA,0x66DE,0x66DF,0x66E0,/* 0xE0-0xE7 */ + 0x66E1,0x66E2,0x66E3,0x66E4,0x66E5,0x66E7,0x66E8,0x66EA,/* 0xE8-0xEF */ + 0x66EB,0x66EC,0x66ED,0x66EE,0x66EF,0x66F1,0x66F5,0x66F6,/* 0xF0-0xF7 */ + 0x66F8,0x66FA,0x66FB,0x66FD,0x6701,0x6702,0x6703,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_96[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6704,0x6705,0x6706,0x6707,0x670C,0x670E,0x670F,0x6711,/* 0x40-0x47 */ + 0x6712,0x6713,0x6716,0x6718,0x6719,0x671A,0x671C,0x671E,/* 0x48-0x4F */ + 0x6720,0x6721,0x6722,0x6723,0x6724,0x6725,0x6727,0x6729,/* 0x50-0x57 */ + 0x672E,0x6730,0x6732,0x6733,0x6736,0x6737,0x6738,0x6739,/* 0x58-0x5F */ + 0x673B,0x673C,0x673E,0x673F,0x6741,0x6744,0x6745,0x6747,/* 0x60-0x67 */ + 0x674A,0x674B,0x674D,0x6752,0x6754,0x6755,0x6757,0x6758,/* 0x68-0x6F */ + 0x6759,0x675A,0x675B,0x675D,0x6762,0x6763,0x6764,0x6766,/* 0x70-0x77 */ + 0x6767,0x676B,0x676C,0x676E,0x6771,0x6774,0x6776,0x0000,/* 0x78-0x7F */ + + 0x6778,0x6779,0x677A,0xF9C8,0x677D,0x6780,0x6782,0x6783,/* 0x80-0x87 */ + 0x6785,0x6786,0x6788,0x678A,0x678C,0x678D,0x678E,0x678F,/* 0x88-0x8F */ + 0x6791,0x6792,0x6793,0x6794,0x6796,0x6799,0x679B,0x679F,/* 0x90-0x97 */ + 0x67A0,0x67A1,0x67A4,0x67A6,0x67A9,0x67AC,0x67AE,0x67B1,/* 0x98-0x9F */ + 0x67B2,0x67B4,0x67B9,0x67BA,0x67BB,0x67BC,0x67BD,0x67BE,/* 0xA0-0xA7 */ + 0x67BF,0x67C0,0x67C2,0x67C5,0x67C6,0x67C7,0x67C8,0x67C9,/* 0xA8-0xAF */ + 0x67CA,0x67CB,0x67CC,0x67CD,0x67CE,0x67D5,0x67D6,0x67D7,/* 0xB0-0xB7 */ + 0x67DB,0x67DF,0x67E1,0x67E3,0x67E4,0x67E6,0x67E7,0x67E8,/* 0xB8-0xBF */ + 0x67EA,0x67EB,0x67ED,0x67EE,0x67F2,0x67F5,0x67F6,0x67F7,/* 0xC0-0xC7 */ + 0x67F8,0x67F9,0x67FA,0x67FB,0x67FC,0x67FE,0x6801,0x6802,/* 0xC8-0xCF */ + 0x6803,0x6804,0x6806,0x680D,0x6810,0x6812,0x6814,0x6815,/* 0xD0-0xD7 */ + 0x6818,0x6819,0x681A,0x681B,0x681C,0x681E,0x681F,0x6820,/* 0xD8-0xDF */ + 0x6822,0x6823,0x6824,0x6825,0x6826,0x6827,0x6828,0x682B,/* 0xE0-0xE7 */ + 0x682C,0x682D,0x682E,0x682F,0x6830,0x6831,0x6834,0x6835,/* 0xE8-0xEF */ + 0x6836,0x683A,0x683B,0x683F,0x6847,0x684B,0x684D,0x684F,/* 0xF0-0xF7 */ + 0x6852,0x6856,0x6857,0x6858,0x6859,0x685A,0x685B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_97[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x685C,0x685D,0x685E,0x685F,0x686A,0x686C,0x686D,0x686E,/* 0x40-0x47 */ + 0x686F,0x6870,0x6871,0x6872,0x6873,0x6875,0x6878,0x6879,/* 0x48-0x4F */ + 0x687A,0x687B,0x687C,0x687D,0x687E,0x687F,0x6880,0x6882,/* 0x50-0x57 */ + 0x6884,0x6887,0x6888,0x6889,0x688A,0x688B,0x688C,0x688D,/* 0x58-0x5F */ + 0x688E,0x6890,0x6891,0x6892,0x6894,0x6895,0x6896,0x6898,/* 0x60-0x67 */ + 0x6899,0x689A,0x689B,0x689C,0x689D,0x689E,0x689F,0x68A0,/* 0x68-0x6F */ + 0x68A1,0x68A3,0x68A4,0x68A5,0x68A9,0x68AA,0x68AB,0x68AC,/* 0x70-0x77 */ + 0x68AE,0x68B1,0x68B2,0x68B4,0x68B6,0x68B7,0x68B8,0x0000,/* 0x78-0x7F */ + + 0x68B9,0x68BA,0x68BB,0x68BC,0x68BD,0x68BE,0x68BF,0x68C1,/* 0x80-0x87 */ + 0x68C3,0x68C4,0x68C5,0x68C6,0x68C7,0x68C8,0x68CA,0x68CC,/* 0x88-0x8F */ + 0x68CE,0x68CF,0x68D0,0x68D1,0x68D3,0x68D4,0x68D6,0x68D7,/* 0x90-0x97 */ + 0x68D9,0x68DB,0x68DC,0x68DD,0x68DE,0x68DF,0x68E1,0x68E2,/* 0x98-0x9F */ + 0x68E4,0x68E5,0x68E6,0x68E7,0x68E8,0x68E9,0x68EA,0x68EB,/* 0xA0-0xA7 */ + 0x68EC,0x68ED,0x68EF,0x68F2,0x68F3,0x68F4,0x68F6,0x68F7,/* 0xA8-0xAF */ + 0x68F8,0x68FB,0x68FD,0x68FE,0x68FF,0x6900,0x6902,0x6903,/* 0xB0-0xB7 */ + 0x6904,0x6906,0x6907,0x6908,0x6909,0x690A,0x690C,0x690F,/* 0xB8-0xBF */ + 0x6911,0x6913,0x6914,0x6915,0x6916,0x6917,0x6918,0x6919,/* 0xC0-0xC7 */ + 0x691A,0x691B,0x691C,0x691D,0x691E,0x6921,0x6922,0x6923,/* 0xC8-0xCF */ + 0x6925,0x6926,0x6927,0x6928,0x6929,0x692A,0x692B,0x692C,/* 0xD0-0xD7 */ + 0x692E,0x692F,0x6931,0x6932,0x6933,0x6935,0x6936,0x6937,/* 0xD8-0xDF */ + 0x6938,0x693A,0x693B,0x693C,0x693E,0x6940,0x6941,0x6943,/* 0xE0-0xE7 */ + 0x6944,0x6945,0x6946,0x6947,0x6948,0x6949,0x694A,0x694B,/* 0xE8-0xEF */ + 0x694C,0x694D,0x694E,0x694F,0x6950,0x6951,0x6952,0x6953,/* 0xF0-0xF7 */ + 0x6955,0x6956,0x6958,0x6959,0x695B,0x695C,0x695F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_98[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6961,0x6962,0x6964,0x6965,0x6967,0x6968,0x6969,0x696A,/* 0x40-0x47 */ + 0x696C,0x696D,0x696F,0x6970,0x6972,0x6973,0x6974,0x6975,/* 0x48-0x4F */ + 0x6976,0x697A,0x697B,0x697D,0x697E,0x697F,0x6981,0x6983,/* 0x50-0x57 */ + 0x6985,0x698A,0x698B,0x698C,0x698E,0x698F,0x6990,0x6991,/* 0x58-0x5F */ + 0x6992,0x6993,0x6996,0x6997,0x6999,0x699A,0x699D,0x699E,/* 0x60-0x67 */ + 0x699F,0x69A0,0x69A1,0x69A2,0x69A3,0x69A4,0x69A5,0x69A6,/* 0x68-0x6F */ + 0x69A9,0x69AA,0x69AC,0x69AE,0x69AF,0x69B0,0x69B2,0x69B3,/* 0x70-0x77 */ + 0x69B5,0x69B6,0x69B8,0x69B9,0x69BA,0x69BC,0x69BD,0x0000,/* 0x78-0x7F */ + + 0x69BE,0x69BF,0x69C0,0x69C2,0x69C3,0x69C4,0x69C5,0x69C6,/* 0x80-0x87 */ + 0x69C7,0x69C8,0x69C9,0x69CB,0x69CD,0x69CF,0x69D1,0x69D2,/* 0x88-0x8F */ + 0x69D3,0x69D5,0x69D6,0x69D7,0x69D8,0x69D9,0x69DA,0x69DC,/* 0x90-0x97 */ + 0x69DD,0x69DE,0x69E1,0x69E2,0x69E3,0x69E4,0x69E5,0x69E6,/* 0x98-0x9F */ + 0x69E7,0x69E8,0x69E9,0x69EA,0x69EB,0x69EC,0x69EE,0x69EF,/* 0xA0-0xA7 */ + 0x69F0,0x69F1,0x69F3,0x69F4,0x69F5,0x69F6,0x69F7,0x69F8,/* 0xA8-0xAF */ + 0x69F9,0x69FA,0x69FB,0x69FC,0x69FE,0x6A00,0x6A01,0xF9BF,/* 0xB0-0xB7 */ + 0x6A03,0x6A04,0x6A05,0x6A06,0x6A07,0x6A08,0x6A09,0x6A0B,/* 0xB8-0xBF */ + 0x6A0C,0x6A0D,0x6A0E,0x6A0F,0x6A10,0x6A11,0x6A12,0xF94C,/* 0xC0-0xC7 */ + 0x6A14,0x6A15,0x6A16,0x6A19,0x6A1A,0x6A1B,0x6A1C,0x6A1D,/* 0xC8-0xCF */ + 0x6A1E,0x6A20,0x6A22,0x6A23,0x6A24,0x6A25,0x6A26,0x6A27,/* 0xD0-0xD7 */ + 0x6A29,0x6A2B,0x6A2C,0x6A2D,0x6A2E,0x6A30,0x6A32,0x6A33,/* 0xD8-0xDF */ + 0x6A34,0x6A36,0x6A37,0x6A38,0x6A39,0x6A3A,0x6A3B,0x6A3C,/* 0xE0-0xE7 */ + 0x6A3F,0x6A40,0x6A41,0x6A42,0x6A43,0x6A45,0x6A46,0x6A48,/* 0xE8-0xEF */ + 0x6A49,0x6A4A,0x6A4B,0x6A4C,0x6A4D,0x6A4E,0x6A4F,0x6A51,/* 0xF0-0xF7 */ + 0x6A52,0x6A53,0x6A54,0x6A55,0x6A56,0x6A57,0x6A5A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_99[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6A5C,0x6A5D,0x6A5E,0x6A5F,0x6A60,0x6A62,0x6A63,0x6A64,/* 0x40-0x47 */ + 0x6A66,0x6A67,0x6A68,0x6A69,0x6A6A,0x6A6B,0x6A6C,0x6A6D,/* 0x48-0x4F */ + 0x6A6E,0x6A6F,0x6A70,0x6A72,0x6A73,0x6A74,0x6A75,0x6A76,/* 0x50-0x57 */ + 0x6A77,0x6A78,0x6A7A,0x6A7B,0x6A7D,0x6A7E,0x6A7F,0x6A81,/* 0x58-0x5F */ + 0x6A82,0x6A83,0x6A85,0x6A86,0x6A87,0x6A88,0x6A89,0x6A8A,/* 0x60-0x67 */ + 0x6A8B,0x6A8C,0x6A8D,0x6A8F,0x6A92,0x6A93,0x6A94,0x6A95,/* 0x68-0x6F */ + 0x6A96,0x6A98,0x6A99,0x6A9A,0x6A9B,0x6A9C,0x6A9D,0x6A9E,/* 0x70-0x77 */ + 0x6A9F,0x6AA1,0x6AA2,0x6AA3,0x6AA4,0x6AA5,0x6AA6,0x0000,/* 0x78-0x7F */ + + 0x6AA7,0x6AA8,0x6AAA,0x6AAD,0x6AAE,0x6AAF,0x6AB0,0x6AB1,/* 0x80-0x87 */ + 0x6AB2,0x6AB3,0x6AB4,0x6AB5,0x6AB6,0x6AB7,0x6AB8,0x6AB9,/* 0x88-0x8F */ + 0x6ABA,0x6ABB,0x6ABC,0x6ABD,0x6ABE,0x6ABF,0x6AC0,0x6AC1,/* 0x90-0x97 */ + 0x6AC2,0x6AC3,0x6AC4,0x6AC5,0x6AC6,0x6AC7,0x6AC8,0x6AC9,/* 0x98-0x9F */ + 0x6ACA,0x6ACB,0x6ACC,0x6ACD,0x6ACE,0x6ACF,0x6AD0,0x6AD1,/* 0xA0-0xA7 */ + 0x6AD2,0xF931,0x6AD4,0x6AD5,0x6AD6,0x6AD7,0x6AD8,0x6AD9,/* 0xA8-0xAF */ + 0x6ADA,0x6ADB,0x6ADC,0x6ADD,0x6ADE,0x6ADF,0x6AE0,0x6AE1,/* 0xB0-0xB7 */ + 0x6AE2,0x6AE3,0x6AE4,0x6AE5,0x6AE6,0x6AE7,0x6AE8,0x6AE9,/* 0xB8-0xBF */ + 0x6AEA,0x6AEB,0x6AEC,0x6AED,0x6AEE,0x6AEF,0x6AF0,0x6AF1,/* 0xC0-0xC7 */ + 0x6AF2,0x6AF3,0x6AF4,0x6AF5,0x6AF6,0x6AF7,0x6AF8,0x6AF9,/* 0xC8-0xCF */ + 0x6AFA,0x6AFB,0x6AFC,0x6AFD,0x6AFE,0x6AFF,0x6B00,0x6B01,/* 0xD0-0xD7 */ + 0x6B02,0x6B03,0xF91D,0x6B05,0x6B06,0x6B07,0x6B08,0x6B09,/* 0xD8-0xDF */ + 0x6B0A,0x6B0B,0x6B0C,0x6B0D,0x6B0E,0x6B0F,0x6B10,0x6B11,/* 0xE0-0xE7 */ + 0x6B12,0x6B13,0x6B14,0x6B15,0x6B16,0x6B17,0x6B18,0x6B19,/* 0xE8-0xEF */ + 0x6B1A,0x6B1B,0x6B1C,0x6B1D,0x6B1E,0x6B1F,0x6B25,0x6B26,/* 0xF0-0xF7 */ + 0x6B28,0x6B29,0x6B2A,0x6B2B,0x6B2C,0x6B2D,0x6B2E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9A[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6B2F,0x6B30,0x6B31,0x6B33,0x6B34,0x6B35,0x6B36,0x6B38,/* 0x40-0x47 */ + 0x6B3B,0x6B3C,0x6B3D,0x6B3F,0x6B40,0x6B41,0x6B42,0x6B44,/* 0x48-0x4F */ + 0x6B45,0x6B48,0x6B4A,0x6B4B,0x6B4D,0x6B4E,0x6B4F,0x6B50,/* 0x50-0x57 */ + 0x6B51,0x6B52,0x6B53,0x6B54,0x6B55,0x6B56,0x6B57,0x6B58,/* 0x58-0x5F */ + 0x6B5A,0x6B5B,0x6B5C,0x6B5D,0x6B5E,0x6B5F,0x6B60,0x6B61,/* 0x60-0x67 */ + 0x6B68,0x6B69,0x6B6B,0x6B6C,0x6B6D,0x6B6E,0x6B6F,0x6B70,/* 0x68-0x6F */ + 0x6B71,0x6B72,0x6B73,0x6B74,0x6B75,0x6B76,0xF98C,0x6B78,/* 0x70-0x77 */ + 0x6B7A,0x6B7D,0x6B7E,0x6B7F,0x6B80,0x6B85,0x6B88,0x0000,/* 0x78-0x7F */ + + 0x6B8C,0x6B8E,0x6B8F,0x6B90,0x6B91,0x6B94,0x6B95,0x6B97,/* 0x80-0x87 */ + 0x6B98,0x6B99,0x6B9C,0x6B9D,0x6B9E,0x6B9F,0x6BA0,0x6BA2,/* 0x88-0x8F */ + 0x6BA3,0x6BA4,0x6BA5,0x6BA6,0x6BA7,0x6BA8,0x6BA9,0x6BAB,/* 0x90-0x97 */ + 0x6BAC,0x6BAD,0xF9A5,0x6BAF,0x6BB0,0x6BB1,0x6BB2,0x6BB6,/* 0x98-0x9F */ + 0x6BB8,0x6BB9,0xF970,0x6BBB,0x6BBC,0x6BBD,0x6BBE,0x6BC0,/* 0xA0-0xA7 */ + 0x6BC3,0x6BC4,0x6BC6,0x6BC7,0x6BC8,0x6BC9,0x6BCA,0x6BCC,/* 0xA8-0xAF */ + 0x6BCE,0x6BD0,0x6BD1,0x6BD8,0x6BDA,0x6BDC,0x6BDD,0x6BDE,/* 0xB0-0xB7 */ + 0x6BDF,0x6BE0,0x6BE2,0x6BE3,0x6BE4,0x6BE5,0x6BE6,0x6BE7,/* 0xB8-0xBF */ + 0x6BE8,0x6BE9,0x6BEC,0x6BED,0x6BEE,0x6BF0,0x6BF1,0x6BF2,/* 0xC0-0xC7 */ + 0x6BF4,0x6BF6,0x6BF7,0x6BF8,0x6BFA,0x6BFB,0x6BFC,0x6BFE,/* 0xC8-0xCF */ + 0x6BFF,0x6C00,0x6C01,0x6C02,0x6C03,0x6C04,0x6C08,0x6C09,/* 0xD0-0xD7 */ + 0x6C0A,0x6C0B,0x6C0C,0x6C0E,0x6C12,0x6C17,0x6C1C,0x6C1D,/* 0xD8-0xDF */ + 0x6C1E,0x6C20,0x6C23,0x6C25,0x6C2B,0x6C2C,0x6C2D,0x6C31,/* 0xE0-0xE7 */ + 0x6C33,0x6C36,0x6C37,0x6C39,0x6C3A,0x6C3B,0x6C3C,0x6C3E,/* 0xE8-0xEF */ + 0x6C3F,0x6C43,0x6C44,0x6C45,0x6C48,0x6C4B,0x6C4C,0x6C4D,/* 0xF0-0xF7 */ + 0x6C4E,0x6C4F,0x6C51,0x6C52,0x6C53,0x6C56,0x6C58,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9B[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6C59,0x6C5A,0x6C62,0x6C63,0x6C65,0x6C66,0x6C67,0x6C6B,/* 0x40-0x47 */ + 0x6C6C,0x6C6D,0x6C6E,0x6C6F,0x6C71,0x6C73,0x6C75,0x6C77,/* 0x48-0x4F */ + 0x6C78,0x6C7A,0x6C7B,0x6C7C,0x6C7F,0x6C80,0x6C84,0x6C87,/* 0x50-0x57 */ + 0x6C8A,0x6C8B,0x6C8D,0x6C8E,0x6C91,0x6C92,0x6C95,0x6C96,/* 0x58-0x5F */ + 0x6C97,0x6C98,0x6C9A,0x6C9C,0x6C9D,0x6C9E,0x6CA0,0x6CA2,/* 0x60-0x67 */ + 0x6CA8,0x6CAC,0x6CAF,0x6CB0,0x6CB4,0x6CB5,0x6CB6,0x6CB7,/* 0x68-0x6F */ + 0x6CBA,0x6CC0,0x6CC1,0x6CC2,0x6CC3,0x6CC6,0x6CC7,0x6CC8,/* 0x70-0x77 */ + 0x6CCB,0x6CCD,0x6CCE,0x6CCF,0x6CD1,0x6CD2,0x6CD8,0x0000,/* 0x78-0x7F */ + + 0x6CD9,0x6CDA,0x6CDC,0x6CDD,0x6CDF,0x6CE4,0x6CE6,0x6CE7,/* 0x80-0x87 */ + 0x6CE9,0x6CEC,0x6CED,0x6CF2,0x6CF4,0x6CF9,0x6CFF,0x6D00,/* 0x88-0x8F */ + 0x6D02,0x6D03,0x6D05,0x6D06,0x6D08,0x6D09,0x6D0A,0x6D0D,/* 0x90-0x97 */ + 0x6D0F,0x6D10,0x6D11,0x6D13,0x6D14,0x6D15,0x6D16,0x6D18,/* 0x98-0x9F */ + 0x6D1C,0x6D1D,0x6D1F,0x6D20,0x6D21,0x6D22,0x6D23,0x6D24,/* 0xA0-0xA7 */ + 0x6D26,0x6D28,0x6D29,0x6D2C,0x6D2D,0x6D2F,0x6D30,0x6D34,/* 0xA8-0xAF */ + 0x6D36,0x6D37,0x6D38,0x6D3A,0x6D3F,0x6D40,0x6D42,0x6D44,/* 0xB0-0xB7 */ + 0x6D49,0x6D4C,0x6D50,0x6D55,0x6D56,0x6D57,0x6D58,0x6D5B,/* 0xB8-0xBF */ + 0x6D5D,0x6D5F,0x6D61,0x6D62,0x6D64,0x6D65,0x6D67,0x6D68,/* 0xC0-0xC7 */ + 0x6D6B,0x6D6C,0x6D6D,0x6D70,0x6D71,0x6D72,0x6D73,0x6D75,/* 0xC8-0xCF */ + 0x6D76,0x6D79,0x6D7A,0x6D7B,0x6D7D,0x6D7E,0x6D7F,0x6D80,/* 0xD0-0xD7 */ + 0x6D81,0x6D83,0x6D84,0x6D86,0x6D87,0x6D8A,0x6D8B,0x6D8D,/* 0xD8-0xDF */ + 0x6D8F,0x6D90,0x6D92,0x6D96,0x6D97,0x6D98,0x6D99,0x6D9A,/* 0xE0-0xE7 */ + 0x6D9C,0x6DA2,0x6DA5,0x6DAC,0x6DAD,0x6DB0,0x6DB1,0x6DB3,/* 0xE8-0xEF */ + 0x6DB4,0x6DB6,0x6DB7,0x6DB9,0x6DBA,0x6DBB,0x6DBC,0x6DBD,/* 0xF0-0xF7 */ + 0x6DBE,0x6DC1,0x6DC2,0x6DC3,0x6DC8,0x6DC9,0x6DCA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9C[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6DCD,0x6DCE,0x6DCF,0x6DD0,0x6DD2,0x6DD3,0x6DD4,0x6DD5,/* 0x40-0x47 */ + 0x6DD7,0xF94D,0x6DDB,0x6DDC,0x6DDF,0x6DE2,0x6DE3,0x6DE5,/* 0x48-0x4F */ + 0x6DE7,0x6DE8,0x6DE9,0xF9D6,0x6DED,0x6DEF,0x6DF0,0x6DF2,/* 0x50-0x57 */ + 0x6DF4,0x6DF5,0x6DF6,0x6DF8,0x6DFA,0x6DFD,0x6DFE,0x6DFF,/* 0x58-0x5F */ + 0x6E00,0x6E01,0x6E02,0x6E03,0x6E04,0x6E06,0x6E07,0x6E08,/* 0x60-0x67 */ + 0x6E09,0x6E0B,0x6E0F,0x6E12,0x6E13,0x6E15,0x6E18,0x6E19,/* 0x68-0x6F */ + 0x6E1B,0x6E1C,0x6E1E,0x6E1F,0x6E22,0x6E26,0x6E27,0x6E28,/* 0x70-0x77 */ + 0x6E2A,0x6E2C,0x6E2E,0x6E30,0x6E31,0x6E33,0x6E35,0x0000,/* 0x78-0x7F */ + + 0x6E36,0x6E37,0x6E39,0x6E3B,0x6E3C,0x6E3D,0x6E3E,0x6E3F,/* 0x80-0x87 */ + 0x6E40,0x6E41,0x6E42,0x6E45,0x6E46,0x6E47,0x6E48,0x6E49,/* 0x88-0x8F */ + 0x6E4A,0x6E4B,0x6E4C,0x6E4F,0x6E50,0x6E51,0x6E52,0x6E55,/* 0x90-0x97 */ + 0x6E57,0x6E59,0x6E5A,0x6E5C,0x6E5D,0x6E5E,0x6E60,0x6E61,/* 0x98-0x9F */ + 0x6E62,0x6E63,0x6E64,0x6E65,0x6E66,0x6E67,0x6E68,0x6E69,/* 0xA0-0xA7 */ + 0x6E6A,0x6E6C,0x6E6D,0x6E6F,0x6E70,0x6E71,0x6E72,0x6E73,/* 0xA8-0xAF */ + 0x6E74,0x6E75,0x6E76,0x6E77,0x6E78,0x6E79,0x6E7A,0x6E7B,/* 0xB0-0xB7 */ + 0x6E7C,0x6E7D,0x6E80,0x6E81,0x6E82,0x6E84,0x6E87,0x6E88,/* 0xB8-0xBF */ + 0x6E8A,0x6E8B,0x6E8C,0x6E8D,0x6E8E,0x6E91,0x6E92,0x6E93,/* 0xC0-0xC7 */ + 0x6E94,0x6E95,0x6E96,0x6E97,0x6E99,0x6E9A,0x6E9B,0x6E9D,/* 0xC8-0xCF */ + 0x6E9E,0x6EA0,0x6EA1,0x6EA3,0x6EA4,0x6EA6,0x6EA8,0x6EA9,/* 0xD0-0xD7 */ + 0x6EAB,0x6EAC,0x6EAD,0x6EAE,0x6EB0,0x6EB3,0x6EB5,0x6EB8,/* 0xD8-0xDF */ + 0x6EB9,0x6EBC,0x6EBE,0x6EBF,0x6EC0,0x6EC3,0x6EC4,0x6EC5,/* 0xE0-0xE7 */ + 0x6EC6,0x6EC8,0x6EC9,0x6ECA,0x6ECC,0x6ECD,0x6ECE,0x6ED0,/* 0xE8-0xEF */ + 0x6ED2,0x6ED6,0x6ED8,0x6ED9,0x6EDB,0x6EDC,0x6EDD,0x6EE3,/* 0xF0-0xF7 */ + 0x6EE7,0x6EEA,0x6EEB,0x6EEC,0x6EED,0x6EEE,0x6EEF,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9D[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6EF0,0x6EF1,0x6EF2,0x6EF3,0x6EF5,0x6EF6,0x6EF7,0x6EF8,/* 0x40-0x47 */ + 0x6EFA,0x6EFB,0x6EFC,0x6EFD,0x6EFE,0x6EFF,0x6F00,0x6F01,/* 0x48-0x4F */ + 0x6F03,0x6F04,0x6F05,0x6F07,0x6F08,0x6F0A,0x6F0B,0x6F0C,/* 0x50-0x57 */ + 0x6F0D,0x6F0E,0x6F10,0x6F11,0x6F12,0x6F16,0x6F17,0x6F18,/* 0x58-0x5F */ + 0x6F19,0x6F1A,0x6F1B,0x6F1C,0x6F1D,0x6F1E,0x6F1F,0x6F21,/* 0x60-0x67 */ + 0x6F22,0xF992,0x6F25,0x6F26,0x6F27,0x6F28,0x6F2C,0x6F2E,/* 0x68-0x6F */ + 0x6F30,0x6F32,0x6F34,0x6F35,0x6F37,0x6F38,0x6F39,0x6F3A,/* 0x70-0x77 */ + 0x6F3B,0x6F3C,0x6F3D,0x6F3F,0x6F40,0x6F41,0x6F42,0x0000,/* 0x78-0x7F */ + + 0x6F43,0x6F44,0x6F45,0x6F48,0x6F49,0x6F4A,0x6F4C,0x6F4E,/* 0x80-0x87 */ + 0x6F4F,0x6F50,0x6F51,0x6F52,0x6F53,0x6F54,0x6F55,0x6F56,/* 0x88-0x8F */ + 0x6F57,0x6F59,0x6F5A,0x6F5B,0x6F5D,0x6F5F,0x6F60,0x6F61,/* 0x90-0x97 */ + 0x6F63,0x6F64,0x6F65,0x6F67,0x6F68,0x6F69,0x6F6A,0x6F6B,/* 0x98-0x9F */ + 0x6F6C,0x6F6F,0x6F70,0x6F71,0x6F73,0x6F75,0x6F76,0x6F77,/* 0xA0-0xA7 */ + 0x6F79,0x6F7B,0x6F7D,0x6F7E,0x6F7F,0x6F80,0x6F81,0x6F82,/* 0xA8-0xAF */ + 0x6F83,0x6F85,0x6F86,0x6F87,0x6F8A,0x6F8B,0x6F8F,0x6F90,/* 0xB0-0xB7 */ + 0x6F91,0x6F92,0x6F93,0x6F94,0x6F95,0x6F96,0x6F97,0x6F98,/* 0xB8-0xBF */ + 0x6F99,0x6F9A,0x6F9B,0x6F9D,0x6F9E,0x6F9F,0x6FA0,0x6FA2,/* 0xC0-0xC7 */ + 0x6FA3,0x6FA4,0x6FA5,0x6FA6,0x6FA8,0x6FA9,0x6FAA,0x6FAB,/* 0xC8-0xCF */ + 0x6FAC,0x6FAD,0x6FAE,0x6FAF,0x6FB0,0x6FB1,0x6FB2,0x6FB4,/* 0xD0-0xD7 */ + 0x6FB5,0x6FB7,0x6FB8,0x6FBA,0x6FBB,0x6FBC,0x6FBD,0x6FBE,/* 0xD8-0xDF */ + 0x6FBF,0x6FC1,0x6FC3,0x6FC4,0x6FC5,0x6FC6,0x6FC7,0x6FC8,/* 0xE0-0xE7 */ + 0x6FCA,0x6FCB,0x6FCC,0x6FCD,0x6FCE,0x6FCF,0x6FD0,0x6FD3,/* 0xE8-0xEF */ + 0x6FD4,0x6FD5,0x6FD6,0x6FD7,0x6FD8,0x6FD9,0x6FDA,0x6FDB,/* 0xF0-0xF7 */ + 0x6FDC,0x6FDD,0x6FDF,0x6FE2,0x6FE3,0x6FE4,0x6FE5,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9E[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6FE6,0x6FE7,0x6FE8,0x6FE9,0x6FEA,0xF922,0x6FEC,0x6FED,/* 0x40-0x47 */ + 0x6FF0,0x6FF1,0x6FF2,0x6FF3,0x6FF4,0x6FF5,0x6FF6,0x6FF7,/* 0x48-0x4F */ + 0x6FF8,0x6FF9,0x6FFA,0x6FFB,0x6FFC,0x6FFD,0xF984,0x6FFF,/* 0x50-0x57 */ + 0x7000,0x7001,0x7002,0x7003,0x7004,0x7005,0x7006,0x7007,/* 0x58-0x5F */ + 0x7008,0x7009,0x700A,0x700B,0x700C,0x700D,0x700E,0x700F,/* 0x60-0x67 */ + 0x7010,0x7012,0x7013,0x7014,0x7015,0x7016,0x7017,0x7018,/* 0x68-0x6F */ + 0x7019,0x701C,0x701D,0x701E,0x701F,0x7020,0x7021,0x7022,/* 0x70-0x77 */ + 0x7024,0x7025,0x7026,0x7027,0x7028,0x7029,0x702A,0x0000,/* 0x78-0x7F */ + + 0x702B,0x702C,0x702D,0x702E,0x702F,0x7030,0x7031,0x7032,/* 0x80-0x87 */ + 0x7033,0x7034,0x7036,0x7037,0x7038,0x703A,0x703B,0x703C,/* 0x88-0x8F */ + 0x703D,0x703E,0x703F,0x7040,0x7041,0x7042,0x7043,0x7044,/* 0x90-0x97 */ + 0x7045,0x7046,0x7047,0x7048,0x7049,0x704A,0x704B,0x704D,/* 0x98-0x9F */ + 0x704E,0x7050,0x7051,0x7052,0x7053,0x7054,0x7055,0x7056,/* 0xA0-0xA7 */ + 0x7057,0x7058,0x7059,0x705A,0x705B,0x705C,0x705D,0x705F,/* 0xA8-0xAF */ + 0x7060,0x7061,0x7062,0x7063,0x7064,0x7065,0x7066,0x7067,/* 0xB0-0xB7 */ + 0x7068,0x7069,0x706A,0x706E,0x7071,0x7072,0x7073,0x7074,/* 0xB8-0xBF */ + 0x7077,0x7079,0x707A,0x707B,0x707D,0x7081,0x7082,0x7083,/* 0xC0-0xC7 */ + 0x7084,0x7086,0x7087,0x7088,0x708B,0x708C,0x708D,0x708F,/* 0xC8-0xCF */ + 0x7090,0x7091,0x7093,0x7097,0x7098,0x709A,0x709B,0x709E,/* 0xD0-0xD7 */ + 0x709F,0x70A0,0x70A1,0x70A2,0x70A3,0x70A4,0x70A5,0x70A6,/* 0xD8-0xDF */ + 0x70A7,0x70A8,0x70A9,0x70AA,0x70B0,0x70B2,0x70B4,0x70B5,/* 0xE0-0xE7 */ + 0x70B6,0x70BA,0x70BE,0x70BF,0x70C4,0x70C5,0x70C6,0x70C7,/* 0xE8-0xEF */ + 0x70C9,0x70CB,0x70CC,0x70CD,0x70CE,0x70CF,0x70D0,0x70D1,/* 0xF0-0xF7 */ + 0x70D2,0x70D3,0x70D4,0x70D5,0x70D6,0x70D7,0x70DA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9F[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x70DC,0x70DD,0x70DE,0x70E0,0x70E1,0x70E2,0x70E3,0x70E5,/* 0x40-0x47 */ + 0x70EA,0x70EE,0x70F0,0x70F1,0x70F2,0x70F3,0x70F4,0x70F5,/* 0x48-0x4F */ + 0x70F6,0x70F8,0x70FA,0x70FB,0x70FC,0x70FE,0x70FF,0x7100,/* 0x50-0x57 */ + 0x7101,0x7102,0x7103,0x7104,0x7105,0x7106,0x7107,0x7108,/* 0x58-0x5F */ + 0x710B,0x710C,0x710D,0x710E,0x710F,0x7111,0x7112,0x7114,/* 0x60-0x67 */ + 0x7117,0x711B,0x711C,0x711D,0x711E,0x711F,0x7120,0x7121,/* 0x68-0x6F */ + 0x7122,0x7123,0x7124,0x7125,0x7127,0x7128,0x7129,0x712A,/* 0x70-0x77 */ + 0x712B,0x712C,0x712D,0x712E,0x7132,0x7133,0x7134,0x0000,/* 0x78-0x7F */ + + 0x7135,0x7137,0x7138,0x7139,0x713A,0x713B,0x713C,0x713D,/* 0x80-0x87 */ + 0x713E,0x713F,0x7140,0x7141,0x7142,0x7143,0x7144,0x7146,/* 0x88-0x8F */ + 0x7147,0x7148,0xF993,0x714B,0x714D,0x714F,0x7150,0x7151,/* 0x90-0x97 */ + 0x7152,0x7153,0x7154,0x7155,0x7156,0x7157,0x7158,0x7159,/* 0x98-0x9F */ + 0x715A,0x715B,0x715D,0x715F,0x7160,0x7161,0x7162,0x7163,/* 0xA0-0xA7 */ + 0x7165,0x7169,0x716A,0x716B,0x716C,0x716D,0x716F,0x7170,/* 0xA8-0xAF */ + 0x7171,0x7174,0x7175,0x7176,0x7177,0x7179,0x717B,0x717C,/* 0xB0-0xB7 */ + 0x717E,0x717F,0x7180,0x7181,0x7182,0x7183,0x7185,0x7186,/* 0xB8-0xBF */ + 0x7187,0x7188,0x7189,0x718B,0x718C,0x718D,0x718E,0x7190,/* 0xC0-0xC7 */ + 0x7191,0x7192,0x7193,0x7195,0x7196,0x7197,0x719A,0x719B,/* 0xC8-0xCF */ + 0x719C,0x719D,0x719E,0x71A1,0x71A2,0x71A3,0x71A4,0x71A5,/* 0xD0-0xD7 */ + 0x71A6,0x71A7,0x71A9,0x71AA,0x71AB,0x71AD,0x71AE,0x71AF,/* 0xD8-0xDF */ + 0x71B0,0x71B1,0x71B2,0x71B4,0x71B6,0x71B7,0x71B8,0x71BA,/* 0xE0-0xE7 */ + 0x71BB,0x71BC,0x71BD,0x71BE,0x71BF,0x71C0,0x71C1,0x71C2,/* 0xE8-0xEF */ + 0x71C4,0x71C5,0x71C6,0x71C7,0x71C8,0x71C9,0x71CA,0x71CB,/* 0xF0-0xF7 */ + 0x71CC,0x71CD,0x71CF,0xF9EE,0x71D1,0x71D2,0x71D3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x71D6,0x71D7,0x71D8,0x71D9,0x71DA,0x71DB,0x71DC,0x71DD,/* 0x40-0x47 */ + 0x71DE,0x71DF,0x71E1,0x71E2,0x71E3,0x71E4,0x71E6,0x71E8,/* 0x48-0x4F */ + 0x71E9,0x71EA,0x71EB,0x71EC,0x71ED,0x71EF,0x71F0,0x71F1,/* 0x50-0x57 */ + 0x71F2,0x71F3,0x71F4,0x71F5,0x71F6,0x71F7,0x71F8,0x71FA,/* 0x58-0x5F */ + 0x71FB,0x71FC,0x71FD,0x71FE,0x71FF,0x7200,0x7201,0x7202,/* 0x60-0x67 */ + 0x7203,0x7204,0x7205,0x7207,0x7208,0x7209,0x720A,0x720B,/* 0x68-0x6F */ + 0x720C,0x720D,0x720E,0x720F,0xF932,0x7211,0x7212,0x7213,/* 0x70-0x77 */ + 0x7214,0x7215,0x7216,0x7217,0x7218,0x7219,0x721A,0x0000,/* 0x78-0x7F */ + + 0xF91E,0x721C,0x721E,0x721F,0x7220,0x7221,0x7222,0x7223,/* 0x80-0x87 */ + 0x7224,0x7225,0x7226,0x7227,0x7229,0x722B,0x722D,0x722E,/* 0x88-0x8F */ + 0x722F,0x7232,0x7233,0x7234,0x723A,0x723C,0x723E,0x7240,/* 0x90-0x97 */ + 0x7241,0x7242,0x7243,0x7244,0x7245,0x7246,0x7249,0x724A,/* 0x98-0x9F */ + 0x724B,0x724E,0x724F,0x7250,0x7251,0x7253,0x7254,0x7255,/* 0xA0-0xA7 */ + 0x7257,0x7258,0x725A,0x725C,0x725E,0x7260,0x7263,0x7264,/* 0xA8-0xAF */ + 0x7265,0x7268,0x726A,0x726B,0x726C,0x726D,0x7270,0x7271,/* 0xB0-0xB7 */ + 0x7273,0x7274,0x7276,0x7277,0x7278,0x727B,0x727C,0x727D,/* 0xB8-0xBF */ + 0x7282,0x7283,0x7285,0x7286,0x7287,0x7288,0x7289,0x728C,/* 0xC0-0xC7 */ + 0x728E,0x7290,0x7291,0x7293,0x7294,0x7295,0x7296,0x7297,/* 0xC8-0xCF */ + 0x7298,0x7299,0x729A,0x729B,0x729C,0x729D,0x729E,0x72A0,/* 0xD0-0xD7 */ + 0x72A1,0x72A2,0x72A3,0x72A4,0x72A5,0x72A6,0x72A7,0x72A8,/* 0xD8-0xDF */ + 0x72A9,0x72AA,0x72AB,0x72AE,0x72B1,0x72B2,0x72B3,0x72B5,/* 0xE0-0xE7 */ + 0x72BA,0x72BB,0x72BC,0x72BD,0x72BE,0x72BF,0xF9FA,0x72C5,/* 0xE8-0xEF */ + 0x72C6,0x72C7,0x72C9,0x72CA,0x72CB,0x72CC,0x72CF,0x72D1,/* 0xF0-0xF7 */ + 0x72D3,0x72D4,0x72D5,0x72D6,0x72D8,0x72DA,0x72DB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x3000,0x3001,0x3002,0x00B7,0x02C9,0x02C7,0x00A8,/* 0xA0-0xA7 */ + 0x3003,0x3005,0x2014,0xFF5E,0x2016,0x2026,0x2018,0x2019,/* 0xA8-0xAF */ + 0x201C,0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,/* 0xB0-0xB7 */ + 0x300C,0x300D,0x300E,0x300F,0x3016,0x3017,0x3010,0x3011,/* 0xB8-0xBF */ + 0x00B1,0x00D7,0x00F7,0x2236,0x2227,0x2228,0x2211,0x220F,/* 0xC0-0xC7 */ + 0x222A,0x2229,0x2208,0x2237,0x221A,0x22A5,0x2225,0x2220,/* 0xC8-0xCF */ + 0x2312,0x2299,0x222B,0x222E,0x2261,0x224C,0x2248,0x223D,/* 0xD0-0xD7 */ + 0x221D,0x2260,0x226E,0x226F,0x2264,0x2265,0x221E,0x2235,/* 0xD8-0xDF */ + 0x2234,0x2642,0x2640,0x2218,0x2032,0x2033,0x2103,0xFF04,/* 0xE0-0xE7 */ + 0x00A4,0xFFE0,0xFFE1,0x2030,0x00A7,0x2116,0x2606,0x2605,/* 0xE8-0xEF */ + 0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,0x25A1,0x25A0,0x25B3,/* 0xF0-0xF7 */ + 0x25B2,0x203B,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,/* 0xA0-0xA7 */ + 0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA8-0xAF */ + 0x0000,0x2488,0x2489,0x248A,0x248B,0x248C,0x248D,0x248E,/* 0xB0-0xB7 */ + 0x248F,0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496,/* 0xB8-0xBF */ + 0x2497,0x2498,0x2499,0x249A,0x249B,0x2474,0x2475,0x2476,/* 0xC0-0xC7 */ + 0x2477,0x2478,0x2479,0x247A,0x247B,0x247C,0x247D,0x247E,/* 0xC8-0xCF */ + 0x247F,0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486,/* 0xD0-0xD7 */ + 0x2487,0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,/* 0xD8-0xDF */ + 0x2467,0x2468,0x2469,0x0000,0x0000,0x3220,0x3221,0x3222,/* 0xE0-0xE7 */ + 0x3223,0x3224,0x3225,0x3226,0x3227,0x3228,0x3229,0x0000,/* 0xE8-0xEF */ + 0x0000,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,/* 0xF0-0xF7 */ + 0x2167,0x2168,0x2169,0x216A,0x216B,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xFF01,0xFF02,0xFF03,0xFFE5,0xFF05,0xFF06,0xFF07,/* 0xA0-0xA7 */ + 0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F,/* 0xA8-0xAF */ + 0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,/* 0xB0-0xB7 */ + 0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F,/* 0xB8-0xBF */ + 0xFF20,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,/* 0xC0-0xC7 */ + 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,/* 0xC8-0xCF */ + 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,/* 0xD0-0xD7 */ + 0xFF38,0xFF39,0xFF3A,0xFF3B,0xFF3C,0xFF3D,0xFF3E,0xFF3F,/* 0xD8-0xDF */ + 0xFF40,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,/* 0xE0-0xE7 */ + 0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,/* 0xE8-0xEF */ + 0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,/* 0xF0-0xF7 */ + 0xFF58,0xFF59,0xFF5A,0xFF5B,0xFF5C,0xFF5D,0xFFE3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,/* 0xA0-0xA7 */ + 0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,/* 0xA8-0xAF */ + 0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,/* 0xB0-0xB7 */ + 0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,/* 0xB8-0xBF */ + 0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,/* 0xC0-0xC7 */ + 0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,/* 0xC8-0xCF */ + 0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,/* 0xD0-0xD7 */ + 0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,/* 0xD8-0xDF */ + 0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,/* 0xE0-0xE7 */ + 0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,/* 0xE8-0xEF */ + 0x3090,0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_A5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,/* 0xA0-0xA7 */ + 0x30A8,0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,/* 0xA8-0xAF */ + 0x30B0,0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,/* 0xB0-0xB7 */ + 0x30B8,0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,/* 0xB8-0xBF */ + 0x30C0,0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,/* 0xC0-0xC7 */ + 0x30C8,0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,/* 0xC8-0xCF */ + 0x30D0,0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,/* 0xD0-0xD7 */ + 0x30D8,0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,/* 0xD8-0xDF */ + 0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,/* 0xE0-0xE7 */ + 0x30E8,0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,/* 0xE8-0xEF */ + 0x30F0,0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_A6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,/* 0xA0-0xA7 */ + 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,/* 0xA8-0xAF */ + 0x03A0,0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,/* 0xB0-0xB7 */ + 0x03A9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB8-0xBF */ + 0x0000,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,/* 0xC0-0xC7 */ + 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,/* 0xC8-0xCF */ + 0x03C0,0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,/* 0xD0-0xD7 */ + 0x03C9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD8-0xDF */ + 0xFE35,0xFE36,0xFE39,0xFE3A,0xFE3F,0xFE40,0xFE3D,0xFE3E,/* 0xE0-0xE7 */ + 0xFE41,0xFE42,0xFE43,0xFE44,0x0000,0x0000,0xFE3B,0xFE3C,/* 0xE8-0xEF */ + 0xFE37,0xFE38,0xFE31,0x0000,0xFE33,0xFE34,0x0000,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_A7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,/* 0xA0-0xA7 */ + 0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,/* 0xA8-0xAF */ + 0x041E,0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,/* 0xB0-0xB7 */ + 0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,/* 0xB8-0xBF */ + 0x042E,0x042F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC0-0xC7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC8-0xCF */ + 0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,/* 0xD0-0xD7 */ + 0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,/* 0xD8-0xDF */ + 0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,/* 0xE0-0xE7 */ + 0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,/* 0xE8-0xEF */ + 0x044E,0x044F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_A8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x02CA,0x02CB,0x02D9,0x2013,0x2015,0x2025,0x2035,0x2105,/* 0x40-0x47 */ + 0x2109,0x2196,0x2197,0x2198,0x2199,0x2215,0x221F,0x2223,/* 0x48-0x4F */ + 0x2252,0x2266,0x2267,0x22BF,0x2550,0x2551,0x2552,0x2553,/* 0x50-0x57 */ + 0x2554,0x2555,0x2556,0x2557,0x2558,0x2559,0x255A,0x255B,/* 0x58-0x5F */ + 0x255C,0x255D,0x255E,0x255F,0x2560,0x2561,0x2562,0x2563,/* 0x60-0x67 */ + 0x2564,0x2565,0x2566,0x2567,0x2568,0x2569,0x256A,0x256B,/* 0x68-0x6F */ + 0x256C,0x256D,0x256E,0x256F,0x2570,0x2571,0x2572,0x2573,/* 0x70-0x77 */ + 0x2581,0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x0000,/* 0x78-0x7F */ + + 0x2588,0x2589,0x258A,0x258B,0x258C,0x258D,0x258E,0x258F,/* 0x80-0x87 */ + 0x2593,0x2594,0x2595,0x25BC,0x25BD,0x25E2,0x25E3,0x25E4,/* 0x88-0x8F */ + 0x25E5,0x2609,0x2295,0x3012,0x301D,0x301E,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x0101,0x00E1,0x01CE,0x00E0,0x0113,0x00E9,0x011B,/* 0xA0-0xA7 */ + 0x00E8,0x012B,0x00ED,0x01D0,0x00EC,0x014D,0x00F3,0x01D2,/* 0xA8-0xAF */ + 0x00F2,0x016B,0x00FA,0x01D4,0x00F9,0x01D6,0x01D8,0x01DA,/* 0xB0-0xB7 */ + 0x01DC,0x00FC,0x00EA,0x0251,0x0000,0x0144,0x0148,0x0000,/* 0xB8-0xBF */ + 0x0261,0x0000,0x0000,0x0000,0x0000,0x3105,0x3106,0x3107,/* 0xC0-0xC7 */ + 0x3108,0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,0x310F,/* 0xC8-0xCF */ + 0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117,/* 0xD0-0xD7 */ + 0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E,0x311F,/* 0xD8-0xDF */ + 0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,0x3127,/* 0xE0-0xE7 */ + 0x3128,0x3129,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE8-0xEF */ +}; + +static wchar_t c2u_A9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,/* 0x40-0x47 */ + 0x3029,0x32A3,0x338E,0x338F,0x339C,0x339D,0x339E,0x33A1,/* 0x48-0x4F */ + 0x33C4,0x33CE,0x33D1,0x33D2,0x33D5,0xFE30,0xFFE2,0xFFE4,/* 0x50-0x57 */ + 0x0000,0x2121,0x3231,0x0000,0x2010,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x30FC,0x309B,0x309C,0x30FD,0x30FE,0x3006,0x309D,0x309E,/* 0x60-0x67 */ + 0xFE49,0xFE4A,0xFE4B,0xFE4C,0xFE4D,0xFE4E,0xFE4F,0xFE50,/* 0x68-0x6F */ + 0xFE51,0xFE52,0xFE54,0xFE55,0xFE56,0xFE57,0xFE59,0xFE5A,/* 0x70-0x77 */ + 0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFE5F,0xFE60,0xFE61,0x0000,/* 0x78-0x7F */ + + 0xFE62,0xFE63,0xFE64,0xFE65,0xFE66,0xFE68,0xFE69,0xFE6A,/* 0x80-0x87 */ + 0xFE6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3007,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x0000,0x0000,0x0000,0x2500,0x2501,0x2502,0x2503,/* 0xA0-0xA7 */ + 0x2504,0x2505,0x2506,0x2507,0x2508,0x2509,0x250A,0x250B,/* 0xA8-0xAF */ + 0x250C,0x250D,0x250E,0x250F,0x2510,0x2511,0x2512,0x2513,/* 0xB0-0xB7 */ + 0x2514,0x2515,0x2516,0x2517,0x2518,0x2519,0x251A,0x251B,/* 0xB8-0xBF */ + 0x251C,0x251D,0x251E,0x251F,0x2520,0x2521,0x2522,0x2523,/* 0xC0-0xC7 */ + 0x2524,0x2525,0x2526,0x2527,0x2528,0x2529,0x252A,0x252B,/* 0xC8-0xCF */ + 0x252C,0x252D,0x252E,0x252F,0x2530,0x2531,0x2532,0x2533,/* 0xD0-0xD7 */ + 0x2534,0x2535,0x2536,0x2537,0x2538,0x2539,0x253A,0x253B,/* 0xD8-0xDF */ + 0x253C,0x253D,0x253E,0x253F,0x2540,0x2541,0x2542,0x2543,/* 0xE0-0xE7 */ + 0x2544,0x2545,0x2546,0x2547,0x2548,0x2549,0x254A,0x254B,/* 0xE8-0xEF */ +}; + +static wchar_t c2u_AA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x72DC,0x72DD,0x72DF,0x72E2,0x72E3,0x72E4,0x72E5,0x72E6,/* 0x40-0x47 */ + 0x72E7,0x72EA,0x72EB,0x72F5,0x72F6,0x72F9,0x72FD,0x72FE,/* 0x48-0x4F */ + 0x72FF,0x7300,0x7302,0x7304,0x7305,0x7306,0x7307,0x7308,/* 0x50-0x57 */ + 0x7309,0x730B,0x730C,0x730D,0x730F,0x7310,0x7311,0x7312,/* 0x58-0x5F */ + 0x7314,0x7318,0x7319,0x731A,0x731F,0x7320,0x7323,0x7324,/* 0x60-0x67 */ + 0x7326,0x7327,0x7328,0x732D,0x732F,0x7330,0x7332,0x7333,/* 0x68-0x6F */ + 0x7335,0x7336,0x733A,0x733B,0x733C,0x733D,0x7340,0x7341,/* 0x70-0x77 */ + 0x7342,0x7343,0x7344,0x7345,0x7346,0x7347,0x7348,0x0000,/* 0x78-0x7F */ + + 0x7349,0x734A,0x734B,0x734C,0x734E,0x734F,0x7351,0x7353,/* 0x80-0x87 */ + 0x7354,0x7355,0x7356,0x7358,0x7359,0x735A,0x735B,0x735C,/* 0x88-0x8F */ + 0x735D,0x735E,0x735F,0x7361,0x7362,0x7363,0x7364,0x7365,/* 0x90-0x97 */ + 0x7366,0x7367,0x7368,0x7369,0x736A,0x736B,0x736E,0x7370,/* 0x98-0x9F */ + 0x7371,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7372,0x7373,0x7374,0xF9A7,0x7376,0x7377,0x7378,0x7379,/* 0x40-0x47 */ + 0x737A,0x737B,0x737C,0x737D,0x737F,0x7380,0x7381,0x7382,/* 0x48-0x4F */ + 0x7383,0x7385,0x7386,0x7388,0x738A,0x738C,0x738D,0x738F,/* 0x50-0x57 */ + 0x7390,0x7392,0x7393,0x7394,0x7395,0x7397,0x7398,0x7399,/* 0x58-0x5F */ + 0x739A,0x739C,0x739D,0x739E,0x73A0,0x73A1,0x73A3,0x73A4,/* 0x60-0x67 */ + 0x73A5,0x73A6,0x73A7,0x73A8,0x73AA,0x73AC,0x73AD,0x73B1,/* 0x68-0x6F */ + 0x73B4,0x73B5,0x73B6,0x73B8,0x73B9,0x73BC,0x73BD,0x73BE,/* 0x70-0x77 */ + 0x73BF,0x73C1,0x73C3,0x73C4,0x73C5,0x73C6,0x73C7,0x0000,/* 0x78-0x7F */ + + 0x73CB,0x73CC,0x73CE,0x73D2,0x73D3,0x73D4,0x73D5,0x73D6,/* 0x80-0x87 */ + 0x73D7,0x73D8,0x73DA,0x73DB,0x73DC,0x73DD,0x73DF,0x73E1,/* 0x88-0x8F */ + 0x73E2,0x73E3,0x73E4,0x73E6,0x73E8,0x73EA,0x73EB,0x73EC,/* 0x90-0x97 */ + 0x73EE,0x73EF,0x73F0,0x73F1,0x73F3,0x73F4,0x73F5,0x73F6,/* 0x98-0x9F */ + 0x73F7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x73F8,0x73F9,0x73FA,0x73FB,0x73FC,0x73FD,0x73FE,0x73FF,/* 0x40-0x47 */ + 0x7400,0x7401,0x7402,0x7404,0x7407,0x7408,0x740B,0x740C,/* 0x48-0x4F */ + 0x740D,0x740E,0x7411,0x7412,0x7413,0x7414,0x7415,0x7416,/* 0x50-0x57 */ + 0x7417,0x7418,0x7419,0x741C,0x741D,0x741E,0x741F,0x7420,/* 0x58-0x5F */ + 0x7421,0x7423,0x7424,0x7427,0x7429,0x742B,0x742D,0x742F,/* 0x60-0x67 */ + 0x7431,0x7432,0x7437,0x7438,0x7439,0x743A,0x743B,0x743D,/* 0x68-0x6F */ + 0x743E,0x743F,0x7440,0x7442,0x7443,0x7444,0x7445,0x7446,/* 0x70-0x77 */ + 0x7447,0x7448,0x7449,0x744A,0x744B,0x744C,0x744D,0x0000,/* 0x78-0x7F */ + + 0x744E,0x744F,0x7450,0x7451,0x7452,0x7453,0x7454,0x7456,/* 0x80-0x87 */ + 0x7458,0x745D,0x7460,0x7461,0x7462,0x7463,0x7464,0x7465,/* 0x88-0x8F */ + 0x7466,0x7467,0x7468,0xF9AE,0x746A,0x746B,0x746C,0x746E,/* 0x90-0x97 */ + 0x746F,0x7471,0x7472,0x7473,0x7474,0x7475,0x7478,0x7479,/* 0x98-0x9F */ + 0x747A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x747B,0x747C,0x747D,0x747F,0x7482,0x7484,0x7485,0x7486,/* 0x40-0x47 */ + 0x7488,0xF994,0x748A,0x748C,0x748D,0x748F,0x7491,0x7492,/* 0x48-0x4F */ + 0x7493,0x7494,0x7495,0x7496,0x7497,0xF9EF,0x7499,0x749A,/* 0x50-0x57 */ + 0x749B,0x749D,0x749F,0x74A0,0x74A1,0x74A2,0x74A3,0x74A4,/* 0x58-0x5F */ + 0x74A5,0x74A6,0x74AA,0x74AB,0x74AC,0x74AD,0x74AE,0x74AF,/* 0x60-0x67 */ + 0x74B0,0x74B1,0x74B2,0x74B3,0x74B4,0x74B5,0x74B6,0x74B7,/* 0x68-0x6F */ + 0x74B8,0x74B9,0x74BB,0x74BC,0x74BD,0x74BE,0x74BF,0x74C0,/* 0x70-0x77 */ + 0x74C1,0x74C2,0x74C3,0x74C4,0x74C5,0x74C6,0x74C7,0x0000,/* 0x78-0x7F */ + + 0x74C8,0x74C9,0x74CA,0x74CB,0x74CC,0x74CD,0x74CE,0x74CF,/* 0x80-0x87 */ + 0x74D0,0x74D1,0x74D3,0x74D4,0x74D5,0x74D6,0x74D7,0x74D8,/* 0x88-0x8F */ + 0x74D9,0x74DA,0x74DB,0x74DD,0x74DF,0x74E1,0x74E5,0x74E7,/* 0x90-0x97 */ + 0x74E8,0x74E9,0x74EA,0x74EB,0x74EC,0x74ED,0x74F0,0x74F1,/* 0x98-0x9F */ + 0x74F2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x74F3,0x74F5,0x74F8,0x74F9,0x74FA,0x74FB,0x74FC,0x74FD,/* 0x40-0x47 */ + 0x74FE,0x7500,0x7501,0x7502,0x7503,0x7505,0x7506,0x7507,/* 0x48-0x4F */ + 0x7508,0x7509,0x750A,0x750B,0x750C,0x750E,0x7510,0x7512,/* 0x50-0x57 */ + 0x7514,0x7515,0x7516,0x7517,0x751B,0x751D,0x751E,0x7520,/* 0x58-0x5F */ + 0x7521,0x7522,0x7523,0x7524,0x7526,0x7527,0x752A,0x752E,/* 0x60-0x67 */ + 0x7534,0x7536,0x7539,0x753C,0x753D,0x753F,0x7541,0x7542,/* 0x68-0x6F */ + 0x7543,0x7544,0x7546,0x7547,0x7549,0x754A,0x754D,0x7550,/* 0x70-0x77 */ + 0x7551,0x7552,0x7553,0x7555,0x7556,0x7557,0x7558,0x0000,/* 0x78-0x7F */ + + 0x755D,0x755E,0x755F,0x7560,0x7561,0x7562,0x7563,0x7564,/* 0x80-0x87 */ + 0x7567,0x7568,0x7569,0x756B,0x756C,0x756D,0x756E,0x756F,/* 0x88-0x8F */ + 0xF962,0x7571,0x7573,0x7575,0x7576,0x7577,0x757A,0x757B,/* 0x90-0x97 */ + 0x757C,0x757D,0x757E,0x7580,0x7581,0x7582,0x7584,0x7585,/* 0x98-0x9F */ + 0x7587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7588,0x7589,0x758A,0x758C,0x758D,0x758E,0x7590,0x7593,/* 0x40-0x47 */ + 0x7595,0x7598,0x759B,0x759C,0x759E,0x75A2,0x75A6,0x75A7,/* 0x48-0x4F */ + 0x75A8,0x75A9,0x75AA,0x75AD,0x75B6,0x75B7,0x75BA,0x75BB,/* 0x50-0x57 */ + 0x75BF,0x75C0,0x75C1,0x75C6,0x75CB,0x75CC,0x75CE,0x75CF,/* 0x58-0x5F */ + 0x75D0,0x75D1,0x75D3,0x75D7,0x75D9,0x75DA,0x75DC,0x75DD,/* 0x60-0x67 */ + 0x75DF,0x75E0,0x75E1,0x75E5,0x75E9,0x75EC,0x75ED,0x75EE,/* 0x68-0x6F */ + 0x75EF,0x75F2,0x75F3,0x75F5,0x75F6,0x75F7,0x75F8,0x75FA,/* 0x70-0x77 */ + 0x75FB,0x75FD,0x75FE,0x7602,0x7604,0x7606,0x7607,0x0000,/* 0x78-0x7F */ + + 0x7608,0x7609,0x760B,0x760D,0x760E,0x760F,0x7611,0x7612,/* 0x80-0x87 */ + 0x7613,0x7614,0x7616,0x761A,0x761C,0x761D,0x761E,0x7621,/* 0x88-0x8F */ + 0x7623,0x7627,0x7628,0x762C,0x762E,0x762F,0x7631,0x7632,/* 0x90-0x97 */ + 0x7636,0x7637,0x7639,0x763A,0x763B,0x763D,0x7641,0xF9C1,/* 0x98-0x9F */ + 0x7644,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_B0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7645,0x7646,0x7647,0x7648,0x7649,0x764A,0x764B,0x764E,/* 0x40-0x47 */ + 0x764F,0x7650,0x7651,0x7652,0x7653,0x7655,0x7657,0x7658,/* 0x48-0x4F */ + 0x7659,0x765A,0x765B,0x765D,0x765F,0x7660,0x7661,0x7662,/* 0x50-0x57 */ + 0x7664,0x7665,0x7666,0x7667,0x7668,0xF90E,0x766A,0x766C,/* 0x58-0x5F */ + 0x766D,0x766E,0x7670,0x7671,0x7672,0x7673,0x7674,0x7675,/* 0x60-0x67 */ + 0x7676,0x7677,0x7679,0x767A,0x767C,0x767F,0x7680,0x7681,/* 0x68-0x6F */ + 0x7683,0x7685,0x7689,0x768A,0x768C,0x768D,0x768F,0x7690,/* 0x70-0x77 */ + 0x7692,0x7694,0x7695,0x7697,0x7698,0x769A,0x769B,0x0000,/* 0x78-0x7F */ + + 0x769C,0x769D,0x769E,0x769F,0x76A0,0x76A1,0x76A2,0x76A3,/* 0x80-0x87 */ + 0x76A5,0x76A6,0x76A7,0x76A8,0x76A9,0x76AA,0x76AB,0x76AC,/* 0x88-0x8F */ + 0x76AD,0x76AF,0x76B0,0x76B3,0x76B5,0x76B6,0x76B7,0x76B8,/* 0x90-0x97 */ + 0x76B9,0x76BA,0x76BB,0x76BC,0x76BD,0x76BE,0x76C0,0x76C1,/* 0x98-0x9F */ + 0x76C3,0x554A,0x963F,0x57C3,0x6328,0x54CE,0x5509,0x54C0,/* 0xA0-0xA7 */ + 0x7691,0x764C,0x853C,0x77EE,0x827E,0x788D,0x7231,0x9698,/* 0xA8-0xAF */ + 0x978D,0x6C28,0x5B89,0x4FFA,0x6309,0x6697,0x5CB8,0x80FA,/* 0xB0-0xB7 */ + 0x6848,0x80AE,0x6602,0x76CE,0x51F9,0x6556,0x71AC,0x7FF1,/* 0xB8-0xBF */ + 0x8884,0x50B2,0x5965,0x61CA,0x6FB3,0x82AD,0x634C,0x6252,/* 0xC0-0xC7 */ + 0x53ED,0x5427,0x7B06,0x516B,0x75A4,0x5DF4,0x62D4,0x8DCB,/* 0xC8-0xCF */ + 0x9776,0x628A,0x8019,0x575D,0x9738,0x7F62,0x7238,0x767D,/* 0xD0-0xD7 */ + 0x67CF,0x767E,0x6446,0x4F70,0x8D25,0x62DC,0x7A17,0x6591,/* 0xD8-0xDF */ + 0x73ED,0x642C,0x6273,0x822C,0x9881,0x677F,0x7248,0x626E,/* 0xE0-0xE7 */ + 0x62CC,0x4F34,0x74E3,0x534A,0x529E,0x7ECA,0x90A6,0x5E2E,/* 0xE8-0xEF */ + 0x6886,0x699C,0x8180,0x7ED1,0x68D2,0x78C5,0x868C,0x9551,/* 0xF0-0xF7 */ + 0x508D,0x8C24,0x82DE,0x80DE,0x5305,0x8912,0x5265,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x76C4,0x76C7,0x76C9,0x76CB,0x76CC,0x76D3,0x76D5,0x76D9,/* 0x40-0x47 */ + 0x76DA,0x76DC,0x76DD,0x76DE,0x76E0,0x76E1,0x76E2,0x76E3,/* 0x48-0x4F */ + 0x76E4,0x76E6,0xF933,0x76E8,0x76E9,0x76EA,0x76EB,0x76EC,/* 0x50-0x57 */ + 0x76ED,0x76F0,0x76F3,0x76F5,0x76F6,0x76F7,0x76FA,0x76FB,/* 0x58-0x5F */ + 0x76FD,0x76FF,0x7700,0x7702,0x7703,0x7705,0x7706,0x770A,/* 0x60-0x67 */ + 0x770C,0x770E,0x770F,0x7710,0x7711,0x7712,0x7713,0x7714,/* 0x68-0x6F */ + 0x7715,0x7716,0x7717,0x7718,0x771B,0x771C,0x771D,0x771E,/* 0x70-0x77 */ + 0x7721,0x7723,0x7724,0x7725,0x7727,0x772A,0x772B,0x0000,/* 0x78-0x7F */ + + 0x772C,0x772E,0x7730,0x7731,0x7732,0x7733,0x7734,0x7739,/* 0x80-0x87 */ + 0x773B,0x773D,0x773E,0x773F,0x7742,0x7744,0x7745,0x7746,/* 0x88-0x8F */ + 0x7748,0x7749,0x774A,0x774B,0x774C,0x774D,0x774E,0x774F,/* 0x90-0x97 */ + 0x7752,0x7753,0x7754,0x7755,0x7756,0x7757,0x7758,0x7759,/* 0x98-0x9F */ + 0x775C,0x8584,0x96F9,0x4FDD,0x5821,0x9971,0x5B9D,0x62B1,/* 0xA0-0xA7 */ + 0x62A5,0xFA06,0x8C79,0x9C8D,0x7206,0x676F,0x7891,0x60B2,/* 0xA8-0xAF */ + 0x5351,0x5317,0x8F88,0x80CC,0x8D1D,0x94A1,0x500D,0x72C8,/* 0xB0-0xB7 */ + 0x5907,0x60EB,0x7119,0x88AB,0x5954,0x82EF,0x672C,0x7B28,/* 0xB8-0xBF */ + 0x5D29,0x7EF7,0x752D,0x6CF5,0x8E66,0x8FF8,0x903C,0x9F3B,/* 0xC0-0xC7 */ + 0x6BD4,0x9119,0x7B14,0x5F7C,0x78A7,0x84D6,0x853D,0x6BD5,/* 0xC8-0xCF */ + 0x6BD9,0x6BD6,0x5E01,0x5E87,0x75F9,0x95ED,0x655D,0x5F0A,/* 0xD0-0xD7 */ + 0x5FC5,0x8F9F,0x58C1,0x81C2,0x907F,0x965B,0x97AD,0x8FB9,/* 0xD8-0xDF */ + 0x7F16,0x8D2C,0x6241,0xF965,0x53D8,0x535E,0x8FA8,0x8FA9,/* 0xE0-0xE7 */ + 0x8FAB,0x904D,0x6807,0x5F6A,0x8198,0x8868,0x9CD6,0x618B,/* 0xE8-0xEF */ + 0x522B,0x762A,0x5F6C,0x658C,0x6FD2,0x6EE8,0x5BBE,0x6448,/* 0xF0-0xF7 */ + 0x5175,0x51B0,0x67C4,0x4E19,0x79C9,0x997C,0x70B3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x775D,0x775E,0x775F,0x7760,0x7764,0x7767,0x7769,0x776A,/* 0x40-0x47 */ + 0x776D,0x776E,0x776F,0x7770,0x7771,0x7772,0x7773,0x7774,/* 0x48-0x4F */ + 0x7775,0x7776,0x7777,0x7778,0x777A,0x777B,0x777C,0x7781,/* 0x50-0x57 */ + 0x7782,0x7783,0x7786,0x7787,0x7788,0x7789,0x778A,0x778B,/* 0x58-0x5F */ + 0x778F,0x7790,0x7793,0x7794,0x7795,0x7796,0x7797,0x7798,/* 0x60-0x67 */ + 0x7799,0x779A,0x779B,0x779C,0x779D,0x779E,0x77A1,0x77A3,/* 0x68-0x6F */ + 0x77A4,0x77A6,0x77A8,0x77AB,0x77AD,0x77AE,0x77AF,0x77B1,/* 0x70-0x77 */ + 0x77B2,0x77B4,0x77B6,0x77B7,0x77B8,0x77B9,0x77BA,0x0000,/* 0x78-0x7F */ + + 0x77BC,0x77BE,0x77C0,0x77C1,0x77C2,0x77C3,0x77C4,0x77C5,/* 0x80-0x87 */ + 0x77C6,0x77C7,0x77C8,0x77C9,0x77CA,0x77CB,0x77CC,0x77CE,/* 0x88-0x8F */ + 0x77CF,0x77D0,0x77D1,0x77D2,0x77D3,0x77D4,0x77D5,0x77D6,/* 0x90-0x97 */ + 0x77D8,0x77D9,0x77DA,0x77DD,0x77DE,0x77DF,0x77E0,0x77E1,/* 0x98-0x9F */ + 0x77E4,0x75C5,0x5E76,0x73BB,0x83E0,0x64AD,0x62E8,0x94B5,/* 0xA0-0xA7 */ + 0x6CE2,0x535A,0x52C3,0x640F,0x94C2,0x7B94,0x4F2F,0x5E1B,/* 0xA8-0xAF */ + 0x8236,0x8116,0x818A,0x6E24,0x6CCA,0x9A73,0x6355,0x535C,/* 0xB0-0xB7 */ + 0x54FA,0x8865,0x57E0,0xF967,0x5E03,0x6B65,0x7C3F,0x90E8,/* 0xB8-0xBF */ + 0x6016,0x64E6,0x731C,0x88C1,0x6750,0x624D,0x8D22,0x776C,/* 0xC0-0xC7 */ + 0x8E29,0x91C7,0x5F69,0x83DC,0x8521,0x9910,0x53C2,0x8695,/* 0xC8-0xCF */ + 0x6B8B,0x60ED,0x60E8,0x707F,0x82CD,0x8231,0x4ED3,0x6CA7,/* 0xD0-0xD7 */ + 0x85CF,0x64CD,0x7CD9,0x69FD,0x66F9,0x8349,0x5395,0x7B56,/* 0xD8-0xDF */ + 0x4FA7,0x518C,0x6D4B,0x5C42,0x8E6D,0x63D2,0x53C9,0x832C,/* 0xE0-0xE7 */ + 0xF9FE,0x67E5,0x78B4,0x643D,0x5BDF,0x5C94,0x5DEE,0x8BE7,/* 0xE8-0xEF */ + 0x62C6,0x67F4,0x8C7A,0x6400,0x63BA,0x8749,0x998B,0x8C17,/* 0xF0-0xF7 */ + 0x7F20,0x94F2,0x4EA7,0x9610,0x98A4,0x660C,0x7316,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x77E6,0x77E8,0x77EA,0x77EF,0x77F0,0x77F1,0x77F2,0x77F4,/* 0x40-0x47 */ + 0x77F5,0x77F7,0x77F9,0x77FA,0x77FB,0x77FC,0x7803,0x7804,/* 0x48-0x4F */ + 0x7805,0x7806,0x7807,0x7808,0x780A,0x780B,0x780E,0x780F,/* 0x50-0x57 */ + 0x7810,0x7813,0x7815,0x7819,0x781B,0x781E,0x7820,0x7821,/* 0x58-0x5F */ + 0x7822,0x7824,0x7828,0x782A,0x782B,0x782E,0x782F,0x7831,/* 0x60-0x67 */ + 0x7832,0x7833,0x7835,0x7836,0x783D,0x783F,0x7841,0x7842,/* 0x68-0x6F */ + 0x7843,0x7844,0x7846,0x7848,0x7849,0x784A,0x784B,0x784D,/* 0x70-0x77 */ + 0x784F,0x7851,0x7853,0x7854,0x7858,0x7859,0x785A,0x0000,/* 0x78-0x7F */ + + 0x785B,0x785C,0x785E,0x785F,0x7860,0x7861,0x7862,0x7863,/* 0x80-0x87 */ + 0x7864,0x7865,0x7866,0x7867,0x7868,0x7869,0x786F,0x7870,/* 0x88-0x8F */ + 0x7871,0x7872,0x7873,0x7874,0x7875,0x7876,0x7878,0x7879,/* 0x90-0x97 */ + 0x787A,0x787B,0x787D,0x787E,0x787F,0x7880,0x7881,0x7882,/* 0x98-0x9F */ + 0x7883,0x573A,0x5C1D,0x5E38,0x957F,0x507F,0x80A0,0x5382,/* 0xA0-0xA7 */ + 0x655E,0x7545,0x5531,0x5021,0x8D85,0x6284,0x949E,0x671D,/* 0xA8-0xAF */ + 0x5632,0x6F6E,0x5DE2,0x5435,0x7092,0x8F66,0x626F,0x64A4,/* 0xB0-0xB7 */ + 0x63A3,0x5F7B,0x6F88,0x90F4,0x81E3,0xF971,0x5C18,0x6668,/* 0xB8-0xBF */ + 0x5FF1,0x6C89,0x9648,0x8D81,0x886C,0x6491,0x79F0,0x57CE,/* 0xC0-0xC7 */ + 0x6A59,0x6210,0x5448,0x4E58,0x7A0B,0x60E9,0x6F84,0x8BDA,/* 0xC8-0xCF */ + 0x627F,0x901E,0x9A8B,0x79E4,0x5403,0x75F4,0x6301,0x5319,/* 0xD0-0xD7 */ + 0x6C60,0x8FDF,0x5F1B,0x9A70,0x803B,0x9F7F,0x4F88,0x5C3A,/* 0xD8-0xDF */ + 0x8D64,0x7FC5,0x65A5,0x70BD,0x5145,0x51B2,0x866B,0x5D07,/* 0xE0-0xE7 */ + 0x5BA0,0x62BD,0x916C,0x7574,0x8E0C,0x7A20,0x6101,0x7B79,/* 0xE8-0xEF */ + 0x4EC7,0x7EF8,0x7785,0x4E11,0x81ED,0x521D,0x51FA,0x6A71,/* 0xF0-0xF7 */ + 0x53A8,0x8E87,0x9504,0x96CF,0x6EC1,0x9664,0x695A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7884,0x7885,0x7886,0x7888,0x788A,0x788B,0x788F,0x7890,/* 0x40-0x47 */ + 0x7892,0x7894,0x7895,0x7896,0x7899,0x789D,0x789E,0x78A0,/* 0x48-0x4F */ + 0x78A2,0x78A4,0x78A6,0x78A8,0x78A9,0x78AA,0x78AB,0x78AC,/* 0x50-0x57 */ + 0x78AD,0x78AE,0x78AF,0x78B5,0x78B6,0x78B7,0x78B8,0x78BA,/* 0x58-0x5F */ + 0x78BB,0x78BC,0x78BD,0x78BF,0x78C0,0x78C2,0x78C3,0x78C4,/* 0x60-0x67 */ + 0x78C6,0x78C7,0x78C8,0x78CC,0x78CD,0x78CE,0x78CF,0x78D1,/* 0x68-0x6F */ + 0x78D2,0x78D3,0x78D6,0x78D7,0x78D8,0x78DA,0x78DB,0x78DC,/* 0x70-0x77 */ + 0x78DD,0x78DE,0x78DF,0x78E0,0x78E1,0x78E2,0x78E3,0x0000,/* 0x78-0x7F */ + + 0x78E4,0x78E5,0x78E6,0x78E7,0x78E9,0x78EA,0x78EB,0x78ED,/* 0x80-0x87 */ + 0x78EE,0x78EF,0x78F0,0x78F1,0x78F3,0x78F5,0x78F6,0x78F8,/* 0x88-0x8F */ + 0x78F9,0xF964,0x78FC,0x78FD,0x78FE,0x78FF,0x7900,0x7902,/* 0x90-0x97 */ + 0x7903,0x7904,0x7906,0x7907,0x7908,0x7909,0x790A,0x790B,/* 0x98-0x9F */ + 0x790C,0x7840,0x50A8,0x77D7,0x6410,0x89E6,0x5904,0x63E3,/* 0xA0-0xA7 */ + 0x5DDD,0x7A7F,0x693D,0x4F20,0x8239,0x5598,0xF905,0x75AE,/* 0xA8-0xAF */ + 0x7A97,0x5E62,0x5E8A,0x95EF,0x521B,0x5439,0x708A,0x6376,/* 0xB0-0xB7 */ + 0x9524,0x5782,0x6625,0x693F,0x9187,0x5507,0x6DF3,0x7EAF,/* 0xB8-0xBF */ + 0x8822,0x6233,0x7EF0,0x75B5,0x8328,0x78C1,0x96CC,0x8F9E,/* 0xC0-0xC7 */ + 0x6148,0x74F7,0x8BCD,0x6B64,0xF9FF,0x8D50,0x6B21,0x806A,/* 0xC8-0xCF */ + 0x8471,0x56F1,0x5306,0x4ECE,0x4E1B,0x51D1,0x7C97,0x918B,/* 0xD0-0xD7 */ + 0x7C07,0x4FC3,0x8E7F,0x7BE1,0x7A9C,0x6467,0x5D14,0x50AC,/* 0xD8-0xDF */ + 0x8106,0x7601,0x7CB9,0x6DEC,0x7FE0,0x6751,0x5B58,0x5BF8,/* 0xE0-0xE7 */ + 0x78CB,0x64AE,0x6413,0x63AA,0x632B,0x9519,0x642D,0x8FBE,/* 0xE8-0xEF */ + 0x7B54,0x7629,0x6253,0x5927,0x5446,0x6B79,0x50A3,0x6234,/* 0xF0-0xF7 */ + 0x5E26,0x6B86,0x4EE3,0x8D37,0x888B,0x5F85,0x902E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x790D,0x790E,0x790F,0x7910,0x7911,0x7912,0x7914,0x7915,/* 0x40-0x47 */ + 0x7916,0x7917,0x7918,0x7919,0x791A,0x791B,0x791C,0x791D,/* 0x48-0x4F */ + 0x791F,0x7920,0x7921,0x7922,0x7923,0x7925,0x7926,0x7927,/* 0x50-0x57 */ + 0x7928,0x7929,0xF985,0x792B,0x792C,0x792D,0x792E,0x792F,/* 0x58-0x5F */ + 0x7930,0x7931,0x7932,0x7933,0x7935,0x7936,0x7937,0x7938,/* 0x60-0x67 */ + 0x7939,0x793D,0x793F,0x7942,0x7943,0x7944,0x7945,0x7947,/* 0x68-0x6F */ + 0x794A,0x794B,0x794C,0x794D,0x794E,0x794F,0x7950,0x7951,/* 0x70-0x77 */ + 0x7952,0x7954,0x7955,0x7958,0x7959,0x7961,0x7963,0x0000,/* 0x78-0x7F */ + + 0x7964,0x7966,0x7969,0x796A,0x796B,0x796C,0x796E,0x7970,/* 0x80-0x87 */ + 0x7971,0x7972,0x7973,0x7974,0x7975,0x7976,0x7979,0x797B,/* 0x88-0x8F */ + 0x797C,0x797D,0x797E,0xF93C,0x7982,0x7983,0x7986,0x7987,/* 0x90-0x97 */ + 0x7988,0x7989,0x798B,0x798C,0x798D,0x798E,0x7990,0x7991,/* 0x98-0x9F */ + 0x7992,0x6020,0x803D,0x62C5,0xF95E,0x5355,0x90F8,0x63B8,/* 0xA0-0xA7 */ + 0x80C6,0x65E6,0x6C2E,0x4F46,0x60EE,0x6DE1,0x8BDE,0x5F39,/* 0xA8-0xAF */ + 0x86CB,0x5F53,0x6321,0x515A,0x8361,0x6863,0x5200,0x6363,/* 0xB0-0xB7 */ + 0x8E48,0x5012,0x5C9B,0x7977,0x5BFC,0x5230,0x7A3B,0x60BC,/* 0xB8-0xBF */ + 0x9053,0x76D7,0x5FB7,0x5F97,0x7684,0x8E6C,0x706F,0x767B,/* 0xC0-0xC7 */ + 0x7B49,0x77AA,0x51F3,0x9093,0x5824,0x4F4E,0x6EF4,0x8FEA,/* 0xC8-0xCF */ + 0x654C,0x7B1B,0x72C4,0x6DA4,0x7FDF,0x5AE1,0x62B5,0x5E95,/* 0xD0-0xD7 */ + 0x5730,0x8482,0x7B2C,0x5E1D,0x5F1F,0x9012,0x7F14,0x98A0,/* 0xD8-0xDF */ + 0x6382,0x6EC7,0x7898,0x70B9,0x5178,0x975B,0x57AB,0x7535,/* 0xE0-0xE7 */ + 0x4F43,0x7538,0x5E97,0x60E6,0x5960,0x6DC0,0x6BBF,0x7889,/* 0xE8-0xEF */ + 0x53FC,0x96D5,0x51CB,0x5201,0x6389,0x540A,0x9493,0x8C03,/* 0xF0-0xF7 */ + 0x8DCC,0x7239,0x789F,0x8776,0x8FED,0x8C0D,0x53E0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7993,0x7994,0x7995,0x7996,0x7997,0x7998,0x7999,0x799B,/* 0x40-0x47 */ + 0x799C,0x799D,0x799E,0x799F,0x79A0,0x79A1,0x79A2,0x79A3,/* 0x48-0x4F */ + 0x79A4,0x79A5,0x79A6,0x79A8,0x79A9,0x79AA,0x79AB,0x79AC,/* 0x50-0x57 */ + 0x79AD,0xF9B6,0x79AF,0x79B0,0x79B1,0x79B2,0x79B4,0x79B5,/* 0x58-0x5F */ + 0x79B6,0x79B7,0x79B8,0x79BC,0x79BF,0x79C2,0x79C4,0x79C5,/* 0x60-0x67 */ + 0x79C7,0x79C8,0x79CA,0x79CC,0x79CE,0x79CF,0x79D0,0x79D3,/* 0x68-0x6F */ + 0x79D4,0x79D6,0x79D7,0x79D9,0x79DA,0x79DB,0x79DC,0x79DD,/* 0x70-0x77 */ + 0x79DE,0x79E0,0x79E1,0x79E2,0x79E5,0x79E8,0x79EA,0x0000,/* 0x78-0x7F */ + + 0x79EC,0x79EE,0x79F1,0x79F2,0x79F3,0x79F4,0x79F5,0x79F6,/* 0x80-0x87 */ + 0x79F7,0x79F9,0x79FA,0x79FC,0x79FE,0x79FF,0x7A01,0x7A04,/* 0x88-0x8F */ + 0x7A05,0x7A07,0x7A08,0x7A09,0x7A0A,0x7A0C,0x7A0F,0x7A10,/* 0x90-0x97 */ + 0x7A11,0x7A12,0x7A13,0x7A15,0x7A16,0x7A18,0x7A19,0x7A1B,/* 0x98-0x9F */ + 0xF956,0x4E01,0x76EF,0x53EE,0x9489,0x9876,0x9F0E,0x952D,/* 0xA0-0xA7 */ + 0x5B9A,0x8BA2,0x4E22,0x4E1C,0x51AC,0x8463,0x61C2,0x52A8,/* 0xA8-0xAF */ + 0x680B,0x4F97,0x606B,0x51BB,0xFA05,0x515C,0x6296,0x6597,/* 0xB0-0xB7 */ + 0x9661,0x8C46,0x9017,0x75D8,0xFA26,0x7763,0x6BD2,0x728A,/* 0xB8-0xBF */ + 0x72EC,0x8BFB,0x5835,0x7779,0x8D4C,0x675C,0x9540,0x809A,/* 0xC0-0xC7 */ + 0xFA01,0x6E21,0x5992,0x7AEF,0x77ED,0x953B,0x6BB5,0x65AD,/* 0xC8-0xCF */ + 0x7F0E,0x5806,0x5151,0x961F,0x5BF9,0x58A9,0x5428,0x8E72,/* 0xD0-0xD7 */ + 0x6566,0x987F,0x56E4,0x949D,0x76FE,0x9041,0x6387,0x54C6,/* 0xD8-0xDF */ + 0x591A,0x593A,0x579B,0x8EB2,0x6735,0x8DFA,0x8235,0x5241,/* 0xE0-0xE7 */ + 0x60F0,0x5815,0x86FE,0x5CE8,0x9E45,0x4FC4,0x989D,0x8BB9,/* 0xE8-0xEF */ + 0x5A25,0x6076,0x5384,0x627C,0x904F,0x9102,0x997F,0x6069,/* 0xF0-0xF7 */ + 0x800C,0x513F,0x8033,0x5C14,0x9975,0x6D31,0x4E8C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7A1D,0x7A1F,0x7A21,0x7A22,0x7A24,0x7A25,0x7A26,0x7A27,/* 0x40-0x47 */ + 0x7A28,0x7A29,0x7A2A,0x7A2B,0x7A2C,0x7A2D,0x7A2E,0x7A2F,/* 0x48-0x4F */ + 0x7A30,0x7A31,0x7A32,0x7A34,0x7A35,0x7A36,0x7A38,0x7A3A,/* 0x50-0x57 */ + 0x7A3E,0x7A40,0x7A41,0x7A42,0x7A43,0x7A44,0x7A45,0x7A47,/* 0x58-0x5F */ + 0x7A48,0x7A49,0x7A4A,0x7A4B,0x7A4C,0x7A4D,0x7A4E,0x7A4F,/* 0x60-0x67 */ + 0x7A50,0x7A52,0x7A53,0x7A54,0x7A55,0x7A56,0x7A58,0x7A59,/* 0x68-0x6F */ + 0x7A5A,0x7A5B,0x7A5C,0x7A5D,0x7A5E,0x7A5F,0x7A60,0x7A61,/* 0x70-0x77 */ + 0x7A62,0x7A63,0x7A64,0x7A65,0x7A66,0x7A67,0x7A68,0x0000,/* 0x78-0x7F */ + + 0x7A69,0x7A6A,0x7A6B,0x7A6C,0x7A6D,0x7A6E,0x7A6F,0x7A71,/* 0x80-0x87 */ + 0x7A72,0x7A73,0x7A75,0x7A7B,0x7A7C,0x7A7D,0x7A7E,0x7A82,/* 0x88-0x8F */ + 0x7A85,0x7A87,0x7A89,0x7A8A,0x7A8B,0x7A8C,0x7A8E,0x7A8F,/* 0x90-0x97 */ + 0x7A90,0x7A93,0x7A94,0x7A99,0x7A9A,0x7A9B,0x7A9E,0x7AA1,/* 0x98-0x9F */ + 0x7AA2,0x8D30,0x53D1,0x7F5A,0x7B4F,0x4F10,0x4E4F,0x9600,/* 0xA0-0xA7 */ + 0x6CD5,0x73D0,0x85E9,0x5E06,0x756A,0x7FFB,0x6A0A,0x77FE,/* 0xA8-0xAF */ + 0x9492,0x7E41,0x51E1,0x70E6,0x53CD,0x8FD4,0x8303,0x8D29,/* 0xB0-0xB7 */ + 0x72AF,0x996D,0x6CDB,0x574A,0x82B3,0x65B9,0x80AA,0x623F,/* 0xB8-0xBF */ + 0x9632,0x59A8,0x4EFF,0x8BBF,0x7EBA,0x653E,0x83F2,0x975E,/* 0xC0-0xC7 */ + 0x5561,0x98DE,0x80A5,0x532A,0x8BFD,0x5420,0x80BA,0x5E9F,/* 0xC8-0xCF */ + 0x6CB8,0x8D39,0x82AC,0x915A,0x5429,0x6C1B,0x5206,0x7EB7,/* 0xD0-0xD7 */ + 0x575F,0x711A,0x6C7E,0x7C89,0x594B,0x4EFD,0x5FFF,0x6124,/* 0xD8-0xDF */ + 0x7CAA,0x4E30,0x5C01,0x67AB,0x8702,0x5CF0,0x950B,0x98CE,/* 0xE0-0xE7 */ + 0x75AF,0x70FD,0x9022,0x51AF,0x7F1D,0x8BBD,0x5949,0x51E4,/* 0xE8-0xEF */ + 0x4F5B,0x5426,0x592B,0x6577,0x80A4,0x5B75,0x6276,0x62C2,/* 0xF0-0xF7 */ + 0x8F90,0x5E45,0x6C1F,0x7B26,0x4F0F,0x4FD8,0x670D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7AA3,0x7AA4,0x7AA7,0x7AA9,0x7AAA,0x7AAB,0x7AAE,0x7AAF,/* 0x40-0x47 */ + 0x7AB0,0x7AB1,0x7AB2,0x7AB4,0x7AB5,0x7AB6,0x7AB7,0x7AB8,/* 0x48-0x4F */ + 0x7AB9,0x7ABA,0x7ABB,0x7ABC,0x7ABD,0x7ABE,0x7AC0,0x7AC1,/* 0x50-0x57 */ + 0x7AC2,0x7AC3,0x7AC4,0x7AC5,0x7AC6,0x7AC7,0x7AC8,0x7AC9,/* 0x58-0x5F */ + 0x7ACA,0x7ACC,0x7ACD,0x7ACE,0x7ACF,0x7AD0,0x7AD1,0x7AD2,/* 0x60-0x67 */ + 0x7AD3,0x7AD4,0x7AD5,0x7AD7,0x7AD8,0x7ADA,0x7ADB,0x7ADC,/* 0x68-0x6F */ + 0x7ADD,0x7AE1,0x7AE2,0x7AE4,0x7AE7,0x7AE8,0x7AE9,0x7AEA,/* 0x70-0x77 */ + 0x7AEB,0x7AEC,0x7AEE,0x7AF0,0x7AF1,0x7AF2,0x7AF3,0x0000,/* 0x78-0x7F */ + + 0x7AF4,0x7AF5,0x7AF6,0x7AF7,0x7AF8,0x7AFB,0x7AFC,0x7AFE,/* 0x80-0x87 */ + 0x7B00,0x7B01,0x7B02,0x7B05,0x7B07,0x7B09,0x7B0C,0x7B0D,/* 0x88-0x8F */ + 0x7B0E,0x7B10,0x7B12,0x7B13,0x7B16,0x7B17,0x7B18,0x7B1A,/* 0x90-0x97 */ + 0x7B1C,0x7B1D,0x7B1F,0x7B21,0x7B22,0x7B23,0x7B27,0x7B29,/* 0x98-0x9F */ + 0x7B2D,0x6D6E,0x6DAA,0xFA1B,0x88B1,0x5F17,0x752B,0x629A,/* 0xA0-0xA7 */ + 0x8F85,0x4FEF,0x91DC,0x65A7,0x812F,0x8151,0x5E9C,0x8150,/* 0xA8-0xAF */ + 0x8D74,0x526F,0x8986,0x8D4B,0x590D,0x5085,0x4ED8,0x961C,/* 0xB0-0xB7 */ + 0x7236,0x8179,0x8D1F,0x5BCC,0x8BA3,0x9644,0x5987,0x7F1A,/* 0xB8-0xBF */ + 0x5490,0x5676,0x560E,0x8BE5,0x6539,0x6982,0x9499,0x76D6,/* 0xC0-0xC7 */ + 0x6E89,0x5E72,0x7518,0x6746,0x67D1,0x7AFF,0x809D,0x8D76,/* 0xC8-0xCF */ + 0x611F,0x79C6,0x6562,0x8D63,0x5188,0x521A,0x94A2,0x7F38,/* 0xD0-0xD7 */ + 0x809B,0x7EB2,0x5C97,0x6E2F,0x6760,0x7BD9,0x768B,0x9AD8,/* 0xD8-0xDF */ + 0x818F,0x7F94,0x7CD5,0x641E,0x9550,0x7A3F,0x544A,0x54E5,/* 0xE0-0xE7 */ + 0x6B4C,0x6401,0x6208,0x9E3D,0x80F3,0x7599,0x5272,0x9769,/* 0xE8-0xEF */ + 0x845B,0x683C,0x86E4,0x9601,0x9694,0x94EC,0x4E2A,0x5404,/* 0xF0-0xF7 */ + 0x7ED9,0x6839,0x8DDF,0x8015,0xF901,0x5E9A,0x7FB9,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7B2F,0x7B30,0x7B32,0x7B34,0x7B35,0x7B36,0x7B37,0x7B39,/* 0x40-0x47 */ + 0x7B3B,0x7B3D,0x7B3F,0x7B40,0x7B41,0x7B42,0x7B43,0x7B44,/* 0x48-0x4F */ + 0x7B46,0x7B48,0x7B4A,0x7B4D,0x7B4E,0x7B53,0x7B55,0x7B57,/* 0x50-0x57 */ + 0x7B59,0x7B5C,0x7B5E,0x7B5F,0x7B61,0x7B63,0x7B64,0x7B65,/* 0x58-0x5F */ + 0x7B66,0x7B67,0x7B68,0x7B69,0x7B6A,0x7B6B,0x7B6C,0x7B6D,/* 0x60-0x67 */ + 0x7B6F,0x7B70,0x7B73,0x7B74,0x7B76,0x7B78,0x7B7A,0x7B7C,/* 0x68-0x6F */ + 0x7B7D,0x7B7F,0x7B81,0x7B82,0x7B83,0x7B84,0x7B86,0x7B87,/* 0x70-0x77 */ + 0x7B88,0x7B89,0x7B8A,0x7B8B,0x7B8C,0x7B8E,0x7B8F,0x0000,/* 0x78-0x7F */ + + 0x7B91,0x7B92,0x7B93,0x7B96,0x7B98,0x7B99,0x7B9A,0x7B9B,/* 0x80-0x87 */ + 0x7B9E,0x7B9F,0x7BA0,0x7BA3,0x7BA4,0x7BA5,0x7BAE,0x7BAF,/* 0x88-0x8F */ + 0x7BB0,0x7BB2,0x7BB3,0x7BB5,0x7BB6,0x7BB7,0x7BB9,0x7BBA,/* 0x90-0x97 */ + 0x7BBB,0x7BBC,0x7BBD,0x7BBE,0x7BBF,0x7BC0,0x7BC2,0x7BC3,/* 0x98-0x9F */ + 0x7BC4,0x57C2,0x803F,0x6897,0x5DE5,0x653B,0x529F,0x606D,/* 0xA0-0xA7 */ + 0x9F9A,0x4F9B,0x8EAC,0x516C,0x5BAB,0x5F13,0x5DE9,0x6C5E,/* 0xA8-0xAF */ + 0x62F1,0x8D21,0x5171,0x94A9,0x52FE,0x6C9F,0x82DF,0x72D7,/* 0xB0-0xB7 */ + 0x57A2,0x6784,0x8D2D,0x591F,0x8F9C,0x83C7,0x5495,0x7B8D,/* 0xB8-0xBF */ + 0x4F30,0x6CBD,0x5B64,0x59D1,0x9F13,0x53E4,0x86CA,0x9AA8,/* 0xC0-0xC7 */ + 0x8C37,0x80A1,0x6545,0x987E,0x56FA,0x96C7,0x522E,0x74DC,/* 0xC8-0xCF */ + 0x5250,0x5BE1,0x6302,0x8902,0x4E56,0x62D0,0x602A,0x68FA,/* 0xD0-0xD7 */ + 0x5173,0x5B98,0x51A0,0x89C2,0x7BA1,0x9986,0x7F50,0x60EF,/* 0xD8-0xDF */ + 0x704C,0x8D2F,0x5149,0x5E7F,0x901B,0x7470,0x89C4,0x572D,/* 0xE0-0xE7 */ + 0x7845,0x5F52,0x9F9F,0x95FA,0x8F68,0x9B3C,0x8BE1,0x7678,/* 0xE8-0xEF */ + 0x6842,0x67DC,0x8DEA,0x8D35,0x523D,0x8F8A,0x6EDA,0x68CD,/* 0xF0-0xF7 */ + 0x9505,0x90ED,0x56FD,0x679C,0x88F9,0x8FC7,0x54C8,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7BC5,0x7BC8,0x7BC9,0x7BCA,0x7BCB,0x7BCD,0x7BCE,0x7BCF,/* 0x40-0x47 */ + 0x7BD0,0x7BD2,0x7BD4,0x7BD5,0x7BD6,0x7BD7,0x7BD8,0x7BDB,/* 0x48-0x4F */ + 0x7BDC,0x7BDE,0x7BDF,0x7BE0,0x7BE2,0x7BE3,0x7BE4,0x7BE7,/* 0x50-0x57 */ + 0x7BE8,0x7BE9,0x7BEB,0x7BEC,0x7BED,0x7BEF,0x7BF0,0x7BF2,/* 0x58-0x5F */ + 0x7BF3,0x7BF4,0x7BF5,0x7BF6,0x7BF8,0x7BF9,0x7BFA,0x7BFB,/* 0x60-0x67 */ + 0x7BFD,0x7BFF,0x7C00,0x7C01,0x7C02,0x7C03,0x7C04,0x7C05,/* 0x68-0x6F */ + 0x7C06,0x7C08,0x7C09,0x7C0A,0x7C0D,0x7C0E,0x7C10,0x7C11,/* 0x70-0x77 */ + 0x7C12,0x7C13,0x7C14,0x7C15,0x7C17,0x7C18,0x7C19,0x0000,/* 0x78-0x7F */ + + 0x7C1A,0x7C1B,0x7C1C,0x7C1D,0x7C1E,0x7C20,0x7C21,0x7C22,/* 0x80-0x87 */ + 0x7C23,0x7C24,0x7C25,0x7C28,0x7C29,0x7C2B,0x7C2C,0x7C2D,/* 0x88-0x8F */ + 0x7C2E,0x7C2F,0x7C30,0x7C31,0x7C32,0x7C33,0x7C34,0x7C35,/* 0x90-0x97 */ + 0x7C36,0x7C37,0x7C39,0x7C3A,0x7C3B,0x7C3C,0x7C3D,0xF9A6,/* 0x98-0x9F */ + 0x7C42,0x9AB8,0x5B69,0x6D77,0x6C26,0x4EA5,0x5BB3,0x9A87,/* 0xA0-0xA7 */ + 0x9163,0x61A8,0x90AF,0x97E9,0x542B,0x6DB5,0x5BD2,0x51FD,/* 0xA8-0xAF */ + 0x558A,0x7F55,0x7FF0,0x64BC,0x634D,0x65F1,0x61BE,0x608D,/* 0xB0-0xB7 */ + 0x710A,0x6C57,0x6C49,0x592F,0x676D,0x822A,0x58D5,0x568E,/* 0xB8-0xBF */ + 0x8C6A,0x6BEB,0x90DD,0x597D,0x8017,0x53F7,0x6D69,0x5475,/* 0xC0-0xC7 */ + 0x559D,0x8377,0x83CF,0x6838,0x79BE,0x548C,0x4F55,0x5408,/* 0xC8-0xCF */ + 0x76D2,0x8C89,0x9602,0x6CB3,0x6DB8,0x8D6B,0x8910,0x9E64,/* 0xD0-0xD7 */ + 0x8D3A,0x563F,0x9ED1,0x75D5,0x5F88,0x72E0,0x6068,0x54FC,/* 0xD8-0xDF */ + 0x4EA8,0x6A2A,0x8861,0x6052,0x8F70,0x54C4,0x70D8,0x8679,/* 0xE0-0xE7 */ + 0x9E3F,0x6D2A,0x5B8F,0x5F18,0x7EA2,0x5589,0x4FAF,0x7334,/* 0xE8-0xEF */ + 0x543C,0x539A,0x5019,0x540E,0x547C,0x4E4E,0x5FFD,0x745A,/* 0xF0-0xF7 */ + 0x58F6,0x846B,0x80E1,0x8774,0x72D0,0x7CCA,0x6E56,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7C43,0x7C44,0x7C45,0x7C46,0x7C47,0x7C48,0x7C49,0x7C4A,/* 0x40-0x47 */ + 0x7C4B,0x7C4C,0x7C4E,0x7C4F,0x7C50,0x7C51,0x7C52,0x7C53,/* 0x48-0x4F */ + 0x7C54,0x7C55,0x7C56,0x7C57,0x7C58,0x7C59,0x7C5A,0x7C5B,/* 0x50-0x57 */ + 0x7C5C,0x7C5D,0x7C5E,0x7C5F,0xF944,0x7C61,0x7C62,0x7C63,/* 0x58-0x5F */ + 0x7C64,0x7C65,0x7C66,0x7C67,0x7C68,0x7C69,0x7C6A,0x7C6B,/* 0x60-0x67 */ + 0x7C6C,0x7C6D,0x7C6E,0x7C6F,0x7C70,0x7C71,0x7C72,0x7C75,/* 0x68-0x6F */ + 0x7C76,0x7C77,0x7C78,0x7C79,0x7C7A,0x7C7E,0x7C7F,0x7C80,/* 0x70-0x77 */ + 0x7C81,0x7C82,0x7C83,0x7C84,0x7C85,0x7C86,0x7C87,0x0000,/* 0x78-0x7F */ + + 0x7C88,0x7C8A,0x7C8B,0x7C8C,0x7C8D,0x7C8E,0x7C8F,0x7C90,/* 0x80-0x87 */ + 0x7C93,0x7C94,0x7C96,0x7C99,0x7C9A,0x7C9B,0x7CA0,0x7CA1,/* 0x88-0x8F */ + 0x7CA3,0x7CA6,0x7CA7,0x7CA8,0x7CA9,0x7CAB,0x7CAC,0x7CAD,/* 0x90-0x97 */ + 0x7CAF,0x7CB0,0x7CB4,0x7CB5,0x7CB6,0x7CB7,0x7CB8,0x7CBA,/* 0x98-0x9F */ + 0x7CBB,0x5F27,0x864E,0x552C,0x62A4,0x4E92,0x6CAA,0x6237,/* 0xA0-0xA7 */ + 0x82B1,0x54D7,0x534E,0x733E,0xF904,0x753B,0x5212,0x5316,/* 0xA8-0xAF */ + 0x8BDD,0x69D0,0x5F8A,0x6000,0x6DEE,0x574F,0x6B22,0x73AF,/* 0xB0-0xB7 */ + 0x6853,0x8FD8,0x7F13,0x6362,0x60A3,0x5524,0x75EA,0x8C62,/* 0xB8-0xBF */ + 0x7115,0x6DA3,0x5BA6,0x5E7B,0x8352,0x614C,0x9EC4,0x78FA,/* 0xC0-0xC7 */ + 0x8757,0x7C27,0x7687,0x51F0,0x60F6,0x714C,0x6643,0x5E4C,/* 0xC8-0xCF */ + 0x604D,0x8C0E,0x7070,0x6325,0x8F89,0x5FBD,0x6062,0x86D4,/* 0xD0-0xD7 */ + 0x56DE,0x6BC1,0x6094,0x6167,0x5349,0x60E0,0x6666,0x8D3F,/* 0xD8-0xDF */ + 0x79FD,0x4F1A,0x70E9,0x6C47,0x8BB3,0x8BF2,0x7ED8,0x8364,/* 0xE0-0xE7 */ + 0x660F,0x5A5A,0x9B42,0x6D51,0x6DF7,0x8C41,0x6D3B,0x4F19,/* 0xE8-0xEF */ + 0x706B,0x83B7,0x6216,0x60D1,0x970D,0x8D27,0x7978,0x51FB,/* 0xF0-0xF7 */ + 0x573E,0x57FA,0x673A,0x7578,0x7A3D,0x79EF,0x7B95,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7CBF,0x7CC0,0x7CC2,0x7CC3,0x7CC4,0x7CC6,0x7CC9,0x7CCB,/* 0x40-0x47 */ + 0x7CCE,0x7CCF,0x7CD0,0x7CD1,0x7CD2,0x7CD3,0x7CD4,0x7CD8,/* 0x48-0x4F */ + 0x7CDA,0x7CDB,0x7CDD,0x7CDE,0x7CE1,0x7CE2,0x7CE3,0x7CE4,/* 0x50-0x57 */ + 0x7CE5,0x7CE6,0xF97B,0x7CE9,0x7CEA,0x7CEB,0x7CEC,0x7CED,/* 0x58-0x5F */ + 0x7CEE,0x7CF0,0x7CF1,0x7CF2,0x7CF3,0x7CF4,0x7CF5,0x7CF6,/* 0x60-0x67 */ + 0x7CF7,0x7CF9,0x7CFA,0x7CFC,0x7CFD,0x7CFE,0x7CFF,0x7D00,/* 0x68-0x6F */ + 0x7D01,0x7D02,0x7D03,0x7D04,0x7D05,0x7D06,0x7D07,0x7D08,/* 0x70-0x77 */ + 0x7D09,0x7D0B,0x7D0C,0x7D0D,0x7D0E,0x7D0F,0xF9CF,0x0000,/* 0x78-0x7F */ + + 0x7D11,0x7D12,0x7D13,0x7D14,0x7D15,0x7D16,0x7D17,0x7D18,/* 0x80-0x87 */ + 0x7D19,0x7D1A,0x7D1B,0x7D1C,0x7D1D,0x7D1E,0x7D1F,0x7D21,/* 0x88-0x8F */ + 0x7D23,0x7D24,0x7D25,0x7D26,0x7D28,0x7D29,0x7D2A,0x7D2C,/* 0x90-0x97 */ + 0x7D2D,0x7D2E,0x7D30,0x7D31,0x7D32,0x7D33,0x7D34,0x7D35,/* 0x98-0x9F */ + 0x7D36,0x808C,0x9965,0x8FF9,0x6FC0,0x8BA5,0x9E21,0x59EC,/* 0xA0-0xA7 */ + 0x7EE9,0x7F09,0x5409,0x6781,0x68D8,0x8F91,0x7C4D,0x96C6,/* 0xA8-0xAF */ + 0x53CA,0x6025,0x75BE,0x6C72,0x5373,0x5AC9,0x7EA7,0x6324,/* 0xB0-0xB7 */ + 0x51E0,0x810A,0x5DF1,0x84DF,0x6280,0x5180,0x5B63,0x4F0E,/* 0xB8-0xBF */ + 0x796D,0x5242,0x60B8,0x6D4E,0x5BC4,0x5BC2,0x8BA1,0x8BB0,/* 0xC0-0xC7 */ + 0x65E2,0x5FCC,0x9645,0x5993,0x7EE7,0x7EAA,0x5609,0x67B7,/* 0xC8-0xCF */ + 0x5939,0x4F73,0x5BB6,0x52A0,0x835A,0x988A,0x8D3E,0x7532,/* 0xD0-0xD7 */ + 0x94BE,0x5047,0x7A3C,0x4EF7,0x67B6,0x9A7E,0x5AC1,0x6B7C,/* 0xD8-0xDF */ + 0x76D1,0x575A,0x5C16,0x7B3A,0x95F4,0x714E,0x517C,0x80A9,/* 0xE0-0xE7 */ + 0x8270,0x5978,0x7F04,0x8327,0x68C0,0x67EC,0x78B1,0x7877,/* 0xE8-0xEF */ + 0x62E3,0x6361,0x7B80,0x4FED,0x526A,0x51CF,0x8350,0x69DB,/* 0xF0-0xF7 */ + 0x9274,0x8DF5,0x8D31,0x89C1,0x952E,0x7BAD,0x4EF6,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7D37,0x7D38,0x7D39,0x7D3A,0x7D3B,0x7D3C,0x7D3D,0x7D3E,/* 0x40-0x47 */ + 0x7D3F,0x7D40,0x7D41,0x7D42,0x7D43,0x7D44,0x7D45,0x7D46,/* 0x48-0x4F */ + 0x7D47,0x7D48,0x7D49,0x7D4A,0x7D4B,0x7D4C,0x7D4D,0x7D4E,/* 0x50-0x57 */ + 0x7D4F,0x7D50,0x7D51,0x7D52,0x7D53,0x7D54,0x7D55,0x7D56,/* 0x58-0x5F */ + 0x7D57,0x7D58,0x7D59,0x7D5A,0x7D5B,0x7D5C,0x7D5D,0x7D5E,/* 0x60-0x67 */ + 0x7D5F,0x7D60,0x7D61,0x7D62,0x7D63,0x7D64,0x7D65,0x7D66,/* 0x68-0x6F */ + 0x7D67,0x7D68,0x7D69,0x7D6A,0x7D6B,0x7D6C,0x7D6D,0x7D6F,/* 0x70-0x77 */ + 0x7D70,0x7D71,0x7D72,0x7D73,0x7D74,0x7D75,0x7D76,0x0000,/* 0x78-0x7F */ + + 0x7D78,0x7D79,0x7D7A,0x7D7B,0x7D7C,0x7D7D,0x7D7E,0x7D7F,/* 0x80-0x87 */ + 0x7D80,0x7D81,0x7D82,0x7D83,0x7D84,0x7D85,0x7D86,0x7D87,/* 0x88-0x8F */ + 0x7D88,0x7D89,0x7D8A,0x7D8B,0x7D8C,0x7D8D,0x7D8E,0x7D8F,/* 0x90-0x97 */ + 0x7D90,0x7D91,0x7D92,0x7D93,0x7D94,0x7D95,0x7D96,0x7D97,/* 0x98-0x9F */ + 0x7D98,0x5065,0x8230,0x5251,0x996F,0x6E10,0x6E85,0x6DA7,/* 0xA0-0xA7 */ + 0x5EFA,0x50F5,0x59DC,0x5C06,0x6D46,0x6C5F,0x7586,0x848B,/* 0xA8-0xAF */ + 0x6868,0x5956,0x8BB2,0x5320,0x9171,0xFA09,0x8549,0x6912,/* 0xB0-0xB7 */ + 0x7901,0x7126,0x80F6,0x4EA4,0x90CA,0x6D47,0x9A84,0x5A07,/* 0xB8-0xBF */ + 0x56BC,0x6405,0x94F0,0x77EB,0x4FA5,0x811A,0x72E1,0x89D2,/* 0xC0-0xC7 */ + 0x997A,0x7F34,0x7EDE,0x527F,0x6559,0x9175,0x8F7F,0x8F83,/* 0xC8-0xCF */ + 0x53EB,0x7A96,0x63ED,0x63A5,0x7686,0x79F8,0x8857,0x9636,/* 0xD0-0xD7 */ + 0x622A,0x52AB,0x8282,0x6854,0x6770,0x6377,0x776B,0x7AED,/* 0xD8-0xDF */ + 0x6D01,0x7ED3,0x89E3,0x59D0,0x6212,0x85C9,0x82A5,0x754C,/* 0xE0-0xE7 */ + 0x501F,0x4ECB,0x75A5,0x8BEB,0x5C4A,0x5DFE,0x7B4B,0x65A4,/* 0xE8-0xEF */ + 0xF90A,0x4ECA,0x6D25,0x895F,0x7D27,0x9526,0x4EC5,0x8C28,/* 0xF0-0xF7 */ + 0x8FDB,0x9773,0x664B,0x7981,0x8FD1,0x70EC,0x6D78,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7D99,0x7D9A,0x7D9B,0x7D9C,0x7D9D,0x7D9E,0x7D9F,0xF93D,/* 0x40-0x47 */ + 0x7DA1,0x7DA2,0x7DA3,0x7DA4,0x7DA5,0x7DA7,0x7DA8,0x7DA9,/* 0x48-0x4F */ + 0x7DAA,0x7DAB,0x7DAC,0x7DAD,0x7DAF,0x7DB0,0x7DB1,0x7DB2,/* 0x50-0x57 */ + 0x7DB3,0x7DB4,0x7DB5,0x7DB6,0x7DB7,0x7DB8,0x7DB9,0x7DBA,/* 0x58-0x5F */ + 0x7DBB,0x7DBC,0x7DBD,0xF957,0x7DBF,0x7DC0,0x7DC1,0x7DC2,/* 0x60-0x67 */ + 0x7DC3,0x7DC4,0x7DC5,0x7DC6,0x7DC7,0x7DC8,0x7DC9,0x7DCA,/* 0x68-0x6F */ + 0x7DCB,0x7DCC,0x7DCD,0x7DCE,0x7DCF,0x7DD0,0x7DD1,0x7DD2,/* 0x70-0x77 */ + 0x7DD3,0x7DD4,0x7DD5,0x7DD6,0x7DD7,0x7DD8,0x7DD9,0x0000,/* 0x78-0x7F */ + + 0x7DDA,0x7DDB,0x7DDC,0x7DDD,0x7DDE,0x7DDF,0x7DE0,0x7DE1,/* 0x80-0x87 */ + 0x7DE2,0x7DE3,0x7DE4,0x7DE5,0x7DE6,0x7DE7,0x7DE8,0x7DE9,/* 0x88-0x8F */ + 0x7DEA,0x7DEB,0x7DEC,0x7DED,0x7DEE,0x7DEF,0x7DF0,0x7DF1,/* 0x90-0x97 */ + 0x7DF2,0x7DF3,0xF996,0x7DF5,0x7DF6,0x7DF7,0x7DF8,0x7DF9,/* 0x98-0x9F */ + 0x7DFA,0x5C3D,0x52B2,0x8346,0x5162,0x830E,0x775B,0x6676,/* 0xA0-0xA7 */ + 0x9CB8,0x4EAC,0x60CA,0xFA1D,0x7CB3,0x7ECF,0x4E95,0x8B66,/* 0xA8-0xAF */ + 0x666F,0x9888,0x9759,0x5883,0x656C,0x955C,0x5F84,0x75C9,/* 0xB0-0xB7 */ + 0xFA1C,0x7ADF,0x7ADE,0x51C0,0x70AF,0x7A98,0x63EA,0x7A76,/* 0xB8-0xBF */ + 0x7EA0,0x7396,0x97ED,0x4E45,0x7078,0x4E5D,0x9152,0x53A9,/* 0xC0-0xC7 */ + 0x6551,0x65E7,0x81FC,0x8205,0x548E,0x5C31,0x759A,0x97A0,/* 0xC8-0xCF */ + 0x62D8,0x72D9,0x75BD,0x5C45,0x9A79,0x83CA,0x5C40,0x5480,/* 0xD0-0xD7 */ + 0x77E9,0x4E3E,0x6CAE,0x805A,0x62D2,0x636E,0x5DE8,0x5177,/* 0xD8-0xDF */ + 0x8DDD,0x8E1E,0x952F,0x4FF1,0xF906,0x60E7,0x70AC,0x5267,/* 0xE0-0xE7 */ + 0x6350,0x9E43,0x5A1F,0x5026,0x7737,0x5377,0x7EE2,0x6485,/* 0xE8-0xEF */ + 0x652B,0x6289,0x6398,0x5014,0x7235,0x89C9,0x51B3,0x8BC0,/* 0xF0-0xF7 */ + 0x7EDD,0x5747,0x83CC,0x94A7,0x519B,0x541B,0x5CFB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7DFB,0x7DFC,0x7DFD,0x7DFE,0x7DFF,0x7E00,0x7E01,0x7E02,/* 0x40-0x47 */ + 0x7E03,0x7E04,0x7E05,0x7E06,0x7E07,0x7E08,0x7E09,0x7E0A,/* 0x48-0x4F */ + 0x7E0B,0x7E0C,0x7E0D,0x7E0E,0x7E0F,0x7E10,0x7E11,0x7E12,/* 0x50-0x57 */ + 0x7E13,0x7E14,0x7E15,0x7E16,0x7E17,0x7E18,0x7E19,0x7E1A,/* 0x58-0x5F */ + 0x7E1B,0x7E1C,0x7E1D,0x7E1E,0x7E1F,0x7E20,0x7E21,0x7E22,/* 0x60-0x67 */ + 0x7E23,0x7E24,0x7E25,0x7E26,0x7E27,0x7E28,0x7E29,0x7E2A,/* 0x68-0x6F */ + 0x7E2B,0x7E2C,0x7E2D,0x7E2E,0x7E2F,0x7E30,0x7E31,0x7E32,/* 0x70-0x77 */ + 0x7E33,0x7E34,0x7E35,0x7E36,0xF950,0x7E38,0x7E39,0x0000,/* 0x78-0x7F */ + + 0x7E3A,0x7E3C,0x7E3D,0x7E3E,0x7E3F,0x7E40,0x7E42,0x7E43,/* 0x80-0x87 */ + 0x7E44,0x7E45,0x7E46,0x7E48,0x7E49,0x7E4A,0x7E4B,0x7E4C,/* 0x88-0x8F */ + 0x7E4D,0x7E4E,0x7E4F,0x7E50,0x7E51,0x7E52,0x7E53,0x7E54,/* 0x90-0x97 */ + 0x7E55,0x7E56,0x7E57,0x7E58,0x7E59,0x7E5A,0x7E5B,0x7E5C,/* 0x98-0x9F */ + 0x7E5D,0x4FCA,0x7AE3,0x6D5A,0x90E1,0x9A8F,0x5580,0x5496,/* 0xA0-0xA7 */ + 0x5361,0x54AF,0x5F00,0x63E9,0x6977,0x51EF,0x6168,0x520A,/* 0xA8-0xAF */ + 0x582A,0x52D8,0x574E,0x780D,0x770B,0x5EB7,0x6177,0x7CE0,/* 0xB0-0xB7 */ + 0x625B,0x6297,0x4EA2,0x7095,0x8003,0x62F7,0x70E4,0x9760,/* 0xB8-0xBF */ + 0x5777,0x82DB,0x67EF,0x68F5,0x78D5,0x9897,0x79D1,0x58F3,/* 0xC0-0xC7 */ + 0x54B3,0x53EF,0x6E34,0x514B,0x523B,0x5BA2,0x8BFE,0x80AF,/* 0xC8-0xCF */ + 0x5543,0x57A6,0x6073,0x5751,0x542D,0x7A7A,0x6050,0x5B54,/* 0xD0-0xD7 */ + 0x63A7,0x62A0,0x53E3,0x6263,0x5BC7,0x67AF,0x54ED,0x7A9F,/* 0xD8-0xDF */ + 0x82E6,0x9177,0x5E93,0x88E4,0x5938,0x57AE,0x630E,0x8DE8,/* 0xE0-0xE7 */ + 0x80EF,0x5757,0x7B77,0x4FA9,0x5FEB,0x5BBD,0x6B3E,0x5321,/* 0xE8-0xEF */ + 0x7B50,0x72C2,0x6846,0x77FF,0x7736,0x65F7,0x51B5,0x4E8F,/* 0xF0-0xF7 */ + 0x76D4,0x5CBF,0x7AA5,0x8475,0x594E,0x9B41,0x5080,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7E5E,0x7E5F,0x7E60,0x7E61,0x7E62,0x7E63,0x7E64,0x7E65,/* 0x40-0x47 */ + 0x7E66,0x7E67,0x7E68,0x7E69,0x7E6A,0x7E6B,0x7E6C,0x7E6D,/* 0x48-0x4F */ + 0x7E6E,0x7E6F,0x7E70,0x7E71,0x7E72,0x7E73,0x7E74,0x7E75,/* 0x50-0x57 */ + 0x7E76,0x7E77,0x7E78,0x7E79,0x7E7A,0x7E7B,0x7E7C,0x7E7D,/* 0x58-0x5F */ + 0x7E7E,0x7E7F,0x7E80,0x7E81,0x7E83,0x7E84,0x7E85,0x7E86,/* 0x60-0x67 */ + 0x7E87,0x7E88,0x7E89,0x7E8A,0x7E8B,0x7E8C,0x7E8D,0x7E8E,/* 0x68-0x6F */ + 0x7E8F,0x7E90,0x7E91,0x7E92,0x7E93,0x7E94,0x7E95,0x7E96,/* 0x70-0x77 */ + 0x7E97,0x7E98,0x7E99,0x7E9A,0x7E9C,0x7E9D,0x7E9E,0x0000,/* 0x78-0x7F */ + + 0x7EAE,0x7EB4,0x7EBB,0x7EBC,0x7ED6,0x7EE4,0x7EEC,0x7EF9,/* 0x80-0x87 */ + 0x7F0A,0x7F10,0x7F1E,0x7F37,0x7F39,0x7F3B,0x7F3C,0x7F3D,/* 0x88-0x8F */ + 0x7F3E,0x7F3F,0x7F40,0x7F41,0x7F43,0x7F46,0x7F47,0x7F48,/* 0x90-0x97 */ + 0x7F49,0x7F4A,0x7F4B,0x7F4C,0x7F4D,0x7F4E,0x7F4F,0x7F52,/* 0x98-0x9F */ + 0x7F53,0x9988,0x6127,0x6E83,0x5764,0x6606,0x6346,0x56F0,/* 0xA0-0xA7 */ + 0x62EC,0x6269,0xFA0B,0x9614,0x5783,0xF925,0xF90B,0x8721,/* 0xA8-0xAF */ + 0x814A,0x8FA3,0x5566,0x83B1,0x6765,0x8D56,0x84DD,0x5A6A,/* 0xB0-0xB7 */ + 0x680F,0x62E6,0x7BEE,0x9611,0x5170,0x6F9C,0x8C30,0x63FD,/* 0xB8-0xBF */ + 0x89C8,0x61D2,0x7F06,0x70C2,0x6EE5,0x7405,0x6994,0xF92B,/* 0xC0-0xC7 */ + 0xF928,0x90CE,0xF929,0xF92A,0x635E,0x52B3,0xF946,0xF934,/* 0xC8-0xCF */ + 0x4F6C,0x59E5,0xF919,0xF916,0x6D9D,0xF952,0x4E50,0xF949,/* 0xD0-0xD7 */ + 0x956D,0x857E,0xF947,0xF94F,0x5121,0x5792,0x64C2,0xF953,/* 0xD8-0xDF */ + 0x7C7B,0x6CEA,0x68F1,0x695E,0xF92E,0x5398,0xF9E2,0x7281,/* 0xE0-0xE7 */ + 0xF989,0x7BF1,0x72F8,0x79BB,0x6F13,0xF9E4,0xF9E1,0xF9E9,/* 0xE8-0xEF */ + 0x9CA4,0x793C,0x8389,0x8354,0xF9DE,0xF9DA,0x4E3D,0x5389,/* 0xF0-0xF7 */ + 0x52B1,0x783E,0x5386,0xF9DD,0x5088,0xF9B5,0x4FD0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7F56,0x7F59,0x7F5B,0x7F5C,0x7F5D,0x7F5E,0x7F60,0x7F63,/* 0x40-0x47 */ + 0x7F64,0x7F65,0x7F66,0x7F67,0x7F6B,0x7F6C,0x7F6D,0x7F6F,/* 0x48-0x4F */ + 0x7F70,0x7F73,0x7F75,0x7F76,0x7F77,0x7F78,0x7F7A,0x7F7B,/* 0x50-0x57 */ + 0x7F7C,0x7F7D,0x7F7F,0x7F80,0x7F82,0x7F83,0x7F84,0xF90F,/* 0x58-0x5F */ + 0x7F86,0x7F87,0x7F88,0x7F89,0x7F8B,0x7F8D,0x7F8F,0x7F90,/* 0x60-0x67 */ + 0x7F91,0x7F92,0x7F93,0x7F95,0x7F96,0x7F97,0x7F98,0x7F99,/* 0x68-0x6F */ + 0x7F9B,0x7F9C,0x7FA0,0x7FA2,0x7FA3,0x7FA5,0x7FA6,0x7FA8,/* 0x70-0x77 */ + 0x7FA9,0x7FAA,0x7FAB,0x7FAC,0x7FAD,0x7FAE,0x7FB1,0x0000,/* 0x78-0x7F */ + + 0x7FB3,0x7FB4,0x7FB5,0x7FB6,0x7FB7,0x7FBA,0x7FBB,0x7FBE,/* 0x80-0x87 */ + 0x7FC0,0x7FC2,0x7FC3,0x7FC4,0x7FC6,0x7FC7,0x7FC8,0x7FC9,/* 0x88-0x8F */ + 0x7FCB,0x7FCD,0x7FCF,0x7FD0,0x7FD1,0x7FD2,0x7FD3,0x7FD6,/* 0x90-0x97 */ + 0x7FD7,0x7FD9,0x7FDA,0x7FDB,0x7FDC,0x7FDD,0x7FDE,0x7FE2,/* 0x98-0x9F */ + 0x7FE3,0xF9E5,0xF9F7,0xF9F9,0x6CA5,0x96B6,0xF98A,0x7483,/* 0xA0-0xA7 */ + 0x54E9,0x4FE9,0x8054,0x83B2,0x8FDE,0x9570,0xF9A2,0xF9AC,/* 0xA8-0xAF */ + 0x6D9F,0x5E18,0x655B,0x8138,0x94FE,0x604B,0x70BC,0x7EC3,/* 0xB0-0xB7 */ + 0x7CAE,0x51C9,0xF97A,0x7CB1,0xF97C,0x4E24,0x8F86,0xF97E,/* 0xB8-0xBF */ + 0x667E,0xF977,0x8C05,0x64A9,0x804A,0xF9BB,0x7597,0xF9C0,/* 0xC0-0xC7 */ + 0x5BE5,0x8FBD,0x6F66,0xF9BA,0x6482,0x9563,0x5ED6,0xF9BE,/* 0xC8-0xCF */ + 0xF99C,0xF9A0,0xF99F,0xF99D,0x730E,0x7433,0xF9F4,0x78F7,/* 0xD0-0xD7 */ + 0x9716,0x4E34,0x90BB,0x9CDE,0xF9F5,0x51DB,0x8D41,0xF9ED,/* 0xD8-0xDF */ + 0x62CE,0xF9AD,0xF958,0xF9B2,0x9F84,0x94C3,0x4F36,0xF9AF,/* 0xE0-0xE7 */ + 0xF955,0x7075,0xF959,0x5CAD,0x9886,0x53E6,0xF9A8,0xF9CB,/* 0xE8-0xEF */ + 0xF9CC,0x69B4,0xF9CE,0x998F,0xF9CD,0x5218,0x7624,0xF9CA,/* 0xF0-0xF7 */ + 0xF9C9,0xF9D1,0x9F99,0x804B,0x5499,0x7B3C,0x7ABF,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7FE4,0x7FE7,0x7FE8,0x7FEA,0x7FEB,0x7FEC,0x7FED,0x7FEF,/* 0x40-0x47 */ + 0x7FF2,0x7FF4,0x7FF5,0x7FF6,0x7FF7,0x7FF8,0x7FF9,0x7FFA,/* 0x48-0x4F */ + 0x7FFD,0x7FFE,0x7FFF,0x8002,0x8007,0x8008,0x8009,0x800A,/* 0x50-0x57 */ + 0x800E,0x800F,0x8011,0x8013,0x801A,0x801B,0x801D,0x801E,/* 0x58-0x5F */ + 0x801F,0x8021,0x8023,0x8024,0x802B,0x802C,0x802D,0x802E,/* 0x60-0x67 */ + 0x802F,0x8030,0x8032,0x8034,0x8039,0x803A,0x803C,0x803E,/* 0x68-0x6F */ + 0x8040,0x8041,0x8044,0x8045,0x8047,0x8048,0x8049,0x804E,/* 0x70-0x77 */ + 0x804F,0x8050,0x8051,0x8053,0x8055,0x8056,0x8057,0x0000,/* 0x78-0x7F */ + + 0x8059,0x805B,0x805C,0x805D,0x805E,0x805F,0x8060,0x8061,/* 0x80-0x87 */ + 0x8062,0x8063,0x8064,0x8065,0x8066,0x8067,0x8068,0x806B,/* 0x88-0x8F */ + 0x806C,0x806D,0x806E,0xF997,0x8070,0x8072,0x8073,0x8074,/* 0x90-0x97 */ + 0x8075,0x8076,0x8077,0x8078,0x8079,0x807A,0x807B,0x807C,/* 0x98-0x9F */ + 0x807D,0xF9DC,0x5784,0x62E2,0x9647,0x697C,0x5A04,0x6402,/* 0xA0-0xA7 */ + 0x7BD3,0xF94E,0xF951,0x82A6,0x5362,0x9885,0x5E90,0x7089,/* 0xA8-0xAF */ + 0x63B3,0x5364,0x864F,0x9C81,0x9E93,0xF93B,0xF938,0xF937,/* 0xB0-0xB7 */ + 0x8D42,0xF940,0x6F5E,0x7984,0x5F55,0x9646,0xF9D2,0x9A74,/* 0xB8-0xBF */ + 0x5415,0x94DD,0x4FA3,0xF983,0xF9DF,0x5C61,0x7F15,0x8651,/* 0xC0-0xC7 */ + 0x6C2F,0xF9D8,0xF9DB,0x6EE4,0x7EFF,0x5CE6,0x631B,0x5B6A,/* 0xC8-0xCF */ + 0x6EE6,0xF91C,0x4E71,0xF975,0xF976,0x62A1,0x8F6E,0x4F26,/* 0xD0-0xD7 */ + 0x4ED1,0x6CA6,0x7EB6,0x8BBA,0x841D,0xF911,0x7F57,0x903B,/* 0xD8-0xDF */ + 0x9523,0x7BA9,0x9AA1,0xF912,0xF918,0xF915,0x9A86,0x7EDC,/* 0xE0-0xE7 */ + 0x5988,0x9EBB,0x739B,0x7801,0x8682,0x9A6C,0x9A82,0x561B,/* 0xE8-0xEF */ + 0x5417,0x57CB,0x4E70,0x9EA6,0x5356,0x8FC8,0x8109,0x7792,/* 0xF0-0xF7 */ + 0x9992,0x86EE,0x6EE1,0x8513,0x66FC,0x6162,0x6F2B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0xF945,0x8081,0x8082,0x8085,0x8088,0x808A,0x808D,0x808E,/* 0x40-0x47 */ + 0x808F,0x8090,0x8091,0x8092,0x8094,0x8095,0x8097,0x8099,/* 0x48-0x4F */ + 0x809E,0x80A3,0x80A6,0x80A7,0x80A8,0x80AC,0x80B0,0x80B3,/* 0x50-0x57 */ + 0x80B5,0x80B6,0x80B8,0x80B9,0x80BB,0x80C5,0x80C7,0x80C8,/* 0x58-0x5F */ + 0x80C9,0x80CA,0x80CB,0x80CF,0x80D0,0x80D1,0x80D2,0x80D3,/* 0x60-0x67 */ + 0x80D4,0x80D5,0x80D8,0x80DF,0x80E0,0x80E2,0x80E3,0x80E6,/* 0x68-0x6F */ + 0x80EE,0x80F5,0x80F7,0x80F9,0x80FB,0x80FE,0x80FF,0x8100,/* 0x70-0x77 */ + 0x8101,0x8103,0x8104,0x8105,0x8107,0x8108,0x810B,0x0000,/* 0x78-0x7F */ + + 0x810C,0x8115,0x8117,0x8119,0x811B,0x811C,0x811D,0x811F,/* 0x80-0x87 */ + 0x8120,0x8121,0x8122,0x8123,0x8124,0x8125,0x8126,0x8127,/* 0x88-0x8F */ + 0x8128,0x8129,0x812A,0x812B,0x812D,0x812E,0x8130,0x8133,/* 0x90-0x97 */ + 0x8134,0x8135,0x8137,0x8139,0x813A,0x813B,0x813C,0x813D,/* 0x98-0x9F */ + 0x813F,0x8C29,0x8292,0x832B,0x76F2,0x6C13,0x5FD9,0x83BD,/* 0xA0-0xA7 */ + 0x732B,0x8305,0x951A,0x6BDB,0x77DB,0x94C6,0x536F,0x8302,/* 0xA8-0xAF */ + 0x5192,0x5E3D,0x8C8C,0x8D38,0x4E48,0x73AB,0x679A,0x6885,/* 0xB0-0xB7 */ + 0x9176,0x9709,0x7164,0x6CA1,0x7709,0x5A92,0x9541,0x6BCF,/* 0xB8-0xBF */ + 0x7F8E,0x6627,0x5BD0,0x59B9,0x5A9A,0x95E8,0x95F7,0x4EEC,/* 0xC0-0xC7 */ + 0x840C,0x8499,0x6AAC,0x76DF,0x9530,0x731B,0x68A6,0x5B5F,/* 0xC8-0xCF */ + 0x772F,0x919A,0x9761,0x7CDC,0x8FF7,0x8C1C,0x5F25,0x7C73,/* 0xD0-0xD7 */ + 0x79D8,0x89C5,0xF968,0x871C,0x5BC6,0x5E42,0x68C9,0x7720,/* 0xD8-0xDF */ + 0x7EF5,0x5195,0x514D,0x52C9,0x5A29,0x7F05,0x9762,0x82D7,/* 0xE0-0xE7 */ + 0x63CF,0x7784,0x85D0,0x79D2,0x6E3A,0x5E99,0x5999,0x8511,/* 0xE8-0xEF */ + 0x706D,0x6C11,0x62BF,0x76BF,0x654F,0x60AF,0x95FD,0x660E,/* 0xF0-0xF7 */ + 0x879F,0x9E23,0x94ED,0x540D,0x547D,0x8C2C,0x6478,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8140,0x8141,0x8142,0x8143,0x8144,0x8145,0x8147,0x8149,/* 0x40-0x47 */ + 0x814D,0x814E,0x814F,0x8152,0x8156,0x8157,0x8158,0x815B,/* 0x48-0x4F */ + 0x815C,0x815D,0x815E,0x815F,0x8161,0x8162,0x8163,0x8164,/* 0x50-0x57 */ + 0x8166,0x8168,0x816A,0x816B,0x816C,0x816F,0x8172,0x8173,/* 0x58-0x5F */ + 0x8175,0x8176,0x8177,0x8178,0x8181,0x8183,0x8184,0x8185,/* 0x60-0x67 */ + 0x8186,0x8187,0x8189,0x818B,0x818C,0x818D,0x818E,0x8190,/* 0x68-0x6F */ + 0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8199,0x819A,/* 0x70-0x77 */ + 0x819E,0x819F,0x81A0,0x81A1,0x81A2,0x81A4,0x81A5,0x0000,/* 0x78-0x7F */ + + 0x81A7,0x81A9,0x81AB,0x81AC,0x81AD,0x81AE,0x81AF,0x81B0,/* 0x80-0x87 */ + 0x81B1,0x81B2,0x81B4,0x81B5,0x81B6,0x81B7,0x81B8,0x81B9,/* 0x88-0x8F */ + 0x81BC,0x81BD,0x81BE,0x81BF,0x81C4,0x81C5,0x81C7,0x81C8,/* 0x90-0x97 */ + 0x81C9,0x81CB,0x81CD,0x81CE,0x81CF,0x81D0,0x81D1,0x81D2,/* 0x98-0x9F */ + 0x81D3,0x6479,0x8611,0x6A21,0x819C,0x78E8,0x6469,0x9B54,/* 0xA0-0xA7 */ + 0x62B9,0x672B,0x83AB,0x58A8,0x9ED8,0x6CAB,0x6F20,0x5BDE,/* 0xA8-0xAF */ + 0x964C,0x8C0B,0x725F,0x67D0,0x62C7,0x7261,0x4EA9,0x59C6,/* 0xB0-0xB7 */ + 0x6BCD,0x5893,0x66AE,0x5E55,0x52DF,0x6155,0x6728,0x76EE,/* 0xB8-0xBF */ + 0x7766,0x7267,0x7A46,0x62FF,0x54EA,0x5450,0x94A0,0x90A3,/* 0xC0-0xC7 */ + 0x5A1C,0x7EB3,0x6C16,0x4E43,0x5976,0x8010,0xF90C,0x5357,/* 0xC8-0xCF */ + 0x7537,0x96BE,0x56CA,0x6320,0x8111,0x607C,0x95F9,0x6DD6,/* 0xD0-0xD7 */ + 0x5462,0x9981,0x5185,0x5AE9,0x80FD,0x59AE,0x9713,0x502A,/* 0xD8-0xDF */ + 0xF9E3,0x5C3C,0x62DF,0x4F60,0xF9EB,0x817B,0x9006,0xF9EC,/* 0xE0-0xE7 */ + 0x852B,0x62C8,0xF98E,0x78BE,0x64B5,0xF9A4,0xF9A3,0x5A18,/* 0xE8-0xEF */ + 0x917F,0x9E1F,0xF9BD,0x634F,0x8042,0x5B7D,0x556E,0x954A,/* 0xF0-0xF7 */ + 0x954D,0x6D85,0x60A8,0x67E0,0x72DE,0x51DD,0x5B81,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x81D4,0x81D5,0x81D6,0x81D7,0xF926,0x81D9,0x81DA,0x81DB,/* 0x40-0x47 */ + 0x81DC,0x81DD,0x81DE,0x81DF,0x81E0,0x81E1,0x81E2,0x81E4,/* 0x48-0x4F */ + 0x81E5,0x81E6,0xF9F6,0x81E9,0x81EB,0x81EE,0x81EF,0x81F0,/* 0x50-0x57 */ + 0x81F1,0x81F2,0x81F5,0x81F6,0x81F7,0x81F8,0x81F9,0x81FA,/* 0x58-0x5F */ + 0x81FD,0x81FF,0x8203,0x8207,0x8208,0x8209,0x820A,0x820B,/* 0x60-0x67 */ + 0x820E,0x820F,0x8211,0x8213,0x8215,0x8216,0x8217,0x8218,/* 0x68-0x6F */ + 0x8219,0x821A,0x821D,0x8220,0x8224,0x8225,0x8226,0x8227,/* 0x70-0x77 */ + 0x8229,0x822E,0x8232,0x823A,0x823C,0x823D,0x823F,0x0000,/* 0x78-0x7F */ + + 0x8240,0x8241,0x8242,0x8243,0x8245,0x8246,0x8248,0x824A,/* 0x80-0x87 */ + 0x824C,0x824D,0x824E,0x8250,0x8251,0x8252,0x8253,0x8254,/* 0x88-0x8F */ + 0x8255,0x8256,0x8257,0x8259,0x825B,0x825C,0x825D,0x825E,/* 0x90-0x97 */ + 0x8260,0x8261,0x8262,0x8263,0x8264,0x8265,0x8266,0x8267,/* 0x98-0x9F */ + 0x8269,0x62E7,0x6CDE,0x725B,0x626D,0x94AE,0x7EBD,0x8113,/* 0xA0-0xA7 */ + 0x6D53,0x519C,0xF943,0x5974,0x52AA,0xF960,0xF981,0x6696,/* 0xA8-0xAF */ + 0x8650,0x759F,0x632A,0x61E6,0x7CEF,0x8BFA,0x54E6,0x6B27,/* 0xB0-0xB7 */ + 0x9E25,0x6BB4,0x85D5,0x5455,0x5076,0x6CA4,0x556A,0x8DB4,/* 0xB8-0xBF */ + 0x722C,0x5E15,0x6015,0x7436,0x62CD,0x6392,0x724C,0x5F98,/* 0xC0-0xC7 */ + 0x6E43,0x6D3E,0x6500,0x6F58,0x76D8,0x78D0,0x76FC,0x7554,/* 0xC8-0xCF */ + 0x5224,0x53DB,0x4E53,0x5E9E,0x65C1,0x802A,0x80D6,0x629B,/* 0xD0-0xD7 */ + 0x5486,0x5228,0x70AE,0x888D,0x8DD1,0x6CE1,0x5478,0x80DA,/* 0xD8-0xDF */ + 0x57F9,0x88F4,0x8D54,0x966A,0x914D,0x4F69,0x6C9B,0x55B7,/* 0xE0-0xE7 */ + 0x76C6,0x7830,0x62A8,0x70F9,0x6F8E,0x5F6D,0x84EC,0x68DA,/* 0xE8-0xEF */ + 0x787C,0x7BF7,0x81A8,0x670B,0x9E4F,0x6367,0x78B0,0x576F,/* 0xF0-0xF7 */ + 0x7812,0x9739,0x6279,0x62AB,0x5288,0x7435,0x6BD7,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x826A,0x826B,0x826C,0x826D,0x8271,0x8275,0x8276,0x8277,/* 0x40-0x47 */ + 0x8278,0x827B,0x827C,0x8280,0x8281,0x8283,0x8285,0x8286,/* 0x48-0x4F */ + 0x8287,0x8289,0x828C,0x8290,0x8293,0x8294,0x8295,0x8296,/* 0x50-0x57 */ + 0x829A,0x829B,0x829E,0x82A0,0x82A2,0x82A3,0x82A7,0x82B2,/* 0x58-0x5F */ + 0x82B5,0x82B6,0x82BA,0x82BB,0x82BC,0x82BF,0x82C0,0x82C2,/* 0x60-0x67 */ + 0x82C3,0x82C5,0x82C6,0x82C9,0x82D0,0x82D6,0x82D9,0x82DA,/* 0x68-0x6F */ + 0x82DD,0x82E2,0x82E7,0x82E8,0x82E9,0x82EA,0x82EC,0x82ED,/* 0x70-0x77 */ + 0x82EE,0x82F0,0x82F2,0x82F3,0x82F5,0x82F6,0x82F8,0x0000,/* 0x78-0x7F */ + + 0x82FA,0x82FC,0x82FD,0x82FE,0x82FF,0x8300,0x830A,0x830B,/* 0x80-0x87 */ + 0x830D,0x8310,0x8312,0x8313,0x8316,0x8318,0x8319,0x831D,/* 0x88-0x8F */ + 0x831E,0x831F,0x8320,0x8321,0x8322,0x8323,0x8324,0x8325,/* 0x90-0x97 */ + 0x8326,0x8329,0x832A,0x832E,0x8330,0x8332,0x8337,0x833B,/* 0x98-0x9F */ + 0x833D,0x5564,0x813E,0x75B2,0x76AE,0x5339,0x75DE,0x50FB,/* 0xA0-0xA7 */ + 0x5C41,0x8B6C,0x7BC7,0x504F,0x7247,0x9A97,0x98D8,0x6F02,/* 0xA8-0xAF */ + 0x74E2,0x7968,0x6487,0x77A5,0x62FC,0x9891,0x8D2B,0x54C1,/* 0xB0-0xB7 */ + 0x8058,0x4E52,0x576A,0x82F9,0x840D,0x5E73,0x51ED,0x74F6,/* 0xB8-0xBF */ + 0x8BC4,0x5C4F,0x5761,0x6CFC,0x9887,0x5A46,0x7834,0x9B44,/* 0xC0-0xC7 */ + 0x8FEB,0x7C95,0x5256,0x6251,0x94FA,0x4EC6,0x8386,0x8461,/* 0xC8-0xCF */ + 0x83E9,0x84B2,0x57D4,0x6734,0x5703,0x666E,0x6D66,0x8C31,/* 0xD0-0xD7 */ + 0x66DD,0x7011,0x671F,0x6B3A,0x6816,0x621A,0x59BB,0x4E03,/* 0xD8-0xDF */ + 0x51C4,0x6F06,0x67D2,0x6C8F,0x5176,0x68CB,0x5947,0x6B67,/* 0xE0-0xE7 */ + 0x7566,0x5D0E,0x8110,0x9F50,0x65D7,0x7948,0x7941,0x9A91,/* 0xE8-0xEF */ + 0x8D77,0x5C82,0x4E5E,0x4F01,0x542F,0xF909,0x780C,0x5668,/* 0xF0-0xF7 */ + 0x6C14,0x8FC4,0x5F03,0x6C7D,0x6CE3,0x8BAB,0x6390,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x833E,0x833F,0x8341,0x8342,0x8344,0x8345,0x8348,0x834A,/* 0x40-0x47 */ + 0x834B,0x834C,0x834D,0x834E,0x8353,0x8355,0x8356,0x8357,/* 0x48-0x4F */ + 0x8358,0x8359,0x835D,0x8362,0x8370,0x8371,0x8372,0x8373,/* 0x50-0x57 */ + 0x8374,0x8375,0x8376,0x8379,0x837A,0x837E,0x837F,0x8380,/* 0x58-0x5F */ + 0x8381,0x8382,0x8383,0x8384,0x8387,0x8388,0x838A,0x838B,/* 0x60-0x67 */ + 0x838C,0x838D,0x838F,0x8390,0x8391,0x8394,0x8395,0x8396,/* 0x68-0x6F */ + 0x8397,0x8399,0x839A,0x839D,0x839F,0x83A1,0x83A2,0x83A3,/* 0x70-0x77 */ + 0x83A4,0x83A5,0x83A6,0x83A7,0x83AC,0x83AD,0x83AE,0x0000,/* 0x78-0x7F */ + + 0x83AF,0x83B5,0x83BB,0x83BE,0x83BF,0x83C2,0x83C3,0x83C4,/* 0x80-0x87 */ + 0x83C6,0x83C8,0xF93E,0x83CB,0x83CD,0x83CE,0x83D0,0x83D1,/* 0x88-0x8F */ + 0x83D2,0x83D3,0x83D5,0x83D7,0x83D9,0x83DA,0x83DB,0x83DE,/* 0x90-0x97 */ + 0x83E2,0x83E3,0x83E4,0x83E6,0x83E7,0x83E8,0x83EB,0x83EC,/* 0x98-0x9F */ + 0x83ED,0x6070,0x6D3D,0x7275,0x6266,0x948E,0x94C5,0x5343,/* 0xA0-0xA7 */ + 0x8FC1,0x7B7E,0x4EDF,0x8C26,0x4E7E,0x9ED4,0x94B1,0x94B3,/* 0xA8-0xAF */ + 0x524D,0x6F5C,0x9063,0x6D45,0x8C34,0x5811,0x5D4C,0x6B20,/* 0xB0-0xB7 */ + 0x6B49,0x67AA,0x545B,0x8154,0x7F8C,0x5899,0x8537,0x5F3A,/* 0xB8-0xBF */ + 0x62A2,0x6A47,0x9539,0x6572,0x6084,0x6865,0x77A7,0x4E54,/* 0xC0-0xC7 */ + 0x4FA8,0x5DE7,0x9798,0x64AC,0x7FD8,0x5CED,0x4FCF,0x7A8D,/* 0xC8-0xCF */ + 0xFA00,0x8304,0x4E14,0x602F,0x7A83,0x94A6,0x4FB5,0x4EB2,/* 0xD0-0xD7 */ + 0x79E6,0x7434,0x52E4,0x82B9,0x64D2,0x79BD,0x5BDD,0x6C81,/* 0xD8-0xDF */ + 0x9752,0x8F7B,0x6C22,0x503E,0x537F,0x6E05,0x64CE,0xFA12,/* 0xE0-0xE7 */ + 0x6C30,0x60C5,0x9877,0x8BF7,0x5E86,0x743C,0x7A77,0x79CB,/* 0xE8-0xEF */ + 0x4E18,0x90B1,0x7403,0x6C42,0x56DA,0x914B,0x6CC5,0x8D8B,/* 0xF0-0xF7 */ + 0x533A,0x86C6,0x66F2,0x8EAF,0x5C48,0x9A71,0x6E20,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x83EE,0x83EF,0x83F3,0x83F4,0x83F5,0x83F6,0x83F7,0x83FA,/* 0x40-0x47 */ + 0x83FB,0x83FC,0x83FE,0x83FF,0x8400,0x8402,0x8405,0x8407,/* 0x48-0x4F */ + 0x8408,0x8409,0x840A,0x8410,0x8412,0x8413,0x8414,0x8415,/* 0x50-0x57 */ + 0x8416,0x8417,0x8419,0x841A,0x841B,0x841E,0x841F,0x8420,/* 0x58-0x5F */ + 0x8421,0x8422,0x8423,0x8429,0x842A,0x842B,0x842C,0x842D,/* 0x60-0x67 */ + 0x842E,0x842F,0x8430,0x8432,0x8433,0x8434,0x8435,0x8436,/* 0x68-0x6F */ + 0x8437,0x8439,0x843A,0x843B,0x843E,0x843F,0x8440,0x8441,/* 0x70-0x77 */ + 0x8442,0x8443,0x8444,0x8445,0x8447,0x8448,0xF96E,0x0000,/* 0x78-0x7F */ + + 0x844A,0x844B,0x844C,0x844D,0x844E,0x844F,0x8450,0x8452,/* 0x80-0x87 */ + 0x8453,0x8454,0x8455,0x8456,0x8458,0x845D,0x845E,0x845F,/* 0x88-0x8F */ + 0x8460,0x8462,0x8464,0x8465,0x8466,0x8467,0x8468,0x846A,/* 0x90-0x97 */ + 0x846E,0x846F,0x8470,0x8472,0x8474,0x8477,0x8479,0x847B,/* 0x98-0x9F */ + 0x847C,0x53D6,0x5A36,0x9F8B,0x8DA3,0x53BB,0x5708,0x98A7,/* 0xA0-0xA7 */ + 0x6743,0x919B,0x6CC9,0x5168,0x75CA,0x62F3,0x72AC,0x5238,/* 0xA8-0xAF */ + 0x529D,0x7F3A,0x7094,0x7638,0x5374,0x9E4A,0x69B7,0x786E,/* 0xB0-0xB7 */ + 0x96C0,0x88D9,0x7FA4,0x7136,0x71C3,0x5189,0x67D3,0x74E4,/* 0xB8-0xBF */ + 0x58E4,0x6518,0x56B7,0x8BA9,0x9976,0x6270,0x7ED5,0x60F9,/* 0xC0-0xC7 */ + 0x70ED,0x58EC,0x4EC1,0x4EBA,0x5FCD,0x97E7,0x4EFB,0x8BA4,/* 0xC8-0xCF */ + 0x5203,0x598A,0x7EAB,0x6254,0x4ECD,0x65E5,0x620E,0x8338,/* 0xD0-0xD7 */ + 0x84C9,0x8363,0x878D,0x7194,0x6EB6,0x5BB9,0x7ED2,0x5197,/* 0xD8-0xDF */ + 0x63C9,0x67D4,0x8089,0x8339,0x8815,0x5112,0x5B7A,0x5982,/* 0xE0-0xE7 */ + 0x8FB1,0x4E73,0x6C5D,0x5165,0x8925,0x8F6F,0xF9C6,0x854A,/* 0xE8-0xEF */ + 0x745E,0x9510,0x95F0,0x6DA6,0xF974,0x5F31,0x6492,0x6D12,/* 0xF0-0xF7 */ + 0x8428,0x816E,0x9CC3,0xF96C,0x8D5B,0x4E09,0x53C1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x847D,0x847E,0x847F,0x8480,0x8481,0x8483,0x8484,0x8485,/* 0x40-0x47 */ + 0x8486,0x848A,0x848D,0x848F,0x8490,0x8491,0x8492,0x8493,/* 0x48-0x4F */ + 0x8494,0x8495,0x8496,0x8498,0x849A,0x849B,0x849D,0x849E,/* 0x50-0x57 */ + 0x849F,0x84A0,0x84A2,0x84A3,0x84A4,0x84A5,0x84A6,0x84A7,/* 0x58-0x5F */ + 0x84A8,0x84A9,0x84AA,0x84AB,0x84AC,0x84AD,0x84AE,0x84B0,/* 0x60-0x67 */ + 0x84B1,0x84B3,0x84B5,0x84B6,0x84B7,0x84BB,0x84BC,0x84BE,/* 0x68-0x6F */ + 0x84C0,0x84C2,0x84C3,0x84C5,0x84C6,0x84C7,0x84C8,0x84CB,/* 0x70-0x77 */ + 0x84CC,0x84CE,0x84CF,0x84D2,0x84D4,0x84D5,0x84D7,0x0000,/* 0x78-0x7F */ + + 0x84D8,0x84D9,0x84DA,0x84DB,0x84DC,0x84DE,0x84E1,0x84E2,/* 0x80-0x87 */ + 0x84E4,0x84E7,0x84E8,0x84E9,0x84EA,0x84EB,0x84ED,0xF999,/* 0x88-0x8F */ + 0x84EF,0x84F1,0x84F2,0x84F3,0x84F4,0x84F5,0x84F6,0x84F7,/* 0x90-0x97 */ + 0x84F8,0x84F9,0x84FA,0x84FB,0x84FD,0x84FE,0x8500,0x8501,/* 0x98-0x9F */ + 0x8502,0x4F1E,0x6563,0x6851,0x55D3,0x4E27,0x6414,0x9A9A,/* 0xA0-0xA7 */ + 0x626B,0x5AC2,0x745F,0x8272,0x6DA9,0x68EE,0x50E7,0x838E,/* 0xA8-0xAF */ + 0x7802,0x6740,0x5239,0x6C99,0x7EB1,0x50BB,0x5565,0x715E,/* 0xB0-0xB7 */ + 0x7B5B,0x6652,0x73CA,0x82EB,0x6749,0x5C71,0x5220,0x717D,/* 0xB8-0xBF */ + 0x886B,0x95EA,0x9655,0x64C5,0x8D61,0x81B3,0x5584,0x6C55,/* 0xC0-0xC7 */ + 0x6247,0x7F2E,0x5892,0x4F24,0x5546,0x8D4F,0x664C,0x4E0A,/* 0xC8-0xCF */ + 0x5C1A,0x88F3,0x68A2,0x634E,0x7A0D,0x70E7,0x828D,0x52FA,/* 0xD0-0xD7 */ + 0x97F6,0x5C11,0x54E8,0x90B5,0x7ECD,0x5962,0x8D4A,0x86C7,/* 0xD8-0xDF */ + 0x820C,0x820D,0x8D66,0x6444,0x5C04,0x6151,0x6D89,0x793E,/* 0xE0-0xE7 */ + 0x8BBE,0x7837,0x7533,0x547B,0x4F38,0x8EAB,0x6DF1,0x5A20,/* 0xE8-0xEF */ + 0x7EC5,0xFA19,0xF972,0x5BA1,0x5A76,0x751A,0x80BE,0x614E,/* 0xF0-0xF7 */ + 0x6E17,0x58F0,0x751F,0x7525,0x7272,0x5347,0x7EF3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8503,0x8504,0x8505,0x8506,0x8507,0x8508,0x8509,0x850A,/* 0x40-0x47 */ + 0x850B,0x850D,0x850E,0x850F,0x8510,0x8512,0x8514,0x8515,/* 0x48-0x4F */ + 0x8516,0x8518,0x8519,0x851B,0x851C,0x851D,0x851E,0x8520,/* 0x50-0x57 */ + 0x8522,0x8523,0x8524,0x8525,0x8526,0x8527,0x8528,0x8529,/* 0x58-0x5F */ + 0x852A,0x852D,0x852E,0x852F,0x8530,0x8531,0x8532,0x8533,/* 0x60-0x67 */ + 0x8534,0x8535,0x8536,0x853E,0x853F,0x8540,0x8541,0x8542,/* 0x68-0x6F */ + 0x8544,0x8545,0x8546,0x8547,0x854B,0x854C,0x854D,0x854E,/* 0x70-0x77 */ + 0x854F,0x8550,0x8551,0x8552,0x8553,0x8554,0x8555,0x0000,/* 0x78-0x7F */ + + 0x8557,0x8558,0x855A,0x855B,0x855C,0x855D,0x855F,0x8560,/* 0x80-0x87 */ + 0x8561,0x8562,0x8563,0x8565,0x8566,0x8567,0x8569,0x856A,/* 0x88-0x8F */ + 0x856B,0x856C,0x856D,0x856E,0x856F,0x8570,0x8571,0x8573,/* 0x90-0x97 */ + 0x8575,0x8576,0x8577,0x8578,0x857C,0x857D,0x857F,0x8580,/* 0x98-0x9F */ + 0x8581,0xF96D,0x76DB,0x5269,0x80DC,0x5723,0x5E08,0x5931,/* 0xA0-0xA7 */ + 0x72EE,0x65BD,0x6E7F,0x8BD7,0x5C38,0x8671,0x5341,0x77F3,/* 0xA8-0xAF */ + 0xF973,0x65F6,0xF9FD,0x98DF,0x8680,0x5B9E,0x8BC6,0x53F2,/* 0xB0-0xB7 */ + 0x77E2,0x4F7F,0x5C4E,0x9A76,0x59CB,0x5F0F,0x793A,0x58EB,/* 0xB8-0xBF */ + 0x4E16,0x67FF,0x4E8B,0x62ED,0x8A93,0x901D,0x52BF,0x662F,/* 0xC0-0xC7 */ + 0x55DC,0x566C,0x9002,0x4ED5,0x4F8D,0x91CA,0x9970,0x6C0F,/* 0xC8-0xCF */ + 0x5E02,0x6043,0x5BA4,0x89C6,0x8BD5,0x6536,0x624B,0x9996,/* 0xD0-0xD7 */ + 0x5B88,0x5BFF,0x6388,0x552E,0x53D7,0x7626,0x517D,0x852C,/* 0xD8-0xDF */ + 0x67A2,0x68B3,0x6B8A,0x6292,0x8F93,0x53D4,0x8212,0x6DD1,/* 0xE0-0xE7 */ + 0x758F,0x4E66,0x8D4E,0x5B70,0x719F,0x85AF,0x6691,0x66D9,/* 0xE8-0xEF */ + 0x7F72,0x8700,0x9ECD,0x9F20,0x5C5E,0x672F,0x8FF0,0x6811,/* 0xF0-0xF7 */ + 0x675F,0x620D,0x7AD6,0x5885,0x5EB6,0x6570,0x6F31,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8582,0x8583,0x8586,0x8588,0x8589,0x858A,0x858B,0x858C,/* 0x40-0x47 */ + 0x858D,0x858E,0x8590,0x8591,0x8592,0x8593,0x8594,0x8595,/* 0x48-0x4F */ + 0x8596,0x8597,0x8598,0x8599,0x859A,0x859D,0x859E,0x859F,/* 0x50-0x57 */ + 0x85A0,0x85A1,0x85A2,0x85A3,0x85A5,0x85A6,0x85A7,0x85A9,/* 0x58-0x5F */ + 0x85AB,0x85AC,0x85AD,0x85B1,0x85B2,0x85B3,0x85B4,0x85B5,/* 0x60-0x67 */ + 0x85B6,0x85B8,0x85BA,0x85BB,0x85BC,0x85BD,0x85BE,0x85BF,/* 0x68-0x6F */ + 0x85C0,0x85C2,0x85C3,0x85C4,0x85C5,0x85C6,0x85C7,0x85C8,/* 0x70-0x77 */ + 0x85CA,0x85CB,0x85CC,0xF923,0x85CE,0x85D1,0x85D2,0x0000,/* 0x78-0x7F */ + + 0x85D4,0x85D6,0x85D7,0x85D8,0x85D9,0x85DA,0x85DB,0x85DD,/* 0x80-0x87 */ + 0x85DE,0x85DF,0x85E0,0x85E1,0x85E2,0x85E3,0x85E5,0x85E6,/* 0x88-0x8F */ + 0x85E7,0x85E8,0x85EA,0x85EB,0x85EC,0x85ED,0x85EE,0x85EF,/* 0x90-0x97 */ + 0x85F0,0x85F1,0x85F2,0x85F3,0x85F4,0x85F5,0x85F6,0x85F7,/* 0x98-0x9F */ + 0x85F8,0x6055,0x5237,0x800D,0x6454,0x8870,0x7529,0x5E05,/* 0xA0-0xA7 */ + 0x6813,0x62F4,0x971C,0x53CC,0x723D,0x8C01,0x6C34,0x7761,/* 0xA8-0xAF */ + 0x7A0E,0x542E,0x77AC,0x987A,0x821C,0x8BF4,0x7855,0x6714,/* 0xB0-0xB7 */ + 0x70C1,0x65AF,0x6495,0x5636,0x601D,0x79C1,0x53F8,0x4E1D,/* 0xB8-0xBF */ + 0x6B7B,0x8086,0x5BFA,0x55E3,0x56DB,0x4F3A,0x4F3C,0x9972,/* 0xC0-0xC7 */ + 0x5DF3,0x677E,0x8038,0x6002,0x9882,0x9001,0x5B8B,0x8BBC,/* 0xC8-0xCF */ + 0x8BF5,0x641C,0x8258,0x64DE,0x55FD,0x82CF,0x9165,0x4FD7,/* 0xD0-0xD7 */ + 0x7D20,0x901F,0x7C9F,0x50F3,0x5851,0x6EAF,0x5BBF,0x8BC9,/* 0xD8-0xDF */ + 0x8083,0x9178,0x849C,0x7B97,0x867D,0x968B,0x968F,0x7EE5,/* 0xE0-0xE7 */ + 0x9AD3,0x788E,0x5C81,0x7A57,0x9042,0x96A7,0x795F,0x5B59,/* 0xE8-0xEF */ + 0x635F,0x7B0B,0x84D1,0x68AD,0x5506,0x7F29,0x7410,0xF96A,/* 0xF0-0xF7 */ + 0x9501,0x6240,0x584C,0x4ED6,0x5B83,0x5979,0x5854,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x85F9,0xF9F0,0x85FC,0x85FD,0x85FE,0x8600,0x8601,0x8602,/* 0x40-0x47 */ + 0x8603,0x8604,0xF935,0x8607,0x8608,0x8609,0x860A,0x860B,/* 0x48-0x4F */ + 0x860C,0x860D,0x860E,0x860F,0x8610,0x8612,0x8613,0x8614,/* 0x50-0x57 */ + 0x8615,0x8617,0x8618,0x8619,0x861A,0x861B,0x861C,0x861D,/* 0x58-0x5F */ + 0x861E,0x861F,0x8620,0x8621,0x8622,0x8623,0x8624,0x8625,/* 0x60-0x67 */ + 0x8626,0x8628,0x862A,0x862B,0x862C,0xF91F,0x862E,0x862F,/* 0x68-0x6F */ + 0x8630,0x8631,0x8632,0x8633,0x8634,0x8635,0x8636,0x8637,/* 0x70-0x77 */ + 0x8639,0x863A,0x863B,0x863D,0x863E,0xF910,0x8640,0x0000,/* 0x78-0x7F */ + + 0x8641,0x8642,0x8643,0x8644,0x8645,0x8646,0x8647,0x8648,/* 0x80-0x87 */ + 0x8649,0x864A,0x864B,0x864C,0x8652,0x8653,0x8655,0x8656,/* 0x88-0x8F */ + 0x8657,0x8658,0x8659,0x865B,0xF936,0x865D,0x865F,0x8660,/* 0x90-0x97 */ + 0x8661,0x8663,0x8664,0x8665,0x8666,0x8667,0x8668,0x8669,/* 0x98-0x9F */ + 0x866A,0x736D,0x631E,0x8E4B,0x8E0F,0x80CE,0x82D4,0x62AC,/* 0xA0-0xA7 */ + 0x53F0,0x6CF0,0x915E,0x592A,0x6001,0x6C70,0x574D,0x644A,/* 0xA8-0xAF */ + 0x8D2A,0x762B,0x6EE9,0x575B,0x6A80,0x75F0,0x6F6D,0x8C2D,/* 0xB0-0xB7 */ + 0x8C08,0x5766,0x6BEF,0x8892,0x78B3,0x63A2,0x53F9,0x70AD,/* 0xB8-0xBF */ + 0x6C64,0x5858,0x642A,0x5802,0x68E0,0x819B,0x5510,0xFA03,/* 0xC0-0xC7 */ + 0x5018,0x8EBA,0x6DCC,0x8D9F,0x70EB,0x638F,0x6D9B,0x6ED4,/* 0xC8-0xCF */ + 0x7EE6,0x8404,0x6843,0x9003,0x6DD8,0x9676,0x8BA8,0x5957,/* 0xD0-0xD7 */ + 0x7279,0x85E4,0x817E,0x75BC,0x8A8A,0x68AF,0x5254,0x8E22,/* 0xD8-0xDF */ + 0x9511,0x63D0,0x9898,0x8E44,0x557C,0x4F53,0x66FF,0x568F,/* 0xE0-0xE7 */ + 0x60D5,0x6D95,0x5243,0x5C49,0x5929,0x6DFB,0x586B,0x7530,/* 0xE8-0xEF */ + 0x751C,0x606C,0x8214,0x8146,0x6311,0x6761,0x8FE2,0x773A,/* 0xF0-0xF7 */ + 0x8DF3,0x8D34,0x94C1,0x5E16,0x5385,0x542C,0x70C3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x866D,0x866F,0x8670,0x8672,0x8673,0x8674,0x8675,0x8676,/* 0x40-0x47 */ + 0x8677,0x8678,0x8683,0x8684,0x8685,0x8686,0x8687,0x8688,/* 0x48-0x4F */ + 0x8689,0x868E,0x868F,0x8690,0x8691,0x8692,0x8694,0x8696,/* 0x50-0x57 */ + 0x8697,0x8698,0x8699,0x869A,0x869B,0x869E,0x869F,0x86A0,/* 0x58-0x5F */ + 0x86A1,0x86A2,0x86A5,0x86A6,0x86AB,0x86AD,0x86AE,0x86B2,/* 0x60-0x67 */ + 0x86B3,0x86B7,0x86B8,0x86B9,0x86BB,0x86BC,0x86BD,0x86BE,/* 0x68-0x6F */ + 0x86BF,0x86C1,0x86C2,0x86C3,0x86C5,0x86C8,0x86CC,0x86CD,/* 0x70-0x77 */ + 0x86D2,0x86D3,0x86D5,0x86D6,0x86D7,0x86DA,0x86DC,0x0000,/* 0x78-0x7F */ + + 0x86DD,0x86E0,0x86E1,0x86E2,0x86E3,0x86E5,0x86E6,0x86E7,/* 0x80-0x87 */ + 0x86E8,0x86EA,0x86EB,0x86EC,0x86EF,0x86F5,0x86F6,0x86F7,/* 0x88-0x8F */ + 0x86FA,0x86FB,0x86FC,0x86FD,0x86FF,0x8701,0x8704,0x8705,/* 0x90-0x97 */ + 0x8706,0x870B,0x870C,0x870E,0x870F,0x8710,0x8711,0x8714,/* 0x98-0x9F */ + 0x8716,0x6C40,0x5EF7,0x505C,0x4EAD,0x5EAD,0x633A,0x8247,/* 0xA0-0xA7 */ + 0x901A,0x6850,0x916E,0x77B3,0x540C,0x94DC,0x5F64,0x7AE5,/* 0xA8-0xAF */ + 0x6876,0x6345,0x7B52,0x7EDF,0x75DB,0x5077,0x6295,0x5934,/* 0xB0-0xB7 */ + 0x900F,0x51F8,0x79C3,0x7A81,0x56FE,0x5F92,0x9014,0x6D82,/* 0xB8-0xBF */ + 0x5C60,0x571F,0x5410,0x5154,0x6E4D,0x56E2,0x63A8,0x9893,/* 0xC0-0xC7 */ + 0x817F,0x8715,0x892A,0x9000,0x541E,0x5C6F,0x81C0,0x62D6,/* 0xC8-0xCF */ + 0x6258,0x8131,0x9E35,0x9640,0x9A6E,0x9A7C,0x692D,0x59A5,/* 0xD0-0xD7 */ + 0xFA02,0x553E,0x6316,0x54C7,0x86D9,0x6D3C,0x5A03,0x74E6,/* 0xD8-0xDF */ + 0x889C,0x6B6A,0x5916,0x8C4C,0x5F2F,0x6E7E,0x73A9,0x987D,/* 0xE0-0xE7 */ + 0x4E38,0x70F7,0x5B8C,0x7897,0x633D,0x665A,0x7696,0x60CB,/* 0xE8-0xEF */ + 0x5B9B,0x5A49,0x4E07,0x8155,0x6C6A,0x738B,0x4EA1,0x6789,/* 0xF0-0xF7 */ + 0x7F51,0x5F80,0x65FA,0x671B,0x5FD8,0x5984,0x5A01,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8719,0x871B,0x871D,0x871F,0x8720,0x8724,0x8726,0x8727,/* 0x40-0x47 */ + 0x8728,0x872A,0x872B,0x872C,0x872D,0x872F,0x8730,0x8732,/* 0x48-0x4F */ + 0x8733,0x8735,0x8736,0x8738,0x8739,0x873A,0x873C,0x873D,/* 0x50-0x57 */ + 0x8740,0x8741,0x8742,0x8743,0x8744,0x8745,0x8746,0x874A,/* 0x58-0x5F */ + 0x874B,0x874D,0x874F,0x8750,0x8751,0x8752,0x8754,0x8755,/* 0x60-0x67 */ + 0x8756,0x8758,0x875A,0x875B,0x875C,0x875D,0x875E,0x875F,/* 0x68-0x6F */ + 0x8761,0x8762,0x8766,0x8767,0x8768,0x8769,0x876A,0x876B,/* 0x70-0x77 */ + 0x876C,0x876D,0x876F,0x8771,0x8772,0x8773,0x8775,0x0000,/* 0x78-0x7F */ + + 0x8777,0x8778,0x8779,0x877A,0x877F,0x8780,0x8781,0x8784,/* 0x80-0x87 */ + 0x8786,0x8787,0x8789,0x878A,0x878C,0x878E,0x878F,0x8790,/* 0x88-0x8F */ + 0x8791,0x8792,0x8794,0x8795,0x8796,0x8798,0x8799,0x879A,/* 0x90-0x97 */ + 0x879B,0x879C,0x879D,0x879E,0x87A0,0x87A1,0x87A2,0x87A3,/* 0x98-0x9F */ + 0x87A4,0x5DCD,0x5FAE,0x5371,0x97E6,0x8FDD,0x6845,0x56F4,/* 0xA0-0xA7 */ + 0x552F,0x60DF,0x4E3A,0x6F4D,0x7EF4,0x82C7,0x840E,0x59D4,/* 0xA8-0xAF */ + 0x4F1F,0x4F2A,0x5C3E,0x7EAC,0x672A,0x851A,0x5473,0x754F,/* 0xB0-0xB7 */ + 0x80C3,0x5582,0x9B4F,0x4F4D,0x6E2D,0x8C13,0x5C09,0x6170,/* 0xB8-0xBF */ + 0x536B,0x761F,0x6E29,0x868A,0x6587,0x95FB,0x7EB9,0x543B,/* 0xC0-0xC7 */ + 0x7A33,0x7D0A,0x95EE,0x55E1,0x7FC1,0x74EE,0x631D,0x8717,/* 0xC8-0xCF */ + 0x6DA1,0x7A9D,0x6211,0x65A1,0x5367,0x63E1,0x6C83,0x5DEB,/* 0xD0-0xD7 */ + 0x545C,0x94A8,0x4E4C,0x6C61,0x8BEC,0x5C4B,0x65E0,0x829C,/* 0xD8-0xDF */ + 0x68A7,0x543E,0x5434,0x6BCB,0x6B66,0x4E94,0x6342,0x5348,/* 0xE0-0xE7 */ + 0x821E,0x4F0D,0x4FAE,0x575E,0x620A,0x96FE,0x6664,0x7269,/* 0xE8-0xEF */ + 0x52FF,0x52A1,0x609F,0x8BEF,0x6614,0x7199,0x6790,0x897F,/* 0xF0-0xF7 */ + 0x7852,0x77FD,0x6670,0x563B,0x5438,0x9521,0x727A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x87A5,0x87A6,0x87A7,0x87A9,0x87AA,0x87AE,0x87B0,0x87B1,/* 0x40-0x47 */ + 0x87B2,0x87B4,0x87B6,0x87B7,0x87B8,0x87B9,0x87BB,0x87BC,/* 0x48-0x4F */ + 0x87BE,0x87BF,0x87C1,0x87C2,0x87C3,0x87C4,0x87C5,0x87C7,/* 0x50-0x57 */ + 0x87C8,0x87C9,0x87CC,0x87CD,0x87CE,0x87CF,0x87D0,0x87D4,/* 0x58-0x5F */ + 0x87D5,0x87D6,0x87D7,0x87D8,0x87D9,0x87DA,0x87DC,0x87DD,/* 0x60-0x67 */ + 0x87DE,0x87DF,0x87E1,0x87E2,0x87E3,0x87E4,0x87E6,0x87E7,/* 0x68-0x6F */ + 0x87E8,0x87E9,0x87EB,0x87EC,0x87ED,0x87EF,0x87F0,0x87F1,/* 0x70-0x77 */ + 0x87F2,0x87F3,0x87F4,0x87F5,0x87F6,0x87F7,0x87F8,0x0000,/* 0x78-0x7F */ + + 0x87FA,0x87FB,0x87FC,0x87FD,0x87FF,0x8800,0x8801,0x8802,/* 0x80-0x87 */ + 0x8804,0x8805,0x8806,0x8807,0x8808,0x8809,0x880B,0x880C,/* 0x88-0x8F */ + 0x880D,0x880E,0x880F,0x8810,0x8811,0x8812,0x8814,0x8817,/* 0x90-0x97 */ + 0x8818,0x8819,0x881A,0x881C,0x881D,0x881E,0xF927,0x8820,/* 0x98-0x9F */ + 0x8823,0x7A00,0x606F,0x5E0C,0x6089,0x819D,0x5915,0x60DC,/* 0xA0-0xA7 */ + 0x7184,0x70EF,0x6EAA,0x6C50,0x7280,0x6A84,0x88AD,0x5E2D,/* 0xA8-0xAF */ + 0x4E60,0x5AB3,0x559C,0x94E3,0x6D17,0x7CFB,0x9699,0x620F,/* 0xB0-0xB7 */ + 0x7EC6,0x778E,0x867E,0x5323,0x971E,0x8F96,0x6687,0x5CE1,/* 0xB8-0xBF */ + 0x4FA0,0x72ED,0x4E0B,0x53A6,0x590F,0x5413,0x6380,0x9528,/* 0xC0-0xC7 */ + 0x5148,0x4ED9,0x9C9C,0x7EA4,0x54B8,0x8D24,0x8854,0x8237,/* 0xC8-0xCF */ + 0x95F2,0x6D8E,0x5F26,0x5ACC,0x663E,0x9669,0x73B0,0x732E,/* 0xD0-0xD7 */ + 0x53BF,0x817A,0x9985,0x7FA1,0x5BAA,0x9677,0x9650,0x7EBF,/* 0xD8-0xDF */ + 0x76F8,0x53A2,0x9576,0x9999,0x7BB1,0x8944,0x6E58,0x4E61,/* 0xE0-0xE7 */ + 0x7FD4,0xFA1A,0x8BE6,0x60F3,0x54CD,0x4EAB,0x9879,0x5DF7,/* 0xE8-0xEF */ + 0x6A61,0x50CF,0x5411,0x8C61,0x8427,0x785D,0x9704,0x524A,/* 0xF0-0xF7 */ + 0x54EE,0x56A3,0x9500,0x6D88,0x5BB5,0x6DC6,0x6653,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8824,0x8825,0x8826,0x8827,0x8828,0x8829,0x882A,0x882B,/* 0x40-0x47 */ + 0x882C,0x882D,0x882E,0x882F,0x8830,0x8831,0x8833,0x8834,/* 0x48-0x4F */ + 0x8835,0x8836,0x8837,0x8838,0x883A,0x883B,0x883D,0x883E,/* 0x50-0x57 */ + 0x883F,0x8841,0x8842,0x8843,0x8846,0x8847,0x8848,0x8849,/* 0x58-0x5F */ + 0x884A,0x884B,0x884E,0x884F,0x8850,0x8851,0x8852,0x8853,/* 0x60-0x67 */ + 0x8855,0x8856,0x8858,0x885A,0x885B,0x885C,0x885D,0x885E,/* 0x68-0x6F */ + 0x885F,0x8860,0x8866,0x8867,0x886A,0x886D,0x886F,0x8871,/* 0x70-0x77 */ + 0x8873,0x8874,0x8875,0x8876,0x8878,0x8879,0x887A,0x0000,/* 0x78-0x7F */ + + 0x887B,0x887C,0x8880,0x8883,0x8886,0x8887,0x8889,0x888A,/* 0x80-0x87 */ + 0x888C,0x888E,0x888F,0x8890,0x8891,0x8893,0x8894,0x8895,/* 0x88-0x8F */ + 0x8897,0x8898,0x8899,0x889A,0x889B,0x889D,0x889E,0x889F,/* 0x90-0x97 */ + 0x88A0,0x88A1,0x88A3,0x88A5,0x88A6,0x88A7,0x88A8,0x88A9,/* 0x98-0x9F */ + 0x88AA,0x5C0F,0x5B5D,0x6821,0x8096,0x5578,0x7B11,0x6548,/* 0xA0-0xA7 */ + 0x6954,0x4E9B,0x6B47,0x874E,0x978B,0x534F,0x631F,0x643A,/* 0xA8-0xAF */ + 0x90AA,0x659C,0x80C1,0x8C10,0x5199,0x68B0,0x5378,0x87F9,/* 0xB0-0xB7 */ + 0x61C8,0x6CC4,0x6CFB,0x8C22,0x5C51,0x85AA,0x82AF,0x950C,/* 0xB8-0xBF */ + 0x6B23,0x8F9B,0x65B0,0x5FFB,0x5FC3,0x4FE1,0x8845,0x661F,/* 0xC0-0xC7 */ + 0x8165,0x7329,0x60FA,0x5174,0x5211,0x578B,0x5F62,0x90A2,/* 0xC8-0xCF */ + 0xFA08,0x9192,0x5E78,0x674F,0x6027,0x59D3,0x5144,0x51F6,/* 0xD0-0xD7 */ + 0x80F8,0x5308,0x6C79,0x96C4,0x718A,0x4F11,0x4FEE,0x7F9E,/* 0xD8-0xDF */ + 0x673D,0x55C5,0x9508,0x79C0,0x8896,0x7EE3,0x589F,0x620C,/* 0xE0-0xE7 */ + 0x9700,0x865A,0x5618,0x987B,0x5F90,0x8BB8,0x84C4,0x9157,/* 0xE8-0xEF */ + 0x53D9,0x65ED,0x5E8F,0x755C,0x6064,0x7D6E,0x5A7F,0x7EEA,/* 0xF0-0xF7 */ + 0x7EED,0x8F69,0x55A7,0x5BA3,0x60AC,0x65CB,0x7384,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x88AC,0x88AE,0x88AF,0x88B0,0x88B2,0x88B3,0x88B4,0x88B5,/* 0x40-0x47 */ + 0x88B6,0x88B8,0x88B9,0x88BA,0x88BB,0x88BD,0x88BE,0x88BF,/* 0x48-0x4F */ + 0x88C0,0x88C3,0x88C4,0x88C7,0x88C8,0x88CA,0x88CB,0x88CC,/* 0x50-0x57 */ + 0x88CD,0x88CF,0x88D0,0x88D1,0x88D3,0x88D6,0x88D7,0x88DA,/* 0x58-0x5F */ + 0x88DB,0x88DC,0x88DD,0x88DE,0x88E0,0xF9E8,0x88E6,0x88E7,/* 0x60-0x67 */ + 0x88E9,0x88EA,0x88EB,0x88EC,0x88ED,0x88EE,0x88EF,0x88F2,/* 0x68-0x6F */ + 0x88F5,0x88F6,0x88F7,0x88FA,0x88FB,0x88FD,0x88FF,0x8900,/* 0x70-0x77 */ + 0x8901,0x8903,0x8904,0x8905,0x8906,0x8907,0x8908,0x0000,/* 0x78-0x7F */ + + 0x8909,0x890B,0x890C,0x890D,0x890E,0x890F,0x8911,0x8914,/* 0x80-0x87 */ + 0x8915,0x8916,0x8917,0x8918,0x891C,0x891D,0x891E,0x891F,/* 0x88-0x8F */ + 0x8920,0x8922,0x8923,0x8924,0x8926,0x8927,0x8928,0x8929,/* 0x90-0x97 */ + 0x892C,0x892D,0x892E,0x892F,0x8931,0x8932,0x8933,0x8935,/* 0x98-0x9F */ + 0x8937,0x9009,0x7663,0x7729,0x7EDA,0x9774,0x859B,0x5B66,/* 0xA0-0xA7 */ + 0x7A74,0x96EA,0x8840,0x52CB,0x718F,0x5FAA,0x65EC,0x8BE2,/* 0xA8-0xAF */ + 0x5BFB,0x9A6F,0x5DE1,0x6B89,0x6C5B,0x8BAD,0x8BAF,0x900A,/* 0xB0-0xB7 */ + 0x8FC5,0x538B,0x62BC,0x9E26,0x9E2D,0x5440,0x4E2B,0x82BD,/* 0xB8-0xBF */ + 0x7259,0x869C,0x5D16,0x8859,0x6DAF,0x96C5,0x54D1,0x4E9A,/* 0xC0-0xC7 */ + 0x8BB6,0x7109,0xF99E,0x9609,0x70DF,0x6DF9,0x76D0,0x4E25,/* 0xC8-0xCF */ + 0x7814,0x8712,0x5CA9,0x5EF6,0x8A00,0x989C,0x960E,0x708E,/* 0xD0-0xD7 */ + 0x6CBF,0x5944,0x63A9,0x773C,0x884D,0x6F14,0x8273,0x5830,/* 0xD8-0xDF */ + 0x71D5,0x538C,0x781A,0x96C1,0x5501,0x5F66,0x7130,0x5BB4,/* 0xE0-0xE7 */ + 0x8C1A,0x9A8C,0x6B83,0x592E,0x9E2F,0x79E7,0x6768,0x626C,/* 0xE8-0xEF */ + 0x4F6F,0x75A1,0x7F8A,0x6D0B,0x9633,0x6C27,0x4EF0,0x75D2,/* 0xF0-0xF7 */ + 0x517B,0x6837,0x6F3E,0x9080,0x8170,0x5996,0x7476,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8938,0x8939,0x893A,0x893B,0x893C,0x893D,0x893E,0x893F,/* 0x40-0x47 */ + 0x8940,0x8942,0x8943,0x8945,0x8946,0x8947,0x8948,0x8949,/* 0x48-0x4F */ + 0x894A,0x894B,0x894C,0x894D,0x894E,0x894F,0x8950,0x8951,/* 0x50-0x57 */ + 0x8952,0x8953,0x8954,0x8955,0x8956,0x8957,0x8958,0x8959,/* 0x58-0x5F */ + 0x895A,0x895B,0x895C,0x895D,0x8960,0x8961,0x8962,0x8963,/* 0x60-0x67 */ + 0xF924,0x8965,0x8967,0x8968,0x8969,0x896A,0x896B,0x896C,/* 0x68-0x6F */ + 0x896D,0x896E,0x896F,0x8970,0x8971,0x8972,0x8973,0x8974,/* 0x70-0x77 */ + 0x8975,0x8976,0x8977,0x8978,0x8979,0x897A,0x897C,0x0000,/* 0x78-0x7F */ + + 0x897D,0x897E,0x8980,0x8982,0x8984,0x8985,0x8987,0x8988,/* 0x80-0x87 */ + 0x8989,0x898A,0xFA0A,0x898C,0x898D,0x898E,0x898F,0x8990,/* 0x88-0x8F */ + 0x8991,0x8992,0x8993,0x8994,0x8995,0x8996,0x8997,0x8998,/* 0x90-0x97 */ + 0x8999,0x899A,0x899B,0x899C,0x899D,0x899E,0x899F,0x89A0,/* 0x98-0x9F */ + 0x89A1,0x6447,0x5C27,0x9065,0x7A91,0x8C23,0x59DA,0x54AC,/* 0xA0-0xA7 */ + 0x8200,0x836F,0x8981,0x8000,0x6930,0x564E,0x8036,0x7237,/* 0xA8-0xAF */ + 0x91CE,0x51B6,0x4E5F,0x9875,0x6396,0x4E1A,0x53F6,0x66F3,/* 0xB0-0xB7 */ + 0x814B,0x591C,0x6DB2,0x4E00,0x58F9,0x533B,0x63D6,0x94F1,/* 0xB8-0xBF */ + 0x4F9D,0x4F0A,0x8863,0x9890,0x5937,0x9057,0x79FB,0x4EEA,/* 0xC0-0xC7 */ + 0x80F0,0x7591,0x6C82,0x5B9C,0x59E8,0x5F5D,0x6905,0x8681,/* 0xC8-0xCF */ + 0x501A,0x5DF2,0x4E59,0x77E3,0x4EE5,0x827A,0x6291,0xF9E0,/* 0xD0-0xD7 */ + 0x9091,0x5C79,0x4EBF,0x5F79,0x81C6,0xFA25,0x8084,0x75AB,/* 0xD8-0xDF */ + 0x4EA6,0x88D4,0x610F,0x6BC5,0x5FC6,0x4E49,0xFA17,0x6EA2,/* 0xE0-0xE7 */ + 0x8BE3,0x8BAE,0x8C0A,0x8BD1,0x5F02,0x7FFC,0x7FCC,0x7ECE,/* 0xE8-0xEF */ + 0x8335,0x836B,0x56E0,0x6BB7,0x97F3,0x9634,0x59FB,0x541F,/* 0xF0-0xF7 */ + 0x94F6,0x6DEB,0x5BC5,0x996E,0x5C39,0x5F15,0x9690,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x89A2,0x89A3,0x89A4,0x89A5,0x89A6,0x89A7,0x89A8,0x89A9,/* 0x40-0x47 */ + 0x89AA,0x89AB,0x89AC,0x89AD,0x89AE,0x89AF,0x89B0,0x89B1,/* 0x48-0x4F */ + 0x89B2,0x89B3,0x89B4,0x89B5,0x89B6,0x89B7,0x89B8,0x89B9,/* 0x50-0x57 */ + 0x89BA,0x89BB,0x89BC,0x89BD,0x89BE,0x89BF,0x89C0,0x89C3,/* 0x58-0x5F */ + 0x89CD,0x89D3,0x89D4,0x89D5,0x89D7,0x89D8,0x89D9,0x89DB,/* 0x60-0x67 */ + 0x89DD,0x89DF,0x89E0,0x89E1,0x89E2,0x89E4,0x89E7,0x89E8,/* 0x68-0x6F */ + 0x89E9,0x89EA,0x89EC,0x89ED,0x89EE,0x89F0,0x89F1,0x89F2,/* 0x70-0x77 */ + 0x89F4,0x89F5,0x89F6,0x89F7,0x89F8,0x89F9,0x89FA,0x0000,/* 0x78-0x7F */ + + 0x89FB,0x89FC,0x89FD,0x89FE,0x89FF,0x8A01,0x8A02,0x8A03,/* 0x80-0x87 */ + 0x8A04,0x8A05,0x8A06,0x8A08,0x8A09,0x8A0A,0x8A0B,0x8A0C,/* 0x88-0x8F */ + 0x8A0D,0x8A0E,0x8A0F,0x8A10,0x8A11,0x8A12,0x8A13,0x8A14,/* 0x90-0x97 */ + 0x8A15,0x8A16,0x8A17,0x8A18,0x8A19,0x8A1A,0x8A1B,0x8A1C,/* 0x98-0x9F */ + 0x8A1D,0x5370,0x82F1,0x6A31,0x5A74,0x9E70,0x5E94,0x7F28,/* 0xA0-0xA7 */ + 0x83B9,0x8424,0x8425,0x8367,0x8747,0x8FCE,0x8D62,0x76C8,/* 0xA8-0xAF */ + 0x5F71,0x9896,0x786C,0x6620,0x54DF,0x62E5,0x4F63,0x81C3,/* 0xB0-0xB7 */ + 0x75C8,0x5EB8,0x96CD,0x8E0A,0x86F9,0x548F,0x6CF3,0x6D8C,/* 0xB8-0xBF */ + 0x6C38,0x607F,0x52C7,0x7528,0x5E7D,0x4F18,0x60A0,0x5FE7,/* 0xC0-0xC7 */ + 0x5C24,0x7531,0x90AE,0x94C0,0x72B9,0x6CB9,0x6E38,0x9149,/* 0xC8-0xCF */ + 0x6709,0x53CB,0x53F3,0x4F51,0x91C9,0x8BF1,0x53C8,0x5E7C,/* 0xD0-0xD7 */ + 0x8FC2,0x6DE4,0x4E8E,0x76C2,0x6986,0x865E,0x611A,0x8206,/* 0xD8-0xDF */ + 0x4F59,0x4FDE,0x903E,0x9C7C,0x6109,0x6E1D,0x6E14,0x9685,/* 0xE0-0xE7 */ + 0x4E88,0x5A31,0x96E8,0x4E0E,0x5C7F,0x79B9,0x5B87,0x8BED,/* 0xE8-0xEF */ + 0xFA1E,0x7389,0x57DF,0x828B,0x90C1,0x5401,0x9047,0x55BB,/* 0xF0-0xF7 */ + 0x5CEA,0x5FA1,0x6108,0x6B32,0x72F1,0x80B2,0x8A89,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8A1E,0x8A1F,0x8A20,0x8A21,0x8A22,0x8A23,0x8A24,0x8A25,/* 0x40-0x47 */ + 0x8A26,0x8A27,0x8A28,0x8A29,0x8A2A,0x8A2B,0x8A2C,0x8A2D,/* 0x48-0x4F */ + 0x8A2E,0x8A2F,0x8A30,0x8A31,0x8A32,0x8A33,0x8A34,0x8A35,/* 0x50-0x57 */ + 0x8A36,0x8A37,0x8A38,0x8A39,0x8A3A,0x8A3B,0x8A3C,0x8A3D,/* 0x58-0x5F */ + 0x8A3F,0x8A40,0x8A41,0x8A42,0x8A43,0x8A44,0x8A45,0x8A46,/* 0x60-0x67 */ + 0x8A47,0x8A49,0x8A4A,0x8A4B,0x8A4C,0x8A4D,0x8A4E,0x8A4F,/* 0x68-0x6F */ + 0x8A50,0x8A51,0x8A52,0x8A53,0x8A54,0x8A55,0x8A56,0x8A57,/* 0x70-0x77 */ + 0x8A58,0x8A59,0x8A5A,0x8A5B,0x8A5C,0x8A5D,0x8A5E,0x0000,/* 0x78-0x7F */ + + 0x8A5F,0x8A60,0x8A61,0x8A62,0x8A63,0x8A64,0x8A65,0x8A66,/* 0x80-0x87 */ + 0x8A67,0x8A68,0x8A69,0x8A6A,0x8A6B,0x8A6C,0x8A6D,0x8A6E,/* 0x88-0x8F */ + 0x8A6F,0x8A70,0x8A71,0x8A72,0x8A73,0x8A74,0x8A75,0x8A76,/* 0x90-0x97 */ + 0x8A77,0x8A78,0x8A7A,0x8A7B,0x8A7C,0x8A7D,0x8A7E,0x8A7F,/* 0x98-0x9F */ + 0x8A80,0x6D74,0x5BD3,0x88D5,0x9884,0x8C6B,0x9A6D,0x9E33,/* 0xA0-0xA7 */ + 0x6E0A,0x51A4,0x5143,0x57A3,0x8881,0x539F,0x63F4,0x8F95,/* 0xA8-0xAF */ + 0x56ED,0x5458,0x5706,0x733F,0x6E90,0x7F18,0x8FDC,0x82D1,/* 0xB0-0xB7 */ + 0x613F,0x6028,0x9662,0x66F0,0x7EA6,0x8D8A,0x8DC3,0x94A5,/* 0xB8-0xBF */ + 0x5CB3,0x7CA4,0x6708,0x60A6,0x9605,0x8018,0x4E91,0x90E7,/* 0xC0-0xC7 */ + 0x5300,0x9668,0x5141,0x8FD0,0x8574,0x915D,0x6655,0x97F5,/* 0xC8-0xCF */ + 0x5B55,0x531D,0x7838,0x6742,0x683D,0x54C9,0x707E,0x5BB0,/* 0xD0-0xD7 */ + 0x8F7D,0x518D,0x5728,0x54B1,0x6512,0x6682,0x8D5E,0x8D43,/* 0xD8-0xDF */ + 0x810F,0x846C,0x906D,0x7CDF,0x51FF,0x85FB,0x67A3,0x65E9,/* 0xE0-0xE7 */ + 0x6FA1,0x86A4,0x8E81,0x566A,0x9020,0x7682,0x7076,0x71E5,/* 0xE8-0xEF */ + 0x8D23,0x62E9,0x5219,0x6CFD,0x8D3C,0x600E,0x589E,0x618E,/* 0xF0-0xF7 */ + 0x66FE,0x8D60,0x624E,0x55B3,0x6E23,0x672D,0x8F67,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8A81,0x8A82,0x8A83,0x8A84,0x8A85,0x8A86,0x8A87,0x8A88,/* 0x40-0x47 */ + 0x8A8B,0x8A8C,0x8A8D,0x8A8E,0x8A8F,0x8A90,0x8A91,0x8A92,/* 0x48-0x4F */ + 0x8A94,0x8A95,0x8A96,0x8A97,0x8A98,0x8A99,0x8A9A,0x8A9B,/* 0x50-0x57 */ + 0x8A9C,0x8A9D,0x8A9E,0x8A9F,0x8AA0,0x8AA1,0x8AA2,0x8AA3,/* 0x58-0x5F */ + 0x8AA4,0x8AA5,0x8AA6,0x8AA7,0x8AA8,0x8AA9,0xF9A1,0x8AAB,/* 0x60-0x67 */ + 0x8AAC,0x8AAD,0x8AAE,0x8AAF,0x8AB0,0x8AB1,0x8AB2,0x8AB3,/* 0x68-0x6F */ + 0x8AB4,0x8AB5,0x8AB6,0x8AB7,0x8AB8,0x8AB9,0x8ABA,0x8ABB,/* 0x70-0x77 */ + 0x8ABC,0x8ABD,0x8ABE,0x8ABF,0x8AC0,0x8AC1,0x8AC2,0x0000,/* 0x78-0x7F */ + + 0x8AC3,0x8AC4,0x8AC5,0x8AC6,0x8AC7,0x8AC8,0x8AC9,0x8ACA,/* 0x80-0x87 */ + 0x8ACB,0x8ACC,0x8ACD,0x8ACE,0x8ACF,0x8AD0,0x8AD1,0xF97D,/* 0x88-0x8F */ + 0x8AD3,0x8AD4,0x8AD5,0xF941,0x8AD7,0x8AD8,0x8AD9,0x8ADA,/* 0x90-0x97 */ + 0x8ADB,0x8ADC,0x8ADD,0x8ADE,0x8ADF,0x8AE0,0x8AE1,0x8AE2,/* 0x98-0x9F */ + 0x8AE3,0x94E1,0x95F8,0x7728,0x6805,0x69A8,0x548B,0x4E4D,/* 0xA0-0xA7 */ + 0x70B8,0x8BC8,0x6458,0x658B,0xFA04,0x7A84,0x503A,0x5BE8,/* 0xA8-0xAF */ + 0x77BB,0x6BE1,0x8A79,0x7C98,0x6CBE,0x76CF,0x65A9,0x8F97,/* 0xB0-0xB7 */ + 0x5D2D,0x5C55,0x8638,0x6808,0x5360,0x6218,0x7AD9,0x6E5B,/* 0xB8-0xBF */ + 0x7EFD,0x6A1F,0x7AE0,0x5F70,0x6F33,0x5F20,0x638C,0x6DA8,/* 0xC0-0xC7 */ + 0x6756,0x4E08,0x5E10,0x8D26,0x4ED7,0x80C0,0x7634,0x969C,/* 0xC8-0xCF */ + 0x62DB,0x662D,0x627E,0x6CBC,0x8D75,0x7167,0x7F69,0x5146,/* 0xD0-0xD7 */ + 0x8087,0x53EC,0x906E,0x6298,0x54F2,0x86F0,0x8F99,0x8005,/* 0xD8-0xDF */ + 0x9517,0x8517,0x8FD9,0x6D59,0x73CD,0x659F,0x771F,0x7504,/* 0xE0-0xE7 */ + 0x7827,0x81FB,0x8D1E,0x9488,0x4FA6,0x6795,0x75B9,0x8BCA,/* 0xE8-0xEF */ + 0x9707,0x632F,0x9547,0x9635,0x84B8,0x6323,0x7741,0x5F81,/* 0xF0-0xF7 */ + 0x72F0,0x4E89,0x6014,0x6574,0x62EF,0x6B63,0x653F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8AE4,0x8AE5,0x8AE6,0x8AE7,0x8AE8,0x8AE9,0x8AEA,0x8AEB,/* 0x40-0x47 */ + 0x8AEC,0x8AED,0x8AEE,0x8AEF,0x8AF0,0x8AF1,0x8AF2,0x8AF3,/* 0x48-0x4F */ + 0x8AF4,0x8AF5,0x8AF6,0x8AF7,0xFA22,0x8AF9,0x8AFA,0x8AFB,/* 0x50-0x57 */ + 0x8AFC,0x8AFD,0xF95D,0x8AFF,0x8B00,0x8B01,0x8B02,0x8B03,/* 0x58-0x5F */ + 0x8B04,0x8B05,0x8B06,0x8B08,0x8B09,0x8B0A,0x8B0B,0x8B0C,/* 0x60-0x67 */ + 0x8B0D,0x8B0E,0x8B0F,0x8B10,0x8B11,0x8B12,0x8B13,0x8B14,/* 0x68-0x6F */ + 0x8B15,0x8B16,0x8B17,0x8B18,0x8B19,0x8B1A,0x8B1B,0x8B1C,/* 0x70-0x77 */ + 0x8B1D,0x8B1E,0x8B1F,0x8B20,0x8B21,0x8B22,0x8B23,0x0000,/* 0x78-0x7F */ + + 0x8B24,0x8B25,0x8B27,0x8B28,0x8B29,0x8B2A,0x8B2B,0x8B2C,/* 0x80-0x87 */ + 0x8B2D,0x8B2E,0x8B2F,0x8B30,0x8B31,0x8B32,0x8B33,0x8B34,/* 0x88-0x8F */ + 0x8B35,0x8B36,0x8B37,0x8B38,0x8B39,0x8B3A,0x8B3B,0x8B3C,/* 0x90-0x97 */ + 0x8B3D,0x8B3E,0x8B3F,0x8B40,0x8B41,0x8B42,0x8B43,0x8B44,/* 0x98-0x9F */ + 0x8B45,0x5E27,0x75C7,0x90D1,0x8BC1,0x829D,0x679D,0x652F,/* 0xA0-0xA7 */ + 0x5431,0x8718,0x77E5,0x80A2,0x8102,0x6C41,0x4E4B,0x7EC7,/* 0xA8-0xAF */ + 0x804C,0x76F4,0x690D,0x6B96,0x6267,0x503C,0x4F84,0x5740,/* 0xB0-0xB7 */ + 0x6307,0x6B62,0x8DBE,0x53EA,0x65E8,0x7EB8,0x5FD7,0x631A,/* 0xB8-0xBF */ + 0x63B7,0x81F3,0x81F4,0x7F6E,0x5E1C,0x5CD9,0x5236,0x667A,/* 0xC0-0xC7 */ + 0x79E9,0x7A1A,0x8D28,0xF9FB,0x75D4,0x6EDE,0x6CBB,0x7A92,/* 0xC8-0xCF */ + 0x4E2D,0x76C5,0x5FE0,0x949F,0x8877,0x7EC8,0x79CD,0x80BF,/* 0xD0-0xD7 */ + 0x91CD,0x4EF2,0x4F17,0x821F,0x5468,0x5DDE,0x6D32,0x8BCC,/* 0xD8-0xDF */ + 0x7CA5,0x8F74,0x8098,0x5E1A,0x5492,0x76B1,0x5B99,0x663C,/* 0xE0-0xE7 */ + 0x9AA4,0x73E0,0x682A,0x86DB,0x6731,0x732A,0x8BF8,0x8BDB,/* 0xE8-0xEF */ + 0x9010,0x7AF9,0x70DB,0x716E,0x62C4,0x77A9,0x5631,0x4E3B,/* 0xF0-0xF7 */ + 0x8457,0x67F1,0x52A9,0x86C0,0x8D2E,0x94F8,0x7B51,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8B46,0x8B47,0x8B48,0x8B49,0x8B4A,0x8B4B,0x8B4C,0x8B4D,/* 0x40-0x47 */ + 0x8B4E,0x8B4F,0x8B50,0x8B51,0x8B52,0x8B53,0x8B54,0x8B55,/* 0x48-0x4F */ + 0x8B56,0x8B57,0xF9FC,0x8B59,0x8B5A,0x8B5B,0x8B5C,0x8B5D,/* 0x50-0x57 */ + 0x8B5E,0x8B5F,0x8B60,0x8B61,0x8B62,0x8B63,0x8B64,0x8B65,/* 0x58-0x5F */ + 0x8B67,0x8B68,0x8B69,0x8B6A,0x8B6B,0x8B6D,0x8B6E,0x8B6F,/* 0x60-0x67 */ + 0x8B70,0x8B71,0x8B72,0x8B73,0x8B74,0x8B75,0x8B76,0x8B77,/* 0x68-0x6F */ + 0x8B78,0x8B79,0x8B7A,0x8B7B,0x8B7C,0x8B7D,0x8B7E,0x8B7F,/* 0x70-0x77 */ + 0xF95A,0x8B81,0x8B82,0x8B83,0x8B84,0x8B85,0x8B86,0x0000,/* 0x78-0x7F */ + + 0x8B87,0x8B88,0x8B89,0x8B8A,0x8B8B,0x8B8C,0x8B8D,0x8B8E,/* 0x80-0x87 */ + 0x8B8F,0x8B90,0x8B91,0x8B92,0x8B93,0x8B94,0x8B95,0x8B96,/* 0x88-0x8F */ + 0x8B97,0x8B98,0x8B99,0x8B9A,0x8B9B,0x8B9C,0x8B9D,0x8B9E,/* 0x90-0x97 */ + 0x8B9F,0x8BAC,0x8BB1,0x8BBB,0x8BC7,0x8BD0,0x8BEA,0x8C09,/* 0x98-0x9F */ + 0x8C1E,0x4F4F,0x6CE8,0x795D,0x9A7B,0x6293,0x722A,0x62FD,/* 0xA0-0xA7 */ + 0x4E13,0x7816,0x8F6C,0x64B0,0x8D5A,0x7BC6,0x6869,0x5E84,/* 0xA8-0xAF */ + 0x88C5,0x5986,0x649E,0x58EE,0x72B6,0x690E,0x9525,0x8FFD,/* 0xB0-0xB7 */ + 0x8D58,0x5760,0x7F00,0x8C06,0x51C6,0x6349,0x62D9,0x5353,/* 0xB8-0xBF */ + 0x684C,0x7422,0x8301,0x914C,0x5544,0x7740,0x707C,0x6D4A,/* 0xC0-0xC7 */ + 0x5179,0x54A8,0x8D44,0x59FF,0x6ECB,0x6DC4,0x5B5C,0x7D2B,/* 0xC8-0xCF */ + 0x4ED4,0x7C7D,0x6ED3,0x5B50,0x81EA,0x6E0D,0x5B57,0x9B03,/* 0xD0-0xD7 */ + 0x68D5,0x8E2A,0x5B97,0x7EFC,0x603B,0x7EB5,0x90B9,0x8D70,/* 0xD8-0xDF */ + 0x594F,0x63CD,0x79DF,0x8DB3,0x5352,0x65CF,0x7956,0x8BC5,/* 0xE0-0xE7 */ + 0x963B,0x7EC4,0x94BB,0x7E82,0x5634,0x9189,0x6700,0x7F6A,/* 0xE8-0xEF */ + 0x5C0A,0x9075,0x6628,0x5DE6,0x4F50,0x67DE,0x505A,0x4F5C,/* 0xF0-0xF7 */ + 0x5750,0x5EA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8C38,0x8C39,0x8C3A,0x8C3B,0x8C3C,0x8C3D,0x8C3E,0x8C3F,/* 0x40-0x47 */ + 0x8C40,0x8C42,0x8C43,0x8C44,0x8C45,0xF900,0x8C4A,0x8C4B,/* 0x48-0x4F */ + 0x8C4D,0x8C4E,0x8C4F,0x8C50,0x8C51,0x8C52,0x8C53,0x8C54,/* 0x50-0x57 */ + 0x8C56,0x8C57,0x8C58,0x8C59,0x8C5B,0x8C5C,0x8C5D,0x8C5E,/* 0x58-0x5F */ + 0x8C5F,0x8C60,0x8C63,0x8C64,0x8C65,0x8C66,0x8C67,0x8C68,/* 0x60-0x67 */ + 0x8C69,0xFA16,0x8C6D,0x8C6E,0x8C6F,0x8C70,0x8C71,0x8C72,/* 0x68-0x6F */ + 0x8C74,0x8C75,0x8C76,0x8C77,0x8C7B,0x8C7C,0x8C7D,0x8C7E,/* 0x70-0x77 */ + 0x8C7F,0x8C80,0x8C81,0x8C83,0x8C84,0x8C86,0x8C87,0x0000,/* 0x78-0x7F */ + + 0x8C88,0x8C8B,0x8C8D,0x8C8E,0x8C8F,0x8C90,0x8C91,0x8C92,/* 0x80-0x87 */ + 0x8C93,0x8C95,0x8C96,0x8C97,0x8C99,0x8C9A,0x8C9B,0x8C9C,/* 0x88-0x8F */ + 0x8C9D,0x8C9E,0x8C9F,0x8CA0,0x8CA1,0x8CA2,0x8CA3,0x8CA4,/* 0x90-0x97 */ + 0x8CA5,0x8CA6,0x8CA7,0x8CA8,0x8CA9,0x8CAA,0x8CAB,0x8CAC,/* 0x98-0x9F */ + 0x8CAD,0x4E8D,0x4E0C,0x5140,0x4E10,0x5EFF,0x5345,0x4E15,/* 0xA0-0xA7 */ + 0x4E98,0x4E1E,0x9B32,0x5B6C,0x5669,0x4E28,0x79BA,0x4E3F,/* 0xA8-0xAF */ + 0x5315,0x4E47,0x592D,0x723B,0x536E,0x6C10,0x56DF,0x80E4,/* 0xB0-0xB7 */ + 0x9997,0x6BD3,0x777E,0x9F17,0x4E36,0x4E9F,0x9F10,0x4E5C,/* 0xB8-0xBF */ + 0x4E69,0x4E93,0x8288,0x5B5B,0x556C,0x560F,0x4EC4,0x538D,/* 0xC0-0xC7 */ + 0x539D,0x53A3,0x53A5,0x53AE,0x9765,0x8D5D,0x531A,0x53F5,/* 0xC8-0xCF */ + 0x5326,0x532E,0x533E,0x8D5C,0x5366,0x5363,0x5202,0x5208,/* 0xD0-0xD7 */ + 0x520E,0x522D,0x5233,0x523F,0x5240,0x524C,0x525E,0x5261,/* 0xD8-0xDF */ + 0x525C,0x84AF,0x527D,0x5282,0x5281,0x5290,0x5293,0x5182,/* 0xE0-0xE7 */ + 0x7F54,0x4EBB,0x4EC3,0x4EC9,0x4EC2,0x4EE8,0x4EE1,0x4EEB,/* 0xE8-0xEF */ + 0x4EDE,0x4F1B,0x4EF3,0x4F22,0x4F64,0x4EF5,0x4F25,0x4F27,/* 0xF0-0xF7 */ + 0x4F09,0x4F2B,0x4F5E,0x4F67,0x6538,0x4F5A,0x4F5D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8CAE,0x8CAF,0x8CB0,0x8CB1,0x8CB2,0x8CB3,0x8CB4,0x8CB5,/* 0x40-0x47 */ + 0x8CB6,0x8CB7,0x8CB8,0x8CB9,0x8CBA,0x8CBB,0x8CBC,0x8CBD,/* 0x48-0x4F */ + 0x8CBE,0x8CBF,0x8CC0,0x8CC1,0xF948,0x8CC3,0x8CC4,0x8CC5,/* 0x50-0x57 */ + 0x8CC6,0x8CC7,0xF903,0x8CC9,0x8CCA,0x8CCB,0x8CCC,0x8CCD,/* 0x58-0x5F */ + 0x8CCE,0x8CCF,0x8CD0,0x8CD1,0x8CD2,0x8CD3,0x8CD4,0x8CD5,/* 0x60-0x67 */ + 0x8CD6,0x8CD7,0x8CD8,0x8CD9,0x8CDA,0x8CDB,0x8CDC,0x8CDD,/* 0x68-0x6F */ + 0x8CDE,0x8CDF,0x8CE0,0x8CE1,0x8CE2,0x8CE3,0x8CE4,0x8CE5,/* 0x70-0x77 */ + 0x8CE6,0x8CE7,0x8CE8,0x8CE9,0x8CEA,0x8CEB,0x8CEC,0x0000,/* 0x78-0x7F */ + + 0x8CED,0x8CEE,0x8CEF,0x8CF0,0x8CF1,0x8CF2,0x8CF3,0x8CF4,/* 0x80-0x87 */ + 0x8CF5,0x8CF6,0x8CF7,0x8CF8,0x8CF9,0x8CFA,0x8CFB,0x8CFC,/* 0x88-0x8F */ + 0x8CFD,0x8CFE,0x8CFF,0x8D00,0x8D01,0x8D02,0x8D03,0x8D04,/* 0x90-0x97 */ + 0x8D05,0x8D06,0x8D07,0x8D08,0x8D09,0x8D0A,0x8D0B,0x8D0C,/* 0x98-0x9F */ + 0x8D0D,0x4F5F,0x4F57,0x4F32,0x4F3D,0x4F76,0x4F74,0x4F91,/* 0xA0-0xA7 */ + 0x4F89,0x4F83,0x4F8F,0x4F7E,0x4F7B,0x4FAA,0x4F7C,0x4FAC,/* 0xA8-0xAF */ + 0x4F94,0x4FE6,0x4FE8,0x4FEA,0x4FC5,0x4FDA,0x4FE3,0x4FDC,/* 0xB0-0xB7 */ + 0x4FD1,0x4FDF,0x4FF8,0x5029,0x504C,0x4FF3,0x502C,0x500F,/* 0xB8-0xBF */ + 0x502E,0x502D,0x4FFE,0x501C,0x500C,0x5025,0x5028,0x507E,/* 0xC0-0xC7 */ + 0x5043,0x5055,0x5048,0x504E,0x506C,0x507B,0x50A5,0x50A7,/* 0xC8-0xCF */ + 0x50A9,0x50BA,0x50D6,0x5106,0x50ED,0x50EC,0x50E6,0x50EE,/* 0xD0-0xD7 */ + 0x5107,0x510B,0x4EDD,0x6C3D,0x4F58,0x4F65,0x4FCE,0x9FA0,/* 0xD8-0xDF */ + 0x6C46,0x7C74,0x516E,0x5DFD,0x9EC9,0x9998,0x5181,0x5914,/* 0xE0-0xE7 */ + 0x52F9,0x530D,0x8A07,0x5310,0x51EB,0x5919,0x5155,0x4EA0,/* 0xE8-0xEF */ + 0x5156,0x4EB3,0x886E,0x88A4,0x4EB5,0x8114,0x88D2,0x7980,/* 0xF0-0xF7 */ + 0x5B34,0x8803,0x7FB8,0x51AB,0x51B1,0x51BD,0x51BC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8D0E,0x8D0F,0x8D10,0x8D11,0x8D12,0x8D13,0x8D14,0x8D15,/* 0x40-0x47 */ + 0x8D16,0x8D17,0x8D18,0x8D19,0x8D1A,0x8D1B,0x8D1C,0x8D20,/* 0x48-0x4F */ + 0x8D51,0x8D52,0x8D57,0x8D5F,0x8D65,0x8D68,0x8D69,0x8D6A,/* 0x50-0x57 */ + 0x8D6C,0x8D6E,0x8D6F,0x8D71,0x8D72,0x8D78,0x8D79,0x8D7A,/* 0x58-0x5F */ + 0x8D7B,0x8D7C,0x8D7D,0x8D7E,0x8D7F,0x8D80,0x8D82,0x8D83,/* 0x60-0x67 */ + 0x8D86,0x8D87,0x8D88,0x8D89,0x8D8C,0x8D8D,0x8D8E,0x8D8F,/* 0x68-0x6F */ + 0x8D90,0x8D92,0x8D93,0x8D95,0x8D96,0x8D97,0x8D98,0x8D99,/* 0x70-0x77 */ + 0x8D9A,0x8D9B,0x8D9C,0x8D9D,0x8D9E,0x8DA0,0x8DA1,0x0000,/* 0x78-0x7F */ + + 0x8DA2,0x8DA4,0x8DA5,0x8DA6,0x8DA7,0x8DA8,0x8DA9,0x8DAA,/* 0x80-0x87 */ + 0x8DAB,0x8DAC,0x8DAD,0x8DAE,0x8DAF,0x8DB0,0x8DB2,0x8DB6,/* 0x88-0x8F */ + 0x8DB7,0x8DB9,0x8DBB,0x8DBD,0x8DC0,0x8DC1,0x8DC2,0x8DC5,/* 0x90-0x97 */ + 0x8DC7,0x8DC8,0x8DC9,0x8DCA,0x8DCD,0x8DD0,0x8DD2,0x8DD3,/* 0x98-0x9F */ + 0x8DD4,0x51C7,0x5196,0x51A2,0x51A5,0x8BA0,0x8BA6,0x8BA7,/* 0xA0-0xA7 */ + 0x8BAA,0x8BB4,0x8BB5,0x8BB7,0x8BC2,0x8BC3,0x8BCB,0x8BCF,/* 0xA8-0xAF */ + 0x8BCE,0x8BD2,0x8BD3,0x8BD4,0x8BD6,0x8BD8,0x8BD9,0x8BDC,/* 0xB0-0xB7 */ + 0x8BDF,0x8BE0,0x8BE4,0x8BE8,0x8BE9,0x8BEE,0x8BF0,0x8BF3,/* 0xB8-0xBF */ + 0x8BF6,0x8BF9,0x8BFC,0x8BFF,0x8C00,0x8C02,0x8C04,0x8C07,/* 0xC0-0xC7 */ + 0x8C0C,0x8C0F,0x8C11,0x8C12,0x8C14,0x8C15,0x8C16,0x8C19,/* 0xC8-0xCF */ + 0x8C1B,0x8C18,0x8C1D,0x8C1F,0x8C20,0x8C21,0x8C25,0x8C27,/* 0xD0-0xD7 */ + 0x8C2A,0x8C2B,0x8C2E,0x8C2F,0x8C32,0x8C33,0x8C35,0x8C36,/* 0xD8-0xDF */ + 0x5369,0x537A,0x961D,0x9622,0x9621,0x9631,0x962A,0x963D,/* 0xE0-0xE7 */ + 0x963C,0x9642,0x9649,0x9654,0x965F,0x9667,0x966C,0x9672,/* 0xE8-0xEF */ + 0x9674,0x9688,0x968D,0x9697,0x96B0,0x9097,0x909B,0x909D,/* 0xF0-0xF7 */ + 0x9099,0x90AC,0x90A1,0x90B4,0x90B3,0x90B6,0x90BA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8DD5,0x8DD8,0x8DD9,0x8DDC,0x8DE0,0x8DE1,0x8DE2,0x8DE5,/* 0x40-0x47 */ + 0x8DE6,0x8DE7,0x8DE9,0x8DED,0x8DEE,0x8DF0,0x8DF1,0x8DF2,/* 0x48-0x4F */ + 0x8DF4,0x8DF6,0x8DFC,0x8DFE,0x8DFF,0x8E00,0x8E01,0x8E02,/* 0x50-0x57 */ + 0x8E03,0x8E04,0x8E06,0x8E07,0x8E08,0x8E0B,0x8E0D,0x8E0E,/* 0x58-0x5F */ + 0x8E10,0x8E11,0x8E12,0x8E13,0x8E15,0x8E16,0x8E17,0x8E18,/* 0x60-0x67 */ + 0x8E19,0x8E1A,0x8E1B,0x8E1C,0x8E20,0x8E21,0x8E24,0x8E25,/* 0x68-0x6F */ + 0x8E26,0x8E27,0x8E28,0x8E2B,0x8E2D,0x8E30,0x8E32,0x8E33,/* 0x70-0x77 */ + 0x8E34,0x8E36,0x8E37,0x8E38,0x8E3B,0x8E3C,0x8E3E,0x0000,/* 0x78-0x7F */ + + 0x8E3F,0x8E43,0x8E45,0x8E46,0x8E4C,0x8E4D,0x8E4E,0x8E4F,/* 0x80-0x87 */ + 0x8E50,0x8E53,0x8E54,0x8E55,0x8E56,0x8E57,0x8E58,0x8E5A,/* 0x88-0x8F */ + 0x8E5B,0x8E5C,0x8E5D,0x8E5E,0x8E5F,0x8E60,0x8E61,0x8E62,/* 0x90-0x97 */ + 0x8E63,0x8E64,0x8E65,0x8E67,0x8E68,0x8E6A,0x8E6B,0x8E6E,/* 0x98-0x9F */ + 0x8E71,0x90B8,0x90B0,0x90CF,0x90C5,0x90BE,0x90D0,0x90C4,/* 0xA0-0xA7 */ + 0x90C7,0x90D3,0x90E6,0x90E2,0x90DC,0x90D7,0x90DB,0x90EB,/* 0xA8-0xAF */ + 0x90EF,0x90FE,0x9104,0x9122,0x911E,0x9123,0x9131,0x912F,/* 0xB0-0xB7 */ + 0x9139,0x9143,0x9146,0x520D,0x5942,0x52A2,0x52AC,0x52AD,/* 0xB8-0xBF */ + 0x52BE,0x54FF,0x52D0,0x52D6,0x52F0,0x53DF,0x71EE,0x77CD,/* 0xC0-0xC7 */ + 0x5EF4,0x51F5,0x51FC,0x9B2F,0x53B6,0x5F01,0x755A,0x5DEF,/* 0xC8-0xCF */ + 0x574C,0x57A9,0x57A1,0x587E,0x58BC,0x58C5,0x58D1,0x5729,/* 0xD0-0xD7 */ + 0x572C,0x572A,0x5733,0x5739,0x572E,0x572F,0x575C,0x573B,/* 0xD8-0xDF */ + 0x5742,0x5769,0x5785,0x576B,0x5786,0x577C,0x577B,0x5768,/* 0xE0-0xE7 */ + 0x576D,0x5776,0x5773,0x57AD,0x57A4,0x578C,0x57B2,0x57CF,/* 0xE8-0xEF */ + 0x57A7,0x57B4,0x5793,0x57A0,0x57D5,0x57D8,0x57DA,0x57D9,/* 0xF0-0xF7 */ + 0x57D2,0x57B8,0x57F4,0x57EF,0x57F8,0x57E4,0x57DD,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8E73,0x8E75,0x8E77,0x8E78,0x8E79,0x8E7A,0x8E7B,0x8E7D,/* 0x40-0x47 */ + 0x8E7E,0x8E80,0x8E82,0x8E83,0x8E84,0x8E86,0x8E88,0x8E89,/* 0x48-0x4F */ + 0x8E8A,0x8E8B,0x8E8C,0x8E8D,0x8E8E,0x8E91,0x8E92,0x8E93,/* 0x50-0x57 */ + 0x8E95,0x8E96,0x8E97,0x8E98,0x8E99,0x8E9A,0x8E9B,0x8E9D,/* 0x58-0x5F */ + 0x8E9F,0x8EA0,0x8EA1,0x8EA2,0x8EA3,0x8EA4,0x8EA5,0x8EA6,/* 0x60-0x67 */ + 0x8EA7,0x8EA8,0x8EA9,0x8EAA,0x8EAD,0x8EAE,0x8EB0,0x8EB1,/* 0x68-0x6F */ + 0x8EB3,0x8EB4,0x8EB5,0x8EB6,0x8EB7,0x8EB8,0x8EB9,0x8EBB,/* 0x70-0x77 */ + 0x8EBC,0x8EBD,0x8EBE,0x8EBF,0x8EC0,0x8EC1,0x8EC2,0x0000,/* 0x78-0x7F */ + + 0x8EC3,0x8EC4,0x8EC5,0x8EC6,0x8EC7,0x8EC8,0x8EC9,0xF902,/* 0x80-0x87 */ + 0x8ECB,0x8ECC,0x8ECD,0x8ECF,0x8ED0,0x8ED1,0x8ED2,0x8ED3,/* 0x88-0x8F */ + 0x8ED4,0x8ED5,0x8ED6,0x8ED7,0x8ED8,0x8ED9,0x8EDA,0x8EDB,/* 0x90-0x97 */ + 0x8EDC,0x8EDD,0x8EDE,0x8EDF,0x8EE0,0x8EE1,0x8EE2,0x8EE3,/* 0x98-0x9F */ + 0x8EE4,0x580B,0x580D,0x57FD,0x57ED,0x5800,0x581E,0x5819,/* 0xA0-0xA7 */ + 0x5844,0x5820,0x5865,0x586C,0x5881,0x5889,0x589A,0x5880,/* 0xA8-0xAF */ + 0x99A8,0x9F19,0x61FF,0x8279,0x827D,0x827F,0x828F,0x828A,/* 0xB0-0xB7 */ + 0x82A8,0x8284,0x828E,0x8291,0x8297,0x8299,0x82AB,0x82B8,/* 0xB8-0xBF */ + 0x82BE,0x82B0,0x82C8,0x82CA,0x82E3,0x8298,0x82B7,0x82AE,/* 0xC0-0xC7 */ + 0x82CB,0x82CC,0x82C1,0x82A9,0x82B4,0x82A1,0x82AA,0x829F,/* 0xC8-0xCF */ + 0x82C4,0x82CE,0x82A4,0x82E1,0x8309,0x82F7,0x82E4,0x830F,/* 0xD0-0xD7 */ + 0x8307,0x82DC,0x82F4,0x82D2,0x82D8,0x830C,0x82FB,0x82D3,/* 0xD8-0xDF */ + 0x8311,0x831A,0x8306,0x8314,0x8315,0x82E0,0x82D5,0x831C,/* 0xE0-0xE7 */ + 0x8351,0x835B,0x835C,0x8308,0x8392,0x833C,0x8334,0x8331,/* 0xE8-0xEF */ + 0x839B,0x835E,0x832F,0x834F,0x8347,0x8343,0x835F,0x8340,/* 0xF0-0xF7 */ + 0x8317,0x8360,0x832D,0x833A,0x8333,0x8366,0x8365,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8EE5,0x8EE6,0x8EE7,0x8EE8,0x8EE9,0x8EEA,0x8EEB,0x8EEC,/* 0x40-0x47 */ + 0x8EED,0x8EEE,0x8EEF,0x8EF0,0x8EF1,0x8EF2,0x8EF3,0x8EF4,/* 0x48-0x4F */ + 0x8EF5,0x8EF6,0x8EF7,0x8EF8,0x8EF9,0x8EFA,0x8EFB,0x8EFC,/* 0x50-0x57 */ + 0x8EFD,0x8EFE,0x8EFF,0x8F00,0x8F01,0x8F02,0x8F03,0x8F04,/* 0x58-0x5F */ + 0x8F05,0x8F06,0x8F07,0x8F08,0x8F09,0x8F0A,0x8F0B,0x8F0C,/* 0x60-0x67 */ + 0x8F0D,0x8F0E,0x8F0F,0x8F10,0x8F11,0x8F12,0x8F13,0x8F14,/* 0x68-0x6F */ + 0x8F15,0x8F16,0x8F17,0x8F18,0x8F19,0x8F1A,0x8F1B,0x8F1C,/* 0x70-0x77 */ + 0x8F1D,0x8F1E,0x8F1F,0x8F20,0x8F21,0x8F22,0x8F23,0x0000,/* 0x78-0x7F */ + + 0x8F24,0x8F25,0xF998,0x8F27,0x8F28,0x8F29,0xF9D7,0x8F2B,/* 0x80-0x87 */ + 0x8F2C,0x8F2D,0x8F2E,0x8F2F,0x8F30,0x8F31,0x8F32,0x8F33,/* 0x88-0x8F */ + 0x8F34,0x8F35,0x8F36,0x8F37,0x8F38,0x8F39,0x8F3A,0xFA07,/* 0x90-0x97 */ + 0x8F3C,0x8F3D,0x8F3E,0x8F3F,0x8F40,0x8F41,0x8F42,0x8F43,/* 0x98-0x9F */ + 0x8F44,0x8368,0x831B,0x8369,0x836C,0x836A,0x836D,0x836E,/* 0xA0-0xA7 */ + 0x83B0,0x8378,0x83B3,0x83B4,0x83A0,0x83AA,0x8393,0x839C,/* 0xA8-0xAF */ + 0x8385,0x837C,0x83B6,0x83A9,0x837D,0x83B8,0x837B,0x8398,/* 0xB0-0xB7 */ + 0x839E,0x83A8,0x83BA,0x83BC,0x83C1,0x8401,0x83E5,0x83D8,/* 0xB8-0xBF */ + 0x5807,0x8418,0x840B,0x83DD,0x83FD,0x83D6,0x841C,0x8438,/* 0xC0-0xC7 */ + 0x8411,0x8406,0x83D4,0x83DF,0x840F,0x8403,0x83F8,0x83F9,/* 0xC8-0xCF */ + 0x83EA,0x83C5,0x83C0,0x8426,0x83F0,0x83E1,0x845C,0x8451,/* 0xD0-0xD7 */ + 0x845A,0x8459,0x8473,0x8487,0x8488,0x847A,0x8489,0x8478,/* 0xD8-0xDF */ + 0x843C,0x8446,0x8469,0x8476,0x848C,0x848E,0x8431,0x846D,/* 0xE0-0xE7 */ + 0x84C1,0x84CD,0x84D0,0x84E6,0x84BD,0x84D3,0x84CA,0x84BF,/* 0xE8-0xEF */ + 0x84BA,0x84E0,0x84A1,0x84B9,0x84B4,0x8497,0x84E5,0x84E3,/* 0xF0-0xF7 */ + 0x850C,0x750D,0x8538,0x84F0,0x8539,0x851F,0x853A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8F45,0x8F46,0x8F47,0x8F48,0x8F49,0x8F4A,0x8F4B,0x8F4C,/* 0x40-0x47 */ + 0x8F4D,0x8F4E,0x8F4F,0x8F50,0x8F51,0x8F52,0x8F53,0x8F54,/* 0x48-0x4F */ + 0x8F55,0x8F56,0x8F57,0x8F58,0x8F59,0x8F5A,0x8F5B,0x8F5C,/* 0x50-0x57 */ + 0x8F5D,0x8F5E,0x8F5F,0x8F60,0x8F61,0xF98D,0x8F63,0x8F64,/* 0x58-0x5F */ + 0x8F65,0x8F6A,0x8F80,0x8F8C,0x8F92,0x8F9D,0x8FA0,0x8FA1,/* 0x60-0x67 */ + 0x8FA2,0x8FA4,0x8FA5,0x8FA6,0x8FA7,0x8FAA,0x8FAC,0x8FAD,/* 0x68-0x6F */ + 0x8FAE,0x8FAF,0x8FB2,0x8FB3,0x8FB4,0x8FB5,0x8FB7,0x8FB8,/* 0x70-0x77 */ + 0x8FBA,0x8FBB,0x8FBC,0x8FBF,0x8FC0,0x8FC3,0x8FC6,0x0000,/* 0x78-0x7F */ + + 0x8FC9,0x8FCA,0x8FCB,0x8FCC,0x8FCD,0x8FCF,0x8FD2,0x8FD6,/* 0x80-0x87 */ + 0x8FD7,0x8FDA,0x8FE0,0x8FE1,0x8FE3,0x8FE7,0x8FEC,0x8FEF,/* 0x88-0x8F */ + 0x8FF1,0x8FF2,0x8FF4,0x8FF5,0x8FF6,0x8FFA,0x8FFB,0x8FFC,/* 0x90-0x97 */ + 0x8FFE,0x8FFF,0x9007,0x9008,0x900C,0x900E,0x9013,0x9015,/* 0x98-0x9F */ + 0x9018,0x8556,0x853B,0x84FF,0xF9C2,0x8559,0x8548,0x8568,/* 0xA0-0xA7 */ + 0x8564,0x855E,0x857A,0x77A2,0x8543,0x8572,0x857B,0x85A4,/* 0xA8-0xAF */ + 0x85A8,0x8587,0x858F,0x8579,0x85AE,0x859C,0x8585,0x85B9,/* 0xB0-0xB7 */ + 0x85B7,0x85B0,0x85D3,0x85C1,0x85DC,0x85FF,0x8627,0x8605,/* 0xB8-0xBF */ + 0x8629,0x8616,0x863C,0x5EFE,0x5F08,0x593C,0x5941,0x8037,/* 0xC0-0xC7 */ + 0x5955,0x595A,0x5958,0x530F,0x5C22,0x5C25,0x5C2C,0x5C34,/* 0xC8-0xCF */ + 0x624C,0x626A,0x629F,0x62BB,0x62CA,0x62DA,0x62D7,0x62EE,/* 0xD0-0xD7 */ + 0x6322,0x62F6,0x6339,0x634B,0x6343,0x63AD,0x63F6,0x6371,/* 0xD8-0xDF */ + 0x637A,0x638E,0x63B4,0x636D,0x63AC,0x638A,0x6369,0x63AE,/* 0xE0-0xE7 */ + 0x63BC,0x63F2,0x63F8,0x63E0,0x63FF,0x63C4,0x63DE,0x63CE,/* 0xE8-0xEF */ + 0x6452,0x63C6,0x63BE,0x6445,0x6441,0x640B,0x641B,0x6420,/* 0xF0-0xF7 */ + 0x640C,0x6426,0x6421,0x645E,0x6484,0x646D,0x6496,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9019,0x901C,0xF99A,0x9024,0x9025,0x9027,0x9028,0x9029,/* 0x40-0x47 */ + 0x902A,0x902B,0x902C,0x9030,0x9031,0x9032,0x9033,0x9034,/* 0x48-0x4F */ + 0x9037,0x9039,0x903A,0x903D,0x903F,0x9040,0x9043,0x9045,/* 0x50-0x57 */ + 0x9046,0x9048,0x9049,0x904A,0x904B,0x904C,0x904E,0x9054,/* 0x58-0x5F */ + 0x9055,0x9056,0x9059,0x905A,0x905C,0x905D,0x905E,0x905F,/* 0x60-0x67 */ + 0x9060,0x9061,0x9064,0x9066,0x9067,0x9069,0x906A,0x906B,/* 0x68-0x6F */ + 0x906C,0x906F,0x9070,0x9071,0x9072,0x9073,0x9076,0x9077,/* 0x70-0x77 */ + 0x9078,0x9079,0x907A,0x907B,0xF9C3,0x907E,0x9081,0x0000,/* 0x78-0x7F */ + + 0x9084,0x9085,0x9086,0x9087,0x9089,0x908A,0x908C,0x908D,/* 0x80-0x87 */ + 0x908E,0xF913,0x9090,0x9092,0x9094,0x9096,0x9098,0x909A,/* 0x88-0x8F */ + 0x909C,0x909E,0x909F,0x90A0,0x90A4,0x90A5,0x90A7,0x90A8,/* 0x90-0x97 */ + 0x90A9,0x90AB,0x90AD,0x90B2,0x90B7,0x90BC,0x90BD,0x90BF,/* 0x98-0x9F */ + 0x90C0,0x647A,0x64B7,0x64B8,0x6499,0x64BA,0x64C0,0x64D0,/* 0xA0-0xA7 */ + 0x64D7,0x64E4,0x64E2,0x6509,0x6525,0x652E,0x5F0B,0x5FD2,/* 0xA8-0xAF */ + 0x7519,0x5F11,0x535F,0x53F1,0x53FD,0x53E9,0x53E8,0x53FB,/* 0xB0-0xB7 */ + 0x5412,0x5416,0x5406,0x544B,0x5452,0x5453,0x5454,0x5456,/* 0xB8-0xBF */ + 0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,0x5494,/* 0xC0-0xC7 */ + 0x5477,0x5471,0x5464,0x549A,0x549B,0x5484,0x5476,0x5466,/* 0xC8-0xCF */ + 0x549D,0x54D0,0x54AD,0x54C2,0x54B4,0x54D2,0x54A7,0x54A6,/* 0xD0-0xD7 */ + 0x54D3,0x54D4,0x5472,0x54A3,0x54D5,0x54BB,0x54BF,0x54CC,/* 0xD8-0xDF */ + 0x54D9,0x54DA,0x54DC,0x54A9,0x54AA,0x54A4,0x54DD,0x54CF,/* 0xE0-0xE7 */ + 0x54DE,0x551B,0x54E7,0x5520,0x54FD,0x5514,0x54F3,0x5522,/* 0xE8-0xEF */ + 0x5523,0x550F,0x5511,0x5527,0x552A,0x5567,0x558F,0x55B5,/* 0xF0-0xF7 */ + 0x5549,0x556D,0x5541,0x5555,0x553F,0x5550,0x553C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x90C2,0x90C3,0x90C6,0x90C8,0x90C9,0x90CB,0x90CC,0x90CD,/* 0x40-0x47 */ + 0x90D2,0x90D4,0x90D5,0x90D6,0x90D8,0x90D9,0x90DA,0x90DE,/* 0x48-0x4F */ + 0x90DF,0x90E0,0x90E3,0x90E4,0x90E5,0x90E9,0x90EA,0x90EC,/* 0x50-0x57 */ + 0x90EE,0x90F0,0x90F1,0x90F2,0x90F3,0x90F5,0x90F6,0x90F7,/* 0x58-0x5F */ + 0x90F9,0x90FA,0x90FB,0x90FC,0x90FF,0x9100,0x9101,0x9103,/* 0x60-0x67 */ + 0x9105,0x9106,0x9107,0x9108,0x9109,0x910A,0x910B,0x910C,/* 0x68-0x6F */ + 0x910D,0x910E,0x910F,0x9110,0x9111,0x9112,0x9113,0x9114,/* 0x70-0x77 */ + 0x9115,0x9116,0x9117,0x9118,0x911A,0x911B,0x911C,0x0000,/* 0x78-0x7F */ + + 0x911D,0x911F,0x9120,0x9121,0x9124,0x9125,0x9126,0x9127,/* 0x80-0x87 */ + 0x9128,0x9129,0x912A,0x912B,0x912C,0x912D,0x912E,0x9130,/* 0x88-0x8F */ + 0x9132,0x9133,0x9134,0x9135,0x9136,0x9137,0x9138,0x913A,/* 0x90-0x97 */ + 0x913B,0x913C,0x913D,0x913E,0x913F,0x9140,0x9141,0x9142,/* 0x98-0x9F */ + 0x9144,0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530,/* 0xA0-0xA7 */ + 0x555C,0x558B,0x55D2,0x5583,0x55B1,0x55B9,0x5588,0x5581,/* 0xA8-0xAF */ + 0x559F,0x557E,0x55D6,0x5591,0x557B,0x55DF,0x55BD,0x55BE,/* 0xB0-0xB7 */ + 0x5594,0x5599,0x55EA,0x55F7,0x55C9,0x561F,0x55D1,0x55EB,/* 0xB8-0xBF */ + 0x55EC,0x55D4,0x55E6,0x55DD,0x55C4,0x55EF,0x55E5,0x55F2,/* 0xC0-0xC7 */ + 0x55F3,0x55CC,0x55CD,0x55E8,0x55F5,0x55E4,0x8F94,0x561E,/* 0xC8-0xCF */ + 0x5608,0x560C,0x5601,0x5624,0x5623,0x55FE,0x5600,0x5627,/* 0xD0-0xD7 */ + 0x562D,0x5658,0x5639,0x5657,0x562C,0x564D,0x5662,0x5659,/* 0xD8-0xDF */ + 0x565C,0x564C,0x5654,0x5686,0x5664,0x5671,0x566B,0x567B,/* 0xE0-0xE7 */ + 0x567C,0x5685,0x5693,0x56AF,0x56D4,0x56D7,0x56DD,0x56E1,/* 0xE8-0xEF */ + 0x56F5,0x56EB,0xF9A9,0x56FF,0x5704,0x570A,0x5709,0x571C,/* 0xF0-0xF7 */ + 0x5E0F,0x5E19,0x5E14,0x5E11,0x5E31,0x5E3B,0x5E3C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9145,0x9147,0x9148,0x9151,0x9153,0x9154,0x9155,0x9156,/* 0x40-0x47 */ + 0x9158,0x9159,0x915B,0x915C,0x915F,0x9160,0x9166,0x9167,/* 0x48-0x4F */ + 0x9168,0x916B,0x916D,0x9173,0x917A,0x917B,0x917C,0x9180,/* 0x50-0x57 */ + 0x9181,0x9182,0x9183,0x9184,0x9186,0x9188,0x918A,0x918E,/* 0x58-0x5F */ + 0x918F,0x9193,0x9194,0x9195,0x9196,0x9197,0x9198,0x9199,/* 0x60-0x67 */ + 0x919C,0x919D,0x919E,0x919F,0x91A0,0x91A1,0x91A4,0x91A5,/* 0x68-0x6F */ + 0x91A6,0x91A7,0x91A8,0x91A9,0x91AB,0x91AC,0x91B0,0x91B1,/* 0x70-0x77 */ + 0x91B2,0x91B3,0x91B6,0x91B7,0x91B8,0x91B9,0x91BB,0x0000,/* 0x78-0x7F */ + + 0x91BC,0x91BD,0x91BE,0x91BF,0x91C0,0x91C1,0x91C2,0x91C3,/* 0x80-0x87 */ + 0x91C4,0x91C5,0x91C6,0x91C8,0x91CB,0x91D0,0x91D2,0x91D3,/* 0x88-0x8F */ + 0x91D4,0x91D5,0x91D6,0x91D7,0x91D8,0x91D9,0x91DA,0x91DB,/* 0x90-0x97 */ + 0x91DD,0x91DE,0x91DF,0x91E0,0x91E1,0x91E2,0x91E3,0x91E4,/* 0x98-0x9F */ + 0x91E5,0x5E37,0x5E44,0x5E54,0x5E5B,0x5E5E,0x5E61,0x5C8C,/* 0xA0-0xA7 */ + 0x5C7A,0x5C8D,0x5C90,0x5C96,0x5C88,0x5C98,0x5C99,0x5C91,/* 0xA8-0xAF */ + 0x5C9A,0x5C9C,0x5CB5,0x5CA2,0x5CBD,0x5CAC,0x5CAB,0x5CB1,/* 0xB0-0xB7 */ + 0x5CA3,0x5CC1,0x5CB7,0x5CC4,0x5CD2,0x5CE4,0x5CCB,0x5CE5,/* 0xB8-0xBF */ + 0x5D02,0x5D03,0x5D27,0x5D26,0x5D2E,0x5D24,0x5D1E,0x5D06,/* 0xC0-0xC7 */ + 0x5D1B,0x5D58,0x5D3E,0x5D34,0x5D3D,0x5D6C,0x5D5B,0x5D6F,/* 0xC8-0xCF */ + 0x5D5D,0x5D6B,0x5D4B,0x5D4A,0x5D69,0x5D74,0x5D82,0x5D99,/* 0xD0-0xD7 */ + 0x5D9D,0x8C73,0x5DB7,0x5DC5,0x5F73,0x5F77,0x5F82,0x5F87,/* 0xD8-0xDF */ + 0x5F89,0x5F8C,0x5F95,0x5F99,0x5F9C,0x5FA8,0x5FAD,0x5FB5,/* 0xE0-0xE7 */ + 0x5FBC,0x8862,0x5F61,0x72AD,0x72B0,0x72B4,0x72B7,0x72B8,/* 0xE8-0xEF */ + 0x72C3,0x72C1,0x72CE,0x72CD,0x72D2,0x72E8,0x72EF,0x72E9,/* 0xF0-0xF7 */ + 0x72F2,0x72F4,0x72F7,0x7301,0x72F3,0x7303,0x72FA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x91E6,0x91E7,0x91E8,0x91E9,0x91EA,0x91EB,0x91EC,0x91ED,/* 0x40-0x47 */ + 0x91EE,0x91EF,0x91F0,0x91F1,0x91F2,0x91F3,0x91F4,0x91F5,/* 0x48-0x4F */ + 0x91F6,0x91F7,0x91F8,0x91F9,0x91FA,0x91FB,0x91FC,0x91FD,/* 0x50-0x57 */ + 0x91FE,0x91FF,0x9200,0x9201,0x9202,0x9203,0x9204,0x9205,/* 0x58-0x5F */ + 0x9206,0x9207,0x9208,0x9209,0x920A,0x920B,0x920C,0x920D,/* 0x60-0x67 */ + 0x920E,0x920F,0x9210,0x9211,0x9212,0x9213,0x9214,0x9215,/* 0x68-0x6F */ + 0x9216,0x9217,0x9218,0x9219,0x921A,0x921B,0x921C,0x921D,/* 0x70-0x77 */ + 0x921E,0x921F,0x9220,0x9221,0x9222,0x9223,0x9224,0x0000,/* 0x78-0x7F */ + + 0x9225,0x9226,0x9227,0x9228,0x9229,0x922A,0x922B,0x922C,/* 0x80-0x87 */ + 0x922D,0x922E,0x922F,0x9230,0x9231,0x9232,0x9233,0xF9B1,/* 0x88-0x8F */ + 0x9235,0x9236,0x9237,0x9238,0x9239,0x923A,0x923B,0x923C,/* 0x90-0x97 */ + 0x923D,0x923E,0x923F,0x9240,0x9241,0x9242,0x9243,0x9244,/* 0x98-0x9F */ + 0x9245,0x72FB,0x7317,0x7313,0x7321,0x730A,0x731E,0x731D,/* 0xA0-0xA7 */ + 0x7315,0x7322,0x7339,0x7325,0x732C,0x7338,0x7331,0x7350,/* 0xA8-0xAF */ + 0x734D,0x7357,0x7360,0x736C,0x736F,0x737E,0x821B,0x5925,/* 0xB0-0xB7 */ + 0x98E7,0x5924,0x5902,0x9963,0x9967,0x9968,0x9969,0x996A,/* 0xB8-0xBF */ + 0x996B,0x996C,0x9974,0x9977,0x997D,0x9980,0x9984,0x9987,/* 0xC0-0xC7 */ + 0x998A,0x998D,0x9990,0x9991,0x9993,0x9994,0x9995,0x5E80,/* 0xC8-0xCF */ + 0x5E91,0x5E8B,0x5E96,0x5EA5,0x5EA0,0x5EB9,0x5EB5,0x5EBE,/* 0xD0-0xD7 */ + 0x5EB3,0x8D53,0x5ED2,0x5ED1,0x5EDB,0x5EE8,0x5EEA,0x81BA,/* 0xD8-0xDF */ + 0x5FC4,0x5FC9,0x5FD6,0x5FCF,0x6003,0x5FEE,0x6004,0x5FE1,/* 0xE0-0xE7 */ + 0x5FE4,0x5FFE,0x6005,0x6006,0x5FEA,0x5FED,0x5FF8,0x6019,/* 0xE8-0xEF */ + 0x6035,0x6026,0x601B,0x600F,0x600D,0x6029,0x602B,0x600A,/* 0xF0-0xF7 */ + 0x603F,0x6021,0x6078,0x6079,0x607B,0x607A,0x6042,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9246,0x9247,0x9248,0x9249,0x924A,0x924B,0x924C,0x924D,/* 0x40-0x47 */ + 0x924E,0x924F,0x9250,0x9251,0x9252,0x9253,0x9254,0x9255,/* 0x48-0x4F */ + 0x9256,0x9257,0x9258,0x9259,0x925A,0x925B,0x925C,0x925D,/* 0x50-0x57 */ + 0x925E,0x925F,0x9260,0x9261,0x9262,0x9263,0x9264,0x9265,/* 0x58-0x5F */ + 0x9266,0x9267,0x9268,0x9269,0x926A,0x926B,0x926C,0x926D,/* 0x60-0x67 */ + 0x926E,0x926F,0x9270,0x9271,0x9272,0x9273,0x9275,0x9276,/* 0x68-0x6F */ + 0x9277,0x9278,0x9279,0x927A,0x927B,0x927C,0x927D,0x927E,/* 0x70-0x77 */ + 0x927F,0x9280,0x9281,0x9282,0x9283,0x9284,0x9285,0x0000,/* 0x78-0x7F */ + + 0x9286,0x9287,0x9288,0x9289,0x928A,0x928B,0x928C,0x928D,/* 0x80-0x87 */ + 0x928F,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296,/* 0x88-0x8F */ + 0x9297,0x9298,0x9299,0x929A,0x929B,0x929C,0x929D,0x929E,/* 0x90-0x97 */ + 0x929F,0x92A0,0x92A1,0x92A2,0x92A3,0x92A4,0x92A5,0x92A6,/* 0x98-0x9F */ + 0x92A7,0x606A,0x607D,0x6096,0x609A,0x60AD,0x609D,0x6083,/* 0xA0-0xA7 */ + 0x6092,0x608C,0x609B,0x60EC,0x60BB,0x60B1,0x60DD,0x60D8,/* 0xA8-0xAF */ + 0x60C6,0x60DA,0x60B4,0x6120,0x6126,0x6115,0x6123,0x60F4,/* 0xB0-0xB7 */ + 0x6100,0x610E,0x612B,0x614A,0x6175,0x61AC,0x6194,0x61A7,/* 0xB8-0xBF */ + 0x61B7,0x61D4,0x61F5,0x5FDD,0x96B3,0x95E9,0x95EB,0x95F1,/* 0xC0-0xC7 */ + 0x95F3,0x95F5,0x95F6,0x95FC,0x95FE,0x9603,0x9604,0x9606,/* 0xC8-0xCF */ + 0x9608,0x960A,0x960B,0x960C,0x960D,0x960F,0x9612,0x9615,/* 0xD0-0xD7 */ + 0x9616,0x9617,0x9619,0x961A,0x4E2C,0x723F,0x6215,0x6C35,/* 0xD8-0xDF */ + 0x6C54,0x6C5C,0x6C4A,0x6CA3,0x6C85,0x6C90,0x6C94,0x6C8C,/* 0xE0-0xE7 */ + 0x6C68,0x6C69,0x6C74,0x6C76,0x6C86,0x6CA9,0x6CD0,0x6CD4,/* 0xE8-0xEF */ + 0x6CAD,0x6CF7,0x6CF8,0x6CF1,0x6CD7,0x6CB2,0x6CE0,0x6CD6,/* 0xF0-0xF7 */ + 0x6CFA,0x6CEB,0x6CEE,0x6CB1,0x6CD3,0x6CEF,0x6CFE,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x92A8,0x92A9,0x92AA,0x92AB,0x92AC,0x92AD,0x92AF,0x92B0,/* 0x40-0x47 */ + 0x92B1,0x92B2,0x92B3,0x92B4,0x92B5,0x92B6,0x92B7,0x92B8,/* 0x48-0x4F */ + 0x92B9,0x92BA,0x92BB,0x92BC,0x92BD,0x92BE,0x92BF,0x92C0,/* 0x50-0x57 */ + 0x92C1,0x92C2,0x92C3,0x92C4,0x92C5,0x92C6,0x92C7,0x92C9,/* 0x58-0x5F */ + 0x92CA,0x92CB,0x92CC,0x92CD,0x92CE,0x92CF,0x92D0,0x92D1,/* 0x60-0x67 */ + 0x92D2,0x92D3,0x92D4,0x92D5,0x92D6,0x92D7,0x92D8,0x92D9,/* 0x68-0x6F */ + 0x92DA,0x92DB,0x92DC,0x92DD,0x92DE,0x92DF,0x92E0,0x92E1,/* 0x70-0x77 */ + 0x92E2,0x92E3,0x92E4,0x92E5,0x92E6,0x92E7,0x92E8,0x0000,/* 0x78-0x7F */ + + 0x92E9,0x92EA,0x92EB,0x92EC,0x92ED,0x92EE,0x92EF,0x92F0,/* 0x80-0x87 */ + 0x92F1,0x92F2,0x92F3,0x92F4,0x92F5,0x92F6,0x92F7,0x92F8,/* 0x88-0x8F */ + 0x92F9,0x92FA,0x92FB,0x92FC,0x92FD,0x92FE,0x92FF,0x9300,/* 0x90-0x97 */ + 0x9301,0x9302,0x9303,0xF93F,0x9305,0x9306,0x9307,0x9308,/* 0x98-0x9F */ + 0x9309,0x6D39,0x6D27,0x6D0C,0x6D43,0x6D48,0x6D07,0x6D04,/* 0xA0-0xA7 */ + 0x6D19,0x6D0E,0x6D2B,0x6D4D,0x6D2E,0x6D35,0x6D1A,0x6D4F,/* 0xA8-0xAF */ + 0x6D52,0x6D54,0x6D33,0x6D91,0x6D6F,0x6D9E,0x6DA0,0x6D5E,/* 0xB0-0xB7 */ + 0x6D93,0x6D94,0x6D5C,0x6D60,0x6D7C,0x6D63,0x6E1A,0x6DC7,/* 0xB8-0xBF */ + 0x6DC5,0x6DDE,0x6E0E,0x6DBF,0x6DE0,0x6E11,0x6DE6,0x6DDD,/* 0xC0-0xC7 */ + 0x6DD9,0x6E16,0x6DAB,0x6E0C,0x6DAE,0x6E2B,0x6E6E,0x6E4E,/* 0xC8-0xCF */ + 0x6E6B,0x6EB2,0x6E5F,0x6E86,0x6E53,0x6E54,0x6E32,0x6E25,/* 0xD0-0xD7 */ + 0x6E44,0x6EDF,0x6EB1,0x6E98,0x6EE0,0x6F2D,0x6EE2,0x6EA5,/* 0xD8-0xDF */ + 0x6EA7,0x6EBD,0x6EBB,0x6EB7,0x6ED7,0x6EB4,0x6ECF,0x6E8F,/* 0xE0-0xE7 */ + 0x6EC2,0x6E9F,0x6F62,0x6F46,0x6F47,0x6F24,0x6F15,0x6EF9,/* 0xE8-0xEF */ + 0x6F2F,0x6F36,0x6F4B,0x6F74,0x6F2A,0x6F09,0x6F29,0x6F89,/* 0xF0-0xF7 */ + 0x6F8D,0x6F8C,0x6F78,0x6F72,0x6F7C,0x6F7A,0x6FD1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x930A,0x930B,0x930C,0x930D,0x930E,0x930F,0x9310,0x9311,/* 0x40-0x47 */ + 0x9312,0x9313,0x9314,0x9315,0x9316,0x9317,0x9318,0x9319,/* 0x48-0x4F */ + 0x931A,0x931B,0x931C,0x931D,0x931E,0x931F,0x9320,0x9321,/* 0x50-0x57 */ + 0x9322,0x9323,0x9324,0x9325,0x9326,0x9327,0x9328,0x9329,/* 0x58-0x5F */ + 0x932A,0x932B,0x932C,0x932D,0x932E,0x932F,0x9330,0x9331,/* 0x60-0x67 */ + 0x9332,0x9333,0x9334,0x9335,0x9336,0x9337,0x9338,0x9339,/* 0x68-0x6F */ + 0x933A,0x933B,0x933C,0x933D,0x933F,0x9340,0x9341,0x9342,/* 0x70-0x77 */ + 0x9343,0x9344,0x9345,0x9346,0x9347,0x9348,0x9349,0x0000,/* 0x78-0x7F */ + + 0xF99B,0x934B,0x934C,0x934D,0x934E,0x934F,0x9350,0x9351,/* 0x80-0x87 */ + 0x9352,0x9353,0x9354,0x9355,0x9356,0x9357,0x9358,0x9359,/* 0x88-0x8F */ + 0x935A,0x935B,0x935C,0x935D,0x935E,0x935F,0x9360,0x9361,/* 0x90-0x97 */ + 0x9362,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369,/* 0x98-0x9F */ + 0x936B,0x6FC9,0x6FA7,0x6FB9,0x6FB6,0x6FC2,0x6FE1,0x6FEE,/* 0xA0-0xA7 */ + 0x6FDE,0x6FE0,0x6FEF,0x701A,0x7023,0x701B,0x7039,0x7035,/* 0xA8-0xAF */ + 0x704F,0x705E,0x5B80,0x5B84,0x5B95,0x5B93,0x5BA5,0x5BB8,/* 0xB0-0xB7 */ + 0x752F,0x9A9E,0x6434,0x5BE4,0xF9BC,0x8930,0x5BF0,0x8E47,/* 0xB8-0xBF */ + 0x8B07,0x8FB6,0x8FD3,0x8FD5,0x8FE5,0x8FEE,0x8FE4,0x8FE9,/* 0xC0-0xC7 */ + 0x8FE6,0x8FF3,0x8FE8,0x9005,0x9004,0x900B,0x9026,0x9011,/* 0xC8-0xCF */ + 0x900D,0x9016,0x9021,0x9035,0x9036,0x902D,0x902F,0x9044,/* 0xD0-0xD7 */ + 0x9051,0x9052,0x9050,0x9068,0x9058,0x9062,0x905B,0x66B9,/* 0xD8-0xDF */ + 0x9074,0x907D,0x9082,0x9088,0x9083,0x908B,0x5F50,0x5F57,/* 0xE0-0xE7 */ + 0x5F56,0x5F58,0x5C3B,0x54AB,0x5C50,0x5C59,0x5B71,0x5C63,/* 0xE8-0xEF */ + 0x5C66,0x7FBC,0x5F2A,0x5F29,0x5F2D,0x8274,0x5F3C,0x9B3B,/* 0xF0-0xF7 */ + 0x5C6E,0x5981,0x5983,0x598D,0x59A9,0x59AA,0x59A3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x936C,0x936D,0x936E,0x936F,0x9370,0x9371,0x9372,0x9373,/* 0x40-0x47 */ + 0x9374,0x9375,0x9376,0x9377,0x9378,0x9379,0x937A,0x937B,/* 0x48-0x4F */ + 0x937C,0x937D,0x937E,0x937F,0x9380,0x9381,0x9382,0x9383,/* 0x50-0x57 */ + 0x9384,0x9385,0x9386,0x9387,0x9388,0x9389,0x938A,0x938B,/* 0x58-0x5F */ + 0x938C,0x938D,0x938E,0x9390,0x9391,0x9392,0x9393,0x9394,/* 0x60-0x67 */ + 0x9395,0x9396,0x9397,0x9398,0x9399,0x939A,0x939B,0x939C,/* 0x68-0x6F */ + 0x939D,0x939E,0x939F,0x93A0,0x93A1,0x93A2,0x93A3,0x93A4,/* 0x70-0x77 */ + 0x93A5,0x93A6,0x93A7,0x93A8,0x93A9,0x93AA,0x93AB,0x0000,/* 0x78-0x7F */ + + 0x93AC,0x93AD,0x93AE,0x93AF,0x93B0,0x93B1,0x93B2,0x93B3,/* 0x80-0x87 */ + 0x93B4,0x93B5,0x93B6,0x93B7,0x93B8,0x93B9,0x93BA,0x93BB,/* 0x88-0x8F */ + 0x93BC,0x93BD,0x93BE,0x93BF,0x93C0,0x93C1,0x93C2,0x93C3,/* 0x90-0x97 */ + 0x93C4,0x93C5,0x93C6,0x93C7,0x93C8,0x93C9,0x93CB,0x93CC,/* 0x98-0x9F */ + 0x93CD,0x5997,0x59CA,0x59AB,0x599E,0x59A4,0x59D2,0x59B2,/* 0xA0-0xA7 */ + 0x59AF,0x59D7,0x59BE,0x5A05,0x5A06,0x59DD,0x5A08,0x59E3,/* 0xA8-0xAF */ + 0x59D8,0x59F9,0x5A0C,0x5A09,0x5A32,0x5A34,0x5A11,0x5A23,/* 0xB0-0xB7 */ + 0x5A13,0x5A40,0x5A67,0x5A4A,0x5A55,0x5A3C,0x5A62,0x5A75,/* 0xB8-0xBF */ + 0x80EC,0x5AAA,0x5A9B,0x5A77,0x5A7A,0x5ABE,0x5AEB,0x5AB2,/* 0xC0-0xC7 */ + 0x5AD2,0x5AD4,0x5AB8,0x5AE0,0x5AE3,0x5AF1,0x5AD6,0x5AE6,/* 0xC8-0xCF */ + 0x5AD8,0x5ADC,0x5B09,0x5B17,0x5B16,0x5B32,0x5B37,0x5B40,/* 0xD0-0xD7 */ + 0x5C15,0x5C1C,0x5B5A,0x5B65,0x5B73,0x5B51,0x5B53,0x5B62,/* 0xD8-0xDF */ + 0x9A75,0x9A77,0x9A78,0x9A7A,0x9A7F,0x9A7D,0x9A80,0x9A81,/* 0xE0-0xE7 */ + 0x9A85,0x9A88,0x9A8A,0x9A90,0x9A92,0x9A93,0x9A96,0x9A98,/* 0xE8-0xEF */ + 0x9A9B,0x9A9C,0x9A9D,0x9A9F,0x9AA0,0x9AA2,0x9AA3,0x9AA5,/* 0xF0-0xF7 */ + 0x9AA7,0x7E9F,0x7EA1,0x7EA3,0x7EA5,0x7EA8,0x7EA9,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x93CE,0x93CF,0x93D0,0x93D1,0x93D2,0x93D3,0x93D4,0x93D5,/* 0x40-0x47 */ + 0x93D7,0x93D8,0x93D9,0x93DA,0x93DB,0x93DC,0x93DD,0x93DE,/* 0x48-0x4F */ + 0x93DF,0x93E0,0x93E1,0x93E2,0x93E3,0x93E4,0x93E5,0x93E6,/* 0x50-0x57 */ + 0x93E7,0x93E8,0x93E9,0x93EA,0x93EB,0x93EC,0x93ED,0x93EE,/* 0x58-0x5F */ + 0x93EF,0x93F0,0x93F1,0x93F2,0x93F3,0x93F4,0x93F5,0x93F6,/* 0x60-0x67 */ + 0x93F7,0x93F8,0x93F9,0x93FA,0x93FB,0x93FC,0x93FD,0x93FE,/* 0x68-0x6F */ + 0x93FF,0x9400,0x9401,0x9402,0x9403,0x9404,0x9405,0x9406,/* 0x70-0x77 */ + 0x9407,0x9408,0x9409,0x940A,0x940B,0x940C,0x940D,0x0000,/* 0x78-0x7F */ + + 0x940E,0x940F,0x9410,0x9411,0x9412,0x9413,0x9414,0x9415,/* 0x80-0x87 */ + 0x9416,0x9417,0x9418,0x9419,0x941A,0x941B,0x941C,0x941D,/* 0x88-0x8F */ + 0x941E,0x941F,0x9420,0x9421,0x9422,0x9423,0x9424,0x9425,/* 0x90-0x97 */ + 0x9426,0x9427,0x9428,0x9429,0x942A,0x942B,0x942C,0x942D,/* 0x98-0x9F */ + 0x942E,0x7EAD,0x7EB0,0x7EBE,0x7EC0,0x7EC1,0x7EC2,0x7EC9,/* 0xA0-0xA7 */ + 0x7ECB,0x7ECC,0x7ED0,0x7ED4,0x7ED7,0x7EDB,0x7EE0,0x7EE1,/* 0xA8-0xAF */ + 0x7EE8,0x7EEB,0x7EEE,0x7EEF,0x7EF1,0x7EF2,0x7F0D,0x7EF6,/* 0xB0-0xB7 */ + 0x7EFA,0x7EFB,0x7EFE,0x7F01,0x7F02,0x7F03,0x7F07,0x7F08,/* 0xB8-0xBF */ + 0x7F0B,0x7F0C,0x7F0F,0x7F11,0x7F12,0x7F17,0x7F19,0x7F1C,/* 0xC0-0xC7 */ + 0x7F1B,0x7F1F,0x7F21,0x7F22,0x7F23,0x7F24,0x7F25,0x7F26,/* 0xC8-0xCF */ + 0x7F27,0x7F2A,0x7F2B,0x7F2C,0x7F2D,0x7F2F,0x7F30,0x7F31,/* 0xD0-0xD7 */ + 0x7F32,0x7F33,0x7F35,0x5E7A,0x757F,0x5DDB,0x753E,0x9095,/* 0xD8-0xDF */ + 0x738E,0x7391,0x73AE,0x73A2,0x739F,0x73CF,0x73C2,0x73D1,/* 0xE0-0xE7 */ + 0x73B7,0x73B3,0x73C0,0x73C9,0x73C8,0x73E5,0x73D9,0x987C,/* 0xE8-0xEF */ + 0x740A,0x73E9,0x73E7,0xF917,0x73BA,0x73F2,0x740F,0x742A,/* 0xF0-0xF7 */ + 0x745B,0x7426,0x7425,0x7428,0x7430,0x742E,0x742C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x942F,0x9430,0x9431,0x9432,0x9433,0x9434,0x9435,0x9436,/* 0x40-0x47 */ + 0x9437,0x9438,0x9439,0x943A,0x943B,0x943C,0x943D,0x943F,/* 0x48-0x4F */ + 0x9440,0x9441,0x9442,0x9443,0x9444,0x9445,0x9446,0x9447,/* 0x50-0x57 */ + 0x9448,0x9449,0x944A,0x944B,0x944C,0x944D,0x944E,0x944F,/* 0x58-0x5F */ + 0x9450,0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,/* 0x60-0x67 */ + 0x9458,0x9459,0x945A,0x945B,0x945C,0x945D,0x945E,0x945F,/* 0x68-0x6F */ + 0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467,/* 0x70-0x77 */ + 0x9468,0x9469,0x946A,0x946C,0x946D,0x946E,0x946F,0x0000,/* 0x78-0x7F */ + + 0x9470,0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,/* 0x80-0x87 */ + 0x9478,0x9479,0x947A,0x947B,0x947C,0x947D,0x947E,0x947F,/* 0x88-0x8F */ + 0x9480,0x9481,0x9482,0x9483,0x9484,0x9491,0x9496,0x9498,/* 0x90-0x97 */ + 0x94C7,0x94CF,0x94D3,0x94D4,0x94DA,0x94E6,0x94FB,0x951C,/* 0x98-0x9F */ + 0x9520,0x741B,0x741A,0x7441,0x745C,0x7457,0x7455,0x7459,/* 0xA0-0xA7 */ + 0x7477,0x746D,0x747E,0x749C,0x748E,0x7480,0x7481,0x7487,/* 0xA8-0xAF */ + 0x748B,0x749E,0x74A8,0x74A9,0x7490,0x74A7,0x74D2,0x74BA,/* 0xB0-0xB7 */ + 0x97EA,0x97EB,0x97EC,0x674C,0x6753,0x675E,0x6748,0x6769,/* 0xB8-0xBF */ + 0x67A5,0x6787,0x676A,0x6773,0x6798,0x67A7,0x6775,0x67A8,/* 0xC0-0xC7 */ + 0x679E,0x67AD,0x678B,0x6777,0x677C,0x67F0,0x6809,0x67D8,/* 0xC8-0xCF */ + 0x680A,0x67E9,0x67B0,0x680C,0x67D9,0x67B5,0x67DA,0x67B3,/* 0xD0-0xD7 */ + 0x67DD,0x6800,0x67C3,0x67B8,0x67E2,0x680E,0x67C1,0x67FD,/* 0xD8-0xDF */ + 0x6832,0x6833,0x6860,0x6861,0x684E,0x6862,0x6844,0x6864,/* 0xE0-0xE7 */ + 0x6883,0x681D,0x6855,0x6866,0x6841,0x6867,0x6840,0x683E,/* 0xE8-0xEF */ + 0x684A,0x6849,0x6829,0x68B5,0x688F,0x6874,0x6877,0x6893,/* 0xF0-0xF7 */ + 0x686B,0x68C2,0x696E,0x68FC,0x691F,0x6920,0x68F9,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9527,0x9533,0x953D,0x9543,0x9548,0x954B,0x9555,0x955A,/* 0x40-0x47 */ + 0x9560,0x956E,0x9574,0x9575,0x9577,0x9578,0x9579,0x957A,/* 0x48-0x4F */ + 0x957B,0x957C,0x957D,0x957E,0x9580,0x9581,0x9582,0x9583,/* 0x50-0x57 */ + 0x9584,0x9585,0x9586,0x9587,0x9588,0x9589,0x958A,0x958B,/* 0x58-0x5F */ + 0x958C,0x958D,0x958E,0x958F,0x9590,0x9591,0x9592,0x9593,/* 0x60-0x67 */ + 0x9594,0x9595,0x9596,0x9597,0x9598,0x9599,0x959A,0x959B,/* 0x68-0x6F */ + 0x959C,0x959D,0x959E,0x959F,0x95A0,0x95A1,0x95A2,0x95A3,/* 0x70-0x77 */ + 0x95A4,0x95A5,0x95A6,0x95A7,0x95A8,0x95A9,0x95AA,0x0000,/* 0x78-0x7F */ + + 0x95AB,0x95AC,0xF986,0x95AE,0x95AF,0x95B0,0x95B1,0x95B2,/* 0x80-0x87 */ + 0x95B3,0x95B4,0x95B5,0x95B6,0x95B7,0x95B8,0x95B9,0x95BA,/* 0x88-0x8F */ + 0x95BB,0x95BC,0x95BD,0x95BE,0x95BF,0x95C0,0x95C1,0x95C2,/* 0x90-0x97 */ + 0x95C3,0x95C4,0x95C5,0x95C6,0x95C7,0x95C8,0x95C9,0x95CA,/* 0x98-0x9F */ + 0x95CB,0x6924,0x68F0,0x690B,0x6901,0x6957,0x68E3,0x6910,/* 0xA0-0xA7 */ + 0x6971,0x6939,0x6960,0x6942,0x695D,0x6984,0x696B,0x6980,/* 0xA8-0xAF */ + 0x6998,0x6978,0x6934,0x69CC,0x6987,0x6988,0x69CE,0x6989,/* 0xB0-0xB7 */ + 0x6966,0x6963,0x6979,0x699B,0x69A7,0x69BB,0x69AB,0x69AD,/* 0xB8-0xBF */ + 0x69D4,0x69B1,0x69C1,0x69CA,0x69DF,0x6995,0x69E0,0x698D,/* 0xC0-0xC7 */ + 0x69FF,0x6A2F,0x69ED,0x6A17,0x6A18,0x6A65,0x69F2,0x6A44,/* 0xC8-0xCF */ + 0x6A3E,0x6AA0,0x6A50,0x6A5B,0x6A35,0x6A8E,0x6A79,0x6A3D,/* 0xD0-0xD7 */ + 0x6A28,0x6A58,0x6A7C,0x6A91,0x6A90,0x6AA9,0x6A97,0x6AAB,/* 0xD8-0xDF */ + 0x7337,0x7352,0x6B81,0x6B82,0x6B87,0x6B84,0x6B92,0x6B93,/* 0xE0-0xE7 */ + 0x6B8D,0x6B9A,0x6B9B,0x6BA1,0x6BAA,0x8F6B,0x8F6D,0x8F71,/* 0xE8-0xEF */ + 0x8F72,0x8F73,0x8F75,0x8F76,0x8F78,0x8F77,0x8F79,0x8F7A,/* 0xF0-0xF7 */ + 0x8F7C,0x8F7E,0x8F81,0x8F82,0x8F84,0x8F87,0x8F8B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x95CC,0x95CD,0x95CE,0x95CF,0x95D0,0x95D1,0x95D2,0x95D3,/* 0x40-0x47 */ + 0x95D4,0x95D5,0x95D6,0x95D7,0x95D8,0x95D9,0x95DA,0x95DB,/* 0x48-0x4F */ + 0x95DC,0x95DD,0x95DE,0x95DF,0x95E0,0x95E1,0x95E2,0x95E3,/* 0x50-0x57 */ + 0x95E4,0x95E5,0x95E6,0x95E7,0x95EC,0x95FF,0x9607,0x9613,/* 0x58-0x5F */ + 0x9618,0x961B,0x961E,0x9620,0x9623,0x9624,0x9625,0x9626,/* 0x60-0x67 */ + 0x9627,0x9628,0x9629,0x962B,0x962C,0x962D,0x962F,0x9630,/* 0x68-0x6F */ + 0x9637,0x9638,0x9639,0x963A,0x963E,0x9641,0x9643,0x964A,/* 0x70-0x77 */ + 0x964E,0x964F,0x9651,0x9652,0x9653,0x9656,0x9657,0x0000,/* 0x78-0x7F */ + + 0x9658,0x9659,0x965A,0x965C,0x965D,0x965E,0x9660,0x9663,/* 0x80-0x87 */ + 0x9665,0x9666,0x966B,0x966D,0x966E,0x966F,0x9670,0x9671,/* 0x88-0x8F */ + 0x9673,0xF9D3,0x9679,0x967A,0x967B,0x967C,0x967D,0x967E,/* 0x90-0x97 */ + 0x967F,0x9680,0x9681,0x9682,0x9683,0x9684,0x9687,0x9689,/* 0x98-0x9F */ + 0x968A,0x8F8D,0x8F8E,0x8F8F,0x8F98,0x8F9A,0x8ECE,0x620B,/* 0xA0-0xA7 */ + 0x6217,0x621B,0x621F,0x6222,0x6221,0x6225,0x6224,0x622C,/* 0xA8-0xAF */ + 0x81E7,0x74EF,0x74F4,0x74FF,0x750F,0x7511,0x7513,0x6534,/* 0xB0-0xB7 */ + 0x65EE,0x65EF,0x65F0,0x660A,0x6619,0x6772,0x6603,0x6615,/* 0xB8-0xBF */ + 0x6600,0x7085,0x66F7,0x661D,0x6634,0x6631,0x6636,0x6635,/* 0xC0-0xC7 */ + 0x8006,0x665F,0x6654,0x6641,0x664F,0x6656,0x6661,0x6657,/* 0xC8-0xCF */ + 0x6677,0x6684,0x668C,0x66A7,0x669D,0x66BE,0x66DB,0x66DC,/* 0xD0-0xD7 */ + 0x66E6,0x66E9,0x8D32,0x8D33,0x8D36,0x8D3B,0x8D3D,0x8D40,/* 0xD8-0xDF */ + 0x8D45,0x8D46,0x8D48,0x8D49,0x8D47,0x8D4D,0x8D55,0x8D59,/* 0xE0-0xE7 */ + 0x89C7,0x89CA,0x89CB,0x89CC,0x89CE,0x89CF,0x89D0,0x89D1,/* 0xE8-0xEF */ + 0x726E,0x729F,0x725D,0x7266,0x726F,0x727E,0x727F,0x7284,/* 0xF0-0xF7 */ + 0x728B,0x728D,0x728F,0x7292,0x6308,0x6332,0x63B0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x968C,0x968E,0x9691,0x9692,0x9693,0x9695,0x9696,0x969A,/* 0x40-0x47 */ + 0x969B,0x969D,0x969E,0x969F,0x96A0,0x96A1,0x96A2,0x96A3,/* 0x48-0x4F */ + 0x96A4,0x96A5,0x96A6,0x96A8,0x96A9,0x96AA,0x96AB,0x96AC,/* 0x50-0x57 */ + 0x96AD,0x96AE,0x96AF,0x96B1,0x96B2,0x96B4,0x96B5,0x96B7,/* 0x58-0x5F */ + 0xF9B8,0x96BA,0x96BB,0x96BF,0x96C2,0x96C3,0x96C8,0x96CA,/* 0x60-0x67 */ + 0x96CB,0x96D0,0x96D1,0x96D3,0x96D4,0x96D6,0x96D7,0x96D8,/* 0x68-0x6F */ + 0x96D9,0x96DA,0x96DB,0x96DC,0x96DD,0x96DE,0x96DF,0x96E1,/* 0x70-0x77 */ + 0xF9EA,0x96E3,0x96E4,0x96E5,0x96E6,0x96E7,0x96EB,0x0000,/* 0x78-0x7F */ + + 0x96EC,0x96ED,0x96EE,0x96F0,0x96F1,0x96F2,0x96F4,0x96F5,/* 0x80-0x87 */ + 0x96F8,0x96FA,0x96FB,0x96FC,0x96FD,0x96FF,0x9702,0x9703,/* 0x88-0x8F */ + 0x9705,0x970A,0x970B,0x970C,0x9710,0x9711,0x9712,0x9714,/* 0x90-0x97 */ + 0x9715,0x9717,0x9718,0x9719,0x971A,0x971B,0x971D,0x971F,/* 0x98-0x9F */ + 0x9720,0x643F,0x64D8,0x8004,0x6BEA,0x6BF3,0x6BFD,0x6BF5,/* 0xA0-0xA7 */ + 0x6BF9,0x6C05,0x6C07,0x6C06,0x6C0D,0x6C15,0x6C18,0x6C19,/* 0xA8-0xAF */ + 0x6C1A,0x6C21,0x6C29,0x6C24,0x6C2A,0x6C32,0x6535,0x6555,/* 0xB0-0xB7 */ + 0x656B,0x724D,0x7252,0x7256,0x7230,0x8662,0x5216,0x809F,/* 0xB8-0xBF */ + 0x809C,0x8093,0x80BC,0x670A,0x80BD,0x80B1,0x80AB,0x80AD,/* 0xC0-0xC7 */ + 0x80B4,0x80B7,0x80E7,0x80E8,0x80E9,0x80EA,0x80DB,0x80C2,/* 0xC8-0xCF */ + 0x80C4,0x80D9,0x80CD,0x80D7,0x6710,0x80DD,0x80EB,0x80F1,/* 0xD0-0xD7 */ + 0x80F4,0x80ED,0x810D,0x810E,0x80F2,0x80FC,0x6715,0x8112,/* 0xD8-0xDF */ + 0x8C5A,0x8136,0x811E,0x812C,0x8118,0x8132,0x8148,0x814C,/* 0xE0-0xE7 */ + 0x8153,0x8174,0x8159,0x815A,0x8171,0x8160,0x8169,0x817C,/* 0xE8-0xEF */ + 0x817D,0x816D,0x8167,0x584D,0x5AB5,0x8188,0x8182,0x8191,/* 0xF0-0xF7 */ + 0x6ED5,0x81A3,0x81AA,0x81CC,0x6726,0x81CA,0x81BB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9721,0x9722,0x9723,0x9724,0x9725,0x9726,0x9727,0x9728,/* 0x40-0x47 */ + 0x9729,0x972B,0x972C,0x972E,0x972F,0x9731,0x9733,0x9734,/* 0x48-0x4F */ + 0x9735,0x9736,0x9737,0x973A,0x973B,0x973C,0x973D,0x973F,/* 0x50-0x57 */ + 0x9740,0x9741,0x9742,0x9743,0x9744,0x9745,0x9746,0x9747,/* 0x58-0x5F */ + 0xF9B3,0x9749,0x974A,0x974B,0x974C,0x974D,0x974E,0x974F,/* 0x60-0x67 */ + 0x9750,0x9751,0x9754,0x9755,0x9757,0x9758,0x975A,0x975C,/* 0x68-0x6F */ + 0x975D,0x975F,0x9763,0x9764,0x9766,0x9767,0x9768,0x976A,/* 0x70-0x77 */ + 0x976B,0x976C,0x976D,0x976E,0x976F,0x9770,0x9771,0x0000,/* 0x78-0x7F */ + + 0x9772,0x9775,0x9777,0x9778,0x9779,0x977A,0x977B,0x977D,/* 0x80-0x87 */ + 0x977E,0x977F,0x9780,0x9781,0x9782,0x9783,0x9784,0x9786,/* 0x88-0x8F */ + 0x9787,0x9788,0x9789,0x978A,0x978C,0x978E,0x978F,0x9790,/* 0x90-0x97 */ + 0x9793,0x9795,0x9796,0x9797,0x9799,0x979A,0x979B,0x979C,/* 0x98-0x9F */ + 0x979D,0x81C1,0x81A6,0x6B24,0x6B37,0x6B39,0x6B43,0x6B46,/* 0xA0-0xA7 */ + 0x6B59,0x98D1,0x98D2,0x98D3,0x98D5,0x98D9,0x98DA,0x6BB3,/* 0xA8-0xAF */ + 0x5F40,0x6BC2,0x89F3,0x6590,0x9F51,0x6593,0x65BC,0x65C6,/* 0xB0-0xB7 */ + 0x65C4,0x65C3,0x65CC,0x65CE,0x65D2,0x65D6,0x7080,0x709C,/* 0xB8-0xBF */ + 0x7096,0x709D,0x70BB,0x70C0,0x70B7,0x70AB,0x70B1,0x70E8,/* 0xC0-0xC7 */ + 0x70CA,0x7110,0x7113,0x7116,0x712F,0x7131,0x7173,0x715C,/* 0xC8-0xCF */ + 0x7168,0x7145,0x7172,0x714A,0x7178,0x717A,0x7198,0x71B3,/* 0xD0-0xD7 */ + 0x71B5,0x71A8,0x71A0,0x71E0,0x71D4,0x71E7,0x71F9,0x721D,/* 0xD8-0xDF */ + 0x7228,0x706C,0x7118,0x7166,0x71B9,0x623E,0x623D,0x6243,/* 0xE0-0xE7 */ + 0x6248,0x6249,0x793B,0x7940,0x7946,0x7949,0x795B,0x795C,/* 0xE8-0xEF */ + 0x7953,0x795A,0x7962,0x7957,0x7960,0x796F,0x7967,0x797A,/* 0xF0-0xF7 */ + 0x7985,0x798A,0x799A,0x79A7,0x79B3,0x5FD1,0x5FD0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_ED[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x979E,0x979F,0x97A1,0x97A2,0x97A4,0x97A5,0x97A6,0x97A7,/* 0x40-0x47 */ + 0x97A8,0x97A9,0x97AA,0x97AC,0x97AE,0x97B0,0x97B1,0x97B3,/* 0x48-0x4F */ + 0x97B5,0x97B6,0x97B7,0x97B8,0x97B9,0x97BA,0x97BB,0x97BC,/* 0x50-0x57 */ + 0x97BD,0x97BE,0x97BF,0x97C0,0x97C1,0x97C2,0x97C3,0x97C4,/* 0x58-0x5F */ + 0x97C5,0x97C6,0x97C7,0x97C8,0x97C9,0x97CA,0x97CB,0x97CC,/* 0x60-0x67 */ + 0x97CD,0x97CE,0x97CF,0x97D0,0x97D1,0x97D2,0x97D3,0x97D4,/* 0x68-0x6F */ + 0x97D5,0x97D6,0x97D7,0x97D8,0x97D9,0x97DA,0x97DB,0x97DC,/* 0x70-0x77 */ + 0x97DD,0x97DE,0x97DF,0x97E0,0x97E1,0x97E2,0x97E3,0x0000,/* 0x78-0x7F */ + + 0x97E4,0x97E5,0x97E8,0x97EE,0x97EF,0x97F0,0x97F1,0x97F2,/* 0x80-0x87 */ + 0x97F4,0x97F7,0x97F8,0x97F9,0x97FA,0x97FB,0x97FC,0x97FD,/* 0x88-0x8F */ + 0x97FE,0x97FF,0x9800,0x9801,0x9802,0x9803,0x9804,0x9805,/* 0x90-0x97 */ + 0x9806,0x9807,0x9808,0x9809,0x980A,0x980B,0x980C,0x980D,/* 0x98-0x9F */ + 0x980E,0x603C,0x605D,0x605A,0x6067,0x6041,0x6059,0x6063,/* 0xA0-0xA7 */ + 0x60AB,0x6106,0x610D,0x615D,0x61A9,0x619D,0x61CB,0x61D1,/* 0xA8-0xAF */ + 0x6206,0x8080,0x807F,0x6C93,0x6CF6,0x6DFC,0x77F6,0x77F8,/* 0xB0-0xB7 */ + 0x7800,0x7809,0x7817,0x7818,0x7811,0x65AB,0x782D,0x781C,/* 0xB8-0xBF */ + 0x781D,0x7839,0x783A,0x783B,0x781F,0x783C,0x7825,0x782C,/* 0xC0-0xC7 */ + 0x7823,0x7829,0x784E,0x786D,0x7856,0x7857,0x7826,0x7850,/* 0xC8-0xCF */ + 0x7847,0x784C,0x786A,0x789B,0x7893,0x789A,0x7887,0x789C,/* 0xD0-0xD7 */ + 0x78A1,0x78A3,0x78B2,0x78B9,0x78A5,0x78D4,0x78D9,0x78C9,/* 0xD8-0xDF */ + 0x78EC,0x78F2,0x7905,0x78F4,0x7913,0x7924,0x791E,0x7934,/* 0xE0-0xE7 */ + 0x9F9B,0x9EF9,0x9EFB,0x9EFC,0x76F1,0x7704,0x770D,0x76F9,/* 0xE8-0xEF */ + 0x7707,0x7708,0x771A,0x7722,0x7719,0x772D,0x7726,0x7735,/* 0xF0-0xF7 */ + 0x7738,0x7750,0x7751,0x7747,0x7743,0x775A,0x7768,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x980F,0x9810,0x9811,0x9812,0x9813,0x9814,0x9815,0x9816,/* 0x40-0x47 */ + 0x9817,0xF9B4,0x9819,0x981A,0x981B,0x981C,0x981D,0x981E,/* 0x48-0x4F */ + 0x981F,0x9820,0x9821,0x9822,0x9823,0x9824,0x9825,0x9826,/* 0x50-0x57 */ + 0x9827,0x9828,0x9829,0x982A,0x982B,0x982C,0x982D,0x982E,/* 0x58-0x5F */ + 0x982F,0x9830,0x9831,0x9832,0x9833,0x9834,0x9835,0x9836,/* 0x60-0x67 */ + 0x9837,0x9838,0x9839,0x983A,0x983B,0x983C,0x983D,0x983E,/* 0x68-0x6F */ + 0x983F,0x9840,0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,/* 0x70-0x77 */ + 0x9847,0x9848,0x9849,0x984A,0x984B,0x984C,0x984D,0x0000,/* 0x78-0x7F */ + + 0x984E,0x984F,0x9850,0x9851,0x9852,0x9853,0x9854,0x9855,/* 0x80-0x87 */ + 0x9856,0x9857,0x9858,0x9859,0x985A,0x985B,0x985C,0x985D,/* 0x88-0x8F */ + 0xF9D0,0x985F,0x9860,0x9861,0x9862,0x9863,0x9864,0x9865,/* 0x90-0x97 */ + 0x9866,0x9867,0x9868,0x9869,0x986A,0x986B,0x986C,0x986D,/* 0x98-0x9F */ + 0x986E,0x7762,0x7765,0x777F,0x778D,0x777D,0x7780,0x778C,/* 0xA0-0xA7 */ + 0x7791,0x779F,0x77A0,0x77B0,0x77B5,0x77BD,0x753A,0x7540,/* 0xA8-0xAF */ + 0x754E,0x754B,0x7548,0x755B,0x7572,0x7579,0x7583,0x7F58,/* 0xB0-0xB7 */ + 0x7F61,0x7F5F,0x8A48,0x7F68,0x7F74,0x7F71,0xF9E6,0x7F81,/* 0xB8-0xBF */ + 0x7F7E,0x76CD,0x76E5,0x8832,0x9485,0x9486,0x9487,0x948B,/* 0xC0-0xC7 */ + 0x948A,0x948C,0x948D,0x948F,0x9490,0x9494,0x9497,0x9495,/* 0xC8-0xCF */ + 0x949A,0x949B,0x949C,0x94A3,0x94A4,0x94AB,0x94AA,0x94AD,/* 0xD0-0xD7 */ + 0x94AC,0x94AF,0x94B0,0x94B2,0x94B4,0x94B6,0x94B7,0x94B8,/* 0xD8-0xDF */ + 0x94B9,0x94BA,0x94BC,0x94BD,0x94BF,0x94C4,0x94C8,0x94C9,/* 0xE0-0xE7 */ + 0x94CA,0x94CB,0x94CC,0x94CD,0x94CE,0x94D0,0x94D1,0x94D2,/* 0xE8-0xEF */ + 0x94D5,0x94D6,0x94D7,0x94D9,0x94D8,0x94DB,0x94DE,0x94DF,/* 0xF0-0xF7 */ + 0x94E0,0x94E2,0x94E4,0x94E5,0x94E7,0x94E8,0x94EA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x986F,0x9870,0x9871,0x9872,0x9873,0x9874,0x988B,0x988E,/* 0x40-0x47 */ + 0x9892,0x9895,0x9899,0x98A3,0x98A8,0x98A9,0x98AA,0x98AB,/* 0x48-0x4F */ + 0x98AC,0x98AD,0x98AE,0x98AF,0x98B0,0x98B1,0x98B2,0x98B3,/* 0x50-0x57 */ + 0x98B4,0x98B5,0x98B6,0x98B7,0x98B8,0x98B9,0x98BA,0x98BB,/* 0x58-0x5F */ + 0x98BC,0x98BD,0x98BE,0x98BF,0x98C0,0x98C1,0x98C2,0x98C3,/* 0x60-0x67 */ + 0x98C4,0x98C5,0x98C6,0x98C7,0x98C8,0x98C9,0x98CA,0x98CB,/* 0x68-0x6F */ + 0x98CC,0x98CD,0x98CF,0x98D0,0x98D4,0x98D6,0x98D7,0x98DB,/* 0x70-0x77 */ + 0x98DC,0x98DD,0x98E0,0x98E1,0x98E2,0x98E3,0x98E4,0x0000,/* 0x78-0x7F */ + + 0x98E5,0x98E6,0x98E9,0x98EA,0x98EB,0x98EC,0x98ED,0x98EE,/* 0x80-0x87 */ + 0xFA2A,0x98F0,0x98F1,0x98F2,0x98F3,0x98F4,0x98F5,0x98F6,/* 0x88-0x8F */ + 0x98F7,0x98F8,0x98F9,0x98FA,0x98FB,0xFA2B,0x98FD,0x98FE,/* 0x90-0x97 */ + 0x98FF,0x9900,0x9901,0x9902,0x9903,0x9904,0x9905,0x9906,/* 0x98-0x9F */ + 0x9907,0x94E9,0x94EB,0x94EE,0x94EF,0x94F3,0x94F4,0x94F5,/* 0xA0-0xA7 */ + 0x94F7,0x94F9,0x94FC,0x94FD,0x94FF,0x9503,0x9502,0x9506,/* 0xA8-0xAF */ + 0x9507,0x9509,0x950A,0x950D,0x950E,0x950F,0x9512,0x9513,/* 0xB0-0xB7 */ + 0x9514,0x9515,0x9516,0x9518,0x951B,0x951D,0x951E,0x951F,/* 0xB8-0xBF */ + 0x9522,0x952A,0x952B,0x9529,0x952C,0x9531,0x9532,0x9534,/* 0xC0-0xC7 */ + 0x9536,0x9537,0x9538,0x953C,0x953E,0x953F,0x9542,0x9535,/* 0xC8-0xCF */ + 0x9544,0x9545,0x9546,0x9549,0x954C,0x954E,0x954F,0x9552,/* 0xD0-0xD7 */ + 0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955B,0x955E,/* 0xD8-0xDF */ + 0x955F,0x955D,0x9561,0x9562,0x9564,0x9565,0x9566,0x9567,/* 0xE0-0xE7 */ + 0x9568,0x9569,0x956A,0x956B,0x956C,0x956F,0x9571,0x9572,/* 0xE8-0xEF */ + 0x9573,0x953A,0x77E7,0x77EC,0x96C9,0x79D5,0x79ED,0x79E3,/* 0xF0-0xF7 */ + 0x79EB,0x7A06,0x5D47,0x7A03,0x7A02,0x7A1E,0x7A14,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9908,0x9909,0x990A,0x990B,0x990C,0x990E,0x990F,0x9911,/* 0x40-0x47 */ + 0x9912,0x9913,0x9914,0x9915,0x9916,0x9917,0x9918,0x9919,/* 0x48-0x4F */ + 0x991A,0x991B,0x991C,0x991D,0x991E,0x991F,0x9920,0x9921,/* 0x50-0x57 */ + 0x9922,0x9923,0x9924,0x9925,0x9926,0x9927,0xFA2C,0x9929,/* 0x58-0x5F */ + 0x992A,0x992B,0x992C,0x992D,0x992F,0x9930,0x9931,0x9932,/* 0x60-0x67 */ + 0x9933,0x9934,0x9935,0x9936,0x9937,0x9938,0x9939,0x993A,/* 0x68-0x6F */ + 0x993B,0x993C,0x993D,0x993E,0x993F,0x9940,0x9941,0x9942,/* 0x70-0x77 */ + 0x9943,0x9944,0x9945,0x9946,0x9947,0x9948,0x9949,0x0000,/* 0x78-0x7F */ + + 0x994A,0x994B,0x994C,0x994D,0x994E,0x994F,0x9950,0x9951,/* 0x80-0x87 */ + 0x9952,0x9953,0x9956,0x9957,0x9958,0x9959,0x995A,0x995B,/* 0x88-0x8F */ + 0x995C,0x995D,0x995E,0x995F,0x9960,0x9961,0x9962,0x9964,/* 0x90-0x97 */ + 0x9966,0x9973,0x9978,0x9979,0x997B,0x997E,0x9982,0x9983,/* 0x98-0x9F */ + 0x9989,0x7A39,0x7A37,0x7A51,0x9ECF,0x99A5,0x7A70,0x7688,/* 0xA0-0xA7 */ + 0x768E,0x7693,0x7699,0x76A4,0x74DE,0x74E0,0x752C,0x9E20,/* 0xA8-0xAF */ + 0x9E22,0x9E28,0x9E29,0x9E2A,0x9E2B,0x9E2C,0x9E32,0x9E31,/* 0xB0-0xB7 */ + 0x9E36,0x9E38,0x9E37,0x9E39,0x9E3A,0x9E3E,0x9E41,0x9E42,/* 0xB8-0xBF */ + 0x9E44,0x9E46,0x9E47,0x9E48,0x9E49,0x9E4B,0x9E4C,0x9E4E,/* 0xC0-0xC7 */ + 0x9E51,0x9E55,0x9E57,0x9E5A,0x9E5B,0x9E5C,0x9E5E,0x9E63,/* 0xC8-0xCF */ + 0x9E66,0x9E67,0x9E68,0x9E69,0x9E6A,0x9E6B,0x9E6C,0x9E71,/* 0xD0-0xD7 */ + 0x9E6D,0x9E73,0x7592,0x7594,0x7596,0x75A0,0x759D,0x75AC,/* 0xD8-0xDF */ + 0x75A3,0x75B3,0x75B4,0x75B8,0x75C4,0x75B1,0x75B0,0x75C3,/* 0xE0-0xE7 */ + 0x75C2,0x75D6,0x75CD,0x75E3,0x75E8,0x75E6,0x75E4,0x75EB,/* 0xE8-0xEF */ + 0x75E7,0x7603,0x75F1,0x75FC,0x75FF,0x7610,0x7600,0x7605,/* 0xF0-0xF7 */ + 0x760C,0x7617,0x760A,0x7625,0x7618,0x7615,0x7619,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x998C,0x998E,0x999A,0x999B,0x999C,0x999D,0x999E,0x999F,/* 0x40-0x47 */ + 0x99A0,0x99A1,0x99A2,0x99A3,0x99A4,0x99A6,0x99A7,0x99A9,/* 0x48-0x4F */ + 0x99AA,0x99AB,0x99AC,0x99AD,0x99AE,0x99AF,0x99B0,0x99B1,/* 0x50-0x57 */ + 0x99B2,0x99B3,0x99B4,0x99B5,0x99B6,0x99B7,0x99B8,0x99B9,/* 0x58-0x5F */ + 0x99BA,0x99BB,0x99BC,0x99BD,0x99BE,0x99BF,0x99C0,0x99C1,/* 0x60-0x67 */ + 0x99C2,0x99C3,0x99C4,0x99C5,0x99C6,0x99C7,0x99C8,0x99C9,/* 0x68-0x6F */ + 0x99CA,0x99CB,0x99CC,0x99CD,0x99CE,0x99CF,0x99D0,0x99D1,/* 0x70-0x77 */ + 0x99D2,0x99D3,0x99D4,0x99D5,0x99D6,0x99D7,0x99D8,0x0000,/* 0x78-0x7F */ + + 0x99D9,0x99DA,0x99DB,0x99DC,0x99DD,0x99DE,0x99DF,0x99E0,/* 0x80-0x87 */ + 0x99E1,0x99E2,0x99E3,0x99E4,0x99E5,0x99E6,0x99E7,0x99E8,/* 0x88-0x8F */ + 0x99E9,0x99EA,0x99EB,0x99EC,0x99ED,0x99EE,0x99EF,0x99F0,/* 0x90-0x97 */ + 0xF91A,0x99F2,0x99F3,0x99F4,0x99F5,0x99F6,0x99F7,0x99F8,/* 0x98-0x9F */ + 0x99F9,0x761B,0x763C,0x7622,0x7620,0x7640,0x762D,0x7630,/* 0xA0-0xA7 */ + 0x763F,0x7635,0x7643,0x763E,0x7633,0x764D,0x765E,0x7654,/* 0xA8-0xAF */ + 0x765C,0x7656,0x766B,0x766F,0x7FCA,0x7AE6,0x7A78,0x7A79,/* 0xB0-0xB7 */ + 0x7A80,0x7A86,0x7A88,0x7A95,0x7AA6,0x7AA0,0x7AAC,0x7AA8,/* 0xB8-0xBF */ + 0x7AAD,0x7AB3,0x8864,0x8869,0x8872,0x887D,0x887F,0x8882,/* 0xC0-0xC7 */ + 0x88A2,0x88C6,0x88B7,0x88BC,0x88C9,0x88E2,0x88CE,0x88E3,/* 0xC8-0xCF */ + 0x88E5,0x88F1,0x891A,0x88FC,0x88E8,0x88FE,0x88F0,0x8921,/* 0xD0-0xD7 */ + 0x8919,0x8913,0x891B,0x890A,0x8934,0x892B,0x8936,0x8941,/* 0xD8-0xDF */ + 0x8966,0x897B,0x758B,0x80E5,0x76B2,0x76B4,0x77DC,0x8012,/* 0xE0-0xE7 */ + 0x8014,0x8016,0x801C,0x8020,0x8022,0x8025,0x8026,0x8027,/* 0xE8-0xEF */ + 0x8029,0x8028,0x8031,0x800B,0x8035,0x8043,0xF9B0,0x804D,/* 0xF0-0xF7 */ + 0x8052,0x8069,0x8071,0x8983,0x9878,0x9880,0x9883,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x99FA,0x99FB,0x99FC,0x99FD,0x99FE,0x99FF,0x9A00,0x9A01,/* 0x40-0x47 */ + 0x9A02,0x9A03,0x9A04,0x9A05,0x9A06,0x9A07,0x9A08,0x9A09,/* 0x48-0x4F */ + 0x9A0A,0x9A0B,0x9A0C,0x9A0D,0x9A0E,0x9A0F,0x9A10,0x9A11,/* 0x50-0x57 */ + 0x9A12,0x9A13,0x9A14,0x9A15,0x9A16,0x9A17,0x9A18,0x9A19,/* 0x58-0x5F */ + 0x9A1A,0x9A1B,0x9A1C,0x9A1D,0x9A1E,0x9A1F,0x9A20,0x9A21,/* 0x60-0x67 */ + 0x9A22,0x9A23,0x9A24,0x9A25,0x9A26,0x9A27,0x9A28,0x9A29,/* 0x68-0x6F */ + 0x9A2A,0x9A2B,0x9A2C,0x9A2D,0x9A2E,0x9A2F,0x9A30,0x9A31,/* 0x70-0x77 */ + 0x9A32,0x9A33,0x9A34,0x9A35,0x9A36,0x9A37,0x9A38,0x0000,/* 0x78-0x7F */ + + 0x9A39,0x9A3A,0x9A3B,0x9A3C,0x9A3D,0x9A3E,0x9A3F,0x9A40,/* 0x80-0x87 */ + 0x9A41,0x9A42,0x9A43,0x9A44,0x9A45,0x9A46,0x9A47,0x9A48,/* 0x88-0x8F */ + 0x9A49,0x9A4A,0x9A4B,0x9A4C,0x9A4D,0x9A4E,0x9A4F,0x9A50,/* 0x90-0x97 */ + 0x9A51,0x9A52,0x9A53,0x9A54,0x9A55,0x9A56,0x9A57,0x9A58,/* 0x98-0x9F */ + 0x9A59,0x9889,0x988C,0x988D,0x988F,0x9894,0x989A,0x989B,/* 0xA0-0xA7 */ + 0x989E,0x989F,0x98A1,0x98A2,0x98A5,0x98A6,0x864D,0x8654,/* 0xA8-0xAF */ + 0x866C,0x866E,0x867F,0x867A,0x867C,0x867B,0x86A8,0x868D,/* 0xB0-0xB7 */ + 0x868B,0x86AC,0x869D,0x86A7,0x86A3,0x86AA,0x8693,0x86A9,/* 0xB8-0xBF */ + 0x86B6,0x86C4,0x86B5,0x86CE,0x86B0,0x86BA,0x86B1,0x86AF,/* 0xC0-0xC7 */ + 0x86C9,0x86CF,0x86B4,0x86E9,0x86F1,0x86F2,0x86ED,0x86F3,/* 0xC8-0xCF */ + 0x86D0,0x8713,0x86DE,0x86F4,0x86DF,0x86D8,0x86D1,0x8703,/* 0xD0-0xD7 */ + 0x8707,0x86F8,0x8708,0x870A,0x870D,0x8709,0x8723,0x873B,/* 0xD8-0xDF */ + 0x871E,0x8725,0x872E,0x871A,0x873E,0x8748,0x8734,0x8731,/* 0xE0-0xE7 */ + 0x8729,0x8737,0x873F,0x8782,0x8722,0x877D,0x877E,0x877B,/* 0xE8-0xEF */ + 0x8760,0x8770,0x874C,0x876E,0x878B,0x8753,0x8763,0x877C,/* 0xF0-0xF7 */ + 0x8764,0x8759,0x8765,0x8793,0x87AF,0x87A8,0x87D2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9A5A,0x9A5B,0x9A5C,0x9A5D,0x9A5E,0x9A5F,0x9A60,0x9A61,/* 0x40-0x47 */ + 0x9A62,0x9A63,0x9A64,0x9A65,0x9A66,0x9A67,0x9A68,0x9A69,/* 0x48-0x4F */ + 0xF987,0x9A6B,0x9A72,0x9A83,0x9A89,0x9A8D,0x9A8E,0x9A94,/* 0x50-0x57 */ + 0x9A95,0x9A99,0x9AA6,0x9AA9,0x9AAA,0x9AAB,0x9AAC,0x9AAD,/* 0x58-0x5F */ + 0x9AAE,0x9AAF,0x9AB2,0x9AB3,0x9AB4,0x9AB5,0x9AB9,0x9ABB,/* 0x60-0x67 */ + 0x9ABD,0x9ABE,0x9ABF,0x9AC3,0x9AC4,0x9AC6,0x9AC7,0x9AC8,/* 0x68-0x6F */ + 0x9AC9,0x9ACA,0x9ACD,0x9ACE,0x9ACF,0x9AD0,0x9AD2,0x9AD4,/* 0x70-0x77 */ + 0x9AD5,0x9AD6,0x9AD7,0x9AD9,0x9ADA,0x9ADB,0x9ADC,0x0000,/* 0x78-0x7F */ + + 0x9ADD,0x9ADE,0x9AE0,0x9AE2,0x9AE3,0x9AE4,0x9AE5,0x9AE7,/* 0x80-0x87 */ + 0x9AE8,0x9AE9,0x9AEA,0x9AEC,0x9AEE,0x9AF0,0x9AF1,0x9AF2,/* 0x88-0x8F */ + 0x9AF3,0x9AF4,0x9AF5,0x9AF6,0x9AF7,0x9AF8,0x9AFA,0x9AFC,/* 0x90-0x97 */ + 0x9AFD,0x9AFE,0x9AFF,0x9B00,0x9B01,0x9B02,0x9B04,0x9B05,/* 0x98-0x9F */ + 0x9B06,0x87C6,0x8788,0x8785,0x87AD,0x8797,0x8783,0x87AB,/* 0xA0-0xA7 */ + 0x87E5,0x87AC,0x87B5,0x87B3,0x87CB,0x87D3,0x87BD,0x87D1,/* 0xA8-0xAF */ + 0x87C0,0x87CA,0x87DB,0x87EA,0x87E0,0x87EE,0x8816,0x8813,/* 0xB0-0xB7 */ + 0x87FE,0x880A,0x881B,0x8821,0x8839,0x883C,0x7F36,0x7F42,/* 0xB8-0xBF */ + 0x7F44,0x7F45,0x8210,0x7AFA,0x7AFD,0x7B08,0x7B03,0x7B04,/* 0xC0-0xC7 */ + 0x7B15,0x7B0A,0x7B2B,0x7B0F,0x7B47,0x7B38,0x7B2A,0x7B19,/* 0xC8-0xCF */ + 0x7B2E,0x7B31,0xF9F8,0x7B25,0x7B24,0x7B33,0x7B3E,0x7B1E,/* 0xD0-0xD7 */ + 0x7B58,0x7B5A,0x7B45,0x7B75,0x7B4C,0x7B5D,0x7B60,0x7B6E,/* 0xD8-0xDF */ + 0x7B7B,0x7B62,0x7B72,0x7B71,0x7B90,0x7BA6,0x7BA7,0x7BB8,/* 0xE0-0xE7 */ + 0x7BAC,0x7B9D,0x7BA8,0x7B85,0x7BAA,0x7B9C,0x7BA2,0x7BAB,/* 0xE8-0xEF */ + 0x7BB4,0x7BD1,0x7BC1,0x7BCC,0x7BDD,0x7BDA,0x7BE5,0x7BE6,/* 0xF0-0xF7 */ + 0x7BEA,0x7C0C,0x7BFE,0x7BFC,0x7C0F,0x7C16,0x7C0B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9B07,0x9B09,0x9B0A,0x9B0B,0x9B0C,0x9B0D,0x9B0E,0x9B10,/* 0x40-0x47 */ + 0x9B11,0x9B12,0x9B14,0x9B15,0x9B16,0x9B17,0x9B18,0x9B19,/* 0x48-0x4F */ + 0x9B1A,0x9B1B,0x9B1C,0x9B1D,0x9B1E,0x9B20,0x9B21,0x9B22,/* 0x50-0x57 */ + 0x9B24,0x9B25,0x9B26,0x9B27,0x9B28,0x9B29,0x9B2A,0x9B2B,/* 0x58-0x5F */ + 0x9B2C,0x9B2D,0x9B2E,0x9B30,0x9B31,0x9B33,0x9B34,0x9B35,/* 0x60-0x67 */ + 0x9B36,0x9B37,0x9B38,0x9B39,0x9B3A,0x9B3D,0x9B3E,0x9B3F,/* 0x68-0x6F */ + 0x9B40,0x9B46,0x9B4A,0x9B4B,0x9B4C,0x9B4E,0x9B50,0x9B52,/* 0x70-0x77 */ + 0x9B53,0x9B55,0x9B56,0x9B57,0x9B58,0x9B59,0x9B5A,0x0000,/* 0x78-0x7F */ + + 0x9B5B,0x9B5C,0x9B5D,0x9B5E,0x9B5F,0x9B60,0x9B61,0x9B62,/* 0x80-0x87 */ + 0x9B63,0x9B64,0x9B65,0x9B66,0x9B67,0x9B68,0x9B69,0x9B6A,/* 0x88-0x8F */ + 0x9B6B,0x9B6C,0x9B6D,0x9B6E,0xF939,0x9B70,0x9B71,0x9B72,/* 0x90-0x97 */ + 0x9B73,0x9B74,0x9B75,0x9B76,0x9B77,0x9B78,0x9B79,0x9B7A,/* 0x98-0x9F */ + 0x9B7B,0x7C1F,0x7C2A,0x7C26,0x7C38,0x7C41,0x7C40,0x81FE,/* 0xA0-0xA7 */ + 0x8201,0x8202,0x8204,0x81EC,0x8844,0x8221,0x8222,0x8223,/* 0xA8-0xAF */ + 0x822D,0x822F,0x8228,0x822B,0x8238,0x823B,0x8233,0x8234,/* 0xB0-0xB7 */ + 0x823E,0x8244,0x8249,0x824B,0x824F,0x825A,0x825F,0x8268,/* 0xB8-0xBF */ + 0x887E,0x8885,0x8888,0x88D8,0x88DF,0x895E,0x7F9D,0x7F9F,/* 0xC0-0xC7 */ + 0x7FA7,0x7FAF,0x7FB0,0x7FB2,0x7C7C,0x6549,0x7C91,0x7C9D,/* 0xC8-0xCF */ + 0x7C9C,0x7C9E,0x7CA2,0x7CB2,0x7CBC,0x7CBD,0x7CC1,0x7CC7,/* 0xD0-0xD7 */ + 0x7CCC,0x7CCD,0x7CC8,0x7CC5,0x7CD7,0x7CE8,0x826E,0x66A8,/* 0xD8-0xDF */ + 0x7FBF,0x7FCE,0x7FD5,0x7FE5,0x7FE1,0x7FE6,0x7FE9,0x7FEE,/* 0xE0-0xE7 */ + 0x7FF3,0x7CF8,0x7D77,0x7DA6,0x7DAE,0x7E47,0x7E9B,0x9EB8,/* 0xE8-0xEF */ + 0x9EB4,0x8D73,0x8D84,0x8D94,0x8D91,0x8DB1,0x8D67,0x8D6D,/* 0xF0-0xF7 */ + 0x8C47,0x8C49,0x914A,0x9150,0x914E,0x914F,0x9164,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9B7C,0x9B7D,0x9B7E,0x9B7F,0x9B80,0x9B81,0x9B82,0x9B83,/* 0x40-0x47 */ + 0x9B84,0x9B85,0x9B86,0x9B87,0x9B88,0x9B89,0x9B8A,0x9B8B,/* 0x48-0x4F */ + 0x9B8C,0x9B8D,0x9B8E,0x9B8F,0x9B90,0x9B91,0x9B92,0x9B93,/* 0x50-0x57 */ + 0x9B94,0x9B95,0x9B96,0x9B97,0x9B98,0x9B99,0x9B9A,0x9B9B,/* 0x58-0x5F */ + 0x9B9C,0x9B9D,0x9B9E,0x9B9F,0x9BA0,0x9BA1,0x9BA2,0x9BA3,/* 0x60-0x67 */ + 0x9BA4,0x9BA5,0x9BA6,0x9BA7,0x9BA8,0x9BA9,0x9BAA,0x9BAB,/* 0x68-0x6F */ + 0x9BAC,0x9BAD,0x9BAE,0x9BAF,0x9BB0,0x9BB1,0x9BB2,0x9BB3,/* 0x70-0x77 */ + 0x9BB4,0x9BB5,0x9BB6,0x9BB7,0x9BB8,0x9BB9,0x9BBA,0x0000,/* 0x78-0x7F */ + + 0x9BBB,0x9BBC,0x9BBD,0x9BBE,0x9BBF,0x9BC0,0x9BC1,0x9BC2,/* 0x80-0x87 */ + 0x9BC3,0x9BC4,0x9BC5,0x9BC6,0x9BC7,0x9BC8,0x9BC9,0x9BCA,/* 0x88-0x8F */ + 0x9BCB,0x9BCC,0x9BCD,0x9BCE,0x9BCF,0x9BD0,0x9BD1,0x9BD2,/* 0x90-0x97 */ + 0x9BD3,0x9BD4,0x9BD5,0x9BD6,0x9BD7,0x9BD8,0x9BD9,0x9BDA,/* 0x98-0x9F */ + 0x9BDB,0x9162,0x9161,0x9170,0x9169,0x916F,0x917D,0x917E,/* 0xA0-0xA7 */ + 0x9172,0x9174,0x9179,0x918C,0x9185,0x9190,0x918D,0x9191,/* 0xA8-0xAF */ + 0x91A2,0x91A3,0x91AA,0x91AD,0x91AE,0x91AF,0x91B5,0xF9B7,/* 0xB0-0xB7 */ + 0x91BA,0x8C55,0x9E7E,0x8DB8,0x8DEB,0x8E05,0x8E59,0x8E69,/* 0xB8-0xBF */ + 0x8DB5,0x8DBF,0x8DBC,0x8DBA,0x8DC4,0x8DD6,0x8DD7,0x8DDA,/* 0xC0-0xC7 */ + 0x8DDE,0x8DCE,0x8DCF,0x8DDB,0x8DC6,0x8DEC,0x8DF7,0x8DF8,/* 0xC8-0xCF */ + 0x8DE3,0x8DF9,0x8DFB,0x8DE4,0x8E09,0x8DFD,0x8E14,0x8E1D,/* 0xD0-0xD7 */ + 0x8E1F,0x8E2C,0x8E2E,0x8E23,0x8E2F,0x8E3A,0x8E40,0x8E39,/* 0xD8-0xDF */ + 0x8E35,0x8E3D,0x8E31,0x8E49,0x8E41,0x8E42,0x8E51,0x8E52,/* 0xE0-0xE7 */ + 0x8E4A,0x8E70,0x8E76,0x8E7C,0x8E6F,0x8E74,0x8E85,0x8E8F,/* 0xE8-0xEF */ + 0x8E94,0x8E90,0x8E9C,0x8E9E,0x8C78,0x8C82,0x8C8A,0x8C85,/* 0xF0-0xF7 */ + 0x8C98,0x8C94,0x659B,0x89D6,0x89DE,0x89DA,0x89DC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9BDC,0x9BDD,0x9BDE,0x9BDF,0x9BE0,0x9BE1,0x9BE2,0x9BE3,/* 0x40-0x47 */ + 0x9BE4,0x9BE5,0x9BE6,0x9BE7,0x9BE8,0x9BE9,0x9BEA,0x9BEB,/* 0x48-0x4F */ + 0x9BEC,0x9BED,0x9BEE,0x9BEF,0x9BF0,0x9BF1,0x9BF2,0x9BF3,/* 0x50-0x57 */ + 0x9BF4,0x9BF5,0x9BF6,0x9BF7,0x9BF8,0x9BF9,0x9BFA,0x9BFB,/* 0x58-0x5F */ + 0x9BFC,0x9BFD,0x9BFE,0x9BFF,0x9C00,0x9C01,0x9C02,0x9C03,/* 0x60-0x67 */ + 0x9C04,0x9C05,0x9C06,0x9C07,0x9C08,0x9C09,0x9C0A,0x9C0B,/* 0x68-0x6F */ + 0x9C0C,0x9C0D,0x9C0E,0x9C0F,0x9C10,0x9C11,0x9C12,0x9C13,/* 0x70-0x77 */ + 0x9C14,0x9C15,0x9C16,0x9C17,0x9C18,0x9C19,0x9C1A,0x0000,/* 0x78-0x7F */ + + 0x9C1B,0x9C1C,0x9C1D,0x9C1E,0x9C1F,0x9C20,0x9C21,0x9C22,/* 0x80-0x87 */ + 0x9C23,0x9C24,0x9C25,0x9C26,0x9C27,0x9C28,0x9C29,0x9C2A,/* 0x88-0x8F */ + 0x9C2B,0x9C2C,0x9C2D,0x9C2E,0x9C2F,0x9C30,0x9C31,0x9C32,/* 0x90-0x97 */ + 0x9C33,0x9C34,0x9C35,0x9C36,0x9C37,0x9C38,0x9C39,0x9C3A,/* 0x98-0x9F */ + 0x9C3B,0x89E5,0x89EB,0x89EF,0x8A3E,0x8B26,0x9753,0x96E9,/* 0xA0-0xA7 */ + 0x96F3,0x96EF,0x9706,0x9701,0x9708,0x970F,0x970E,0x972A,/* 0xA8-0xAF */ + 0x972D,0x9730,0x973E,0x9F80,0x9F83,0x9F85,0x9F86,0x9F87,/* 0xB0-0xB7 */ + 0x9F88,0x9F89,0x9F8A,0x9F8C,0x9EFE,0x9F0B,0x9F0D,0x96B9,/* 0xB8-0xBF */ + 0x96BC,0x96BD,0x96CE,0x96D2,0x77BF,0x96E0,0x928E,0x92AE,/* 0xC0-0xC7 */ + 0x92C8,0x933E,0x936A,0x93CA,0x938F,0x943E,0x946B,0x9C7F,/* 0xC8-0xCF */ + 0x9C82,0x9C85,0x9C86,0x9C87,0x9C88,0x7A23,0x9C8B,0x9C8E,/* 0xD0-0xD7 */ + 0x9C90,0x9C91,0x9C92,0x9C94,0x9C95,0x9C9A,0x9C9B,0x9C9E,/* 0xD8-0xDF */ + 0x9C9F,0x9CA0,0x9CA1,0x9CA2,0x9CA3,0x9CA5,0x9CA6,0x9CA7,/* 0xE0-0xE7 */ + 0x9CA8,0x9CA9,0x9CAB,0x9CAD,0x9CAE,0x9CB0,0x9CB1,0x9CB2,/* 0xE8-0xEF */ + 0x9CB3,0x9CB4,0x9CB5,0x9CB6,0x9CB7,0x9CBA,0x9CBB,0x9CBC,/* 0xF0-0xF7 */ + 0x9CBD,0x9CC4,0x9CC5,0x9CC6,0x9CC7,0x9CCA,0x9CCB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9C3C,0x9C3D,0x9C3E,0x9C3F,0x9C40,0x9C41,0x9C42,0x9C43,/* 0x40-0x47 */ + 0x9C44,0x9C45,0x9C46,0x9C47,0x9C48,0x9C49,0x9C4A,0x9C4B,/* 0x48-0x4F */ + 0x9C4C,0x9C4D,0x9C4E,0x9C4F,0x9C50,0x9C51,0x9C52,0x9C53,/* 0x50-0x57 */ + 0x9C54,0x9C55,0x9C56,0xF9F2,0x9C58,0x9C59,0x9C5A,0x9C5B,/* 0x58-0x5F */ + 0x9C5C,0x9C5D,0x9C5E,0x9C5F,0x9C60,0x9C61,0x9C62,0x9C63,/* 0x60-0x67 */ + 0x9C64,0x9C65,0x9C66,0x9C67,0x9C68,0x9C69,0x9C6A,0x9C6B,/* 0x68-0x6F */ + 0x9C6C,0x9C6D,0x9C6E,0x9C6F,0x9C70,0x9C71,0x9C72,0x9C73,/* 0x70-0x77 */ + 0x9C74,0x9C75,0x9C76,0x9C77,0x9C78,0x9C79,0x9C7A,0x0000,/* 0x78-0x7F */ + + 0x9C7B,0x9C7D,0x9C7E,0x9C80,0x9C83,0x9C84,0x9C89,0x9C8A,/* 0x80-0x87 */ + 0x9C8C,0x9C8F,0x9C93,0x9C96,0x9C97,0x9C98,0x9C99,0x9C9D,/* 0x88-0x8F */ + 0x9CAA,0x9CAC,0x9CAF,0x9CB9,0x9CBE,0x9CBF,0x9CC0,0x9CC1,/* 0x90-0x97 */ + 0x9CC2,0x9CC8,0x9CC9,0x9CD1,0x9CD2,0x9CDA,0x9CDB,0x9CE0,/* 0x98-0x9F */ + 0x9CE1,0x9CCC,0x9CCD,0x9CCE,0x9CCF,0x9CD0,0x9CD3,0x9CD4,/* 0xA0-0xA7 */ + 0x9CD5,0x9CD7,0x9CD8,0x9CD9,0x9CDC,0x9CDD,0x9CDF,0x9CE2,/* 0xA8-0xAF */ + 0x977C,0x9785,0x9791,0x9792,0x9794,0x97AF,0x97AB,0x97A3,/* 0xB0-0xB7 */ + 0x97B2,0x97B4,0x9AB1,0x9AB0,0x9AB7,0x9E58,0x9AB6,0x9ABA,/* 0xB8-0xBF */ + 0x9ABC,0x9AC1,0x9AC0,0x9AC5,0x9AC2,0x9ACB,0x9ACC,0x9AD1,/* 0xC0-0xC7 */ + 0x9B45,0x9B43,0x9B47,0x9B49,0x9B48,0x9B4D,0x9B51,0x98E8,/* 0xC8-0xCF */ + 0x990D,0x992E,0x9955,0x9954,0x9ADF,0x9AE1,0x9AE6,0x9AEF,/* 0xD0-0xD7 */ + 0x9AEB,0x9AFB,0x9AED,0x9AF9,0x9B08,0x9B0F,0x9B13,0x9B1F,/* 0xD8-0xDF */ + 0x9B23,0x9EBD,0x9EBE,0x7E3B,0x9E82,0x9E87,0x9E88,0x9E8B,/* 0xE0-0xE7 */ + 0x9E92,0x93D6,0x9E9D,0xF9F3,0x9EDB,0x9EDC,0x9EDD,0x9EE0,/* 0xE8-0xEF */ + 0x9EDF,0x9EE2,0x9EE9,0x9EE7,0x9EE5,0x9EEA,0x9EEF,0x9F22,/* 0xF0-0xF7 */ + 0x9F2C,0x9F2F,0x9F39,0x9F37,0x9F3D,0x9F3E,0x9F44,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9CE3,0x9CE4,0x9CE5,0x9CE6,0x9CE7,0x9CE8,0x9CE9,0x9CEA,/* 0x40-0x47 */ + 0x9CEB,0x9CEC,0x9CED,0x9CEE,0x9CEF,0x9CF0,0x9CF1,0x9CF2,/* 0x48-0x4F */ + 0x9CF3,0x9CF4,0x9CF5,0x9CF6,0x9CF7,0x9CF8,0x9CF9,0x9CFA,/* 0x50-0x57 */ + 0x9CFB,0x9CFC,0x9CFD,0x9CFE,0x9CFF,0x9D00,0x9D01,0x9D02,/* 0x58-0x5F */ + 0x9D03,0x9D04,0x9D05,0x9D06,0x9D07,0x9D08,0x9D09,0x9D0A,/* 0x60-0x67 */ + 0x9D0B,0x9D0C,0x9D0D,0x9D0E,0x9D0F,0x9D10,0x9D11,0x9D12,/* 0x68-0x6F */ + 0x9D13,0x9D14,0x9D15,0x9D16,0x9D17,0x9D18,0x9D19,0x9D1A,/* 0x70-0x77 */ + 0x9D1B,0x9D1C,0x9D1D,0x9D1E,0x9D1F,0x9D20,0x9D21,0x0000,/* 0x78-0x7F */ + + 0x9D22,0x9D23,0x9D24,0x9D25,0x9D26,0x9D27,0x9D28,0x9D29,/* 0x80-0x87 */ + 0x9D2A,0x9D2B,0x9D2C,0x9D2D,0x9D2E,0x9D2F,0x9D30,0x9D31,/* 0x88-0x8F */ + 0x9D32,0x9D33,0x9D34,0x9D35,0x9D36,0x9D37,0x9D38,0x9D39,/* 0x90-0x97 */ + 0x9D3A,0x9D3B,0x9D3C,0x9D3D,0x9D3E,0x9D3F,0x9D40,0x9D41,/* 0x98-0x9F */ + 0x9D42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA8-0xAF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB0-0xB7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB8-0xBF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC0-0xC7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC8-0xCF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD0-0xD7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD8-0xDF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE0-0xE7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE8-0xEF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9D43,0x9D44,0x9D45,0x9D46,0x9D47,0x9D48,0x9D49,0x9D4A,/* 0x40-0x47 */ + 0x9D4B,0x9D4C,0x9D4D,0x9D4E,0x9D4F,0x9D50,0x9D51,0x9D52,/* 0x48-0x4F */ + 0x9D53,0x9D54,0x9D55,0x9D56,0x9D57,0x9D58,0x9D59,0x9D5A,/* 0x50-0x57 */ + 0x9D5B,0x9D5C,0x9D5D,0x9D5E,0x9D5F,0x9D60,0x9D61,0x9D62,/* 0x58-0x5F */ + 0x9D63,0x9D64,0x9D65,0x9D66,0x9D67,0x9D68,0x9D69,0x9D6A,/* 0x60-0x67 */ + 0x9D6B,0x9D6C,0x9D6D,0x9D6E,0x9D6F,0x9D70,0x9D71,0x9D72,/* 0x68-0x6F */ + 0x9D73,0x9D74,0x9D75,0x9D76,0x9D77,0x9D78,0x9D79,0x9D7A,/* 0x70-0x77 */ + 0x9D7B,0x9D7C,0x9D7D,0x9D7E,0x9D7F,0x9D80,0x9D81,0x0000,/* 0x78-0x7F */ + + 0x9D82,0x9D83,0x9D84,0x9D85,0x9D86,0x9D87,0x9D88,0x9D89,/* 0x80-0x87 */ + 0x9D8A,0x9D8B,0x9D8C,0x9D8D,0x9D8E,0x9D8F,0x9D90,0x9D91,/* 0x88-0x8F */ + 0x9D92,0x9D93,0x9D94,0x9D95,0x9D96,0x9D97,0x9D98,0x9D99,/* 0x90-0x97 */ + 0x9D9A,0x9D9B,0x9D9C,0x9D9D,0x9D9E,0x9D9F,0x9DA0,0x9DA1,/* 0x98-0x9F */ + 0x9DA2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_FA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9DA3,0x9DA4,0x9DA5,0x9DA6,0x9DA7,0x9DA8,0x9DA9,0x9DAA,/* 0x40-0x47 */ + 0x9DAB,0x9DAC,0x9DAD,0x9DAE,0x9DAF,0x9DB0,0x9DB1,0x9DB2,/* 0x48-0x4F */ + 0x9DB3,0xFA2D,0x9DB5,0x9DB6,0x9DB7,0x9DB8,0x9DB9,0x9DBA,/* 0x50-0x57 */ + 0x9DBB,0x9DBC,0x9DBD,0x9DBE,0x9DBF,0x9DC0,0x9DC1,0x9DC2,/* 0x58-0x5F */ + 0x9DC3,0x9DC4,0x9DC5,0x9DC6,0x9DC7,0x9DC8,0x9DC9,0x9DCA,/* 0x60-0x67 */ + 0x9DCB,0x9DCC,0x9DCD,0x9DCE,0x9DCF,0x9DD0,0x9DD1,0x9DD2,/* 0x68-0x6F */ + 0x9DD3,0x9DD4,0x9DD5,0x9DD6,0x9DD7,0x9DD8,0x9DD9,0x9DDA,/* 0x70-0x77 */ + 0x9DDB,0x9DDC,0x9DDD,0x9DDE,0x9DDF,0x9DE0,0x9DE1,0x0000,/* 0x78-0x7F */ + + 0x9DE2,0x9DE3,0x9DE4,0x9DE5,0x9DE6,0x9DE7,0x9DE8,0x9DE9,/* 0x80-0x87 */ + 0x9DEA,0x9DEB,0x9DEC,0x9DED,0x9DEE,0x9DEF,0x9DF0,0x9DF1,/* 0x88-0x8F */ + 0x9DF2,0x9DF3,0x9DF4,0x9DF5,0x9DF6,0x9DF7,0x9DF8,0x9DF9,/* 0x90-0x97 */ + 0xF93A,0x9DFB,0x9DFC,0x9DFD,0x9DFE,0x9DFF,0x9E00,0x9E01,/* 0x98-0x9F */ + 0x9E02,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_FB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9E03,0x9E04,0x9E05,0x9E06,0x9E07,0x9E08,0x9E09,0x9E0A,/* 0x40-0x47 */ + 0x9E0B,0x9E0C,0x9E0D,0x9E0E,0x9E0F,0x9E10,0x9E11,0x9E12,/* 0x48-0x4F */ + 0x9E13,0x9E14,0x9E15,0x9E16,0x9E17,0x9E18,0x9E19,0x9E1A,/* 0x50-0x57 */ + 0x9E1B,0x9E1C,0x9E1D,0xF920,0x9E24,0x9E27,0x9E2E,0x9E30,/* 0x58-0x5F */ + 0x9E34,0x9E3B,0x9E3C,0x9E40,0x9E4D,0x9E50,0x9E52,0x9E53,/* 0x60-0x67 */ + 0x9E54,0x9E56,0x9E59,0x9E5D,0x9E5F,0x9E60,0x9E61,0x9E62,/* 0x68-0x6F */ + 0x9E65,0x9E6E,0x9E6F,0x9E72,0x9E74,0x9E75,0x9E76,0x9E77,/* 0x70-0x77 */ + 0x9E78,0x9E79,0x9E7A,0x9E7B,0x9E7C,0x9E7D,0x9E80,0x0000,/* 0x78-0x7F */ + + 0x9E81,0x9E83,0x9E84,0x9E85,0x9E86,0x9E89,0x9E8A,0x9E8C,/* 0x80-0x87 */ + 0x9E8D,0x9E8E,0x9E8F,0x9E90,0x9E91,0x9E94,0x9E95,0x9E96,/* 0x88-0x8F */ + 0xF988,0x9E98,0x9E99,0x9E9A,0x9E9B,0x9E9C,0x9E9E,0x9EA0,/* 0x90-0x97 */ + 0x9EA1,0x9EA2,0x9EA3,0x9EA4,0x9EA5,0x9EA7,0x9EA8,0x9EA9,/* 0x98-0x9F */ + 0x9EAA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_FC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9EAB,0x9EAC,0x9EAD,0x9EAE,0x9EAF,0x9EB0,0x9EB1,0x9EB2,/* 0x40-0x47 */ + 0x9EB3,0x9EB5,0x9EB6,0x9EB7,0x9EB9,0x9EBA,0x9EBC,0x9EBF,/* 0x48-0x4F */ + 0x9EC0,0x9EC1,0x9EC2,0x9EC3,0x9EC5,0x9EC6,0x9EC7,0x9EC8,/* 0x50-0x57 */ + 0x9ECA,0x9ECB,0x9ECC,0x9ED0,0x9ED2,0x9ED3,0x9ED5,0x9ED6,/* 0x58-0x5F */ + 0x9ED7,0x9ED9,0x9EDA,0x9EDE,0x9EE1,0x9EE3,0x9EE4,0x9EE6,/* 0x60-0x67 */ + 0x9EE8,0x9EEB,0x9EEC,0x9EED,0x9EEE,0x9EF0,0x9EF1,0x9EF2,/* 0x68-0x6F */ + 0x9EF3,0x9EF4,0x9EF5,0x9EF6,0x9EF7,0x9EF8,0x9EFA,0x9EFD,/* 0x70-0x77 */ + 0x9EFF,0x9F00,0x9F01,0x9F02,0x9F03,0x9F04,0x9F05,0x0000,/* 0x78-0x7F */ + + 0x9F06,0x9F07,0x9F08,0x9F09,0x9F0A,0x9F0C,0x9F0F,0x9F11,/* 0x80-0x87 */ + 0x9F12,0x9F14,0x9F15,0x9F16,0x9F18,0x9F1A,0x9F1B,0x9F1C,/* 0x88-0x8F */ + 0x9F1D,0x9F1E,0x9F1F,0x9F21,0x9F23,0x9F24,0x9F25,0x9F26,/* 0x90-0x97 */ + 0x9F27,0x9F28,0x9F29,0x9F2A,0x9F2B,0x9F2D,0x9F2E,0x9F30,/* 0x98-0x9F */ + 0x9F31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_FD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9F32,0x9F33,0x9F34,0x9F35,0x9F36,0x9F38,0x9F3A,0x9F3C,/* 0x40-0x47 */ + 0x9F3F,0x9F40,0x9F41,0x9F42,0x9F43,0x9F45,0x9F46,0x9F47,/* 0x48-0x4F */ + 0x9F48,0x9F49,0x9F4A,0x9F4B,0x9F4C,0x9F4D,0x9F4E,0x9F4F,/* 0x50-0x57 */ + 0x9F52,0x9F53,0x9F54,0x9F55,0x9F56,0x9F57,0x9F58,0x9F59,/* 0x58-0x5F */ + 0x9F5A,0x9F5B,0x9F5C,0x9F5D,0x9F5E,0x9F5F,0x9F60,0x9F61,/* 0x60-0x67 */ + 0x9F62,0x9F63,0x9F64,0x9F65,0x9F66,0x9F67,0x9F68,0x9F69,/* 0x68-0x6F */ + 0x9F6A,0x9F6B,0x9F6C,0x9F6D,0x9F6E,0x9F6F,0x9F70,0x9F71,/* 0x70-0x77 */ + 0x9F72,0x9F73,0x9F74,0x9F75,0x9F76,0x9F77,0x9F78,0x0000,/* 0x78-0x7F */ + + 0x9F79,0x9F7A,0x9F7B,0x9F7C,0x9F7D,0x9F7E,0x9F81,0x9F82,/* 0x80-0x87 */ + 0xF9C4,0x9F8E,0x9F8F,0x9F90,0x9F91,0x9F92,0x9F93,0x9F94,/* 0x88-0x8F */ + 0x9F95,0x9F96,0x9F97,0x9F98,0xF908,0x9F9D,0x9F9E,0x9FA1,/* 0x90-0x97 */ + 0x9FA2,0x9FA3,0x9FA4,0x9FA5,0xF92C,0xF979,0xF995,0xF9E7,/* 0x98-0x9F */ + 0xF9F1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_FE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0xFA0C,0xFA0D,0xFA0E,0xFA0F,0xFA11,0xFA13,0xFA14,0xFA18,/* 0x40-0x47 */ + 0xFA1F,0xFA20,0xFA21,0xFA23,0xFA24,0xFA27,0xFA28,0xFA29,/* 0x48-0x4F */ +}; + +static wchar_t *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_81, c2u_82, c2u_83, c2u_84, c2u_85, c2u_86, c2u_87, + c2u_88, c2u_89, c2u_8A, c2u_8B, c2u_8C, c2u_8D, c2u_8E, c2u_8F, + c2u_90, c2u_91, c2u_92, c2u_93, c2u_94, c2u_95, c2u_96, c2u_97, + c2u_98, c2u_99, c2u_9A, c2u_9B, c2u_9C, c2u_9D, c2u_9E, c2u_9F, + c2u_A0, c2u_A1, c2u_A2, c2u_A3, c2u_A4, c2u_A5, c2u_A6, c2u_A7, + c2u_A8, c2u_A9, c2u_AA, c2u_AB, c2u_AC, c2u_AD, c2u_AE, c2u_AF, + c2u_B0, c2u_B1, c2u_B2, c2u_B3, c2u_B4, c2u_B5, c2u_B6, c2u_B7, + c2u_B8, c2u_B9, c2u_BA, c2u_BB, c2u_BC, c2u_BD, c2u_BE, c2u_BF, + c2u_C0, c2u_C1, c2u_C2, c2u_C3, c2u_C4, c2u_C5, c2u_C6, c2u_C7, + c2u_C8, c2u_C9, c2u_CA, c2u_CB, c2u_CC, c2u_CD, c2u_CE, c2u_CF, + c2u_D0, c2u_D1, c2u_D2, c2u_D3, c2u_D4, c2u_D5, c2u_D6, c2u_D7, + c2u_D8, c2u_D9, c2u_DA, c2u_DB, c2u_DC, c2u_DD, c2u_DE, c2u_DF, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, c2u_EB, c2u_EC, c2u_ED, c2u_EE, c2u_EF, + c2u_F0, c2u_F1, c2u_F2, c2u_F3, c2u_F4, c2u_F5, c2u_F6, c2u_F7, + c2u_F8, c2u_F9, c2u_FA, c2u_FB, c2u_FC, c2u_FD, c2u_FE, NULL, +}; + +static unsigned char u2c_01[512] = { + 0xA8, 0xA1, 0xA8, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA5, 0xA8, 0xA5, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA7, 0xA8, 0xA7, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA9, 0xA8, 0xA9, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xA8, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xA8, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xA8, 0xAD, 0xA8, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xB1, 0xA8, 0xB1, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xA1, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xA8, 0xA3, 0xA8, 0xA3, 0xA8, 0xAB, /* 0xCC-0xCF */ + 0xA8, 0xAB, 0xA8, 0xAF, 0xA8, 0xAF, 0xA8, 0xB3, /* 0xD0-0xD3 */ + 0xA8, 0xB3, 0xA8, 0xB5, 0xA8, 0xB5, 0xA8, 0xB6, /* 0xD4-0xD7 */ + 0xA8, 0xB6, 0xA8, 0xB7, 0xA8, 0xB7, 0xA8, 0xB8, /* 0xD8-0xDB */ + 0xA8, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ +}; + +static unsigned char u2c_02[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xA8, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xA8, 0xC0, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xA6, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xA1, 0xA5, 0xA8, 0x40, 0xA8, 0x41, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xA8, 0x42, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ +}; + +static unsigned char u2c_03[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xA6, 0xA1, 0xA6, 0xA2, 0xA6, 0xA3, /* 0x90-0x93 */ + 0xA6, 0xA4, 0xA6, 0xA5, 0xA6, 0xA6, 0xA6, 0xA7, /* 0x94-0x97 */ + 0xA6, 0xA8, 0xA6, 0xA9, 0xA6, 0xAA, 0xA6, 0xAB, /* 0x98-0x9B */ + 0xA6, 0xAC, 0xA6, 0xAD, 0xA6, 0xAE, 0xA6, 0xAF, /* 0x9C-0x9F */ + 0xA6, 0xB0, 0xA6, 0xB1, 0x00, 0x00, 0xA6, 0xB2, /* 0xA0-0xA3 */ + 0xA6, 0xB3, 0xA6, 0xB4, 0xA6, 0xB5, 0xA6, 0xB6, /* 0xA4-0xA7 */ + 0xA6, 0xB7, 0xA6, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xA6, 0xC1, 0xA6, 0xC2, 0xA6, 0xC3, /* 0xB0-0xB3 */ + 0xA6, 0xC4, 0xA6, 0xC5, 0xA6, 0xC6, 0xA6, 0xC7, /* 0xB4-0xB7 */ + 0xA6, 0xC8, 0xA6, 0xC9, 0xA6, 0xCA, 0xA6, 0xCB, /* 0xB8-0xBB */ + 0xA6, 0xCC, 0xA6, 0xCD, 0xA6, 0xCE, 0xA6, 0xCF, /* 0xBC-0xBF */ + 0xA6, 0xD0, 0xA6, 0xD1, 0x00, 0x00, 0xA6, 0xD2, /* 0xC0-0xC3 */ + 0xA6, 0xD3, 0xA6, 0xD4, 0xA6, 0xD5, 0xA6, 0xD6, /* 0xC4-0xC7 */ + 0xA6, 0xD7, 0xA6, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ +}; + +static unsigned char u2c_04[512] = { + 0x00, 0x00, 0xA7, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xA7, 0xA1, 0xA7, 0xA2, 0xA7, 0xA3, 0xA7, 0xA4, /* 0x10-0x13 */ + 0xA7, 0xA5, 0xA7, 0xA6, 0xA7, 0xA8, 0xA7, 0xA9, /* 0x14-0x17 */ + 0xA7, 0xAA, 0xA7, 0xAB, 0xA7, 0xAC, 0xA7, 0xAD, /* 0x18-0x1B */ + 0xA7, 0xAE, 0xA7, 0xAF, 0xA7, 0xB0, 0xA7, 0xB1, /* 0x1C-0x1F */ + 0xA7, 0xB2, 0xA7, 0xB3, 0xA7, 0xB4, 0xA7, 0xB5, /* 0x20-0x23 */ + 0xA7, 0xB6, 0xA7, 0xB7, 0xA7, 0xB8, 0xA7, 0xB9, /* 0x24-0x27 */ + 0xA7, 0xBA, 0xA7, 0xBB, 0xA7, 0xBC, 0xA7, 0xBD, /* 0x28-0x2B */ + 0xA7, 0xBE, 0xA7, 0xBF, 0xA7, 0xC0, 0xA7, 0xC1, /* 0x2C-0x2F */ + 0xA7, 0xD1, 0xA7, 0xD2, 0xA7, 0xD3, 0xA7, 0xD4, /* 0x30-0x33 */ + 0xA7, 0xD5, 0xA7, 0xD6, 0xA7, 0xD8, 0xA7, 0xD9, /* 0x34-0x37 */ + 0xA7, 0xDA, 0xA7, 0xDB, 0xA7, 0xDC, 0xA7, 0xDD, /* 0x38-0x3B */ + 0xA7, 0xDE, 0xA7, 0xDF, 0xA7, 0xE0, 0xA7, 0xE1, /* 0x3C-0x3F */ + 0xA7, 0xE2, 0xA7, 0xE3, 0xA7, 0xE4, 0xA7, 0xE5, /* 0x40-0x43 */ + 0xA7, 0xE6, 0xA7, 0xE7, 0xA7, 0xE8, 0xA7, 0xE9, /* 0x44-0x47 */ + 0xA7, 0xEA, 0xA7, 0xEB, 0xA7, 0xEC, 0xA7, 0xED, /* 0x48-0x4B */ + 0xA7, 0xEE, 0xA7, 0xEF, 0xA7, 0xF0, 0xA7, 0xF1, /* 0x4C-0x4F */ + 0x00, 0x00, 0xA7, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ +}; + +static unsigned char u2c_20[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xA9, 0x5C, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x43, /* 0x10-0x13 */ + 0xA1, 0xAA, 0xA8, 0x44, 0xA1, 0xAC, 0x00, 0x00, /* 0x14-0x17 */ + 0xA1, 0xAE, 0xA1, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xA1, 0xB0, 0xA1, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xA8, 0x45, 0xA1, 0xAD, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA1, 0xEB, 0x00, 0x00, 0xA1, 0xE4, 0xA1, 0xE5, /* 0x30-0x33 */ + 0x00, 0x00, 0xA8, 0x46, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF9, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFE, 0x00, 0x00, /* 0x3C-0x3F */ +}; + +static unsigned char u2c_21[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xE6, /* 0x00-0x03 */ + 0x00, 0x00, 0xA8, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xA8, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xED, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xA9, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA2, 0xF1, 0xA2, 0xF2, 0xA2, 0xF3, 0xA2, 0xF4, /* 0x60-0x63 */ + 0xA2, 0xF5, 0xA2, 0xF6, 0xA2, 0xF7, 0xA2, 0xF8, /* 0x64-0x67 */ + 0xA2, 0xF9, 0xA2, 0xFA, 0xA2, 0xFB, 0xA2, 0xFC, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xA2, 0xA1, 0xA2, 0xA2, 0xA2, 0xA3, 0xA2, 0xA4, /* 0x70-0x73 */ + 0xA2, 0xA5, 0xA2, 0xA6, 0xA2, 0xA7, 0xA2, 0xA8, /* 0x74-0x77 */ + 0xA2, 0xA9, 0xA2, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xA1, 0xFB, 0xA1, 0xFC, 0xA1, 0xFA, 0xA1, 0xFD, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x49, 0xA8, 0x4A, /* 0x94-0x97 */ + 0xA8, 0x4B, 0xA8, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ +}; + +static unsigned char u2c_22[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xA1, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xC7, /* 0x0C-0x0F */ + 0x00, 0x00, 0xA1, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xA8, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xA1, 0xE3, 0x00, 0x00, 0xA1, 0xCC, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xA1, 0xD8, 0xA1, 0xDE, 0xA8, 0x4E, /* 0x1C-0x1F */ + 0xA1, 0xCF, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x4F, /* 0x20-0x23 */ + 0x00, 0x00, 0xA1, 0xCE, 0x00, 0x00, 0xA1, 0xC4, /* 0x24-0x27 */ + 0xA1, 0xC5, 0xA1, 0xC9, 0xA1, 0xC8, 0xA1, 0xD2, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD3, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xA1, 0xE0, 0xA1, 0xDF, 0xA1, 0xC3, 0xA1, 0xCB, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xA1, 0xAB, 0xA1, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xA1, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xA1, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x50, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA1, 0xD9, 0xA1, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xA1, 0xDC, 0xA1, 0xDD, 0xA8, 0x51, 0xA8, 0x52, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xDA, 0xA1, 0xDB, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xA8, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xA1, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xA1, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x53, /* 0xBC-0xBF */ +}; + +static unsigned char u2c_23[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD0, 0x00, 0x00, /* 0x10-0x13 */ +}; + +static unsigned char u2c_24[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA2, 0xD9, 0xA2, 0xDA, 0xA2, 0xDB, 0xA2, 0xDC, /* 0x60-0x63 */ + 0xA2, 0xDD, 0xA2, 0xDE, 0xA2, 0xDF, 0xA2, 0xE0, /* 0x64-0x67 */ + 0xA2, 0xE1, 0xA2, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xA2, 0xC5, 0xA2, 0xC6, 0xA2, 0xC7, 0xA2, 0xC8, /* 0x74-0x77 */ + 0xA2, 0xC9, 0xA2, 0xCA, 0xA2, 0xCB, 0xA2, 0xCC, /* 0x78-0x7B */ + 0xA2, 0xCD, 0xA2, 0xCE, 0xA2, 0xCF, 0xA2, 0xD0, /* 0x7C-0x7F */ + + 0xA2, 0xD1, 0xA2, 0xD2, 0xA2, 0xD3, 0xA2, 0xD4, /* 0x80-0x83 */ + 0xA2, 0xD5, 0xA2, 0xD6, 0xA2, 0xD7, 0xA2, 0xD8, /* 0x84-0x87 */ + 0xA2, 0xB1, 0xA2, 0xB2, 0xA2, 0xB3, 0xA2, 0xB4, /* 0x88-0x8B */ + 0xA2, 0xB5, 0xA2, 0xB6, 0xA2, 0xB7, 0xA2, 0xB8, /* 0x8C-0x8F */ + 0xA2, 0xB9, 0xA2, 0xBA, 0xA2, 0xBB, 0xA2, 0xBC, /* 0x90-0x93 */ + 0xA2, 0xBD, 0xA2, 0xBE, 0xA2, 0xBF, 0xA2, 0xC0, /* 0x94-0x97 */ + 0xA2, 0xC1, 0xA2, 0xC2, 0xA2, 0xC3, 0xA2, 0xC4, /* 0x98-0x9B */ +}; + +static unsigned char u2c_25[512] = { + 0xA9, 0xA4, 0xA9, 0xA5, 0xA9, 0xA6, 0xA9, 0xA7, /* 0x00-0x03 */ + 0xA9, 0xA8, 0xA9, 0xA9, 0xA9, 0xAA, 0xA9, 0xAB, /* 0x04-0x07 */ + 0xA9, 0xAC, 0xA9, 0xAD, 0xA9, 0xAE, 0xA9, 0xAF, /* 0x08-0x0B */ + 0xA9, 0xB0, 0xA9, 0xB1, 0xA9, 0xB2, 0xA9, 0xB3, /* 0x0C-0x0F */ + 0xA9, 0xB4, 0xA9, 0xB5, 0xA9, 0xB6, 0xA9, 0xB7, /* 0x10-0x13 */ + 0xA9, 0xB8, 0xA9, 0xB9, 0xA9, 0xBA, 0xA9, 0xBB, /* 0x14-0x17 */ + 0xA9, 0xBC, 0xA9, 0xBD, 0xA9, 0xBE, 0xA9, 0xBF, /* 0x18-0x1B */ + 0xA9, 0xC0, 0xA9, 0xC1, 0xA9, 0xC2, 0xA9, 0xC3, /* 0x1C-0x1F */ + 0xA9, 0xC4, 0xA9, 0xC5, 0xA9, 0xC6, 0xA9, 0xC7, /* 0x20-0x23 */ + 0xA9, 0xC8, 0xA9, 0xC9, 0xA9, 0xCA, 0xA9, 0xCB, /* 0x24-0x27 */ + 0xA9, 0xCC, 0xA9, 0xCD, 0xA9, 0xCE, 0xA9, 0xCF, /* 0x28-0x2B */ + 0xA9, 0xD0, 0xA9, 0xD1, 0xA9, 0xD2, 0xA9, 0xD3, /* 0x2C-0x2F */ + 0xA9, 0xD4, 0xA9, 0xD5, 0xA9, 0xD6, 0xA9, 0xD7, /* 0x30-0x33 */ + 0xA9, 0xD8, 0xA9, 0xD9, 0xA9, 0xDA, 0xA9, 0xDB, /* 0x34-0x37 */ + 0xA9, 0xDC, 0xA9, 0xDD, 0xA9, 0xDE, 0xA9, 0xDF, /* 0x38-0x3B */ + 0xA9, 0xE0, 0xA9, 0xE1, 0xA9, 0xE2, 0xA9, 0xE3, /* 0x3C-0x3F */ + 0xA9, 0xE4, 0xA9, 0xE5, 0xA9, 0xE6, 0xA9, 0xE7, /* 0x40-0x43 */ + 0xA9, 0xE8, 0xA9, 0xE9, 0xA9, 0xEA, 0xA9, 0xEB, /* 0x44-0x47 */ + 0xA9, 0xEC, 0xA9, 0xED, 0xA9, 0xEE, 0xA9, 0xEF, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xA8, 0x54, 0xA8, 0x55, 0xA8, 0x56, 0xA8, 0x57, /* 0x50-0x53 */ + 0xA8, 0x58, 0xA8, 0x59, 0xA8, 0x5A, 0xA8, 0x5B, /* 0x54-0x57 */ + 0xA8, 0x5C, 0xA8, 0x5D, 0xA8, 0x5E, 0xA8, 0x5F, /* 0x58-0x5B */ + 0xA8, 0x60, 0xA8, 0x61, 0xA8, 0x62, 0xA8, 0x63, /* 0x5C-0x5F */ + 0xA8, 0x64, 0xA8, 0x65, 0xA8, 0x66, 0xA8, 0x67, /* 0x60-0x63 */ + 0xA8, 0x68, 0xA8, 0x69, 0xA8, 0x6A, 0xA8, 0x6B, /* 0x64-0x67 */ + 0xA8, 0x6C, 0xA8, 0x6D, 0xA8, 0x6E, 0xA8, 0x6F, /* 0x68-0x6B */ + 0xA8, 0x70, 0xA8, 0x71, 0xA8, 0x72, 0xA8, 0x73, /* 0x6C-0x6F */ + 0xA8, 0x74, 0xA8, 0x75, 0xA8, 0x76, 0xA8, 0x77, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xA8, 0x78, 0xA8, 0x79, 0xA8, 0x7A, /* 0x80-0x83 */ + 0xA8, 0x7B, 0xA8, 0x7C, 0xA8, 0x7D, 0xA8, 0x7E, /* 0x84-0x87 */ + 0xA8, 0x80, 0xA8, 0x81, 0xA8, 0x82, 0xA8, 0x83, /* 0x88-0x8B */ + 0xA8, 0x84, 0xA8, 0x85, 0xA8, 0x86, 0xA8, 0x87, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x88, /* 0x90-0x93 */ + 0xA8, 0x89, 0xA8, 0x8A, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xA1, 0xF6, 0xA1, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF8, 0xA1, 0xF7, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xA8, 0x8B, 0xA8, 0x8C, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF4, 0xA1, 0xF3, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF0, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF2, 0xA1, 0xF1, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0x8D, 0xA8, 0x8E, /* 0xE0-0xE3 */ + 0xA8, 0x8F, 0xA8, 0x90, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_26[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA1, 0xEF, 0xA1, 0xEE, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xA8, 0x91, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xA1, 0xE2, 0x00, 0x00, 0xA1, 0xE1, 0x00, 0x00, /* 0x40-0x43 */ +}; + +static unsigned char u2c_30[512] = { + 0xA1, 0xA1, 0xA1, 0xA2, 0xA1, 0xA3, 0xA1, 0xA8, /* 0x00-0x03 */ + 0x00, 0x00, 0xA1, 0xA9, 0xA9, 0x65, 0xA9, 0x96, /* 0x04-0x07 */ + 0xA1, 0xB4, 0xA1, 0xB5, 0xA1, 0xB6, 0xA1, 0xB7, /* 0x08-0x0B */ + 0xA1, 0xB8, 0xA1, 0xB9, 0xA1, 0xBA, 0xA1, 0xBB, /* 0x0C-0x0F */ + 0xA1, 0xBE, 0xA1, 0xBF, 0xA8, 0x93, 0xA1, 0xFE, /* 0x10-0x13 */ + 0xA1, 0xB2, 0xA1, 0xB3, 0xA1, 0xBC, 0xA1, 0xBD, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xA8, 0x94, 0xA8, 0x95, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xA9, 0x40, 0xA9, 0x41, 0xA9, 0x42, /* 0x20-0x23 */ + 0xA9, 0x43, 0xA9, 0x44, 0xA9, 0x45, 0xA9, 0x46, /* 0x24-0x27 */ + 0xA9, 0x47, 0xA9, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA3, /* 0x40-0x43 */ + 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA6, 0xA4, 0xA7, /* 0x44-0x47 */ + 0xA4, 0xA8, 0xA4, 0xA9, 0xA4, 0xAA, 0xA4, 0xAB, /* 0x48-0x4B */ + 0xA4, 0xAC, 0xA4, 0xAD, 0xA4, 0xAE, 0xA4, 0xAF, /* 0x4C-0x4F */ + 0xA4, 0xB0, 0xA4, 0xB1, 0xA4, 0xB2, 0xA4, 0xB3, /* 0x50-0x53 */ + 0xA4, 0xB4, 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB7, /* 0x54-0x57 */ + 0xA4, 0xB8, 0xA4, 0xB9, 0xA4, 0xBA, 0xA4, 0xBB, /* 0x58-0x5B */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0xA4, 0xBF, /* 0x5C-0x5F */ + 0xA4, 0xC0, 0xA4, 0xC1, 0xA4, 0xC2, 0xA4, 0xC3, /* 0x60-0x63 */ + 0xA4, 0xC4, 0xA4, 0xC5, 0xA4, 0xC6, 0xA4, 0xC7, /* 0x64-0x67 */ + 0xA4, 0xC8, 0xA4, 0xC9, 0xA4, 0xCA, 0xA4, 0xCB, /* 0x68-0x6B */ + 0xA4, 0xCC, 0xA4, 0xCD, 0xA4, 0xCE, 0xA4, 0xCF, /* 0x6C-0x6F */ + 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xD2, 0xA4, 0xD3, /* 0x70-0x73 */ + 0xA4, 0xD4, 0xA4, 0xD5, 0xA4, 0xD6, 0xA4, 0xD7, /* 0x74-0x77 */ + 0xA4, 0xD8, 0xA4, 0xD9, 0xA4, 0xDA, 0xA4, 0xDB, /* 0x78-0x7B */ + 0xA4, 0xDC, 0xA4, 0xDD, 0xA4, 0xDE, 0xA4, 0xDF, /* 0x7C-0x7F */ + + 0xA4, 0xE0, 0xA4, 0xE1, 0xA4, 0xE2, 0xA4, 0xE3, /* 0x80-0x83 */ + 0xA4, 0xE4, 0xA4, 0xE5, 0xA4, 0xE6, 0xA4, 0xE7, /* 0x84-0x87 */ + 0xA4, 0xE8, 0xA4, 0xE9, 0xA4, 0xEA, 0xA4, 0xEB, /* 0x88-0x8B */ + 0xA4, 0xEC, 0xA4, 0xED, 0xA4, 0xEE, 0xA4, 0xEF, /* 0x8C-0x8F */ + 0xA4, 0xF0, 0xA4, 0xF1, 0xA4, 0xF2, 0xA4, 0xF3, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x61, /* 0x98-0x9B */ + 0xA9, 0x62, 0xA9, 0x66, 0xA9, 0x67, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xA5, 0xA1, 0xA5, 0xA2, 0xA5, 0xA3, /* 0xA0-0xA3 */ + 0xA5, 0xA4, 0xA5, 0xA5, 0xA5, 0xA6, 0xA5, 0xA7, /* 0xA4-0xA7 */ + 0xA5, 0xA8, 0xA5, 0xA9, 0xA5, 0xAA, 0xA5, 0xAB, /* 0xA8-0xAB */ + 0xA5, 0xAC, 0xA5, 0xAD, 0xA5, 0xAE, 0xA5, 0xAF, /* 0xAC-0xAF */ + 0xA5, 0xB0, 0xA5, 0xB1, 0xA5, 0xB2, 0xA5, 0xB3, /* 0xB0-0xB3 */ + 0xA5, 0xB4, 0xA5, 0xB5, 0xA5, 0xB6, 0xA5, 0xB7, /* 0xB4-0xB7 */ + 0xA5, 0xB8, 0xA5, 0xB9, 0xA5, 0xBA, 0xA5, 0xBB, /* 0xB8-0xBB */ + 0xA5, 0xBC, 0xA5, 0xBD, 0xA5, 0xBE, 0xA5, 0xBF, /* 0xBC-0xBF */ + 0xA5, 0xC0, 0xA5, 0xC1, 0xA5, 0xC2, 0xA5, 0xC3, /* 0xC0-0xC3 */ + 0xA5, 0xC4, 0xA5, 0xC5, 0xA5, 0xC6, 0xA5, 0xC7, /* 0xC4-0xC7 */ + 0xA5, 0xC8, 0xA5, 0xC9, 0xA5, 0xCA, 0xA5, 0xCB, /* 0xC8-0xCB */ + 0xA5, 0xCC, 0xA5, 0xCD, 0xA5, 0xCE, 0xA5, 0xCF, /* 0xCC-0xCF */ + 0xA5, 0xD0, 0xA5, 0xD1, 0xA5, 0xD2, 0xA5, 0xD3, /* 0xD0-0xD3 */ + 0xA5, 0xD4, 0xA5, 0xD5, 0xA5, 0xD6, 0xA5, 0xD7, /* 0xD4-0xD7 */ + 0xA5, 0xD8, 0xA5, 0xD9, 0xA5, 0xDA, 0xA5, 0xDB, /* 0xD8-0xDB */ + 0xA5, 0xDC, 0xA5, 0xDD, 0xA5, 0xDE, 0xA5, 0xDF, /* 0xDC-0xDF */ + 0xA5, 0xE0, 0xA5, 0xE1, 0xA5, 0xE2, 0xA5, 0xE3, /* 0xE0-0xE3 */ + 0xA5, 0xE4, 0xA5, 0xE5, 0xA5, 0xE6, 0xA5, 0xE7, /* 0xE4-0xE7 */ + 0xA5, 0xE8, 0xA5, 0xE9, 0xA5, 0xEA, 0xA5, 0xEB, /* 0xE8-0xEB */ + 0xA5, 0xEC, 0xA5, 0xED, 0xA5, 0xEE, 0xA5, 0xEF, /* 0xEC-0xEF */ + 0xA5, 0xF0, 0xA5, 0xF1, 0xA5, 0xF2, 0xA5, 0xF3, /* 0xF0-0xF3 */ + 0xA5, 0xF4, 0xA5, 0xF5, 0xA5, 0xF6, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xA9, 0x60, 0xA9, 0x63, 0xA9, 0x64, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_31[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA8, 0xC5, 0xA8, 0xC6, 0xA8, 0xC7, /* 0x04-0x07 */ + 0xA8, 0xC8, 0xA8, 0xC9, 0xA8, 0xCA, 0xA8, 0xCB, /* 0x08-0x0B */ + 0xA8, 0xCC, 0xA8, 0xCD, 0xA8, 0xCE, 0xA8, 0xCF, /* 0x0C-0x0F */ + 0xA8, 0xD0, 0xA8, 0xD1, 0xA8, 0xD2, 0xA8, 0xD3, /* 0x10-0x13 */ + 0xA8, 0xD4, 0xA8, 0xD5, 0xA8, 0xD6, 0xA8, 0xD7, /* 0x14-0x17 */ + 0xA8, 0xD8, 0xA8, 0xD9, 0xA8, 0xDA, 0xA8, 0xDB, /* 0x18-0x1B */ + 0xA8, 0xDC, 0xA8, 0xDD, 0xA8, 0xDE, 0xA8, 0xDF, /* 0x1C-0x1F */ + 0xA8, 0xE0, 0xA8, 0xE1, 0xA8, 0xE2, 0xA8, 0xE3, /* 0x20-0x23 */ + 0xA8, 0xE4, 0xA8, 0xE5, 0xA8, 0xE6, 0xA8, 0xE7, /* 0x24-0x27 */ + 0xA8, 0xE8, 0xA8, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0xBB, 0xB6, 0xFE, /* 0x90-0x93 */ + 0xC8, 0xFD, 0xCB, 0xC4, 0xC9, 0xCF, 0xD6, 0xD0, /* 0x94-0x97 */ + 0xCF, 0xC2, 0xBC, 0xD7, 0xD2, 0xD2, 0xB1, 0xFB, /* 0x98-0x9B */ + 0xB6, 0xA1, 0xCC, 0xEC, 0xB5, 0xD8, 0xC8, 0xCB, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_32[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xA2, 0xE5, 0xA2, 0xE6, 0xA2, 0xE7, 0xA2, 0xE8, /* 0x20-0x23 */ + 0xA2, 0xE9, 0xA2, 0xEA, 0xA2, 0xEB, 0xA2, 0xEC, /* 0x24-0x27 */ + 0xA2, 0xED, 0xA2, 0xEE, 0xD4, 0xC2, 0xBB, 0xF0, /* 0x28-0x2B */ + 0xCB, 0xAE, 0xC4, 0xBE, 0xBD, 0xF0, 0xCD, 0xC1, /* 0x2C-0x2F */ + 0xC8, 0xD5, 0xA9, 0x5A, 0xD3, 0xD0, 0xC9, 0xE7, /* 0x30-0x33 */ + 0xC3, 0xFB, 0xCC, 0xD8, 0xB2, 0xC6, 0xD7, 0xA3, /* 0x34-0x37 */ + 0xC0, 0xCD, 0xB4, 0xFA, 0xBA, 0xF4, 0xD1, 0xA7, /* 0x38-0x3B */ + 0xBC, 0xE0, 0xC6, 0xF3, 0xD7, 0xCA, 0xD0, 0xAD, /* 0x3C-0x3F */ + 0xBC, 0xC0, 0xD0, 0xDD, 0xD7, 0xD4, 0xD6, 0xC1, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xD2, 0xBB, 0xB6, 0xFE, 0xC8, 0xFD, 0xCB, 0xC4, /* 0x80-0x83 */ + 0xCE, 0xE5, 0xC1, 0xF9, 0xC6, 0xDF, 0xB0, 0xCB, /* 0x84-0x87 */ + 0xBE, 0xC5, 0xCA, 0xAE, 0xD4, 0xC2, 0xBB, 0xF0, /* 0x88-0x8B */ + 0xCB, 0xAE, 0xC4, 0xBE, 0xBD, 0xF0, 0xCD, 0xC1, /* 0x8C-0x8F */ + 0xC8, 0xD5, 0xD6, 0xEA, 0xD3, 0xD0, 0xC9, 0xE7, /* 0x90-0x93 */ + 0xC3, 0xFB, 0xCC, 0xD8, 0xB2, 0xC6, 0xD7, 0xA3, /* 0x94-0x97 */ + 0xC0, 0xCD, 0xC3, 0xD8, 0xC4, 0xD0, 0xC5, 0xAE, /* 0x98-0x9B */ + 0xCA, 0xCA, 0xD3, 0xC5, 0x00, 0x00, 0xD7, 0xA2, /* 0x9C-0x9F */ + 0xCF, 0xEE, 0xD0, 0xDD, 0xD0, 0xB4, 0xA9, 0x49, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xD2, 0xBD, 0xD7, 0xDA, 0xD1, 0xA7, /* 0xA8-0xAB */ + 0xBC, 0xE0, 0xC6, 0xF3, 0xD7, 0xCA, 0xD0, 0xAD, /* 0xAC-0xAF */ + 0xD2, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ +}; + +static unsigned char u2c_33[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0x4A, 0xA9, 0x4B, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xA9, 0x4C, 0xA9, 0x4D, 0xA9, 0x4E, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xA9, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xA9, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0x51, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xA9, 0x52, 0xA9, 0x53, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xA9, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ +}; + +static unsigned char u2c_4E[512] = { + 0xD2, 0xBB, 0xB6, 0xA1, 0x81, 0x40, 0xC6, 0xDF, /* 0x00-0x03 */ + 0x81, 0x41, 0x81, 0x42, 0x81, 0x43, 0xCD, 0xF2, /* 0x04-0x07 */ + 0xD5, 0xC9, 0xC8, 0xFD, 0xC9, 0xCF, 0xCF, 0xC2, /* 0x08-0x0B */ + 0xD8, 0xA2, 0xB2, 0xBB, 0xD3, 0xEB, 0x81, 0x44, /* 0x0C-0x0F */ + 0xD8, 0xA4, 0xB3, 0xF3, 0x81, 0x45, 0xD7, 0xA8, /* 0x10-0x13 */ + 0xC7, 0xD2, 0xD8, 0xA7, 0xCA, 0xC0, 0x81, 0x46, /* 0x14-0x17 */ + 0xC7, 0xF0, 0xB1, 0xFB, 0xD2, 0xB5, 0xB4, 0xD4, /* 0x18-0x1B */ + 0xB6, 0xAB, 0xCB, 0xBF, 0xD8, 0xA9, 0x81, 0x47, /* 0x1C-0x1F */ + 0x81, 0x48, 0x81, 0x49, 0xB6, 0xAA, 0x81, 0x4A, /* 0x20-0x23 */ + 0xC1, 0xBD, 0xD1, 0xCF, 0x81, 0x4B, 0xC9, 0xA5, /* 0x24-0x27 */ + 0xD8, 0xAD, 0x81, 0x4C, 0xB8, 0xF6, 0xD1, 0xBE, /* 0x28-0x2B */ + 0xE3, 0xDC, 0xD6, 0xD0, 0x81, 0x4D, 0x81, 0x4E, /* 0x2C-0x2F */ + 0xB7, 0xE1, 0x81, 0x4F, 0xB4, 0xAE, 0x81, 0x50, /* 0x30-0x33 */ + 0xC1, 0xD9, 0x81, 0x51, 0xD8, 0xBC, 0x81, 0x52, /* 0x34-0x37 */ + 0xCD, 0xE8, 0xB5, 0xA4, 0xCE, 0xAA, 0xD6, 0xF7, /* 0x38-0x3B */ + 0x81, 0x53, 0xC0, 0xF6, 0xBE, 0xD9, 0xD8, 0xAF, /* 0x3C-0x3F */ + 0x81, 0x54, 0x81, 0x55, 0x81, 0x56, 0xC4, 0xCB, /* 0x40-0x43 */ + 0x81, 0x57, 0xBE, 0xC3, 0x81, 0x58, 0xD8, 0xB1, /* 0x44-0x47 */ + 0xC3, 0xB4, 0xD2, 0xE5, 0x81, 0x59, 0xD6, 0xAE, /* 0x48-0x4B */ + 0xCE, 0xDA, 0xD5, 0xA7, 0xBA, 0xF5, 0xB7, 0xA6, /* 0x4C-0x4F */ + 0xC0, 0xD6, 0x81, 0x5A, 0xC6, 0xB9, 0xC5, 0xD2, /* 0x50-0x53 */ + 0xC7, 0xC7, 0x81, 0x5B, 0xB9, 0xD4, 0x81, 0x5C, /* 0x54-0x57 */ + 0xB3, 0xCB, 0xD2, 0xD2, 0x81, 0x5D, 0x81, 0x5E, /* 0x58-0x5B */ + 0xD8, 0xBF, 0xBE, 0xC5, 0xC6, 0xF2, 0xD2, 0xB2, /* 0x5C-0x5F */ + 0xCF, 0xB0, 0xCF, 0xE7, 0x81, 0x5F, 0x81, 0x60, /* 0x60-0x63 */ + 0x81, 0x61, 0x81, 0x62, 0xCA, 0xE9, 0x81, 0x63, /* 0x64-0x67 */ + 0x81, 0x64, 0xD8, 0xC0, 0x81, 0x65, 0x81, 0x66, /* 0x68-0x6B */ + 0x81, 0x67, 0x81, 0x68, 0x81, 0x69, 0x81, 0x6A, /* 0x6C-0x6F */ + 0xC2, 0xF2, 0xC2, 0xD2, 0x81, 0x6B, 0xC8, 0xE9, /* 0x70-0x73 */ + 0x81, 0x6C, 0x81, 0x6D, 0x81, 0x6E, 0x81, 0x6F, /* 0x74-0x77 */ + 0x81, 0x70, 0x81, 0x71, 0x81, 0x72, 0x81, 0x73, /* 0x78-0x7B */ + 0x81, 0x74, 0x81, 0x75, 0xC7, 0xAC, 0x81, 0x76, /* 0x7C-0x7F */ + + 0x81, 0x77, 0x81, 0x78, 0x81, 0x79, 0x81, 0x7A, /* 0x80-0x83 */ + 0x81, 0x7B, 0x81, 0x7C, 0xC1, 0xCB, 0x81, 0x7D, /* 0x84-0x87 */ + 0xD3, 0xE8, 0xD5, 0xF9, 0x81, 0x7E, 0xCA, 0xC2, /* 0x88-0x8B */ + 0xB6, 0xFE, 0xD8, 0xA1, 0xD3, 0xDA, 0xBF, 0xF7, /* 0x8C-0x8F */ + 0x81, 0x80, 0xD4, 0xC6, 0xBB, 0xA5, 0xD8, 0xC1, /* 0x90-0x93 */ + 0xCE, 0xE5, 0xBE, 0xAE, 0x81, 0x81, 0x81, 0x82, /* 0x94-0x97 */ + 0xD8, 0xA8, 0x81, 0x83, 0xD1, 0xC7, 0xD0, 0xA9, /* 0x98-0x9B */ + 0x81, 0x84, 0x81, 0x85, 0x81, 0x86, 0xD8, 0xBD, /* 0x9C-0x9F */ + 0xD9, 0xEF, 0xCD, 0xF6, 0xBF, 0xBA, 0x81, 0x87, /* 0xA0-0xA3 */ + 0xBD, 0xBB, 0xBA, 0xA5, 0xD2, 0xE0, 0xB2, 0xFA, /* 0xA4-0xA7 */ + 0xBA, 0xE0, 0xC4, 0xB6, 0x81, 0x88, 0xCF, 0xED, /* 0xA8-0xAB */ + 0xBE, 0xA9, 0xCD, 0xA4, 0xC1, 0xC1, 0x81, 0x89, /* 0xAC-0xAF */ + 0x81, 0x8A, 0x81, 0x8B, 0xC7, 0xD7, 0xD9, 0xF1, /* 0xB0-0xB3 */ + 0x81, 0x8C, 0xD9, 0xF4, 0x81, 0x8D, 0x81, 0x8E, /* 0xB4-0xB7 */ + 0x81, 0x8F, 0x81, 0x90, 0xC8, 0xCB, 0xD8, 0xE9, /* 0xB8-0xBB */ + 0x81, 0x91, 0x81, 0x92, 0x81, 0x93, 0xD2, 0xDA, /* 0xBC-0xBF */ + 0xCA, 0xB2, 0xC8, 0xCA, 0xD8, 0xEC, 0xD8, 0xEA, /* 0xC0-0xC3 */ + 0xD8, 0xC6, 0xBD, 0xF6, 0xC6, 0xCD, 0xB3, 0xF0, /* 0xC4-0xC7 */ + 0x81, 0x94, 0xD8, 0xEB, 0xBD, 0xF1, 0xBD, 0xE9, /* 0xC8-0xCB */ + 0x81, 0x95, 0xC8, 0xD4, 0xB4, 0xD3, 0x81, 0x96, /* 0xCC-0xCF */ + 0x81, 0x97, 0xC2, 0xD8, 0x81, 0x98, 0xB2, 0xD6, /* 0xD0-0xD3 */ + 0xD7, 0xD0, 0xCA, 0xCB, 0xCB, 0xFB, 0xD5, 0xCC, /* 0xD4-0xD7 */ + 0xB8, 0xB6, 0xCF, 0xC9, 0x81, 0x99, 0x81, 0x9A, /* 0xD8-0xDB */ + 0x81, 0x9B, 0xD9, 0xDA, 0xD8, 0xF0, 0xC7, 0xAA, /* 0xDC-0xDF */ + 0x81, 0x9C, 0xD8, 0xEE, 0x81, 0x9D, 0xB4, 0xFA, /* 0xE0-0xE3 */ + 0xC1, 0xEE, 0xD2, 0xD4, 0x81, 0x9E, 0x81, 0x9F, /* 0xE4-0xE7 */ + 0xD8, 0xED, 0x81, 0xA0, 0xD2, 0xC7, 0xD8, 0xEF, /* 0xE8-0xEB */ + 0xC3, 0xC7, 0x81, 0xA1, 0x81, 0xA2, 0x81, 0xA3, /* 0xEC-0xEF */ + 0xD1, 0xF6, 0x81, 0xA4, 0xD6, 0xD9, 0xD8, 0xF2, /* 0xF0-0xF3 */ + 0x81, 0xA5, 0xD8, 0xF5, 0xBC, 0xFE, 0xBC, 0xDB, /* 0xF4-0xF7 */ + 0x81, 0xA6, 0x81, 0xA7, 0x81, 0xA8, 0xC8, 0xCE, /* 0xF8-0xFB */ + 0x81, 0xA9, 0xB7, 0xDD, 0x81, 0xAA, 0xB7, 0xC2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0x81, 0xAB, 0xC6, 0xF3, 0x81, 0xAC, 0x81, 0xAD, /* 0x00-0x03 */ + 0x81, 0xAE, 0x81, 0xAF, 0x81, 0xB0, 0x81, 0xB1, /* 0x04-0x07 */ + 0x81, 0xB2, 0xD8, 0xF8, 0xD2, 0xC1, 0x81, 0xB3, /* 0x08-0x0B */ + 0x81, 0xB4, 0xCE, 0xE9, 0xBC, 0xBF, 0xB7, 0xFC, /* 0x0C-0x0F */ + 0xB7, 0xA5, 0xD0, 0xDD, 0x81, 0xB5, 0x81, 0xB6, /* 0x10-0x13 */ + 0x81, 0xB7, 0x81, 0xB8, 0x81, 0xB9, 0xD6, 0xDA, /* 0x14-0x17 */ + 0xD3, 0xC5, 0xBB, 0xEF, 0xBB, 0xE1, 0xD8, 0xF1, /* 0x18-0x1B */ + 0x81, 0xBA, 0x81, 0xBB, 0xC9, 0xA1, 0xCE, 0xB0, /* 0x1C-0x1F */ + 0xB4, 0xAB, 0x81, 0xBC, 0xD8, 0xF3, 0x81, 0xBD, /* 0x20-0x23 */ + 0xC9, 0xCB, 0xD8, 0xF6, 0xC2, 0xD7, 0xD8, 0xF7, /* 0x24-0x27 */ + 0x81, 0xBE, 0x81, 0xBF, 0xCE, 0xB1, 0xD8, 0xF9, /* 0x28-0x2B */ + 0x81, 0xC0, 0x81, 0xC1, 0x81, 0xC2, 0xB2, 0xAE, /* 0x2C-0x2F */ + 0xB9, 0xC0, 0x81, 0xC3, 0xD9, 0xA3, 0x81, 0xC4, /* 0x30-0x33 */ + 0xB0, 0xE9, 0x81, 0xC5, 0xC1, 0xE6, 0x81, 0xC6, /* 0x34-0x37 */ + 0xC9, 0xEC, 0x81, 0xC7, 0xCB, 0xC5, 0x81, 0xC8, /* 0x38-0x3B */ + 0xCB, 0xC6, 0xD9, 0xA4, 0x81, 0xC9, 0x81, 0xCA, /* 0x3C-0x3F */ + 0x81, 0xCB, 0x81, 0xCC, 0x81, 0xCD, 0xB5, 0xE8, /* 0x40-0x43 */ + 0x81, 0xCE, 0x81, 0xCF, 0xB5, 0xAB, 0x81, 0xD0, /* 0x44-0x47 */ + 0x81, 0xD1, 0x81, 0xD2, 0x81, 0xD3, 0x81, 0xD4, /* 0x48-0x4B */ + 0x81, 0xD5, 0xCE, 0xBB, 0xB5, 0xCD, 0xD7, 0xA1, /* 0x4C-0x4F */ + 0xD7, 0xF4, 0xD3, 0xD3, 0x81, 0xD6, 0xCC, 0xE5, /* 0x50-0x53 */ + 0x81, 0xD7, 0xBA, 0xCE, 0x81, 0xD8, 0xD9, 0xA2, /* 0x54-0x57 */ + 0xD9, 0xDC, 0xD3, 0xE0, 0xD8, 0xFD, 0xB7, 0xF0, /* 0x58-0x5B */ + 0xD7, 0xF7, 0xD8, 0xFE, 0xD8, 0xFA, 0xD9, 0xA1, /* 0x5C-0x5F */ + 0xC4, 0xE3, 0x81, 0xD9, 0x81, 0xDA, 0xD3, 0xB6, /* 0x60-0x63 */ + 0xD8, 0xF4, 0xD9, 0xDD, 0x81, 0xDB, 0xD8, 0xFB, /* 0x64-0x67 */ + 0x81, 0xDC, 0xC5, 0xE5, 0x81, 0xDD, 0x81, 0xDE, /* 0x68-0x6B */ + 0xC0, 0xD0, 0x81, 0xDF, 0x81, 0xE0, 0xD1, 0xF0, /* 0x6C-0x6F */ + 0xB0, 0xDB, 0x81, 0xE1, 0x81, 0xE2, 0xBC, 0xD1, /* 0x70-0x73 */ + 0xD9, 0xA6, 0x81, 0xE3, 0xD9, 0xA5, 0x81, 0xE4, /* 0x74-0x77 */ + 0x81, 0xE5, 0x81, 0xE6, 0x81, 0xE7, 0xD9, 0xAC, /* 0x78-0x7B */ + 0xD9, 0xAE, 0x81, 0xE8, 0xD9, 0xAB, 0xCA, 0xB9, /* 0x7C-0x7F */ + + 0x81, 0xE9, 0x81, 0xEA, 0x81, 0xEB, 0xD9, 0xA9, /* 0x80-0x83 */ + 0xD6, 0xB6, 0x81, 0xEC, 0x81, 0xED, 0x81, 0xEE, /* 0x84-0x87 */ + 0xB3, 0xDE, 0xD9, 0xA8, 0x81, 0xEF, 0xC0, 0xFD, /* 0x88-0x8B */ + 0x81, 0xF0, 0xCA, 0xCC, 0x81, 0xF1, 0xD9, 0xAA, /* 0x8C-0x8F */ + 0x81, 0xF2, 0xD9, 0xA7, 0x81, 0xF3, 0x81, 0xF4, /* 0x90-0x93 */ + 0xD9, 0xB0, 0x81, 0xF5, 0x81, 0xF6, 0xB6, 0xB1, /* 0x94-0x97 */ + 0x81, 0xF7, 0x81, 0xF8, 0x81, 0xF9, 0xB9, 0xA9, /* 0x98-0x9B */ + 0x81, 0xFA, 0xD2, 0xC0, 0x81, 0xFB, 0x81, 0xFC, /* 0x9C-0x9F */ + 0xCF, 0xC0, 0x81, 0xFD, 0x81, 0xFE, 0xC2, 0xC2, /* 0xA0-0xA3 */ + 0x82, 0x40, 0xBD, 0xC4, 0xD5, 0xEC, 0xB2, 0xE0, /* 0xA4-0xA7 */ + 0xC7, 0xC8, 0xBF, 0xEB, 0xD9, 0xAD, 0x82, 0x41, /* 0xA8-0xAB */ + 0xD9, 0xAF, 0x82, 0x42, 0xCE, 0xEA, 0xBA, 0xEE, /* 0xAC-0xAF */ + 0x82, 0x43, 0x82, 0x44, 0x82, 0x45, 0x82, 0x46, /* 0xB0-0xB3 */ + 0x82, 0x47, 0xC7, 0xD6, 0x82, 0x48, 0x82, 0x49, /* 0xB4-0xB7 */ + 0x82, 0x4A, 0x82, 0x4B, 0x82, 0x4C, 0x82, 0x4D, /* 0xB8-0xBB */ + 0x82, 0x4E, 0x82, 0x4F, 0x82, 0x50, 0xB1, 0xE3, /* 0xBC-0xBF */ + 0x82, 0x51, 0x82, 0x52, 0x82, 0x53, 0xB4, 0xD9, /* 0xC0-0xC3 */ + 0xB6, 0xED, 0xD9, 0xB4, 0x82, 0x54, 0x82, 0x55, /* 0xC4-0xC7 */ + 0x82, 0x56, 0x82, 0x57, 0xBF, 0xA1, 0x82, 0x58, /* 0xC8-0xCB */ + 0x82, 0x59, 0x82, 0x5A, 0xD9, 0xDE, 0xC7, 0xCE, /* 0xCC-0xCF */ + 0xC0, 0xFE, 0xD9, 0xB8, 0x82, 0x5B, 0x82, 0x5C, /* 0xD0-0xD3 */ + 0x82, 0x5D, 0x82, 0x5E, 0x82, 0x5F, 0xCB, 0xD7, /* 0xD4-0xD7 */ + 0xB7, 0xFD, 0x82, 0x60, 0xD9, 0xB5, 0x82, 0x61, /* 0xD8-0xDB */ + 0xD9, 0xB7, 0xB1, 0xA3, 0xD3, 0xE1, 0xD9, 0xB9, /* 0xDC-0xDF */ + 0x82, 0x62, 0xD0, 0xC5, 0x82, 0x63, 0xD9, 0xB6, /* 0xE0-0xE3 */ + 0x82, 0x64, 0x82, 0x65, 0xD9, 0xB1, 0x82, 0x66, /* 0xE4-0xE7 */ + 0xD9, 0xB2, 0xC1, 0xA9, 0xD9, 0xB3, 0x82, 0x67, /* 0xE8-0xEB */ + 0x82, 0x68, 0xBC, 0xF3, 0xD0, 0xDE, 0xB8, 0xA9, /* 0xEC-0xEF */ + 0x82, 0x69, 0xBE, 0xE3, 0x82, 0x6A, 0xD9, 0xBD, /* 0xF0-0xF3 */ + 0x82, 0x6B, 0x82, 0x6C, 0x82, 0x6D, 0x82, 0x6E, /* 0xF4-0xF7 */ + 0xD9, 0xBA, 0x82, 0x6F, 0xB0, 0xB3, 0x82, 0x70, /* 0xF8-0xFB */ + 0x82, 0x71, 0x82, 0x72, 0xD9, 0xC2, 0x82, 0x73, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0x82, 0x74, 0x82, 0x75, 0x82, 0x76, 0x82, 0x77, /* 0x00-0x03 */ + 0x82, 0x78, 0x82, 0x79, 0x82, 0x7A, 0x82, 0x7B, /* 0x04-0x07 */ + 0x82, 0x7C, 0x82, 0x7D, 0x82, 0x7E, 0x82, 0x80, /* 0x08-0x0B */ + 0xD9, 0xC4, 0xB1, 0xB6, 0x82, 0x81, 0xD9, 0xBF, /* 0x0C-0x0F */ + 0x82, 0x82, 0x82, 0x83, 0xB5, 0xB9, 0x82, 0x84, /* 0x10-0x13 */ + 0xBE, 0xF3, 0x82, 0x85, 0x82, 0x86, 0x82, 0x87, /* 0x14-0x17 */ + 0xCC, 0xC8, 0xBA, 0xF2, 0xD2, 0xD0, 0x82, 0x88, /* 0x18-0x1B */ + 0xD9, 0xC3, 0x82, 0x89, 0x82, 0x8A, 0xBD, 0xE8, /* 0x1C-0x1F */ + 0x82, 0x8B, 0xB3, 0xAB, 0x82, 0x8C, 0x82, 0x8D, /* 0x20-0x23 */ + 0x82, 0x8E, 0xD9, 0xC5, 0xBE, 0xEB, 0x82, 0x8F, /* 0x24-0x27 */ + 0xD9, 0xC6, 0xD9, 0xBB, 0xC4, 0xDF, 0x82, 0x90, /* 0x28-0x2B */ + 0xD9, 0xBE, 0xD9, 0xC1, 0xD9, 0xC0, 0x82, 0x91, /* 0x2C-0x2F */ + 0x82, 0x92, 0x82, 0x93, 0x82, 0x94, 0x82, 0x95, /* 0x30-0x33 */ + 0x82, 0x96, 0x82, 0x97, 0x82, 0x98, 0x82, 0x99, /* 0x34-0x37 */ + 0x82, 0x9A, 0x82, 0x9B, 0xD5, 0xAE, 0x82, 0x9C, /* 0x38-0x3B */ + 0xD6, 0xB5, 0x82, 0x9D, 0xC7, 0xE3, 0x82, 0x9E, /* 0x3C-0x3F */ + 0x82, 0x9F, 0x82, 0xA0, 0x82, 0xA1, 0xD9, 0xC8, /* 0x40-0x43 */ + 0x82, 0xA2, 0x82, 0xA3, 0x82, 0xA4, 0xBC, 0xD9, /* 0x44-0x47 */ + 0xD9, 0xCA, 0x82, 0xA5, 0x82, 0xA6, 0x82, 0xA7, /* 0x48-0x4B */ + 0xD9, 0xBC, 0x82, 0xA8, 0xD9, 0xCB, 0xC6, 0xAB, /* 0x4C-0x4F */ + 0x82, 0xA9, 0x82, 0xAA, 0x82, 0xAB, 0x82, 0xAC, /* 0x50-0x53 */ + 0x82, 0xAD, 0xD9, 0xC9, 0x82, 0xAE, 0x82, 0xAF, /* 0x54-0x57 */ + 0x82, 0xB0, 0x82, 0xB1, 0xD7, 0xF6, 0x82, 0xB2, /* 0x58-0x5B */ + 0xCD, 0xA3, 0x82, 0xB3, 0x82, 0xB4, 0x82, 0xB5, /* 0x5C-0x5F */ + 0x82, 0xB6, 0x82, 0xB7, 0x82, 0xB8, 0x82, 0xB9, /* 0x60-0x63 */ + 0x82, 0xBA, 0xBD, 0xA1, 0x82, 0xBB, 0x82, 0xBC, /* 0x64-0x67 */ + 0x82, 0xBD, 0x82, 0xBE, 0x82, 0xBF, 0x82, 0xC0, /* 0x68-0x6B */ + 0xD9, 0xCC, 0x82, 0xC1, 0x82, 0xC2, 0x82, 0xC3, /* 0x6C-0x6F */ + 0x82, 0xC4, 0x82, 0xC5, 0x82, 0xC6, 0x82, 0xC7, /* 0x70-0x73 */ + 0x82, 0xC8, 0x82, 0xC9, 0xC5, 0xBC, 0xCD, 0xB5, /* 0x74-0x77 */ + 0x82, 0xCA, 0x82, 0xCB, 0x82, 0xCC, 0xD9, 0xCD, /* 0x78-0x7B */ + 0x82, 0xCD, 0x82, 0xCE, 0xD9, 0xC7, 0xB3, 0xA5, /* 0x7C-0x7F */ + + 0xBF, 0xFE, 0x82, 0xCF, 0x82, 0xD0, 0x82, 0xD1, /* 0x80-0x83 */ + 0x82, 0xD2, 0xB8, 0xB5, 0x82, 0xD3, 0x82, 0xD4, /* 0x84-0x87 */ + 0xC0, 0xFC, 0x82, 0xD5, 0x82, 0xD6, 0x82, 0xD7, /* 0x88-0x8B */ + 0x82, 0xD8, 0xB0, 0xF8, 0x82, 0xD9, 0x82, 0xDA, /* 0x8C-0x8F */ + 0x82, 0xDB, 0x82, 0xDC, 0x82, 0xDD, 0x82, 0xDE, /* 0x90-0x93 */ + 0x82, 0xDF, 0x82, 0xE0, 0x82, 0xE1, 0x82, 0xE2, /* 0x94-0x97 */ + 0x82, 0xE3, 0x82, 0xE4, 0x82, 0xE5, 0x82, 0xE6, /* 0x98-0x9B */ + 0x82, 0xE7, 0x82, 0xE8, 0x82, 0xE9, 0x82, 0xEA, /* 0x9C-0x9F */ + 0x82, 0xEB, 0x82, 0xEC, 0x82, 0xED, 0xB4, 0xF6, /* 0xA0-0xA3 */ + 0x82, 0xEE, 0xD9, 0xCE, 0x82, 0xEF, 0xD9, 0xCF, /* 0xA4-0xA7 */ + 0xB4, 0xA2, 0xD9, 0xD0, 0x82, 0xF0, 0x82, 0xF1, /* 0xA8-0xAB */ + 0xB4, 0xDF, 0x82, 0xF2, 0x82, 0xF3, 0x82, 0xF4, /* 0xAC-0xAF */ + 0x82, 0xF5, 0x82, 0xF6, 0xB0, 0xC1, 0x82, 0xF7, /* 0xB0-0xB3 */ + 0x82, 0xF8, 0x82, 0xF9, 0x82, 0xFA, 0x82, 0xFB, /* 0xB4-0xB7 */ + 0x82, 0xFC, 0x82, 0xFD, 0xD9, 0xD1, 0xC9, 0xB5, /* 0xB8-0xBB */ + 0x82, 0xFE, 0x83, 0x40, 0x83, 0x41, 0x83, 0x42, /* 0xBC-0xBF */ + 0x83, 0x43, 0x83, 0x44, 0x83, 0x45, 0x83, 0x46, /* 0xC0-0xC3 */ + 0x83, 0x47, 0x83, 0x48, 0x83, 0x49, 0x83, 0x4A, /* 0xC4-0xC7 */ + 0x83, 0x4B, 0x83, 0x4C, 0x83, 0x4D, 0x83, 0x4E, /* 0xC8-0xCB */ + 0x83, 0x4F, 0x83, 0x50, 0x83, 0x51, 0xCF, 0xF1, /* 0xCC-0xCF */ + 0x83, 0x52, 0x83, 0x53, 0x83, 0x54, 0x83, 0x55, /* 0xD0-0xD3 */ + 0x83, 0x56, 0x83, 0x57, 0xD9, 0xD2, 0x83, 0x58, /* 0xD4-0xD7 */ + 0x83, 0x59, 0x83, 0x5A, 0xC1, 0xC5, 0x83, 0x5B, /* 0xD8-0xDB */ + 0x83, 0x5C, 0x83, 0x5D, 0x83, 0x5E, 0x83, 0x5F, /* 0xDC-0xDF */ + 0x83, 0x60, 0x83, 0x61, 0x83, 0x62, 0x83, 0x63, /* 0xE0-0xE3 */ + 0x83, 0x64, 0x83, 0x65, 0xD9, 0xD6, 0xC9, 0xAE, /* 0xE4-0xE7 */ + 0x83, 0x66, 0x83, 0x67, 0x83, 0x68, 0x83, 0x69, /* 0xE8-0xEB */ + 0xD9, 0xD5, 0xD9, 0xD4, 0xD9, 0xD7, 0x83, 0x6A, /* 0xEC-0xEF */ + 0x83, 0x6B, 0x83, 0x6C, 0x83, 0x6D, 0xCB, 0xDB, /* 0xF0-0xF3 */ + 0x83, 0x6E, 0xBD, 0xA9, 0x83, 0x6F, 0x83, 0x70, /* 0xF4-0xF7 */ + 0x83, 0x71, 0x83, 0x72, 0x83, 0x73, 0xC6, 0xA7, /* 0xF8-0xFB */ + 0x83, 0x74, 0x83, 0x75, 0x83, 0x76, 0x83, 0x77, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0x83, 0x78, 0x83, 0x79, 0x83, 0x7A, 0x83, 0x7B, /* 0x00-0x03 */ + 0x83, 0x7C, 0x83, 0x7D, 0xD9, 0xD3, 0xD9, 0xD8, /* 0x04-0x07 */ + 0x83, 0x7E, 0x83, 0x80, 0x83, 0x81, 0xD9, 0xD9, /* 0x08-0x0B */ + 0x83, 0x82, 0x83, 0x83, 0x83, 0x84, 0x83, 0x85, /* 0x0C-0x0F */ + 0x83, 0x86, 0x83, 0x87, 0xC8, 0xE5, 0x83, 0x88, /* 0x10-0x13 */ + 0x83, 0x89, 0x83, 0x8A, 0x83, 0x8B, 0x83, 0x8C, /* 0x14-0x17 */ + 0x83, 0x8D, 0x83, 0x8E, 0x83, 0x8F, 0x83, 0x90, /* 0x18-0x1B */ + 0x83, 0x91, 0x83, 0x92, 0x83, 0x93, 0x83, 0x94, /* 0x1C-0x1F */ + 0x83, 0x95, 0xC0, 0xDC, 0x83, 0x96, 0x83, 0x97, /* 0x20-0x23 */ + 0x83, 0x98, 0x83, 0x99, 0x83, 0x9A, 0x83, 0x9B, /* 0x24-0x27 */ + 0x83, 0x9C, 0x83, 0x9D, 0x83, 0x9E, 0x83, 0x9F, /* 0x28-0x2B */ + 0x83, 0xA0, 0x83, 0xA1, 0x83, 0xA2, 0x83, 0xA3, /* 0x2C-0x2F */ + 0x83, 0xA4, 0x83, 0xA5, 0x83, 0xA6, 0x83, 0xA7, /* 0x30-0x33 */ + 0x83, 0xA8, 0x83, 0xA9, 0x83, 0xAA, 0x83, 0xAB, /* 0x34-0x37 */ + 0x83, 0xAC, 0x83, 0xAD, 0x83, 0xAE, 0x83, 0xAF, /* 0x38-0x3B */ + 0x83, 0xB0, 0x83, 0xB1, 0x83, 0xB2, 0xB6, 0xF9, /* 0x3C-0x3F */ + 0xD8, 0xA3, 0xD4, 0xCA, 0x83, 0xB3, 0xD4, 0xAA, /* 0x40-0x43 */ + 0xD0, 0xD6, 0xB3, 0xE4, 0xD5, 0xD7, 0x83, 0xB4, /* 0x44-0x47 */ + 0xCF, 0xC8, 0xB9, 0xE2, 0x83, 0xB5, 0xBF, 0xCB, /* 0x48-0x4B */ + 0x83, 0xB6, 0xC3, 0xE2, 0x83, 0xB7, 0x83, 0xB8, /* 0x4C-0x4F */ + 0x83, 0xB9, 0xB6, 0xD2, 0x83, 0xBA, 0x83, 0xBB, /* 0x50-0x53 */ + 0xCD, 0xC3, 0xD9, 0xEE, 0xD9, 0xF0, 0x83, 0xBC, /* 0x54-0x57 */ + 0x83, 0xBD, 0x83, 0xBE, 0xB5, 0xB3, 0x83, 0xBF, /* 0x58-0x5B */ + 0xB6, 0xB5, 0x83, 0xC0, 0x83, 0xC1, 0x83, 0xC2, /* 0x5C-0x5F */ + 0x83, 0xC3, 0x83, 0xC4, 0xBE, 0xA4, 0x83, 0xC5, /* 0x60-0x63 */ + 0x83, 0xC6, 0xC8, 0xEB, 0x83, 0xC7, 0x83, 0xC8, /* 0x64-0x67 */ + 0xC8, 0xAB, 0x83, 0xC9, 0x83, 0xCA, 0xB0, 0xCB, /* 0x68-0x6B */ + 0xB9, 0xAB, 0xC1, 0xF9, 0xD9, 0xE2, 0x83, 0xCB, /* 0x6C-0x6F */ + 0xC0, 0xBC, 0xB9, 0xB2, 0x83, 0xCC, 0xB9, 0xD8, /* 0x70-0x73 */ + 0xD0, 0xCB, 0xB1, 0xF8, 0xC6, 0xE4, 0xBE, 0xDF, /* 0x74-0x77 */ + 0xB5, 0xE4, 0xD7, 0xC8, 0x83, 0xCD, 0xD1, 0xF8, /* 0x78-0x7B */ + 0xBC, 0xE6, 0xCA, 0xDE, 0x83, 0xCE, 0x83, 0xCF, /* 0x7C-0x7F */ + + 0xBC, 0xBD, 0xD9, 0xE6, 0xD8, 0xE7, 0x83, 0xD0, /* 0x80-0x83 */ + 0x83, 0xD1, 0xC4, 0xDA, 0x83, 0xD2, 0x83, 0xD3, /* 0x84-0x87 */ + 0xB8, 0xD4, 0xC8, 0xBD, 0x83, 0xD4, 0x83, 0xD5, /* 0x88-0x8B */ + 0xB2, 0xE1, 0xD4, 0xD9, 0x83, 0xD6, 0x83, 0xD7, /* 0x8C-0x8F */ + 0x83, 0xD8, 0x83, 0xD9, 0xC3, 0xB0, 0x83, 0xDA, /* 0x90-0x93 */ + 0x83, 0xDB, 0xC3, 0xE1, 0xDA, 0xA2, 0xC8, 0xDF, /* 0x94-0x97 */ + 0x83, 0xDC, 0xD0, 0xB4, 0x83, 0xDD, 0xBE, 0xFC, /* 0x98-0x9B */ + 0xC5, 0xA9, 0x83, 0xDE, 0x83, 0xDF, 0x83, 0xE0, /* 0x9C-0x9F */ + 0xB9, 0xDA, 0x83, 0xE1, 0xDA, 0xA3, 0x83, 0xE2, /* 0xA0-0xA3 */ + 0xD4, 0xA9, 0xDA, 0xA4, 0x83, 0xE3, 0x83, 0xE4, /* 0xA4-0xA7 */ + 0x83, 0xE5, 0x83, 0xE6, 0x83, 0xE7, 0xD9, 0xFB, /* 0xA8-0xAB */ + 0xB6, 0xAC, 0x83, 0xE8, 0x83, 0xE9, 0xB7, 0xEB, /* 0xAC-0xAF */ + 0xB1, 0xF9, 0xD9, 0xFC, 0xB3, 0xE5, 0xBE, 0xF6, /* 0xB0-0xB3 */ + 0x83, 0xEA, 0xBF, 0xF6, 0xD2, 0xB1, 0xC0, 0xE4, /* 0xB4-0xB7 */ + 0x83, 0xEB, 0x83, 0xEC, 0x83, 0xED, 0xB6, 0xB3, /* 0xB8-0xBB */ + 0xD9, 0xFE, 0xD9, 0xFD, 0x83, 0xEE, 0x83, 0xEF, /* 0xBC-0xBF */ + 0xBE, 0xBB, 0x83, 0xF0, 0x83, 0xF1, 0x83, 0xF2, /* 0xC0-0xC3 */ + 0xC6, 0xE0, 0x83, 0xF3, 0xD7, 0xBC, 0xDA, 0xA1, /* 0xC4-0xC7 */ + 0x83, 0xF4, 0xC1, 0xB9, 0x83, 0xF5, 0xB5, 0xF2, /* 0xC8-0xCB */ + 0xC1, 0xE8, 0x83, 0xF6, 0x83, 0xF7, 0xBC, 0xF5, /* 0xCC-0xCF */ + 0x83, 0xF8, 0xB4, 0xD5, 0x83, 0xF9, 0x83, 0xFA, /* 0xD0-0xD3 */ + 0x83, 0xFB, 0x83, 0xFC, 0x83, 0xFD, 0x83, 0xFE, /* 0xD4-0xD7 */ + 0x84, 0x40, 0x84, 0x41, 0x84, 0x42, 0xC1, 0xDD, /* 0xD8-0xDB */ + 0x84, 0x43, 0xC4, 0xFD, 0x84, 0x44, 0x84, 0x45, /* 0xDC-0xDF */ + 0xBC, 0xB8, 0xB7, 0xB2, 0x84, 0x46, 0x84, 0x47, /* 0xE0-0xE3 */ + 0xB7, 0xEF, 0x84, 0x48, 0x84, 0x49, 0x84, 0x4A, /* 0xE4-0xE7 */ + 0x84, 0x4B, 0x84, 0x4C, 0x84, 0x4D, 0xD9, 0xEC, /* 0xE8-0xEB */ + 0x84, 0x4E, 0xC6, 0xBE, 0x84, 0x4F, 0xBF, 0xAD, /* 0xEC-0xEF */ + 0xBB, 0xCB, 0x84, 0x50, 0x84, 0x51, 0xB5, 0xCA, /* 0xF0-0xF3 */ + 0x84, 0x52, 0xDB, 0xC9, 0xD0, 0xD7, 0x84, 0x53, /* 0xF4-0xF7 */ + 0xCD, 0xB9, 0xB0, 0xBC, 0xB3, 0xF6, 0xBB, 0xF7, /* 0xF8-0xFB */ + 0xDB, 0xCA, 0xBA, 0xAF, 0x84, 0x54, 0xD4, 0xE4, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0xB5, 0xB6, 0xB5, 0xF3, 0xD8, 0xD6, 0xC8, 0xD0, /* 0x00-0x03 */ + 0x84, 0x55, 0x84, 0x56, 0xB7, 0xD6, 0xC7, 0xD0, /* 0x04-0x07 */ + 0xD8, 0xD7, 0x84, 0x57, 0xBF, 0xAF, 0x84, 0x58, /* 0x08-0x0B */ + 0x84, 0x59, 0xDB, 0xBB, 0xD8, 0xD8, 0x84, 0x5A, /* 0x0C-0x0F */ + 0x84, 0x5B, 0xD0, 0xCC, 0xBB, 0xAE, 0x84, 0x5C, /* 0x10-0x13 */ + 0x84, 0x5D, 0x84, 0x5E, 0xEB, 0xBE, 0xC1, 0xD0, /* 0x14-0x17 */ + 0xC1, 0xF5, 0xD4, 0xF2, 0xB8, 0xD5, 0xB4, 0xB4, /* 0x18-0x1B */ + 0x84, 0x5F, 0xB3, 0xF5, 0x84, 0x60, 0x84, 0x61, /* 0x1C-0x1F */ + 0xC9, 0xBE, 0x84, 0x62, 0x84, 0x63, 0x84, 0x64, /* 0x20-0x23 */ + 0xC5, 0xD0, 0x84, 0x65, 0x84, 0x66, 0x84, 0x67, /* 0x24-0x27 */ + 0xC5, 0xD9, 0xC0, 0xFB, 0x84, 0x68, 0xB1, 0xF0, /* 0x28-0x2B */ + 0x84, 0x69, 0xD8, 0xD9, 0xB9, 0xCE, 0x84, 0x6A, /* 0x2C-0x2F */ + 0xB5, 0xBD, 0x84, 0x6B, 0x84, 0x6C, 0xD8, 0xDA, /* 0x30-0x33 */ + 0x84, 0x6D, 0x84, 0x6E, 0xD6, 0xC6, 0xCB, 0xA2, /* 0x34-0x37 */ + 0xC8, 0xAF, 0xC9, 0xB2, 0xB4, 0xCC, 0xBF, 0xCC, /* 0x38-0x3B */ + 0x84, 0x6F, 0xB9, 0xF4, 0x84, 0x70, 0xD8, 0xDB, /* 0x3C-0x3F */ + 0xD8, 0xDC, 0xB6, 0xE7, 0xBC, 0xC1, 0xCC, 0xEA, /* 0x40-0x43 */ + 0x84, 0x71, 0x84, 0x72, 0x84, 0x73, 0x84, 0x74, /* 0x44-0x47 */ + 0x84, 0x75, 0x84, 0x76, 0xCF, 0xF7, 0x84, 0x77, /* 0x48-0x4B */ + 0xD8, 0xDD, 0xC7, 0xB0, 0x84, 0x78, 0x84, 0x79, /* 0x4C-0x4F */ + 0xB9, 0xD0, 0xBD, 0xA3, 0x84, 0x7A, 0x84, 0x7B, /* 0x50-0x53 */ + 0xCC, 0xDE, 0x84, 0x7C, 0xC6, 0xCA, 0x84, 0x7D, /* 0x54-0x57 */ + 0x84, 0x7E, 0x84, 0x80, 0x84, 0x81, 0x84, 0x82, /* 0x58-0x5B */ + 0xD8, 0xE0, 0x84, 0x83, 0xD8, 0xDE, 0x84, 0x84, /* 0x5C-0x5F */ + 0x84, 0x85, 0xD8, 0xDF, 0x84, 0x86, 0x84, 0x87, /* 0x60-0x63 */ + 0x84, 0x88, 0xB0, 0xFE, 0x84, 0x89, 0xBE, 0xE7, /* 0x64-0x67 */ + 0x84, 0x8A, 0xCA, 0xA3, 0xBC, 0xF4, 0x84, 0x8B, /* 0x68-0x6B */ + 0x84, 0x8C, 0x84, 0x8D, 0x84, 0x8E, 0xB8, 0xB1, /* 0x6C-0x6F */ + 0x84, 0x8F, 0x84, 0x90, 0xB8, 0xEE, 0x84, 0x91, /* 0x70-0x73 */ + 0x84, 0x92, 0x84, 0x93, 0x84, 0x94, 0x84, 0x95, /* 0x74-0x77 */ + 0x84, 0x96, 0x84, 0x97, 0x84, 0x98, 0x84, 0x99, /* 0x78-0x7B */ + 0x84, 0x9A, 0xD8, 0xE2, 0x84, 0x9B, 0xBD, 0xCB, /* 0x7C-0x7F */ + + 0x84, 0x9C, 0xD8, 0xE4, 0xD8, 0xE3, 0x84, 0x9D, /* 0x80-0x83 */ + 0x84, 0x9E, 0x84, 0x9F, 0x84, 0xA0, 0x84, 0xA1, /* 0x84-0x87 */ + 0xC5, 0xFC, 0x84, 0xA2, 0x84, 0xA3, 0x84, 0xA4, /* 0x88-0x8B */ + 0x84, 0xA5, 0x84, 0xA6, 0x84, 0xA7, 0x84, 0xA8, /* 0x8C-0x8F */ + 0xD8, 0xE5, 0x84, 0xA9, 0x84, 0xAA, 0xD8, 0xE6, /* 0x90-0x93 */ + 0x84, 0xAB, 0x84, 0xAC, 0x84, 0xAD, 0x84, 0xAE, /* 0x94-0x97 */ + 0x84, 0xAF, 0x84, 0xB0, 0x84, 0xB1, 0xC1, 0xA6, /* 0x98-0x9B */ + 0x84, 0xB2, 0xC8, 0xB0, 0xB0, 0xEC, 0xB9, 0xA6, /* 0x9C-0x9F */ + 0xBC, 0xD3, 0xCE, 0xF1, 0xDB, 0xBD, 0xC1, 0xD3, /* 0xA0-0xA3 */ + 0x84, 0xB3, 0x84, 0xB4, 0x84, 0xB5, 0x84, 0xB6, /* 0xA4-0xA7 */ + 0xB6, 0xAF, 0xD6, 0xFA, 0xC5, 0xAC, 0xBD, 0xD9, /* 0xA8-0xAB */ + 0xDB, 0xBE, 0xDB, 0xBF, 0x84, 0xB7, 0x84, 0xB8, /* 0xAC-0xAF */ + 0x84, 0xB9, 0xC0, 0xF8, 0xBE, 0xA2, 0xC0, 0xCD, /* 0xB0-0xB3 */ + 0x84, 0xBA, 0x84, 0xBB, 0x84, 0xBC, 0x84, 0xBD, /* 0xB4-0xB7 */ + 0x84, 0xBE, 0x84, 0xBF, 0x84, 0xC0, 0x84, 0xC1, /* 0xB8-0xBB */ + 0x84, 0xC2, 0x84, 0xC3, 0xDB, 0xC0, 0xCA, 0xC6, /* 0xBC-0xBF */ + 0x84, 0xC4, 0x84, 0xC5, 0x84, 0xC6, 0xB2, 0xAA, /* 0xC0-0xC3 */ + 0x84, 0xC7, 0x84, 0xC8, 0x84, 0xC9, 0xD3, 0xC2, /* 0xC4-0xC7 */ + 0x84, 0xCA, 0xC3, 0xE3, 0x84, 0xCB, 0xD1, 0xAB, /* 0xC8-0xCB */ + 0x84, 0xCC, 0x84, 0xCD, 0x84, 0xCE, 0x84, 0xCF, /* 0xCC-0xCF */ + 0xDB, 0xC2, 0x84, 0xD0, 0xC0, 0xD5, 0x84, 0xD1, /* 0xD0-0xD3 */ + 0x84, 0xD2, 0x84, 0xD3, 0xDB, 0xC3, 0x84, 0xD4, /* 0xD4-0xD7 */ + 0xBF, 0xB1, 0x84, 0xD5, 0x84, 0xD6, 0x84, 0xD7, /* 0xD8-0xDB */ + 0x84, 0xD8, 0x84, 0xD9, 0x84, 0xDA, 0xC4, 0xBC, /* 0xDC-0xDF */ + 0x84, 0xDB, 0x84, 0xDC, 0x84, 0xDD, 0x84, 0xDE, /* 0xE0-0xE3 */ + 0xC7, 0xDA, 0x84, 0xDF, 0x84, 0xE0, 0x84, 0xE1, /* 0xE4-0xE7 */ + 0x84, 0xE2, 0x84, 0xE3, 0x84, 0xE4, 0x84, 0xE5, /* 0xE8-0xEB */ + 0x84, 0xE6, 0x84, 0xE7, 0x84, 0xE8, 0x84, 0xE9, /* 0xEC-0xEF */ + 0xDB, 0xC4, 0x84, 0xEA, 0x84, 0xEB, 0x84, 0xEC, /* 0xF0-0xF3 */ + 0x84, 0xED, 0x84, 0xEE, 0x84, 0xEF, 0x84, 0xF0, /* 0xF4-0xF7 */ + 0x84, 0xF1, 0xD9, 0xE8, 0xC9, 0xD7, 0x84, 0xF2, /* 0xF8-0xFB */ + 0x84, 0xF3, 0x84, 0xF4, 0xB9, 0xB4, 0xCE, 0xF0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0xD4, 0xC8, 0x84, 0xF5, 0x84, 0xF6, 0x84, 0xF7, /* 0x00-0x03 */ + 0x84, 0xF8, 0xB0, 0xFC, 0xB4, 0xD2, 0x84, 0xF9, /* 0x04-0x07 */ + 0xD0, 0xD9, 0x84, 0xFA, 0x84, 0xFB, 0x84, 0xFC, /* 0x08-0x0B */ + 0x84, 0xFD, 0xD9, 0xE9, 0x84, 0xFE, 0xDE, 0xCB, /* 0x0C-0x0F */ + 0xD9, 0xEB, 0x85, 0x40, 0x85, 0x41, 0x85, 0x42, /* 0x10-0x13 */ + 0x85, 0x43, 0xD8, 0xB0, 0xBB, 0xAF, 0xB1, 0xB1, /* 0x14-0x17 */ + 0x85, 0x44, 0xB3, 0xD7, 0xD8, 0xCE, 0x85, 0x45, /* 0x18-0x1B */ + 0x85, 0x46, 0xD4, 0xD1, 0x85, 0x47, 0x85, 0x48, /* 0x1C-0x1F */ + 0xBD, 0xB3, 0xBF, 0xEF, 0x85, 0x49, 0xCF, 0xBB, /* 0x20-0x23 */ + 0x85, 0x4A, 0x85, 0x4B, 0xD8, 0xD0, 0x85, 0x4C, /* 0x24-0x27 */ + 0x85, 0x4D, 0x85, 0x4E, 0xB7, 0xCB, 0x85, 0x4F, /* 0x28-0x2B */ + 0x85, 0x50, 0x85, 0x51, 0xD8, 0xD1, 0x85, 0x52, /* 0x2C-0x2F */ + 0x85, 0x53, 0x85, 0x54, 0x85, 0x55, 0x85, 0x56, /* 0x30-0x33 */ + 0x85, 0x57, 0x85, 0x58, 0x85, 0x59, 0x85, 0x5A, /* 0x34-0x37 */ + 0x85, 0x5B, 0xC6, 0xA5, 0xC7, 0xF8, 0xD2, 0xBD, /* 0x38-0x3B */ + 0x85, 0x5C, 0x85, 0x5D, 0xD8, 0xD2, 0xC4, 0xE4, /* 0x3C-0x3F */ + 0x85, 0x5E, 0xCA, 0xAE, 0x85, 0x5F, 0xC7, 0xA7, /* 0x40-0x43 */ + 0x85, 0x60, 0xD8, 0xA6, 0x85, 0x61, 0xC9, 0xFD, /* 0x44-0x47 */ + 0xCE, 0xE7, 0xBB, 0xDC, 0xB0, 0xEB, 0x85, 0x62, /* 0x48-0x4B */ + 0x85, 0x63, 0x85, 0x64, 0xBB, 0xAA, 0xD0, 0xAD, /* 0x4C-0x4F */ + 0x85, 0x65, 0xB1, 0xB0, 0xD7, 0xE4, 0xD7, 0xBF, /* 0x50-0x53 */ + 0x85, 0x66, 0xB5, 0xA5, 0xC2, 0xF4, 0xC4, 0xCF, /* 0x54-0x57 */ + 0x85, 0x67, 0x85, 0x68, 0xB2, 0xA9, 0x85, 0x69, /* 0x58-0x5B */ + 0xB2, 0xB7, 0x85, 0x6A, 0xB1, 0xE5, 0xDF, 0xB2, /* 0x5C-0x5F */ + 0xD5, 0xBC, 0xBF, 0xA8, 0xC2, 0xAC, 0xD8, 0xD5, /* 0x60-0x63 */ + 0xC2, 0xB1, 0x85, 0x6B, 0xD8, 0xD4, 0xCE, 0xD4, /* 0x64-0x67 */ + 0x85, 0x6C, 0xDA, 0xE0, 0x85, 0x6D, 0xCE, 0xC0, /* 0x68-0x6B */ + 0x85, 0x6E, 0x85, 0x6F, 0xD8, 0xB4, 0xC3, 0xAE, /* 0x6C-0x6F */ + 0xD3, 0xA1, 0xCE, 0xA3, 0x85, 0x70, 0xBC, 0xB4, /* 0x70-0x73 */ + 0xC8, 0xB4, 0xC2, 0xD1, 0x85, 0x71, 0xBE, 0xED, /* 0x74-0x77 */ + 0xD0, 0xB6, 0x85, 0x72, 0xDA, 0xE1, 0x85, 0x73, /* 0x78-0x7B */ + 0x85, 0x74, 0x85, 0x75, 0x85, 0x76, 0xC7, 0xE4, /* 0x7C-0x7F */ + + 0x85, 0x77, 0x85, 0x78, 0xB3, 0xA7, 0x85, 0x79, /* 0x80-0x83 */ + 0xB6, 0xF2, 0xCC, 0xFC, 0xC0, 0xFA, 0x85, 0x7A, /* 0x84-0x87 */ + 0x85, 0x7B, 0xC0, 0xF7, 0x85, 0x7C, 0xD1, 0xB9, /* 0x88-0x8B */ + 0xD1, 0xE1, 0xD8, 0xC7, 0x85, 0x7D, 0x85, 0x7E, /* 0x8C-0x8F */ + 0x85, 0x80, 0x85, 0x81, 0x85, 0x82, 0x85, 0x83, /* 0x90-0x93 */ + 0x85, 0x84, 0xB2, 0xDE, 0x85, 0x85, 0x85, 0x86, /* 0x94-0x97 */ + 0xC0, 0xE5, 0x85, 0x87, 0xBA, 0xF1, 0x85, 0x88, /* 0x98-0x9B */ + 0x85, 0x89, 0xD8, 0xC8, 0x85, 0x8A, 0xD4, 0xAD, /* 0x9C-0x9F */ + 0x85, 0x8B, 0x85, 0x8C, 0xCF, 0xE1, 0xD8, 0xC9, /* 0xA0-0xA3 */ + 0x85, 0x8D, 0xD8, 0xCA, 0xCF, 0xC3, 0x85, 0x8E, /* 0xA4-0xA7 */ + 0xB3, 0xF8, 0xBE, 0xC7, 0x85, 0x8F, 0x85, 0x90, /* 0xA8-0xAB */ + 0x85, 0x91, 0x85, 0x92, 0xD8, 0xCB, 0x85, 0x93, /* 0xAC-0xAF */ + 0x85, 0x94, 0x85, 0x95, 0x85, 0x96, 0x85, 0x97, /* 0xB0-0xB3 */ + 0x85, 0x98, 0x85, 0x99, 0xDB, 0xCC, 0x85, 0x9A, /* 0xB4-0xB7 */ + 0x85, 0x9B, 0x85, 0x9C, 0x85, 0x9D, 0xC8, 0xA5, /* 0xB8-0xBB */ + 0x85, 0x9E, 0x85, 0x9F, 0x85, 0xA0, 0xCF, 0xD8, /* 0xBC-0xBF */ + 0x85, 0xA1, 0xC8, 0xFE, 0xB2, 0xCE, 0x85, 0xA2, /* 0xC0-0xC3 */ + 0x85, 0xA3, 0x85, 0xA4, 0x85, 0xA5, 0x85, 0xA6, /* 0xC4-0xC7 */ + 0xD3, 0xD6, 0xB2, 0xE6, 0xBC, 0xB0, 0xD3, 0xD1, /* 0xC8-0xCB */ + 0xCB, 0xAB, 0xB7, 0xB4, 0x85, 0xA7, 0x85, 0xA8, /* 0xCC-0xCF */ + 0x85, 0xA9, 0xB7, 0xA2, 0x85, 0xAA, 0x85, 0xAB, /* 0xD0-0xD3 */ + 0xCA, 0xE5, 0x85, 0xAC, 0xC8, 0xA1, 0xCA, 0xDC, /* 0xD4-0xD7 */ + 0xB1, 0xE4, 0xD0, 0xF0, 0x85, 0xAD, 0xC5, 0xD1, /* 0xD8-0xDB */ + 0x85, 0xAE, 0x85, 0xAF, 0x85, 0xB0, 0xDB, 0xC5, /* 0xDC-0xDF */ + 0xB5, 0xFE, 0x85, 0xB1, 0x85, 0xB2, 0xBF, 0xDA, /* 0xE0-0xE3 */ + 0xB9, 0xC5, 0xBE, 0xE4, 0xC1, 0xED, 0x85, 0xB3, /* 0xE4-0xE7 */ + 0xDF, 0xB6, 0xDF, 0xB5, 0xD6, 0xBB, 0xBD, 0xD0, /* 0xE8-0xEB */ + 0xD5, 0xD9, 0xB0, 0xC8, 0xB6, 0xA3, 0xBF, 0xC9, /* 0xEC-0xEF */ + 0xCC, 0xA8, 0xDF, 0xB3, 0xCA, 0xB7, 0xD3, 0xD2, /* 0xF0-0xF3 */ + 0x85, 0xB4, 0xD8, 0xCF, 0xD2, 0xB6, 0xBA, 0xC5, /* 0xF4-0xF7 */ + 0xCB, 0xBE, 0xCC, 0xBE, 0x85, 0xB5, 0xDF, 0xB7, /* 0xF8-0xFB */ + 0xB5, 0xF0, 0xDF, 0xB4, 0x85, 0xB6, 0x85, 0xB7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_54[512] = { + 0x85, 0xB8, 0xD3, 0xF5, 0x85, 0xB9, 0xB3, 0xD4, /* 0x00-0x03 */ + 0xB8, 0xF7, 0x85, 0xBA, 0xDF, 0xBA, 0x85, 0xBB, /* 0x04-0x07 */ + 0xBA, 0xCF, 0xBC, 0xAA, 0xB5, 0xF5, 0x85, 0xBC, /* 0x08-0x0B */ + 0xCD, 0xAC, 0xC3, 0xFB, 0xBA, 0xF3, 0xC0, 0xF4, /* 0x0C-0x0F */ + 0xCD, 0xC2, 0xCF, 0xF2, 0xDF, 0xB8, 0xCF, 0xC5, /* 0x10-0x13 */ + 0x85, 0xBD, 0xC2, 0xC0, 0xDF, 0xB9, 0xC2, 0xF0, /* 0x14-0x17 */ + 0x85, 0xBE, 0x85, 0xBF, 0x85, 0xC0, 0xBE, 0xFD, /* 0x18-0x1B */ + 0x85, 0xC1, 0xC1, 0xDF, 0xCD, 0xCC, 0xD2, 0xF7, /* 0x1C-0x1F */ + 0xB7, 0xCD, 0xDF, 0xC1, 0x85, 0xC2, 0xDF, 0xC4, /* 0x20-0x23 */ + 0x85, 0xC3, 0x85, 0xC4, 0xB7, 0xF1, 0xB0, 0xC9, /* 0x24-0x27 */ + 0xB6, 0xD6, 0xB7, 0xD4, 0x85, 0xC5, 0xBA, 0xAC, /* 0x28-0x2B */ + 0xCC, 0xFD, 0xBF, 0xD4, 0xCB, 0xB1, 0xC6, 0xF4, /* 0x2C-0x2F */ + 0x85, 0xC6, 0xD6, 0xA8, 0xDF, 0xC5, 0x85, 0xC7, /* 0x30-0x33 */ + 0xCE, 0xE2, 0xB3, 0xB3, 0x85, 0xC8, 0x85, 0xC9, /* 0x34-0x37 */ + 0xCE, 0xFC, 0xB4, 0xB5, 0x85, 0xCA, 0xCE, 0xC7, /* 0x38-0x3B */ + 0xBA, 0xF0, 0x85, 0xCB, 0xCE, 0xE1, 0x85, 0xCC, /* 0x3C-0x3F */ + 0xD1, 0xBD, 0x85, 0xCD, 0x85, 0xCE, 0xDF, 0xC0, /* 0x40-0x43 */ + 0x85, 0xCF, 0x85, 0xD0, 0xB4, 0xF4, 0x85, 0xD1, /* 0x44-0x47 */ + 0xB3, 0xCA, 0x85, 0xD2, 0xB8, 0xE6, 0xDF, 0xBB, /* 0x48-0x4B */ + 0x85, 0xD3, 0x85, 0xD4, 0x85, 0xD5, 0x85, 0xD6, /* 0x4C-0x4F */ + 0xC4, 0xC5, 0x85, 0xD7, 0xDF, 0xBC, 0xDF, 0xBD, /* 0x50-0x53 */ + 0xDF, 0xBE, 0xC5, 0xBB, 0xDF, 0xBF, 0xDF, 0xC2, /* 0x54-0x57 */ + 0xD4, 0xB1, 0xDF, 0xC3, 0x85, 0xD8, 0xC7, 0xBA, /* 0x58-0x5B */ + 0xCE, 0xD8, 0x85, 0xD9, 0x85, 0xDA, 0x85, 0xDB, /* 0x5C-0x5F */ + 0x85, 0xDC, 0x85, 0xDD, 0xC4, 0xD8, 0x85, 0xDE, /* 0x60-0x63 */ + 0xDF, 0xCA, 0x85, 0xDF, 0xDF, 0xCF, 0x85, 0xE0, /* 0x64-0x67 */ + 0xD6, 0xDC, 0x85, 0xE1, 0x85, 0xE2, 0x85, 0xE3, /* 0x68-0x6B */ + 0x85, 0xE4, 0x85, 0xE5, 0x85, 0xE6, 0x85, 0xE7, /* 0x6C-0x6F */ + 0x85, 0xE8, 0xDF, 0xC9, 0xDF, 0xDA, 0xCE, 0xB6, /* 0x70-0x73 */ + 0x85, 0xE9, 0xBA, 0xC7, 0xDF, 0xCE, 0xDF, 0xC8, /* 0x74-0x77 */ + 0xC5, 0xDE, 0x85, 0xEA, 0x85, 0xEB, 0xC9, 0xEB, /* 0x78-0x7B */ + 0xBA, 0xF4, 0xC3, 0xFC, 0x85, 0xEC, 0x85, 0xED, /* 0x7C-0x7F */ + + 0xBE, 0xD7, 0x85, 0xEE, 0xDF, 0xC6, 0x85, 0xEF, /* 0x80-0x83 */ + 0xDF, 0xCD, 0x85, 0xF0, 0xC5, 0xD8, 0x85, 0xF1, /* 0x84-0x87 */ + 0x85, 0xF2, 0x85, 0xF3, 0x85, 0xF4, 0xD5, 0xA6, /* 0x88-0x8B */ + 0xBA, 0xCD, 0x85, 0xF5, 0xBE, 0xCC, 0xD3, 0xBD, /* 0x8C-0x8F */ + 0xB8, 0xC0, 0x85, 0xF6, 0xD6, 0xE4, 0x85, 0xF7, /* 0x90-0x93 */ + 0xDF, 0xC7, 0xB9, 0xBE, 0xBF, 0xA7, 0x85, 0xF8, /* 0x94-0x97 */ + 0x85, 0xF9, 0xC1, 0xFC, 0xDF, 0xCB, 0xDF, 0xCC, /* 0x98-0x9B */ + 0x85, 0xFA, 0xDF, 0xD0, 0x85, 0xFB, 0x85, 0xFC, /* 0x9C-0x9F */ + 0x85, 0xFD, 0x85, 0xFE, 0x86, 0x40, 0xDF, 0xDB, /* 0xA0-0xA3 */ + 0xDF, 0xE5, 0x86, 0x41, 0xDF, 0xD7, 0xDF, 0xD6, /* 0xA4-0xA7 */ + 0xD7, 0xC9, 0xDF, 0xE3, 0xDF, 0xE4, 0xE5, 0xEB, /* 0xA8-0xAB */ + 0xD2, 0xA7, 0xDF, 0xD2, 0x86, 0x42, 0xBF, 0xA9, /* 0xAC-0xAF */ + 0x86, 0x43, 0xD4, 0xDB, 0x86, 0x44, 0xBF, 0xC8, /* 0xB0-0xB3 */ + 0xDF, 0xD4, 0x86, 0x45, 0x86, 0x46, 0x86, 0x47, /* 0xB4-0xB7 */ + 0xCF, 0xCC, 0x86, 0x48, 0x86, 0x49, 0xDF, 0xDD, /* 0xB8-0xBB */ + 0x86, 0x4A, 0xD1, 0xCA, 0x86, 0x4B, 0xDF, 0xDE, /* 0xBC-0xBF */ + 0xB0, 0xA7, 0xC6, 0xB7, 0xDF, 0xD3, 0x86, 0x4C, /* 0xC0-0xC3 */ + 0xBA, 0xE5, 0x86, 0x4D, 0xB6, 0xDF, 0xCD, 0xDB, /* 0xC4-0xC7 */ + 0xB9, 0xFE, 0xD4, 0xD5, 0x86, 0x4E, 0x86, 0x4F, /* 0xC8-0xCB */ + 0xDF, 0xDF, 0xCF, 0xEC, 0xB0, 0xA5, 0xDF, 0xE7, /* 0xCC-0xCF */ + 0xDF, 0xD1, 0xD1, 0xC6, 0xDF, 0xD5, 0xDF, 0xD8, /* 0xD0-0xD3 */ + 0xDF, 0xD9, 0xDF, 0xDC, 0x86, 0x50, 0xBB, 0xA9, /* 0xD4-0xD7 */ + 0x86, 0x51, 0xDF, 0xE0, 0xDF, 0xE1, 0x86, 0x52, /* 0xD8-0xDB */ + 0xDF, 0xE2, 0xDF, 0xE6, 0xDF, 0xE8, 0xD3, 0xB4, /* 0xDC-0xDF */ + 0x86, 0x53, 0x86, 0x54, 0x86, 0x55, 0x86, 0x56, /* 0xE0-0xE3 */ + 0x86, 0x57, 0xB8, 0xE7, 0xC5, 0xB6, 0xDF, 0xEA, /* 0xE4-0xE7 */ + 0xC9, 0xDA, 0xC1, 0xA8, 0xC4, 0xC4, 0x86, 0x58, /* 0xE8-0xEB */ + 0x86, 0x59, 0xBF, 0xDE, 0xCF, 0xF8, 0x86, 0x5A, /* 0xEC-0xEF */ + 0x86, 0x5B, 0x86, 0x5C, 0xD5, 0xDC, 0xDF, 0xEE, /* 0xF0-0xF3 */ + 0x86, 0x5D, 0x86, 0x5E, 0x86, 0x5F, 0x86, 0x60, /* 0xF4-0xF7 */ + 0x86, 0x61, 0x86, 0x62, 0xB2, 0xB8, 0x86, 0x63, /* 0xF8-0xFB */ + 0xBA, 0xDF, 0xDF, 0xEC, 0x86, 0x64, 0xDB, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x86, 0x65, 0xD1, 0xE4, 0x86, 0x66, 0x86, 0x67, /* 0x00-0x03 */ + 0x86, 0x68, 0x86, 0x69, 0xCB, 0xF4, 0xB4, 0xBD, /* 0x04-0x07 */ + 0x86, 0x6A, 0xB0, 0xA6, 0x86, 0x6B, 0x86, 0x6C, /* 0x08-0x0B */ + 0x86, 0x6D, 0x86, 0x6E, 0x86, 0x6F, 0xDF, 0xF1, /* 0x0C-0x0F */ + 0xCC, 0xC6, 0xDF, 0xF2, 0x86, 0x70, 0x86, 0x71, /* 0x10-0x13 */ + 0xDF, 0xED, 0x86, 0x72, 0x86, 0x73, 0x86, 0x74, /* 0x14-0x17 */ + 0x86, 0x75, 0x86, 0x76, 0x86, 0x77, 0xDF, 0xE9, /* 0x18-0x1B */ + 0x86, 0x78, 0x86, 0x79, 0x86, 0x7A, 0x86, 0x7B, /* 0x1C-0x1F */ + 0xDF, 0xEB, 0x86, 0x7C, 0xDF, 0xEF, 0xDF, 0xF0, /* 0x20-0x23 */ + 0xBB, 0xBD, 0x86, 0x7D, 0x86, 0x7E, 0xDF, 0xF3, /* 0x24-0x27 */ + 0x86, 0x80, 0x86, 0x81, 0xDF, 0xF4, 0x86, 0x82, /* 0x28-0x2B */ + 0xBB, 0xA3, 0x86, 0x83, 0xCA, 0xDB, 0xCE, 0xA8, /* 0x2C-0x2F */ + 0xE0, 0xA7, 0xB3, 0xAA, 0x86, 0x84, 0xE0, 0xA6, /* 0x30-0x33 */ + 0x86, 0x85, 0x86, 0x86, 0x86, 0x87, 0xE0, 0xA1, /* 0x34-0x37 */ + 0x86, 0x88, 0x86, 0x89, 0x86, 0x8A, 0x86, 0x8B, /* 0x38-0x3B */ + 0xDF, 0xFE, 0x86, 0x8C, 0xCD, 0xD9, 0xDF, 0xFC, /* 0x3C-0x3F */ + 0x86, 0x8D, 0xDF, 0xFA, 0x86, 0x8E, 0xBF, 0xD0, /* 0x40-0x43 */ + 0xD7, 0xC4, 0x86, 0x8F, 0xC9, 0xCC, 0x86, 0x90, /* 0x44-0x47 */ + 0x86, 0x91, 0xDF, 0xF8, 0xB0, 0xA1, 0x86, 0x92, /* 0x48-0x4B */ + 0x86, 0x93, 0x86, 0x94, 0x86, 0x95, 0x86, 0x96, /* 0x4C-0x4F */ + 0xDF, 0xFD, 0x86, 0x97, 0x86, 0x98, 0x86, 0x99, /* 0x50-0x53 */ + 0x86, 0x9A, 0xDF, 0xFB, 0xE0, 0xA2, 0x86, 0x9B, /* 0x54-0x57 */ + 0x86, 0x9C, 0x86, 0x9D, 0x86, 0x9E, 0x86, 0x9F, /* 0x58-0x5B */ + 0xE0, 0xA8, 0x86, 0xA0, 0x86, 0xA1, 0x86, 0xA2, /* 0x5C-0x5F */ + 0x86, 0xA3, 0xB7, 0xC8, 0x86, 0xA4, 0x86, 0xA5, /* 0x60-0x63 */ + 0xC6, 0xA1, 0xC9, 0xB6, 0xC0, 0xB2, 0xDF, 0xF5, /* 0x64-0x67 */ + 0x86, 0xA6, 0x86, 0xA7, 0xC5, 0xBE, 0x86, 0xA8, /* 0x68-0x6B */ + 0xD8, 0xC4, 0xDF, 0xF9, 0xC4, 0xF6, 0x86, 0xA9, /* 0x6C-0x6F */ + 0x86, 0xAA, 0x86, 0xAB, 0x86, 0xAC, 0x86, 0xAD, /* 0x70-0x73 */ + 0x86, 0xAE, 0xE0, 0xA3, 0xE0, 0xA4, 0xE0, 0xA5, /* 0x74-0x77 */ + 0xD0, 0xA5, 0x86, 0xAF, 0x86, 0xB0, 0xE0, 0xB4, /* 0x78-0x7B */ + 0xCC, 0xE4, 0x86, 0xB1, 0xE0, 0xB1, 0x86, 0xB2, /* 0x7C-0x7F */ + + 0xBF, 0xA6, 0xE0, 0xAF, 0xCE, 0xB9, 0xE0, 0xAB, /* 0x80-0x83 */ + 0xC9, 0xC6, 0x86, 0xB3, 0x86, 0xB4, 0xC0, 0xAE, /* 0x84-0x87 */ + 0xE0, 0xAE, 0xBA, 0xED, 0xBA, 0xB0, 0xE0, 0xA9, /* 0x88-0x8B */ + 0x86, 0xB5, 0x86, 0xB6, 0x86, 0xB7, 0xDF, 0xF6, /* 0x8C-0x8F */ + 0x86, 0xB8, 0xE0, 0xB3, 0x86, 0xB9, 0x86, 0xBA, /* 0x90-0x93 */ + 0xE0, 0xB8, 0x86, 0xBB, 0x86, 0xBC, 0x86, 0xBD, /* 0x94-0x97 */ + 0xB4, 0xAD, 0xE0, 0xB9, 0x86, 0xBE, 0x86, 0xBF, /* 0x98-0x9B */ + 0xCF, 0xB2, 0xBA, 0xC8, 0x86, 0xC0, 0xE0, 0xB0, /* 0x9C-0x9F */ + 0x86, 0xC1, 0x86, 0xC2, 0x86, 0xC3, 0x86, 0xC4, /* 0xA0-0xA3 */ + 0x86, 0xC5, 0x86, 0xC6, 0x86, 0xC7, 0xD0, 0xFA, /* 0xA4-0xA7 */ + 0x86, 0xC8, 0x86, 0xC9, 0x86, 0xCA, 0x86, 0xCB, /* 0xA8-0xAB */ + 0x86, 0xCC, 0x86, 0xCD, 0x86, 0xCE, 0x86, 0xCF, /* 0xAC-0xAF */ + 0x86, 0xD0, 0xE0, 0xAC, 0x86, 0xD1, 0xD4, 0xFB, /* 0xB0-0xB3 */ + 0x86, 0xD2, 0xDF, 0xF7, 0x86, 0xD3, 0xC5, 0xE7, /* 0xB4-0xB7 */ + 0x86, 0xD4, 0xE0, 0xAD, 0x86, 0xD5, 0xD3, 0xF7, /* 0xB8-0xBB */ + 0x86, 0xD6, 0xE0, 0xB6, 0xE0, 0xB7, 0x86, 0xD7, /* 0xBC-0xBF */ + 0x86, 0xD8, 0x86, 0xD9, 0x86, 0xDA, 0x86, 0xDB, /* 0xC0-0xC3 */ + 0xE0, 0xC4, 0xD0, 0xE1, 0x86, 0xDC, 0x86, 0xDD, /* 0xC4-0xC7 */ + 0x86, 0xDE, 0xE0, 0xBC, 0x86, 0xDF, 0x86, 0xE0, /* 0xC8-0xCB */ + 0xE0, 0xC9, 0xE0, 0xCA, 0x86, 0xE1, 0x86, 0xE2, /* 0xCC-0xCF */ + 0x86, 0xE3, 0xE0, 0xBE, 0xE0, 0xAA, 0xC9, 0xA4, /* 0xD0-0xD3 */ + 0xE0, 0xC1, 0x86, 0xE4, 0xE0, 0xB2, 0x86, 0xE5, /* 0xD4-0xD7 */ + 0x86, 0xE6, 0x86, 0xE7, 0x86, 0xE8, 0x86, 0xE9, /* 0xD8-0xDB */ + 0xCA, 0xC8, 0xE0, 0xC3, 0x86, 0xEA, 0xE0, 0xB5, /* 0xDC-0xDF */ + 0x86, 0xEB, 0xCE, 0xCB, 0x86, 0xEC, 0xCB, 0xC3, /* 0xE0-0xE3 */ + 0xE0, 0xCD, 0xE0, 0xC6, 0xE0, 0xC2, 0x86, 0xED, /* 0xE4-0xE7 */ + 0xE0, 0xCB, 0x86, 0xEE, 0xE0, 0xBA, 0xE0, 0xBF, /* 0xE8-0xEB */ + 0xE0, 0xC0, 0x86, 0xEF, 0x86, 0xF0, 0xE0, 0xC5, /* 0xEC-0xEF */ + 0x86, 0xF1, 0x86, 0xF2, 0xE0, 0xC7, 0xE0, 0xC8, /* 0xF0-0xF3 */ + 0x86, 0xF3, 0xE0, 0xCC, 0x86, 0xF4, 0xE0, 0xBB, /* 0xF4-0xF7 */ + 0x86, 0xF5, 0x86, 0xF6, 0x86, 0xF7, 0x86, 0xF8, /* 0xF8-0xFB */ + 0x86, 0xF9, 0xCB, 0xD4, 0xE0, 0xD5, 0x86, 0xFA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0xE0, 0xD6, 0xE0, 0xD2, 0x86, 0xFB, 0x86, 0xFC, /* 0x00-0x03 */ + 0x86, 0xFD, 0x86, 0xFE, 0x87, 0x40, 0x87, 0x41, /* 0x04-0x07 */ + 0xE0, 0xD0, 0xBC, 0xCE, 0x87, 0x42, 0x87, 0x43, /* 0x08-0x0B */ + 0xE0, 0xD1, 0x87, 0x44, 0xB8, 0xC2, 0xD8, 0xC5, /* 0x0C-0x0F */ + 0x87, 0x45, 0x87, 0x46, 0x87, 0x47, 0x87, 0x48, /* 0x10-0x13 */ + 0x87, 0x49, 0x87, 0x4A, 0x87, 0x4B, 0x87, 0x4C, /* 0x14-0x17 */ + 0xD0, 0xEA, 0x87, 0x4D, 0x87, 0x4E, 0xC2, 0xEF, /* 0x18-0x1B */ + 0x87, 0x4F, 0x87, 0x50, 0xE0, 0xCF, 0xE0, 0xBD, /* 0x1C-0x1F */ + 0x87, 0x51, 0x87, 0x52, 0x87, 0x53, 0xE0, 0xD4, /* 0x20-0x23 */ + 0xE0, 0xD3, 0x87, 0x54, 0x87, 0x55, 0xE0, 0xD7, /* 0x24-0x27 */ + 0x87, 0x56, 0x87, 0x57, 0x87, 0x58, 0x87, 0x59, /* 0x28-0x2B */ + 0xE0, 0xDC, 0xE0, 0xD8, 0x87, 0x5A, 0x87, 0x5B, /* 0x2C-0x2F */ + 0x87, 0x5C, 0xD6, 0xF6, 0xB3, 0xB0, 0x87, 0x5D, /* 0x30-0x33 */ + 0xD7, 0xEC, 0x87, 0x5E, 0xCB, 0xBB, 0x87, 0x5F, /* 0x34-0x37 */ + 0x87, 0x60, 0xE0, 0xDA, 0x87, 0x61, 0xCE, 0xFB, /* 0x38-0x3B */ + 0x87, 0x62, 0x87, 0x63, 0x87, 0x64, 0xBA, 0xD9, /* 0x3C-0x3F */ + 0x87, 0x65, 0x87, 0x66, 0x87, 0x67, 0x87, 0x68, /* 0x40-0x43 */ + 0x87, 0x69, 0x87, 0x6A, 0x87, 0x6B, 0x87, 0x6C, /* 0x44-0x47 */ + 0x87, 0x6D, 0x87, 0x6E, 0x87, 0x6F, 0x87, 0x70, /* 0x48-0x4B */ + 0xE0, 0xE1, 0xE0, 0xDD, 0xD2, 0xAD, 0x87, 0x71, /* 0x4C-0x4F */ + 0x87, 0x72, 0x87, 0x73, 0x87, 0x74, 0x87, 0x75, /* 0x50-0x53 */ + 0xE0, 0xE2, 0x87, 0x76, 0x87, 0x77, 0xE0, 0xDB, /* 0x54-0x57 */ + 0xE0, 0xD9, 0xE0, 0xDF, 0x87, 0x78, 0x87, 0x79, /* 0x58-0x5B */ + 0xE0, 0xE0, 0x87, 0x7A, 0x87, 0x7B, 0x87, 0x7C, /* 0x5C-0x5F */ + 0x87, 0x7D, 0x87, 0x7E, 0xE0, 0xDE, 0x87, 0x80, /* 0x60-0x63 */ + 0xE0, 0xE4, 0x87, 0x81, 0x87, 0x82, 0x87, 0x83, /* 0x64-0x67 */ + 0xC6, 0xF7, 0xD8, 0xAC, 0xD4, 0xEB, 0xE0, 0xE6, /* 0x68-0x6B */ + 0xCA, 0xC9, 0x87, 0x84, 0x87, 0x85, 0x87, 0x86, /* 0x6C-0x6F */ + 0x87, 0x87, 0xE0, 0xE5, 0x87, 0x88, 0x87, 0x89, /* 0x70-0x73 */ + 0x87, 0x8A, 0x87, 0x8B, 0xB8, 0xC1, 0x87, 0x8C, /* 0x74-0x77 */ + 0x87, 0x8D, 0x87, 0x8E, 0x87, 0x8F, 0xE0, 0xE7, /* 0x78-0x7B */ + 0xE0, 0xE8, 0x87, 0x90, 0x87, 0x91, 0x87, 0x92, /* 0x7C-0x7F */ + + 0x87, 0x93, 0x87, 0x94, 0x87, 0x95, 0x87, 0x96, /* 0x80-0x83 */ + 0x87, 0x97, 0xE0, 0xE9, 0xE0, 0xE3, 0x87, 0x98, /* 0x84-0x87 */ + 0x87, 0x99, 0x87, 0x9A, 0x87, 0x9B, 0x87, 0x9C, /* 0x88-0x8B */ + 0x87, 0x9D, 0x87, 0x9E, 0xBA, 0xBF, 0xCC, 0xE7, /* 0x8C-0x8F */ + 0x87, 0x9F, 0x87, 0xA0, 0x87, 0xA1, 0xE0, 0xEA, /* 0x90-0x93 */ + 0x87, 0xA2, 0x87, 0xA3, 0x87, 0xA4, 0x87, 0xA5, /* 0x94-0x97 */ + 0x87, 0xA6, 0x87, 0xA7, 0x87, 0xA8, 0x87, 0xA9, /* 0x98-0x9B */ + 0x87, 0xAA, 0x87, 0xAB, 0x87, 0xAC, 0x87, 0xAD, /* 0x9C-0x9F */ + 0x87, 0xAE, 0x87, 0xAF, 0x87, 0xB0, 0xCF, 0xF9, /* 0xA0-0xA3 */ + 0x87, 0xB1, 0x87, 0xB2, 0x87, 0xB3, 0x87, 0xB4, /* 0xA4-0xA7 */ + 0x87, 0xB5, 0x87, 0xB6, 0x87, 0xB7, 0x87, 0xB8, /* 0xA8-0xAB */ + 0x87, 0xB9, 0x87, 0xBA, 0x87, 0xBB, 0xE0, 0xEB, /* 0xAC-0xAF */ + 0x87, 0xBC, 0x87, 0xBD, 0x87, 0xBE, 0x87, 0xBF, /* 0xB0-0xB3 */ + 0x87, 0xC0, 0x87, 0xC1, 0x87, 0xC2, 0xC8, 0xC2, /* 0xB4-0xB7 */ + 0x87, 0xC3, 0x87, 0xC4, 0x87, 0xC5, 0x87, 0xC6, /* 0xB8-0xBB */ + 0xBD, 0xC0, 0x87, 0xC7, 0x87, 0xC8, 0x87, 0xC9, /* 0xBC-0xBF */ + 0x87, 0xCA, 0x87, 0xCB, 0x87, 0xCC, 0x87, 0xCD, /* 0xC0-0xC3 */ + 0x87, 0xCE, 0x87, 0xCF, 0x87, 0xD0, 0x87, 0xD1, /* 0xC4-0xC7 */ + 0x87, 0xD2, 0x87, 0xD3, 0xC4, 0xD2, 0x87, 0xD4, /* 0xC8-0xCB */ + 0x87, 0xD5, 0x87, 0xD6, 0x87, 0xD7, 0x87, 0xD8, /* 0xCC-0xCF */ + 0x87, 0xD9, 0x87, 0xDA, 0x87, 0xDB, 0x87, 0xDC, /* 0xD0-0xD3 */ + 0xE0, 0xEC, 0x87, 0xDD, 0x87, 0xDE, 0xE0, 0xED, /* 0xD4-0xD7 */ + 0x87, 0xDF, 0x87, 0xE0, 0xC7, 0xF4, 0xCB, 0xC4, /* 0xD8-0xDB */ + 0x87, 0xE1, 0xE0, 0xEE, 0xBB, 0xD8, 0xD8, 0xB6, /* 0xDC-0xDF */ + 0xD2, 0xF2, 0xE0, 0xEF, 0xCD, 0xC5, 0x87, 0xE2, /* 0xE0-0xE3 */ + 0xB6, 0xDA, 0x87, 0xE3, 0x87, 0xE4, 0x87, 0xE5, /* 0xE4-0xE7 */ + 0x87, 0xE6, 0x87, 0xE7, 0x87, 0xE8, 0xE0, 0xF1, /* 0xE8-0xEB */ + 0x87, 0xE9, 0xD4, 0xB0, 0x87, 0xEA, 0x87, 0xEB, /* 0xEC-0xEF */ + 0xC0, 0xA7, 0xB4, 0xD1, 0x87, 0xEC, 0x87, 0xED, /* 0xF0-0xF3 */ + 0xCE, 0xA7, 0xE0, 0xF0, 0x87, 0xEE, 0x87, 0xEF, /* 0xF4-0xF7 */ + 0x87, 0xF0, 0xE0, 0xF2, 0xB9, 0xCC, 0x87, 0xF1, /* 0xF8-0xFB */ + 0x87, 0xF2, 0xB9, 0xFA, 0xCD, 0xBC, 0xE0, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x87, 0xF3, 0x87, 0xF4, 0x87, 0xF5, 0xC6, 0xD4, /* 0x00-0x03 */ + 0xE0, 0xF4, 0x87, 0xF6, 0xD4, 0xB2, 0x87, 0xF7, /* 0x04-0x07 */ + 0xC8, 0xA6, 0xE0, 0xF6, 0xE0, 0xF5, 0x87, 0xF8, /* 0x08-0x0B */ + 0x87, 0xF9, 0x87, 0xFA, 0x87, 0xFB, 0x87, 0xFC, /* 0x0C-0x0F */ + 0x87, 0xFD, 0x87, 0xFE, 0x88, 0x40, 0x88, 0x41, /* 0x10-0x13 */ + 0x88, 0x42, 0x88, 0x43, 0x88, 0x44, 0x88, 0x45, /* 0x14-0x17 */ + 0x88, 0x46, 0x88, 0x47, 0x88, 0x48, 0x88, 0x49, /* 0x18-0x1B */ + 0xE0, 0xF7, 0x88, 0x4A, 0x88, 0x4B, 0xCD, 0xC1, /* 0x1C-0x1F */ + 0x88, 0x4C, 0x88, 0x4D, 0x88, 0x4E, 0xCA, 0xA5, /* 0x20-0x23 */ + 0x88, 0x4F, 0x88, 0x50, 0x88, 0x51, 0x88, 0x52, /* 0x24-0x27 */ + 0xD4, 0xDA, 0xDB, 0xD7, 0xDB, 0xD9, 0x88, 0x53, /* 0x28-0x2B */ + 0xDB, 0xD8, 0xB9, 0xE7, 0xDB, 0xDC, 0xDB, 0xDD, /* 0x2C-0x2F */ + 0xB5, 0xD8, 0x88, 0x54, 0x88, 0x55, 0xDB, 0xDA, /* 0x30-0x33 */ + 0x88, 0x56, 0x88, 0x57, 0x88, 0x58, 0x88, 0x59, /* 0x34-0x37 */ + 0x88, 0x5A, 0xDB, 0xDB, 0xB3, 0xA1, 0xDB, 0xDF, /* 0x38-0x3B */ + 0x88, 0x5B, 0x88, 0x5C, 0xBB, 0xF8, 0x88, 0x5D, /* 0x3C-0x3F */ + 0xD6, 0xB7, 0x88, 0x5E, 0xDB, 0xE0, 0x88, 0x5F, /* 0x40-0x43 */ + 0x88, 0x60, 0x88, 0x61, 0x88, 0x62, 0xBE, 0xF9, /* 0x44-0x47 */ + 0x88, 0x63, 0x88, 0x64, 0xB7, 0xBB, 0x88, 0x65, /* 0x48-0x4B */ + 0xDB, 0xD0, 0xCC, 0xAE, 0xBF, 0xB2, 0xBB, 0xB5, /* 0x4C-0x4F */ + 0xD7, 0xF8, 0xBF, 0xD3, 0x88, 0x66, 0x88, 0x67, /* 0x50-0x53 */ + 0x88, 0x68, 0x88, 0x69, 0x88, 0x6A, 0xBF, 0xE9, /* 0x54-0x57 */ + 0x88, 0x6B, 0x88, 0x6C, 0xBC, 0xE1, 0xCC, 0xB3, /* 0x58-0x5B */ + 0xDB, 0xDE, 0xB0, 0xD3, 0xCE, 0xEB, 0xB7, 0xD8, /* 0x5C-0x5F */ + 0xD7, 0xB9, 0xC6, 0xC2, 0x88, 0x6D, 0x88, 0x6E, /* 0x60-0x63 */ + 0xC0, 0xA4, 0x88, 0x6F, 0xCC, 0xB9, 0x88, 0x70, /* 0x64-0x67 */ + 0xDB, 0xE7, 0xDB, 0xE1, 0xC6, 0xBA, 0xDB, 0xE3, /* 0x68-0x6B */ + 0x88, 0x71, 0xDB, 0xE8, 0x88, 0x72, 0xC5, 0xF7, /* 0x6C-0x6F */ + 0x88, 0x73, 0x88, 0x74, 0x88, 0x75, 0xDB, 0xEA, /* 0x70-0x73 */ + 0x88, 0x76, 0x88, 0x77, 0xDB, 0xE9, 0xBF, 0xC0, /* 0x74-0x77 */ + 0x88, 0x78, 0x88, 0x79, 0x88, 0x7A, 0xDB, 0xE6, /* 0x78-0x7B */ + 0xDB, 0xE5, 0x88, 0x7B, 0x88, 0x7C, 0x88, 0x7D, /* 0x7C-0x7F */ + + 0x88, 0x7E, 0x88, 0x80, 0xB4, 0xB9, 0xC0, 0xAC, /* 0x80-0x83 */ + 0xC2, 0xA2, 0xDB, 0xE2, 0xDB, 0xE4, 0x88, 0x81, /* 0x84-0x87 */ + 0x88, 0x82, 0x88, 0x83, 0x88, 0x84, 0xD0, 0xCD, /* 0x88-0x8B */ + 0xDB, 0xED, 0x88, 0x85, 0x88, 0x86, 0x88, 0x87, /* 0x8C-0x8F */ + 0x88, 0x88, 0x88, 0x89, 0xC0, 0xDD, 0xDB, 0xF2, /* 0x90-0x93 */ + 0x88, 0x8A, 0x88, 0x8B, 0x88, 0x8C, 0x88, 0x8D, /* 0x94-0x97 */ + 0x88, 0x8E, 0x88, 0x8F, 0x88, 0x90, 0xB6, 0xE2, /* 0x98-0x9B */ + 0x88, 0x91, 0x88, 0x92, 0x88, 0x93, 0x88, 0x94, /* 0x9C-0x9F */ + 0xDB, 0xF3, 0xDB, 0xD2, 0xB9, 0xB8, 0xD4, 0xAB, /* 0xA0-0xA3 */ + 0xDB, 0xEC, 0x88, 0x95, 0xBF, 0xD1, 0xDB, 0xF0, /* 0xA4-0xA7 */ + 0x88, 0x96, 0xDB, 0xD1, 0x88, 0x97, 0xB5, 0xE6, /* 0xA8-0xAB */ + 0x88, 0x98, 0xDB, 0xEB, 0xBF, 0xE5, 0x88, 0x99, /* 0xAC-0xAF */ + 0x88, 0x9A, 0x88, 0x9B, 0xDB, 0xEE, 0x88, 0x9C, /* 0xB0-0xB3 */ + 0xDB, 0xF1, 0x88, 0x9D, 0x88, 0x9E, 0x88, 0x9F, /* 0xB4-0xB7 */ + 0xDB, 0xF9, 0x88, 0xA0, 0x88, 0xA1, 0x88, 0xA2, /* 0xB8-0xBB */ + 0x88, 0xA3, 0x88, 0xA4, 0x88, 0xA5, 0x88, 0xA6, /* 0xBC-0xBF */ + 0x88, 0xA7, 0x88, 0xA8, 0xB9, 0xA1, 0xB0, 0xA3, /* 0xC0-0xC3 */ + 0x88, 0xA9, 0x88, 0xAA, 0x88, 0xAB, 0x88, 0xAC, /* 0xC4-0xC7 */ + 0x88, 0xAD, 0x88, 0xAE, 0x88, 0xAF, 0xC2, 0xF1, /* 0xC8-0xCB */ + 0x88, 0xB0, 0x88, 0xB1, 0xB3, 0xC7, 0xDB, 0xEF, /* 0xCC-0xCF */ + 0x88, 0xB2, 0x88, 0xB3, 0xDB, 0xF8, 0x88, 0xB4, /* 0xD0-0xD3 */ + 0xC6, 0xD2, 0xDB, 0xF4, 0x88, 0xB5, 0x88, 0xB6, /* 0xD4-0xD7 */ + 0xDB, 0xF5, 0xDB, 0xF7, 0xDB, 0xF6, 0x88, 0xB7, /* 0xD8-0xDB */ + 0x88, 0xB8, 0xDB, 0xFE, 0x88, 0xB9, 0xD3, 0xF2, /* 0xDC-0xDF */ + 0xB2, 0xBA, 0x88, 0xBA, 0x88, 0xBB, 0x88, 0xBC, /* 0xE0-0xE3 */ + 0xDB, 0xFD, 0x88, 0xBD, 0x88, 0xBE, 0x88, 0xBF, /* 0xE4-0xE7 */ + 0x88, 0xC0, 0x88, 0xC1, 0x88, 0xC2, 0x88, 0xC3, /* 0xE8-0xEB */ + 0x88, 0xC4, 0xDC, 0xA4, 0x88, 0xC5, 0xDB, 0xFB, /* 0xEC-0xEF */ + 0x88, 0xC6, 0x88, 0xC7, 0x88, 0xC8, 0x88, 0xC9, /* 0xF0-0xF3 */ + 0xDB, 0xFA, 0x88, 0xCA, 0x88, 0xCB, 0x88, 0xCC, /* 0xF4-0xF7 */ + 0xDB, 0xFC, 0xC5, 0xE0, 0xBB, 0xF9, 0x88, 0xCD, /* 0xF8-0xFB */ + 0x88, 0xCE, 0xDC, 0xA3, 0x88, 0xCF, 0x88, 0xD0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0xDC, 0xA5, 0x88, 0xD1, 0xCC, 0xC3, 0x88, 0xD2, /* 0x00-0x03 */ + 0x88, 0xD3, 0x88, 0xD4, 0xB6, 0xD1, 0xDD, 0xC0, /* 0x04-0x07 */ + 0x88, 0xD5, 0x88, 0xD6, 0x88, 0xD7, 0xDC, 0xA1, /* 0x08-0x0B */ + 0x88, 0xD8, 0xDC, 0xA2, 0x88, 0xD9, 0x88, 0xDA, /* 0x0C-0x0F */ + 0x88, 0xDB, 0xC7, 0xB5, 0x88, 0xDC, 0x88, 0xDD, /* 0x10-0x13 */ + 0x88, 0xDE, 0xB6, 0xE9, 0x88, 0xDF, 0x88, 0xE0, /* 0x14-0x17 */ + 0x88, 0xE1, 0xDC, 0xA7, 0x88, 0xE2, 0x88, 0xE3, /* 0x18-0x1B */ + 0x88, 0xE4, 0x88, 0xE5, 0xDC, 0xA6, 0x88, 0xE6, /* 0x1C-0x1F */ + 0xDC, 0xA9, 0xB1, 0xA4, 0x88, 0xE7, 0x88, 0xE8, /* 0x20-0x23 */ + 0xB5, 0xCC, 0x88, 0xE9, 0x88, 0xEA, 0x88, 0xEB, /* 0x24-0x27 */ + 0x88, 0xEC, 0x88, 0xED, 0xBF, 0xB0, 0x88, 0xEE, /* 0x28-0x2B */ + 0x88, 0xEF, 0x88, 0xF0, 0x88, 0xF1, 0x88, 0xF2, /* 0x2C-0x2F */ + 0xD1, 0xDF, 0x88, 0xF3, 0x88, 0xF4, 0x88, 0xF5, /* 0x30-0x33 */ + 0x88, 0xF6, 0xB6, 0xC2, 0x88, 0xF7, 0x88, 0xF8, /* 0x34-0x37 */ + 0x88, 0xF9, 0x88, 0xFA, 0x88, 0xFB, 0x88, 0xFC, /* 0x38-0x3B */ + 0x88, 0xFD, 0x88, 0xFE, 0x89, 0x40, 0x89, 0x41, /* 0x3C-0x3F */ + 0x89, 0x42, 0x89, 0x43, 0x89, 0x44, 0x89, 0x45, /* 0x40-0x43 */ + 0xDC, 0xA8, 0x89, 0x46, 0x89, 0x47, 0x89, 0x48, /* 0x44-0x47 */ + 0x89, 0x49, 0x89, 0x4A, 0x89, 0x4B, 0x89, 0x4C, /* 0x48-0x4B */ + 0xCB, 0xFA, 0xEB, 0xF3, 0x89, 0x4D, 0x89, 0x4E, /* 0x4C-0x4F */ + 0x89, 0x4F, 0xCB, 0xDC, 0x89, 0x50, 0x89, 0x51, /* 0x50-0x53 */ + 0xCB, 0xFE, 0x89, 0x52, 0x89, 0x53, 0x89, 0x54, /* 0x54-0x57 */ + 0xCC, 0xC1, 0x89, 0x55, 0x89, 0x56, 0x89, 0x57, /* 0x58-0x5B */ + 0x89, 0x58, 0x89, 0x59, 0xC8, 0xFB, 0x89, 0x5A, /* 0x5C-0x5F */ + 0x89, 0x5B, 0x89, 0x5C, 0x89, 0x5D, 0x89, 0x5E, /* 0x60-0x63 */ + 0x89, 0x5F, 0xDC, 0xAA, 0x89, 0x60, 0x89, 0x61, /* 0x64-0x67 */ + 0x89, 0x62, 0x89, 0x63, 0x89, 0x64, 0xCC, 0xEE, /* 0x68-0x6B */ + 0xDC, 0xAB, 0x89, 0x65, 0x89, 0x66, 0x89, 0x67, /* 0x6C-0x6F */ + 0x89, 0x68, 0x89, 0x69, 0x89, 0x6A, 0x89, 0x6B, /* 0x70-0x73 */ + 0x89, 0x6C, 0x89, 0x6D, 0x89, 0x6E, 0x89, 0x6F, /* 0x74-0x77 */ + 0x89, 0x70, 0x89, 0x71, 0x89, 0x72, 0x89, 0x73, /* 0x78-0x7B */ + 0x89, 0x74, 0x89, 0x75, 0xDB, 0xD3, 0x89, 0x76, /* 0x7C-0x7F */ + + 0xDC, 0xAF, 0xDC, 0xAC, 0x89, 0x77, 0xBE, 0xB3, /* 0x80-0x83 */ + 0x89, 0x78, 0xCA, 0xFB, 0x89, 0x79, 0x89, 0x7A, /* 0x84-0x87 */ + 0x89, 0x7B, 0xDC, 0xAD, 0x89, 0x7C, 0x89, 0x7D, /* 0x88-0x8B */ + 0x89, 0x7E, 0x89, 0x80, 0x89, 0x81, 0x89, 0x82, /* 0x8C-0x8F */ + 0x89, 0x83, 0x89, 0x84, 0xC9, 0xCA, 0xC4, 0xB9, /* 0x90-0x93 */ + 0x89, 0x85, 0x89, 0x86, 0x89, 0x87, 0x89, 0x88, /* 0x94-0x97 */ + 0x89, 0x89, 0xC7, 0xBD, 0xDC, 0xAE, 0x89, 0x8A, /* 0x98-0x9B */ + 0x89, 0x8B, 0x89, 0x8C, 0xD4, 0xF6, 0xD0, 0xE6, /* 0x9C-0x9F */ + 0x89, 0x8D, 0x89, 0x8E, 0x89, 0x8F, 0x89, 0x90, /* 0xA0-0xA3 */ + 0x89, 0x91, 0x89, 0x92, 0x89, 0x93, 0x89, 0x94, /* 0xA4-0xA7 */ + 0xC4, 0xAB, 0xB6, 0xD5, 0x89, 0x95, 0x89, 0x96, /* 0xA8-0xAB */ + 0x89, 0x97, 0x89, 0x98, 0x89, 0x99, 0x89, 0x9A, /* 0xAC-0xAF */ + 0x89, 0x9B, 0x89, 0x9C, 0x89, 0x9D, 0x89, 0x9E, /* 0xB0-0xB3 */ + 0x89, 0x9F, 0x89, 0xA0, 0x89, 0xA1, 0x89, 0xA2, /* 0xB4-0xB7 */ + 0x89, 0xA3, 0x89, 0xA4, 0x89, 0xA5, 0x89, 0xA6, /* 0xB8-0xBB */ + 0xDB, 0xD4, 0x89, 0xA7, 0x89, 0xA8, 0x89, 0xA9, /* 0xBC-0xBF */ + 0x89, 0xAA, 0xB1, 0xDA, 0x89, 0xAB, 0x89, 0xAC, /* 0xC0-0xC3 */ + 0x89, 0xAD, 0xDB, 0xD5, 0x89, 0xAE, 0x89, 0xAF, /* 0xC4-0xC7 */ + 0x89, 0xB0, 0x89, 0xB1, 0x89, 0xB2, 0x89, 0xB3, /* 0xC8-0xCB */ + 0x89, 0xB4, 0x89, 0xB5, 0x89, 0xB6, 0x89, 0xB7, /* 0xCC-0xCF */ + 0x89, 0xB8, 0xDB, 0xD6, 0x89, 0xB9, 0x89, 0xBA, /* 0xD0-0xD3 */ + 0x89, 0xBB, 0xBA, 0xBE, 0x89, 0xBC, 0x89, 0xBD, /* 0xD4-0xD7 */ + 0x89, 0xBE, 0x89, 0xBF, 0x89, 0xC0, 0x89, 0xC1, /* 0xD8-0xDB */ + 0x89, 0xC2, 0x89, 0xC3, 0x89, 0xC4, 0x89, 0xC5, /* 0xDC-0xDF */ + 0x89, 0xC6, 0x89, 0xC7, 0x89, 0xC8, 0x89, 0xC9, /* 0xE0-0xE3 */ + 0xC8, 0xC0, 0x89, 0xCA, 0x89, 0xCB, 0x89, 0xCC, /* 0xE4-0xE7 */ + 0x89, 0xCD, 0x89, 0xCE, 0x89, 0xCF, 0xCA, 0xBF, /* 0xE8-0xEB */ + 0xC8, 0xC9, 0x89, 0xD0, 0xD7, 0xB3, 0x89, 0xD1, /* 0xEC-0xEF */ + 0xC9, 0xF9, 0x89, 0xD2, 0x89, 0xD3, 0xBF, 0xC7, /* 0xF0-0xF3 */ + 0x89, 0xD4, 0x89, 0xD5, 0xBA, 0xF8, 0x89, 0xD6, /* 0xF4-0xF7 */ + 0x89, 0xD7, 0xD2, 0xBC, 0x89, 0xD8, 0x89, 0xD9, /* 0xF8-0xFB */ + 0x89, 0xDA, 0x89, 0xDB, 0x89, 0xDC, 0x89, 0xDD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x89, 0xDE, 0x89, 0xDF, 0xE2, 0xBA, 0x89, 0xE0, /* 0x00-0x03 */ + 0xB4, 0xA6, 0x89, 0xE1, 0x89, 0xE2, 0xB1, 0xB8, /* 0x04-0x07 */ + 0x89, 0xE3, 0x89, 0xE4, 0x89, 0xE5, 0x89, 0xE6, /* 0x08-0x0B */ + 0x89, 0xE7, 0xB8, 0xB4, 0x89, 0xE8, 0xCF, 0xC4, /* 0x0C-0x0F */ + 0x89, 0xE9, 0x89, 0xEA, 0x89, 0xEB, 0x89, 0xEC, /* 0x10-0x13 */ + 0xD9, 0xE7, 0xCF, 0xA6, 0xCD, 0xE2, 0x89, 0xED, /* 0x14-0x17 */ + 0x89, 0xEE, 0xD9, 0xED, 0xB6, 0xE0, 0x89, 0xEF, /* 0x18-0x1B */ + 0xD2, 0xB9, 0x89, 0xF0, 0x89, 0xF1, 0xB9, 0xBB, /* 0x1C-0x1F */ + 0x89, 0xF2, 0x89, 0xF3, 0x89, 0xF4, 0x89, 0xF5, /* 0x20-0x23 */ + 0xE2, 0xB9, 0xE2, 0xB7, 0x89, 0xF6, 0xB4, 0xF3, /* 0x24-0x27 */ + 0x89, 0xF7, 0xCC, 0xEC, 0xCC, 0xAB, 0xB7, 0xF2, /* 0x28-0x2B */ + 0x89, 0xF8, 0xD8, 0xB2, 0xD1, 0xEB, 0xBA, 0xBB, /* 0x2C-0x2F */ + 0x89, 0xF9, 0xCA, 0xA7, 0x89, 0xFA, 0x89, 0xFB, /* 0x30-0x33 */ + 0xCD, 0xB7, 0x89, 0xFC, 0x89, 0xFD, 0xD2, 0xC4, /* 0x34-0x37 */ + 0xBF, 0xE4, 0xBC, 0xD0, 0xB6, 0xE1, 0x89, 0xFE, /* 0x38-0x3B */ + 0xDE, 0xC5, 0x8A, 0x40, 0x8A, 0x41, 0x8A, 0x42, /* 0x3C-0x3F */ + 0x8A, 0x43, 0xDE, 0xC6, 0xDB, 0xBC, 0x8A, 0x44, /* 0x40-0x43 */ + 0xD1, 0xD9, 0x8A, 0x45, 0x8A, 0x46, 0xC6, 0xE6, /* 0x44-0x47 */ + 0xC4, 0xCE, 0xB7, 0xEE, 0x8A, 0x47, 0xB7, 0xDC, /* 0x48-0x4B */ + 0x8A, 0x48, 0x8A, 0x49, 0xBF, 0xFC, 0xD7, 0xE0, /* 0x4C-0x4F */ + 0x8A, 0x4A, 0xC6, 0xF5, 0x8A, 0x4B, 0x8A, 0x4C, /* 0x50-0x53 */ + 0xB1, 0xBC, 0xDE, 0xC8, 0xBD, 0xB1, 0xCC, 0xD7, /* 0x54-0x57 */ + 0xDE, 0xCA, 0x8A, 0x4D, 0xDE, 0xC9, 0x8A, 0x4E, /* 0x58-0x5B */ + 0x8A, 0x4F, 0x8A, 0x50, 0x8A, 0x51, 0x8A, 0x52, /* 0x5C-0x5F */ + 0xB5, 0xEC, 0x8A, 0x53, 0xC9, 0xDD, 0x8A, 0x54, /* 0x60-0x63 */ + 0x8A, 0x55, 0xB0, 0xC2, 0x8A, 0x56, 0x8A, 0x57, /* 0x64-0x67 */ + 0x8A, 0x58, 0x8A, 0x59, 0x8A, 0x5A, 0x8A, 0x5B, /* 0x68-0x6B */ + 0x8A, 0x5C, 0x8A, 0x5D, 0x8A, 0x5E, 0x8A, 0x5F, /* 0x6C-0x6F */ + 0x8A, 0x60, 0x8A, 0x61, 0x8A, 0x62, 0xC5, 0xAE, /* 0x70-0x73 */ + 0xC5, 0xAB, 0x8A, 0x63, 0xC4, 0xCC, 0x8A, 0x64, /* 0x74-0x77 */ + 0xBC, 0xE9, 0xCB, 0xFD, 0x8A, 0x65, 0x8A, 0x66, /* 0x78-0x7B */ + 0x8A, 0x67, 0xBA, 0xC3, 0x8A, 0x68, 0x8A, 0x69, /* 0x7C-0x7F */ + + 0x8A, 0x6A, 0xE5, 0xF9, 0xC8, 0xE7, 0xE5, 0xFA, /* 0x80-0x83 */ + 0xCD, 0xFD, 0x8A, 0x6B, 0xD7, 0xB1, 0xB8, 0xBE, /* 0x84-0x87 */ + 0xC2, 0xE8, 0x8A, 0x6C, 0xC8, 0xD1, 0x8A, 0x6D, /* 0x88-0x8B */ + 0x8A, 0x6E, 0xE5, 0xFB, 0x8A, 0x6F, 0x8A, 0x70, /* 0x8C-0x8F */ + 0x8A, 0x71, 0x8A, 0x72, 0xB6, 0xCA, 0xBC, 0xCB, /* 0x90-0x93 */ + 0x8A, 0x73, 0x8A, 0x74, 0xD1, 0xFD, 0xE6, 0xA1, /* 0x94-0x97 */ + 0x8A, 0x75, 0xC3, 0xEE, 0x8A, 0x76, 0x8A, 0x77, /* 0x98-0x9B */ + 0x8A, 0x78, 0x8A, 0x79, 0xE6, 0xA4, 0x8A, 0x7A, /* 0x9C-0x9F */ + 0x8A, 0x7B, 0x8A, 0x7C, 0x8A, 0x7D, 0xE5, 0xFE, /* 0xA0-0xA3 */ + 0xE6, 0xA5, 0xCD, 0xD7, 0x8A, 0x7E, 0x8A, 0x80, /* 0xA4-0xA7 */ + 0xB7, 0xC1, 0xE5, 0xFC, 0xE5, 0xFD, 0xE6, 0xA3, /* 0xA8-0xAB */ + 0x8A, 0x81, 0x8A, 0x82, 0xC4, 0xDD, 0xE6, 0xA8, /* 0xAC-0xAF */ + 0x8A, 0x83, 0x8A, 0x84, 0xE6, 0xA7, 0x8A, 0x85, /* 0xB0-0xB3 */ + 0x8A, 0x86, 0x8A, 0x87, 0x8A, 0x88, 0x8A, 0x89, /* 0xB4-0xB7 */ + 0x8A, 0x8A, 0xC3, 0xC3, 0x8A, 0x8B, 0xC6, 0xDE, /* 0xB8-0xBB */ + 0x8A, 0x8C, 0x8A, 0x8D, 0xE6, 0xAA, 0x8A, 0x8E, /* 0xBC-0xBF */ + 0x8A, 0x8F, 0x8A, 0x90, 0x8A, 0x91, 0x8A, 0x92, /* 0xC0-0xC3 */ + 0x8A, 0x93, 0x8A, 0x94, 0xC4, 0xB7, 0x8A, 0x95, /* 0xC4-0xC7 */ + 0x8A, 0x96, 0x8A, 0x97, 0xE6, 0xA2, 0xCA, 0xBC, /* 0xC8-0xCB */ + 0x8A, 0x98, 0x8A, 0x99, 0x8A, 0x9A, 0x8A, 0x9B, /* 0xCC-0xCF */ + 0xBD, 0xE3, 0xB9, 0xC3, 0xE6, 0xA6, 0xD0, 0xD5, /* 0xD0-0xD3 */ + 0xCE, 0xAF, 0x8A, 0x9C, 0x8A, 0x9D, 0xE6, 0xA9, /* 0xD4-0xD7 */ + 0xE6, 0xB0, 0x8A, 0x9E, 0xD2, 0xA6, 0x8A, 0x9F, /* 0xD8-0xDB */ + 0xBD, 0xAA, 0xE6, 0xAD, 0x8A, 0xA0, 0x8A, 0xA1, /* 0xDC-0xDF */ + 0x8A, 0xA2, 0x8A, 0xA3, 0x8A, 0xA4, 0xE6, 0xAF, /* 0xE0-0xE3 */ + 0x8A, 0xA5, 0xC0, 0xD1, 0x8A, 0xA6, 0x8A, 0xA7, /* 0xE4-0xE7 */ + 0xD2, 0xCC, 0x8A, 0xA8, 0x8A, 0xA9, 0x8A, 0xAA, /* 0xE8-0xEB */ + 0xBC, 0xA7, 0x8A, 0xAB, 0x8A, 0xAC, 0x8A, 0xAD, /* 0xEC-0xEF */ + 0x8A, 0xAE, 0x8A, 0xAF, 0x8A, 0xB0, 0x8A, 0xB1, /* 0xF0-0xF3 */ + 0x8A, 0xB2, 0x8A, 0xB3, 0x8A, 0xB4, 0x8A, 0xB5, /* 0xF4-0xF7 */ + 0x8A, 0xB6, 0xE6, 0xB1, 0x8A, 0xB7, 0xD2, 0xF6, /* 0xF8-0xFB */ + 0x8A, 0xB8, 0x8A, 0xB9, 0x8A, 0xBA, 0xD7, 0xCB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0x8A, 0xBB, 0xCD, 0xFE, 0x8A, 0xBC, 0xCD, 0xDE, /* 0x00-0x03 */ + 0xC2, 0xA6, 0xE6, 0xAB, 0xE6, 0xAC, 0xBD, 0xBF, /* 0x04-0x07 */ + 0xE6, 0xAE, 0xE6, 0xB3, 0x8A, 0xBD, 0x8A, 0xBE, /* 0x08-0x0B */ + 0xE6, 0xB2, 0x8A, 0xBF, 0x8A, 0xC0, 0x8A, 0xC1, /* 0x0C-0x0F */ + 0x8A, 0xC2, 0xE6, 0xB6, 0x8A, 0xC3, 0xE6, 0xB8, /* 0x10-0x13 */ + 0x8A, 0xC4, 0x8A, 0xC5, 0x8A, 0xC6, 0x8A, 0xC7, /* 0x14-0x17 */ + 0xC4, 0xEF, 0x8A, 0xC8, 0x8A, 0xC9, 0x8A, 0xCA, /* 0x18-0x1B */ + 0xC4, 0xC8, 0x8A, 0xCB, 0x8A, 0xCC, 0xBE, 0xEA, /* 0x1C-0x1F */ + 0xC9, 0xEF, 0x8A, 0xCD, 0x8A, 0xCE, 0xE6, 0xB7, /* 0x20-0x23 */ + 0x8A, 0xCF, 0xB6, 0xF0, 0x8A, 0xD0, 0x8A, 0xD1, /* 0x24-0x27 */ + 0x8A, 0xD2, 0xC3, 0xE4, 0x8A, 0xD3, 0x8A, 0xD4, /* 0x28-0x2B */ + 0x8A, 0xD5, 0x8A, 0xD6, 0x8A, 0xD7, 0x8A, 0xD8, /* 0x2C-0x2F */ + 0x8A, 0xD9, 0xD3, 0xE9, 0xE6, 0xB4, 0x8A, 0xDA, /* 0x30-0x33 */ + 0xE6, 0xB5, 0x8A, 0xDB, 0xC8, 0xA2, 0x8A, 0xDC, /* 0x34-0x37 */ + 0x8A, 0xDD, 0x8A, 0xDE, 0x8A, 0xDF, 0x8A, 0xE0, /* 0x38-0x3B */ + 0xE6, 0xBD, 0x8A, 0xE1, 0x8A, 0xE2, 0x8A, 0xE3, /* 0x3C-0x3F */ + 0xE6, 0xB9, 0x8A, 0xE4, 0x8A, 0xE5, 0x8A, 0xE6, /* 0x40-0x43 */ + 0x8A, 0xE7, 0x8A, 0xE8, 0xC6, 0xC5, 0x8A, 0xE9, /* 0x44-0x47 */ + 0x8A, 0xEA, 0xCD, 0xF1, 0xE6, 0xBB, 0x8A, 0xEB, /* 0x48-0x4B */ + 0x8A, 0xEC, 0x8A, 0xED, 0x8A, 0xEE, 0x8A, 0xEF, /* 0x4C-0x4F */ + 0x8A, 0xF0, 0x8A, 0xF1, 0x8A, 0xF2, 0x8A, 0xF3, /* 0x50-0x53 */ + 0x8A, 0xF4, 0xE6, 0xBC, 0x8A, 0xF5, 0x8A, 0xF6, /* 0x54-0x57 */ + 0x8A, 0xF7, 0x8A, 0xF8, 0xBB, 0xE9, 0x8A, 0xF9, /* 0x58-0x5B */ + 0x8A, 0xFA, 0x8A, 0xFB, 0x8A, 0xFC, 0x8A, 0xFD, /* 0x5C-0x5F */ + 0x8A, 0xFE, 0x8B, 0x40, 0xE6, 0xBE, 0x8B, 0x41, /* 0x60-0x63 */ + 0x8B, 0x42, 0x8B, 0x43, 0x8B, 0x44, 0xE6, 0xBA, /* 0x64-0x67 */ + 0x8B, 0x45, 0x8B, 0x46, 0xC0, 0xB7, 0x8B, 0x47, /* 0x68-0x6B */ + 0x8B, 0x48, 0x8B, 0x49, 0x8B, 0x4A, 0x8B, 0x4B, /* 0x6C-0x6F */ + 0x8B, 0x4C, 0x8B, 0x4D, 0x8B, 0x4E, 0x8B, 0x4F, /* 0x70-0x73 */ + 0xD3, 0xA4, 0xE6, 0xBF, 0xC9, 0xF4, 0xE6, 0xC3, /* 0x74-0x77 */ + 0x8B, 0x50, 0x8B, 0x51, 0xE6, 0xC4, 0x8B, 0x52, /* 0x78-0x7B */ + 0x8B, 0x53, 0x8B, 0x54, 0x8B, 0x55, 0xD0, 0xF6, /* 0x7C-0x7F */ + + 0x8B, 0x56, 0x8B, 0x57, 0x8B, 0x58, 0x8B, 0x59, /* 0x80-0x83 */ + 0x8B, 0x5A, 0x8B, 0x5B, 0x8B, 0x5C, 0x8B, 0x5D, /* 0x84-0x87 */ + 0x8B, 0x5E, 0x8B, 0x5F, 0x8B, 0x60, 0x8B, 0x61, /* 0x88-0x8B */ + 0x8B, 0x62, 0x8B, 0x63, 0x8B, 0x64, 0x8B, 0x65, /* 0x8C-0x8F */ + 0x8B, 0x66, 0x8B, 0x67, 0xC3, 0xBD, 0x8B, 0x68, /* 0x90-0x93 */ + 0x8B, 0x69, 0x8B, 0x6A, 0x8B, 0x6B, 0x8B, 0x6C, /* 0x94-0x97 */ + 0x8B, 0x6D, 0x8B, 0x6E, 0xC3, 0xC4, 0xE6, 0xC2, /* 0x98-0x9B */ + 0x8B, 0x6F, 0x8B, 0x70, 0x8B, 0x71, 0x8B, 0x72, /* 0x9C-0x9F */ + 0x8B, 0x73, 0x8B, 0x74, 0x8B, 0x75, 0x8B, 0x76, /* 0xA0-0xA3 */ + 0x8B, 0x77, 0x8B, 0x78, 0x8B, 0x79, 0x8B, 0x7A, /* 0xA4-0xA7 */ + 0x8B, 0x7B, 0x8B, 0x7C, 0xE6, 0xC1, 0x8B, 0x7D, /* 0xA8-0xAB */ + 0x8B, 0x7E, 0x8B, 0x80, 0x8B, 0x81, 0x8B, 0x82, /* 0xAC-0xAF */ + 0x8B, 0x83, 0x8B, 0x84, 0xE6, 0xC7, 0xCF, 0xB1, /* 0xB0-0xB3 */ + 0x8B, 0x85, 0xEB, 0xF4, 0x8B, 0x86, 0x8B, 0x87, /* 0xB4-0xB7 */ + 0xE6, 0xCA, 0x8B, 0x88, 0x8B, 0x89, 0x8B, 0x8A, /* 0xB8-0xBB */ + 0x8B, 0x8B, 0x8B, 0x8C, 0xE6, 0xC5, 0x8B, 0x8D, /* 0xBC-0xBF */ + 0x8B, 0x8E, 0xBC, 0xDE, 0xC9, 0xA9, 0x8B, 0x8F, /* 0xC0-0xC3 */ + 0x8B, 0x90, 0x8B, 0x91, 0x8B, 0x92, 0x8B, 0x93, /* 0xC4-0xC7 */ + 0x8B, 0x94, 0xBC, 0xB5, 0x8B, 0x95, 0x8B, 0x96, /* 0xC8-0xCB */ + 0xCF, 0xD3, 0x8B, 0x97, 0x8B, 0x98, 0x8B, 0x99, /* 0xCC-0xCF */ + 0x8B, 0x9A, 0x8B, 0x9B, 0xE6, 0xC8, 0x8B, 0x9C, /* 0xD0-0xD3 */ + 0xE6, 0xC9, 0x8B, 0x9D, 0xE6, 0xCE, 0x8B, 0x9E, /* 0xD4-0xD7 */ + 0xE6, 0xD0, 0x8B, 0x9F, 0x8B, 0xA0, 0x8B, 0xA1, /* 0xD8-0xDB */ + 0xE6, 0xD1, 0x8B, 0xA2, 0x8B, 0xA3, 0x8B, 0xA4, /* 0xDC-0xDF */ + 0xE6, 0xCB, 0xB5, 0xD5, 0x8B, 0xA5, 0xE6, 0xCC, /* 0xE0-0xE3 */ + 0x8B, 0xA6, 0x8B, 0xA7, 0xE6, 0xCF, 0x8B, 0xA8, /* 0xE4-0xE7 */ + 0x8B, 0xA9, 0xC4, 0xDB, 0x8B, 0xAA, 0xE6, 0xC6, /* 0xE8-0xEB */ + 0x8B, 0xAB, 0x8B, 0xAC, 0x8B, 0xAD, 0x8B, 0xAE, /* 0xEC-0xEF */ + 0x8B, 0xAF, 0xE6, 0xCD, 0x8B, 0xB0, 0x8B, 0xB1, /* 0xF0-0xF3 */ + 0x8B, 0xB2, 0x8B, 0xB3, 0x8B, 0xB4, 0x8B, 0xB5, /* 0xF4-0xF7 */ + 0x8B, 0xB6, 0x8B, 0xB7, 0x8B, 0xB8, 0x8B, 0xB9, /* 0xF8-0xFB */ + 0x8B, 0xBA, 0x8B, 0xBB, 0x8B, 0xBC, 0x8B, 0xBD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5B[512] = { + 0x8B, 0xBE, 0x8B, 0xBF, 0x8B, 0xC0, 0x8B, 0xC1, /* 0x00-0x03 */ + 0x8B, 0xC2, 0x8B, 0xC3, 0x8B, 0xC4, 0x8B, 0xC5, /* 0x04-0x07 */ + 0x8B, 0xC6, 0xE6, 0xD2, 0x8B, 0xC7, 0x8B, 0xC8, /* 0x08-0x0B */ + 0x8B, 0xC9, 0x8B, 0xCA, 0x8B, 0xCB, 0x8B, 0xCC, /* 0x0C-0x0F */ + 0x8B, 0xCD, 0x8B, 0xCE, 0x8B, 0xCF, 0x8B, 0xD0, /* 0x10-0x13 */ + 0x8B, 0xD1, 0x8B, 0xD2, 0xE6, 0xD4, 0xE6, 0xD3, /* 0x14-0x17 */ + 0x8B, 0xD3, 0x8B, 0xD4, 0x8B, 0xD5, 0x8B, 0xD6, /* 0x18-0x1B */ + 0x8B, 0xD7, 0x8B, 0xD8, 0x8B, 0xD9, 0x8B, 0xDA, /* 0x1C-0x1F */ + 0x8B, 0xDB, 0x8B, 0xDC, 0x8B, 0xDD, 0x8B, 0xDE, /* 0x20-0x23 */ + 0x8B, 0xDF, 0x8B, 0xE0, 0x8B, 0xE1, 0x8B, 0xE2, /* 0x24-0x27 */ + 0x8B, 0xE3, 0x8B, 0xE4, 0x8B, 0xE5, 0x8B, 0xE6, /* 0x28-0x2B */ + 0x8B, 0xE7, 0x8B, 0xE8, 0x8B, 0xE9, 0x8B, 0xEA, /* 0x2C-0x2F */ + 0x8B, 0xEB, 0x8B, 0xEC, 0xE6, 0xD5, 0x8B, 0xED, /* 0x30-0x33 */ + 0xD9, 0xF8, 0x8B, 0xEE, 0x8B, 0xEF, 0xE6, 0xD6, /* 0x34-0x37 */ + 0x8B, 0xF0, 0x8B, 0xF1, 0x8B, 0xF2, 0x8B, 0xF3, /* 0x38-0x3B */ + 0x8B, 0xF4, 0x8B, 0xF5, 0x8B, 0xF6, 0x8B, 0xF7, /* 0x3C-0x3F */ + 0xE6, 0xD7, 0x8B, 0xF8, 0x8B, 0xF9, 0x8B, 0xFA, /* 0x40-0x43 */ + 0x8B, 0xFB, 0x8B, 0xFC, 0x8B, 0xFD, 0x8B, 0xFE, /* 0x44-0x47 */ + 0x8C, 0x40, 0x8C, 0x41, 0x8C, 0x42, 0x8C, 0x43, /* 0x48-0x4B */ + 0x8C, 0x44, 0x8C, 0x45, 0x8C, 0x46, 0x8C, 0x47, /* 0x4C-0x4F */ + 0xD7, 0xD3, 0xE6, 0xDD, 0x8C, 0x48, 0xE6, 0xDE, /* 0x50-0x53 */ + 0xBF, 0xD7, 0xD4, 0xD0, 0x8C, 0x49, 0xD7, 0xD6, /* 0x54-0x57 */ + 0xB4, 0xE6, 0xCB, 0xEF, 0xE6, 0xDA, 0xD8, 0xC3, /* 0x58-0x5B */ + 0xD7, 0xCE, 0xD0, 0xA2, 0x8C, 0x4A, 0xC3, 0xCF, /* 0x5C-0x5F */ + 0x8C, 0x4B, 0x8C, 0x4C, 0xE6, 0xDF, 0xBC, 0xBE, /* 0x60-0x63 */ + 0xB9, 0xC2, 0xE6, 0xDB, 0xD1, 0xA7, 0x8C, 0x4D, /* 0x64-0x67 */ + 0x8C, 0x4E, 0xBA, 0xA2, 0xC2, 0xCF, 0x8C, 0x4F, /* 0x68-0x6B */ + 0xD8, 0xAB, 0x8C, 0x50, 0x8C, 0x51, 0x8C, 0x52, /* 0x6C-0x6F */ + 0xCA, 0xEB, 0xE5, 0xEE, 0x8C, 0x53, 0xE6, 0xDC, /* 0x70-0x73 */ + 0x8C, 0x54, 0xB7, 0xF5, 0x8C, 0x55, 0x8C, 0x56, /* 0x74-0x77 */ + 0x8C, 0x57, 0x8C, 0x58, 0xC8, 0xE6, 0x8C, 0x59, /* 0x78-0x7B */ + 0x8C, 0x5A, 0xC4, 0xF5, 0x8C, 0x5B, 0x8C, 0x5C, /* 0x7C-0x7F */ + + 0xE5, 0xB2, 0xC4, 0xFE, 0x8C, 0x5D, 0xCB, 0xFC, /* 0x80-0x83 */ + 0xE5, 0xB3, 0xD5, 0xAC, 0x8C, 0x5E, 0xD3, 0xEE, /* 0x84-0x87 */ + 0xCA, 0xD8, 0xB0, 0xB2, 0x8C, 0x5F, 0xCB, 0xCE, /* 0x88-0x8B */ + 0xCD, 0xEA, 0x8C, 0x60, 0x8C, 0x61, 0xBA, 0xEA, /* 0x8C-0x8F */ + 0x8C, 0x62, 0x8C, 0x63, 0x8C, 0x64, 0xE5, 0xB5, /* 0x90-0x93 */ + 0x8C, 0x65, 0xE5, 0xB4, 0x8C, 0x66, 0xD7, 0xDA, /* 0x94-0x97 */ + 0xB9, 0xD9, 0xD6, 0xE6, 0xB6, 0xA8, 0xCD, 0xF0, /* 0x98-0x9B */ + 0xD2, 0xCB, 0xB1, 0xA6, 0xCA, 0xB5, 0x8C, 0x67, /* 0x9C-0x9F */ + 0xB3, 0xE8, 0xC9, 0xF3, 0xBF, 0xCD, 0xD0, 0xFB, /* 0xA0-0xA3 */ + 0xCA, 0xD2, 0xE5, 0xB6, 0xBB, 0xC2, 0x8C, 0x68, /* 0xA4-0xA7 */ + 0x8C, 0x69, 0x8C, 0x6A, 0xCF, 0xDC, 0xB9, 0xAC, /* 0xA8-0xAB */ + 0x8C, 0x6B, 0x8C, 0x6C, 0x8C, 0x6D, 0x8C, 0x6E, /* 0xAC-0xAF */ + 0xD4, 0xD7, 0x8C, 0x6F, 0x8C, 0x70, 0xBA, 0xA6, /* 0xB0-0xB3 */ + 0xD1, 0xE7, 0xCF, 0xFC, 0xBC, 0xD2, 0x8C, 0x71, /* 0xB4-0xB7 */ + 0xE5, 0xB7, 0xC8, 0xDD, 0x8C, 0x72, 0x8C, 0x73, /* 0xB8-0xBB */ + 0x8C, 0x74, 0xBF, 0xED, 0xB1, 0xF6, 0xCB, 0xDE, /* 0xBC-0xBF */ + 0x8C, 0x75, 0x8C, 0x76, 0xBC, 0xC5, 0x8C, 0x77, /* 0xC0-0xC3 */ + 0xBC, 0xC4, 0xD2, 0xFA, 0xC3, 0xDC, 0xBF, 0xDC, /* 0xC4-0xC7 */ + 0x8C, 0x78, 0x8C, 0x79, 0x8C, 0x7A, 0x8C, 0x7B, /* 0xC8-0xCB */ + 0xB8, 0xBB, 0x8C, 0x7C, 0x8C, 0x7D, 0x8C, 0x7E, /* 0xCC-0xCF */ + 0xC3, 0xC2, 0x8C, 0x80, 0xBA, 0xAE, 0xD4, 0xA2, /* 0xD0-0xD3 */ + 0x8C, 0x81, 0x8C, 0x82, 0x8C, 0x83, 0x8C, 0x84, /* 0xD4-0xD7 */ + 0x8C, 0x85, 0x8C, 0x86, 0x8C, 0x87, 0x8C, 0x88, /* 0xD8-0xDB */ + 0x8C, 0x89, 0xC7, 0xDE, 0xC4, 0xAF, 0xB2, 0xEC, /* 0xDC-0xDF */ + 0x8C, 0x8A, 0xB9, 0xD1, 0x8C, 0x8B, 0x8C, 0x8C, /* 0xE0-0xE3 */ + 0xE5, 0xBB, 0xC1, 0xC8, 0x8C, 0x8D, 0x8C, 0x8E, /* 0xE4-0xE7 */ + 0xD5, 0xAF, 0x8C, 0x8F, 0x8C, 0x90, 0x8C, 0x91, /* 0xE8-0xEB */ + 0x8C, 0x92, 0x8C, 0x93, 0xE5, 0xBC, 0x8C, 0x94, /* 0xEC-0xEF */ + 0xE5, 0xBE, 0x8C, 0x95, 0x8C, 0x96, 0x8C, 0x97, /* 0xF0-0xF3 */ + 0x8C, 0x98, 0x8C, 0x99, 0x8C, 0x9A, 0x8C, 0x9B, /* 0xF4-0xF7 */ + 0xB4, 0xE7, 0xB6, 0xD4, 0xCB, 0xC2, 0xD1, 0xB0, /* 0xF8-0xFB */ + 0xB5, 0xBC, 0x8C, 0x9C, 0x8C, 0x9D, 0xCA, 0xD9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x8C, 0x9E, 0xB7, 0xE2, 0x8C, 0x9F, 0x8C, 0xA0, /* 0x00-0x03 */ + 0xC9, 0xE4, 0x8C, 0xA1, 0xBD, 0xAB, 0x8C, 0xA2, /* 0x04-0x07 */ + 0x8C, 0xA3, 0xCE, 0xBE, 0xD7, 0xF0, 0x8C, 0xA4, /* 0x08-0x0B */ + 0x8C, 0xA5, 0x8C, 0xA6, 0x8C, 0xA7, 0xD0, 0xA1, /* 0x0C-0x0F */ + 0x8C, 0xA8, 0xC9, 0xD9, 0x8C, 0xA9, 0x8C, 0xAA, /* 0x10-0x13 */ + 0xB6, 0xFB, 0xE6, 0xD8, 0xBC, 0xE2, 0x8C, 0xAB, /* 0x14-0x17 */ + 0xB3, 0xBE, 0x8C, 0xAC, 0xC9, 0xD0, 0x8C, 0xAD, /* 0x18-0x1B */ + 0xE6, 0xD9, 0xB3, 0xA2, 0x8C, 0xAE, 0x8C, 0xAF, /* 0x1C-0x1F */ + 0x8C, 0xB0, 0x8C, 0xB1, 0xDE, 0xCC, 0x8C, 0xB2, /* 0x20-0x23 */ + 0xD3, 0xC8, 0xDE, 0xCD, 0x8C, 0xB3, 0xD2, 0xA2, /* 0x24-0x27 */ + 0x8C, 0xB4, 0x8C, 0xB5, 0x8C, 0xB6, 0x8C, 0xB7, /* 0x28-0x2B */ + 0xDE, 0xCE, 0x8C, 0xB8, 0x8C, 0xB9, 0x8C, 0xBA, /* 0x2C-0x2F */ + 0x8C, 0xBB, 0xBE, 0xCD, 0x8C, 0xBC, 0x8C, 0xBD, /* 0x30-0x33 */ + 0xDE, 0xCF, 0x8C, 0xBE, 0x8C, 0xBF, 0x8C, 0xC0, /* 0x34-0x37 */ + 0xCA, 0xAC, 0xD2, 0xFC, 0xB3, 0xDF, 0xE5, 0xEA, /* 0x38-0x3B */ + 0xC4, 0xE1, 0xBE, 0xA1, 0xCE, 0xB2, 0xC4, 0xF2, /* 0x3C-0x3F */ + 0xBE, 0xD6, 0xC6, 0xA8, 0xB2, 0xE3, 0x8C, 0xC1, /* 0x40-0x43 */ + 0x8C, 0xC2, 0xBE, 0xD3, 0x8C, 0xC3, 0x8C, 0xC4, /* 0x44-0x47 */ + 0xC7, 0xFC, 0xCC, 0xEB, 0xBD, 0xEC, 0xCE, 0xDD, /* 0x48-0x4B */ + 0x8C, 0xC5, 0x8C, 0xC6, 0xCA, 0xBA, 0xC6, 0xC1, /* 0x4C-0x4F */ + 0xE5, 0xEC, 0xD0, 0xBC, 0x8C, 0xC7, 0x8C, 0xC8, /* 0x50-0x53 */ + 0x8C, 0xC9, 0xD5, 0xB9, 0x8C, 0xCA, 0x8C, 0xCB, /* 0x54-0x57 */ + 0x8C, 0xCC, 0xE5, 0xED, 0x8C, 0xCD, 0x8C, 0xCE, /* 0x58-0x5B */ + 0x8C, 0xCF, 0x8C, 0xD0, 0xCA, 0xF4, 0x8C, 0xD1, /* 0x5C-0x5F */ + 0xCD, 0xC0, 0xC2, 0xC5, 0x8C, 0xD2, 0xE5, 0xEF, /* 0x60-0x63 */ + 0x8C, 0xD3, 0xC2, 0xC4, 0xE5, 0xF0, 0x8C, 0xD4, /* 0x64-0x67 */ + 0x8C, 0xD5, 0x8C, 0xD6, 0x8C, 0xD7, 0x8C, 0xD8, /* 0x68-0x6B */ + 0x8C, 0xD9, 0x8C, 0xDA, 0xE5, 0xF8, 0xCD, 0xCD, /* 0x6C-0x6F */ + 0x8C, 0xDB, 0xC9, 0xBD, 0x8C, 0xDC, 0x8C, 0xDD, /* 0x70-0x73 */ + 0x8C, 0xDE, 0x8C, 0xDF, 0x8C, 0xE0, 0x8C, 0xE1, /* 0x74-0x77 */ + 0x8C, 0xE2, 0xD2, 0xD9, 0xE1, 0xA8, 0x8C, 0xE3, /* 0x78-0x7B */ + 0x8C, 0xE4, 0x8C, 0xE5, 0x8C, 0xE6, 0xD3, 0xEC, /* 0x7C-0x7F */ + + 0x8C, 0xE7, 0xCB, 0xEA, 0xC6, 0xF1, 0x8C, 0xE8, /* 0x80-0x83 */ + 0x8C, 0xE9, 0x8C, 0xEA, 0x8C, 0xEB, 0x8C, 0xEC, /* 0x84-0x87 */ + 0xE1, 0xAC, 0x8C, 0xED, 0x8C, 0xEE, 0x8C, 0xEF, /* 0x88-0x8B */ + 0xE1, 0xA7, 0xE1, 0xA9, 0x8C, 0xF0, 0x8C, 0xF1, /* 0x8C-0x8F */ + 0xE1, 0xAA, 0xE1, 0xAF, 0x8C, 0xF2, 0x8C, 0xF3, /* 0x90-0x93 */ + 0xB2, 0xED, 0x8C, 0xF4, 0xE1, 0xAB, 0xB8, 0xDA, /* 0x94-0x97 */ + 0xE1, 0xAD, 0xE1, 0xAE, 0xE1, 0xB0, 0xB5, 0xBA, /* 0x98-0x9B */ + 0xE1, 0xB1, 0x8C, 0xF5, 0x8C, 0xF6, 0x8C, 0xF7, /* 0x9C-0x9F */ + 0x8C, 0xF8, 0x8C, 0xF9, 0xE1, 0xB3, 0xE1, 0xB8, /* 0xA0-0xA3 */ + 0x8C, 0xFA, 0x8C, 0xFB, 0x8C, 0xFC, 0x8C, 0xFD, /* 0xA4-0xA7 */ + 0x8C, 0xFE, 0xD1, 0xD2, 0x8D, 0x40, 0xE1, 0xB6, /* 0xA8-0xAB */ + 0xE1, 0xB5, 0xC1, 0xEB, 0x8D, 0x41, 0x8D, 0x42, /* 0xAC-0xAF */ + 0x8D, 0x43, 0xE1, 0xB7, 0x8D, 0x44, 0xD4, 0xC0, /* 0xB0-0xB3 */ + 0x8D, 0x45, 0xE1, 0xB2, 0x8D, 0x46, 0xE1, 0xBA, /* 0xB4-0xB7 */ + 0xB0, 0xB6, 0x8D, 0x47, 0x8D, 0x48, 0x8D, 0x49, /* 0xB8-0xBB */ + 0x8D, 0x4A, 0xE1, 0xB4, 0x8D, 0x4B, 0xBF, 0xF9, /* 0xBC-0xBF */ + 0x8D, 0x4C, 0xE1, 0xB9, 0x8D, 0x4D, 0x8D, 0x4E, /* 0xC0-0xC3 */ + 0xE1, 0xBB, 0x8D, 0x4F, 0x8D, 0x50, 0x8D, 0x51, /* 0xC4-0xC7 */ + 0x8D, 0x52, 0x8D, 0x53, 0x8D, 0x54, 0xE1, 0xBE, /* 0xC8-0xCB */ + 0x8D, 0x55, 0x8D, 0x56, 0x8D, 0x57, 0x8D, 0x58, /* 0xCC-0xCF */ + 0x8D, 0x59, 0x8D, 0x5A, 0xE1, 0xBC, 0x8D, 0x5B, /* 0xD0-0xD3 */ + 0x8D, 0x5C, 0x8D, 0x5D, 0x8D, 0x5E, 0x8D, 0x5F, /* 0xD4-0xD7 */ + 0x8D, 0x60, 0xD6, 0xC5, 0x8D, 0x61, 0x8D, 0x62, /* 0xD8-0xDB */ + 0x8D, 0x63, 0x8D, 0x64, 0x8D, 0x65, 0x8D, 0x66, /* 0xDC-0xDF */ + 0x8D, 0x67, 0xCF, 0xBF, 0x8D, 0x68, 0x8D, 0x69, /* 0xE0-0xE3 */ + 0xE1, 0xBD, 0xE1, 0xBF, 0xC2, 0xCD, 0x8D, 0x6A, /* 0xE4-0xE7 */ + 0xB6, 0xEB, 0x8D, 0x6B, 0xD3, 0xF8, 0x8D, 0x6C, /* 0xE8-0xEB */ + 0x8D, 0x6D, 0xC7, 0xCD, 0x8D, 0x6E, 0x8D, 0x6F, /* 0xEC-0xEF */ + 0xB7, 0xE5, 0x8D, 0x70, 0x8D, 0x71, 0x8D, 0x72, /* 0xF0-0xF3 */ + 0x8D, 0x73, 0x8D, 0x74, 0x8D, 0x75, 0x8D, 0x76, /* 0xF4-0xF7 */ + 0x8D, 0x77, 0x8D, 0x78, 0x8D, 0x79, 0xBE, 0xFE, /* 0xF8-0xFB */ + 0x8D, 0x7A, 0x8D, 0x7B, 0x8D, 0x7C, 0x8D, 0x7D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0x8D, 0x7E, 0x8D, 0x80, 0xE1, 0xC0, 0xE1, 0xC1, /* 0x00-0x03 */ + 0x8D, 0x81, 0x8D, 0x82, 0xE1, 0xC7, 0xB3, 0xE7, /* 0x04-0x07 */ + 0x8D, 0x83, 0x8D, 0x84, 0x8D, 0x85, 0x8D, 0x86, /* 0x08-0x0B */ + 0x8D, 0x87, 0x8D, 0x88, 0xC6, 0xE9, 0x8D, 0x89, /* 0x0C-0x0F */ + 0x8D, 0x8A, 0x8D, 0x8B, 0x8D, 0x8C, 0x8D, 0x8D, /* 0x10-0x13 */ + 0xB4, 0xDE, 0x8D, 0x8E, 0xD1, 0xC2, 0x8D, 0x8F, /* 0x14-0x17 */ + 0x8D, 0x90, 0x8D, 0x91, 0x8D, 0x92, 0xE1, 0xC8, /* 0x18-0x1B */ + 0x8D, 0x93, 0x8D, 0x94, 0xE1, 0xC6, 0x8D, 0x95, /* 0x1C-0x1F */ + 0x8D, 0x96, 0x8D, 0x97, 0x8D, 0x98, 0x8D, 0x99, /* 0x20-0x23 */ + 0xE1, 0xC5, 0x8D, 0x9A, 0xE1, 0xC3, 0xE1, 0xC2, /* 0x24-0x27 */ + 0x8D, 0x9B, 0xB1, 0xC0, 0x8D, 0x9C, 0x8D, 0x9D, /* 0x28-0x2B */ + 0x8D, 0x9E, 0xD5, 0xB8, 0xE1, 0xC4, 0x8D, 0x9F, /* 0x2C-0x2F */ + 0x8D, 0xA0, 0x8D, 0xA1, 0x8D, 0xA2, 0x8D, 0xA3, /* 0x30-0x33 */ + 0xE1, 0xCB, 0x8D, 0xA4, 0x8D, 0xA5, 0x8D, 0xA6, /* 0x34-0x37 */ + 0x8D, 0xA7, 0x8D, 0xA8, 0x8D, 0xA9, 0x8D, 0xAA, /* 0x38-0x3B */ + 0x8D, 0xAB, 0xE1, 0xCC, 0xE1, 0xCA, 0x8D, 0xAC, /* 0x3C-0x3F */ + 0x8D, 0xAD, 0x8D, 0xAE, 0x8D, 0xAF, 0x8D, 0xB0, /* 0x40-0x43 */ + 0x8D, 0xB1, 0x8D, 0xB2, 0x8D, 0xB3, 0xEF, 0xFA, /* 0x44-0x47 */ + 0x8D, 0xB4, 0x8D, 0xB5, 0xE1, 0xD3, 0xE1, 0xD2, /* 0x48-0x4B */ + 0xC7, 0xB6, 0x8D, 0xB6, 0x8D, 0xB7, 0x8D, 0xB8, /* 0x4C-0x4F */ + 0x8D, 0xB9, 0x8D, 0xBA, 0x8D, 0xBB, 0x8D, 0xBC, /* 0x50-0x53 */ + 0x8D, 0xBD, 0x8D, 0xBE, 0x8D, 0xBF, 0x8D, 0xC0, /* 0x54-0x57 */ + 0xE1, 0xC9, 0x8D, 0xC1, 0x8D, 0xC2, 0xE1, 0xCE, /* 0x58-0x5B */ + 0x8D, 0xC3, 0xE1, 0xD0, 0x8D, 0xC4, 0x8D, 0xC5, /* 0x5C-0x5F */ + 0x8D, 0xC6, 0x8D, 0xC7, 0x8D, 0xC8, 0x8D, 0xC9, /* 0x60-0x63 */ + 0x8D, 0xCA, 0x8D, 0xCB, 0x8D, 0xCC, 0x8D, 0xCD, /* 0x64-0x67 */ + 0x8D, 0xCE, 0xE1, 0xD4, 0x8D, 0xCF, 0xE1, 0xD1, /* 0x68-0x6B */ + 0xE1, 0xCD, 0x8D, 0xD0, 0x8D, 0xD1, 0xE1, 0xCF, /* 0x6C-0x6F */ + 0x8D, 0xD2, 0x8D, 0xD3, 0x8D, 0xD4, 0x8D, 0xD5, /* 0x70-0x73 */ + 0xE1, 0xD5, 0x8D, 0xD6, 0x8D, 0xD7, 0x8D, 0xD8, /* 0x74-0x77 */ + 0x8D, 0xD9, 0x8D, 0xDA, 0x8D, 0xDB, 0x8D, 0xDC, /* 0x78-0x7B */ + 0x8D, 0xDD, 0x8D, 0xDE, 0x8D, 0xDF, 0x8D, 0xE0, /* 0x7C-0x7F */ + + 0x8D, 0xE1, 0x8D, 0xE2, 0xE1, 0xD6, 0x8D, 0xE3, /* 0x80-0x83 */ + 0x8D, 0xE4, 0x8D, 0xE5, 0x8D, 0xE6, 0x8D, 0xE7, /* 0x84-0x87 */ + 0x8D, 0xE8, 0x8D, 0xE9, 0x8D, 0xEA, 0x8D, 0xEB, /* 0x88-0x8B */ + 0x8D, 0xEC, 0x8D, 0xED, 0x8D, 0xEE, 0x8D, 0xEF, /* 0x8C-0x8F */ + 0x8D, 0xF0, 0x8D, 0xF1, 0x8D, 0xF2, 0x8D, 0xF3, /* 0x90-0x93 */ + 0x8D, 0xF4, 0x8D, 0xF5, 0x8D, 0xF6, 0x8D, 0xF7, /* 0x94-0x97 */ + 0x8D, 0xF8, 0xE1, 0xD7, 0x8D, 0xF9, 0x8D, 0xFA, /* 0x98-0x9B */ + 0x8D, 0xFB, 0xE1, 0xD8, 0x8D, 0xFC, 0x8D, 0xFD, /* 0x9C-0x9F */ + 0x8D, 0xFE, 0x8E, 0x40, 0x8E, 0x41, 0x8E, 0x42, /* 0xA0-0xA3 */ + 0x8E, 0x43, 0x8E, 0x44, 0x8E, 0x45, 0x8E, 0x46, /* 0xA4-0xA7 */ + 0x8E, 0x47, 0x8E, 0x48, 0x8E, 0x49, 0x8E, 0x4A, /* 0xA8-0xAB */ + 0x8E, 0x4B, 0x8E, 0x4C, 0x8E, 0x4D, 0x8E, 0x4E, /* 0xAC-0xAF */ + 0x8E, 0x4F, 0x8E, 0x50, 0x8E, 0x51, 0x8E, 0x52, /* 0xB0-0xB3 */ + 0x8E, 0x53, 0x8E, 0x54, 0x8E, 0x55, 0xE1, 0xDA, /* 0xB4-0xB7 */ + 0x8E, 0x56, 0x8E, 0x57, 0x8E, 0x58, 0x8E, 0x59, /* 0xB8-0xBB */ + 0x8E, 0x5A, 0x8E, 0x5B, 0x8E, 0x5C, 0x8E, 0x5D, /* 0xBC-0xBF */ + 0x8E, 0x5E, 0x8E, 0x5F, 0x8E, 0x60, 0x8E, 0x61, /* 0xC0-0xC3 */ + 0x8E, 0x62, 0xE1, 0xDB, 0x8E, 0x63, 0x8E, 0x64, /* 0xC4-0xC7 */ + 0x8E, 0x65, 0x8E, 0x66, 0x8E, 0x67, 0x8E, 0x68, /* 0xC8-0xCB */ + 0x8E, 0x69, 0xCE, 0xA1, 0x8E, 0x6A, 0x8E, 0x6B, /* 0xCC-0xCF */ + 0x8E, 0x6C, 0x8E, 0x6D, 0x8E, 0x6E, 0x8E, 0x6F, /* 0xD0-0xD3 */ + 0x8E, 0x70, 0x8E, 0x71, 0x8E, 0x72, 0x8E, 0x73, /* 0xD4-0xD7 */ + 0x8E, 0x74, 0x8E, 0x75, 0x8E, 0x76, 0xE7, 0xDD, /* 0xD8-0xDB */ + 0x8E, 0x77, 0xB4, 0xA8, 0xD6, 0xDD, 0x8E, 0x78, /* 0xDC-0xDF */ + 0x8E, 0x79, 0xD1, 0xB2, 0xB3, 0xB2, 0x8E, 0x7A, /* 0xE0-0xE3 */ + 0x8E, 0x7B, 0xB9, 0xA4, 0xD7, 0xF3, 0xC7, 0xC9, /* 0xE4-0xE7 */ + 0xBE, 0xDE, 0xB9, 0xAE, 0x8E, 0x7C, 0xCE, 0xD7, /* 0xE8-0xEB */ + 0x8E, 0x7D, 0x8E, 0x7E, 0xB2, 0xEE, 0xDB, 0xCF, /* 0xEC-0xEF */ + 0x8E, 0x80, 0xBC, 0xBA, 0xD2, 0xD1, 0xCB, 0xC8, /* 0xF0-0xF3 */ + 0xB0, 0xCD, 0x8E, 0x81, 0x8E, 0x82, 0xCF, 0xEF, /* 0xF4-0xF7 */ + 0x8E, 0x83, 0x8E, 0x84, 0x8E, 0x85, 0x8E, 0x86, /* 0xF8-0xFB */ + 0x8E, 0x87, 0xD9, 0xE3, 0xBD, 0xED, 0x8E, 0x88, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x8E, 0x89, 0xB1, 0xD2, 0xCA, 0xD0, 0xB2, 0xBC, /* 0x00-0x03 */ + 0x8E, 0x8A, 0xCB, 0xA7, 0xB7, 0xAB, 0x8E, 0x8B, /* 0x04-0x07 */ + 0xCA, 0xA6, 0x8E, 0x8C, 0x8E, 0x8D, 0x8E, 0x8E, /* 0x08-0x0B */ + 0xCF, 0xA3, 0x8E, 0x8F, 0x8E, 0x90, 0xE0, 0xF8, /* 0x0C-0x0F */ + 0xD5, 0xCA, 0xE0, 0xFB, 0x8E, 0x91, 0x8E, 0x92, /* 0x10-0x13 */ + 0xE0, 0xFA, 0xC5, 0xC1, 0xCC, 0xFB, 0x8E, 0x93, /* 0x14-0x17 */ + 0xC1, 0xB1, 0xE0, 0xF9, 0xD6, 0xE3, 0xB2, 0xAF, /* 0x18-0x1B */ + 0xD6, 0xC4, 0xB5, 0xDB, 0x8E, 0x94, 0x8E, 0x95, /* 0x1C-0x1F */ + 0x8E, 0x96, 0x8E, 0x97, 0x8E, 0x98, 0x8E, 0x99, /* 0x20-0x23 */ + 0x8E, 0x9A, 0x8E, 0x9B, 0xB4, 0xF8, 0xD6, 0xA1, /* 0x24-0x27 */ + 0x8E, 0x9C, 0x8E, 0x9D, 0x8E, 0x9E, 0x8E, 0x9F, /* 0x28-0x2B */ + 0x8E, 0xA0, 0xCF, 0xAF, 0xB0, 0xEF, 0x8E, 0xA1, /* 0x2C-0x2F */ + 0x8E, 0xA2, 0xE0, 0xFC, 0x8E, 0xA3, 0x8E, 0xA4, /* 0x30-0x33 */ + 0x8E, 0xA5, 0x8E, 0xA6, 0x8E, 0xA7, 0xE1, 0xA1, /* 0x34-0x37 */ + 0xB3, 0xA3, 0x8E, 0xA8, 0x8E, 0xA9, 0xE0, 0xFD, /* 0x38-0x3B */ + 0xE0, 0xFE, 0xC3, 0xB1, 0x8E, 0xAA, 0x8E, 0xAB, /* 0x3C-0x3F */ + 0x8E, 0xAC, 0x8E, 0xAD, 0xC3, 0xDD, 0x8E, 0xAE, /* 0x40-0x43 */ + 0xE1, 0xA2, 0xB7, 0xF9, 0x8E, 0xAF, 0x8E, 0xB0, /* 0x44-0x47 */ + 0x8E, 0xB1, 0x8E, 0xB2, 0x8E, 0xB3, 0x8E, 0xB4, /* 0x48-0x4B */ + 0xBB, 0xCF, 0x8E, 0xB5, 0x8E, 0xB6, 0x8E, 0xB7, /* 0x4C-0x4F */ + 0x8E, 0xB8, 0x8E, 0xB9, 0x8E, 0xBA, 0x8E, 0xBB, /* 0x50-0x53 */ + 0xE1, 0xA3, 0xC4, 0xBB, 0x8E, 0xBC, 0x8E, 0xBD, /* 0x54-0x57 */ + 0x8E, 0xBE, 0x8E, 0xBF, 0x8E, 0xC0, 0xE1, 0xA4, /* 0x58-0x5B */ + 0x8E, 0xC1, 0x8E, 0xC2, 0xE1, 0xA5, 0x8E, 0xC3, /* 0x5C-0x5F */ + 0x8E, 0xC4, 0xE1, 0xA6, 0xB4, 0xB1, 0x8E, 0xC5, /* 0x60-0x63 */ + 0x8E, 0xC6, 0x8E, 0xC7, 0x8E, 0xC8, 0x8E, 0xC9, /* 0x64-0x67 */ + 0x8E, 0xCA, 0x8E, 0xCB, 0x8E, 0xCC, 0x8E, 0xCD, /* 0x68-0x6B */ + 0x8E, 0xCE, 0x8E, 0xCF, 0x8E, 0xD0, 0x8E, 0xD1, /* 0x6C-0x6F */ + 0x8E, 0xD2, 0x8E, 0xD3, 0xB8, 0xC9, 0xC6, 0xBD, /* 0x70-0x73 */ + 0xC4, 0xEA, 0x8E, 0xD4, 0xB2, 0xA2, 0x8E, 0xD5, /* 0x74-0x77 */ + 0xD0, 0xD2, 0x8E, 0xD6, 0xE7, 0xDB, 0xBB, 0xC3, /* 0x78-0x7B */ + 0xD3, 0xD7, 0xD3, 0xC4, 0x8E, 0xD7, 0xB9, 0xE3, /* 0x7C-0x7F */ + + 0xE2, 0xCF, 0x8E, 0xD8, 0x8E, 0xD9, 0x8E, 0xDA, /* 0x80-0x83 */ + 0xD7, 0xAF, 0x8E, 0xDB, 0xC7, 0xEC, 0xB1, 0xD3, /* 0x84-0x87 */ + 0x8E, 0xDC, 0x8E, 0xDD, 0xB4, 0xB2, 0xE2, 0xD1, /* 0x88-0x8B */ + 0x8E, 0xDE, 0x8E, 0xDF, 0x8E, 0xE0, 0xD0, 0xF2, /* 0x8C-0x8F */ + 0xC2, 0xAE, 0xE2, 0xD0, 0x8E, 0xE1, 0xBF, 0xE2, /* 0x90-0x93 */ + 0xD3, 0xA6, 0xB5, 0xD7, 0xE2, 0xD2, 0xB5, 0xEA, /* 0x94-0x97 */ + 0x8E, 0xE2, 0xC3, 0xED, 0xB8, 0xFD, 0x8E, 0xE3, /* 0x98-0x9B */ + 0xB8, 0xAE, 0x8E, 0xE4, 0xC5, 0xD3, 0xB7, 0xCF, /* 0x9C-0x9F */ + 0xE2, 0xD4, 0x8E, 0xE5, 0x8E, 0xE6, 0x8E, 0xE7, /* 0xA0-0xA3 */ + 0x8E, 0xE8, 0xE2, 0xD3, 0xB6, 0xC8, 0xD7, 0xF9, /* 0xA4-0xA7 */ + 0x8E, 0xE9, 0x8E, 0xEA, 0x8E, 0xEB, 0x8E, 0xEC, /* 0xA8-0xAB */ + 0x8E, 0xED, 0xCD, 0xA5, 0x8E, 0xEE, 0x8E, 0xEF, /* 0xAC-0xAF */ + 0x8E, 0xF0, 0x8E, 0xF1, 0x8E, 0xF2, 0xE2, 0xD8, /* 0xB0-0xB3 */ + 0x8E, 0xF3, 0xE2, 0xD6, 0xCA, 0xFC, 0xBF, 0xB5, /* 0xB4-0xB7 */ + 0xD3, 0xB9, 0xE2, 0xD5, 0x8E, 0xF4, 0x8E, 0xF5, /* 0xB8-0xBB */ + 0x8E, 0xF6, 0x8E, 0xF7, 0xE2, 0xD7, 0x8E, 0xF8, /* 0xBC-0xBF */ + 0x8E, 0xF9, 0x8E, 0xFA, 0x8E, 0xFB, 0x8E, 0xFC, /* 0xC0-0xC3 */ + 0x8E, 0xFD, 0x8E, 0xFE, 0x8F, 0x40, 0x8F, 0x41, /* 0xC4-0xC7 */ + 0x8F, 0x42, 0xC1, 0xAE, 0xC0, 0xC8, 0x8F, 0x43, /* 0xC8-0xCB */ + 0x8F, 0x44, 0x8F, 0x45, 0x8F, 0x46, 0x8F, 0x47, /* 0xCC-0xCF */ + 0x8F, 0x48, 0xE2, 0xDB, 0xE2, 0xDA, 0xC0, 0xAA, /* 0xD0-0xD3 */ + 0x8F, 0x49, 0x8F, 0x4A, 0xC1, 0xCE, 0x8F, 0x4B, /* 0xD4-0xD7 */ + 0x8F, 0x4C, 0x8F, 0x4D, 0x8F, 0x4E, 0xE2, 0xDC, /* 0xD8-0xDB */ + 0x8F, 0x4F, 0x8F, 0x50, 0x8F, 0x51, 0x8F, 0x52, /* 0xDC-0xDF */ + 0x8F, 0x53, 0x8F, 0x54, 0x8F, 0x55, 0x8F, 0x56, /* 0xE0-0xE3 */ + 0x8F, 0x57, 0x8F, 0x58, 0x8F, 0x59, 0x8F, 0x5A, /* 0xE4-0xE7 */ + 0xE2, 0xDD, 0x8F, 0x5B, 0xE2, 0xDE, 0x8F, 0x5C, /* 0xE8-0xEB */ + 0x8F, 0x5D, 0x8F, 0x5E, 0x8F, 0x5F, 0x8F, 0x60, /* 0xEC-0xEF */ + 0x8F, 0x61, 0x8F, 0x62, 0x8F, 0x63, 0x8F, 0x64, /* 0xF0-0xF3 */ + 0xDB, 0xC8, 0x8F, 0x65, 0xD1, 0xD3, 0xCD, 0xA2, /* 0xF4-0xF7 */ + 0x8F, 0x66, 0x8F, 0x67, 0xBD, 0xA8, 0x8F, 0x68, /* 0xF8-0xFB */ + 0x8F, 0x69, 0x8F, 0x6A, 0xDE, 0xC3, 0xD8, 0xA5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0xBF, 0xAA, 0xDB, 0xCD, 0xD2, 0xEC, 0xC6, 0xFA, /* 0x00-0x03 */ + 0xC5, 0xAA, 0x8F, 0x6B, 0x8F, 0x6C, 0x8F, 0x6D, /* 0x04-0x07 */ + 0xDE, 0xC4, 0x8F, 0x6E, 0xB1, 0xD7, 0xDF, 0xAE, /* 0x08-0x0B */ + 0x8F, 0x6F, 0x8F, 0x70, 0x8F, 0x71, 0xCA, 0xBD, /* 0x0C-0x0F */ + 0x8F, 0x72, 0xDF, 0xB1, 0x8F, 0x73, 0xB9, 0xAD, /* 0x10-0x13 */ + 0x8F, 0x74, 0xD2, 0xFD, 0x8F, 0x75, 0xB8, 0xA5, /* 0x14-0x17 */ + 0xBA, 0xEB, 0x8F, 0x76, 0x8F, 0x77, 0xB3, 0xDA, /* 0x18-0x1B */ + 0x8F, 0x78, 0x8F, 0x79, 0x8F, 0x7A, 0xB5, 0xDC, /* 0x1C-0x1F */ + 0xD5, 0xC5, 0x8F, 0x7B, 0x8F, 0x7C, 0x8F, 0x7D, /* 0x20-0x23 */ + 0x8F, 0x7E, 0xC3, 0xD6, 0xCF, 0xD2, 0xBB, 0xA1, /* 0x24-0x27 */ + 0x8F, 0x80, 0xE5, 0xF3, 0xE5, 0xF2, 0x8F, 0x81, /* 0x28-0x2B */ + 0x8F, 0x82, 0xE5, 0xF4, 0x8F, 0x83, 0xCD, 0xE4, /* 0x2C-0x2F */ + 0x8F, 0x84, 0xC8, 0xF5, 0x8F, 0x85, 0x8F, 0x86, /* 0x30-0x33 */ + 0x8F, 0x87, 0x8F, 0x88, 0x8F, 0x89, 0x8F, 0x8A, /* 0x34-0x37 */ + 0x8F, 0x8B, 0xB5, 0xAF, 0xC7, 0xBF, 0x8F, 0x8C, /* 0x38-0x3B */ + 0xE5, 0xF6, 0x8F, 0x8D, 0x8F, 0x8E, 0x8F, 0x8F, /* 0x3C-0x3F */ + 0xEC, 0xB0, 0x8F, 0x90, 0x8F, 0x91, 0x8F, 0x92, /* 0x40-0x43 */ + 0x8F, 0x93, 0x8F, 0x94, 0x8F, 0x95, 0x8F, 0x96, /* 0x44-0x47 */ + 0x8F, 0x97, 0x8F, 0x98, 0x8F, 0x99, 0x8F, 0x9A, /* 0x48-0x4B */ + 0x8F, 0x9B, 0x8F, 0x9C, 0x8F, 0x9D, 0x8F, 0x9E, /* 0x4C-0x4F */ + 0xE5, 0xE6, 0x8F, 0x9F, 0xB9, 0xE9, 0xB5, 0xB1, /* 0x50-0x53 */ + 0x8F, 0xA0, 0xC2, 0xBC, 0xE5, 0xE8, 0xE5, 0xE7, /* 0x54-0x57 */ + 0xE5, 0xE9, 0x8F, 0xA1, 0x8F, 0xA2, 0x8F, 0xA3, /* 0x58-0x5B */ + 0x8F, 0xA4, 0xD2, 0xCD, 0x8F, 0xA5, 0x8F, 0xA6, /* 0x5C-0x5F */ + 0x8F, 0xA7, 0xE1, 0xEA, 0xD0, 0xCE, 0x8F, 0xA8, /* 0x60-0x63 */ + 0xCD, 0xAE, 0x8F, 0xA9, 0xD1, 0xE5, 0x8F, 0xAA, /* 0x64-0x67 */ + 0x8F, 0xAB, 0xB2, 0xCA, 0xB1, 0xEB, 0x8F, 0xAC, /* 0x68-0x6B */ + 0xB1, 0xF2, 0xC5, 0xED, 0x8F, 0xAD, 0x8F, 0xAE, /* 0x6C-0x6F */ + 0xD5, 0xC3, 0xD3, 0xB0, 0x8F, 0xAF, 0xE1, 0xDC, /* 0x70-0x73 */ + 0x8F, 0xB0, 0x8F, 0xB1, 0x8F, 0xB2, 0xE1, 0xDD, /* 0x74-0x77 */ + 0x8F, 0xB3, 0xD2, 0xDB, 0x8F, 0xB4, 0xB3, 0xB9, /* 0x78-0x7B */ + 0xB1, 0xCB, 0x8F, 0xB5, 0x8F, 0xB6, 0x8F, 0xB7, /* 0x7C-0x7F */ + + 0xCD, 0xF9, 0xD5, 0xF7, 0xE1, 0xDE, 0x8F, 0xB8, /* 0x80-0x83 */ + 0xBE, 0xB6, 0xB4, 0xFD, 0x8F, 0xB9, 0xE1, 0xDF, /* 0x84-0x87 */ + 0xBA, 0xDC, 0xE1, 0xE0, 0xBB, 0xB2, 0xC2, 0xC9, /* 0x88-0x8B */ + 0xE1, 0xE1, 0x8F, 0xBA, 0x8F, 0xBB, 0x8F, 0xBC, /* 0x8C-0x8F */ + 0xD0, 0xEC, 0x8F, 0xBD, 0xCD, 0xBD, 0x8F, 0xBE, /* 0x90-0x93 */ + 0x8F, 0xBF, 0xE1, 0xE2, 0x8F, 0xC0, 0xB5, 0xC3, /* 0x94-0x97 */ + 0xC5, 0xC7, 0xE1, 0xE3, 0x8F, 0xC1, 0x8F, 0xC2, /* 0x98-0x9B */ + 0xE1, 0xE4, 0x8F, 0xC3, 0x8F, 0xC4, 0x8F, 0xC5, /* 0x9C-0x9F */ + 0x8F, 0xC6, 0xD3, 0xF9, 0x8F, 0xC7, 0x8F, 0xC8, /* 0xA0-0xA3 */ + 0x8F, 0xC9, 0x8F, 0xCA, 0x8F, 0xCB, 0x8F, 0xCC, /* 0xA4-0xA7 */ + 0xE1, 0xE5, 0x8F, 0xCD, 0xD1, 0xAD, 0x8F, 0xCE, /* 0xA8-0xAB */ + 0x8F, 0xCF, 0xE1, 0xE6, 0xCE, 0xA2, 0x8F, 0xD0, /* 0xAC-0xAF */ + 0x8F, 0xD1, 0x8F, 0xD2, 0x8F, 0xD3, 0x8F, 0xD4, /* 0xB0-0xB3 */ + 0x8F, 0xD5, 0xE1, 0xE7, 0x8F, 0xD6, 0xB5, 0xC2, /* 0xB4-0xB7 */ + 0x8F, 0xD7, 0x8F, 0xD8, 0x8F, 0xD9, 0x8F, 0xDA, /* 0xB8-0xBB */ + 0xE1, 0xE8, 0xBB, 0xD5, 0x8F, 0xDB, 0x8F, 0xDC, /* 0xBC-0xBF */ + 0x8F, 0xDD, 0x8F, 0xDE, 0x8F, 0xDF, 0xD0, 0xC4, /* 0xC0-0xC3 */ + 0xE2, 0xE0, 0xB1, 0xD8, 0xD2, 0xE4, 0x8F, 0xE0, /* 0xC4-0xC7 */ + 0x8F, 0xE1, 0xE2, 0xE1, 0x8F, 0xE2, 0x8F, 0xE3, /* 0xC8-0xCB */ + 0xBC, 0xC9, 0xC8, 0xCC, 0x8F, 0xE4, 0xE2, 0xE3, /* 0xCC-0xCF */ + 0xEC, 0xFE, 0xEC, 0xFD, 0xDF, 0xAF, 0x8F, 0xE5, /* 0xD0-0xD3 */ + 0x8F, 0xE6, 0x8F, 0xE7, 0xE2, 0xE2, 0xD6, 0xBE, /* 0xD4-0xD7 */ + 0xCD, 0xFC, 0xC3, 0xA6, 0x8F, 0xE8, 0x8F, 0xE9, /* 0xD8-0xDB */ + 0x8F, 0xEA, 0xE3, 0xC3, 0x8F, 0xEB, 0x8F, 0xEC, /* 0xDC-0xDF */ + 0xD6, 0xD2, 0xE2, 0xE7, 0x8F, 0xED, 0x8F, 0xEE, /* 0xE0-0xE3 */ + 0xE2, 0xE8, 0x8F, 0xEF, 0x8F, 0xF0, 0xD3, 0xC7, /* 0xE4-0xE7 */ + 0x8F, 0xF1, 0x8F, 0xF2, 0xE2, 0xEC, 0xBF, 0xEC, /* 0xE8-0xEB */ + 0x8F, 0xF3, 0xE2, 0xED, 0xE2, 0xE5, 0x8F, 0xF4, /* 0xEC-0xEF */ + 0x8F, 0xF5, 0xB3, 0xC0, 0x8F, 0xF6, 0x8F, 0xF7, /* 0xF0-0xF3 */ + 0x8F, 0xF8, 0xC4, 0xEE, 0x8F, 0xF9, 0x8F, 0xFA, /* 0xF4-0xF7 */ + 0xE2, 0xEE, 0x8F, 0xFB, 0x8F, 0xFC, 0xD0, 0xC3, /* 0xF8-0xFB */ + 0x8F, 0xFD, 0xBA, 0xF6, 0xE2, 0xE9, 0xB7, 0xDE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0xBB, 0xB3, 0xCC, 0xAC, 0xCB, 0xCB, 0xE2, 0xE4, /* 0x00-0x03 */ + 0xE2, 0xE6, 0xE2, 0xEA, 0xE2, 0xEB, 0x8F, 0xFE, /* 0x04-0x07 */ + 0x90, 0x40, 0x90, 0x41, 0xE2, 0xF7, 0x90, 0x42, /* 0x08-0x0B */ + 0x90, 0x43, 0xE2, 0xF4, 0xD4, 0xF5, 0xE2, 0xF3, /* 0x0C-0x0F */ + 0x90, 0x44, 0x90, 0x45, 0xC5, 0xAD, 0x90, 0x46, /* 0x10-0x13 */ + 0xD5, 0xFA, 0xC5, 0xC2, 0xB2, 0xC0, 0x90, 0x47, /* 0x14-0x17 */ + 0x90, 0x48, 0xE2, 0xEF, 0x90, 0x49, 0xE2, 0xF2, /* 0x18-0x1B */ + 0xC1, 0xAF, 0xCB, 0xBC, 0x90, 0x4A, 0x90, 0x4B, /* 0x1C-0x1F */ + 0xB5, 0xA1, 0xE2, 0xF9, 0x90, 0x4C, 0x90, 0x4D, /* 0x20-0x23 */ + 0x90, 0x4E, 0xBC, 0xB1, 0xE2, 0xF1, 0xD0, 0xD4, /* 0x24-0x27 */ + 0xD4, 0xB9, 0xE2, 0xF5, 0xB9, 0xD6, 0xE2, 0xF6, /* 0x28-0x2B */ + 0x90, 0x4F, 0x90, 0x50, 0x90, 0x51, 0xC7, 0xD3, /* 0x2C-0x2F */ + 0x90, 0x52, 0x90, 0x53, 0x90, 0x54, 0x90, 0x55, /* 0x30-0x33 */ + 0x90, 0x56, 0xE2, 0xF0, 0x90, 0x57, 0x90, 0x58, /* 0x34-0x37 */ + 0x90, 0x59, 0x90, 0x5A, 0x90, 0x5B, 0xD7, 0xDC, /* 0x38-0x3B */ + 0xED, 0xA1, 0x90, 0x5C, 0x90, 0x5D, 0xE2, 0xF8, /* 0x3C-0x3F */ + 0x90, 0x5E, 0xED, 0xA5, 0xE2, 0xFE, 0xCA, 0xD1, /* 0x40-0x43 */ + 0x90, 0x5F, 0x90, 0x60, 0x90, 0x61, 0x90, 0x62, /* 0x44-0x47 */ + 0x90, 0x63, 0x90, 0x64, 0x90, 0x65, 0xC1, 0xB5, /* 0x48-0x4B */ + 0x90, 0x66, 0xBB, 0xD0, 0x90, 0x67, 0x90, 0x68, /* 0x4C-0x4F */ + 0xBF, 0xD6, 0x90, 0x69, 0xBA, 0xE3, 0x90, 0x6A, /* 0x50-0x53 */ + 0x90, 0x6B, 0xCB, 0xA1, 0x90, 0x6C, 0x90, 0x6D, /* 0x54-0x57 */ + 0x90, 0x6E, 0xED, 0xA6, 0xED, 0xA3, 0x90, 0x6F, /* 0x58-0x5B */ + 0x90, 0x70, 0xED, 0xA2, 0x90, 0x71, 0x90, 0x72, /* 0x5C-0x5F */ + 0x90, 0x73, 0x90, 0x74, 0xBB, 0xD6, 0xED, 0xA7, /* 0x60-0x63 */ + 0xD0, 0xF4, 0x90, 0x75, 0x90, 0x76, 0xED, 0xA4, /* 0x64-0x67 */ + 0xBA, 0xDE, 0xB6, 0xF7, 0xE3, 0xA1, 0xB6, 0xB2, /* 0x68-0x6B */ + 0xCC, 0xF1, 0xB9, 0xA7, 0x90, 0x77, 0xCF, 0xA2, /* 0x6C-0x6F */ + 0xC7, 0xA1, 0x90, 0x78, 0x90, 0x79, 0xBF, 0xD2, /* 0x70-0x73 */ + 0x90, 0x7A, 0x90, 0x7B, 0xB6, 0xF1, 0x90, 0x7C, /* 0x74-0x77 */ + 0xE2, 0xFA, 0xE2, 0xFB, 0xE2, 0xFD, 0xE2, 0xFC, /* 0x78-0x7B */ + 0xC4, 0xD5, 0xE3, 0xA2, 0x90, 0x7D, 0xD3, 0xC1, /* 0x7C-0x7F */ + + 0x90, 0x7E, 0x90, 0x80, 0x90, 0x81, 0xE3, 0xA7, /* 0x80-0x83 */ + 0xC7, 0xC4, 0x90, 0x82, 0x90, 0x83, 0x90, 0x84, /* 0x84-0x87 */ + 0x90, 0x85, 0xCF, 0xA4, 0x90, 0x86, 0x90, 0x87, /* 0x88-0x8B */ + 0xE3, 0xA9, 0xBA, 0xB7, 0x90, 0x88, 0x90, 0x89, /* 0x8C-0x8F */ + 0x90, 0x8A, 0x90, 0x8B, 0xE3, 0xA8, 0x90, 0x8C, /* 0x90-0x93 */ + 0xBB, 0xDA, 0x90, 0x8D, 0xE3, 0xA3, 0x90, 0x8E, /* 0x94-0x97 */ + 0x90, 0x8F, 0x90, 0x90, 0xE3, 0xA4, 0xE3, 0xAA, /* 0x98-0x9B */ + 0x90, 0x91, 0xE3, 0xA6, 0x90, 0x92, 0xCE, 0xF2, /* 0x9C-0x9F */ + 0xD3, 0xC6, 0x90, 0x93, 0x90, 0x94, 0xBB, 0xBC, /* 0xA0-0xA3 */ + 0x90, 0x95, 0x90, 0x96, 0xD4, 0xC3, 0x90, 0x97, /* 0xA4-0xA7 */ + 0xC4, 0xFA, 0x90, 0x98, 0x90, 0x99, 0xED, 0xA8, /* 0xA8-0xAB */ + 0xD0, 0xFC, 0xE3, 0xA5, 0x90, 0x9A, 0xC3, 0xF5, /* 0xAC-0xAF */ + 0x90, 0x9B, 0xE3, 0xAD, 0xB1, 0xAF, 0x90, 0x9C, /* 0xB0-0xB3 */ + 0xE3, 0xB2, 0x90, 0x9D, 0x90, 0x9E, 0x90, 0x9F, /* 0xB4-0xB7 */ + 0xBC, 0xC2, 0x90, 0xA0, 0x90, 0xA1, 0xE3, 0xAC, /* 0xB8-0xBB */ + 0xB5, 0xBF, 0x90, 0xA2, 0x90, 0xA3, 0x90, 0xA4, /* 0xBC-0xBF */ + 0x90, 0xA5, 0x90, 0xA6, 0x90, 0xA7, 0x90, 0xA8, /* 0xC0-0xC3 */ + 0x90, 0xA9, 0xC7, 0xE9, 0xE3, 0xB0, 0x90, 0xAA, /* 0xC4-0xC7 */ + 0x90, 0xAB, 0x90, 0xAC, 0xBE, 0xAA, 0xCD, 0xEF, /* 0xC8-0xCB */ + 0x90, 0xAD, 0x90, 0xAE, 0x90, 0xAF, 0x90, 0xB0, /* 0xCC-0xCF */ + 0x90, 0xB1, 0xBB, 0xF3, 0x90, 0xB2, 0x90, 0xB3, /* 0xD0-0xD3 */ + 0x90, 0xB4, 0xCC, 0xE8, 0x90, 0xB5, 0x90, 0xB6, /* 0xD4-0xD7 */ + 0xE3, 0xAF, 0x90, 0xB7, 0xE3, 0xB1, 0x90, 0xB8, /* 0xD8-0xDB */ + 0xCF, 0xA7, 0xE3, 0xAE, 0x90, 0xB9, 0xCE, 0xA9, /* 0xDC-0xDF */ + 0xBB, 0xDD, 0x90, 0xBA, 0x90, 0xBB, 0x90, 0xBC, /* 0xE0-0xE3 */ + 0x90, 0xBD, 0x90, 0xBE, 0xB5, 0xEB, 0xBE, 0xE5, /* 0xE4-0xE7 */ + 0xB2, 0xD2, 0xB3, 0xCD, 0x90, 0xBF, 0xB1, 0xB9, /* 0xE8-0xEB */ + 0xE3, 0xAB, 0xB2, 0xD1, 0xB5, 0xAC, 0xB9, 0xDF, /* 0xEC-0xEF */ + 0xB6, 0xE8, 0x90, 0xC0, 0x90, 0xC1, 0xCF, 0xEB, /* 0xF0-0xF3 */ + 0xE3, 0xB7, 0x90, 0xC2, 0xBB, 0xCC, 0x90, 0xC3, /* 0xF4-0xF7 */ + 0x90, 0xC4, 0xC8, 0xC7, 0xD0, 0xCA, 0x90, 0xC5, /* 0xF8-0xFB */ + 0x90, 0xC6, 0x90, 0xC7, 0x90, 0xC8, 0x90, 0xC9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_61[512] = { + 0xE3, 0xB8, 0xB3, 0xEE, 0x90, 0xCA, 0x90, 0xCB, /* 0x00-0x03 */ + 0x90, 0xCC, 0x90, 0xCD, 0xED, 0xA9, 0x90, 0xCE, /* 0x04-0x07 */ + 0xD3, 0xFA, 0xD3, 0xE4, 0x90, 0xCF, 0x90, 0xD0, /* 0x08-0x0B */ + 0x90, 0xD1, 0xED, 0xAA, 0xE3, 0xB9, 0xD2, 0xE2, /* 0x0C-0x0F */ + 0x90, 0xD2, 0x90, 0xD3, 0x90, 0xD4, 0x90, 0xD5, /* 0x10-0x13 */ + 0x90, 0xD6, 0xE3, 0xB5, 0x90, 0xD7, 0x90, 0xD8, /* 0x14-0x17 */ + 0x90, 0xD9, 0x90, 0xDA, 0xD3, 0xDE, 0x90, 0xDB, /* 0x18-0x1B */ + 0x90, 0xDC, 0x90, 0xDD, 0x90, 0xDE, 0xB8, 0xD0, /* 0x1C-0x1F */ + 0xE3, 0xB3, 0x90, 0xDF, 0x90, 0xE0, 0xE3, 0xB6, /* 0x20-0x23 */ + 0xB7, 0xDF, 0x90, 0xE1, 0xE3, 0xB4, 0xC0, 0xA2, /* 0x24-0x27 */ + 0x90, 0xE2, 0x90, 0xE3, 0x90, 0xE4, 0xE3, 0xBA, /* 0x28-0x2B */ + 0x90, 0xE5, 0x90, 0xE6, 0x90, 0xE7, 0x90, 0xE8, /* 0x2C-0x2F */ + 0x90, 0xE9, 0x90, 0xEA, 0x90, 0xEB, 0x90, 0xEC, /* 0x30-0x33 */ + 0x90, 0xED, 0x90, 0xEE, 0x90, 0xEF, 0x90, 0xF0, /* 0x34-0x37 */ + 0x90, 0xF1, 0x90, 0xF2, 0x90, 0xF3, 0x90, 0xF4, /* 0x38-0x3B */ + 0x90, 0xF5, 0x90, 0xF6, 0x90, 0xF7, 0xD4, 0xB8, /* 0x3C-0x3F */ + 0x90, 0xF8, 0x90, 0xF9, 0x90, 0xFA, 0x90, 0xFB, /* 0x40-0x43 */ + 0x90, 0xFC, 0x90, 0xFD, 0x90, 0xFE, 0x91, 0x40, /* 0x44-0x47 */ + 0xB4, 0xC8, 0x91, 0x41, 0xE3, 0xBB, 0x91, 0x42, /* 0x48-0x4B */ + 0xBB, 0xC5, 0x91, 0x43, 0xC9, 0xF7, 0x91, 0x44, /* 0x4C-0x4F */ + 0x91, 0x45, 0xC9, 0xE5, 0x91, 0x46, 0x91, 0x47, /* 0x50-0x53 */ + 0x91, 0x48, 0xC4, 0xBD, 0x91, 0x49, 0x91, 0x4A, /* 0x54-0x57 */ + 0x91, 0x4B, 0x91, 0x4C, 0x91, 0x4D, 0x91, 0x4E, /* 0x58-0x5B */ + 0x91, 0x4F, 0xED, 0xAB, 0x91, 0x50, 0x91, 0x51, /* 0x5C-0x5F */ + 0x91, 0x52, 0x91, 0x53, 0xC2, 0xFD, 0x91, 0x54, /* 0x60-0x63 */ + 0x91, 0x55, 0x91, 0x56, 0x91, 0x57, 0xBB, 0xDB, /* 0x64-0x67 */ + 0xBF, 0xAE, 0x91, 0x58, 0x91, 0x59, 0x91, 0x5A, /* 0x68-0x6B */ + 0x91, 0x5B, 0x91, 0x5C, 0x91, 0x5D, 0x91, 0x5E, /* 0x6C-0x6F */ + 0xCE, 0xBF, 0x91, 0x5F, 0x91, 0x60, 0x91, 0x61, /* 0x70-0x73 */ + 0x91, 0x62, 0xE3, 0xBC, 0x91, 0x63, 0xBF, 0xB6, /* 0x74-0x77 */ + 0x91, 0x64, 0x91, 0x65, 0x91, 0x66, 0x91, 0x67, /* 0x78-0x7B */ + 0x91, 0x68, 0x91, 0x69, 0x91, 0x6A, 0x91, 0x6B, /* 0x7C-0x7F */ + + 0x91, 0x6C, 0x91, 0x6D, 0x91, 0x6E, 0x91, 0x6F, /* 0x80-0x83 */ + 0x91, 0x70, 0x91, 0x71, 0x91, 0x72, 0x91, 0x73, /* 0x84-0x87 */ + 0x91, 0x74, 0x91, 0x75, 0x91, 0x76, 0xB1, 0xEF, /* 0x88-0x8B */ + 0x91, 0x77, 0x91, 0x78, 0xD4, 0xF7, 0x91, 0x79, /* 0x8C-0x8F */ + 0x91, 0x7A, 0x91, 0x7B, 0x91, 0x7C, 0x91, 0x7D, /* 0x90-0x93 */ + 0xE3, 0xBE, 0x91, 0x7E, 0x91, 0x80, 0x91, 0x81, /* 0x94-0x97 */ + 0x91, 0x82, 0x91, 0x83, 0x91, 0x84, 0x91, 0x85, /* 0x98-0x9B */ + 0x91, 0x86, 0xED, 0xAD, 0x91, 0x87, 0x91, 0x88, /* 0x9C-0x9F */ + 0x91, 0x89, 0x91, 0x8A, 0x91, 0x8B, 0x91, 0x8C, /* 0xA0-0xA3 */ + 0x91, 0x8D, 0x91, 0x8E, 0x91, 0x8F, 0xE3, 0xBF, /* 0xA4-0xA7 */ + 0xBA, 0xA9, 0xED, 0xAC, 0x91, 0x90, 0x91, 0x91, /* 0xA8-0xAB */ + 0xE3, 0xBD, 0x91, 0x92, 0x91, 0x93, 0x91, 0x94, /* 0xAC-0xAF */ + 0x91, 0x95, 0x91, 0x96, 0x91, 0x97, 0x91, 0x98, /* 0xB0-0xB3 */ + 0x91, 0x99, 0x91, 0x9A, 0x91, 0x9B, 0xE3, 0xC0, /* 0xB4-0xB7 */ + 0x91, 0x9C, 0x91, 0x9D, 0x91, 0x9E, 0x91, 0x9F, /* 0xB8-0xBB */ + 0x91, 0xA0, 0x91, 0xA1, 0xBA, 0xB6, 0x91, 0xA2, /* 0xBC-0xBF */ + 0x91, 0xA3, 0x91, 0xA4, 0xB6, 0xAE, 0x91, 0xA5, /* 0xC0-0xC3 */ + 0x91, 0xA6, 0x91, 0xA7, 0x91, 0xA8, 0x91, 0xA9, /* 0xC4-0xC7 */ + 0xD0, 0xB8, 0x91, 0xAA, 0xB0, 0xC3, 0xED, 0xAE, /* 0xC8-0xCB */ + 0x91, 0xAB, 0x91, 0xAC, 0x91, 0xAD, 0x91, 0xAE, /* 0xCC-0xCF */ + 0x91, 0xAF, 0xED, 0xAF, 0xC0, 0xC1, 0x91, 0xB0, /* 0xD0-0xD3 */ + 0xE3, 0xC1, 0x91, 0xB1, 0x91, 0xB2, 0x91, 0xB3, /* 0xD4-0xD7 */ + 0x91, 0xB4, 0x91, 0xB5, 0x91, 0xB6, 0x91, 0xB7, /* 0xD8-0xDB */ + 0x91, 0xB8, 0x91, 0xB9, 0x91, 0xBA, 0x91, 0xBB, /* 0xDC-0xDF */ + 0x91, 0xBC, 0x91, 0xBD, 0x91, 0xBE, 0x91, 0xBF, /* 0xE0-0xE3 */ + 0x91, 0xC0, 0x91, 0xC1, 0xC5, 0xB3, 0x91, 0xC2, /* 0xE4-0xE7 */ + 0x91, 0xC3, 0x91, 0xC4, 0x91, 0xC5, 0x91, 0xC6, /* 0xE8-0xEB */ + 0x91, 0xC7, 0x91, 0xC8, 0x91, 0xC9, 0x91, 0xCA, /* 0xEC-0xEF */ + 0x91, 0xCB, 0x91, 0xCC, 0x91, 0xCD, 0x91, 0xCE, /* 0xF0-0xF3 */ + 0x91, 0xCF, 0xE3, 0xC2, 0x91, 0xD0, 0x91, 0xD1, /* 0xF4-0xF7 */ + 0x91, 0xD2, 0x91, 0xD3, 0x91, 0xD4, 0x91, 0xD5, /* 0xF8-0xFB */ + 0x91, 0xD6, 0x91, 0xD7, 0x91, 0xD8, 0xDC, 0xB2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0x91, 0xD9, 0x91, 0xDA, 0x91, 0xDB, 0x91, 0xDC, /* 0x00-0x03 */ + 0x91, 0xDD, 0x91, 0xDE, 0xED, 0xB0, 0x91, 0xDF, /* 0x04-0x07 */ + 0xB8, 0xEA, 0x91, 0xE0, 0xCE, 0xEC, 0xEA, 0xA7, /* 0x08-0x0B */ + 0xD0, 0xE7, 0xCA, 0xF9, 0xC8, 0xD6, 0xCF, 0xB7, /* 0x0C-0x0F */ + 0xB3, 0xC9, 0xCE, 0xD2, 0xBD, 0xE4, 0x91, 0xE1, /* 0x10-0x13 */ + 0x91, 0xE2, 0xE3, 0xDE, 0xBB, 0xF2, 0xEA, 0xA8, /* 0x14-0x17 */ + 0xD5, 0xBD, 0x91, 0xE3, 0xC6, 0xDD, 0xEA, 0xA9, /* 0x18-0x1B */ + 0x91, 0xE4, 0x91, 0xE5, 0x91, 0xE6, 0xEA, 0xAA, /* 0x1C-0x1F */ + 0x91, 0xE7, 0xEA, 0xAC, 0xEA, 0xAB, 0x91, 0xE8, /* 0x20-0x23 */ + 0xEA, 0xAE, 0xEA, 0xAD, 0x91, 0xE9, 0x91, 0xEA, /* 0x24-0x27 */ + 0x91, 0xEB, 0x91, 0xEC, 0xBD, 0xD8, 0x91, 0xED, /* 0x28-0x2B */ + 0xEA, 0xAF, 0x91, 0xEE, 0xC2, 0xBE, 0x91, 0xEF, /* 0x2C-0x2F */ + 0x91, 0xF0, 0x91, 0xF1, 0x91, 0xF2, 0xB4, 0xC1, /* 0x30-0x33 */ + 0xB4, 0xF7, 0x91, 0xF3, 0x91, 0xF4, 0xBB, 0xA7, /* 0x34-0x37 */ + 0x91, 0xF5, 0x91, 0xF6, 0x91, 0xF7, 0x91, 0xF8, /* 0x38-0x3B */ + 0x91, 0xF9, 0xEC, 0xE6, 0xEC, 0xE5, 0xB7, 0xBF, /* 0x3C-0x3F */ + 0xCB, 0xF9, 0xB1, 0xE2, 0x91, 0xFA, 0xEC, 0xE7, /* 0x40-0x43 */ + 0x91, 0xFB, 0x91, 0xFC, 0x91, 0xFD, 0xC9, 0xC8, /* 0x44-0x47 */ + 0xEC, 0xE8, 0xEC, 0xE9, 0x91, 0xFE, 0xCA, 0xD6, /* 0x48-0x4B */ + 0xDE, 0xD0, 0xB2, 0xC5, 0xD4, 0xFA, 0x92, 0x40, /* 0x4C-0x4F */ + 0x92, 0x41, 0xC6, 0xCB, 0xB0, 0xC7, 0xB4, 0xF2, /* 0x50-0x53 */ + 0xC8, 0xD3, 0x92, 0x42, 0x92, 0x43, 0x92, 0x44, /* 0x54-0x57 */ + 0xCD, 0xD0, 0x92, 0x45, 0x92, 0x46, 0xBF, 0xB8, /* 0x58-0x5B */ + 0x92, 0x47, 0x92, 0x48, 0x92, 0x49, 0x92, 0x4A, /* 0x5C-0x5F */ + 0x92, 0x4B, 0x92, 0x4C, 0x92, 0x4D, 0xBF, 0xDB, /* 0x60-0x63 */ + 0x92, 0x4E, 0x92, 0x4F, 0xC7, 0xA4, 0xD6, 0xB4, /* 0x64-0x67 */ + 0x92, 0x50, 0xC0, 0xA9, 0xDE, 0xD1, 0xC9, 0xA8, /* 0x68-0x6B */ + 0xD1, 0xEF, 0xC5, 0xA4, 0xB0, 0xE7, 0xB3, 0xB6, /* 0x6C-0x6F */ + 0xC8, 0xC5, 0x92, 0x51, 0x92, 0x52, 0xB0, 0xE2, /* 0x70-0x73 */ + 0x92, 0x53, 0x92, 0x54, 0xB7, 0xF6, 0x92, 0x55, /* 0x74-0x77 */ + 0x92, 0x56, 0xC5, 0xFA, 0x92, 0x57, 0x92, 0x58, /* 0x78-0x7B */ + 0xB6, 0xF3, 0x92, 0x59, 0xD5, 0xD2, 0xB3, 0xD0, /* 0x7C-0x7F */ + + 0xBC, 0xBC, 0x92, 0x5A, 0x92, 0x5B, 0x92, 0x5C, /* 0x80-0x83 */ + 0xB3, 0xAD, 0x92, 0x5D, 0x92, 0x5E, 0x92, 0x5F, /* 0x84-0x87 */ + 0x92, 0x60, 0xBE, 0xF1, 0xB0, 0xD1, 0x92, 0x61, /* 0x88-0x8B */ + 0x92, 0x62, 0x92, 0x63, 0x92, 0x64, 0x92, 0x65, /* 0x8C-0x8F */ + 0x92, 0x66, 0xD2, 0xD6, 0xCA, 0xE3, 0xD7, 0xA5, /* 0x90-0x93 */ + 0x92, 0x67, 0xCD, 0xB6, 0xB6, 0xB6, 0xBF, 0xB9, /* 0x94-0x97 */ + 0xD5, 0xDB, 0x92, 0x68, 0xB8, 0xA7, 0xC5, 0xD7, /* 0x98-0x9B */ + 0x92, 0x69, 0x92, 0x6A, 0x92, 0x6B, 0xDE, 0xD2, /* 0x9C-0x9F */ + 0xBF, 0xD9, 0xC2, 0xD5, 0xC7, 0xC0, 0x92, 0x6C, /* 0xA0-0xA3 */ + 0xBB, 0xA4, 0xB1, 0xA8, 0x92, 0x6D, 0x92, 0x6E, /* 0xA4-0xA7 */ + 0xC5, 0xEA, 0x92, 0x6F, 0x92, 0x70, 0xC5, 0xFB, /* 0xA8-0xAB */ + 0xCC, 0xA7, 0x92, 0x71, 0x92, 0x72, 0x92, 0x73, /* 0xAC-0xAF */ + 0x92, 0x74, 0xB1, 0xA7, 0x92, 0x75, 0x92, 0x76, /* 0xB0-0xB3 */ + 0x92, 0x77, 0xB5, 0xD6, 0x92, 0x78, 0x92, 0x79, /* 0xB4-0xB7 */ + 0x92, 0x7A, 0xC4, 0xA8, 0x92, 0x7B, 0xDE, 0xD3, /* 0xB8-0xBB */ + 0xD1, 0xBA, 0xB3, 0xE9, 0x92, 0x7C, 0xC3, 0xF2, /* 0xBC-0xBF */ + 0x92, 0x7D, 0x92, 0x7E, 0xB7, 0xF7, 0x92, 0x80, /* 0xC0-0xC3 */ + 0xD6, 0xF4, 0xB5, 0xA3, 0xB2, 0xF0, 0xC4, 0xB4, /* 0xC4-0xC7 */ + 0xC4, 0xE9, 0xC0, 0xAD, 0xDE, 0xD4, 0x92, 0x81, /* 0xC8-0xCB */ + 0xB0, 0xE8, 0xC5, 0xC4, 0xC1, 0xE0, 0x92, 0x82, /* 0xCC-0xCF */ + 0xB9, 0xD5, 0x92, 0x83, 0xBE, 0xDC, 0xCD, 0xD8, /* 0xD0-0xD3 */ + 0xB0, 0xCE, 0x92, 0x84, 0xCD, 0xCF, 0xDE, 0xD6, /* 0xD4-0xD7 */ + 0xBE, 0xD0, 0xD7, 0xBE, 0xDE, 0xD5, 0xD5, 0xD0, /* 0xD8-0xDB */ + 0xB0, 0xDD, 0x92, 0x85, 0x92, 0x86, 0xC4, 0xE2, /* 0xDC-0xDF */ + 0x92, 0x87, 0x92, 0x88, 0xC2, 0xA3, 0xBC, 0xF0, /* 0xE0-0xE3 */ + 0x92, 0x89, 0xD3, 0xB5, 0xC0, 0xB9, 0xC5, 0xA1, /* 0xE4-0xE7 */ + 0xB2, 0xA6, 0xD4, 0xF1, 0x92, 0x8A, 0x92, 0x8B, /* 0xE8-0xEB */ + 0xC0, 0xA8, 0xCA, 0xC3, 0xDE, 0xD7, 0xD5, 0xFC, /* 0xEC-0xEF */ + 0x92, 0x8C, 0xB9, 0xB0, 0x92, 0x8D, 0xC8, 0xAD, /* 0xF0-0xF3 */ + 0xCB, 0xA9, 0x92, 0x8E, 0xDE, 0xD9, 0xBF, 0xBD, /* 0xF4-0xF7 */ + 0x92, 0x8F, 0x92, 0x90, 0x92, 0x91, 0x92, 0x92, /* 0xF8-0xFB */ + 0xC6, 0xB4, 0xD7, 0xA7, 0xCA, 0xB0, 0xC4, 0xC3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0x92, 0x93, 0xB3, 0xD6, 0xB9, 0xD2, 0x92, 0x94, /* 0x00-0x03 */ + 0x92, 0x95, 0x92, 0x96, 0x92, 0x97, 0xD6, 0xB8, /* 0x04-0x07 */ + 0xEA, 0xFC, 0xB0, 0xB4, 0x92, 0x98, 0x92, 0x99, /* 0x08-0x0B */ + 0x92, 0x9A, 0x92, 0x9B, 0xBF, 0xE6, 0x92, 0x9C, /* 0x0C-0x0F */ + 0x92, 0x9D, 0xCC, 0xF4, 0x92, 0x9E, 0x92, 0x9F, /* 0x10-0x13 */ + 0x92, 0xA0, 0x92, 0xA1, 0xCD, 0xDA, 0x92, 0xA2, /* 0x14-0x17 */ + 0x92, 0xA3, 0x92, 0xA4, 0xD6, 0xBF, 0xC2, 0xCE, /* 0x18-0x1B */ + 0x92, 0xA5, 0xCE, 0xCE, 0xCC, 0xA2, 0xD0, 0xAE, /* 0x1C-0x1F */ + 0xC4, 0xD3, 0xB5, 0xB2, 0xDE, 0xD8, 0xD5, 0xF5, /* 0x20-0x23 */ + 0xBC, 0xB7, 0xBB, 0xD3, 0x92, 0xA6, 0x92, 0xA7, /* 0x24-0x27 */ + 0xB0, 0xA4, 0x92, 0xA8, 0xC5, 0xB2, 0xB4, 0xEC, /* 0x28-0x2B */ + 0x92, 0xA9, 0x92, 0xAA, 0x92, 0xAB, 0xD5, 0xF1, /* 0x2C-0x2F */ + 0x92, 0xAC, 0x92, 0xAD, 0xEA, 0xFD, 0x92, 0xAE, /* 0x30-0x33 */ + 0x92, 0xAF, 0x92, 0xB0, 0x92, 0xB1, 0x92, 0xB2, /* 0x34-0x37 */ + 0x92, 0xB3, 0xDE, 0xDA, 0xCD, 0xA6, 0x92, 0xB4, /* 0x38-0x3B */ + 0x92, 0xB5, 0xCD, 0xEC, 0x92, 0xB6, 0x92, 0xB7, /* 0x3C-0x3F */ + 0x92, 0xB8, 0x92, 0xB9, 0xCE, 0xE6, 0xDE, 0xDC, /* 0x40-0x43 */ + 0x92, 0xBA, 0xCD, 0xB1, 0xC0, 0xA6, 0x92, 0xBB, /* 0x44-0x47 */ + 0x92, 0xBC, 0xD7, 0xBD, 0x92, 0xBD, 0xDE, 0xDB, /* 0x48-0x4B */ + 0xB0, 0xC6, 0xBA, 0xB4, 0xC9, 0xD3, 0xC4, 0xF3, /* 0x4C-0x4F */ + 0xBE, 0xE8, 0x92, 0xBE, 0x92, 0xBF, 0x92, 0xC0, /* 0x50-0x53 */ + 0x92, 0xC1, 0xB2, 0xB6, 0x92, 0xC2, 0x92, 0xC3, /* 0x54-0x57 */ + 0x92, 0xC4, 0x92, 0xC5, 0x92, 0xC6, 0x92, 0xC7, /* 0x58-0x5B */ + 0x92, 0xC8, 0x92, 0xC9, 0xC0, 0xCC, 0xCB, 0xF0, /* 0x5C-0x5F */ + 0x92, 0xCA, 0xBC, 0xF1, 0xBB, 0xBB, 0xB5, 0xB7, /* 0x60-0x63 */ + 0x92, 0xCB, 0x92, 0xCC, 0x92, 0xCD, 0xC5, 0xF5, /* 0x64-0x67 */ + 0x92, 0xCE, 0xDE, 0xE6, 0x92, 0xCF, 0x92, 0xD0, /* 0x68-0x6B */ + 0x92, 0xD1, 0xDE, 0xE3, 0xBE, 0xDD, 0x92, 0xD2, /* 0x6C-0x6F */ + 0x92, 0xD3, 0xDE, 0xDF, 0x92, 0xD4, 0x92, 0xD5, /* 0x70-0x73 */ + 0x92, 0xD6, 0x92, 0xD7, 0xB4, 0xB7, 0xBD, 0xDD, /* 0x74-0x77 */ + 0x92, 0xD8, 0x92, 0xD9, 0xDE, 0xE0, 0xC4, 0xED, /* 0x78-0x7B */ + 0x92, 0xDA, 0x92, 0xDB, 0x92, 0xDC, 0x92, 0xDD, /* 0x7C-0x7F */ + + 0xCF, 0xC6, 0x92, 0xDE, 0xB5, 0xE0, 0x92, 0xDF, /* 0x80-0x83 */ + 0x92, 0xE0, 0x92, 0xE1, 0x92, 0xE2, 0xB6, 0xDE, /* 0x84-0x87 */ + 0xCA, 0xDA, 0xB5, 0xF4, 0xDE, 0xE5, 0x92, 0xE3, /* 0x88-0x8B */ + 0xD5, 0xC6, 0x92, 0xE4, 0xDE, 0xE1, 0xCC, 0xCD, /* 0x8C-0x8F */ + 0xC6, 0xFE, 0x92, 0xE5, 0xC5, 0xC5, 0x92, 0xE6, /* 0x90-0x93 */ + 0x92, 0xE7, 0x92, 0xE8, 0xD2, 0xB4, 0x92, 0xE9, /* 0x94-0x97 */ + 0xBE, 0xF2, 0x92, 0xEA, 0x92, 0xEB, 0x92, 0xEC, /* 0x98-0x9B */ + 0x92, 0xED, 0x92, 0xEE, 0x92, 0xEF, 0x92, 0xF0, /* 0x9C-0x9F */ + 0xC2, 0xD3, 0x92, 0xF1, 0xCC, 0xBD, 0xB3, 0xB8, /* 0xA0-0xA3 */ + 0x92, 0xF2, 0xBD, 0xD3, 0x92, 0xF3, 0xBF, 0xD8, /* 0xA4-0xA7 */ + 0xCD, 0xC6, 0xD1, 0xDA, 0xB4, 0xEB, 0x92, 0xF4, /* 0xA8-0xAB */ + 0xDE, 0xE4, 0xDE, 0xDD, 0xDE, 0xE7, 0x92, 0xF5, /* 0xAC-0xAF */ + 0xEA, 0xFE, 0x92, 0xF6, 0x92, 0xF7, 0xC2, 0xB0, /* 0xB0-0xB3 */ + 0xDE, 0xE2, 0x92, 0xF8, 0x92, 0xF9, 0xD6, 0xC0, /* 0xB4-0xB7 */ + 0xB5, 0xA7, 0x92, 0xFA, 0xB2, 0xF4, 0x92, 0xFB, /* 0xB8-0xBB */ + 0xDE, 0xE8, 0x92, 0xFC, 0xDE, 0xF2, 0x92, 0xFD, /* 0xBC-0xBF */ + 0x92, 0xFE, 0x93, 0x40, 0x93, 0x41, 0x93, 0x42, /* 0xC0-0xC3 */ + 0xDE, 0xED, 0x93, 0x43, 0xDE, 0xF1, 0x93, 0x44, /* 0xC4-0xC7 */ + 0x93, 0x45, 0xC8, 0xE0, 0x93, 0x46, 0x93, 0x47, /* 0xC8-0xCB */ + 0x93, 0x48, 0xD7, 0xE1, 0xDE, 0xEF, 0xC3, 0xE8, /* 0xCC-0xCF */ + 0xCC, 0xE1, 0x93, 0x49, 0xB2, 0xE5, 0x93, 0x4A, /* 0xD0-0xD3 */ + 0x93, 0x4B, 0x93, 0x4C, 0xD2, 0xBE, 0x93, 0x4D, /* 0xD4-0xD7 */ + 0x93, 0x4E, 0x93, 0x4F, 0x93, 0x50, 0x93, 0x51, /* 0xD8-0xDB */ + 0x93, 0x52, 0x93, 0x53, 0xDE, 0xEE, 0x93, 0x54, /* 0xDC-0xDF */ + 0xDE, 0xEB, 0xCE, 0xD5, 0x93, 0x55, 0xB4, 0xA7, /* 0xE0-0xE3 */ + 0x93, 0x56, 0x93, 0x57, 0x93, 0x58, 0x93, 0x59, /* 0xE4-0xE7 */ + 0x93, 0x5A, 0xBF, 0xAB, 0xBE, 0xBE, 0x93, 0x5B, /* 0xE8-0xEB */ + 0x93, 0x5C, 0xBD, 0xD2, 0x93, 0x5D, 0x93, 0x5E, /* 0xEC-0xEF */ + 0x93, 0x5F, 0x93, 0x60, 0xDE, 0xE9, 0x93, 0x61, /* 0xF0-0xF3 */ + 0xD4, 0xAE, 0x93, 0x62, 0xDE, 0xDE, 0x93, 0x63, /* 0xF4-0xF7 */ + 0xDE, 0xEA, 0x93, 0x64, 0x93, 0x65, 0x93, 0x66, /* 0xF8-0xFB */ + 0x93, 0x67, 0xC0, 0xBF, 0x93, 0x68, 0xDE, 0xEC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_64[512] = { + 0xB2, 0xF3, 0xB8, 0xE9, 0xC2, 0xA7, 0x93, 0x69, /* 0x00-0x03 */ + 0x93, 0x6A, 0xBD, 0xC1, 0x93, 0x6B, 0x93, 0x6C, /* 0x04-0x07 */ + 0x93, 0x6D, 0x93, 0x6E, 0x93, 0x6F, 0xDE, 0xF5, /* 0x08-0x0B */ + 0xDE, 0xF8, 0x93, 0x70, 0x93, 0x71, 0xB2, 0xAB, /* 0x0C-0x0F */ + 0xB4, 0xA4, 0x93, 0x72, 0x93, 0x73, 0xB4, 0xEA, /* 0x10-0x13 */ + 0xC9, 0xA6, 0x93, 0x74, 0x93, 0x75, 0x93, 0x76, /* 0x14-0x17 */ + 0x93, 0x77, 0x93, 0x78, 0x93, 0x79, 0xDE, 0xF6, /* 0x18-0x1B */ + 0xCB, 0xD1, 0x93, 0x7A, 0xB8, 0xE3, 0x93, 0x7B, /* 0x1C-0x1F */ + 0xDE, 0xF7, 0xDE, 0xFA, 0x93, 0x7C, 0x93, 0x7D, /* 0x20-0x23 */ + 0x93, 0x7E, 0x93, 0x80, 0xDE, 0xF9, 0x93, 0x81, /* 0x24-0x27 */ + 0x93, 0x82, 0x93, 0x83, 0xCC, 0xC2, 0x93, 0x84, /* 0x28-0x2B */ + 0xB0, 0xE1, 0xB4, 0xEE, 0x93, 0x85, 0x93, 0x86, /* 0x2C-0x2F */ + 0x93, 0x87, 0x93, 0x88, 0x93, 0x89, 0x93, 0x8A, /* 0x30-0x33 */ + 0xE5, 0xBA, 0x93, 0x8B, 0x93, 0x8C, 0x93, 0x8D, /* 0x34-0x37 */ + 0x93, 0x8E, 0x93, 0x8F, 0xD0, 0xAF, 0x93, 0x90, /* 0x38-0x3B */ + 0x93, 0x91, 0xB2, 0xEB, 0x93, 0x92, 0xEB, 0xA1, /* 0x3C-0x3F */ + 0x93, 0x93, 0xDE, 0xF4, 0x93, 0x94, 0x93, 0x95, /* 0x40-0x43 */ + 0xC9, 0xE3, 0xDE, 0xF3, 0xB0, 0xDA, 0xD2, 0xA1, /* 0x44-0x47 */ + 0xB1, 0xF7, 0x93, 0x96, 0xCC, 0xAF, 0x93, 0x97, /* 0x48-0x4B */ + 0x93, 0x98, 0x93, 0x99, 0x93, 0x9A, 0x93, 0x9B, /* 0x4C-0x4F */ + 0x93, 0x9C, 0x93, 0x9D, 0xDE, 0xF0, 0x93, 0x9E, /* 0x50-0x53 */ + 0xCB, 0xA4, 0x93, 0x9F, 0x93, 0xA0, 0x93, 0xA1, /* 0x54-0x57 */ + 0xD5, 0xAA, 0x93, 0xA2, 0x93, 0xA3, 0x93, 0xA4, /* 0x58-0x5B */ + 0x93, 0xA5, 0x93, 0xA6, 0xDE, 0xFB, 0x93, 0xA7, /* 0x5C-0x5F */ + 0x93, 0xA8, 0x93, 0xA9, 0x93, 0xAA, 0x93, 0xAB, /* 0x60-0x63 */ + 0x93, 0xAC, 0x93, 0xAD, 0x93, 0xAE, 0xB4, 0xDD, /* 0x64-0x67 */ + 0x93, 0xAF, 0xC4, 0xA6, 0x93, 0xB0, 0x93, 0xB1, /* 0x68-0x6B */ + 0x93, 0xB2, 0xDE, 0xFD, 0x93, 0xB3, 0x93, 0xB4, /* 0x6C-0x6F */ + 0x93, 0xB5, 0x93, 0xB6, 0x93, 0xB7, 0x93, 0xB8, /* 0x70-0x73 */ + 0x93, 0xB9, 0x93, 0xBA, 0x93, 0xBB, 0x93, 0xBC, /* 0x74-0x77 */ + 0xC3, 0xFE, 0xC4, 0xA1, 0xDF, 0xA1, 0x93, 0xBD, /* 0x78-0x7B */ + 0x93, 0xBE, 0x93, 0xBF, 0x93, 0xC0, 0x93, 0xC1, /* 0x7C-0x7F */ + + 0x93, 0xC2, 0x93, 0xC3, 0xC1, 0xCC, 0x93, 0xC4, /* 0x80-0x83 */ + 0xDE, 0xFC, 0xBE, 0xEF, 0x93, 0xC5, 0xC6, 0xB2, /* 0x84-0x87 */ + 0x93, 0xC6, 0x93, 0xC7, 0x93, 0xC8, 0x93, 0xC9, /* 0x88-0x8B */ + 0x93, 0xCA, 0x93, 0xCB, 0x93, 0xCC, 0x93, 0xCD, /* 0x8C-0x8F */ + 0x93, 0xCE, 0xB3, 0xC5, 0xC8, 0xF6, 0x93, 0xCF, /* 0x90-0x93 */ + 0x93, 0xD0, 0xCB, 0xBA, 0xDE, 0xFE, 0x93, 0xD1, /* 0x94-0x97 */ + 0x93, 0xD2, 0xDF, 0xA4, 0x93, 0xD3, 0x93, 0xD4, /* 0x98-0x9B */ + 0x93, 0xD5, 0x93, 0xD6, 0xD7, 0xB2, 0x93, 0xD7, /* 0x9C-0x9F */ + 0x93, 0xD8, 0x93, 0xD9, 0x93, 0xDA, 0x93, 0xDB, /* 0xA0-0xA3 */ + 0xB3, 0xB7, 0x93, 0xDC, 0x93, 0xDD, 0x93, 0xDE, /* 0xA4-0xA7 */ + 0x93, 0xDF, 0xC1, 0xC3, 0x93, 0xE0, 0x93, 0xE1, /* 0xA8-0xAB */ + 0xC7, 0xCB, 0xB2, 0xA5, 0xB4, 0xE9, 0x93, 0xE2, /* 0xAC-0xAF */ + 0xD7, 0xAB, 0x93, 0xE3, 0x93, 0xE4, 0x93, 0xE5, /* 0xB0-0xB3 */ + 0x93, 0xE6, 0xC4, 0xEC, 0x93, 0xE7, 0xDF, 0xA2, /* 0xB4-0xB7 */ + 0xDF, 0xA3, 0x93, 0xE8, 0xDF, 0xA5, 0x93, 0xE9, /* 0xB8-0xBB */ + 0xBA, 0xB3, 0x93, 0xEA, 0x93, 0xEB, 0x93, 0xEC, /* 0xBC-0xBF */ + 0xDF, 0xA6, 0x93, 0xED, 0xC0, 0xDE, 0x93, 0xEE, /* 0xC0-0xC3 */ + 0x93, 0xEF, 0xC9, 0xC3, 0x93, 0xF0, 0x93, 0xF1, /* 0xC4-0xC7 */ + 0x93, 0xF2, 0x93, 0xF3, 0x93, 0xF4, 0x93, 0xF5, /* 0xC8-0xCB */ + 0x93, 0xF6, 0xB2, 0xD9, 0xC7, 0xE6, 0x93, 0xF7, /* 0xCC-0xCF */ + 0xDF, 0xA7, 0x93, 0xF8, 0xC7, 0xDC, 0x93, 0xF9, /* 0xD0-0xD3 */ + 0x93, 0xFA, 0x93, 0xFB, 0x93, 0xFC, 0xDF, 0xA8, /* 0xD4-0xD7 */ + 0xEB, 0xA2, 0x93, 0xFD, 0x93, 0xFE, 0x94, 0x40, /* 0xD8-0xDB */ + 0x94, 0x41, 0x94, 0x42, 0xCB, 0xD3, 0x94, 0x43, /* 0xDC-0xDF */ + 0x94, 0x44, 0x94, 0x45, 0xDF, 0xAA, 0x94, 0x46, /* 0xE0-0xE3 */ + 0xDF, 0xA9, 0x94, 0x47, 0xB2, 0xC1, 0x94, 0x48, /* 0xE4-0xE7 */ + 0x94, 0x49, 0x94, 0x4A, 0x94, 0x4B, 0x94, 0x4C, /* 0xE8-0xEB */ + 0x94, 0x4D, 0x94, 0x4E, 0x94, 0x4F, 0x94, 0x50, /* 0xEC-0xEF */ + 0x94, 0x51, 0x94, 0x52, 0x94, 0x53, 0x94, 0x54, /* 0xF0-0xF3 */ + 0x94, 0x55, 0x94, 0x56, 0x94, 0x57, 0x94, 0x58, /* 0xF4-0xF7 */ + 0x94, 0x59, 0x94, 0x5A, 0x94, 0x5B, 0x94, 0x5C, /* 0xF8-0xFB */ + 0x94, 0x5D, 0x94, 0x5E, 0x94, 0x5F, 0x94, 0x60, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0xC5, 0xCA, 0x94, 0x61, 0x94, 0x62, 0x94, 0x63, /* 0x00-0x03 */ + 0x94, 0x64, 0x94, 0x65, 0x94, 0x66, 0x94, 0x67, /* 0x04-0x07 */ + 0x94, 0x68, 0xDF, 0xAB, 0x94, 0x69, 0x94, 0x6A, /* 0x08-0x0B */ + 0x94, 0x6B, 0x94, 0x6C, 0x94, 0x6D, 0x94, 0x6E, /* 0x0C-0x0F */ + 0x94, 0x6F, 0x94, 0x70, 0xD4, 0xDC, 0x94, 0x71, /* 0x10-0x13 */ + 0x94, 0x72, 0x94, 0x73, 0x94, 0x74, 0x94, 0x75, /* 0x14-0x17 */ + 0xC8, 0xC1, 0x94, 0x76, 0x94, 0x77, 0x94, 0x78, /* 0x18-0x1B */ + 0x94, 0x79, 0x94, 0x7A, 0x94, 0x7B, 0x94, 0x7C, /* 0x1C-0x1F */ + 0x94, 0x7D, 0x94, 0x7E, 0x94, 0x80, 0x94, 0x81, /* 0x20-0x23 */ + 0x94, 0x82, 0xDF, 0xAC, 0x94, 0x83, 0x94, 0x84, /* 0x24-0x27 */ + 0x94, 0x85, 0x94, 0x86, 0x94, 0x87, 0xBE, 0xF0, /* 0x28-0x2B */ + 0x94, 0x88, 0x94, 0x89, 0xDF, 0xAD, 0xD6, 0xA7, /* 0x2C-0x2F */ + 0x94, 0x8A, 0x94, 0x8B, 0x94, 0x8C, 0x94, 0x8D, /* 0x30-0x33 */ + 0xEA, 0xB7, 0xEB, 0xB6, 0xCA, 0xD5, 0x94, 0x8E, /* 0x34-0x37 */ + 0xD8, 0xFC, 0xB8, 0xC4, 0x94, 0x8F, 0xB9, 0xA5, /* 0x38-0x3B */ + 0x94, 0x90, 0x94, 0x91, 0xB7, 0xC5, 0xD5, 0xFE, /* 0x3C-0x3F */ + 0x94, 0x92, 0x94, 0x93, 0x94, 0x94, 0x94, 0x95, /* 0x40-0x43 */ + 0x94, 0x96, 0xB9, 0xCA, 0x94, 0x97, 0x94, 0x98, /* 0x44-0x47 */ + 0xD0, 0xA7, 0xF4, 0xCD, 0x94, 0x99, 0x94, 0x9A, /* 0x48-0x4B */ + 0xB5, 0xD0, 0x94, 0x9B, 0x94, 0x9C, 0xC3, 0xF4, /* 0x4C-0x4F */ + 0x94, 0x9D, 0xBE, 0xC8, 0x94, 0x9E, 0x94, 0x9F, /* 0x50-0x53 */ + 0x94, 0xA0, 0xEB, 0xB7, 0xB0, 0xBD, 0x94, 0xA1, /* 0x54-0x57 */ + 0x94, 0xA2, 0xBD, 0xCC, 0x94, 0xA3, 0xC1, 0xB2, /* 0x58-0x5B */ + 0x94, 0xA4, 0xB1, 0xD6, 0xB3, 0xA8, 0x94, 0xA5, /* 0x5C-0x5F */ + 0x94, 0xA6, 0x94, 0xA7, 0xB8, 0xD2, 0xC9, 0xA2, /* 0x60-0x63 */ + 0x94, 0xA8, 0x94, 0xA9, 0xB6, 0xD8, 0x94, 0xAA, /* 0x64-0x67 */ + 0x94, 0xAB, 0x94, 0xAC, 0x94, 0xAD, 0xEB, 0xB8, /* 0x68-0x6B */ + 0xBE, 0xB4, 0x94, 0xAE, 0x94, 0xAF, 0x94, 0xB0, /* 0x6C-0x6F */ + 0xCA, 0xFD, 0x94, 0xB1, 0xC7, 0xC3, 0x94, 0xB2, /* 0x70-0x73 */ + 0xD5, 0xFB, 0x94, 0xB3, 0x94, 0xB4, 0xB7, 0xF3, /* 0x74-0x77 */ + 0x94, 0xB5, 0x94, 0xB6, 0x94, 0xB7, 0x94, 0xB8, /* 0x78-0x7B */ + 0x94, 0xB9, 0x94, 0xBA, 0x94, 0xBB, 0x94, 0xBC, /* 0x7C-0x7F */ + + 0x94, 0xBD, 0x94, 0xBE, 0x94, 0xBF, 0x94, 0xC0, /* 0x80-0x83 */ + 0x94, 0xC1, 0x94, 0xC2, 0x94, 0xC3, 0xCE, 0xC4, /* 0x84-0x87 */ + 0x94, 0xC4, 0x94, 0xC5, 0x94, 0xC6, 0xD5, 0xAB, /* 0x88-0x8B */ + 0xB1, 0xF3, 0x94, 0xC7, 0x94, 0xC8, 0x94, 0xC9, /* 0x8C-0x8F */ + 0xEC, 0xB3, 0xB0, 0xDF, 0x94, 0xCA, 0xEC, 0xB5, /* 0x90-0x93 */ + 0x94, 0xCB, 0x94, 0xCC, 0x94, 0xCD, 0xB6, 0xB7, /* 0x94-0x97 */ + 0x94, 0xCE, 0xC1, 0xCF, 0x94, 0xCF, 0xF5, 0xFA, /* 0x98-0x9B */ + 0xD0, 0xB1, 0x94, 0xD0, 0x94, 0xD1, 0xD5, 0xE5, /* 0x9C-0x9F */ + 0x94, 0xD2, 0xCE, 0xD3, 0x94, 0xD3, 0x94, 0xD4, /* 0xA0-0xA3 */ + 0xBD, 0xEF, 0xB3, 0xE2, 0x94, 0xD5, 0xB8, 0xAB, /* 0xA4-0xA7 */ + 0x94, 0xD6, 0xD5, 0xB6, 0x94, 0xD7, 0xED, 0xBD, /* 0xA8-0xAB */ + 0x94, 0xD8, 0xB6, 0xCF, 0x94, 0xD9, 0xCB, 0xB9, /* 0xAC-0xAF */ + 0xD0, 0xC2, 0x94, 0xDA, 0x94, 0xDB, 0x94, 0xDC, /* 0xB0-0xB3 */ + 0x94, 0xDD, 0x94, 0xDE, 0x94, 0xDF, 0x94, 0xE0, /* 0xB4-0xB7 */ + 0x94, 0xE1, 0xB7, 0xBD, 0x94, 0xE2, 0x94, 0xE3, /* 0xB8-0xBB */ + 0xEC, 0xB6, 0xCA, 0xA9, 0x94, 0xE4, 0x94, 0xE5, /* 0xBC-0xBF */ + 0x94, 0xE6, 0xC5, 0xD4, 0x94, 0xE7, 0xEC, 0xB9, /* 0xC0-0xC3 */ + 0xEC, 0xB8, 0xC2, 0xC3, 0xEC, 0xB7, 0x94, 0xE8, /* 0xC4-0xC7 */ + 0x94, 0xE9, 0x94, 0xEA, 0x94, 0xEB, 0xD0, 0xFD, /* 0xC8-0xCB */ + 0xEC, 0xBA, 0x94, 0xEC, 0xEC, 0xBB, 0xD7, 0xE5, /* 0xCC-0xCF */ + 0x94, 0xED, 0x94, 0xEE, 0xEC, 0xBC, 0x94, 0xEF, /* 0xD0-0xD3 */ + 0x94, 0xF0, 0x94, 0xF1, 0xEC, 0xBD, 0xC6, 0xEC, /* 0xD4-0xD7 */ + 0x94, 0xF2, 0x94, 0xF3, 0x94, 0xF4, 0x94, 0xF5, /* 0xD8-0xDB */ + 0x94, 0xF6, 0x94, 0xF7, 0x94, 0xF8, 0x94, 0xF9, /* 0xDC-0xDF */ + 0xCE, 0xDE, 0x94, 0xFA, 0xBC, 0xC8, 0x94, 0xFB, /* 0xE0-0xE3 */ + 0x94, 0xFC, 0xC8, 0xD5, 0xB5, 0xA9, 0xBE, 0xC9, /* 0xE4-0xE7 */ + 0xD6, 0xBC, 0xD4, 0xE7, 0x94, 0xFD, 0x94, 0xFE, /* 0xE8-0xEB */ + 0xD1, 0xAE, 0xD0, 0xF1, 0xEA, 0xB8, 0xEA, 0xB9, /* 0xEC-0xEF */ + 0xEA, 0xBA, 0xBA, 0xB5, 0x95, 0x40, 0x95, 0x41, /* 0xF0-0xF3 */ + 0x95, 0x42, 0x95, 0x43, 0xCA, 0xB1, 0xBF, 0xF5, /* 0xF4-0xF7 */ + 0x95, 0x44, 0x95, 0x45, 0xCD, 0xFA, 0x95, 0x46, /* 0xF8-0xFB */ + 0x95, 0x47, 0x95, 0x48, 0x95, 0x49, 0x95, 0x4A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0xEA, 0xC0, 0x95, 0x4B, 0xB0, 0xBA, 0xEA, 0xBE, /* 0x00-0x03 */ + 0x95, 0x4C, 0x95, 0x4D, 0xC0, 0xA5, 0x95, 0x4E, /* 0x04-0x07 */ + 0x95, 0x4F, 0x95, 0x50, 0xEA, 0xBB, 0x95, 0x51, /* 0x08-0x0B */ + 0xB2, 0xFD, 0x95, 0x52, 0xC3, 0xF7, 0xBB, 0xE8, /* 0x0C-0x0F */ + 0x95, 0x53, 0x95, 0x54, 0x95, 0x55, 0xD2, 0xD7, /* 0x10-0x13 */ + 0xCE, 0xF4, 0xEA, 0xBF, 0x95, 0x56, 0x95, 0x57, /* 0x14-0x17 */ + 0x95, 0x58, 0xEA, 0xBC, 0x95, 0x59, 0x95, 0x5A, /* 0x18-0x1B */ + 0x95, 0x5B, 0xEA, 0xC3, 0x95, 0x5C, 0xD0, 0xC7, /* 0x1C-0x1F */ + 0xD3, 0xB3, 0x95, 0x5D, 0x95, 0x5E, 0x95, 0x5F, /* 0x20-0x23 */ + 0x95, 0x60, 0xB4, 0xBA, 0x95, 0x61, 0xC3, 0xC1, /* 0x24-0x27 */ + 0xD7, 0xF2, 0x95, 0x62, 0x95, 0x63, 0x95, 0x64, /* 0x28-0x2B */ + 0x95, 0x65, 0xD5, 0xD1, 0x95, 0x66, 0xCA, 0xC7, /* 0x2C-0x2F */ + 0x95, 0x67, 0xEA, 0xC5, 0x95, 0x68, 0x95, 0x69, /* 0x30-0x33 */ + 0xEA, 0xC4, 0xEA, 0xC7, 0xEA, 0xC6, 0x95, 0x6A, /* 0x34-0x37 */ + 0x95, 0x6B, 0x95, 0x6C, 0x95, 0x6D, 0x95, 0x6E, /* 0x38-0x3B */ + 0xD6, 0xE7, 0x95, 0x6F, 0xCF, 0xD4, 0x95, 0x70, /* 0x3C-0x3F */ + 0x95, 0x71, 0xEA, 0xCB, 0x95, 0x72, 0xBB, 0xCE, /* 0x40-0x43 */ + 0x95, 0x73, 0x95, 0x74, 0x95, 0x75, 0x95, 0x76, /* 0x44-0x47 */ + 0x95, 0x77, 0x95, 0x78, 0x95, 0x79, 0xBD, 0xFA, /* 0x48-0x4B */ + 0xC9, 0xCE, 0x95, 0x7A, 0x95, 0x7B, 0xEA, 0xCC, /* 0x4C-0x4F */ + 0x95, 0x7C, 0x95, 0x7D, 0xC9, 0xB9, 0xCF, 0xFE, /* 0x50-0x53 */ + 0xEA, 0xCA, 0xD4, 0xCE, 0xEA, 0xCD, 0xEA, 0xCF, /* 0x54-0x57 */ + 0x95, 0x7E, 0x95, 0x80, 0xCD, 0xED, 0x95, 0x81, /* 0x58-0x5B */ + 0x95, 0x82, 0x95, 0x83, 0x95, 0x84, 0xEA, 0xC9, /* 0x5C-0x5F */ + 0x95, 0x85, 0xEA, 0xCE, 0x95, 0x86, 0x95, 0x87, /* 0x60-0x63 */ + 0xCE, 0xEE, 0x95, 0x88, 0xBB, 0xDE, 0x95, 0x89, /* 0x64-0x67 */ + 0xB3, 0xBF, 0x95, 0x8A, 0x95, 0x8B, 0x95, 0x8C, /* 0x68-0x6B */ + 0x95, 0x8D, 0x95, 0x8E, 0xC6, 0xD5, 0xBE, 0xB0, /* 0x6C-0x6F */ + 0xCE, 0xFA, 0x95, 0x8F, 0x95, 0x90, 0x95, 0x91, /* 0x70-0x73 */ + 0xC7, 0xE7, 0x95, 0x92, 0xBE, 0xA7, 0xEA, 0xD0, /* 0x74-0x77 */ + 0x95, 0x93, 0x95, 0x94, 0xD6, 0xC7, 0x95, 0x95, /* 0x78-0x7B */ + 0x95, 0x96, 0x95, 0x97, 0xC1, 0xC0, 0x95, 0x98, /* 0x7C-0x7F */ + + 0x95, 0x99, 0x95, 0x9A, 0xD4, 0xDD, 0x95, 0x9B, /* 0x80-0x83 */ + 0xEA, 0xD1, 0x95, 0x9C, 0x95, 0x9D, 0xCF, 0xBE, /* 0x84-0x87 */ + 0x95, 0x9E, 0x95, 0x9F, 0x95, 0xA0, 0x95, 0xA1, /* 0x88-0x8B */ + 0xEA, 0xD2, 0x95, 0xA2, 0x95, 0xA3, 0x95, 0xA4, /* 0x8C-0x8F */ + 0x95, 0xA5, 0xCA, 0xEE, 0x95, 0xA6, 0x95, 0xA7, /* 0x90-0x93 */ + 0x95, 0xA8, 0x95, 0xA9, 0xC5, 0xAF, 0xB0, 0xB5, /* 0x94-0x97 */ + 0x95, 0xAA, 0x95, 0xAB, 0x95, 0xAC, 0x95, 0xAD, /* 0x98-0x9B */ + 0x95, 0xAE, 0xEA, 0xD4, 0x95, 0xAF, 0x95, 0xB0, /* 0x9C-0x9F */ + 0x95, 0xB1, 0x95, 0xB2, 0x95, 0xB3, 0x95, 0xB4, /* 0xA0-0xA3 */ + 0x95, 0xB5, 0x95, 0xB6, 0x95, 0xB7, 0xEA, 0xD3, /* 0xA4-0xA7 */ + 0xF4, 0xDF, 0x95, 0xB8, 0x95, 0xB9, 0x95, 0xBA, /* 0xA8-0xAB */ + 0x95, 0xBB, 0x95, 0xBC, 0xC4, 0xBA, 0x95, 0xBD, /* 0xAC-0xAF */ + 0x95, 0xBE, 0x95, 0xBF, 0x95, 0xC0, 0x95, 0xC1, /* 0xB0-0xB3 */ + 0xB1, 0xA9, 0x95, 0xC2, 0x95, 0xC3, 0x95, 0xC4, /* 0xB4-0xB7 */ + 0x95, 0xC5, 0xE5, 0xDF, 0x95, 0xC6, 0x95, 0xC7, /* 0xB8-0xBB */ + 0x95, 0xC8, 0x95, 0xC9, 0xEA, 0xD5, 0x95, 0xCA, /* 0xBC-0xBF */ + 0x95, 0xCB, 0x95, 0xCC, 0x95, 0xCD, 0x95, 0xCE, /* 0xC0-0xC3 */ + 0x95, 0xCF, 0x95, 0xD0, 0x95, 0xD1, 0x95, 0xD2, /* 0xC4-0xC7 */ + 0x95, 0xD3, 0x95, 0xD4, 0x95, 0xD5, 0x95, 0xD6, /* 0xC8-0xCB */ + 0x95, 0xD7, 0x95, 0xD8, 0x95, 0xD9, 0x95, 0xDA, /* 0xCC-0xCF */ + 0x95, 0xDB, 0x95, 0xDC, 0x95, 0xDD, 0x95, 0xDE, /* 0xD0-0xD3 */ + 0x95, 0xDF, 0x95, 0xE0, 0x95, 0xE1, 0x95, 0xE2, /* 0xD4-0xD7 */ + 0x95, 0xE3, 0xCA, 0xEF, 0x95, 0xE4, 0xEA, 0xD6, /* 0xD8-0xDB */ + 0xEA, 0xD7, 0xC6, 0xD8, 0x95, 0xE5, 0x95, 0xE6, /* 0xDC-0xDF */ + 0x95, 0xE7, 0x95, 0xE8, 0x95, 0xE9, 0x95, 0xEA, /* 0xE0-0xE3 */ + 0x95, 0xEB, 0x95, 0xEC, 0xEA, 0xD8, 0x95, 0xED, /* 0xE4-0xE7 */ + 0x95, 0xEE, 0xEA, 0xD9, 0x95, 0xEF, 0x95, 0xF0, /* 0xE8-0xEB */ + 0x95, 0xF1, 0x95, 0xF2, 0x95, 0xF3, 0x95, 0xF4, /* 0xEC-0xEF */ + 0xD4, 0xBB, 0x95, 0xF5, 0xC7, 0xFA, 0xD2, 0xB7, /* 0xF0-0xF3 */ + 0xB8, 0xFC, 0x95, 0xF6, 0x95, 0xF7, 0xEA, 0xC2, /* 0xF4-0xF7 */ + 0x95, 0xF8, 0xB2, 0xDC, 0x95, 0xF9, 0x95, 0xFA, /* 0xF8-0xFB */ + 0xC2, 0xFC, 0x95, 0xFB, 0xD4, 0xF8, 0xCC, 0xE6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0xD7, 0xEE, 0x95, 0xFC, 0x95, 0xFD, 0x95, 0xFE, /* 0x00-0x03 */ + 0x96, 0x40, 0x96, 0x41, 0x96, 0x42, 0x96, 0x43, /* 0x04-0x07 */ + 0xD4, 0xC2, 0xD3, 0xD0, 0xEB, 0xC3, 0xC5, 0xF3, /* 0x08-0x0B */ + 0x96, 0x44, 0xB7, 0xFE, 0x96, 0x45, 0x96, 0x46, /* 0x0C-0x0F */ + 0xEB, 0xD4, 0x96, 0x47, 0x96, 0x48, 0x96, 0x49, /* 0x10-0x13 */ + 0xCB, 0xB7, 0xEB, 0xDE, 0x96, 0x4A, 0xC0, 0xCA, /* 0x14-0x17 */ + 0x96, 0x4B, 0x96, 0x4C, 0x96, 0x4D, 0xCD, 0xFB, /* 0x18-0x1B */ + 0x96, 0x4E, 0xB3, 0xAF, 0x96, 0x4F, 0xC6, 0xDA, /* 0x1C-0x1F */ + 0x96, 0x50, 0x96, 0x51, 0x96, 0x52, 0x96, 0x53, /* 0x20-0x23 */ + 0x96, 0x54, 0x96, 0x55, 0xEB, 0xFC, 0x96, 0x56, /* 0x24-0x27 */ + 0xC4, 0xBE, 0x96, 0x57, 0xCE, 0xB4, 0xC4, 0xA9, /* 0x28-0x2B */ + 0xB1, 0xBE, 0xD4, 0xFD, 0x96, 0x58, 0xCA, 0xF5, /* 0x2C-0x2F */ + 0x96, 0x59, 0xD6, 0xEC, 0x96, 0x5A, 0x96, 0x5B, /* 0x30-0x33 */ + 0xC6, 0xD3, 0xB6, 0xE4, 0x96, 0x5C, 0x96, 0x5D, /* 0x34-0x37 */ + 0x96, 0x5E, 0x96, 0x5F, 0xBB, 0xFA, 0x96, 0x60, /* 0x38-0x3B */ + 0x96, 0x61, 0xD0, 0xE0, 0x96, 0x62, 0x96, 0x63, /* 0x3C-0x3F */ + 0xC9, 0xB1, 0x96, 0x64, 0xD4, 0xD3, 0xC8, 0xA8, /* 0x40-0x43 */ + 0x96, 0x65, 0x96, 0x66, 0xB8, 0xCB, 0x96, 0x67, /* 0x44-0x47 */ + 0xE8, 0xBE, 0xC9, 0xBC, 0x96, 0x68, 0x96, 0x69, /* 0x48-0x4B */ + 0xE8, 0xBB, 0x96, 0x6A, 0xC0, 0xEE, 0xD0, 0xD3, /* 0x4C-0x4F */ + 0xB2, 0xC4, 0xB4, 0xE5, 0x96, 0x6B, 0xE8, 0xBC, /* 0x50-0x53 */ + 0x96, 0x6C, 0x96, 0x6D, 0xD5, 0xC8, 0x96, 0x6E, /* 0x54-0x57 */ + 0x96, 0x6F, 0x96, 0x70, 0x96, 0x71, 0x96, 0x72, /* 0x58-0x5B */ + 0xB6, 0xC5, 0x96, 0x73, 0xE8, 0xBD, 0xCA, 0xF8, /* 0x5C-0x5F */ + 0xB8, 0xDC, 0xCC, 0xF5, 0x96, 0x74, 0x96, 0x75, /* 0x60-0x63 */ + 0x96, 0x76, 0xC0, 0xB4, 0x96, 0x77, 0x96, 0x78, /* 0x64-0x67 */ + 0xD1, 0xEE, 0xE8, 0xBF, 0xE8, 0xC2, 0x96, 0x79, /* 0x68-0x6B */ + 0x96, 0x7A, 0xBA, 0xBC, 0x96, 0x7B, 0xB1, 0xAD, /* 0x6C-0x6F */ + 0xBD, 0xDC, 0x96, 0x7C, 0xEA, 0xBD, 0xE8, 0xC3, /* 0x70-0x73 */ + 0x96, 0x7D, 0xE8, 0xC6, 0x96, 0x7E, 0xE8, 0xCB, /* 0x74-0x77 */ + 0x96, 0x80, 0x96, 0x81, 0x96, 0x82, 0x96, 0x83, /* 0x78-0x7B */ + 0xE8, 0xCC, 0x96, 0x84, 0xCB, 0xC9, 0xB0, 0xE5, /* 0x7C-0x7F */ + + 0x96, 0x85, 0xBC, 0xAB, 0x96, 0x86, 0x96, 0x87, /* 0x80-0x83 */ + 0xB9, 0xB9, 0x96, 0x88, 0x96, 0x89, 0xE8, 0xC1, /* 0x84-0x87 */ + 0x96, 0x8A, 0xCD, 0xF7, 0x96, 0x8B, 0xE8, 0xCA, /* 0x88-0x8B */ + 0x96, 0x8C, 0x96, 0x8D, 0x96, 0x8E, 0x96, 0x8F, /* 0x8C-0x8F */ + 0xCE, 0xF6, 0x96, 0x90, 0x96, 0x91, 0x96, 0x92, /* 0x90-0x93 */ + 0x96, 0x93, 0xD5, 0xED, 0x96, 0x94, 0xC1, 0xD6, /* 0x94-0x97 */ + 0xE8, 0xC4, 0x96, 0x95, 0xC3, 0xB6, 0x96, 0x96, /* 0x98-0x9B */ + 0xB9, 0xFB, 0xD6, 0xA6, 0xE8, 0xC8, 0x96, 0x97, /* 0x9C-0x9F */ + 0x96, 0x98, 0x96, 0x99, 0xCA, 0xE0, 0xD4, 0xE6, /* 0xA0-0xA3 */ + 0x96, 0x9A, 0xE8, 0xC0, 0x96, 0x9B, 0xE8, 0xC5, /* 0xA4-0xA7 */ + 0xE8, 0xC7, 0x96, 0x9C, 0xC7, 0xB9, 0xB7, 0xE3, /* 0xA8-0xAB */ + 0x96, 0x9D, 0xE8, 0xC9, 0x96, 0x9E, 0xBF, 0xDD, /* 0xAC-0xAF */ + 0xE8, 0xD2, 0x96, 0x9F, 0x96, 0xA0, 0xE8, 0xD7, /* 0xB0-0xB3 */ + 0x96, 0xA1, 0xE8, 0xD5, 0xBC, 0xDC, 0xBC, 0xCF, /* 0xB4-0xB7 */ + 0xE8, 0xDB, 0x96, 0xA2, 0x96, 0xA3, 0x96, 0xA4, /* 0xB8-0xBB */ + 0x96, 0xA5, 0x96, 0xA6, 0x96, 0xA7, 0x96, 0xA8, /* 0xBC-0xBF */ + 0x96, 0xA9, 0xE8, 0xDE, 0x96, 0xAA, 0xE8, 0xDA, /* 0xC0-0xC3 */ + 0xB1, 0xFA, 0x96, 0xAB, 0x96, 0xAC, 0x96, 0xAD, /* 0xC4-0xC7 */ + 0x96, 0xAE, 0x96, 0xAF, 0x96, 0xB0, 0x96, 0xB1, /* 0xC8-0xCB */ + 0x96, 0xB2, 0x96, 0xB3, 0x96, 0xB4, 0xB0, 0xD8, /* 0xCC-0xCF */ + 0xC4, 0xB3, 0xB8, 0xCC, 0xC6, 0xE2, 0xC8, 0xBE, /* 0xD0-0xD3 */ + 0xC8, 0xE1, 0x96, 0xB5, 0x96, 0xB6, 0x96, 0xB7, /* 0xD4-0xD7 */ + 0xE8, 0xCF, 0xE8, 0xD4, 0xE8, 0xD6, 0x96, 0xB8, /* 0xD8-0xDB */ + 0xB9, 0xF1, 0xE8, 0xD8, 0xD7, 0xF5, 0x96, 0xB9, /* 0xDC-0xDF */ + 0xC4, 0xFB, 0x96, 0xBA, 0xE8, 0xDC, 0x96, 0xBB, /* 0xE0-0xE3 */ + 0x96, 0xBC, 0xB2, 0xE9, 0x96, 0xBD, 0x96, 0xBE, /* 0xE4-0xE7 */ + 0x96, 0xBF, 0xE8, 0xD1, 0x96, 0xC0, 0x96, 0xC1, /* 0xE8-0xEB */ + 0xBC, 0xED, 0x96, 0xC2, 0x96, 0xC3, 0xBF, 0xC2, /* 0xEC-0xEF */ + 0xE8, 0xCD, 0xD6, 0xF9, 0x96, 0xC4, 0xC1, 0xF8, /* 0xF0-0xF3 */ + 0xB2, 0xF1, 0x96, 0xC5, 0x96, 0xC6, 0x96, 0xC7, /* 0xF4-0xF7 */ + 0x96, 0xC8, 0x96, 0xC9, 0x96, 0xCA, 0x96, 0xCB, /* 0xF8-0xFB */ + 0x96, 0xCC, 0xE8, 0xDF, 0x96, 0xCD, 0xCA, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0xE8, 0xD9, 0x96, 0xCE, 0x96, 0xCF, 0x96, 0xD0, /* 0x00-0x03 */ + 0x96, 0xD1, 0xD5, 0xA4, 0x96, 0xD2, 0xB1, 0xEA, /* 0x04-0x07 */ + 0xD5, 0xBB, 0xE8, 0xCE, 0xE8, 0xD0, 0xB6, 0xB0, /* 0x08-0x0B */ + 0xE8, 0xD3, 0x96, 0xD3, 0xE8, 0xDD, 0xC0, 0xB8, /* 0x0C-0x0F */ + 0x96, 0xD4, 0xCA, 0xF7, 0x96, 0xD5, 0xCB, 0xA8, /* 0x10-0x13 */ + 0x96, 0xD6, 0x96, 0xD7, 0xC6, 0xDC, 0xC0, 0xF5, /* 0x14-0x17 */ + 0x96, 0xD8, 0x96, 0xD9, 0x96, 0xDA, 0x96, 0xDB, /* 0x18-0x1B */ + 0x96, 0xDC, 0xE8, 0xE9, 0x96, 0xDD, 0x96, 0xDE, /* 0x1C-0x1F */ + 0x96, 0xDF, 0xD0, 0xA3, 0x96, 0xE0, 0x96, 0xE1, /* 0x20-0x23 */ + 0x96, 0xE2, 0x96, 0xE3, 0x96, 0xE4, 0x96, 0xE5, /* 0x24-0x27 */ + 0x96, 0xE6, 0xE8, 0xF2, 0xD6, 0xEA, 0x96, 0xE7, /* 0x28-0x2B */ + 0x96, 0xE8, 0x96, 0xE9, 0x96, 0xEA, 0x96, 0xEB, /* 0x2C-0x2F */ + 0x96, 0xEC, 0x96, 0xED, 0xE8, 0xE0, 0xE8, 0xE1, /* 0x30-0x33 */ + 0x96, 0xEE, 0x96, 0xEF, 0x96, 0xF0, 0xD1, 0xF9, /* 0x34-0x37 */ + 0xBA, 0xCB, 0xB8, 0xF9, 0x96, 0xF1, 0x96, 0xF2, /* 0x38-0x3B */ + 0xB8, 0xF1, 0xD4, 0xD4, 0xE8, 0xEF, 0x96, 0xF3, /* 0x3C-0x3F */ + 0xE8, 0xEE, 0xE8, 0xEC, 0xB9, 0xF0, 0xCC, 0xD2, /* 0x40-0x43 */ + 0xE8, 0xE6, 0xCE, 0xA6, 0xBF, 0xF2, 0x96, 0xF4, /* 0x44-0x47 */ + 0xB0, 0xB8, 0xE8, 0xF1, 0xE8, 0xF0, 0x96, 0xF5, /* 0x48-0x4B */ + 0xD7, 0xC0, 0x96, 0xF6, 0xE8, 0xE4, 0x96, 0xF7, /* 0x4C-0x4F */ + 0xCD, 0xA9, 0xC9, 0xA3, 0x96, 0xF8, 0xBB, 0xB8, /* 0x50-0x53 */ + 0xBD, 0xDB, 0xE8, 0xEA, 0x96, 0xF9, 0x96, 0xFA, /* 0x54-0x57 */ + 0x96, 0xFB, 0x96, 0xFC, 0x96, 0xFD, 0x96, 0xFE, /* 0x58-0x5B */ + 0x97, 0x40, 0x97, 0x41, 0x97, 0x42, 0x97, 0x43, /* 0x5C-0x5F */ + 0xE8, 0xE2, 0xE8, 0xE3, 0xE8, 0xE5, 0xB5, 0xB5, /* 0x60-0x63 */ + 0xE8, 0xE7, 0xC7, 0xC5, 0xE8, 0xEB, 0xE8, 0xED, /* 0x64-0x67 */ + 0xBD, 0xB0, 0xD7, 0xAE, 0x97, 0x44, 0xE8, 0xF8, /* 0x68-0x6B */ + 0x97, 0x45, 0x97, 0x46, 0x97, 0x47, 0x97, 0x48, /* 0x6C-0x6F */ + 0x97, 0x49, 0x97, 0x4A, 0x97, 0x4B, 0x97, 0x4C, /* 0x70-0x73 */ + 0xE8, 0xF5, 0x97, 0x4D, 0xCD, 0xB0, 0xE8, 0xF6, /* 0x74-0x77 */ + 0x97, 0x4E, 0x97, 0x4F, 0x97, 0x50, 0x97, 0x51, /* 0x78-0x7B */ + 0x97, 0x52, 0x97, 0x53, 0x97, 0x54, 0x97, 0x55, /* 0x7C-0x7F */ + + 0x97, 0x56, 0xC1, 0xBA, 0x97, 0x57, 0xE8, 0xE8, /* 0x80-0x83 */ + 0x97, 0x58, 0xC3, 0xB7, 0xB0, 0xF0, 0x97, 0x59, /* 0x84-0x87 */ + 0x97, 0x5A, 0x97, 0x5B, 0x97, 0x5C, 0x97, 0x5D, /* 0x88-0x8B */ + 0x97, 0x5E, 0x97, 0x5F, 0x97, 0x60, 0xE8, 0xF4, /* 0x8C-0x8F */ + 0x97, 0x61, 0x97, 0x62, 0x97, 0x63, 0xE8, 0xF7, /* 0x90-0x93 */ + 0x97, 0x64, 0x97, 0x65, 0x97, 0x66, 0xB9, 0xA3, /* 0x94-0x97 */ + 0x97, 0x67, 0x97, 0x68, 0x97, 0x69, 0x97, 0x6A, /* 0x98-0x9B */ + 0x97, 0x6B, 0x97, 0x6C, 0x97, 0x6D, 0x97, 0x6E, /* 0x9C-0x9F */ + 0x97, 0x6F, 0x97, 0x70, 0xC9, 0xD2, 0x97, 0x71, /* 0xA0-0xA3 */ + 0x97, 0x72, 0x97, 0x73, 0xC3, 0xCE, 0xCE, 0xE0, /* 0xA4-0xA7 */ + 0xC0, 0xE6, 0x97, 0x74, 0x97, 0x75, 0x97, 0x76, /* 0xA8-0xAB */ + 0x97, 0x77, 0xCB, 0xF3, 0x97, 0x78, 0xCC, 0xDD, /* 0xAC-0xAF */ + 0xD0, 0xB5, 0x97, 0x79, 0x97, 0x7A, 0xCA, 0xE1, /* 0xB0-0xB3 */ + 0x97, 0x7B, 0xE8, 0xF3, 0x97, 0x7C, 0x97, 0x7D, /* 0xB4-0xB7 */ + 0x97, 0x7E, 0x97, 0x80, 0x97, 0x81, 0x97, 0x82, /* 0xB8-0xBB */ + 0x97, 0x83, 0x97, 0x84, 0x97, 0x85, 0x97, 0x86, /* 0xBC-0xBF */ + 0xBC, 0xEC, 0x97, 0x87, 0xE8, 0xF9, 0x97, 0x88, /* 0xC0-0xC3 */ + 0x97, 0x89, 0x97, 0x8A, 0x97, 0x8B, 0x97, 0x8C, /* 0xC4-0xC7 */ + 0x97, 0x8D, 0xC3, 0xDE, 0x97, 0x8E, 0xC6, 0xE5, /* 0xC8-0xCB */ + 0x97, 0x8F, 0xB9, 0xF7, 0x97, 0x90, 0x97, 0x91, /* 0xCC-0xCF */ + 0x97, 0x92, 0x97, 0x93, 0xB0, 0xF4, 0x97, 0x94, /* 0xD0-0xD3 */ + 0x97, 0x95, 0xD7, 0xD8, 0x97, 0x96, 0x97, 0x97, /* 0xD4-0xD7 */ + 0xBC, 0xAC, 0x97, 0x98, 0xC5, 0xEF, 0x97, 0x99, /* 0xD8-0xDB */ + 0x97, 0x9A, 0x97, 0x9B, 0x97, 0x9C, 0x97, 0x9D, /* 0xDC-0xDF */ + 0xCC, 0xC4, 0x97, 0x9E, 0x97, 0x9F, 0xE9, 0xA6, /* 0xE0-0xE3 */ + 0x97, 0xA0, 0x97, 0xA1, 0x97, 0xA2, 0x97, 0xA3, /* 0xE4-0xE7 */ + 0x97, 0xA4, 0x97, 0xA5, 0x97, 0xA6, 0x97, 0xA7, /* 0xE8-0xEB */ + 0x97, 0xA8, 0x97, 0xA9, 0xC9, 0xAD, 0x97, 0xAA, /* 0xEC-0xEF */ + 0xE9, 0xA2, 0xC0, 0xE2, 0x97, 0xAB, 0x97, 0xAC, /* 0xF0-0xF3 */ + 0x97, 0xAD, 0xBF, 0xC3, 0x97, 0xAE, 0x97, 0xAF, /* 0xF4-0xF7 */ + 0x97, 0xB0, 0xE8, 0xFE, 0xB9, 0xD7, 0x97, 0xB1, /* 0xF8-0xFB */ + 0xE8, 0xFB, 0x97, 0xB2, 0x97, 0xB3, 0x97, 0xB4, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_69[512] = { + 0x97, 0xB5, 0xE9, 0xA4, 0x97, 0xB6, 0x97, 0xB7, /* 0x00-0x03 */ + 0x97, 0xB8, 0xD2, 0xCE, 0x97, 0xB9, 0x97, 0xBA, /* 0x04-0x07 */ + 0x97, 0xBB, 0x97, 0xBC, 0x97, 0xBD, 0xE9, 0xA3, /* 0x08-0x0B */ + 0x97, 0xBE, 0xD6, 0xB2, 0xD7, 0xB5, 0x97, 0xBF, /* 0x0C-0x0F */ + 0xE9, 0xA7, 0x97, 0xC0, 0xBD, 0xB7, 0x97, 0xC1, /* 0x10-0x13 */ + 0x97, 0xC2, 0x97, 0xC3, 0x97, 0xC4, 0x97, 0xC5, /* 0x14-0x17 */ + 0x97, 0xC6, 0x97, 0xC7, 0x97, 0xC8, 0x97, 0xC9, /* 0x18-0x1B */ + 0x97, 0xCA, 0x97, 0xCB, 0x97, 0xCC, 0xE8, 0xFC, /* 0x1C-0x1F */ + 0xE8, 0xFD, 0x97, 0xCD, 0x97, 0xCE, 0x97, 0xCF, /* 0x20-0x23 */ + 0xE9, 0xA1, 0x97, 0xD0, 0x97, 0xD1, 0x97, 0xD2, /* 0x24-0x27 */ + 0x97, 0xD3, 0x97, 0xD4, 0x97, 0xD5, 0x97, 0xD6, /* 0x28-0x2B */ + 0x97, 0xD7, 0xCD, 0xD6, 0x97, 0xD8, 0x97, 0xD9, /* 0x2C-0x2F */ + 0xD2, 0xAC, 0x97, 0xDA, 0x97, 0xDB, 0x97, 0xDC, /* 0x30-0x33 */ + 0xE9, 0xB2, 0x97, 0xDD, 0x97, 0xDE, 0x97, 0xDF, /* 0x34-0x37 */ + 0x97, 0xE0, 0xE9, 0xA9, 0x97, 0xE1, 0x97, 0xE2, /* 0x38-0x3B */ + 0x97, 0xE3, 0xB4, 0xAA, 0x97, 0xE4, 0xB4, 0xBB, /* 0x3C-0x3F */ + 0x97, 0xE5, 0x97, 0xE6, 0xE9, 0xAB, 0x97, 0xE7, /* 0x40-0x43 */ + 0x97, 0xE8, 0x97, 0xE9, 0x97, 0xEA, 0x97, 0xEB, /* 0x44-0x47 */ + 0x97, 0xEC, 0x97, 0xED, 0x97, 0xEE, 0x97, 0xEF, /* 0x48-0x4B */ + 0x97, 0xF0, 0x97, 0xF1, 0x97, 0xF2, 0x97, 0xF3, /* 0x4C-0x4F */ + 0x97, 0xF4, 0x97, 0xF5, 0x97, 0xF6, 0x97, 0xF7, /* 0x50-0x53 */ + 0xD0, 0xA8, 0x97, 0xF8, 0x97, 0xF9, 0xE9, 0xA5, /* 0x54-0x57 */ + 0x97, 0xFA, 0x97, 0xFB, 0xB3, 0xFE, 0x97, 0xFC, /* 0x58-0x5B */ + 0x97, 0xFD, 0xE9, 0xAC, 0xC0, 0xE3, 0x97, 0xFE, /* 0x5C-0x5F */ + 0xE9, 0xAA, 0x98, 0x40, 0x98, 0x41, 0xE9, 0xB9, /* 0x60-0x63 */ + 0x98, 0x42, 0x98, 0x43, 0xE9, 0xB8, 0x98, 0x44, /* 0x64-0x67 */ + 0x98, 0x45, 0x98, 0x46, 0x98, 0x47, 0xE9, 0xAE, /* 0x68-0x6B */ + 0x98, 0x48, 0x98, 0x49, 0xE8, 0xFA, 0x98, 0x4A, /* 0x6C-0x6F */ + 0x98, 0x4B, 0xE9, 0xA8, 0x98, 0x4C, 0x98, 0x4D, /* 0x70-0x73 */ + 0x98, 0x4E, 0x98, 0x4F, 0x98, 0x50, 0xBF, 0xAC, /* 0x74-0x77 */ + 0xE9, 0xB1, 0xE9, 0xBA, 0x98, 0x51, 0x98, 0x52, /* 0x78-0x7B */ + 0xC2, 0xA5, 0x98, 0x53, 0x98, 0x54, 0x98, 0x55, /* 0x7C-0x7F */ + + 0xE9, 0xAF, 0x98, 0x56, 0xB8, 0xC5, 0x98, 0x57, /* 0x80-0x83 */ + 0xE9, 0xAD, 0x98, 0x58, 0xD3, 0xDC, 0xE9, 0xB4, /* 0x84-0x87 */ + 0xE9, 0xB5, 0xE9, 0xB7, 0x98, 0x59, 0x98, 0x5A, /* 0x88-0x8B */ + 0x98, 0x5B, 0xE9, 0xC7, 0x98, 0x5C, 0x98, 0x5D, /* 0x8C-0x8F */ + 0x98, 0x5E, 0x98, 0x5F, 0x98, 0x60, 0x98, 0x61, /* 0x90-0x93 */ + 0xC0, 0xC6, 0xE9, 0xC5, 0x98, 0x62, 0x98, 0x63, /* 0x94-0x97 */ + 0xE9, 0xB0, 0x98, 0x64, 0x98, 0x65, 0xE9, 0xBB, /* 0x98-0x9B */ + 0xB0, 0xF1, 0x98, 0x66, 0x98, 0x67, 0x98, 0x68, /* 0x9C-0x9F */ + 0x98, 0x69, 0x98, 0x6A, 0x98, 0x6B, 0x98, 0x6C, /* 0xA0-0xA3 */ + 0x98, 0x6D, 0x98, 0x6E, 0x98, 0x6F, 0xE9, 0xBC, /* 0xA4-0xA7 */ + 0xD5, 0xA5, 0x98, 0x70, 0x98, 0x71, 0xE9, 0xBE, /* 0xA8-0xAB */ + 0x98, 0x72, 0xE9, 0xBF, 0x98, 0x73, 0x98, 0x74, /* 0xAC-0xAF */ + 0x98, 0x75, 0xE9, 0xC1, 0x98, 0x76, 0x98, 0x77, /* 0xB0-0xB3 */ + 0xC1, 0xF1, 0x98, 0x78, 0x98, 0x79, 0xC8, 0xB6, /* 0xB4-0xB7 */ + 0x98, 0x7A, 0x98, 0x7B, 0x98, 0x7C, 0xE9, 0xBD, /* 0xB8-0xBB */ + 0x98, 0x7D, 0x98, 0x7E, 0x98, 0x80, 0x98, 0x81, /* 0xBC-0xBF */ + 0x98, 0x82, 0xE9, 0xC2, 0x98, 0x83, 0x98, 0x84, /* 0xC0-0xC3 */ + 0x98, 0x85, 0x98, 0x86, 0x98, 0x87, 0x98, 0x88, /* 0xC4-0xC7 */ + 0x98, 0x89, 0x98, 0x8A, 0xE9, 0xC3, 0x98, 0x8B, /* 0xC8-0xCB */ + 0xE9, 0xB3, 0x98, 0x8C, 0xE9, 0xB6, 0x98, 0x8D, /* 0xCC-0xCF */ + 0xBB, 0xB1, 0x98, 0x8E, 0x98, 0x8F, 0x98, 0x90, /* 0xD0-0xD3 */ + 0xE9, 0xC0, 0x98, 0x91, 0x98, 0x92, 0x98, 0x93, /* 0xD4-0xD7 */ + 0x98, 0x94, 0x98, 0x95, 0x98, 0x96, 0xBC, 0xF7, /* 0xD8-0xDB */ + 0x98, 0x97, 0x98, 0x98, 0x98, 0x99, 0xE9, 0xC4, /* 0xDC-0xDF */ + 0xE9, 0xC6, 0x98, 0x9A, 0x98, 0x9B, 0x98, 0x9C, /* 0xE0-0xE3 */ + 0x98, 0x9D, 0x98, 0x9E, 0x98, 0x9F, 0x98, 0xA0, /* 0xE4-0xE7 */ + 0x98, 0xA1, 0x98, 0xA2, 0x98, 0xA3, 0x98, 0xA4, /* 0xE8-0xEB */ + 0x98, 0xA5, 0xE9, 0xCA, 0x98, 0xA6, 0x98, 0xA7, /* 0xEC-0xEF */ + 0x98, 0xA8, 0x98, 0xA9, 0xE9, 0xCE, 0x98, 0xAA, /* 0xF0-0xF3 */ + 0x98, 0xAB, 0x98, 0xAC, 0x98, 0xAD, 0x98, 0xAE, /* 0xF4-0xF7 */ + 0x98, 0xAF, 0x98, 0xB0, 0x98, 0xB1, 0x98, 0xB2, /* 0xF8-0xFB */ + 0x98, 0xB3, 0xB2, 0xDB, 0x98, 0xB4, 0xE9, 0xC8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0x98, 0xB5, 0x98, 0xB6, 0x98, 0xB7, 0x98, 0xB8, /* 0x00-0x03 */ + 0x98, 0xB9, 0x98, 0xBA, 0x98, 0xBB, 0x98, 0xBC, /* 0x04-0x07 */ + 0x98, 0xBD, 0x98, 0xBE, 0xB7, 0xAE, 0x98, 0xBF, /* 0x08-0x0B */ + 0x98, 0xC0, 0x98, 0xC1, 0x98, 0xC2, 0x98, 0xC3, /* 0x0C-0x0F */ + 0x98, 0xC4, 0x98, 0xC5, 0x98, 0xC6, 0x98, 0xC7, /* 0x10-0x13 */ + 0x98, 0xC8, 0x98, 0xC9, 0x98, 0xCA, 0xE9, 0xCB, /* 0x14-0x17 */ + 0xE9, 0xCC, 0x98, 0xCB, 0x98, 0xCC, 0x98, 0xCD, /* 0x18-0x1B */ + 0x98, 0xCE, 0x98, 0xCF, 0x98, 0xD0, 0xD5, 0xC1, /* 0x1C-0x1F */ + 0x98, 0xD1, 0xC4, 0xA3, 0x98, 0xD2, 0x98, 0xD3, /* 0x20-0x23 */ + 0x98, 0xD4, 0x98, 0xD5, 0x98, 0xD6, 0x98, 0xD7, /* 0x24-0x27 */ + 0xE9, 0xD8, 0x98, 0xD8, 0xBA, 0xE1, 0x98, 0xD9, /* 0x28-0x2B */ + 0x98, 0xDA, 0x98, 0xDB, 0x98, 0xDC, 0xE9, 0xC9, /* 0x2C-0x2F */ + 0x98, 0xDD, 0xD3, 0xA3, 0x98, 0xDE, 0x98, 0xDF, /* 0x30-0x33 */ + 0x98, 0xE0, 0xE9, 0xD4, 0x98, 0xE1, 0x98, 0xE2, /* 0x34-0x37 */ + 0x98, 0xE3, 0x98, 0xE4, 0x98, 0xE5, 0x98, 0xE6, /* 0x38-0x3B */ + 0x98, 0xE7, 0xE9, 0xD7, 0xE9, 0xD0, 0x98, 0xE8, /* 0x3C-0x3F */ + 0x98, 0xE9, 0x98, 0xEA, 0x98, 0xEB, 0x98, 0xEC, /* 0x40-0x43 */ + 0xE9, 0xCF, 0x98, 0xED, 0x98, 0xEE, 0xC7, 0xC1, /* 0x44-0x47 */ + 0x98, 0xEF, 0x98, 0xF0, 0x98, 0xF1, 0x98, 0xF2, /* 0x48-0x4B */ + 0x98, 0xF3, 0x98, 0xF4, 0x98, 0xF5, 0x98, 0xF6, /* 0x4C-0x4F */ + 0xE9, 0xD2, 0x98, 0xF7, 0x98, 0xF8, 0x98, 0xF9, /* 0x50-0x53 */ + 0x98, 0xFA, 0x98, 0xFB, 0x98, 0xFC, 0x98, 0xFD, /* 0x54-0x57 */ + 0xE9, 0xD9, 0xB3, 0xC8, 0x98, 0xFE, 0xE9, 0xD3, /* 0x58-0x5B */ + 0x99, 0x40, 0x99, 0x41, 0x99, 0x42, 0x99, 0x43, /* 0x5C-0x5F */ + 0x99, 0x44, 0xCF, 0xF0, 0x99, 0x45, 0x99, 0x46, /* 0x60-0x63 */ + 0x99, 0x47, 0xE9, 0xCD, 0x99, 0x48, 0x99, 0x49, /* 0x64-0x67 */ + 0x99, 0x4A, 0x99, 0x4B, 0x99, 0x4C, 0x99, 0x4D, /* 0x68-0x6B */ + 0x99, 0x4E, 0x99, 0x4F, 0x99, 0x50, 0x99, 0x51, /* 0x6C-0x6F */ + 0x99, 0x52, 0xB3, 0xF7, 0x99, 0x53, 0x99, 0x54, /* 0x70-0x73 */ + 0x99, 0x55, 0x99, 0x56, 0x99, 0x57, 0x99, 0x58, /* 0x74-0x77 */ + 0x99, 0x59, 0xE9, 0xD6, 0x99, 0x5A, 0x99, 0x5B, /* 0x78-0x7B */ + 0xE9, 0xDA, 0x99, 0x5C, 0x99, 0x5D, 0x99, 0x5E, /* 0x7C-0x7F */ + + 0xCC, 0xB4, 0x99, 0x5F, 0x99, 0x60, 0x99, 0x61, /* 0x80-0x83 */ + 0xCF, 0xAD, 0x99, 0x62, 0x99, 0x63, 0x99, 0x64, /* 0x84-0x87 */ + 0x99, 0x65, 0x99, 0x66, 0x99, 0x67, 0x99, 0x68, /* 0x88-0x8B */ + 0x99, 0x69, 0x99, 0x6A, 0xE9, 0xD5, 0x99, 0x6B, /* 0x8C-0x8F */ + 0xE9, 0xDC, 0xE9, 0xDB, 0x99, 0x6C, 0x99, 0x6D, /* 0x90-0x93 */ + 0x99, 0x6E, 0x99, 0x6F, 0x99, 0x70, 0xE9, 0xDE, /* 0x94-0x97 */ + 0x99, 0x71, 0x99, 0x72, 0x99, 0x73, 0x99, 0x74, /* 0x98-0x9B */ + 0x99, 0x75, 0x99, 0x76, 0x99, 0x77, 0x99, 0x78, /* 0x9C-0x9F */ + 0xE9, 0xD1, 0x99, 0x79, 0x99, 0x7A, 0x99, 0x7B, /* 0xA0-0xA3 */ + 0x99, 0x7C, 0x99, 0x7D, 0x99, 0x7E, 0x99, 0x80, /* 0xA4-0xA7 */ + 0x99, 0x81, 0xE9, 0xDD, 0x99, 0x82, 0xE9, 0xDF, /* 0xA8-0xAB */ + 0xC3, 0xCA, 0x99, 0x83, 0x99, 0x84, 0x99, 0x85, /* 0xAC-0xAF */ + 0x99, 0x86, 0x99, 0x87, 0x99, 0x88, 0x99, 0x89, /* 0xB0-0xB3 */ + 0x99, 0x8A, 0x99, 0x8B, 0x99, 0x8C, 0x99, 0x8D, /* 0xB4-0xB7 */ + 0x99, 0x8E, 0x99, 0x8F, 0x99, 0x90, 0x99, 0x91, /* 0xB8-0xBB */ + 0x99, 0x92, 0x99, 0x93, 0x99, 0x94, 0x99, 0x95, /* 0xBC-0xBF */ + 0x99, 0x96, 0x99, 0x97, 0x99, 0x98, 0x99, 0x99, /* 0xC0-0xC3 */ + 0x99, 0x9A, 0x99, 0x9B, 0x99, 0x9C, 0x99, 0x9D, /* 0xC4-0xC7 */ + 0x99, 0x9E, 0x99, 0x9F, 0x99, 0xA0, 0x99, 0xA1, /* 0xC8-0xCB */ + 0x99, 0xA2, 0x99, 0xA3, 0x99, 0xA4, 0x99, 0xA5, /* 0xCC-0xCF */ + 0x99, 0xA6, 0x99, 0xA7, 0x99, 0xA8, 0x99, 0xA9, /* 0xD0-0xD3 */ + 0x99, 0xAA, 0x99, 0xAB, 0x99, 0xAC, 0x99, 0xAD, /* 0xD4-0xD7 */ + 0x99, 0xAE, 0x99, 0xAF, 0x99, 0xB0, 0x99, 0xB1, /* 0xD8-0xDB */ + 0x99, 0xB2, 0x99, 0xB3, 0x99, 0xB4, 0x99, 0xB5, /* 0xDC-0xDF */ + 0x99, 0xB6, 0x99, 0xB7, 0x99, 0xB8, 0x99, 0xB9, /* 0xE0-0xE3 */ + 0x99, 0xBA, 0x99, 0xBB, 0x99, 0xBC, 0x99, 0xBD, /* 0xE4-0xE7 */ + 0x99, 0xBE, 0x99, 0xBF, 0x99, 0xC0, 0x99, 0xC1, /* 0xE8-0xEB */ + 0x99, 0xC2, 0x99, 0xC3, 0x99, 0xC4, 0x99, 0xC5, /* 0xEC-0xEF */ + 0x99, 0xC6, 0x99, 0xC7, 0x99, 0xC8, 0x99, 0xC9, /* 0xF0-0xF3 */ + 0x99, 0xCA, 0x99, 0xCB, 0x99, 0xCC, 0x99, 0xCD, /* 0xF4-0xF7 */ + 0x99, 0xCE, 0x99, 0xCF, 0x99, 0xD0, 0x99, 0xD1, /* 0xF8-0xFB */ + 0x99, 0xD2, 0x99, 0xD3, 0x99, 0xD4, 0x99, 0xD5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6B[512] = { + 0x99, 0xD6, 0x99, 0xD7, 0x99, 0xD8, 0x99, 0xD9, /* 0x00-0x03 */ + 0x99, 0xDA, 0x99, 0xDB, 0x99, 0xDC, 0x99, 0xDD, /* 0x04-0x07 */ + 0x99, 0xDE, 0x99, 0xDF, 0x99, 0xE0, 0x99, 0xE1, /* 0x08-0x0B */ + 0x99, 0xE2, 0x99, 0xE3, 0x99, 0xE4, 0x99, 0xE5, /* 0x0C-0x0F */ + 0x99, 0xE6, 0x99, 0xE7, 0x99, 0xE8, 0x99, 0xE9, /* 0x10-0x13 */ + 0x99, 0xEA, 0x99, 0xEB, 0x99, 0xEC, 0x99, 0xED, /* 0x14-0x17 */ + 0x99, 0xEE, 0x99, 0xEF, 0x99, 0xF0, 0x99, 0xF1, /* 0x18-0x1B */ + 0x99, 0xF2, 0x99, 0xF3, 0x99, 0xF4, 0x99, 0xF5, /* 0x1C-0x1F */ + 0xC7, 0xB7, 0xB4, 0xCE, 0xBB, 0xB6, 0xD0, 0xC0, /* 0x20-0x23 */ + 0xEC, 0xA3, 0x99, 0xF6, 0x99, 0xF7, 0xC5, 0xB7, /* 0x24-0x27 */ + 0x99, 0xF8, 0x99, 0xF9, 0x99, 0xFA, 0x99, 0xFB, /* 0x28-0x2B */ + 0x99, 0xFC, 0x99, 0xFD, 0x99, 0xFE, 0x9A, 0x40, /* 0x2C-0x2F */ + 0x9A, 0x41, 0x9A, 0x42, 0xD3, 0xFB, 0x9A, 0x43, /* 0x30-0x33 */ + 0x9A, 0x44, 0x9A, 0x45, 0x9A, 0x46, 0xEC, 0xA4, /* 0x34-0x37 */ + 0x9A, 0x47, 0xEC, 0xA5, 0xC6, 0xDB, 0x9A, 0x48, /* 0x38-0x3B */ + 0x9A, 0x49, 0x9A, 0x4A, 0xBF, 0xEE, 0x9A, 0x4B, /* 0x3C-0x3F */ + 0x9A, 0x4C, 0x9A, 0x4D, 0x9A, 0x4E, 0xEC, 0xA6, /* 0x40-0x43 */ + 0x9A, 0x4F, 0x9A, 0x50, 0xEC, 0xA7, 0xD0, 0xAA, /* 0x44-0x47 */ + 0x9A, 0x51, 0xC7, 0xB8, 0x9A, 0x52, 0x9A, 0x53, /* 0x48-0x4B */ + 0xB8, 0xE8, 0x9A, 0x54, 0x9A, 0x55, 0x9A, 0x56, /* 0x4C-0x4F */ + 0x9A, 0x57, 0x9A, 0x58, 0x9A, 0x59, 0x9A, 0x5A, /* 0x50-0x53 */ + 0x9A, 0x5B, 0x9A, 0x5C, 0x9A, 0x5D, 0x9A, 0x5E, /* 0x54-0x57 */ + 0x9A, 0x5F, 0xEC, 0xA8, 0x9A, 0x60, 0x9A, 0x61, /* 0x58-0x5B */ + 0x9A, 0x62, 0x9A, 0x63, 0x9A, 0x64, 0x9A, 0x65, /* 0x5C-0x5F */ + 0x9A, 0x66, 0x9A, 0x67, 0xD6, 0xB9, 0xD5, 0xFD, /* 0x60-0x63 */ + 0xB4, 0xCB, 0xB2, 0xBD, 0xCE, 0xE4, 0xC6, 0xE7, /* 0x64-0x67 */ + 0x9A, 0x68, 0x9A, 0x69, 0xCD, 0xE1, 0x9A, 0x6A, /* 0x68-0x6B */ + 0x9A, 0x6B, 0x9A, 0x6C, 0x9A, 0x6D, 0x9A, 0x6E, /* 0x6C-0x6F */ + 0x9A, 0x6F, 0x9A, 0x70, 0x9A, 0x71, 0x9A, 0x72, /* 0x70-0x73 */ + 0x9A, 0x73, 0x9A, 0x74, 0x9A, 0x75, 0x9A, 0x76, /* 0x74-0x77 */ + 0x9A, 0x77, 0xB4, 0xF5, 0x9A, 0x78, 0xCB, 0xC0, /* 0x78-0x7B */ + 0xBC, 0xDF, 0x9A, 0x79, 0x9A, 0x7A, 0x9A, 0x7B, /* 0x7C-0x7F */ + + 0x9A, 0x7C, 0xE9, 0xE2, 0xE9, 0xE3, 0xD1, 0xEA, /* 0x80-0x83 */ + 0xE9, 0xE5, 0x9A, 0x7D, 0xB4, 0xF9, 0xE9, 0xE4, /* 0x84-0x87 */ + 0x9A, 0x7E, 0xD1, 0xB3, 0xCA, 0xE2, 0xB2, 0xD0, /* 0x88-0x8B */ + 0x9A, 0x80, 0xE9, 0xE8, 0x9A, 0x81, 0x9A, 0x82, /* 0x8C-0x8F */ + 0x9A, 0x83, 0x9A, 0x84, 0xE9, 0xE6, 0xE9, 0xE7, /* 0x90-0x93 */ + 0x9A, 0x85, 0x9A, 0x86, 0xD6, 0xB3, 0x9A, 0x87, /* 0x94-0x97 */ + 0x9A, 0x88, 0x9A, 0x89, 0xE9, 0xE9, 0xE9, 0xEA, /* 0x98-0x9B */ + 0x9A, 0x8A, 0x9A, 0x8B, 0x9A, 0x8C, 0x9A, 0x8D, /* 0x9C-0x9F */ + 0x9A, 0x8E, 0xE9, 0xEB, 0x9A, 0x8F, 0x9A, 0x90, /* 0xA0-0xA3 */ + 0x9A, 0x91, 0x9A, 0x92, 0x9A, 0x93, 0x9A, 0x94, /* 0xA4-0xA7 */ + 0x9A, 0x95, 0x9A, 0x96, 0xE9, 0xEC, 0x9A, 0x97, /* 0xA8-0xAB */ + 0x9A, 0x98, 0x9A, 0x99, 0x9A, 0x9A, 0x9A, 0x9B, /* 0xAC-0xAF */ + 0x9A, 0x9C, 0x9A, 0x9D, 0x9A, 0x9E, 0xEC, 0xAF, /* 0xB0-0xB3 */ + 0xC5, 0xB9, 0xB6, 0xCE, 0x9A, 0x9F, 0xD2, 0xF3, /* 0xB4-0xB7 */ + 0x9A, 0xA0, 0x9A, 0xA1, 0x9A, 0xA2, 0x9A, 0xA3, /* 0xB8-0xBB */ + 0x9A, 0xA4, 0x9A, 0xA5, 0x9A, 0xA6, 0xB5, 0xEE, /* 0xBC-0xBF */ + 0x9A, 0xA7, 0xBB, 0xD9, 0xEC, 0xB1, 0x9A, 0xA8, /* 0xC0-0xC3 */ + 0x9A, 0xA9, 0xD2, 0xE3, 0x9A, 0xAA, 0x9A, 0xAB, /* 0xC4-0xC7 */ + 0x9A, 0xAC, 0x9A, 0xAD, 0x9A, 0xAE, 0xCE, 0xE3, /* 0xC8-0xCB */ + 0x9A, 0xAF, 0xC4, 0xB8, 0x9A, 0xB0, 0xC3, 0xBF, /* 0xCC-0xCF */ + 0x9A, 0xB1, 0x9A, 0xB2, 0xB6, 0xBE, 0xD8, 0xB9, /* 0xD0-0xD3 */ + 0xB1, 0xC8, 0xB1, 0xCF, 0xB1, 0xD1, 0xC5, 0xFE, /* 0xD4-0xD7 */ + 0x9A, 0xB3, 0xB1, 0xD0, 0x9A, 0xB4, 0xC3, 0xAB, /* 0xD8-0xDB */ + 0x9A, 0xB5, 0x9A, 0xB6, 0x9A, 0xB7, 0x9A, 0xB8, /* 0xDC-0xDF */ + 0x9A, 0xB9, 0xD5, 0xB1, 0x9A, 0xBA, 0x9A, 0xBB, /* 0xE0-0xE3 */ + 0x9A, 0xBC, 0x9A, 0xBD, 0x9A, 0xBE, 0x9A, 0xBF, /* 0xE4-0xE7 */ + 0x9A, 0xC0, 0x9A, 0xC1, 0xEB, 0xA4, 0xBA, 0xC1, /* 0xE8-0xEB */ + 0x9A, 0xC2, 0x9A, 0xC3, 0x9A, 0xC4, 0xCC, 0xBA, /* 0xEC-0xEF */ + 0x9A, 0xC5, 0x9A, 0xC6, 0x9A, 0xC7, 0xEB, 0xA5, /* 0xF0-0xF3 */ + 0x9A, 0xC8, 0xEB, 0xA7, 0x9A, 0xC9, 0x9A, 0xCA, /* 0xF4-0xF7 */ + 0x9A, 0xCB, 0xEB, 0xA8, 0x9A, 0xCC, 0x9A, 0xCD, /* 0xF8-0xFB */ + 0x9A, 0xCE, 0xEB, 0xA6, 0x9A, 0xCF, 0x9A, 0xD0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6C[512] = { + 0x9A, 0xD1, 0x9A, 0xD2, 0x9A, 0xD3, 0x9A, 0xD4, /* 0x00-0x03 */ + 0x9A, 0xD5, 0xEB, 0xA9, 0xEB, 0xAB, 0xEB, 0xAA, /* 0x04-0x07 */ + 0x9A, 0xD6, 0x9A, 0xD7, 0x9A, 0xD8, 0x9A, 0xD9, /* 0x08-0x0B */ + 0x9A, 0xDA, 0xEB, 0xAC, 0x9A, 0xDB, 0xCA, 0xCF, /* 0x0C-0x0F */ + 0xD8, 0xB5, 0xC3, 0xF1, 0x9A, 0xDC, 0xC3, 0xA5, /* 0x10-0x13 */ + 0xC6, 0xF8, 0xEB, 0xAD, 0xC4, 0xCA, 0x9A, 0xDD, /* 0x14-0x17 */ + 0xEB, 0xAE, 0xEB, 0xAF, 0xEB, 0xB0, 0xB7, 0xD5, /* 0x18-0x1B */ + 0x9A, 0xDE, 0x9A, 0xDF, 0x9A, 0xE0, 0xB7, 0xFA, /* 0x1C-0x1F */ + 0x9A, 0xE1, 0xEB, 0xB1, 0xC7, 0xE2, 0x9A, 0xE2, /* 0x20-0x23 */ + 0xEB, 0xB3, 0x9A, 0xE3, 0xBA, 0xA4, 0xD1, 0xF5, /* 0x24-0x27 */ + 0xB0, 0xB1, 0xEB, 0xB2, 0xEB, 0xB4, 0x9A, 0xE4, /* 0x28-0x2B */ + 0x9A, 0xE5, 0x9A, 0xE6, 0xB5, 0xAA, 0xC2, 0xC8, /* 0x2C-0x2F */ + 0xC7, 0xE8, 0x9A, 0xE7, 0xEB, 0xB5, 0x9A, 0xE8, /* 0x30-0x33 */ + 0xCB, 0xAE, 0xE3, 0xDF, 0x9A, 0xE9, 0x9A, 0xEA, /* 0x34-0x37 */ + 0xD3, 0xC0, 0x9A, 0xEB, 0x9A, 0xEC, 0x9A, 0xED, /* 0x38-0x3B */ + 0x9A, 0xEE, 0xD9, 0xDB, 0x9A, 0xEF, 0x9A, 0xF0, /* 0x3C-0x3F */ + 0xCD, 0xA1, 0xD6, 0xAD, 0xC7, 0xF3, 0x9A, 0xF1, /* 0x40-0x43 */ + 0x9A, 0xF2, 0x9A, 0xF3, 0xD9, 0xE0, 0xBB, 0xE3, /* 0x44-0x47 */ + 0x9A, 0xF4, 0xBA, 0xBA, 0xE3, 0xE2, 0x9A, 0xF5, /* 0x48-0x4B */ + 0x9A, 0xF6, 0x9A, 0xF7, 0x9A, 0xF8, 0x9A, 0xF9, /* 0x4C-0x4F */ + 0xCF, 0xAB, 0x9A, 0xFA, 0x9A, 0xFB, 0x9A, 0xFC, /* 0x50-0x53 */ + 0xE3, 0xE0, 0xC9, 0xC7, 0x9A, 0xFD, 0xBA, 0xB9, /* 0x54-0x57 */ + 0x9A, 0xFE, 0x9B, 0x40, 0x9B, 0x41, 0xD1, 0xB4, /* 0x58-0x5B */ + 0xE3, 0xE1, 0xC8, 0xEA, 0xB9, 0xAF, 0xBD, 0xAD, /* 0x5C-0x5F */ + 0xB3, 0xD8, 0xCE, 0xDB, 0x9B, 0x42, 0x9B, 0x43, /* 0x60-0x63 */ + 0xCC, 0xC0, 0x9B, 0x44, 0x9B, 0x45, 0x9B, 0x46, /* 0x64-0x67 */ + 0xE3, 0xE8, 0xE3, 0xE9, 0xCD, 0xF4, 0x9B, 0x47, /* 0x68-0x6B */ + 0x9B, 0x48, 0x9B, 0x49, 0x9B, 0x4A, 0x9B, 0x4B, /* 0x6C-0x6F */ + 0xCC, 0xAD, 0x9B, 0x4C, 0xBC, 0xB3, 0x9B, 0x4D, /* 0x70-0x73 */ + 0xE3, 0xEA, 0x9B, 0x4E, 0xE3, 0xEB, 0x9B, 0x4F, /* 0x74-0x77 */ + 0x9B, 0x50, 0xD0, 0xDA, 0x9B, 0x51, 0x9B, 0x52, /* 0x78-0x7B */ + 0x9B, 0x53, 0xC6, 0xFB, 0xB7, 0xDA, 0x9B, 0x54, /* 0x7C-0x7F */ + + 0x9B, 0x55, 0xC7, 0xDF, 0xD2, 0xCA, 0xCE, 0xD6, /* 0x80-0x83 */ + 0x9B, 0x56, 0xE3, 0xE4, 0xE3, 0xEC, 0x9B, 0x57, /* 0x84-0x87 */ + 0xC9, 0xF2, 0xB3, 0xC1, 0x9B, 0x58, 0x9B, 0x59, /* 0x88-0x8B */ + 0xE3, 0xE7, 0x9B, 0x5A, 0x9B, 0x5B, 0xC6, 0xE3, /* 0x8C-0x8F */ + 0xE3, 0xE5, 0x9B, 0x5C, 0x9B, 0x5D, 0xED, 0xB3, /* 0x90-0x93 */ + 0xE3, 0xE6, 0x9B, 0x5E, 0x9B, 0x5F, 0x9B, 0x60, /* 0x94-0x97 */ + 0x9B, 0x61, 0xC9, 0xB3, 0x9B, 0x62, 0xC5, 0xE6, /* 0x98-0x9B */ + 0x9B, 0x63, 0x9B, 0x64, 0x9B, 0x65, 0xB9, 0xB5, /* 0x9C-0x9F */ + 0x9B, 0x66, 0xC3, 0xBB, 0x9B, 0x67, 0xE3, 0xE3, /* 0xA0-0xA3 */ + 0xC5, 0xBD, 0xC1, 0xA4, 0xC2, 0xD9, 0xB2, 0xD7, /* 0xA4-0xA7 */ + 0x9B, 0x68, 0xE3, 0xED, 0xBB, 0xA6, 0xC4, 0xAD, /* 0xA8-0xAB */ + 0x9B, 0x69, 0xE3, 0xF0, 0xBE, 0xDA, 0x9B, 0x6A, /* 0xAC-0xAF */ + 0x9B, 0x6B, 0xE3, 0xFB, 0xE3, 0xF5, 0xBA, 0xD3, /* 0xB0-0xB3 */ + 0x9B, 0x6C, 0x9B, 0x6D, 0x9B, 0x6E, 0x9B, 0x6F, /* 0xB4-0xB7 */ + 0xB7, 0xD0, 0xD3, 0xCD, 0x9B, 0x70, 0xD6, 0xCE, /* 0xB8-0xBB */ + 0xD5, 0xD3, 0xB9, 0xC1, 0xD5, 0xB4, 0xD1, 0xD8, /* 0xBC-0xBF */ + 0x9B, 0x71, 0x9B, 0x72, 0x9B, 0x73, 0x9B, 0x74, /* 0xC0-0xC3 */ + 0xD0, 0xB9, 0xC7, 0xF6, 0x9B, 0x75, 0x9B, 0x76, /* 0xC4-0xC7 */ + 0x9B, 0x77, 0xC8, 0xAA, 0xB2, 0xB4, 0x9B, 0x78, /* 0xC8-0xCB */ + 0xC3, 0xDA, 0x9B, 0x79, 0x9B, 0x7A, 0x9B, 0x7B, /* 0xCC-0xCF */ + 0xE3, 0xEE, 0x9B, 0x7C, 0x9B, 0x7D, 0xE3, 0xFC, /* 0xD0-0xD3 */ + 0xE3, 0xEF, 0xB7, 0xA8, 0xE3, 0xF7, 0xE3, 0xF4, /* 0xD4-0xD7 */ + 0x9B, 0x7E, 0x9B, 0x80, 0x9B, 0x81, 0xB7, 0xBA, /* 0xD8-0xDB */ + 0x9B, 0x82, 0x9B, 0x83, 0xC5, 0xA2, 0x9B, 0x84, /* 0xDC-0xDF */ + 0xE3, 0xF6, 0xC5, 0xDD, 0xB2, 0xA8, 0xC6, 0xFC, /* 0xE0-0xE3 */ + 0x9B, 0x85, 0xC4, 0xE0, 0x9B, 0x86, 0x9B, 0x87, /* 0xE4-0xE7 */ + 0xD7, 0xA2, 0x9B, 0x88, 0xC0, 0xE1, 0xE3, 0xF9, /* 0xE8-0xEB */ + 0x9B, 0x89, 0x9B, 0x8A, 0xE3, 0xFA, 0xE3, 0xFD, /* 0xEC-0xEF */ + 0xCC, 0xA9, 0xE3, 0xF3, 0x9B, 0x8B, 0xD3, 0xBE, /* 0xF0-0xF3 */ + 0x9B, 0x8C, 0xB1, 0xC3, 0xED, 0xB4, 0xE3, 0xF1, /* 0xF4-0xF7 */ + 0xE3, 0xF2, 0x9B, 0x8D, 0xE3, 0xF8, 0xD0, 0xBA, /* 0xF8-0xFB */ + 0xC6, 0xC3, 0xD4, 0xF3, 0xE3, 0xFE, 0x9B, 0x8E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6D[512] = { + 0x9B, 0x8F, 0xBD, 0xE0, 0x9B, 0x90, 0x9B, 0x91, /* 0x00-0x03 */ + 0xE4, 0xA7, 0x9B, 0x92, 0x9B, 0x93, 0xE4, 0xA6, /* 0x04-0x07 */ + 0x9B, 0x94, 0x9B, 0x95, 0x9B, 0x96, 0xD1, 0xF3, /* 0x08-0x0B */ + 0xE4, 0xA3, 0x9B, 0x97, 0xE4, 0xA9, 0x9B, 0x98, /* 0x0C-0x0F */ + 0x9B, 0x99, 0x9B, 0x9A, 0xC8, 0xF7, 0x9B, 0x9B, /* 0x10-0x13 */ + 0x9B, 0x9C, 0x9B, 0x9D, 0x9B, 0x9E, 0xCF, 0xB4, /* 0x14-0x17 */ + 0x9B, 0x9F, 0xE4, 0xA8, 0xE4, 0xAE, 0xC2, 0xE5, /* 0x18-0x1B */ + 0x9B, 0xA0, 0x9B, 0xA1, 0xB6, 0xB4, 0x9B, 0xA2, /* 0x1C-0x1F */ + 0x9B, 0xA3, 0x9B, 0xA4, 0x9B, 0xA5, 0x9B, 0xA6, /* 0x20-0x23 */ + 0x9B, 0xA7, 0xBD, 0xF2, 0x9B, 0xA8, 0xE4, 0xA2, /* 0x24-0x27 */ + 0x9B, 0xA9, 0x9B, 0xAA, 0xBA, 0xE9, 0xE4, 0xAA, /* 0x28-0x2B */ + 0x9B, 0xAB, 0x9B, 0xAC, 0xE4, 0xAC, 0x9B, 0xAD, /* 0x2C-0x2F */ + 0x9B, 0xAE, 0xB6, 0xFD, 0xD6, 0xDE, 0xE4, 0xB2, /* 0x30-0x33 */ + 0x9B, 0xAF, 0xE4, 0xAD, 0x9B, 0xB0, 0x9B, 0xB1, /* 0x34-0x37 */ + 0x9B, 0xB2, 0xE4, 0xA1, 0x9B, 0xB3, 0xBB, 0xEE, /* 0x38-0x3B */ + 0xCD, 0xDD, 0xC7, 0xA2, 0xC5, 0xC9, 0x9B, 0xB4, /* 0x3C-0x3F */ + 0x9B, 0xB5, 0xC1, 0xF7, 0x9B, 0xB6, 0xE4, 0xA4, /* 0x40-0x43 */ + 0x9B, 0xB7, 0xC7, 0xB3, 0xBD, 0xAC, 0xBD, 0xBD, /* 0x44-0x47 */ + 0xE4, 0xA5, 0x9B, 0xB8, 0xD7, 0xC7, 0xB2, 0xE2, /* 0x48-0x4B */ + 0x9B, 0xB9, 0xE4, 0xAB, 0xBC, 0xC3, 0xE4, 0xAF, /* 0x4C-0x4F */ + 0x9B, 0xBA, 0xBB, 0xEB, 0xE4, 0xB0, 0xC5, 0xA8, /* 0x50-0x53 */ + 0xE4, 0xB1, 0x9B, 0xBB, 0x9B, 0xBC, 0x9B, 0xBD, /* 0x54-0x57 */ + 0x9B, 0xBE, 0xD5, 0xE3, 0xBF, 0xA3, 0x9B, 0xBF, /* 0x58-0x5B */ + 0xE4, 0xBA, 0x9B, 0xC0, 0xE4, 0xB7, 0x9B, 0xC1, /* 0x5C-0x5F */ + 0xE4, 0xBB, 0x9B, 0xC2, 0x9B, 0xC3, 0xE4, 0xBD, /* 0x60-0x63 */ + 0x9B, 0xC4, 0x9B, 0xC5, 0xC6, 0xD6, 0x9B, 0xC6, /* 0x64-0x67 */ + 0x9B, 0xC7, 0xBA, 0xC6, 0xC0, 0xCB, 0x9B, 0xC8, /* 0x68-0x6B */ + 0x9B, 0xC9, 0x9B, 0xCA, 0xB8, 0xA1, 0xE4, 0xB4, /* 0x6C-0x6F */ + 0x9B, 0xCB, 0x9B, 0xCC, 0x9B, 0xCD, 0x9B, 0xCE, /* 0x70-0x73 */ + 0xD4, 0xA1, 0x9B, 0xCF, 0x9B, 0xD0, 0xBA, 0xA3, /* 0x74-0x77 */ + 0xBD, 0xFE, 0x9B, 0xD1, 0x9B, 0xD2, 0x9B, 0xD3, /* 0x78-0x7B */ + 0xE4, 0xBC, 0x9B, 0xD4, 0x9B, 0xD5, 0x9B, 0xD6, /* 0x7C-0x7F */ + + 0x9B, 0xD7, 0x9B, 0xD8, 0xCD, 0xBF, 0x9B, 0xD9, /* 0x80-0x83 */ + 0x9B, 0xDA, 0xC4, 0xF9, 0x9B, 0xDB, 0x9B, 0xDC, /* 0x84-0x87 */ + 0xCF, 0xFB, 0xC9, 0xE6, 0x9B, 0xDD, 0x9B, 0xDE, /* 0x88-0x8B */ + 0xD3, 0xBF, 0x9B, 0xDF, 0xCF, 0xD1, 0x9B, 0xE0, /* 0x8C-0x8F */ + 0x9B, 0xE1, 0xE4, 0xB3, 0x9B, 0xE2, 0xE4, 0xB8, /* 0x90-0x93 */ + 0xE4, 0xB9, 0xCC, 0xE9, 0x9B, 0xE3, 0x9B, 0xE4, /* 0x94-0x97 */ + 0x9B, 0xE5, 0x9B, 0xE6, 0x9B, 0xE7, 0xCC, 0xCE, /* 0x98-0x9B */ + 0x9B, 0xE8, 0xC0, 0xD4, 0xE4, 0xB5, 0xC1, 0xB0, /* 0x9C-0x9F */ + 0xE4, 0xB6, 0xCE, 0xD0, 0x9B, 0xE9, 0xBB, 0xC1, /* 0xA0-0xA3 */ + 0xB5, 0xD3, 0x9B, 0xEA, 0xC8, 0xF3, 0xBD, 0xA7, /* 0xA4-0xA7 */ + 0xD5, 0xC7, 0xC9, 0xAC, 0xB8, 0xA2, 0xE4, 0xCA, /* 0xA8-0xAB */ + 0x9B, 0xEB, 0x9B, 0xEC, 0xE4, 0xCC, 0xD1, 0xC4, /* 0xAC-0xAF */ + 0x9B, 0xED, 0x9B, 0xEE, 0xD2, 0xBA, 0x9B, 0xEF, /* 0xB0-0xB3 */ + 0x9B, 0xF0, 0xBA, 0xAD, 0x9B, 0xF1, 0x9B, 0xF2, /* 0xB4-0xB7 */ + 0xBA, 0xD4, 0x9B, 0xF3, 0x9B, 0xF4, 0x9B, 0xF5, /* 0xB8-0xBB */ + 0x9B, 0xF6, 0x9B, 0xF7, 0x9B, 0xF8, 0xE4, 0xC3, /* 0xBC-0xBF */ + 0xB5, 0xED, 0x9B, 0xF9, 0x9B, 0xFA, 0x9B, 0xFB, /* 0xC0-0xC3 */ + 0xD7, 0xCD, 0xE4, 0xC0, 0xCF, 0xFD, 0xE4, 0xBF, /* 0xC4-0xC7 */ + 0x9B, 0xFC, 0x9B, 0xFD, 0x9B, 0xFE, 0xC1, 0xDC, /* 0xC8-0xCB */ + 0xCC, 0xCA, 0x9C, 0x40, 0x9C, 0x41, 0x9C, 0x42, /* 0xCC-0xCF */ + 0x9C, 0x43, 0xCA, 0xE7, 0x9C, 0x44, 0x9C, 0x45, /* 0xD0-0xD3 */ + 0x9C, 0x46, 0x9C, 0x47, 0xC4, 0xD7, 0x9C, 0x48, /* 0xD4-0xD7 */ + 0xCC, 0xD4, 0xE4, 0xC8, 0x9C, 0x49, 0x9C, 0x4A, /* 0xD8-0xDB */ + 0x9C, 0x4B, 0xE4, 0xC7, 0xE4, 0xC1, 0x9C, 0x4C, /* 0xDC-0xDF */ + 0xE4, 0xC4, 0xB5, 0xAD, 0x9C, 0x4D, 0x9C, 0x4E, /* 0xE0-0xE3 */ + 0xD3, 0xD9, 0x9C, 0x4F, 0xE4, 0xC6, 0x9C, 0x50, /* 0xE4-0xE7 */ + 0x9C, 0x51, 0x9C, 0x52, 0x9C, 0x53, 0xD2, 0xF9, /* 0xE8-0xEB */ + 0xB4, 0xE3, 0x9C, 0x54, 0xBB, 0xB4, 0x9C, 0x55, /* 0xEC-0xEF */ + 0x9C, 0x56, 0xC9, 0xEE, 0x9C, 0x57, 0xB4, 0xBE, /* 0xF0-0xF3 */ + 0x9C, 0x58, 0x9C, 0x59, 0x9C, 0x5A, 0xBB, 0xEC, /* 0xF4-0xF7 */ + 0x9C, 0x5B, 0xD1, 0xCD, 0x9C, 0x5C, 0xCC, 0xED, /* 0xF8-0xFB */ + 0xED, 0xB5, 0x9C, 0x5D, 0x9C, 0x5E, 0x9C, 0x5F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0x9C, 0x60, 0x9C, 0x61, 0x9C, 0x62, 0x9C, 0x63, /* 0x00-0x03 */ + 0x9C, 0x64, 0xC7, 0xE5, 0x9C, 0x65, 0x9C, 0x66, /* 0x04-0x07 */ + 0x9C, 0x67, 0x9C, 0x68, 0xD4, 0xA8, 0x9C, 0x69, /* 0x08-0x0B */ + 0xE4, 0xCB, 0xD7, 0xD5, 0xE4, 0xC2, 0x9C, 0x6A, /* 0x0C-0x0F */ + 0xBD, 0xA5, 0xE4, 0xC5, 0x9C, 0x6B, 0x9C, 0x6C, /* 0x10-0x13 */ + 0xD3, 0xE6, 0x9C, 0x6D, 0xE4, 0xC9, 0xC9, 0xF8, /* 0x14-0x17 */ + 0x9C, 0x6E, 0x9C, 0x6F, 0xE4, 0xBE, 0x9C, 0x70, /* 0x18-0x1B */ + 0x9C, 0x71, 0xD3, 0xE5, 0x9C, 0x72, 0x9C, 0x73, /* 0x1C-0x1F */ + 0xC7, 0xFE, 0xB6, 0xC9, 0x9C, 0x74, 0xD4, 0xFC, /* 0x20-0x23 */ + 0xB2, 0xB3, 0xE4, 0xD7, 0x9C, 0x75, 0x9C, 0x76, /* 0x24-0x27 */ + 0x9C, 0x77, 0xCE, 0xC2, 0x9C, 0x78, 0xE4, 0xCD, /* 0x28-0x2B */ + 0x9C, 0x79, 0xCE, 0xBC, 0x9C, 0x7A, 0xB8, 0xDB, /* 0x2C-0x2F */ + 0x9C, 0x7B, 0x9C, 0x7C, 0xE4, 0xD6, 0x9C, 0x7D, /* 0x30-0x33 */ + 0xBF, 0xCA, 0x9C, 0x7E, 0x9C, 0x80, 0x9C, 0x81, /* 0x34-0x37 */ + 0xD3, 0xCE, 0x9C, 0x82, 0xC3, 0xEC, 0x9C, 0x83, /* 0x38-0x3B */ + 0x9C, 0x84, 0x9C, 0x85, 0x9C, 0x86, 0x9C, 0x87, /* 0x3C-0x3F */ + 0x9C, 0x88, 0x9C, 0x89, 0x9C, 0x8A, 0xC5, 0xC8, /* 0x40-0x43 */ + 0xE4, 0xD8, 0x9C, 0x8B, 0x9C, 0x8C, 0x9C, 0x8D, /* 0x44-0x47 */ + 0x9C, 0x8E, 0x9C, 0x8F, 0x9C, 0x90, 0x9C, 0x91, /* 0x48-0x4B */ + 0x9C, 0x92, 0xCD, 0xC4, 0xE4, 0xCF, 0x9C, 0x93, /* 0x4C-0x4F */ + 0x9C, 0x94, 0x9C, 0x95, 0x9C, 0x96, 0xE4, 0xD4, /* 0x50-0x53 */ + 0xE4, 0xD5, 0x9C, 0x97, 0xBA, 0xFE, 0x9C, 0x98, /* 0x54-0x57 */ + 0xCF, 0xE6, 0x9C, 0x99, 0x9C, 0x9A, 0xD5, 0xBF, /* 0x58-0x5B */ + 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9D, 0xE4, 0xD2, /* 0x5C-0x5F */ + 0x9C, 0x9E, 0x9C, 0x9F, 0x9C, 0xA0, 0x9C, 0xA1, /* 0x60-0x63 */ + 0x9C, 0xA2, 0x9C, 0xA3, 0x9C, 0xA4, 0x9C, 0xA5, /* 0x64-0x67 */ + 0x9C, 0xA6, 0x9C, 0xA7, 0x9C, 0xA8, 0xE4, 0xD0, /* 0x68-0x6B */ + 0x9C, 0xA9, 0x9C, 0xAA, 0xE4, 0xCE, 0x9C, 0xAB, /* 0x6C-0x6F */ + 0x9C, 0xAC, 0x9C, 0xAD, 0x9C, 0xAE, 0x9C, 0xAF, /* 0x70-0x73 */ + 0x9C, 0xB0, 0x9C, 0xB1, 0x9C, 0xB2, 0x9C, 0xB3, /* 0x74-0x77 */ + 0x9C, 0xB4, 0x9C, 0xB5, 0x9C, 0xB6, 0x9C, 0xB7, /* 0x78-0x7B */ + 0x9C, 0xB8, 0x9C, 0xB9, 0xCD, 0xE5, 0xCA, 0xAA, /* 0x7C-0x7F */ + + 0x9C, 0xBA, 0x9C, 0xBB, 0x9C, 0xBC, 0xC0, 0xA3, /* 0x80-0x83 */ + 0x9C, 0xBD, 0xBD, 0xA6, 0xE4, 0xD3, 0x9C, 0xBE, /* 0x84-0x87 */ + 0x9C, 0xBF, 0xB8, 0xC8, 0x9C, 0xC0, 0x9C, 0xC1, /* 0x88-0x8B */ + 0x9C, 0xC2, 0x9C, 0xC3, 0x9C, 0xC4, 0xE4, 0xE7, /* 0x8C-0x8F */ + 0xD4, 0xB4, 0x9C, 0xC5, 0x9C, 0xC6, 0x9C, 0xC7, /* 0x90-0x93 */ + 0x9C, 0xC8, 0x9C, 0xC9, 0x9C, 0xCA, 0x9C, 0xCB, /* 0x94-0x97 */ + 0xE4, 0xDB, 0x9C, 0xCC, 0x9C, 0xCD, 0x9C, 0xCE, /* 0x98-0x9B */ + 0xC1, 0xEF, 0x9C, 0xCF, 0x9C, 0xD0, 0xE4, 0xE9, /* 0x9C-0x9F */ + 0x9C, 0xD1, 0x9C, 0xD2, 0xD2, 0xE7, 0x9C, 0xD3, /* 0xA0-0xA3 */ + 0x9C, 0xD4, 0xE4, 0xDF, 0x9C, 0xD5, 0xE4, 0xE0, /* 0xA4-0xA7 */ + 0x9C, 0xD6, 0x9C, 0xD7, 0xCF, 0xAA, 0x9C, 0xD8, /* 0xA8-0xAB */ + 0x9C, 0xD9, 0x9C, 0xDA, 0x9C, 0xDB, 0xCB, 0xDD, /* 0xAC-0xAF */ + 0x9C, 0xDC, 0xE4, 0xDA, 0xE4, 0xD1, 0x9C, 0xDD, /* 0xB0-0xB3 */ + 0xE4, 0xE5, 0x9C, 0xDE, 0xC8, 0xDC, 0xE4, 0xE3, /* 0xB4-0xB7 */ + 0x9C, 0xDF, 0x9C, 0xE0, 0xC4, 0xE7, 0xE4, 0xE2, /* 0xB8-0xBB */ + 0x9C, 0xE1, 0xE4, 0xE1, 0x9C, 0xE2, 0x9C, 0xE3, /* 0xBC-0xBF */ + 0x9C, 0xE4, 0xB3, 0xFC, 0xE4, 0xE8, 0x9C, 0xE5, /* 0xC0-0xC3 */ + 0x9C, 0xE6, 0x9C, 0xE7, 0x9C, 0xE8, 0xB5, 0xE1, /* 0xC4-0xC7 */ + 0x9C, 0xE9, 0x9C, 0xEA, 0x9C, 0xEB, 0xD7, 0xCC, /* 0xC8-0xCB */ + 0x9C, 0xEC, 0x9C, 0xED, 0x9C, 0xEE, 0xE4, 0xE6, /* 0xCC-0xCF */ + 0x9C, 0xEF, 0xBB, 0xAC, 0x9C, 0xF0, 0xD7, 0xD2, /* 0xD0-0xD3 */ + 0xCC, 0xCF, 0xEB, 0xF8, 0x9C, 0xF1, 0xE4, 0xE4, /* 0xD4-0xD7 */ + 0x9C, 0xF2, 0x9C, 0xF3, 0xB9, 0xF6, 0x9C, 0xF4, /* 0xD8-0xDB */ + 0x9C, 0xF5, 0x9C, 0xF6, 0xD6, 0xCD, 0xE4, 0xD9, /* 0xDC-0xDF */ + 0xE4, 0xDC, 0xC2, 0xFA, 0xE4, 0xDE, 0x9C, 0xF7, /* 0xE0-0xE3 */ + 0xC2, 0xCB, 0xC0, 0xC4, 0xC2, 0xD0, 0x9C, 0xF8, /* 0xE4-0xE7 */ + 0xB1, 0xF5, 0xCC, 0xB2, 0x9C, 0xF9, 0x9C, 0xFA, /* 0xE8-0xEB */ + 0x9C, 0xFB, 0x9C, 0xFC, 0x9C, 0xFD, 0x9C, 0xFE, /* 0xEC-0xEF */ + 0x9D, 0x40, 0x9D, 0x41, 0x9D, 0x42, 0x9D, 0x43, /* 0xF0-0xF3 */ + 0xB5, 0xCE, 0x9D, 0x44, 0x9D, 0x45, 0x9D, 0x46, /* 0xF4-0xF7 */ + 0x9D, 0x47, 0xE4, 0xEF, 0x9D, 0x48, 0x9D, 0x49, /* 0xF8-0xFB */ + 0x9D, 0x4A, 0x9D, 0x4B, 0x9D, 0x4C, 0x9D, 0x4D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0x9D, 0x4E, 0x9D, 0x4F, 0xC6, 0xAF, 0x9D, 0x50, /* 0x00-0x03 */ + 0x9D, 0x51, 0x9D, 0x52, 0xC6, 0xE1, 0x9D, 0x53, /* 0x04-0x07 */ + 0x9D, 0x54, 0xE4, 0xF5, 0x9D, 0x55, 0x9D, 0x56, /* 0x08-0x0B */ + 0x9D, 0x57, 0x9D, 0x58, 0x9D, 0x59, 0xC2, 0xA9, /* 0x0C-0x0F */ + 0x9D, 0x5A, 0x9D, 0x5B, 0x9D, 0x5C, 0xC0, 0xEC, /* 0x10-0x13 */ + 0xD1, 0xDD, 0xE4, 0xEE, 0x9D, 0x5D, 0x9D, 0x5E, /* 0x14-0x17 */ + 0x9D, 0x5F, 0x9D, 0x60, 0x9D, 0x61, 0x9D, 0x62, /* 0x18-0x1B */ + 0x9D, 0x63, 0x9D, 0x64, 0x9D, 0x65, 0x9D, 0x66, /* 0x1C-0x1F */ + 0xC4, 0xAE, 0x9D, 0x67, 0x9D, 0x68, 0x9D, 0x69, /* 0x20-0x23 */ + 0xE4, 0xED, 0x9D, 0x6A, 0x9D, 0x6B, 0x9D, 0x6C, /* 0x24-0x27 */ + 0x9D, 0x6D, 0xE4, 0xF6, 0xE4, 0xF4, 0xC2, 0xFE, /* 0x28-0x2B */ + 0x9D, 0x6E, 0xE4, 0xDD, 0x9D, 0x6F, 0xE4, 0xF0, /* 0x2C-0x2F */ + 0x9D, 0x70, 0xCA, 0xFE, 0x9D, 0x71, 0xD5, 0xC4, /* 0x30-0x33 */ + 0x9D, 0x72, 0x9D, 0x73, 0xE4, 0xF1, 0x9D, 0x74, /* 0x34-0x37 */ + 0x9D, 0x75, 0x9D, 0x76, 0x9D, 0x77, 0x9D, 0x78, /* 0x38-0x3B */ + 0x9D, 0x79, 0x9D, 0x7A, 0xD1, 0xFA, 0x9D, 0x7B, /* 0x3C-0x3F */ + 0x9D, 0x7C, 0x9D, 0x7D, 0x9D, 0x7E, 0x9D, 0x80, /* 0x40-0x43 */ + 0x9D, 0x81, 0x9D, 0x82, 0xE4, 0xEB, 0xE4, 0xEC, /* 0x44-0x47 */ + 0x9D, 0x83, 0x9D, 0x84, 0x9D, 0x85, 0xE4, 0xF2, /* 0x48-0x4B */ + 0x9D, 0x86, 0xCE, 0xAB, 0x9D, 0x87, 0x9D, 0x88, /* 0x4C-0x4F */ + 0x9D, 0x89, 0x9D, 0x8A, 0x9D, 0x8B, 0x9D, 0x8C, /* 0x50-0x53 */ + 0x9D, 0x8D, 0x9D, 0x8E, 0x9D, 0x8F, 0x9D, 0x90, /* 0x54-0x57 */ + 0xC5, 0xCB, 0x9D, 0x91, 0x9D, 0x92, 0x9D, 0x93, /* 0x58-0x5B */ + 0xC7, 0xB1, 0x9D, 0x94, 0xC2, 0xBA, 0x9D, 0x95, /* 0x5C-0x5F */ + 0x9D, 0x96, 0x9D, 0x97, 0xE4, 0xEA, 0x9D, 0x98, /* 0x60-0x63 */ + 0x9D, 0x99, 0x9D, 0x9A, 0xC1, 0xCA, 0x9D, 0x9B, /* 0x64-0x67 */ + 0x9D, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9D, 0x9F, /* 0x68-0x6B */ + 0x9D, 0xA0, 0xCC, 0xB6, 0xB3, 0xB1, 0x9D, 0xA1, /* 0x6C-0x6F */ + 0x9D, 0xA2, 0x9D, 0xA3, 0xE4, 0xFB, 0x9D, 0xA4, /* 0x70-0x73 */ + 0xE4, 0xF3, 0x9D, 0xA5, 0x9D, 0xA6, 0x9D, 0xA7, /* 0x74-0x77 */ + 0xE4, 0xFA, 0x9D, 0xA8, 0xE4, 0xFD, 0x9D, 0xA9, /* 0x78-0x7B */ + 0xE4, 0xFC, 0x9D, 0xAA, 0x9D, 0xAB, 0x9D, 0xAC, /* 0x7C-0x7F */ + + 0x9D, 0xAD, 0x9D, 0xAE, 0x9D, 0xAF, 0x9D, 0xB0, /* 0x80-0x83 */ + 0xB3, 0xCE, 0x9D, 0xB1, 0x9D, 0xB2, 0x9D, 0xB3, /* 0x84-0x87 */ + 0xB3, 0xBA, 0xE4, 0xF7, 0x9D, 0xB4, 0x9D, 0xB5, /* 0x88-0x8B */ + 0xE4, 0xF9, 0xE4, 0xF8, 0xC5, 0xEC, 0x9D, 0xB6, /* 0x8C-0x8F */ + 0x9D, 0xB7, 0x9D, 0xB8, 0x9D, 0xB9, 0x9D, 0xBA, /* 0x90-0x93 */ + 0x9D, 0xBB, 0x9D, 0xBC, 0x9D, 0xBD, 0x9D, 0xBE, /* 0x94-0x97 */ + 0x9D, 0xBF, 0x9D, 0xC0, 0x9D, 0xC1, 0x9D, 0xC2, /* 0x98-0x9B */ + 0xC0, 0xBD, 0x9D, 0xC3, 0x9D, 0xC4, 0x9D, 0xC5, /* 0x9C-0x9F */ + 0x9D, 0xC6, 0xD4, 0xE8, 0x9D, 0xC7, 0x9D, 0xC8, /* 0xA0-0xA3 */ + 0x9D, 0xC9, 0x9D, 0xCA, 0x9D, 0xCB, 0xE5, 0xA2, /* 0xA4-0xA7 */ + 0x9D, 0xCC, 0x9D, 0xCD, 0x9D, 0xCE, 0x9D, 0xCF, /* 0xA8-0xAB */ + 0x9D, 0xD0, 0x9D, 0xD1, 0x9D, 0xD2, 0x9D, 0xD3, /* 0xAC-0xAF */ + 0x9D, 0xD4, 0x9D, 0xD5, 0x9D, 0xD6, 0xB0, 0xC4, /* 0xB0-0xB3 */ + 0x9D, 0xD7, 0x9D, 0xD8, 0xE5, 0xA4, 0x9D, 0xD9, /* 0xB4-0xB7 */ + 0x9D, 0xDA, 0xE5, 0xA3, 0x9D, 0xDB, 0x9D, 0xDC, /* 0xB8-0xBB */ + 0x9D, 0xDD, 0x9D, 0xDE, 0x9D, 0xDF, 0x9D, 0xE0, /* 0xBC-0xBF */ + 0xBC, 0xA4, 0x9D, 0xE1, 0xE5, 0xA5, 0x9D, 0xE2, /* 0xC0-0xC3 */ + 0x9D, 0xE3, 0x9D, 0xE4, 0x9D, 0xE5, 0x9D, 0xE6, /* 0xC4-0xC7 */ + 0x9D, 0xE7, 0xE5, 0xA1, 0x9D, 0xE8, 0x9D, 0xE9, /* 0xC8-0xCB */ + 0x9D, 0xEA, 0x9D, 0xEB, 0x9D, 0xEC, 0x9D, 0xED, /* 0xCC-0xCF */ + 0x9D, 0xEE, 0xE4, 0xFE, 0xB1, 0xF4, 0x9D, 0xEF, /* 0xD0-0xD3 */ + 0x9D, 0xF0, 0x9D, 0xF1, 0x9D, 0xF2, 0x9D, 0xF3, /* 0xD4-0xD7 */ + 0x9D, 0xF4, 0x9D, 0xF5, 0x9D, 0xF6, 0x9D, 0xF7, /* 0xD8-0xDB */ + 0x9D, 0xF8, 0x9D, 0xF9, 0xE5, 0xA8, 0x9D, 0xFA, /* 0xDC-0xDF */ + 0xE5, 0xA9, 0xE5, 0xA6, 0x9D, 0xFB, 0x9D, 0xFC, /* 0xE0-0xE3 */ + 0x9D, 0xFD, 0x9D, 0xFE, 0x9E, 0x40, 0x9E, 0x41, /* 0xE4-0xE7 */ + 0x9E, 0x42, 0x9E, 0x43, 0x9E, 0x44, 0x9E, 0x45, /* 0xE8-0xEB */ + 0x9E, 0x46, 0x9E, 0x47, 0xE5, 0xA7, 0xE5, 0xAA, /* 0xEC-0xEF */ + 0x9E, 0x48, 0x9E, 0x49, 0x9E, 0x4A, 0x9E, 0x4B, /* 0xF0-0xF3 */ + 0x9E, 0x4C, 0x9E, 0x4D, 0x9E, 0x4E, 0x9E, 0x4F, /* 0xF4-0xF7 */ + 0x9E, 0x50, 0x9E, 0x51, 0x9E, 0x52, 0x9E, 0x53, /* 0xF8-0xFB */ + 0x9E, 0x54, 0x9E, 0x55, 0x9E, 0x56, 0x9E, 0x57, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0x9E, 0x58, 0x9E, 0x59, 0x9E, 0x5A, 0x9E, 0x5B, /* 0x00-0x03 */ + 0x9E, 0x5C, 0x9E, 0x5D, 0x9E, 0x5E, 0x9E, 0x5F, /* 0x04-0x07 */ + 0x9E, 0x60, 0x9E, 0x61, 0x9E, 0x62, 0x9E, 0x63, /* 0x08-0x0B */ + 0x9E, 0x64, 0x9E, 0x65, 0x9E, 0x66, 0x9E, 0x67, /* 0x0C-0x0F */ + 0x9E, 0x68, 0xC6, 0xD9, 0x9E, 0x69, 0x9E, 0x6A, /* 0x10-0x13 */ + 0x9E, 0x6B, 0x9E, 0x6C, 0x9E, 0x6D, 0x9E, 0x6E, /* 0x14-0x17 */ + 0x9E, 0x6F, 0x9E, 0x70, 0xE5, 0xAB, 0xE5, 0xAD, /* 0x18-0x1B */ + 0x9E, 0x71, 0x9E, 0x72, 0x9E, 0x73, 0x9E, 0x74, /* 0x1C-0x1F */ + 0x9E, 0x75, 0x9E, 0x76, 0x9E, 0x77, 0xE5, 0xAC, /* 0x20-0x23 */ + 0x9E, 0x78, 0x9E, 0x79, 0x9E, 0x7A, 0x9E, 0x7B, /* 0x24-0x27 */ + 0x9E, 0x7C, 0x9E, 0x7D, 0x9E, 0x7E, 0x9E, 0x80, /* 0x28-0x2B */ + 0x9E, 0x81, 0x9E, 0x82, 0x9E, 0x83, 0x9E, 0x84, /* 0x2C-0x2F */ + 0x9E, 0x85, 0x9E, 0x86, 0x9E, 0x87, 0x9E, 0x88, /* 0x30-0x33 */ + 0x9E, 0x89, 0xE5, 0xAF, 0x9E, 0x8A, 0x9E, 0x8B, /* 0x34-0x37 */ + 0x9E, 0x8C, 0xE5, 0xAE, 0x9E, 0x8D, 0x9E, 0x8E, /* 0x38-0x3B */ + 0x9E, 0x8F, 0x9E, 0x90, 0x9E, 0x91, 0x9E, 0x92, /* 0x3C-0x3F */ + 0x9E, 0x93, 0x9E, 0x94, 0x9E, 0x95, 0x9E, 0x96, /* 0x40-0x43 */ + 0x9E, 0x97, 0x9E, 0x98, 0x9E, 0x99, 0x9E, 0x9A, /* 0x44-0x47 */ + 0x9E, 0x9B, 0x9E, 0x9C, 0x9E, 0x9D, 0x9E, 0x9E, /* 0x48-0x4B */ + 0xB9, 0xE0, 0x9E, 0x9F, 0x9E, 0xA0, 0xE5, 0xB0, /* 0x4C-0x4F */ + 0x9E, 0xA1, 0x9E, 0xA2, 0x9E, 0xA3, 0x9E, 0xA4, /* 0x50-0x53 */ + 0x9E, 0xA5, 0x9E, 0xA6, 0x9E, 0xA7, 0x9E, 0xA8, /* 0x54-0x57 */ + 0x9E, 0xA9, 0x9E, 0xAA, 0x9E, 0xAB, 0x9E, 0xAC, /* 0x58-0x5B */ + 0x9E, 0xAD, 0x9E, 0xAE, 0xE5, 0xB1, 0x9E, 0xAF, /* 0x5C-0x5F */ + 0x9E, 0xB0, 0x9E, 0xB1, 0x9E, 0xB2, 0x9E, 0xB3, /* 0x60-0x63 */ + 0x9E, 0xB4, 0x9E, 0xB5, 0x9E, 0xB6, 0x9E, 0xB7, /* 0x64-0x67 */ + 0x9E, 0xB8, 0x9E, 0xB9, 0x9E, 0xBA, 0xBB, 0xF0, /* 0x68-0x6B */ + 0xEC, 0xE1, 0xC3, 0xF0, 0x9E, 0xBB, 0xB5, 0xC6, /* 0x6C-0x6F */ + 0xBB, 0xD2, 0x9E, 0xBC, 0x9E, 0xBD, 0x9E, 0xBE, /* 0x70-0x73 */ + 0x9E, 0xBF, 0xC1, 0xE9, 0xD4, 0xEE, 0x9E, 0xC0, /* 0x74-0x77 */ + 0xBE, 0xC4, 0x9E, 0xC1, 0x9E, 0xC2, 0x9E, 0xC3, /* 0x78-0x7B */ + 0xD7, 0xC6, 0x9E, 0xC4, 0xD4, 0xD6, 0xB2, 0xD3, /* 0x7C-0x7F */ + + 0xEC, 0xBE, 0x9E, 0xC5, 0x9E, 0xC6, 0x9E, 0xC7, /* 0x80-0x83 */ + 0x9E, 0xC8, 0xEA, 0xC1, 0x9E, 0xC9, 0x9E, 0xCA, /* 0x84-0x87 */ + 0x9E, 0xCB, 0xC2, 0xAF, 0xB4, 0xB6, 0x9E, 0xCC, /* 0x88-0x8B */ + 0x9E, 0xCD, 0x9E, 0xCE, 0xD1, 0xD7, 0x9E, 0xCF, /* 0x8C-0x8F */ + 0x9E, 0xD0, 0x9E, 0xD1, 0xB3, 0xB4, 0x9E, 0xD2, /* 0x90-0x93 */ + 0xC8, 0xB2, 0xBF, 0xBB, 0xEC, 0xC0, 0x9E, 0xD3, /* 0x94-0x97 */ + 0x9E, 0xD4, 0xD6, 0xCB, 0x9E, 0xD5, 0x9E, 0xD6, /* 0x98-0x9B */ + 0xEC, 0xBF, 0xEC, 0xC1, 0x9E, 0xD7, 0x9E, 0xD8, /* 0x9C-0x9F */ + 0x9E, 0xD9, 0x9E, 0xDA, 0x9E, 0xDB, 0x9E, 0xDC, /* 0xA0-0xA3 */ + 0x9E, 0xDD, 0x9E, 0xDE, 0x9E, 0xDF, 0x9E, 0xE0, /* 0xA4-0xA7 */ + 0x9E, 0xE1, 0x9E, 0xE2, 0x9E, 0xE3, 0xEC, 0xC5, /* 0xA8-0xAB */ + 0xBE, 0xE6, 0xCC, 0xBF, 0xC5, 0xDA, 0xBE, 0xBC, /* 0xAC-0xAF */ + 0x9E, 0xE4, 0xEC, 0xC6, 0x9E, 0xE5, 0xB1, 0xFE, /* 0xB0-0xB3 */ + 0x9E, 0xE6, 0x9E, 0xE7, 0x9E, 0xE8, 0xEC, 0xC4, /* 0xB4-0xB7 */ + 0xD5, 0xA8, 0xB5, 0xE3, 0x9E, 0xE9, 0xEC, 0xC2, /* 0xB8-0xBB */ + 0xC1, 0xB6, 0xB3, 0xE3, 0x9E, 0xEA, 0x9E, 0xEB, /* 0xBC-0xBF */ + 0xEC, 0xC3, 0xCB, 0xB8, 0xC0, 0xC3, 0xCC, 0xFE, /* 0xC0-0xC3 */ + 0x9E, 0xEC, 0x9E, 0xED, 0x9E, 0xEE, 0x9E, 0xEF, /* 0xC4-0xC7 */ + 0xC1, 0xD2, 0x9E, 0xF0, 0xEC, 0xC8, 0x9E, 0xF1, /* 0xC8-0xCB */ + 0x9E, 0xF2, 0x9E, 0xF3, 0x9E, 0xF4, 0x9E, 0xF5, /* 0xCC-0xCF */ + 0x9E, 0xF6, 0x9E, 0xF7, 0x9E, 0xF8, 0x9E, 0xF9, /* 0xD0-0xD3 */ + 0x9E, 0xFA, 0x9E, 0xFB, 0x9E, 0xFC, 0x9E, 0xFD, /* 0xD4-0xD7 */ + 0xBA, 0xE6, 0xC0, 0xD3, 0x9E, 0xFE, 0xD6, 0xF2, /* 0xD8-0xDB */ + 0x9F, 0x40, 0x9F, 0x41, 0x9F, 0x42, 0xD1, 0xCC, /* 0xDC-0xDF */ + 0x9F, 0x43, 0x9F, 0x44, 0x9F, 0x45, 0x9F, 0x46, /* 0xE0-0xE3 */ + 0xBF, 0xBE, 0x9F, 0x47, 0xB7, 0xB3, 0xC9, 0xD5, /* 0xE4-0xE7 */ + 0xEC, 0xC7, 0xBB, 0xE2, 0x9F, 0x48, 0xCC, 0xCC, /* 0xE8-0xEB */ + 0xBD, 0xFD, 0xC8, 0xC8, 0x9F, 0x49, 0xCF, 0xA9, /* 0xEC-0xEF */ + 0x9F, 0x4A, 0x9F, 0x4B, 0x9F, 0x4C, 0x9F, 0x4D, /* 0xF0-0xF3 */ + 0x9F, 0x4E, 0x9F, 0x4F, 0x9F, 0x50, 0xCD, 0xE9, /* 0xF4-0xF7 */ + 0x9F, 0x51, 0xC5, 0xEB, 0x9F, 0x52, 0x9F, 0x53, /* 0xF8-0xFB */ + 0x9F, 0x54, 0xB7, 0xE9, 0x9F, 0x55, 0x9F, 0x56, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0x9F, 0x57, 0x9F, 0x58, 0x9F, 0x59, 0x9F, 0x5A, /* 0x00-0x03 */ + 0x9F, 0x5B, 0x9F, 0x5C, 0x9F, 0x5D, 0x9F, 0x5E, /* 0x04-0x07 */ + 0x9F, 0x5F, 0xD1, 0xC9, 0xBA, 0xB8, 0x9F, 0x60, /* 0x08-0x0B */ + 0x9F, 0x61, 0x9F, 0x62, 0x9F, 0x63, 0x9F, 0x64, /* 0x0C-0x0F */ + 0xEC, 0xC9, 0x9F, 0x65, 0x9F, 0x66, 0xEC, 0xCA, /* 0x10-0x13 */ + 0x9F, 0x67, 0xBB, 0xC0, 0xEC, 0xCB, 0x9F, 0x68, /* 0x14-0x17 */ + 0xEC, 0xE2, 0xB1, 0xBA, 0xB7, 0xD9, 0x9F, 0x69, /* 0x18-0x1B */ + 0x9F, 0x6A, 0x9F, 0x6B, 0x9F, 0x6C, 0x9F, 0x6D, /* 0x1C-0x1F */ + 0x9F, 0x6E, 0x9F, 0x6F, 0x9F, 0x70, 0x9F, 0x71, /* 0x20-0x23 */ + 0x9F, 0x72, 0x9F, 0x73, 0xBD, 0xB9, 0x9F, 0x74, /* 0x24-0x27 */ + 0x9F, 0x75, 0x9F, 0x76, 0x9F, 0x77, 0x9F, 0x78, /* 0x28-0x2B */ + 0x9F, 0x79, 0x9F, 0x7A, 0x9F, 0x7B, 0xEC, 0xCC, /* 0x2C-0x2F */ + 0xD1, 0xE6, 0xEC, 0xCD, 0x9F, 0x7C, 0x9F, 0x7D, /* 0x30-0x33 */ + 0x9F, 0x7E, 0x9F, 0x80, 0xC8, 0xBB, 0x9F, 0x81, /* 0x34-0x37 */ + 0x9F, 0x82, 0x9F, 0x83, 0x9F, 0x84, 0x9F, 0x85, /* 0x38-0x3B */ + 0x9F, 0x86, 0x9F, 0x87, 0x9F, 0x88, 0x9F, 0x89, /* 0x3C-0x3F */ + 0x9F, 0x8A, 0x9F, 0x8B, 0x9F, 0x8C, 0x9F, 0x8D, /* 0x40-0x43 */ + 0x9F, 0x8E, 0xEC, 0xD1, 0x9F, 0x8F, 0x9F, 0x90, /* 0x44-0x47 */ + 0x9F, 0x91, 0x9F, 0x92, 0xEC, 0xD3, 0x9F, 0x93, /* 0x48-0x4B */ + 0xBB, 0xCD, 0x9F, 0x94, 0xBC, 0xE5, 0x9F, 0x95, /* 0x4C-0x4F */ + 0x9F, 0x96, 0x9F, 0x97, 0x9F, 0x98, 0x9F, 0x99, /* 0x50-0x53 */ + 0x9F, 0x9A, 0x9F, 0x9B, 0x9F, 0x9C, 0x9F, 0x9D, /* 0x54-0x57 */ + 0x9F, 0x9E, 0x9F, 0x9F, 0x9F, 0xA0, 0x9F, 0xA1, /* 0x58-0x5B */ + 0xEC, 0xCF, 0x9F, 0xA2, 0xC9, 0xB7, 0x9F, 0xA3, /* 0x5C-0x5F */ + 0x9F, 0xA4, 0x9F, 0xA5, 0x9F, 0xA6, 0x9F, 0xA7, /* 0x60-0x63 */ + 0xC3, 0xBA, 0x9F, 0xA8, 0xEC, 0xE3, 0xD5, 0xD5, /* 0x64-0x67 */ + 0xEC, 0xD0, 0x9F, 0xA9, 0x9F, 0xAA, 0x9F, 0xAB, /* 0x68-0x6B */ + 0x9F, 0xAC, 0x9F, 0xAD, 0xD6, 0xF3, 0x9F, 0xAE, /* 0x6C-0x6F */ + 0x9F, 0xAF, 0x9F, 0xB0, 0xEC, 0xD2, 0xEC, 0xCE, /* 0x70-0x73 */ + 0x9F, 0xB1, 0x9F, 0xB2, 0x9F, 0xB3, 0x9F, 0xB4, /* 0x74-0x77 */ + 0xEC, 0xD4, 0x9F, 0xB5, 0xEC, 0xD5, 0x9F, 0xB6, /* 0x78-0x7B */ + 0x9F, 0xB7, 0xC9, 0xBF, 0x9F, 0xB8, 0x9F, 0xB9, /* 0x7C-0x7F */ + + 0x9F, 0xBA, 0x9F, 0xBB, 0x9F, 0xBC, 0x9F, 0xBD, /* 0x80-0x83 */ + 0xCF, 0xA8, 0x9F, 0xBE, 0x9F, 0xBF, 0x9F, 0xC0, /* 0x84-0x87 */ + 0x9F, 0xC1, 0x9F, 0xC2, 0xD0, 0xDC, 0x9F, 0xC3, /* 0x88-0x8B */ + 0x9F, 0xC4, 0x9F, 0xC5, 0x9F, 0xC6, 0xD1, 0xAC, /* 0x8C-0x8F */ + 0x9F, 0xC7, 0x9F, 0xC8, 0x9F, 0xC9, 0x9F, 0xCA, /* 0x90-0x93 */ + 0xC8, 0xDB, 0x9F, 0xCB, 0x9F, 0xCC, 0x9F, 0xCD, /* 0x94-0x97 */ + 0xEC, 0xD6, 0xCE, 0xF5, 0x9F, 0xCE, 0x9F, 0xCF, /* 0x98-0x9B */ + 0x9F, 0xD0, 0x9F, 0xD1, 0x9F, 0xD2, 0xCA, 0xEC, /* 0x9C-0x9F */ + 0xEC, 0xDA, 0x9F, 0xD3, 0x9F, 0xD4, 0x9F, 0xD5, /* 0xA0-0xA3 */ + 0x9F, 0xD6, 0x9F, 0xD7, 0x9F, 0xD8, 0x9F, 0xD9, /* 0xA4-0xA7 */ + 0xEC, 0xD9, 0x9F, 0xDA, 0x9F, 0xDB, 0x9F, 0xDC, /* 0xA8-0xAB */ + 0xB0, 0xBE, 0x9F, 0xDD, 0x9F, 0xDE, 0x9F, 0xDF, /* 0xAC-0xAF */ + 0x9F, 0xE0, 0x9F, 0xE1, 0x9F, 0xE2, 0xEC, 0xD7, /* 0xB0-0xB3 */ + 0x9F, 0xE3, 0xEC, 0xD8, 0x9F, 0xE4, 0x9F, 0xE5, /* 0xB4-0xB7 */ + 0x9F, 0xE6, 0xEC, 0xE4, 0x9F, 0xE7, 0x9F, 0xE8, /* 0xB8-0xBB */ + 0x9F, 0xE9, 0x9F, 0xEA, 0x9F, 0xEB, 0x9F, 0xEC, /* 0xBC-0xBF */ + 0x9F, 0xED, 0x9F, 0xEE, 0x9F, 0xEF, 0xC8, 0xBC, /* 0xC0-0xC3 */ + 0x9F, 0xF0, 0x9F, 0xF1, 0x9F, 0xF2, 0x9F, 0xF3, /* 0xC4-0xC7 */ + 0x9F, 0xF4, 0x9F, 0xF5, 0x9F, 0xF6, 0x9F, 0xF7, /* 0xC8-0xCB */ + 0x9F, 0xF8, 0x9F, 0xF9, 0xC1, 0xC7, 0x9F, 0xFA, /* 0xCC-0xCF */ + 0x9F, 0xFB, 0x9F, 0xFC, 0x9F, 0xFD, 0x9F, 0xFE, /* 0xD0-0xD3 */ + 0xEC, 0xDC, 0xD1, 0xE0, 0xA0, 0x40, 0xA0, 0x41, /* 0xD4-0xD7 */ + 0xA0, 0x42, 0xA0, 0x43, 0xA0, 0x44, 0xA0, 0x45, /* 0xD8-0xDB */ + 0xA0, 0x46, 0xA0, 0x47, 0xA0, 0x48, 0xA0, 0x49, /* 0xDC-0xDF */ + 0xEC, 0xDB, 0xA0, 0x4A, 0xA0, 0x4B, 0xA0, 0x4C, /* 0xE0-0xE3 */ + 0xA0, 0x4D, 0xD4, 0xEF, 0xA0, 0x4E, 0xEC, 0xDD, /* 0xE4-0xE7 */ + 0xA0, 0x4F, 0xA0, 0x50, 0xA0, 0x51, 0xA0, 0x52, /* 0xE8-0xEB */ + 0xA0, 0x53, 0xA0, 0x54, 0xDB, 0xC6, 0xA0, 0x55, /* 0xEC-0xEF */ + 0xA0, 0x56, 0xA0, 0x57, 0xA0, 0x58, 0xA0, 0x59, /* 0xF0-0xF3 */ + 0xA0, 0x5A, 0xA0, 0x5B, 0xA0, 0x5C, 0xA0, 0x5D, /* 0xF4-0xF7 */ + 0xA0, 0x5E, 0xEC, 0xDE, 0xA0, 0x5F, 0xA0, 0x60, /* 0xF8-0xFB */ + 0xA0, 0x61, 0xA0, 0x62, 0xA0, 0x63, 0xA0, 0x64, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0xA0, 0x65, 0xA0, 0x66, 0xA0, 0x67, 0xA0, 0x68, /* 0x00-0x03 */ + 0xA0, 0x69, 0xA0, 0x6A, 0xB1, 0xAC, 0xA0, 0x6B, /* 0x04-0x07 */ + 0xA0, 0x6C, 0xA0, 0x6D, 0xA0, 0x6E, 0xA0, 0x6F, /* 0x08-0x0B */ + 0xA0, 0x70, 0xA0, 0x71, 0xA0, 0x72, 0xA0, 0x73, /* 0x0C-0x0F */ + 0xA0, 0x74, 0xA0, 0x75, 0xA0, 0x76, 0xA0, 0x77, /* 0x10-0x13 */ + 0xA0, 0x78, 0xA0, 0x79, 0xA0, 0x7A, 0xA0, 0x7B, /* 0x14-0x17 */ + 0xA0, 0x7C, 0xA0, 0x7D, 0xA0, 0x7E, 0xA0, 0x80, /* 0x18-0x1B */ + 0xA0, 0x81, 0xEC, 0xDF, 0xA0, 0x82, 0xA0, 0x83, /* 0x1C-0x1F */ + 0xA0, 0x84, 0xA0, 0x85, 0xA0, 0x86, 0xA0, 0x87, /* 0x20-0x23 */ + 0xA0, 0x88, 0xA0, 0x89, 0xA0, 0x8A, 0xA0, 0x8B, /* 0x24-0x27 */ + 0xEC, 0xE0, 0xA0, 0x8C, 0xD7, 0xA6, 0xA0, 0x8D, /* 0x28-0x2B */ + 0xC5, 0xC0, 0xA0, 0x8E, 0xA0, 0x8F, 0xA0, 0x90, /* 0x2C-0x2F */ + 0xEB, 0xBC, 0xB0, 0xAE, 0xA0, 0x91, 0xA0, 0x92, /* 0x30-0x33 */ + 0xA0, 0x93, 0xBE, 0xF4, 0xB8, 0xB8, 0xD2, 0xAF, /* 0x34-0x37 */ + 0xB0, 0xD6, 0xB5, 0xF9, 0xA0, 0x94, 0xD8, 0xB3, /* 0x38-0x3B */ + 0xA0, 0x95, 0xCB, 0xAC, 0xA0, 0x96, 0xE3, 0xDD, /* 0x3C-0x3F */ + 0xA0, 0x97, 0xA0, 0x98, 0xA0, 0x99, 0xA0, 0x9A, /* 0x40-0x43 */ + 0xA0, 0x9B, 0xA0, 0x9C, 0xA0, 0x9D, 0xC6, 0xAC, /* 0x44-0x47 */ + 0xB0, 0xE6, 0xA0, 0x9E, 0xA0, 0x9F, 0xA0, 0xA0, /* 0x48-0x4B */ + 0xC5, 0xC6, 0xEB, 0xB9, 0xA0, 0xA1, 0xA0, 0xA2, /* 0x4C-0x4F */ + 0xA0, 0xA3, 0xA0, 0xA4, 0xEB, 0xBA, 0xA0, 0xA5, /* 0x50-0x53 */ + 0xA0, 0xA6, 0xA0, 0xA7, 0xEB, 0xBB, 0xA0, 0xA8, /* 0x54-0x57 */ + 0xA0, 0xA9, 0xD1, 0xC0, 0xA0, 0xAA, 0xC5, 0xA3, /* 0x58-0x5B */ + 0xA0, 0xAB, 0xEA, 0xF2, 0xA0, 0xAC, 0xC4, 0xB2, /* 0x5C-0x5F */ + 0xA0, 0xAD, 0xC4, 0xB5, 0xC0, 0xCE, 0xA0, 0xAE, /* 0x60-0x63 */ + 0xA0, 0xAF, 0xA0, 0xB0, 0xEA, 0xF3, 0xC4, 0xC1, /* 0x64-0x67 */ + 0xA0, 0xB1, 0xCE, 0xEF, 0xA0, 0xB2, 0xA0, 0xB3, /* 0x68-0x6B */ + 0xA0, 0xB4, 0xA0, 0xB5, 0xEA, 0xF0, 0xEA, 0xF4, /* 0x6C-0x6F */ + 0xA0, 0xB6, 0xA0, 0xB7, 0xC9, 0xFC, 0xA0, 0xB8, /* 0x70-0x73 */ + 0xA0, 0xB9, 0xC7, 0xA3, 0xA0, 0xBA, 0xA0, 0xBB, /* 0x74-0x77 */ + 0xA0, 0xBC, 0xCC, 0xD8, 0xCE, 0xFE, 0xA0, 0xBD, /* 0x78-0x7B */ + 0xA0, 0xBE, 0xA0, 0xBF, 0xEA, 0xF5, 0xEA, 0xF6, /* 0x7C-0x7F */ + + 0xCF, 0xAC, 0xC0, 0xE7, 0xA0, 0xC0, 0xA0, 0xC1, /* 0x80-0x83 */ + 0xEA, 0xF7, 0xA0, 0xC2, 0xA0, 0xC3, 0xA0, 0xC4, /* 0x84-0x87 */ + 0xA0, 0xC5, 0xA0, 0xC6, 0xB6, 0xBF, 0xEA, 0xF8, /* 0x88-0x8B */ + 0xA0, 0xC7, 0xEA, 0xF9, 0xA0, 0xC8, 0xEA, 0xFA, /* 0x8C-0x8F */ + 0xA0, 0xC9, 0xA0, 0xCA, 0xEA, 0xFB, 0xA0, 0xCB, /* 0x90-0x93 */ + 0xA0, 0xCC, 0xA0, 0xCD, 0xA0, 0xCE, 0xA0, 0xCF, /* 0x94-0x97 */ + 0xA0, 0xD0, 0xA0, 0xD1, 0xA0, 0xD2, 0xA0, 0xD3, /* 0x98-0x9B */ + 0xA0, 0xD4, 0xA0, 0xD5, 0xA0, 0xD6, 0xEA, 0xF1, /* 0x9C-0x9F */ + 0xA0, 0xD7, 0xA0, 0xD8, 0xA0, 0xD9, 0xA0, 0xDA, /* 0xA0-0xA3 */ + 0xA0, 0xDB, 0xA0, 0xDC, 0xA0, 0xDD, 0xA0, 0xDE, /* 0xA4-0xA7 */ + 0xA0, 0xDF, 0xA0, 0xE0, 0xA0, 0xE1, 0xA0, 0xE2, /* 0xA8-0xAB */ + 0xC8, 0xAE, 0xE1, 0xEB, 0xA0, 0xE3, 0xB7, 0xB8, /* 0xAC-0xAF */ + 0xE1, 0xEC, 0xA0, 0xE4, 0xA0, 0xE5, 0xA0, 0xE6, /* 0xB0-0xB3 */ + 0xE1, 0xED, 0xA0, 0xE7, 0xD7, 0xB4, 0xE1, 0xEE, /* 0xB4-0xB7 */ + 0xE1, 0xEF, 0xD3, 0xCC, 0xA0, 0xE8, 0xA0, 0xE9, /* 0xB8-0xBB */ + 0xA0, 0xEA, 0xA0, 0xEB, 0xA0, 0xEC, 0xA0, 0xED, /* 0xBC-0xBF */ + 0xA0, 0xEE, 0xE1, 0xF1, 0xBF, 0xF1, 0xE1, 0xF0, /* 0xC0-0xC3 */ + 0xB5, 0xD2, 0xA0, 0xEF, 0xA0, 0xF0, 0xA0, 0xF1, /* 0xC4-0xC7 */ + 0xB1, 0xB7, 0xA0, 0xF2, 0xA0, 0xF3, 0xA0, 0xF4, /* 0xC8-0xCB */ + 0xA0, 0xF5, 0xE1, 0xF3, 0xE1, 0xF2, 0xA0, 0xF6, /* 0xCC-0xCF */ + 0xBA, 0xFC, 0xA0, 0xF7, 0xE1, 0xF4, 0xA0, 0xF8, /* 0xD0-0xD3 */ + 0xA0, 0xF9, 0xA0, 0xFA, 0xA0, 0xFB, 0xB9, 0xB7, /* 0xD4-0xD7 */ + 0xA0, 0xFC, 0xBE, 0xD1, 0xA0, 0xFD, 0xA0, 0xFE, /* 0xD8-0xDB */ + 0xAA, 0x40, 0xAA, 0x41, 0xC4, 0xFC, 0xAA, 0x42, /* 0xDC-0xDF */ + 0xBA, 0xDD, 0xBD, 0xC6, 0xAA, 0x43, 0xAA, 0x44, /* 0xE0-0xE3 */ + 0xAA, 0x45, 0xAA, 0x46, 0xAA, 0x47, 0xAA, 0x48, /* 0xE4-0xE7 */ + 0xE1, 0xF5, 0xE1, 0xF7, 0xAA, 0x49, 0xAA, 0x4A, /* 0xE8-0xEB */ + 0xB6, 0xC0, 0xCF, 0xC1, 0xCA, 0xA8, 0xE1, 0xF6, /* 0xEC-0xEF */ + 0xD5, 0xF8, 0xD3, 0xFC, 0xE1, 0xF8, 0xE1, 0xFC, /* 0xF0-0xF3 */ + 0xE1, 0xF9, 0xAA, 0x4B, 0xAA, 0x4C, 0xE1, 0xFA, /* 0xF4-0xF7 */ + 0xC0, 0xEA, 0xAA, 0x4D, 0xE1, 0xFE, 0xE2, 0xA1, /* 0xF8-0xFB */ + 0xC0, 0xC7, 0xAA, 0x4E, 0xAA, 0x4F, 0xAA, 0x50, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0xAA, 0x51, 0xE1, 0xFB, 0xAA, 0x52, 0xE1, 0xFD, /* 0x00-0x03 */ + 0xAA, 0x53, 0xAA, 0x54, 0xAA, 0x55, 0xAA, 0x56, /* 0x04-0x07 */ + 0xAA, 0x57, 0xAA, 0x58, 0xE2, 0xA5, 0xAA, 0x59, /* 0x08-0x0B */ + 0xAA, 0x5A, 0xAA, 0x5B, 0xC1, 0xD4, 0xAA, 0x5C, /* 0x0C-0x0F */ + 0xAA, 0x5D, 0xAA, 0x5E, 0xAA, 0x5F, 0xE2, 0xA3, /* 0x10-0x13 */ + 0xAA, 0x60, 0xE2, 0xA8, 0xB2, 0xFE, 0xE2, 0xA2, /* 0x14-0x17 */ + 0xAA, 0x61, 0xAA, 0x62, 0xAA, 0x63, 0xC3, 0xCD, /* 0x18-0x1B */ + 0xB2, 0xC2, 0xE2, 0xA7, 0xE2, 0xA6, 0xAA, 0x64, /* 0x1C-0x1F */ + 0xAA, 0x65, 0xE2, 0xA4, 0xE2, 0xA9, 0xAA, 0x66, /* 0x20-0x23 */ + 0xAA, 0x67, 0xE2, 0xAB, 0xAA, 0x68, 0xAA, 0x69, /* 0x24-0x27 */ + 0xAA, 0x6A, 0xD0, 0xC9, 0xD6, 0xED, 0xC3, 0xA8, /* 0x28-0x2B */ + 0xE2, 0xAC, 0xAA, 0x6B, 0xCF, 0xD7, 0xAA, 0x6C, /* 0x2C-0x2F */ + 0xAA, 0x6D, 0xE2, 0xAE, 0xAA, 0x6E, 0xAA, 0x6F, /* 0x30-0x33 */ + 0xBA, 0xEF, 0xAA, 0x70, 0xAA, 0x71, 0xE9, 0xE0, /* 0x34-0x37 */ + 0xE2, 0xAD, 0xE2, 0xAA, 0xAA, 0x72, 0xAA, 0x73, /* 0x38-0x3B */ + 0xAA, 0x74, 0xAA, 0x75, 0xBB, 0xAB, 0xD4, 0xB3, /* 0x3C-0x3F */ + 0xAA, 0x76, 0xAA, 0x77, 0xAA, 0x78, 0xAA, 0x79, /* 0x40-0x43 */ + 0xAA, 0x7A, 0xAA, 0x7B, 0xAA, 0x7C, 0xAA, 0x7D, /* 0x44-0x47 */ + 0xAA, 0x7E, 0xAA, 0x80, 0xAA, 0x81, 0xAA, 0x82, /* 0x48-0x4B */ + 0xAA, 0x83, 0xE2, 0xB0, 0xAA, 0x84, 0xAA, 0x85, /* 0x4C-0x4F */ + 0xE2, 0xAF, 0xAA, 0x86, 0xE9, 0xE1, 0xAA, 0x87, /* 0x50-0x53 */ + 0xAA, 0x88, 0xAA, 0x89, 0xAA, 0x8A, 0xE2, 0xB1, /* 0x54-0x57 */ + 0xAA, 0x8B, 0xAA, 0x8C, 0xAA, 0x8D, 0xAA, 0x8E, /* 0x58-0x5B */ + 0xAA, 0x8F, 0xAA, 0x90, 0xAA, 0x91, 0xAA, 0x92, /* 0x5C-0x5F */ + 0xE2, 0xB2, 0xAA, 0x93, 0xAA, 0x94, 0xAA, 0x95, /* 0x60-0x63 */ + 0xAA, 0x96, 0xAA, 0x97, 0xAA, 0x98, 0xAA, 0x99, /* 0x64-0x67 */ + 0xAA, 0x9A, 0xAA, 0x9B, 0xAA, 0x9C, 0xAA, 0x9D, /* 0x68-0x6B */ + 0xE2, 0xB3, 0xCC, 0xA1, 0xAA, 0x9E, 0xE2, 0xB4, /* 0x6C-0x6F */ + 0xAA, 0x9F, 0xAA, 0xA0, 0xAB, 0x40, 0xAB, 0x41, /* 0x70-0x73 */ + 0xAB, 0x42, 0xAB, 0x43, 0xAB, 0x44, 0xAB, 0x45, /* 0x74-0x77 */ + 0xAB, 0x46, 0xAB, 0x47, 0xAB, 0x48, 0xAB, 0x49, /* 0x78-0x7B */ + 0xAB, 0x4A, 0xAB, 0x4B, 0xE2, 0xB5, 0xAB, 0x4C, /* 0x7C-0x7F */ + + 0xAB, 0x4D, 0xAB, 0x4E, 0xAB, 0x4F, 0xAB, 0x50, /* 0x80-0x83 */ + 0xD0, 0xFE, 0xAB, 0x51, 0xAB, 0x52, 0xC2, 0xCA, /* 0x84-0x87 */ + 0xAB, 0x53, 0xD3, 0xF1, 0xAB, 0x54, 0xCD, 0xF5, /* 0x88-0x8B */ + 0xAB, 0x55, 0xAB, 0x56, 0xE7, 0xE0, 0xAB, 0x57, /* 0x8C-0x8F */ + 0xAB, 0x58, 0xE7, 0xE1, 0xAB, 0x59, 0xAB, 0x5A, /* 0x90-0x93 */ + 0xAB, 0x5B, 0xAB, 0x5C, 0xBE, 0xC1, 0xAB, 0x5D, /* 0x94-0x97 */ + 0xAB, 0x5E, 0xAB, 0x5F, 0xAB, 0x60, 0xC2, 0xEA, /* 0x98-0x9B */ + 0xAB, 0x61, 0xAB, 0x62, 0xAB, 0x63, 0xE7, 0xE4, /* 0x9C-0x9F */ + 0xAB, 0x64, 0xAB, 0x65, 0xE7, 0xE3, 0xAB, 0x66, /* 0xA0-0xA3 */ + 0xAB, 0x67, 0xAB, 0x68, 0xAB, 0x69, 0xAB, 0x6A, /* 0xA4-0xA7 */ + 0xAB, 0x6B, 0xCD, 0xE6, 0xAB, 0x6C, 0xC3, 0xB5, /* 0xA8-0xAB */ + 0xAB, 0x6D, 0xAB, 0x6E, 0xE7, 0xE2, 0xBB, 0xB7, /* 0xAC-0xAF */ + 0xCF, 0xD6, 0xAB, 0x6F, 0xC1, 0xE1, 0xE7, 0xE9, /* 0xB0-0xB3 */ + 0xAB, 0x70, 0xAB, 0x71, 0xAB, 0x72, 0xE7, 0xE8, /* 0xB4-0xB7 */ + 0xAB, 0x73, 0xAB, 0x74, 0xE7, 0xF4, 0xB2, 0xA3, /* 0xB8-0xBB */ + 0xAB, 0x75, 0xAB, 0x76, 0xAB, 0x77, 0xAB, 0x78, /* 0xBC-0xBF */ + 0xE7, 0xEA, 0xAB, 0x79, 0xE7, 0xE6, 0xAB, 0x7A, /* 0xC0-0xC3 */ + 0xAB, 0x7B, 0xAB, 0x7C, 0xAB, 0x7D, 0xAB, 0x7E, /* 0xC4-0xC7 */ + 0xE7, 0xEC, 0xE7, 0xEB, 0xC9, 0xBA, 0xAB, 0x80, /* 0xC8-0xCB */ + 0xAB, 0x81, 0xD5, 0xE4, 0xAB, 0x82, 0xE7, 0xE5, /* 0xCC-0xCF */ + 0xB7, 0xA9, 0xE7, 0xE7, 0xAB, 0x83, 0xAB, 0x84, /* 0xD0-0xD3 */ + 0xAB, 0x85, 0xAB, 0x86, 0xAB, 0x87, 0xAB, 0x88, /* 0xD4-0xD7 */ + 0xAB, 0x89, 0xE7, 0xEE, 0xAB, 0x8A, 0xAB, 0x8B, /* 0xD8-0xDB */ + 0xAB, 0x8C, 0xAB, 0x8D, 0xE7, 0xF3, 0xAB, 0x8E, /* 0xDC-0xDF */ + 0xD6, 0xE9, 0xAB, 0x8F, 0xAB, 0x90, 0xAB, 0x91, /* 0xE0-0xE3 */ + 0xAB, 0x92, 0xE7, 0xED, 0xAB, 0x93, 0xE7, 0xF2, /* 0xE4-0xE7 */ + 0xAB, 0x94, 0xE7, 0xF1, 0xAB, 0x95, 0xAB, 0x96, /* 0xE8-0xEB */ + 0xAB, 0x97, 0xB0, 0xE0, 0xAB, 0x98, 0xAB, 0x99, /* 0xEC-0xEF */ + 0xAB, 0x9A, 0xAB, 0x9B, 0xE7, 0xF5, 0xAB, 0x9C, /* 0xF0-0xF3 */ + 0xAB, 0x9D, 0xAB, 0x9E, 0xAB, 0x9F, 0xAB, 0xA0, /* 0xF4-0xF7 */ + 0xAC, 0x40, 0xAC, 0x41, 0xAC, 0x42, 0xAC, 0x43, /* 0xF8-0xFB */ + 0xAC, 0x44, 0xAC, 0x45, 0xAC, 0x46, 0xAC, 0x47, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0xAC, 0x48, 0xAC, 0x49, 0xAC, 0x4A, 0xC7, 0xF2, /* 0x00-0x03 */ + 0xAC, 0x4B, 0xC0, 0xC5, 0xC0, 0xED, 0xAC, 0x4C, /* 0x04-0x07 */ + 0xAC, 0x4D, 0xC1, 0xF0, 0xE7, 0xF0, 0xAC, 0x4E, /* 0x08-0x0B */ + 0xAC, 0x4F, 0xAC, 0x50, 0xAC, 0x51, 0xE7, 0xF6, /* 0x0C-0x0F */ + 0xCB, 0xF6, 0xAC, 0x52, 0xAC, 0x53, 0xAC, 0x54, /* 0x10-0x13 */ + 0xAC, 0x55, 0xAC, 0x56, 0xAC, 0x57, 0xAC, 0x58, /* 0x14-0x17 */ + 0xAC, 0x59, 0xAC, 0x5A, 0xE8, 0xA2, 0xE8, 0xA1, /* 0x18-0x1B */ + 0xAC, 0x5B, 0xAC, 0x5C, 0xAC, 0x5D, 0xAC, 0x5E, /* 0x1C-0x1F */ + 0xAC, 0x5F, 0xAC, 0x60, 0xD7, 0xC1, 0xAC, 0x61, /* 0x20-0x23 */ + 0xAC, 0x62, 0xE7, 0xFA, 0xE7, 0xF9, 0xAC, 0x63, /* 0x24-0x27 */ + 0xE7, 0xFB, 0xAC, 0x64, 0xE7, 0xF7, 0xAC, 0x65, /* 0x28-0x2B */ + 0xE7, 0xFE, 0xAC, 0x66, 0xE7, 0xFD, 0xAC, 0x67, /* 0x2C-0x2F */ + 0xE7, 0xFC, 0xAC, 0x68, 0xAC, 0x69, 0xC1, 0xD5, /* 0x30-0x33 */ + 0xC7, 0xD9, 0xC5, 0xFD, 0xC5, 0xC3, 0xAC, 0x6A, /* 0x34-0x37 */ + 0xAC, 0x6B, 0xAC, 0x6C, 0xAC, 0x6D, 0xAC, 0x6E, /* 0x38-0x3B */ + 0xC7, 0xED, 0xAC, 0x6F, 0xAC, 0x70, 0xAC, 0x71, /* 0x3C-0x3F */ + 0xAC, 0x72, 0xE8, 0xA3, 0xAC, 0x73, 0xAC, 0x74, /* 0x40-0x43 */ + 0xAC, 0x75, 0xAC, 0x76, 0xAC, 0x77, 0xAC, 0x78, /* 0x44-0x47 */ + 0xAC, 0x79, 0xAC, 0x7A, 0xAC, 0x7B, 0xAC, 0x7C, /* 0x48-0x4B */ + 0xAC, 0x7D, 0xAC, 0x7E, 0xAC, 0x80, 0xAC, 0x81, /* 0x4C-0x4F */ + 0xAC, 0x82, 0xAC, 0x83, 0xAC, 0x84, 0xAC, 0x85, /* 0x50-0x53 */ + 0xAC, 0x86, 0xE8, 0xA6, 0xAC, 0x87, 0xE8, 0xA5, /* 0x54-0x57 */ + 0xAC, 0x88, 0xE8, 0xA7, 0xBA, 0xF7, 0xE7, 0xF8, /* 0x58-0x5B */ + 0xE8, 0xA4, 0xAC, 0x89, 0xC8, 0xF0, 0xC9, 0xAA, /* 0x5C-0x5F */ + 0xAC, 0x8A, 0xAC, 0x8B, 0xAC, 0x8C, 0xAC, 0x8D, /* 0x60-0x63 */ + 0xAC, 0x8E, 0xAC, 0x8F, 0xAC, 0x90, 0xAC, 0x91, /* 0x64-0x67 */ + 0xAC, 0x92, 0xAC, 0x93, 0xAC, 0x94, 0xAC, 0x95, /* 0x68-0x6B */ + 0xAC, 0x96, 0xE8, 0xA9, 0xAC, 0x97, 0xAC, 0x98, /* 0x6C-0x6F */ + 0xB9, 0xE5, 0xAC, 0x99, 0xAC, 0x9A, 0xAC, 0x9B, /* 0x70-0x73 */ + 0xAC, 0x9C, 0xAC, 0x9D, 0xD1, 0xFE, 0xE8, 0xA8, /* 0x74-0x77 */ + 0xAC, 0x9E, 0xAC, 0x9F, 0xAC, 0xA0, 0xAD, 0x40, /* 0x78-0x7B */ + 0xAD, 0x41, 0xAD, 0x42, 0xE8, 0xAA, 0xAD, 0x43, /* 0x7C-0x7F */ + + 0xE8, 0xAD, 0xE8, 0xAE, 0xAD, 0x44, 0xC1, 0xA7, /* 0x80-0x83 */ + 0xAD, 0x45, 0xAD, 0x46, 0xAD, 0x47, 0xE8, 0xAF, /* 0x84-0x87 */ + 0xAD, 0x48, 0xAD, 0x49, 0xAD, 0x4A, 0xE8, 0xB0, /* 0x88-0x8B */ + 0xAD, 0x4B, 0xAD, 0x4C, 0xE8, 0xAC, 0xAD, 0x4D, /* 0x8C-0x8F */ + 0xE8, 0xB4, 0xAD, 0x4E, 0xAD, 0x4F, 0xAD, 0x50, /* 0x90-0x93 */ + 0xAD, 0x51, 0xAD, 0x52, 0xAD, 0x53, 0xAD, 0x54, /* 0x94-0x97 */ + 0xAD, 0x55, 0xAD, 0x56, 0xAD, 0x57, 0xAD, 0x58, /* 0x98-0x9B */ + 0xE8, 0xAB, 0xAD, 0x59, 0xE8, 0xB1, 0xAD, 0x5A, /* 0x9C-0x9F */ + 0xAD, 0x5B, 0xAD, 0x5C, 0xAD, 0x5D, 0xAD, 0x5E, /* 0xA0-0xA3 */ + 0xAD, 0x5F, 0xAD, 0x60, 0xAD, 0x61, 0xE8, 0xB5, /* 0xA4-0xA7 */ + 0xE8, 0xB2, 0xE8, 0xB3, 0xAD, 0x62, 0xAD, 0x63, /* 0xA8-0xAB */ + 0xAD, 0x64, 0xAD, 0x65, 0xAD, 0x66, 0xAD, 0x67, /* 0xAC-0xAF */ + 0xAD, 0x68, 0xAD, 0x69, 0xAD, 0x6A, 0xAD, 0x6B, /* 0xB0-0xB3 */ + 0xAD, 0x6C, 0xAD, 0x6D, 0xAD, 0x6E, 0xAD, 0x6F, /* 0xB4-0xB7 */ + 0xAD, 0x70, 0xAD, 0x71, 0xE8, 0xB7, 0xAD, 0x72, /* 0xB8-0xBB */ + 0xAD, 0x73, 0xAD, 0x74, 0xAD, 0x75, 0xAD, 0x76, /* 0xBC-0xBF */ + 0xAD, 0x77, 0xAD, 0x78, 0xAD, 0x79, 0xAD, 0x7A, /* 0xC0-0xC3 */ + 0xAD, 0x7B, 0xAD, 0x7C, 0xAD, 0x7D, 0xAD, 0x7E, /* 0xC4-0xC7 */ + 0xAD, 0x80, 0xAD, 0x81, 0xAD, 0x82, 0xAD, 0x83, /* 0xC8-0xCB */ + 0xAD, 0x84, 0xAD, 0x85, 0xAD, 0x86, 0xAD, 0x87, /* 0xCC-0xCF */ + 0xAD, 0x88, 0xAD, 0x89, 0xE8, 0xB6, 0xAD, 0x8A, /* 0xD0-0xD3 */ + 0xAD, 0x8B, 0xAD, 0x8C, 0xAD, 0x8D, 0xAD, 0x8E, /* 0xD4-0xD7 */ + 0xAD, 0x8F, 0xAD, 0x90, 0xAD, 0x91, 0xAD, 0x92, /* 0xD8-0xDB */ + 0xB9, 0xCF, 0xAD, 0x93, 0xF0, 0xAC, 0xAD, 0x94, /* 0xDC-0xDF */ + 0xF0, 0xAD, 0xAD, 0x95, 0xC6, 0xB0, 0xB0, 0xEA, /* 0xE0-0xE3 */ + 0xC8, 0xBF, 0xAD, 0x96, 0xCD, 0xDF, 0xAD, 0x97, /* 0xE4-0xE7 */ + 0xAD, 0x98, 0xAD, 0x99, 0xAD, 0x9A, 0xAD, 0x9B, /* 0xE8-0xEB */ + 0xAD, 0x9C, 0xAD, 0x9D, 0xCE, 0xCD, 0xEA, 0xB1, /* 0xEC-0xEF */ + 0xAD, 0x9E, 0xAD, 0x9F, 0xAD, 0xA0, 0xAE, 0x40, /* 0xF0-0xF3 */ + 0xEA, 0xB2, 0xAE, 0x41, 0xC6, 0xBF, 0xB4, 0xC9, /* 0xF4-0xF7 */ + 0xAE, 0x42, 0xAE, 0x43, 0xAE, 0x44, 0xAE, 0x45, /* 0xF8-0xFB */ + 0xAE, 0x46, 0xAE, 0x47, 0xAE, 0x48, 0xEA, 0xB3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_75[512] = { + 0xAE, 0x49, 0xAE, 0x4A, 0xAE, 0x4B, 0xAE, 0x4C, /* 0x00-0x03 */ + 0xD5, 0xE7, 0xAE, 0x4D, 0xAE, 0x4E, 0xAE, 0x4F, /* 0x04-0x07 */ + 0xAE, 0x50, 0xAE, 0x51, 0xAE, 0x52, 0xAE, 0x53, /* 0x08-0x0B */ + 0xAE, 0x54, 0xDD, 0xF9, 0xAE, 0x55, 0xEA, 0xB4, /* 0x0C-0x0F */ + 0xAE, 0x56, 0xEA, 0xB5, 0xAE, 0x57, 0xEA, 0xB6, /* 0x10-0x13 */ + 0xAE, 0x58, 0xAE, 0x59, 0xAE, 0x5A, 0xAE, 0x5B, /* 0x14-0x17 */ + 0xB8, 0xCA, 0xDF, 0xB0, 0xC9, 0xF5, 0xAE, 0x5C, /* 0x18-0x1B */ + 0xCC, 0xF0, 0xAE, 0x5D, 0xAE, 0x5E, 0xC9, 0xFA, /* 0x1C-0x1F */ + 0xAE, 0x5F, 0xAE, 0x60, 0xAE, 0x61, 0xAE, 0x62, /* 0x20-0x23 */ + 0xAE, 0x63, 0xC9, 0xFB, 0xAE, 0x64, 0xAE, 0x65, /* 0x24-0x27 */ + 0xD3, 0xC3, 0xCB, 0xA6, 0xAE, 0x66, 0xB8, 0xA6, /* 0x28-0x2B */ + 0xF0, 0xAE, 0xB1, 0xC2, 0xAE, 0x67, 0xE5, 0xB8, /* 0x2C-0x2F */ + 0xCC, 0xEF, 0xD3, 0xC9, 0xBC, 0xD7, 0xC9, 0xEA, /* 0x30-0x33 */ + 0xAE, 0x68, 0xB5, 0xE7, 0xAE, 0x69, 0xC4, 0xD0, /* 0x34-0x37 */ + 0xB5, 0xE9, 0xAE, 0x6A, 0xEE, 0xAE, 0xBB, 0xAD, /* 0x38-0x3B */ + 0xAE, 0x6B, 0xAE, 0x6C, 0xE7, 0xDE, 0xAE, 0x6D, /* 0x3C-0x3F */ + 0xEE, 0xAF, 0xAE, 0x6E, 0xAE, 0x6F, 0xAE, 0x70, /* 0x40-0x43 */ + 0xAE, 0x71, 0xB3, 0xA9, 0xAE, 0x72, 0xAE, 0x73, /* 0x44-0x47 */ + 0xEE, 0xB2, 0xAE, 0x74, 0xAE, 0x75, 0xEE, 0xB1, /* 0x48-0x4B */ + 0xBD, 0xE7, 0xAE, 0x76, 0xEE, 0xB0, 0xCE, 0xB7, /* 0x4C-0x4F */ + 0xAE, 0x77, 0xAE, 0x78, 0xAE, 0x79, 0xAE, 0x7A, /* 0x50-0x53 */ + 0xC5, 0xCF, 0xAE, 0x7B, 0xAE, 0x7C, 0xAE, 0x7D, /* 0x54-0x57 */ + 0xAE, 0x7E, 0xC1, 0xF4, 0xDB, 0xCE, 0xEE, 0xB3, /* 0x58-0x5B */ + 0xD0, 0xF3, 0xAE, 0x80, 0xAE, 0x81, 0xAE, 0x82, /* 0x5C-0x5F */ + 0xAE, 0x83, 0xAE, 0x84, 0xAE, 0x85, 0xAE, 0x86, /* 0x60-0x63 */ + 0xAE, 0x87, 0xC2, 0xD4, 0xC6, 0xE8, 0xAE, 0x88, /* 0x64-0x67 */ + 0xAE, 0x89, 0xAE, 0x8A, 0xB7, 0xAC, 0xAE, 0x8B, /* 0x68-0x6B */ + 0xAE, 0x8C, 0xAE, 0x8D, 0xAE, 0x8E, 0xAE, 0x8F, /* 0x6C-0x6F */ + 0xAE, 0x90, 0xAE, 0x91, 0xEE, 0xB4, 0xAE, 0x92, /* 0x70-0x73 */ + 0xB3, 0xEB, 0xAE, 0x93, 0xAE, 0x94, 0xAE, 0x95, /* 0x74-0x77 */ + 0xBB, 0xFB, 0xEE, 0xB5, 0xAE, 0x96, 0xAE, 0x97, /* 0x78-0x7B */ + 0xAE, 0x98, 0xAE, 0x99, 0xAE, 0x9A, 0xE7, 0xDC, /* 0x7C-0x7F */ + + 0xAE, 0x9B, 0xAE, 0x9C, 0xAE, 0x9D, 0xEE, 0xB6, /* 0x80-0x83 */ + 0xAE, 0x9E, 0xAE, 0x9F, 0xBD, 0xAE, 0xAE, 0xA0, /* 0x84-0x87 */ + 0xAF, 0x40, 0xAF, 0x41, 0xAF, 0x42, 0xF1, 0xE2, /* 0x88-0x8B */ + 0xAF, 0x43, 0xAF, 0x44, 0xAF, 0x45, 0xCA, 0xE8, /* 0x8C-0x8F */ + 0xAF, 0x46, 0xD2, 0xC9, 0xF0, 0xDA, 0xAF, 0x47, /* 0x90-0x93 */ + 0xF0, 0xDB, 0xAF, 0x48, 0xF0, 0xDC, 0xC1, 0xC6, /* 0x94-0x97 */ + 0xAF, 0x49, 0xB8, 0xED, 0xBE, 0xCE, 0xAF, 0x4A, /* 0x98-0x9B */ + 0xAF, 0x4B, 0xF0, 0xDE, 0xAF, 0x4C, 0xC5, 0xB1, /* 0x9C-0x9F */ + 0xF0, 0xDD, 0xD1, 0xF1, 0xAF, 0x4D, 0xF0, 0xE0, /* 0xA0-0xA3 */ + 0xB0, 0xCC, 0xBD, 0xEA, 0xAF, 0x4E, 0xAF, 0x4F, /* 0xA4-0xA7 */ + 0xAF, 0x50, 0xAF, 0x51, 0xAF, 0x52, 0xD2, 0xDF, /* 0xA8-0xAB */ + 0xF0, 0xDF, 0xAF, 0x53, 0xB4, 0xAF, 0xB7, 0xE8, /* 0xAC-0xAF */ + 0xF0, 0xE6, 0xF0, 0xE5, 0xC6, 0xA3, 0xF0, 0xE1, /* 0xB0-0xB3 */ + 0xF0, 0xE2, 0xB4, 0xC3, 0xAF, 0x54, 0xAF, 0x55, /* 0xB4-0xB7 */ + 0xF0, 0xE3, 0xD5, 0xEE, 0xAF, 0x56, 0xAF, 0x57, /* 0xB8-0xBB */ + 0xCC, 0xDB, 0xBE, 0xD2, 0xBC, 0xB2, 0xAF, 0x58, /* 0xBC-0xBF */ + 0xAF, 0x59, 0xAF, 0x5A, 0xF0, 0xE8, 0xF0, 0xE7, /* 0xC0-0xC3 */ + 0xF0, 0xE4, 0xB2, 0xA1, 0xAF, 0x5B, 0xD6, 0xA2, /* 0xC4-0xC7 */ + 0xD3, 0xB8, 0xBE, 0xB7, 0xC8, 0xAC, 0xAF, 0x5C, /* 0xC8-0xCB */ + 0xAF, 0x5D, 0xF0, 0xEA, 0xAF, 0x5E, 0xAF, 0x5F, /* 0xCC-0xCF */ + 0xAF, 0x60, 0xAF, 0x61, 0xD1, 0xF7, 0xAF, 0x62, /* 0xD0-0xD3 */ + 0xD6, 0xCC, 0xBA, 0xDB, 0xF0, 0xE9, 0xAF, 0x63, /* 0xD4-0xD7 */ + 0xB6, 0xBB, 0xAF, 0x64, 0xAF, 0x65, 0xCD, 0xB4, /* 0xD8-0xDB */ + 0xAF, 0x66, 0xAF, 0x67, 0xC6, 0xA6, 0xAF, 0x68, /* 0xDC-0xDF */ + 0xAF, 0x69, 0xAF, 0x6A, 0xC1, 0xA1, 0xF0, 0xEB, /* 0xE0-0xE3 */ + 0xF0, 0xEE, 0xAF, 0x6B, 0xF0, 0xED, 0xF0, 0xF0, /* 0xE4-0xE7 */ + 0xF0, 0xEC, 0xAF, 0x6C, 0xBB, 0xBE, 0xF0, 0xEF, /* 0xE8-0xEB */ + 0xAF, 0x6D, 0xAF, 0x6E, 0xAF, 0x6F, 0xAF, 0x70, /* 0xEC-0xEF */ + 0xCC, 0xB5, 0xF0, 0xF2, 0xAF, 0x71, 0xAF, 0x72, /* 0xF0-0xF3 */ + 0xB3, 0xD5, 0xAF, 0x73, 0xAF, 0x74, 0xAF, 0x75, /* 0xF4-0xF7 */ + 0xAF, 0x76, 0xB1, 0xD4, 0xAF, 0x77, 0xAF, 0x78, /* 0xF8-0xFB */ + 0xF0, 0xF3, 0xAF, 0x79, 0xAF, 0x7A, 0xF0, 0xF4, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0xF0, 0xF6, 0xB4, 0xE1, 0xAF, 0x7B, 0xF0, 0xF1, /* 0x00-0x03 */ + 0xAF, 0x7C, 0xF0, 0xF7, 0xAF, 0x7D, 0xAF, 0x7E, /* 0x04-0x07 */ + 0xAF, 0x80, 0xAF, 0x81, 0xF0, 0xFA, 0xAF, 0x82, /* 0x08-0x0B */ + 0xF0, 0xF8, 0xAF, 0x83, 0xAF, 0x84, 0xAF, 0x85, /* 0x0C-0x0F */ + 0xF0, 0xF5, 0xAF, 0x86, 0xAF, 0x87, 0xAF, 0x88, /* 0x10-0x13 */ + 0xAF, 0x89, 0xF0, 0xFD, 0xAF, 0x8A, 0xF0, 0xF9, /* 0x14-0x17 */ + 0xF0, 0xFC, 0xF0, 0xFE, 0xAF, 0x8B, 0xF1, 0xA1, /* 0x18-0x1B */ + 0xAF, 0x8C, 0xAF, 0x8D, 0xAF, 0x8E, 0xCE, 0xC1, /* 0x1C-0x1F */ + 0xF1, 0xA4, 0xAF, 0x8F, 0xF1, 0xA3, 0xAF, 0x90, /* 0x20-0x23 */ + 0xC1, 0xF6, 0xF0, 0xFB, 0xCA, 0xDD, 0xAF, 0x91, /* 0x24-0x27 */ + 0xAF, 0x92, 0xB4, 0xF1, 0xB1, 0xF1, 0xCC, 0xB1, /* 0x28-0x2B */ + 0xAF, 0x93, 0xF1, 0xA6, 0xAF, 0x94, 0xAF, 0x95, /* 0x2C-0x2F */ + 0xF1, 0xA7, 0xAF, 0x96, 0xAF, 0x97, 0xF1, 0xAC, /* 0x30-0x33 */ + 0xD5, 0xCE, 0xF1, 0xA9, 0xAF, 0x98, 0xAF, 0x99, /* 0x34-0x37 */ + 0xC8, 0xB3, 0xAF, 0x9A, 0xAF, 0x9B, 0xAF, 0x9C, /* 0x38-0x3B */ + 0xF1, 0xA2, 0xAF, 0x9D, 0xF1, 0xAB, 0xF1, 0xA8, /* 0x3C-0x3F */ + 0xF1, 0xA5, 0xAF, 0x9E, 0xAF, 0x9F, 0xF1, 0xAA, /* 0x40-0x43 */ + 0xAF, 0xA0, 0xB0, 0x40, 0xB0, 0x41, 0xB0, 0x42, /* 0x44-0x47 */ + 0xB0, 0x43, 0xB0, 0x44, 0xB0, 0x45, 0xB0, 0x46, /* 0x48-0x4B */ + 0xB0, 0xA9, 0xF1, 0xAD, 0xB0, 0x47, 0xB0, 0x48, /* 0x4C-0x4F */ + 0xB0, 0x49, 0xB0, 0x4A, 0xB0, 0x4B, 0xB0, 0x4C, /* 0x50-0x53 */ + 0xF1, 0xAF, 0xB0, 0x4D, 0xF1, 0xB1, 0xB0, 0x4E, /* 0x54-0x57 */ + 0xB0, 0x4F, 0xB0, 0x50, 0xB0, 0x51, 0xB0, 0x52, /* 0x58-0x5B */ + 0xF1, 0xB0, 0xB0, 0x53, 0xF1, 0xAE, 0xB0, 0x54, /* 0x5C-0x5F */ + 0xB0, 0x55, 0xB0, 0x56, 0xB0, 0x57, 0xD1, 0xA2, /* 0x60-0x63 */ + 0xB0, 0x58, 0xB0, 0x59, 0xB0, 0x5A, 0xB0, 0x5B, /* 0x64-0x67 */ + 0xB0, 0x5C, 0xB0, 0x5D, 0xB0, 0x5E, 0xF1, 0xB2, /* 0x68-0x6B */ + 0xB0, 0x5F, 0xB0, 0x60, 0xB0, 0x61, 0xF1, 0xB3, /* 0x6C-0x6F */ + 0xB0, 0x62, 0xB0, 0x63, 0xB0, 0x64, 0xB0, 0x65, /* 0x70-0x73 */ + 0xB0, 0x66, 0xB0, 0x67, 0xB0, 0x68, 0xB0, 0x69, /* 0x74-0x77 */ + 0xB9, 0xEF, 0xB0, 0x6A, 0xB0, 0x6B, 0xB5, 0xC7, /* 0x78-0x7B */ + 0xB0, 0x6C, 0xB0, 0xD7, 0xB0, 0xD9, 0xB0, 0x6D, /* 0x7C-0x7F */ + + 0xB0, 0x6E, 0xB0, 0x6F, 0xD4, 0xED, 0xB0, 0x70, /* 0x80-0x83 */ + 0xB5, 0xC4, 0xB0, 0x71, 0xBD, 0xD4, 0xBB, 0xCA, /* 0x84-0x87 */ + 0xF0, 0xA7, 0xB0, 0x72, 0xB0, 0x73, 0xB8, 0xDE, /* 0x88-0x8B */ + 0xB0, 0x74, 0xB0, 0x75, 0xF0, 0xA8, 0xB0, 0x76, /* 0x8C-0x8F */ + 0xB0, 0x77, 0xB0, 0xA8, 0xB0, 0x78, 0xF0, 0xA9, /* 0x90-0x93 */ + 0xB0, 0x79, 0xB0, 0x7A, 0xCD, 0xEE, 0xB0, 0x7B, /* 0x94-0x97 */ + 0xB0, 0x7C, 0xF0, 0xAA, 0xB0, 0x7D, 0xB0, 0x7E, /* 0x98-0x9B */ + 0xB0, 0x80, 0xB0, 0x81, 0xB0, 0x82, 0xB0, 0x83, /* 0x9C-0x9F */ + 0xB0, 0x84, 0xB0, 0x85, 0xB0, 0x86, 0xB0, 0x87, /* 0xA0-0xA3 */ + 0xF0, 0xAB, 0xB0, 0x88, 0xB0, 0x89, 0xB0, 0x8A, /* 0xA4-0xA7 */ + 0xB0, 0x8B, 0xB0, 0x8C, 0xB0, 0x8D, 0xB0, 0x8E, /* 0xA8-0xAB */ + 0xB0, 0x8F, 0xB0, 0x90, 0xC6, 0xA4, 0xB0, 0x91, /* 0xAC-0xAF */ + 0xB0, 0x92, 0xD6, 0xE5, 0xF1, 0xE4, 0xB0, 0x93, /* 0xB0-0xB3 */ + 0xF1, 0xE5, 0xB0, 0x94, 0xB0, 0x95, 0xB0, 0x96, /* 0xB4-0xB7 */ + 0xB0, 0x97, 0xB0, 0x98, 0xB0, 0x99, 0xB0, 0x9A, /* 0xB8-0xBB */ + 0xB0, 0x9B, 0xB0, 0x9C, 0xB0, 0x9D, 0xC3, 0xF3, /* 0xBC-0xBF */ + 0xB0, 0x9E, 0xB0, 0x9F, 0xD3, 0xDB, 0xB0, 0xA0, /* 0xC0-0xC3 */ + 0xB1, 0x40, 0xD6, 0xD1, 0xC5, 0xE8, 0xB1, 0x41, /* 0xC4-0xC7 */ + 0xD3, 0xAF, 0xB1, 0x42, 0xD2, 0xE6, 0xB1, 0x43, /* 0xC8-0xCB */ + 0xB1, 0x44, 0xEE, 0xC1, 0xB0, 0xBB, 0xD5, 0xB5, /* 0xCC-0xCF */ + 0xD1, 0xCE, 0xBC, 0xE0, 0xBA, 0xD0, 0xB1, 0x45, /* 0xD0-0xD3 */ + 0xBF, 0xF8, 0xB1, 0x46, 0xB8, 0xC7, 0xB5, 0xC1, /* 0xD4-0xD7 */ + 0xC5, 0xCC, 0xB1, 0x47, 0xB1, 0x48, 0xCA, 0xA2, /* 0xD8-0xDB */ + 0xB1, 0x49, 0xB1, 0x4A, 0xB1, 0x4B, 0xC3, 0xCB, /* 0xDC-0xDF */ + 0xB1, 0x4C, 0xB1, 0x4D, 0xB1, 0x4E, 0xB1, 0x4F, /* 0xE0-0xE3 */ + 0xB1, 0x50, 0xEE, 0xC2, 0xB1, 0x51, 0xB1, 0x52, /* 0xE4-0xE7 */ + 0xB1, 0x53, 0xB1, 0x54, 0xB1, 0x55, 0xB1, 0x56, /* 0xE8-0xEB */ + 0xB1, 0x57, 0xB1, 0x58, 0xC4, 0xBF, 0xB6, 0xA2, /* 0xEC-0xEF */ + 0xB1, 0x59, 0xED, 0xEC, 0xC3, 0xA4, 0xB1, 0x5A, /* 0xF0-0xF3 */ + 0xD6, 0xB1, 0xB1, 0x5B, 0xB1, 0x5C, 0xB1, 0x5D, /* 0xF4-0xF7 */ + 0xCF, 0xE0, 0xED, 0xEF, 0xB1, 0x5E, 0xB1, 0x5F, /* 0xF8-0xFB */ + 0xC5, 0xCE, 0xB1, 0x60, 0xB6, 0xDC, 0xB1, 0x61, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0xB1, 0x62, 0xCA, 0xA1, 0xB1, 0x63, 0xB1, 0x64, /* 0x00-0x03 */ + 0xED, 0xED, 0xB1, 0x65, 0xB1, 0x66, 0xED, 0xF0, /* 0x04-0x07 */ + 0xED, 0xF1, 0xC3, 0xBC, 0xB1, 0x67, 0xBF, 0xB4, /* 0x08-0x0B */ + 0xB1, 0x68, 0xED, 0xEE, 0xB1, 0x69, 0xB1, 0x6A, /* 0x0C-0x0F */ + 0xB1, 0x6B, 0xB1, 0x6C, 0xB1, 0x6D, 0xB1, 0x6E, /* 0x10-0x13 */ + 0xB1, 0x6F, 0xB1, 0x70, 0xB1, 0x71, 0xB1, 0x72, /* 0x14-0x17 */ + 0xB1, 0x73, 0xED, 0xF4, 0xED, 0xF2, 0xB1, 0x74, /* 0x18-0x1B */ + 0xB1, 0x75, 0xB1, 0x76, 0xB1, 0x77, 0xD5, 0xE6, /* 0x1C-0x1F */ + 0xC3, 0xDF, 0xB1, 0x78, 0xED, 0xF3, 0xB1, 0x79, /* 0x20-0x23 */ + 0xB1, 0x7A, 0xB1, 0x7B, 0xED, 0xF6, 0xB1, 0x7C, /* 0x24-0x27 */ + 0xD5, 0xA3, 0xD1, 0xA3, 0xB1, 0x7D, 0xB1, 0x7E, /* 0x28-0x2B */ + 0xB1, 0x80, 0xED, 0xF5, 0xB1, 0x81, 0xC3, 0xD0, /* 0x2C-0x2F */ + 0xB1, 0x82, 0xB1, 0x83, 0xB1, 0x84, 0xB1, 0x85, /* 0x30-0x33 */ + 0xB1, 0x86, 0xED, 0xF7, 0xBF, 0xF4, 0xBE, 0xEC, /* 0x34-0x37 */ + 0xED, 0xF8, 0xB1, 0x87, 0xCC, 0xF7, 0xB1, 0x88, /* 0x38-0x3B */ + 0xD1, 0xDB, 0xB1, 0x89, 0xB1, 0x8A, 0xB1, 0x8B, /* 0x3C-0x3F */ + 0xD7, 0xC5, 0xD5, 0xF6, 0xB1, 0x8C, 0xED, 0xFC, /* 0x40-0x43 */ + 0xB1, 0x8D, 0xB1, 0x8E, 0xB1, 0x8F, 0xED, 0xFB, /* 0x44-0x47 */ + 0xB1, 0x90, 0xB1, 0x91, 0xB1, 0x92, 0xB1, 0x93, /* 0x48-0x4B */ + 0xB1, 0x94, 0xB1, 0x95, 0xB1, 0x96, 0xB1, 0x97, /* 0x4C-0x4F */ + 0xED, 0xF9, 0xED, 0xFA, 0xB1, 0x98, 0xB1, 0x99, /* 0x50-0x53 */ + 0xB1, 0x9A, 0xB1, 0x9B, 0xB1, 0x9C, 0xB1, 0x9D, /* 0x54-0x57 */ + 0xB1, 0x9E, 0xB1, 0x9F, 0xED, 0xFD, 0xBE, 0xA6, /* 0x58-0x5B */ + 0xB1, 0xA0, 0xB2, 0x40, 0xB2, 0x41, 0xB2, 0x42, /* 0x5C-0x5F */ + 0xB2, 0x43, 0xCB, 0xAF, 0xEE, 0xA1, 0xB6, 0xBD, /* 0x60-0x63 */ + 0xB2, 0x44, 0xEE, 0xA2, 0xC4, 0xC0, 0xB2, 0x45, /* 0x64-0x67 */ + 0xED, 0xFE, 0xB2, 0x46, 0xB2, 0x47, 0xBD, 0xDE, /* 0x68-0x6B */ + 0xB2, 0xC7, 0xB2, 0x48, 0xB2, 0x49, 0xB2, 0x4A, /* 0x6C-0x6F */ + 0xB2, 0x4B, 0xB2, 0x4C, 0xB2, 0x4D, 0xB2, 0x4E, /* 0x70-0x73 */ + 0xB2, 0x4F, 0xB2, 0x50, 0xB2, 0x51, 0xB2, 0x52, /* 0x74-0x77 */ + 0xB2, 0x53, 0xB6, 0xC3, 0xB2, 0x54, 0xB2, 0x55, /* 0x78-0x7B */ + 0xB2, 0x56, 0xEE, 0xA5, 0xD8, 0xBA, 0xEE, 0xA3, /* 0x7C-0x7F */ + + 0xEE, 0xA6, 0xB2, 0x57, 0xB2, 0x58, 0xB2, 0x59, /* 0x80-0x83 */ + 0xC3, 0xE9, 0xB3, 0xF2, 0xB2, 0x5A, 0xB2, 0x5B, /* 0x84-0x87 */ + 0xB2, 0x5C, 0xB2, 0x5D, 0xB2, 0x5E, 0xB2, 0x5F, /* 0x88-0x8B */ + 0xEE, 0xA7, 0xEE, 0xA4, 0xCF, 0xB9, 0xB2, 0x60, /* 0x8C-0x8F */ + 0xB2, 0x61, 0xEE, 0xA8, 0xC2, 0xF7, 0xB2, 0x62, /* 0x90-0x93 */ + 0xB2, 0x63, 0xB2, 0x64, 0xB2, 0x65, 0xB2, 0x66, /* 0x94-0x97 */ + 0xB2, 0x67, 0xB2, 0x68, 0xB2, 0x69, 0xB2, 0x6A, /* 0x98-0x9B */ + 0xB2, 0x6B, 0xB2, 0x6C, 0xB2, 0x6D, 0xEE, 0xA9, /* 0x9C-0x9F */ + 0xEE, 0xAA, 0xB2, 0x6E, 0xDE, 0xAB, 0xB2, 0x6F, /* 0xA0-0xA3 */ + 0xB2, 0x70, 0xC6, 0xB3, 0xB2, 0x71, 0xC7, 0xC6, /* 0xA4-0xA7 */ + 0xB2, 0x72, 0xD6, 0xF5, 0xB5, 0xC9, 0xB2, 0x73, /* 0xA8-0xAB */ + 0xCB, 0xB2, 0xB2, 0x74, 0xB2, 0x75, 0xB2, 0x76, /* 0xAC-0xAF */ + 0xEE, 0xAB, 0xB2, 0x77, 0xB2, 0x78, 0xCD, 0xAB, /* 0xB0-0xB3 */ + 0xB2, 0x79, 0xEE, 0xAC, 0xB2, 0x7A, 0xB2, 0x7B, /* 0xB4-0xB7 */ + 0xB2, 0x7C, 0xB2, 0x7D, 0xB2, 0x7E, 0xD5, 0xB0, /* 0xB8-0xBB */ + 0xB2, 0x80, 0xEE, 0xAD, 0xB2, 0x81, 0xF6, 0xC4, /* 0xBC-0xBF */ + 0xB2, 0x82, 0xB2, 0x83, 0xB2, 0x84, 0xB2, 0x85, /* 0xC0-0xC3 */ + 0xB2, 0x86, 0xB2, 0x87, 0xB2, 0x88, 0xB2, 0x89, /* 0xC4-0xC7 */ + 0xB2, 0x8A, 0xB2, 0x8B, 0xB2, 0x8C, 0xB2, 0x8D, /* 0xC8-0xCB */ + 0xB2, 0x8E, 0xDB, 0xC7, 0xB2, 0x8F, 0xB2, 0x90, /* 0xCC-0xCF */ + 0xB2, 0x91, 0xB2, 0x92, 0xB2, 0x93, 0xB2, 0x94, /* 0xD0-0xD3 */ + 0xB2, 0x95, 0xB2, 0x96, 0xB2, 0x97, 0xB4, 0xA3, /* 0xD4-0xD7 */ + 0xB2, 0x98, 0xB2, 0x99, 0xB2, 0x9A, 0xC3, 0xAC, /* 0xD8-0xDB */ + 0xF1, 0xE6, 0xB2, 0x9B, 0xB2, 0x9C, 0xB2, 0x9D, /* 0xDC-0xDF */ + 0xB2, 0x9E, 0xB2, 0x9F, 0xCA, 0xB8, 0xD2, 0xD3, /* 0xE0-0xE3 */ + 0xB2, 0xA0, 0xD6, 0xAA, 0xB3, 0x40, 0xEF, 0xF2, /* 0xE4-0xE7 */ + 0xB3, 0x41, 0xBE, 0xD8, 0xB3, 0x42, 0xBD, 0xC3, /* 0xE8-0xEB */ + 0xEF, 0xF3, 0xB6, 0xCC, 0xB0, 0xAB, 0xB3, 0x43, /* 0xEC-0xEF */ + 0xB3, 0x44, 0xB3, 0x45, 0xB3, 0x46, 0xCA, 0xAF, /* 0xF0-0xF3 */ + 0xB3, 0x47, 0xB3, 0x48, 0xED, 0xB6, 0xB3, 0x49, /* 0xF4-0xF7 */ + 0xED, 0xB7, 0xB3, 0x4A, 0xB3, 0x4B, 0xB3, 0x4C, /* 0xF8-0xFB */ + 0xB3, 0x4D, 0xCE, 0xF9, 0xB7, 0xAF, 0xBF, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0xED, 0xB8, 0xC2, 0xEB, 0xC9, 0xB0, 0xB3, 0x4E, /* 0x00-0x03 */ + 0xB3, 0x4F, 0xB3, 0x50, 0xB3, 0x51, 0xB3, 0x52, /* 0x04-0x07 */ + 0xB3, 0x53, 0xED, 0xB9, 0xB3, 0x54, 0xB3, 0x55, /* 0x08-0x0B */ + 0xC6, 0xF6, 0xBF, 0xB3, 0xB3, 0x56, 0xB3, 0x57, /* 0x0C-0x0F */ + 0xB3, 0x58, 0xED, 0xBC, 0xC5, 0xF8, 0xB3, 0x59, /* 0x10-0x13 */ + 0xD1, 0xD0, 0xB3, 0x5A, 0xD7, 0xA9, 0xED, 0xBA, /* 0x14-0x17 */ + 0xED, 0xBB, 0xB3, 0x5B, 0xD1, 0xE2, 0xB3, 0x5C, /* 0x18-0x1B */ + 0xED, 0xBF, 0xED, 0xC0, 0xB3, 0x5D, 0xED, 0xC4, /* 0x1C-0x1F */ + 0xB3, 0x5E, 0xB3, 0x5F, 0xB3, 0x60, 0xED, 0xC8, /* 0x20-0x23 */ + 0xB3, 0x61, 0xED, 0xC6, 0xED, 0xCE, 0xD5, 0xE8, /* 0x24-0x27 */ + 0xB3, 0x62, 0xED, 0xC9, 0xB3, 0x63, 0xB3, 0x64, /* 0x28-0x2B */ + 0xED, 0xC7, 0xED, 0xBE, 0xB3, 0x65, 0xB3, 0x66, /* 0x2C-0x2F */ + 0xC5, 0xE9, 0xB3, 0x67, 0xB3, 0x68, 0xB3, 0x69, /* 0x30-0x33 */ + 0xC6, 0xC6, 0xB3, 0x6A, 0xB3, 0x6B, 0xC9, 0xE9, /* 0x34-0x37 */ + 0xD4, 0xD2, 0xED, 0xC1, 0xED, 0xC2, 0xED, 0xC3, /* 0x38-0x3B */ + 0xED, 0xC5, 0xB3, 0x6C, 0xC0, 0xF9, 0xB3, 0x6D, /* 0x3C-0x3F */ + 0xB4, 0xA1, 0xB3, 0x6E, 0xB3, 0x6F, 0xB3, 0x70, /* 0x40-0x43 */ + 0xB3, 0x71, 0xB9, 0xE8, 0xB3, 0x72, 0xED, 0xD0, /* 0x44-0x47 */ + 0xB3, 0x73, 0xB3, 0x74, 0xB3, 0x75, 0xB3, 0x76, /* 0x48-0x4B */ + 0xED, 0xD1, 0xB3, 0x77, 0xED, 0xCA, 0xB3, 0x78, /* 0x4C-0x4F */ + 0xED, 0xCF, 0xB3, 0x79, 0xCE, 0xF8, 0xB3, 0x7A, /* 0x50-0x53 */ + 0xB3, 0x7B, 0xCB, 0xB6, 0xED, 0xCC, 0xED, 0xCD, /* 0x54-0x57 */ + 0xB3, 0x7C, 0xB3, 0x7D, 0xB3, 0x7E, 0xB3, 0x80, /* 0x58-0x5B */ + 0xB3, 0x81, 0xCF, 0xF5, 0xB3, 0x82, 0xB3, 0x83, /* 0x5C-0x5F */ + 0xB3, 0x84, 0xB3, 0x85, 0xB3, 0x86, 0xB3, 0x87, /* 0x60-0x63 */ + 0xB3, 0x88, 0xB3, 0x89, 0xB3, 0x8A, 0xB3, 0x8B, /* 0x64-0x67 */ + 0xB3, 0x8C, 0xB3, 0x8D, 0xED, 0xD2, 0xC1, 0xF2, /* 0x68-0x6B */ + 0xD3, 0xB2, 0xED, 0xCB, 0xC8, 0xB7, 0xB3, 0x8E, /* 0x6C-0x6F */ + 0xB3, 0x8F, 0xB3, 0x90, 0xB3, 0x91, 0xB3, 0x92, /* 0x70-0x73 */ + 0xB3, 0x93, 0xB3, 0x94, 0xB3, 0x95, 0xBC, 0xEF, /* 0x74-0x77 */ + 0xB3, 0x96, 0xB3, 0x97, 0xB3, 0x98, 0xB3, 0x99, /* 0x78-0x7B */ + 0xC5, 0xF0, 0xB3, 0x9A, 0xB3, 0x9B, 0xB3, 0x9C, /* 0x7C-0x7F */ + + 0xB3, 0x9D, 0xB3, 0x9E, 0xB3, 0x9F, 0xB3, 0xA0, /* 0x80-0x83 */ + 0xB4, 0x40, 0xB4, 0x41, 0xB4, 0x42, 0xED, 0xD6, /* 0x84-0x87 */ + 0xB4, 0x43, 0xB5, 0xEF, 0xB4, 0x44, 0xB4, 0x45, /* 0x88-0x8B */ + 0xC2, 0xB5, 0xB0, 0xAD, 0xCB, 0xE9, 0xB4, 0x46, /* 0x8C-0x8F */ + 0xB4, 0x47, 0xB1, 0xAE, 0xB4, 0x48, 0xED, 0xD4, /* 0x90-0x93 */ + 0xB4, 0x49, 0xB4, 0x4A, 0xB4, 0x4B, 0xCD, 0xEB, /* 0x94-0x97 */ + 0xB5, 0xE2, 0xB4, 0x4C, 0xED, 0xD5, 0xED, 0xD3, /* 0x98-0x9B */ + 0xED, 0xD7, 0xB4, 0x4D, 0xB4, 0x4E, 0xB5, 0xFA, /* 0x9C-0x9F */ + 0xB4, 0x4F, 0xED, 0xD8, 0xB4, 0x50, 0xED, 0xD9, /* 0xA0-0xA3 */ + 0xB4, 0x51, 0xED, 0xDC, 0xB4, 0x52, 0xB1, 0xCC, /* 0xA4-0xA7 */ + 0xB4, 0x53, 0xB4, 0x54, 0xB4, 0x55, 0xB4, 0x56, /* 0xA8-0xAB */ + 0xB4, 0x57, 0xB4, 0x58, 0xB4, 0x59, 0xB4, 0x5A, /* 0xAC-0xAF */ + 0xC5, 0xF6, 0xBC, 0xEE, 0xED, 0xDA, 0xCC, 0xBC, /* 0xB0-0xB3 */ + 0xB2, 0xEA, 0xB4, 0x5B, 0xB4, 0x5C, 0xB4, 0x5D, /* 0xB4-0xB7 */ + 0xB4, 0x5E, 0xED, 0xDB, 0xB4, 0x5F, 0xB4, 0x60, /* 0xB8-0xBB */ + 0xB4, 0x61, 0xB4, 0x62, 0xC4, 0xEB, 0xB4, 0x63, /* 0xBC-0xBF */ + 0xB4, 0x64, 0xB4, 0xC5, 0xB4, 0x65, 0xB4, 0x66, /* 0xC0-0xC3 */ + 0xB4, 0x67, 0xB0, 0xF5, 0xB4, 0x68, 0xB4, 0x69, /* 0xC4-0xC7 */ + 0xB4, 0x6A, 0xED, 0xDF, 0xC0, 0xDA, 0xB4, 0xE8, /* 0xC8-0xCB */ + 0xB4, 0x6B, 0xB4, 0x6C, 0xB4, 0x6D, 0xB4, 0x6E, /* 0xCC-0xCF */ + 0xC5, 0xCD, 0xB4, 0x6F, 0xB4, 0x70, 0xB4, 0x71, /* 0xD0-0xD3 */ + 0xED, 0xDD, 0xBF, 0xC4, 0xB4, 0x72, 0xB4, 0x73, /* 0xD4-0xD7 */ + 0xB4, 0x74, 0xED, 0xDE, 0xB4, 0x75, 0xB4, 0x76, /* 0xD8-0xDB */ + 0xB4, 0x77, 0xB4, 0x78, 0xB4, 0x79, 0xB4, 0x7A, /* 0xDC-0xDF */ + 0xB4, 0x7B, 0xB4, 0x7C, 0xB4, 0x7D, 0xB4, 0x7E, /* 0xE0-0xE3 */ + 0xB4, 0x80, 0xB4, 0x81, 0xB4, 0x82, 0xB4, 0x83, /* 0xE4-0xE7 */ + 0xC4, 0xA5, 0xB4, 0x84, 0xB4, 0x85, 0xB4, 0x86, /* 0xE8-0xEB */ + 0xED, 0xE0, 0xB4, 0x87, 0xB4, 0x88, 0xB4, 0x89, /* 0xEC-0xEF */ + 0xB4, 0x8A, 0xB4, 0x8B, 0xED, 0xE1, 0xB4, 0x8C, /* 0xF0-0xF3 */ + 0xED, 0xE3, 0xB4, 0x8D, 0xB4, 0x8E, 0xC1, 0xD7, /* 0xF4-0xF7 */ + 0xB4, 0x8F, 0xB4, 0x90, 0xBB, 0xC7, 0xB4, 0x91, /* 0xF8-0xFB */ + 0xB4, 0x92, 0xB4, 0x93, 0xB4, 0x94, 0xB4, 0x95, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0xB4, 0x96, 0xBD, 0xB8, 0xB4, 0x97, 0xB4, 0x98, /* 0x00-0x03 */ + 0xB4, 0x99, 0xED, 0xE2, 0xB4, 0x9A, 0xB4, 0x9B, /* 0x04-0x07 */ + 0xB4, 0x9C, 0xB4, 0x9D, 0xB4, 0x9E, 0xB4, 0x9F, /* 0x08-0x0B */ + 0xB4, 0xA0, 0xB5, 0x40, 0xB5, 0x41, 0xB5, 0x42, /* 0x0C-0x0F */ + 0xB5, 0x43, 0xB5, 0x44, 0xB5, 0x45, 0xED, 0xE4, /* 0x10-0x13 */ + 0xB5, 0x46, 0xB5, 0x47, 0xB5, 0x48, 0xB5, 0x49, /* 0x14-0x17 */ + 0xB5, 0x4A, 0xB5, 0x4B, 0xB5, 0x4C, 0xB5, 0x4D, /* 0x18-0x1B */ + 0xB5, 0x4E, 0xB5, 0x4F, 0xED, 0xE6, 0xB5, 0x50, /* 0x1C-0x1F */ + 0xB5, 0x51, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x54, /* 0x20-0x23 */ + 0xED, 0xE5, 0xB5, 0x55, 0xB5, 0x56, 0xB5, 0x57, /* 0x24-0x27 */ + 0xB5, 0x58, 0xB5, 0x59, 0xB5, 0x5A, 0xB5, 0x5B, /* 0x28-0x2B */ + 0xB5, 0x5C, 0xB5, 0x5D, 0xB5, 0x5E, 0xB5, 0x5F, /* 0x2C-0x2F */ + 0xB5, 0x60, 0xB5, 0x61, 0xB5, 0x62, 0xB5, 0x63, /* 0x30-0x33 */ + 0xED, 0xE7, 0xB5, 0x64, 0xB5, 0x65, 0xB5, 0x66, /* 0x34-0x37 */ + 0xB5, 0x67, 0xB5, 0x68, 0xCA, 0xBE, 0xEC, 0xEA, /* 0x38-0x3B */ + 0xC0, 0xF1, 0xB5, 0x69, 0xC9, 0xE7, 0xB5, 0x6A, /* 0x3C-0x3F */ + 0xEC, 0xEB, 0xC6, 0xEE, 0xB5, 0x6B, 0xB5, 0x6C, /* 0x40-0x43 */ + 0xB5, 0x6D, 0xB5, 0x6E, 0xEC, 0xEC, 0xB5, 0x6F, /* 0x44-0x47 */ + 0xC6, 0xED, 0xEC, 0xED, 0xB5, 0x70, 0xB5, 0x71, /* 0x48-0x4B */ + 0xB5, 0x72, 0xB5, 0x73, 0xB5, 0x74, 0xB5, 0x75, /* 0x4C-0x4F */ + 0xB5, 0x76, 0xB5, 0x77, 0xB5, 0x78, 0xEC, 0xF0, /* 0x50-0x53 */ + 0xB5, 0x79, 0xB5, 0x7A, 0xD7, 0xE6, 0xEC, 0xF3, /* 0x54-0x57 */ + 0xB5, 0x7B, 0xB5, 0x7C, 0xEC, 0xF1, 0xEC, 0xEE, /* 0x58-0x5B */ + 0xEC, 0xEF, 0xD7, 0xA3, 0xC9, 0xF1, 0xCB, 0xEE, /* 0x5C-0x5F */ + 0xEC, 0xF4, 0xB5, 0x7D, 0xEC, 0xF2, 0xB5, 0x7E, /* 0x60-0x63 */ + 0xB5, 0x80, 0xCF, 0xE9, 0xB5, 0x81, 0xEC, 0xF6, /* 0x64-0x67 */ + 0xC6, 0xB1, 0xB5, 0x82, 0xB5, 0x83, 0xB5, 0x84, /* 0x68-0x6B */ + 0xB5, 0x85, 0xBC, 0xC0, 0xB5, 0x86, 0xEC, 0xF5, /* 0x6C-0x6F */ + 0xB5, 0x87, 0xB5, 0x88, 0xB5, 0x89, 0xB5, 0x8A, /* 0x70-0x73 */ + 0xB5, 0x8B, 0xB5, 0x8C, 0xB5, 0x8D, 0xB5, 0xBB, /* 0x74-0x77 */ + 0xBB, 0xF6, 0xB5, 0x8E, 0xEC, 0xF7, 0xB5, 0x8F, /* 0x78-0x7B */ + 0xB5, 0x90, 0xB5, 0x91, 0xB5, 0x92, 0xB5, 0x93, /* 0x7C-0x7F */ + + 0xD9, 0xF7, 0xBD, 0xFB, 0xB5, 0x94, 0xB5, 0x95, /* 0x80-0x83 */ + 0xC2, 0xBB, 0xEC, 0xF8, 0xB5, 0x96, 0xB5, 0x97, /* 0x84-0x87 */ + 0xB5, 0x98, 0xB5, 0x99, 0xEC, 0xF9, 0xB5, 0x9A, /* 0x88-0x8B */ + 0xB5, 0x9B, 0xB5, 0x9C, 0xB5, 0x9D, 0xB8, 0xA3, /* 0x8C-0x8F */ + 0xB5, 0x9E, 0xB5, 0x9F, 0xB5, 0xA0, 0xB6, 0x40, /* 0x90-0x93 */ + 0xB6, 0x41, 0xB6, 0x42, 0xB6, 0x43, 0xB6, 0x44, /* 0x94-0x97 */ + 0xB6, 0x45, 0xB6, 0x46, 0xEC, 0xFA, 0xB6, 0x47, /* 0x98-0x9B */ + 0xB6, 0x48, 0xB6, 0x49, 0xB6, 0x4A, 0xB6, 0x4B, /* 0x9C-0x9F */ + 0xB6, 0x4C, 0xB6, 0x4D, 0xB6, 0x4E, 0xB6, 0x4F, /* 0xA0-0xA3 */ + 0xB6, 0x50, 0xB6, 0x51, 0xB6, 0x52, 0xEC, 0xFB, /* 0xA4-0xA7 */ + 0xB6, 0x53, 0xB6, 0x54, 0xB6, 0x55, 0xB6, 0x56, /* 0xA8-0xAB */ + 0xB6, 0x57, 0xB6, 0x58, 0xB6, 0x59, 0xB6, 0x5A, /* 0xAC-0xAF */ + 0xB6, 0x5B, 0xB6, 0x5C, 0xB6, 0x5D, 0xEC, 0xFC, /* 0xB0-0xB3 */ + 0xB6, 0x5E, 0xB6, 0x5F, 0xB6, 0x60, 0xB6, 0x61, /* 0xB4-0xB7 */ + 0xB6, 0x62, 0xD3, 0xED, 0xD8, 0xAE, 0xC0, 0xEB, /* 0xB8-0xBB */ + 0xB6, 0x63, 0xC7, 0xDD, 0xBA, 0xCC, 0xB6, 0x64, /* 0xBC-0xBF */ + 0xD0, 0xE3, 0xCB, 0xBD, 0xB6, 0x65, 0xCD, 0xBA, /* 0xC0-0xC3 */ + 0xB6, 0x66, 0xB6, 0x67, 0xB8, 0xD1, 0xB6, 0x68, /* 0xC4-0xC7 */ + 0xB6, 0x69, 0xB1, 0xFC, 0xB6, 0x6A, 0xC7, 0xEF, /* 0xC8-0xCB */ + 0xB6, 0x6B, 0xD6, 0xD6, 0xB6, 0x6C, 0xB6, 0x6D, /* 0xCC-0xCF */ + 0xB6, 0x6E, 0xBF, 0xC6, 0xC3, 0xEB, 0xB6, 0x6F, /* 0xD0-0xD3 */ + 0xB6, 0x70, 0xEF, 0xF5, 0xB6, 0x71, 0xB6, 0x72, /* 0xD4-0xD7 */ + 0xC3, 0xD8, 0xB6, 0x73, 0xB6, 0x74, 0xB6, 0x75, /* 0xD8-0xDB */ + 0xB6, 0x76, 0xB6, 0x77, 0xB6, 0x78, 0xD7, 0xE2, /* 0xDC-0xDF */ + 0xB6, 0x79, 0xB6, 0x7A, 0xB6, 0x7B, 0xEF, 0xF7, /* 0xE0-0xE3 */ + 0xB3, 0xD3, 0xB6, 0x7C, 0xC7, 0xD8, 0xD1, 0xED, /* 0xE4-0xE7 */ + 0xB6, 0x7D, 0xD6, 0xC8, 0xB6, 0x7E, 0xEF, 0xF8, /* 0xE8-0xEB */ + 0xB6, 0x80, 0xEF, 0xF6, 0xB6, 0x81, 0xBB, 0xFD, /* 0xEC-0xEF */ + 0xB3, 0xC6, 0xB6, 0x82, 0xB6, 0x83, 0xB6, 0x84, /* 0xF0-0xF3 */ + 0xB6, 0x85, 0xB6, 0x86, 0xB6, 0x87, 0xB6, 0x88, /* 0xF4-0xF7 */ + 0xBD, 0xD5, 0xB6, 0x89, 0xB6, 0x8A, 0xD2, 0xC6, /* 0xF8-0xFB */ + 0xB6, 0x8B, 0xBB, 0xE0, 0xB6, 0x8C, 0xB6, 0x8D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7A[512] = { + 0xCF, 0xA1, 0xB6, 0x8E, 0xEF, 0xFC, 0xEF, 0xFB, /* 0x00-0x03 */ + 0xB6, 0x8F, 0xB6, 0x90, 0xEF, 0xF9, 0xB6, 0x91, /* 0x04-0x07 */ + 0xB6, 0x92, 0xB6, 0x93, 0xB6, 0x94, 0xB3, 0xCC, /* 0x08-0x0B */ + 0xB6, 0x95, 0xC9, 0xD4, 0xCB, 0xB0, 0xB6, 0x96, /* 0x0C-0x0F */ + 0xB6, 0x97, 0xB6, 0x98, 0xB6, 0x99, 0xB6, 0x9A, /* 0x10-0x13 */ + 0xEF, 0xFE, 0xB6, 0x9B, 0xB6, 0x9C, 0xB0, 0xDE, /* 0x14-0x17 */ + 0xB6, 0x9D, 0xB6, 0x9E, 0xD6, 0xC9, 0xB6, 0x9F, /* 0x18-0x1B */ + 0xB6, 0xA0, 0xB7, 0x40, 0xEF, 0xFD, 0xB7, 0x41, /* 0x1C-0x1F */ + 0xB3, 0xED, 0xB7, 0x42, 0xB7, 0x43, 0xF6, 0xD5, /* 0x20-0x23 */ + 0xB7, 0x44, 0xB7, 0x45, 0xB7, 0x46, 0xB7, 0x47, /* 0x24-0x27 */ + 0xB7, 0x48, 0xB7, 0x49, 0xB7, 0x4A, 0xB7, 0x4B, /* 0x28-0x2B */ + 0xB7, 0x4C, 0xB7, 0x4D, 0xB7, 0x4E, 0xB7, 0x4F, /* 0x2C-0x2F */ + 0xB7, 0x50, 0xB7, 0x51, 0xB7, 0x52, 0xCE, 0xC8, /* 0x30-0x33 */ + 0xB7, 0x53, 0xB7, 0x54, 0xB7, 0x55, 0xF0, 0xA2, /* 0x34-0x37 */ + 0xB7, 0x56, 0xF0, 0xA1, 0xB7, 0x57, 0xB5, 0xBE, /* 0x38-0x3B */ + 0xBC, 0xDA, 0xBB, 0xFC, 0xB7, 0x58, 0xB8, 0xE5, /* 0x3C-0x3F */ + 0xB7, 0x59, 0xB7, 0x5A, 0xB7, 0x5B, 0xB7, 0x5C, /* 0x40-0x43 */ + 0xB7, 0x5D, 0xB7, 0x5E, 0xC4, 0xC2, 0xB7, 0x5F, /* 0x44-0x47 */ + 0xB7, 0x60, 0xB7, 0x61, 0xB7, 0x62, 0xB7, 0x63, /* 0x48-0x4B */ + 0xB7, 0x64, 0xB7, 0x65, 0xB7, 0x66, 0xB7, 0x67, /* 0x4C-0x4F */ + 0xB7, 0x68, 0xF0, 0xA3, 0xB7, 0x69, 0xB7, 0x6A, /* 0x50-0x53 */ + 0xB7, 0x6B, 0xB7, 0x6C, 0xB7, 0x6D, 0xCB, 0xEB, /* 0x54-0x57 */ + 0xB7, 0x6E, 0xB7, 0x6F, 0xB7, 0x70, 0xB7, 0x71, /* 0x58-0x5B */ + 0xB7, 0x72, 0xB7, 0x73, 0xB7, 0x74, 0xB7, 0x75, /* 0x5C-0x5F */ + 0xB7, 0x76, 0xB7, 0x77, 0xB7, 0x78, 0xB7, 0x79, /* 0x60-0x63 */ + 0xB7, 0x7A, 0xB7, 0x7B, 0xB7, 0x7C, 0xB7, 0x7D, /* 0x64-0x67 */ + 0xB7, 0x7E, 0xB7, 0x80, 0xB7, 0x81, 0xB7, 0x82, /* 0x68-0x6B */ + 0xB7, 0x83, 0xB7, 0x84, 0xB7, 0x85, 0xB7, 0x86, /* 0x6C-0x6F */ + 0xF0, 0xA6, 0xB7, 0x87, 0xB7, 0x88, 0xB7, 0x89, /* 0x70-0x73 */ + 0xD1, 0xA8, 0xB7, 0x8A, 0xBE, 0xBF, 0xC7, 0xEE, /* 0x74-0x77 */ + 0xF1, 0xB6, 0xF1, 0xB7, 0xBF, 0xD5, 0xB7, 0x8B, /* 0x78-0x7B */ + 0xB7, 0x8C, 0xB7, 0x8D, 0xB7, 0x8E, 0xB4, 0xA9, /* 0x7C-0x7F */ + + 0xF1, 0xB8, 0xCD, 0xBB, 0xB7, 0x8F, 0xC7, 0xD4, /* 0x80-0x83 */ + 0xD5, 0xAD, 0xB7, 0x90, 0xF1, 0xB9, 0xB7, 0x91, /* 0x84-0x87 */ + 0xF1, 0xBA, 0xB7, 0x92, 0xB7, 0x93, 0xB7, 0x94, /* 0x88-0x8B */ + 0xB7, 0x95, 0xC7, 0xCF, 0xB7, 0x96, 0xB7, 0x97, /* 0x8C-0x8F */ + 0xB7, 0x98, 0xD2, 0xA4, 0xD6, 0xCF, 0xB7, 0x99, /* 0x90-0x93 */ + 0xB7, 0x9A, 0xF1, 0xBB, 0xBD, 0xD1, 0xB4, 0xB0, /* 0x94-0x97 */ + 0xBE, 0xBD, 0xB7, 0x9B, 0xB7, 0x9C, 0xB7, 0x9D, /* 0x98-0x9B */ + 0xB4, 0xDC, 0xCE, 0xD1, 0xB7, 0x9E, 0xBF, 0xDF, /* 0x9C-0x9F */ + 0xF1, 0xBD, 0xB7, 0x9F, 0xB7, 0xA0, 0xB8, 0x40, /* 0xA0-0xA3 */ + 0xB8, 0x41, 0xBF, 0xFA, 0xF1, 0xBC, 0xB8, 0x42, /* 0xA4-0xA7 */ + 0xF1, 0xBF, 0xB8, 0x43, 0xB8, 0x44, 0xB8, 0x45, /* 0xA8-0xAB */ + 0xF1, 0xBE, 0xF1, 0xC0, 0xB8, 0x46, 0xB8, 0x47, /* 0xAC-0xAF */ + 0xB8, 0x48, 0xB8, 0x49, 0xB8, 0x4A, 0xF1, 0xC1, /* 0xB0-0xB3 */ + 0xB8, 0x4B, 0xB8, 0x4C, 0xB8, 0x4D, 0xB8, 0x4E, /* 0xB4-0xB7 */ + 0xB8, 0x4F, 0xB8, 0x50, 0xB8, 0x51, 0xB8, 0x52, /* 0xB8-0xBB */ + 0xB8, 0x53, 0xB8, 0x54, 0xB8, 0x55, 0xC1, 0xFE, /* 0xBC-0xBF */ + 0xB8, 0x56, 0xB8, 0x57, 0xB8, 0x58, 0xB8, 0x59, /* 0xC0-0xC3 */ + 0xB8, 0x5A, 0xB8, 0x5B, 0xB8, 0x5C, 0xB8, 0x5D, /* 0xC4-0xC7 */ + 0xB8, 0x5E, 0xB8, 0x5F, 0xB8, 0x60, 0xC1, 0xA2, /* 0xC8-0xCB */ + 0xB8, 0x61, 0xB8, 0x62, 0xB8, 0x63, 0xB8, 0x64, /* 0xCC-0xCF */ + 0xB8, 0x65, 0xB8, 0x66, 0xB8, 0x67, 0xB8, 0x68, /* 0xD0-0xD3 */ + 0xB8, 0x69, 0xB8, 0x6A, 0xCA, 0xFA, 0xB8, 0x6B, /* 0xD4-0xD7 */ + 0xB8, 0x6C, 0xD5, 0xBE, 0xB8, 0x6D, 0xB8, 0x6E, /* 0xD8-0xDB */ + 0xB8, 0x6F, 0xB8, 0x70, 0xBE, 0xBA, 0xBE, 0xB9, /* 0xDC-0xDF */ + 0xD5, 0xC2, 0xB8, 0x71, 0xB8, 0x72, 0xBF, 0xA2, /* 0xE0-0xE3 */ + 0xB8, 0x73, 0xCD, 0xAF, 0xF1, 0xB5, 0xB8, 0x74, /* 0xE4-0xE7 */ + 0xB8, 0x75, 0xB8, 0x76, 0xB8, 0x77, 0xB8, 0x78, /* 0xE8-0xEB */ + 0xB8, 0x79, 0xBD, 0xDF, 0xB8, 0x7A, 0xB6, 0xCB, /* 0xEC-0xEF */ + 0xB8, 0x7B, 0xB8, 0x7C, 0xB8, 0x7D, 0xB8, 0x7E, /* 0xF0-0xF3 */ + 0xB8, 0x80, 0xB8, 0x81, 0xB8, 0x82, 0xB8, 0x83, /* 0xF4-0xF7 */ + 0xB8, 0x84, 0xD6, 0xF1, 0xF3, 0xC3, 0xB8, 0x85, /* 0xF8-0xFB */ + 0xB8, 0x86, 0xF3, 0xC4, 0xB8, 0x87, 0xB8, 0xCD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0xB8, 0x88, 0xB8, 0x89, 0xB8, 0x8A, 0xF3, 0xC6, /* 0x00-0x03 */ + 0xF3, 0xC7, 0xB8, 0x8B, 0xB0, 0xCA, 0xB8, 0x8C, /* 0x04-0x07 */ + 0xF3, 0xC5, 0xB8, 0x8D, 0xF3, 0xC9, 0xCB, 0xF1, /* 0x08-0x0B */ + 0xB8, 0x8E, 0xB8, 0x8F, 0xB8, 0x90, 0xF3, 0xCB, /* 0x0C-0x0F */ + 0xB8, 0x91, 0xD0, 0xA6, 0xB8, 0x92, 0xB8, 0x93, /* 0x10-0x13 */ + 0xB1, 0xCA, 0xF3, 0xC8, 0xB8, 0x94, 0xB8, 0x95, /* 0x14-0x17 */ + 0xB8, 0x96, 0xF3, 0xCF, 0xB8, 0x97, 0xB5, 0xD1, /* 0x18-0x1B */ + 0xB8, 0x98, 0xB8, 0x99, 0xF3, 0xD7, 0xB8, 0x9A, /* 0x1C-0x1F */ + 0xF3, 0xD2, 0xB8, 0x9B, 0xB8, 0x9C, 0xB8, 0x9D, /* 0x20-0x23 */ + 0xF3, 0xD4, 0xF3, 0xD3, 0xB7, 0xFB, 0xB8, 0x9E, /* 0x24-0x27 */ + 0xB1, 0xBF, 0xB8, 0x9F, 0xF3, 0xCE, 0xF3, 0xCA, /* 0x28-0x2B */ + 0xB5, 0xDA, 0xB8, 0xA0, 0xF3, 0xD0, 0xB9, 0x40, /* 0x2C-0x2F */ + 0xB9, 0x41, 0xF3, 0xD1, 0xB9, 0x42, 0xF3, 0xD5, /* 0x30-0x33 */ + 0xB9, 0x43, 0xB9, 0x44, 0xB9, 0x45, 0xB9, 0x46, /* 0x34-0x37 */ + 0xF3, 0xCD, 0xB9, 0x47, 0xBC, 0xE3, 0xB9, 0x48, /* 0x38-0x3B */ + 0xC1, 0xFD, 0xB9, 0x49, 0xF3, 0xD6, 0xB9, 0x4A, /* 0x3C-0x3F */ + 0xB9, 0x4B, 0xB9, 0x4C, 0xB9, 0x4D, 0xB9, 0x4E, /* 0x40-0x43 */ + 0xB9, 0x4F, 0xF3, 0xDA, 0xB9, 0x50, 0xF3, 0xCC, /* 0x44-0x47 */ + 0xB9, 0x51, 0xB5, 0xC8, 0xB9, 0x52, 0xBD, 0xEE, /* 0x48-0x4B */ + 0xF3, 0xDC, 0xB9, 0x53, 0xB9, 0x54, 0xB7, 0xA4, /* 0x4C-0x4F */ + 0xBF, 0xF0, 0xD6, 0xFE, 0xCD, 0xB2, 0xB9, 0x55, /* 0x50-0x53 */ + 0xB4, 0xF0, 0xB9, 0x56, 0xB2, 0xDF, 0xB9, 0x57, /* 0x54-0x57 */ + 0xF3, 0xD8, 0xB9, 0x58, 0xF3, 0xD9, 0xC9, 0xB8, /* 0x58-0x5B */ + 0xB9, 0x59, 0xF3, 0xDD, 0xB9, 0x5A, 0xB9, 0x5B, /* 0x5C-0x5F */ + 0xF3, 0xDE, 0xB9, 0x5C, 0xF3, 0xE1, 0xB9, 0x5D, /* 0x60-0x63 */ + 0xB9, 0x5E, 0xB9, 0x5F, 0xB9, 0x60, 0xB9, 0x61, /* 0x64-0x67 */ + 0xB9, 0x62, 0xB9, 0x63, 0xB9, 0x64, 0xB9, 0x65, /* 0x68-0x6B */ + 0xB9, 0x66, 0xB9, 0x67, 0xF3, 0xDF, 0xB9, 0x68, /* 0x6C-0x6F */ + 0xB9, 0x69, 0xF3, 0xE3, 0xF3, 0xE2, 0xB9, 0x6A, /* 0x70-0x73 */ + 0xB9, 0x6B, 0xF3, 0xDB, 0xB9, 0x6C, 0xBF, 0xEA, /* 0x74-0x77 */ + 0xB9, 0x6D, 0xB3, 0xEF, 0xB9, 0x6E, 0xF3, 0xE0, /* 0x78-0x7B */ + 0xB9, 0x6F, 0xB9, 0x70, 0xC7, 0xA9, 0xB9, 0x71, /* 0x7C-0x7F */ + + 0xBC, 0xF2, 0xB9, 0x72, 0xB9, 0x73, 0xB9, 0x74, /* 0x80-0x83 */ + 0xB9, 0x75, 0xF3, 0xEB, 0xB9, 0x76, 0xB9, 0x77, /* 0x84-0x87 */ + 0xB9, 0x78, 0xB9, 0x79, 0xB9, 0x7A, 0xB9, 0x7B, /* 0x88-0x8B */ + 0xB9, 0x7C, 0xB9, 0xBF, 0xB9, 0x7D, 0xB9, 0x7E, /* 0x8C-0x8F */ + 0xF3, 0xE4, 0xB9, 0x80, 0xB9, 0x81, 0xB9, 0x82, /* 0x90-0x93 */ + 0xB2, 0xAD, 0xBB, 0xFE, 0xB9, 0x83, 0xCB, 0xE3, /* 0x94-0x97 */ + 0xB9, 0x84, 0xB9, 0x85, 0xB9, 0x86, 0xB9, 0x87, /* 0x98-0x9B */ + 0xF3, 0xED, 0xF3, 0xE9, 0xB9, 0x88, 0xB9, 0x89, /* 0x9C-0x9F */ + 0xB9, 0x8A, 0xB9, 0xDC, 0xF3, 0xEE, 0xB9, 0x8B, /* 0xA0-0xA3 */ + 0xB9, 0x8C, 0xB9, 0x8D, 0xF3, 0xE5, 0xF3, 0xE6, /* 0xA4-0xA7 */ + 0xF3, 0xEA, 0xC2, 0xE1, 0xF3, 0xEC, 0xF3, 0xEF, /* 0xA8-0xAB */ + 0xF3, 0xE8, 0xBC, 0xFD, 0xB9, 0x8E, 0xB9, 0x8F, /* 0xAC-0xAF */ + 0xB9, 0x90, 0xCF, 0xE4, 0xB9, 0x91, 0xB9, 0x92, /* 0xB0-0xB3 */ + 0xF3, 0xF0, 0xB9, 0x93, 0xB9, 0x94, 0xB9, 0x95, /* 0xB4-0xB7 */ + 0xF3, 0xE7, 0xB9, 0x96, 0xB9, 0x97, 0xB9, 0x98, /* 0xB8-0xBB */ + 0xB9, 0x99, 0xB9, 0x9A, 0xB9, 0x9B, 0xB9, 0x9C, /* 0xBC-0xBF */ + 0xB9, 0x9D, 0xF3, 0xF2, 0xB9, 0x9E, 0xB9, 0x9F, /* 0xC0-0xC3 */ + 0xB9, 0xA0, 0xBA, 0x40, 0xD7, 0xAD, 0xC6, 0xAA, /* 0xC4-0xC7 */ + 0xBA, 0x41, 0xBA, 0x42, 0xBA, 0x43, 0xBA, 0x44, /* 0xC8-0xCB */ + 0xF3, 0xF3, 0xBA, 0x45, 0xBA, 0x46, 0xBA, 0x47, /* 0xCC-0xCF */ + 0xBA, 0x48, 0xF3, 0xF1, 0xBA, 0x49, 0xC2, 0xA8, /* 0xD0-0xD3 */ + 0xBA, 0x4A, 0xBA, 0x4B, 0xBA, 0x4C, 0xBA, 0x4D, /* 0xD4-0xD7 */ + 0xBA, 0x4E, 0xB8, 0xDD, 0xF3, 0xF5, 0xBA, 0x4F, /* 0xD8-0xDB */ + 0xBA, 0x50, 0xF3, 0xF4, 0xBA, 0x51, 0xBA, 0x52, /* 0xDC-0xDF */ + 0xBA, 0x53, 0xB4, 0xDB, 0xBA, 0x54, 0xBA, 0x55, /* 0xE0-0xE3 */ + 0xBA, 0x56, 0xF3, 0xF6, 0xF3, 0xF7, 0xBA, 0x57, /* 0xE4-0xE7 */ + 0xBA, 0x58, 0xBA, 0x59, 0xF3, 0xF8, 0xBA, 0x5A, /* 0xE8-0xEB */ + 0xBA, 0x5B, 0xBA, 0x5C, 0xC0, 0xBA, 0xBA, 0x5D, /* 0xEC-0xEF */ + 0xBA, 0x5E, 0xC0, 0xE9, 0xBA, 0x5F, 0xBA, 0x60, /* 0xF0-0xF3 */ + 0xBA, 0x61, 0xBA, 0x62, 0xBA, 0x63, 0xC5, 0xF1, /* 0xF4-0xF7 */ + 0xBA, 0x64, 0xBA, 0x65, 0xBA, 0x66, 0xBA, 0x67, /* 0xF8-0xFB */ + 0xF3, 0xFB, 0xBA, 0x68, 0xF3, 0xFA, 0xBA, 0x69, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7C[512] = { + 0xBA, 0x6A, 0xBA, 0x6B, 0xBA, 0x6C, 0xBA, 0x6D, /* 0x00-0x03 */ + 0xBA, 0x6E, 0xBA, 0x6F, 0xBA, 0x70, 0xB4, 0xD8, /* 0x04-0x07 */ + 0xBA, 0x71, 0xBA, 0x72, 0xBA, 0x73, 0xF3, 0xFE, /* 0x08-0x0B */ + 0xF3, 0xF9, 0xBA, 0x74, 0xBA, 0x75, 0xF3, 0xFC, /* 0x0C-0x0F */ + 0xBA, 0x76, 0xBA, 0x77, 0xBA, 0x78, 0xBA, 0x79, /* 0x10-0x13 */ + 0xBA, 0x7A, 0xBA, 0x7B, 0xF3, 0xFD, 0xBA, 0x7C, /* 0x14-0x17 */ + 0xBA, 0x7D, 0xBA, 0x7E, 0xBA, 0x80, 0xBA, 0x81, /* 0x18-0x1B */ + 0xBA, 0x82, 0xBA, 0x83, 0xBA, 0x84, 0xF4, 0xA1, /* 0x1C-0x1F */ + 0xBA, 0x85, 0xBA, 0x86, 0xBA, 0x87, 0xBA, 0x88, /* 0x20-0x23 */ + 0xBA, 0x89, 0xBA, 0x8A, 0xF4, 0xA3, 0xBB, 0xC9, /* 0x24-0x27 */ + 0xBA, 0x8B, 0xBA, 0x8C, 0xF4, 0xA2, 0xBA, 0x8D, /* 0x28-0x2B */ + 0xBA, 0x8E, 0xBA, 0x8F, 0xBA, 0x90, 0xBA, 0x91, /* 0x2C-0x2F */ + 0xBA, 0x92, 0xBA, 0x93, 0xBA, 0x94, 0xBA, 0x95, /* 0x30-0x33 */ + 0xBA, 0x96, 0xBA, 0x97, 0xBA, 0x98, 0xBA, 0x99, /* 0x34-0x37 */ + 0xF4, 0xA4, 0xBA, 0x9A, 0xBA, 0x9B, 0xBA, 0x9C, /* 0x38-0x3B */ + 0xBA, 0x9D, 0xBA, 0x9E, 0xBA, 0x9F, 0xB2, 0xBE, /* 0x3C-0x3F */ + 0xF4, 0xA6, 0xF4, 0xA5, 0xBA, 0xA0, 0xBB, 0x40, /* 0x40-0x43 */ + 0xBB, 0x41, 0xBB, 0x42, 0xBB, 0x43, 0xBB, 0x44, /* 0x44-0x47 */ + 0xBB, 0x45, 0xBB, 0x46, 0xBB, 0x47, 0xBB, 0x48, /* 0x48-0x4B */ + 0xBB, 0x49, 0xBC, 0xAE, 0xBB, 0x4A, 0xBB, 0x4B, /* 0x4C-0x4F */ + 0xBB, 0x4C, 0xBB, 0x4D, 0xBB, 0x4E, 0xBB, 0x4F, /* 0x50-0x53 */ + 0xBB, 0x50, 0xBB, 0x51, 0xBB, 0x52, 0xBB, 0x53, /* 0x54-0x57 */ + 0xBB, 0x54, 0xBB, 0x55, 0xBB, 0x56, 0xBB, 0x57, /* 0x58-0x5B */ + 0xBB, 0x58, 0xBB, 0x59, 0xBB, 0x5A, 0xBB, 0x5B, /* 0x5C-0x5F */ + 0xBB, 0x5C, 0xBB, 0x5D, 0xBB, 0x5E, 0xBB, 0x5F, /* 0x60-0x63 */ + 0xBB, 0x60, 0xBB, 0x61, 0xBB, 0x62, 0xBB, 0x63, /* 0x64-0x67 */ + 0xBB, 0x64, 0xBB, 0x65, 0xBB, 0x66, 0xBB, 0x67, /* 0x68-0x6B */ + 0xBB, 0x68, 0xBB, 0x69, 0xBB, 0x6A, 0xBB, 0x6B, /* 0x6C-0x6F */ + 0xBB, 0x6C, 0xBB, 0x6D, 0xBB, 0x6E, 0xC3, 0xD7, /* 0x70-0x73 */ + 0xD9, 0xE1, 0xBB, 0x6F, 0xBB, 0x70, 0xBB, 0x71, /* 0x74-0x77 */ + 0xBB, 0x72, 0xBB, 0x73, 0xBB, 0x74, 0xC0, 0xE0, /* 0x78-0x7B */ + 0xF4, 0xCC, 0xD7, 0xD1, 0xBB, 0x75, 0xBB, 0x76, /* 0x7C-0x7F */ + + 0xBB, 0x77, 0xBB, 0x78, 0xBB, 0x79, 0xBB, 0x7A, /* 0x80-0x83 */ + 0xBB, 0x7B, 0xBB, 0x7C, 0xBB, 0x7D, 0xBB, 0x7E, /* 0x84-0x87 */ + 0xBB, 0x80, 0xB7, 0xDB, 0xBB, 0x81, 0xBB, 0x82, /* 0x88-0x8B */ + 0xBB, 0x83, 0xBB, 0x84, 0xBB, 0x85, 0xBB, 0x86, /* 0x8C-0x8F */ + 0xBB, 0x87, 0xF4, 0xCE, 0xC1, 0xA3, 0xBB, 0x88, /* 0x90-0x93 */ + 0xBB, 0x89, 0xC6, 0xC9, 0xBB, 0x8A, 0xB4, 0xD6, /* 0x94-0x97 */ + 0xD5, 0xB3, 0xBB, 0x8B, 0xBB, 0x8C, 0xBB, 0x8D, /* 0x98-0x9B */ + 0xF4, 0xD0, 0xF4, 0xCF, 0xF4, 0xD1, 0xCB, 0xDA, /* 0x9C-0x9F */ + 0xBB, 0x8E, 0xBB, 0x8F, 0xF4, 0xD2, 0xBB, 0x90, /* 0xA0-0xA3 */ + 0xD4, 0xC1, 0xD6, 0xE0, 0xBB, 0x91, 0xBB, 0x92, /* 0xA4-0xA7 */ + 0xBB, 0x93, 0xBB, 0x94, 0xB7, 0xE0, 0xBB, 0x95, /* 0xA8-0xAB */ + 0xBB, 0x96, 0xBB, 0x97, 0xC1, 0xB8, 0xBB, 0x98, /* 0xAC-0xAF */ + 0xBB, 0x99, 0xC1, 0xBB, 0xF4, 0xD3, 0xBE, 0xAC, /* 0xB0-0xB3 */ + 0xBB, 0x9A, 0xBB, 0x9B, 0xBB, 0x9C, 0xBB, 0x9D, /* 0xB4-0xB7 */ + 0xBB, 0x9E, 0xB4, 0xE2, 0xBB, 0x9F, 0xBB, 0xA0, /* 0xB8-0xBB */ + 0xF4, 0xD4, 0xF4, 0xD5, 0xBE, 0xAB, 0xBC, 0x40, /* 0xBC-0xBF */ + 0xBC, 0x41, 0xF4, 0xD6, 0xBC, 0x42, 0xBC, 0x43, /* 0xC0-0xC3 */ + 0xBC, 0x44, 0xF4, 0xDB, 0xBC, 0x45, 0xF4, 0xD7, /* 0xC4-0xC7 */ + 0xF4, 0xDA, 0xBC, 0x46, 0xBA, 0xFD, 0xBC, 0x47, /* 0xC8-0xCB */ + 0xF4, 0xD8, 0xF4, 0xD9, 0xBC, 0x48, 0xBC, 0x49, /* 0xCC-0xCF */ + 0xBC, 0x4A, 0xBC, 0x4B, 0xBC, 0x4C, 0xBC, 0x4D, /* 0xD0-0xD3 */ + 0xBC, 0x4E, 0xB8, 0xE2, 0xCC, 0xC7, 0xF4, 0xDC, /* 0xD4-0xD7 */ + 0xBC, 0x4F, 0xB2, 0xDA, 0xBC, 0x50, 0xBC, 0x51, /* 0xD8-0xDB */ + 0xC3, 0xD3, 0xBC, 0x52, 0xBC, 0x53, 0xD4, 0xE3, /* 0xDC-0xDF */ + 0xBF, 0xB7, 0xBC, 0x54, 0xBC, 0x55, 0xBC, 0x56, /* 0xE0-0xE3 */ + 0xBC, 0x57, 0xBC, 0x58, 0xBC, 0x59, 0xBC, 0x5A, /* 0xE4-0xE7 */ + 0xF4, 0xDD, 0xBC, 0x5B, 0xBC, 0x5C, 0xBC, 0x5D, /* 0xE8-0xEB */ + 0xBC, 0x5E, 0xBC, 0x5F, 0xBC, 0x60, 0xC5, 0xB4, /* 0xEC-0xEF */ + 0xBC, 0x61, 0xBC, 0x62, 0xBC, 0x63, 0xBC, 0x64, /* 0xF0-0xF3 */ + 0xBC, 0x65, 0xBC, 0x66, 0xBC, 0x67, 0xBC, 0x68, /* 0xF4-0xF7 */ + 0xF4, 0xE9, 0xBC, 0x69, 0xBC, 0x6A, 0xCF, 0xB5, /* 0xF8-0xFB */ + 0xBC, 0x6B, 0xBC, 0x6C, 0xBC, 0x6D, 0xBC, 0x6E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0xBC, 0x6F, 0xBC, 0x70, 0xBC, 0x71, 0xBC, 0x72, /* 0x00-0x03 */ + 0xBC, 0x73, 0xBC, 0x74, 0xBC, 0x75, 0xBC, 0x76, /* 0x04-0x07 */ + 0xBC, 0x77, 0xBC, 0x78, 0xCE, 0xC9, 0xBC, 0x79, /* 0x08-0x0B */ + 0xBC, 0x7A, 0xBC, 0x7B, 0xBC, 0x7C, 0xBC, 0x7D, /* 0x0C-0x0F */ + 0xBC, 0x7E, 0xBC, 0x80, 0xBC, 0x81, 0xBC, 0x82, /* 0x10-0x13 */ + 0xBC, 0x83, 0xBC, 0x84, 0xBC, 0x85, 0xBC, 0x86, /* 0x14-0x17 */ + 0xBC, 0x87, 0xBC, 0x88, 0xBC, 0x89, 0xBC, 0x8A, /* 0x18-0x1B */ + 0xBC, 0x8B, 0xBC, 0x8C, 0xBC, 0x8D, 0xBC, 0x8E, /* 0x1C-0x1F */ + 0xCB, 0xD8, 0xBC, 0x8F, 0xCB, 0xF7, 0xBC, 0x90, /* 0x20-0x23 */ + 0xBC, 0x91, 0xBC, 0x92, 0xBC, 0x93, 0xBD, 0xF4, /* 0x24-0x27 */ + 0xBC, 0x94, 0xBC, 0x95, 0xBC, 0x96, 0xD7, 0xCF, /* 0x28-0x2B */ + 0xBC, 0x97, 0xBC, 0x98, 0xBC, 0x99, 0xC0, 0xDB, /* 0x2C-0x2F */ + 0xBC, 0x9A, 0xBC, 0x9B, 0xBC, 0x9C, 0xBC, 0x9D, /* 0x30-0x33 */ + 0xBC, 0x9E, 0xBC, 0x9F, 0xBC, 0xA0, 0xBD, 0x40, /* 0x34-0x37 */ + 0xBD, 0x41, 0xBD, 0x42, 0xBD, 0x43, 0xBD, 0x44, /* 0x38-0x3B */ + 0xBD, 0x45, 0xBD, 0x46, 0xBD, 0x47, 0xBD, 0x48, /* 0x3C-0x3F */ + 0xBD, 0x49, 0xBD, 0x4A, 0xBD, 0x4B, 0xBD, 0x4C, /* 0x40-0x43 */ + 0xBD, 0x4D, 0xBD, 0x4E, 0xBD, 0x4F, 0xBD, 0x50, /* 0x44-0x47 */ + 0xBD, 0x51, 0xBD, 0x52, 0xBD, 0x53, 0xBD, 0x54, /* 0x48-0x4B */ + 0xBD, 0x55, 0xBD, 0x56, 0xBD, 0x57, 0xBD, 0x58, /* 0x4C-0x4F */ + 0xBD, 0x59, 0xBD, 0x5A, 0xBD, 0x5B, 0xBD, 0x5C, /* 0x50-0x53 */ + 0xBD, 0x5D, 0xBD, 0x5E, 0xBD, 0x5F, 0xBD, 0x60, /* 0x54-0x57 */ + 0xBD, 0x61, 0xBD, 0x62, 0xBD, 0x63, 0xBD, 0x64, /* 0x58-0x5B */ + 0xBD, 0x65, 0xBD, 0x66, 0xBD, 0x67, 0xBD, 0x68, /* 0x5C-0x5F */ + 0xBD, 0x69, 0xBD, 0x6A, 0xBD, 0x6B, 0xBD, 0x6C, /* 0x60-0x63 */ + 0xBD, 0x6D, 0xBD, 0x6E, 0xBD, 0x6F, 0xBD, 0x70, /* 0x64-0x67 */ + 0xBD, 0x71, 0xBD, 0x72, 0xBD, 0x73, 0xBD, 0x74, /* 0x68-0x6B */ + 0xBD, 0x75, 0xBD, 0x76, 0xD0, 0xF5, 0xBD, 0x77, /* 0x6C-0x6F */ + 0xBD, 0x78, 0xBD, 0x79, 0xBD, 0x7A, 0xBD, 0x7B, /* 0x70-0x73 */ + 0xBD, 0x7C, 0xBD, 0x7D, 0xBD, 0x7E, 0xF4, 0xEA, /* 0x74-0x77 */ + 0xBD, 0x80, 0xBD, 0x81, 0xBD, 0x82, 0xBD, 0x83, /* 0x78-0x7B */ + 0xBD, 0x84, 0xBD, 0x85, 0xBD, 0x86, 0xBD, 0x87, /* 0x7C-0x7F */ + + 0xBD, 0x88, 0xBD, 0x89, 0xBD, 0x8A, 0xBD, 0x8B, /* 0x80-0x83 */ + 0xBD, 0x8C, 0xBD, 0x8D, 0xBD, 0x8E, 0xBD, 0x8F, /* 0x84-0x87 */ + 0xBD, 0x90, 0xBD, 0x91, 0xBD, 0x92, 0xBD, 0x93, /* 0x88-0x8B */ + 0xBD, 0x94, 0xBD, 0x95, 0xBD, 0x96, 0xBD, 0x97, /* 0x8C-0x8F */ + 0xBD, 0x98, 0xBD, 0x99, 0xBD, 0x9A, 0xBD, 0x9B, /* 0x90-0x93 */ + 0xBD, 0x9C, 0xBD, 0x9D, 0xBD, 0x9E, 0xBD, 0x9F, /* 0x94-0x97 */ + 0xBD, 0xA0, 0xBE, 0x40, 0xBE, 0x41, 0xBE, 0x42, /* 0x98-0x9B */ + 0xBE, 0x43, 0xBE, 0x44, 0xBE, 0x45, 0xBE, 0x46, /* 0x9C-0x9F */ + 0xBE, 0x47, 0xBE, 0x48, 0xBE, 0x49, 0xBE, 0x4A, /* 0xA0-0xA3 */ + 0xBE, 0x4B, 0xBE, 0x4C, 0xF4, 0xEB, 0xBE, 0x4D, /* 0xA4-0xA7 */ + 0xBE, 0x4E, 0xBE, 0x4F, 0xBE, 0x50, 0xBE, 0x51, /* 0xA8-0xAB */ + 0xBE, 0x52, 0xBE, 0x53, 0xF4, 0xEC, 0xBE, 0x54, /* 0xAC-0xAF */ + 0xBE, 0x55, 0xBE, 0x56, 0xBE, 0x57, 0xBE, 0x58, /* 0xB0-0xB3 */ + 0xBE, 0x59, 0xBE, 0x5A, 0xBE, 0x5B, 0xBE, 0x5C, /* 0xB4-0xB7 */ + 0xBE, 0x5D, 0xBE, 0x5E, 0xBE, 0x5F, 0xBE, 0x60, /* 0xB8-0xBB */ + 0xBE, 0x61, 0xBE, 0x62, 0xBE, 0x63, 0xBE, 0x64, /* 0xBC-0xBF */ + 0xBE, 0x65, 0xBE, 0x66, 0xBE, 0x67, 0xBE, 0x68, /* 0xC0-0xC3 */ + 0xBE, 0x69, 0xBE, 0x6A, 0xBE, 0x6B, 0xBE, 0x6C, /* 0xC4-0xC7 */ + 0xBE, 0x6D, 0xBE, 0x6E, 0xBE, 0x6F, 0xBE, 0x70, /* 0xC8-0xCB */ + 0xBE, 0x71, 0xBE, 0x72, 0xBE, 0x73, 0xBE, 0x74, /* 0xCC-0xCF */ + 0xBE, 0x75, 0xBE, 0x76, 0xBE, 0x77, 0xBE, 0x78, /* 0xD0-0xD3 */ + 0xBE, 0x79, 0xBE, 0x7A, 0xBE, 0x7B, 0xBE, 0x7C, /* 0xD4-0xD7 */ + 0xBE, 0x7D, 0xBE, 0x7E, 0xBE, 0x80, 0xBE, 0x81, /* 0xD8-0xDB */ + 0xBE, 0x82, 0xBE, 0x83, 0xBE, 0x84, 0xBE, 0x85, /* 0xDC-0xDF */ + 0xBE, 0x86, 0xBE, 0x87, 0xBE, 0x88, 0xBE, 0x89, /* 0xE0-0xE3 */ + 0xBE, 0x8A, 0xBE, 0x8B, 0xBE, 0x8C, 0xBE, 0x8D, /* 0xE4-0xE7 */ + 0xBE, 0x8E, 0xBE, 0x8F, 0xBE, 0x90, 0xBE, 0x91, /* 0xE8-0xEB */ + 0xBE, 0x92, 0xBE, 0x93, 0xBE, 0x94, 0xBE, 0x95, /* 0xEC-0xEF */ + 0xBE, 0x96, 0xBE, 0x97, 0xBE, 0x98, 0xBE, 0x99, /* 0xF0-0xF3 */ + 0xBE, 0x9A, 0xBE, 0x9B, 0xBE, 0x9C, 0xBE, 0x9D, /* 0xF4-0xF7 */ + 0xBE, 0x9E, 0xBE, 0x9F, 0xBE, 0xA0, 0xBF, 0x40, /* 0xF8-0xFB */ + 0xBF, 0x41, 0xBF, 0x42, 0xBF, 0x43, 0xBF, 0x44, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7E[512] = { + 0xBF, 0x45, 0xBF, 0x46, 0xBF, 0x47, 0xBF, 0x48, /* 0x00-0x03 */ + 0xBF, 0x49, 0xBF, 0x4A, 0xBF, 0x4B, 0xBF, 0x4C, /* 0x04-0x07 */ + 0xBF, 0x4D, 0xBF, 0x4E, 0xBF, 0x4F, 0xBF, 0x50, /* 0x08-0x0B */ + 0xBF, 0x51, 0xBF, 0x52, 0xBF, 0x53, 0xBF, 0x54, /* 0x0C-0x0F */ + 0xBF, 0x55, 0xBF, 0x56, 0xBF, 0x57, 0xBF, 0x58, /* 0x10-0x13 */ + 0xBF, 0x59, 0xBF, 0x5A, 0xBF, 0x5B, 0xBF, 0x5C, /* 0x14-0x17 */ + 0xBF, 0x5D, 0xBF, 0x5E, 0xBF, 0x5F, 0xBF, 0x60, /* 0x18-0x1B */ + 0xBF, 0x61, 0xBF, 0x62, 0xBF, 0x63, 0xBF, 0x64, /* 0x1C-0x1F */ + 0xBF, 0x65, 0xBF, 0x66, 0xBF, 0x67, 0xBF, 0x68, /* 0x20-0x23 */ + 0xBF, 0x69, 0xBF, 0x6A, 0xBF, 0x6B, 0xBF, 0x6C, /* 0x24-0x27 */ + 0xBF, 0x6D, 0xBF, 0x6E, 0xBF, 0x6F, 0xBF, 0x70, /* 0x28-0x2B */ + 0xBF, 0x71, 0xBF, 0x72, 0xBF, 0x73, 0xBF, 0x74, /* 0x2C-0x2F */ + 0xBF, 0x75, 0xBF, 0x76, 0xBF, 0x77, 0xBF, 0x78, /* 0x30-0x33 */ + 0xBF, 0x79, 0xBF, 0x7A, 0xBF, 0x7B, 0xBF, 0x7C, /* 0x34-0x37 */ + 0xBF, 0x7D, 0xBF, 0x7E, 0xBF, 0x80, 0xF7, 0xE3, /* 0x38-0x3B */ + 0xBF, 0x81, 0xBF, 0x82, 0xBF, 0x83, 0xBF, 0x84, /* 0x3C-0x3F */ + 0xBF, 0x85, 0xB7, 0xB1, 0xBF, 0x86, 0xBF, 0x87, /* 0x40-0x43 */ + 0xBF, 0x88, 0xBF, 0x89, 0xBF, 0x8A, 0xF4, 0xED, /* 0x44-0x47 */ + 0xBF, 0x8B, 0xBF, 0x8C, 0xBF, 0x8D, 0xBF, 0x8E, /* 0x48-0x4B */ + 0xBF, 0x8F, 0xBF, 0x90, 0xBF, 0x91, 0xBF, 0x92, /* 0x4C-0x4F */ + 0xBF, 0x93, 0xBF, 0x94, 0xBF, 0x95, 0xBF, 0x96, /* 0x50-0x53 */ + 0xBF, 0x97, 0xBF, 0x98, 0xBF, 0x99, 0xBF, 0x9A, /* 0x54-0x57 */ + 0xBF, 0x9B, 0xBF, 0x9C, 0xBF, 0x9D, 0xBF, 0x9E, /* 0x58-0x5B */ + 0xBF, 0x9F, 0xBF, 0xA0, 0xC0, 0x40, 0xC0, 0x41, /* 0x5C-0x5F */ + 0xC0, 0x42, 0xC0, 0x43, 0xC0, 0x44, 0xC0, 0x45, /* 0x60-0x63 */ + 0xC0, 0x46, 0xC0, 0x47, 0xC0, 0x48, 0xC0, 0x49, /* 0x64-0x67 */ + 0xC0, 0x4A, 0xC0, 0x4B, 0xC0, 0x4C, 0xC0, 0x4D, /* 0x68-0x6B */ + 0xC0, 0x4E, 0xC0, 0x4F, 0xC0, 0x50, 0xC0, 0x51, /* 0x6C-0x6F */ + 0xC0, 0x52, 0xC0, 0x53, 0xC0, 0x54, 0xC0, 0x55, /* 0x70-0x73 */ + 0xC0, 0x56, 0xC0, 0x57, 0xC0, 0x58, 0xC0, 0x59, /* 0x74-0x77 */ + 0xC0, 0x5A, 0xC0, 0x5B, 0xC0, 0x5C, 0xC0, 0x5D, /* 0x78-0x7B */ + 0xC0, 0x5E, 0xC0, 0x5F, 0xC0, 0x60, 0xC0, 0x61, /* 0x7C-0x7F */ + + 0xC0, 0x62, 0xC0, 0x63, 0xD7, 0xEB, 0xC0, 0x64, /* 0x80-0x83 */ + 0xC0, 0x65, 0xC0, 0x66, 0xC0, 0x67, 0xC0, 0x68, /* 0x84-0x87 */ + 0xC0, 0x69, 0xC0, 0x6A, 0xC0, 0x6B, 0xC0, 0x6C, /* 0x88-0x8B */ + 0xC0, 0x6D, 0xC0, 0x6E, 0xC0, 0x6F, 0xC0, 0x70, /* 0x8C-0x8F */ + 0xC0, 0x71, 0xC0, 0x72, 0xC0, 0x73, 0xC0, 0x74, /* 0x90-0x93 */ + 0xC0, 0x75, 0xC0, 0x76, 0xC0, 0x77, 0xC0, 0x78, /* 0x94-0x97 */ + 0xC0, 0x79, 0xC0, 0x7A, 0xC0, 0x7B, 0xF4, 0xEE, /* 0x98-0x9B */ + 0xC0, 0x7C, 0xC0, 0x7D, 0xC0, 0x7E, 0xE6, 0xF9, /* 0x9C-0x9F */ + 0xBE, 0xC0, 0xE6, 0xFA, 0xBA, 0xEC, 0xE6, 0xFB, /* 0xA0-0xA3 */ + 0xCF, 0xCB, 0xE6, 0xFC, 0xD4, 0xBC, 0xBC, 0xB6, /* 0xA4-0xA7 */ + 0xE6, 0xFD, 0xE6, 0xFE, 0xBC, 0xCD, 0xC8, 0xD2, /* 0xA8-0xAB */ + 0xCE, 0xB3, 0xE7, 0xA1, 0xC0, 0x80, 0xB4, 0xBF, /* 0xAC-0xAF */ + 0xE7, 0xA2, 0xC9, 0xB4, 0xB8, 0xD9, 0xC4, 0xC9, /* 0xB0-0xB3 */ + 0xC0, 0x81, 0xD7, 0xDD, 0xC2, 0xDA, 0xB7, 0xD7, /* 0xB4-0xB7 */ + 0xD6, 0xBD, 0xCE, 0xC6, 0xB7, 0xC4, 0xC0, 0x82, /* 0xB8-0xBB */ + 0xC0, 0x83, 0xC5, 0xA6, 0xE7, 0xA3, 0xCF, 0xDF, /* 0xBC-0xBF */ + 0xE7, 0xA4, 0xE7, 0xA5, 0xE7, 0xA6, 0xC1, 0xB7, /* 0xC0-0xC3 */ + 0xD7, 0xE9, 0xC9, 0xF0, 0xCF, 0xB8, 0xD6, 0xAF, /* 0xC4-0xC7 */ + 0xD6, 0xD5, 0xE7, 0xA7, 0xB0, 0xED, 0xE7, 0xA8, /* 0xC8-0xCB */ + 0xE7, 0xA9, 0xC9, 0xDC, 0xD2, 0xEF, 0xBE, 0xAD, /* 0xCC-0xCF */ + 0xE7, 0xAA, 0xB0, 0xF3, 0xC8, 0xDE, 0xBD, 0xE1, /* 0xD0-0xD3 */ + 0xE7, 0xAB, 0xC8, 0xC6, 0xC0, 0x84, 0xE7, 0xAC, /* 0xD4-0xD7 */ + 0xBB, 0xE6, 0xB8, 0xF8, 0xD1, 0xA4, 0xE7, 0xAD, /* 0xD8-0xDB */ + 0xC2, 0xE7, 0xBE, 0xF8, 0xBD, 0xCA, 0xCD, 0xB3, /* 0xDC-0xDF */ + 0xE7, 0xAE, 0xE7, 0xAF, 0xBE, 0xEE, 0xD0, 0xE5, /* 0xE0-0xE3 */ + 0xC0, 0x85, 0xCB, 0xE7, 0xCC, 0xD0, 0xBC, 0xCC, /* 0xE4-0xE7 */ + 0xE7, 0xB0, 0xBC, 0xA8, 0xD0, 0xF7, 0xE7, 0xB1, /* 0xE8-0xEB */ + 0xC0, 0x86, 0xD0, 0xF8, 0xE7, 0xB2, 0xE7, 0xB3, /* 0xEC-0xEF */ + 0xB4, 0xC2, 0xE7, 0xB4, 0xE7, 0xB5, 0xC9, 0xFE, /* 0xF0-0xF3 */ + 0xCE, 0xAC, 0xC3, 0xE0, 0xE7, 0xB7, 0xB1, 0xC1, /* 0xF4-0xF7 */ + 0xB3, 0xF1, 0xC0, 0x87, 0xE7, 0xB8, 0xE7, 0xB9, /* 0xF8-0xFB */ + 0xD7, 0xDB, 0xD5, 0xC0, 0xE7, 0xBA, 0xC2, 0xCC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7F[512] = { + 0xD7, 0xBA, 0xE7, 0xBB, 0xE7, 0xBC, 0xE7, 0xBD, /* 0x00-0x03 */ + 0xBC, 0xEA, 0xC3, 0xE5, 0xC0, 0xC2, 0xE7, 0xBE, /* 0x04-0x07 */ + 0xE7, 0xBF, 0xBC, 0xA9, 0xC0, 0x88, 0xE7, 0xC0, /* 0x08-0x0B */ + 0xE7, 0xC1, 0xE7, 0xB6, 0xB6, 0xD0, 0xE7, 0xC2, /* 0x0C-0x0F */ + 0xC0, 0x89, 0xE7, 0xC3, 0xE7, 0xC4, 0xBB, 0xBA, /* 0x10-0x13 */ + 0xB5, 0xDE, 0xC2, 0xC6, 0xB1, 0xE0, 0xE7, 0xC5, /* 0x14-0x17 */ + 0xD4, 0xB5, 0xE7, 0xC6, 0xB8, 0xBF, 0xE7, 0xC8, /* 0x18-0x1B */ + 0xE7, 0xC7, 0xB7, 0xEC, 0xC0, 0x8A, 0xE7, 0xC9, /* 0x1C-0x1F */ + 0xB2, 0xF8, 0xE7, 0xCA, 0xE7, 0xCB, 0xE7, 0xCC, /* 0x20-0x23 */ + 0xE7, 0xCD, 0xE7, 0xCE, 0xE7, 0xCF, 0xE7, 0xD0, /* 0x24-0x27 */ + 0xD3, 0xA7, 0xCB, 0xF5, 0xE7, 0xD1, 0xE7, 0xD2, /* 0x28-0x2B */ + 0xE7, 0xD3, 0xE7, 0xD4, 0xC9, 0xC9, 0xE7, 0xD5, /* 0x2C-0x2F */ + 0xE7, 0xD6, 0xE7, 0xD7, 0xE7, 0xD8, 0xE7, 0xD9, /* 0x30-0x33 */ + 0xBD, 0xC9, 0xE7, 0xDA, 0xF3, 0xBE, 0xC0, 0x8B, /* 0x34-0x37 */ + 0xB8, 0xD7, 0xC0, 0x8C, 0xC8, 0xB1, 0xC0, 0x8D, /* 0x38-0x3B */ + 0xC0, 0x8E, 0xC0, 0x8F, 0xC0, 0x90, 0xC0, 0x91, /* 0x3C-0x3F */ + 0xC0, 0x92, 0xC0, 0x93, 0xF3, 0xBF, 0xC0, 0x94, /* 0x40-0x43 */ + 0xF3, 0xC0, 0xF3, 0xC1, 0xC0, 0x95, 0xC0, 0x96, /* 0x44-0x47 */ + 0xC0, 0x97, 0xC0, 0x98, 0xC0, 0x99, 0xC0, 0x9A, /* 0x48-0x4B */ + 0xC0, 0x9B, 0xC0, 0x9C, 0xC0, 0x9D, 0xC0, 0x9E, /* 0x4C-0x4F */ + 0xB9, 0xDE, 0xCD, 0xF8, 0xC0, 0x9F, 0xC0, 0xA0, /* 0x50-0x53 */ + 0xD8, 0xE8, 0xBA, 0xB1, 0xC1, 0x40, 0xC2, 0xDE, /* 0x54-0x57 */ + 0xEE, 0xB7, 0xC1, 0x41, 0xB7, 0xA3, 0xC1, 0x42, /* 0x58-0x5B */ + 0xC1, 0x43, 0xC1, 0x44, 0xC1, 0x45, 0xEE, 0xB9, /* 0x5C-0x5F */ + 0xC1, 0x46, 0xEE, 0xB8, 0xB0, 0xD5, 0xC1, 0x47, /* 0x60-0x63 */ + 0xC1, 0x48, 0xC1, 0x49, 0xC1, 0x4A, 0xC1, 0x4B, /* 0x64-0x67 */ + 0xEE, 0xBB, 0xD5, 0xD6, 0xD7, 0xEF, 0xC1, 0x4C, /* 0x68-0x6B */ + 0xC1, 0x4D, 0xC1, 0x4E, 0xD6, 0xC3, 0xC1, 0x4F, /* 0x6C-0x6F */ + 0xC1, 0x50, 0xEE, 0xBD, 0xCA, 0xF0, 0xC1, 0x51, /* 0x70-0x73 */ + 0xEE, 0xBC, 0xC1, 0x52, 0xC1, 0x53, 0xC1, 0x54, /* 0x74-0x77 */ + 0xC1, 0x55, 0xEE, 0xBE, 0xC1, 0x56, 0xC1, 0x57, /* 0x78-0x7B */ + 0xC1, 0x58, 0xC1, 0x59, 0xEE, 0xC0, 0xC1, 0x5A, /* 0x7C-0x7F */ + + 0xC1, 0x5B, 0xEE, 0xBF, 0xC1, 0x5C, 0xC1, 0x5D, /* 0x80-0x83 */ + 0xC1, 0x5E, 0xC1, 0x5F, 0xC1, 0x60, 0xC1, 0x61, /* 0x84-0x87 */ + 0xC1, 0x62, 0xC1, 0x63, 0xD1, 0xF2, 0xC1, 0x64, /* 0x88-0x8B */ + 0xC7, 0xBC, 0xC1, 0x65, 0xC3, 0xC0, 0xC1, 0x66, /* 0x8C-0x8F */ + 0xC1, 0x67, 0xC1, 0x68, 0xC1, 0x69, 0xC1, 0x6A, /* 0x90-0x93 */ + 0xB8, 0xE1, 0xC1, 0x6B, 0xC1, 0x6C, 0xC1, 0x6D, /* 0x94-0x97 */ + 0xC1, 0x6E, 0xC1, 0x6F, 0xC1, 0xE7, 0xC1, 0x70, /* 0x98-0x9B */ + 0xC1, 0x71, 0xF4, 0xC6, 0xD0, 0xDF, 0xF4, 0xC7, /* 0x9C-0x9F */ + 0xC1, 0x72, 0xCF, 0xDB, 0xC1, 0x73, 0xC1, 0x74, /* 0xA0-0xA3 */ + 0xC8, 0xBA, 0xC1, 0x75, 0xC1, 0x76, 0xF4, 0xC8, /* 0xA4-0xA7 */ + 0xC1, 0x77, 0xC1, 0x78, 0xC1, 0x79, 0xC1, 0x7A, /* 0xA8-0xAB */ + 0xC1, 0x7B, 0xC1, 0x7C, 0xC1, 0x7D, 0xF4, 0xC9, /* 0xAC-0xAF */ + 0xF4, 0xCA, 0xC1, 0x7E, 0xF4, 0xCB, 0xC1, 0x80, /* 0xB0-0xB3 */ + 0xC1, 0x81, 0xC1, 0x82, 0xC1, 0x83, 0xC1, 0x84, /* 0xB4-0xB7 */ + 0xD9, 0xFA, 0xB8, 0xFE, 0xC1, 0x85, 0xC1, 0x86, /* 0xB8-0xBB */ + 0xE5, 0xF1, 0xD3, 0xF0, 0xC1, 0x87, 0xF4, 0xE0, /* 0xBC-0xBF */ + 0xC1, 0x88, 0xCE, 0xCC, 0xC1, 0x89, 0xC1, 0x8A, /* 0xC0-0xC3 */ + 0xC1, 0x8B, 0xB3, 0xE1, 0xC1, 0x8C, 0xC1, 0x8D, /* 0xC4-0xC7 */ + 0xC1, 0x8E, 0xC1, 0x8F, 0xF1, 0xB4, 0xC1, 0x90, /* 0xC8-0xCB */ + 0xD2, 0xEE, 0xC1, 0x91, 0xF4, 0xE1, 0xC1, 0x92, /* 0xCC-0xCF */ + 0xC1, 0x93, 0xC1, 0x94, 0xC1, 0x95, 0xC1, 0x96, /* 0xD0-0xD3 */ + 0xCF, 0xE8, 0xF4, 0xE2, 0xC1, 0x97, 0xC1, 0x98, /* 0xD4-0xD7 */ + 0xC7, 0xCC, 0xC1, 0x99, 0xC1, 0x9A, 0xC1, 0x9B, /* 0xD8-0xDB */ + 0xC1, 0x9C, 0xC1, 0x9D, 0xC1, 0x9E, 0xB5, 0xD4, /* 0xDC-0xDF */ + 0xB4, 0xE4, 0xF4, 0xE4, 0xC1, 0x9F, 0xC1, 0xA0, /* 0xE0-0xE3 */ + 0xC2, 0x40, 0xF4, 0xE3, 0xF4, 0xE5, 0xC2, 0x41, /* 0xE4-0xE7 */ + 0xC2, 0x42, 0xF4, 0xE6, 0xC2, 0x43, 0xC2, 0x44, /* 0xE8-0xEB */ + 0xC2, 0x45, 0xC2, 0x46, 0xF4, 0xE7, 0xC2, 0x47, /* 0xEC-0xEF */ + 0xBA, 0xB2, 0xB0, 0xBF, 0xC2, 0x48, 0xF4, 0xE8, /* 0xF0-0xF3 */ + 0xC2, 0x49, 0xC2, 0x4A, 0xC2, 0x4B, 0xC2, 0x4C, /* 0xF4-0xF7 */ + 0xC2, 0x4D, 0xC2, 0x4E, 0xC2, 0x4F, 0xB7, 0xAD, /* 0xF8-0xFB */ + 0xD2, 0xED, 0xC2, 0x50, 0xC2, 0x51, 0xC2, 0x52, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0xD2, 0xAB, 0xC0, 0xCF, 0xC2, 0x53, 0xBF, 0xBC, /* 0x00-0x03 */ + 0xEB, 0xA3, 0xD5, 0xDF, 0xEA, 0xC8, 0xC2, 0x54, /* 0x04-0x07 */ + 0xC2, 0x55, 0xC2, 0x56, 0xC2, 0x57, 0xF1, 0xF3, /* 0x08-0x0B */ + 0xB6, 0xF8, 0xCB, 0xA3, 0xC2, 0x58, 0xC2, 0x59, /* 0x0C-0x0F */ + 0xC4, 0xCD, 0xC2, 0x5A, 0xF1, 0xE7, 0xC2, 0x5B, /* 0x10-0x13 */ + 0xF1, 0xE8, 0xB8, 0xFB, 0xF1, 0xE9, 0xBA, 0xC4, /* 0x14-0x17 */ + 0xD4, 0xC5, 0xB0, 0xD2, 0xC2, 0x5C, 0xC2, 0x5D, /* 0x18-0x1B */ + 0xF1, 0xEA, 0xC2, 0x5E, 0xC2, 0x5F, 0xC2, 0x60, /* 0x1C-0x1F */ + 0xF1, 0xEB, 0xC2, 0x61, 0xF1, 0xEC, 0xC2, 0x62, /* 0x20-0x23 */ + 0xC2, 0x63, 0xF1, 0xED, 0xF1, 0xEE, 0xF1, 0xEF, /* 0x24-0x27 */ + 0xF1, 0xF1, 0xF1, 0xF0, 0xC5, 0xD5, 0xC2, 0x64, /* 0x28-0x2B */ + 0xC2, 0x65, 0xC2, 0x66, 0xC2, 0x67, 0xC2, 0x68, /* 0x2C-0x2F */ + 0xC2, 0x69, 0xF1, 0xF2, 0xC2, 0x6A, 0xB6, 0xFA, /* 0x30-0x33 */ + 0xC2, 0x6B, 0xF1, 0xF4, 0xD2, 0xAE, 0xDE, 0xC7, /* 0x34-0x37 */ + 0xCB, 0xCA, 0xC2, 0x6C, 0xC2, 0x6D, 0xB3, 0xDC, /* 0x38-0x3B */ + 0xC2, 0x6E, 0xB5, 0xA2, 0xC2, 0x6F, 0xB9, 0xA2, /* 0x3C-0x3F */ + 0xC2, 0x70, 0xC2, 0x71, 0xC4, 0xF4, 0xF1, 0xF5, /* 0x40-0x43 */ + 0xC2, 0x72, 0xC2, 0x73, 0xF1, 0xF6, 0xC2, 0x74, /* 0x44-0x47 */ + 0xC2, 0x75, 0xC2, 0x76, 0xC1, 0xC4, 0xC1, 0xFB, /* 0x48-0x4B */ + 0xD6, 0xB0, 0xF1, 0xF7, 0xC2, 0x77, 0xC2, 0x78, /* 0x4C-0x4F */ + 0xC2, 0x79, 0xC2, 0x7A, 0xF1, 0xF8, 0xC2, 0x7B, /* 0x50-0x53 */ + 0xC1, 0xAA, 0xC2, 0x7C, 0xC2, 0x7D, 0xC2, 0x7E, /* 0x54-0x57 */ + 0xC6, 0xB8, 0xC2, 0x80, 0xBE, 0xDB, 0xC2, 0x81, /* 0x58-0x5B */ + 0xC2, 0x82, 0xC2, 0x83, 0xC2, 0x84, 0xC2, 0x85, /* 0x5C-0x5F */ + 0xC2, 0x86, 0xC2, 0x87, 0xC2, 0x88, 0xC2, 0x89, /* 0x60-0x63 */ + 0xC2, 0x8A, 0xC2, 0x8B, 0xC2, 0x8C, 0xC2, 0x8D, /* 0x64-0x67 */ + 0xC2, 0x8E, 0xF1, 0xF9, 0xB4, 0xCF, 0xC2, 0x8F, /* 0x68-0x6B */ + 0xC2, 0x90, 0xC2, 0x91, 0xC2, 0x92, 0xC2, 0x93, /* 0x6C-0x6F */ + 0xC2, 0x94, 0xF1, 0xFA, 0xC2, 0x95, 0xC2, 0x96, /* 0x70-0x73 */ + 0xC2, 0x97, 0xC2, 0x98, 0xC2, 0x99, 0xC2, 0x9A, /* 0x74-0x77 */ + 0xC2, 0x9B, 0xC2, 0x9C, 0xC2, 0x9D, 0xC2, 0x9E, /* 0x78-0x7B */ + 0xC2, 0x9F, 0xC2, 0xA0, 0xC3, 0x40, 0xED, 0xB2, /* 0x7C-0x7F */ + + 0xED, 0xB1, 0xC3, 0x41, 0xC3, 0x42, 0xCB, 0xE0, /* 0x80-0x83 */ + 0xD2, 0xDE, 0xC3, 0x43, 0xCB, 0xC1, 0xD5, 0xD8, /* 0x84-0x87 */ + 0xC3, 0x44, 0xC8, 0xE2, 0xC3, 0x45, 0xC0, 0xDF, /* 0x88-0x8B */ + 0xBC, 0xA1, 0xC3, 0x46, 0xC3, 0x47, 0xC3, 0x48, /* 0x8C-0x8F */ + 0xC3, 0x49, 0xC3, 0x4A, 0xC3, 0x4B, 0xEB, 0xC1, /* 0x90-0x93 */ + 0xC3, 0x4C, 0xC3, 0x4D, 0xD0, 0xA4, 0xC3, 0x4E, /* 0x94-0x97 */ + 0xD6, 0xE2, 0xC3, 0x4F, 0xB6, 0xC7, 0xB8, 0xD8, /* 0x98-0x9B */ + 0xEB, 0xC0, 0xB8, 0xCE, 0xC3, 0x50, 0xEB, 0xBF, /* 0x9C-0x9F */ + 0xB3, 0xA6, 0xB9, 0xC9, 0xD6, 0xAB, 0xC3, 0x51, /* 0xA0-0xA3 */ + 0xB7, 0xF4, 0xB7, 0xCA, 0xC3, 0x52, 0xC3, 0x53, /* 0xA4-0xA7 */ + 0xC3, 0x54, 0xBC, 0xE7, 0xB7, 0xBE, 0xEB, 0xC6, /* 0xA8-0xAB */ + 0xC3, 0x55, 0xEB, 0xC7, 0xB0, 0xB9, 0xBF, 0xCF, /* 0xAC-0xAF */ + 0xC3, 0x56, 0xEB, 0xC5, 0xD3, 0xFD, 0xC3, 0x57, /* 0xB0-0xB3 */ + 0xEB, 0xC8, 0xC3, 0x58, 0xC3, 0x59, 0xEB, 0xC9, /* 0xB4-0xB7 */ + 0xC3, 0x5A, 0xC3, 0x5B, 0xB7, 0xCE, 0xC3, 0x5C, /* 0xB8-0xBB */ + 0xEB, 0xC2, 0xEB, 0xC4, 0xC9, 0xF6, 0xD6, 0xD7, /* 0xBC-0xBF */ + 0xD5, 0xCD, 0xD0, 0xB2, 0xEB, 0xCF, 0xCE, 0xB8, /* 0xC0-0xC3 */ + 0xEB, 0xD0, 0xC3, 0x5D, 0xB5, 0xA8, 0xC3, 0x5E, /* 0xC4-0xC7 */ + 0xC3, 0x5F, 0xC3, 0x60, 0xC3, 0x61, 0xC3, 0x62, /* 0xC8-0xCB */ + 0xB1, 0xB3, 0xEB, 0xD2, 0xCC, 0xA5, 0xC3, 0x63, /* 0xCC-0xCF */ + 0xC3, 0x64, 0xC3, 0x65, 0xC3, 0x66, 0xC3, 0x67, /* 0xD0-0xD3 */ + 0xC3, 0x68, 0xC3, 0x69, 0xC5, 0xD6, 0xEB, 0xD3, /* 0xD4-0xD7 */ + 0xC3, 0x6A, 0xEB, 0xD1, 0xC5, 0xDF, 0xEB, 0xCE, /* 0xD8-0xDB */ + 0xCA, 0xA4, 0xEB, 0xD5, 0xB0, 0xFB, 0xC3, 0x6B, /* 0xDC-0xDF */ + 0xC3, 0x6C, 0xBA, 0xFA, 0xC3, 0x6D, 0xC3, 0x6E, /* 0xE0-0xE3 */ + 0xD8, 0xB7, 0xF1, 0xE3, 0xC3, 0x6F, 0xEB, 0xCA, /* 0xE4-0xE7 */ + 0xEB, 0xCB, 0xEB, 0xCC, 0xEB, 0xCD, 0xEB, 0xD6, /* 0xE8-0xEB */ + 0xE6, 0xC0, 0xEB, 0xD9, 0xC3, 0x70, 0xBF, 0xE8, /* 0xEC-0xEF */ + 0xD2, 0xC8, 0xEB, 0xD7, 0xEB, 0xDC, 0xB8, 0xEC, /* 0xF0-0xF3 */ + 0xEB, 0xD8, 0xC3, 0x71, 0xBD, 0xBA, 0xC3, 0x72, /* 0xF4-0xF7 */ + 0xD0, 0xD8, 0xC3, 0x73, 0xB0, 0xB7, 0xC3, 0x74, /* 0xF8-0xFB */ + 0xEB, 0xDD, 0xC4, 0xDC, 0xC3, 0x75, 0xC3, 0x76, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0xC3, 0x77, 0xC3, 0x78, 0xD6, 0xAC, 0xC3, 0x79, /* 0x00-0x03 */ + 0xC3, 0x7A, 0xC3, 0x7B, 0xB4, 0xE0, 0xC3, 0x7C, /* 0x04-0x07 */ + 0xC3, 0x7D, 0xC2, 0xF6, 0xBC, 0xB9, 0xC3, 0x7E, /* 0x08-0x0B */ + 0xC3, 0x80, 0xEB, 0xDA, 0xEB, 0xDB, 0xD4, 0xE0, /* 0x0C-0x0F */ + 0xC6, 0xEA, 0xC4, 0xD4, 0xEB, 0xDF, 0xC5, 0xA7, /* 0x10-0x13 */ + 0xD9, 0xF5, 0xC3, 0x81, 0xB2, 0xB1, 0xC3, 0x82, /* 0x14-0x17 */ + 0xEB, 0xE4, 0xC3, 0x83, 0xBD, 0xC5, 0xC3, 0x84, /* 0x18-0x1B */ + 0xC3, 0x85, 0xC3, 0x86, 0xEB, 0xE2, 0xC3, 0x87, /* 0x1C-0x1F */ + 0xC3, 0x88, 0xC3, 0x89, 0xC3, 0x8A, 0xC3, 0x8B, /* 0x20-0x23 */ + 0xC3, 0x8C, 0xC3, 0x8D, 0xC3, 0x8E, 0xC3, 0x8F, /* 0x24-0x27 */ + 0xC3, 0x90, 0xC3, 0x91, 0xC3, 0x92, 0xC3, 0x93, /* 0x28-0x2B */ + 0xEB, 0xE3, 0xC3, 0x94, 0xC3, 0x95, 0xB8, 0xAC, /* 0x2C-0x2F */ + 0xC3, 0x96, 0xCD, 0xD1, 0xEB, 0xE5, 0xC3, 0x97, /* 0x30-0x33 */ + 0xC3, 0x98, 0xC3, 0x99, 0xEB, 0xE1, 0xC3, 0x9A, /* 0x34-0x37 */ + 0xC1, 0xB3, 0xC3, 0x9B, 0xC3, 0x9C, 0xC3, 0x9D, /* 0x38-0x3B */ + 0xC3, 0x9E, 0xC3, 0x9F, 0xC6, 0xA2, 0xC3, 0xA0, /* 0x3C-0x3F */ + 0xC4, 0x40, 0xC4, 0x41, 0xC4, 0x42, 0xC4, 0x43, /* 0x40-0x43 */ + 0xC4, 0x44, 0xC4, 0x45, 0xCC, 0xF3, 0xC4, 0x46, /* 0x44-0x47 */ + 0xEB, 0xE6, 0xC4, 0x47, 0xC0, 0xB0, 0xD2, 0xB8, /* 0x48-0x4B */ + 0xEB, 0xE7, 0xC4, 0x48, 0xC4, 0x49, 0xC4, 0x4A, /* 0x4C-0x4F */ + 0xB8, 0xAF, 0xB8, 0xAD, 0xC4, 0x4B, 0xEB, 0xE8, /* 0x50-0x53 */ + 0xC7, 0xBB, 0xCD, 0xF3, 0xC4, 0x4C, 0xC4, 0x4D, /* 0x54-0x57 */ + 0xC4, 0x4E, 0xEB, 0xEA, 0xEB, 0xEB, 0xC4, 0x4F, /* 0x58-0x5B */ + 0xC4, 0x50, 0xC4, 0x51, 0xC4, 0x52, 0xC4, 0x53, /* 0x5C-0x5F */ + 0xEB, 0xED, 0xC4, 0x54, 0xC4, 0x55, 0xC4, 0x56, /* 0x60-0x63 */ + 0xC4, 0x57, 0xD0, 0xC8, 0xC4, 0x58, 0xEB, 0xF2, /* 0x64-0x67 */ + 0xC4, 0x59, 0xEB, 0xEE, 0xC4, 0x5A, 0xC4, 0x5B, /* 0x68-0x6B */ + 0xC4, 0x5C, 0xEB, 0xF1, 0xC8, 0xF9, 0xC4, 0x5D, /* 0x6C-0x6F */ + 0xD1, 0xFC, 0xEB, 0xEC, 0xC4, 0x5E, 0xC4, 0x5F, /* 0x70-0x73 */ + 0xEB, 0xE9, 0xC4, 0x60, 0xC4, 0x61, 0xC4, 0x62, /* 0x74-0x77 */ + 0xC4, 0x63, 0xB8, 0xB9, 0xCF, 0xD9, 0xC4, 0xE5, /* 0x78-0x7B */ + 0xEB, 0xEF, 0xEB, 0xF0, 0xCC, 0xDA, 0xCD, 0xC8, /* 0x7C-0x7F */ + + 0xB0, 0xF2, 0xC4, 0x64, 0xEB, 0xF6, 0xC4, 0x65, /* 0x80-0x83 */ + 0xC4, 0x66, 0xC4, 0x67, 0xC4, 0x68, 0xC4, 0x69, /* 0x84-0x87 */ + 0xEB, 0xF5, 0xC4, 0x6A, 0xB2, 0xB2, 0xC4, 0x6B, /* 0x88-0x8B */ + 0xC4, 0x6C, 0xC4, 0x6D, 0xC4, 0x6E, 0xB8, 0xE0, /* 0x8C-0x8F */ + 0xC4, 0x6F, 0xEB, 0xF7, 0xC4, 0x70, 0xC4, 0x71, /* 0x90-0x93 */ + 0xC4, 0x72, 0xC4, 0x73, 0xC4, 0x74, 0xC4, 0x75, /* 0x94-0x97 */ + 0xB1, 0xEC, 0xC4, 0x76, 0xC4, 0x77, 0xCC, 0xC5, /* 0x98-0x9B */ + 0xC4, 0xA4, 0xCF, 0xA5, 0xC4, 0x78, 0xC4, 0x79, /* 0x9C-0x9F */ + 0xC4, 0x7A, 0xC4, 0x7B, 0xC4, 0x7C, 0xEB, 0xF9, /* 0xA0-0xA3 */ + 0xC4, 0x7D, 0xC4, 0x7E, 0xEC, 0xA2, 0xC4, 0x80, /* 0xA4-0xA7 */ + 0xC5, 0xF2, 0xC4, 0x81, 0xEB, 0xFA, 0xC4, 0x82, /* 0xA8-0xAB */ + 0xC4, 0x83, 0xC4, 0x84, 0xC4, 0x85, 0xC4, 0x86, /* 0xAC-0xAF */ + 0xC4, 0x87, 0xC4, 0x88, 0xC4, 0x89, 0xC9, 0xC5, /* 0xB0-0xB3 */ + 0xC4, 0x8A, 0xC4, 0x8B, 0xC4, 0x8C, 0xC4, 0x8D, /* 0xB4-0xB7 */ + 0xC4, 0x8E, 0xC4, 0x8F, 0xE2, 0xDF, 0xEB, 0xFE, /* 0xB8-0xBB */ + 0xC4, 0x90, 0xC4, 0x91, 0xC4, 0x92, 0xC4, 0x93, /* 0xBC-0xBF */ + 0xCD, 0xCE, 0xEC, 0xA1, 0xB1, 0xDB, 0xD3, 0xB7, /* 0xC0-0xC3 */ + 0xC4, 0x94, 0xC4, 0x95, 0xD2, 0xDC, 0xC4, 0x96, /* 0xC4-0xC7 */ + 0xC4, 0x97, 0xC4, 0x98, 0xEB, 0xFD, 0xC4, 0x99, /* 0xC8-0xCB */ + 0xEB, 0xFB, 0xC4, 0x9A, 0xC4, 0x9B, 0xC4, 0x9C, /* 0xCC-0xCF */ + 0xC4, 0x9D, 0xC4, 0x9E, 0xC4, 0x9F, 0xC4, 0xA0, /* 0xD0-0xD3 */ + 0xC5, 0x40, 0xC5, 0x41, 0xC5, 0x42, 0xC5, 0x43, /* 0xD4-0xD7 */ + 0xC5, 0x44, 0xC5, 0x45, 0xC5, 0x46, 0xC5, 0x47, /* 0xD8-0xDB */ + 0xC5, 0x48, 0xC5, 0x49, 0xC5, 0x4A, 0xC5, 0x4B, /* 0xDC-0xDF */ + 0xC5, 0x4C, 0xC5, 0x4D, 0xC5, 0x4E, 0xB3, 0xBC, /* 0xE0-0xE3 */ + 0xC5, 0x4F, 0xC5, 0x50, 0xC5, 0x51, 0xEA, 0xB0, /* 0xE4-0xE7 */ + 0xC5, 0x52, 0xC5, 0x53, 0xD7, 0xD4, 0xC5, 0x54, /* 0xE8-0xEB */ + 0xF4, 0xAB, 0xB3, 0xF4, 0xC5, 0x55, 0xC5, 0x56, /* 0xEC-0xEF */ + 0xC5, 0x57, 0xC5, 0x58, 0xC5, 0x59, 0xD6, 0xC1, /* 0xF0-0xF3 */ + 0xD6, 0xC2, 0xC5, 0x5A, 0xC5, 0x5B, 0xC5, 0x5C, /* 0xF4-0xF7 */ + 0xC5, 0x5D, 0xC5, 0x5E, 0xC5, 0x5F, 0xD5, 0xE9, /* 0xF8-0xFB */ + 0xBE, 0xCA, 0xC5, 0x60, 0xF4, 0xA7, 0xC5, 0x61, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0xD2, 0xA8, 0xF4, 0xA8, 0xF4, 0xA9, 0xC5, 0x62, /* 0x00-0x03 */ + 0xF4, 0xAA, 0xBE, 0xCB, 0xD3, 0xDF, 0xC5, 0x63, /* 0x04-0x07 */ + 0xC5, 0x64, 0xC5, 0x65, 0xC5, 0x66, 0xC5, 0x67, /* 0x08-0x0B */ + 0xC9, 0xE0, 0xC9, 0xE1, 0xC5, 0x68, 0xC5, 0x69, /* 0x0C-0x0F */ + 0xF3, 0xC2, 0xC5, 0x6A, 0xCA, 0xE6, 0xC5, 0x6B, /* 0x10-0x13 */ + 0xCC, 0xF2, 0xC5, 0x6C, 0xC5, 0x6D, 0xC5, 0x6E, /* 0x14-0x17 */ + 0xC5, 0x6F, 0xC5, 0x70, 0xC5, 0x71, 0xE2, 0xB6, /* 0x18-0x1B */ + 0xCB, 0xB4, 0xC5, 0x72, 0xCE, 0xE8, 0xD6, 0xDB, /* 0x1C-0x1F */ + 0xC5, 0x73, 0xF4, 0xAD, 0xF4, 0xAE, 0xF4, 0xAF, /* 0x20-0x23 */ + 0xC5, 0x74, 0xC5, 0x75, 0xC5, 0x76, 0xC5, 0x77, /* 0x24-0x27 */ + 0xF4, 0xB2, 0xC5, 0x78, 0xBA, 0xBD, 0xF4, 0xB3, /* 0x28-0x2B */ + 0xB0, 0xE3, 0xF4, 0xB0, 0xC5, 0x79, 0xF4, 0xB1, /* 0x2C-0x2F */ + 0xBD, 0xA2, 0xB2, 0xD5, 0xC5, 0x7A, 0xF4, 0xB6, /* 0x30-0x33 */ + 0xF4, 0xB7, 0xB6, 0xE6, 0xB2, 0xB0, 0xCF, 0xCF, /* 0x34-0x37 */ + 0xF4, 0xB4, 0xB4, 0xAC, 0xC5, 0x7B, 0xF4, 0xB5, /* 0x38-0x3B */ + 0xC5, 0x7C, 0xC5, 0x7D, 0xF4, 0xB8, 0xC5, 0x7E, /* 0x3C-0x3F */ + 0xC5, 0x80, 0xC5, 0x81, 0xC5, 0x82, 0xC5, 0x83, /* 0x40-0x43 */ + 0xF4, 0xB9, 0xC5, 0x84, 0xC5, 0x85, 0xCD, 0xA7, /* 0x44-0x47 */ + 0xC5, 0x86, 0xF4, 0xBA, 0xC5, 0x87, 0xF4, 0xBB, /* 0x48-0x4B */ + 0xC5, 0x88, 0xC5, 0x89, 0xC5, 0x8A, 0xF4, 0xBC, /* 0x4C-0x4F */ + 0xC5, 0x8B, 0xC5, 0x8C, 0xC5, 0x8D, 0xC5, 0x8E, /* 0x50-0x53 */ + 0xC5, 0x8F, 0xC5, 0x90, 0xC5, 0x91, 0xC5, 0x92, /* 0x54-0x57 */ + 0xCB, 0xD2, 0xC5, 0x93, 0xF4, 0xBD, 0xC5, 0x94, /* 0x58-0x5B */ + 0xC5, 0x95, 0xC5, 0x96, 0xC5, 0x97, 0xF4, 0xBE, /* 0x5C-0x5F */ + 0xC5, 0x98, 0xC5, 0x99, 0xC5, 0x9A, 0xC5, 0x9B, /* 0x60-0x63 */ + 0xC5, 0x9C, 0xC5, 0x9D, 0xC5, 0x9E, 0xC5, 0x9F, /* 0x64-0x67 */ + 0xF4, 0xBF, 0xC5, 0xA0, 0xC6, 0x40, 0xC6, 0x41, /* 0x68-0x6B */ + 0xC6, 0x42, 0xC6, 0x43, 0xF4, 0xDE, 0xC1, 0xBC, /* 0x6C-0x6F */ + 0xBC, 0xE8, 0xC6, 0x44, 0xC9, 0xAB, 0xD1, 0xDE, /* 0x70-0x73 */ + 0xE5, 0xF5, 0xC6, 0x45, 0xC6, 0x46, 0xC6, 0x47, /* 0x74-0x77 */ + 0xC6, 0x48, 0xDC, 0xB3, 0xD2, 0xD5, 0xC6, 0x49, /* 0x78-0x7B */ + 0xC6, 0x4A, 0xDC, 0xB4, 0xB0, 0xAC, 0xDC, 0xB5, /* 0x7C-0x7F */ + + 0xC6, 0x4B, 0xC6, 0x4C, 0xBD, 0xDA, 0xC6, 0x4D, /* 0x80-0x83 */ + 0xDC, 0xB9, 0xC6, 0x4E, 0xC6, 0x4F, 0xC6, 0x50, /* 0x84-0x87 */ + 0xD8, 0xC2, 0xC6, 0x51, 0xDC, 0xB7, 0xD3, 0xF3, /* 0x88-0x8B */ + 0xC6, 0x52, 0xC9, 0xD6, 0xDC, 0xBA, 0xDC, 0xB6, /* 0x8C-0x8F */ + 0xC6, 0x53, 0xDC, 0xBB, 0xC3, 0xA2, 0xC6, 0x54, /* 0x90-0x93 */ + 0xC6, 0x55, 0xC6, 0x56, 0xC6, 0x57, 0xDC, 0xBC, /* 0x94-0x97 */ + 0xDC, 0xC5, 0xDC, 0xBD, 0xC6, 0x58, 0xC6, 0x59, /* 0x98-0x9B */ + 0xCE, 0xDF, 0xD6, 0xA5, 0xC6, 0x5A, 0xDC, 0xCF, /* 0x9C-0x9F */ + 0xC6, 0x5B, 0xDC, 0xCD, 0xC6, 0x5C, 0xC6, 0x5D, /* 0xA0-0xA3 */ + 0xDC, 0xD2, 0xBD, 0xE6, 0xC2, 0xAB, 0xC6, 0x5E, /* 0xA4-0xA7 */ + 0xDC, 0xB8, 0xDC, 0xCB, 0xDC, 0xCE, 0xDC, 0xBE, /* 0xA8-0xAB */ + 0xB7, 0xD2, 0xB0, 0xC5, 0xDC, 0xC7, 0xD0, 0xBE, /* 0xAC-0xAF */ + 0xDC, 0xC1, 0xBB, 0xA8, 0xC6, 0x5F, 0xB7, 0xBC, /* 0xB0-0xB3 */ + 0xDC, 0xCC, 0xC6, 0x60, 0xC6, 0x61, 0xDC, 0xC6, /* 0xB4-0xB7 */ + 0xDC, 0xBF, 0xC7, 0xDB, 0xC6, 0x62, 0xC6, 0x63, /* 0xB8-0xBB */ + 0xC6, 0x64, 0xD1, 0xBF, 0xDC, 0xC0, 0xC6, 0x65, /* 0xBC-0xBF */ + 0xC6, 0x66, 0xDC, 0xCA, 0xC6, 0x67, 0xC6, 0x68, /* 0xC0-0xC3 */ + 0xDC, 0xD0, 0xC6, 0x69, 0xC6, 0x6A, 0xCE, 0xAD, /* 0xC4-0xC7 */ + 0xDC, 0xC2, 0xC6, 0x6B, 0xDC, 0xC3, 0xDC, 0xC8, /* 0xC8-0xCB */ + 0xDC, 0xC9, 0xB2, 0xD4, 0xDC, 0xD1, 0xCB, 0xD5, /* 0xCC-0xCF */ + 0xC6, 0x6C, 0xD4, 0xB7, 0xDC, 0xDB, 0xDC, 0xDF, /* 0xD0-0xD3 */ + 0xCC, 0xA6, 0xDC, 0xE6, 0xC6, 0x6D, 0xC3, 0xE7, /* 0xD4-0xD7 */ + 0xDC, 0xDC, 0xC6, 0x6E, 0xC6, 0x6F, 0xBF, 0xC1, /* 0xD8-0xDB */ + 0xDC, 0xD9, 0xC6, 0x70, 0xB0, 0xFA, 0xB9, 0xB6, /* 0xDC-0xDF */ + 0xDC, 0xE5, 0xDC, 0xD3, 0xC6, 0x71, 0xDC, 0xC4, /* 0xE0-0xE3 */ + 0xDC, 0xD6, 0xC8, 0xF4, 0xBF, 0xE0, 0xC6, 0x72, /* 0xE4-0xE7 */ + 0xC6, 0x73, 0xC6, 0x74, 0xC6, 0x75, 0xC9, 0xBB, /* 0xE8-0xEB */ + 0xC6, 0x76, 0xC6, 0x77, 0xC6, 0x78, 0xB1, 0xBD, /* 0xEC-0xEF */ + 0xC6, 0x79, 0xD3, 0xA2, 0xC6, 0x7A, 0xC6, 0x7B, /* 0xF0-0xF3 */ + 0xDC, 0xDA, 0xC6, 0x7C, 0xC6, 0x7D, 0xDC, 0xD5, /* 0xF4-0xF7 */ + 0xC6, 0x7E, 0xC6, 0xBB, 0xC6, 0x80, 0xDC, 0xDE, /* 0xF8-0xFB */ + 0xC6, 0x81, 0xC6, 0x82, 0xC6, 0x83, 0xC6, 0x84, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0xC6, 0x85, 0xD7, 0xC2, 0xC3, 0xAF, 0xB7, 0xB6, /* 0x00-0x03 */ + 0xC7, 0xD1, 0xC3, 0xA9, 0xDC, 0xE2, 0xDC, 0xD8, /* 0x04-0x07 */ + 0xDC, 0xEB, 0xDC, 0xD4, 0xC6, 0x86, 0xC6, 0x87, /* 0x08-0x0B */ + 0xDC, 0xDD, 0xC6, 0x88, 0xBE, 0xA5, 0xDC, 0xD7, /* 0x0C-0x0F */ + 0xC6, 0x89, 0xDC, 0xE0, 0xC6, 0x8A, 0xC6, 0x8B, /* 0x10-0x13 */ + 0xDC, 0xE3, 0xDC, 0xE4, 0xC6, 0x8C, 0xDC, 0xF8, /* 0x14-0x17 */ + 0xC6, 0x8D, 0xC6, 0x8E, 0xDC, 0xE1, 0xDD, 0xA2, /* 0x18-0x1B */ + 0xDC, 0xE7, 0xC6, 0x8F, 0xC6, 0x90, 0xC6, 0x91, /* 0x1C-0x1F */ + 0xC6, 0x92, 0xC6, 0x93, 0xC6, 0x94, 0xC6, 0x95, /* 0x20-0x23 */ + 0xC6, 0x96, 0xC6, 0x97, 0xC6, 0x98, 0xBC, 0xEB, /* 0x24-0x27 */ + 0xB4, 0xC4, 0xC6, 0x99, 0xC6, 0x9A, 0xC3, 0xA3, /* 0x28-0x2B */ + 0xB2, 0xE7, 0xDC, 0xFA, 0xC6, 0x9B, 0xDC, 0xF2, /* 0x2C-0x2F */ + 0xC6, 0x9C, 0xDC, 0xEF, 0xC6, 0x9D, 0xDC, 0xFC, /* 0x30-0x33 */ + 0xDC, 0xEE, 0xD2, 0xF0, 0xB2, 0xE8, 0xC6, 0x9E, /* 0x34-0x37 */ + 0xC8, 0xD7, 0xC8, 0xE3, 0xDC, 0xFB, 0xC6, 0x9F, /* 0x38-0x3B */ + 0xDC, 0xED, 0xC6, 0xA0, 0xC7, 0x40, 0xC7, 0x41, /* 0x3C-0x3F */ + 0xDC, 0xF7, 0xC7, 0x42, 0xC7, 0x43, 0xDC, 0xF5, /* 0x40-0x43 */ + 0xC7, 0x44, 0xC7, 0x45, 0xBE, 0xA3, 0xDC, 0xF4, /* 0x44-0x47 */ + 0xC7, 0x46, 0xB2, 0xDD, 0xC7, 0x47, 0xC7, 0x48, /* 0x48-0x4B */ + 0xC7, 0x49, 0xC7, 0x4A, 0xC7, 0x4B, 0xDC, 0xF3, /* 0x4C-0x4F */ + 0xBC, 0xF6, 0xDC, 0xE8, 0xBB, 0xC4, 0xC7, 0x4C, /* 0x50-0x53 */ + 0xC0, 0xF3, 0xC7, 0x4D, 0xC7, 0x4E, 0xC7, 0x4F, /* 0x54-0x57 */ + 0xC7, 0x50, 0xC7, 0x51, 0xBC, 0xD4, 0xDC, 0xE9, /* 0x58-0x5B */ + 0xDC, 0xEA, 0xC7, 0x52, 0xDC, 0xF1, 0xDC, 0xF6, /* 0x5C-0x5F */ + 0xDC, 0xF9, 0xB5, 0xB4, 0xC7, 0x53, 0xC8, 0xD9, /* 0x60-0x63 */ + 0xBB, 0xE7, 0xDC, 0xFE, 0xDC, 0xFD, 0xD3, 0xAB, /* 0x64-0x67 */ + 0xDD, 0xA1, 0xDD, 0xA3, 0xDD, 0xA5, 0xD2, 0xF1, /* 0x68-0x6B */ + 0xDD, 0xA4, 0xDD, 0xA6, 0xDD, 0xA7, 0xD2, 0xA9, /* 0x6C-0x6F */ + 0xC7, 0x54, 0xC7, 0x55, 0xC7, 0x56, 0xC7, 0x57, /* 0x70-0x73 */ + 0xC7, 0x58, 0xC7, 0x59, 0xC7, 0x5A, 0xBA, 0xC9, /* 0x74-0x77 */ + 0xDD, 0xA9, 0xC7, 0x5B, 0xC7, 0x5C, 0xDD, 0xB6, /* 0x78-0x7B */ + 0xDD, 0xB1, 0xDD, 0xB4, 0xC7, 0x5D, 0xC7, 0x5E, /* 0x7C-0x7F */ + + 0xC7, 0x5F, 0xC7, 0x60, 0xC7, 0x61, 0xC7, 0x62, /* 0x80-0x83 */ + 0xC7, 0x63, 0xDD, 0xB0, 0xC6, 0xCE, 0xC7, 0x64, /* 0x84-0x87 */ + 0xC7, 0x65, 0xC0, 0xF2, 0xC7, 0x66, 0xC7, 0x67, /* 0x88-0x8B */ + 0xC7, 0x68, 0xC7, 0x69, 0xC9, 0xAF, 0xC7, 0x6A, /* 0x8C-0x8F */ + 0xC7, 0x6B, 0xC7, 0x6C, 0xDC, 0xEC, 0xDD, 0xAE, /* 0x90-0x93 */ + 0xC7, 0x6D, 0xC7, 0x6E, 0xC7, 0x6F, 0xC7, 0x70, /* 0x94-0x97 */ + 0xDD, 0xB7, 0xC7, 0x71, 0xC7, 0x72, 0xDC, 0xF0, /* 0x98-0x9B */ + 0xDD, 0xAF, 0xC7, 0x73, 0xDD, 0xB8, 0xC7, 0x74, /* 0x9C-0x9F */ + 0xDD, 0xAC, 0xC7, 0x75, 0xC7, 0x76, 0xC7, 0x77, /* 0xA0-0xA3 */ + 0xC7, 0x78, 0xC7, 0x79, 0xC7, 0x7A, 0xC7, 0x7B, /* 0xA4-0xA7 */ + 0xDD, 0xB9, 0xDD, 0xB3, 0xDD, 0xAD, 0xC4, 0xAA, /* 0xA8-0xAB */ + 0xC7, 0x7C, 0xC7, 0x7D, 0xC7, 0x7E, 0xC7, 0x80, /* 0xAC-0xAF */ + 0xDD, 0xA8, 0xC0, 0xB3, 0xC1, 0xAB, 0xDD, 0xAA, /* 0xB0-0xB3 */ + 0xDD, 0xAB, 0xC7, 0x81, 0xDD, 0xB2, 0xBB, 0xF1, /* 0xB4-0xB7 */ + 0xDD, 0xB5, 0xD3, 0xA8, 0xDD, 0xBA, 0xC7, 0x82, /* 0xB8-0xBB */ + 0xDD, 0xBB, 0xC3, 0xA7, 0xC7, 0x83, 0xC7, 0x84, /* 0xBC-0xBF */ + 0xDD, 0xD2, 0xDD, 0xBC, 0xC7, 0x85, 0xC7, 0x86, /* 0xC0-0xC3 */ + 0xC7, 0x87, 0xDD, 0xD1, 0xC7, 0x88, 0xB9, 0xBD, /* 0xC4-0xC7 */ + 0xC7, 0x89, 0xC7, 0x8A, 0xBE, 0xD5, 0xC7, 0x8B, /* 0xC8-0xCB */ + 0xBE, 0xFA, 0xC7, 0x8C, 0xC7, 0x8D, 0xBA, 0xCA, /* 0xCC-0xCF */ + 0xC7, 0x8E, 0xC7, 0x8F, 0xC7, 0x90, 0xC7, 0x91, /* 0xD0-0xD3 */ + 0xDD, 0xCA, 0xC7, 0x92, 0xDD, 0xC5, 0xC7, 0x93, /* 0xD4-0xD7 */ + 0xDD, 0xBF, 0xC7, 0x94, 0xC7, 0x95, 0xC7, 0x96, /* 0xD8-0xDB */ + 0xB2, 0xCB, 0xDD, 0xC3, 0xC7, 0x97, 0xDD, 0xCB, /* 0xDC-0xDF */ + 0xB2, 0xA4, 0xDD, 0xD5, 0xC7, 0x98, 0xC7, 0x99, /* 0xE0-0xE3 */ + 0xC7, 0x9A, 0xDD, 0xBE, 0xC7, 0x9B, 0xC7, 0x9C, /* 0xE4-0xE7 */ + 0xC7, 0x9D, 0xC6, 0xD0, 0xDD, 0xD0, 0xC7, 0x9E, /* 0xE8-0xEB */ + 0xC7, 0x9F, 0xC7, 0xA0, 0xC8, 0x40, 0xC8, 0x41, /* 0xEC-0xEF */ + 0xDD, 0xD4, 0xC1, 0xE2, 0xB7, 0xC6, 0xC8, 0x42, /* 0xF0-0xF3 */ + 0xC8, 0x43, 0xC8, 0x44, 0xC8, 0x45, 0xC8, 0x46, /* 0xF4-0xF7 */ + 0xDD, 0xCE, 0xDD, 0xCF, 0xC8, 0x47, 0xC8, 0x48, /* 0xF8-0xFB */ + 0xC8, 0x49, 0xDD, 0xC4, 0xC8, 0x4A, 0xC8, 0x4B, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0xC8, 0x4C, 0xDD, 0xBD, 0xC8, 0x4D, 0xDD, 0xCD, /* 0x00-0x03 */ + 0xCC, 0xD1, 0xC8, 0x4E, 0xDD, 0xC9, 0xC8, 0x4F, /* 0x04-0x07 */ + 0xC8, 0x50, 0xC8, 0x51, 0xC8, 0x52, 0xDD, 0xC2, /* 0x08-0x0B */ + 0xC3, 0xC8, 0xC6, 0xBC, 0xCE, 0xAE, 0xDD, 0xCC, /* 0x0C-0x0F */ + 0xC8, 0x53, 0xDD, 0xC8, 0xC8, 0x54, 0xC8, 0x55, /* 0x10-0x13 */ + 0xC8, 0x56, 0xC8, 0x57, 0xC8, 0x58, 0xC8, 0x59, /* 0x14-0x17 */ + 0xDD, 0xC1, 0xC8, 0x5A, 0xC8, 0x5B, 0xC8, 0x5C, /* 0x18-0x1B */ + 0xDD, 0xC6, 0xC2, 0xDC, 0xC8, 0x5D, 0xC8, 0x5E, /* 0x1C-0x1F */ + 0xC8, 0x5F, 0xC8, 0x60, 0xC8, 0x61, 0xC8, 0x62, /* 0x20-0x23 */ + 0xD3, 0xA9, 0xD3, 0xAA, 0xDD, 0xD3, 0xCF, 0xF4, /* 0x24-0x27 */ + 0xC8, 0xF8, 0xC8, 0x63, 0xC8, 0x64, 0xC8, 0x65, /* 0x28-0x2B */ + 0xC8, 0x66, 0xC8, 0x67, 0xC8, 0x68, 0xC8, 0x69, /* 0x2C-0x2F */ + 0xC8, 0x6A, 0xDD, 0xE6, 0xC8, 0x6B, 0xC8, 0x6C, /* 0x30-0x33 */ + 0xC8, 0x6D, 0xC8, 0x6E, 0xC8, 0x6F, 0xC8, 0x70, /* 0x34-0x37 */ + 0xDD, 0xC7, 0xC8, 0x71, 0xC8, 0x72, 0xC8, 0x73, /* 0x38-0x3B */ + 0xDD, 0xE0, 0xC2, 0xE4, 0xC8, 0x74, 0xC8, 0x75, /* 0x3C-0x3F */ + 0xC8, 0x76, 0xC8, 0x77, 0xC8, 0x78, 0xC8, 0x79, /* 0x40-0x43 */ + 0xC8, 0x7A, 0xC8, 0x7B, 0xDD, 0xE1, 0xC8, 0x7C, /* 0x44-0x47 */ + 0xC8, 0x7D, 0xC8, 0x7E, 0xC8, 0x80, 0xC8, 0x81, /* 0x48-0x4B */ + 0xC8, 0x82, 0xC8, 0x83, 0xC8, 0x84, 0xC8, 0x85, /* 0x4C-0x4F */ + 0xC8, 0x86, 0xDD, 0xD7, 0xC8, 0x87, 0xC8, 0x88, /* 0x50-0x53 */ + 0xC8, 0x89, 0xC8, 0x8A, 0xC8, 0x8B, 0xD6, 0xF8, /* 0x54-0x57 */ + 0xC8, 0x8C, 0xDD, 0xD9, 0xDD, 0xD8, 0xB8, 0xF0, /* 0x58-0x5B */ + 0xDD, 0xD6, 0xC8, 0x8D, 0xC8, 0x8E, 0xC8, 0x8F, /* 0x5C-0x5F */ + 0xC8, 0x90, 0xC6, 0xCF, 0xC8, 0x91, 0xB6, 0xAD, /* 0x60-0x63 */ + 0xC8, 0x92, 0xC8, 0x93, 0xC8, 0x94, 0xC8, 0x95, /* 0x64-0x67 */ + 0xC8, 0x96, 0xDD, 0xE2, 0xC8, 0x97, 0xBA, 0xF9, /* 0x68-0x6B */ + 0xD4, 0xE1, 0xDD, 0xE7, 0xC8, 0x98, 0xC8, 0x99, /* 0x6C-0x6F */ + 0xC8, 0x9A, 0xB4, 0xD0, 0xC8, 0x9B, 0xDD, 0xDA, /* 0x70-0x73 */ + 0xC8, 0x9C, 0xBF, 0xFB, 0xDD, 0xE3, 0xC8, 0x9D, /* 0x74-0x77 */ + 0xDD, 0xDF, 0xC8, 0x9E, 0xDD, 0xDD, 0xC8, 0x9F, /* 0x78-0x7B */ + 0xC8, 0xA0, 0xC9, 0x40, 0xC9, 0x41, 0xC9, 0x42, /* 0x7C-0x7F */ + + 0xC9, 0x43, 0xC9, 0x44, 0xB5, 0xD9, 0xC9, 0x45, /* 0x80-0x83 */ + 0xC9, 0x46, 0xC9, 0x47, 0xC9, 0x48, 0xDD, 0xDB, /* 0x84-0x87 */ + 0xDD, 0xDC, 0xDD, 0xDE, 0xC9, 0x49, 0xBD, 0xAF, /* 0x88-0x8B */ + 0xDD, 0xE4, 0xC9, 0x4A, 0xDD, 0xE5, 0xC9, 0x4B, /* 0x8C-0x8F */ + 0xC9, 0x4C, 0xC9, 0x4D, 0xC9, 0x4E, 0xC9, 0x4F, /* 0x90-0x93 */ + 0xC9, 0x50, 0xC9, 0x51, 0xC9, 0x52, 0xDD, 0xF5, /* 0x94-0x97 */ + 0xC9, 0x53, 0xC3, 0xC9, 0xC9, 0x54, 0xC9, 0x55, /* 0x98-0x9B */ + 0xCB, 0xE2, 0xC9, 0x56, 0xC9, 0x57, 0xC9, 0x58, /* 0x9C-0x9F */ + 0xC9, 0x59, 0xDD, 0xF2, 0xC9, 0x5A, 0xC9, 0x5B, /* 0xA0-0xA3 */ + 0xC9, 0x5C, 0xC9, 0x5D, 0xC9, 0x5E, 0xC9, 0x5F, /* 0xA4-0xA7 */ + 0xC9, 0x60, 0xC9, 0x61, 0xC9, 0x62, 0xC9, 0x63, /* 0xA8-0xAB */ + 0xC9, 0x64, 0xC9, 0x65, 0xC9, 0x66, 0xD8, 0xE1, /* 0xAC-0xAF */ + 0xC9, 0x67, 0xC9, 0x68, 0xC6, 0xD1, 0xC9, 0x69, /* 0xB0-0xB3 */ + 0xDD, 0xF4, 0xC9, 0x6A, 0xC9, 0x6B, 0xC9, 0x6C, /* 0xB4-0xB7 */ + 0xD5, 0xF4, 0xDD, 0xF3, 0xDD, 0xF0, 0xC9, 0x6D, /* 0xB8-0xBB */ + 0xC9, 0x6E, 0xDD, 0xEC, 0xC9, 0x6F, 0xDD, 0xEF, /* 0xBC-0xBF */ + 0xC9, 0x70, 0xDD, 0xE8, 0xC9, 0x71, 0xC9, 0x72, /* 0xC0-0xC3 */ + 0xD0, 0xEE, 0xC9, 0x73, 0xC9, 0x74, 0xC9, 0x75, /* 0xC4-0xC7 */ + 0xC9, 0x76, 0xC8, 0xD8, 0xDD, 0xEE, 0xC9, 0x77, /* 0xC8-0xCB */ + 0xC9, 0x78, 0xDD, 0xE9, 0xC9, 0x79, 0xC9, 0x7A, /* 0xCC-0xCF */ + 0xDD, 0xEA, 0xCB, 0xF2, 0xC9, 0x7B, 0xDD, 0xED, /* 0xD0-0xD3 */ + 0xC9, 0x7C, 0xC9, 0x7D, 0xB1, 0xCD, 0xC9, 0x7E, /* 0xD4-0xD7 */ + 0xC9, 0x80, 0xC9, 0x81, 0xC9, 0x82, 0xC9, 0x83, /* 0xD8-0xDB */ + 0xC9, 0x84, 0xC0, 0xB6, 0xC9, 0x85, 0xBC, 0xBB, /* 0xDC-0xDF */ + 0xDD, 0xF1, 0xC9, 0x86, 0xC9, 0x87, 0xDD, 0xF7, /* 0xE0-0xE3 */ + 0xC9, 0x88, 0xDD, 0xF6, 0xDD, 0xEB, 0xC9, 0x89, /* 0xE4-0xE7 */ + 0xC9, 0x8A, 0xC9, 0x8B, 0xC9, 0x8C, 0xC9, 0x8D, /* 0xE8-0xEB */ + 0xC5, 0xEE, 0xC9, 0x8E, 0xC9, 0x8F, 0xC9, 0x90, /* 0xEC-0xEF */ + 0xDD, 0xFB, 0xC9, 0x91, 0xC9, 0x92, 0xC9, 0x93, /* 0xF0-0xF3 */ + 0xC9, 0x94, 0xC9, 0x95, 0xC9, 0x96, 0xC9, 0x97, /* 0xF4-0xF7 */ + 0xC9, 0x98, 0xC9, 0x99, 0xC9, 0x9A, 0xC9, 0x9B, /* 0xF8-0xFB */ + 0xDE, 0xA4, 0xC9, 0x9C, 0xC9, 0x9D, 0xDE, 0xA3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0xC9, 0x9E, 0xC9, 0x9F, 0xC9, 0xA0, 0xCA, 0x40, /* 0x00-0x03 */ + 0xCA, 0x41, 0xCA, 0x42, 0xCA, 0x43, 0xCA, 0x44, /* 0x04-0x07 */ + 0xCA, 0x45, 0xCA, 0x46, 0xCA, 0x47, 0xCA, 0x48, /* 0x08-0x0B */ + 0xDD, 0xF8, 0xCA, 0x49, 0xCA, 0x4A, 0xCA, 0x4B, /* 0x0C-0x0F */ + 0xCA, 0x4C, 0xC3, 0xEF, 0xCA, 0x4D, 0xC2, 0xFB, /* 0x10-0x13 */ + 0xCA, 0x4E, 0xCA, 0x4F, 0xCA, 0x50, 0xD5, 0xE1, /* 0x14-0x17 */ + 0xCA, 0x51, 0xCA, 0x52, 0xCE, 0xB5, 0xCA, 0x53, /* 0x18-0x1B */ + 0xCA, 0x54, 0xCA, 0x55, 0xCA, 0x56, 0xDD, 0xFD, /* 0x1C-0x1F */ + 0xCA, 0x57, 0xB2, 0xCC, 0xCA, 0x58, 0xCA, 0x59, /* 0x20-0x23 */ + 0xCA, 0x5A, 0xCA, 0x5B, 0xCA, 0x5C, 0xCA, 0x5D, /* 0x24-0x27 */ + 0xCA, 0x5E, 0xCA, 0x5F, 0xCA, 0x60, 0xC4, 0xE8, /* 0x28-0x2B */ + 0xCA, 0xDF, 0xCA, 0x61, 0xCA, 0x62, 0xCA, 0x63, /* 0x2C-0x2F */ + 0xCA, 0x64, 0xCA, 0x65, 0xCA, 0x66, 0xCA, 0x67, /* 0x30-0x33 */ + 0xCA, 0x68, 0xCA, 0x69, 0xCA, 0x6A, 0xC7, 0xBE, /* 0x34-0x37 */ + 0xDD, 0xFA, 0xDD, 0xFC, 0xDD, 0xFE, 0xDE, 0xA2, /* 0x38-0x3B */ + 0xB0, 0xAA, 0xB1, 0xCE, 0xCA, 0x6B, 0xCA, 0x6C, /* 0x3C-0x3F */ + 0xCA, 0x6D, 0xCA, 0x6E, 0xCA, 0x6F, 0xDE, 0xAC, /* 0x40-0x43 */ + 0xCA, 0x70, 0xCA, 0x71, 0xCA, 0x72, 0xCA, 0x73, /* 0x44-0x47 */ + 0xDE, 0xA6, 0xBD, 0xB6, 0xC8, 0xEF, 0xCA, 0x74, /* 0x48-0x4B */ + 0xCA, 0x75, 0xCA, 0x76, 0xCA, 0x77, 0xCA, 0x78, /* 0x4C-0x4F */ + 0xCA, 0x79, 0xCA, 0x7A, 0xCA, 0x7B, 0xCA, 0x7C, /* 0x50-0x53 */ + 0xCA, 0x7D, 0xCA, 0x7E, 0xDE, 0xA1, 0xCA, 0x80, /* 0x54-0x57 */ + 0xCA, 0x81, 0xDE, 0xA5, 0xCA, 0x82, 0xCA, 0x83, /* 0x58-0x5B */ + 0xCA, 0x84, 0xCA, 0x85, 0xDE, 0xA9, 0xCA, 0x86, /* 0x5C-0x5F */ + 0xCA, 0x87, 0xCA, 0x88, 0xCA, 0x89, 0xCA, 0x8A, /* 0x60-0x63 */ + 0xDE, 0xA8, 0xCA, 0x8B, 0xCA, 0x8C, 0xCA, 0x8D, /* 0x64-0x67 */ + 0xDE, 0xA7, 0xCA, 0x8E, 0xCA, 0x8F, 0xCA, 0x90, /* 0x68-0x6B */ + 0xCA, 0x91, 0xCA, 0x92, 0xCA, 0x93, 0xCA, 0x94, /* 0x6C-0x6F */ + 0xCA, 0x95, 0xCA, 0x96, 0xDE, 0xAD, 0xCA, 0x97, /* 0x70-0x73 */ + 0xD4, 0xCC, 0xCA, 0x98, 0xCA, 0x99, 0xCA, 0x9A, /* 0x74-0x77 */ + 0xCA, 0x9B, 0xDE, 0xB3, 0xDE, 0xAA, 0xDE, 0xAE, /* 0x78-0x7B */ + 0xCA, 0x9C, 0xCA, 0x9D, 0xC0, 0xD9, 0xCA, 0x9E, /* 0x7C-0x7F */ + + 0xCA, 0x9F, 0xCA, 0xA0, 0xCB, 0x40, 0xCB, 0x41, /* 0x80-0x83 */ + 0xB1, 0xA1, 0xDE, 0xB6, 0xCB, 0x42, 0xDE, 0xB1, /* 0x84-0x87 */ + 0xCB, 0x43, 0xCB, 0x44, 0xCB, 0x45, 0xCB, 0x46, /* 0x88-0x8B */ + 0xCB, 0x47, 0xCB, 0x48, 0xCB, 0x49, 0xDE, 0xB2, /* 0x8C-0x8F */ + 0xCB, 0x4A, 0xCB, 0x4B, 0xCB, 0x4C, 0xCB, 0x4D, /* 0x90-0x93 */ + 0xCB, 0x4E, 0xCB, 0x4F, 0xCB, 0x50, 0xCB, 0x51, /* 0x94-0x97 */ + 0xCB, 0x52, 0xCB, 0x53, 0xCB, 0x54, 0xD1, 0xA6, /* 0x98-0x9B */ + 0xDE, 0xB5, 0xCB, 0x55, 0xCB, 0x56, 0xCB, 0x57, /* 0x9C-0x9F */ + 0xCB, 0x58, 0xCB, 0x59, 0xCB, 0x5A, 0xCB, 0x5B, /* 0xA0-0xA3 */ + 0xDE, 0xAF, 0xCB, 0x5C, 0xCB, 0x5D, 0xCB, 0x5E, /* 0xA4-0xA7 */ + 0xDE, 0xB0, 0xCB, 0x5F, 0xD0, 0xBD, 0xCB, 0x60, /* 0xA8-0xAB */ + 0xCB, 0x61, 0xCB, 0x62, 0xDE, 0xB4, 0xCA, 0xED, /* 0xAC-0xAF */ + 0xDE, 0xB9, 0xCB, 0x63, 0xCB, 0x64, 0xCB, 0x65, /* 0xB0-0xB3 */ + 0xCB, 0x66, 0xCB, 0x67, 0xCB, 0x68, 0xDE, 0xB8, /* 0xB4-0xB7 */ + 0xCB, 0x69, 0xDE, 0xB7, 0xCB, 0x6A, 0xCB, 0x6B, /* 0xB8-0xBB */ + 0xCB, 0x6C, 0xCB, 0x6D, 0xCB, 0x6E, 0xCB, 0x6F, /* 0xBC-0xBF */ + 0xCB, 0x70, 0xDE, 0xBB, 0xCB, 0x71, 0xCB, 0x72, /* 0xC0-0xC3 */ + 0xCB, 0x73, 0xCB, 0x74, 0xCB, 0x75, 0xCB, 0x76, /* 0xC4-0xC7 */ + 0xCB, 0x77, 0xBD, 0xE5, 0xCB, 0x78, 0xCB, 0x79, /* 0xC8-0xCB */ + 0xCB, 0x7A, 0xCB, 0x7B, 0xCB, 0x7C, 0xB2, 0xD8, /* 0xCC-0xCF */ + 0xC3, 0xEA, 0xCB, 0x7D, 0xCB, 0x7E, 0xDE, 0xBA, /* 0xD0-0xD3 */ + 0xCB, 0x80, 0xC5, 0xBA, 0xCB, 0x81, 0xCB, 0x82, /* 0xD4-0xD7 */ + 0xCB, 0x83, 0xCB, 0x84, 0xCB, 0x85, 0xCB, 0x86, /* 0xD8-0xDB */ + 0xDE, 0xBC, 0xCB, 0x87, 0xCB, 0x88, 0xCB, 0x89, /* 0xDC-0xDF */ + 0xCB, 0x8A, 0xCB, 0x8B, 0xCB, 0x8C, 0xCB, 0x8D, /* 0xE0-0xE3 */ + 0xCC, 0xD9, 0xCB, 0x8E, 0xCB, 0x8F, 0xCB, 0x90, /* 0xE4-0xE7 */ + 0xCB, 0x91, 0xB7, 0xAA, 0xCB, 0x92, 0xCB, 0x93, /* 0xE8-0xEB */ + 0xCB, 0x94, 0xCB, 0x95, 0xCB, 0x96, 0xCB, 0x97, /* 0xEC-0xEF */ + 0xCB, 0x98, 0xCB, 0x99, 0xCB, 0x9A, 0xCB, 0x9B, /* 0xF0-0xF3 */ + 0xCB, 0x9C, 0xCB, 0x9D, 0xCB, 0x9E, 0xCB, 0x9F, /* 0xF4-0xF7 */ + 0xCB, 0xA0, 0xCC, 0x40, 0xCC, 0x41, 0xD4, 0xE5, /* 0xF8-0xFB */ + 0xCC, 0x42, 0xCC, 0x43, 0xCC, 0x44, 0xDE, 0xBD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0xCC, 0x45, 0xCC, 0x46, 0xCC, 0x47, 0xCC, 0x48, /* 0x00-0x03 */ + 0xCC, 0x49, 0xDE, 0xBF, 0xCC, 0x4A, 0xCC, 0x4B, /* 0x04-0x07 */ + 0xCC, 0x4C, 0xCC, 0x4D, 0xCC, 0x4E, 0xCC, 0x4F, /* 0x08-0x0B */ + 0xCC, 0x50, 0xCC, 0x51, 0xCC, 0x52, 0xCC, 0x53, /* 0x0C-0x0F */ + 0xCC, 0x54, 0xC4, 0xA2, 0xCC, 0x55, 0xCC, 0x56, /* 0x10-0x13 */ + 0xCC, 0x57, 0xCC, 0x58, 0xDE, 0xC1, 0xCC, 0x59, /* 0x14-0x17 */ + 0xCC, 0x5A, 0xCC, 0x5B, 0xCC, 0x5C, 0xCC, 0x5D, /* 0x18-0x1B */ + 0xCC, 0x5E, 0xCC, 0x5F, 0xCC, 0x60, 0xCC, 0x61, /* 0x1C-0x1F */ + 0xCC, 0x62, 0xCC, 0x63, 0xCC, 0x64, 0xCC, 0x65, /* 0x20-0x23 */ + 0xCC, 0x66, 0xCC, 0x67, 0xCC, 0x68, 0xDE, 0xBE, /* 0x24-0x27 */ + 0xCC, 0x69, 0xDE, 0xC0, 0xCC, 0x6A, 0xCC, 0x6B, /* 0x28-0x2B */ + 0xCC, 0x6C, 0xCC, 0x6D, 0xCC, 0x6E, 0xCC, 0x6F, /* 0x2C-0x2F */ + 0xCC, 0x70, 0xCC, 0x71, 0xCC, 0x72, 0xCC, 0x73, /* 0x30-0x33 */ + 0xCC, 0x74, 0xCC, 0x75, 0xCC, 0x76, 0xCC, 0x77, /* 0x34-0x37 */ + 0xD5, 0xBA, 0xCC, 0x78, 0xCC, 0x79, 0xCC, 0x7A, /* 0x38-0x3B */ + 0xDE, 0xC2, 0xCC, 0x7B, 0xCC, 0x7C, 0xCC, 0x7D, /* 0x3C-0x3F */ + 0xCC, 0x7E, 0xCC, 0x80, 0xCC, 0x81, 0xCC, 0x82, /* 0x40-0x43 */ + 0xCC, 0x83, 0xCC, 0x84, 0xCC, 0x85, 0xCC, 0x86, /* 0x44-0x47 */ + 0xCC, 0x87, 0xCC, 0x88, 0xCC, 0x89, 0xCC, 0x8A, /* 0x48-0x4B */ + 0xCC, 0x8B, 0xF2, 0xAE, 0xBB, 0xA2, 0xC2, 0xB2, /* 0x4C-0x4F */ + 0xC5, 0xB0, 0xC2, 0xC7, 0xCC, 0x8C, 0xCC, 0x8D, /* 0x50-0x53 */ + 0xF2, 0xAF, 0xCC, 0x8E, 0xCC, 0x8F, 0xCC, 0x90, /* 0x54-0x57 */ + 0xCC, 0x91, 0xCC, 0x92, 0xD0, 0xE9, 0xCC, 0x93, /* 0x58-0x5B */ + 0xCC, 0x94, 0xCC, 0x95, 0xD3, 0xDD, 0xCC, 0x96, /* 0x5C-0x5F */ + 0xCC, 0x97, 0xCC, 0x98, 0xEB, 0xBD, 0xCC, 0x99, /* 0x60-0x63 */ + 0xCC, 0x9A, 0xCC, 0x9B, 0xCC, 0x9C, 0xCC, 0x9D, /* 0x64-0x67 */ + 0xCC, 0x9E, 0xCC, 0x9F, 0xCC, 0xA0, 0xB3, 0xE6, /* 0x68-0x6B */ + 0xF2, 0xB0, 0xCD, 0x40, 0xF2, 0xB1, 0xCD, 0x41, /* 0x6C-0x6F */ + 0xCD, 0x42, 0xCA, 0xAD, 0xCD, 0x43, 0xCD, 0x44, /* 0x70-0x73 */ + 0xCD, 0x45, 0xCD, 0x46, 0xCD, 0x47, 0xCD, 0x48, /* 0x74-0x77 */ + 0xCD, 0x49, 0xBA, 0xE7, 0xF2, 0xB3, 0xF2, 0xB5, /* 0x78-0x7B */ + 0xF2, 0xB4, 0xCB, 0xE4, 0xCF, 0xBA, 0xF2, 0xB2, /* 0x7C-0x7F */ + + 0xCA, 0xB4, 0xD2, 0xCF, 0xC2, 0xEC, 0xCD, 0x4A, /* 0x80-0x83 */ + 0xCD, 0x4B, 0xCD, 0x4C, 0xCD, 0x4D, 0xCD, 0x4E, /* 0x84-0x87 */ + 0xCD, 0x4F, 0xCD, 0x50, 0xCE, 0xC3, 0xF2, 0xB8, /* 0x88-0x8B */ + 0xB0, 0xF6, 0xF2, 0xB7, 0xCD, 0x51, 0xCD, 0x52, /* 0x8C-0x8F */ + 0xCD, 0x53, 0xCD, 0x54, 0xCD, 0x55, 0xF2, 0xBE, /* 0x90-0x93 */ + 0xCD, 0x56, 0xB2, 0xCF, 0xCD, 0x57, 0xCD, 0x58, /* 0x94-0x97 */ + 0xCD, 0x59, 0xCD, 0x5A, 0xCD, 0x5B, 0xCD, 0x5C, /* 0x98-0x9B */ + 0xD1, 0xC1, 0xF2, 0xBA, 0xCD, 0x5D, 0xCD, 0x5E, /* 0x9C-0x9F */ + 0xCD, 0x5F, 0xCD, 0x60, 0xCD, 0x61, 0xF2, 0xBC, /* 0xA0-0xA3 */ + 0xD4, 0xE9, 0xCD, 0x62, 0xCD, 0x63, 0xF2, 0xBB, /* 0xA4-0xA7 */ + 0xF2, 0xB6, 0xF2, 0xBF, 0xF2, 0xBD, 0xCD, 0x64, /* 0xA8-0xAB */ + 0xF2, 0xB9, 0xCD, 0x65, 0xCD, 0x66, 0xF2, 0xC7, /* 0xAC-0xAF */ + 0xF2, 0xC4, 0xF2, 0xC6, 0xCD, 0x67, 0xCD, 0x68, /* 0xB0-0xB3 */ + 0xF2, 0xCA, 0xF2, 0xC2, 0xF2, 0xC0, 0xCD, 0x69, /* 0xB4-0xB7 */ + 0xCD, 0x6A, 0xCD, 0x6B, 0xF2, 0xC5, 0xCD, 0x6C, /* 0xB8-0xBB */ + 0xCD, 0x6D, 0xCD, 0x6E, 0xCD, 0x6F, 0xCD, 0x70, /* 0xBC-0xBF */ + 0xD6, 0xFB, 0xCD, 0x71, 0xCD, 0x72, 0xCD, 0x73, /* 0xC0-0xC3 */ + 0xF2, 0xC1, 0xCD, 0x74, 0xC7, 0xF9, 0xC9, 0xDF, /* 0xC4-0xC7 */ + 0xCD, 0x75, 0xF2, 0xC8, 0xB9, 0xC6, 0xB5, 0xB0, /* 0xC8-0xCB */ + 0xCD, 0x76, 0xCD, 0x77, 0xF2, 0xC3, 0xF2, 0xC9, /* 0xCC-0xCF */ + 0xF2, 0xD0, 0xF2, 0xD6, 0xCD, 0x78, 0xCD, 0x79, /* 0xD0-0xD3 */ + 0xBB, 0xD7, 0xCD, 0x7A, 0xCD, 0x7B, 0xCD, 0x7C, /* 0xD4-0xD7 */ + 0xF2, 0xD5, 0xCD, 0xDC, 0xCD, 0x7D, 0xD6, 0xEB, /* 0xD8-0xDB */ + 0xCD, 0x7E, 0xCD, 0x80, 0xF2, 0xD2, 0xF2, 0xD4, /* 0xDC-0xDF */ + 0xCD, 0x81, 0xCD, 0x82, 0xCD, 0x83, 0xCD, 0x84, /* 0xE0-0xE3 */ + 0xB8, 0xF2, 0xCD, 0x85, 0xCD, 0x86, 0xCD, 0x87, /* 0xE4-0xE7 */ + 0xCD, 0x88, 0xF2, 0xCB, 0xCD, 0x89, 0xCD, 0x8A, /* 0xE8-0xEB */ + 0xCD, 0x8B, 0xF2, 0xCE, 0xC2, 0xF9, 0xCD, 0x8C, /* 0xEC-0xEF */ + 0xD5, 0xDD, 0xF2, 0xCC, 0xF2, 0xCD, 0xF2, 0xCF, /* 0xF0-0xF3 */ + 0xF2, 0xD3, 0xCD, 0x8D, 0xCD, 0x8E, 0xCD, 0x8F, /* 0xF4-0xF7 */ + 0xF2, 0xD9, 0xD3, 0xBC, 0xCD, 0x90, 0xCD, 0x91, /* 0xF8-0xFB */ + 0xCD, 0x92, 0xCD, 0x93, 0xB6, 0xEA, 0xCD, 0x94, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xCA, 0xF1, 0xCD, 0x95, 0xB7, 0xE4, 0xF2, 0xD7, /* 0x00-0x03 */ + 0xCD, 0x96, 0xCD, 0x97, 0xCD, 0x98, 0xF2, 0xD8, /* 0x04-0x07 */ + 0xF2, 0xDA, 0xF2, 0xDD, 0xF2, 0xDB, 0xCD, 0x99, /* 0x08-0x0B */ + 0xCD, 0x9A, 0xF2, 0xDC, 0xCD, 0x9B, 0xCD, 0x9C, /* 0x0C-0x0F */ + 0xCD, 0x9D, 0xCD, 0x9E, 0xD1, 0xD1, 0xF2, 0xD1, /* 0x10-0x13 */ + 0xCD, 0x9F, 0xCD, 0xC9, 0xCD, 0xA0, 0xCE, 0xCF, /* 0x14-0x17 */ + 0xD6, 0xA9, 0xCE, 0x40, 0xF2, 0xE3, 0xCE, 0x41, /* 0x18-0x1B */ + 0xC3, 0xDB, 0xCE, 0x42, 0xF2, 0xE0, 0xCE, 0x43, /* 0x1C-0x1F */ + 0xCE, 0x44, 0xC0, 0xAF, 0xF2, 0xEC, 0xF2, 0xDE, /* 0x20-0x23 */ + 0xCE, 0x45, 0xF2, 0xE1, 0xCE, 0x46, 0xCE, 0x47, /* 0x24-0x27 */ + 0xCE, 0x48, 0xF2, 0xE8, 0xCE, 0x49, 0xCE, 0x4A, /* 0x28-0x2B */ + 0xCE, 0x4B, 0xCE, 0x4C, 0xF2, 0xE2, 0xCE, 0x4D, /* 0x2C-0x2F */ + 0xCE, 0x4E, 0xF2, 0xE7, 0xCE, 0x4F, 0xCE, 0x50, /* 0x30-0x33 */ + 0xF2, 0xE6, 0xCE, 0x51, 0xCE, 0x52, 0xF2, 0xE9, /* 0x34-0x37 */ + 0xCE, 0x53, 0xCE, 0x54, 0xCE, 0x55, 0xF2, 0xDF, /* 0x38-0x3B */ + 0xCE, 0x56, 0xCE, 0x57, 0xF2, 0xE4, 0xF2, 0xEA, /* 0x3C-0x3F */ + 0xCE, 0x58, 0xCE, 0x59, 0xCE, 0x5A, 0xCE, 0x5B, /* 0x40-0x43 */ + 0xCE, 0x5C, 0xCE, 0x5D, 0xCE, 0x5E, 0xD3, 0xAC, /* 0x44-0x47 */ + 0xF2, 0xE5, 0xB2, 0xF5, 0xCE, 0x5F, 0xCE, 0x60, /* 0x48-0x4B */ + 0xF2, 0xF2, 0xCE, 0x61, 0xD0, 0xAB, 0xCE, 0x62, /* 0x4C-0x4F */ + 0xCE, 0x63, 0xCE, 0x64, 0xCE, 0x65, 0xF2, 0xF5, /* 0x50-0x53 */ + 0xCE, 0x66, 0xCE, 0x67, 0xCE, 0x68, 0xBB, 0xC8, /* 0x54-0x57 */ + 0xCE, 0x69, 0xF2, 0xF9, 0xCE, 0x6A, 0xCE, 0x6B, /* 0x58-0x5B */ + 0xCE, 0x6C, 0xCE, 0x6D, 0xCE, 0x6E, 0xCE, 0x6F, /* 0x5C-0x5F */ + 0xF2, 0xF0, 0xCE, 0x70, 0xCE, 0x71, 0xF2, 0xF6, /* 0x60-0x63 */ + 0xF2, 0xF8, 0xF2, 0xFA, 0xCE, 0x72, 0xCE, 0x73, /* 0x64-0x67 */ + 0xCE, 0x74, 0xCE, 0x75, 0xCE, 0x76, 0xCE, 0x77, /* 0x68-0x6B */ + 0xCE, 0x78, 0xCE, 0x79, 0xF2, 0xF3, 0xCE, 0x7A, /* 0x6C-0x6F */ + 0xF2, 0xF1, 0xCE, 0x7B, 0xCE, 0x7C, 0xCE, 0x7D, /* 0x70-0x73 */ + 0xBA, 0xFB, 0xCE, 0x7E, 0xB5, 0xFB, 0xCE, 0x80, /* 0x74-0x77 */ + 0xCE, 0x81, 0xCE, 0x82, 0xCE, 0x83, 0xF2, 0xEF, /* 0x78-0x7B */ + 0xF2, 0xF7, 0xF2, 0xED, 0xF2, 0xEE, 0xCE, 0x84, /* 0x7C-0x7F */ + + 0xCE, 0x85, 0xCE, 0x86, 0xF2, 0xEB, 0xF3, 0xA6, /* 0x80-0x83 */ + 0xCE, 0x87, 0xF3, 0xA3, 0xCE, 0x88, 0xCE, 0x89, /* 0x84-0x87 */ + 0xF3, 0xA2, 0xCE, 0x8A, 0xCE, 0x8B, 0xF2, 0xF4, /* 0x88-0x8B */ + 0xCE, 0x8C, 0xC8, 0xDA, 0xCE, 0x8D, 0xCE, 0x8E, /* 0x8C-0x8F */ + 0xCE, 0x8F, 0xCE, 0x90, 0xCE, 0x91, 0xF2, 0xFB, /* 0x90-0x93 */ + 0xCE, 0x92, 0xCE, 0x93, 0xCE, 0x94, 0xF3, 0xA5, /* 0x94-0x97 */ + 0xCE, 0x95, 0xCE, 0x96, 0xCE, 0x97, 0xCE, 0x98, /* 0x98-0x9B */ + 0xCE, 0x99, 0xCE, 0x9A, 0xCE, 0x9B, 0xC3, 0xF8, /* 0x9C-0x9F */ + 0xCE, 0x9C, 0xCE, 0x9D, 0xCE, 0x9E, 0xCE, 0x9F, /* 0xA0-0xA3 */ + 0xCE, 0xA0, 0xCF, 0x40, 0xCF, 0x41, 0xCF, 0x42, /* 0xA4-0xA7 */ + 0xF2, 0xFD, 0xCF, 0x43, 0xCF, 0x44, 0xF3, 0xA7, /* 0xA8-0xAB */ + 0xF3, 0xA9, 0xF3, 0xA4, 0xCF, 0x45, 0xF2, 0xFC, /* 0xAC-0xAF */ + 0xCF, 0x46, 0xCF, 0x47, 0xCF, 0x48, 0xF3, 0xAB, /* 0xB0-0xB3 */ + 0xCF, 0x49, 0xF3, 0xAA, 0xCF, 0x4A, 0xCF, 0x4B, /* 0xB4-0xB7 */ + 0xCF, 0x4C, 0xCF, 0x4D, 0xC2, 0xDD, 0xCF, 0x4E, /* 0xB8-0xBB */ + 0xCF, 0x4F, 0xF3, 0xAE, 0xCF, 0x50, 0xCF, 0x51, /* 0xBC-0xBF */ + 0xF3, 0xB0, 0xCF, 0x52, 0xCF, 0x53, 0xCF, 0x54, /* 0xC0-0xC3 */ + 0xCF, 0x55, 0xCF, 0x56, 0xF3, 0xA1, 0xCF, 0x57, /* 0xC4-0xC7 */ + 0xCF, 0x58, 0xCF, 0x59, 0xF3, 0xB1, 0xF3, 0xAC, /* 0xC8-0xCB */ + 0xCF, 0x5A, 0xCF, 0x5B, 0xCF, 0x5C, 0xCF, 0x5D, /* 0xCC-0xCF */ + 0xCF, 0x5E, 0xF3, 0xAF, 0xF2, 0xFE, 0xF3, 0xAD, /* 0xD0-0xD3 */ + 0xCF, 0x5F, 0xCF, 0x60, 0xCF, 0x61, 0xCF, 0x62, /* 0xD4-0xD7 */ + 0xCF, 0x63, 0xCF, 0x64, 0xCF, 0x65, 0xF3, 0xB2, /* 0xD8-0xDB */ + 0xCF, 0x66, 0xCF, 0x67, 0xCF, 0x68, 0xCF, 0x69, /* 0xDC-0xDF */ + 0xF3, 0xB4, 0xCF, 0x6A, 0xCF, 0x6B, 0xCF, 0x6C, /* 0xE0-0xE3 */ + 0xCF, 0x6D, 0xF3, 0xA8, 0xCF, 0x6E, 0xCF, 0x6F, /* 0xE4-0xE7 */ + 0xCF, 0x70, 0xCF, 0x71, 0xF3, 0xB3, 0xCF, 0x72, /* 0xE8-0xEB */ + 0xCF, 0x73, 0xCF, 0x74, 0xF3, 0xB5, 0xCF, 0x75, /* 0xEC-0xEF */ + 0xCF, 0x76, 0xCF, 0x77, 0xCF, 0x78, 0xCF, 0x79, /* 0xF0-0xF3 */ + 0xCF, 0x7A, 0xCF, 0x7B, 0xCF, 0x7C, 0xCF, 0x7D, /* 0xF4-0xF7 */ + 0xCF, 0x7E, 0xD0, 0xB7, 0xCF, 0x80, 0xCF, 0x81, /* 0xF8-0xFB */ + 0xCF, 0x82, 0xCF, 0x83, 0xF3, 0xB8, 0xCF, 0x84, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0xCF, 0x85, 0xCF, 0x86, 0xCF, 0x87, 0xD9, 0xF9, /* 0x00-0x03 */ + 0xCF, 0x88, 0xCF, 0x89, 0xCF, 0x8A, 0xCF, 0x8B, /* 0x04-0x07 */ + 0xCF, 0x8C, 0xCF, 0x8D, 0xF3, 0xB9, 0xCF, 0x8E, /* 0x08-0x0B */ + 0xCF, 0x8F, 0xCF, 0x90, 0xCF, 0x91, 0xCF, 0x92, /* 0x0C-0x0F */ + 0xCF, 0x93, 0xCF, 0x94, 0xCF, 0x95, 0xF3, 0xB7, /* 0x10-0x13 */ + 0xCF, 0x96, 0xC8, 0xE4, 0xF3, 0xB6, 0xCF, 0x97, /* 0x14-0x17 */ + 0xCF, 0x98, 0xCF, 0x99, 0xCF, 0x9A, 0xF3, 0xBA, /* 0x18-0x1B */ + 0xCF, 0x9B, 0xCF, 0x9C, 0xCF, 0x9D, 0xCF, 0x9E, /* 0x1C-0x1F */ + 0xCF, 0x9F, 0xF3, 0xBB, 0xB4, 0xC0, 0xCF, 0xA0, /* 0x20-0x23 */ + 0xD0, 0x40, 0xD0, 0x41, 0xD0, 0x42, 0xD0, 0x43, /* 0x24-0x27 */ + 0xD0, 0x44, 0xD0, 0x45, 0xD0, 0x46, 0xD0, 0x47, /* 0x28-0x2B */ + 0xD0, 0x48, 0xD0, 0x49, 0xD0, 0x4A, 0xD0, 0x4B, /* 0x2C-0x2F */ + 0xD0, 0x4C, 0xD0, 0x4D, 0xEE, 0xC3, 0xD0, 0x4E, /* 0x30-0x33 */ + 0xD0, 0x4F, 0xD0, 0x50, 0xD0, 0x51, 0xD0, 0x52, /* 0x34-0x37 */ + 0xD0, 0x53, 0xF3, 0xBC, 0xD0, 0x54, 0xD0, 0x55, /* 0x38-0x3B */ + 0xF3, 0xBD, 0xD0, 0x56, 0xD0, 0x57, 0xD0, 0x58, /* 0x3C-0x3F */ + 0xD1, 0xAA, 0xD0, 0x59, 0xD0, 0x5A, 0xD0, 0x5B, /* 0x40-0x43 */ + 0xF4, 0xAC, 0xD0, 0xC6, 0xD0, 0x5C, 0xD0, 0x5D, /* 0x44-0x47 */ + 0xD0, 0x5E, 0xD0, 0x5F, 0xD0, 0x60, 0xD0, 0x61, /* 0x48-0x4B */ + 0xD0, 0xD0, 0xD1, 0xDC, 0xD0, 0x62, 0xD0, 0x63, /* 0x4C-0x4F */ + 0xD0, 0x64, 0xD0, 0x65, 0xD0, 0x66, 0xD0, 0x67, /* 0x50-0x53 */ + 0xCF, 0xCE, 0xD0, 0x68, 0xD0, 0x69, 0xBD, 0xD6, /* 0x54-0x57 */ + 0xD0, 0x6A, 0xD1, 0xC3, 0xD0, 0x6B, 0xD0, 0x6C, /* 0x58-0x5B */ + 0xD0, 0x6D, 0xD0, 0x6E, 0xD0, 0x6F, 0xD0, 0x70, /* 0x5C-0x5F */ + 0xD0, 0x71, 0xBA, 0xE2, 0xE1, 0xE9, 0xD2, 0xC2, /* 0x60-0x63 */ + 0xF1, 0xC2, 0xB2, 0xB9, 0xD0, 0x72, 0xD0, 0x73, /* 0x64-0x67 */ + 0xB1, 0xED, 0xF1, 0xC3, 0xD0, 0x74, 0xC9, 0xC0, /* 0x68-0x6B */ + 0xB3, 0xC4, 0xD0, 0x75, 0xD9, 0xF2, 0xD0, 0x76, /* 0x6C-0x6F */ + 0xCB, 0xA5, 0xD0, 0x77, 0xF1, 0xC4, 0xD0, 0x78, /* 0x70-0x73 */ + 0xD0, 0x79, 0xD0, 0x7A, 0xD0, 0x7B, 0xD6, 0xD4, /* 0x74-0x77 */ + 0xD0, 0x7C, 0xD0, 0x7D, 0xD0, 0x7E, 0xD0, 0x80, /* 0x78-0x7B */ + 0xD0, 0x81, 0xF1, 0xC5, 0xF4, 0xC0, 0xF1, 0xC6, /* 0x7C-0x7F */ + + 0xD0, 0x82, 0xD4, 0xAC, 0xF1, 0xC7, 0xD0, 0x83, /* 0x80-0x83 */ + 0xB0, 0xC0, 0xF4, 0xC1, 0xD0, 0x84, 0xD0, 0x85, /* 0x84-0x87 */ + 0xF4, 0xC2, 0xD0, 0x86, 0xD0, 0x87, 0xB4, 0xFC, /* 0x88-0x8B */ + 0xD0, 0x88, 0xC5, 0xDB, 0xD0, 0x89, 0xD0, 0x8A, /* 0x8C-0x8F */ + 0xD0, 0x8B, 0xD0, 0x8C, 0xCC, 0xBB, 0xD0, 0x8D, /* 0x90-0x93 */ + 0xD0, 0x8E, 0xD0, 0x8F, 0xD0, 0xE4, 0xD0, 0x90, /* 0x94-0x97 */ + 0xD0, 0x91, 0xD0, 0x92, 0xD0, 0x93, 0xD0, 0x94, /* 0x98-0x9B */ + 0xCD, 0xE0, 0xD0, 0x95, 0xD0, 0x96, 0xD0, 0x97, /* 0x9C-0x9F */ + 0xD0, 0x98, 0xD0, 0x99, 0xF1, 0xC8, 0xD0, 0x9A, /* 0xA0-0xA3 */ + 0xD9, 0xF3, 0xD0, 0x9B, 0xD0, 0x9C, 0xD0, 0x9D, /* 0xA4-0xA7 */ + 0xD0, 0x9E, 0xD0, 0x9F, 0xD0, 0xA0, 0xB1, 0xBB, /* 0xA8-0xAB */ + 0xD1, 0x40, 0xCF, 0xAE, 0xD1, 0x41, 0xD1, 0x42, /* 0xAC-0xAF */ + 0xD1, 0x43, 0xB8, 0xA4, 0xD1, 0x44, 0xD1, 0x45, /* 0xB0-0xB3 */ + 0xD1, 0x46, 0xD1, 0x47, 0xD1, 0x48, 0xF1, 0xCA, /* 0xB4-0xB7 */ + 0xD1, 0x49, 0xD1, 0x4A, 0xD1, 0x4B, 0xD1, 0x4C, /* 0xB8-0xBB */ + 0xF1, 0xCB, 0xD1, 0x4D, 0xD1, 0x4E, 0xD1, 0x4F, /* 0xBC-0xBF */ + 0xD1, 0x50, 0xB2, 0xC3, 0xC1, 0xD1, 0xD1, 0x51, /* 0xC0-0xC3 */ + 0xD1, 0x52, 0xD7, 0xB0, 0xF1, 0xC9, 0xD1, 0x53, /* 0xC4-0xC7 */ + 0xD1, 0x54, 0xF1, 0xCC, 0xD1, 0x55, 0xD1, 0x56, /* 0xC8-0xCB */ + 0xD1, 0x57, 0xD1, 0x58, 0xF1, 0xCE, 0xD1, 0x59, /* 0xCC-0xCF */ + 0xD1, 0x5A, 0xD1, 0x5B, 0xD9, 0xF6, 0xD1, 0x5C, /* 0xD0-0xD3 */ + 0xD2, 0xE1, 0xD4, 0xA3, 0xD1, 0x5D, 0xD1, 0x5E, /* 0xD4-0xD7 */ + 0xF4, 0xC3, 0xC8, 0xB9, 0xD1, 0x5F, 0xD1, 0x60, /* 0xD8-0xDB */ + 0xD1, 0x61, 0xD1, 0x62, 0xD1, 0x63, 0xF4, 0xC4, /* 0xDC-0xDF */ + 0xD1, 0x64, 0xD1, 0x65, 0xF1, 0xCD, 0xF1, 0xCF, /* 0xE0-0xE3 */ + 0xBF, 0xE3, 0xF1, 0xD0, 0xD1, 0x66, 0xD1, 0x67, /* 0xE4-0xE7 */ + 0xF1, 0xD4, 0xD1, 0x68, 0xD1, 0x69, 0xD1, 0x6A, /* 0xE8-0xEB */ + 0xD1, 0x6B, 0xD1, 0x6C, 0xD1, 0x6D, 0xD1, 0x6E, /* 0xEC-0xEF */ + 0xF1, 0xD6, 0xF1, 0xD1, 0xD1, 0x6F, 0xC9, 0xD1, /* 0xF0-0xF3 */ + 0xC5, 0xE1, 0xD1, 0x70, 0xD1, 0x71, 0xD1, 0x72, /* 0xF4-0xF7 */ + 0xC2, 0xE3, 0xB9, 0xFC, 0xD1, 0x73, 0xD1, 0x74, /* 0xF8-0xFB */ + 0xF1, 0xD3, 0xD1, 0x75, 0xF1, 0xD5, 0xD1, 0x76, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0xD1, 0x77, 0xD1, 0x78, 0xB9, 0xD3, 0xD1, 0x79, /* 0x00-0x03 */ + 0xD1, 0x7A, 0xD1, 0x7B, 0xD1, 0x7C, 0xD1, 0x7D, /* 0x04-0x07 */ + 0xD1, 0x7E, 0xD1, 0x80, 0xF1, 0xDB, 0xD1, 0x81, /* 0x08-0x0B */ + 0xD1, 0x82, 0xD1, 0x83, 0xD1, 0x84, 0xD1, 0x85, /* 0x0C-0x0F */ + 0xBA, 0xD6, 0xD1, 0x86, 0xB0, 0xFD, 0xF1, 0xD9, /* 0x10-0x13 */ + 0xD1, 0x87, 0xD1, 0x88, 0xD1, 0x89, 0xD1, 0x8A, /* 0x14-0x17 */ + 0xD1, 0x8B, 0xF1, 0xD8, 0xF1, 0xD2, 0xF1, 0xDA, /* 0x18-0x1B */ + 0xD1, 0x8C, 0xD1, 0x8D, 0xD1, 0x8E, 0xD1, 0x8F, /* 0x1C-0x1F */ + 0xD1, 0x90, 0xF1, 0xD7, 0xD1, 0x91, 0xD1, 0x92, /* 0x20-0x23 */ + 0xD1, 0x93, 0xC8, 0xEC, 0xD1, 0x94, 0xD1, 0x95, /* 0x24-0x27 */ + 0xD1, 0x96, 0xD1, 0x97, 0xCD, 0xCA, 0xF1, 0xDD, /* 0x28-0x2B */ + 0xD1, 0x98, 0xD1, 0x99, 0xD1, 0x9A, 0xD1, 0x9B, /* 0x2C-0x2F */ + 0xE5, 0xBD, 0xD1, 0x9C, 0xD1, 0x9D, 0xD1, 0x9E, /* 0x30-0x33 */ + 0xF1, 0xDC, 0xD1, 0x9F, 0xF1, 0xDE, 0xD1, 0xA0, /* 0x34-0x37 */ + 0xD2, 0x40, 0xD2, 0x41, 0xD2, 0x42, 0xD2, 0x43, /* 0x38-0x3B */ + 0xD2, 0x44, 0xD2, 0x45, 0xD2, 0x46, 0xD2, 0x47, /* 0x3C-0x3F */ + 0xD2, 0x48, 0xF1, 0xDF, 0xD2, 0x49, 0xD2, 0x4A, /* 0x40-0x43 */ + 0xCF, 0xE5, 0xD2, 0x4B, 0xD2, 0x4C, 0xD2, 0x4D, /* 0x44-0x47 */ + 0xD2, 0x4E, 0xD2, 0x4F, 0xD2, 0x50, 0xD2, 0x51, /* 0x48-0x4B */ + 0xD2, 0x52, 0xD2, 0x53, 0xD2, 0x54, 0xD2, 0x55, /* 0x4C-0x4F */ + 0xD2, 0x56, 0xD2, 0x57, 0xD2, 0x58, 0xD2, 0x59, /* 0x50-0x53 */ + 0xD2, 0x5A, 0xD2, 0x5B, 0xD2, 0x5C, 0xD2, 0x5D, /* 0x54-0x57 */ + 0xD2, 0x5E, 0xD2, 0x5F, 0xD2, 0x60, 0xD2, 0x61, /* 0x58-0x5B */ + 0xD2, 0x62, 0xD2, 0x63, 0xF4, 0xC5, 0xBD, 0xF3, /* 0x5C-0x5F */ + 0xD2, 0x64, 0xD2, 0x65, 0xD2, 0x66, 0xD2, 0x67, /* 0x60-0x63 */ + 0xD2, 0x68, 0xD2, 0x69, 0xF1, 0xE0, 0xD2, 0x6A, /* 0x64-0x67 */ + 0xD2, 0x6B, 0xD2, 0x6C, 0xD2, 0x6D, 0xD2, 0x6E, /* 0x68-0x6B */ + 0xD2, 0x6F, 0xD2, 0x70, 0xD2, 0x71, 0xD2, 0x72, /* 0x6C-0x6F */ + 0xD2, 0x73, 0xD2, 0x74, 0xD2, 0x75, 0xD2, 0x76, /* 0x70-0x73 */ + 0xD2, 0x77, 0xD2, 0x78, 0xD2, 0x79, 0xD2, 0x7A, /* 0x74-0x77 */ + 0xD2, 0x7B, 0xD2, 0x7C, 0xD2, 0x7D, 0xF1, 0xE1, /* 0x78-0x7B */ + 0xD2, 0x7E, 0xD2, 0x80, 0xD2, 0x81, 0xCE, 0xF7, /* 0x7C-0x7F */ + + 0xD2, 0x82, 0xD2, 0xAA, 0xD2, 0x83, 0xF1, 0xFB, /* 0x80-0x83 */ + 0xD2, 0x84, 0xD2, 0x85, 0xB8, 0xB2, 0xD2, 0x86, /* 0x84-0x87 */ + 0xD2, 0x87, 0xD2, 0x88, 0xD2, 0x89, 0xD2, 0x8A, /* 0x88-0x8B */ + 0xD2, 0x8B, 0xD2, 0x8C, 0xD2, 0x8D, 0xD2, 0x8E, /* 0x8C-0x8F */ + 0xD2, 0x8F, 0xD2, 0x90, 0xD2, 0x91, 0xD2, 0x92, /* 0x90-0x93 */ + 0xD2, 0x93, 0xD2, 0x94, 0xD2, 0x95, 0xD2, 0x96, /* 0x94-0x97 */ + 0xD2, 0x97, 0xD2, 0x98, 0xD2, 0x99, 0xD2, 0x9A, /* 0x98-0x9B */ + 0xD2, 0x9B, 0xD2, 0x9C, 0xD2, 0x9D, 0xD2, 0x9E, /* 0x9C-0x9F */ + 0xD2, 0x9F, 0xD2, 0xA0, 0xD3, 0x40, 0xD3, 0x41, /* 0xA0-0xA3 */ + 0xD3, 0x42, 0xD3, 0x43, 0xD3, 0x44, 0xD3, 0x45, /* 0xA4-0xA7 */ + 0xD3, 0x46, 0xD3, 0x47, 0xD3, 0x48, 0xD3, 0x49, /* 0xA8-0xAB */ + 0xD3, 0x4A, 0xD3, 0x4B, 0xD3, 0x4C, 0xD3, 0x4D, /* 0xAC-0xAF */ + 0xD3, 0x4E, 0xD3, 0x4F, 0xD3, 0x50, 0xD3, 0x51, /* 0xB0-0xB3 */ + 0xD3, 0x52, 0xD3, 0x53, 0xD3, 0x54, 0xD3, 0x55, /* 0xB4-0xB7 */ + 0xD3, 0x56, 0xD3, 0x57, 0xD3, 0x58, 0xD3, 0x59, /* 0xB8-0xBB */ + 0xD3, 0x5A, 0xD3, 0x5B, 0xD3, 0x5C, 0xD3, 0x5D, /* 0xBC-0xBF */ + 0xD3, 0x5E, 0xBC, 0xFB, 0xB9, 0xDB, 0xD3, 0x5F, /* 0xC0-0xC3 */ + 0xB9, 0xE6, 0xC3, 0xD9, 0xCA, 0xD3, 0xEA, 0xE8, /* 0xC4-0xC7 */ + 0xC0, 0xC0, 0xBE, 0xF5, 0xEA, 0xE9, 0xEA, 0xEA, /* 0xC8-0xCB */ + 0xEA, 0xEB, 0xD3, 0x60, 0xEA, 0xEC, 0xEA, 0xED, /* 0xCC-0xCF */ + 0xEA, 0xEE, 0xEA, 0xEF, 0xBD, 0xC7, 0xD3, 0x61, /* 0xD0-0xD3 */ + 0xD3, 0x62, 0xD3, 0x63, 0xF5, 0xFB, 0xD3, 0x64, /* 0xD4-0xD7 */ + 0xD3, 0x65, 0xD3, 0x66, 0xF5, 0xFD, 0xD3, 0x67, /* 0xD8-0xDB */ + 0xF5, 0xFE, 0xD3, 0x68, 0xF5, 0xFC, 0xD3, 0x69, /* 0xDC-0xDF */ + 0xD3, 0x6A, 0xD3, 0x6B, 0xD3, 0x6C, 0xBD, 0xE2, /* 0xE0-0xE3 */ + 0xD3, 0x6D, 0xF6, 0xA1, 0xB4, 0xA5, 0xD3, 0x6E, /* 0xE4-0xE7 */ + 0xD3, 0x6F, 0xD3, 0x70, 0xD3, 0x71, 0xF6, 0xA2, /* 0xE8-0xEB */ + 0xD3, 0x72, 0xD3, 0x73, 0xD3, 0x74, 0xF6, 0xA3, /* 0xEC-0xEF */ + 0xD3, 0x75, 0xD3, 0x76, 0xD3, 0x77, 0xEC, 0xB2, /* 0xF0-0xF3 */ + 0xD3, 0x78, 0xD3, 0x79, 0xD3, 0x7A, 0xD3, 0x7B, /* 0xF4-0xF7 */ + 0xD3, 0x7C, 0xD3, 0x7D, 0xD3, 0x7E, 0xD3, 0x80, /* 0xF8-0xFB */ + 0xD3, 0x81, 0xD3, 0x82, 0xD3, 0x83, 0xD3, 0x84, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8A[512] = { + 0xD1, 0xD4, 0xD3, 0x85, 0xD3, 0x86, 0xD3, 0x87, /* 0x00-0x03 */ + 0xD3, 0x88, 0xD3, 0x89, 0xD3, 0x8A, 0xD9, 0xEA, /* 0x04-0x07 */ + 0xD3, 0x8B, 0xD3, 0x8C, 0xD3, 0x8D, 0xD3, 0x8E, /* 0x08-0x0B */ + 0xD3, 0x8F, 0xD3, 0x90, 0xD3, 0x91, 0xD3, 0x92, /* 0x0C-0x0F */ + 0xD3, 0x93, 0xD3, 0x94, 0xD3, 0x95, 0xD3, 0x96, /* 0x10-0x13 */ + 0xD3, 0x97, 0xD3, 0x98, 0xD3, 0x99, 0xD3, 0x9A, /* 0x14-0x17 */ + 0xD3, 0x9B, 0xD3, 0x9C, 0xD3, 0x9D, 0xD3, 0x9E, /* 0x18-0x1B */ + 0xD3, 0x9F, 0xD3, 0xA0, 0xD4, 0x40, 0xD4, 0x41, /* 0x1C-0x1F */ + 0xD4, 0x42, 0xD4, 0x43, 0xD4, 0x44, 0xD4, 0x45, /* 0x20-0x23 */ + 0xD4, 0x46, 0xD4, 0x47, 0xD4, 0x48, 0xD4, 0x49, /* 0x24-0x27 */ + 0xD4, 0x4A, 0xD4, 0x4B, 0xD4, 0x4C, 0xD4, 0x4D, /* 0x28-0x2B */ + 0xD4, 0x4E, 0xD4, 0x4F, 0xD4, 0x50, 0xD4, 0x51, /* 0x2C-0x2F */ + 0xD4, 0x52, 0xD4, 0x53, 0xD4, 0x54, 0xD4, 0x55, /* 0x30-0x33 */ + 0xD4, 0x56, 0xD4, 0x57, 0xD4, 0x58, 0xD4, 0x59, /* 0x34-0x37 */ + 0xD4, 0x5A, 0xD4, 0x5B, 0xD4, 0x5C, 0xD4, 0x5D, /* 0x38-0x3B */ + 0xD4, 0x5E, 0xD4, 0x5F, 0xF6, 0xA4, 0xD4, 0x60, /* 0x3C-0x3F */ + 0xD4, 0x61, 0xD4, 0x62, 0xD4, 0x63, 0xD4, 0x64, /* 0x40-0x43 */ + 0xD4, 0x65, 0xD4, 0x66, 0xD4, 0x67, 0xD4, 0x68, /* 0x44-0x47 */ + 0xEE, 0xBA, 0xD4, 0x69, 0xD4, 0x6A, 0xD4, 0x6B, /* 0x48-0x4B */ + 0xD4, 0x6C, 0xD4, 0x6D, 0xD4, 0x6E, 0xD4, 0x6F, /* 0x4C-0x4F */ + 0xD4, 0x70, 0xD4, 0x71, 0xD4, 0x72, 0xD4, 0x73, /* 0x50-0x53 */ + 0xD4, 0x74, 0xD4, 0x75, 0xD4, 0x76, 0xD4, 0x77, /* 0x54-0x57 */ + 0xD4, 0x78, 0xD4, 0x79, 0xD4, 0x7A, 0xD4, 0x7B, /* 0x58-0x5B */ + 0xD4, 0x7C, 0xD4, 0x7D, 0xD4, 0x7E, 0xD4, 0x80, /* 0x5C-0x5F */ + 0xD4, 0x81, 0xD4, 0x82, 0xD4, 0x83, 0xD4, 0x84, /* 0x60-0x63 */ + 0xD4, 0x85, 0xD4, 0x86, 0xD4, 0x87, 0xD4, 0x88, /* 0x64-0x67 */ + 0xD4, 0x89, 0xD4, 0x8A, 0xD4, 0x8B, 0xD4, 0x8C, /* 0x68-0x6B */ + 0xD4, 0x8D, 0xD4, 0x8E, 0xD4, 0x8F, 0xD4, 0x90, /* 0x6C-0x6F */ + 0xD4, 0x91, 0xD4, 0x92, 0xD4, 0x93, 0xD4, 0x94, /* 0x70-0x73 */ + 0xD4, 0x95, 0xD4, 0x96, 0xD4, 0x97, 0xD4, 0x98, /* 0x74-0x77 */ + 0xD4, 0x99, 0xD5, 0xB2, 0xD4, 0x9A, 0xD4, 0x9B, /* 0x78-0x7B */ + 0xD4, 0x9C, 0xD4, 0x9D, 0xD4, 0x9E, 0xD4, 0x9F, /* 0x7C-0x7F */ + + 0xD4, 0xA0, 0xD5, 0x40, 0xD5, 0x41, 0xD5, 0x42, /* 0x80-0x83 */ + 0xD5, 0x43, 0xD5, 0x44, 0xD5, 0x45, 0xD5, 0x46, /* 0x84-0x87 */ + 0xD5, 0x47, 0xD3, 0xFE, 0xCC, 0xDC, 0xD5, 0x48, /* 0x88-0x8B */ + 0xD5, 0x49, 0xD5, 0x4A, 0xD5, 0x4B, 0xD5, 0x4C, /* 0x8C-0x8F */ + 0xD5, 0x4D, 0xD5, 0x4E, 0xD5, 0x4F, 0xCA, 0xC4, /* 0x90-0x93 */ + 0xD5, 0x50, 0xD5, 0x51, 0xD5, 0x52, 0xD5, 0x53, /* 0x94-0x97 */ + 0xD5, 0x54, 0xD5, 0x55, 0xD5, 0x56, 0xD5, 0x57, /* 0x98-0x9B */ + 0xD5, 0x58, 0xD5, 0x59, 0xD5, 0x5A, 0xD5, 0x5B, /* 0x9C-0x9F */ + 0xD5, 0x5C, 0xD5, 0x5D, 0xD5, 0x5E, 0xD5, 0x5F, /* 0xA0-0xA3 */ + 0xD5, 0x60, 0xD5, 0x61, 0xD5, 0x62, 0xD5, 0x63, /* 0xA4-0xA7 */ + 0xD5, 0x64, 0xD5, 0x65, 0xD5, 0x66, 0xD5, 0x67, /* 0xA8-0xAB */ + 0xD5, 0x68, 0xD5, 0x69, 0xD5, 0x6A, 0xD5, 0x6B, /* 0xAC-0xAF */ + 0xD5, 0x6C, 0xD5, 0x6D, 0xD5, 0x6E, 0xD5, 0x6F, /* 0xB0-0xB3 */ + 0xD5, 0x70, 0xD5, 0x71, 0xD5, 0x72, 0xD5, 0x73, /* 0xB4-0xB7 */ + 0xD5, 0x74, 0xD5, 0x75, 0xD5, 0x76, 0xD5, 0x77, /* 0xB8-0xBB */ + 0xD5, 0x78, 0xD5, 0x79, 0xD5, 0x7A, 0xD5, 0x7B, /* 0xBC-0xBF */ + 0xD5, 0x7C, 0xD5, 0x7D, 0xD5, 0x7E, 0xD5, 0x80, /* 0xC0-0xC3 */ + 0xD5, 0x81, 0xD5, 0x82, 0xD5, 0x83, 0xD5, 0x84, /* 0xC4-0xC7 */ + 0xD5, 0x85, 0xD5, 0x86, 0xD5, 0x87, 0xD5, 0x88, /* 0xC8-0xCB */ + 0xD5, 0x89, 0xD5, 0x8A, 0xD5, 0x8B, 0xD5, 0x8C, /* 0xCC-0xCF */ + 0xD5, 0x8D, 0xD5, 0x8E, 0xD5, 0x8F, 0xD5, 0x90, /* 0xD0-0xD3 */ + 0xD5, 0x91, 0xD5, 0x92, 0xD5, 0x93, 0xD5, 0x94, /* 0xD4-0xD7 */ + 0xD5, 0x95, 0xD5, 0x96, 0xD5, 0x97, 0xD5, 0x98, /* 0xD8-0xDB */ + 0xD5, 0x99, 0xD5, 0x9A, 0xD5, 0x9B, 0xD5, 0x9C, /* 0xDC-0xDF */ + 0xD5, 0x9D, 0xD5, 0x9E, 0xD5, 0x9F, 0xD5, 0xA0, /* 0xE0-0xE3 */ + 0xD6, 0x40, 0xD6, 0x41, 0xD6, 0x42, 0xD6, 0x43, /* 0xE4-0xE7 */ + 0xD6, 0x44, 0xD6, 0x45, 0xD6, 0x46, 0xD6, 0x47, /* 0xE8-0xEB */ + 0xD6, 0x48, 0xD6, 0x49, 0xD6, 0x4A, 0xD6, 0x4B, /* 0xEC-0xEF */ + 0xD6, 0x4C, 0xD6, 0x4D, 0xD6, 0x4E, 0xD6, 0x4F, /* 0xF0-0xF3 */ + 0xD6, 0x50, 0xD6, 0x51, 0xD6, 0x52, 0xD6, 0x53, /* 0xF4-0xF7 */ + 0xD6, 0x54, 0xD6, 0x55, 0xD6, 0x56, 0xD6, 0x57, /* 0xF8-0xFB */ + 0xD6, 0x58, 0xD6, 0x59, 0xD6, 0x5A, 0xD6, 0x5B, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0xD6, 0x5C, 0xD6, 0x5D, 0xD6, 0x5E, 0xD6, 0x5F, /* 0x00-0x03 */ + 0xD6, 0x60, 0xD6, 0x61, 0xD6, 0x62, 0xE5, 0xC0, /* 0x04-0x07 */ + 0xD6, 0x63, 0xD6, 0x64, 0xD6, 0x65, 0xD6, 0x66, /* 0x08-0x0B */ + 0xD6, 0x67, 0xD6, 0x68, 0xD6, 0x69, 0xD6, 0x6A, /* 0x0C-0x0F */ + 0xD6, 0x6B, 0xD6, 0x6C, 0xD6, 0x6D, 0xD6, 0x6E, /* 0x10-0x13 */ + 0xD6, 0x6F, 0xD6, 0x70, 0xD6, 0x71, 0xD6, 0x72, /* 0x14-0x17 */ + 0xD6, 0x73, 0xD6, 0x74, 0xD6, 0x75, 0xD6, 0x76, /* 0x18-0x1B */ + 0xD6, 0x77, 0xD6, 0x78, 0xD6, 0x79, 0xD6, 0x7A, /* 0x1C-0x1F */ + 0xD6, 0x7B, 0xD6, 0x7C, 0xD6, 0x7D, 0xD6, 0x7E, /* 0x20-0x23 */ + 0xD6, 0x80, 0xD6, 0x81, 0xF6, 0xA5, 0xD6, 0x82, /* 0x24-0x27 */ + 0xD6, 0x83, 0xD6, 0x84, 0xD6, 0x85, 0xD6, 0x86, /* 0x28-0x2B */ + 0xD6, 0x87, 0xD6, 0x88, 0xD6, 0x89, 0xD6, 0x8A, /* 0x2C-0x2F */ + 0xD6, 0x8B, 0xD6, 0x8C, 0xD6, 0x8D, 0xD6, 0x8E, /* 0x30-0x33 */ + 0xD6, 0x8F, 0xD6, 0x90, 0xD6, 0x91, 0xD6, 0x92, /* 0x34-0x37 */ + 0xD6, 0x93, 0xD6, 0x94, 0xD6, 0x95, 0xD6, 0x96, /* 0x38-0x3B */ + 0xD6, 0x97, 0xD6, 0x98, 0xD6, 0x99, 0xD6, 0x9A, /* 0x3C-0x3F */ + 0xD6, 0x9B, 0xD6, 0x9C, 0xD6, 0x9D, 0xD6, 0x9E, /* 0x40-0x43 */ + 0xD6, 0x9F, 0xD6, 0xA0, 0xD7, 0x40, 0xD7, 0x41, /* 0x44-0x47 */ + 0xD7, 0x42, 0xD7, 0x43, 0xD7, 0x44, 0xD7, 0x45, /* 0x48-0x4B */ + 0xD7, 0x46, 0xD7, 0x47, 0xD7, 0x48, 0xD7, 0x49, /* 0x4C-0x4F */ + 0xD7, 0x4A, 0xD7, 0x4B, 0xD7, 0x4C, 0xD7, 0x4D, /* 0x50-0x53 */ + 0xD7, 0x4E, 0xD7, 0x4F, 0xD7, 0x50, 0xD7, 0x51, /* 0x54-0x57 */ + 0xD7, 0x52, 0xD7, 0x53, 0xD7, 0x54, 0xD7, 0x55, /* 0x58-0x5B */ + 0xD7, 0x56, 0xD7, 0x57, 0xD7, 0x58, 0xD7, 0x59, /* 0x5C-0x5F */ + 0xD7, 0x5A, 0xD7, 0x5B, 0xD7, 0x5C, 0xD7, 0x5D, /* 0x60-0x63 */ + 0xD7, 0x5E, 0xD7, 0x5F, 0xBE, 0xAF, 0xD7, 0x60, /* 0x64-0x67 */ + 0xD7, 0x61, 0xD7, 0x62, 0xD7, 0x63, 0xD7, 0x64, /* 0x68-0x6B */ + 0xC6, 0xA9, 0xD7, 0x65, 0xD7, 0x66, 0xD7, 0x67, /* 0x6C-0x6F */ + 0xD7, 0x68, 0xD7, 0x69, 0xD7, 0x6A, 0xD7, 0x6B, /* 0x70-0x73 */ + 0xD7, 0x6C, 0xD7, 0x6D, 0xD7, 0x6E, 0xD7, 0x6F, /* 0x74-0x77 */ + 0xD7, 0x70, 0xD7, 0x71, 0xD7, 0x72, 0xD7, 0x73, /* 0x78-0x7B */ + 0xD7, 0x74, 0xD7, 0x75, 0xD7, 0x76, 0xD7, 0x77, /* 0x7C-0x7F */ + + 0xD7, 0x78, 0xD7, 0x79, 0xD7, 0x7A, 0xD7, 0x7B, /* 0x80-0x83 */ + 0xD7, 0x7C, 0xD7, 0x7D, 0xD7, 0x7E, 0xD7, 0x80, /* 0x84-0x87 */ + 0xD7, 0x81, 0xD7, 0x82, 0xD7, 0x83, 0xD7, 0x84, /* 0x88-0x8B */ + 0xD7, 0x85, 0xD7, 0x86, 0xD7, 0x87, 0xD7, 0x88, /* 0x8C-0x8F */ + 0xD7, 0x89, 0xD7, 0x8A, 0xD7, 0x8B, 0xD7, 0x8C, /* 0x90-0x93 */ + 0xD7, 0x8D, 0xD7, 0x8E, 0xD7, 0x8F, 0xD7, 0x90, /* 0x94-0x97 */ + 0xD7, 0x91, 0xD7, 0x92, 0xD7, 0x93, 0xD7, 0x94, /* 0x98-0x9B */ + 0xD7, 0x95, 0xD7, 0x96, 0xD7, 0x97, 0xD7, 0x98, /* 0x9C-0x9F */ + 0xDA, 0xA5, 0xBC, 0xC6, 0xB6, 0xA9, 0xB8, 0xBC, /* 0xA0-0xA3 */ + 0xC8, 0xCF, 0xBC, 0xA5, 0xDA, 0xA6, 0xDA, 0xA7, /* 0xA4-0xA7 */ + 0xCC, 0xD6, 0xC8, 0xC3, 0xDA, 0xA8, 0xC6, 0xFD, /* 0xA8-0xAB */ + 0xD7, 0x99, 0xD1, 0xB5, 0xD2, 0xE9, 0xD1, 0xB6, /* 0xAC-0xAF */ + 0xBC, 0xC7, 0xD7, 0x9A, 0xBD, 0xB2, 0xBB, 0xE4, /* 0xB0-0xB3 */ + 0xDA, 0xA9, 0xDA, 0xAA, 0xD1, 0xC8, 0xDA, 0xAB, /* 0xB4-0xB7 */ + 0xD0, 0xED, 0xB6, 0xEF, 0xC2, 0xDB, 0xD7, 0x9B, /* 0xB8-0xBB */ + 0xCB, 0xCF, 0xB7, 0xED, 0xC9, 0xE8, 0xB7, 0xC3, /* 0xBC-0xBF */ + 0xBE, 0xF7, 0xD6, 0xA4, 0xDA, 0xAC, 0xDA, 0xAD, /* 0xC0-0xC3 */ + 0xC6, 0xC0, 0xD7, 0xE7, 0xCA, 0xB6, 0xD7, 0x9C, /* 0xC4-0xC7 */ + 0xD5, 0xA9, 0xCB, 0xDF, 0xD5, 0xEF, 0xDA, 0xAE, /* 0xC8-0xCB */ + 0xD6, 0xDF, 0xB4, 0xCA, 0xDA, 0xB0, 0xDA, 0xAF, /* 0xCC-0xCF */ + 0xD7, 0x9D, 0xD2, 0xEB, 0xDA, 0xB1, 0xDA, 0xB2, /* 0xD0-0xD3 */ + 0xDA, 0xB3, 0xCA, 0xD4, 0xDA, 0xB4, 0xCA, 0xAB, /* 0xD4-0xD7 */ + 0xDA, 0xB5, 0xDA, 0xB6, 0xB3, 0xCF, 0xD6, 0xEF, /* 0xD8-0xDB */ + 0xDA, 0xB7, 0xBB, 0xB0, 0xB5, 0xAE, 0xDA, 0xB8, /* 0xDC-0xDF */ + 0xDA, 0xB9, 0xB9, 0xEE, 0xD1, 0xAF, 0xD2, 0xE8, /* 0xE0-0xE3 */ + 0xDA, 0xBA, 0xB8, 0xC3, 0xCF, 0xEA, 0xB2, 0xEF, /* 0xE4-0xE7 */ + 0xDA, 0xBB, 0xDA, 0xBC, 0xD7, 0x9E, 0xBD, 0xEB, /* 0xE8-0xEB */ + 0xCE, 0xDC, 0xD3, 0xEF, 0xDA, 0xBD, 0xCE, 0xF3, /* 0xEC-0xEF */ + 0xDA, 0xBE, 0xD3, 0xD5, 0xBB, 0xE5, 0xDA, 0xBF, /* 0xF0-0xF3 */ + 0xCB, 0xB5, 0xCB, 0xD0, 0xDA, 0xC0, 0xC7, 0xEB, /* 0xF4-0xF7 */ + 0xD6, 0xEE, 0xDA, 0xC1, 0xC5, 0xB5, 0xB6, 0xC1, /* 0xF8-0xFB */ + 0xDA, 0xC2, 0xB7, 0xCC, 0xBF, 0xCE, 0xDA, 0xC3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8C[512] = { + 0xDA, 0xC4, 0xCB, 0xAD, 0xDA, 0xC5, 0xB5, 0xF7, /* 0x00-0x03 */ + 0xDA, 0xC6, 0xC1, 0xC2, 0xD7, 0xBB, 0xDA, 0xC7, /* 0x04-0x07 */ + 0xCC, 0xB8, 0xD7, 0x9F, 0xD2, 0xEA, 0xC4, 0xB1, /* 0x08-0x0B */ + 0xDA, 0xC8, 0xB5, 0xFD, 0xBB, 0xD1, 0xDA, 0xC9, /* 0x0C-0x0F */ + 0xD0, 0xB3, 0xDA, 0xCA, 0xDA, 0xCB, 0xCE, 0xBD, /* 0x10-0x13 */ + 0xDA, 0xCC, 0xDA, 0xCD, 0xDA, 0xCE, 0xB2, 0xF7, /* 0x14-0x17 */ + 0xDA, 0xD1, 0xDA, 0xCF, 0xD1, 0xE8, 0xDA, 0xD0, /* 0x18-0x1B */ + 0xC3, 0xD5, 0xDA, 0xD2, 0xD7, 0xA0, 0xDA, 0xD3, /* 0x1C-0x1F */ + 0xDA, 0xD4, 0xDA, 0xD5, 0xD0, 0xBB, 0xD2, 0xA5, /* 0x20-0x23 */ + 0xB0, 0xF9, 0xDA, 0xD6, 0xC7, 0xAB, 0xDA, 0xD7, /* 0x24-0x27 */ + 0xBD, 0xF7, 0xC3, 0xA1, 0xDA, 0xD8, 0xDA, 0xD9, /* 0x28-0x2B */ + 0xC3, 0xFD, 0xCC, 0xB7, 0xDA, 0xDA, 0xDA, 0xDB, /* 0x2C-0x2F */ + 0xC0, 0xBE, 0xC6, 0xD7, 0xDA, 0xDC, 0xDA, 0xDD, /* 0x30-0x33 */ + 0xC7, 0xB4, 0xDA, 0xDE, 0xDA, 0xDF, 0xB9, 0xC8, /* 0x34-0x37 */ + 0xD8, 0x40, 0xD8, 0x41, 0xD8, 0x42, 0xD8, 0x43, /* 0x38-0x3B */ + 0xD8, 0x44, 0xD8, 0x45, 0xD8, 0x46, 0xD8, 0x47, /* 0x3C-0x3F */ + 0xD8, 0x48, 0xBB, 0xED, 0xD8, 0x49, 0xD8, 0x4A, /* 0x40-0x43 */ + 0xD8, 0x4B, 0xD8, 0x4C, 0xB6, 0xB9, 0xF4, 0xF8, /* 0x44-0x47 */ + 0xD8, 0x4D, 0xF4, 0xF9, 0xD8, 0x4E, 0xD8, 0x4F, /* 0x48-0x4B */ + 0xCD, 0xE3, 0xD8, 0x50, 0xD8, 0x51, 0xD8, 0x52, /* 0x4C-0x4F */ + 0xD8, 0x53, 0xD8, 0x54, 0xD8, 0x55, 0xD8, 0x56, /* 0x50-0x53 */ + 0xD8, 0x57, 0xF5, 0xB9, 0xD8, 0x58, 0xD8, 0x59, /* 0x54-0x57 */ + 0xD8, 0x5A, 0xD8, 0x5B, 0xEB, 0xE0, 0xD8, 0x5C, /* 0x58-0x5B */ + 0xD8, 0x5D, 0xD8, 0x5E, 0xD8, 0x5F, 0xD8, 0x60, /* 0x5C-0x5F */ + 0xD8, 0x61, 0xCF, 0xF3, 0xBB, 0xBF, 0xD8, 0x62, /* 0x60-0x63 */ + 0xD8, 0x63, 0xD8, 0x64, 0xD8, 0x65, 0xD8, 0x66, /* 0x64-0x67 */ + 0xD8, 0x67, 0xD8, 0x68, 0xBA, 0xC0, 0xD4, 0xA5, /* 0x68-0x6B */ + 0xD8, 0x69, 0xD8, 0x6A, 0xD8, 0x6B, 0xD8, 0x6C, /* 0x6C-0x6F */ + 0xD8, 0x6D, 0xD8, 0x6E, 0xD8, 0x6F, 0xE1, 0xD9, /* 0x70-0x73 */ + 0xD8, 0x70, 0xD8, 0x71, 0xD8, 0x72, 0xD8, 0x73, /* 0x74-0x77 */ + 0xF5, 0xF4, 0xB1, 0xAA, 0xB2, 0xF2, 0xD8, 0x74, /* 0x78-0x7B */ + 0xD8, 0x75, 0xD8, 0x76, 0xD8, 0x77, 0xD8, 0x78, /* 0x7C-0x7F */ + + 0xD8, 0x79, 0xD8, 0x7A, 0xF5, 0xF5, 0xD8, 0x7B, /* 0x80-0x83 */ + 0xD8, 0x7C, 0xF5, 0xF7, 0xD8, 0x7D, 0xD8, 0x7E, /* 0x84-0x87 */ + 0xD8, 0x80, 0xBA, 0xD1, 0xF5, 0xF6, 0xD8, 0x81, /* 0x88-0x8B */ + 0xC3, 0xB2, 0xD8, 0x82, 0xD8, 0x83, 0xD8, 0x84, /* 0x8C-0x8F */ + 0xD8, 0x85, 0xD8, 0x86, 0xD8, 0x87, 0xD8, 0x88, /* 0x90-0x93 */ + 0xF5, 0xF9, 0xD8, 0x89, 0xD8, 0x8A, 0xD8, 0x8B, /* 0x94-0x97 */ + 0xF5, 0xF8, 0xD8, 0x8C, 0xD8, 0x8D, 0xD8, 0x8E, /* 0x98-0x9B */ + 0xD8, 0x8F, 0xD8, 0x90, 0xD8, 0x91, 0xD8, 0x92, /* 0x9C-0x9F */ + 0xD8, 0x93, 0xD8, 0x94, 0xD8, 0x95, 0xD8, 0x96, /* 0xA0-0xA3 */ + 0xD8, 0x97, 0xD8, 0x98, 0xD8, 0x99, 0xD8, 0x9A, /* 0xA4-0xA7 */ + 0xD8, 0x9B, 0xD8, 0x9C, 0xD8, 0x9D, 0xD8, 0x9E, /* 0xA8-0xAB */ + 0xD8, 0x9F, 0xD8, 0xA0, 0xD9, 0x40, 0xD9, 0x41, /* 0xAC-0xAF */ + 0xD9, 0x42, 0xD9, 0x43, 0xD9, 0x44, 0xD9, 0x45, /* 0xB0-0xB3 */ + 0xD9, 0x46, 0xD9, 0x47, 0xD9, 0x48, 0xD9, 0x49, /* 0xB4-0xB7 */ + 0xD9, 0x4A, 0xD9, 0x4B, 0xD9, 0x4C, 0xD9, 0x4D, /* 0xB8-0xBB */ + 0xD9, 0x4E, 0xD9, 0x4F, 0xD9, 0x50, 0xD9, 0x51, /* 0xBC-0xBF */ + 0xD9, 0x52, 0xD9, 0x53, 0xD9, 0x54, 0xD9, 0x55, /* 0xC0-0xC3 */ + 0xD9, 0x56, 0xD9, 0x57, 0xD9, 0x58, 0xD9, 0x59, /* 0xC4-0xC7 */ + 0xD9, 0x5A, 0xD9, 0x5B, 0xD9, 0x5C, 0xD9, 0x5D, /* 0xC8-0xCB */ + 0xD9, 0x5E, 0xD9, 0x5F, 0xD9, 0x60, 0xD9, 0x61, /* 0xCC-0xCF */ + 0xD9, 0x62, 0xD9, 0x63, 0xD9, 0x64, 0xD9, 0x65, /* 0xD0-0xD3 */ + 0xD9, 0x66, 0xD9, 0x67, 0xD9, 0x68, 0xD9, 0x69, /* 0xD4-0xD7 */ + 0xD9, 0x6A, 0xD9, 0x6B, 0xD9, 0x6C, 0xD9, 0x6D, /* 0xD8-0xDB */ + 0xD9, 0x6E, 0xD9, 0x6F, 0xD9, 0x70, 0xD9, 0x71, /* 0xDC-0xDF */ + 0xD9, 0x72, 0xD9, 0x73, 0xD9, 0x74, 0xD9, 0x75, /* 0xE0-0xE3 */ + 0xD9, 0x76, 0xD9, 0x77, 0xD9, 0x78, 0xD9, 0x79, /* 0xE4-0xE7 */ + 0xD9, 0x7A, 0xD9, 0x7B, 0xD9, 0x7C, 0xD9, 0x7D, /* 0xE8-0xEB */ + 0xD9, 0x7E, 0xD9, 0x80, 0xD9, 0x81, 0xD9, 0x82, /* 0xEC-0xEF */ + 0xD9, 0x83, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x86, /* 0xF0-0xF3 */ + 0xD9, 0x87, 0xD9, 0x88, 0xD9, 0x89, 0xD9, 0x8A, /* 0xF4-0xF7 */ + 0xD9, 0x8B, 0xD9, 0x8C, 0xD9, 0x8D, 0xD9, 0x8E, /* 0xF8-0xFB */ + 0xD9, 0x8F, 0xD9, 0x90, 0xD9, 0x91, 0xD9, 0x92, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0xD9, 0x93, 0xD9, 0x94, 0xD9, 0x95, 0xD9, 0x96, /* 0x00-0x03 */ + 0xD9, 0x97, 0xD9, 0x98, 0xD9, 0x99, 0xD9, 0x9A, /* 0x04-0x07 */ + 0xD9, 0x9B, 0xD9, 0x9C, 0xD9, 0x9D, 0xD9, 0x9E, /* 0x08-0x0B */ + 0xD9, 0x9F, 0xD9, 0xA0, 0xDA, 0x40, 0xDA, 0x41, /* 0x0C-0x0F */ + 0xDA, 0x42, 0xDA, 0x43, 0xDA, 0x44, 0xDA, 0x45, /* 0x10-0x13 */ + 0xDA, 0x46, 0xDA, 0x47, 0xDA, 0x48, 0xDA, 0x49, /* 0x14-0x17 */ + 0xDA, 0x4A, 0xDA, 0x4B, 0xDA, 0x4C, 0xDA, 0x4D, /* 0x18-0x1B */ + 0xDA, 0x4E, 0xB1, 0xB4, 0xD5, 0xEA, 0xB8, 0xBA, /* 0x1C-0x1F */ + 0xDA, 0x4F, 0xB9, 0xB1, 0xB2, 0xC6, 0xD4, 0xF0, /* 0x20-0x23 */ + 0xCF, 0xCD, 0xB0, 0xDC, 0xD5, 0xCB, 0xBB, 0xF5, /* 0x24-0x27 */ + 0xD6, 0xCA, 0xB7, 0xB7, 0xCC, 0xB0, 0xC6, 0xB6, /* 0x28-0x2B */ + 0xB1, 0xE1, 0xB9, 0xBA, 0xD6, 0xFC, 0xB9, 0xE1, /* 0x2C-0x2F */ + 0xB7, 0xA1, 0xBC, 0xFA, 0xEA, 0xDA, 0xEA, 0xDB, /* 0x30-0x33 */ + 0xCC, 0xF9, 0xB9, 0xF3, 0xEA, 0xDC, 0xB4, 0xFB, /* 0x34-0x37 */ + 0xC3, 0xB3, 0xB7, 0xD1, 0xBA, 0xD8, 0xEA, 0xDD, /* 0x38-0x3B */ + 0xD4, 0xF4, 0xEA, 0xDE, 0xBC, 0xD6, 0xBB, 0xDF, /* 0x3C-0x3F */ + 0xEA, 0xDF, 0xC1, 0xDE, 0xC2, 0xB8, 0xD4, 0xDF, /* 0x40-0x43 */ + 0xD7, 0xCA, 0xEA, 0xE0, 0xEA, 0xE1, 0xEA, 0xE4, /* 0x44-0x47 */ + 0xEA, 0xE2, 0xEA, 0xE3, 0xC9, 0xDE, 0xB8, 0xB3, /* 0x48-0x4B */ + 0xB6, 0xC4, 0xEA, 0xE5, 0xCA, 0xEA, 0xC9, 0xCD, /* 0x4C-0x4F */ + 0xB4, 0xCD, 0xDA, 0x50, 0xDA, 0x51, 0xE2, 0xD9, /* 0x50-0x53 */ + 0xC5, 0xE2, 0xEA, 0xE6, 0xC0, 0xB5, 0xDA, 0x52, /* 0x54-0x57 */ + 0xD7, 0xB8, 0xEA, 0xE7, 0xD7, 0xAC, 0xC8, 0xFC, /* 0x58-0x5B */ + 0xD8, 0xD3, 0xD8, 0xCD, 0xD4, 0xDE, 0xDA, 0x53, /* 0x5C-0x5F */ + 0xD4, 0xF9, 0xC9, 0xC4, 0xD3, 0xAE, 0xB8, 0xD3, /* 0x60-0x63 */ + 0xB3, 0xE0, 0xDA, 0x54, 0xC9, 0xE2, 0xF4, 0xF6, /* 0x64-0x67 */ + 0xDA, 0x55, 0xDA, 0x56, 0xDA, 0x57, 0xBA, 0xD5, /* 0x68-0x6B */ + 0xDA, 0x58, 0xF4, 0xF7, 0xDA, 0x59, 0xDA, 0x5A, /* 0x6C-0x6F */ + 0xD7, 0xDF, 0xDA, 0x5B, 0xDA, 0x5C, 0xF4, 0xF1, /* 0x70-0x73 */ + 0xB8, 0xB0, 0xD5, 0xD4, 0xB8, 0xCF, 0xC6, 0xF0, /* 0x74-0x77 */ + 0xDA, 0x5D, 0xDA, 0x5E, 0xDA, 0x5F, 0xDA, 0x60, /* 0x78-0x7B */ + 0xDA, 0x61, 0xDA, 0x62, 0xDA, 0x63, 0xDA, 0x64, /* 0x7C-0x7F */ + + 0xDA, 0x65, 0xB3, 0xC3, 0xDA, 0x66, 0xDA, 0x67, /* 0x80-0x83 */ + 0xF4, 0xF2, 0xB3, 0xAC, 0xDA, 0x68, 0xDA, 0x69, /* 0x84-0x87 */ + 0xDA, 0x6A, 0xDA, 0x6B, 0xD4, 0xBD, 0xC7, 0xF7, /* 0x88-0x8B */ + 0xDA, 0x6C, 0xDA, 0x6D, 0xDA, 0x6E, 0xDA, 0x6F, /* 0x8C-0x8F */ + 0xDA, 0x70, 0xF4, 0xF4, 0xDA, 0x71, 0xDA, 0x72, /* 0x90-0x93 */ + 0xF4, 0xF3, 0xDA, 0x73, 0xDA, 0x74, 0xDA, 0x75, /* 0x94-0x97 */ + 0xDA, 0x76, 0xDA, 0x77, 0xDA, 0x78, 0xDA, 0x79, /* 0x98-0x9B */ + 0xDA, 0x7A, 0xDA, 0x7B, 0xDA, 0x7C, 0xCC, 0xCB, /* 0x9C-0x9F */ + 0xDA, 0x7D, 0xDA, 0x7E, 0xDA, 0x80, 0xC8, 0xA4, /* 0xA0-0xA3 */ + 0xDA, 0x81, 0xDA, 0x82, 0xDA, 0x83, 0xDA, 0x84, /* 0xA4-0xA7 */ + 0xDA, 0x85, 0xDA, 0x86, 0xDA, 0x87, 0xDA, 0x88, /* 0xA8-0xAB */ + 0xDA, 0x89, 0xDA, 0x8A, 0xDA, 0x8B, 0xDA, 0x8C, /* 0xAC-0xAF */ + 0xDA, 0x8D, 0xF4, 0xF5, 0xDA, 0x8E, 0xD7, 0xE3, /* 0xB0-0xB3 */ + 0xC5, 0xBF, 0xF5, 0xC0, 0xDA, 0x8F, 0xDA, 0x90, /* 0xB4-0xB7 */ + 0xF5, 0xBB, 0xDA, 0x91, 0xF5, 0xC3, 0xDA, 0x92, /* 0xB8-0xBB */ + 0xF5, 0xC2, 0xDA, 0x93, 0xD6, 0xBA, 0xF5, 0xC1, /* 0xBC-0xBF */ + 0xDA, 0x94, 0xDA, 0x95, 0xDA, 0x96, 0xD4, 0xBE, /* 0xC0-0xC3 */ + 0xF5, 0xC4, 0xDA, 0x97, 0xF5, 0xCC, 0xDA, 0x98, /* 0xC4-0xC7 */ + 0xDA, 0x99, 0xDA, 0x9A, 0xDA, 0x9B, 0xB0, 0xCF, /* 0xC8-0xCB */ + 0xB5, 0xF8, 0xDA, 0x9C, 0xF5, 0xC9, 0xF5, 0xCA, /* 0xCC-0xCF */ + 0xDA, 0x9D, 0xC5, 0xDC, 0xDA, 0x9E, 0xDA, 0x9F, /* 0xD0-0xD3 */ + 0xDA, 0xA0, 0xDB, 0x40, 0xF5, 0xC5, 0xF5, 0xC6, /* 0xD4-0xD7 */ + 0xDB, 0x41, 0xDB, 0x42, 0xF5, 0xC7, 0xF5, 0xCB, /* 0xD8-0xDB */ + 0xDB, 0x43, 0xBE, 0xE0, 0xF5, 0xC8, 0xB8, 0xFA, /* 0xDC-0xDF */ + 0xDB, 0x44, 0xDB, 0x45, 0xDB, 0x46, 0xF5, 0xD0, /* 0xE0-0xE3 */ + 0xF5, 0xD3, 0xDB, 0x47, 0xDB, 0x48, 0xDB, 0x49, /* 0xE4-0xE7 */ + 0xBF, 0xE7, 0xDB, 0x4A, 0xB9, 0xF2, 0xF5, 0xBC, /* 0xE8-0xEB */ + 0xF5, 0xCD, 0xDB, 0x4B, 0xDB, 0x4C, 0xC2, 0xB7, /* 0xEC-0xEF */ + 0xDB, 0x4D, 0xDB, 0x4E, 0xDB, 0x4F, 0xCC, 0xF8, /* 0xF0-0xF3 */ + 0xDB, 0x50, 0xBC, 0xF9, 0xDB, 0x51, 0xF5, 0xCE, /* 0xF4-0xF7 */ + 0xF5, 0xCF, 0xF5, 0xD1, 0xB6, 0xE5, 0xF5, 0xD2, /* 0xF8-0xFB */ + 0xDB, 0x52, 0xF5, 0xD5, 0xDB, 0x53, 0xDB, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0xDB, 0x55, 0xDB, 0x56, 0xDB, 0x57, 0xDB, 0x58, /* 0x00-0x03 */ + 0xDB, 0x59, 0xF5, 0xBD, 0xDB, 0x5A, 0xDB, 0x5B, /* 0x04-0x07 */ + 0xDB, 0x5C, 0xF5, 0xD4, 0xD3, 0xBB, 0xDB, 0x5D, /* 0x08-0x0B */ + 0xB3, 0xEC, 0xDB, 0x5E, 0xDB, 0x5F, 0xCC, 0xA4, /* 0x0C-0x0F */ + 0xDB, 0x60, 0xDB, 0x61, 0xDB, 0x62, 0xDB, 0x63, /* 0x10-0x13 */ + 0xF5, 0xD6, 0xDB, 0x64, 0xDB, 0x65, 0xDB, 0x66, /* 0x14-0x17 */ + 0xDB, 0x67, 0xDB, 0x68, 0xDB, 0x69, 0xDB, 0x6A, /* 0x18-0x1B */ + 0xDB, 0x6B, 0xF5, 0xD7, 0xBE, 0xE1, 0xF5, 0xD8, /* 0x1C-0x1F */ + 0xDB, 0x6C, 0xDB, 0x6D, 0xCC, 0xDF, 0xF5, 0xDB, /* 0x20-0x23 */ + 0xDB, 0x6E, 0xDB, 0x6F, 0xDB, 0x70, 0xDB, 0x71, /* 0x24-0x27 */ + 0xDB, 0x72, 0xB2, 0xC8, 0xD7, 0xD9, 0xDB, 0x73, /* 0x28-0x2B */ + 0xF5, 0xD9, 0xDB, 0x74, 0xF5, 0xDA, 0xF5, 0xDC, /* 0x2C-0x2F */ + 0xDB, 0x75, 0xF5, 0xE2, 0xDB, 0x76, 0xDB, 0x77, /* 0x30-0x33 */ + 0xDB, 0x78, 0xF5, 0xE0, 0xDB, 0x79, 0xDB, 0x7A, /* 0x34-0x37 */ + 0xDB, 0x7B, 0xF5, 0xDF, 0xF5, 0xDD, 0xDB, 0x7C, /* 0x38-0x3B */ + 0xDB, 0x7D, 0xF5, 0xE1, 0xDB, 0x7E, 0xDB, 0x80, /* 0x3C-0x3F */ + 0xF5, 0xDE, 0xF5, 0xE4, 0xF5, 0xE5, 0xDB, 0x81, /* 0x40-0x43 */ + 0xCC, 0xE3, 0xDB, 0x82, 0xDB, 0x83, 0xE5, 0xBF, /* 0x44-0x47 */ + 0xB5, 0xB8, 0xF5, 0xE3, 0xF5, 0xE8, 0xCC, 0xA3, /* 0x48-0x4B */ + 0xDB, 0x84, 0xDB, 0x85, 0xDB, 0x86, 0xDB, 0x87, /* 0x4C-0x4F */ + 0xDB, 0x88, 0xF5, 0xE6, 0xF5, 0xE7, 0xDB, 0x89, /* 0x50-0x53 */ + 0xDB, 0x8A, 0xDB, 0x8B, 0xDB, 0x8C, 0xDB, 0x8D, /* 0x54-0x57 */ + 0xDB, 0x8E, 0xF5, 0xBE, 0xDB, 0x8F, 0xDB, 0x90, /* 0x58-0x5B */ + 0xDB, 0x91, 0xDB, 0x92, 0xDB, 0x93, 0xDB, 0x94, /* 0x5C-0x5F */ + 0xDB, 0x95, 0xDB, 0x96, 0xDB, 0x97, 0xDB, 0x98, /* 0x60-0x63 */ + 0xDB, 0x99, 0xDB, 0x9A, 0xB1, 0xC4, 0xDB, 0x9B, /* 0x64-0x67 */ + 0xDB, 0x9C, 0xF5, 0xBF, 0xDB, 0x9D, 0xDB, 0x9E, /* 0x68-0x6B */ + 0xB5, 0xC5, 0xB2, 0xE4, 0xDB, 0x9F, 0xF5, 0xEC, /* 0x6C-0x6F */ + 0xF5, 0xE9, 0xDB, 0xA0, 0xB6, 0xD7, 0xDC, 0x40, /* 0x70-0x73 */ + 0xF5, 0xED, 0xDC, 0x41, 0xF5, 0xEA, 0xDC, 0x42, /* 0x74-0x77 */ + 0xDC, 0x43, 0xDC, 0x44, 0xDC, 0x45, 0xDC, 0x46, /* 0x78-0x7B */ + 0xF5, 0xEB, 0xDC, 0x47, 0xDC, 0x48, 0xB4, 0xDA, /* 0x7C-0x7F */ + + 0xDC, 0x49, 0xD4, 0xEA, 0xDC, 0x4A, 0xDC, 0x4B, /* 0x80-0x83 */ + 0xDC, 0x4C, 0xF5, 0xEE, 0xDC, 0x4D, 0xB3, 0xF9, /* 0x84-0x87 */ + 0xDC, 0x4E, 0xDC, 0x4F, 0xDC, 0x50, 0xDC, 0x51, /* 0x88-0x8B */ + 0xDC, 0x52, 0xDC, 0x53, 0xDC, 0x54, 0xF5, 0xEF, /* 0x8C-0x8F */ + 0xF5, 0xF1, 0xDC, 0x55, 0xDC, 0x56, 0xDC, 0x57, /* 0x90-0x93 */ + 0xF5, 0xF0, 0xDC, 0x58, 0xDC, 0x59, 0xDC, 0x5A, /* 0x94-0x97 */ + 0xDC, 0x5B, 0xDC, 0x5C, 0xDC, 0x5D, 0xDC, 0x5E, /* 0x98-0x9B */ + 0xF5, 0xF2, 0xDC, 0x5F, 0xF5, 0xF3, 0xDC, 0x60, /* 0x9C-0x9F */ + 0xDC, 0x61, 0xDC, 0x62, 0xDC, 0x63, 0xDC, 0x64, /* 0xA0-0xA3 */ + 0xDC, 0x65, 0xDC, 0x66, 0xDC, 0x67, 0xDC, 0x68, /* 0xA4-0xA7 */ + 0xDC, 0x69, 0xDC, 0x6A, 0xDC, 0x6B, 0xC9, 0xED, /* 0xA8-0xAB */ + 0xB9, 0xAA, 0xDC, 0x6C, 0xDC, 0x6D, 0xC7, 0xFB, /* 0xAC-0xAF */ + 0xDC, 0x6E, 0xDC, 0x6F, 0xB6, 0xE3, 0xDC, 0x70, /* 0xB0-0xB3 */ + 0xDC, 0x71, 0xDC, 0x72, 0xDC, 0x73, 0xDC, 0x74, /* 0xB4-0xB7 */ + 0xDC, 0x75, 0xDC, 0x76, 0xCC, 0xC9, 0xDC, 0x77, /* 0xB8-0xBB */ + 0xDC, 0x78, 0xDC, 0x79, 0xDC, 0x7A, 0xDC, 0x7B, /* 0xBC-0xBF */ + 0xDC, 0x7C, 0xDC, 0x7D, 0xDC, 0x7E, 0xDC, 0x80, /* 0xC0-0xC3 */ + 0xDC, 0x81, 0xDC, 0x82, 0xDC, 0x83, 0xDC, 0x84, /* 0xC4-0xC7 */ + 0xDC, 0x85, 0xDC, 0x86, 0xDC, 0x87, 0xDC, 0x88, /* 0xC8-0xCB */ + 0xDC, 0x89, 0xDC, 0x8A, 0xEA, 0xA6, 0xDC, 0x8B, /* 0xCC-0xCF */ + 0xDC, 0x8C, 0xDC, 0x8D, 0xDC, 0x8E, 0xDC, 0x8F, /* 0xD0-0xD3 */ + 0xDC, 0x90, 0xDC, 0x91, 0xDC, 0x92, 0xDC, 0x93, /* 0xD4-0xD7 */ + 0xDC, 0x94, 0xDC, 0x95, 0xDC, 0x96, 0xDC, 0x97, /* 0xD8-0xDB */ + 0xDC, 0x98, 0xDC, 0x99, 0xDC, 0x9A, 0xDC, 0x9B, /* 0xDC-0xDF */ + 0xDC, 0x9C, 0xDC, 0x9D, 0xDC, 0x9E, 0xDC, 0x9F, /* 0xE0-0xE3 */ + 0xDC, 0xA0, 0xDD, 0x40, 0xDD, 0x41, 0xDD, 0x42, /* 0xE4-0xE7 */ + 0xDD, 0x43, 0xDD, 0x44, 0xDD, 0x45, 0xDD, 0x46, /* 0xE8-0xEB */ + 0xDD, 0x47, 0xDD, 0x48, 0xDD, 0x49, 0xDD, 0x4A, /* 0xEC-0xEF */ + 0xDD, 0x4B, 0xDD, 0x4C, 0xDD, 0x4D, 0xDD, 0x4E, /* 0xF0-0xF3 */ + 0xDD, 0x4F, 0xDD, 0x50, 0xDD, 0x51, 0xDD, 0x52, /* 0xF4-0xF7 */ + 0xDD, 0x53, 0xDD, 0x54, 0xDD, 0x55, 0xDD, 0x56, /* 0xF8-0xFB */ + 0xDD, 0x57, 0xDD, 0x58, 0xDD, 0x59, 0xDD, 0x5A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0xDD, 0x5B, 0xDD, 0x5C, 0xDD, 0x5D, 0xDD, 0x5E, /* 0x00-0x03 */ + 0xDD, 0x5F, 0xDD, 0x60, 0xDD, 0x61, 0xDD, 0x62, /* 0x04-0x07 */ + 0xDD, 0x63, 0xDD, 0x64, 0xDD, 0x65, 0xDD, 0x66, /* 0x08-0x0B */ + 0xDD, 0x67, 0xDD, 0x68, 0xDD, 0x69, 0xDD, 0x6A, /* 0x0C-0x0F */ + 0xDD, 0x6B, 0xDD, 0x6C, 0xDD, 0x6D, 0xDD, 0x6E, /* 0x10-0x13 */ + 0xDD, 0x6F, 0xDD, 0x70, 0xDD, 0x71, 0xDD, 0x72, /* 0x14-0x17 */ + 0xDD, 0x73, 0xDD, 0x74, 0xDD, 0x75, 0xDD, 0x76, /* 0x18-0x1B */ + 0xDD, 0x77, 0xDD, 0x78, 0xDD, 0x79, 0xDD, 0x7A, /* 0x1C-0x1F */ + 0xDD, 0x7B, 0xDD, 0x7C, 0xDD, 0x7D, 0xDD, 0x7E, /* 0x20-0x23 */ + 0xDD, 0x80, 0xDD, 0x81, 0xDD, 0x82, 0xDD, 0x83, /* 0x24-0x27 */ + 0xDD, 0x84, 0xDD, 0x85, 0xDD, 0x86, 0xDD, 0x87, /* 0x28-0x2B */ + 0xDD, 0x88, 0xDD, 0x89, 0xDD, 0x8A, 0xDD, 0x8B, /* 0x2C-0x2F */ + 0xDD, 0x8C, 0xDD, 0x8D, 0xDD, 0x8E, 0xDD, 0x8F, /* 0x30-0x33 */ + 0xDD, 0x90, 0xDD, 0x91, 0xDD, 0x92, 0xDD, 0x93, /* 0x34-0x37 */ + 0xDD, 0x94, 0xDD, 0x95, 0xDD, 0x96, 0xDD, 0x97, /* 0x38-0x3B */ + 0xDD, 0x98, 0xDD, 0x99, 0xDD, 0x9A, 0xDD, 0x9B, /* 0x3C-0x3F */ + 0xDD, 0x9C, 0xDD, 0x9D, 0xDD, 0x9E, 0xDD, 0x9F, /* 0x40-0x43 */ + 0xDD, 0xA0, 0xDE, 0x40, 0xDE, 0x41, 0xDE, 0x42, /* 0x44-0x47 */ + 0xDE, 0x43, 0xDE, 0x44, 0xDE, 0x45, 0xDE, 0x46, /* 0x48-0x4B */ + 0xDE, 0x47, 0xDE, 0x48, 0xDE, 0x49, 0xDE, 0x4A, /* 0x4C-0x4F */ + 0xDE, 0x4B, 0xDE, 0x4C, 0xDE, 0x4D, 0xDE, 0x4E, /* 0x50-0x53 */ + 0xDE, 0x4F, 0xDE, 0x50, 0xDE, 0x51, 0xDE, 0x52, /* 0x54-0x57 */ + 0xDE, 0x53, 0xDE, 0x54, 0xDE, 0x55, 0xDE, 0x56, /* 0x58-0x5B */ + 0xDE, 0x57, 0xDE, 0x58, 0xDE, 0x59, 0xDE, 0x5A, /* 0x5C-0x5F */ + 0xDE, 0x5B, 0xDE, 0x5C, 0xDE, 0x5D, 0xDE, 0x5E, /* 0x60-0x63 */ + 0xDE, 0x5F, 0xDE, 0x60, 0xB3, 0xB5, 0xD4, 0xFE, /* 0x64-0x67 */ + 0xB9, 0xEC, 0xD0, 0xF9, 0xDE, 0x61, 0xE9, 0xED, /* 0x68-0x6B */ + 0xD7, 0xAA, 0xE9, 0xEE, 0xC2, 0xD6, 0xC8, 0xED, /* 0x6C-0x6F */ + 0xBA, 0xE4, 0xE9, 0xEF, 0xE9, 0xF0, 0xE9, 0xF1, /* 0x70-0x73 */ + 0xD6, 0xE1, 0xE9, 0xF2, 0xE9, 0xF3, 0xE9, 0xF5, /* 0x74-0x77 */ + 0xE9, 0xF4, 0xE9, 0xF6, 0xE9, 0xF7, 0xC7, 0xE1, /* 0x78-0x7B */ + 0xE9, 0xF8, 0xD4, 0xD8, 0xE9, 0xF9, 0xBD, 0xCE, /* 0x7C-0x7F */ + + 0xDE, 0x62, 0xE9, 0xFA, 0xE9, 0xFB, 0xBD, 0xCF, /* 0x80-0x83 */ + 0xE9, 0xFC, 0xB8, 0xA8, 0xC1, 0xBE, 0xE9, 0xFD, /* 0x84-0x87 */ + 0xB1, 0xB2, 0xBB, 0xD4, 0xB9, 0xF5, 0xE9, 0xFE, /* 0x88-0x8B */ + 0xDE, 0x63, 0xEA, 0xA1, 0xEA, 0xA2, 0xEA, 0xA3, /* 0x8C-0x8F */ + 0xB7, 0xF8, 0xBC, 0xAD, 0xDE, 0x64, 0xCA, 0xE4, /* 0x90-0x93 */ + 0xE0, 0xCE, 0xD4, 0xAF, 0xCF, 0xBD, 0xD5, 0xB7, /* 0x94-0x97 */ + 0xEA, 0xA4, 0xD5, 0xDE, 0xEA, 0xA5, 0xD0, 0xC1, /* 0x98-0x9B */ + 0xB9, 0xBC, 0xDE, 0x65, 0xB4, 0xC7, 0xB1, 0xD9, /* 0x9C-0x9F */ + 0xDE, 0x66, 0xDE, 0x67, 0xDE, 0x68, 0xC0, 0xB1, /* 0xA0-0xA3 */ + 0xDE, 0x69, 0xDE, 0x6A, 0xDE, 0x6B, 0xDE, 0x6C, /* 0xA4-0xA7 */ + 0xB1, 0xE6, 0xB1, 0xE7, 0xDE, 0x6D, 0xB1, 0xE8, /* 0xA8-0xAB */ + 0xDE, 0x6E, 0xDE, 0x6F, 0xDE, 0x70, 0xDE, 0x71, /* 0xAC-0xAF */ + 0xB3, 0xBD, 0xC8, 0xE8, 0xDE, 0x72, 0xDE, 0x73, /* 0xB0-0xB3 */ + 0xDE, 0x74, 0xDE, 0x75, 0xE5, 0xC1, 0xDE, 0x76, /* 0xB4-0xB7 */ + 0xDE, 0x77, 0xB1, 0xDF, 0xDE, 0x78, 0xDE, 0x79, /* 0xB8-0xBB */ + 0xDE, 0x7A, 0xC1, 0xC9, 0xB4, 0xEF, 0xDE, 0x7B, /* 0xBC-0xBF */ + 0xDE, 0x7C, 0xC7, 0xA8, 0xD3, 0xD8, 0xDE, 0x7D, /* 0xC0-0xC3 */ + 0xC6, 0xF9, 0xD1, 0xB8, 0xDE, 0x7E, 0xB9, 0xFD, /* 0xC4-0xC7 */ + 0xC2, 0xF5, 0xDE, 0x80, 0xDE, 0x81, 0xDE, 0x82, /* 0xC8-0xCB */ + 0xDE, 0x83, 0xDE, 0x84, 0xD3, 0xAD, 0xDE, 0x85, /* 0xCC-0xCF */ + 0xD4, 0xCB, 0xBD, 0xFC, 0xDE, 0x86, 0xE5, 0xC2, /* 0xD0-0xD3 */ + 0xB7, 0xB5, 0xE5, 0xC3, 0xDE, 0x87, 0xDE, 0x88, /* 0xD4-0xD7 */ + 0xBB, 0xB9, 0xD5, 0xE2, 0xDE, 0x89, 0xBD, 0xF8, /* 0xD8-0xDB */ + 0xD4, 0xB6, 0xCE, 0xA5, 0xC1, 0xAC, 0xB3, 0xD9, /* 0xDC-0xDF */ + 0xDE, 0x8A, 0xDE, 0x8B, 0xCC, 0xF6, 0xDE, 0x8C, /* 0xE0-0xE3 */ + 0xE5, 0xC6, 0xE5, 0xC4, 0xE5, 0xC8, 0xDE, 0x8D, /* 0xE4-0xE7 */ + 0xE5, 0xCA, 0xE5, 0xC7, 0xB5, 0xCF, 0xC6, 0xC8, /* 0xE8-0xEB */ + 0xDE, 0x8E, 0xB5, 0xFC, 0xE5, 0xC5, 0xDE, 0x8F, /* 0xEC-0xEF */ + 0xCA, 0xF6, 0xDE, 0x90, 0xDE, 0x91, 0xE5, 0xC9, /* 0xF0-0xF3 */ + 0xDE, 0x92, 0xDE, 0x93, 0xDE, 0x94, 0xC3, 0xD4, /* 0xF4-0xF7 */ + 0xB1, 0xC5, 0xBC, 0xA3, 0xDE, 0x95, 0xDE, 0x96, /* 0xF8-0xFB */ + 0xDE, 0x97, 0xD7, 0xB7, 0xDE, 0x98, 0xDE, 0x99, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0xCD, 0xCB, 0xCB, 0xCD, 0xCA, 0xCA, 0xCC, 0xD3, /* 0x00-0x03 */ + 0xE5, 0xCC, 0xE5, 0xCB, 0xC4, 0xE6, 0xDE, 0x9A, /* 0x04-0x07 */ + 0xDE, 0x9B, 0xD1, 0xA1, 0xD1, 0xB7, 0xE5, 0xCD, /* 0x08-0x0B */ + 0xDE, 0x9C, 0xE5, 0xD0, 0xDE, 0x9D, 0xCD, 0xB8, /* 0x0C-0x0F */ + 0xD6, 0xF0, 0xE5, 0xCF, 0xB5, 0xDD, 0xDE, 0x9E, /* 0x10-0x13 */ + 0xCD, 0xBE, 0xDE, 0x9F, 0xE5, 0xD1, 0xB6, 0xBA, /* 0x14-0x17 */ + 0xDE, 0xA0, 0xDF, 0x40, 0xCD, 0xA8, 0xB9, 0xE4, /* 0x18-0x1B */ + 0xDF, 0x41, 0xCA, 0xC5, 0xB3, 0xD1, 0xCB, 0xD9, /* 0x1C-0x1F */ + 0xD4, 0xEC, 0xE5, 0xD2, 0xB7, 0xEA, 0xDF, 0x42, /* 0x20-0x23 */ + 0xDF, 0x43, 0xDF, 0x44, 0xE5, 0xCE, 0xDF, 0x45, /* 0x24-0x27 */ + 0xDF, 0x46, 0xDF, 0x47, 0xDF, 0x48, 0xDF, 0x49, /* 0x28-0x2B */ + 0xDF, 0x4A, 0xE5, 0xD5, 0xB4, 0xFE, 0xE5, 0xD6, /* 0x2C-0x2F */ + 0xDF, 0x4B, 0xDF, 0x4C, 0xDF, 0x4D, 0xDF, 0x4E, /* 0x30-0x33 */ + 0xDF, 0x4F, 0xE5, 0xD3, 0xE5, 0xD4, 0xDF, 0x50, /* 0x34-0x37 */ + 0xD2, 0xDD, 0xDF, 0x51, 0xDF, 0x52, 0xC2, 0xDF, /* 0x38-0x3B */ + 0xB1, 0xC6, 0xDF, 0x53, 0xD3, 0xE2, 0xDF, 0x54, /* 0x3C-0x3F */ + 0xDF, 0x55, 0xB6, 0xDD, 0xCB, 0xEC, 0xDF, 0x56, /* 0x40-0x43 */ + 0xE5, 0xD7, 0xDF, 0x57, 0xDF, 0x58, 0xD3, 0xF6, /* 0x44-0x47 */ + 0xDF, 0x59, 0xDF, 0x5A, 0xDF, 0x5B, 0xDF, 0x5C, /* 0x48-0x4B */ + 0xDF, 0x5D, 0xB1, 0xE9, 0xDF, 0x5E, 0xB6, 0xF4, /* 0x4C-0x4F */ + 0xE5, 0xDA, 0xE5, 0xD8, 0xE5, 0xD9, 0xB5, 0xC0, /* 0x50-0x53 */ + 0xDF, 0x5F, 0xDF, 0x60, 0xDF, 0x61, 0xD2, 0xC5, /* 0x54-0x57 */ + 0xE5, 0xDC, 0xDF, 0x62, 0xDF, 0x63, 0xE5, 0xDE, /* 0x58-0x5B */ + 0xDF, 0x64, 0xDF, 0x65, 0xDF, 0x66, 0xDF, 0x67, /* 0x5C-0x5F */ + 0xDF, 0x68, 0xDF, 0x69, 0xE5, 0xDD, 0xC7, 0xB2, /* 0x60-0x63 */ + 0xDF, 0x6A, 0xD2, 0xA3, 0xDF, 0x6B, 0xDF, 0x6C, /* 0x64-0x67 */ + 0xE5, 0xDB, 0xDF, 0x6D, 0xDF, 0x6E, 0xDF, 0x6F, /* 0x68-0x6B */ + 0xDF, 0x70, 0xD4, 0xE2, 0xD5, 0xDA, 0xDF, 0x71, /* 0x6C-0x6F */ + 0xDF, 0x72, 0xDF, 0x73, 0xDF, 0x74, 0xDF, 0x75, /* 0x70-0x73 */ + 0xE5, 0xE0, 0xD7, 0xF1, 0xDF, 0x76, 0xDF, 0x77, /* 0x74-0x77 */ + 0xDF, 0x78, 0xDF, 0x79, 0xDF, 0x7A, 0xDF, 0x7B, /* 0x78-0x7B */ + 0xDF, 0x7C, 0xE5, 0xE1, 0xDF, 0x7D, 0xB1, 0xDC, /* 0x7C-0x7F */ + + 0xD1, 0xFB, 0xDF, 0x7E, 0xE5, 0xE2, 0xE5, 0xE4, /* 0x80-0x83 */ + 0xDF, 0x80, 0xDF, 0x81, 0xDF, 0x82, 0xDF, 0x83, /* 0x84-0x87 */ + 0xE5, 0xE3, 0xDF, 0x84, 0xDF, 0x85, 0xE5, 0xE5, /* 0x88-0x8B */ + 0xDF, 0x86, 0xDF, 0x87, 0xDF, 0x88, 0xDF, 0x89, /* 0x8C-0x8F */ + 0xDF, 0x8A, 0xD2, 0xD8, 0xDF, 0x8B, 0xB5, 0xCB, /* 0x90-0x93 */ + 0xDF, 0x8C, 0xE7, 0xDF, 0xDF, 0x8D, 0xDA, 0xF5, /* 0x94-0x97 */ + 0xDF, 0x8E, 0xDA, 0xF8, 0xDF, 0x8F, 0xDA, 0xF6, /* 0x98-0x9B */ + 0xDF, 0x90, 0xDA, 0xF7, 0xDF, 0x91, 0xDF, 0x92, /* 0x9C-0x9F */ + 0xDF, 0x93, 0xDA, 0xFA, 0xD0, 0xCF, 0xC4, 0xC7, /* 0xA0-0xA3 */ + 0xDF, 0x94, 0xDF, 0x95, 0xB0, 0xEE, 0xDF, 0x96, /* 0xA4-0xA7 */ + 0xDF, 0x97, 0xDF, 0x98, 0xD0, 0xB0, 0xDF, 0x99, /* 0xA8-0xAB */ + 0xDA, 0xF9, 0xDF, 0x9A, 0xD3, 0xCA, 0xBA, 0xAA, /* 0xAC-0xAF */ + 0xDB, 0xA2, 0xC7, 0xF1, 0xDF, 0x9B, 0xDA, 0xFC, /* 0xB0-0xB3 */ + 0xDA, 0xFB, 0xC9, 0xDB, 0xDA, 0xFD, 0xDF, 0x9C, /* 0xB4-0xB7 */ + 0xDB, 0xA1, 0xD7, 0xDE, 0xDA, 0xFE, 0xC1, 0xDA, /* 0xB8-0xBB */ + 0xDF, 0x9D, 0xDF, 0x9E, 0xDB, 0xA5, 0xDF, 0x9F, /* 0xBC-0xBF */ + 0xDF, 0xA0, 0xD3, 0xF4, 0xE0, 0x40, 0xE0, 0x41, /* 0xC0-0xC3 */ + 0xDB, 0xA7, 0xDB, 0xA4, 0xE0, 0x42, 0xDB, 0xA8, /* 0xC4-0xC7 */ + 0xE0, 0x43, 0xE0, 0x44, 0xBD, 0xBC, 0xE0, 0x45, /* 0xC8-0xCB */ + 0xE0, 0x46, 0xE0, 0x47, 0xC0, 0xC9, 0xDB, 0xA3, /* 0xCC-0xCF */ + 0xDB, 0xA6, 0xD6, 0xA3, 0xE0, 0x48, 0xDB, 0xA9, /* 0xD0-0xD3 */ + 0xE0, 0x49, 0xE0, 0x4A, 0xE0, 0x4B, 0xDB, 0xAD, /* 0xD4-0xD7 */ + 0xE0, 0x4C, 0xE0, 0x4D, 0xE0, 0x4E, 0xDB, 0xAE, /* 0xD8-0xDB */ + 0xDB, 0xAC, 0xBA, 0xC2, 0xE0, 0x4F, 0xE0, 0x50, /* 0xDC-0xDF */ + 0xE0, 0x51, 0xBF, 0xA4, 0xDB, 0xAB, 0xE0, 0x52, /* 0xE0-0xE3 */ + 0xE0, 0x53, 0xE0, 0x54, 0xDB, 0xAA, 0xD4, 0xC7, /* 0xE4-0xE7 */ + 0xB2, 0xBF, 0xE0, 0x55, 0xE0, 0x56, 0xDB, 0xAF, /* 0xE8-0xEB */ + 0xE0, 0x57, 0xB9, 0xF9, 0xE0, 0x58, 0xDB, 0xB0, /* 0xEC-0xEF */ + 0xE0, 0x59, 0xE0, 0x5A, 0xE0, 0x5B, 0xE0, 0x5C, /* 0xF0-0xF3 */ + 0xB3, 0xBB, 0xE0, 0x5D, 0xE0, 0x5E, 0xE0, 0x5F, /* 0xF4-0xF7 */ + 0xB5, 0xA6, 0xE0, 0x60, 0xE0, 0x61, 0xE0, 0x62, /* 0xF8-0xFB */ + 0xE0, 0x63, 0xB6, 0xBC, 0xDB, 0xB1, 0xE0, 0x64, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0xE0, 0x65, 0xE0, 0x66, 0xB6, 0xF5, 0xE0, 0x67, /* 0x00-0x03 */ + 0xDB, 0xB2, 0xE0, 0x68, 0xE0, 0x69, 0xE0, 0x6A, /* 0x04-0x07 */ + 0xE0, 0x6B, 0xE0, 0x6C, 0xE0, 0x6D, 0xE0, 0x6E, /* 0x08-0x0B */ + 0xE0, 0x6F, 0xE0, 0x70, 0xE0, 0x71, 0xE0, 0x72, /* 0x0C-0x0F */ + 0xE0, 0x73, 0xE0, 0x74, 0xE0, 0x75, 0xE0, 0x76, /* 0x10-0x13 */ + 0xE0, 0x77, 0xE0, 0x78, 0xE0, 0x79, 0xE0, 0x7A, /* 0x14-0x17 */ + 0xE0, 0x7B, 0xB1, 0xC9, 0xE0, 0x7C, 0xE0, 0x7D, /* 0x18-0x1B */ + 0xE0, 0x7E, 0xE0, 0x80, 0xDB, 0xB4, 0xE0, 0x81, /* 0x1C-0x1F */ + 0xE0, 0x82, 0xE0, 0x83, 0xDB, 0xB3, 0xDB, 0xB5, /* 0x20-0x23 */ + 0xE0, 0x84, 0xE0, 0x85, 0xE0, 0x86, 0xE0, 0x87, /* 0x24-0x27 */ + 0xE0, 0x88, 0xE0, 0x89, 0xE0, 0x8A, 0xE0, 0x8B, /* 0x28-0x2B */ + 0xE0, 0x8C, 0xE0, 0x8D, 0xE0, 0x8E, 0xDB, 0xB7, /* 0x2C-0x2F */ + 0xE0, 0x8F, 0xDB, 0xB6, 0xE0, 0x90, 0xE0, 0x91, /* 0x30-0x33 */ + 0xE0, 0x92, 0xE0, 0x93, 0xE0, 0x94, 0xE0, 0x95, /* 0x34-0x37 */ + 0xE0, 0x96, 0xDB, 0xB8, 0xE0, 0x97, 0xE0, 0x98, /* 0x38-0x3B */ + 0xE0, 0x99, 0xE0, 0x9A, 0xE0, 0x9B, 0xE0, 0x9C, /* 0x3C-0x3F */ + 0xE0, 0x9D, 0xE0, 0x9E, 0xE0, 0x9F, 0xDB, 0xB9, /* 0x40-0x43 */ + 0xE0, 0xA0, 0xE1, 0x40, 0xDB, 0xBA, 0xE1, 0x41, /* 0x44-0x47 */ + 0xE1, 0x42, 0xD3, 0xCF, 0xF4, 0xFA, 0xC7, 0xF5, /* 0x48-0x4B */ + 0xD7, 0xC3, 0xC5, 0xE4, 0xF4, 0xFC, 0xF4, 0xFD, /* 0x4C-0x4F */ + 0xF4, 0xFB, 0xE1, 0x43, 0xBE, 0xC6, 0xE1, 0x44, /* 0x50-0x53 */ + 0xE1, 0x45, 0xE1, 0x46, 0xE1, 0x47, 0xD0, 0xEF, /* 0x54-0x57 */ + 0xE1, 0x48, 0xE1, 0x49, 0xB7, 0xD3, 0xE1, 0x4A, /* 0x58-0x5B */ + 0xE1, 0x4B, 0xD4, 0xCD, 0xCC, 0xAA, 0xE1, 0x4C, /* 0x5C-0x5F */ + 0xE1, 0x4D, 0xF5, 0xA2, 0xF5, 0xA1, 0xBA, 0xA8, /* 0x60-0x63 */ + 0xF4, 0xFE, 0xCB, 0xD6, 0xE1, 0x4E, 0xE1, 0x4F, /* 0x64-0x67 */ + 0xE1, 0x50, 0xF5, 0xA4, 0xC0, 0xD2, 0xE1, 0x51, /* 0x68-0x6B */ + 0xB3, 0xEA, 0xE1, 0x52, 0xCD, 0xAA, 0xF5, 0xA5, /* 0x6C-0x6F */ + 0xF5, 0xA3, 0xBD, 0xB4, 0xF5, 0xA8, 0xE1, 0x53, /* 0x70-0x73 */ + 0xF5, 0xA9, 0xBD, 0xCD, 0xC3, 0xB8, 0xBF, 0xE1, /* 0x74-0x77 */ + 0xCB, 0xE1, 0xF5, 0xAA, 0xE1, 0x54, 0xE1, 0x55, /* 0x78-0x7B */ + 0xE1, 0x56, 0xF5, 0xA6, 0xF5, 0xA7, 0xC4, 0xF0, /* 0x7C-0x7F */ + + 0xE1, 0x57, 0xE1, 0x58, 0xE1, 0x59, 0xE1, 0x5A, /* 0x80-0x83 */ + 0xE1, 0x5B, 0xF5, 0xAC, 0xE1, 0x5C, 0xB4, 0xBC, /* 0x84-0x87 */ + 0xE1, 0x5D, 0xD7, 0xED, 0xE1, 0x5E, 0xB4, 0xD7, /* 0x88-0x8B */ + 0xF5, 0xAB, 0xF5, 0xAE, 0xE1, 0x5F, 0xE1, 0x60, /* 0x8C-0x8F */ + 0xF5, 0xAD, 0xF5, 0xAF, 0xD0, 0xD1, 0xE1, 0x61, /* 0x90-0x93 */ + 0xE1, 0x62, 0xE1, 0x63, 0xE1, 0x64, 0xE1, 0x65, /* 0x94-0x97 */ + 0xE1, 0x66, 0xE1, 0x67, 0xC3, 0xD1, 0xC8, 0xA9, /* 0x98-0x9B */ + 0xE1, 0x68, 0xE1, 0x69, 0xE1, 0x6A, 0xE1, 0x6B, /* 0x9C-0x9F */ + 0xE1, 0x6C, 0xE1, 0x6D, 0xF5, 0xB0, 0xF5, 0xB1, /* 0xA0-0xA3 */ + 0xE1, 0x6E, 0xE1, 0x6F, 0xE1, 0x70, 0xE1, 0x71, /* 0xA4-0xA7 */ + 0xE1, 0x72, 0xE1, 0x73, 0xF5, 0xB2, 0xE1, 0x74, /* 0xA8-0xAB */ + 0xE1, 0x75, 0xF5, 0xB3, 0xF5, 0xB4, 0xF5, 0xB5, /* 0xAC-0xAF */ + 0xE1, 0x76, 0xE1, 0x77, 0xE1, 0x78, 0xE1, 0x79, /* 0xB0-0xB3 */ + 0xF5, 0xB7, 0xF5, 0xB6, 0xE1, 0x7A, 0xE1, 0x7B, /* 0xB4-0xB7 */ + 0xE1, 0x7C, 0xE1, 0x7D, 0xF5, 0xB8, 0xE1, 0x7E, /* 0xB8-0xBB */ + 0xE1, 0x80, 0xE1, 0x81, 0xE1, 0x82, 0xE1, 0x83, /* 0xBC-0xBF */ + 0xE1, 0x84, 0xE1, 0x85, 0xE1, 0x86, 0xE1, 0x87, /* 0xC0-0xC3 */ + 0xE1, 0x88, 0xE1, 0x89, 0xE1, 0x8A, 0xB2, 0xC9, /* 0xC4-0xC7 */ + 0xE1, 0x8B, 0xD3, 0xD4, 0xCA, 0xCD, 0xE1, 0x8C, /* 0xC8-0xCB */ + 0xC0, 0xEF, 0xD6, 0xD8, 0xD2, 0xB0, 0xC1, 0xBF, /* 0xCC-0xCF */ + 0xE1, 0x8D, 0xBD, 0xF0, 0xE1, 0x8E, 0xE1, 0x8F, /* 0xD0-0xD3 */ + 0xE1, 0x90, 0xE1, 0x91, 0xE1, 0x92, 0xE1, 0x93, /* 0xD4-0xD7 */ + 0xE1, 0x94, 0xE1, 0x95, 0xE1, 0x96, 0xE1, 0x97, /* 0xD8-0xDB */ + 0xB8, 0xAA, 0xE1, 0x98, 0xE1, 0x99, 0xE1, 0x9A, /* 0xDC-0xDF */ + 0xE1, 0x9B, 0xE1, 0x9C, 0xE1, 0x9D, 0xE1, 0x9E, /* 0xE0-0xE3 */ + 0xE1, 0x9F, 0xE1, 0xA0, 0xE2, 0x40, 0xE2, 0x41, /* 0xE4-0xE7 */ + 0xE2, 0x42, 0xE2, 0x43, 0xE2, 0x44, 0xE2, 0x45, /* 0xE8-0xEB */ + 0xE2, 0x46, 0xE2, 0x47, 0xE2, 0x48, 0xE2, 0x49, /* 0xEC-0xEF */ + 0xE2, 0x4A, 0xE2, 0x4B, 0xE2, 0x4C, 0xE2, 0x4D, /* 0xF0-0xF3 */ + 0xE2, 0x4E, 0xE2, 0x4F, 0xE2, 0x50, 0xE2, 0x51, /* 0xF4-0xF7 */ + 0xE2, 0x52, 0xE2, 0x53, 0xE2, 0x54, 0xE2, 0x55, /* 0xF8-0xFB */ + 0xE2, 0x56, 0xE2, 0x57, 0xE2, 0x58, 0xE2, 0x59, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0xE2, 0x5A, 0xE2, 0x5B, 0xE2, 0x5C, 0xE2, 0x5D, /* 0x00-0x03 */ + 0xE2, 0x5E, 0xE2, 0x5F, 0xE2, 0x60, 0xE2, 0x61, /* 0x04-0x07 */ + 0xE2, 0x62, 0xE2, 0x63, 0xE2, 0x64, 0xE2, 0x65, /* 0x08-0x0B */ + 0xE2, 0x66, 0xE2, 0x67, 0xE2, 0x68, 0xE2, 0x69, /* 0x0C-0x0F */ + 0xE2, 0x6A, 0xE2, 0x6B, 0xE2, 0x6C, 0xE2, 0x6D, /* 0x10-0x13 */ + 0xE2, 0x6E, 0xE2, 0x6F, 0xE2, 0x70, 0xE2, 0x71, /* 0x14-0x17 */ + 0xE2, 0x72, 0xE2, 0x73, 0xE2, 0x74, 0xE2, 0x75, /* 0x18-0x1B */ + 0xE2, 0x76, 0xE2, 0x77, 0xE2, 0x78, 0xE2, 0x79, /* 0x1C-0x1F */ + 0xE2, 0x7A, 0xE2, 0x7B, 0xE2, 0x7C, 0xE2, 0x7D, /* 0x20-0x23 */ + 0xE2, 0x7E, 0xE2, 0x80, 0xE2, 0x81, 0xE2, 0x82, /* 0x24-0x27 */ + 0xE2, 0x83, 0xE2, 0x84, 0xE2, 0x85, 0xE2, 0x86, /* 0x28-0x2B */ + 0xE2, 0x87, 0xE2, 0x88, 0xE2, 0x89, 0xE2, 0x8A, /* 0x2C-0x2F */ + 0xE2, 0x8B, 0xE2, 0x8C, 0xE2, 0x8D, 0xE2, 0x8E, /* 0x30-0x33 */ + 0xE2, 0x8F, 0xE2, 0x90, 0xE2, 0x91, 0xE2, 0x92, /* 0x34-0x37 */ + 0xE2, 0x93, 0xE2, 0x94, 0xE2, 0x95, 0xE2, 0x96, /* 0x38-0x3B */ + 0xE2, 0x97, 0xE2, 0x98, 0xE2, 0x99, 0xE2, 0x9A, /* 0x3C-0x3F */ + 0xE2, 0x9B, 0xE2, 0x9C, 0xE2, 0x9D, 0xE2, 0x9E, /* 0x40-0x43 */ + 0xE2, 0x9F, 0xE2, 0xA0, 0xE3, 0x40, 0xE3, 0x41, /* 0x44-0x47 */ + 0xE3, 0x42, 0xE3, 0x43, 0xE3, 0x44, 0xE3, 0x45, /* 0x48-0x4B */ + 0xE3, 0x46, 0xE3, 0x47, 0xE3, 0x48, 0xE3, 0x49, /* 0x4C-0x4F */ + 0xE3, 0x4A, 0xE3, 0x4B, 0xE3, 0x4C, 0xE3, 0x4D, /* 0x50-0x53 */ + 0xE3, 0x4E, 0xE3, 0x4F, 0xE3, 0x50, 0xE3, 0x51, /* 0x54-0x57 */ + 0xE3, 0x52, 0xE3, 0x53, 0xE3, 0x54, 0xE3, 0x55, /* 0x58-0x5B */ + 0xE3, 0x56, 0xE3, 0x57, 0xE3, 0x58, 0xE3, 0x59, /* 0x5C-0x5F */ + 0xE3, 0x5A, 0xE3, 0x5B, 0xE3, 0x5C, 0xE3, 0x5D, /* 0x60-0x63 */ + 0xE3, 0x5E, 0xE3, 0x5F, 0xE3, 0x60, 0xE3, 0x61, /* 0x64-0x67 */ + 0xE3, 0x62, 0xE3, 0x63, 0xE3, 0x64, 0xE3, 0x65, /* 0x68-0x6B */ + 0xE3, 0x66, 0xE3, 0x67, 0xE3, 0x68, 0xE3, 0x69, /* 0x6C-0x6F */ + 0xE3, 0x6A, 0xE3, 0x6B, 0xE3, 0x6C, 0xE3, 0x6D, /* 0x70-0x73 */ + 0xBC, 0xF8, 0xE3, 0x6E, 0xE3, 0x6F, 0xE3, 0x70, /* 0x74-0x77 */ + 0xE3, 0x71, 0xE3, 0x72, 0xE3, 0x73, 0xE3, 0x74, /* 0x78-0x7B */ + 0xE3, 0x75, 0xE3, 0x76, 0xE3, 0x77, 0xE3, 0x78, /* 0x7C-0x7F */ + + 0xE3, 0x79, 0xE3, 0x7A, 0xE3, 0x7B, 0xE3, 0x7C, /* 0x80-0x83 */ + 0xE3, 0x7D, 0xE3, 0x7E, 0xE3, 0x80, 0xE3, 0x81, /* 0x84-0x87 */ + 0xE3, 0x82, 0xE3, 0x83, 0xE3, 0x84, 0xE3, 0x85, /* 0x88-0x8B */ + 0xE3, 0x86, 0xE3, 0x87, 0xF6, 0xC6, 0xE3, 0x88, /* 0x8C-0x8F */ + 0xE3, 0x89, 0xE3, 0x8A, 0xE3, 0x8B, 0xE3, 0x8C, /* 0x90-0x93 */ + 0xE3, 0x8D, 0xE3, 0x8E, 0xE3, 0x8F, 0xE3, 0x90, /* 0x94-0x97 */ + 0xE3, 0x91, 0xE3, 0x92, 0xE3, 0x93, 0xE3, 0x94, /* 0x98-0x9B */ + 0xE3, 0x95, 0xE3, 0x96, 0xE3, 0x97, 0xE3, 0x98, /* 0x9C-0x9F */ + 0xE3, 0x99, 0xE3, 0x9A, 0xE3, 0x9B, 0xE3, 0x9C, /* 0xA0-0xA3 */ + 0xE3, 0x9D, 0xE3, 0x9E, 0xE3, 0x9F, 0xE3, 0xA0, /* 0xA4-0xA7 */ + 0xE4, 0x40, 0xE4, 0x41, 0xE4, 0x42, 0xE4, 0x43, /* 0xA8-0xAB */ + 0xE4, 0x44, 0xE4, 0x45, 0xF6, 0xC7, 0xE4, 0x46, /* 0xAC-0xAF */ + 0xE4, 0x47, 0xE4, 0x48, 0xE4, 0x49, 0xE4, 0x4A, /* 0xB0-0xB3 */ + 0xE4, 0x4B, 0xE4, 0x4C, 0xE4, 0x4D, 0xE4, 0x4E, /* 0xB4-0xB7 */ + 0xE4, 0x4F, 0xE4, 0x50, 0xE4, 0x51, 0xE4, 0x52, /* 0xB8-0xBB */ + 0xE4, 0x53, 0xE4, 0x54, 0xE4, 0x55, 0xE4, 0x56, /* 0xBC-0xBF */ + 0xE4, 0x57, 0xE4, 0x58, 0xE4, 0x59, 0xE4, 0x5A, /* 0xC0-0xC3 */ + 0xE4, 0x5B, 0xE4, 0x5C, 0xE4, 0x5D, 0xE4, 0x5E, /* 0xC4-0xC7 */ + 0xF6, 0xC8, 0xE4, 0x5F, 0xE4, 0x60, 0xE4, 0x61, /* 0xC8-0xCB */ + 0xE4, 0x62, 0xE4, 0x63, 0xE4, 0x64, 0xE4, 0x65, /* 0xCC-0xCF */ + 0xE4, 0x66, 0xE4, 0x67, 0xE4, 0x68, 0xE4, 0x69, /* 0xD0-0xD3 */ + 0xE4, 0x6A, 0xE4, 0x6B, 0xE4, 0x6C, 0xE4, 0x6D, /* 0xD4-0xD7 */ + 0xE4, 0x6E, 0xE4, 0x6F, 0xE4, 0x70, 0xE4, 0x71, /* 0xD8-0xDB */ + 0xE4, 0x72, 0xE4, 0x73, 0xE4, 0x74, 0xE4, 0x75, /* 0xDC-0xDF */ + 0xE4, 0x76, 0xE4, 0x77, 0xE4, 0x78, 0xE4, 0x79, /* 0xE0-0xE3 */ + 0xE4, 0x7A, 0xE4, 0x7B, 0xE4, 0x7C, 0xE4, 0x7D, /* 0xE4-0xE7 */ + 0xE4, 0x7E, 0xE4, 0x80, 0xE4, 0x81, 0xE4, 0x82, /* 0xE8-0xEB */ + 0xE4, 0x83, 0xE4, 0x84, 0xE4, 0x85, 0xE4, 0x86, /* 0xEC-0xEF */ + 0xE4, 0x87, 0xE4, 0x88, 0xE4, 0x89, 0xE4, 0x8A, /* 0xF0-0xF3 */ + 0xE4, 0x8B, 0xE4, 0x8C, 0xE4, 0x8D, 0xE4, 0x8E, /* 0xF4-0xF7 */ + 0xE4, 0x8F, 0xE4, 0x90, 0xE4, 0x91, 0xE4, 0x92, /* 0xF8-0xFB */ + 0xE4, 0x93, 0xE4, 0x94, 0xE4, 0x95, 0xE4, 0x96, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0xE4, 0x97, 0xE4, 0x98, 0xE4, 0x99, 0xE4, 0x9A, /* 0x00-0x03 */ + 0xE4, 0x9B, 0xE4, 0x9C, 0xE4, 0x9D, 0xE4, 0x9E, /* 0x04-0x07 */ + 0xE4, 0x9F, 0xE4, 0xA0, 0xE5, 0x40, 0xE5, 0x41, /* 0x08-0x0B */ + 0xE5, 0x42, 0xE5, 0x43, 0xE5, 0x44, 0xE5, 0x45, /* 0x0C-0x0F */ + 0xE5, 0x46, 0xE5, 0x47, 0xE5, 0x48, 0xE5, 0x49, /* 0x10-0x13 */ + 0xE5, 0x4A, 0xE5, 0x4B, 0xE5, 0x4C, 0xE5, 0x4D, /* 0x14-0x17 */ + 0xE5, 0x4E, 0xE5, 0x4F, 0xE5, 0x50, 0xE5, 0x51, /* 0x18-0x1B */ + 0xE5, 0x52, 0xE5, 0x53, 0xE5, 0x54, 0xE5, 0x55, /* 0x1C-0x1F */ + 0xE5, 0x56, 0xE5, 0x57, 0xE5, 0x58, 0xE5, 0x59, /* 0x20-0x23 */ + 0xE5, 0x5A, 0xE5, 0x5B, 0xE5, 0x5C, 0xE5, 0x5D, /* 0x24-0x27 */ + 0xE5, 0x5E, 0xE5, 0x5F, 0xE5, 0x60, 0xE5, 0x61, /* 0x28-0x2B */ + 0xE5, 0x62, 0xE5, 0x63, 0xE5, 0x64, 0xE5, 0x65, /* 0x2C-0x2F */ + 0xE5, 0x66, 0xE5, 0x67, 0xE5, 0x68, 0xE5, 0x69, /* 0x30-0x33 */ + 0xE5, 0x6A, 0xE5, 0x6B, 0xE5, 0x6C, 0xE5, 0x6D, /* 0x34-0x37 */ + 0xE5, 0x6E, 0xE5, 0x6F, 0xE5, 0x70, 0xE5, 0x71, /* 0x38-0x3B */ + 0xE5, 0x72, 0xE5, 0x73, 0xF6, 0xC9, 0xE5, 0x74, /* 0x3C-0x3F */ + 0xE5, 0x75, 0xE5, 0x76, 0xE5, 0x77, 0xE5, 0x78, /* 0x40-0x43 */ + 0xE5, 0x79, 0xE5, 0x7A, 0xE5, 0x7B, 0xE5, 0x7C, /* 0x44-0x47 */ + 0xE5, 0x7D, 0xE5, 0x7E, 0xE5, 0x80, 0xE5, 0x81, /* 0x48-0x4B */ + 0xE5, 0x82, 0xE5, 0x83, 0xE5, 0x84, 0xE5, 0x85, /* 0x4C-0x4F */ + 0xE5, 0x86, 0xE5, 0x87, 0xE5, 0x88, 0xE5, 0x89, /* 0x50-0x53 */ + 0xE5, 0x8A, 0xE5, 0x8B, 0xE5, 0x8C, 0xE5, 0x8D, /* 0x54-0x57 */ + 0xE5, 0x8E, 0xE5, 0x8F, 0xE5, 0x90, 0xE5, 0x91, /* 0x58-0x5B */ + 0xE5, 0x92, 0xE5, 0x93, 0xE5, 0x94, 0xE5, 0x95, /* 0x5C-0x5F */ + 0xE5, 0x96, 0xE5, 0x97, 0xE5, 0x98, 0xE5, 0x99, /* 0x60-0x63 */ + 0xE5, 0x9A, 0xE5, 0x9B, 0xE5, 0x9C, 0xE5, 0x9D, /* 0x64-0x67 */ + 0xE5, 0x9E, 0xE5, 0x9F, 0xF6, 0xCA, 0xE5, 0xA0, /* 0x68-0x6B */ + 0xE6, 0x40, 0xE6, 0x41, 0xE6, 0x42, 0xE6, 0x43, /* 0x6C-0x6F */ + 0xE6, 0x44, 0xE6, 0x45, 0xE6, 0x46, 0xE6, 0x47, /* 0x70-0x73 */ + 0xE6, 0x48, 0xE6, 0x49, 0xE6, 0x4A, 0xE6, 0x4B, /* 0x74-0x77 */ + 0xE6, 0x4C, 0xE6, 0x4D, 0xE6, 0x4E, 0xE6, 0x4F, /* 0x78-0x7B */ + 0xE6, 0x50, 0xE6, 0x51, 0xE6, 0x52, 0xE6, 0x53, /* 0x7C-0x7F */ + + 0xE6, 0x54, 0xE6, 0x55, 0xE6, 0x56, 0xE6, 0x57, /* 0x80-0x83 */ + 0xE6, 0x58, 0xE6, 0x59, 0xE6, 0x5A, 0xE6, 0x5B, /* 0x84-0x87 */ + 0xE6, 0x5C, 0xE6, 0x5D, 0xE6, 0x5E, 0xE6, 0x5F, /* 0x88-0x8B */ + 0xE6, 0x60, 0xE6, 0x61, 0xE6, 0x62, 0xF6, 0xCC, /* 0x8C-0x8F */ + 0xE6, 0x63, 0xE6, 0x64, 0xE6, 0x65, 0xE6, 0x66, /* 0x90-0x93 */ + 0xE6, 0x67, 0xE6, 0x68, 0xE6, 0x69, 0xE6, 0x6A, /* 0x94-0x97 */ + 0xE6, 0x6B, 0xE6, 0x6C, 0xE6, 0x6D, 0xE6, 0x6E, /* 0x98-0x9B */ + 0xE6, 0x6F, 0xE6, 0x70, 0xE6, 0x71, 0xE6, 0x72, /* 0x9C-0x9F */ + 0xE6, 0x73, 0xE6, 0x74, 0xE6, 0x75, 0xE6, 0x76, /* 0xA0-0xA3 */ + 0xE6, 0x77, 0xE6, 0x78, 0xE6, 0x79, 0xE6, 0x7A, /* 0xA4-0xA7 */ + 0xE6, 0x7B, 0xE6, 0x7C, 0xE6, 0x7D, 0xE6, 0x7E, /* 0xA8-0xAB */ + 0xE6, 0x80, 0xE6, 0x81, 0xE6, 0x82, 0xE6, 0x83, /* 0xAC-0xAF */ + 0xE6, 0x84, 0xE6, 0x85, 0xE6, 0x86, 0xE6, 0x87, /* 0xB0-0xB3 */ + 0xE6, 0x88, 0xE6, 0x89, 0xE6, 0x8A, 0xE6, 0x8B, /* 0xB4-0xB7 */ + 0xE6, 0x8C, 0xE6, 0x8D, 0xE6, 0x8E, 0xE6, 0x8F, /* 0xB8-0xBB */ + 0xE6, 0x90, 0xE6, 0x91, 0xE6, 0x92, 0xE6, 0x93, /* 0xBC-0xBF */ + 0xE6, 0x94, 0xE6, 0x95, 0xE6, 0x96, 0xE6, 0x97, /* 0xC0-0xC3 */ + 0xE6, 0x98, 0xE6, 0x99, 0xE6, 0x9A, 0xE6, 0x9B, /* 0xC4-0xC7 */ + 0xE6, 0x9C, 0xE6, 0x9D, 0xF6, 0xCB, 0xE6, 0x9E, /* 0xC8-0xCB */ + 0xE6, 0x9F, 0xE6, 0xA0, 0xE7, 0x40, 0xE7, 0x41, /* 0xCC-0xCF */ + 0xE7, 0x42, 0xE7, 0x43, 0xE7, 0x44, 0xE7, 0x45, /* 0xD0-0xD3 */ + 0xE7, 0x46, 0xE7, 0x47, 0xF7, 0xE9, 0xE7, 0x48, /* 0xD4-0xD7 */ + 0xE7, 0x49, 0xE7, 0x4A, 0xE7, 0x4B, 0xE7, 0x4C, /* 0xD8-0xDB */ + 0xE7, 0x4D, 0xE7, 0x4E, 0xE7, 0x4F, 0xE7, 0x50, /* 0xDC-0xDF */ + 0xE7, 0x51, 0xE7, 0x52, 0xE7, 0x53, 0xE7, 0x54, /* 0xE0-0xE3 */ + 0xE7, 0x55, 0xE7, 0x56, 0xE7, 0x57, 0xE7, 0x58, /* 0xE4-0xE7 */ + 0xE7, 0x59, 0xE7, 0x5A, 0xE7, 0x5B, 0xE7, 0x5C, /* 0xE8-0xEB */ + 0xE7, 0x5D, 0xE7, 0x5E, 0xE7, 0x5F, 0xE7, 0x60, /* 0xEC-0xEF */ + 0xE7, 0x61, 0xE7, 0x62, 0xE7, 0x63, 0xE7, 0x64, /* 0xF0-0xF3 */ + 0xE7, 0x65, 0xE7, 0x66, 0xE7, 0x67, 0xE7, 0x68, /* 0xF4-0xF7 */ + 0xE7, 0x69, 0xE7, 0x6A, 0xE7, 0x6B, 0xE7, 0x6C, /* 0xF8-0xFB */ + 0xE7, 0x6D, 0xE7, 0x6E, 0xE7, 0x6F, 0xE7, 0x70, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_94[512] = { + 0xE7, 0x71, 0xE7, 0x72, 0xE7, 0x73, 0xE7, 0x74, /* 0x00-0x03 */ + 0xE7, 0x75, 0xE7, 0x76, 0xE7, 0x77, 0xE7, 0x78, /* 0x04-0x07 */ + 0xE7, 0x79, 0xE7, 0x7A, 0xE7, 0x7B, 0xE7, 0x7C, /* 0x08-0x0B */ + 0xE7, 0x7D, 0xE7, 0x7E, 0xE7, 0x80, 0xE7, 0x81, /* 0x0C-0x0F */ + 0xE7, 0x82, 0xE7, 0x83, 0xE7, 0x84, 0xE7, 0x85, /* 0x10-0x13 */ + 0xE7, 0x86, 0xE7, 0x87, 0xE7, 0x88, 0xE7, 0x89, /* 0x14-0x17 */ + 0xE7, 0x8A, 0xE7, 0x8B, 0xE7, 0x8C, 0xE7, 0x8D, /* 0x18-0x1B */ + 0xE7, 0x8E, 0xE7, 0x8F, 0xE7, 0x90, 0xE7, 0x91, /* 0x1C-0x1F */ + 0xE7, 0x92, 0xE7, 0x93, 0xE7, 0x94, 0xE7, 0x95, /* 0x20-0x23 */ + 0xE7, 0x96, 0xE7, 0x97, 0xE7, 0x98, 0xE7, 0x99, /* 0x24-0x27 */ + 0xE7, 0x9A, 0xE7, 0x9B, 0xE7, 0x9C, 0xE7, 0x9D, /* 0x28-0x2B */ + 0xE7, 0x9E, 0xE7, 0x9F, 0xE7, 0xA0, 0xE8, 0x40, /* 0x2C-0x2F */ + 0xE8, 0x41, 0xE8, 0x42, 0xE8, 0x43, 0xE8, 0x44, /* 0x30-0x33 */ + 0xE8, 0x45, 0xE8, 0x46, 0xE8, 0x47, 0xE8, 0x48, /* 0x34-0x37 */ + 0xE8, 0x49, 0xE8, 0x4A, 0xE8, 0x4B, 0xE8, 0x4C, /* 0x38-0x3B */ + 0xE8, 0x4D, 0xE8, 0x4E, 0xF6, 0xCD, 0xE8, 0x4F, /* 0x3C-0x3F */ + 0xE8, 0x50, 0xE8, 0x51, 0xE8, 0x52, 0xE8, 0x53, /* 0x40-0x43 */ + 0xE8, 0x54, 0xE8, 0x55, 0xE8, 0x56, 0xE8, 0x57, /* 0x44-0x47 */ + 0xE8, 0x58, 0xE8, 0x59, 0xE8, 0x5A, 0xE8, 0x5B, /* 0x48-0x4B */ + 0xE8, 0x5C, 0xE8, 0x5D, 0xE8, 0x5E, 0xE8, 0x5F, /* 0x4C-0x4F */ + 0xE8, 0x60, 0xE8, 0x61, 0xE8, 0x62, 0xE8, 0x63, /* 0x50-0x53 */ + 0xE8, 0x64, 0xE8, 0x65, 0xE8, 0x66, 0xE8, 0x67, /* 0x54-0x57 */ + 0xE8, 0x68, 0xE8, 0x69, 0xE8, 0x6A, 0xE8, 0x6B, /* 0x58-0x5B */ + 0xE8, 0x6C, 0xE8, 0x6D, 0xE8, 0x6E, 0xE8, 0x6F, /* 0x5C-0x5F */ + 0xE8, 0x70, 0xE8, 0x71, 0xE8, 0x72, 0xE8, 0x73, /* 0x60-0x63 */ + 0xE8, 0x74, 0xE8, 0x75, 0xE8, 0x76, 0xE8, 0x77, /* 0x64-0x67 */ + 0xE8, 0x78, 0xE8, 0x79, 0xE8, 0x7A, 0xF6, 0xCE, /* 0x68-0x6B */ + 0xE8, 0x7B, 0xE8, 0x7C, 0xE8, 0x7D, 0xE8, 0x7E, /* 0x6C-0x6F */ + 0xE8, 0x80, 0xE8, 0x81, 0xE8, 0x82, 0xE8, 0x83, /* 0x70-0x73 */ + 0xE8, 0x84, 0xE8, 0x85, 0xE8, 0x86, 0xE8, 0x87, /* 0x74-0x77 */ + 0xE8, 0x88, 0xE8, 0x89, 0xE8, 0x8A, 0xE8, 0x8B, /* 0x78-0x7B */ + 0xE8, 0x8C, 0xE8, 0x8D, 0xE8, 0x8E, 0xE8, 0x8F, /* 0x7C-0x7F */ + + 0xE8, 0x90, 0xE8, 0x91, 0xE8, 0x92, 0xE8, 0x93, /* 0x80-0x83 */ + 0xE8, 0x94, 0xEE, 0xC4, 0xEE, 0xC5, 0xEE, 0xC6, /* 0x84-0x87 */ + 0xD5, 0xEB, 0xB6, 0xA4, 0xEE, 0xC8, 0xEE, 0xC7, /* 0x88-0x8B */ + 0xEE, 0xC9, 0xEE, 0xCA, 0xC7, 0xA5, 0xEE, 0xCB, /* 0x8C-0x8F */ + 0xEE, 0xCC, 0xE8, 0x95, 0xB7, 0xB0, 0xB5, 0xF6, /* 0x90-0x93 */ + 0xEE, 0xCD, 0xEE, 0xCF, 0xE8, 0x96, 0xEE, 0xCE, /* 0x94-0x97 */ + 0xE8, 0x97, 0xB8, 0xC6, 0xEE, 0xD0, 0xEE, 0xD1, /* 0x98-0x9B */ + 0xEE, 0xD2, 0xB6, 0xDB, 0xB3, 0xAE, 0xD6, 0xD3, /* 0x9C-0x9F */ + 0xC4, 0xC6, 0xB1, 0xB5, 0xB8, 0xD6, 0xEE, 0xD3, /* 0xA0-0xA3 */ + 0xEE, 0xD4, 0xD4, 0xBF, 0xC7, 0xD5, 0xBE, 0xFB, /* 0xA4-0xA7 */ + 0xCE, 0xD9, 0xB9, 0xB3, 0xEE, 0xD6, 0xEE, 0xD5, /* 0xA8-0xAB */ + 0xEE, 0xD8, 0xEE, 0xD7, 0xC5, 0xA5, 0xEE, 0xD9, /* 0xAC-0xAF */ + 0xEE, 0xDA, 0xC7, 0xAE, 0xEE, 0xDB, 0xC7, 0xAF, /* 0xB0-0xB3 */ + 0xEE, 0xDC, 0xB2, 0xA7, 0xEE, 0xDD, 0xEE, 0xDE, /* 0xB4-0xB7 */ + 0xEE, 0xDF, 0xEE, 0xE0, 0xEE, 0xE1, 0xD7, 0xEA, /* 0xB8-0xBB */ + 0xEE, 0xE2, 0xEE, 0xE3, 0xBC, 0xD8, 0xEE, 0xE4, /* 0xBC-0xBF */ + 0xD3, 0xCB, 0xCC, 0xFA, 0xB2, 0xAC, 0xC1, 0xE5, /* 0xC0-0xC3 */ + 0xEE, 0xE5, 0xC7, 0xA6, 0xC3, 0xAD, 0xE8, 0x98, /* 0xC4-0xC7 */ + 0xEE, 0xE6, 0xEE, 0xE7, 0xEE, 0xE8, 0xEE, 0xE9, /* 0xC8-0xCB */ + 0xEE, 0xEA, 0xEE, 0xEB, 0xEE, 0xEC, 0xE8, 0x99, /* 0xCC-0xCF */ + 0xEE, 0xED, 0xEE, 0xEE, 0xEE, 0xEF, 0xE8, 0x9A, /* 0xD0-0xD3 */ + 0xE8, 0x9B, 0xEE, 0xF0, 0xEE, 0xF1, 0xEE, 0xF2, /* 0xD4-0xD7 */ + 0xEE, 0xF4, 0xEE, 0xF3, 0xE8, 0x9C, 0xEE, 0xF5, /* 0xD8-0xDB */ + 0xCD, 0xAD, 0xC2, 0xC1, 0xEE, 0xF6, 0xEE, 0xF7, /* 0xDC-0xDF */ + 0xEE, 0xF8, 0xD5, 0xA1, 0xEE, 0xF9, 0xCF, 0xB3, /* 0xE0-0xE3 */ + 0xEE, 0xFA, 0xEE, 0xFB, 0xE8, 0x9D, 0xEE, 0xFC, /* 0xE4-0xE7 */ + 0xEE, 0xFD, 0xEF, 0xA1, 0xEE, 0xFE, 0xEF, 0xA2, /* 0xE8-0xEB */ + 0xB8, 0xF5, 0xC3, 0xFA, 0xEF, 0xA3, 0xEF, 0xA4, /* 0xEC-0xEF */ + 0xBD, 0xC2, 0xD2, 0xBF, 0xB2, 0xF9, 0xEF, 0xA5, /* 0xF0-0xF3 */ + 0xEF, 0xA6, 0xEF, 0xA7, 0xD2, 0xF8, 0xEF, 0xA8, /* 0xF4-0xF7 */ + 0xD6, 0xFD, 0xEF, 0xA9, 0xC6, 0xCC, 0xE8, 0x9E, /* 0xF8-0xFB */ + 0xEF, 0xAA, 0xEF, 0xAB, 0xC1, 0xB4, 0xEF, 0xAC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_95[512] = { + 0xCF, 0xFA, 0xCB, 0xF8, 0xEF, 0xAE, 0xEF, 0xAD, /* 0x00-0x03 */ + 0xB3, 0xFA, 0xB9, 0xF8, 0xEF, 0xAF, 0xEF, 0xB0, /* 0x04-0x07 */ + 0xD0, 0xE2, 0xEF, 0xB1, 0xEF, 0xB2, 0xB7, 0xE6, /* 0x08-0x0B */ + 0xD0, 0xBF, 0xEF, 0xB3, 0xEF, 0xB4, 0xEF, 0xB5, /* 0x0C-0x0F */ + 0xC8, 0xF1, 0xCC, 0xE0, 0xEF, 0xB6, 0xEF, 0xB7, /* 0x10-0x13 */ + 0xEF, 0xB8, 0xEF, 0xB9, 0xEF, 0xBA, 0xD5, 0xE0, /* 0x14-0x17 */ + 0xEF, 0xBB, 0xB4, 0xED, 0xC3, 0xAA, 0xEF, 0xBC, /* 0x18-0x1B */ + 0xE8, 0x9F, 0xEF, 0xBD, 0xEF, 0xBE, 0xEF, 0xBF, /* 0x1C-0x1F */ + 0xE8, 0xA0, 0xCE, 0xFD, 0xEF, 0xC0, 0xC2, 0xE0, /* 0x20-0x23 */ + 0xB4, 0xB8, 0xD7, 0xB6, 0xBD, 0xF5, 0xE9, 0x40, /* 0x24-0x27 */ + 0xCF, 0xC7, 0xEF, 0xC3, 0xEF, 0xC1, 0xEF, 0xC2, /* 0x28-0x2B */ + 0xEF, 0xC4, 0xB6, 0xA7, 0xBC, 0xFC, 0xBE, 0xE2, /* 0x2C-0x2F */ + 0xC3, 0xCC, 0xEF, 0xC5, 0xEF, 0xC6, 0xE9, 0x41, /* 0x30-0x33 */ + 0xEF, 0xC7, 0xEF, 0xCF, 0xEF, 0xC8, 0xEF, 0xC9, /* 0x34-0x37 */ + 0xEF, 0xCA, 0xC7, 0xC2, 0xEF, 0xF1, 0xB6, 0xCD, /* 0x38-0x3B */ + 0xEF, 0xCB, 0xE9, 0x42, 0xEF, 0xCC, 0xEF, 0xCD, /* 0x3C-0x3F */ + 0xB6, 0xC6, 0xC3, 0xBE, 0xEF, 0xCE, 0xE9, 0x43, /* 0x40-0x43 */ + 0xEF, 0xD0, 0xEF, 0xD1, 0xEF, 0xD2, 0xD5, 0xF2, /* 0x44-0x47 */ + 0xE9, 0x44, 0xEF, 0xD3, 0xC4, 0xF7, 0xE9, 0x45, /* 0x48-0x4B */ + 0xEF, 0xD4, 0xC4, 0xF8, 0xEF, 0xD5, 0xEF, 0xD6, /* 0x4C-0x4F */ + 0xB8, 0xE4, 0xB0, 0xF7, 0xEF, 0xD7, 0xEF, 0xD8, /* 0x50-0x53 */ + 0xEF, 0xD9, 0xE9, 0x46, 0xEF, 0xDA, 0xEF, 0xDB, /* 0x54-0x57 */ + 0xEF, 0xDC, 0xEF, 0xDD, 0xE9, 0x47, 0xEF, 0xDE, /* 0x58-0x5B */ + 0xBE, 0xB5, 0xEF, 0xE1, 0xEF, 0xDF, 0xEF, 0xE0, /* 0x5C-0x5F */ + 0xE9, 0x48, 0xEF, 0xE2, 0xEF, 0xE3, 0xC1, 0xCD, /* 0x60-0x63 */ + 0xEF, 0xE4, 0xEF, 0xE5, 0xEF, 0xE6, 0xEF, 0xE7, /* 0x64-0x67 */ + 0xEF, 0xE8, 0xEF, 0xE9, 0xEF, 0xEA, 0xEF, 0xEB, /* 0x68-0x6B */ + 0xEF, 0xEC, 0xC0, 0xD8, 0xE9, 0x49, 0xEF, 0xED, /* 0x6C-0x6F */ + 0xC1, 0xAD, 0xEF, 0xEE, 0xEF, 0xEF, 0xEF, 0xF0, /* 0x70-0x73 */ + 0xE9, 0x4A, 0xE9, 0x4B, 0xCF, 0xE2, 0xE9, 0x4C, /* 0x74-0x77 */ + 0xE9, 0x4D, 0xE9, 0x4E, 0xE9, 0x4F, 0xE9, 0x50, /* 0x78-0x7B */ + 0xE9, 0x51, 0xE9, 0x52, 0xE9, 0x53, 0xB3, 0xA4, /* 0x7C-0x7F */ + + 0xE9, 0x54, 0xE9, 0x55, 0xE9, 0x56, 0xE9, 0x57, /* 0x80-0x83 */ + 0xE9, 0x58, 0xE9, 0x59, 0xE9, 0x5A, 0xE9, 0x5B, /* 0x84-0x87 */ + 0xE9, 0x5C, 0xE9, 0x5D, 0xE9, 0x5E, 0xE9, 0x5F, /* 0x88-0x8B */ + 0xE9, 0x60, 0xE9, 0x61, 0xE9, 0x62, 0xE9, 0x63, /* 0x8C-0x8F */ + 0xE9, 0x64, 0xE9, 0x65, 0xE9, 0x66, 0xE9, 0x67, /* 0x90-0x93 */ + 0xE9, 0x68, 0xE9, 0x69, 0xE9, 0x6A, 0xE9, 0x6B, /* 0x94-0x97 */ + 0xE9, 0x6C, 0xE9, 0x6D, 0xE9, 0x6E, 0xE9, 0x6F, /* 0x98-0x9B */ + 0xE9, 0x70, 0xE9, 0x71, 0xE9, 0x72, 0xE9, 0x73, /* 0x9C-0x9F */ + 0xE9, 0x74, 0xE9, 0x75, 0xE9, 0x76, 0xE9, 0x77, /* 0xA0-0xA3 */ + 0xE9, 0x78, 0xE9, 0x79, 0xE9, 0x7A, 0xE9, 0x7B, /* 0xA4-0xA7 */ + 0xE9, 0x7C, 0xE9, 0x7D, 0xE9, 0x7E, 0xE9, 0x80, /* 0xA8-0xAB */ + 0xE9, 0x81, 0xE9, 0x82, 0xE9, 0x83, 0xE9, 0x84, /* 0xAC-0xAF */ + 0xE9, 0x85, 0xE9, 0x86, 0xE9, 0x87, 0xE9, 0x88, /* 0xB0-0xB3 */ + 0xE9, 0x89, 0xE9, 0x8A, 0xE9, 0x8B, 0xE9, 0x8C, /* 0xB4-0xB7 */ + 0xE9, 0x8D, 0xE9, 0x8E, 0xE9, 0x8F, 0xE9, 0x90, /* 0xB8-0xBB */ + 0xE9, 0x91, 0xE9, 0x92, 0xE9, 0x93, 0xE9, 0x94, /* 0xBC-0xBF */ + 0xE9, 0x95, 0xE9, 0x96, 0xE9, 0x97, 0xE9, 0x98, /* 0xC0-0xC3 */ + 0xE9, 0x99, 0xE9, 0x9A, 0xE9, 0x9B, 0xE9, 0x9C, /* 0xC4-0xC7 */ + 0xE9, 0x9D, 0xE9, 0x9E, 0xE9, 0x9F, 0xE9, 0xA0, /* 0xC8-0xCB */ + 0xEA, 0x40, 0xEA, 0x41, 0xEA, 0x42, 0xEA, 0x43, /* 0xCC-0xCF */ + 0xEA, 0x44, 0xEA, 0x45, 0xEA, 0x46, 0xEA, 0x47, /* 0xD0-0xD3 */ + 0xEA, 0x48, 0xEA, 0x49, 0xEA, 0x4A, 0xEA, 0x4B, /* 0xD4-0xD7 */ + 0xEA, 0x4C, 0xEA, 0x4D, 0xEA, 0x4E, 0xEA, 0x4F, /* 0xD8-0xDB */ + 0xEA, 0x50, 0xEA, 0x51, 0xEA, 0x52, 0xEA, 0x53, /* 0xDC-0xDF */ + 0xEA, 0x54, 0xEA, 0x55, 0xEA, 0x56, 0xEA, 0x57, /* 0xE0-0xE3 */ + 0xEA, 0x58, 0xEA, 0x59, 0xEA, 0x5A, 0xEA, 0x5B, /* 0xE4-0xE7 */ + 0xC3, 0xC5, 0xE3, 0xC5, 0xC9, 0xC1, 0xE3, 0xC6, /* 0xE8-0xEB */ + 0xEA, 0x5C, 0xB1, 0xD5, 0xCE, 0xCA, 0xB4, 0xB3, /* 0xEC-0xEF */ + 0xC8, 0xF2, 0xE3, 0xC7, 0xCF, 0xD0, 0xE3, 0xC8, /* 0xF0-0xF3 */ + 0xBC, 0xE4, 0xE3, 0xC9, 0xE3, 0xCA, 0xC3, 0xC6, /* 0xF4-0xF7 */ + 0xD5, 0xA2, 0xC4, 0xD6, 0xB9, 0xEB, 0xCE, 0xC5, /* 0xF8-0xFB */ + 0xE3, 0xCB, 0xC3, 0xF6, 0xE3, 0xCC, 0xEA, 0x5D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_96[512] = { + 0xB7, 0xA7, 0xB8, 0xF3, 0xBA, 0xD2, 0xE3, 0xCD, /* 0x00-0x03 */ + 0xE3, 0xCE, 0xD4, 0xC4, 0xE3, 0xCF, 0xEA, 0x5E, /* 0x04-0x07 */ + 0xE3, 0xD0, 0xD1, 0xCB, 0xE3, 0xD1, 0xE3, 0xD2, /* 0x08-0x0B */ + 0xE3, 0xD3, 0xE3, 0xD4, 0xD1, 0xD6, 0xE3, 0xD5, /* 0x0C-0x0F */ + 0xB2, 0xFB, 0xC0, 0xBB, 0xE3, 0xD6, 0xEA, 0x5F, /* 0x10-0x13 */ + 0xC0, 0xAB, 0xE3, 0xD7, 0xE3, 0xD8, 0xE3, 0xD9, /* 0x14-0x17 */ + 0xEA, 0x60, 0xE3, 0xDA, 0xE3, 0xDB, 0xEA, 0x61, /* 0x18-0x1B */ + 0xB8, 0xB7, 0xDA, 0xE2, 0xEA, 0x62, 0xB6, 0xD3, /* 0x1C-0x1F */ + 0xEA, 0x63, 0xDA, 0xE4, 0xDA, 0xE3, 0xEA, 0x64, /* 0x20-0x23 */ + 0xEA, 0x65, 0xEA, 0x66, 0xEA, 0x67, 0xEA, 0x68, /* 0x24-0x27 */ + 0xEA, 0x69, 0xEA, 0x6A, 0xDA, 0xE6, 0xEA, 0x6B, /* 0x28-0x2B */ + 0xEA, 0x6C, 0xEA, 0x6D, 0xC8, 0xEE, 0xEA, 0x6E, /* 0x2C-0x2F */ + 0xEA, 0x6F, 0xDA, 0xE5, 0xB7, 0xC0, 0xD1, 0xF4, /* 0x30-0x33 */ + 0xD2, 0xF5, 0xD5, 0xF3, 0xBD, 0xD7, 0xEA, 0x70, /* 0x34-0x37 */ + 0xEA, 0x71, 0xEA, 0x72, 0xEA, 0x73, 0xD7, 0xE8, /* 0x38-0x3B */ + 0xDA, 0xE8, 0xDA, 0xE7, 0xEA, 0x74, 0xB0, 0xA2, /* 0x3C-0x3F */ + 0xCD, 0xD3, 0xEA, 0x75, 0xDA, 0xE9, 0xEA, 0x76, /* 0x40-0x43 */ + 0xB8, 0xBD, 0xBC, 0xCA, 0xC2, 0xBD, 0xC2, 0xA4, /* 0x44-0x47 */ + 0xB3, 0xC2, 0xDA, 0xEA, 0xEA, 0x77, 0xC2, 0xAA, /* 0x48-0x4B */ + 0xC4, 0xB0, 0xBD, 0xB5, 0xEA, 0x78, 0xEA, 0x79, /* 0x4C-0x4F */ + 0xCF, 0xDE, 0xEA, 0x7A, 0xEA, 0x7B, 0xEA, 0x7C, /* 0x50-0x53 */ + 0xDA, 0xEB, 0xC9, 0xC2, 0xEA, 0x7D, 0xEA, 0x7E, /* 0x54-0x57 */ + 0xEA, 0x80, 0xEA, 0x81, 0xEA, 0x82, 0xB1, 0xDD, /* 0x58-0x5B */ + 0xEA, 0x83, 0xEA, 0x84, 0xEA, 0x85, 0xDA, 0xEC, /* 0x5C-0x5F */ + 0xEA, 0x86, 0xB6, 0xB8, 0xD4, 0xBA, 0xEA, 0x87, /* 0x60-0x63 */ + 0xB3, 0xFD, 0xEA, 0x88, 0xEA, 0x89, 0xDA, 0xED, /* 0x64-0x67 */ + 0xD4, 0xC9, 0xCF, 0xD5, 0xC5, 0xE3, 0xEA, 0x8A, /* 0x68-0x6B */ + 0xDA, 0xEE, 0xEA, 0x8B, 0xEA, 0x8C, 0xEA, 0x8D, /* 0x6C-0x6F */ + 0xEA, 0x8E, 0xEA, 0x8F, 0xDA, 0xEF, 0xEA, 0x90, /* 0x70-0x73 */ + 0xDA, 0xF0, 0xC1, 0xEA, 0xCC, 0xD5, 0xCF, 0xDD, /* 0x74-0x77 */ + 0xEA, 0x91, 0xEA, 0x92, 0xEA, 0x93, 0xEA, 0x94, /* 0x78-0x7B */ + 0xEA, 0x95, 0xEA, 0x96, 0xEA, 0x97, 0xEA, 0x98, /* 0x7C-0x7F */ + + 0xEA, 0x99, 0xEA, 0x9A, 0xEA, 0x9B, 0xEA, 0x9C, /* 0x80-0x83 */ + 0xEA, 0x9D, 0xD3, 0xE7, 0xC2, 0xA1, 0xEA, 0x9E, /* 0x84-0x87 */ + 0xDA, 0xF1, 0xEA, 0x9F, 0xEA, 0xA0, 0xCB, 0xE5, /* 0x88-0x8B */ + 0xEB, 0x40, 0xDA, 0xF2, 0xEB, 0x41, 0xCB, 0xE6, /* 0x8C-0x8F */ + 0xD2, 0xFE, 0xEB, 0x42, 0xEB, 0x43, 0xEB, 0x44, /* 0x90-0x93 */ + 0xB8, 0xF4, 0xEB, 0x45, 0xEB, 0x46, 0xDA, 0xF3, /* 0x94-0x97 */ + 0xB0, 0xAF, 0xCF, 0xB6, 0xEB, 0x47, 0xEB, 0x48, /* 0x98-0x9B */ + 0xD5, 0xCF, 0xEB, 0x49, 0xEB, 0x4A, 0xEB, 0x4B, /* 0x9C-0x9F */ + 0xEB, 0x4C, 0xEB, 0x4D, 0xEB, 0x4E, 0xEB, 0x4F, /* 0xA0-0xA3 */ + 0xEB, 0x50, 0xEB, 0x51, 0xEB, 0x52, 0xCB, 0xED, /* 0xA4-0xA7 */ + 0xEB, 0x53, 0xEB, 0x54, 0xEB, 0x55, 0xEB, 0x56, /* 0xA8-0xAB */ + 0xEB, 0x57, 0xEB, 0x58, 0xEB, 0x59, 0xEB, 0x5A, /* 0xAC-0xAF */ + 0xDA, 0xF4, 0xEB, 0x5B, 0xEB, 0x5C, 0xE3, 0xC4, /* 0xB0-0xB3 */ + 0xEB, 0x5D, 0xEB, 0x5E, 0xC1, 0xA5, 0xEB, 0x5F, /* 0xB4-0xB7 */ + 0xEB, 0x60, 0xF6, 0xBF, 0xEB, 0x61, 0xEB, 0x62, /* 0xB8-0xBB */ + 0xF6, 0xC0, 0xF6, 0xC1, 0xC4, 0xD1, 0xEB, 0x63, /* 0xBC-0xBF */ + 0xC8, 0xB8, 0xD1, 0xE3, 0xEB, 0x64, 0xEB, 0x65, /* 0xC0-0xC3 */ + 0xD0, 0xDB, 0xD1, 0xC5, 0xBC, 0xAF, 0xB9, 0xCD, /* 0xC4-0xC7 */ + 0xEB, 0x66, 0xEF, 0xF4, 0xEB, 0x67, 0xEB, 0x68, /* 0xC8-0xCB */ + 0xB4, 0xC6, 0xD3, 0xBA, 0xF6, 0xC2, 0xB3, 0xFB, /* 0xCC-0xCF */ + 0xEB, 0x69, 0xEB, 0x6A, 0xF6, 0xC3, 0xEB, 0x6B, /* 0xD0-0xD3 */ + 0xEB, 0x6C, 0xB5, 0xF1, 0xEB, 0x6D, 0xEB, 0x6E, /* 0xD4-0xD7 */ + 0xEB, 0x6F, 0xEB, 0x70, 0xEB, 0x71, 0xEB, 0x72, /* 0xD8-0xDB */ + 0xEB, 0x73, 0xEB, 0x74, 0xEB, 0x75, 0xEB, 0x76, /* 0xDC-0xDF */ + 0xF6, 0xC5, 0xEB, 0x77, 0xEB, 0x78, 0xEB, 0x79, /* 0xE0-0xE3 */ + 0xEB, 0x7A, 0xEB, 0x7B, 0xEB, 0x7C, 0xEB, 0x7D, /* 0xE4-0xE7 */ + 0xD3, 0xEA, 0xF6, 0xA7, 0xD1, 0xA9, 0xEB, 0x7E, /* 0xE8-0xEB */ + 0xEB, 0x80, 0xEB, 0x81, 0xEB, 0x82, 0xF6, 0xA9, /* 0xEC-0xEF */ + 0xEB, 0x83, 0xEB, 0x84, 0xEB, 0x85, 0xF6, 0xA8, /* 0xF0-0xF3 */ + 0xEB, 0x86, 0xEB, 0x87, 0xC1, 0xE3, 0xC0, 0xD7, /* 0xF4-0xF7 */ + 0xEB, 0x88, 0xB1, 0xA2, 0xEB, 0x89, 0xEB, 0x8A, /* 0xF8-0xFB */ + 0xEB, 0x8B, 0xEB, 0x8C, 0xCE, 0xED, 0xEB, 0x8D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_97[512] = { + 0xD0, 0xE8, 0xF6, 0xAB, 0xEB, 0x8E, 0xEB, 0x8F, /* 0x00-0x03 */ + 0xCF, 0xF6, 0xEB, 0x90, 0xF6, 0xAA, 0xD5, 0xF0, /* 0x04-0x07 */ + 0xF6, 0xAC, 0xC3, 0xB9, 0xEB, 0x91, 0xEB, 0x92, /* 0x08-0x0B */ + 0xEB, 0x93, 0xBB, 0xF4, 0xF6, 0xAE, 0xF6, 0xAD, /* 0x0C-0x0F */ + 0xEB, 0x94, 0xEB, 0x95, 0xEB, 0x96, 0xC4, 0xDE, /* 0x10-0x13 */ + 0xEB, 0x97, 0xEB, 0x98, 0xC1, 0xD8, 0xEB, 0x99, /* 0x14-0x17 */ + 0xEB, 0x9A, 0xEB, 0x9B, 0xEB, 0x9C, 0xEB, 0x9D, /* 0x18-0x1B */ + 0xCB, 0xAA, 0xEB, 0x9E, 0xCF, 0xBC, 0xEB, 0x9F, /* 0x1C-0x1F */ + 0xEB, 0xA0, 0xEC, 0x40, 0xEC, 0x41, 0xEC, 0x42, /* 0x20-0x23 */ + 0xEC, 0x43, 0xEC, 0x44, 0xEC, 0x45, 0xEC, 0x46, /* 0x24-0x27 */ + 0xEC, 0x47, 0xEC, 0x48, 0xF6, 0xAF, 0xEC, 0x49, /* 0x28-0x2B */ + 0xEC, 0x4A, 0xF6, 0xB0, 0xEC, 0x4B, 0xEC, 0x4C, /* 0x2C-0x2F */ + 0xF6, 0xB1, 0xEC, 0x4D, 0xC2, 0xB6, 0xEC, 0x4E, /* 0x30-0x33 */ + 0xEC, 0x4F, 0xEC, 0x50, 0xEC, 0x51, 0xEC, 0x52, /* 0x34-0x37 */ + 0xB0, 0xD4, 0xC5, 0xF9, 0xEC, 0x53, 0xEC, 0x54, /* 0x38-0x3B */ + 0xEC, 0x55, 0xEC, 0x56, 0xF6, 0xB2, 0xEC, 0x57, /* 0x3C-0x3F */ + 0xEC, 0x58, 0xEC, 0x59, 0xEC, 0x5A, 0xEC, 0x5B, /* 0x40-0x43 */ + 0xEC, 0x5C, 0xEC, 0x5D, 0xEC, 0x5E, 0xEC, 0x5F, /* 0x44-0x47 */ + 0xEC, 0x60, 0xEC, 0x61, 0xEC, 0x62, 0xEC, 0x63, /* 0x48-0x4B */ + 0xEC, 0x64, 0xEC, 0x65, 0xEC, 0x66, 0xEC, 0x67, /* 0x4C-0x4F */ + 0xEC, 0x68, 0xEC, 0x69, 0xC7, 0xE0, 0xF6, 0xA6, /* 0x50-0x53 */ + 0xEC, 0x6A, 0xEC, 0x6B, 0xBE, 0xB8, 0xEC, 0x6C, /* 0x54-0x57 */ + 0xEC, 0x6D, 0xBE, 0xB2, 0xEC, 0x6E, 0xB5, 0xE5, /* 0x58-0x5B */ + 0xEC, 0x6F, 0xEC, 0x70, 0xB7, 0xC7, 0xEC, 0x71, /* 0x5C-0x5F */ + 0xBF, 0xBF, 0xC3, 0xD2, 0xC3, 0xE6, 0xEC, 0x72, /* 0x60-0x63 */ + 0xEC, 0x73, 0xD8, 0xCC, 0xEC, 0x74, 0xEC, 0x75, /* 0x64-0x67 */ + 0xEC, 0x76, 0xB8, 0xEF, 0xEC, 0x77, 0xEC, 0x78, /* 0x68-0x6B */ + 0xEC, 0x79, 0xEC, 0x7A, 0xEC, 0x7B, 0xEC, 0x7C, /* 0x6C-0x6F */ + 0xEC, 0x7D, 0xEC, 0x7E, 0xEC, 0x80, 0xBD, 0xF9, /* 0x70-0x73 */ + 0xD1, 0xA5, 0xEC, 0x81, 0xB0, 0xD0, 0xEC, 0x82, /* 0x74-0x77 */ + 0xEC, 0x83, 0xEC, 0x84, 0xEC, 0x85, 0xEC, 0x86, /* 0x78-0x7B */ + 0xF7, 0xB0, 0xEC, 0x87, 0xEC, 0x88, 0xEC, 0x89, /* 0x7C-0x7F */ + + 0xEC, 0x8A, 0xEC, 0x8B, 0xEC, 0x8C, 0xEC, 0x8D, /* 0x80-0x83 */ + 0xEC, 0x8E, 0xF7, 0xB1, 0xEC, 0x8F, 0xEC, 0x90, /* 0x84-0x87 */ + 0xEC, 0x91, 0xEC, 0x92, 0xEC, 0x93, 0xD0, 0xAC, /* 0x88-0x8B */ + 0xEC, 0x94, 0xB0, 0xB0, 0xEC, 0x95, 0xEC, 0x96, /* 0x8C-0x8F */ + 0xEC, 0x97, 0xF7, 0xB2, 0xF7, 0xB3, 0xEC, 0x98, /* 0x90-0x93 */ + 0xF7, 0xB4, 0xEC, 0x99, 0xEC, 0x9A, 0xEC, 0x9B, /* 0x94-0x97 */ + 0xC7, 0xCA, 0xEC, 0x9C, 0xEC, 0x9D, 0xEC, 0x9E, /* 0x98-0x9B */ + 0xEC, 0x9F, 0xEC, 0xA0, 0xED, 0x40, 0xED, 0x41, /* 0x9C-0x9F */ + 0xBE, 0xCF, 0xED, 0x42, 0xED, 0x43, 0xF7, 0xB7, /* 0xA0-0xA3 */ + 0xED, 0x44, 0xED, 0x45, 0xED, 0x46, 0xED, 0x47, /* 0xA4-0xA7 */ + 0xED, 0x48, 0xED, 0x49, 0xED, 0x4A, 0xF7, 0xB6, /* 0xA8-0xAB */ + 0xED, 0x4B, 0xB1, 0xDE, 0xED, 0x4C, 0xF7, 0xB5, /* 0xAC-0xAF */ + 0xED, 0x4D, 0xED, 0x4E, 0xF7, 0xB8, 0xED, 0x4F, /* 0xB0-0xB3 */ + 0xF7, 0xB9, 0xED, 0x50, 0xED, 0x51, 0xED, 0x52, /* 0xB4-0xB7 */ + 0xED, 0x53, 0xED, 0x54, 0xED, 0x55, 0xED, 0x56, /* 0xB8-0xBB */ + 0xED, 0x57, 0xED, 0x58, 0xED, 0x59, 0xED, 0x5A, /* 0xBC-0xBF */ + 0xED, 0x5B, 0xED, 0x5C, 0xED, 0x5D, 0xED, 0x5E, /* 0xC0-0xC3 */ + 0xED, 0x5F, 0xED, 0x60, 0xED, 0x61, 0xED, 0x62, /* 0xC4-0xC7 */ + 0xED, 0x63, 0xED, 0x64, 0xED, 0x65, 0xED, 0x66, /* 0xC8-0xCB */ + 0xED, 0x67, 0xED, 0x68, 0xED, 0x69, 0xED, 0x6A, /* 0xCC-0xCF */ + 0xED, 0x6B, 0xED, 0x6C, 0xED, 0x6D, 0xED, 0x6E, /* 0xD0-0xD3 */ + 0xED, 0x6F, 0xED, 0x70, 0xED, 0x71, 0xED, 0x72, /* 0xD4-0xD7 */ + 0xED, 0x73, 0xED, 0x74, 0xED, 0x75, 0xED, 0x76, /* 0xD8-0xDB */ + 0xED, 0x77, 0xED, 0x78, 0xED, 0x79, 0xED, 0x7A, /* 0xDC-0xDF */ + 0xED, 0x7B, 0xED, 0x7C, 0xED, 0x7D, 0xED, 0x7E, /* 0xE0-0xE3 */ + 0xED, 0x80, 0xED, 0x81, 0xCE, 0xA4, 0xC8, 0xCD, /* 0xE4-0xE7 */ + 0xED, 0x82, 0xBA, 0xAB, 0xE8, 0xB8, 0xE8, 0xB9, /* 0xE8-0xEB */ + 0xE8, 0xBA, 0xBE, 0xC2, 0xED, 0x83, 0xED, 0x84, /* 0xEC-0xEF */ + 0xED, 0x85, 0xED, 0x86, 0xED, 0x87, 0xD2, 0xF4, /* 0xF0-0xF3 */ + 0xED, 0x88, 0xD4, 0xCF, 0xC9, 0xD8, 0xED, 0x89, /* 0xF4-0xF7 */ + 0xED, 0x8A, 0xED, 0x8B, 0xED, 0x8C, 0xED, 0x8D, /* 0xF8-0xFB */ + 0xED, 0x8E, 0xED, 0x8F, 0xED, 0x90, 0xED, 0x91, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0xED, 0x92, 0xED, 0x93, 0xED, 0x94, 0xED, 0x95, /* 0x00-0x03 */ + 0xED, 0x96, 0xED, 0x97, 0xED, 0x98, 0xED, 0x99, /* 0x04-0x07 */ + 0xED, 0x9A, 0xED, 0x9B, 0xED, 0x9C, 0xED, 0x9D, /* 0x08-0x0B */ + 0xED, 0x9E, 0xED, 0x9F, 0xED, 0xA0, 0xEE, 0x40, /* 0x0C-0x0F */ + 0xEE, 0x41, 0xEE, 0x42, 0xEE, 0x43, 0xEE, 0x44, /* 0x10-0x13 */ + 0xEE, 0x45, 0xEE, 0x46, 0xEE, 0x47, 0xEE, 0x48, /* 0x14-0x17 */ + 0xEE, 0x49, 0xEE, 0x4A, 0xEE, 0x4B, 0xEE, 0x4C, /* 0x18-0x1B */ + 0xEE, 0x4D, 0xEE, 0x4E, 0xEE, 0x4F, 0xEE, 0x50, /* 0x1C-0x1F */ + 0xEE, 0x51, 0xEE, 0x52, 0xEE, 0x53, 0xEE, 0x54, /* 0x20-0x23 */ + 0xEE, 0x55, 0xEE, 0x56, 0xEE, 0x57, 0xEE, 0x58, /* 0x24-0x27 */ + 0xEE, 0x59, 0xEE, 0x5A, 0xEE, 0x5B, 0xEE, 0x5C, /* 0x28-0x2B */ + 0xEE, 0x5D, 0xEE, 0x5E, 0xEE, 0x5F, 0xEE, 0x60, /* 0x2C-0x2F */ + 0xEE, 0x61, 0xEE, 0x62, 0xEE, 0x63, 0xEE, 0x64, /* 0x30-0x33 */ + 0xEE, 0x65, 0xEE, 0x66, 0xEE, 0x67, 0xEE, 0x68, /* 0x34-0x37 */ + 0xEE, 0x69, 0xEE, 0x6A, 0xEE, 0x6B, 0xEE, 0x6C, /* 0x38-0x3B */ + 0xEE, 0x6D, 0xEE, 0x6E, 0xEE, 0x6F, 0xEE, 0x70, /* 0x3C-0x3F */ + 0xEE, 0x71, 0xEE, 0x72, 0xEE, 0x73, 0xEE, 0x74, /* 0x40-0x43 */ + 0xEE, 0x75, 0xEE, 0x76, 0xEE, 0x77, 0xEE, 0x78, /* 0x44-0x47 */ + 0xEE, 0x79, 0xEE, 0x7A, 0xEE, 0x7B, 0xEE, 0x7C, /* 0x48-0x4B */ + 0xEE, 0x7D, 0xEE, 0x7E, 0xEE, 0x80, 0xEE, 0x81, /* 0x4C-0x4F */ + 0xEE, 0x82, 0xEE, 0x83, 0xEE, 0x84, 0xEE, 0x85, /* 0x50-0x53 */ + 0xEE, 0x86, 0xEE, 0x87, 0xEE, 0x88, 0xEE, 0x89, /* 0x54-0x57 */ + 0xEE, 0x8A, 0xEE, 0x8B, 0xEE, 0x8C, 0xEE, 0x8D, /* 0x58-0x5B */ + 0xEE, 0x8E, 0xEE, 0x8F, 0xEE, 0x90, 0xEE, 0x91, /* 0x5C-0x5F */ + 0xEE, 0x92, 0xEE, 0x93, 0xEE, 0x94, 0xEE, 0x95, /* 0x60-0x63 */ + 0xEE, 0x96, 0xEE, 0x97, 0xEE, 0x98, 0xEE, 0x99, /* 0x64-0x67 */ + 0xEE, 0x9A, 0xEE, 0x9B, 0xEE, 0x9C, 0xEE, 0x9D, /* 0x68-0x6B */ + 0xEE, 0x9E, 0xEE, 0x9F, 0xEE, 0xA0, 0xEF, 0x40, /* 0x6C-0x6F */ + 0xEF, 0x41, 0xEF, 0x42, 0xEF, 0x43, 0xEF, 0x44, /* 0x70-0x73 */ + 0xEF, 0x45, 0xD2, 0xB3, 0xB6, 0xA5, 0xC7, 0xEA, /* 0x74-0x77 */ + 0xF1, 0xFC, 0xCF, 0xEE, 0xCB, 0xB3, 0xD0, 0xEB, /* 0x78-0x7B */ + 0xE7, 0xEF, 0xCD, 0xE7, 0xB9, 0xCB, 0xB6, 0xD9, /* 0x7C-0x7F */ + + 0xF1, 0xFD, 0xB0, 0xE4, 0xCB, 0xCC, 0xF1, 0xFE, /* 0x80-0x83 */ + 0xD4, 0xA4, 0xC2, 0xAD, 0xC1, 0xEC, 0xC6, 0xC4, /* 0x84-0x87 */ + 0xBE, 0xB1, 0xF2, 0xA1, 0xBC, 0xD5, 0xEF, 0x46, /* 0x88-0x8B */ + 0xF2, 0xA2, 0xF2, 0xA3, 0xEF, 0x47, 0xF2, 0xA4, /* 0x8C-0x8F */ + 0xD2, 0xC3, 0xC6, 0xB5, 0xEF, 0x48, 0xCD, 0xC7, /* 0x90-0x93 */ + 0xF2, 0xA5, 0xEF, 0x49, 0xD3, 0xB1, 0xBF, 0xC5, /* 0x94-0x97 */ + 0xCC, 0xE2, 0xEF, 0x4A, 0xF2, 0xA6, 0xF2, 0xA7, /* 0x98-0x9B */ + 0xD1, 0xD5, 0xB6, 0xEE, 0xF2, 0xA8, 0xF2, 0xA9, /* 0x9C-0x9F */ + 0xB5, 0xDF, 0xF2, 0xAA, 0xF2, 0xAB, 0xEF, 0x4B, /* 0xA0-0xA3 */ + 0xB2, 0xFC, 0xF2, 0xAC, 0xF2, 0xAD, 0xC8, 0xA7, /* 0xA4-0xA7 */ + 0xEF, 0x4C, 0xEF, 0x4D, 0xEF, 0x4E, 0xEF, 0x4F, /* 0xA8-0xAB */ + 0xEF, 0x50, 0xEF, 0x51, 0xEF, 0x52, 0xEF, 0x53, /* 0xAC-0xAF */ + 0xEF, 0x54, 0xEF, 0x55, 0xEF, 0x56, 0xEF, 0x57, /* 0xB0-0xB3 */ + 0xEF, 0x58, 0xEF, 0x59, 0xEF, 0x5A, 0xEF, 0x5B, /* 0xB4-0xB7 */ + 0xEF, 0x5C, 0xEF, 0x5D, 0xEF, 0x5E, 0xEF, 0x5F, /* 0xB8-0xBB */ + 0xEF, 0x60, 0xEF, 0x61, 0xEF, 0x62, 0xEF, 0x63, /* 0xBC-0xBF */ + 0xEF, 0x64, 0xEF, 0x65, 0xEF, 0x66, 0xEF, 0x67, /* 0xC0-0xC3 */ + 0xEF, 0x68, 0xEF, 0x69, 0xEF, 0x6A, 0xEF, 0x6B, /* 0xC4-0xC7 */ + 0xEF, 0x6C, 0xEF, 0x6D, 0xEF, 0x6E, 0xEF, 0x6F, /* 0xC8-0xCB */ + 0xEF, 0x70, 0xEF, 0x71, 0xB7, 0xE7, 0xEF, 0x72, /* 0xCC-0xCF */ + 0xEF, 0x73, 0xEC, 0xA9, 0xEC, 0xAA, 0xEC, 0xAB, /* 0xD0-0xD3 */ + 0xEF, 0x74, 0xEC, 0xAC, 0xEF, 0x75, 0xEF, 0x76, /* 0xD4-0xD7 */ + 0xC6, 0xAE, 0xEC, 0xAD, 0xEC, 0xAE, 0xEF, 0x77, /* 0xD8-0xDB */ + 0xEF, 0x78, 0xEF, 0x79, 0xB7, 0xC9, 0xCA, 0xB3, /* 0xDC-0xDF */ + 0xEF, 0x7A, 0xEF, 0x7B, 0xEF, 0x7C, 0xEF, 0x7D, /* 0xE0-0xE3 */ + 0xEF, 0x7E, 0xEF, 0x80, 0xEF, 0x81, 0xE2, 0xB8, /* 0xE4-0xE7 */ + 0xF7, 0xCF, 0xEF, 0x82, 0xEF, 0x83, 0xEF, 0x84, /* 0xE8-0xEB */ + 0xEF, 0x85, 0xEF, 0x86, 0xEF, 0x87, 0xEF, 0x88, /* 0xEC-0xEF */ + 0xEF, 0x89, 0xEF, 0x8A, 0xEF, 0x8B, 0xEF, 0x8C, /* 0xF0-0xF3 */ + 0xEF, 0x8D, 0xEF, 0x8E, 0xEF, 0x8F, 0xEF, 0x90, /* 0xF4-0xF7 */ + 0xEF, 0x91, 0xEF, 0x92, 0xEF, 0x93, 0xEF, 0x94, /* 0xF8-0xFB */ + 0xEF, 0x95, 0xEF, 0x96, 0xEF, 0x97, 0xEF, 0x98, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0xEF, 0x99, 0xEF, 0x9A, 0xEF, 0x9B, 0xEF, 0x9C, /* 0x00-0x03 */ + 0xEF, 0x9D, 0xEF, 0x9E, 0xEF, 0x9F, 0xEF, 0xA0, /* 0x04-0x07 */ + 0xF0, 0x40, 0xF0, 0x41, 0xF0, 0x42, 0xF0, 0x43, /* 0x08-0x0B */ + 0xF0, 0x44, 0xF7, 0xD0, 0xF0, 0x45, 0xF0, 0x46, /* 0x0C-0x0F */ + 0xB2, 0xCD, 0xF0, 0x47, 0xF0, 0x48, 0xF0, 0x49, /* 0x10-0x13 */ + 0xF0, 0x4A, 0xF0, 0x4B, 0xF0, 0x4C, 0xF0, 0x4D, /* 0x14-0x17 */ + 0xF0, 0x4E, 0xF0, 0x4F, 0xF0, 0x50, 0xF0, 0x51, /* 0x18-0x1B */ + 0xF0, 0x52, 0xF0, 0x53, 0xF0, 0x54, 0xF0, 0x55, /* 0x1C-0x1F */ + 0xF0, 0x56, 0xF0, 0x57, 0xF0, 0x58, 0xF0, 0x59, /* 0x20-0x23 */ + 0xF0, 0x5A, 0xF0, 0x5B, 0xF0, 0x5C, 0xF0, 0x5D, /* 0x24-0x27 */ + 0xF0, 0x5E, 0xF0, 0x5F, 0xF0, 0x60, 0xF0, 0x61, /* 0x28-0x2B */ + 0xF0, 0x62, 0xF0, 0x63, 0xF7, 0xD1, 0xF0, 0x64, /* 0x2C-0x2F */ + 0xF0, 0x65, 0xF0, 0x66, 0xF0, 0x67, 0xF0, 0x68, /* 0x30-0x33 */ + 0xF0, 0x69, 0xF0, 0x6A, 0xF0, 0x6B, 0xF0, 0x6C, /* 0x34-0x37 */ + 0xF0, 0x6D, 0xF0, 0x6E, 0xF0, 0x6F, 0xF0, 0x70, /* 0x38-0x3B */ + 0xF0, 0x71, 0xF0, 0x72, 0xF0, 0x73, 0xF0, 0x74, /* 0x3C-0x3F */ + 0xF0, 0x75, 0xF0, 0x76, 0xF0, 0x77, 0xF0, 0x78, /* 0x40-0x43 */ + 0xF0, 0x79, 0xF0, 0x7A, 0xF0, 0x7B, 0xF0, 0x7C, /* 0x44-0x47 */ + 0xF0, 0x7D, 0xF0, 0x7E, 0xF0, 0x80, 0xF0, 0x81, /* 0x48-0x4B */ + 0xF0, 0x82, 0xF0, 0x83, 0xF0, 0x84, 0xF0, 0x85, /* 0x4C-0x4F */ + 0xF0, 0x86, 0xF0, 0x87, 0xF0, 0x88, 0xF0, 0x89, /* 0x50-0x53 */ + 0xF7, 0xD3, 0xF7, 0xD2, 0xF0, 0x8A, 0xF0, 0x8B, /* 0x54-0x57 */ + 0xF0, 0x8C, 0xF0, 0x8D, 0xF0, 0x8E, 0xF0, 0x8F, /* 0x58-0x5B */ + 0xF0, 0x90, 0xF0, 0x91, 0xF0, 0x92, 0xF0, 0x93, /* 0x5C-0x5F */ + 0xF0, 0x94, 0xF0, 0x95, 0xF0, 0x96, 0xE2, 0xBB, /* 0x60-0x63 */ + 0xF0, 0x97, 0xBC, 0xA2, 0xF0, 0x98, 0xE2, 0xBC, /* 0x64-0x67 */ + 0xE2, 0xBD, 0xE2, 0xBE, 0xE2, 0xBF, 0xE2, 0xC0, /* 0x68-0x6B */ + 0xE2, 0xC1, 0xB7, 0xB9, 0xD2, 0xFB, 0xBD, 0xA4, /* 0x6C-0x6F */ + 0xCA, 0xCE, 0xB1, 0xA5, 0xCB, 0xC7, 0xF0, 0x99, /* 0x70-0x73 */ + 0xE2, 0xC2, 0xB6, 0xFC, 0xC8, 0xC4, 0xE2, 0xC3, /* 0x74-0x77 */ + 0xF0, 0x9A, 0xF0, 0x9B, 0xBD, 0xC8, 0xF0, 0x9C, /* 0x78-0x7B */ + 0xB1, 0xFD, 0xE2, 0xC4, 0xF0, 0x9D, 0xB6, 0xF6, /* 0x7C-0x7F */ + + 0xE2, 0xC5, 0xC4, 0xD9, 0xF0, 0x9E, 0xF0, 0x9F, /* 0x80-0x83 */ + 0xE2, 0xC6, 0xCF, 0xDA, 0xB9, 0xDD, 0xE2, 0xC7, /* 0x84-0x87 */ + 0xC0, 0xA1, 0xF0, 0xA0, 0xE2, 0xC8, 0xB2, 0xF6, /* 0x88-0x8B */ + 0xF1, 0x40, 0xE2, 0xC9, 0xF1, 0x41, 0xC1, 0xF3, /* 0x8C-0x8F */ + 0xE2, 0xCA, 0xE2, 0xCB, 0xC2, 0xF8, 0xE2, 0xCC, /* 0x90-0x93 */ + 0xE2, 0xCD, 0xE2, 0xCE, 0xCA, 0xD7, 0xD8, 0xB8, /* 0x94-0x97 */ + 0xD9, 0xE5, 0xCF, 0xE3, 0xF1, 0x42, 0xF1, 0x43, /* 0x98-0x9B */ + 0xF1, 0x44, 0xF1, 0x45, 0xF1, 0x46, 0xF1, 0x47, /* 0x9C-0x9F */ + 0xF1, 0x48, 0xF1, 0x49, 0xF1, 0x4A, 0xF1, 0x4B, /* 0xA0-0xA3 */ + 0xF1, 0x4C, 0xF0, 0xA5, 0xF1, 0x4D, 0xF1, 0x4E, /* 0xA4-0xA7 */ + 0xDC, 0xB0, 0xF1, 0x4F, 0xF1, 0x50, 0xF1, 0x51, /* 0xA8-0xAB */ + 0xF1, 0x52, 0xF1, 0x53, 0xF1, 0x54, 0xF1, 0x55, /* 0xAC-0xAF */ + 0xF1, 0x56, 0xF1, 0x57, 0xF1, 0x58, 0xF1, 0x59, /* 0xB0-0xB3 */ + 0xF1, 0x5A, 0xF1, 0x5B, 0xF1, 0x5C, 0xF1, 0x5D, /* 0xB4-0xB7 */ + 0xF1, 0x5E, 0xF1, 0x5F, 0xF1, 0x60, 0xF1, 0x61, /* 0xB8-0xBB */ + 0xF1, 0x62, 0xF1, 0x63, 0xF1, 0x64, 0xF1, 0x65, /* 0xBC-0xBF */ + 0xF1, 0x66, 0xF1, 0x67, 0xF1, 0x68, 0xF1, 0x69, /* 0xC0-0xC3 */ + 0xF1, 0x6A, 0xF1, 0x6B, 0xF1, 0x6C, 0xF1, 0x6D, /* 0xC4-0xC7 */ + 0xF1, 0x6E, 0xF1, 0x6F, 0xF1, 0x70, 0xF1, 0x71, /* 0xC8-0xCB */ + 0xF1, 0x72, 0xF1, 0x73, 0xF1, 0x74, 0xF1, 0x75, /* 0xCC-0xCF */ + 0xF1, 0x76, 0xF1, 0x77, 0xF1, 0x78, 0xF1, 0x79, /* 0xD0-0xD3 */ + 0xF1, 0x7A, 0xF1, 0x7B, 0xF1, 0x7C, 0xF1, 0x7D, /* 0xD4-0xD7 */ + 0xF1, 0x7E, 0xF1, 0x80, 0xF1, 0x81, 0xF1, 0x82, /* 0xD8-0xDB */ + 0xF1, 0x83, 0xF1, 0x84, 0xF1, 0x85, 0xF1, 0x86, /* 0xDC-0xDF */ + 0xF1, 0x87, 0xF1, 0x88, 0xF1, 0x89, 0xF1, 0x8A, /* 0xE0-0xE3 */ + 0xF1, 0x8B, 0xF1, 0x8C, 0xF1, 0x8D, 0xF1, 0x8E, /* 0xE4-0xE7 */ + 0xF1, 0x8F, 0xF1, 0x90, 0xF1, 0x91, 0xF1, 0x92, /* 0xE8-0xEB */ + 0xF1, 0x93, 0xF1, 0x94, 0xF1, 0x95, 0xF1, 0x96, /* 0xEC-0xEF */ + 0xF1, 0x97, 0xF1, 0x98, 0xF1, 0x99, 0xF1, 0x9A, /* 0xF0-0xF3 */ + 0xF1, 0x9B, 0xF1, 0x9C, 0xF1, 0x9D, 0xF1, 0x9E, /* 0xF4-0xF7 */ + 0xF1, 0x9F, 0xF1, 0xA0, 0xF2, 0x40, 0xF2, 0x41, /* 0xF8-0xFB */ + 0xF2, 0x42, 0xF2, 0x43, 0xF2, 0x44, 0xF2, 0x45, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0xF2, 0x46, 0xF2, 0x47, 0xF2, 0x48, 0xF2, 0x49, /* 0x00-0x03 */ + 0xF2, 0x4A, 0xF2, 0x4B, 0xF2, 0x4C, 0xF2, 0x4D, /* 0x04-0x07 */ + 0xF2, 0x4E, 0xF2, 0x4F, 0xF2, 0x50, 0xF2, 0x51, /* 0x08-0x0B */ + 0xF2, 0x52, 0xF2, 0x53, 0xF2, 0x54, 0xF2, 0x55, /* 0x0C-0x0F */ + 0xF2, 0x56, 0xF2, 0x57, 0xF2, 0x58, 0xF2, 0x59, /* 0x10-0x13 */ + 0xF2, 0x5A, 0xF2, 0x5B, 0xF2, 0x5C, 0xF2, 0x5D, /* 0x14-0x17 */ + 0xF2, 0x5E, 0xF2, 0x5F, 0xF2, 0x60, 0xF2, 0x61, /* 0x18-0x1B */ + 0xF2, 0x62, 0xF2, 0x63, 0xF2, 0x64, 0xF2, 0x65, /* 0x1C-0x1F */ + 0xF2, 0x66, 0xF2, 0x67, 0xF2, 0x68, 0xF2, 0x69, /* 0x20-0x23 */ + 0xF2, 0x6A, 0xF2, 0x6B, 0xF2, 0x6C, 0xF2, 0x6D, /* 0x24-0x27 */ + 0xF2, 0x6E, 0xF2, 0x6F, 0xF2, 0x70, 0xF2, 0x71, /* 0x28-0x2B */ + 0xF2, 0x72, 0xF2, 0x73, 0xF2, 0x74, 0xF2, 0x75, /* 0x2C-0x2F */ + 0xF2, 0x76, 0xF2, 0x77, 0xF2, 0x78, 0xF2, 0x79, /* 0x30-0x33 */ + 0xF2, 0x7A, 0xF2, 0x7B, 0xF2, 0x7C, 0xF2, 0x7D, /* 0x34-0x37 */ + 0xF2, 0x7E, 0xF2, 0x80, 0xF2, 0x81, 0xF2, 0x82, /* 0x38-0x3B */ + 0xF2, 0x83, 0xF2, 0x84, 0xF2, 0x85, 0xF2, 0x86, /* 0x3C-0x3F */ + 0xF2, 0x87, 0xF2, 0x88, 0xF2, 0x89, 0xF2, 0x8A, /* 0x40-0x43 */ + 0xF2, 0x8B, 0xF2, 0x8C, 0xF2, 0x8D, 0xF2, 0x8E, /* 0x44-0x47 */ + 0xF2, 0x8F, 0xF2, 0x90, 0xF2, 0x91, 0xF2, 0x92, /* 0x48-0x4B */ + 0xF2, 0x93, 0xF2, 0x94, 0xF2, 0x95, 0xF2, 0x96, /* 0x4C-0x4F */ + 0xF2, 0x97, 0xF2, 0x98, 0xF2, 0x99, 0xF2, 0x9A, /* 0x50-0x53 */ + 0xF2, 0x9B, 0xF2, 0x9C, 0xF2, 0x9D, 0xF2, 0x9E, /* 0x54-0x57 */ + 0xF2, 0x9F, 0xF2, 0xA0, 0xF3, 0x40, 0xF3, 0x41, /* 0x58-0x5B */ + 0xF3, 0x42, 0xF3, 0x43, 0xF3, 0x44, 0xF3, 0x45, /* 0x5C-0x5F */ + 0xF3, 0x46, 0xF3, 0x47, 0xF3, 0x48, 0xF3, 0x49, /* 0x60-0x63 */ + 0xF3, 0x4A, 0xF3, 0x4B, 0xF3, 0x4C, 0xF3, 0x4D, /* 0x64-0x67 */ + 0xF3, 0x4E, 0xF3, 0x4F, 0xF3, 0x50, 0xF3, 0x51, /* 0x68-0x6B */ + 0xC2, 0xED, 0xD4, 0xA6, 0xCD, 0xD4, 0xD1, 0xB1, /* 0x6C-0x6F */ + 0xB3, 0xDB, 0xC7, 0xFD, 0xF3, 0x52, 0xB2, 0xB5, /* 0x70-0x73 */ + 0xC2, 0xBF, 0xE6, 0xE0, 0xCA, 0xBB, 0xE6, 0xE1, /* 0x74-0x77 */ + 0xE6, 0xE2, 0xBE, 0xD4, 0xE6, 0xE3, 0xD7, 0xA4, /* 0x78-0x7B */ + 0xCD, 0xD5, 0xE6, 0xE5, 0xBC, 0xDD, 0xE6, 0xE4, /* 0x7C-0x7F */ + + 0xE6, 0xE6, 0xE6, 0xE7, 0xC2, 0xEE, 0xF3, 0x53, /* 0x80-0x83 */ + 0xBD, 0xBE, 0xE6, 0xE8, 0xC2, 0xE6, 0xBA, 0xA7, /* 0x84-0x87 */ + 0xE6, 0xE9, 0xF3, 0x54, 0xE6, 0xEA, 0xB3, 0xD2, /* 0x88-0x8B */ + 0xD1, 0xE9, 0xF3, 0x55, 0xF3, 0x56, 0xBF, 0xA5, /* 0x8C-0x8F */ + 0xE6, 0xEB, 0xC6, 0xEF, 0xE6, 0xEC, 0xE6, 0xED, /* 0x90-0x93 */ + 0xF3, 0x57, 0xF3, 0x58, 0xE6, 0xEE, 0xC6, 0xAD, /* 0x94-0x97 */ + 0xE6, 0xEF, 0xF3, 0x59, 0xC9, 0xA7, 0xE6, 0xF0, /* 0x98-0x9B */ + 0xE6, 0xF1, 0xE6, 0xF2, 0xE5, 0xB9, 0xE6, 0xF3, /* 0x9C-0x9F */ + 0xE6, 0xF4, 0xC2, 0xE2, 0xE6, 0xF5, 0xE6, 0xF6, /* 0xA0-0xA3 */ + 0xD6, 0xE8, 0xE6, 0xF7, 0xF3, 0x5A, 0xE6, 0xF8, /* 0xA4-0xA7 */ + 0xB9, 0xC7, 0xF3, 0x5B, 0xF3, 0x5C, 0xF3, 0x5D, /* 0xA8-0xAB */ + 0xF3, 0x5E, 0xF3, 0x5F, 0xF3, 0x60, 0xF3, 0x61, /* 0xAC-0xAF */ + 0xF7, 0xBB, 0xF7, 0xBA, 0xF3, 0x62, 0xF3, 0x63, /* 0xB0-0xB3 */ + 0xF3, 0x64, 0xF3, 0x65, 0xF7, 0xBE, 0xF7, 0xBC, /* 0xB4-0xB7 */ + 0xBA, 0xA1, 0xF3, 0x66, 0xF7, 0xBF, 0xF3, 0x67, /* 0xB8-0xBB */ + 0xF7, 0xC0, 0xF3, 0x68, 0xF3, 0x69, 0xF3, 0x6A, /* 0xBC-0xBF */ + 0xF7, 0xC2, 0xF7, 0xC1, 0xF7, 0xC4, 0xF3, 0x6B, /* 0xC0-0xC3 */ + 0xF3, 0x6C, 0xF7, 0xC3, 0xF3, 0x6D, 0xF3, 0x6E, /* 0xC4-0xC7 */ + 0xF3, 0x6F, 0xF3, 0x70, 0xF3, 0x71, 0xF7, 0xC5, /* 0xC8-0xCB */ + 0xF7, 0xC6, 0xF3, 0x72, 0xF3, 0x73, 0xF3, 0x74, /* 0xCC-0xCF */ + 0xF3, 0x75, 0xF7, 0xC7, 0xF3, 0x76, 0xCB, 0xE8, /* 0xD0-0xD3 */ + 0xF3, 0x77, 0xF3, 0x78, 0xF3, 0x79, 0xF3, 0x7A, /* 0xD4-0xD7 */ + 0xB8, 0xDF, 0xF3, 0x7B, 0xF3, 0x7C, 0xF3, 0x7D, /* 0xD8-0xDB */ + 0xF3, 0x7E, 0xF3, 0x80, 0xF3, 0x81, 0xF7, 0xD4, /* 0xDC-0xDF */ + 0xF3, 0x82, 0xF7, 0xD5, 0xF3, 0x83, 0xF3, 0x84, /* 0xE0-0xE3 */ + 0xF3, 0x85, 0xF3, 0x86, 0xF7, 0xD6, 0xF3, 0x87, /* 0xE4-0xE7 */ + 0xF3, 0x88, 0xF3, 0x89, 0xF3, 0x8A, 0xF7, 0xD8, /* 0xE8-0xEB */ + 0xF3, 0x8B, 0xF7, 0xDA, 0xF3, 0x8C, 0xF7, 0xD7, /* 0xEC-0xEF */ + 0xF3, 0x8D, 0xF3, 0x8E, 0xF3, 0x8F, 0xF3, 0x90, /* 0xF0-0xF3 */ + 0xF3, 0x91, 0xF3, 0x92, 0xF3, 0x93, 0xF3, 0x94, /* 0xF4-0xF7 */ + 0xF3, 0x95, 0xF7, 0xDB, 0xF3, 0x96, 0xF7, 0xD9, /* 0xF8-0xFB */ + 0xF3, 0x97, 0xF3, 0x98, 0xF3, 0x99, 0xF3, 0x9A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9B[512] = { + 0xF3, 0x9B, 0xF3, 0x9C, 0xF3, 0x9D, 0xD7, 0xD7, /* 0x00-0x03 */ + 0xF3, 0x9E, 0xF3, 0x9F, 0xF3, 0xA0, 0xF4, 0x40, /* 0x04-0x07 */ + 0xF7, 0xDC, 0xF4, 0x41, 0xF4, 0x42, 0xF4, 0x43, /* 0x08-0x0B */ + 0xF4, 0x44, 0xF4, 0x45, 0xF4, 0x46, 0xF7, 0xDD, /* 0x0C-0x0F */ + 0xF4, 0x47, 0xF4, 0x48, 0xF4, 0x49, 0xF7, 0xDE, /* 0x10-0x13 */ + 0xF4, 0x4A, 0xF4, 0x4B, 0xF4, 0x4C, 0xF4, 0x4D, /* 0x14-0x17 */ + 0xF4, 0x4E, 0xF4, 0x4F, 0xF4, 0x50, 0xF4, 0x51, /* 0x18-0x1B */ + 0xF4, 0x52, 0xF4, 0x53, 0xF4, 0x54, 0xF7, 0xDF, /* 0x1C-0x1F */ + 0xF4, 0x55, 0xF4, 0x56, 0xF4, 0x57, 0xF7, 0xE0, /* 0x20-0x23 */ + 0xF4, 0x58, 0xF4, 0x59, 0xF4, 0x5A, 0xF4, 0x5B, /* 0x24-0x27 */ + 0xF4, 0x5C, 0xF4, 0x5D, 0xF4, 0x5E, 0xF4, 0x5F, /* 0x28-0x2B */ + 0xF4, 0x60, 0xF4, 0x61, 0xF4, 0x62, 0xDB, 0xCB, /* 0x2C-0x2F */ + 0xF4, 0x63, 0xF4, 0x64, 0xD8, 0xAA, 0xF4, 0x65, /* 0x30-0x33 */ + 0xF4, 0x66, 0xF4, 0x67, 0xF4, 0x68, 0xF4, 0x69, /* 0x34-0x37 */ + 0xF4, 0x6A, 0xF4, 0x6B, 0xF4, 0x6C, 0xE5, 0xF7, /* 0x38-0x3B */ + 0xB9, 0xED, 0xF4, 0x6D, 0xF4, 0x6E, 0xF4, 0x6F, /* 0x3C-0x3F */ + 0xF4, 0x70, 0xBF, 0xFD, 0xBB, 0xEA, 0xF7, 0xC9, /* 0x40-0x43 */ + 0xC6, 0xC7, 0xF7, 0xC8, 0xF4, 0x71, 0xF7, 0xCA, /* 0x44-0x47 */ + 0xF7, 0xCC, 0xF7, 0xCB, 0xF4, 0x72, 0xF4, 0x73, /* 0x48-0x4B */ + 0xF4, 0x74, 0xF7, 0xCD, 0xF4, 0x75, 0xCE, 0xBA, /* 0x4C-0x4F */ + 0xF4, 0x76, 0xF7, 0xCE, 0xF4, 0x77, 0xF4, 0x78, /* 0x50-0x53 */ + 0xC4, 0xA7, 0xF4, 0x79, 0xF4, 0x7A, 0xF4, 0x7B, /* 0x54-0x57 */ + 0xF4, 0x7C, 0xF4, 0x7D, 0xF4, 0x7E, 0xF4, 0x80, /* 0x58-0x5B */ + 0xF4, 0x81, 0xF4, 0x82, 0xF4, 0x83, 0xF4, 0x84, /* 0x5C-0x5F */ + 0xF4, 0x85, 0xF4, 0x86, 0xF4, 0x87, 0xF4, 0x88, /* 0x60-0x63 */ + 0xF4, 0x89, 0xF4, 0x8A, 0xF4, 0x8B, 0xF4, 0x8C, /* 0x64-0x67 */ + 0xF4, 0x8D, 0xF4, 0x8E, 0xF4, 0x8F, 0xF4, 0x90, /* 0x68-0x6B */ + 0xF4, 0x91, 0xF4, 0x92, 0xF4, 0x93, 0xF4, 0x94, /* 0x6C-0x6F */ + 0xF4, 0x95, 0xF4, 0x96, 0xF4, 0x97, 0xF4, 0x98, /* 0x70-0x73 */ + 0xF4, 0x99, 0xF4, 0x9A, 0xF4, 0x9B, 0xF4, 0x9C, /* 0x74-0x77 */ + 0xF4, 0x9D, 0xF4, 0x9E, 0xF4, 0x9F, 0xF4, 0xA0, /* 0x78-0x7B */ + 0xF5, 0x40, 0xF5, 0x41, 0xF5, 0x42, 0xF5, 0x43, /* 0x7C-0x7F */ + + 0xF5, 0x44, 0xF5, 0x45, 0xF5, 0x46, 0xF5, 0x47, /* 0x80-0x83 */ + 0xF5, 0x48, 0xF5, 0x49, 0xF5, 0x4A, 0xF5, 0x4B, /* 0x84-0x87 */ + 0xF5, 0x4C, 0xF5, 0x4D, 0xF5, 0x4E, 0xF5, 0x4F, /* 0x88-0x8B */ + 0xF5, 0x50, 0xF5, 0x51, 0xF5, 0x52, 0xF5, 0x53, /* 0x8C-0x8F */ + 0xF5, 0x54, 0xF5, 0x55, 0xF5, 0x56, 0xF5, 0x57, /* 0x90-0x93 */ + 0xF5, 0x58, 0xF5, 0x59, 0xF5, 0x5A, 0xF5, 0x5B, /* 0x94-0x97 */ + 0xF5, 0x5C, 0xF5, 0x5D, 0xF5, 0x5E, 0xF5, 0x5F, /* 0x98-0x9B */ + 0xF5, 0x60, 0xF5, 0x61, 0xF5, 0x62, 0xF5, 0x63, /* 0x9C-0x9F */ + 0xF5, 0x64, 0xF5, 0x65, 0xF5, 0x66, 0xF5, 0x67, /* 0xA0-0xA3 */ + 0xF5, 0x68, 0xF5, 0x69, 0xF5, 0x6A, 0xF5, 0x6B, /* 0xA4-0xA7 */ + 0xF5, 0x6C, 0xF5, 0x6D, 0xF5, 0x6E, 0xF5, 0x6F, /* 0xA8-0xAB */ + 0xF5, 0x70, 0xF5, 0x71, 0xF5, 0x72, 0xF5, 0x73, /* 0xAC-0xAF */ + 0xF5, 0x74, 0xF5, 0x75, 0xF5, 0x76, 0xF5, 0x77, /* 0xB0-0xB3 */ + 0xF5, 0x78, 0xF5, 0x79, 0xF5, 0x7A, 0xF5, 0x7B, /* 0xB4-0xB7 */ + 0xF5, 0x7C, 0xF5, 0x7D, 0xF5, 0x7E, 0xF5, 0x80, /* 0xB8-0xBB */ + 0xF5, 0x81, 0xF5, 0x82, 0xF5, 0x83, 0xF5, 0x84, /* 0xBC-0xBF */ + 0xF5, 0x85, 0xF5, 0x86, 0xF5, 0x87, 0xF5, 0x88, /* 0xC0-0xC3 */ + 0xF5, 0x89, 0xF5, 0x8A, 0xF5, 0x8B, 0xF5, 0x8C, /* 0xC4-0xC7 */ + 0xF5, 0x8D, 0xF5, 0x8E, 0xF5, 0x8F, 0xF5, 0x90, /* 0xC8-0xCB */ + 0xF5, 0x91, 0xF5, 0x92, 0xF5, 0x93, 0xF5, 0x94, /* 0xCC-0xCF */ + 0xF5, 0x95, 0xF5, 0x96, 0xF5, 0x97, 0xF5, 0x98, /* 0xD0-0xD3 */ + 0xF5, 0x99, 0xF5, 0x9A, 0xF5, 0x9B, 0xF5, 0x9C, /* 0xD4-0xD7 */ + 0xF5, 0x9D, 0xF5, 0x9E, 0xF5, 0x9F, 0xF5, 0xA0, /* 0xD8-0xDB */ + 0xF6, 0x40, 0xF6, 0x41, 0xF6, 0x42, 0xF6, 0x43, /* 0xDC-0xDF */ + 0xF6, 0x44, 0xF6, 0x45, 0xF6, 0x46, 0xF6, 0x47, /* 0xE0-0xE3 */ + 0xF6, 0x48, 0xF6, 0x49, 0xF6, 0x4A, 0xF6, 0x4B, /* 0xE4-0xE7 */ + 0xF6, 0x4C, 0xF6, 0x4D, 0xF6, 0x4E, 0xF6, 0x4F, /* 0xE8-0xEB */ + 0xF6, 0x50, 0xF6, 0x51, 0xF6, 0x52, 0xF6, 0x53, /* 0xEC-0xEF */ + 0xF6, 0x54, 0xF6, 0x55, 0xF6, 0x56, 0xF6, 0x57, /* 0xF0-0xF3 */ + 0xF6, 0x58, 0xF6, 0x59, 0xF6, 0x5A, 0xF6, 0x5B, /* 0xF4-0xF7 */ + 0xF6, 0x5C, 0xF6, 0x5D, 0xF6, 0x5E, 0xF6, 0x5F, /* 0xF8-0xFB */ + 0xF6, 0x60, 0xF6, 0x61, 0xF6, 0x62, 0xF6, 0x63, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9C[512] = { + 0xF6, 0x64, 0xF6, 0x65, 0xF6, 0x66, 0xF6, 0x67, /* 0x00-0x03 */ + 0xF6, 0x68, 0xF6, 0x69, 0xF6, 0x6A, 0xF6, 0x6B, /* 0x04-0x07 */ + 0xF6, 0x6C, 0xF6, 0x6D, 0xF6, 0x6E, 0xF6, 0x6F, /* 0x08-0x0B */ + 0xF6, 0x70, 0xF6, 0x71, 0xF6, 0x72, 0xF6, 0x73, /* 0x0C-0x0F */ + 0xF6, 0x74, 0xF6, 0x75, 0xF6, 0x76, 0xF6, 0x77, /* 0x10-0x13 */ + 0xF6, 0x78, 0xF6, 0x79, 0xF6, 0x7A, 0xF6, 0x7B, /* 0x14-0x17 */ + 0xF6, 0x7C, 0xF6, 0x7D, 0xF6, 0x7E, 0xF6, 0x80, /* 0x18-0x1B */ + 0xF6, 0x81, 0xF6, 0x82, 0xF6, 0x83, 0xF6, 0x84, /* 0x1C-0x1F */ + 0xF6, 0x85, 0xF6, 0x86, 0xF6, 0x87, 0xF6, 0x88, /* 0x20-0x23 */ + 0xF6, 0x89, 0xF6, 0x8A, 0xF6, 0x8B, 0xF6, 0x8C, /* 0x24-0x27 */ + 0xF6, 0x8D, 0xF6, 0x8E, 0xF6, 0x8F, 0xF6, 0x90, /* 0x28-0x2B */ + 0xF6, 0x91, 0xF6, 0x92, 0xF6, 0x93, 0xF6, 0x94, /* 0x2C-0x2F */ + 0xF6, 0x95, 0xF6, 0x96, 0xF6, 0x97, 0xF6, 0x98, /* 0x30-0x33 */ + 0xF6, 0x99, 0xF6, 0x9A, 0xF6, 0x9B, 0xF6, 0x9C, /* 0x34-0x37 */ + 0xF6, 0x9D, 0xF6, 0x9E, 0xF6, 0x9F, 0xF6, 0xA0, /* 0x38-0x3B */ + 0xF7, 0x40, 0xF7, 0x41, 0xF7, 0x42, 0xF7, 0x43, /* 0x3C-0x3F */ + 0xF7, 0x44, 0xF7, 0x45, 0xF7, 0x46, 0xF7, 0x47, /* 0x40-0x43 */ + 0xF7, 0x48, 0xF7, 0x49, 0xF7, 0x4A, 0xF7, 0x4B, /* 0x44-0x47 */ + 0xF7, 0x4C, 0xF7, 0x4D, 0xF7, 0x4E, 0xF7, 0x4F, /* 0x48-0x4B */ + 0xF7, 0x50, 0xF7, 0x51, 0xF7, 0x52, 0xF7, 0x53, /* 0x4C-0x4F */ + 0xF7, 0x54, 0xF7, 0x55, 0xF7, 0x56, 0xF7, 0x57, /* 0x50-0x53 */ + 0xF7, 0x58, 0xF7, 0x59, 0xF7, 0x5A, 0xF7, 0x5B, /* 0x54-0x57 */ + 0xF7, 0x5C, 0xF7, 0x5D, 0xF7, 0x5E, 0xF7, 0x5F, /* 0x58-0x5B */ + 0xF7, 0x60, 0xF7, 0x61, 0xF7, 0x62, 0xF7, 0x63, /* 0x5C-0x5F */ + 0xF7, 0x64, 0xF7, 0x65, 0xF7, 0x66, 0xF7, 0x67, /* 0x60-0x63 */ + 0xF7, 0x68, 0xF7, 0x69, 0xF7, 0x6A, 0xF7, 0x6B, /* 0x64-0x67 */ + 0xF7, 0x6C, 0xF7, 0x6D, 0xF7, 0x6E, 0xF7, 0x6F, /* 0x68-0x6B */ + 0xF7, 0x70, 0xF7, 0x71, 0xF7, 0x72, 0xF7, 0x73, /* 0x6C-0x6F */ + 0xF7, 0x74, 0xF7, 0x75, 0xF7, 0x76, 0xF7, 0x77, /* 0x70-0x73 */ + 0xF7, 0x78, 0xF7, 0x79, 0xF7, 0x7A, 0xF7, 0x7B, /* 0x74-0x77 */ + 0xF7, 0x7C, 0xF7, 0x7D, 0xF7, 0x7E, 0xF7, 0x80, /* 0x78-0x7B */ + 0xD3, 0xE3, 0xF7, 0x81, 0xF7, 0x82, 0xF6, 0xCF, /* 0x7C-0x7F */ + + 0xF7, 0x83, 0xC2, 0xB3, 0xF6, 0xD0, 0xF7, 0x84, /* 0x80-0x83 */ + 0xF7, 0x85, 0xF6, 0xD1, 0xF6, 0xD2, 0xF6, 0xD3, /* 0x84-0x87 */ + 0xF6, 0xD4, 0xF7, 0x86, 0xF7, 0x87, 0xF6, 0xD6, /* 0x88-0x8B */ + 0xF7, 0x88, 0xB1, 0xAB, 0xF6, 0xD7, 0xF7, 0x89, /* 0x8C-0x8F */ + 0xF6, 0xD8, 0xF6, 0xD9, 0xF6, 0xDA, 0xF7, 0x8A, /* 0x90-0x93 */ + 0xF6, 0xDB, 0xF6, 0xDC, 0xF7, 0x8B, 0xF7, 0x8C, /* 0x94-0x97 */ + 0xF7, 0x8D, 0xF7, 0x8E, 0xF6, 0xDD, 0xF6, 0xDE, /* 0x98-0x9B */ + 0xCF, 0xCA, 0xF7, 0x8F, 0xF6, 0xDF, 0xF6, 0xE0, /* 0x9C-0x9F */ + 0xF6, 0xE1, 0xF6, 0xE2, 0xF6, 0xE3, 0xF6, 0xE4, /* 0xA0-0xA3 */ + 0xC0, 0xF0, 0xF6, 0xE5, 0xF6, 0xE6, 0xF6, 0xE7, /* 0xA4-0xA7 */ + 0xF6, 0xE8, 0xF6, 0xE9, 0xF7, 0x90, 0xF6, 0xEA, /* 0xA8-0xAB */ + 0xF7, 0x91, 0xF6, 0xEB, 0xF6, 0xEC, 0xF7, 0x92, /* 0xAC-0xAF */ + 0xF6, 0xED, 0xF6, 0xEE, 0xF6, 0xEF, 0xF6, 0xF0, /* 0xB0-0xB3 */ + 0xF6, 0xF1, 0xF6, 0xF2, 0xF6, 0xF3, 0xF6, 0xF4, /* 0xB4-0xB7 */ + 0xBE, 0xA8, 0xF7, 0x93, 0xF6, 0xF5, 0xF6, 0xF6, /* 0xB8-0xBB */ + 0xF6, 0xF7, 0xF6, 0xF8, 0xF7, 0x94, 0xF7, 0x95, /* 0xBC-0xBF */ + 0xF7, 0x96, 0xF7, 0x97, 0xF7, 0x98, 0xC8, 0xFA, /* 0xC0-0xC3 */ + 0xF6, 0xF9, 0xF6, 0xFA, 0xF6, 0xFB, 0xF6, 0xFC, /* 0xC4-0xC7 */ + 0xF7, 0x99, 0xF7, 0x9A, 0xF6, 0xFD, 0xF6, 0xFE, /* 0xC8-0xCB */ + 0xF7, 0xA1, 0xF7, 0xA2, 0xF7, 0xA3, 0xF7, 0xA4, /* 0xCC-0xCF */ + 0xF7, 0xA5, 0xF7, 0x9B, 0xF7, 0x9C, 0xF7, 0xA6, /* 0xD0-0xD3 */ + 0xF7, 0xA7, 0xF7, 0xA8, 0xB1, 0xEE, 0xF7, 0xA9, /* 0xD4-0xD7 */ + 0xF7, 0xAA, 0xF7, 0xAB, 0xF7, 0x9D, 0xF7, 0x9E, /* 0xD8-0xDB */ + 0xF7, 0xAC, 0xF7, 0xAD, 0xC1, 0xDB, 0xF7, 0xAE, /* 0xDC-0xDF */ + 0xF7, 0x9F, 0xF7, 0xA0, 0xF7, 0xAF, 0xF8, 0x40, /* 0xE0-0xE3 */ + 0xF8, 0x41, 0xF8, 0x42, 0xF8, 0x43, 0xF8, 0x44, /* 0xE4-0xE7 */ + 0xF8, 0x45, 0xF8, 0x46, 0xF8, 0x47, 0xF8, 0x48, /* 0xE8-0xEB */ + 0xF8, 0x49, 0xF8, 0x4A, 0xF8, 0x4B, 0xF8, 0x4C, /* 0xEC-0xEF */ + 0xF8, 0x4D, 0xF8, 0x4E, 0xF8, 0x4F, 0xF8, 0x50, /* 0xF0-0xF3 */ + 0xF8, 0x51, 0xF8, 0x52, 0xF8, 0x53, 0xF8, 0x54, /* 0xF4-0xF7 */ + 0xF8, 0x55, 0xF8, 0x56, 0xF8, 0x57, 0xF8, 0x58, /* 0xF8-0xFB */ + 0xF8, 0x59, 0xF8, 0x5A, 0xF8, 0x5B, 0xF8, 0x5C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9D[512] = { + 0xF8, 0x5D, 0xF8, 0x5E, 0xF8, 0x5F, 0xF8, 0x60, /* 0x00-0x03 */ + 0xF8, 0x61, 0xF8, 0x62, 0xF8, 0x63, 0xF8, 0x64, /* 0x04-0x07 */ + 0xF8, 0x65, 0xF8, 0x66, 0xF8, 0x67, 0xF8, 0x68, /* 0x08-0x0B */ + 0xF8, 0x69, 0xF8, 0x6A, 0xF8, 0x6B, 0xF8, 0x6C, /* 0x0C-0x0F */ + 0xF8, 0x6D, 0xF8, 0x6E, 0xF8, 0x6F, 0xF8, 0x70, /* 0x10-0x13 */ + 0xF8, 0x71, 0xF8, 0x72, 0xF8, 0x73, 0xF8, 0x74, /* 0x14-0x17 */ + 0xF8, 0x75, 0xF8, 0x76, 0xF8, 0x77, 0xF8, 0x78, /* 0x18-0x1B */ + 0xF8, 0x79, 0xF8, 0x7A, 0xF8, 0x7B, 0xF8, 0x7C, /* 0x1C-0x1F */ + 0xF8, 0x7D, 0xF8, 0x7E, 0xF8, 0x80, 0xF8, 0x81, /* 0x20-0x23 */ + 0xF8, 0x82, 0xF8, 0x83, 0xF8, 0x84, 0xF8, 0x85, /* 0x24-0x27 */ + 0xF8, 0x86, 0xF8, 0x87, 0xF8, 0x88, 0xF8, 0x89, /* 0x28-0x2B */ + 0xF8, 0x8A, 0xF8, 0x8B, 0xF8, 0x8C, 0xF8, 0x8D, /* 0x2C-0x2F */ + 0xF8, 0x8E, 0xF8, 0x8F, 0xF8, 0x90, 0xF8, 0x91, /* 0x30-0x33 */ + 0xF8, 0x92, 0xF8, 0x93, 0xF8, 0x94, 0xF8, 0x95, /* 0x34-0x37 */ + 0xF8, 0x96, 0xF8, 0x97, 0xF8, 0x98, 0xF8, 0x99, /* 0x38-0x3B */ + 0xF8, 0x9A, 0xF8, 0x9B, 0xF8, 0x9C, 0xF8, 0x9D, /* 0x3C-0x3F */ + 0xF8, 0x9E, 0xF8, 0x9F, 0xF8, 0xA0, 0xF9, 0x40, /* 0x40-0x43 */ + 0xF9, 0x41, 0xF9, 0x42, 0xF9, 0x43, 0xF9, 0x44, /* 0x44-0x47 */ + 0xF9, 0x45, 0xF9, 0x46, 0xF9, 0x47, 0xF9, 0x48, /* 0x48-0x4B */ + 0xF9, 0x49, 0xF9, 0x4A, 0xF9, 0x4B, 0xF9, 0x4C, /* 0x4C-0x4F */ + 0xF9, 0x4D, 0xF9, 0x4E, 0xF9, 0x4F, 0xF9, 0x50, /* 0x50-0x53 */ + 0xF9, 0x51, 0xF9, 0x52, 0xF9, 0x53, 0xF9, 0x54, /* 0x54-0x57 */ + 0xF9, 0x55, 0xF9, 0x56, 0xF9, 0x57, 0xF9, 0x58, /* 0x58-0x5B */ + 0xF9, 0x59, 0xF9, 0x5A, 0xF9, 0x5B, 0xF9, 0x5C, /* 0x5C-0x5F */ + 0xF9, 0x5D, 0xF9, 0x5E, 0xF9, 0x5F, 0xF9, 0x60, /* 0x60-0x63 */ + 0xF9, 0x61, 0xF9, 0x62, 0xF9, 0x63, 0xF9, 0x64, /* 0x64-0x67 */ + 0xF9, 0x65, 0xF9, 0x66, 0xF9, 0x67, 0xF9, 0x68, /* 0x68-0x6B */ + 0xF9, 0x69, 0xF9, 0x6A, 0xF9, 0x6B, 0xF9, 0x6C, /* 0x6C-0x6F */ + 0xF9, 0x6D, 0xF9, 0x6E, 0xF9, 0x6F, 0xF9, 0x70, /* 0x70-0x73 */ + 0xF9, 0x71, 0xF9, 0x72, 0xF9, 0x73, 0xF9, 0x74, /* 0x74-0x77 */ + 0xF9, 0x75, 0xF9, 0x76, 0xF9, 0x77, 0xF9, 0x78, /* 0x78-0x7B */ + 0xF9, 0x79, 0xF9, 0x7A, 0xF9, 0x7B, 0xF9, 0x7C, /* 0x7C-0x7F */ + + 0xF9, 0x7D, 0xF9, 0x7E, 0xF9, 0x80, 0xF9, 0x81, /* 0x80-0x83 */ + 0xF9, 0x82, 0xF9, 0x83, 0xF9, 0x84, 0xF9, 0x85, /* 0x84-0x87 */ + 0xF9, 0x86, 0xF9, 0x87, 0xF9, 0x88, 0xF9, 0x89, /* 0x88-0x8B */ + 0xF9, 0x8A, 0xF9, 0x8B, 0xF9, 0x8C, 0xF9, 0x8D, /* 0x8C-0x8F */ + 0xF9, 0x8E, 0xF9, 0x8F, 0xF9, 0x90, 0xF9, 0x91, /* 0x90-0x93 */ + 0xF9, 0x92, 0xF9, 0x93, 0xF9, 0x94, 0xF9, 0x95, /* 0x94-0x97 */ + 0xF9, 0x96, 0xF9, 0x97, 0xF9, 0x98, 0xF9, 0x99, /* 0x98-0x9B */ + 0xF9, 0x9A, 0xF9, 0x9B, 0xF9, 0x9C, 0xF9, 0x9D, /* 0x9C-0x9F */ + 0xF9, 0x9E, 0xF9, 0x9F, 0xF9, 0xA0, 0xFA, 0x40, /* 0xA0-0xA3 */ + 0xFA, 0x41, 0xFA, 0x42, 0xFA, 0x43, 0xFA, 0x44, /* 0xA4-0xA7 */ + 0xFA, 0x45, 0xFA, 0x46, 0xFA, 0x47, 0xFA, 0x48, /* 0xA8-0xAB */ + 0xFA, 0x49, 0xFA, 0x4A, 0xFA, 0x4B, 0xFA, 0x4C, /* 0xAC-0xAF */ + 0xFA, 0x4D, 0xFA, 0x4E, 0xFA, 0x4F, 0xFA, 0x50, /* 0xB0-0xB3 */ + 0xFA, 0x51, 0xFA, 0x52, 0xFA, 0x53, 0xFA, 0x54, /* 0xB4-0xB7 */ + 0xFA, 0x55, 0xFA, 0x56, 0xFA, 0x57, 0xFA, 0x58, /* 0xB8-0xBB */ + 0xFA, 0x59, 0xFA, 0x5A, 0xFA, 0x5B, 0xFA, 0x5C, /* 0xBC-0xBF */ + 0xFA, 0x5D, 0xFA, 0x5E, 0xFA, 0x5F, 0xFA, 0x60, /* 0xC0-0xC3 */ + 0xFA, 0x61, 0xFA, 0x62, 0xFA, 0x63, 0xFA, 0x64, /* 0xC4-0xC7 */ + 0xFA, 0x65, 0xFA, 0x66, 0xFA, 0x67, 0xFA, 0x68, /* 0xC8-0xCB */ + 0xFA, 0x69, 0xFA, 0x6A, 0xFA, 0x6B, 0xFA, 0x6C, /* 0xCC-0xCF */ + 0xFA, 0x6D, 0xFA, 0x6E, 0xFA, 0x6F, 0xFA, 0x70, /* 0xD0-0xD3 */ + 0xFA, 0x71, 0xFA, 0x72, 0xFA, 0x73, 0xFA, 0x74, /* 0xD4-0xD7 */ + 0xFA, 0x75, 0xFA, 0x76, 0xFA, 0x77, 0xFA, 0x78, /* 0xD8-0xDB */ + 0xFA, 0x79, 0xFA, 0x7A, 0xFA, 0x7B, 0xFA, 0x7C, /* 0xDC-0xDF */ + 0xFA, 0x7D, 0xFA, 0x7E, 0xFA, 0x80, 0xFA, 0x81, /* 0xE0-0xE3 */ + 0xFA, 0x82, 0xFA, 0x83, 0xFA, 0x84, 0xFA, 0x85, /* 0xE4-0xE7 */ + 0xFA, 0x86, 0xFA, 0x87, 0xFA, 0x88, 0xFA, 0x89, /* 0xE8-0xEB */ + 0xFA, 0x8A, 0xFA, 0x8B, 0xFA, 0x8C, 0xFA, 0x8D, /* 0xEC-0xEF */ + 0xFA, 0x8E, 0xFA, 0x8F, 0xFA, 0x90, 0xFA, 0x91, /* 0xF0-0xF3 */ + 0xFA, 0x92, 0xFA, 0x93, 0xFA, 0x94, 0xFA, 0x95, /* 0xF4-0xF7 */ + 0xFA, 0x96, 0xFA, 0x97, 0xFA, 0x98, 0xFA, 0x99, /* 0xF8-0xFB */ + 0xFA, 0x9A, 0xFA, 0x9B, 0xFA, 0x9C, 0xFA, 0x9D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0xFA, 0x9E, 0xFA, 0x9F, 0xFA, 0xA0, 0xFB, 0x40, /* 0x00-0x03 */ + 0xFB, 0x41, 0xFB, 0x42, 0xFB, 0x43, 0xFB, 0x44, /* 0x04-0x07 */ + 0xFB, 0x45, 0xFB, 0x46, 0xFB, 0x47, 0xFB, 0x48, /* 0x08-0x0B */ + 0xFB, 0x49, 0xFB, 0x4A, 0xFB, 0x4B, 0xFB, 0x4C, /* 0x0C-0x0F */ + 0xFB, 0x4D, 0xFB, 0x4E, 0xFB, 0x4F, 0xFB, 0x50, /* 0x10-0x13 */ + 0xFB, 0x51, 0xFB, 0x52, 0xFB, 0x53, 0xFB, 0x54, /* 0x14-0x17 */ + 0xFB, 0x55, 0xFB, 0x56, 0xFB, 0x57, 0xFB, 0x58, /* 0x18-0x1B */ + 0xFB, 0x59, 0xFB, 0x5A, 0xFB, 0x5B, 0xC4, 0xF1, /* 0x1C-0x1F */ + 0xF0, 0xAF, 0xBC, 0xA6, 0xF0, 0xB0, 0xC3, 0xF9, /* 0x20-0x23 */ + 0xFB, 0x5C, 0xC5, 0xB8, 0xD1, 0xBB, 0xFB, 0x5D, /* 0x24-0x27 */ + 0xF0, 0xB1, 0xF0, 0xB2, 0xF0, 0xB3, 0xF0, 0xB4, /* 0x28-0x2B */ + 0xF0, 0xB5, 0xD1, 0xBC, 0xFB, 0x5E, 0xD1, 0xEC, /* 0x2C-0x2F */ + 0xFB, 0x5F, 0xF0, 0xB7, 0xF0, 0xB6, 0xD4, 0xA7, /* 0x30-0x33 */ + 0xFB, 0x60, 0xCD, 0xD2, 0xF0, 0xB8, 0xF0, 0xBA, /* 0x34-0x37 */ + 0xF0, 0xB9, 0xF0, 0xBB, 0xF0, 0xBC, 0xFB, 0x61, /* 0x38-0x3B */ + 0xFB, 0x62, 0xB8, 0xEB, 0xF0, 0xBD, 0xBA, 0xE8, /* 0x3C-0x3F */ + 0xFB, 0x63, 0xF0, 0xBE, 0xF0, 0xBF, 0xBE, 0xE9, /* 0x40-0x43 */ + 0xF0, 0xC0, 0xB6, 0xEC, 0xF0, 0xC1, 0xF0, 0xC2, /* 0x44-0x47 */ + 0xF0, 0xC3, 0xF0, 0xC4, 0xC8, 0xB5, 0xF0, 0xC5, /* 0x48-0x4B */ + 0xF0, 0xC6, 0xFB, 0x64, 0xF0, 0xC7, 0xC5, 0xF4, /* 0x4C-0x4F */ + 0xFB, 0x65, 0xF0, 0xC8, 0xFB, 0x66, 0xFB, 0x67, /* 0x50-0x53 */ + 0xFB, 0x68, 0xF0, 0xC9, 0xFB, 0x69, 0xF0, 0xCA, /* 0x54-0x57 */ + 0xF7, 0xBD, 0xFB, 0x6A, 0xF0, 0xCB, 0xF0, 0xCC, /* 0x58-0x5B */ + 0xF0, 0xCD, 0xFB, 0x6B, 0xF0, 0xCE, 0xFB, 0x6C, /* 0x5C-0x5F */ + 0xFB, 0x6D, 0xFB, 0x6E, 0xFB, 0x6F, 0xF0, 0xCF, /* 0x60-0x63 */ + 0xBA, 0xD7, 0xFB, 0x70, 0xF0, 0xD0, 0xF0, 0xD1, /* 0x64-0x67 */ + 0xF0, 0xD2, 0xF0, 0xD3, 0xF0, 0xD4, 0xF0, 0xD5, /* 0x68-0x6B */ + 0xF0, 0xD6, 0xF0, 0xD8, 0xFB, 0x71, 0xFB, 0x72, /* 0x6C-0x6F */ + 0xD3, 0xA5, 0xF0, 0xD7, 0xFB, 0x73, 0xF0, 0xD9, /* 0x70-0x73 */ + 0xFB, 0x74, 0xFB, 0x75, 0xFB, 0x76, 0xFB, 0x77, /* 0x74-0x77 */ + 0xFB, 0x78, 0xFB, 0x79, 0xFB, 0x7A, 0xFB, 0x7B, /* 0x78-0x7B */ + 0xFB, 0x7C, 0xFB, 0x7D, 0xF5, 0xBA, 0xC2, 0xB9, /* 0x7C-0x7F */ + + 0xFB, 0x7E, 0xFB, 0x80, 0xF7, 0xE4, 0xFB, 0x81, /* 0x80-0x83 */ + 0xFB, 0x82, 0xFB, 0x83, 0xFB, 0x84, 0xF7, 0xE5, /* 0x84-0x87 */ + 0xF7, 0xE6, 0xFB, 0x85, 0xFB, 0x86, 0xF7, 0xE7, /* 0x88-0x8B */ + 0xFB, 0x87, 0xFB, 0x88, 0xFB, 0x89, 0xFB, 0x8A, /* 0x8C-0x8F */ + 0xFB, 0x8B, 0xFB, 0x8C, 0xF7, 0xE8, 0xC2, 0xB4, /* 0x90-0x93 */ + 0xFB, 0x8D, 0xFB, 0x8E, 0xFB, 0x8F, 0xFB, 0x90, /* 0x94-0x97 */ + 0xFB, 0x91, 0xFB, 0x92, 0xFB, 0x93, 0xFB, 0x94, /* 0x98-0x9B */ + 0xFB, 0x95, 0xF7, 0xEA, 0xFB, 0x96, 0xF7, 0xEB, /* 0x9C-0x9F */ + 0xFB, 0x97, 0xFB, 0x98, 0xFB, 0x99, 0xFB, 0x9A, /* 0xA0-0xA3 */ + 0xFB, 0x9B, 0xFB, 0x9C, 0xC2, 0xF3, 0xFB, 0x9D, /* 0xA4-0xA7 */ + 0xFB, 0x9E, 0xFB, 0x9F, 0xFB, 0xA0, 0xFC, 0x40, /* 0xA8-0xAB */ + 0xFC, 0x41, 0xFC, 0x42, 0xFC, 0x43, 0xFC, 0x44, /* 0xAC-0xAF */ + 0xFC, 0x45, 0xFC, 0x46, 0xFC, 0x47, 0xFC, 0x48, /* 0xB0-0xB3 */ + 0xF4, 0xF0, 0xFC, 0x49, 0xFC, 0x4A, 0xFC, 0x4B, /* 0xB4-0xB7 */ + 0xF4, 0xEF, 0xFC, 0x4C, 0xFC, 0x4D, 0xC2, 0xE9, /* 0xB8-0xBB */ + 0xFC, 0x4E, 0xF7, 0xE1, 0xF7, 0xE2, 0xFC, 0x4F, /* 0xBC-0xBF */ + 0xFC, 0x50, 0xFC, 0x51, 0xFC, 0x52, 0xFC, 0x53, /* 0xC0-0xC3 */ + 0xBB, 0xC6, 0xFC, 0x54, 0xFC, 0x55, 0xFC, 0x56, /* 0xC4-0xC7 */ + 0xFC, 0x57, 0xD9, 0xE4, 0xFC, 0x58, 0xFC, 0x59, /* 0xC8-0xCB */ + 0xFC, 0x5A, 0xCA, 0xF2, 0xC0, 0xE8, 0xF0, 0xA4, /* 0xCC-0xCF */ + 0xFC, 0x5B, 0xBA, 0xDA, 0xFC, 0x5C, 0xFC, 0x5D, /* 0xD0-0xD3 */ + 0xC7, 0xAD, 0xFC, 0x5E, 0xFC, 0x5F, 0xFC, 0x60, /* 0xD4-0xD7 */ + 0xC4, 0xAC, 0xFC, 0x61, 0xFC, 0x62, 0xF7, 0xEC, /* 0xD8-0xDB */ + 0xF7, 0xED, 0xF7, 0xEE, 0xFC, 0x63, 0xF7, 0xF0, /* 0xDC-0xDF */ + 0xF7, 0xEF, 0xFC, 0x64, 0xF7, 0xF1, 0xFC, 0x65, /* 0xE0-0xE3 */ + 0xFC, 0x66, 0xF7, 0xF4, 0xFC, 0x67, 0xF7, 0xF3, /* 0xE4-0xE7 */ + 0xFC, 0x68, 0xF7, 0xF2, 0xF7, 0xF5, 0xFC, 0x69, /* 0xE8-0xEB */ + 0xFC, 0x6A, 0xFC, 0x6B, 0xFC, 0x6C, 0xF7, 0xF6, /* 0xEC-0xEF */ + 0xFC, 0x6D, 0xFC, 0x6E, 0xFC, 0x6F, 0xFC, 0x70, /* 0xF0-0xF3 */ + 0xFC, 0x71, 0xFC, 0x72, 0xFC, 0x73, 0xFC, 0x74, /* 0xF4-0xF7 */ + 0xFC, 0x75, 0xED, 0xE9, 0xFC, 0x76, 0xED, 0xEA, /* 0xF8-0xFB */ + 0xED, 0xEB, 0xFC, 0x77, 0xF6, 0xBC, 0xFC, 0x78, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0xFC, 0x79, 0xFC, 0x7A, 0xFC, 0x7B, 0xFC, 0x7C, /* 0x00-0x03 */ + 0xFC, 0x7D, 0xFC, 0x7E, 0xFC, 0x80, 0xFC, 0x81, /* 0x04-0x07 */ + 0xFC, 0x82, 0xFC, 0x83, 0xFC, 0x84, 0xF6, 0xBD, /* 0x08-0x0B */ + 0xFC, 0x85, 0xF6, 0xBE, 0xB6, 0xA6, 0xFC, 0x86, /* 0x0C-0x0F */ + 0xD8, 0xBE, 0xFC, 0x87, 0xFC, 0x88, 0xB9, 0xC4, /* 0x10-0x13 */ + 0xFC, 0x89, 0xFC, 0x8A, 0xFC, 0x8B, 0xD8, 0xBB, /* 0x14-0x17 */ + 0xFC, 0x8C, 0xDC, 0xB1, 0xFC, 0x8D, 0xFC, 0x8E, /* 0x18-0x1B */ + 0xFC, 0x8F, 0xFC, 0x90, 0xFC, 0x91, 0xFC, 0x92, /* 0x1C-0x1F */ + 0xCA, 0xF3, 0xFC, 0x93, 0xF7, 0xF7, 0xFC, 0x94, /* 0x20-0x23 */ + 0xFC, 0x95, 0xFC, 0x96, 0xFC, 0x97, 0xFC, 0x98, /* 0x24-0x27 */ + 0xFC, 0x99, 0xFC, 0x9A, 0xFC, 0x9B, 0xFC, 0x9C, /* 0x28-0x2B */ + 0xF7, 0xF8, 0xFC, 0x9D, 0xFC, 0x9E, 0xF7, 0xF9, /* 0x2C-0x2F */ + 0xFC, 0x9F, 0xFC, 0xA0, 0xFD, 0x40, 0xFD, 0x41, /* 0x30-0x33 */ + 0xFD, 0x42, 0xFD, 0x43, 0xFD, 0x44, 0xF7, 0xFB, /* 0x34-0x37 */ + 0xFD, 0x45, 0xF7, 0xFA, 0xFD, 0x46, 0xB1, 0xC7, /* 0x38-0x3B */ + 0xFD, 0x47, 0xF7, 0xFC, 0xF7, 0xFD, 0xFD, 0x48, /* 0x3C-0x3F */ + 0xFD, 0x49, 0xFD, 0x4A, 0xFD, 0x4B, 0xFD, 0x4C, /* 0x40-0x43 */ + 0xF7, 0xFE, 0xFD, 0x4D, 0xFD, 0x4E, 0xFD, 0x4F, /* 0x44-0x47 */ + 0xFD, 0x50, 0xFD, 0x51, 0xFD, 0x52, 0xFD, 0x53, /* 0x48-0x4B */ + 0xFD, 0x54, 0xFD, 0x55, 0xFD, 0x56, 0xFD, 0x57, /* 0x4C-0x4F */ + 0xC6, 0xEB, 0xEC, 0xB4, 0xFD, 0x58, 0xFD, 0x59, /* 0x50-0x53 */ + 0xFD, 0x5A, 0xFD, 0x5B, 0xFD, 0x5C, 0xFD, 0x5D, /* 0x54-0x57 */ + 0xFD, 0x5E, 0xFD, 0x5F, 0xFD, 0x60, 0xFD, 0x61, /* 0x58-0x5B */ + 0xFD, 0x62, 0xFD, 0x63, 0xFD, 0x64, 0xFD, 0x65, /* 0x5C-0x5F */ + 0xFD, 0x66, 0xFD, 0x67, 0xFD, 0x68, 0xFD, 0x69, /* 0x60-0x63 */ + 0xFD, 0x6A, 0xFD, 0x6B, 0xFD, 0x6C, 0xFD, 0x6D, /* 0x64-0x67 */ + 0xFD, 0x6E, 0xFD, 0x6F, 0xFD, 0x70, 0xFD, 0x71, /* 0x68-0x6B */ + 0xFD, 0x72, 0xFD, 0x73, 0xFD, 0x74, 0xFD, 0x75, /* 0x6C-0x6F */ + 0xFD, 0x76, 0xFD, 0x77, 0xFD, 0x78, 0xFD, 0x79, /* 0x70-0x73 */ + 0xFD, 0x7A, 0xFD, 0x7B, 0xFD, 0x7C, 0xFD, 0x7D, /* 0x74-0x77 */ + 0xFD, 0x7E, 0xFD, 0x80, 0xFD, 0x81, 0xFD, 0x82, /* 0x78-0x7B */ + 0xFD, 0x83, 0xFD, 0x84, 0xFD, 0x85, 0xB3, 0xDD, /* 0x7C-0x7F */ + + 0xF6, 0xB3, 0xFD, 0x86, 0xFD, 0x87, 0xF6, 0xB4, /* 0x80-0x83 */ + 0xC1, 0xE4, 0xF6, 0xB5, 0xF6, 0xB6, 0xF6, 0xB7, /* 0x84-0x87 */ + 0xF6, 0xB8, 0xF6, 0xB9, 0xF6, 0xBA, 0xC8, 0xA3, /* 0x88-0x8B */ + 0xF6, 0xBB, 0xFD, 0x88, 0xFD, 0x89, 0xFD, 0x8A, /* 0x8C-0x8F */ + 0xFD, 0x8B, 0xFD, 0x8C, 0xFD, 0x8D, 0xFD, 0x8E, /* 0x90-0x93 */ + 0xFD, 0x8F, 0xFD, 0x90, 0xFD, 0x91, 0xFD, 0x92, /* 0x94-0x97 */ + 0xFD, 0x93, 0xC1, 0xFA, 0xB9, 0xA8, 0xED, 0xE8, /* 0x98-0x9B */ + 0xFD, 0x94, 0xFD, 0x95, 0xFD, 0x96, 0xB9, 0xEA, /* 0x9C-0x9F */ + 0xD9, 0xDF, 0xFD, 0x97, 0xFD, 0x98, 0xFD, 0x99, /* 0xA0-0xA3 */ + 0xFD, 0x9A, 0xFD, 0x9B, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ +}; + +static unsigned char u2c_DC[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ +}; + +static unsigned char u2c_F9[512] = { + 0xD8, 0x4D, 0xB8, 0xFC, 0xDC, 0x87, 0xD9, 0x5A, /* 0x00-0x03 */ + 0xBB, 0xAC, 0xB4, 0xAE, 0xBE, 0xE4, 0xFD, 0x94, /* 0x04-0x07 */ + 0xFD, 0x94, 0xC6, 0xF5, 0xBD, 0xF0, 0xC0, 0xAE, /* 0x08-0x0B */ + 0xC4, 0xCE, 0x91, 0xD0, 0xB0, 0x5D, 0xC1, 0x5F, /* 0x0C-0x0F */ + 0xCC, 0x7D, 0xC2, 0xDD, 0xC2, 0xE3, 0xDF, 0x89, /* 0x10-0x13 */ + 0x98, 0xB7, 0xC2, 0xE5, 0xC0, 0xD3, 0xE7, 0xF3, /* 0x14-0x17 */ + 0xC2, 0xE4, 0xC0, 0xD2, 0xF1, 0x98, 0x81, 0x79, /* 0x18-0x1B */ + 0xC2, 0xD1, 0x99, 0xDA, 0xA0, 0x80, 0xCC, 0x6D, /* 0x1C-0x1F */ + 0xFB, 0x5B, 0x8D, 0xB9, 0x9E, 0x45, 0xCB, 0x7B, /* 0x20-0x23 */ + 0xD2, 0x68, 0xC0, 0xAD, 0xC5, 0x44, 0xCF, 0x9E, /* 0x24-0x27 */ + 0xC0, 0xC8, 0xC0, 0xCA, 0xC0, 0xCB, 0xC0, 0xC7, /* 0x28-0x2B */ + 0xFD, 0x9C, 0x81, 0xED, 0xC0, 0xE4, 0x84, 0xDA, /* 0x2C-0x2F */ + 0x93, 0xEF, 0x99, 0xA9, 0xA0, 0x74, 0xB1, 0x52, /* 0x30-0x33 */ + 0xC0, 0xCF, 0xCC, 0x4A, 0xCC, 0x94, 0xC2, 0xB7, /* 0x34-0x37 */ + 0xC2, 0xB6, 0xF4, 0x94, 0xFA, 0x98, 0xC2, 0xB5, /* 0x38-0x3B */ + 0xB5, 0x93, 0xBE, 0x47, 0xC7, 0x8A, 0xE4, 0x9B, /* 0x3C-0x3F */ + 0xC2, 0xB9, 0xD5, 0x93, 0x89, 0xC5, 0xC5, 0xAA, /* 0x40-0x43 */ + 0xBB, 0x5C, 0xC3, 0x40, 0xC0, 0xCE, 0xC0, 0xDA, /* 0x44-0x47 */ + 0xD9, 0x54, 0xC0, 0xD7, 0x89, 0xBE, 0x8C, 0xD2, /* 0x48-0x4B */ + 0x98, 0xC7, 0x9C, 0x49, 0xC2, 0xA9, 0xC0, 0xDB, /* 0x4C-0x4F */ + 0xBF, 0x7C, 0xC2, 0xAA, 0xC0, 0xD5, 0xC0, 0xDF, /* 0x50-0x53 */ + 0x84, 0x43, 0xC1, 0xE8, 0xB6, 0xA0, 0xBE, 0x63, /* 0x54-0x57 */ + 0xC1, 0xE2, 0xC1, 0xEA, 0xD7, 0x78, 0x92, 0x82, /* 0x58-0x5B */ + 0x98, 0xB7, 0xD6, 0x5A, 0xB5, 0xA4, 0x8C, 0x8E, /* 0x5C-0x5F */ + 0xC5, 0xAD, 0xC2, 0xCA, 0xAE, 0x90, 0xB1, 0xB1, /* 0x60-0x63 */ + 0xB4, 0x91, 0xB1, 0xE3, 0x8F, 0xCD, 0xB2, 0xBB, /* 0x64-0x67 */ + 0xC3, 0xDA, 0x94, 0xB5, 0xCB, 0xF7, 0x85, 0xA2, /* 0x68-0x6B */ + 0xC8, 0xFB, 0xCA, 0xA1, 0xC8, 0x7E, 0xD5, 0x66, /* 0x6C-0x6F */ + 0x9A, 0xA2, 0xB3, 0xBD, 0xC9, 0xF2, 0xCA, 0xB0, /* 0x70-0x73 */ + 0xC8, 0xF4, 0xC2, 0xD3, 0xC2, 0xD4, 0xC1, 0xC1, /* 0x74-0x77 */ + 0x83, 0xC9, 0xFD, 0x9D, 0xC1, 0xBA, 0xBC, 0x5A, /* 0x78-0x7B */ + 0xC1, 0xBC, 0xD5, 0x8F, 0xC1, 0xBF, 0x84, 0xEE, /* 0x7C-0x7F */ + + 0x85, 0xCE, 0xC5, 0xAE, 0x8F, 0x5D, 0xC2, 0xC3, /* 0x80-0x83 */ + 0x9E, 0x56, 0xB5, 0x5A, 0xE9, 0x82, 0xF3, 0x50, /* 0x84-0x87 */ + 0xFB, 0x90, 0xC0, 0xE8, 0xC1, 0xA6, 0x95, 0xD1, /* 0x88-0x8B */ + 0x9A, 0x76, 0xDE, 0x5D, 0xC4, 0xEA, 0x91, 0x7A, /* 0x8C-0x8F */ + 0x91, 0xD9, 0x93, 0xD3, 0x9D, 0x69, 0x9F, 0x92, /* 0x90-0x93 */ + 0xAD, 0x49, 0xFD, 0x9E, 0xBE, 0x9A, 0xC2, 0x93, /* 0x94-0x97 */ + 0xDD, 0x82, 0xC9, 0x8F, 0xDF, 0x42, 0xE5, 0x80, /* 0x98-0x9B */ + 0xC1, 0xD0, 0xC1, 0xD3, 0xD1, 0xCA, 0xC1, 0xD2, /* 0x9C-0x9F */ + 0xC1, 0xD1, 0xD5, 0x66, 0xC1, 0xAE, 0xC4, 0xEE, /* 0xA0-0xA3 */ + 0xC4, 0xED, 0x9A, 0x9A, 0xBA, 0x9F, 0xAB, 0x43, /* 0xA4-0xA7 */ + 0xC1, 0xEE, 0xE0, 0xF2, 0x8C, 0x8E, 0x8E, 0x58, /* 0xA8-0xAB */ + 0xC1, 0xAF, 0xC1, 0xE1, 0xAC, 0x93, 0xC1, 0xE7, /* 0xAC-0xAF */ + 0xF1, 0xF6, 0xE2, 0x8F, 0xC1, 0xE3, 0xEC, 0x60, /* 0xB0-0xB3 */ + 0xEE, 0x49, 0xC0, 0xFD, 0xB6, 0x59, 0xF5, 0xB7, /* 0xB4-0xB7 */ + 0xEB, 0x60, 0x90, 0xBA, 0xC1, 0xCB, 0xC1, 0xC5, /* 0xB8-0xBB */ + 0xE5, 0xBC, 0xC4, 0xF2, 0xC1, 0xCF, 0x98, 0xB7, /* 0xBC-0xBF */ + 0xC1, 0xC7, 0xAF, 0x9F, 0xDE, 0xA4, 0xDF, 0x7C, /* 0xC0-0xC3 */ + 0xFD, 0x88, 0x95, 0x9E, 0xC8, 0xEE, 0x84, 0xA2, /* 0xC4-0xC7 */ + 0x96, 0x83, 0xC1, 0xF8, 0xC1, 0xF7, 0xC1, 0xEF, /* 0xC8-0xCB */ + 0xC1, 0xF0, 0xC1, 0xF4, 0xC1, 0xF2, 0xBC, 0x7E, /* 0xCC-0xCF */ + 0xEE, 0x90, 0xC1, 0xF9, 0xC2, 0xBE, 0xEA, 0x91, /* 0xD0-0xD3 */ + 0x82, 0x90, 0x8D, 0x91, 0x9C, 0x53, 0xDD, 0x86, /* 0xD4-0xD7 */ + 0xC2, 0xC9, 0x90, 0xFC, 0xC0, 0xF5, 0xC2, 0xCA, /* 0xD8-0xDB */ + 0xC2, 0xA1, 0xC0, 0xFB, 0xC0, 0xF4, 0xC2, 0xC4, /* 0xDC-0xDF */ + 0xD2, 0xD7, 0xC0, 0xEE, 0xC0, 0xE6, 0xC4, 0xE0, /* 0xE0-0xE3 */ + 0xC0, 0xED, 0xC1, 0xA1, 0xEE, 0xBE, 0xFD, 0x9F, /* 0xE4-0xE7 */ + 0xD1, 0x65, 0xC0, 0xEF, 0xEB, 0x78, 0xC4, 0xE4, /* 0xE8-0xEB */ + 0xC4, 0xE7, 0xC1, 0xDF, 0x9F, 0xFB, 0xAD, 0x55, /* 0xEC-0xEF */ + 0xCC, 0x41, 0xFD, 0xA0, 0xF7, 0x5B, 0xF7, 0xEB, /* 0xF0-0xF3 */ + 0xC1, 0xD6, 0xC1, 0xDC, 0xC5, 0x52, 0xC1, 0xA2, /* 0xF4-0xF7 */ + 0xF3, 0xD2, 0xC1, 0xA3, 0xA0, 0xEE, 0xD6, 0xCB, /* 0xF8-0xFB */ + 0xD7, 0x52, 0xCA, 0xB2, 0xB2, 0xE8, 0xB4, 0xCC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0xC7, 0xD0, 0xB6, 0xC8, 0xCD, 0xD8, 0xCC, 0xC7, /* 0x00-0x03 */ + 0xD5, 0xAC, 0xB6, 0xB4, 0xB1, 0xA9, 0xDD, 0x97, /* 0x04-0x07 */ + 0xD0, 0xD0, 0xBD, 0xB5, 0xD2, 0x8A, 0xC0, 0xAA, /* 0x08-0x0B */ + 0xFE, 0x40, 0xFE, 0x41, 0xFE, 0x42, 0xFE, 0x43, /* 0x0C-0x0F */ + 0x89, 0x56, 0xFE, 0x44, 0xC7, 0xE7, 0xFE, 0x45, /* 0x10-0x13 */ + 0xFE, 0x46, 0x84, 0x44, 0xD8, 0x69, 0xD2, 0xE6, /* 0x14-0x17 */ + 0xFE, 0x47, 0xC9, 0xF1, 0xCF, 0xE9, 0xB8, 0xA3, /* 0x18-0x1B */ + 0xBE, 0xB8, 0xBE, 0xAB, 0xD3, 0xF0, 0xFE, 0x48, /* 0x1C-0x1F */ + 0xFE, 0x49, 0xFE, 0x4A, 0xD6, 0x54, 0xFE, 0x4B, /* 0x20-0x23 */ + 0xFE, 0x4C, 0xD2, 0xDD, 0xB6, 0xBC, 0xFE, 0x4D, /* 0x24-0x27 */ + 0xFE, 0x4E, 0xFE, 0x4F, 0xEF, 0x88, 0xEF, 0x95, /* 0x28-0x2B */ + 0xF0, 0x5E, 0xFA, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ +}; + +static unsigned char u2c_FE[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA9, 0x55, 0xA6, 0xF2, 0x00, 0x00, 0xA6, 0xF4, /* 0x30-0x33 */ + 0xA6, 0xF5, 0xA6, 0xE0, 0xA6, 0xE1, 0xA6, 0xF0, /* 0x34-0x37 */ + 0xA6, 0xF1, 0xA6, 0xE2, 0xA6, 0xE3, 0xA6, 0xEE, /* 0x38-0x3B */ + 0xA6, 0xEF, 0xA6, 0xE6, 0xA6, 0xE7, 0xA6, 0xE4, /* 0x3C-0x3F */ + 0xA6, 0xE5, 0xA6, 0xE8, 0xA6, 0xE9, 0xA6, 0xEA, /* 0x40-0x43 */ + 0xA6, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xA9, 0x68, 0xA9, 0x69, 0xA9, 0x6A, /* 0x48-0x4B */ + 0xA9, 0x6B, 0xA9, 0x6C, 0xA9, 0x6D, 0xA9, 0x6E, /* 0x4C-0x4F */ + 0xA9, 0x6F, 0xA9, 0x70, 0xA9, 0x71, 0x00, 0x00, /* 0x50-0x53 */ + 0xA9, 0x72, 0xA9, 0x73, 0xA9, 0x74, 0xA9, 0x75, /* 0x54-0x57 */ + 0x00, 0x00, 0xA9, 0x76, 0xA9, 0x77, 0xA9, 0x78, /* 0x58-0x5B */ + 0xA9, 0x79, 0xA9, 0x7A, 0xA9, 0x7B, 0xA9, 0x7C, /* 0x5C-0x5F */ + 0xA9, 0x7D, 0xA9, 0x7E, 0xA9, 0x80, 0xA9, 0x81, /* 0x60-0x63 */ + 0xA9, 0x82, 0xA9, 0x83, 0xA9, 0x84, 0x00, 0x00, /* 0x64-0x67 */ + 0xA9, 0x85, 0xA9, 0x86, 0xA9, 0x87, 0xA9, 0x88, /* 0x68-0x6B */ +}; + +static unsigned char u2c_FF[512] = { + 0x00, 0x00, 0xA3, 0xA1, 0xA3, 0xA2, 0xA3, 0xA3, /* 0x00-0x03 */ + 0xA1, 0xE7, 0xA3, 0xA5, 0xA3, 0xA6, 0xA3, 0xA7, /* 0x04-0x07 */ + 0xA3, 0xA8, 0xA3, 0xA9, 0xA3, 0xAA, 0xA3, 0xAB, /* 0x08-0x0B */ + 0xA3, 0xAC, 0xA3, 0xAD, 0xA3, 0xAE, 0xA3, 0xAF, /* 0x0C-0x0F */ + 0xA3, 0xB0, 0xA3, 0xB1, 0xA3, 0xB2, 0xA3, 0xB3, /* 0x10-0x13 */ + 0xA3, 0xB4, 0xA3, 0xB5, 0xA3, 0xB6, 0xA3, 0xB7, /* 0x14-0x17 */ + 0xA3, 0xB8, 0xA3, 0xB9, 0xA3, 0xBA, 0xA3, 0xBB, /* 0x18-0x1B */ + 0xA3, 0xBC, 0xA3, 0xBD, 0xA3, 0xBE, 0xA3, 0xBF, /* 0x1C-0x1F */ + 0xA3, 0xC0, 0xA3, 0xC1, 0xA3, 0xC2, 0xA3, 0xC3, /* 0x20-0x23 */ + 0xA3, 0xC4, 0xA3, 0xC5, 0xA3, 0xC6, 0xA3, 0xC7, /* 0x24-0x27 */ + 0xA3, 0xC8, 0xA3, 0xC9, 0xA3, 0xCA, 0xA3, 0xCB, /* 0x28-0x2B */ + 0xA3, 0xCC, 0xA3, 0xCD, 0xA3, 0xCE, 0xA3, 0xCF, /* 0x2C-0x2F */ + 0xA3, 0xD0, 0xA3, 0xD1, 0xA3, 0xD2, 0xA3, 0xD3, /* 0x30-0x33 */ + 0xA3, 0xD4, 0xA3, 0xD5, 0xA3, 0xD6, 0xA3, 0xD7, /* 0x34-0x37 */ + 0xA3, 0xD8, 0xA3, 0xD9, 0xA3, 0xDA, 0xA3, 0xDB, /* 0x38-0x3B */ + 0xA3, 0xDC, 0xA3, 0xDD, 0xA3, 0xDE, 0xA3, 0xDF, /* 0x3C-0x3F */ + 0xA3, 0xE0, 0xA3, 0xE1, 0xA3, 0xE2, 0xA3, 0xE3, /* 0x40-0x43 */ + 0xA3, 0xE4, 0xA3, 0xE5, 0xA3, 0xE6, 0xA3, 0xE7, /* 0x44-0x47 */ + 0xA3, 0xE8, 0xA3, 0xE9, 0xA3, 0xEA, 0xA3, 0xEB, /* 0x48-0x4B */ + 0xA3, 0xEC, 0xA3, 0xED, 0xA3, 0xEE, 0xA3, 0xEF, /* 0x4C-0x4F */ + 0xA3, 0xF0, 0xA3, 0xF1, 0xA3, 0xF2, 0xA3, 0xF3, /* 0x50-0x53 */ + 0xA3, 0xF4, 0xA3, 0xF5, 0xA3, 0xF6, 0xA3, 0xF7, /* 0x54-0x57 */ + 0xA3, 0xF8, 0xA3, 0xF9, 0xA3, 0xFA, 0xA3, 0xFB, /* 0x58-0x5B */ + 0xA3, 0xFC, 0xA3, 0xFD, 0xA1, 0xAB, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xA1, 0xE9, 0xA1, 0xEA, 0xA9, 0x56, 0xA3, 0xFE, /* 0xE0-0xE3 */ + 0xA9, 0x57, 0xA3, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, u2c_01, u2c_02, u2c_03, u2c_04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, u2c_24, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, u2c_31, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u2c_DC, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, u2c_FE, u2c_FF, }; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(const wchar_t uni, + unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni&0xFF; + unsigned char ch = (uni>>8)&0xFF; + int n; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + + uni2charset = page_uni2charset[ch]; + if (uni2charset) { + if (boundlen <= 1) + return -ENAMETOOLONG; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + if (out[0] == 0x00 && out[1] == 0x00) + return -EINVAL; + n = 2; + } else if (ch==0 && cl) { + out[0] = cl; + n = 1; + } + else + return -EINVAL; + + return n; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, + wchar_t *uni) +{ + unsigned char ch, cl; + wchar_t *charset2uni; + int n; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + if (boundlen == 1) { + *uni = rawstring[0]; + return 1; + } + + ch = rawstring[0]; + cl = rawstring[1]; + + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl) { + *uni = charset2uni[cl]; + if (*uni == 0x0000) + return -EINVAL; + n = 2; + } else{ + *uni = ch; + n = 1; + } + return n; +} + +static struct nls_table table = { + "cp936", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp936(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp936(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp936) +module_exit(exit_nls_cp936) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp949.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp9…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp949.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp949.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,13961 @@ +/* + * linux/fs/nls_cp949.c + * + * Charset cp949 translation tables. + * This translation table was generated automatically, the + * original table can be download from the Microsoft website. + * (
http://www.microsoft.com/typography/unicode/unicodecp.htm
) + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t c2u_81[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xAC02,0xAC03,0xAC05,0xAC06,0xAC0B,0xAC0C,0xAC0D,/* 0x40-0x47 */ + 0xAC0E,0xAC0F,0xAC18,0xAC1E,0xAC1F,0xAC21,0xAC22,0xAC23,/* 0x48-0x4F */ + 0xAC25,0xAC26,0xAC27,0xAC28,0xAC29,0xAC2A,0xAC2B,0xAC2E,/* 0x50-0x57 */ + 0xAC32,0xAC33,0xAC34,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xAC35,0xAC36,0xAC37,0xAC3A,0xAC3B,0xAC3D,0xAC3E,/* 0x60-0x67 */ + 0xAC3F,0xAC41,0xAC42,0xAC43,0xAC44,0xAC45,0xAC46,0xAC47,/* 0x68-0x6F */ + 0xAC48,0xAC49,0xAC4A,0xAC4C,0xAC4E,0xAC4F,0xAC50,0xAC51,/* 0x70-0x77 */ + 0xAC52,0xAC53,0xAC55,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xAC56,0xAC57,0xAC59,0xAC5A,0xAC5B,0xAC5D,0xAC5E,/* 0x80-0x87 */ + 0xAC5F,0xAC60,0xAC61,0xAC62,0xAC63,0xAC64,0xAC65,0xAC66,/* 0x88-0x8F */ + 0xAC67,0xAC68,0xAC69,0xAC6A,0xAC6B,0xAC6C,0xAC6D,0xAC6E,/* 0x90-0x97 */ + 0xAC6F,0xAC72,0xAC73,0xAC75,0xAC76,0xAC79,0xAC7B,0xAC7C,/* 0x98-0x9F */ + 0xAC7D,0xAC7E,0xAC7F,0xAC82,0xAC87,0xAC88,0xAC8D,0xAC8E,/* 0xA0-0xA7 */ + 0xAC8F,0xAC91,0xAC92,0xAC93,0xAC95,0xAC96,0xAC97,0xAC98,/* 0xA8-0xAF */ + 0xAC99,0xAC9A,0xAC9B,0xAC9E,0xACA2,0xACA3,0xACA4,0xACA5,/* 0xB0-0xB7 */ + 0xACA6,0xACA7,0xACAB,0xACAD,0xACAE,0xACB1,0xACB2,0xACB3,/* 0xB8-0xBF */ + 0xACB4,0xACB5,0xACB6,0xACB7,0xACBA,0xACBE,0xACBF,0xACC0,/* 0xC0-0xC7 */ + 0xACC2,0xACC3,0xACC5,0xACC6,0xACC7,0xACC9,0xACCA,0xACCB,/* 0xC8-0xCF */ + 0xACCD,0xACCE,0xACCF,0xACD0,0xACD1,0xACD2,0xACD3,0xACD4,/* 0xD0-0xD7 */ + 0xACD6,0xACD8,0xACD9,0xACDA,0xACDB,0xACDC,0xACDD,0xACDE,/* 0xD8-0xDF */ + 0xACDF,0xACE2,0xACE3,0xACE5,0xACE6,0xACE9,0xACEB,0xACED,/* 0xE0-0xE7 */ + 0xACEE,0xACF2,0xACF4,0xACF7,0xACF8,0xACF9,0xACFA,0xACFB,/* 0xE8-0xEF */ + 0xACFE,0xACFF,0xAD01,0xAD02,0xAD03,0xAD05,0xAD07,0xAD08,/* 0xF0-0xF7 */ + 0xAD09,0xAD0A,0xAD0B,0xAD0E,0xAD10,0xAD12,0xAD13,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_82[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xAD14,0xAD15,0xAD16,0xAD17,0xAD19,0xAD1A,0xAD1B,/* 0x40-0x47 */ + 0xAD1D,0xAD1E,0xAD1F,0xAD21,0xAD22,0xAD23,0xAD24,0xAD25,/* 0x48-0x4F */ + 0xAD26,0xAD27,0xAD28,0xAD2A,0xAD2B,0xAD2E,0xAD2F,0xAD30,/* 0x50-0x57 */ + 0xAD31,0xAD32,0xAD33,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xAD36,0xAD37,0xAD39,0xAD3A,0xAD3B,0xAD3D,0xAD3E,/* 0x60-0x67 */ + 0xAD3F,0xAD40,0xAD41,0xAD42,0xAD43,0xAD46,0xAD48,0xAD4A,/* 0x68-0x6F */ + 0xAD4B,0xAD4C,0xAD4D,0xAD4E,0xAD4F,0xAD51,0xAD52,0xAD53,/* 0x70-0x77 */ + 0xAD55,0xAD56,0xAD57,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xAD59,0xAD5A,0xAD5B,0xAD5C,0xAD5D,0xAD5E,0xAD5F,/* 0x80-0x87 */ + 0xAD60,0xAD62,0xAD64,0xAD65,0xAD66,0xAD67,0xAD68,0xAD69,/* 0x88-0x8F */ + 0xAD6A,0xAD6B,0xAD6E,0xAD6F,0xAD71,0xAD72,0xAD77,0xAD78,/* 0x90-0x97 */ + 0xAD79,0xAD7A,0xAD7E,0xAD80,0xAD83,0xAD84,0xAD85,0xAD86,/* 0x98-0x9F */ + 0xAD87,0xAD8A,0xAD8B,0xAD8D,0xAD8E,0xAD8F,0xAD91,0xAD92,/* 0xA0-0xA7 */ + 0xAD93,0xAD94,0xAD95,0xAD96,0xAD97,0xAD98,0xAD99,0xAD9A,/* 0xA8-0xAF */ + 0xAD9B,0xAD9E,0xAD9F,0xADA0,0xADA1,0xADA2,0xADA3,0xADA5,/* 0xB0-0xB7 */ + 0xADA6,0xADA7,0xADA8,0xADA9,0xADAA,0xADAB,0xADAC,0xADAD,/* 0xB8-0xBF */ + 0xADAE,0xADAF,0xADB0,0xADB1,0xADB2,0xADB3,0xADB4,0xADB5,/* 0xC0-0xC7 */ + 0xADB6,0xADB8,0xADB9,0xADBA,0xADBB,0xADBC,0xADBD,0xADBE,/* 0xC8-0xCF */ + 0xADBF,0xADC2,0xADC3,0xADC5,0xADC6,0xADC7,0xADC9,0xADCA,/* 0xD0-0xD7 */ + 0xADCB,0xADCC,0xADCD,0xADCE,0xADCF,0xADD2,0xADD4,0xADD5,/* 0xD8-0xDF */ + 0xADD6,0xADD7,0xADD8,0xADD9,0xADDA,0xADDB,0xADDD,0xADDE,/* 0xE0-0xE7 */ + 0xADDF,0xADE1,0xADE2,0xADE3,0xADE5,0xADE6,0xADE7,0xADE8,/* 0xE8-0xEF */ + 0xADE9,0xADEA,0xADEB,0xADEC,0xADED,0xADEE,0xADEF,0xADF0,/* 0xF0-0xF7 */ + 0xADF1,0xADF2,0xADF3,0xADF4,0xADF5,0xADF6,0xADF7,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_83[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xADFA,0xADFB,0xADFD,0xADFE,0xAE02,0xAE03,0xAE04,/* 0x40-0x47 */ + 0xAE05,0xAE06,0xAE07,0xAE0A,0xAE0C,0xAE0E,0xAE0F,0xAE10,/* 0x48-0x4F */ + 0xAE11,0xAE12,0xAE13,0xAE15,0xAE16,0xAE17,0xAE18,0xAE19,/* 0x50-0x57 */ + 0xAE1A,0xAE1B,0xAE1C,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xAE1D,0xAE1E,0xAE1F,0xAE20,0xAE21,0xAE22,0xAE23,/* 0x60-0x67 */ + 0xAE24,0xAE25,0xAE26,0xAE27,0xAE28,0xAE29,0xAE2A,0xAE2B,/* 0x68-0x6F */ + 0xAE2C,0xAE2D,0xAE2E,0xAE2F,0xAE32,0xAE33,0xAE35,0xAE36,/* 0x70-0x77 */ + 0xAE39,0xAE3B,0xAE3C,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xAE3D,0xAE3E,0xAE3F,0xAE42,0xAE44,0xAE47,0xAE48,/* 0x80-0x87 */ + 0xAE49,0xAE4B,0xAE4F,0xAE51,0xAE52,0xAE53,0xAE55,0xAE57,/* 0x88-0x8F */ + 0xAE58,0xAE59,0xAE5A,0xAE5B,0xAE5E,0xAE62,0xAE63,0xAE64,/* 0x90-0x97 */ + 0xAE66,0xAE67,0xAE6A,0xAE6B,0xAE6D,0xAE6E,0xAE6F,0xAE71,/* 0x98-0x9F */ + 0xAE72,0xAE73,0xAE74,0xAE75,0xAE76,0xAE77,0xAE7A,0xAE7E,/* 0xA0-0xA7 */ + 0xAE7F,0xAE80,0xAE81,0xAE82,0xAE83,0xAE86,0xAE87,0xAE88,/* 0xA8-0xAF */ + 0xAE89,0xAE8A,0xAE8B,0xAE8D,0xAE8E,0xAE8F,0xAE90,0xAE91,/* 0xB0-0xB7 */ + 0xAE92,0xAE93,0xAE94,0xAE95,0xAE96,0xAE97,0xAE98,0xAE99,/* 0xB8-0xBF */ + 0xAE9A,0xAE9B,0xAE9C,0xAE9D,0xAE9E,0xAE9F,0xAEA0,0xAEA1,/* 0xC0-0xC7 */ + 0xAEA2,0xAEA3,0xAEA4,0xAEA5,0xAEA6,0xAEA7,0xAEA8,0xAEA9,/* 0xC8-0xCF */ + 0xAEAA,0xAEAB,0xAEAC,0xAEAD,0xAEAE,0xAEAF,0xAEB0,0xAEB1,/* 0xD0-0xD7 */ + 0xAEB2,0xAEB3,0xAEB4,0xAEB5,0xAEB6,0xAEB7,0xAEB8,0xAEB9,/* 0xD8-0xDF */ + 0xAEBA,0xAEBB,0xAEBF,0xAEC1,0xAEC2,0xAEC3,0xAEC5,0xAEC6,/* 0xE0-0xE7 */ + 0xAEC7,0xAEC8,0xAEC9,0xAECA,0xAECB,0xAECE,0xAED2,0xAED3,/* 0xE8-0xEF */ + 0xAED4,0xAED5,0xAED6,0xAED7,0xAEDA,0xAEDB,0xAEDD,0xAEDE,/* 0xF0-0xF7 */ + 0xAEDF,0xAEE0,0xAEE1,0xAEE2,0xAEE3,0xAEE4,0xAEE5,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_84[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xAEE6,0xAEE7,0xAEE9,0xAEEA,0xAEEC,0xAEEE,0xAEEF,/* 0x40-0x47 */ + 0xAEF0,0xAEF1,0xAEF2,0xAEF3,0xAEF5,0xAEF6,0xAEF7,0xAEF9,/* 0x48-0x4F */ + 0xAEFA,0xAEFB,0xAEFD,0xAEFE,0xAEFF,0xAF00,0xAF01,0xAF02,/* 0x50-0x57 */ + 0xAF03,0xAF04,0xAF05,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xAF06,0xAF09,0xAF0A,0xAF0B,0xAF0C,0xAF0E,0xAF0F,/* 0x60-0x67 */ + 0xAF11,0xAF12,0xAF13,0xAF14,0xAF15,0xAF16,0xAF17,0xAF18,/* 0x68-0x6F */ + 0xAF19,0xAF1A,0xAF1B,0xAF1C,0xAF1D,0xAF1E,0xAF1F,0xAF20,/* 0x70-0x77 */ + 0xAF21,0xAF22,0xAF23,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xAF24,0xAF25,0xAF26,0xAF27,0xAF28,0xAF29,0xAF2A,/* 0x80-0x87 */ + 0xAF2B,0xAF2E,0xAF2F,0xAF31,0xAF33,0xAF35,0xAF36,0xAF37,/* 0x88-0x8F */ + 0xAF38,0xAF39,0xAF3A,0xAF3B,0xAF3E,0xAF40,0xAF44,0xAF45,/* 0x90-0x97 */ + 0xAF46,0xAF47,0xAF4A,0xAF4B,0xAF4C,0xAF4D,0xAF4E,0xAF4F,/* 0x98-0x9F */ + 0xAF51,0xAF52,0xAF53,0xAF54,0xAF55,0xAF56,0xAF57,0xAF58,/* 0xA0-0xA7 */ + 0xAF59,0xAF5A,0xAF5B,0xAF5E,0xAF5F,0xAF60,0xAF61,0xAF62,/* 0xA8-0xAF */ + 0xAF63,0xAF66,0xAF67,0xAF68,0xAF69,0xAF6A,0xAF6B,0xAF6C,/* 0xB0-0xB7 */ + 0xAF6D,0xAF6E,0xAF6F,0xAF70,0xAF71,0xAF72,0xAF73,0xAF74,/* 0xB8-0xBF */ + 0xAF75,0xAF76,0xAF77,0xAF78,0xAF7A,0xAF7B,0xAF7C,0xAF7D,/* 0xC0-0xC7 */ + 0xAF7E,0xAF7F,0xAF81,0xAF82,0xAF83,0xAF85,0xAF86,0xAF87,/* 0xC8-0xCF */ + 0xAF89,0xAF8A,0xAF8B,0xAF8C,0xAF8D,0xAF8E,0xAF8F,0xAF92,/* 0xD0-0xD7 */ + 0xAF93,0xAF94,0xAF96,0xAF97,0xAF98,0xAF99,0xAF9A,0xAF9B,/* 0xD8-0xDF */ + 0xAF9D,0xAF9E,0xAF9F,0xAFA0,0xAFA1,0xAFA2,0xAFA3,0xAFA4,/* 0xE0-0xE7 */ + 0xAFA5,0xAFA6,0xAFA7,0xAFA8,0xAFA9,0xAFAA,0xAFAB,0xAFAC,/* 0xE8-0xEF */ + 0xAFAD,0xAFAE,0xAFAF,0xAFB0,0xAFB1,0xAFB2,0xAFB3,0xAFB4,/* 0xF0-0xF7 */ + 0xAFB5,0xAFB6,0xAFB7,0xAFBA,0xAFBB,0xAFBD,0xAFBE,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_85[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xAFBF,0xAFC1,0xAFC2,0xAFC3,0xAFC4,0xAFC5,0xAFC6,/* 0x40-0x47 */ + 0xAFCA,0xAFCC,0xAFCF,0xAFD0,0xAFD1,0xAFD2,0xAFD3,0xAFD5,/* 0x48-0x4F */ + 0xAFD6,0xAFD7,0xAFD8,0xAFD9,0xAFDA,0xAFDB,0xAFDD,0xAFDE,/* 0x50-0x57 */ + 0xAFDF,0xAFE0,0xAFE1,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xAFE2,0xAFE3,0xAFE4,0xAFE5,0xAFE6,0xAFE7,0xAFEA,/* 0x60-0x67 */ + 0xAFEB,0xAFEC,0xAFED,0xAFEE,0xAFEF,0xAFF2,0xAFF3,0xAFF5,/* 0x68-0x6F */ + 0xAFF6,0xAFF7,0xAFF9,0xAFFA,0xAFFB,0xAFFC,0xAFFD,0xAFFE,/* 0x70-0x77 */ + 0xAFFF,0xB002,0xB003,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB005,0xB006,0xB007,0xB008,0xB009,0xB00A,0xB00B,/* 0x80-0x87 */ + 0xB00D,0xB00E,0xB00F,0xB011,0xB012,0xB013,0xB015,0xB016,/* 0x88-0x8F */ + 0xB017,0xB018,0xB019,0xB01A,0xB01B,0xB01E,0xB01F,0xB020,/* 0x90-0x97 */ + 0xB021,0xB022,0xB023,0xB024,0xB025,0xB026,0xB027,0xB029,/* 0x98-0x9F */ + 0xB02A,0xB02B,0xB02C,0xB02D,0xB02E,0xB02F,0xB030,0xB031,/* 0xA0-0xA7 */ + 0xB032,0xB033,0xB034,0xB035,0xB036,0xB037,0xB038,0xB039,/* 0xA8-0xAF */ + 0xB03A,0xB03B,0xB03C,0xB03D,0xB03E,0xB03F,0xB040,0xB041,/* 0xB0-0xB7 */ + 0xB042,0xB043,0xB046,0xB047,0xB049,0xB04B,0xB04D,0xB04F,/* 0xB8-0xBF */ + 0xB050,0xB051,0xB052,0xB056,0xB058,0xB05A,0xB05B,0xB05C,/* 0xC0-0xC7 */ + 0xB05E,0xB05F,0xB060,0xB061,0xB062,0xB063,0xB064,0xB065,/* 0xC8-0xCF */ + 0xB066,0xB067,0xB068,0xB069,0xB06A,0xB06B,0xB06C,0xB06D,/* 0xD0-0xD7 */ + 0xB06E,0xB06F,0xB070,0xB071,0xB072,0xB073,0xB074,0xB075,/* 0xD8-0xDF */ + 0xB076,0xB077,0xB078,0xB079,0xB07A,0xB07B,0xB07E,0xB07F,/* 0xE0-0xE7 */ + 0xB081,0xB082,0xB083,0xB085,0xB086,0xB087,0xB088,0xB089,/* 0xE8-0xEF */ + 0xB08A,0xB08B,0xB08E,0xB090,0xB092,0xB093,0xB094,0xB095,/* 0xF0-0xF7 */ + 0xB096,0xB097,0xB09B,0xB09D,0xB09E,0xB0A3,0xB0A4,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_86[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB0A5,0xB0A6,0xB0A7,0xB0AA,0xB0B0,0xB0B2,0xB0B6,/* 0x40-0x47 */ + 0xB0B7,0xB0B9,0xB0BA,0xB0BB,0xB0BD,0xB0BE,0xB0BF,0xB0C0,/* 0x48-0x4F */ + 0xB0C1,0xB0C2,0xB0C3,0xB0C6,0xB0CA,0xB0CB,0xB0CC,0xB0CD,/* 0x50-0x57 */ + 0xB0CE,0xB0CF,0xB0D2,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB0D3,0xB0D5,0xB0D6,0xB0D7,0xB0D9,0xB0DA,0xB0DB,/* 0x60-0x67 */ + 0xB0DC,0xB0DD,0xB0DE,0xB0DF,0xB0E1,0xB0E2,0xB0E3,0xB0E4,/* 0x68-0x6F */ + 0xB0E6,0xB0E7,0xB0E8,0xB0E9,0xB0EA,0xB0EB,0xB0EC,0xB0ED,/* 0x70-0x77 */ + 0xB0EE,0xB0EF,0xB0F0,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB0F1,0xB0F2,0xB0F3,0xB0F4,0xB0F5,0xB0F6,0xB0F7,/* 0x80-0x87 */ + 0xB0F8,0xB0F9,0xB0FA,0xB0FB,0xB0FC,0xB0FD,0xB0FE,0xB0FF,/* 0x88-0x8F */ + 0xB100,0xB101,0xB102,0xB103,0xB104,0xB105,0xB106,0xB107,/* 0x90-0x97 */ + 0xB10A,0xB10D,0xB10E,0xB10F,0xB111,0xB114,0xB115,0xB116,/* 0x98-0x9F */ + 0xB117,0xB11A,0xB11E,0xB11F,0xB120,0xB121,0xB122,0xB126,/* 0xA0-0xA7 */ + 0xB127,0xB129,0xB12A,0xB12B,0xB12D,0xB12E,0xB12F,0xB130,/* 0xA8-0xAF */ + 0xB131,0xB132,0xB133,0xB136,0xB13A,0xB13B,0xB13C,0xB13D,/* 0xB0-0xB7 */ + 0xB13E,0xB13F,0xB142,0xB143,0xB145,0xB146,0xB147,0xB149,/* 0xB8-0xBF */ + 0xB14A,0xB14B,0xB14C,0xB14D,0xB14E,0xB14F,0xB152,0xB153,/* 0xC0-0xC7 */ + 0xB156,0xB157,0xB159,0xB15A,0xB15B,0xB15D,0xB15E,0xB15F,/* 0xC8-0xCF */ + 0xB161,0xB162,0xB163,0xB164,0xB165,0xB166,0xB167,0xB168,/* 0xD0-0xD7 */ + 0xB169,0xB16A,0xB16B,0xB16C,0xB16D,0xB16E,0xB16F,0xB170,/* 0xD8-0xDF */ + 0xB171,0xB172,0xB173,0xB174,0xB175,0xB176,0xB177,0xB17A,/* 0xE0-0xE7 */ + 0xB17B,0xB17D,0xB17E,0xB17F,0xB181,0xB183,0xB184,0xB185,/* 0xE8-0xEF */ + 0xB186,0xB187,0xB18A,0xB18C,0xB18E,0xB18F,0xB190,0xB191,/* 0xF0-0xF7 */ + 0xB195,0xB196,0xB197,0xB199,0xB19A,0xB19B,0xB19D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_87[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB19E,0xB19F,0xB1A0,0xB1A1,0xB1A2,0xB1A3,0xB1A4,/* 0x40-0x47 */ + 0xB1A5,0xB1A6,0xB1A7,0xB1A9,0xB1AA,0xB1AB,0xB1AC,0xB1AD,/* 0x48-0x4F */ + 0xB1AE,0xB1AF,0xB1B0,0xB1B1,0xB1B2,0xB1B3,0xB1B4,0xB1B5,/* 0x50-0x57 */ + 0xB1B6,0xB1B7,0xB1B8,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB1B9,0xB1BA,0xB1BB,0xB1BC,0xB1BD,0xB1BE,0xB1BF,/* 0x60-0x67 */ + 0xB1C0,0xB1C1,0xB1C2,0xB1C3,0xB1C4,0xB1C5,0xB1C6,0xB1C7,/* 0x68-0x6F */ + 0xB1C8,0xB1C9,0xB1CA,0xB1CB,0xB1CD,0xB1CE,0xB1CF,0xB1D1,/* 0x70-0x77 */ + 0xB1D2,0xB1D3,0xB1D5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB1D6,0xB1D7,0xB1D8,0xB1D9,0xB1DA,0xB1DB,0xB1DE,/* 0x80-0x87 */ + 0xB1E0,0xB1E1,0xB1E2,0xB1E3,0xB1E4,0xB1E5,0xB1E6,0xB1E7,/* 0x88-0x8F */ + 0xB1EA,0xB1EB,0xB1ED,0xB1EE,0xB1EF,0xB1F1,0xB1F2,0xB1F3,/* 0x90-0x97 */ + 0xB1F4,0xB1F5,0xB1F6,0xB1F7,0xB1F8,0xB1FA,0xB1FC,0xB1FE,/* 0x98-0x9F */ + 0xB1FF,0xB200,0xB201,0xB202,0xB203,0xB206,0xB207,0xB209,/* 0xA0-0xA7 */ + 0xB20A,0xB20D,0xB20E,0xB20F,0xB210,0xB211,0xB212,0xB213,/* 0xA8-0xAF */ + 0xB216,0xB218,0xB21A,0xB21B,0xB21C,0xB21D,0xB21E,0xB21F,/* 0xB0-0xB7 */ + 0xB221,0xB222,0xB223,0xB224,0xB225,0xB226,0xB227,0xB228,/* 0xB8-0xBF */ + 0xB229,0xB22A,0xB22B,0xB22C,0xB22D,0xB22E,0xB22F,0xB230,/* 0xC0-0xC7 */ + 0xB231,0xB232,0xB233,0xB235,0xB236,0xB237,0xB238,0xB239,/* 0xC8-0xCF */ + 0xB23A,0xB23B,0xB23D,0xB23E,0xB23F,0xB240,0xB241,0xB242,/* 0xD0-0xD7 */ + 0xB243,0xB244,0xB245,0xB246,0xB247,0xB248,0xB249,0xB24A,/* 0xD8-0xDF */ + 0xB24B,0xB24C,0xB24D,0xB24E,0xB24F,0xB250,0xB251,0xB252,/* 0xE0-0xE7 */ + 0xB253,0xB254,0xB255,0xB256,0xB257,0xB259,0xB25A,0xB25B,/* 0xE8-0xEF */ + 0xB25D,0xB25E,0xB25F,0xB261,0xB262,0xB263,0xB264,0xB265,/* 0xF0-0xF7 */ + 0xB266,0xB267,0xB26A,0xB26B,0xB26C,0xB26D,0xB26E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_88[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB26F,0xB270,0xB271,0xB272,0xB273,0xB276,0xB277,/* 0x40-0x47 */ + 0xB278,0xB279,0xB27A,0xB27B,0xB27D,0xB27E,0xB27F,0xB280,/* 0x48-0x4F */ + 0xB281,0xB282,0xB283,0xB286,0xB287,0xB288,0xB28A,0xB28B,/* 0x50-0x57 */ + 0xB28C,0xB28D,0xB28E,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB28F,0xB292,0xB293,0xB295,0xB296,0xB297,0xB29B,/* 0x60-0x67 */ + 0xB29C,0xB29D,0xB29E,0xB29F,0xB2A2,0xB2A4,0xB2A7,0xB2A8,/* 0x68-0x6F */ + 0xB2A9,0xB2AB,0xB2AD,0xB2AE,0xB2AF,0xB2B1,0xB2B2,0xB2B3,/* 0x70-0x77 */ + 0xB2B5,0xB2B6,0xB2B7,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB2B8,0xB2B9,0xB2BA,0xB2BB,0xB2BC,0xB2BD,0xB2BE,/* 0x80-0x87 */ + 0xB2BF,0xB2C0,0xB2C1,0xB2C2,0xB2C3,0xB2C4,0xB2C5,0xB2C6,/* 0x88-0x8F */ + 0xB2C7,0xB2CA,0xB2CB,0xB2CD,0xB2CE,0xB2CF,0xB2D1,0xB2D3,/* 0x90-0x97 */ + 0xB2D4,0xB2D5,0xB2D6,0xB2D7,0xB2DA,0xB2DC,0xB2DE,0xB2DF,/* 0x98-0x9F */ + 0xB2E0,0xB2E1,0xB2E3,0xB2E7,0xB2E9,0xB2EA,0xB2F0,0xB2F1,/* 0xA0-0xA7 */ + 0xB2F2,0xB2F6,0xB2FC,0xB2FD,0xB2FE,0xB302,0xB303,0xB305,/* 0xA8-0xAF */ + 0xB306,0xB307,0xB309,0xB30A,0xB30B,0xB30C,0xB30D,0xB30E,/* 0xB0-0xB7 */ + 0xB30F,0xB312,0xB316,0xB317,0xB318,0xB319,0xB31A,0xB31B,/* 0xB8-0xBF */ + 0xB31D,0xB31E,0xB31F,0xB320,0xB321,0xB322,0xB323,0xB324,/* 0xC0-0xC7 */ + 0xB325,0xB326,0xB327,0xB328,0xB329,0xB32A,0xB32B,0xB32C,/* 0xC8-0xCF */ + 0xB32D,0xB32E,0xB32F,0xB330,0xB331,0xB332,0xB333,0xB334,/* 0xD0-0xD7 */ + 0xB335,0xB336,0xB337,0xB338,0xB339,0xB33A,0xB33B,0xB33C,/* 0xD8-0xDF */ + 0xB33D,0xB33E,0xB33F,0xB340,0xB341,0xB342,0xB343,0xB344,/* 0xE0-0xE7 */ + 0xB345,0xB346,0xB347,0xB348,0xB349,0xB34A,0xB34B,0xB34C,/* 0xE8-0xEF */ + 0xB34D,0xB34E,0xB34F,0xB350,0xB351,0xB352,0xB353,0xB357,/* 0xF0-0xF7 */ + 0xB359,0xB35A,0xB35D,0xB360,0xB361,0xB362,0xB363,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_89[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB366,0xB368,0xB36A,0xB36C,0xB36D,0xB36F,0xB372,/* 0x40-0x47 */ + 0xB373,0xB375,0xB376,0xB377,0xB379,0xB37A,0xB37B,0xB37C,/* 0x48-0x4F */ + 0xB37D,0xB37E,0xB37F,0xB382,0xB386,0xB387,0xB388,0xB389,/* 0x50-0x57 */ + 0xB38A,0xB38B,0xB38D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB38E,0xB38F,0xB391,0xB392,0xB393,0xB395,0xB396,/* 0x60-0x67 */ + 0xB397,0xB398,0xB399,0xB39A,0xB39B,0xB39C,0xB39D,0xB39E,/* 0x68-0x6F */ + 0xB39F,0xB3A2,0xB3A3,0xB3A4,0xB3A5,0xB3A6,0xB3A7,0xB3A9,/* 0x70-0x77 */ + 0xB3AA,0xB3AB,0xB3AD,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB3AE,0xB3AF,0xB3B0,0xB3B1,0xB3B2,0xB3B3,0xB3B4,/* 0x80-0x87 */ + 0xB3B5,0xB3B6,0xB3B7,0xB3B8,0xB3B9,0xB3BA,0xB3BB,0xB3BC,/* 0x88-0x8F */ + 0xB3BD,0xB3BE,0xB3BF,0xB3C0,0xB3C1,0xB3C2,0xB3C3,0xB3C6,/* 0x90-0x97 */ + 0xB3C7,0xB3C9,0xB3CA,0xB3CD,0xB3CF,0xB3D1,0xB3D2,0xB3D3,/* 0x98-0x9F */ + 0xB3D6,0xB3D8,0xB3DA,0xB3DC,0xB3DE,0xB3DF,0xB3E1,0xB3E2,/* 0xA0-0xA7 */ + 0xB3E3,0xB3E5,0xB3E6,0xB3E7,0xB3E9,0xB3EA,0xB3EB,0xB3EC,/* 0xA8-0xAF */ + 0xB3ED,0xB3EE,0xB3EF,0xB3F0,0xB3F1,0xB3F2,0xB3F3,0xB3F4,/* 0xB0-0xB7 */ + 0xB3F5,0xB3F6,0xB3F7,0xB3F8,0xB3F9,0xB3FA,0xB3FB,0xB3FD,/* 0xB8-0xBF */ + 0xB3FE,0xB3FF,0xB400,0xB401,0xB402,0xB403,0xB404,0xB405,/* 0xC0-0xC7 */ + 0xB406,0xB407,0xB408,0xB409,0xB40A,0xB40B,0xB40C,0xB40D,/* 0xC8-0xCF */ + 0xB40E,0xB40F,0xB411,0xB412,0xB413,0xB414,0xB415,0xB416,/* 0xD0-0xD7 */ + 0xB417,0xB419,0xB41A,0xB41B,0xB41D,0xB41E,0xB41F,0xB421,/* 0xD8-0xDF */ + 0xB422,0xB423,0xB424,0xB425,0xB426,0xB427,0xB42A,0xB42C,/* 0xE0-0xE7 */ + 0xB42D,0xB42E,0xB42F,0xB430,0xB431,0xB432,0xB433,0xB435,/* 0xE8-0xEF */ + 0xB436,0xB437,0xB438,0xB439,0xB43A,0xB43B,0xB43C,0xB43D,/* 0xF0-0xF7 */ + 0xB43E,0xB43F,0xB440,0xB441,0xB442,0xB443,0xB444,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8A[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB445,0xB446,0xB447,0xB448,0xB449,0xB44A,0xB44B,/* 0x40-0x47 */ + 0xB44C,0xB44D,0xB44E,0xB44F,0xB452,0xB453,0xB455,0xB456,/* 0x48-0x4F */ + 0xB457,0xB459,0xB45A,0xB45B,0xB45C,0xB45D,0xB45E,0xB45F,/* 0x50-0x57 */ + 0xB462,0xB464,0xB466,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB467,0xB468,0xB469,0xB46A,0xB46B,0xB46D,0xB46E,/* 0x60-0x67 */ + 0xB46F,0xB470,0xB471,0xB472,0xB473,0xB474,0xB475,0xB476,/* 0x68-0x6F */ + 0xB477,0xB478,0xB479,0xB47A,0xB47B,0xB47C,0xB47D,0xB47E,/* 0x70-0x77 */ + 0xB47F,0xB481,0xB482,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB483,0xB484,0xB485,0xB486,0xB487,0xB489,0xB48A,/* 0x80-0x87 */ + 0xB48B,0xB48C,0xB48D,0xB48E,0xB48F,0xB490,0xB491,0xB492,/* 0x88-0x8F */ + 0xB493,0xB494,0xB495,0xB496,0xB497,0xB498,0xB499,0xB49A,/* 0x90-0x97 */ + 0xB49B,0xB49C,0xB49E,0xB49F,0xB4A0,0xB4A1,0xB4A2,0xB4A3,/* 0x98-0x9F */ + 0xB4A5,0xB4A6,0xB4A7,0xB4A9,0xB4AA,0xB4AB,0xB4AD,0xB4AE,/* 0xA0-0xA7 */ + 0xB4AF,0xB4B0,0xB4B1,0xB4B2,0xB4B3,0xB4B4,0xB4B6,0xB4B8,/* 0xA8-0xAF */ + 0xB4BA,0xB4BB,0xB4BC,0xB4BD,0xB4BE,0xB4BF,0xB4C1,0xB4C2,/* 0xB0-0xB7 */ + 0xB4C3,0xB4C5,0xB4C6,0xB4C7,0xB4C9,0xB4CA,0xB4CB,0xB4CC,/* 0xB8-0xBF */ + 0xB4CD,0xB4CE,0xB4CF,0xB4D1,0xB4D2,0xB4D3,0xB4D4,0xB4D6,/* 0xC0-0xC7 */ + 0xB4D7,0xB4D8,0xB4D9,0xB4DA,0xB4DB,0xB4DE,0xB4DF,0xB4E1,/* 0xC8-0xCF */ + 0xB4E2,0xB4E5,0xB4E7,0xB4E8,0xB4E9,0xB4EA,0xB4EB,0xB4EE,/* 0xD0-0xD7 */ + 0xB4F0,0xB4F2,0xB4F3,0xB4F4,0xB4F5,0xB4F6,0xB4F7,0xB4F9,/* 0xD8-0xDF */ + 0xB4FA,0xB4FB,0xB4FC,0xB4FD,0xB4FE,0xB4FF,0xB500,0xB501,/* 0xE0-0xE7 */ + 0xB502,0xB503,0xB504,0xB505,0xB506,0xB507,0xB508,0xB509,/* 0xE8-0xEF */ + 0xB50A,0xB50B,0xB50C,0xB50D,0xB50E,0xB50F,0xB510,0xB511,/* 0xF0-0xF7 */ + 0xB512,0xB513,0xB516,0xB517,0xB519,0xB51A,0xB51D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8B[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB51E,0xB51F,0xB520,0xB521,0xB522,0xB523,0xB526,/* 0x40-0x47 */ + 0xB52B,0xB52C,0xB52D,0xB52E,0xB52F,0xB532,0xB533,0xB535,/* 0x48-0x4F */ + 0xB536,0xB537,0xB539,0xB53A,0xB53B,0xB53C,0xB53D,0xB53E,/* 0x50-0x57 */ + 0xB53F,0xB542,0xB546,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB547,0xB548,0xB549,0xB54A,0xB54E,0xB54F,0xB551,/* 0x60-0x67 */ + 0xB552,0xB553,0xB555,0xB556,0xB557,0xB558,0xB559,0xB55A,/* 0x68-0x6F */ + 0xB55B,0xB55E,0xB562,0xB563,0xB564,0xB565,0xB566,0xB567,/* 0x70-0x77 */ + 0xB568,0xB569,0xB56A,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB56B,0xB56C,0xB56D,0xB56E,0xB56F,0xB570,0xB571,/* 0x80-0x87 */ + 0xB572,0xB573,0xB574,0xB575,0xB576,0xB577,0xB578,0xB579,/* 0x88-0x8F */ + 0xB57A,0xB57B,0xB57C,0xB57D,0xB57E,0xB57F,0xB580,0xB581,/* 0x90-0x97 */ + 0xB582,0xB583,0xB584,0xB585,0xB586,0xB587,0xB588,0xB589,/* 0x98-0x9F */ + 0xB58A,0xB58B,0xB58C,0xB58D,0xB58E,0xB58F,0xB590,0xB591,/* 0xA0-0xA7 */ + 0xB592,0xB593,0xB594,0xB595,0xB596,0xB597,0xB598,0xB599,/* 0xA8-0xAF */ + 0xB59A,0xB59B,0xB59C,0xB59D,0xB59E,0xB59F,0xB5A2,0xB5A3,/* 0xB0-0xB7 */ + 0xB5A5,0xB5A6,0xB5A7,0xB5A9,0xB5AC,0xB5AD,0xB5AE,0xB5AF,/* 0xB8-0xBF */ + 0xB5B2,0xB5B6,0xB5B7,0xB5B8,0xB5B9,0xB5BA,0xB5BE,0xB5BF,/* 0xC0-0xC7 */ + 0xB5C1,0xB5C2,0xB5C3,0xB5C5,0xB5C6,0xB5C7,0xB5C8,0xB5C9,/* 0xC8-0xCF */ + 0xB5CA,0xB5CB,0xB5CE,0xB5D2,0xB5D3,0xB5D4,0xB5D5,0xB5D6,/* 0xD0-0xD7 */ + 0xB5D7,0xB5D9,0xB5DA,0xB5DB,0xB5DC,0xB5DD,0xB5DE,0xB5DF,/* 0xD8-0xDF */ + 0xB5E0,0xB5E1,0xB5E2,0xB5E3,0xB5E4,0xB5E5,0xB5E6,0xB5E7,/* 0xE0-0xE7 */ + 0xB5E8,0xB5E9,0xB5EA,0xB5EB,0xB5ED,0xB5EE,0xB5EF,0xB5F0,/* 0xE8-0xEF */ + 0xB5F1,0xB5F2,0xB5F3,0xB5F4,0xB5F5,0xB5F6,0xB5F7,0xB5F8,/* 0xF0-0xF7 */ + 0xB5F9,0xB5FA,0xB5FB,0xB5FC,0xB5FD,0xB5FE,0xB5FF,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8C[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB600,0xB601,0xB602,0xB603,0xB604,0xB605,0xB606,/* 0x40-0x47 */ + 0xB607,0xB608,0xB609,0xB60A,0xB60B,0xB60C,0xB60D,0xB60E,/* 0x48-0x4F */ + 0xB60F,0xB612,0xB613,0xB615,0xB616,0xB617,0xB619,0xB61A,/* 0x50-0x57 */ + 0xB61B,0xB61C,0xB61D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB61E,0xB61F,0xB620,0xB621,0xB622,0xB623,0xB624,/* 0x60-0x67 */ + 0xB626,0xB627,0xB628,0xB629,0xB62A,0xB62B,0xB62D,0xB62E,/* 0x68-0x6F */ + 0xB62F,0xB630,0xB631,0xB632,0xB633,0xB635,0xB636,0xB637,/* 0x70-0x77 */ + 0xB638,0xB639,0xB63A,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB63B,0xB63C,0xB63D,0xB63E,0xB63F,0xB640,0xB641,/* 0x80-0x87 */ + 0xB642,0xB643,0xB644,0xB645,0xB646,0xB647,0xB649,0xB64A,/* 0x88-0x8F */ + 0xB64B,0xB64C,0xB64D,0xB64E,0xB64F,0xB650,0xB651,0xB652,/* 0x90-0x97 */ + 0xB653,0xB654,0xB655,0xB656,0xB657,0xB658,0xB659,0xB65A,/* 0x98-0x9F */ + 0xB65B,0xB65C,0xB65D,0xB65E,0xB65F,0xB660,0xB661,0xB662,/* 0xA0-0xA7 */ + 0xB663,0xB665,0xB666,0xB667,0xB669,0xB66A,0xB66B,0xB66C,/* 0xA8-0xAF */ + 0xB66D,0xB66E,0xB66F,0xB670,0xB671,0xB672,0xB673,0xB674,/* 0xB0-0xB7 */ + 0xB675,0xB676,0xB677,0xB678,0xB679,0xB67A,0xB67B,0xB67C,/* 0xB8-0xBF */ + 0xB67D,0xB67E,0xB67F,0xB680,0xB681,0xB682,0xB683,0xB684,/* 0xC0-0xC7 */ + 0xB685,0xB686,0xB687,0xB688,0xB689,0xB68A,0xB68B,0xB68C,/* 0xC8-0xCF */ + 0xB68D,0xB68E,0xB68F,0xB690,0xB691,0xB692,0xB693,0xB694,/* 0xD0-0xD7 */ + 0xB695,0xB696,0xB697,0xB698,0xB699,0xB69A,0xB69B,0xB69E,/* 0xD8-0xDF */ + 0xB69F,0xB6A1,0xB6A2,0xB6A3,0xB6A5,0xB6A6,0xB6A7,0xB6A8,/* 0xE0-0xE7 */ + 0xB6A9,0xB6AA,0xB6AD,0xB6AE,0xB6AF,0xB6B0,0xB6B2,0xB6B3,/* 0xE8-0xEF */ + 0xB6B4,0xB6B5,0xB6B6,0xB6B7,0xB6B8,0xB6B9,0xB6BA,0xB6BB,/* 0xF0-0xF7 */ + 0xB6BC,0xB6BD,0xB6BE,0xB6BF,0xB6C0,0xB6C1,0xB6C2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8D[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB6C3,0xB6C4,0xB6C5,0xB6C6,0xB6C7,0xB6C8,0xB6C9,/* 0x40-0x47 */ + 0xB6CA,0xB6CB,0xB6CC,0xB6CD,0xB6CE,0xB6CF,0xB6D0,0xB6D1,/* 0x48-0x4F */ + 0xB6D2,0xB6D3,0xB6D5,0xB6D6,0xB6D7,0xB6D8,0xB6D9,0xB6DA,/* 0x50-0x57 */ + 0xB6DB,0xB6DC,0xB6DD,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB6DE,0xB6DF,0xB6E0,0xB6E1,0xB6E2,0xB6E3,0xB6E4,/* 0x60-0x67 */ + 0xB6E5,0xB6E6,0xB6E7,0xB6E8,0xB6E9,0xB6EA,0xB6EB,0xB6EC,/* 0x68-0x6F */ + 0xB6ED,0xB6EE,0xB6EF,0xB6F1,0xB6F2,0xB6F3,0xB6F5,0xB6F6,/* 0x70-0x77 */ + 0xB6F7,0xB6F9,0xB6FA,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB6FB,0xB6FC,0xB6FD,0xB6FE,0xB6FF,0xB702,0xB703,/* 0x80-0x87 */ + 0xB704,0xB706,0xB707,0xB708,0xB709,0xB70A,0xB70B,0xB70C,/* 0x88-0x8F */ + 0xB70D,0xB70E,0xB70F,0xB710,0xB711,0xB712,0xB713,0xB714,/* 0x90-0x97 */ + 0xB715,0xB716,0xB717,0xB718,0xB719,0xB71A,0xB71B,0xB71C,/* 0x98-0x9F */ + 0xB71D,0xB71E,0xB71F,0xB720,0xB721,0xB722,0xB723,0xB724,/* 0xA0-0xA7 */ + 0xB725,0xB726,0xB727,0xB72A,0xB72B,0xB72D,0xB72E,0xB731,/* 0xA8-0xAF */ + 0xB732,0xB733,0xB734,0xB735,0xB736,0xB737,0xB73A,0xB73C,/* 0xB0-0xB7 */ + 0xB73D,0xB73E,0xB73F,0xB740,0xB741,0xB742,0xB743,0xB745,/* 0xB8-0xBF */ + 0xB746,0xB747,0xB749,0xB74A,0xB74B,0xB74D,0xB74E,0xB74F,/* 0xC0-0xC7 */ + 0xB750,0xB751,0xB752,0xB753,0xB756,0xB757,0xB758,0xB759,/* 0xC8-0xCF */ + 0xB75A,0xB75B,0xB75C,0xB75D,0xB75E,0xB75F,0xB761,0xB762,/* 0xD0-0xD7 */ + 0xB763,0xB765,0xB766,0xB767,0xB769,0xB76A,0xB76B,0xB76C,/* 0xD8-0xDF */ + 0xB76D,0xB76E,0xB76F,0xB772,0xB774,0xB776,0xB777,0xB778,/* 0xE0-0xE7 */ + 0xB779,0xB77A,0xB77B,0xB77E,0xB77F,0xB781,0xB782,0xB783,/* 0xE8-0xEF */ + 0xB785,0xB786,0xB787,0xB788,0xB789,0xB78A,0xB78B,0xB78E,/* 0xF0-0xF7 */ + 0xB793,0xB794,0xB795,0xB79A,0xB79B,0xB79D,0xB79E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8E[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB79F,0xB7A1,0xB7A2,0xB7A3,0xB7A4,0xB7A5,0xB7A6,/* 0x40-0x47 */ + 0xB7A7,0xB7AA,0xB7AE,0xB7AF,0xB7B0,0xB7B1,0xB7B2,0xB7B3,/* 0x48-0x4F */ + 0xB7B6,0xB7B7,0xB7B9,0xB7BA,0xB7BB,0xB7BC,0xB7BD,0xB7BE,/* 0x50-0x57 */ + 0xB7BF,0xB7C0,0xB7C1,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB7C2,0xB7C3,0xB7C4,0xB7C5,0xB7C6,0xB7C8,0xB7CA,/* 0x60-0x67 */ + 0xB7CB,0xB7CC,0xB7CD,0xB7CE,0xB7CF,0xB7D0,0xB7D1,0xB7D2,/* 0x68-0x6F */ + 0xB7D3,0xB7D4,0xB7D5,0xB7D6,0xB7D7,0xB7D8,0xB7D9,0xB7DA,/* 0x70-0x77 */ + 0xB7DB,0xB7DC,0xB7DD,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB7DE,0xB7DF,0xB7E0,0xB7E1,0xB7E2,0xB7E3,0xB7E4,/* 0x80-0x87 */ + 0xB7E5,0xB7E6,0xB7E7,0xB7E8,0xB7E9,0xB7EA,0xB7EB,0xB7EE,/* 0x88-0x8F */ + 0xB7EF,0xB7F1,0xB7F2,0xB7F3,0xB7F5,0xB7F6,0xB7F7,0xB7F8,/* 0x90-0x97 */ + 0xB7F9,0xB7FA,0xB7FB,0xB7FE,0xB802,0xB803,0xB804,0xB805,/* 0x98-0x9F */ + 0xB806,0xB80A,0xB80B,0xB80D,0xB80E,0xB80F,0xB811,0xB812,/* 0xA0-0xA7 */ + 0xB813,0xB814,0xB815,0xB816,0xB817,0xB81A,0xB81C,0xB81E,/* 0xA8-0xAF */ + 0xB81F,0xB820,0xB821,0xB822,0xB823,0xB826,0xB827,0xB829,/* 0xB0-0xB7 */ + 0xB82A,0xB82B,0xB82D,0xB82E,0xB82F,0xB830,0xB831,0xB832,/* 0xB8-0xBF */ + 0xB833,0xB836,0xB83A,0xB83B,0xB83C,0xB83D,0xB83E,0xB83F,/* 0xC0-0xC7 */ + 0xB841,0xB842,0xB843,0xB845,0xB846,0xB847,0xB848,0xB849,/* 0xC8-0xCF */ + 0xB84A,0xB84B,0xB84C,0xB84D,0xB84E,0xB84F,0xB850,0xB852,/* 0xD0-0xD7 */ + 0xB854,0xB855,0xB856,0xB857,0xB858,0xB859,0xB85A,0xB85B,/* 0xD8-0xDF */ + 0xB85E,0xB85F,0xB861,0xB862,0xB863,0xB865,0xB866,0xB867,/* 0xE0-0xE7 */ + 0xB868,0xB869,0xB86A,0xB86B,0xB86E,0xB870,0xB872,0xB873,/* 0xE8-0xEF */ + 0xB874,0xB875,0xB876,0xB877,0xB879,0xB87A,0xB87B,0xB87D,/* 0xF0-0xF7 */ + 0xB87E,0xB87F,0xB880,0xB881,0xB882,0xB883,0xB884,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_8F[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB885,0xB886,0xB887,0xB888,0xB889,0xB88A,0xB88B,/* 0x40-0x47 */ + 0xB88C,0xB88E,0xB88F,0xB890,0xB891,0xB892,0xB893,0xB894,/* 0x48-0x4F */ + 0xB895,0xB896,0xB897,0xB898,0xB899,0xB89A,0xB89B,0xB89C,/* 0x50-0x57 */ + 0xB89D,0xB89E,0xB89F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB8A0,0xB8A1,0xB8A2,0xB8A3,0xB8A4,0xB8A5,0xB8A6,/* 0x60-0x67 */ + 0xB8A7,0xB8A9,0xB8AA,0xB8AB,0xB8AC,0xB8AD,0xB8AE,0xB8AF,/* 0x68-0x6F */ + 0xB8B1,0xB8B2,0xB8B3,0xB8B5,0xB8B6,0xB8B7,0xB8B9,0xB8BA,/* 0x70-0x77 */ + 0xB8BB,0xB8BC,0xB8BD,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB8BE,0xB8BF,0xB8C2,0xB8C4,0xB8C6,0xB8C7,0xB8C8,/* 0x80-0x87 */ + 0xB8C9,0xB8CA,0xB8CB,0xB8CD,0xB8CE,0xB8CF,0xB8D1,0xB8D2,/* 0x88-0x8F */ + 0xB8D3,0xB8D5,0xB8D6,0xB8D7,0xB8D8,0xB8D9,0xB8DA,0xB8DB,/* 0x90-0x97 */ + 0xB8DC,0xB8DE,0xB8E0,0xB8E2,0xB8E3,0xB8E4,0xB8E5,0xB8E6,/* 0x98-0x9F */ + 0xB8E7,0xB8EA,0xB8EB,0xB8ED,0xB8EE,0xB8EF,0xB8F1,0xB8F2,/* 0xA0-0xA7 */ + 0xB8F3,0xB8F4,0xB8F5,0xB8F6,0xB8F7,0xB8FA,0xB8FC,0xB8FE,/* 0xA8-0xAF */ + 0xB8FF,0xB900,0xB901,0xB902,0xB903,0xB905,0xB906,0xB907,/* 0xB0-0xB7 */ + 0xB908,0xB909,0xB90A,0xB90B,0xB90C,0xB90D,0xB90E,0xB90F,/* 0xB8-0xBF */ + 0xB910,0xB911,0xB912,0xB913,0xB914,0xB915,0xB916,0xB917,/* 0xC0-0xC7 */ + 0xB919,0xB91A,0xB91B,0xB91C,0xB91D,0xB91E,0xB91F,0xB921,/* 0xC8-0xCF */ + 0xB922,0xB923,0xB924,0xB925,0xB926,0xB927,0xB928,0xB929,/* 0xD0-0xD7 */ + 0xB92A,0xB92B,0xB92C,0xB92D,0xB92E,0xB92F,0xB930,0xB931,/* 0xD8-0xDF */ + 0xB932,0xB933,0xB934,0xB935,0xB936,0xB937,0xB938,0xB939,/* 0xE0-0xE7 */ + 0xB93A,0xB93B,0xB93E,0xB93F,0xB941,0xB942,0xB943,0xB945,/* 0xE8-0xEF */ + 0xB946,0xB947,0xB948,0xB949,0xB94A,0xB94B,0xB94D,0xB94E,/* 0xF0-0xF7 */ + 0xB950,0xB952,0xB953,0xB954,0xB955,0xB956,0xB957,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_90[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xB95A,0xB95B,0xB95D,0xB95E,0xB95F,0xB961,0xB962,/* 0x40-0x47 */ + 0xB963,0xB964,0xB965,0xB966,0xB967,0xB96A,0xB96C,0xB96E,/* 0x48-0x4F */ + 0xB96F,0xB970,0xB971,0xB972,0xB973,0xB976,0xB977,0xB979,/* 0x50-0x57 */ + 0xB97A,0xB97B,0xB97D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xB97E,0xB97F,0xB980,0xB981,0xB982,0xB983,0xB986,/* 0x60-0x67 */ + 0xB988,0xB98B,0xB98C,0xB98F,0xB990,0xB991,0xB992,0xB993,/* 0x68-0x6F */ + 0xB994,0xB995,0xB996,0xB997,0xB998,0xB999,0xB99A,0xB99B,/* 0x70-0x77 */ + 0xB99C,0xB99D,0xB99E,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xB99F,0xB9A0,0xB9A1,0xB9A2,0xB9A3,0xB9A4,0xB9A5,/* 0x80-0x87 */ + 0xB9A6,0xB9A7,0xB9A8,0xB9A9,0xB9AA,0xB9AB,0xB9AE,0xB9AF,/* 0x88-0x8F */ + 0xB9B1,0xB9B2,0xB9B3,0xB9B5,0xB9B6,0xB9B7,0xB9B8,0xB9B9,/* 0x90-0x97 */ + 0xB9BA,0xB9BB,0xB9BE,0xB9C0,0xB9C2,0xB9C3,0xB9C4,0xB9C5,/* 0x98-0x9F */ + 0xB9C6,0xB9C7,0xB9CA,0xB9CB,0xB9CD,0xB9D3,0xB9D4,0xB9D5,/* 0xA0-0xA7 */ + 0xB9D6,0xB9D7,0xB9DA,0xB9DC,0xB9DF,0xB9E0,0xB9E2,0xB9E6,/* 0xA8-0xAF */ + 0xB9E7,0xB9E9,0xB9EA,0xB9EB,0xB9ED,0xB9EE,0xB9EF,0xB9F0,/* 0xB0-0xB7 */ + 0xB9F1,0xB9F2,0xB9F3,0xB9F6,0xB9FB,0xB9FC,0xB9FD,0xB9FE,/* 0xB8-0xBF */ + 0xB9FF,0xBA02,0xBA03,0xBA04,0xBA05,0xBA06,0xBA07,0xBA09,/* 0xC0-0xC7 */ + 0xBA0A,0xBA0B,0xBA0C,0xBA0D,0xBA0E,0xBA0F,0xBA10,0xBA11,/* 0xC8-0xCF */ + 0xBA12,0xBA13,0xBA14,0xBA16,0xBA17,0xBA18,0xBA19,0xBA1A,/* 0xD0-0xD7 */ + 0xBA1B,0xBA1C,0xBA1D,0xBA1E,0xBA1F,0xBA20,0xBA21,0xBA22,/* 0xD8-0xDF */ + 0xBA23,0xBA24,0xBA25,0xBA26,0xBA27,0xBA28,0xBA29,0xBA2A,/* 0xE0-0xE7 */ + 0xBA2B,0xBA2C,0xBA2D,0xBA2E,0xBA2F,0xBA30,0xBA31,0xBA32,/* 0xE8-0xEF */ + 0xBA33,0xBA34,0xBA35,0xBA36,0xBA37,0xBA3A,0xBA3B,0xBA3D,/* 0xF0-0xF7 */ + 0xBA3E,0xBA3F,0xBA41,0xBA43,0xBA44,0xBA45,0xBA46,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_91[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBA47,0xBA4A,0xBA4C,0xBA4F,0xBA50,0xBA51,0xBA52,/* 0x40-0x47 */ + 0xBA56,0xBA57,0xBA59,0xBA5A,0xBA5B,0xBA5D,0xBA5E,0xBA5F,/* 0x48-0x4F */ + 0xBA60,0xBA61,0xBA62,0xBA63,0xBA66,0xBA6A,0xBA6B,0xBA6C,/* 0x50-0x57 */ + 0xBA6D,0xBA6E,0xBA6F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBA72,0xBA73,0xBA75,0xBA76,0xBA77,0xBA79,0xBA7A,/* 0x60-0x67 */ + 0xBA7B,0xBA7C,0xBA7D,0xBA7E,0xBA7F,0xBA80,0xBA81,0xBA82,/* 0x68-0x6F */ + 0xBA86,0xBA88,0xBA89,0xBA8A,0xBA8B,0xBA8D,0xBA8E,0xBA8F,/* 0x70-0x77 */ + 0xBA90,0xBA91,0xBA92,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBA93,0xBA94,0xBA95,0xBA96,0xBA97,0xBA98,0xBA99,/* 0x80-0x87 */ + 0xBA9A,0xBA9B,0xBA9C,0xBA9D,0xBA9E,0xBA9F,0xBAA0,0xBAA1,/* 0x88-0x8F */ + 0xBAA2,0xBAA3,0xBAA4,0xBAA5,0xBAA6,0xBAA7,0xBAAA,0xBAAD,/* 0x90-0x97 */ + 0xBAAE,0xBAAF,0xBAB1,0xBAB3,0xBAB4,0xBAB5,0xBAB6,0xBAB7,/* 0x98-0x9F */ + 0xBABA,0xBABC,0xBABE,0xBABF,0xBAC0,0xBAC1,0xBAC2,0xBAC3,/* 0xA0-0xA7 */ + 0xBAC5,0xBAC6,0xBAC7,0xBAC9,0xBACA,0xBACB,0xBACC,0xBACD,/* 0xA8-0xAF */ + 0xBACE,0xBACF,0xBAD0,0xBAD1,0xBAD2,0xBAD3,0xBAD4,0xBAD5,/* 0xB0-0xB7 */ + 0xBAD6,0xBAD7,0xBADA,0xBADB,0xBADC,0xBADD,0xBADE,0xBADF,/* 0xB8-0xBF */ + 0xBAE0,0xBAE1,0xBAE2,0xBAE3,0xBAE4,0xBAE5,0xBAE6,0xBAE7,/* 0xC0-0xC7 */ + 0xBAE8,0xBAE9,0xBAEA,0xBAEB,0xBAEC,0xBAED,0xBAEE,0xBAEF,/* 0xC8-0xCF */ + 0xBAF0,0xBAF1,0xBAF2,0xBAF3,0xBAF4,0xBAF5,0xBAF6,0xBAF7,/* 0xD0-0xD7 */ + 0xBAF8,0xBAF9,0xBAFA,0xBAFB,0xBAFD,0xBAFE,0xBAFF,0xBB01,/* 0xD8-0xDF */ + 0xBB02,0xBB03,0xBB05,0xBB06,0xBB07,0xBB08,0xBB09,0xBB0A,/* 0xE0-0xE7 */ + 0xBB0B,0xBB0C,0xBB0E,0xBB10,0xBB12,0xBB13,0xBB14,0xBB15,/* 0xE8-0xEF */ + 0xBB16,0xBB17,0xBB19,0xBB1A,0xBB1B,0xBB1D,0xBB1E,0xBB1F,/* 0xF0-0xF7 */ + 0xBB21,0xBB22,0xBB23,0xBB24,0xBB25,0xBB26,0xBB27,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_92[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBB28,0xBB2A,0xBB2C,0xBB2D,0xBB2E,0xBB2F,0xBB30,/* 0x40-0x47 */ + 0xBB31,0xBB32,0xBB33,0xBB37,0xBB39,0xBB3A,0xBB3F,0xBB40,/* 0x48-0x4F */ + 0xBB41,0xBB42,0xBB43,0xBB46,0xBB48,0xBB4A,0xBB4B,0xBB4C,/* 0x50-0x57 */ + 0xBB4E,0xBB51,0xBB52,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBB53,0xBB55,0xBB56,0xBB57,0xBB59,0xBB5A,0xBB5B,/* 0x60-0x67 */ + 0xBB5C,0xBB5D,0xBB5E,0xBB5F,0xBB60,0xBB62,0xBB64,0xBB65,/* 0x68-0x6F */ + 0xBB66,0xBB67,0xBB68,0xBB69,0xBB6A,0xBB6B,0xBB6D,0xBB6E,/* 0x70-0x77 */ + 0xBB6F,0xBB70,0xBB71,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBB72,0xBB73,0xBB74,0xBB75,0xBB76,0xBB77,0xBB78,/* 0x80-0x87 */ + 0xBB79,0xBB7A,0xBB7B,0xBB7C,0xBB7D,0xBB7E,0xBB7F,0xBB80,/* 0x88-0x8F */ + 0xBB81,0xBB82,0xBB83,0xBB84,0xBB85,0xBB86,0xBB87,0xBB89,/* 0x90-0x97 */ + 0xBB8A,0xBB8B,0xBB8D,0xBB8E,0xBB8F,0xBB91,0xBB92,0xBB93,/* 0x98-0x9F */ + 0xBB94,0xBB95,0xBB96,0xBB97,0xBB98,0xBB99,0xBB9A,0xBB9B,/* 0xA0-0xA7 */ + 0xBB9C,0xBB9D,0xBB9E,0xBB9F,0xBBA0,0xBBA1,0xBBA2,0xBBA3,/* 0xA8-0xAF */ + 0xBBA5,0xBBA6,0xBBA7,0xBBA9,0xBBAA,0xBBAB,0xBBAD,0xBBAE,/* 0xB0-0xB7 */ + 0xBBAF,0xBBB0,0xBBB1,0xBBB2,0xBBB3,0xBBB5,0xBBB6,0xBBB8,/* 0xB8-0xBF */ + 0xBBB9,0xBBBA,0xBBBB,0xBBBC,0xBBBD,0xBBBE,0xBBBF,0xBBC1,/* 0xC0-0xC7 */ + 0xBBC2,0xBBC3,0xBBC5,0xBBC6,0xBBC7,0xBBC9,0xBBCA,0xBBCB,/* 0xC8-0xCF */ + 0xBBCC,0xBBCD,0xBBCE,0xBBCF,0xBBD1,0xBBD2,0xBBD4,0xBBD5,/* 0xD0-0xD7 */ + 0xBBD6,0xBBD7,0xBBD8,0xBBD9,0xBBDA,0xBBDB,0xBBDC,0xBBDD,/* 0xD8-0xDF */ + 0xBBDE,0xBBDF,0xBBE0,0xBBE1,0xBBE2,0xBBE3,0xBBE4,0xBBE5,/* 0xE0-0xE7 */ + 0xBBE6,0xBBE7,0xBBE8,0xBBE9,0xBBEA,0xBBEB,0xBBEC,0xBBED,/* 0xE8-0xEF */ + 0xBBEE,0xBBEF,0xBBF0,0xBBF1,0xBBF2,0xBBF3,0xBBF4,0xBBF5,/* 0xF0-0xF7 */ + 0xBBF6,0xBBF7,0xBBFA,0xBBFB,0xBBFD,0xBBFE,0xBC01,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_93[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBC03,0xBC04,0xBC05,0xBC06,0xBC07,0xBC0A,0xBC0E,/* 0x40-0x47 */ + 0xBC10,0xBC12,0xBC13,0xBC19,0xBC1A,0xBC20,0xBC21,0xBC22,/* 0x48-0x4F */ + 0xBC23,0xBC26,0xBC28,0xBC2A,0xBC2B,0xBC2C,0xBC2E,0xBC2F,/* 0x50-0x57 */ + 0xBC32,0xBC33,0xBC35,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBC36,0xBC37,0xBC39,0xBC3A,0xBC3B,0xBC3C,0xBC3D,/* 0x60-0x67 */ + 0xBC3E,0xBC3F,0xBC42,0xBC46,0xBC47,0xBC48,0xBC4A,0xBC4B,/* 0x68-0x6F */ + 0xBC4E,0xBC4F,0xBC51,0xBC52,0xBC53,0xBC54,0xBC55,0xBC56,/* 0x70-0x77 */ + 0xBC57,0xBC58,0xBC59,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBC5A,0xBC5B,0xBC5C,0xBC5E,0xBC5F,0xBC60,0xBC61,/* 0x80-0x87 */ + 0xBC62,0xBC63,0xBC64,0xBC65,0xBC66,0xBC67,0xBC68,0xBC69,/* 0x88-0x8F */ + 0xBC6A,0xBC6B,0xBC6C,0xBC6D,0xBC6E,0xBC6F,0xBC70,0xBC71,/* 0x90-0x97 */ + 0xBC72,0xBC73,0xBC74,0xBC75,0xBC76,0xBC77,0xBC78,0xBC79,/* 0x98-0x9F */ + 0xBC7A,0xBC7B,0xBC7C,0xBC7D,0xBC7E,0xBC7F,0xBC80,0xBC81,/* 0xA0-0xA7 */ + 0xBC82,0xBC83,0xBC86,0xBC87,0xBC89,0xBC8A,0xBC8D,0xBC8F,/* 0xA8-0xAF */ + 0xBC90,0xBC91,0xBC92,0xBC93,0xBC96,0xBC98,0xBC9B,0xBC9C,/* 0xB0-0xB7 */ + 0xBC9D,0xBC9E,0xBC9F,0xBCA2,0xBCA3,0xBCA5,0xBCA6,0xBCA9,/* 0xB8-0xBF */ + 0xBCAA,0xBCAB,0xBCAC,0xBCAD,0xBCAE,0xBCAF,0xBCB2,0xBCB6,/* 0xC0-0xC7 */ + 0xBCB7,0xBCB8,0xBCB9,0xBCBA,0xBCBB,0xBCBE,0xBCBF,0xBCC1,/* 0xC8-0xCF */ + 0xBCC2,0xBCC3,0xBCC5,0xBCC6,0xBCC7,0xBCC8,0xBCC9,0xBCCA,/* 0xD0-0xD7 */ + 0xBCCB,0xBCCC,0xBCCE,0xBCD2,0xBCD3,0xBCD4,0xBCD6,0xBCD7,/* 0xD8-0xDF */ + 0xBCD9,0xBCDA,0xBCDB,0xBCDD,0xBCDE,0xBCDF,0xBCE0,0xBCE1,/* 0xE0-0xE7 */ + 0xBCE2,0xBCE3,0xBCE4,0xBCE5,0xBCE6,0xBCE7,0xBCE8,0xBCE9,/* 0xE8-0xEF */ + 0xBCEA,0xBCEB,0xBCEC,0xBCED,0xBCEE,0xBCEF,0xBCF0,0xBCF1,/* 0xF0-0xF7 */ + 0xBCF2,0xBCF3,0xBCF7,0xBCF9,0xBCFA,0xBCFB,0xBCFD,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_94[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBCFE,0xBCFF,0xBD00,0xBD01,0xBD02,0xBD03,0xBD06,/* 0x40-0x47 */ + 0xBD08,0xBD0A,0xBD0B,0xBD0C,0xBD0D,0xBD0E,0xBD0F,0xBD11,/* 0x48-0x4F */ + 0xBD12,0xBD13,0xBD15,0xBD16,0xBD17,0xBD18,0xBD19,0xBD1A,/* 0x50-0x57 */ + 0xBD1B,0xBD1C,0xBD1D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBD1E,0xBD1F,0xBD20,0xBD21,0xBD22,0xBD23,0xBD25,/* 0x60-0x67 */ + 0xBD26,0xBD27,0xBD28,0xBD29,0xBD2A,0xBD2B,0xBD2D,0xBD2E,/* 0x68-0x6F */ + 0xBD2F,0xBD30,0xBD31,0xBD32,0xBD33,0xBD34,0xBD35,0xBD36,/* 0x70-0x77 */ + 0xBD37,0xBD38,0xBD39,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBD3A,0xBD3B,0xBD3C,0xBD3D,0xBD3E,0xBD3F,0xBD41,/* 0x80-0x87 */ + 0xBD42,0xBD43,0xBD44,0xBD45,0xBD46,0xBD47,0xBD4A,0xBD4B,/* 0x88-0x8F */ + 0xBD4D,0xBD4E,0xBD4F,0xBD51,0xBD52,0xBD53,0xBD54,0xBD55,/* 0x90-0x97 */ + 0xBD56,0xBD57,0xBD5A,0xBD5B,0xBD5C,0xBD5D,0xBD5E,0xBD5F,/* 0x98-0x9F */ + 0xBD60,0xBD61,0xBD62,0xBD63,0xBD65,0xBD66,0xBD67,0xBD69,/* 0xA0-0xA7 */ + 0xBD6A,0xBD6B,0xBD6C,0xBD6D,0xBD6E,0xBD6F,0xBD70,0xBD71,/* 0xA8-0xAF */ + 0xBD72,0xBD73,0xBD74,0xBD75,0xBD76,0xBD77,0xBD78,0xBD79,/* 0xB0-0xB7 */ + 0xBD7A,0xBD7B,0xBD7C,0xBD7D,0xBD7E,0xBD7F,0xBD82,0xBD83,/* 0xB8-0xBF */ + 0xBD85,0xBD86,0xBD8B,0xBD8C,0xBD8D,0xBD8E,0xBD8F,0xBD92,/* 0xC0-0xC7 */ + 0xBD94,0xBD96,0xBD97,0xBD98,0xBD9B,0xBD9D,0xBD9E,0xBD9F,/* 0xC8-0xCF */ + 0xBDA0,0xBDA1,0xBDA2,0xBDA3,0xBDA5,0xBDA6,0xBDA7,0xBDA8,/* 0xD0-0xD7 */ + 0xBDA9,0xBDAA,0xBDAB,0xBDAC,0xBDAD,0xBDAE,0xBDAF,0xBDB1,/* 0xD8-0xDF */ + 0xBDB2,0xBDB3,0xBDB4,0xBDB5,0xBDB6,0xBDB7,0xBDB9,0xBDBA,/* 0xE0-0xE7 */ + 0xBDBB,0xBDBC,0xBDBD,0xBDBE,0xBDBF,0xBDC0,0xBDC1,0xBDC2,/* 0xE8-0xEF */ + 0xBDC3,0xBDC4,0xBDC5,0xBDC6,0xBDC7,0xBDC8,0xBDC9,0xBDCA,/* 0xF0-0xF7 */ + 0xBDCB,0xBDCC,0xBDCD,0xBDCE,0xBDCF,0xBDD0,0xBDD1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_95[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBDD2,0xBDD3,0xBDD6,0xBDD7,0xBDD9,0xBDDA,0xBDDB,/* 0x40-0x47 */ + 0xBDDD,0xBDDE,0xBDDF,0xBDE0,0xBDE1,0xBDE2,0xBDE3,0xBDE4,/* 0x48-0x4F */ + 0xBDE5,0xBDE6,0xBDE7,0xBDE8,0xBDEA,0xBDEB,0xBDEC,0xBDED,/* 0x50-0x57 */ + 0xBDEE,0xBDEF,0xBDF1,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBDF2,0xBDF3,0xBDF5,0xBDF6,0xBDF7,0xBDF9,0xBDFA,/* 0x60-0x67 */ + 0xBDFB,0xBDFC,0xBDFD,0xBDFE,0xBDFF,0xBE01,0xBE02,0xBE04,/* 0x68-0x6F */ + 0xBE06,0xBE07,0xBE08,0xBE09,0xBE0A,0xBE0B,0xBE0E,0xBE0F,/* 0x70-0x77 */ + 0xBE11,0xBE12,0xBE13,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBE15,0xBE16,0xBE17,0xBE18,0xBE19,0xBE1A,0xBE1B,/* 0x80-0x87 */ + 0xBE1E,0xBE20,0xBE21,0xBE22,0xBE23,0xBE24,0xBE25,0xBE26,/* 0x88-0x8F */ + 0xBE27,0xBE28,0xBE29,0xBE2A,0xBE2B,0xBE2C,0xBE2D,0xBE2E,/* 0x90-0x97 */ + 0xBE2F,0xBE30,0xBE31,0xBE32,0xBE33,0xBE34,0xBE35,0xBE36,/* 0x98-0x9F */ + 0xBE37,0xBE38,0xBE39,0xBE3A,0xBE3B,0xBE3C,0xBE3D,0xBE3E,/* 0xA0-0xA7 */ + 0xBE3F,0xBE40,0xBE41,0xBE42,0xBE43,0xBE46,0xBE47,0xBE49,/* 0xA8-0xAF */ + 0xBE4A,0xBE4B,0xBE4D,0xBE4F,0xBE50,0xBE51,0xBE52,0xBE53,/* 0xB0-0xB7 */ + 0xBE56,0xBE58,0xBE5C,0xBE5D,0xBE5E,0xBE5F,0xBE62,0xBE63,/* 0xB8-0xBF */ + 0xBE65,0xBE66,0xBE67,0xBE69,0xBE6B,0xBE6C,0xBE6D,0xBE6E,/* 0xC0-0xC7 */ + 0xBE6F,0xBE72,0xBE76,0xBE77,0xBE78,0xBE79,0xBE7A,0xBE7E,/* 0xC8-0xCF */ + 0xBE7F,0xBE81,0xBE82,0xBE83,0xBE85,0xBE86,0xBE87,0xBE88,/* 0xD0-0xD7 */ + 0xBE89,0xBE8A,0xBE8B,0xBE8E,0xBE92,0xBE93,0xBE94,0xBE95,/* 0xD8-0xDF */ + 0xBE96,0xBE97,0xBE9A,0xBE9B,0xBE9C,0xBE9D,0xBE9E,0xBE9F,/* 0xE0-0xE7 */ + 0xBEA0,0xBEA1,0xBEA2,0xBEA3,0xBEA4,0xBEA5,0xBEA6,0xBEA7,/* 0xE8-0xEF */ + 0xBEA9,0xBEAA,0xBEAB,0xBEAC,0xBEAD,0xBEAE,0xBEAF,0xBEB0,/* 0xF0-0xF7 */ + 0xBEB1,0xBEB2,0xBEB3,0xBEB4,0xBEB5,0xBEB6,0xBEB7,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_96[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBEB8,0xBEB9,0xBEBA,0xBEBB,0xBEBC,0xBEBD,0xBEBE,/* 0x40-0x47 */ + 0xBEBF,0xBEC0,0xBEC1,0xBEC2,0xBEC3,0xBEC4,0xBEC5,0xBEC6,/* 0x48-0x4F */ + 0xBEC7,0xBEC8,0xBEC9,0xBECA,0xBECB,0xBECC,0xBECD,0xBECE,/* 0x50-0x57 */ + 0xBECF,0xBED2,0xBED3,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBED5,0xBED6,0xBED9,0xBEDA,0xBEDB,0xBEDC,0xBEDD,/* 0x60-0x67 */ + 0xBEDE,0xBEDF,0xBEE1,0xBEE2,0xBEE6,0xBEE7,0xBEE8,0xBEE9,/* 0x68-0x6F */ + 0xBEEA,0xBEEB,0xBEED,0xBEEE,0xBEEF,0xBEF0,0xBEF1,0xBEF2,/* 0x70-0x77 */ + 0xBEF3,0xBEF4,0xBEF5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBEF6,0xBEF7,0xBEF8,0xBEF9,0xBEFA,0xBEFB,0xBEFC,/* 0x80-0x87 */ + 0xBEFD,0xBEFE,0xBEFF,0xBF00,0xBF02,0xBF03,0xBF04,0xBF05,/* 0x88-0x8F */ + 0xBF06,0xBF07,0xBF0A,0xBF0B,0xBF0C,0xBF0D,0xBF0E,0xBF0F,/* 0x90-0x97 */ + 0xBF10,0xBF11,0xBF12,0xBF13,0xBF14,0xBF15,0xBF16,0xBF17,/* 0x98-0x9F */ + 0xBF1A,0xBF1E,0xBF1F,0xBF20,0xBF21,0xBF22,0xBF23,0xBF24,/* 0xA0-0xA7 */ + 0xBF25,0xBF26,0xBF27,0xBF28,0xBF29,0xBF2A,0xBF2B,0xBF2C,/* 0xA8-0xAF */ + 0xBF2D,0xBF2E,0xBF2F,0xBF30,0xBF31,0xBF32,0xBF33,0xBF34,/* 0xB0-0xB7 */ + 0xBF35,0xBF36,0xBF37,0xBF38,0xBF39,0xBF3A,0xBF3B,0xBF3C,/* 0xB8-0xBF */ + 0xBF3D,0xBF3E,0xBF3F,0xBF42,0xBF43,0xBF45,0xBF46,0xBF47,/* 0xC0-0xC7 */ + 0xBF49,0xBF4A,0xBF4B,0xBF4C,0xBF4D,0xBF4E,0xBF4F,0xBF52,/* 0xC8-0xCF */ + 0xBF53,0xBF54,0xBF56,0xBF57,0xBF58,0xBF59,0xBF5A,0xBF5B,/* 0xD0-0xD7 */ + 0xBF5C,0xBF5D,0xBF5E,0xBF5F,0xBF60,0xBF61,0xBF62,0xBF63,/* 0xD8-0xDF */ + 0xBF64,0xBF65,0xBF66,0xBF67,0xBF68,0xBF69,0xBF6A,0xBF6B,/* 0xE0-0xE7 */ + 0xBF6C,0xBF6D,0xBF6E,0xBF6F,0xBF70,0xBF71,0xBF72,0xBF73,/* 0xE8-0xEF */ + 0xBF74,0xBF75,0xBF76,0xBF77,0xBF78,0xBF79,0xBF7A,0xBF7B,/* 0xF0-0xF7 */ + 0xBF7C,0xBF7D,0xBF7E,0xBF7F,0xBF80,0xBF81,0xBF82,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_97[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xBF83,0xBF84,0xBF85,0xBF86,0xBF87,0xBF88,0xBF89,/* 0x40-0x47 */ + 0xBF8A,0xBF8B,0xBF8C,0xBF8D,0xBF8E,0xBF8F,0xBF90,0xBF91,/* 0x48-0x4F */ + 0xBF92,0xBF93,0xBF95,0xBF96,0xBF97,0xBF98,0xBF99,0xBF9A,/* 0x50-0x57 */ + 0xBF9B,0xBF9C,0xBF9D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xBF9E,0xBF9F,0xBFA0,0xBFA1,0xBFA2,0xBFA3,0xBFA4,/* 0x60-0x67 */ + 0xBFA5,0xBFA6,0xBFA7,0xBFA8,0xBFA9,0xBFAA,0xBFAB,0xBFAC,/* 0x68-0x6F */ + 0xBFAD,0xBFAE,0xBFAF,0xBFB1,0xBFB2,0xBFB3,0xBFB4,0xBFB5,/* 0x70-0x77 */ + 0xBFB6,0xBFB7,0xBFB8,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xBFB9,0xBFBA,0xBFBB,0xBFBC,0xBFBD,0xBFBE,0xBFBF,/* 0x80-0x87 */ + 0xBFC0,0xBFC1,0xBFC2,0xBFC3,0xBFC4,0xBFC6,0xBFC7,0xBFC8,/* 0x88-0x8F */ + 0xBFC9,0xBFCA,0xBFCB,0xBFCE,0xBFCF,0xBFD1,0xBFD2,0xBFD3,/* 0x90-0x97 */ + 0xBFD5,0xBFD6,0xBFD7,0xBFD8,0xBFD9,0xBFDA,0xBFDB,0xBFDD,/* 0x98-0x9F */ + 0xBFDE,0xBFE0,0xBFE2,0xBFE3,0xBFE4,0xBFE5,0xBFE6,0xBFE7,/* 0xA0-0xA7 */ + 0xBFE8,0xBFE9,0xBFEA,0xBFEB,0xBFEC,0xBFED,0xBFEE,0xBFEF,/* 0xA8-0xAF */ + 0xBFF0,0xBFF1,0xBFF2,0xBFF3,0xBFF4,0xBFF5,0xBFF6,0xBFF7,/* 0xB0-0xB7 */ + 0xBFF8,0xBFF9,0xBFFA,0xBFFB,0xBFFC,0xBFFD,0xBFFE,0xBFFF,/* 0xB8-0xBF */ + 0xC000,0xC001,0xC002,0xC003,0xC004,0xC005,0xC006,0xC007,/* 0xC0-0xC7 */ + 0xC008,0xC009,0xC00A,0xC00B,0xC00C,0xC00D,0xC00E,0xC00F,/* 0xC8-0xCF */ + 0xC010,0xC011,0xC012,0xC013,0xC014,0xC015,0xC016,0xC017,/* 0xD0-0xD7 */ + 0xC018,0xC019,0xC01A,0xC01B,0xC01C,0xC01D,0xC01E,0xC01F,/* 0xD8-0xDF */ + 0xC020,0xC021,0xC022,0xC023,0xC024,0xC025,0xC026,0xC027,/* 0xE0-0xE7 */ + 0xC028,0xC029,0xC02A,0xC02B,0xC02C,0xC02D,0xC02E,0xC02F,/* 0xE8-0xEF */ + 0xC030,0xC031,0xC032,0xC033,0xC034,0xC035,0xC036,0xC037,/* 0xF0-0xF7 */ + 0xC038,0xC039,0xC03A,0xC03B,0xC03D,0xC03E,0xC03F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_98[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC040,0xC041,0xC042,0xC043,0xC044,0xC045,0xC046,/* 0x40-0x47 */ + 0xC047,0xC048,0xC049,0xC04A,0xC04B,0xC04C,0xC04D,0xC04E,/* 0x48-0x4F */ + 0xC04F,0xC050,0xC052,0xC053,0xC054,0xC055,0xC056,0xC057,/* 0x50-0x57 */ + 0xC059,0xC05A,0xC05B,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC05D,0xC05E,0xC05F,0xC061,0xC062,0xC063,0xC064,/* 0x60-0x67 */ + 0xC065,0xC066,0xC067,0xC06A,0xC06B,0xC06C,0xC06D,0xC06E,/* 0x68-0x6F */ + 0xC06F,0xC070,0xC071,0xC072,0xC073,0xC074,0xC075,0xC076,/* 0x70-0x77 */ + 0xC077,0xC078,0xC079,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC07A,0xC07B,0xC07C,0xC07D,0xC07E,0xC07F,0xC080,/* 0x80-0x87 */ + 0xC081,0xC082,0xC083,0xC084,0xC085,0xC086,0xC087,0xC088,/* 0x88-0x8F */ + 0xC089,0xC08A,0xC08B,0xC08C,0xC08D,0xC08E,0xC08F,0xC092,/* 0x90-0x97 */ + 0xC093,0xC095,0xC096,0xC097,0xC099,0xC09A,0xC09B,0xC09C,/* 0x98-0x9F */ + 0xC09D,0xC09E,0xC09F,0xC0A2,0xC0A4,0xC0A6,0xC0A7,0xC0A8,/* 0xA0-0xA7 */ + 0xC0A9,0xC0AA,0xC0AB,0xC0AE,0xC0B1,0xC0B2,0xC0B7,0xC0B8,/* 0xA8-0xAF */ + 0xC0B9,0xC0BA,0xC0BB,0xC0BE,0xC0C2,0xC0C3,0xC0C4,0xC0C6,/* 0xB0-0xB7 */ + 0xC0C7,0xC0CA,0xC0CB,0xC0CD,0xC0CE,0xC0CF,0xC0D1,0xC0D2,/* 0xB8-0xBF */ + 0xC0D3,0xC0D4,0xC0D5,0xC0D6,0xC0D7,0xC0DA,0xC0DE,0xC0DF,/* 0xC0-0xC7 */ + 0xC0E0,0xC0E1,0xC0E2,0xC0E3,0xC0E6,0xC0E7,0xC0E9,0xC0EA,/* 0xC8-0xCF */ + 0xC0EB,0xC0ED,0xC0EE,0xC0EF,0xC0F0,0xC0F1,0xC0F2,0xC0F3,/* 0xD0-0xD7 */ + 0xC0F6,0xC0F8,0xC0FA,0xC0FB,0xC0FC,0xC0FD,0xC0FE,0xC0FF,/* 0xD8-0xDF */ + 0xC101,0xC102,0xC103,0xC105,0xC106,0xC107,0xC109,0xC10A,/* 0xE0-0xE7 */ + 0xC10B,0xC10C,0xC10D,0xC10E,0xC10F,0xC111,0xC112,0xC113,/* 0xE8-0xEF */ + 0xC114,0xC116,0xC117,0xC118,0xC119,0xC11A,0xC11B,0xC121,/* 0xF0-0xF7 */ + 0xC122,0xC125,0xC128,0xC129,0xC12A,0xC12B,0xC12E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_99[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC132,0xC133,0xC134,0xC135,0xC137,0xC13A,0xC13B,/* 0x40-0x47 */ + 0xC13D,0xC13E,0xC13F,0xC141,0xC142,0xC143,0xC144,0xC145,/* 0x48-0x4F */ + 0xC146,0xC147,0xC14A,0xC14E,0xC14F,0xC150,0xC151,0xC152,/* 0x50-0x57 */ + 0xC153,0xC156,0xC157,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC159,0xC15A,0xC15B,0xC15D,0xC15E,0xC15F,0xC160,/* 0x60-0x67 */ + 0xC161,0xC162,0xC163,0xC166,0xC16A,0xC16B,0xC16C,0xC16D,/* 0x68-0x6F */ + 0xC16E,0xC16F,0xC171,0xC172,0xC173,0xC175,0xC176,0xC177,/* 0x70-0x77 */ + 0xC179,0xC17A,0xC17B,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC17C,0xC17D,0xC17E,0xC17F,0xC180,0xC181,0xC182,/* 0x80-0x87 */ + 0xC183,0xC184,0xC186,0xC187,0xC188,0xC189,0xC18A,0xC18B,/* 0x88-0x8F */ + 0xC18F,0xC191,0xC192,0xC193,0xC195,0xC197,0xC198,0xC199,/* 0x90-0x97 */ + 0xC19A,0xC19B,0xC19E,0xC1A0,0xC1A2,0xC1A3,0xC1A4,0xC1A6,/* 0x98-0x9F */ + 0xC1A7,0xC1AA,0xC1AB,0xC1AD,0xC1AE,0xC1AF,0xC1B1,0xC1B2,/* 0xA0-0xA7 */ + 0xC1B3,0xC1B4,0xC1B5,0xC1B6,0xC1B7,0xC1B8,0xC1B9,0xC1BA,/* 0xA8-0xAF */ + 0xC1BB,0xC1BC,0xC1BE,0xC1BF,0xC1C0,0xC1C1,0xC1C2,0xC1C3,/* 0xB0-0xB7 */ + 0xC1C5,0xC1C6,0xC1C7,0xC1C9,0xC1CA,0xC1CB,0xC1CD,0xC1CE,/* 0xB8-0xBF */ + 0xC1CF,0xC1D0,0xC1D1,0xC1D2,0xC1D3,0xC1D5,0xC1D6,0xC1D9,/* 0xC0-0xC7 */ + 0xC1DA,0xC1DB,0xC1DC,0xC1DD,0xC1DE,0xC1DF,0xC1E1,0xC1E2,/* 0xC8-0xCF */ + 0xC1E3,0xC1E5,0xC1E6,0xC1E7,0xC1E9,0xC1EA,0xC1EB,0xC1EC,/* 0xD0-0xD7 */ + 0xC1ED,0xC1EE,0xC1EF,0xC1F2,0xC1F4,0xC1F5,0xC1F6,0xC1F7,/* 0xD8-0xDF */ + 0xC1F8,0xC1F9,0xC1FA,0xC1FB,0xC1FE,0xC1FF,0xC201,0xC202,/* 0xE0-0xE7 */ + 0xC203,0xC205,0xC206,0xC207,0xC208,0xC209,0xC20A,0xC20B,/* 0xE8-0xEF */ + 0xC20E,0xC210,0xC212,0xC213,0xC214,0xC215,0xC216,0xC217,/* 0xF0-0xF7 */ + 0xC21A,0xC21B,0xC21D,0xC21E,0xC221,0xC222,0xC223,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9A[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC224,0xC225,0xC226,0xC227,0xC22A,0xC22C,0xC22E,/* 0x40-0x47 */ + 0xC230,0xC233,0xC235,0xC236,0xC237,0xC238,0xC239,0xC23A,/* 0x48-0x4F */ + 0xC23B,0xC23C,0xC23D,0xC23E,0xC23F,0xC240,0xC241,0xC242,/* 0x50-0x57 */ + 0xC243,0xC244,0xC245,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC246,0xC247,0xC249,0xC24A,0xC24B,0xC24C,0xC24D,/* 0x60-0x67 */ + 0xC24E,0xC24F,0xC252,0xC253,0xC255,0xC256,0xC257,0xC259,/* 0x68-0x6F */ + 0xC25A,0xC25B,0xC25C,0xC25D,0xC25E,0xC25F,0xC261,0xC262,/* 0x70-0x77 */ + 0xC263,0xC264,0xC266,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC267,0xC268,0xC269,0xC26A,0xC26B,0xC26E,0xC26F,/* 0x80-0x87 */ + 0xC271,0xC272,0xC273,0xC275,0xC276,0xC277,0xC278,0xC279,/* 0x88-0x8F */ + 0xC27A,0xC27B,0xC27E,0xC280,0xC282,0xC283,0xC284,0xC285,/* 0x90-0x97 */ + 0xC286,0xC287,0xC28A,0xC28B,0xC28C,0xC28D,0xC28E,0xC28F,/* 0x98-0x9F */ + 0xC291,0xC292,0xC293,0xC294,0xC295,0xC296,0xC297,0xC299,/* 0xA0-0xA7 */ + 0xC29A,0xC29C,0xC29E,0xC29F,0xC2A0,0xC2A1,0xC2A2,0xC2A3,/* 0xA8-0xAF */ + 0xC2A6,0xC2A7,0xC2A9,0xC2AA,0xC2AB,0xC2AE,0xC2AF,0xC2B0,/* 0xB0-0xB7 */ + 0xC2B1,0xC2B2,0xC2B3,0xC2B6,0xC2B8,0xC2BA,0xC2BB,0xC2BC,/* 0xB8-0xBF */ + 0xC2BD,0xC2BE,0xC2BF,0xC2C0,0xC2C1,0xC2C2,0xC2C3,0xC2C4,/* 0xC0-0xC7 */ + 0xC2C5,0xC2C6,0xC2C7,0xC2C8,0xC2C9,0xC2CA,0xC2CB,0xC2CC,/* 0xC8-0xCF */ + 0xC2CD,0xC2CE,0xC2CF,0xC2D0,0xC2D1,0xC2D2,0xC2D3,0xC2D4,/* 0xD0-0xD7 */ + 0xC2D5,0xC2D6,0xC2D7,0xC2D8,0xC2D9,0xC2DA,0xC2DB,0xC2DE,/* 0xD8-0xDF */ + 0xC2DF,0xC2E1,0xC2E2,0xC2E5,0xC2E6,0xC2E7,0xC2E8,0xC2E9,/* 0xE0-0xE7 */ + 0xC2EA,0xC2EE,0xC2F0,0xC2F2,0xC2F3,0xC2F4,0xC2F5,0xC2F7,/* 0xE8-0xEF */ + 0xC2FA,0xC2FD,0xC2FE,0xC2FF,0xC301,0xC302,0xC303,0xC304,/* 0xF0-0xF7 */ + 0xC305,0xC306,0xC307,0xC30A,0xC30B,0xC30E,0xC30F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9B[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC310,0xC311,0xC312,0xC316,0xC317,0xC319,0xC31A,/* 0x40-0x47 */ + 0xC31B,0xC31D,0xC31E,0xC31F,0xC320,0xC321,0xC322,0xC323,/* 0x48-0x4F */ + 0xC326,0xC327,0xC32A,0xC32B,0xC32C,0xC32D,0xC32E,0xC32F,/* 0x50-0x57 */ + 0xC330,0xC331,0xC332,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC333,0xC334,0xC335,0xC336,0xC337,0xC338,0xC339,/* 0x60-0x67 */ + 0xC33A,0xC33B,0xC33C,0xC33D,0xC33E,0xC33F,0xC340,0xC341,/* 0x68-0x6F */ + 0xC342,0xC343,0xC344,0xC346,0xC347,0xC348,0xC349,0xC34A,/* 0x70-0x77 */ + 0xC34B,0xC34C,0xC34D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC34E,0xC34F,0xC350,0xC351,0xC352,0xC353,0xC354,/* 0x80-0x87 */ + 0xC355,0xC356,0xC357,0xC358,0xC359,0xC35A,0xC35B,0xC35C,/* 0x88-0x8F */ + 0xC35D,0xC35E,0xC35F,0xC360,0xC361,0xC362,0xC363,0xC364,/* 0x90-0x97 */ + 0xC365,0xC366,0xC367,0xC36A,0xC36B,0xC36D,0xC36E,0xC36F,/* 0x98-0x9F */ + 0xC371,0xC373,0xC374,0xC375,0xC376,0xC377,0xC37A,0xC37B,/* 0xA0-0xA7 */ + 0xC37E,0xC37F,0xC380,0xC381,0xC382,0xC383,0xC385,0xC386,/* 0xA8-0xAF */ + 0xC387,0xC389,0xC38A,0xC38B,0xC38D,0xC38E,0xC38F,0xC390,/* 0xB0-0xB7 */ + 0xC391,0xC392,0xC393,0xC394,0xC395,0xC396,0xC397,0xC398,/* 0xB8-0xBF */ + 0xC399,0xC39A,0xC39B,0xC39C,0xC39D,0xC39E,0xC39F,0xC3A0,/* 0xC0-0xC7 */ + 0xC3A1,0xC3A2,0xC3A3,0xC3A4,0xC3A5,0xC3A6,0xC3A7,0xC3A8,/* 0xC8-0xCF */ + 0xC3A9,0xC3AA,0xC3AB,0xC3AC,0xC3AD,0xC3AE,0xC3AF,0xC3B0,/* 0xD0-0xD7 */ + 0xC3B1,0xC3B2,0xC3B3,0xC3B4,0xC3B5,0xC3B6,0xC3B7,0xC3B8,/* 0xD8-0xDF */ + 0xC3B9,0xC3BA,0xC3BB,0xC3BC,0xC3BD,0xC3BE,0xC3BF,0xC3C1,/* 0xE0-0xE7 */ + 0xC3C2,0xC3C3,0xC3C4,0xC3C5,0xC3C6,0xC3C7,0xC3C8,0xC3C9,/* 0xE8-0xEF */ + 0xC3CA,0xC3CB,0xC3CC,0xC3CD,0xC3CE,0xC3CF,0xC3D0,0xC3D1,/* 0xF0-0xF7 */ + 0xC3D2,0xC3D3,0xC3D4,0xC3D5,0xC3D6,0xC3D7,0xC3DA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9C[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC3DB,0xC3DD,0xC3DE,0xC3E1,0xC3E3,0xC3E4,0xC3E5,/* 0x40-0x47 */ + 0xC3E6,0xC3E7,0xC3EA,0xC3EB,0xC3EC,0xC3EE,0xC3EF,0xC3F0,/* 0x48-0x4F */ + 0xC3F1,0xC3F2,0xC3F3,0xC3F6,0xC3F7,0xC3F9,0xC3FA,0xC3FB,/* 0x50-0x57 */ + 0xC3FC,0xC3FD,0xC3FE,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC3FF,0xC400,0xC401,0xC402,0xC403,0xC404,0xC405,/* 0x60-0x67 */ + 0xC406,0xC407,0xC409,0xC40A,0xC40B,0xC40C,0xC40D,0xC40E,/* 0x68-0x6F */ + 0xC40F,0xC411,0xC412,0xC413,0xC414,0xC415,0xC416,0xC417,/* 0x70-0x77 */ + 0xC418,0xC419,0xC41A,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC41B,0xC41C,0xC41D,0xC41E,0xC41F,0xC420,0xC421,/* 0x80-0x87 */ + 0xC422,0xC423,0xC425,0xC426,0xC427,0xC428,0xC429,0xC42A,/* 0x88-0x8F */ + 0xC42B,0xC42D,0xC42E,0xC42F,0xC431,0xC432,0xC433,0xC435,/* 0x90-0x97 */ + 0xC436,0xC437,0xC438,0xC439,0xC43A,0xC43B,0xC43E,0xC43F,/* 0x98-0x9F */ + 0xC440,0xC441,0xC442,0xC443,0xC444,0xC445,0xC446,0xC447,/* 0xA0-0xA7 */ + 0xC449,0xC44A,0xC44B,0xC44C,0xC44D,0xC44E,0xC44F,0xC450,/* 0xA8-0xAF */ + 0xC451,0xC452,0xC453,0xC454,0xC455,0xC456,0xC457,0xC458,/* 0xB0-0xB7 */ + 0xC459,0xC45A,0xC45B,0xC45C,0xC45D,0xC45E,0xC45F,0xC460,/* 0xB8-0xBF */ + 0xC461,0xC462,0xC463,0xC466,0xC467,0xC469,0xC46A,0xC46B,/* 0xC0-0xC7 */ + 0xC46D,0xC46E,0xC46F,0xC470,0xC471,0xC472,0xC473,0xC476,/* 0xC8-0xCF */ + 0xC477,0xC478,0xC47A,0xC47B,0xC47C,0xC47D,0xC47E,0xC47F,/* 0xD0-0xD7 */ + 0xC481,0xC482,0xC483,0xC484,0xC485,0xC486,0xC487,0xC488,/* 0xD8-0xDF */ + 0xC489,0xC48A,0xC48B,0xC48C,0xC48D,0xC48E,0xC48F,0xC490,/* 0xE0-0xE7 */ + 0xC491,0xC492,0xC493,0xC495,0xC496,0xC497,0xC498,0xC499,/* 0xE8-0xEF */ + 0xC49A,0xC49B,0xC49D,0xC49E,0xC49F,0xC4A0,0xC4A1,0xC4A2,/* 0xF0-0xF7 */ + 0xC4A3,0xC4A4,0xC4A5,0xC4A6,0xC4A7,0xC4A8,0xC4A9,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9D[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC4AA,0xC4AB,0xC4AC,0xC4AD,0xC4AE,0xC4AF,0xC4B0,/* 0x40-0x47 */ + 0xC4B1,0xC4B2,0xC4B3,0xC4B4,0xC4B5,0xC4B6,0xC4B7,0xC4B9,/* 0x48-0x4F */ + 0xC4BA,0xC4BB,0xC4BD,0xC4BE,0xC4BF,0xC4C0,0xC4C1,0xC4C2,/* 0x50-0x57 */ + 0xC4C3,0xC4C4,0xC4C5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC4C6,0xC4C7,0xC4C8,0xC4C9,0xC4CA,0xC4CB,0xC4CC,/* 0x60-0x67 */ + 0xC4CD,0xC4CE,0xC4CF,0xC4D0,0xC4D1,0xC4D2,0xC4D3,0xC4D4,/* 0x68-0x6F */ + 0xC4D5,0xC4D6,0xC4D7,0xC4D8,0xC4D9,0xC4DA,0xC4DB,0xC4DC,/* 0x70-0x77 */ + 0xC4DD,0xC4DE,0xC4DF,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC4E0,0xC4E1,0xC4E2,0xC4E3,0xC4E4,0xC4E5,0xC4E6,/* 0x80-0x87 */ + 0xC4E7,0xC4E8,0xC4EA,0xC4EB,0xC4EC,0xC4ED,0xC4EE,0xC4EF,/* 0x88-0x8F */ + 0xC4F2,0xC4F3,0xC4F5,0xC4F6,0xC4F7,0xC4F9,0xC4FB,0xC4FC,/* 0x90-0x97 */ + 0xC4FD,0xC4FE,0xC502,0xC503,0xC504,0xC505,0xC506,0xC507,/* 0x98-0x9F */ + 0xC508,0xC509,0xC50A,0xC50B,0xC50D,0xC50E,0xC50F,0xC511,/* 0xA0-0xA7 */ + 0xC512,0xC513,0xC515,0xC516,0xC517,0xC518,0xC519,0xC51A,/* 0xA8-0xAF */ + 0xC51B,0xC51D,0xC51E,0xC51F,0xC520,0xC521,0xC522,0xC523,/* 0xB0-0xB7 */ + 0xC524,0xC525,0xC526,0xC527,0xC52A,0xC52B,0xC52D,0xC52E,/* 0xB8-0xBF */ + 0xC52F,0xC531,0xC532,0xC533,0xC534,0xC535,0xC536,0xC537,/* 0xC0-0xC7 */ + 0xC53A,0xC53C,0xC53E,0xC53F,0xC540,0xC541,0xC542,0xC543,/* 0xC8-0xCF */ + 0xC546,0xC547,0xC54B,0xC54F,0xC550,0xC551,0xC552,0xC556,/* 0xD0-0xD7 */ + 0xC55A,0xC55B,0xC55C,0xC55F,0xC562,0xC563,0xC565,0xC566,/* 0xD8-0xDF */ + 0xC567,0xC569,0xC56A,0xC56B,0xC56C,0xC56D,0xC56E,0xC56F,/* 0xE0-0xE7 */ + 0xC572,0xC576,0xC577,0xC578,0xC579,0xC57A,0xC57B,0xC57E,/* 0xE8-0xEF */ + 0xC57F,0xC581,0xC582,0xC583,0xC585,0xC586,0xC588,0xC589,/* 0xF0-0xF7 */ + 0xC58A,0xC58B,0xC58E,0xC590,0xC592,0xC593,0xC594,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9E[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC596,0xC599,0xC59A,0xC59B,0xC59D,0xC59E,0xC59F,/* 0x40-0x47 */ + 0xC5A1,0xC5A2,0xC5A3,0xC5A4,0xC5A5,0xC5A6,0xC5A7,0xC5A8,/* 0x48-0x4F */ + 0xC5AA,0xC5AB,0xC5AC,0xC5AD,0xC5AE,0xC5AF,0xC5B0,0xC5B1,/* 0x50-0x57 */ + 0xC5B2,0xC5B3,0xC5B6,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC5B7,0xC5BA,0xC5BF,0xC5C0,0xC5C1,0xC5C2,0xC5C3,/* 0x60-0x67 */ + 0xC5CB,0xC5CD,0xC5CF,0xC5D2,0xC5D3,0xC5D5,0xC5D6,0xC5D7,/* 0x68-0x6F */ + 0xC5D9,0xC5DA,0xC5DB,0xC5DC,0xC5DD,0xC5DE,0xC5DF,0xC5E2,/* 0x70-0x77 */ + 0xC5E4,0xC5E6,0xC5E7,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC5E8,0xC5E9,0xC5EA,0xC5EB,0xC5EF,0xC5F1,0xC5F2,/* 0x80-0x87 */ + 0xC5F3,0xC5F5,0xC5F8,0xC5F9,0xC5FA,0xC5FB,0xC602,0xC603,/* 0x88-0x8F */ + 0xC604,0xC609,0xC60A,0xC60B,0xC60D,0xC60E,0xC60F,0xC611,/* 0x90-0x97 */ + 0xC612,0xC613,0xC614,0xC615,0xC616,0xC617,0xC61A,0xC61D,/* 0x98-0x9F */ + 0xC61E,0xC61F,0xC620,0xC621,0xC622,0xC623,0xC626,0xC627,/* 0xA0-0xA7 */ + 0xC629,0xC62A,0xC62B,0xC62F,0xC631,0xC632,0xC636,0xC638,/* 0xA8-0xAF */ + 0xC63A,0xC63C,0xC63D,0xC63E,0xC63F,0xC642,0xC643,0xC645,/* 0xB0-0xB7 */ + 0xC646,0xC647,0xC649,0xC64A,0xC64B,0xC64C,0xC64D,0xC64E,/* 0xB8-0xBF */ + 0xC64F,0xC652,0xC656,0xC657,0xC658,0xC659,0xC65A,0xC65B,/* 0xC0-0xC7 */ + 0xC65E,0xC65F,0xC661,0xC662,0xC663,0xC664,0xC665,0xC666,/* 0xC8-0xCF */ + 0xC667,0xC668,0xC669,0xC66A,0xC66B,0xC66D,0xC66E,0xC670,/* 0xD0-0xD7 */ + 0xC672,0xC673,0xC674,0xC675,0xC676,0xC677,0xC67A,0xC67B,/* 0xD8-0xDF */ + 0xC67D,0xC67E,0xC67F,0xC681,0xC682,0xC683,0xC684,0xC685,/* 0xE0-0xE7 */ + 0xC686,0xC687,0xC68A,0xC68C,0xC68E,0xC68F,0xC690,0xC691,/* 0xE8-0xEF */ + 0xC692,0xC693,0xC696,0xC697,0xC699,0xC69A,0xC69B,0xC69D,/* 0xF0-0xF7 */ + 0xC69E,0xC69F,0xC6A0,0xC6A1,0xC6A2,0xC6A3,0xC6A6,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_9F[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC6A8,0xC6AA,0xC6AB,0xC6AC,0xC6AD,0xC6AE,0xC6AF,/* 0x40-0x47 */ + 0xC6B2,0xC6B3,0xC6B5,0xC6B6,0xC6B7,0xC6BB,0xC6BC,0xC6BD,/* 0x48-0x4F */ + 0xC6BE,0xC6BF,0xC6C2,0xC6C4,0xC6C6,0xC6C7,0xC6C8,0xC6C9,/* 0x50-0x57 */ + 0xC6CA,0xC6CB,0xC6CE,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC6CF,0xC6D1,0xC6D2,0xC6D3,0xC6D5,0xC6D6,0xC6D7,/* 0x60-0x67 */ + 0xC6D8,0xC6D9,0xC6DA,0xC6DB,0xC6DE,0xC6DF,0xC6E2,0xC6E3,/* 0x68-0x6F */ + 0xC6E4,0xC6E5,0xC6E6,0xC6E7,0xC6EA,0xC6EB,0xC6ED,0xC6EE,/* 0x70-0x77 */ + 0xC6EF,0xC6F1,0xC6F2,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC6F3,0xC6F4,0xC6F5,0xC6F6,0xC6F7,0xC6FA,0xC6FB,/* 0x80-0x87 */ + 0xC6FC,0xC6FE,0xC6FF,0xC700,0xC701,0xC702,0xC703,0xC706,/* 0x88-0x8F */ + 0xC707,0xC709,0xC70A,0xC70B,0xC70D,0xC70E,0xC70F,0xC710,/* 0x90-0x97 */ + 0xC711,0xC712,0xC713,0xC716,0xC718,0xC71A,0xC71B,0xC71C,/* 0x98-0x9F */ + 0xC71D,0xC71E,0xC71F,0xC722,0xC723,0xC725,0xC726,0xC727,/* 0xA0-0xA7 */ + 0xC729,0xC72A,0xC72B,0xC72C,0xC72D,0xC72E,0xC72F,0xC732,/* 0xA8-0xAF */ + 0xC734,0xC736,0xC738,0xC739,0xC73A,0xC73B,0xC73E,0xC73F,/* 0xB0-0xB7 */ + 0xC741,0xC742,0xC743,0xC745,0xC746,0xC747,0xC748,0xC749,/* 0xB8-0xBF */ + 0xC74B,0xC74E,0xC750,0xC759,0xC75A,0xC75B,0xC75D,0xC75E,/* 0xC0-0xC7 */ + 0xC75F,0xC761,0xC762,0xC763,0xC764,0xC765,0xC766,0xC767,/* 0xC8-0xCF */ + 0xC769,0xC76A,0xC76C,0xC76D,0xC76E,0xC76F,0xC770,0xC771,/* 0xD0-0xD7 */ + 0xC772,0xC773,0xC776,0xC777,0xC779,0xC77A,0xC77B,0xC77F,/* 0xD8-0xDF */ + 0xC780,0xC781,0xC782,0xC786,0xC78B,0xC78C,0xC78D,0xC78F,/* 0xE0-0xE7 */ + 0xC792,0xC793,0xC795,0xC799,0xC79B,0xC79C,0xC79D,0xC79E,/* 0xE8-0xEF */ + 0xC79F,0xC7A2,0xC7A7,0xC7A8,0xC7A9,0xC7AA,0xC7AB,0xC7AE,/* 0xF0-0xF7 */ + 0xC7AF,0xC7B1,0xC7B2,0xC7B3,0xC7B5,0xC7B6,0xC7B7,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC7B8,0xC7B9,0xC7BA,0xC7BB,0xC7BE,0xC7C2,0xC7C3,/* 0x40-0x47 */ + 0xC7C4,0xC7C5,0xC7C6,0xC7C7,0xC7CA,0xC7CB,0xC7CD,0xC7CF,/* 0x48-0x4F */ + 0xC7D1,0xC7D2,0xC7D3,0xC7D4,0xC7D5,0xC7D6,0xC7D7,0xC7D9,/* 0x50-0x57 */ + 0xC7DA,0xC7DB,0xC7DC,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC7DE,0xC7DF,0xC7E0,0xC7E1,0xC7E2,0xC7E3,0xC7E5,/* 0x60-0x67 */ + 0xC7E6,0xC7E7,0xC7E9,0xC7EA,0xC7EB,0xC7ED,0xC7EE,0xC7EF,/* 0x68-0x6F */ + 0xC7F0,0xC7F1,0xC7F2,0xC7F3,0xC7F4,0xC7F5,0xC7F6,0xC7F7,/* 0x70-0x77 */ + 0xC7F8,0xC7F9,0xC7FA,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC7FB,0xC7FC,0xC7FD,0xC7FE,0xC7FF,0xC802,0xC803,/* 0x80-0x87 */ + 0xC805,0xC806,0xC807,0xC809,0xC80B,0xC80C,0xC80D,0xC80E,/* 0x88-0x8F */ + 0xC80F,0xC812,0xC814,0xC817,0xC818,0xC819,0xC81A,0xC81B,/* 0x90-0x97 */ + 0xC81E,0xC81F,0xC821,0xC822,0xC823,0xC825,0xC826,0xC827,/* 0x98-0x9F */ + 0xC828,0xC829,0xC82A,0xC82B,0xC82E,0xC830,0xC832,0xC833,/* 0xA0-0xA7 */ + 0xC834,0xC835,0xC836,0xC837,0xC839,0xC83A,0xC83B,0xC83D,/* 0xA8-0xAF */ + 0xC83E,0xC83F,0xC841,0xC842,0xC843,0xC844,0xC845,0xC846,/* 0xB0-0xB7 */ + 0xC847,0xC84A,0xC84B,0xC84E,0xC84F,0xC850,0xC851,0xC852,/* 0xB8-0xBF */ + 0xC853,0xC855,0xC856,0xC857,0xC858,0xC859,0xC85A,0xC85B,/* 0xC0-0xC7 */ + 0xC85C,0xC85D,0xC85E,0xC85F,0xC860,0xC861,0xC862,0xC863,/* 0xC8-0xCF */ + 0xC864,0xC865,0xC866,0xC867,0xC868,0xC869,0xC86A,0xC86B,/* 0xD0-0xD7 */ + 0xC86C,0xC86D,0xC86E,0xC86F,0xC872,0xC873,0xC875,0xC876,/* 0xD8-0xDF */ + 0xC877,0xC879,0xC87B,0xC87C,0xC87D,0xC87E,0xC87F,0xC882,/* 0xE0-0xE7 */ + 0xC884,0xC888,0xC889,0xC88A,0xC88E,0xC88F,0xC890,0xC891,/* 0xE8-0xEF */ + 0xC892,0xC893,0xC895,0xC896,0xC897,0xC898,0xC899,0xC89A,/* 0xF0-0xF7 */ + 0xC89B,0xC89C,0xC89E,0xC8A0,0xC8A2,0xC8A3,0xC8A4,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC8A5,0xC8A6,0xC8A7,0xC8A9,0xC8AA,0xC8AB,0xC8AC,/* 0x40-0x47 */ + 0xC8AD,0xC8AE,0xC8AF,0xC8B0,0xC8B1,0xC8B2,0xC8B3,0xC8B4,/* 0x48-0x4F */ + 0xC8B5,0xC8B6,0xC8B7,0xC8B8,0xC8B9,0xC8BA,0xC8BB,0xC8BE,/* 0x50-0x57 */ + 0xC8BF,0xC8C0,0xC8C1,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC8C2,0xC8C3,0xC8C5,0xC8C6,0xC8C7,0xC8C9,0xC8CA,/* 0x60-0x67 */ + 0xC8CB,0xC8CD,0xC8CE,0xC8CF,0xC8D0,0xC8D1,0xC8D2,0xC8D3,/* 0x68-0x6F */ + 0xC8D6,0xC8D8,0xC8DA,0xC8DB,0xC8DC,0xC8DD,0xC8DE,0xC8DF,/* 0x70-0x77 */ + 0xC8E2,0xC8E3,0xC8E5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC8E6,0xC8E7,0xC8E8,0xC8E9,0xC8EA,0xC8EB,0xC8EC,/* 0x80-0x87 */ + 0xC8ED,0xC8EE,0xC8EF,0xC8F0,0xC8F1,0xC8F2,0xC8F3,0xC8F4,/* 0x88-0x8F */ + 0xC8F6,0xC8F7,0xC8F8,0xC8F9,0xC8FA,0xC8FB,0xC8FE,0xC8FF,/* 0x90-0x97 */ + 0xC901,0xC902,0xC903,0xC907,0xC908,0xC909,0xC90A,0xC90B,/* 0x98-0x9F */ + 0xC90E,0x3000,0x3001,0x3002,0x00B7,0x2025,0x2026,0x00A8,/* 0xA0-0xA7 */ + 0x3003,0x00AD,0x2015,0x2225,0xFF3C,0x223C,0x2018,0x2019,/* 0xA8-0xAF */ + 0x201C,0x201D,0x3014,0x3015,0x3008,0x3009,0x300A,0x300B,/* 0xB0-0xB7 */ + 0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0x00B1,0x00D7,/* 0xB8-0xBF */ + 0x00F7,0x2260,0x2264,0x2265,0x221E,0x2234,0x00B0,0x2032,/* 0xC0-0xC7 */ + 0x2033,0x2103,0x212B,0xFFE0,0xFFE1,0xFFE5,0x2642,0x2640,/* 0xC8-0xCF */ + 0x2220,0x22A5,0x2312,0x2202,0x2207,0x2261,0x2252,0x00A7,/* 0xD0-0xD7 */ + 0x203B,0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7,0x25C6,/* 0xD8-0xDF */ + 0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x2192,0x2190,/* 0xE0-0xE7 */ + 0x2191,0x2193,0x2194,0x3013,0x226A,0x226B,0x221A,0x223D,/* 0xE8-0xEF */ + 0x221D,0x2235,0x222B,0x222C,0x2208,0x220B,0x2286,0x2287,/* 0xF0-0xF7 */ + 0x2282,0x2283,0x222A,0x2229,0x2227,0x2228,0xFFE2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC910,0xC912,0xC913,0xC914,0xC915,0xC916,0xC917,/* 0x40-0x47 */ + 0xC919,0xC91A,0xC91B,0xC91C,0xC91D,0xC91E,0xC91F,0xC920,/* 0x48-0x4F */ + 0xC921,0xC922,0xC923,0xC924,0xC925,0xC926,0xC927,0xC928,/* 0x50-0x57 */ + 0xC929,0xC92A,0xC92B,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC92D,0xC92E,0xC92F,0xC930,0xC931,0xC932,0xC933,/* 0x60-0x67 */ + 0xC935,0xC936,0xC937,0xC938,0xC939,0xC93A,0xC93B,0xC93C,/* 0x68-0x6F */ + 0xC93D,0xC93E,0xC93F,0xC940,0xC941,0xC942,0xC943,0xC944,/* 0x70-0x77 */ + 0xC945,0xC946,0xC947,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC948,0xC949,0xC94A,0xC94B,0xC94C,0xC94D,0xC94E,/* 0x80-0x87 */ + 0xC94F,0xC952,0xC953,0xC955,0xC956,0xC957,0xC959,0xC95A,/* 0x88-0x8F */ + 0xC95B,0xC95C,0xC95D,0xC95E,0xC95F,0xC962,0xC964,0xC965,/* 0x90-0x97 */ + 0xC966,0xC967,0xC968,0xC969,0xC96A,0xC96B,0xC96D,0xC96E,/* 0x98-0x9F */ + 0xC96F,0x21D2,0x21D4,0x2200,0x2203,0x00B4,0xFF5E,0x02C7,/* 0xA0-0xA7 */ + 0x02D8,0x02DD,0x02DA,0x02D9,0x00B8,0x02DB,0x00A1,0x00BF,/* 0xA8-0xAF */ + 0x02D0,0x222E,0x2211,0x220F,0x00A4,0x2109,0x2030,0x25C1,/* 0xB0-0xB7 */ + 0x25C0,0x25B7,0x25B6,0x2664,0x2660,0x2661,0x2665,0x2667,/* 0xB8-0xBF */ + 0x2663,0x2299,0x25C8,0x25A3,0x25D0,0x25D1,0x2592,0x25A4,/* 0xC0-0xC7 */ + 0x25A5,0x25A8,0x25A7,0x25A6,0x25A9,0x2668,0x260F,0x260E,/* 0xC8-0xCF */ + 0x261C,0x261E,0x00B6,0x2020,0x2021,0x2195,0x2197,0x2199,/* 0xD0-0xD7 */ + 0x2196,0x2198,0x266D,0x2669,0x266A,0x266C,0x327F,0x321C,/* 0xD8-0xDF */ + 0x2116,0x33C7,0x2122,0x33C2,0x33D8,0x2121,0x0000,0x0000,/* 0xE0-0xE7 */ +}; + +static wchar_t c2u_A3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC971,0xC972,0xC973,0xC975,0xC976,0xC977,0xC978,/* 0x40-0x47 */ + 0xC979,0xC97A,0xC97B,0xC97D,0xC97E,0xC97F,0xC980,0xC981,/* 0x48-0x4F */ + 0xC982,0xC983,0xC984,0xC985,0xC986,0xC987,0xC98A,0xC98B,/* 0x50-0x57 */ + 0xC98D,0xC98E,0xC98F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xC991,0xC992,0xC993,0xC994,0xC995,0xC996,0xC997,/* 0x60-0x67 */ + 0xC99A,0xC99C,0xC99E,0xC99F,0xC9A0,0xC9A1,0xC9A2,0xC9A3,/* 0x68-0x6F */ + 0xC9A4,0xC9A5,0xC9A6,0xC9A7,0xC9A8,0xC9A9,0xC9AA,0xC9AB,/* 0x70-0x77 */ + 0xC9AC,0xC9AD,0xC9AE,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xC9AF,0xC9B0,0xC9B1,0xC9B2,0xC9B3,0xC9B4,0xC9B5,/* 0x80-0x87 */ + 0xC9B6,0xC9B7,0xC9B8,0xC9B9,0xC9BA,0xC9BB,0xC9BC,0xC9BD,/* 0x88-0x8F */ + 0xC9BE,0xC9BF,0xC9C2,0xC9C3,0xC9C5,0xC9C6,0xC9C9,0xC9CB,/* 0x90-0x97 */ + 0xC9CC,0xC9CD,0xC9CE,0xC9CF,0xC9D2,0xC9D4,0xC9D7,0xC9D8,/* 0x98-0x9F */ + 0xC9DB,0xFF01,0xFF02,0xFF03,0xFF04,0xFF05,0xFF06,0xFF07,/* 0xA0-0xA7 */ + 0xFF08,0xFF09,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF0F,/* 0xA8-0xAF */ + 0xFF10,0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,/* 0xB0-0xB7 */ + 0xFF18,0xFF19,0xFF1A,0xFF1B,0xFF1C,0xFF1D,0xFF1E,0xFF1F,/* 0xB8-0xBF */ + 0xFF20,0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,/* 0xC0-0xC7 */ + 0xFF28,0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,/* 0xC8-0xCF */ + 0xFF30,0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,/* 0xD0-0xD7 */ + 0xFF38,0xFF39,0xFF3A,0xFF3B,0xFFE6,0xFF3D,0xFF3E,0xFF3F,/* 0xD8-0xDF */ + 0xFF40,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,/* 0xE0-0xE7 */ + 0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,/* 0xE8-0xEF */ + 0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,/* 0xF0-0xF7 */ + 0xFF58,0xFF59,0xFF5A,0xFF5B,0xFF5C,0xFF5D,0xFFE3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xC9DE,0xC9DF,0xC9E1,0xC9E3,0xC9E5,0xC9E6,0xC9E8,/* 0x40-0x47 */ + 0xC9E9,0xC9EA,0xC9EB,0xC9EE,0xC9F2,0xC9F3,0xC9F4,0xC9F5,/* 0x48-0x4F */ + 0xC9F6,0xC9F7,0xC9FA,0xC9FB,0xC9FD,0xC9FE,0xC9FF,0xCA01,/* 0x50-0x57 */ + 0xCA02,0xCA03,0xCA04,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCA05,0xCA06,0xCA07,0xCA0A,0xCA0E,0xCA0F,0xCA10,/* 0x60-0x67 */ + 0xCA11,0xCA12,0xCA13,0xCA15,0xCA16,0xCA17,0xCA19,0xCA1A,/* 0x68-0x6F */ + 0xCA1B,0xCA1C,0xCA1D,0xCA1E,0xCA1F,0xCA20,0xCA21,0xCA22,/* 0x70-0x77 */ + 0xCA23,0xCA24,0xCA25,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCA26,0xCA27,0xCA28,0xCA2A,0xCA2B,0xCA2C,0xCA2D,/* 0x80-0x87 */ + 0xCA2E,0xCA2F,0xCA30,0xCA31,0xCA32,0xCA33,0xCA34,0xCA35,/* 0x88-0x8F */ + 0xCA36,0xCA37,0xCA38,0xCA39,0xCA3A,0xCA3B,0xCA3C,0xCA3D,/* 0x90-0x97 */ + 0xCA3E,0xCA3F,0xCA40,0xCA41,0xCA42,0xCA43,0xCA44,0xCA45,/* 0x98-0x9F */ + 0xCA46,0xFFA1,0xFFA2,0xFFA3,0xFFA4,0xFFA5,0xFFA6,0xFFA7,/* 0xA0-0xA7 */ + 0xFFA8,0xFFA9,0xFFAA,0xFFAB,0xFFAC,0xFFAD,0xFFAE,0xFFAF,/* 0xA8-0xAF */ + 0xFFB0,0xFFB1,0xFFB2,0xFFB3,0xFFB4,0xFFB5,0xFFB6,0xFFB7,/* 0xB0-0xB7 */ + 0xFFB8,0xFFB9,0xFFBA,0xFFBB,0xFFBC,0xFFBD,0xFFBE,0xFFC2,/* 0xB8-0xBF */ + 0xFFC3,0xFFC4,0xFFC5,0xFFC6,0xFFC7,0xFFCA,0xFFCB,0xFFCC,/* 0xC0-0xC7 */ + 0xFFCD,0xFFCE,0xFFCF,0xFFD2,0xFFD3,0xFFD4,0xFFD5,0xFFD6,/* 0xC8-0xCF */ + 0xFFD7,0xFFDA,0xFFDB,0xFFDC,0xFFA0,0x3165,0x3166,0x3167,/* 0xD0-0xD7 */ + 0x3168,0x3169,0x316A,0x316B,0x316C,0x316D,0x316E,0x316F,/* 0xD8-0xDF */ + 0x3170,0x3171,0x3172,0x3173,0x3174,0x3175,0x3176,0x3177,/* 0xE0-0xE7 */ + 0x3178,0x3179,0x317A,0x317B,0x317C,0x317D,0x317E,0x317F,/* 0xE8-0xEF */ + 0x3180,0x3181,0x3182,0x3183,0x3184,0x3185,0x3186,0x3187,/* 0xF0-0xF7 */ + 0x3188,0x3189,0x318A,0x318B,0x318C,0x318D,0x318E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCA47,0xCA48,0xCA49,0xCA4A,0xCA4B,0xCA4E,0xCA4F,/* 0x40-0x47 */ + 0xCA51,0xCA52,0xCA53,0xCA55,0xCA56,0xCA57,0xCA58,0xCA59,/* 0x48-0x4F */ + 0xCA5A,0xCA5B,0xCA5E,0xCA62,0xCA63,0xCA64,0xCA65,0xCA66,/* 0x50-0x57 */ + 0xCA67,0xCA69,0xCA6A,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCA6B,0xCA6C,0xCA6D,0xCA6E,0xCA6F,0xCA70,0xCA71,/* 0x60-0x67 */ + 0xCA72,0xCA73,0xCA74,0xCA75,0xCA76,0xCA77,0xCA78,0xCA79,/* 0x68-0x6F */ + 0xCA7A,0xCA7B,0xCA7C,0xCA7E,0xCA7F,0xCA80,0xCA81,0xCA82,/* 0x70-0x77 */ + 0xCA83,0xCA85,0xCA86,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCA87,0xCA88,0xCA89,0xCA8A,0xCA8B,0xCA8C,0xCA8D,/* 0x80-0x87 */ + 0xCA8E,0xCA8F,0xCA90,0xCA91,0xCA92,0xCA93,0xCA94,0xCA95,/* 0x88-0x8F */ + 0xCA96,0xCA97,0xCA99,0xCA9A,0xCA9B,0xCA9C,0xCA9D,0xCA9E,/* 0x90-0x97 */ + 0xCA9F,0xCAA0,0xCAA1,0xCAA2,0xCAA3,0xCAA4,0xCAA5,0xCAA6,/* 0x98-0x9F */ + 0xCAA7,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,/* 0xA0-0xA7 */ + 0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA8-0xAF */ + 0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,/* 0xB0-0xB7 */ + 0x2168,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xB8-0xBF */ + 0x0000,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,/* 0xC0-0xC7 */ + 0x0398,0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,/* 0xC8-0xCF */ + 0x03A0,0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,/* 0xD0-0xD7 */ + 0x03A9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD8-0xDF */ + 0x0000,0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,/* 0xE0-0xE7 */ + 0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,/* 0xE8-0xEF */ + 0x03C0,0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,/* 0xF0-0xF7 */ + 0x03C9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCAA8,0xCAA9,0xCAAA,0xCAAB,0xCAAC,0xCAAD,0xCAAE,/* 0x40-0x47 */ + 0xCAAF,0xCAB0,0xCAB1,0xCAB2,0xCAB3,0xCAB4,0xCAB5,0xCAB6,/* 0x48-0x4F */ + 0xCAB7,0xCAB8,0xCAB9,0xCABA,0xCABB,0xCABE,0xCABF,0xCAC1,/* 0x50-0x57 */ + 0xCAC2,0xCAC3,0xCAC5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCAC6,0xCAC7,0xCAC8,0xCAC9,0xCACA,0xCACB,0xCACE,/* 0x60-0x67 */ + 0xCAD0,0xCAD2,0xCAD4,0xCAD5,0xCAD6,0xCAD7,0xCADA,0xCADB,/* 0x68-0x6F */ + 0xCADC,0xCADD,0xCADE,0xCADF,0xCAE1,0xCAE2,0xCAE3,0xCAE4,/* 0x70-0x77 */ + 0xCAE5,0xCAE6,0xCAE7,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCAE8,0xCAE9,0xCAEA,0xCAEB,0xCAED,0xCAEE,0xCAEF,/* 0x80-0x87 */ + 0xCAF0,0xCAF1,0xCAF2,0xCAF3,0xCAF5,0xCAF6,0xCAF7,0xCAF8,/* 0x88-0x8F */ + 0xCAF9,0xCAFA,0xCAFB,0xCAFC,0xCAFD,0xCAFE,0xCAFF,0xCB00,/* 0x90-0x97 */ + 0xCB01,0xCB02,0xCB03,0xCB04,0xCB05,0xCB06,0xCB07,0xCB09,/* 0x98-0x9F */ + 0xCB0A,0x2500,0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,/* 0xA0-0xA7 */ + 0x252C,0x2524,0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,/* 0xA8-0xAF */ + 0x251B,0x2517,0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,/* 0xB0-0xB7 */ + 0x252F,0x2528,0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,/* 0xB8-0xBF */ + 0x2542,0x2512,0x2511,0x251A,0x2519,0x2516,0x2515,0x250E,/* 0xC0-0xC7 */ + 0x250D,0x251E,0x251F,0x2521,0x2522,0x2526,0x2527,0x2529,/* 0xC8-0xCF */ + 0x252A,0x252D,0x252E,0x2531,0x2532,0x2535,0x2536,0x2539,/* 0xD0-0xD7 */ + 0x253A,0x253D,0x253E,0x2540,0x2541,0x2543,0x2544,0x2545,/* 0xD8-0xDF */ + 0x2546,0x2547,0x2548,0x2549,0x254A,0x0000,0x0000,0x0000,/* 0xE0-0xE7 */ +}; + +static wchar_t c2u_A7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCB0B,0xCB0C,0xCB0D,0xCB0E,0xCB0F,0xCB11,0xCB12,/* 0x40-0x47 */ + 0xCB13,0xCB15,0xCB16,0xCB17,0xCB19,0xCB1A,0xCB1B,0xCB1C,/* 0x48-0x4F */ + 0xCB1D,0xCB1E,0xCB1F,0xCB22,0xCB23,0xCB24,0xCB25,0xCB26,/* 0x50-0x57 */ + 0xCB27,0xCB28,0xCB29,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCB2A,0xCB2B,0xCB2C,0xCB2D,0xCB2E,0xCB2F,0xCB30,/* 0x60-0x67 */ + 0xCB31,0xCB32,0xCB33,0xCB34,0xCB35,0xCB36,0xCB37,0xCB38,/* 0x68-0x6F */ + 0xCB39,0xCB3A,0xCB3B,0xCB3C,0xCB3D,0xCB3E,0xCB3F,0xCB40,/* 0x70-0x77 */ + 0xCB42,0xCB43,0xCB44,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCB45,0xCB46,0xCB47,0xCB4A,0xCB4B,0xCB4D,0xCB4E,/* 0x80-0x87 */ + 0xCB4F,0xCB51,0xCB52,0xCB53,0xCB54,0xCB55,0xCB56,0xCB57,/* 0x88-0x8F */ + 0xCB5A,0xCB5B,0xCB5C,0xCB5E,0xCB5F,0xCB60,0xCB61,0xCB62,/* 0x90-0x97 */ + 0xCB63,0xCB65,0xCB66,0xCB67,0xCB68,0xCB69,0xCB6A,0xCB6B,/* 0x98-0x9F */ + 0xCB6C,0x3395,0x3396,0x3397,0x2113,0x3398,0x33C4,0x33A3,/* 0xA0-0xA7 */ + 0x33A4,0x33A5,0x33A6,0x3399,0x339A,0x339B,0x339C,0x339D,/* 0xA8-0xAF */ + 0x339E,0x339F,0x33A0,0x33A1,0x33A2,0x33CA,0x338D,0x338E,/* 0xB0-0xB7 */ + 0x338F,0x33CF,0x3388,0x3389,0x33C8,0x33A7,0x33A8,0x33B0,/* 0xB8-0xBF */ + 0x33B1,0x33B2,0x33B3,0x33B4,0x33B5,0x33B6,0x33B7,0x33B8,/* 0xC0-0xC7 */ + 0x33B9,0x3380,0x3381,0x3382,0x3383,0x3384,0x33BA,0x33BB,/* 0xC8-0xCF */ + 0x33BC,0x33BD,0x33BE,0x33BF,0x3390,0x3391,0x3392,0x3393,/* 0xD0-0xD7 */ + 0x3394,0x2126,0x33C0,0x33C1,0x338A,0x338B,0x338C,0x33D6,/* 0xD8-0xDF */ + 0x33C5,0x33AD,0x33AE,0x33AF,0x33DB,0x33A9,0x33AA,0x33AB,/* 0xE0-0xE7 */ + 0x33AC,0x33DD,0x33D0,0x33D3,0x33C3,0x33C9,0x33DC,0x33C6,/* 0xE8-0xEF */ +}; + +static wchar_t c2u_A8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCB6D,0xCB6E,0xCB6F,0xCB70,0xCB71,0xCB72,0xCB73,/* 0x40-0x47 */ + 0xCB74,0xCB75,0xCB76,0xCB77,0xCB7A,0xCB7B,0xCB7C,0xCB7D,/* 0x48-0x4F */ + 0xCB7E,0xCB7F,0xCB80,0xCB81,0xCB82,0xCB83,0xCB84,0xCB85,/* 0x50-0x57 */ + 0xCB86,0xCB87,0xCB88,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCB89,0xCB8A,0xCB8B,0xCB8C,0xCB8D,0xCB8E,0xCB8F,/* 0x60-0x67 */ + 0xCB90,0xCB91,0xCB92,0xCB93,0xCB94,0xCB95,0xCB96,0xCB97,/* 0x68-0x6F */ + 0xCB98,0xCB99,0xCB9A,0xCB9B,0xCB9D,0xCB9E,0xCB9F,0xCBA0,/* 0x70-0x77 */ + 0xCBA1,0xCBA2,0xCBA3,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCBA4,0xCBA5,0xCBA6,0xCBA7,0xCBA8,0xCBA9,0xCBAA,/* 0x80-0x87 */ + 0xCBAB,0xCBAC,0xCBAD,0xCBAE,0xCBAF,0xCBB0,0xCBB1,0xCBB2,/* 0x88-0x8F */ + 0xCBB3,0xCBB4,0xCBB5,0xCBB6,0xCBB7,0xCBB9,0xCBBA,0xCBBB,/* 0x90-0x97 */ + 0xCBBC,0xCBBD,0xCBBE,0xCBBF,0xCBC0,0xCBC1,0xCBC2,0xCBC3,/* 0x98-0x9F */ + 0xCBC4,0x00C6,0x00D0,0x00AA,0x0126,0x0000,0x0132,0x0000,/* 0xA0-0xA7 */ + 0x013F,0x0141,0x00D8,0x0152,0x00BA,0x00DE,0x0166,0x014A,/* 0xA8-0xAF */ + 0x0000,0x3260,0x3261,0x3262,0x3263,0x3264,0x3265,0x3266,/* 0xB0-0xB7 */ + 0x3267,0x3268,0x3269,0x326A,0x326B,0x326C,0x326D,0x326E,/* 0xB8-0xBF */ + 0x326F,0x3270,0x3271,0x3272,0x3273,0x3274,0x3275,0x3276,/* 0xC0-0xC7 */ + 0x3277,0x3278,0x3279,0x327A,0x327B,0x24D0,0x24D1,0x24D2,/* 0xC8-0xCF */ + 0x24D3,0x24D4,0x24D5,0x24D6,0x24D7,0x24D8,0x24D9,0x24DA,/* 0xD0-0xD7 */ + 0x24DB,0x24DC,0x24DD,0x24DE,0x24DF,0x24E0,0x24E1,0x24E2,/* 0xD8-0xDF */ + 0x24E3,0x24E4,0x24E5,0x24E6,0x24E7,0x24E8,0x24E9,0x2460,/* 0xE0-0xE7 */ + 0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,/* 0xE8-0xEF */ + 0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x00BD,0x2153,/* 0xF0-0xF7 */ + 0x2154,0x00BC,0x00BE,0x215B,0x215C,0x215D,0x215E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCBC5,0xCBC6,0xCBC7,0xCBC8,0xCBC9,0xCBCA,0xCBCB,/* 0x40-0x47 */ + 0xCBCC,0xCBCD,0xCBCE,0xCBCF,0xCBD0,0xCBD1,0xCBD2,0xCBD3,/* 0x48-0x4F */ + 0xCBD5,0xCBD6,0xCBD7,0xCBD8,0xCBD9,0xCBDA,0xCBDB,0xCBDC,/* 0x50-0x57 */ + 0xCBDD,0xCBDE,0xCBDF,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCBE0,0xCBE1,0xCBE2,0xCBE3,0xCBE5,0xCBE6,0xCBE8,/* 0x60-0x67 */ + 0xCBEA,0xCBEB,0xCBEC,0xCBED,0xCBEE,0xCBEF,0xCBF0,0xCBF1,/* 0x68-0x6F */ + 0xCBF2,0xCBF3,0xCBF4,0xCBF5,0xCBF6,0xCBF7,0xCBF8,0xCBF9,/* 0x70-0x77 */ + 0xCBFA,0xCBFB,0xCBFC,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCBFD,0xCBFE,0xCBFF,0xCC00,0xCC01,0xCC02,0xCC03,/* 0x80-0x87 */ + 0xCC04,0xCC05,0xCC06,0xCC07,0xCC08,0xCC09,0xCC0A,0xCC0B,/* 0x88-0x8F */ + 0xCC0E,0xCC0F,0xCC11,0xCC12,0xCC13,0xCC15,0xCC16,0xCC17,/* 0x90-0x97 */ + 0xCC18,0xCC19,0xCC1A,0xCC1B,0xCC1E,0xCC1F,0xCC20,0xCC23,/* 0x98-0x9F */ + 0xCC24,0x00E6,0x0111,0x00F0,0x0127,0x0131,0x0133,0x0138,/* 0xA0-0xA7 */ + 0x0140,0x0142,0x00F8,0x0153,0x00DF,0x00FE,0x0167,0x014B,/* 0xA8-0xAF */ + 0x0149,0x3200,0x3201,0x3202,0x3203,0x3204,0x3205,0x3206,/* 0xB0-0xB7 */ + 0x3207,0x3208,0x3209,0x320A,0x320B,0x320C,0x320D,0x320E,/* 0xB8-0xBF */ + 0x320F,0x3210,0x3211,0x3212,0x3213,0x3214,0x3215,0x3216,/* 0xC0-0xC7 */ + 0x3217,0x3218,0x3219,0x321A,0x321B,0x249C,0x249D,0x249E,/* 0xC8-0xCF */ + 0x249F,0x24A0,0x24A1,0x24A2,0x24A3,0x24A4,0x24A5,0x24A6,/* 0xD0-0xD7 */ + 0x24A7,0x24A8,0x24A9,0x24AA,0x24AB,0x24AC,0x24AD,0x24AE,/* 0xD8-0xDF */ + 0x24AF,0x24B0,0x24B1,0x24B2,0x24B3,0x24B4,0x24B5,0x2474,/* 0xE0-0xE7 */ + 0x2475,0x2476,0x2477,0x2478,0x2479,0x247A,0x247B,0x247C,/* 0xE8-0xEF */ + 0x247D,0x247E,0x247F,0x2480,0x2481,0x2482,0x00B9,0x00B2,/* 0xF0-0xF7 */ + 0x00B3,0x2074,0x207F,0x2081,0x2082,0x2083,0x2084,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCC25,0xCC26,0xCC2A,0xCC2B,0xCC2D,0xCC2F,0xCC31,/* 0x40-0x47 */ + 0xCC32,0xCC33,0xCC34,0xCC35,0xCC36,0xCC37,0xCC3A,0xCC3F,/* 0x48-0x4F */ + 0xCC40,0xCC41,0xCC42,0xCC43,0xCC46,0xCC47,0xCC49,0xCC4A,/* 0x50-0x57 */ + 0xCC4B,0xCC4D,0xCC4E,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCC4F,0xCC50,0xCC51,0xCC52,0xCC53,0xCC56,0xCC5A,/* 0x60-0x67 */ + 0xCC5B,0xCC5C,0xCC5D,0xCC5E,0xCC5F,0xCC61,0xCC62,0xCC63,/* 0x68-0x6F */ + 0xCC65,0xCC67,0xCC69,0xCC6A,0xCC6B,0xCC6C,0xCC6D,0xCC6E,/* 0x70-0x77 */ + 0xCC6F,0xCC71,0xCC72,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCC73,0xCC74,0xCC76,0xCC77,0xCC78,0xCC79,0xCC7A,/* 0x80-0x87 */ + 0xCC7B,0xCC7C,0xCC7D,0xCC7E,0xCC7F,0xCC80,0xCC81,0xCC82,/* 0x88-0x8F */ + 0xCC83,0xCC84,0xCC85,0xCC86,0xCC87,0xCC88,0xCC89,0xCC8A,/* 0x90-0x97 */ + 0xCC8B,0xCC8C,0xCC8D,0xCC8E,0xCC8F,0xCC90,0xCC91,0xCC92,/* 0x98-0x9F */ + 0xCC93,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,/* 0xA0-0xA7 */ + 0x3048,0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,/* 0xA8-0xAF */ + 0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,/* 0xB0-0xB7 */ + 0x3058,0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,/* 0xB8-0xBF */ + 0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,/* 0xC0-0xC7 */ + 0x3068,0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,/* 0xC8-0xCF */ + 0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,/* 0xD0-0xD7 */ + 0x3078,0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,/* 0xD8-0xDF */ + 0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,/* 0xE0-0xE7 */ + 0x3088,0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,/* 0xE8-0xEF */ + 0x3090,0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_AB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCC94,0xCC95,0xCC96,0xCC97,0xCC9A,0xCC9B,0xCC9D,/* 0x40-0x47 */ + 0xCC9E,0xCC9F,0xCCA1,0xCCA2,0xCCA3,0xCCA4,0xCCA5,0xCCA6,/* 0x48-0x4F */ + 0xCCA7,0xCCAA,0xCCAE,0xCCAF,0xCCB0,0xCCB1,0xCCB2,0xCCB3,/* 0x50-0x57 */ + 0xCCB6,0xCCB7,0xCCB9,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCCBA,0xCCBB,0xCCBD,0xCCBE,0xCCBF,0xCCC0,0xCCC1,/* 0x60-0x67 */ + 0xCCC2,0xCCC3,0xCCC6,0xCCC8,0xCCCA,0xCCCB,0xCCCC,0xCCCD,/* 0x68-0x6F */ + 0xCCCE,0xCCCF,0xCCD1,0xCCD2,0xCCD3,0xCCD5,0xCCD6,0xCCD7,/* 0x70-0x77 */ + 0xCCD8,0xCCD9,0xCCDA,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCCDB,0xCCDC,0xCCDD,0xCCDE,0xCCDF,0xCCE0,0xCCE1,/* 0x80-0x87 */ + 0xCCE2,0xCCE3,0xCCE5,0xCCE6,0xCCE7,0xCCE8,0xCCE9,0xCCEA,/* 0x88-0x8F */ + 0xCCEB,0xCCED,0xCCEE,0xCCEF,0xCCF1,0xCCF2,0xCCF3,0xCCF4,/* 0x90-0x97 */ + 0xCCF5,0xCCF6,0xCCF7,0xCCF8,0xCCF9,0xCCFA,0xCCFB,0xCCFC,/* 0x98-0x9F */ + 0xCCFD,0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,/* 0xA0-0xA7 */ + 0x30A8,0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,/* 0xA8-0xAF */ + 0x30B0,0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,/* 0xB0-0xB7 */ + 0x30B8,0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,/* 0xB8-0xBF */ + 0x30C0,0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,/* 0xC0-0xC7 */ + 0x30C8,0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,/* 0xC8-0xCF */ + 0x30D0,0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,/* 0xD0-0xD7 */ + 0x30D8,0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,/* 0xD8-0xDF */ + 0x30E0,0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,/* 0xE0-0xE7 */ + 0x30E8,0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,/* 0xE8-0xEF */ + 0x30F0,0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_AC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCCFE,0xCCFF,0xCD00,0xCD02,0xCD03,0xCD04,0xCD05,/* 0x40-0x47 */ + 0xCD06,0xCD07,0xCD0A,0xCD0B,0xCD0D,0xCD0E,0xCD0F,0xCD11,/* 0x48-0x4F */ + 0xCD12,0xCD13,0xCD14,0xCD15,0xCD16,0xCD17,0xCD1A,0xCD1C,/* 0x50-0x57 */ + 0xCD1E,0xCD1F,0xCD20,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCD21,0xCD22,0xCD23,0xCD25,0xCD26,0xCD27,0xCD29,/* 0x60-0x67 */ + 0xCD2A,0xCD2B,0xCD2D,0xCD2E,0xCD2F,0xCD30,0xCD31,0xCD32,/* 0x68-0x6F */ + 0xCD33,0xCD34,0xCD35,0xCD36,0xCD37,0xCD38,0xCD3A,0xCD3B,/* 0x70-0x77 */ + 0xCD3C,0xCD3D,0xCD3E,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCD3F,0xCD40,0xCD41,0xCD42,0xCD43,0xCD44,0xCD45,/* 0x80-0x87 */ + 0xCD46,0xCD47,0xCD48,0xCD49,0xCD4A,0xCD4B,0xCD4C,0xCD4D,/* 0x88-0x8F */ + 0xCD4E,0xCD4F,0xCD50,0xCD51,0xCD52,0xCD53,0xCD54,0xCD55,/* 0x90-0x97 */ + 0xCD56,0xCD57,0xCD58,0xCD59,0xCD5A,0xCD5B,0xCD5D,0xCD5E,/* 0x98-0x9F */ + 0xCD5F,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,/* 0xA0-0xA7 */ + 0x0416,0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,/* 0xA8-0xAF */ + 0x041E,0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,/* 0xB0-0xB7 */ + 0x0426,0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,/* 0xB8-0xBF */ + 0x042E,0x042F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC0-0xC7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC8-0xCF */ + 0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,/* 0xD0-0xD7 */ + 0x0436,0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,/* 0xD8-0xDF */ + 0x043E,0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,/* 0xE0-0xE7 */ + 0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,/* 0xE8-0xEF */ + 0x044E,0x044F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ +}; + +static wchar_t c2u_AD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCD61,0xCD62,0xCD63,0xCD65,0xCD66,0xCD67,0xCD68,/* 0x40-0x47 */ + 0xCD69,0xCD6A,0xCD6B,0xCD6E,0xCD70,0xCD72,0xCD73,0xCD74,/* 0x48-0x4F */ + 0xCD75,0xCD76,0xCD77,0xCD79,0xCD7A,0xCD7B,0xCD7C,0xCD7D,/* 0x50-0x57 */ + 0xCD7E,0xCD7F,0xCD80,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCD81,0xCD82,0xCD83,0xCD84,0xCD85,0xCD86,0xCD87,/* 0x60-0x67 */ + 0xCD89,0xCD8A,0xCD8B,0xCD8C,0xCD8D,0xCD8E,0xCD8F,0xCD90,/* 0x68-0x6F */ + 0xCD91,0xCD92,0xCD93,0xCD96,0xCD97,0xCD99,0xCD9A,0xCD9B,/* 0x70-0x77 */ + 0xCD9D,0xCD9E,0xCD9F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCDA0,0xCDA1,0xCDA2,0xCDA3,0xCDA6,0xCDA8,0xCDAA,/* 0x80-0x87 */ + 0xCDAB,0xCDAC,0xCDAD,0xCDAE,0xCDAF,0xCDB1,0xCDB2,0xCDB3,/* 0x88-0x8F */ + 0xCDB4,0xCDB5,0xCDB6,0xCDB7,0xCDB8,0xCDB9,0xCDBA,0xCDBB,/* 0x90-0x97 */ + 0xCDBC,0xCDBD,0xCDBE,0xCDBF,0xCDC0,0xCDC1,0xCDC2,0xCDC3,/* 0x98-0x9F */ + 0xCDC5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCDC6,0xCDC7,0xCDC8,0xCDC9,0xCDCA,0xCDCB,0xCDCD,/* 0x40-0x47 */ + 0xCDCE,0xCDCF,0xCDD1,0xCDD2,0xCDD3,0xCDD4,0xCDD5,0xCDD6,/* 0x48-0x4F */ + 0xCDD7,0xCDD8,0xCDD9,0xCDDA,0xCDDB,0xCDDC,0xCDDD,0xCDDE,/* 0x50-0x57 */ + 0xCDDF,0xCDE0,0xCDE1,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCDE2,0xCDE3,0xCDE4,0xCDE5,0xCDE6,0xCDE7,0xCDE9,/* 0x60-0x67 */ + 0xCDEA,0xCDEB,0xCDED,0xCDEE,0xCDEF,0xCDF1,0xCDF2,0xCDF3,/* 0x68-0x6F */ + 0xCDF4,0xCDF5,0xCDF6,0xCDF7,0xCDFA,0xCDFC,0xCDFE,0xCDFF,/* 0x70-0x77 */ + 0xCE00,0xCE01,0xCE02,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCE03,0xCE05,0xCE06,0xCE07,0xCE09,0xCE0A,0xCE0B,/* 0x80-0x87 */ + 0xCE0D,0xCE0E,0xCE0F,0xCE10,0xCE11,0xCE12,0xCE13,0xCE15,/* 0x88-0x8F */ + 0xCE16,0xCE17,0xCE18,0xCE1A,0xCE1B,0xCE1C,0xCE1D,0xCE1E,/* 0x90-0x97 */ + 0xCE1F,0xCE22,0xCE23,0xCE25,0xCE26,0xCE27,0xCE29,0xCE2A,/* 0x98-0x9F */ + 0xCE2B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_AF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCE2C,0xCE2D,0xCE2E,0xCE2F,0xCE32,0xCE34,0xCE36,/* 0x40-0x47 */ + 0xCE37,0xCE38,0xCE39,0xCE3A,0xCE3B,0xCE3C,0xCE3D,0xCE3E,/* 0x48-0x4F */ + 0xCE3F,0xCE40,0xCE41,0xCE42,0xCE43,0xCE44,0xCE45,0xCE46,/* 0x50-0x57 */ + 0xCE47,0xCE48,0xCE49,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCE4A,0xCE4B,0xCE4C,0xCE4D,0xCE4E,0xCE4F,0xCE50,/* 0x60-0x67 */ + 0xCE51,0xCE52,0xCE53,0xCE54,0xCE55,0xCE56,0xCE57,0xCE5A,/* 0x68-0x6F */ + 0xCE5B,0xCE5D,0xCE5E,0xCE62,0xCE63,0xCE64,0xCE65,0xCE66,/* 0x70-0x77 */ + 0xCE67,0xCE6A,0xCE6C,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCE6E,0xCE6F,0xCE70,0xCE71,0xCE72,0xCE73,0xCE76,/* 0x80-0x87 */ + 0xCE77,0xCE79,0xCE7A,0xCE7B,0xCE7D,0xCE7E,0xCE7F,0xCE80,/* 0x88-0x8F */ + 0xCE81,0xCE82,0xCE83,0xCE86,0xCE88,0xCE8A,0xCE8B,0xCE8C,/* 0x90-0x97 */ + 0xCE8D,0xCE8E,0xCE8F,0xCE92,0xCE93,0xCE95,0xCE96,0xCE97,/* 0x98-0x9F */ + 0xCE99,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ +}; + +static wchar_t c2u_B0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCE9A,0xCE9B,0xCE9C,0xCE9D,0xCE9E,0xCE9F,0xCEA2,/* 0x40-0x47 */ + 0xCEA6,0xCEA7,0xCEA8,0xCEA9,0xCEAA,0xCEAB,0xCEAE,0xCEAF,/* 0x48-0x4F */ + 0xCEB0,0xCEB1,0xCEB2,0xCEB3,0xCEB4,0xCEB5,0xCEB6,0xCEB7,/* 0x50-0x57 */ + 0xCEB8,0xCEB9,0xCEBA,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCEBB,0xCEBC,0xCEBD,0xCEBE,0xCEBF,0xCEC0,0xCEC2,/* 0x60-0x67 */ + 0xCEC3,0xCEC4,0xCEC5,0xCEC6,0xCEC7,0xCEC8,0xCEC9,0xCECA,/* 0x68-0x6F */ + 0xCECB,0xCECC,0xCECD,0xCECE,0xCECF,0xCED0,0xCED1,0xCED2,/* 0x70-0x77 */ + 0xCED3,0xCED4,0xCED5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCED6,0xCED7,0xCED8,0xCED9,0xCEDA,0xCEDB,0xCEDC,/* 0x80-0x87 */ + 0xCEDD,0xCEDE,0xCEDF,0xCEE0,0xCEE1,0xCEE2,0xCEE3,0xCEE6,/* 0x88-0x8F */ + 0xCEE7,0xCEE9,0xCEEA,0xCEED,0xCEEE,0xCEEF,0xCEF0,0xCEF1,/* 0x90-0x97 */ + 0xCEF2,0xCEF3,0xCEF6,0xCEFA,0xCEFB,0xCEFC,0xCEFD,0xCEFE,/* 0x98-0x9F */ + 0xCEFF,0xAC00,0xAC01,0xAC04,0xAC07,0xAC08,0xAC09,0xAC0A,/* 0xA0-0xA7 */ + 0xAC10,0xAC11,0xAC12,0xAC13,0xAC14,0xAC15,0xAC16,0xAC17,/* 0xA8-0xAF */ + 0xAC19,0xAC1A,0xAC1B,0xAC1C,0xAC1D,0xAC20,0xAC24,0xAC2C,/* 0xB0-0xB7 */ + 0xAC2D,0xAC2F,0xAC30,0xAC31,0xAC38,0xAC39,0xAC3C,0xAC40,/* 0xB8-0xBF */ + 0xAC4B,0xAC4D,0xAC54,0xAC58,0xAC5C,0xAC70,0xAC71,0xAC74,/* 0xC0-0xC7 */ + 0xAC77,0xAC78,0xAC7A,0xAC80,0xAC81,0xAC83,0xAC84,0xAC85,/* 0xC8-0xCF */ + 0xAC86,0xAC89,0xAC8A,0xAC8B,0xAC8C,0xAC90,0xAC94,0xAC9C,/* 0xD0-0xD7 */ + 0xAC9D,0xAC9F,0xACA0,0xACA1,0xACA8,0xACA9,0xACAA,0xACAC,/* 0xD8-0xDF */ + 0xACAF,0xACB0,0xACB8,0xACB9,0xACBB,0xACBC,0xACBD,0xACC1,/* 0xE0-0xE7 */ + 0xACC4,0xACC8,0xACCC,0xACD5,0xACD7,0xACE0,0xACE1,0xACE4,/* 0xE8-0xEF */ + 0xACE7,0xACE8,0xACEA,0xACEC,0xACEF,0xACF0,0xACF1,0xACF3,/* 0xF0-0xF7 */ + 0xACF5,0xACF6,0xACFC,0xACFD,0xAD00,0xAD04,0xAD06,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCF02,0xCF03,0xCF05,0xCF06,0xCF07,0xCF09,0xCF0A,/* 0x40-0x47 */ + 0xCF0B,0xCF0C,0xCF0D,0xCF0E,0xCF0F,0xCF12,0xCF14,0xCF16,/* 0x48-0x4F */ + 0xCF17,0xCF18,0xCF19,0xCF1A,0xCF1B,0xCF1D,0xCF1E,0xCF1F,/* 0x50-0x57 */ + 0xCF21,0xCF22,0xCF23,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCF25,0xCF26,0xCF27,0xCF28,0xCF29,0xCF2A,0xCF2B,/* 0x60-0x67 */ + 0xCF2E,0xCF32,0xCF33,0xCF34,0xCF35,0xCF36,0xCF37,0xCF39,/* 0x68-0x6F */ + 0xCF3A,0xCF3B,0xCF3C,0xCF3D,0xCF3E,0xCF3F,0xCF40,0xCF41,/* 0x70-0x77 */ + 0xCF42,0xCF43,0xCF44,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCF45,0xCF46,0xCF47,0xCF48,0xCF49,0xCF4A,0xCF4B,/* 0x80-0x87 */ + 0xCF4C,0xCF4D,0xCF4E,0xCF4F,0xCF50,0xCF51,0xCF52,0xCF53,/* 0x88-0x8F */ + 0xCF56,0xCF57,0xCF59,0xCF5A,0xCF5B,0xCF5D,0xCF5E,0xCF5F,/* 0x90-0x97 */ + 0xCF60,0xCF61,0xCF62,0xCF63,0xCF66,0xCF68,0xCF6A,0xCF6B,/* 0x98-0x9F */ + 0xCF6C,0xAD0C,0xAD0D,0xAD0F,0xAD11,0xAD18,0xAD1C,0xAD20,/* 0xA0-0xA7 */ + 0xAD29,0xAD2C,0xAD2D,0xAD34,0xAD35,0xAD38,0xAD3C,0xAD44,/* 0xA8-0xAF */ + 0xAD45,0xAD47,0xAD49,0xAD50,0xAD54,0xAD58,0xAD61,0xAD63,/* 0xB0-0xB7 */ + 0xAD6C,0xAD6D,0xAD70,0xAD73,0xAD74,0xAD75,0xAD76,0xAD7B,/* 0xB8-0xBF */ + 0xAD7C,0xAD7D,0xAD7F,0xAD81,0xAD82,0xAD88,0xAD89,0xAD8C,/* 0xC0-0xC7 */ + 0xAD90,0xAD9C,0xAD9D,0xADA4,0xADB7,0xADC0,0xADC1,0xADC4,/* 0xC8-0xCF */ + 0xADC8,0xADD0,0xADD1,0xADD3,0xADDC,0xADE0,0xADE4,0xADF8,/* 0xD0-0xD7 */ + 0xADF9,0xADFC,0xADFF,0xAE00,0xAE01,0xAE08,0xAE09,0xAE0B,/* 0xD8-0xDF */ + 0xAE0D,0xAE14,0xAE30,0xAE31,0xAE34,0xAE37,0xAE38,0xAE3A,/* 0xE0-0xE7 */ + 0xAE40,0xAE41,0xAE43,0xAE45,0xAE46,0xAE4A,0xAE4C,0xAE4D,/* 0xE8-0xEF */ + 0xAE4E,0xAE50,0xAE54,0xAE56,0xAE5C,0xAE5D,0xAE5F,0xAE60,/* 0xF0-0xF7 */ + 0xAE61,0xAE65,0xAE68,0xAE69,0xAE6C,0xAE70,0xAE78,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCF6D,0xCF6E,0xCF6F,0xCF72,0xCF73,0xCF75,0xCF76,/* 0x40-0x47 */ + 0xCF77,0xCF79,0xCF7A,0xCF7B,0xCF7C,0xCF7D,0xCF7E,0xCF7F,/* 0x48-0x4F */ + 0xCF81,0xCF82,0xCF83,0xCF84,0xCF86,0xCF87,0xCF88,0xCF89,/* 0x50-0x57 */ + 0xCF8A,0xCF8B,0xCF8D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCF8E,0xCF8F,0xCF90,0xCF91,0xCF92,0xCF93,0xCF94,/* 0x60-0x67 */ + 0xCF95,0xCF96,0xCF97,0xCF98,0xCF99,0xCF9A,0xCF9B,0xCF9C,/* 0x68-0x6F */ + 0xCF9D,0xCF9E,0xCF9F,0xCFA0,0xCFA2,0xCFA3,0xCFA4,0xCFA5,/* 0x70-0x77 */ + 0xCFA6,0xCFA7,0xCFA9,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xCFAA,0xCFAB,0xCFAC,0xCFAD,0xCFAE,0xCFAF,0xCFB1,/* 0x80-0x87 */ + 0xCFB2,0xCFB3,0xCFB4,0xCFB5,0xCFB6,0xCFB7,0xCFB8,0xCFB9,/* 0x88-0x8F */ + 0xCFBA,0xCFBB,0xCFBC,0xCFBD,0xCFBE,0xCFBF,0xCFC0,0xCFC1,/* 0x90-0x97 */ + 0xCFC2,0xCFC3,0xCFC5,0xCFC6,0xCFC7,0xCFC8,0xCFC9,0xCFCA,/* 0x98-0x9F */ + 0xCFCB,0xAE79,0xAE7B,0xAE7C,0xAE7D,0xAE84,0xAE85,0xAE8C,/* 0xA0-0xA7 */ + 0xAEBC,0xAEBD,0xAEBE,0xAEC0,0xAEC4,0xAECC,0xAECD,0xAECF,/* 0xA8-0xAF */ + 0xAED0,0xAED1,0xAED8,0xAED9,0xAEDC,0xAEE8,0xAEEB,0xAEED,/* 0xB0-0xB7 */ + 0xAEF4,0xAEF8,0xAEFC,0xAF07,0xAF08,0xAF0D,0xAF10,0xAF2C,/* 0xB8-0xBF */ + 0xAF2D,0xAF30,0xAF32,0xAF34,0xAF3C,0xAF3D,0xAF3F,0xAF41,/* 0xC0-0xC7 */ + 0xAF42,0xAF43,0xAF48,0xAF49,0xAF50,0xAF5C,0xAF5D,0xAF64,/* 0xC8-0xCF */ + 0xAF65,0xAF79,0xAF80,0xAF84,0xAF88,0xAF90,0xAF91,0xAF95,/* 0xD0-0xD7 */ + 0xAF9C,0xAFB8,0xAFB9,0xAFBC,0xAFC0,0xAFC7,0xAFC8,0xAFC9,/* 0xD8-0xDF */ + 0xAFCB,0xAFCD,0xAFCE,0xAFD4,0xAFDC,0xAFE8,0xAFE9,0xAFF0,/* 0xE0-0xE7 */ + 0xAFF1,0xAFF4,0xAFF8,0xB000,0xB001,0xB004,0xB00C,0xB010,/* 0xE8-0xEF */ + 0xB014,0xB01C,0xB01D,0xB028,0xB044,0xB045,0xB048,0xB04A,/* 0xF0-0xF7 */ + 0xB04C,0xB04E,0xB053,0xB054,0xB055,0xB057,0xB059,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xCFCC,0xCFCD,0xCFCE,0xCFCF,0xCFD0,0xCFD1,0xCFD2,/* 0x40-0x47 */ + 0xCFD3,0xCFD4,0xCFD5,0xCFD6,0xCFD7,0xCFD8,0xCFD9,0xCFDA,/* 0x48-0x4F */ + 0xCFDB,0xCFDC,0xCFDD,0xCFDE,0xCFDF,0xCFE2,0xCFE3,0xCFE5,/* 0x50-0x57 */ + 0xCFE6,0xCFE7,0xCFE9,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xCFEA,0xCFEB,0xCFEC,0xCFED,0xCFEE,0xCFEF,0xCFF2,/* 0x60-0x67 */ + 0xCFF4,0xCFF6,0xCFF7,0xCFF8,0xCFF9,0xCFFA,0xCFFB,0xCFFD,/* 0x68-0x6F */ + 0xCFFE,0xCFFF,0xD001,0xD002,0xD003,0xD005,0xD006,0xD007,/* 0x70-0x77 */ + 0xD008,0xD009,0xD00A,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD00B,0xD00C,0xD00D,0xD00E,0xD00F,0xD010,0xD012,/* 0x80-0x87 */ + 0xD013,0xD014,0xD015,0xD016,0xD017,0xD019,0xD01A,0xD01B,/* 0x88-0x8F */ + 0xD01C,0xD01D,0xD01E,0xD01F,0xD020,0xD021,0xD022,0xD023,/* 0x90-0x97 */ + 0xD024,0xD025,0xD026,0xD027,0xD028,0xD029,0xD02A,0xD02B,/* 0x98-0x9F */ + 0xD02C,0xB05D,0xB07C,0xB07D,0xB080,0xB084,0xB08C,0xB08D,/* 0xA0-0xA7 */ + 0xB08F,0xB091,0xB098,0xB099,0xB09A,0xB09C,0xB09F,0xB0A0,/* 0xA8-0xAF */ + 0xB0A1,0xB0A2,0xB0A8,0xB0A9,0xB0AB,0xB0AC,0xB0AD,0xB0AE,/* 0xB0-0xB7 */ + 0xB0AF,0xB0B1,0xB0B3,0xB0B4,0xB0B5,0xB0B8,0xB0BC,0xB0C4,/* 0xB8-0xBF */ + 0xB0C5,0xB0C7,0xB0C8,0xB0C9,0xB0D0,0xB0D1,0xB0D4,0xB0D8,/* 0xC0-0xC7 */ + 0xB0E0,0xB0E5,0xB108,0xB109,0xB10B,0xB10C,0xB110,0xB112,/* 0xC8-0xCF */ + 0xB113,0xB118,0xB119,0xB11B,0xB11C,0xB11D,0xB123,0xB124,/* 0xD0-0xD7 */ + 0xB125,0xB128,0xB12C,0xB134,0xB135,0xB137,0xB138,0xB139,/* 0xD8-0xDF */ + 0xB140,0xB141,0xB144,0xB148,0xB150,0xB151,0xB154,0xB155,/* 0xE0-0xE7 */ + 0xB158,0xB15C,0xB160,0xB178,0xB179,0xB17C,0xB180,0xB182,/* 0xE8-0xEF */ + 0xB188,0xB189,0xB18B,0xB18D,0xB192,0xB193,0xB194,0xB198,/* 0xF0-0xF7 */ + 0xB19C,0xB1A8,0xB1CC,0xB1D0,0xB1D4,0xB1DC,0xB1DD,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD02E,0xD02F,0xD030,0xD031,0xD032,0xD033,0xD036,/* 0x40-0x47 */ + 0xD037,0xD039,0xD03A,0xD03B,0xD03D,0xD03E,0xD03F,0xD040,/* 0x48-0x4F */ + 0xD041,0xD042,0xD043,0xD046,0xD048,0xD04A,0xD04B,0xD04C,/* 0x50-0x57 */ + 0xD04D,0xD04E,0xD04F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD051,0xD052,0xD053,0xD055,0xD056,0xD057,0xD059,/* 0x60-0x67 */ + 0xD05A,0xD05B,0xD05C,0xD05D,0xD05E,0xD05F,0xD061,0xD062,/* 0x68-0x6F */ + 0xD063,0xD064,0xD065,0xD066,0xD067,0xD068,0xD069,0xD06A,/* 0x70-0x77 */ + 0xD06B,0xD06E,0xD06F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD071,0xD072,0xD073,0xD075,0xD076,0xD077,0xD078,/* 0x80-0x87 */ + 0xD079,0xD07A,0xD07B,0xD07E,0xD07F,0xD080,0xD082,0xD083,/* 0x88-0x8F */ + 0xD084,0xD085,0xD086,0xD087,0xD088,0xD089,0xD08A,0xD08B,/* 0x90-0x97 */ + 0xD08C,0xD08D,0xD08E,0xD08F,0xD090,0xD091,0xD092,0xD093,/* 0x98-0x9F */ + 0xD094,0xB1DF,0xB1E8,0xB1E9,0xB1EC,0xB1F0,0xB1F9,0xB1FB,/* 0xA0-0xA7 */ + 0xB1FD,0xB204,0xB205,0xB208,0xB20B,0xB20C,0xB214,0xB215,/* 0xA8-0xAF */ + 0xB217,0xB219,0xB220,0xB234,0xB23C,0xB258,0xB25C,0xB260,/* 0xB0-0xB7 */ + 0xB268,0xB269,0xB274,0xB275,0xB27C,0xB284,0xB285,0xB289,/* 0xB8-0xBF */ + 0xB290,0xB291,0xB294,0xB298,0xB299,0xB29A,0xB2A0,0xB2A1,/* 0xC0-0xC7 */ + 0xB2A3,0xB2A5,0xB2A6,0xB2AA,0xB2AC,0xB2B0,0xB2B4,0xB2C8,/* 0xC8-0xCF */ + 0xB2C9,0xB2CC,0xB2D0,0xB2D2,0xB2D8,0xB2D9,0xB2DB,0xB2DD,/* 0xD0-0xD7 */ + 0xB2E2,0xB2E4,0xB2E5,0xB2E6,0xB2E8,0xB2EB,0xB2EC,0xB2ED,/* 0xD8-0xDF */ + 0xB2EE,0xB2EF,0xB2F3,0xB2F4,0xB2F5,0xB2F7,0xB2F8,0xB2F9,/* 0xE0-0xE7 */ + 0xB2FA,0xB2FB,0xB2FF,0xB300,0xB301,0xB304,0xB308,0xB310,/* 0xE8-0xEF */ + 0xB311,0xB313,0xB314,0xB315,0xB31C,0xB354,0xB355,0xB356,/* 0xF0-0xF7 */ + 0xB358,0xB35B,0xB35C,0xB35E,0xB35F,0xB364,0xB365,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD095,0xD096,0xD097,0xD098,0xD099,0xD09A,0xD09B,/* 0x40-0x47 */ + 0xD09C,0xD09D,0xD09E,0xD09F,0xD0A0,0xD0A1,0xD0A2,0xD0A3,/* 0x48-0x4F */ + 0xD0A6,0xD0A7,0xD0A9,0xD0AA,0xD0AB,0xD0AD,0xD0AE,0xD0AF,/* 0x50-0x57 */ + 0xD0B0,0xD0B1,0xD0B2,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD0B3,0xD0B6,0xD0B8,0xD0BA,0xD0BB,0xD0BC,0xD0BD,/* 0x60-0x67 */ + 0xD0BE,0xD0BF,0xD0C2,0xD0C3,0xD0C5,0xD0C6,0xD0C7,0xD0CA,/* 0x68-0x6F */ + 0xD0CB,0xD0CC,0xD0CD,0xD0CE,0xD0CF,0xD0D2,0xD0D6,0xD0D7,/* 0x70-0x77 */ + 0xD0D8,0xD0D9,0xD0DA,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD0DB,0xD0DE,0xD0DF,0xD0E1,0xD0E2,0xD0E3,0xD0E5,/* 0x80-0x87 */ + 0xD0E6,0xD0E7,0xD0E8,0xD0E9,0xD0EA,0xD0EB,0xD0EE,0xD0F2,/* 0x88-0x8F */ + 0xD0F3,0xD0F4,0xD0F5,0xD0F6,0xD0F7,0xD0F9,0xD0FA,0xD0FB,/* 0x90-0x97 */ + 0xD0FC,0xD0FD,0xD0FE,0xD0FF,0xD100,0xD101,0xD102,0xD103,/* 0x98-0x9F */ + 0xD104,0xB367,0xB369,0xB36B,0xB36E,0xB370,0xB371,0xB374,/* 0xA0-0xA7 */ + 0xB378,0xB380,0xB381,0xB383,0xB384,0xB385,0xB38C,0xB390,/* 0xA8-0xAF */ + 0xB394,0xB3A0,0xB3A1,0xB3A8,0xB3AC,0xB3C4,0xB3C5,0xB3C8,/* 0xB0-0xB7 */ + 0xB3CB,0xB3CC,0xB3CE,0xB3D0,0xB3D4,0xB3D5,0xB3D7,0xB3D9,/* 0xB8-0xBF */ + 0xB3DB,0xB3DD,0xB3E0,0xB3E4,0xB3E8,0xB3FC,0xB410,0xB418,/* 0xC0-0xC7 */ + 0xB41C,0xB420,0xB428,0xB429,0xB42B,0xB434,0xB450,0xB451,/* 0xC8-0xCF */ + 0xB454,0xB458,0xB460,0xB461,0xB463,0xB465,0xB46C,0xB480,/* 0xD0-0xD7 */ + 0xB488,0xB49D,0xB4A4,0xB4A8,0xB4AC,0xB4B5,0xB4B7,0xB4B9,/* 0xD8-0xDF */ + 0xB4C0,0xB4C4,0xB4C8,0xB4D0,0xB4D5,0xB4DC,0xB4DD,0xB4E0,/* 0xE0-0xE7 */ + 0xB4E3,0xB4E4,0xB4E6,0xB4EC,0xB4ED,0xB4EF,0xB4F1,0xB4F8,/* 0xE8-0xEF */ + 0xB514,0xB515,0xB518,0xB51B,0xB51C,0xB524,0xB525,0xB527,/* 0xF0-0xF7 */ + 0xB528,0xB529,0xB52A,0xB530,0xB531,0xB534,0xB538,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD105,0xD106,0xD107,0xD108,0xD109,0xD10A,0xD10B,/* 0x40-0x47 */ + 0xD10C,0xD10E,0xD10F,0xD110,0xD111,0xD112,0xD113,0xD114,/* 0x48-0x4F */ + 0xD115,0xD116,0xD117,0xD118,0xD119,0xD11A,0xD11B,0xD11C,/* 0x50-0x57 */ + 0xD11D,0xD11E,0xD11F,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD120,0xD121,0xD122,0xD123,0xD124,0xD125,0xD126,/* 0x60-0x67 */ + 0xD127,0xD128,0xD129,0xD12A,0xD12B,0xD12C,0xD12D,0xD12E,/* 0x68-0x6F */ + 0xD12F,0xD132,0xD133,0xD135,0xD136,0xD137,0xD139,0xD13B,/* 0x70-0x77 */ + 0xD13C,0xD13D,0xD13E,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD13F,0xD142,0xD146,0xD147,0xD148,0xD149,0xD14A,/* 0x80-0x87 */ + 0xD14B,0xD14E,0xD14F,0xD151,0xD152,0xD153,0xD155,0xD156,/* 0x88-0x8F */ + 0xD157,0xD158,0xD159,0xD15A,0xD15B,0xD15E,0xD160,0xD162,/* 0x90-0x97 */ + 0xD163,0xD164,0xD165,0xD166,0xD167,0xD169,0xD16A,0xD16B,/* 0x98-0x9F */ + 0xD16D,0xB540,0xB541,0xB543,0xB544,0xB545,0xB54B,0xB54C,/* 0xA0-0xA7 */ + 0xB54D,0xB550,0xB554,0xB55C,0xB55D,0xB55F,0xB560,0xB561,/* 0xA8-0xAF */ + 0xB5A0,0xB5A1,0xB5A4,0xB5A8,0xB5AA,0xB5AB,0xB5B0,0xB5B1,/* 0xB0-0xB7 */ + 0xB5B3,0xB5B4,0xB5B5,0xB5BB,0xB5BC,0xB5BD,0xB5C0,0xB5C4,/* 0xB8-0xBF */ + 0xB5CC,0xB5CD,0xB5CF,0xB5D0,0xB5D1,0xB5D8,0xB5EC,0xB610,/* 0xC0-0xC7 */ + 0xB611,0xB614,0xB618,0xB625,0xB62C,0xB634,0xB648,0xB664,/* 0xC8-0xCF */ + 0xB668,0xB69C,0xB69D,0xB6A0,0xB6A4,0xB6AB,0xB6AC,0xB6B1,/* 0xD0-0xD7 */ + 0xB6D4,0xB6F0,0xB6F4,0xB6F8,0xB700,0xB701,0xB705,0xB728,/* 0xD8-0xDF */ + 0xB729,0xB72C,0xB72F,0xB730,0xB738,0xB739,0xB73B,0xB744,/* 0xE0-0xE7 */ + 0xB748,0xB74C,0xB754,0xB755,0xB760,0xB764,0xB768,0xB770,/* 0xE8-0xEF */ + 0xB771,0xB773,0xB775,0xB77C,0xB77D,0xB780,0xB784,0xB78C,/* 0xF0-0xF7 */ + 0xB78D,0xB78F,0xB790,0xB791,0xB792,0xB796,0xB797,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD16E,0xD16F,0xD170,0xD171,0xD172,0xD173,0xD174,/* 0x40-0x47 */ + 0xD175,0xD176,0xD177,0xD178,0xD179,0xD17A,0xD17B,0xD17D,/* 0x48-0x4F */ + 0xD17E,0xD17F,0xD180,0xD181,0xD182,0xD183,0xD185,0xD186,/* 0x50-0x57 */ + 0xD187,0xD189,0xD18A,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD18B,0xD18C,0xD18D,0xD18E,0xD18F,0xD190,0xD191,/* 0x60-0x67 */ + 0xD192,0xD193,0xD194,0xD195,0xD196,0xD197,0xD198,0xD199,/* 0x68-0x6F */ + 0xD19A,0xD19B,0xD19C,0xD19D,0xD19E,0xD19F,0xD1A2,0xD1A3,/* 0x70-0x77 */ + 0xD1A5,0xD1A6,0xD1A7,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD1A9,0xD1AA,0xD1AB,0xD1AC,0xD1AD,0xD1AE,0xD1AF,/* 0x80-0x87 */ + 0xD1B2,0xD1B4,0xD1B6,0xD1B7,0xD1B8,0xD1B9,0xD1BB,0xD1BD,/* 0x88-0x8F */ + 0xD1BE,0xD1BF,0xD1C1,0xD1C2,0xD1C3,0xD1C4,0xD1C5,0xD1C6,/* 0x90-0x97 */ + 0xD1C7,0xD1C8,0xD1C9,0xD1CA,0xD1CB,0xD1CC,0xD1CD,0xD1CE,/* 0x98-0x9F */ + 0xD1CF,0xB798,0xB799,0xB79C,0xB7A0,0xB7A8,0xB7A9,0xB7AB,/* 0xA0-0xA7 */ + 0xB7AC,0xB7AD,0xB7B4,0xB7B5,0xB7B8,0xB7C7,0xB7C9,0xB7EC,/* 0xA8-0xAF */ + 0xB7ED,0xB7F0,0xB7F4,0xB7FC,0xB7FD,0xB7FF,0xB800,0xB801,/* 0xB0-0xB7 */ + 0xB807,0xB808,0xB809,0xB80C,0xB810,0xB818,0xB819,0xB81B,/* 0xB8-0xBF */ + 0xB81D,0xB824,0xB825,0xB828,0xB82C,0xB834,0xB835,0xB837,/* 0xC0-0xC7 */ + 0xB838,0xB839,0xB840,0xB844,0xB851,0xB853,0xB85C,0xB85D,/* 0xC8-0xCF */ + 0xB860,0xB864,0xB86C,0xB86D,0xB86F,0xB871,0xB878,0xB87C,/* 0xD0-0xD7 */ + 0xB88D,0xB8A8,0xB8B0,0xB8B4,0xB8B8,0xB8C0,0xB8C1,0xB8C3,/* 0xD8-0xDF */ + 0xB8C5,0xB8CC,0xB8D0,0xB8D4,0xB8DD,0xB8DF,0xB8E1,0xB8E8,/* 0xE0-0xE7 */ + 0xB8E9,0xB8EC,0xB8F0,0xB8F8,0xB8F9,0xB8FB,0xB8FD,0xB904,/* 0xE8-0xEF */ + 0xB918,0xB920,0xB93C,0xB93D,0xB940,0xB944,0xB94C,0xB94F,/* 0xF0-0xF7 */ + 0xB951,0xB958,0xB959,0xB95C,0xB960,0xB968,0xB969,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD1D0,0xD1D1,0xD1D2,0xD1D3,0xD1D4,0xD1D5,0xD1D6,/* 0x40-0x47 */ + 0xD1D7,0xD1D9,0xD1DA,0xD1DB,0xD1DC,0xD1DD,0xD1DE,0xD1DF,/* 0x48-0x4F */ + 0xD1E0,0xD1E1,0xD1E2,0xD1E3,0xD1E4,0xD1E5,0xD1E6,0xD1E7,/* 0x50-0x57 */ + 0xD1E8,0xD1E9,0xD1EA,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD1EB,0xD1EC,0xD1ED,0xD1EE,0xD1EF,0xD1F0,0xD1F1,/* 0x60-0x67 */ + 0xD1F2,0xD1F3,0xD1F5,0xD1F6,0xD1F7,0xD1F9,0xD1FA,0xD1FB,/* 0x68-0x6F */ + 0xD1FC,0xD1FD,0xD1FE,0xD1FF,0xD200,0xD201,0xD202,0xD203,/* 0x70-0x77 */ + 0xD204,0xD205,0xD206,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD208,0xD20A,0xD20B,0xD20C,0xD20D,0xD20E,0xD20F,/* 0x80-0x87 */ + 0xD211,0xD212,0xD213,0xD214,0xD215,0xD216,0xD217,0xD218,/* 0x88-0x8F */ + 0xD219,0xD21A,0xD21B,0xD21C,0xD21D,0xD21E,0xD21F,0xD220,/* 0x90-0x97 */ + 0xD221,0xD222,0xD223,0xD224,0xD225,0xD226,0xD227,0xD228,/* 0x98-0x9F */ + 0xD229,0xB96B,0xB96D,0xB974,0xB975,0xB978,0xB97C,0xB984,/* 0xA0-0xA7 */ + 0xB985,0xB987,0xB989,0xB98A,0xB98D,0xB98E,0xB9AC,0xB9AD,/* 0xA8-0xAF */ + 0xB9B0,0xB9B4,0xB9BC,0xB9BD,0xB9BF,0xB9C1,0xB9C8,0xB9C9,/* 0xB0-0xB7 */ + 0xB9CC,0xB9CE,0xB9CF,0xB9D0,0xB9D1,0xB9D2,0xB9D8,0xB9D9,/* 0xB8-0xBF */ + 0xB9DB,0xB9DD,0xB9DE,0xB9E1,0xB9E3,0xB9E4,0xB9E5,0xB9E8,/* 0xC0-0xC7 */ + 0xB9EC,0xB9F4,0xB9F5,0xB9F7,0xB9F8,0xB9F9,0xB9FA,0xBA00,/* 0xC8-0xCF */ + 0xBA01,0xBA08,0xBA15,0xBA38,0xBA39,0xBA3C,0xBA40,0xBA42,/* 0xD0-0xD7 */ + 0xBA48,0xBA49,0xBA4B,0xBA4D,0xBA4E,0xBA53,0xBA54,0xBA55,/* 0xD8-0xDF */ + 0xBA58,0xBA5C,0xBA64,0xBA65,0xBA67,0xBA68,0xBA69,0xBA70,/* 0xE0-0xE7 */ + 0xBA71,0xBA74,0xBA78,0xBA83,0xBA84,0xBA85,0xBA87,0xBA8C,/* 0xE8-0xEF */ + 0xBAA8,0xBAA9,0xBAAB,0xBAAC,0xBAB0,0xBAB2,0xBAB8,0xBAB9,/* 0xF0-0xF7 */ + 0xBABB,0xBABD,0xBAC4,0xBAC8,0xBAD8,0xBAD9,0xBAFC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD22A,0xD22B,0xD22E,0xD22F,0xD231,0xD232,0xD233,/* 0x40-0x47 */ + 0xD235,0xD236,0xD237,0xD238,0xD239,0xD23A,0xD23B,0xD23E,/* 0x48-0x4F */ + 0xD240,0xD242,0xD243,0xD244,0xD245,0xD246,0xD247,0xD249,/* 0x50-0x57 */ + 0xD24A,0xD24B,0xD24C,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD24D,0xD24E,0xD24F,0xD250,0xD251,0xD252,0xD253,/* 0x60-0x67 */ + 0xD254,0xD255,0xD256,0xD257,0xD258,0xD259,0xD25A,0xD25B,/* 0x68-0x6F */ + 0xD25D,0xD25E,0xD25F,0xD260,0xD261,0xD262,0xD263,0xD265,/* 0x70-0x77 */ + 0xD266,0xD267,0xD268,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD269,0xD26A,0xD26B,0xD26C,0xD26D,0xD26E,0xD26F,/* 0x80-0x87 */ + 0xD270,0xD271,0xD272,0xD273,0xD274,0xD275,0xD276,0xD277,/* 0x88-0x8F */ + 0xD278,0xD279,0xD27A,0xD27B,0xD27C,0xD27D,0xD27E,0xD27F,/* 0x90-0x97 */ + 0xD282,0xD283,0xD285,0xD286,0xD287,0xD289,0xD28A,0xD28B,/* 0x98-0x9F */ + 0xD28C,0xBB00,0xBB04,0xBB0D,0xBB0F,0xBB11,0xBB18,0xBB1C,/* 0xA0-0xA7 */ + 0xBB20,0xBB29,0xBB2B,0xBB34,0xBB35,0xBB36,0xBB38,0xBB3B,/* 0xA8-0xAF */ + 0xBB3C,0xBB3D,0xBB3E,0xBB44,0xBB45,0xBB47,0xBB49,0xBB4D,/* 0xB0-0xB7 */ + 0xBB4F,0xBB50,0xBB54,0xBB58,0xBB61,0xBB63,0xBB6C,0xBB88,/* 0xB8-0xBF */ + 0xBB8C,0xBB90,0xBBA4,0xBBA8,0xBBAC,0xBBB4,0xBBB7,0xBBC0,/* 0xC0-0xC7 */ + 0xBBC4,0xBBC8,0xBBD0,0xBBD3,0xBBF8,0xBBF9,0xBBFC,0xBBFF,/* 0xC8-0xCF */ + 0xBC00,0xBC02,0xBC08,0xBC09,0xBC0B,0xBC0C,0xBC0D,0xBC0F,/* 0xD0-0xD7 */ + 0xBC11,0xBC14,0xBC15,0xBC16,0xBC17,0xBC18,0xBC1B,0xBC1C,/* 0xD8-0xDF */ + 0xBC1D,0xBC1E,0xBC1F,0xBC24,0xBC25,0xBC27,0xBC29,0xBC2D,/* 0xE0-0xE7 */ + 0xBC30,0xBC31,0xBC34,0xBC38,0xBC40,0xBC41,0xBC43,0xBC44,/* 0xE8-0xEF */ + 0xBC45,0xBC49,0xBC4C,0xBC4D,0xBC50,0xBC5D,0xBC84,0xBC85,/* 0xF0-0xF7 */ + 0xBC88,0xBC8B,0xBC8C,0xBC8E,0xBC94,0xBC95,0xBC97,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD28D,0xD28E,0xD28F,0xD292,0xD293,0xD294,0xD296,/* 0x40-0x47 */ + 0xD297,0xD298,0xD299,0xD29A,0xD29B,0xD29D,0xD29E,0xD29F,/* 0x48-0x4F */ + 0xD2A1,0xD2A2,0xD2A3,0xD2A5,0xD2A6,0xD2A7,0xD2A8,0xD2A9,/* 0x50-0x57 */ + 0xD2AA,0xD2AB,0xD2AD,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD2AE,0xD2AF,0xD2B0,0xD2B2,0xD2B3,0xD2B4,0xD2B5,/* 0x60-0x67 */ + 0xD2B6,0xD2B7,0xD2BA,0xD2BB,0xD2BD,0xD2BE,0xD2C1,0xD2C3,/* 0x68-0x6F */ + 0xD2C4,0xD2C5,0xD2C6,0xD2C7,0xD2CA,0xD2CC,0xD2CD,0xD2CE,/* 0x70-0x77 */ + 0xD2CF,0xD2D0,0xD2D1,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD2D2,0xD2D3,0xD2D5,0xD2D6,0xD2D7,0xD2D9,0xD2DA,/* 0x80-0x87 */ + 0xD2DB,0xD2DD,0xD2DE,0xD2DF,0xD2E0,0xD2E1,0xD2E2,0xD2E3,/* 0x88-0x8F */ + 0xD2E6,0xD2E7,0xD2E8,0xD2E9,0xD2EA,0xD2EB,0xD2EC,0xD2ED,/* 0x90-0x97 */ + 0xD2EE,0xD2EF,0xD2F2,0xD2F3,0xD2F5,0xD2F6,0xD2F7,0xD2F9,/* 0x98-0x9F */ + 0xD2FA,0xBC99,0xBC9A,0xBCA0,0xBCA1,0xBCA4,0xBCA7,0xBCA8,/* 0xA0-0xA7 */ + 0xBCB0,0xBCB1,0xBCB3,0xBCB4,0xBCB5,0xBCBC,0xBCBD,0xBCC0,/* 0xA8-0xAF */ + 0xBCC4,0xBCCD,0xBCCF,0xBCD0,0xBCD1,0xBCD5,0xBCD8,0xBCDC,/* 0xB0-0xB7 */ + 0xBCF4,0xBCF5,0xBCF6,0xBCF8,0xBCFC,0xBD04,0xBD05,0xBD07,/* 0xB8-0xBF */ + 0xBD09,0xBD10,0xBD14,0xBD24,0xBD2C,0xBD40,0xBD48,0xBD49,/* 0xC0-0xC7 */ + 0xBD4C,0xBD50,0xBD58,0xBD59,0xBD64,0xBD68,0xBD80,0xBD81,/* 0xC8-0xCF */ + 0xBD84,0xBD87,0xBD88,0xBD89,0xBD8A,0xBD90,0xBD91,0xBD93,/* 0xD0-0xD7 */ + 0xBD95,0xBD99,0xBD9A,0xBD9C,0xBDA4,0xBDB0,0xBDB8,0xBDD4,/* 0xD8-0xDF */ + 0xBDD5,0xBDD8,0xBDDC,0xBDE9,0xBDF0,0xBDF4,0xBDF8,0xBE00,/* 0xE0-0xE7 */ + 0xBE03,0xBE05,0xBE0C,0xBE0D,0xBE10,0xBE14,0xBE1C,0xBE1D,/* 0xE8-0xEF */ + 0xBE1F,0xBE44,0xBE45,0xBE48,0xBE4C,0xBE4E,0xBE54,0xBE55,/* 0xF0-0xF7 */ + 0xBE57,0xBE59,0xBE5A,0xBE5B,0xBE60,0xBE61,0xBE64,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD2FB,0xD2FC,0xD2FD,0xD2FE,0xD2FF,0xD302,0xD304,/* 0x40-0x47 */ + 0xD306,0xD307,0xD308,0xD309,0xD30A,0xD30B,0xD30F,0xD311,/* 0x48-0x4F */ + 0xD312,0xD313,0xD315,0xD317,0xD318,0xD319,0xD31A,0xD31B,/* 0x50-0x57 */ + 0xD31E,0xD322,0xD323,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD324,0xD326,0xD327,0xD32A,0xD32B,0xD32D,0xD32E,/* 0x60-0x67 */ + 0xD32F,0xD331,0xD332,0xD333,0xD334,0xD335,0xD336,0xD337,/* 0x68-0x6F */ + 0xD33A,0xD33E,0xD33F,0xD340,0xD341,0xD342,0xD343,0xD346,/* 0x70-0x77 */ + 0xD347,0xD348,0xD349,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD34A,0xD34B,0xD34C,0xD34D,0xD34E,0xD34F,0xD350,/* 0x80-0x87 */ + 0xD351,0xD352,0xD353,0xD354,0xD355,0xD356,0xD357,0xD358,/* 0x88-0x8F */ + 0xD359,0xD35A,0xD35B,0xD35C,0xD35D,0xD35E,0xD35F,0xD360,/* 0x90-0x97 */ + 0xD361,0xD362,0xD363,0xD364,0xD365,0xD366,0xD367,0xD368,/* 0x98-0x9F */ + 0xD369,0xBE68,0xBE6A,0xBE70,0xBE71,0xBE73,0xBE74,0xBE75,/* 0xA0-0xA7 */ + 0xBE7B,0xBE7C,0xBE7D,0xBE80,0xBE84,0xBE8C,0xBE8D,0xBE8F,/* 0xA8-0xAF */ + 0xBE90,0xBE91,0xBE98,0xBE99,0xBEA8,0xBED0,0xBED1,0xBED4,/* 0xB0-0xB7 */ + 0xBED7,0xBED8,0xBEE0,0xBEE3,0xBEE4,0xBEE5,0xBEEC,0xBF01,/* 0xB8-0xBF */ + 0xBF08,0xBF09,0xBF18,0xBF19,0xBF1B,0xBF1C,0xBF1D,0xBF40,/* 0xC0-0xC7 */ + 0xBF41,0xBF44,0xBF48,0xBF50,0xBF51,0xBF55,0xBF94,0xBFB0,/* 0xC8-0xCF */ + 0xBFC5,0xBFCC,0xBFCD,0xBFD0,0xBFD4,0xBFDC,0xBFDF,0xBFE1,/* 0xD0-0xD7 */ + 0xC03C,0xC051,0xC058,0xC05C,0xC060,0xC068,0xC069,0xC090,/* 0xD8-0xDF */ + 0xC091,0xC094,0xC098,0xC0A0,0xC0A1,0xC0A3,0xC0A5,0xC0AC,/* 0xE0-0xE7 */ + 0xC0AD,0xC0AF,0xC0B0,0xC0B3,0xC0B4,0xC0B5,0xC0B6,0xC0BC,/* 0xE8-0xEF */ + 0xC0BD,0xC0BF,0xC0C0,0xC0C1,0xC0C5,0xC0C8,0xC0C9,0xC0CC,/* 0xF0-0xF7 */ + 0xC0D0,0xC0D8,0xC0D9,0xC0DB,0xC0DC,0xC0DD,0xC0E4,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD36A,0xD36B,0xD36C,0xD36D,0xD36E,0xD36F,0xD370,/* 0x40-0x47 */ + 0xD371,0xD372,0xD373,0xD374,0xD375,0xD376,0xD377,0xD378,/* 0x48-0x4F */ + 0xD379,0xD37A,0xD37B,0xD37E,0xD37F,0xD381,0xD382,0xD383,/* 0x50-0x57 */ + 0xD385,0xD386,0xD387,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD388,0xD389,0xD38A,0xD38B,0xD38E,0xD392,0xD393,/* 0x60-0x67 */ + 0xD394,0xD395,0xD396,0xD397,0xD39A,0xD39B,0xD39D,0xD39E,/* 0x68-0x6F */ + 0xD39F,0xD3A1,0xD3A2,0xD3A3,0xD3A4,0xD3A5,0xD3A6,0xD3A7,/* 0x70-0x77 */ + 0xD3AA,0xD3AC,0xD3AE,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD3AF,0xD3B0,0xD3B1,0xD3B2,0xD3B3,0xD3B5,0xD3B6,/* 0x80-0x87 */ + 0xD3B7,0xD3B9,0xD3BA,0xD3BB,0xD3BD,0xD3BE,0xD3BF,0xD3C0,/* 0x88-0x8F */ + 0xD3C1,0xD3C2,0xD3C3,0xD3C6,0xD3C7,0xD3CA,0xD3CB,0xD3CC,/* 0x90-0x97 */ + 0xD3CD,0xD3CE,0xD3CF,0xD3D1,0xD3D2,0xD3D3,0xD3D4,0xD3D5,/* 0x98-0x9F */ + 0xD3D6,0xC0E5,0xC0E8,0xC0EC,0xC0F4,0xC0F5,0xC0F7,0xC0F9,/* 0xA0-0xA7 */ + 0xC100,0xC104,0xC108,0xC110,0xC115,0xC11C,0xC11D,0xC11E,/* 0xA8-0xAF */ + 0xC11F,0xC120,0xC123,0xC124,0xC126,0xC127,0xC12C,0xC12D,/* 0xB0-0xB7 */ + 0xC12F,0xC130,0xC131,0xC136,0xC138,0xC139,0xC13C,0xC140,/* 0xB8-0xBF */ + 0xC148,0xC149,0xC14B,0xC14C,0xC14D,0xC154,0xC155,0xC158,/* 0xC0-0xC7 */ + 0xC15C,0xC164,0xC165,0xC167,0xC168,0xC169,0xC170,0xC174,/* 0xC8-0xCF */ + 0xC178,0xC185,0xC18C,0xC18D,0xC18E,0xC190,0xC194,0xC196,/* 0xD0-0xD7 */ + 0xC19C,0xC19D,0xC19F,0xC1A1,0xC1A5,0xC1A8,0xC1A9,0xC1AC,/* 0xD8-0xDF */ + 0xC1B0,0xC1BD,0xC1C4,0xC1C8,0xC1CC,0xC1D4,0xC1D7,0xC1D8,/* 0xE0-0xE7 */ + 0xC1E0,0xC1E4,0xC1E8,0xC1F0,0xC1F1,0xC1F3,0xC1FC,0xC1FD,/* 0xE8-0xEF */ + 0xC200,0xC204,0xC20C,0xC20D,0xC20F,0xC211,0xC218,0xC219,/* 0xF0-0xF7 */ + 0xC21C,0xC21F,0xC220,0xC228,0xC229,0xC22B,0xC22D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD3D7,0xD3D9,0xD3DA,0xD3DB,0xD3DC,0xD3DD,0xD3DE,/* 0x40-0x47 */ + 0xD3DF,0xD3E0,0xD3E2,0xD3E4,0xD3E5,0xD3E6,0xD3E7,0xD3E8,/* 0x48-0x4F */ + 0xD3E9,0xD3EA,0xD3EB,0xD3EE,0xD3EF,0xD3F1,0xD3F2,0xD3F3,/* 0x50-0x57 */ + 0xD3F5,0xD3F6,0xD3F7,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD3F8,0xD3F9,0xD3FA,0xD3FB,0xD3FE,0xD400,0xD402,/* 0x60-0x67 */ + 0xD403,0xD404,0xD405,0xD406,0xD407,0xD409,0xD40A,0xD40B,/* 0x68-0x6F */ + 0xD40C,0xD40D,0xD40E,0xD40F,0xD410,0xD411,0xD412,0xD413,/* 0x70-0x77 */ + 0xD414,0xD415,0xD416,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD417,0xD418,0xD419,0xD41A,0xD41B,0xD41C,0xD41E,/* 0x80-0x87 */ + 0xD41F,0xD420,0xD421,0xD422,0xD423,0xD424,0xD425,0xD426,/* 0x88-0x8F */ + 0xD427,0xD428,0xD429,0xD42A,0xD42B,0xD42C,0xD42D,0xD42E,/* 0x90-0x97 */ + 0xD42F,0xD430,0xD431,0xD432,0xD433,0xD434,0xD435,0xD436,/* 0x98-0x9F */ + 0xD437,0xC22F,0xC231,0xC232,0xC234,0xC248,0xC250,0xC251,/* 0xA0-0xA7 */ + 0xC254,0xC258,0xC260,0xC265,0xC26C,0xC26D,0xC270,0xC274,/* 0xA8-0xAF */ + 0xC27C,0xC27D,0xC27F,0xC281,0xC288,0xC289,0xC290,0xC298,/* 0xB0-0xB7 */ + 0xC29B,0xC29D,0xC2A4,0xC2A5,0xC2A8,0xC2AC,0xC2AD,0xC2B4,/* 0xB8-0xBF */ + 0xC2B5,0xC2B7,0xC2B9,0xC2DC,0xC2DD,0xC2E0,0xC2E3,0xC2E4,/* 0xC0-0xC7 */ + 0xC2EB,0xC2EC,0xC2ED,0xC2EF,0xC2F1,0xC2F6,0xC2F8,0xC2F9,/* 0xC8-0xCF */ + 0xC2FB,0xC2FC,0xC300,0xC308,0xC309,0xC30C,0xC30D,0xC313,/* 0xD0-0xD7 */ + 0xC314,0xC315,0xC318,0xC31C,0xC324,0xC325,0xC328,0xC329,/* 0xD8-0xDF */ + 0xC345,0xC368,0xC369,0xC36C,0xC370,0xC372,0xC378,0xC379,/* 0xE0-0xE7 */ + 0xC37C,0xC37D,0xC384,0xC388,0xC38C,0xC3C0,0xC3D8,0xC3D9,/* 0xE8-0xEF */ + 0xC3DC,0xC3DF,0xC3E0,0xC3E2,0xC3E8,0xC3E9,0xC3ED,0xC3F4,/* 0xF0-0xF7 */ + 0xC3F5,0xC3F8,0xC408,0xC410,0xC424,0xC42C,0xC430,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD438,0xD439,0xD43A,0xD43B,0xD43C,0xD43D,0xD43E,/* 0x40-0x47 */ + 0xD43F,0xD441,0xD442,0xD443,0xD445,0xD446,0xD447,0xD448,/* 0x48-0x4F */ + 0xD449,0xD44A,0xD44B,0xD44C,0xD44D,0xD44E,0xD44F,0xD450,/* 0x50-0x57 */ + 0xD451,0xD452,0xD453,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD454,0xD455,0xD456,0xD457,0xD458,0xD459,0xD45A,/* 0x60-0x67 */ + 0xD45B,0xD45D,0xD45E,0xD45F,0xD461,0xD462,0xD463,0xD465,/* 0x68-0x6F */ + 0xD466,0xD467,0xD468,0xD469,0xD46A,0xD46B,0xD46C,0xD46E,/* 0x70-0x77 */ + 0xD470,0xD471,0xD472,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD473,0xD474,0xD475,0xD476,0xD477,0xD47A,0xD47B,/* 0x80-0x87 */ + 0xD47D,0xD47E,0xD481,0xD483,0xD484,0xD485,0xD486,0xD487,/* 0x88-0x8F */ + 0xD48A,0xD48C,0xD48E,0xD48F,0xD490,0xD491,0xD492,0xD493,/* 0x90-0x97 */ + 0xD495,0xD496,0xD497,0xD498,0xD499,0xD49A,0xD49B,0xD49C,/* 0x98-0x9F */ + 0xD49D,0xC434,0xC43C,0xC43D,0xC448,0xC464,0xC465,0xC468,/* 0xA0-0xA7 */ + 0xC46C,0xC474,0xC475,0xC479,0xC480,0xC494,0xC49C,0xC4B8,/* 0xA8-0xAF */ + 0xC4BC,0xC4E9,0xC4F0,0xC4F1,0xC4F4,0xC4F8,0xC4FA,0xC4FF,/* 0xB0-0xB7 */ + 0xC500,0xC501,0xC50C,0xC510,0xC514,0xC51C,0xC528,0xC529,/* 0xB8-0xBF */ + 0xC52C,0xC530,0xC538,0xC539,0xC53B,0xC53D,0xC544,0xC545,/* 0xC0-0xC7 */ + 0xC548,0xC549,0xC54A,0xC54C,0xC54D,0xC54E,0xC553,0xC554,/* 0xC8-0xCF */ + 0xC555,0xC557,0xC558,0xC559,0xC55D,0xC55E,0xC560,0xC561,/* 0xD0-0xD7 */ + 0xC564,0xC568,0xC570,0xC571,0xC573,0xC574,0xC575,0xC57C,/* 0xD8-0xDF */ + 0xC57D,0xC580,0xC584,0xC587,0xC58C,0xC58D,0xC58F,0xC591,/* 0xE0-0xE7 */ + 0xC595,0xC597,0xC598,0xC59C,0xC5A0,0xC5A9,0xC5B4,0xC5B5,/* 0xE8-0xEF */ + 0xC5B8,0xC5B9,0xC5BB,0xC5BC,0xC5BD,0xC5BE,0xC5C4,0xC5C5,/* 0xF0-0xF7 */ + 0xC5C6,0xC5C7,0xC5C8,0xC5C9,0xC5CA,0xC5CC,0xC5CE,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD49E,0xD49F,0xD4A0,0xD4A1,0xD4A2,0xD4A3,0xD4A4,/* 0x40-0x47 */ + 0xD4A5,0xD4A6,0xD4A7,0xD4A8,0xD4AA,0xD4AB,0xD4AC,0xD4AD,/* 0x48-0x4F */ + 0xD4AE,0xD4AF,0xD4B0,0xD4B1,0xD4B2,0xD4B3,0xD4B4,0xD4B5,/* 0x50-0x57 */ + 0xD4B6,0xD4B7,0xD4B8,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD4B9,0xD4BA,0xD4BB,0xD4BC,0xD4BD,0xD4BE,0xD4BF,/* 0x60-0x67 */ + 0xD4C0,0xD4C1,0xD4C2,0xD4C3,0xD4C4,0xD4C5,0xD4C6,0xD4C7,/* 0x68-0x6F */ + 0xD4C8,0xD4C9,0xD4CA,0xD4CB,0xD4CD,0xD4CE,0xD4CF,0xD4D1,/* 0x70-0x77 */ + 0xD4D2,0xD4D3,0xD4D5,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD4D6,0xD4D7,0xD4D8,0xD4D9,0xD4DA,0xD4DB,0xD4DD,/* 0x80-0x87 */ + 0xD4DE,0xD4E0,0xD4E1,0xD4E2,0xD4E3,0xD4E4,0xD4E5,0xD4E6,/* 0x88-0x8F */ + 0xD4E7,0xD4E9,0xD4EA,0xD4EB,0xD4ED,0xD4EE,0xD4EF,0xD4F1,/* 0x90-0x97 */ + 0xD4F2,0xD4F3,0xD4F4,0xD4F5,0xD4F6,0xD4F7,0xD4F9,0xD4FA,/* 0x98-0x9F */ + 0xD4FC,0xC5D0,0xC5D1,0xC5D4,0xC5D8,0xC5E0,0xC5E1,0xC5E3,/* 0xA0-0xA7 */ + 0xC5E5,0xC5EC,0xC5ED,0xC5EE,0xC5F0,0xC5F4,0xC5F6,0xC5F7,/* 0xA8-0xAF */ + 0xC5FC,0xC5FD,0xC5FE,0xC5FF,0xC600,0xC601,0xC605,0xC606,/* 0xB0-0xB7 */ + 0xC607,0xC608,0xC60C,0xC610,0xC618,0xC619,0xC61B,0xC61C,/* 0xB8-0xBF */ + 0xC624,0xC625,0xC628,0xC62C,0xC62D,0xC62E,0xC630,0xC633,/* 0xC0-0xC7 */ + 0xC634,0xC635,0xC637,0xC639,0xC63B,0xC640,0xC641,0xC644,/* 0xC8-0xCF */ + 0xC648,0xC650,0xC651,0xC653,0xC654,0xC655,0xC65C,0xC65D,/* 0xD0-0xD7 */ + 0xC660,0xC66C,0xC66F,0xC671,0xC678,0xC679,0xC67C,0xC680,/* 0xD8-0xDF */ + 0xC688,0xC689,0xC68B,0xC68D,0xC694,0xC695,0xC698,0xC69C,/* 0xE0-0xE7 */ + 0xC6A4,0xC6A5,0xC6A7,0xC6A9,0xC6B0,0xC6B1,0xC6B4,0xC6B8,/* 0xE8-0xEF */ + 0xC6B9,0xC6BA,0xC6C0,0xC6C1,0xC6C3,0xC6C5,0xC6CC,0xC6CD,/* 0xF0-0xF7 */ + 0xC6D0,0xC6D4,0xC6DC,0xC6DD,0xC6E0,0xC6E1,0xC6E8,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD4FE,0xD4FF,0xD500,0xD501,0xD502,0xD503,0xD505,/* 0x40-0x47 */ + 0xD506,0xD507,0xD509,0xD50A,0xD50B,0xD50D,0xD50E,0xD50F,/* 0x48-0x4F */ + 0xD510,0xD511,0xD512,0xD513,0xD516,0xD518,0xD519,0xD51A,/* 0x50-0x57 */ + 0xD51B,0xD51C,0xD51D,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD51E,0xD51F,0xD520,0xD521,0xD522,0xD523,0xD524,/* 0x60-0x67 */ + 0xD525,0xD526,0xD527,0xD528,0xD529,0xD52A,0xD52B,0xD52C,/* 0x68-0x6F */ + 0xD52D,0xD52E,0xD52F,0xD530,0xD531,0xD532,0xD533,0xD534,/* 0x70-0x77 */ + 0xD535,0xD536,0xD537,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD538,0xD539,0xD53A,0xD53B,0xD53E,0xD53F,0xD541,/* 0x80-0x87 */ + 0xD542,0xD543,0xD545,0xD546,0xD547,0xD548,0xD549,0xD54A,/* 0x88-0x8F */ + 0xD54B,0xD54E,0xD550,0xD552,0xD553,0xD554,0xD555,0xD556,/* 0x90-0x97 */ + 0xD557,0xD55A,0xD55B,0xD55D,0xD55E,0xD55F,0xD561,0xD562,/* 0x98-0x9F */ + 0xD563,0xC6E9,0xC6EC,0xC6F0,0xC6F8,0xC6F9,0xC6FD,0xC704,/* 0xA0-0xA7 */ + 0xC705,0xC708,0xC70C,0xC714,0xC715,0xC717,0xC719,0xC720,/* 0xA8-0xAF */ + 0xC721,0xC724,0xC728,0xC730,0xC731,0xC733,0xC735,0xC737,/* 0xB0-0xB7 */ + 0xC73C,0xC73D,0xC740,0xC744,0xC74A,0xC74C,0xC74D,0xC74F,/* 0xB8-0xBF */ + 0xC751,0xC752,0xC753,0xC754,0xC755,0xC756,0xC757,0xC758,/* 0xC0-0xC7 */ + 0xC75C,0xC760,0xC768,0xC76B,0xC774,0xC775,0xC778,0xC77C,/* 0xC8-0xCF */ + 0xC77D,0xC77E,0xC783,0xC784,0xC785,0xC787,0xC788,0xC789,/* 0xD0-0xD7 */ + 0xC78A,0xC78E,0xC790,0xC791,0xC794,0xC796,0xC797,0xC798,/* 0xD8-0xDF */ + 0xC79A,0xC7A0,0xC7A1,0xC7A3,0xC7A4,0xC7A5,0xC7A6,0xC7AC,/* 0xE0-0xE7 */ + 0xC7AD,0xC7B0,0xC7B4,0xC7BC,0xC7BD,0xC7BF,0xC7C0,0xC7C1,/* 0xE8-0xEF */ + 0xC7C8,0xC7C9,0xC7CC,0xC7CE,0xC7D0,0xC7D8,0xC7DD,0xC7E4,/* 0xF0-0xF7 */ + 0xC7E8,0xC7EC,0xC800,0xC801,0xC804,0xC808,0xC80A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD564,0xD566,0xD567,0xD56A,0xD56C,0xD56E,0xD56F,/* 0x40-0x47 */ + 0xD570,0xD571,0xD572,0xD573,0xD576,0xD577,0xD579,0xD57A,/* 0x48-0x4F */ + 0xD57B,0xD57D,0xD57E,0xD57F,0xD580,0xD581,0xD582,0xD583,/* 0x50-0x57 */ + 0xD586,0xD58A,0xD58B,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD58C,0xD58D,0xD58E,0xD58F,0xD591,0xD592,0xD593,/* 0x60-0x67 */ + 0xD594,0xD595,0xD596,0xD597,0xD598,0xD599,0xD59A,0xD59B,/* 0x68-0x6F */ + 0xD59C,0xD59D,0xD59E,0xD59F,0xD5A0,0xD5A1,0xD5A2,0xD5A3,/* 0x70-0x77 */ + 0xD5A4,0xD5A6,0xD5A7,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD5A8,0xD5A9,0xD5AA,0xD5AB,0xD5AC,0xD5AD,0xD5AE,/* 0x80-0x87 */ + 0xD5AF,0xD5B0,0xD5B1,0xD5B2,0xD5B3,0xD5B4,0xD5B5,0xD5B6,/* 0x88-0x8F */ + 0xD5B7,0xD5B8,0xD5B9,0xD5BA,0xD5BB,0xD5BC,0xD5BD,0xD5BE,/* 0x90-0x97 */ + 0xD5BF,0xD5C0,0xD5C1,0xD5C2,0xD5C3,0xD5C4,0xD5C5,0xD5C6,/* 0x98-0x9F */ + 0xD5C7,0xC810,0xC811,0xC813,0xC815,0xC816,0xC81C,0xC81D,/* 0xA0-0xA7 */ + 0xC820,0xC824,0xC82C,0xC82D,0xC82F,0xC831,0xC838,0xC83C,/* 0xA8-0xAF */ + 0xC840,0xC848,0xC849,0xC84C,0xC84D,0xC854,0xC870,0xC871,/* 0xB0-0xB7 */ + 0xC874,0xC878,0xC87A,0xC880,0xC881,0xC883,0xC885,0xC886,/* 0xB8-0xBF */ + 0xC887,0xC88B,0xC88C,0xC88D,0xC894,0xC89D,0xC89F,0xC8A1,/* 0xC0-0xC7 */ + 0xC8A8,0xC8BC,0xC8BD,0xC8C4,0xC8C8,0xC8CC,0xC8D4,0xC8D5,/* 0xC8-0xCF */ + 0xC8D7,0xC8D9,0xC8E0,0xC8E1,0xC8E4,0xC8F5,0xC8FC,0xC8FD,/* 0xD0-0xD7 */ + 0xC900,0xC904,0xC905,0xC906,0xC90C,0xC90D,0xC90F,0xC911,/* 0xD8-0xDF */ + 0xC918,0xC92C,0xC934,0xC950,0xC951,0xC954,0xC958,0xC960,/* 0xE0-0xE7 */ + 0xC961,0xC963,0xC96C,0xC970,0xC974,0xC97C,0xC988,0xC989,/* 0xE8-0xEF */ + 0xC98C,0xC990,0xC998,0xC999,0xC99B,0xC99D,0xC9C0,0xC9C1,/* 0xF0-0xF7 */ + 0xC9C4,0xC9C7,0xC9C8,0xC9CA,0xC9D0,0xC9D1,0xC9D3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD5CA,0xD5CB,0xD5CD,0xD5CE,0xD5CF,0xD5D1,0xD5D3,/* 0x40-0x47 */ + 0xD5D4,0xD5D5,0xD5D6,0xD5D7,0xD5DA,0xD5DC,0xD5DE,0xD5DF,/* 0x48-0x4F */ + 0xD5E0,0xD5E1,0xD5E2,0xD5E3,0xD5E6,0xD5E7,0xD5E9,0xD5EA,/* 0x50-0x57 */ + 0xD5EB,0xD5ED,0xD5EE,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD5EF,0xD5F0,0xD5F1,0xD5F2,0xD5F3,0xD5F6,0xD5F8,/* 0x60-0x67 */ + 0xD5FA,0xD5FB,0xD5FC,0xD5FD,0xD5FE,0xD5FF,0xD602,0xD603,/* 0x68-0x6F */ + 0xD605,0xD606,0xD607,0xD609,0xD60A,0xD60B,0xD60C,0xD60D,/* 0x70-0x77 */ + 0xD60E,0xD60F,0xD612,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD616,0xD617,0xD618,0xD619,0xD61A,0xD61B,0xD61D,/* 0x80-0x87 */ + 0xD61E,0xD61F,0xD621,0xD622,0xD623,0xD625,0xD626,0xD627,/* 0x88-0x8F */ + 0xD628,0xD629,0xD62A,0xD62B,0xD62C,0xD62E,0xD62F,0xD630,/* 0x90-0x97 */ + 0xD631,0xD632,0xD633,0xD634,0xD635,0xD636,0xD637,0xD63A,/* 0x98-0x9F */ + 0xD63B,0xC9D5,0xC9D6,0xC9D9,0xC9DA,0xC9DC,0xC9DD,0xC9E0,/* 0xA0-0xA7 */ + 0xC9E2,0xC9E4,0xC9E7,0xC9EC,0xC9ED,0xC9EF,0xC9F0,0xC9F1,/* 0xA8-0xAF */ + 0xC9F8,0xC9F9,0xC9FC,0xCA00,0xCA08,0xCA09,0xCA0B,0xCA0C,/* 0xB0-0xB7 */ + 0xCA0D,0xCA14,0xCA18,0xCA29,0xCA4C,0xCA4D,0xCA50,0xCA54,/* 0xB8-0xBF */ + 0xCA5C,0xCA5D,0xCA5F,0xCA60,0xCA61,0xCA68,0xCA7D,0xCA84,/* 0xC0-0xC7 */ + 0xCA98,0xCABC,0xCABD,0xCAC0,0xCAC4,0xCACC,0xCACD,0xCACF,/* 0xC8-0xCF */ + 0xCAD1,0xCAD3,0xCAD8,0xCAD9,0xCAE0,0xCAEC,0xCAF4,0xCB08,/* 0xD0-0xD7 */ + 0xCB10,0xCB14,0xCB18,0xCB20,0xCB21,0xCB41,0xCB48,0xCB49,/* 0xD8-0xDF */ + 0xCB4C,0xCB50,0xCB58,0xCB59,0xCB5D,0xCB64,0xCB78,0xCB79,/* 0xE0-0xE7 */ + 0xCB9C,0xCBB8,0xCBD4,0xCBE4,0xCBE7,0xCBE9,0xCC0C,0xCC0D,/* 0xE8-0xEF */ + 0xCC10,0xCC14,0xCC1C,0xCC1D,0xCC21,0xCC22,0xCC27,0xCC28,/* 0xF0-0xF7 */ + 0xCC29,0xCC2C,0xCC2E,0xCC30,0xCC38,0xCC39,0xCC3B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD63D,0xD63E,0xD63F,0xD641,0xD642,0xD643,0xD644,/* 0x40-0x47 */ + 0xD646,0xD647,0xD64A,0xD64C,0xD64E,0xD64F,0xD650,0xD652,/* 0x48-0x4F */ + 0xD653,0xD656,0xD657,0xD659,0xD65A,0xD65B,0xD65D,0xD65E,/* 0x50-0x57 */ + 0xD65F,0xD660,0xD661,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD662,0xD663,0xD664,0xD665,0xD666,0xD668,0xD66A,/* 0x60-0x67 */ + 0xD66B,0xD66C,0xD66D,0xD66E,0xD66F,0xD672,0xD673,0xD675,/* 0x68-0x6F */ + 0xD676,0xD677,0xD678,0xD679,0xD67A,0xD67B,0xD67C,0xD67D,/* 0x70-0x77 */ + 0xD67E,0xD67F,0xD680,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD681,0xD682,0xD684,0xD686,0xD687,0xD688,0xD689,/* 0x80-0x87 */ + 0xD68A,0xD68B,0xD68E,0xD68F,0xD691,0xD692,0xD693,0xD695,/* 0x88-0x8F */ + 0xD696,0xD697,0xD698,0xD699,0xD69A,0xD69B,0xD69C,0xD69E,/* 0x90-0x97 */ + 0xD6A0,0xD6A2,0xD6A3,0xD6A4,0xD6A5,0xD6A6,0xD6A7,0xD6A9,/* 0x98-0x9F */ + 0xD6AA,0xCC3C,0xCC3D,0xCC3E,0xCC44,0xCC45,0xCC48,0xCC4C,/* 0xA0-0xA7 */ + 0xCC54,0xCC55,0xCC57,0xCC58,0xCC59,0xCC60,0xCC64,0xCC66,/* 0xA8-0xAF */ + 0xCC68,0xCC70,0xCC75,0xCC98,0xCC99,0xCC9C,0xCCA0,0xCCA8,/* 0xB0-0xB7 */ + 0xCCA9,0xCCAB,0xCCAC,0xCCAD,0xCCB4,0xCCB5,0xCCB8,0xCCBC,/* 0xB8-0xBF */ + 0xCCC4,0xCCC5,0xCCC7,0xCCC9,0xCCD0,0xCCD4,0xCCE4,0xCCEC,/* 0xC0-0xC7 */ + 0xCCF0,0xCD01,0xCD08,0xCD09,0xCD0C,0xCD10,0xCD18,0xCD19,/* 0xC8-0xCF */ + 0xCD1B,0xCD1D,0xCD24,0xCD28,0xCD2C,0xCD39,0xCD5C,0xCD60,/* 0xD0-0xD7 */ + 0xCD64,0xCD6C,0xCD6D,0xCD6F,0xCD71,0xCD78,0xCD88,0xCD94,/* 0xD8-0xDF */ + 0xCD95,0xCD98,0xCD9C,0xCDA4,0xCDA5,0xCDA7,0xCDA9,0xCDB0,/* 0xE0-0xE7 */ + 0xCDC4,0xCDCC,0xCDD0,0xCDE8,0xCDEC,0xCDF0,0xCDF8,0xCDF9,/* 0xE8-0xEF */ + 0xCDFB,0xCDFD,0xCE04,0xCE08,0xCE0C,0xCE14,0xCE19,0xCE20,/* 0xF0-0xF7 */ + 0xCE21,0xCE24,0xCE28,0xCE30,0xCE31,0xCE33,0xCE35,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD6AB,0xD6AD,0xD6AE,0xD6AF,0xD6B1,0xD6B2,0xD6B3,/* 0x40-0x47 */ + 0xD6B4,0xD6B5,0xD6B6,0xD6B7,0xD6B8,0xD6BA,0xD6BC,0xD6BD,/* 0x48-0x4F */ + 0xD6BE,0xD6BF,0xD6C0,0xD6C1,0xD6C2,0xD6C3,0xD6C6,0xD6C7,/* 0x50-0x57 */ + 0xD6C9,0xD6CA,0xD6CB,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD6CD,0xD6CE,0xD6CF,0xD6D0,0xD6D2,0xD6D3,0xD6D5,/* 0x60-0x67 */ + 0xD6D6,0xD6D8,0xD6DA,0xD6DB,0xD6DC,0xD6DD,0xD6DE,0xD6DF,/* 0x68-0x6F */ + 0xD6E1,0xD6E2,0xD6E3,0xD6E5,0xD6E6,0xD6E7,0xD6E9,0xD6EA,/* 0x70-0x77 */ + 0xD6EB,0xD6EC,0xD6ED,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD6EE,0xD6EF,0xD6F1,0xD6F2,0xD6F3,0xD6F4,0xD6F6,/* 0x80-0x87 */ + 0xD6F7,0xD6F8,0xD6F9,0xD6FA,0xD6FB,0xD6FE,0xD6FF,0xD701,/* 0x88-0x8F */ + 0xD702,0xD703,0xD705,0xD706,0xD707,0xD708,0xD709,0xD70A,/* 0x90-0x97 */ + 0xD70B,0xD70C,0xD70D,0xD70E,0xD70F,0xD710,0xD712,0xD713,/* 0x98-0x9F */ + 0xD714,0xCE58,0xCE59,0xCE5C,0xCE5F,0xCE60,0xCE61,0xCE68,/* 0xA0-0xA7 */ + 0xCE69,0xCE6B,0xCE6D,0xCE74,0xCE75,0xCE78,0xCE7C,0xCE84,/* 0xA8-0xAF */ + 0xCE85,0xCE87,0xCE89,0xCE90,0xCE91,0xCE94,0xCE98,0xCEA0,/* 0xB0-0xB7 */ + 0xCEA1,0xCEA3,0xCEA4,0xCEA5,0xCEAC,0xCEAD,0xCEC1,0xCEE4,/* 0xB8-0xBF */ + 0xCEE5,0xCEE8,0xCEEB,0xCEEC,0xCEF4,0xCEF5,0xCEF7,0xCEF8,/* 0xC0-0xC7 */ + 0xCEF9,0xCF00,0xCF01,0xCF04,0xCF08,0xCF10,0xCF11,0xCF13,/* 0xC8-0xCF */ + 0xCF15,0xCF1C,0xCF20,0xCF24,0xCF2C,0xCF2D,0xCF2F,0xCF30,/* 0xD0-0xD7 */ + 0xCF31,0xCF38,0xCF54,0xCF55,0xCF58,0xCF5C,0xCF64,0xCF65,/* 0xD8-0xDF */ + 0xCF67,0xCF69,0xCF70,0xCF71,0xCF74,0xCF78,0xCF80,0xCF85,/* 0xE0-0xE7 */ + 0xCF8C,0xCFA1,0xCFA8,0xCFB0,0xCFC4,0xCFE0,0xCFE1,0xCFE4,/* 0xE8-0xEF */ + 0xCFE8,0xCFF0,0xCFF1,0xCFF3,0xCFF5,0xCFFC,0xD000,0xD004,/* 0xF0-0xF7 */ + 0xD011,0xD018,0xD02D,0xD034,0xD035,0xD038,0xD03C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD715,0xD716,0xD717,0xD71A,0xD71B,0xD71D,0xD71E,/* 0x40-0x47 */ + 0xD71F,0xD721,0xD722,0xD723,0xD724,0xD725,0xD726,0xD727,/* 0x48-0x4F */ + 0xD72A,0xD72C,0xD72E,0xD72F,0xD730,0xD731,0xD732,0xD733,/* 0x50-0x57 */ + 0xD736,0xD737,0xD739,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0xD73A,0xD73B,0xD73D,0xD73E,0xD73F,0xD740,0xD741,/* 0x60-0x67 */ + 0xD742,0xD743,0xD745,0xD746,0xD748,0xD74A,0xD74B,0xD74C,/* 0x68-0x6F */ + 0xD74D,0xD74E,0xD74F,0xD752,0xD753,0xD755,0xD75A,0xD75B,/* 0x70-0x77 */ + 0xD75C,0xD75D,0xD75E,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0xD75F,0xD762,0xD764,0xD766,0xD767,0xD768,0xD76A,/* 0x80-0x87 */ + 0xD76B,0xD76D,0xD76E,0xD76F,0xD771,0xD772,0xD773,0xD775,/* 0x88-0x8F */ + 0xD776,0xD777,0xD778,0xD779,0xD77A,0xD77B,0xD77E,0xD77F,/* 0x90-0x97 */ + 0xD780,0xD782,0xD783,0xD784,0xD785,0xD786,0xD787,0xD78A,/* 0x98-0x9F */ + 0xD78B,0xD044,0xD045,0xD047,0xD049,0xD050,0xD054,0xD058,/* 0xA0-0xA7 */ + 0xD060,0xD06C,0xD06D,0xD070,0xD074,0xD07C,0xD07D,0xD081,/* 0xA8-0xAF */ + 0xD0A4,0xD0A5,0xD0A8,0xD0AC,0xD0B4,0xD0B5,0xD0B7,0xD0B9,/* 0xB0-0xB7 */ + 0xD0C0,0xD0C1,0xD0C4,0xD0C8,0xD0C9,0xD0D0,0xD0D1,0xD0D3,/* 0xB8-0xBF */ + 0xD0D4,0xD0D5,0xD0DC,0xD0DD,0xD0E0,0xD0E4,0xD0EC,0xD0ED,/* 0xC0-0xC7 */ + 0xD0EF,0xD0F0,0xD0F1,0xD0F8,0xD10D,0xD130,0xD131,0xD134,/* 0xC8-0xCF */ + 0xD138,0xD13A,0xD140,0xD141,0xD143,0xD144,0xD145,0xD14C,/* 0xD0-0xD7 */ + 0xD14D,0xD150,0xD154,0xD15C,0xD15D,0xD15F,0xD161,0xD168,/* 0xD8-0xDF */ + 0xD16C,0xD17C,0xD184,0xD188,0xD1A0,0xD1A1,0xD1A4,0xD1A8,/* 0xE0-0xE7 */ + 0xD1B0,0xD1B1,0xD1B3,0xD1B5,0xD1BA,0xD1BC,0xD1C0,0xD1D8,/* 0xE8-0xEF */ + 0xD1F4,0xD1F8,0xD207,0xD209,0xD210,0xD22C,0xD22D,0xD230,/* 0xF0-0xF7 */ + 0xD234,0xD23C,0xD23D,0xD23F,0xD241,0xD248,0xD25C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0xD78D,0xD78E,0xD78F,0xD791,0xD792,0xD793,0xD794,/* 0x40-0x47 */ + 0xD795,0xD796,0xD797,0xD79A,0xD79C,0xD79E,0xD79F,0xD7A0,/* 0x48-0x4F */ + 0xD7A1,0xD7A2,0xD7A3,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xD264,0xD280,0xD281,0xD284,0xD288,0xD290,0xD291,/* 0xA0-0xA7 */ + 0xD295,0xD29C,0xD2A0,0xD2A4,0xD2AC,0xD2B1,0xD2B8,0xD2B9,/* 0xA8-0xAF */ + 0xD2BC,0xD2BF,0xD2C0,0xD2C2,0xD2C8,0xD2C9,0xD2CB,0xD2D4,/* 0xB0-0xB7 */ + 0xD2D8,0xD2DC,0xD2E4,0xD2E5,0xD2F0,0xD2F1,0xD2F4,0xD2F8,/* 0xB8-0xBF */ + 0xD300,0xD301,0xD303,0xD305,0xD30C,0xD30D,0xD30E,0xD310,/* 0xC0-0xC7 */ + 0xD314,0xD316,0xD31C,0xD31D,0xD31F,0xD320,0xD321,0xD325,/* 0xC8-0xCF */ + 0xD328,0xD329,0xD32C,0xD330,0xD338,0xD339,0xD33B,0xD33C,/* 0xD0-0xD7 */ + 0xD33D,0xD344,0xD345,0xD37C,0xD37D,0xD380,0xD384,0xD38C,/* 0xD8-0xDF */ + 0xD38D,0xD38F,0xD390,0xD391,0xD398,0xD399,0xD39C,0xD3A0,/* 0xE0-0xE7 */ + 0xD3A8,0xD3A9,0xD3AB,0xD3AD,0xD3B4,0xD3B8,0xD3BC,0xD3C4,/* 0xE8-0xEF */ + 0xD3C5,0xD3C8,0xD3C9,0xD3D0,0xD3D8,0xD3E1,0xD3E3,0xD3EC,/* 0xF0-0xF7 */ + 0xD3ED,0xD3F0,0xD3F4,0xD3FC,0xD3FD,0xD3FF,0xD401,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xD408,0xD41D,0xD440,0xD444,0xD45C,0xD460,0xD464,/* 0xA0-0xA7 */ + 0xD46D,0xD46F,0xD478,0xD479,0xD47C,0xD47F,0xD480,0xD482,/* 0xA8-0xAF */ + 0xD488,0xD489,0xD48B,0xD48D,0xD494,0xD4A9,0xD4CC,0xD4D0,/* 0xB0-0xB7 */ + 0xD4D4,0xD4DC,0xD4DF,0xD4E8,0xD4EC,0xD4F0,0xD4F8,0xD4FB,/* 0xB8-0xBF */ + 0xD4FD,0xD504,0xD508,0xD50C,0xD514,0xD515,0xD517,0xD53C,/* 0xC0-0xC7 */ + 0xD53D,0xD540,0xD544,0xD54C,0xD54D,0xD54F,0xD551,0xD558,/* 0xC8-0xCF */ + 0xD559,0xD55C,0xD560,0xD565,0xD568,0xD569,0xD56B,0xD56D,/* 0xD0-0xD7 */ + 0xD574,0xD575,0xD578,0xD57C,0xD584,0xD585,0xD587,0xD588,/* 0xD8-0xDF */ + 0xD589,0xD590,0xD5A5,0xD5C8,0xD5C9,0xD5CC,0xD5D0,0xD5D2,/* 0xE0-0xE7 */ + 0xD5D8,0xD5D9,0xD5DB,0xD5DD,0xD5E4,0xD5E5,0xD5E8,0xD5EC,/* 0xE8-0xEF */ + 0xD5F4,0xD5F5,0xD5F7,0xD5F9,0xD600,0xD601,0xD604,0xD608,/* 0xF0-0xF7 */ + 0xD610,0xD611,0xD613,0xD614,0xD615,0xD61C,0xD620,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xD624,0xD62D,0xD638,0xD639,0xD63C,0xD640,0xD645,/* 0xA0-0xA7 */ + 0xD648,0xD649,0xD64B,0xD64D,0xD651,0xD654,0xD655,0xD658,/* 0xA8-0xAF */ + 0xD65C,0xD667,0xD669,0xD670,0xD671,0xD674,0xD683,0xD685,/* 0xB0-0xB7 */ + 0xD68C,0xD68D,0xD690,0xD694,0xD69D,0xD69F,0xD6A1,0xD6A8,/* 0xB8-0xBF */ + 0xD6AC,0xD6B0,0xD6B9,0xD6BB,0xD6C4,0xD6C5,0xD6C8,0xD6CC,/* 0xC0-0xC7 */ + 0xD6D1,0xD6D4,0xD6D7,0xD6D9,0xD6E0,0xD6E4,0xD6E8,0xD6F0,/* 0xC8-0xCF */ + 0xD6F5,0xD6FC,0xD6FD,0xD700,0xD704,0xD711,0xD718,0xD719,/* 0xD0-0xD7 */ + 0xD71C,0xD720,0xD728,0xD729,0xD72B,0xD72D,0xD734,0xD735,/* 0xD8-0xDF */ + 0xD738,0xD73C,0xD744,0xD747,0xD749,0xD750,0xD751,0xD754,/* 0xE0-0xE7 */ + 0xD756,0xD757,0xD758,0xD759,0xD760,0xD761,0xD763,0xD765,/* 0xE8-0xEF */ + 0xD769,0xD76C,0xD770,0xD774,0xD77C,0xD77D,0xD781,0xD788,/* 0xF0-0xF7 */ + 0xD789,0xD78C,0xD790,0xD798,0xD799,0xD79B,0xD79D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x4F3D,0x4F73,0x5047,0x50F9,0x52A0,0x53EF,0x5475,/* 0xA0-0xA7 */ + 0x54E5,0x5609,0x5AC1,0x5BB6,0x6687,0x67B6,0x67B7,0x67EF,/* 0xA8-0xAF */ + 0x6B4C,0x73C2,0x75C2,0x7A3C,0x82DB,0x8304,0x8857,0x8888,/* 0xB0-0xB7 */ + 0x8A36,0x8CC8,0x8DCF,0x8EFB,0x8FE6,0x99D5,0x523B,0x5374,/* 0xB8-0xBF */ + 0x5404,0x606A,0x6164,0x6BBC,0x73CF,0x811A,0x89BA,0x89D2,/* 0xC0-0xC7 */ + 0x95A3,0x4F83,0x520A,0x58BE,0x5978,0x59E6,0x5E72,0x5E79,/* 0xC8-0xCF */ + 0x61C7,0x63C0,0x6746,0x67EC,0x687F,0x6F97,0x764E,0x770B,/* 0xD0-0xD7 */ + 0x78F5,0x7A08,0x7AFF,0x7C21,0x809D,0x826E,0x8271,0x8AEB,/* 0xD8-0xDF */ + 0x9593,0x4E6B,0x559D,0x66F7,0x6E34,0x78A3,0x7AED,0x845B,/* 0xE0-0xE7 */ + 0x8910,0x874E,0x97A8,0x52D8,0x574E,0x582A,0x5D4C,0x611F,/* 0xE8-0xEF */ + 0x61BE,0x6221,0x6562,0x67D1,0x6A44,0x6E1B,0x7518,0x75B3,/* 0xF0-0xF7 */ + 0x76E3,0x77B0,0x7D3A,0x90AF,0x9451,0x9452,0x9F95,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5323,0x5CAC,0x7532,0x80DB,0x9240,0x9598,0x525B,/* 0xA0-0xA7 */ + 0x5808,0x59DC,0x5CA1,0x5D17,0x5EB7,0x5F3A,0x5F4A,0x6177,/* 0xA8-0xAF */ + 0x6C5F,0x757A,0x7586,0x7CE0,0x7D73,0x7DB1,0x7F8C,0x8154,/* 0xB0-0xB7 */ + 0x8221,0x8591,0x8941,0x8B1B,0x92FC,0x964D,0x9C47,0x4ECB,/* 0xB8-0xBF */ + 0x4EF7,0x500B,0x51F1,0x584F,0x6137,0x613E,0x6168,0x6539,/* 0xC0-0xC7 */ + 0x69EA,0x6F11,0x75A5,0x7686,0x76D6,0x7B87,0x82A5,0x84CB,/* 0xC8-0xCF */ + 0xF900,0x93A7,0x958B,0x5580,0x5BA2,0x5751,0xF901,0x7CB3,/* 0xD0-0xD7 */ + 0x7FB9,0x91B5,0x5028,0x53BB,0x5C45,0x5DE8,0x62D2,0x636E,/* 0xD8-0xDF */ + 0x64DA,0x64E7,0x6E20,0x70AC,0x795B,0x8DDD,0x8E1E,0xF902,/* 0xE0-0xE7 */ + 0x907D,0x9245,0x92F8,0x4E7E,0x4EF6,0x5065,0x5DFE,0x5EFA,/* 0xE8-0xEF */ + 0x6106,0x6957,0x8171,0x8654,0x8E47,0x9375,0x9A2B,0x4E5E,/* 0xF0-0xF7 */ + 0x5091,0x6770,0x6840,0x5109,0x528D,0x5292,0x6AA2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x77BC,0x9210,0x9ED4,0x52AB,0x602F,0x8FF2,0x5048,/* 0xA0-0xA7 */ + 0x61A9,0x63ED,0x64CA,0x683C,0x6A84,0x6FC0,0x8188,0x89A1,/* 0xA8-0xAF */ + 0x9694,0x5805,0x727D,0x72AC,0x7504,0x7D79,0x7E6D,0x80A9,/* 0xB0-0xB7 */ + 0x898B,0x8B74,0x9063,0x9D51,0x6289,0x6C7A,0x6F54,0x7D50,/* 0xB8-0xBF */ + 0x7F3A,0x8A23,0x517C,0x614A,0x7B9D,0x8B19,0x9257,0x938C,/* 0xC0-0xC7 */ + 0x4EAC,0x4FD3,0x501E,0x50BE,0x5106,0x52C1,0x52CD,0x537F,/* 0xC8-0xCF */ + 0x5770,0x5883,0x5E9A,0x5F91,0x6176,0x61AC,0x64CE,0x656C,/* 0xD0-0xD7 */ + 0x666F,0x66BB,0x66F4,0x6897,0x6D87,0x7085,0x70F1,0x749F,/* 0xD8-0xDF */ + 0x74A5,0x74CA,0x75D9,0x786C,0x78EC,0x7ADF,0x7AF6,0x7D45,/* 0xE0-0xE7 */ + 0x7D93,0x8015,0x803F,0x811B,0x8396,0x8B66,0x8F15,0x9015,/* 0xE8-0xEF */ + 0x93E1,0x9803,0x9838,0x9A5A,0x9BE8,0x4FC2,0x5553,0x583A,/* 0xF0-0xF7 */ + 0x5951,0x5B63,0x5C46,0x60B8,0x6212,0x6842,0x68B0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x68E8,0x6EAA,0x754C,0x7678,0x78CE,0x7A3D,0x7CFB,/* 0xA0-0xA7 */ + 0x7E6B,0x7E7C,0x8A08,0x8AA1,0x8C3F,0x968E,0x9DC4,0x53E4,/* 0xA8-0xAF */ + 0x53E9,0x544A,0x5471,0x56FA,0x59D1,0x5B64,0x5C3B,0x5EAB,/* 0xB0-0xB7 */ + 0x62F7,0x6537,0x6545,0x6572,0x66A0,0x67AF,0x69C1,0x6CBD,/* 0xB8-0xBF */ + 0x75FC,0x7690,0x777E,0x7A3F,0x7F94,0x8003,0x80A1,0x818F,/* 0xC0-0xC7 */ + 0x82E6,0x82FD,0x83F0,0x85C1,0x8831,0x88B4,0x8AA5,0xF903,/* 0xC8-0xCF */ + 0x8F9C,0x932E,0x96C7,0x9867,0x9AD8,0x9F13,0x54ED,0x659B,/* 0xD0-0xD7 */ + 0x66F2,0x688F,0x7A40,0x8C37,0x9D60,0x56F0,0x5764,0x5D11,/* 0xD8-0xDF */ + 0x6606,0x68B1,0x68CD,0x6EFE,0x7428,0x889E,0x9BE4,0x6C68,/* 0xE0-0xE7 */ + 0xF904,0x9AA8,0x4F9B,0x516C,0x5171,0x529F,0x5B54,0x5DE5,/* 0xE8-0xEF */ + 0x6050,0x606D,0x62F1,0x63A7,0x653B,0x73D9,0x7A7A,0x86A3,/* 0xF0-0xF7 */ + 0x8CA2,0x978F,0x4E32,0x5BE1,0x6208,0x679C,0x74DC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x79D1,0x83D3,0x8A87,0x8AB2,0x8DE8,0x904E,0x934B,/* 0xA0-0xA7 */ + 0x9846,0x5ED3,0x69E8,0x85FF,0x90ED,0xF905,0x51A0,0x5B98,/* 0xA8-0xAF */ + 0x5BEC,0x6163,0x68FA,0x6B3E,0x704C,0x742F,0x74D8,0x7BA1,/* 0xB0-0xB7 */ + 0x7F50,0x83C5,0x89C0,0x8CAB,0x95DC,0xFA2C,0x522E,0x605D,/* 0xB8-0xBF */ + 0x62EC,0x9002,0x4F8A,0x5149,0x5321,0x58D9,0x5EE3,0x66E0,/* 0xC0-0xC7 */ + 0x6D38,0x709A,0x72C2,0x73D6,0x7B50,0x80F1,0x945B,0x5366,/* 0xC8-0xCF */ + 0x639B,0x7F6B,0x4E56,0x5080,0x584A,0x58DE,0x602A,0x6127,/* 0xD0-0xD7 */ + 0x62D0,0x69D0,0x9B41,0x5B8F,0x7D18,0x80B1,0x8F5F,0x4EA4,/* 0xD8-0xDF */ + 0x50D1,0x54AC,0x55AC,0x5B0C,0x5DA0,0x5DE7,0x652A,0x654E,/* 0xE0-0xE7 */ + 0x6821,0x6A4B,0x72E1,0x768E,0x77EF,0x7D5E,0x7FF9,0x81A0,/* 0xE8-0xEF */ + 0x854E,0x86DF,0x8F03,0x8F4E,0x90CA,0x9903,0x9A55,0x9BAB,/* 0xF0-0xF7 */ + 0x4E18,0x4E45,0x4E5D,0x4EC7,0x4FF1,0x5177,0x52FE,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5340,0x53E3,0x53E5,0x548E,0x5614,0x5775,0x57A2,/* 0xA0-0xA7 */ + 0x5BC7,0x5D87,0x5ED0,0x61FC,0x62D8,0x6551,0x67B8,0x67E9,/* 0xA8-0xAF */ + 0x69CB,0x6B50,0x6BC6,0x6BEC,0x6C42,0x6E9D,0x7078,0x72D7,/* 0xB0-0xB7 */ + 0x7396,0x7403,0x77BF,0x77E9,0x7A76,0x7D7F,0x8009,0x81FC,/* 0xB8-0xBF */ + 0x8205,0x820A,0x82DF,0x8862,0x8B33,0x8CFC,0x8EC0,0x9011,/* 0xC0-0xC7 */ + 0x90B1,0x9264,0x92B6,0x99D2,0x9A45,0x9CE9,0x9DD7,0x9F9C,/* 0xC8-0xCF */ + 0x570B,0x5C40,0x83CA,0x97A0,0x97AB,0x9EB4,0x541B,0x7A98,/* 0xD0-0xD7 */ + 0x7FA4,0x88D9,0x8ECD,0x90E1,0x5800,0x5C48,0x6398,0x7A9F,/* 0xD8-0xDF */ + 0x5BAE,0x5F13,0x7A79,0x7AAE,0x828E,0x8EAC,0x5026,0x5238,/* 0xE0-0xE7 */ + 0x52F8,0x5377,0x5708,0x62F3,0x6372,0x6B0A,0x6DC3,0x7737,/* 0xE8-0xEF */ + 0x53A5,0x7357,0x8568,0x8E76,0x95D5,0x673A,0x6AC3,0x6F70,/* 0xF0-0xF7 */ + 0x8A6D,0x8ECC,0x994B,0xF906,0x6677,0x6B78,0x8CB4,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9B3C,0xF907,0x53EB,0x572D,0x594E,0x63C6,0x69FB,/* 0xA0-0xA7 */ + 0x73EA,0x7845,0x7ABA,0x7AC5,0x7CFE,0x8475,0x898F,0x8D73,/* 0xA8-0xAF */ + 0x9035,0x95A8,0x52FB,0x5747,0x7547,0x7B60,0x83CC,0x921E,/* 0xB0-0xB7 */ + 0xF908,0x6A58,0x514B,0x524B,0x5287,0x621F,0x68D8,0x6975,/* 0xB8-0xBF */ + 0x9699,0x50C5,0x52A4,0x52E4,0x61C3,0x65A4,0x6839,0x69FF,/* 0xC0-0xC7 */ + 0x747E,0x7B4B,0x82B9,0x83EB,0x89B2,0x8B39,0x8FD1,0x9949,/* 0xC8-0xCF */ + 0xF909,0x4ECA,0x5997,0x64D2,0x6611,0x6A8E,0x7434,0x7981,/* 0xD0-0xD7 */ + 0x79BD,0x82A9,0x887E,0x887F,0x895F,0xF90A,0x9326,0x4F0B,/* 0xD8-0xDF */ + 0x53CA,0x6025,0x6271,0x6C72,0x7D1A,0x7D66,0x4E98,0x5162,/* 0xE0-0xE7 */ + 0x77DC,0x80AF,0x4F01,0x4F0E,0x5176,0x5180,0x55DC,0x5668,/* 0xE8-0xEF */ + 0x573B,0x57FA,0x57FC,0x5914,0x5947,0x5993,0x5BC4,0x5C90,/* 0xF0-0xF7 */ + 0x5D0E,0x5DF1,0x5E7E,0x5FCC,0x6280,0x65D7,0x65E3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x671E,0x671F,0x675E,0x68CB,0x68C4,0x6A5F,0x6B3A,/* 0xA0-0xA7 */ + 0x6C23,0x6C7D,0x6C82,0x6DC7,0x7398,0x7426,0x742A,0x7482,/* 0xA8-0xAF */ + 0x74A3,0x7578,0x757F,0x7881,0x78EF,0x7941,0x7947,0x7948,/* 0xB0-0xB7 */ + 0x797A,0x7B95,0x7D00,0x7DBA,0x7F88,0x8006,0x802D,0x808C,/* 0xB8-0xBF */ + 0x8A18,0x8B4F,0x8C48,0x8D77,0x9321,0x9324,0x98E2,0x9951,/* 0xC0-0xC7 */ + 0x9A0E,0x9A0F,0x9A65,0x9E92,0x7DCA,0x4F76,0x5409,0x62EE,/* 0xC8-0xCF */ + 0x6854,0x91D1,0x55AB,0x513A,0xF90B,0xF90C,0x5A1C,0x61E6,/* 0xD0-0xD7 */ + 0xF90D,0x62CF,0x62FF,0xF90E,0xF90F,0xF910,0xF911,0xF912,/* 0xD8-0xDF */ + 0xF913,0x90A3,0xF914,0xF915,0xF916,0xF917,0xF918,0x8AFE,/* 0xE0-0xE7 */ + 0xF919,0xF91A,0xF91B,0xF91C,0x6696,0xF91D,0x7156,0xF91E,/* 0xE8-0xEF */ + 0xF91F,0x96E3,0xF920,0x634F,0x637A,0x5357,0xF921,0x678F,/* 0xF0-0xF7 */ + 0x6960,0x6E73,0xF922,0x7537,0xF923,0xF924,0xF925,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7D0D,0xF926,0xF927,0x8872,0x56CA,0x5A18,0xF928,/* 0xA0-0xA7 */ + 0xF929,0xF92A,0xF92B,0xF92C,0x4E43,0xF92D,0x5167,0x5948,/* 0xA8-0xAF */ + 0x67F0,0x8010,0xF92E,0x5973,0x5E74,0x649A,0x79CA,0x5FF5,/* 0xB0-0xB7 */ + 0x606C,0x62C8,0x637B,0x5BE7,0x5BD7,0x52AA,0xF92F,0x5974,/* 0xB8-0xBF */ + 0x5F29,0x6012,0xF930,0xF931,0xF932,0x7459,0xF933,0xF934,/* 0xC0-0xC7 */ + 0xF935,0xF936,0xF937,0xF938,0x99D1,0xF939,0xF93A,0xF93B,/* 0xC8-0xCF */ + 0xF93C,0xF93D,0xF93E,0xF93F,0xF940,0xF941,0xF942,0xF943,/* 0xD0-0xD7 */ + 0x6FC3,0xF944,0xF945,0x81BF,0x8FB2,0x60F1,0xF946,0xF947,/* 0xD8-0xDF */ + 0x8166,0xF948,0xF949,0x5C3F,0xF94A,0xF94B,0xF94C,0xF94D,/* 0xE0-0xE7 */ + 0xF94E,0xF94F,0xF950,0xF951,0x5AE9,0x8A25,0x677B,0x7D10,/* 0xE8-0xEF */ + 0xF952,0xF953,0xF954,0xF955,0xF956,0xF957,0x80FD,0xF958,/* 0xF0-0xF7 */ + 0xF959,0x5C3C,0x6CE5,0x533F,0x6EBA,0x591A,0x8336,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x4E39,0x4EB6,0x4F46,0x55AE,0x5718,0x58C7,0x5F56,/* 0xA0-0xA7 */ + 0x65B7,0x65E6,0x6A80,0x6BB5,0x6E4D,0x77ED,0x7AEF,0x7C1E,/* 0xA8-0xAF */ + 0x7DDE,0x86CB,0x8892,0x9132,0x935B,0x64BB,0x6FBE,0x737A,/* 0xB0-0xB7 */ + 0x75B8,0x9054,0x5556,0x574D,0x61BA,0x64D4,0x66C7,0x6DE1,/* 0xB8-0xBF */ + 0x6E5B,0x6F6D,0x6FB9,0x75F0,0x8043,0x81BD,0x8541,0x8983,/* 0xC0-0xC7 */ + 0x8AC7,0x8B5A,0x931F,0x6C93,0x7553,0x7B54,0x8E0F,0x905D,/* 0xC8-0xCF */ + 0x5510,0x5802,0x5858,0x5E62,0x6207,0x649E,0x68E0,0x7576,/* 0xD0-0xD7 */ + 0x7CD6,0x87B3,0x9EE8,0x4EE3,0x5788,0x576E,0x5927,0x5C0D,/* 0xD8-0xDF */ + 0x5CB1,0x5E36,0x5F85,0x6234,0x64E1,0x73B3,0x81FA,0x888B,/* 0xE0-0xE7 */ + 0x8CB8,0x968A,0x9EDB,0x5B85,0x5FB7,0x60B3,0x5012,0x5200,/* 0xE8-0xEF */ + 0x5230,0x5716,0x5835,0x5857,0x5C0E,0x5C60,0x5CF6,0x5D8B,/* 0xF0-0xF7 */ + 0x5EA6,0x5F92,0x60BC,0x6311,0x6389,0x6417,0x6843,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x68F9,0x6AC2,0x6DD8,0x6E21,0x6ED4,0x6FE4,0x71FE,/* 0xA0-0xA7 */ + 0x76DC,0x7779,0x79B1,0x7A3B,0x8404,0x89A9,0x8CED,0x8DF3,/* 0xA8-0xAF */ + 0x8E48,0x9003,0x9014,0x9053,0xFA26,0x934D,0x9676,0x97DC,/* 0xB0-0xB7 */ + 0x6BD2,0x7006,0x7258,0x72A2,0x7368,0x7763,0x79BF,0x7BE4,/* 0xB8-0xBF */ + 0x7E9B,0x8B80,0x58A9,0x60C7,0x6566,0x65FD,0x66BE,0x6C8C,/* 0xC0-0xC7 */ + 0x711E,0x71C9,0x8C5A,0x9813,0x4E6D,0x7A81,0x4EDD,0x51AC,/* 0xC8-0xCF */ + 0x51CD,0x52D5,0x540C,0x61A7,0x6771,0x6850,0x68DF,0x6D1E,/* 0xD0-0xD7 */ + 0x6F7C,0x75BC,0x77B3,0x7AE5,0x80F4,0x8463,0x9285,0x515C,/* 0xD8-0xDF */ + 0x6597,0x675C,0x6793,0x75D8,0x7AC7,0x8373,0xF95A,0x8C46,/* 0xE0-0xE7 */ + 0x9017,0x982D,0x5C6F,0x81C0,0x829A,0x9041,0x906F,0x920D,/* 0xE8-0xEF */ + 0x5F97,0x5D9D,0x6A59,0x71C8,0x767B,0x7B49,0x85E4,0x8B04,/* 0xF0-0xF7 */ + 0x9127,0x9A30,0x5587,0x61F6,0xF95B,0x7669,0x7F85,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x863F,0x87BA,0x88F8,0x908F,0xF95C,0x6D1B,0x70D9,/* 0xA0-0xA7 */ + 0x73DE,0x7D61,0x843D,0xF95D,0x916A,0x99F1,0xF95E,0x4E82,/* 0xA8-0xAF */ + 0x5375,0x6B04,0x6B12,0x703E,0x721B,0x862D,0x9E1E,0x524C,/* 0xB0-0xB7 */ + 0x8FA3,0x5D50,0x64E5,0x652C,0x6B16,0x6FEB,0x7C43,0x7E9C,/* 0xB8-0xBF */ + 0x85CD,0x8964,0x89BD,0x62C9,0x81D8,0x881F,0x5ECA,0x6717,/* 0xC0-0xC7 */ + 0x6D6A,0x72FC,0x7405,0x746F,0x8782,0x90DE,0x4F86,0x5D0D,/* 0xC8-0xCF */ + 0x5FA0,0x840A,0x51B7,0x63A0,0x7565,0x4EAE,0x5006,0x5169,/* 0xD0-0xD7 */ + 0x51C9,0x6881,0x6A11,0x7CAE,0x7CB1,0x7CE7,0x826F,0x8AD2,/* 0xD8-0xDF */ + 0x8F1B,0x91CF,0x4FB6,0x5137,0x52F5,0x5442,0x5EEC,0x616E,/* 0xE0-0xE7 */ + 0x623E,0x65C5,0x6ADA,0x6FFE,0x792A,0x85DC,0x8823,0x95AD,/* 0xE8-0xEF */ + 0x9A62,0x9A6A,0x9E97,0x9ECE,0x529B,0x66C6,0x6B77,0x701D,/* 0xF0-0xF7 */ + 0x792B,0x8F62,0x9742,0x6190,0x6200,0x6523,0x6F23,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7149,0x7489,0x7DF4,0x806F,0x84EE,0x8F26,0x9023,/* 0xA0-0xA7 */ + 0x934A,0x51BD,0x5217,0x52A3,0x6D0C,0x70C8,0x88C2,0x5EC9,/* 0xA8-0xAF */ + 0x6582,0x6BAE,0x6FC2,0x7C3E,0x7375,0x4EE4,0x4F36,0x56F9,/* 0xB0-0xB7 */ + 0xF95F,0x5CBA,0x5DBA,0x601C,0x73B2,0x7B2D,0x7F9A,0x7FCE,/* 0xB8-0xBF */ + 0x8046,0x901E,0x9234,0x96F6,0x9748,0x9818,0x9F61,0x4F8B,/* 0xC0-0xC7 */ + 0x6FA7,0x79AE,0x91B4,0x96B7,0x52DE,0xF960,0x6488,0x64C4,/* 0xC8-0xCF */ + 0x6AD3,0x6F5E,0x7018,0x7210,0x76E7,0x8001,0x8606,0x865C,/* 0xD0-0xD7 */ + 0x8DEF,0x8F05,0x9732,0x9B6F,0x9DFA,0x9E75,0x788C,0x797F,/* 0xD8-0xDF */ + 0x7DA0,0x83C9,0x9304,0x9E7F,0x9E93,0x8AD6,0x58DF,0x5F04,/* 0xE0-0xE7 */ + 0x6727,0x7027,0x74CF,0x7C60,0x807E,0x5121,0x7028,0x7262,/* 0xE8-0xEF */ + 0x78CA,0x8CC2,0x8CDA,0x8CF4,0x96F7,0x4E86,0x50DA,0x5BEE,/* 0xF0-0xF7 */ + 0x5ED6,0x6599,0x71CE,0x7642,0x77AD,0x804A,0x84FC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x907C,0x9B27,0x9F8D,0x58D8,0x5A41,0x5C62,0x6A13,/* 0xA0-0xA7 */ + 0x6DDA,0x6F0F,0x763B,0x7D2F,0x7E37,0x851E,0x8938,0x93E4,/* 0xA8-0xAF */ + 0x964B,0x5289,0x65D2,0x67F3,0x69B4,0x6D41,0x6E9C,0x700F,/* 0xB0-0xB7 */ + 0x7409,0x7460,0x7559,0x7624,0x786B,0x8B2C,0x985E,0x516D,/* 0xB8-0xBF */ + 0x622E,0x9678,0x4F96,0x502B,0x5D19,0x6DEA,0x7DB8,0x8F2A,/* 0xC0-0xC7 */ + 0x5F8B,0x6144,0x6817,0xF961,0x9686,0x52D2,0x808B,0x51DC,/* 0xC8-0xCF */ + 0x51CC,0x695E,0x7A1C,0x7DBE,0x83F1,0x9675,0x4FDA,0x5229,/* 0xD0-0xD7 */ + 0x5398,0x540F,0x550E,0x5C65,0x60A7,0x674E,0x68A8,0x6D6C,/* 0xD8-0xDF */ + 0x7281,0x72F8,0x7406,0x7483,0xF962,0x75E2,0x7C6C,0x7F79,/* 0xE0-0xE7 */ + 0x7FB8,0x8389,0x88CF,0x88E1,0x91CC,0x91D0,0x96E2,0x9BC9,/* 0xE8-0xEF */ + 0x541D,0x6F7E,0x71D0,0x7498,0x85FA,0x8EAA,0x96A3,0x9C57,/* 0xF0-0xF7 */ + 0x9E9F,0x6797,0x6DCB,0x7433,0x81E8,0x9716,0x782C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7ACB,0x7B20,0x7C92,0x6469,0x746A,0x75F2,0x78BC,/* 0xA0-0xA7 */ + 0x78E8,0x99AC,0x9B54,0x9EBB,0x5BDE,0x5E55,0x6F20,0x819C,/* 0xA8-0xAF */ + 0x83AB,0x9088,0x4E07,0x534D,0x5A29,0x5DD2,0x5F4E,0x6162,/* 0xB0-0xB7 */ + 0x633D,0x6669,0x66FC,0x6EFF,0x6F2B,0x7063,0x779E,0x842C,/* 0xB8-0xBF */ + 0x8513,0x883B,0x8F13,0x9945,0x9C3B,0x551C,0x62B9,0x672B,/* 0xC0-0xC7 */ + 0x6CAB,0x8309,0x896A,0x977A,0x4EA1,0x5984,0x5FD8,0x5FD9,/* 0xC8-0xCF */ + 0x671B,0x7DB2,0x7F54,0x8292,0x832B,0x83BD,0x8F1E,0x9099,/* 0xD0-0xD7 */ + 0x57CB,0x59B9,0x5A92,0x5BD0,0x6627,0x679A,0x6885,0x6BCF,/* 0xD8-0xDF */ + 0x7164,0x7F75,0x8CB7,0x8CE3,0x9081,0x9B45,0x8108,0x8C8A,/* 0xE0-0xE7 */ + 0x964C,0x9A40,0x9EA5,0x5B5F,0x6C13,0x731B,0x76F2,0x76DF,/* 0xE8-0xEF */ + 0x840C,0x51AA,0x8993,0x514D,0x5195,0x52C9,0x68C9,0x6C94,/* 0xF0-0xF7 */ + 0x7704,0x7720,0x7DBF,0x7DEC,0x9762,0x9EB5,0x6EC5,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8511,0x51A5,0x540D,0x547D,0x660E,0x669D,0x6927,/* 0xA0-0xA7 */ + 0x6E9F,0x76BF,0x7791,0x8317,0x84C2,0x879F,0x9169,0x9298,/* 0xA8-0xAF */ + 0x9CF4,0x8882,0x4FAE,0x5192,0x52DF,0x59C6,0x5E3D,0x6155,/* 0xB0-0xB7 */ + 0x6478,0x6479,0x66AE,0x67D0,0x6A21,0x6BCD,0x6BDB,0x725F,/* 0xB8-0xBF */ + 0x7261,0x7441,0x7738,0x77DB,0x8017,0x82BC,0x8305,0x8B00,/* 0xC0-0xC7 */ + 0x8B28,0x8C8C,0x6728,0x6C90,0x7267,0x76EE,0x7766,0x7A46,/* 0xC8-0xCF */ + 0x9DA9,0x6B7F,0x6C92,0x5922,0x6726,0x8499,0x536F,0x5893,/* 0xD0-0xD7 */ + 0x5999,0x5EDF,0x63CF,0x6634,0x6773,0x6E3A,0x732B,0x7AD7,/* 0xD8-0xDF */ + 0x82D7,0x9328,0x52D9,0x5DEB,0x61AE,0x61CB,0x620A,0x62C7,/* 0xE0-0xE7 */ + 0x64AB,0x65E0,0x6959,0x6B66,0x6BCB,0x7121,0x73F7,0x755D,/* 0xE8-0xEF */ + 0x7E46,0x821E,0x8302,0x856A,0x8AA3,0x8CBF,0x9727,0x9D61,/* 0xF0-0xF7 */ + 0x58A8,0x9ED8,0x5011,0x520E,0x543B,0x554F,0x6587,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6C76,0x7D0A,0x7D0B,0x805E,0x868A,0x9580,0x96EF,/* 0xA0-0xA7 */ + 0x52FF,0x6C95,0x7269,0x5473,0x5A9A,0x5C3E,0x5D4B,0x5F4C,/* 0xA8-0xAF */ + 0x5FAE,0x672A,0x68B6,0x6963,0x6E3C,0x6E44,0x7709,0x7C73,/* 0xB0-0xB7 */ + 0x7F8E,0x8587,0x8B0E,0x8FF7,0x9761,0x9EF4,0x5CB7,0x60B6,/* 0xB8-0xBF */ + 0x610D,0x61AB,0x654F,0x65FB,0x65FC,0x6C11,0x6CEF,0x739F,/* 0xC0-0xC7 */ + 0x73C9,0x7DE1,0x9594,0x5BC6,0x871C,0x8B10,0x525D,0x535A,/* 0xC8-0xCF */ + 0x62CD,0x640F,0x64B2,0x6734,0x6A38,0x6CCA,0x73C0,0x749E,/* 0xD0-0xD7 */ + 0x7B94,0x7C95,0x7E1B,0x818A,0x8236,0x8584,0x8FEB,0x96F9,/* 0xD8-0xDF */ + 0x99C1,0x4F34,0x534A,0x53CD,0x53DB,0x62CC,0x642C,0x6500,/* 0xE0-0xE7 */ + 0x6591,0x69C3,0x6CEE,0x6F58,0x73ED,0x7554,0x7622,0x76E4,/* 0xE8-0xEF */ + 0x76FC,0x78D0,0x78FB,0x792C,0x7D46,0x822C,0x87E0,0x8FD4,/* 0xF0-0xF7 */ + 0x9812,0xFA2A,0x52C3,0x62D4,0x64A5,0x6E24,0x6F51,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x767C,0x8DCB,0x91B1,0x9262,0x9AEE,0x9B43,0x5023,/* 0xA0-0xA7 */ + 0x508D,0x574A,0x59A8,0x5C28,0x5E47,0x5F77,0x623F,0x653E,/* 0xA8-0xAF */ + 0x65B9,0x65C1,0x6609,0x678B,0x699C,0x6EC2,0x78C5,0x7D21,/* 0xB0-0xB7 */ + 0x80AA,0x8180,0x822B,0x82B3,0x84A1,0x868C,0x8A2A,0x8B17,/* 0xB8-0xBF */ + 0x90A6,0x9632,0x9F90,0x500D,0x4FF3,0xF963,0x57F9,0x5F98,/* 0xC0-0xC7 */ + 0x62DC,0x6392,0x676F,0x6E43,0x7119,0x76C3,0x80CC,0x80DA,/* 0xC8-0xCF */ + 0x88F4,0x88F5,0x8919,0x8CE0,0x8F29,0x914D,0x966A,0x4F2F,/* 0xD0-0xD7 */ + 0x4F70,0x5E1B,0x67CF,0x6822,0x767D,0x767E,0x9B44,0x5E61,/* 0xD8-0xDF */ + 0x6A0A,0x7169,0x71D4,0x756A,0xF964,0x7E41,0x8543,0x85E9,/* 0xE0-0xE7 */ + 0x98DC,0x4F10,0x7B4F,0x7F70,0x95A5,0x51E1,0x5E06,0x68B5,/* 0xE8-0xEF */ + 0x6C3E,0x6C4E,0x6CDB,0x72AF,0x7BC4,0x8303,0x6CD5,0x743A,/* 0xF0-0xF7 */ + 0x50FB,0x5288,0x58C1,0x64D8,0x6A97,0x74A7,0x7656,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x78A7,0x8617,0x95E2,0x9739,0xF965,0x535E,0x5F01,/* 0xA0-0xA7 */ + 0x8B8A,0x8FA8,0x8FAF,0x908A,0x5225,0x77A5,0x9C49,0x9F08,/* 0xA8-0xAF */ + 0x4E19,0x5002,0x5175,0x5C5B,0x5E77,0x661E,0x663A,0x67C4,/* 0xB0-0xB7 */ + 0x68C5,0x70B3,0x7501,0x75C5,0x79C9,0x7ADD,0x8F27,0x9920,/* 0xB8-0xBF */ + 0x9A08,0x4FDD,0x5821,0x5831,0x5BF6,0x666E,0x6B65,0x6D11,/* 0xC0-0xC7 */ + 0x6E7A,0x6F7D,0x73E4,0x752B,0x83E9,0x88DC,0x8913,0x8B5C,/* 0xC8-0xCF */ + 0x8F14,0x4F0F,0x50D5,0x5310,0x535C,0x5B93,0x5FA9,0x670D,/* 0xD0-0xD7 */ + 0xFA1B,0x8179,0x832F,0x8514,0x8907,0x8986,0x8F39,0x8F3B,/* 0xD8-0xDF */ + 0x99A5,0x9C12,0x672C,0x4E76,0x4FF8,0x5949,0x5C01,0x5CEF,/* 0xE0-0xE7 */ + 0x5CF0,0x6367,0x68D2,0x70FD,0x71A2,0x742B,0x7E2B,0x84EC,/* 0xE8-0xEF */ + 0x8702,0x9022,0x92D2,0x9CF3,0x4E0D,0x4ED8,0x4FEF,0x5085,/* 0xF0-0xF7 */ + 0x5256,0x526F,0x5426,0x5490,0x57E0,0x592B,0x5A66,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5B5A,0x5B75,0x5BCC,0x5E9C,0xF966,0x6276,0x6577,/* 0xA0-0xA7 */ + 0x65A7,0x6D6E,0x6EA5,0x7236,0x7B26,0x7C3F,0x7F36,0x8150,/* 0xA8-0xAF */ + 0x8151,0x819A,0x8240,0x8299,0x83A9,0x8A03,0x8CA0,0x8CE6,/* 0xB0-0xB7 */ + 0x8CFB,0x8D74,0x8DBA,0x90E8,0x91DC,0x961C,0x9644,0x99D9,/* 0xB8-0xBF */ + 0x9CE7,0x5317,0x5206,0x5429,0x5674,0x58B3,0x5954,0x596E,/* 0xC0-0xC7 */ + 0x5FFF,0x61A4,0x626E,0x6610,0x6C7E,0x711A,0x76C6,0x7C89,/* 0xC8-0xCF */ + 0x7CDE,0x7D1B,0x82AC,0x8CC1,0x96F0,0xF967,0x4F5B,0x5F17,/* 0xD0-0xD7 */ + 0x5F7F,0x62C2,0x5D29,0x670B,0x68DA,0x787C,0x7E43,0x9D6C,/* 0xD8-0xDF */ + 0x4E15,0x5099,0x5315,0x532A,0x5351,0x5983,0x5A62,0x5E87,/* 0xE0-0xE7 */ + 0x60B2,0x618A,0x6249,0x6279,0x6590,0x6787,0x69A7,0x6BD4,/* 0xE8-0xEF */ + 0x6BD6,0x6BD7,0x6BD8,0x6CB8,0xF968,0x7435,0x75FA,0x7812,/* 0xF0-0xF7 */ + 0x7891,0x79D5,0x79D8,0x7C83,0x7DCB,0x7FE1,0x80A5,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x813E,0x81C2,0x83F2,0x871A,0x88E8,0x8AB9,0x8B6C,/* 0xA0-0xA7 */ + 0x8CBB,0x9119,0x975E,0x98DB,0x9F3B,0x56AC,0x5B2A,0x5F6C,/* 0xA8-0xAF */ + 0x658C,0x6AB3,0x6BAF,0x6D5C,0x6FF1,0x7015,0x725D,0x73AD,/* 0xB0-0xB7 */ + 0x8CA7,0x8CD3,0x983B,0x6191,0x6C37,0x8058,0x9A01,0x4E4D,/* 0xB8-0xBF */ + 0x4E8B,0x4E9B,0x4ED5,0x4F3A,0x4F3C,0x4F7F,0x4FDF,0x50FF,/* 0xC0-0xC7 */ + 0x53F2,0x53F8,0x5506,0x55E3,0x56DB,0x58EB,0x5962,0x5A11,/* 0xC8-0xCF */ + 0x5BEB,0x5BFA,0x5C04,0x5DF3,0x5E2B,0x5F99,0x601D,0x6368,/* 0xD0-0xD7 */ + 0x659C,0x65AF,0x67F6,0x67FB,0x68AD,0x6B7B,0x6C99,0x6CD7,/* 0xD8-0xDF */ + 0x6E23,0x7009,0x7345,0x7802,0x793E,0x7940,0x7960,0x79C1,/* 0xE0-0xE7 */ + 0x7BE9,0x7D17,0x7D72,0x8086,0x820D,0x838E,0x84D1,0x86C7,/* 0xE8-0xEF */ + 0x88DF,0x8A50,0x8A5E,0x8B1D,0x8CDC,0x8D66,0x8FAD,0x90AA,/* 0xF0-0xF7 */ + 0xFA2B,0x99DF,0x9E9D,0x524A,0xF969,0x6714,0xF96A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5098,0x522A,0x5C71,0x6563,0x6C55,0x73CA,0x7523,/* 0xA0-0xA7 */ + 0x759D,0x7B97,0x849C,0x9178,0x9730,0x4E77,0x6492,0x6BBA,/* 0xA8-0xAF */ + 0x715E,0x85A9,0x4E09,0xF96B,0x6749,0x68EE,0x6E17,0x829F,/* 0xB0-0xB7 */ + 0x8518,0x886B,0x63F7,0x6F81,0x9212,0x98AF,0x4E0A,0x50B7,/* 0xB8-0xBF */ + 0x50CF,0x511F,0x5546,0x55AA,0x5617,0x5B40,0x5C19,0x5CE0,/* 0xC0-0xC7 */ + 0x5E38,0x5E8A,0x5EA0,0x5EC2,0x60F3,0x6851,0x6A61,0x6E58,/* 0xC8-0xCF */ + 0x723D,0x7240,0x72C0,0x76F8,0xFA1A,0x7BB1,0x7FD4,0x88F3,/* 0xD0-0xD7 */ + 0x89F4,0x8A73,0x8C61,0x8CDE,0x971C,0x585E,0x74BD,0x8CFD,/* 0xD8-0xDF */ + 0x55C7,0xF96C,0x7A61,0x7D22,0x8272,0x7272,0x751F,0x7525,/* 0xE0-0xE7 */ + 0xF96D,0x7B19,0x5885,0x58FB,0x5DBC,0x5E8F,0x5EB6,0x5F90,/* 0xE8-0xEF */ + 0x6055,0x6292,0x637F,0x654D,0x6691,0x66D9,0x66F8,0x6816,/* 0xF0-0xF7 */ + 0x68F2,0x7280,0x745E,0x7B6E,0x7D6E,0x7DD6,0x7F72,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x80E5,0x8212,0x85AF,0x897F,0x8A93,0x901D,0x92E4,/* 0xA0-0xA7 */ + 0x9ECD,0x9F20,0x5915,0x596D,0x5E2D,0x60DC,0x6614,0x6673,/* 0xA8-0xAF */ + 0x6790,0x6C50,0x6DC5,0x6F5F,0x77F3,0x78A9,0x84C6,0x91CB,/* 0xB0-0xB7 */ + 0x932B,0x4ED9,0x50CA,0x5148,0x5584,0x5B0B,0x5BA3,0x6247,/* 0xB8-0xBF */ + 0x657E,0x65CB,0x6E32,0x717D,0x7401,0x7444,0x7487,0x74BF,/* 0xC0-0xC7 */ + 0x766C,0x79AA,0x7DDA,0x7E55,0x7FA8,0x817A,0x81B3,0x8239,/* 0xC8-0xCF */ + 0x861A,0x87EC,0x8A75,0x8DE3,0x9078,0x9291,0x9425,0x994D,/* 0xD0-0xD7 */ + 0x9BAE,0x5368,0x5C51,0x6954,0x6CC4,0x6D29,0x6E2B,0x820C,/* 0xD8-0xDF */ + 0x859B,0x893B,0x8A2D,0x8AAA,0x96EA,0x9F67,0x5261,0x66B9,/* 0xE0-0xE7 */ + 0x6BB2,0x7E96,0x87FE,0x8D0D,0x9583,0x965D,0x651D,0x6D89,/* 0xE8-0xEF */ + 0x71EE,0xF96E,0x57CE,0x59D3,0x5BAC,0x6027,0x60FA,0x6210,/* 0xF0-0xF7 */ + 0x661F,0x665F,0x7329,0x73F9,0x76DB,0x7701,0x7B6C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8056,0x8072,0x8165,0x8AA0,0x9192,0x4E16,0x52E2,/* 0xA0-0xA7 */ + 0x6B72,0x6D17,0x7A05,0x7B39,0x7D30,0xF96F,0x8CB0,0x53EC,/* 0xA8-0xAF */ + 0x562F,0x5851,0x5BB5,0x5C0F,0x5C11,0x5DE2,0x6240,0x6383,/* 0xB0-0xB7 */ + 0x6414,0x662D,0x68B3,0x6CBC,0x6D88,0x6EAF,0x701F,0x70A4,/* 0xB8-0xBF */ + 0x71D2,0x7526,0x758F,0x758E,0x7619,0x7B11,0x7BE0,0x7C2B,/* 0xC0-0xC7 */ + 0x7D20,0x7D39,0x852C,0x856D,0x8607,0x8A34,0x900D,0x9061,/* 0xC8-0xCF */ + 0x90B5,0x92B7,0x97F6,0x9A37,0x4FD7,0x5C6C,0x675F,0x6D91,/* 0xD0-0xD7 */ + 0x7C9F,0x7E8C,0x8B16,0x8D16,0x901F,0x5B6B,0x5DFD,0x640D,/* 0xD8-0xDF */ + 0x84C0,0x905C,0x98E1,0x7387,0x5B8B,0x609A,0x677E,0x6DDE,/* 0xE0-0xE7 */ + 0x8A1F,0x8AA6,0x9001,0x980C,0x5237,0xF970,0x7051,0x788E,/* 0xE8-0xEF */ + 0x9396,0x8870,0x91D7,0x4FEE,0x53D7,0x55FD,0x56DA,0x5782,/* 0xF0-0xF7 */ + 0x58FD,0x5AC2,0x5B88,0x5CAB,0x5CC0,0x5E25,0x6101,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x620D,0x624B,0x6388,0x641C,0x6536,0x6578,0x6A39,/* 0xA0-0xA7 */ + 0x6B8A,0x6C34,0x6D19,0x6F31,0x71E7,0x72E9,0x7378,0x7407,/* 0xA8-0xAF */ + 0x74B2,0x7626,0x7761,0x79C0,0x7A57,0x7AEA,0x7CB9,0x7D8F,/* 0xB0-0xB7 */ + 0x7DAC,0x7E61,0x7F9E,0x8129,0x8331,0x8490,0x84DA,0x85EA,/* 0xB8-0xBF */ + 0x8896,0x8AB0,0x8B90,0x8F38,0x9042,0x9083,0x916C,0x9296,/* 0xC0-0xC7 */ + 0x92B9,0x968B,0x96A7,0x96A8,0x96D6,0x9700,0x9808,0x9996,/* 0xC8-0xCF */ + 0x9AD3,0x9B1A,0x53D4,0x587E,0x5919,0x5B70,0x5BBF,0x6DD1,/* 0xD0-0xD7 */ + 0x6F5A,0x719F,0x7421,0x74B9,0x8085,0x83FD,0x5DE1,0x5F87,/* 0xD8-0xDF */ + 0x5FAA,0x6042,0x65EC,0x6812,0x696F,0x6A53,0x6B89,0x6D35,/* 0xE0-0xE7 */ + 0x6DF3,0x73E3,0x76FE,0x77AC,0x7B4D,0x7D14,0x8123,0x821C,/* 0xE8-0xEF */ + 0x8340,0x84F4,0x8563,0x8A62,0x8AC4,0x9187,0x931E,0x9806,/* 0xF0-0xF7 */ + 0x99B4,0x620C,0x8853,0x8FF0,0x9265,0x5D07,0x5D27,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5D69,0x745F,0x819D,0x8768,0x6FD5,0x62FE,0x7FD2,/* 0xA0-0xA7 */ + 0x8936,0x8972,0x4E1E,0x4E58,0x50E7,0x52DD,0x5347,0x627F,/* 0xA8-0xAF */ + 0x6607,0x7E69,0x8805,0x965E,0x4F8D,0x5319,0x5636,0x59CB,/* 0xB0-0xB7 */ + 0x5AA4,0x5C38,0x5C4E,0x5C4D,0x5E02,0x5F11,0x6043,0x65BD,/* 0xB8-0xBF */ + 0x662F,0x6642,0x67BE,0x67F4,0x731C,0x77E2,0x793A,0x7FC5,/* 0xC0-0xC7 */ + 0x8494,0x84CD,0x8996,0x8A66,0x8A69,0x8AE1,0x8C55,0x8C7A,/* 0xC8-0xCF */ + 0x57F4,0x5BD4,0x5F0F,0x606F,0x62ED,0x690D,0x6B96,0x6E5C,/* 0xD0-0xD7 */ + 0x7184,0x7BD2,0x8755,0x8B58,0x8EFE,0x98DF,0x98FE,0x4F38,/* 0xD8-0xDF */ + 0x4F81,0x4FE1,0x547B,0x5A20,0x5BB8,0x613C,0x65B0,0x6668,/* 0xE0-0xE7 */ + 0x71FC,0x7533,0xFA19,0x7D33,0x814E,0x81E3,0x8398,0x85AA,/* 0xE8-0xEF */ + 0x85CE,0x8703,0x8A0A,0x8EAB,0x8F9B,0xF971,0x8FC5,0x5931,/* 0xF0-0xF7 */ + 0x5BA4,0x5BE6,0x6089,0x5BE9,0x5C0B,0x5FC3,0x6C81,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xF972,0x6DF1,0x700B,0x751A,0x82AF,0x8AF6,0x4EC0,/* 0xA0-0xA7 */ + 0x5341,0xF973,0x96D9,0x6C0F,0x4E9E,0x4FC4,0x5152,0x555E,/* 0xA8-0xAF */ + 0x5A25,0x5CE8,0x6211,0x7259,0x82BD,0x83AA,0x86FE,0x8859,/* 0xB0-0xB7 */ + 0x8A1D,0x963F,0x96C5,0x9913,0x9D09,0x9D5D,0x580A,0x5CB3,/* 0xB8-0xBF */ + 0x5DBD,0x5E44,0x60E1,0x6115,0x63E1,0x6A02,0x6E25,0x9102,/* 0xC0-0xC7 */ + 0x9354,0x984E,0x9C10,0x9F77,0x5B89,0x5CB8,0x6309,0x664F,/* 0xC8-0xCF */ + 0x6848,0x773C,0x96C1,0x978D,0x9854,0x9B9F,0x65A1,0x8B01,/* 0xD0-0xD7 */ + 0x8ECB,0x95BC,0x5535,0x5CA9,0x5DD6,0x5EB5,0x6697,0x764C,/* 0xD8-0xDF */ + 0x83F4,0x95C7,0x58D3,0x62BC,0x72CE,0x9D28,0x4EF0,0x592E,/* 0xE0-0xE7 */ + 0x600F,0x663B,0x6B83,0x79E7,0x9D26,0x5393,0x54C0,0x57C3,/* 0xE8-0xEF */ + 0x5D16,0x611B,0x66D6,0x6DAF,0x788D,0x827E,0x9698,0x9744,/* 0xF0-0xF7 */ + 0x5384,0x627C,0x6396,0x6DB2,0x7E0A,0x814B,0x984D,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6AFB,0x7F4C,0x9DAF,0x9E1A,0x4E5F,0x503B,0x51B6,/* 0xA0-0xA7 */ + 0x591C,0x60F9,0x63F6,0x6930,0x723A,0x8036,0xF974,0x91CE,/* 0xA8-0xAF */ + 0x5F31,0xF975,0xF976,0x7D04,0x82E5,0x846F,0x84BB,0x85E5,/* 0xB0-0xB7 */ + 0x8E8D,0xF977,0x4F6F,0xF978,0xF979,0x58E4,0x5B43,0x6059,/* 0xB8-0xBF */ + 0x63DA,0x6518,0x656D,0x6698,0xF97A,0x694A,0x6A23,0x6D0B,/* 0xC0-0xC7 */ + 0x7001,0x716C,0x75D2,0x760D,0x79B3,0x7A70,0xF97B,0x7F8A,/* 0xC8-0xCF */ + 0xF97C,0x8944,0xF97D,0x8B93,0x91C0,0x967D,0xF97E,0x990A,/* 0xD0-0xD7 */ + 0x5704,0x5FA1,0x65BC,0x6F01,0x7600,0x79A6,0x8A9E,0x99AD,/* 0xD8-0xDF */ + 0x9B5A,0x9F6C,0x5104,0x61B6,0x6291,0x6A8D,0x81C6,0x5043,/* 0xE0-0xE7 */ + 0x5830,0x5F66,0x7109,0x8A00,0x8AFA,0x5B7C,0x8616,0x4FFA,/* 0xE8-0xEF */ + 0x513C,0x56B4,0x5944,0x63A9,0x6DF9,0x5DAA,0x696D,0x5186,/* 0xF0-0xF7 */ + 0x4E88,0x4F59,0xF97F,0xF980,0xF981,0x5982,0xF982,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xF983,0x6B5F,0x6C5D,0xF984,0x74B5,0x7916,0xF985,/* 0xA0-0xA7 */ + 0x8207,0x8245,0x8339,0x8F3F,0x8F5D,0xF986,0x9918,0xF987,/* 0xA8-0xAF */ + 0xF988,0xF989,0x4EA6,0xF98A,0x57DF,0x5F79,0x6613,0xF98B,/* 0xB0-0xB7 */ + 0xF98C,0x75AB,0x7E79,0x8B6F,0xF98D,0x9006,0x9A5B,0x56A5,/* 0xB8-0xBF */ + 0x5827,0x59F8,0x5A1F,0x5BB4,0xF98E,0x5EF6,0xF98F,0xF990,/* 0xC0-0xC7 */ + 0x6350,0x633B,0xF991,0x693D,0x6C87,0x6CBF,0x6D8E,0x6D93,/* 0xC8-0xCF */ + 0x6DF5,0x6F14,0xF992,0x70DF,0x7136,0x7159,0xF993,0x71C3,/* 0xD0-0xD7 */ + 0x71D5,0xF994,0x784F,0x786F,0xF995,0x7B75,0x7DE3,0xF996,/* 0xD8-0xDF */ + 0x7E2F,0xF997,0x884D,0x8EDF,0xF998,0xF999,0xF99A,0x925B,/* 0xE0-0xE7 */ + 0xF99B,0x9CF6,0xF99C,0xF99D,0xF99E,0x6085,0x6D85,0xF99F,/* 0xE8-0xEF */ + 0x71B1,0xF9A0,0xF9A1,0x95B1,0x53AD,0xF9A2,0xF9A3,0xF9A4,/* 0xF0-0xF7 */ + 0x67D3,0xF9A5,0x708E,0x7130,0x7430,0x8276,0x82D2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xF9A6,0x95BB,0x9AE5,0x9E7D,0x66C4,0xF9A7,0x71C1,/* 0xA0-0xA7 */ + 0x8449,0xF9A8,0xF9A9,0x584B,0xF9AA,0xF9AB,0x5DB8,0x5F71,/* 0xA8-0xAF */ + 0xF9AC,0x6620,0x668E,0x6979,0x69AE,0x6C38,0x6CF3,0x6E36,/* 0xB0-0xB7 */ + 0x6F41,0x6FDA,0x701B,0x702F,0x7150,0x71DF,0x7370,0xF9AD,/* 0xB8-0xBF */ + 0x745B,0xF9AE,0x74D4,0x76C8,0x7A4E,0x7E93,0xF9AF,0xF9B0,/* 0xC0-0xC7 */ + 0x82F1,0x8A60,0x8FCE,0xF9B1,0x9348,0xF9B2,0x9719,0xF9B3,/* 0xC8-0xCF */ + 0xF9B4,0x4E42,0x502A,0xF9B5,0x5208,0x53E1,0x66F3,0x6C6D,/* 0xD0-0xD7 */ + 0x6FCA,0x730A,0x777F,0x7A62,0x82AE,0x85DD,0x8602,0xF9B6,/* 0xD8-0xDF */ + 0x88D4,0x8A63,0x8B7D,0x8C6B,0xF9B7,0x92B3,0xF9B8,0x9713,/* 0xE0-0xE7 */ + 0x9810,0x4E94,0x4F0D,0x4FC9,0x50B2,0x5348,0x543E,0x5433,/* 0xE8-0xEF */ + 0x55DA,0x5862,0x58BA,0x5967,0x5A1B,0x5BE4,0x609F,0xF9B9,/* 0xF0-0xF7 */ + 0x61CA,0x6556,0x65FF,0x6664,0x68A7,0x6C5A,0x6FB3,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x70CF,0x71AC,0x7352,0x7B7D,0x8708,0x8AA4,0x9C32,/* 0xA0-0xA7 */ + 0x9F07,0x5C4B,0x6C83,0x7344,0x7389,0x923A,0x6EAB,0x7465,/* 0xA8-0xAF */ + 0x761F,0x7A69,0x7E15,0x860A,0xFA0C,0x58C5,0x64C1,0x74EE,/* 0xB0-0xB7 */ + 0x7515,0x7670,0x7FC1,0x9095,0x96CD,0x9954,0x6E26,0x74E6,/* 0xB8-0xBF */ + 0x7AA9,0x7AAA,0x81E5,0x86D9,0x8778,0x8A1B,0x5A49,0x5B8C,/* 0xC0-0xC7 */ + 0x5B9B,0x68A1,0x6900,0x6D63,0x73A9,0x7413,0x742C,0x7897,/* 0xC8-0xCF */ + 0x7DE9,0x7FEB,0x8118,0x8155,0x839E,0x8C4C,0x962E,0x9811,/* 0xD0-0xD7 */ + 0x66F0,0x5F80,0x65FA,0x6789,0x6C6A,0x738B,0x502D,0x5A03,/* 0xD8-0xDF */ + 0x6B6A,0x77EE,0x5916,0x5D6C,0x5DCD,0x7325,0x754F,0xF9BA,/* 0xE0-0xE7 */ + 0xF9BB,0x50E5,0x51F9,0x582F,0x592D,0x5996,0x59DA,0x5BE5,/* 0xE8-0xEF */ + 0xF9BC,0xF9BD,0x5DA2,0x62D7,0x6416,0x6493,0x64FE,0xF9BE,/* 0xF0-0xF7 */ + 0x66DC,0xF9BF,0x6A48,0xF9C0,0x71FF,0x7464,0xF9C1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7A88,0x7AAF,0x7E47,0x7E5E,0x8000,0x8170,0xF9C2,/* 0xA0-0xA7 */ + 0x87EF,0x8981,0x8B20,0x9059,0xF9C3,0x9080,0x9952,0x617E,/* 0xA8-0xAF */ + 0x6B32,0x6D74,0x7E1F,0x8925,0x8FB1,0x4FD1,0x50AD,0x5197,/* 0xB0-0xB7 */ + 0x52C7,0x57C7,0x5889,0x5BB9,0x5EB8,0x6142,0x6995,0x6D8C,/* 0xB8-0xBF */ + 0x6E67,0x6EB6,0x7194,0x7462,0x7528,0x752C,0x8073,0x8338,/* 0xC0-0xC7 */ + 0x84C9,0x8E0A,0x9394,0x93DE,0xF9C4,0x4E8E,0x4F51,0x5076,/* 0xC8-0xCF */ + 0x512A,0x53C8,0x53CB,0x53F3,0x5B87,0x5BD3,0x5C24,0x611A,/* 0xD0-0xD7 */ + 0x6182,0x65F4,0x725B,0x7397,0x7440,0x76C2,0x7950,0x7991,/* 0xD8-0xDF */ + 0x79B9,0x7D06,0xFA1E,0x828B,0x85D5,0x865E,0x8FC2,0x9047,/* 0xE0-0xE7 */ + 0x90F5,0x91EA,0x9685,0x96E8,0x96E9,0x52D6,0x5F67,0x65ED,/* 0xE8-0xEF */ + 0x6631,0x682F,0x715C,0x7A36,0x90C1,0x980A,0x4E91,0xF9C5,/* 0xF0-0xF7 */ + 0x6A52,0x6B9E,0x6F90,0x7189,0x8018,0x82B8,0x8553,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x904B,0x9695,0x96F2,0x97FB,0x851A,0x9B31,0x4E90,/* 0xA0-0xA7 */ + 0x718A,0x96C4,0x5143,0x539F,0x54E1,0x5713,0x5712,0x57A3,/* 0xA8-0xAF */ + 0x5A9B,0x5AC4,0x5BC3,0x6028,0x613F,0x63F4,0x6C85,0x6D39,/* 0xB0-0xB7 */ + 0x6E72,0x6E90,0x7230,0x733F,0x7457,0x82D1,0x8881,0x8F45,/* 0xB8-0xBF */ + 0x9060,0xF9C6,0x9662,0x9858,0x9D1B,0x6708,0x8D8A,0x925E,/* 0xC0-0xC7 */ + 0x4F4D,0x5049,0x50DE,0x5371,0x570D,0x59D4,0x5A01,0x5C09,/* 0xC8-0xCF */ + 0x6170,0x6690,0x6E2D,0x7232,0x744B,0x7DEF,0x80C3,0x840E,/* 0xD0-0xD7 */ + 0x8466,0x853F,0x875F,0x885B,0x8918,0x8B02,0x9055,0x97CB,/* 0xD8-0xDF */ + 0x9B4F,0x4E73,0x4F91,0x5112,0x516A,0xF9C7,0x552F,0x55A9,/* 0xE0-0xE7 */ + 0x5B7A,0x5BA5,0x5E7C,0x5E7D,0x5EBE,0x60A0,0x60DF,0x6108,/* 0xE8-0xEF */ + 0x6109,0x63C4,0x6538,0x6709,0xF9C8,0x67D4,0x67DA,0xF9C9,/* 0xF0-0xF7 */ + 0x6961,0x6962,0x6CB9,0x6D27,0xF9CA,0x6E38,0xF9CB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6FE1,0x7336,0x7337,0xF9CC,0x745C,0x7531,0xF9CD,/* 0xA0-0xA7 */ + 0x7652,0xF9CE,0xF9CF,0x7DAD,0x81FE,0x8438,0x88D5,0x8A98,/* 0xA8-0xAF */ + 0x8ADB,0x8AED,0x8E30,0x8E42,0x904A,0x903E,0x907A,0x9149,/* 0xB0-0xB7 */ + 0x91C9,0x936E,0xF9D0,0xF9D1,0x5809,0xF9D2,0x6BD3,0x8089,/* 0xB8-0xBF */ + 0x80B2,0xF9D3,0xF9D4,0x5141,0x596B,0x5C39,0xF9D5,0xF9D6,/* 0xC0-0xC7 */ + 0x6F64,0x73A7,0x80E4,0x8D07,0xF9D7,0x9217,0x958F,0xF9D8,/* 0xC8-0xCF */ + 0xF9D9,0xF9DA,0xF9DB,0x807F,0x620E,0x701C,0x7D68,0x878D,/* 0xD0-0xD7 */ + 0xF9DC,0x57A0,0x6069,0x6147,0x6BB7,0x8ABE,0x9280,0x96B1,/* 0xD8-0xDF */ + 0x4E59,0x541F,0x6DEB,0x852D,0x9670,0x97F3,0x98EE,0x63D6,/* 0xE0-0xE7 */ + 0x6CE3,0x9091,0x51DD,0x61C9,0x81BA,0x9DF9,0x4F9D,0x501A,/* 0xE8-0xEF */ + 0x5100,0x5B9C,0x610F,0x61FF,0x64EC,0x6905,0x6BC5,0x7591,/* 0xF0-0xF7 */ + 0x77E3,0x7FA9,0x8264,0x858F,0x87FB,0x8863,0x8ABC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8B70,0x91AB,0x4E8C,0x4EE5,0x4F0A,0xF9DD,0xF9DE,/* 0xA0-0xA7 */ + 0x5937,0x59E8,0xF9DF,0x5DF2,0x5F1B,0x5F5B,0x6021,0xF9E0,/* 0xA8-0xAF */ + 0xF9E1,0xF9E2,0xF9E3,0x723E,0x73E5,0xF9E4,0x7570,0x75CD,/* 0xB0-0xB7 */ + 0xF9E5,0x79FB,0xF9E6,0x800C,0x8033,0x8084,0x82E1,0x8351,/* 0xB8-0xBF */ + 0xF9E7,0xF9E8,0x8CBD,0x8CB3,0x9087,0xF9E9,0xF9EA,0x98F4,/* 0xC0-0xC7 */ + 0x990C,0xF9EB,0xF9EC,0x7037,0xFA17,0x7FCA,0x7FCC,0x7FFC,/* 0xC8-0xCF */ + 0x8B1A,0x4EBA,0x4EC1,0x5203,0x5370,0xF9ED,0x54BD,0x56E0,/* 0xD0-0xD7 */ + 0x59FB,0x5BC5,0x5F15,0x5FCD,0x6E6E,0xF9EE,0xF9EF,0x7D6A,/* 0xD8-0xDF */ + 0x8335,0xF9F0,0x8693,0x8A8D,0xF9F1,0x976D,0x9777,0xF9F2,/* 0xE0-0xE7 */ + 0xF9F3,0x4E00,0x4F5A,0x4F7E,0x58F9,0x65E5,0x6EA2,0xFA25,/* 0xE8-0xEF */ + 0x93B0,0x99B9,0x4EFB,0x58EC,0x598A,0x59D9,0x6041,0xF9F4,/* 0xF0-0xF7 */ + 0xF9F5,0x7A14,0xF9F6,0x834F,0x8CC3,0x5165,0x5344,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_ED[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xF9F7,0xF9F8,0xF9F9,0x4ECD,0x5269,0x5B55,0x82BF,/* 0xA0-0xA7 */ + 0x4ED4,0x523A,0x54A8,0x59C9,0x59FF,0x5B50,0x5B57,0x5B5C,/* 0xA8-0xAF */ + 0x6063,0x6148,0x6ECB,0x7099,0x716E,0x7386,0x74F7,0x75B5,/* 0xB0-0xB7 */ + 0x78C1,0x7D2B,0x8005,0x81EA,0x8328,0x8517,0x85C9,0x8AEE,/* 0xB8-0xBF */ + 0x8CC7,0x96CC,0x4F5C,0x52FA,0x56BC,0x65AB,0x6628,0x707C,/* 0xC0-0xC7 */ + 0x70B8,0x7235,0x7DBD,0x828D,0x914C,0x96C0,0x9D72,0x5B71,/* 0xC8-0xCF */ + 0x68E7,0x6B98,0x6F7A,0x76DE,0x5C91,0x66AB,0x6F5B,0x7BB4,/* 0xD0-0xD7 */ + 0x7C2A,0x8836,0x96DC,0x4E08,0x4ED7,0x5320,0x5834,0x58BB,/* 0xD8-0xDF */ + 0x58EF,0x596C,0x5C07,0x5E33,0x5E84,0x5F35,0x638C,0x66B2,/* 0xE0-0xE7 */ + 0x6756,0x6A1F,0x6AA3,0x6B0C,0x6F3F,0x7246,0xF9FA,0x7350,/* 0xE8-0xEF */ + 0x748B,0x7AE0,0x7CA7,0x8178,0x81DF,0x81E7,0x838A,0x846C,/* 0xF0-0xF7 */ + 0x8523,0x8594,0x85CF,0x88DD,0x8D13,0x91AC,0x9577,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x969C,0x518D,0x54C9,0x5728,0x5BB0,0x624D,0x6750,/* 0xA0-0xA7 */ + 0x683D,0x6893,0x6E3D,0x6ED3,0x707D,0x7E21,0x88C1,0x8CA1,/* 0xA8-0xAF */ + 0x8F09,0x9F4B,0x9F4E,0x722D,0x7B8F,0x8ACD,0x931A,0x4F47,/* 0xB0-0xB7 */ + 0x4F4E,0x5132,0x5480,0x59D0,0x5E95,0x62B5,0x6775,0x696E,/* 0xB8-0xBF */ + 0x6A17,0x6CAE,0x6E1A,0x72D9,0x732A,0x75BD,0x7BB8,0x7D35,/* 0xC0-0xC7 */ + 0x82E7,0x83F9,0x8457,0x85F7,0x8A5B,0x8CAF,0x8E87,0x9019,/* 0xC8-0xCF */ + 0x90B8,0x96CE,0x9F5F,0x52E3,0x540A,0x5AE1,0x5BC2,0x6458,/* 0xD0-0xD7 */ + 0x6575,0x6EF4,0x72C4,0xF9FB,0x7684,0x7A4D,0x7B1B,0x7C4D,/* 0xD8-0xDF */ + 0x7E3E,0x7FDF,0x837B,0x8B2B,0x8CCA,0x8D64,0x8DE1,0x8E5F,/* 0xE0-0xE7 */ + 0x8FEA,0x8FF9,0x9069,0x93D1,0x4F43,0x4F7A,0x50B3,0x5168,/* 0xE8-0xEF */ + 0x5178,0x524D,0x526A,0x5861,0x587C,0x5960,0x5C08,0x5C55,/* 0xF0-0xF7 */ + 0x5EDB,0x609B,0x6230,0x6813,0x6BBF,0x6C08,0x6FB1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x714E,0x7420,0x7530,0x7538,0x7551,0x7672,0x7B4C,/* 0xA0-0xA7 */ + 0x7B8B,0x7BAD,0x7BC6,0x7E8F,0x8A6E,0x8F3E,0x8F49,0x923F,/* 0xA8-0xAF */ + 0x9293,0x9322,0x942B,0x96FB,0x985A,0x986B,0x991E,0x5207,/* 0xB0-0xB7 */ + 0x622A,0x6298,0x6D59,0x7664,0x7ACA,0x7BC0,0x7D76,0x5360,/* 0xB8-0xBF */ + 0x5CBE,0x5E97,0x6F38,0x70B9,0x7C98,0x9711,0x9B8E,0x9EDE,/* 0xC0-0xC7 */ + 0x63A5,0x647A,0x8776,0x4E01,0x4E95,0x4EAD,0x505C,0x5075,/* 0xC8-0xCF */ + 0x5448,0x59C3,0x5B9A,0x5E40,0x5EAD,0x5EF7,0x5F81,0x60C5,/* 0xD0-0xD7 */ + 0x633A,0x653F,0x6574,0x65CC,0x6676,0x6678,0x67FE,0x6968,/* 0xD8-0xDF */ + 0x6A89,0x6B63,0x6C40,0x6DC0,0x6DE8,0x6E1F,0x6E5E,0x701E,/* 0xE0-0xE7 */ + 0x70A1,0x738E,0x73FD,0x753A,0x775B,0x7887,0x798E,0x7A0B,/* 0xE8-0xEF */ + 0x7A7D,0xFA1D,0x7D8E,0x8247,0x8A02,0x8AEA,0x8C9E,0x912D,/* 0xF0-0xF7 */ + 0x914A,0x91D8,0x9266,0x92CC,0x9320,0x9706,0xFA1C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x975C,0x9802,0x9F0E,0x5236,0x5291,0x557C,0x5824,/* 0xA0-0xA7 */ + 0x5E1D,0x5F1F,0x608C,0x63D0,0x68AF,0x6FDF,0x796D,0x7B2C,/* 0xA8-0xAF */ + 0x81CD,0x85BA,0x88FD,0xFA22,0x8E44,0x918D,0x9664,0x969B,/* 0xB0-0xB7 */ + 0x973D,0x984C,0x9F4A,0x4FCE,0x5146,0x51CB,0x52A9,0x5632,/* 0xB8-0xBF */ + 0x5F14,0x5F6B,0x63AA,0x64CD,0x65E9,0x6641,0x66FA,0x66F9,/* 0xC0-0xC7 */ + 0x671D,0x689D,0x68D7,0x69FD,0x6F15,0x6F6E,0x7167,0x71E5,/* 0xC8-0xCF */ + 0x722A,0x74AA,0x773A,0x7956,0x795A,0x79DF,0x7A20,0x7A95,/* 0xD0-0xD7 */ + 0x7C97,0x7CDF,0x7D44,0x7E70,0x8087,0x85FB,0x86A4,0x8A54,/* 0xD8-0xDF */ + 0x8ABF,0x8D99,0x8E81,0x9020,0x906D,0x91E3,0x963B,0x96D5,/* 0xE0-0xE7 */ + 0x9CE5,0x65CF,0x7C07,0x8DB3,0x93C3,0x5B58,0x5C0A,0x5352,/* 0xE8-0xEF */ + 0x62D9,0x731D,0x5027,0x5B97,0x5F9E,0x60B0,0x616B,0x68D5,/* 0xF0-0xF7 */ + 0x6DD9,0x742E,0x7A2E,0x7D42,0x7D9C,0x7E31,0x816B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8E2A,0x8E35,0x937E,0x9418,0x4F50,0x5750,0x5DE6,/* 0xA0-0xA7 */ + 0x5EA7,0x632B,0x7F6A,0x4E3B,0x4F4F,0x4F8F,0x505A,0x59DD,/* 0xA8-0xAF */ + 0x80C4,0x546A,0x5468,0x55FE,0x594F,0x5B99,0x5DDE,0x5EDA,/* 0xB0-0xB7 */ + 0x665D,0x6731,0x67F1,0x682A,0x6CE8,0x6D32,0x6E4A,0x6F8D,/* 0xB8-0xBF */ + 0x70B7,0x73E0,0x7587,0x7C4C,0x7D02,0x7D2C,0x7DA2,0x821F,/* 0xC0-0xC7 */ + 0x86DB,0x8A3B,0x8A85,0x8D70,0x8E8A,0x8F33,0x9031,0x914E,/* 0xC8-0xCF */ + 0x9152,0x9444,0x99D0,0x7AF9,0x7CA5,0x4FCA,0x5101,0x51C6,/* 0xD0-0xD7 */ + 0x57C8,0x5BEF,0x5CFB,0x6659,0x6A3D,0x6D5A,0x6E96,0x6FEC,/* 0xD8-0xDF */ + 0x710C,0x756F,0x7AE3,0x8822,0x9021,0x9075,0x96CB,0x99FF,/* 0xE0-0xE7 */ + 0x8301,0x4E2D,0x4EF2,0x8846,0x91CD,0x537D,0x6ADB,0x696B,/* 0xE8-0xEF */ + 0x6C41,0x847A,0x589E,0x618E,0x66FE,0x62EF,0x70DD,0x7511,/* 0xF0-0xF7 */ + 0x75C7,0x7E52,0x84B8,0x8B49,0x8D08,0x4E4B,0x53EA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x54AB,0x5730,0x5740,0x5FD7,0x6301,0x6307,0x646F,/* 0xA0-0xA7 */ + 0x652F,0x65E8,0x667A,0x679D,0x67B3,0x6B62,0x6C60,0x6C9A,/* 0xA8-0xAF */ + 0x6F2C,0x77E5,0x7825,0x7949,0x7957,0x7D19,0x80A2,0x8102,/* 0xB0-0xB7 */ + 0x81F3,0x829D,0x82B7,0x8718,0x8A8C,0xF9FC,0x8D04,0x8DBE,/* 0xB8-0xBF */ + 0x9072,0x76F4,0x7A19,0x7A37,0x7E54,0x8077,0x5507,0x55D4,/* 0xC0-0xC7 */ + 0x5875,0x632F,0x6422,0x6649,0x664B,0x686D,0x699B,0x6B84,/* 0xC8-0xCF */ + 0x6D25,0x6EB1,0x73CD,0x7468,0x74A1,0x755B,0x75B9,0x76E1,/* 0xD0-0xD7 */ + 0x771E,0x778B,0x79E6,0x7E09,0x7E1D,0x81FB,0x852F,0x8897,/* 0xD8-0xDF */ + 0x8A3A,0x8CD1,0x8EEB,0x8FB0,0x9032,0x93AD,0x9663,0x9673,/* 0xE0-0xE7 */ + 0x9707,0x4F84,0x53F1,0x59EA,0x5AC9,0x5E19,0x684E,0x74C6,/* 0xE8-0xEF */ + 0x75BE,0x79E9,0x7A92,0x81A3,0x86ED,0x8CEA,0x8DCC,0x8FED,/* 0xF0-0xF7 */ + 0x659F,0x6715,0xF9FD,0x57F7,0x6F57,0x7DDD,0x8F2F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x93F6,0x96C6,0x5FB5,0x61F2,0x6F84,0x4E14,0x4F98,/* 0xA0-0xA7 */ + 0x501F,0x53C9,0x55DF,0x5D6F,0x5DEE,0x6B21,0x6B64,0x78CB,/* 0xA8-0xAF */ + 0x7B9A,0xF9FE,0x8E49,0x8ECA,0x906E,0x6349,0x643E,0x7740,/* 0xB0-0xB7 */ + 0x7A84,0x932F,0x947F,0x9F6A,0x64B0,0x6FAF,0x71E6,0x74A8,/* 0xB8-0xBF */ + 0x74DA,0x7AC4,0x7C12,0x7E82,0x7CB2,0x7E98,0x8B9A,0x8D0A,/* 0xC0-0xC7 */ + 0x947D,0x9910,0x994C,0x5239,0x5BDF,0x64E6,0x672D,0x7D2E,/* 0xC8-0xCF */ + 0x50ED,0x53C3,0x5879,0x6158,0x6159,0x61FA,0x65AC,0x7AD9,/* 0xD0-0xD7 */ + 0x8B92,0x8B96,0x5009,0x5021,0x5275,0x5531,0x5A3C,0x5EE0,/* 0xD8-0xDF */ + 0x5F70,0x6134,0x655E,0x660C,0x6636,0x66A2,0x69CD,0x6EC4,/* 0xE0-0xE7 */ + 0x6F32,0x7316,0x7621,0x7A93,0x8139,0x8259,0x83D6,0x84BC,/* 0xE8-0xEF */ + 0x50B5,0x57F0,0x5BC0,0x5BE8,0x5F69,0x63A1,0x7826,0x7DB5,/* 0xF0-0xF7 */ + 0x83DC,0x8521,0x91C7,0x91F5,0x518A,0x67F5,0x7B56,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8CAC,0x51C4,0x59BB,0x60BD,0x8655,0x501C,0xF9FF,/* 0xA0-0xA7 */ + 0x5254,0x5C3A,0x617D,0x621A,0x62D3,0x64F2,0x65A5,0x6ECC,/* 0xA8-0xAF */ + 0x7620,0x810A,0x8E60,0x965F,0x96BB,0x4EDF,0x5343,0x5598,/* 0xB0-0xB7 */ + 0x5929,0x5DDD,0x64C5,0x6CC9,0x6DFA,0x7394,0x7A7F,0x821B,/* 0xB8-0xBF */ + 0x85A6,0x8CE4,0x8E10,0x9077,0x91E7,0x95E1,0x9621,0x97C6,/* 0xC0-0xC7 */ + 0x51F8,0x54F2,0x5586,0x5FB9,0x64A4,0x6F88,0x7DB4,0x8F1F,/* 0xC8-0xCF */ + 0x8F4D,0x9435,0x50C9,0x5C16,0x6CBE,0x6DFB,0x751B,0x77BB,/* 0xD0-0xD7 */ + 0x7C3D,0x7C64,0x8A79,0x8AC2,0x581E,0x59BE,0x5E16,0x6377,/* 0xD8-0xDF */ + 0x7252,0x758A,0x776B,0x8ADC,0x8CBC,0x8F12,0x5EF3,0xFA12,/* 0xE0-0xE7 */ + 0x6DF8,0x807D,0x83C1,0x8ACB,0x9751,0x9BD6,0xFA00,0x5243,/* 0xE8-0xEF */ + 0x66FF,0x6D95,0x6EEF,0x7DE0,0x8AE6,0x902E,0x905E,0x9AD4,/* 0xF0-0xF7 */ + 0x521D,0x527F,0x54E8,0x6194,0x6284,0x62DB,0x68A2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6912,0x695A,0x6A35,0x7092,0x7126,0x785D,0x7901,/* 0xA0-0xA7 */ + 0x790E,0x79D2,0x7A0D,0x8096,0x8278,0x82D5,0x8349,0x8549,/* 0xA8-0xAF */ + 0x8C82,0x8D85,0x9162,0x918B,0x91AE,0x4FC3,0x56D1,0x71ED,/* 0xB0-0xB7 */ + 0x77D7,0x8700,0x89F8,0x5BF8,0x5FD6,0x6751,0x90A8,0x53E2,/* 0xB8-0xBF */ + 0xFA10,0x5BF5,0x60A4,0x6181,0x6460,0x7E3D,0x8070,0x8525,/* 0xC0-0xC7 */ + 0x9283,0x64AE,0x50AC,0x5D14,0x6700,0x589C,0x62BD,0x63A8,/* 0xC8-0xCF */ + 0x690E,0x6978,0x6A1E,0x6E6B,0x76BA,0x79CB,0x82BB,0x8429,/* 0xD0-0xD7 */ + 0x8ACF,0x8DA8,0x8FFD,0x9112,0x914B,0x919C,0x9310,0x9318,/* 0xD8-0xDF */ + 0x939A,0x96DB,0x9A36,0x9C0D,0x4E11,0x755C,0x795D,0x7AFA,/* 0xE0-0xE7 */ + 0x7B51,0x7BC9,0x7E2E,0x84C4,0x8E59,0x8E74,0x8EF8,0x9010,/* 0xE8-0xEF */ + 0x6625,0x693F,0x7443,0x51FA,0x672E,0x9EDC,0x5145,0x5FE0,/* 0xF0-0xF7 */ + 0x6C96,0x87F2,0x885D,0x8877,0x60B4,0x81B5,0x8403,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8D05,0x53D6,0x5439,0x5634,0x5A36,0x5C31,0x708A,/* 0xA0-0xA7 */ + 0x7FE0,0x805A,0x8106,0x81ED,0x8DA3,0x9189,0x9A5F,0x9DF2,/* 0xA8-0xAF */ + 0x5074,0x4EC4,0x53A0,0x60FB,0x6E2C,0x5C64,0x4F88,0x5024,/* 0xB0-0xB7 */ + 0x55E4,0x5CD9,0x5E5F,0x6065,0x6894,0x6CBB,0x6DC4,0x71BE,/* 0xB8-0xBF */ + 0x75D4,0x75F4,0x7661,0x7A1A,0x7A49,0x7DC7,0x7DFB,0x7F6E,/* 0xC0-0xC7 */ + 0x81F4,0x86A9,0x8F1C,0x96C9,0x99B3,0x9F52,0x5247,0x52C5,/* 0xC8-0xCF */ + 0x98ED,0x89AA,0x4E03,0x67D2,0x6F06,0x4FB5,0x5BE2,0x6795,/* 0xD0-0xD7 */ + 0x6C88,0x6D78,0x741B,0x7827,0x91DD,0x937C,0x87C4,0x79E4,/* 0xD8-0xDF */ + 0x7A31,0x5FEB,0x4ED6,0x54A4,0x553E,0x58AE,0x59A5,0x60F0,/* 0xE0-0xE7 */ + 0x6253,0x62D6,0x6736,0x6955,0x8235,0x9640,0x99B1,0x99DD,/* 0xE8-0xEF */ + 0x502C,0x5353,0x5544,0x577C,0xFA01,0x6258,0xFA02,0x64E2,/* 0xF0-0xF7 */ + 0x666B,0x67DD,0x6FC1,0x6FEF,0x7422,0x7438,0x8A17,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9438,0x5451,0x5606,0x5766,0x5F48,0x619A,0x6B4E,/* 0xA0-0xA7 */ + 0x7058,0x70AD,0x7DBB,0x8A95,0x596A,0x812B,0x63A2,0x7708,/* 0xA8-0xAF */ + 0x803D,0x8CAA,0x5854,0x642D,0x69BB,0x5B95,0x5E11,0x6E6F,/* 0xB0-0xB7 */ + 0xFA03,0x8569,0x514C,0x53F0,0x592A,0x6020,0x614B,0x6B86,/* 0xB8-0xBF */ + 0x6C70,0x6CF0,0x7B1E,0x80CE,0x82D4,0x8DC6,0x90B0,0x98B1,/* 0xC0-0xC7 */ + 0xFA04,0x64C7,0x6FA4,0x6491,0x6504,0x514E,0x5410,0x571F,/* 0xC8-0xCF */ + 0x8A0E,0x615F,0x6876,0xFA05,0x75DB,0x7B52,0x7D71,0x901A,/* 0xD0-0xD7 */ + 0x5806,0x69CC,0x817F,0x892A,0x9000,0x9839,0x5078,0x5957,/* 0xD8-0xDF */ + 0x59AC,0x6295,0x900F,0x9B2A,0x615D,0x7279,0x95D6,0x5761,/* 0xE0-0xE7 */ + 0x5A46,0x5DF4,0x628A,0x64AD,0x64FA,0x6777,0x6CE2,0x6D3E,/* 0xE8-0xEF */ + 0x722C,0x7436,0x7834,0x7F77,0x82AD,0x8DDB,0x9817,0x5224,/* 0xF0-0xF7 */ + 0x5742,0x677F,0x7248,0x74E3,0x8CA9,0x8FA6,0x9211,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x962A,0x516B,0x53ED,0x634C,0x4F69,0x5504,0x6096,/* 0xA0-0xA7 */ + 0x6557,0x6C9B,0x6D7F,0x724C,0x72FD,0x7A17,0x8987,0x8C9D,/* 0xA8-0xAF */ + 0x5F6D,0x6F8E,0x70F9,0x81A8,0x610E,0x4FBF,0x504F,0x6241,/* 0xB0-0xB7 */ + 0x7247,0x7BC7,0x7DE8,0x7FE9,0x904D,0x97AD,0x9A19,0x8CB6,/* 0xB8-0xBF */ + 0x576A,0x5E73,0x67B0,0x840D,0x8A55,0x5420,0x5B16,0x5E63,/* 0xC0-0xC7 */ + 0x5EE2,0x5F0A,0x6583,0x80BA,0x853D,0x9589,0x965B,0x4F48,/* 0xC8-0xCF */ + 0x5305,0x530D,0x530F,0x5486,0x54FA,0x5703,0x5E03,0x6016,/* 0xD0-0xD7 */ + 0x629B,0x62B1,0x6355,0xFA06,0x6CE1,0x6D66,0x75B1,0x7832,/* 0xD8-0xDF */ + 0x80DE,0x812F,0x82DE,0x8461,0x84B2,0x888D,0x8912,0x900B,/* 0xE0-0xE7 */ + 0x92EA,0x98FD,0x9B91,0x5E45,0x66B4,0x66DD,0x7011,0x7206,/* 0xE8-0xEF */ + 0xFA07,0x4FF5,0x527D,0x5F6A,0x6153,0x6753,0x6A19,0x6F02,/* 0xF0-0xF7 */ + 0x74E2,0x7968,0x8868,0x8C79,0x98C7,0x98C4,0x9A43,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x54C1,0x7A1F,0x6953,0x8AF7,0x8C4A,0x98A8,0x99AE,/* 0xA0-0xA7 */ + 0x5F7C,0x62AB,0x75B2,0x76AE,0x88AB,0x907F,0x9642,0x5339,/* 0xA8-0xAF */ + 0x5F3C,0x5FC5,0x6CCC,0x73CC,0x7562,0x758B,0x7B46,0x82FE,/* 0xB0-0xB7 */ + 0x999D,0x4E4F,0x903C,0x4E0B,0x4F55,0x53A6,0x590F,0x5EC8,/* 0xB8-0xBF */ + 0x6630,0x6CB3,0x7455,0x8377,0x8766,0x8CC0,0x9050,0x971E,/* 0xC0-0xC7 */ + 0x9C15,0x58D1,0x5B78,0x8650,0x8B14,0xFA2D,0x5BD2,0x6068,/* 0xC8-0xCF */ + 0x608D,0x65F1,0x6C57,0x6F22,0x6FA3,0x701A,0x7F55,0x7FF0,/* 0xD0-0xD7 */ + 0x9591,0x9592,0x9650,0x97D3,0x5272,0x8F44,0x51FD,0x542B,/* 0xD8-0xDF */ + 0x54B8,0x5563,0x558A,0x6ABB,0x6DB5,0x7DD8,0x8266,0x929C,/* 0xE0-0xE7 */ + 0x9677,0x9E79,0x5408,0x54C8,0x76D2,0x86E4,0x95A4,0x95D4,/* 0xE8-0xEF */ + 0x965C,0x4EA2,0x4F09,0x59EE,0x5AE6,0x5DF7,0x6052,0x6297,/* 0xF0-0xF7 */ + 0x676D,0x6841,0x6C86,0x6E2F,0x7F38,0x809B,0x822A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xFA08,0xFA09,0x9805,0x4EA5,0x5055,0x54B3,0x5793,/* 0xA0-0xA7 */ + 0x595A,0x5B69,0x5BB3,0x61C8,0x6977,0x6D77,0x7023,0x87F9,/* 0xA8-0xAF */ + 0x89E3,0x8A72,0x8AE7,0x9082,0x99ED,0x9AB8,0x52BE,0x6838,/* 0xB0-0xB7 */ + 0x5016,0x5E78,0x674F,0x8347,0x884C,0x4EAB,0x5411,0x56AE,/* 0xB8-0xBF */ + 0x73E6,0x9115,0x97FF,0x9909,0x9957,0x9999,0x5653,0x589F,/* 0xC0-0xC7 */ + 0x865B,0x8A31,0x61B2,0x6AF6,0x737B,0x8ED2,0x6B47,0x96AA,/* 0xC8-0xCF */ + 0x9A57,0x5955,0x7200,0x8D6B,0x9769,0x4FD4,0x5CF4,0x5F26,/* 0xD0-0xD7 */ + 0x61F8,0x665B,0x6CEB,0x70AB,0x7384,0x73B9,0x73FE,0x7729,/* 0xD8-0xDF */ + 0x774D,0x7D43,0x7D62,0x7E23,0x8237,0x8852,0xFA0A,0x8CE2,/* 0xE0-0xE7 */ + 0x9249,0x986F,0x5B51,0x7A74,0x8840,0x9801,0x5ACC,0x4FE0,/* 0xE8-0xEF */ + 0x5354,0x593E,0x5CFD,0x633E,0x6D79,0x72F9,0x8105,0x8107,/* 0xF0-0xF7 */ + 0x83A2,0x92CF,0x9830,0x4EA8,0x5144,0x5211,0x578B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5F62,0x6CC2,0x6ECE,0x7005,0x7050,0x70AF,0x7192,/* 0xA0-0xA7 */ + 0x73E9,0x7469,0x834A,0x87A2,0x8861,0x9008,0x90A2,0x93A3,/* 0xA8-0xAF */ + 0x99A8,0x516E,0x5F57,0x60E0,0x6167,0x66B3,0x8559,0x8E4A,/* 0xB0-0xB7 */ + 0x91AF,0x978B,0x4E4E,0x4E92,0x547C,0x58D5,0x58FA,0x597D,/* 0xB8-0xBF */ + 0x5CB5,0x5F27,0x6236,0x6248,0x660A,0x6667,0x6BEB,0x6D69,/* 0xC0-0xC7 */ + 0x6DCF,0x6E56,0x6EF8,0x6F94,0x6FE0,0x6FE9,0x705D,0x72D0,/* 0xC8-0xCF */ + 0x7425,0x745A,0x74E0,0x7693,0x795C,0x7CCA,0x7E1E,0x80E1,/* 0xD0-0xD7 */ + 0x82A6,0x846B,0x84BF,0x864E,0x865F,0x8774,0x8B77,0x8C6A,/* 0xD8-0xDF */ + 0x93AC,0x9800,0x9865,0x60D1,0x6216,0x9177,0x5A5A,0x660F,/* 0xE0-0xE7 */ + 0x6DF7,0x6E3E,0x743F,0x9B42,0x5FFD,0x60DA,0x7B0F,0x54C4,/* 0xE8-0xEF */ + 0x5F18,0x6C5E,0x6CD3,0x6D2A,0x70D8,0x7D05,0x8679,0x8A0C,/* 0xF0-0xF7 */ + 0x9D3B,0x5316,0x548C,0x5B05,0x6A3A,0x706B,0x7575,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x798D,0x79BE,0x82B1,0x83EF,0x8A71,0x8B41,0x8CA8,/* 0xA0-0xA7 */ + 0x9774,0xFA0B,0x64F4,0x652B,0x78BA,0x78BB,0x7A6B,0x4E38,/* 0xA8-0xAF */ + 0x559A,0x5950,0x5BA6,0x5E7B,0x60A3,0x63DB,0x6B61,0x6665,/* 0xB0-0xB7 */ + 0x6853,0x6E19,0x7165,0x74B0,0x7D08,0x9084,0x9A69,0x9C25,/* 0xB8-0xBF */ + 0x6D3B,0x6ED1,0x733E,0x8C41,0x95CA,0x51F0,0x5E4C,0x5FA8,/* 0xC0-0xC7 */ + 0x604D,0x60F6,0x6130,0x614C,0x6643,0x6644,0x69A5,0x6CC1,/* 0xC8-0xCF */ + 0x6E5F,0x6EC9,0x6F62,0x714C,0x749C,0x7687,0x7BC1,0x7C27,/* 0xD0-0xD7 */ + 0x8352,0x8757,0x9051,0x968D,0x9EC3,0x532F,0x56DE,0x5EFB,/* 0xD8-0xDF */ + 0x5F8A,0x6062,0x6094,0x61F7,0x6666,0x6703,0x6A9C,0x6DEE,/* 0xE0-0xE7 */ + 0x6FAE,0x7070,0x736A,0x7E6A,0x81BE,0x8334,0x86D4,0x8AA8,/* 0xE8-0xEF */ + 0x8CC4,0x5283,0x7372,0x5B96,0x6A6B,0x9404,0x54EE,0x5686,/* 0xF0-0xF7 */ + 0x5B5D,0x6548,0x6585,0x66C9,0x689F,0x6D8D,0x6DC6,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_FD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x40-0x47 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x48-0x4F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x50-0x57 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x58-0x5F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x60-0x67 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x68-0x6F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x70-0x77 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x723B,0x80B4,0x9175,0x9A4D,0x4FAF,0x5019,0x539A,/* 0xA0-0xA7 */ + 0x540E,0x543C,0x5589,0x55C5,0x5E3F,0x5F8C,0x673D,0x7166,/* 0xA8-0xAF */ + 0x73DD,0x9005,0x52DB,0x52F3,0x5864,0x58CE,0x7104,0x718F,/* 0xB0-0xB7 */ + 0x71FB,0x85B0,0x8A13,0x6688,0x85A8,0x55A7,0x6684,0x714A,/* 0xB8-0xBF */ + 0x8431,0x5349,0x5599,0x6BC1,0x5F59,0x5FBD,0x63EE,0x6689,/* 0xC0-0xC7 */ + 0x7147,0x8AF1,0x8F1D,0x9EBE,0x4F11,0x643A,0x70CB,0x7566,/* 0xC8-0xCF */ + 0x8667,0x6064,0x8B4E,0x9DF8,0x5147,0x51F6,0x5308,0x6D36,/* 0xD0-0xD7 */ + 0x80F8,0x9ED1,0x6615,0x6B23,0x7098,0x75D5,0x5403,0x5C79,/* 0xD8-0xDF */ + 0x7D07,0x8A16,0x6B20,0x6B3D,0x6B46,0x5438,0x6070,0x6D3D,/* 0xE0-0xE7 */ + 0x7FD5,0x8208,0x50D6,0xFA15,0x559C,0x566B,0x56CD,0x59EC,/* 0xE8-0xEF */ + 0x5B09,0x5E0C,0x6199,0x6198,0x6231,0x665E,0x66E6,0x7199,/* 0xF0-0xF7 */ + 0x71B9,0x71BA,0x72A7,0x79A7,0x7A00,0x7FB2,0x8A70,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_81, c2u_82, c2u_83, c2u_84, c2u_85, c2u_86, c2u_87, + c2u_88, c2u_89, c2u_8A, c2u_8B, c2u_8C, c2u_8D, c2u_8E, c2u_8F, + c2u_90, c2u_91, c2u_92, c2u_93, c2u_94, c2u_95, c2u_96, c2u_97, + c2u_98, c2u_99, c2u_9A, c2u_9B, c2u_9C, c2u_9D, c2u_9E, c2u_9F, + c2u_A0, c2u_A1, c2u_A2, c2u_A3, c2u_A4, c2u_A5, c2u_A6, c2u_A7, + c2u_A8, c2u_A9, c2u_AA, c2u_AB, c2u_AC, c2u_AD, c2u_AE, c2u_AF, + c2u_B0, c2u_B1, c2u_B2, c2u_B3, c2u_B4, c2u_B5, c2u_B6, c2u_B7, + c2u_B8, c2u_B9, c2u_BA, c2u_BB, c2u_BC, c2u_BD, c2u_BE, c2u_BF, + c2u_C0, c2u_C1, c2u_C2, c2u_C3, c2u_C4, c2u_C5, c2u_C6, c2u_C7, + c2u_C8, NULL, c2u_CA, c2u_CB, c2u_CC, c2u_CD, c2u_CE, c2u_CF, + c2u_D0, c2u_D1, c2u_D2, c2u_D3, c2u_D4, c2u_D5, c2u_D6, c2u_D7, + c2u_D8, c2u_D9, c2u_DA, c2u_DB, c2u_DC, c2u_DD, c2u_DE, c2u_DF, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, c2u_EB, c2u_EC, c2u_ED, c2u_EE, c2u_EF, + c2u_F0, c2u_F1, c2u_F2, c2u_F3, c2u_F4, c2u_F5, c2u_F6, c2u_F7, + c2u_F8, c2u_F9, c2u_FA, c2u_FB, c2u_FC, c2u_FD, NULL, NULL, +}; + +static unsigned char u2c_01[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xA9, 0xA2, 0xA9, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA4, 0xA9, 0xA4, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xA9, 0xA5, 0xA8, 0xA6, 0xA9, 0xA6, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xA9, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA8, /* 0x3C-0x3F */ + 0xA9, 0xA8, 0xA8, 0xA9, 0xA9, 0xA9, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xA9, 0xB0, 0xA8, 0xAF, 0xA9, 0xAF, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAB, 0xA9, 0xAB, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAE, 0xA9, 0xAE, /* 0x64-0x67 */ +}; + +static unsigned char u2c_02[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xA7, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xA2, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xA2, 0xA8, 0xA2, 0xAB, 0xA2, 0xAA, 0xA2, 0xAD, /* 0xD8-0xDB */ + 0x00, 0x00, 0xA2, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ +}; + +static unsigned char u2c_03[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xA5, 0xC1, 0xA5, 0xC2, 0xA5, 0xC3, /* 0x90-0x93 */ + 0xA5, 0xC4, 0xA5, 0xC5, 0xA5, 0xC6, 0xA5, 0xC7, /* 0x94-0x97 */ + 0xA5, 0xC8, 0xA5, 0xC9, 0xA5, 0xCA, 0xA5, 0xCB, /* 0x98-0x9B */ + 0xA5, 0xCC, 0xA5, 0xCD, 0xA5, 0xCE, 0xA5, 0xCF, /* 0x9C-0x9F */ + 0xA5, 0xD0, 0xA5, 0xD1, 0x00, 0x00, 0xA5, 0xD2, /* 0xA0-0xA3 */ + 0xA5, 0xD3, 0xA5, 0xD4, 0xA5, 0xD5, 0xA5, 0xD6, /* 0xA4-0xA7 */ + 0xA5, 0xD7, 0xA5, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xA5, 0xE1, 0xA5, 0xE2, 0xA5, 0xE3, /* 0xB0-0xB3 */ + 0xA5, 0xE4, 0xA5, 0xE5, 0xA5, 0xE6, 0xA5, 0xE7, /* 0xB4-0xB7 */ + 0xA5, 0xE8, 0xA5, 0xE9, 0xA5, 0xEA, 0xA5, 0xEB, /* 0xB8-0xBB */ + 0xA5, 0xEC, 0xA5, 0xED, 0xA5, 0xEE, 0xA5, 0xEF, /* 0xBC-0xBF */ + 0xA5, 0xF0, 0xA5, 0xF1, 0x00, 0x00, 0xA5, 0xF2, /* 0xC0-0xC3 */ + 0xA5, 0xF3, 0xA5, 0xF4, 0xA5, 0xF5, 0xA5, 0xF6, /* 0xC4-0xC7 */ + 0xA5, 0xF7, 0xA5, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ +}; + +static unsigned char u2c_04[512] = { + 0x00, 0x00, 0xAC, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xAC, 0xA1, 0xAC, 0xA2, 0xAC, 0xA3, 0xAC, 0xA4, /* 0x10-0x13 */ + 0xAC, 0xA5, 0xAC, 0xA6, 0xAC, 0xA8, 0xAC, 0xA9, /* 0x14-0x17 */ + 0xAC, 0xAA, 0xAC, 0xAB, 0xAC, 0xAC, 0xAC, 0xAD, /* 0x18-0x1B */ + 0xAC, 0xAE, 0xAC, 0xAF, 0xAC, 0xB0, 0xAC, 0xB1, /* 0x1C-0x1F */ + 0xAC, 0xB2, 0xAC, 0xB3, 0xAC, 0xB4, 0xAC, 0xB5, /* 0x20-0x23 */ + 0xAC, 0xB6, 0xAC, 0xB7, 0xAC, 0xB8, 0xAC, 0xB9, /* 0x24-0x27 */ + 0xAC, 0xBA, 0xAC, 0xBB, 0xAC, 0xBC, 0xAC, 0xBD, /* 0x28-0x2B */ + 0xAC, 0xBE, 0xAC, 0xBF, 0xAC, 0xC0, 0xAC, 0xC1, /* 0x2C-0x2F */ + 0xAC, 0xD1, 0xAC, 0xD2, 0xAC, 0xD3, 0xAC, 0xD4, /* 0x30-0x33 */ + 0xAC, 0xD5, 0xAC, 0xD6, 0xAC, 0xD8, 0xAC, 0xD9, /* 0x34-0x37 */ + 0xAC, 0xDA, 0xAC, 0xDB, 0xAC, 0xDC, 0xAC, 0xDD, /* 0x38-0x3B */ + 0xAC, 0xDE, 0xAC, 0xDF, 0xAC, 0xE0, 0xAC, 0xE1, /* 0x3C-0x3F */ + 0xAC, 0xE2, 0xAC, 0xE3, 0xAC, 0xE4, 0xAC, 0xE5, /* 0x40-0x43 */ + 0xAC, 0xE6, 0xAC, 0xE7, 0xAC, 0xE8, 0xAC, 0xE9, /* 0x44-0x47 */ + 0xAC, 0xEA, 0xAC, 0xEB, 0xAC, 0xEC, 0xAC, 0xED, /* 0x48-0x4B */ + 0xAC, 0xEE, 0xAC, 0xEF, 0xAC, 0xF0, 0xAC, 0xF1, /* 0x4C-0x4F */ + 0x00, 0x00, 0xAC, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ +}; + +static unsigned char u2c_11[512] = { + 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA4, 0xA4, 0xA7, /* 0x00-0x03 */ + 0xA4, 0xA8, 0xA4, 0xA9, 0xA4, 0xB1, 0xA4, 0xB2, /* 0x04-0x07 */ + 0xA4, 0xB3, 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB7, /* 0x08-0x0B */ + 0xA4, 0xB8, 0xA4, 0xB9, 0xA4, 0xBA, 0xA4, 0xBB, /* 0x0C-0x0F */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0x00, 0x00, /* 0x10-0x13 */ + 0xA4, 0xD5, 0xA4, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xDD, 0x00, 0x00, /* 0x18-0x1B */ + 0xA4, 0xDE, 0xA4, 0xE1, 0xA4, 0xE2, 0x00, 0x00, /* 0x1C-0x1F */ + 0xA4, 0xE3, 0xA4, 0xB4, 0xA4, 0xE4, 0xA4, 0xE5, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xE6, /* 0x24-0x27 */ + 0x00, 0x00, 0xA4, 0xE7, 0x00, 0x00, 0xA4, 0xE8, /* 0x28-0x2B */ + 0xA4, 0xE9, 0xA4, 0xEA, 0xA4, 0xEB, 0xA4, 0xEC, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xED, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xEE, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB5, 0xA4, 0xB6, /* 0x3C-0x3F */ + 0xA4, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xA4, 0xF2, 0xA4, 0xF3, 0xA4, 0xF0, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xA4, 0xB7, 0x00, 0x00, 0xA4, 0xB8, 0xA4, 0xB9, /* 0x4C-0x4F */ + 0xA4, 0xB8, 0xA4, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xA4, 0xBA, 0xA4, 0xBA, 0x00, 0x00, 0xA4, 0xF4, /* 0x54-0x57 */ + 0xA4, 0xF5, 0xA4, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xD4, /* 0x5C-0x5F */ + 0x00, 0x00, 0xA4, 0xBF, 0xA4, 0xC0, 0xA4, 0xC1, /* 0x60-0x63 */ + 0xA4, 0xC2, 0xA4, 0xC3, 0xA4, 0xC4, 0xA4, 0xC5, /* 0x64-0x67 */ + 0xA4, 0xC6, 0xA4, 0xC7, 0xA4, 0xC8, 0xA4, 0xC9, /* 0x68-0x6B */ + 0xA4, 0xCA, 0xA4, 0xCB, 0xA4, 0xCC, 0xA4, 0xCD, /* 0x6C-0x6F */ + 0xA4, 0xCE, 0xA4, 0xCF, 0xA4, 0xD0, 0xA4, 0xD1, /* 0x70-0x73 */ + 0xA4, 0xD2, 0xA4, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xA4, 0xF7, 0xA4, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xA4, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xA4, 0xFA, 0xA4, 0xFB, 0x00, 0x00, /* 0x90-0x93 */ + 0xA4, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xFD, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xA4, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA3, 0xA4, 0xA4, /* 0xA8-0xAB */ + 0xA4, 0xA5, 0xA4, 0xA6, 0xA4, 0xA7, 0xA4, 0xA9, /* 0xAC-0xAF */ + 0xA4, 0xAA, 0xA4, 0xAB, 0xA4, 0xAC, 0xA4, 0xAD, /* 0xB0-0xB3 */ + 0xA4, 0xAE, 0xA4, 0xAF, 0xA4, 0xB0, 0xA4, 0xB1, /* 0xB4-0xB7 */ + 0xA4, 0xB2, 0xA4, 0xB4, 0xA4, 0xB5, 0xA4, 0xB6, /* 0xB8-0xBB */ + 0xA4, 0xB7, 0xA4, 0xB8, 0xA4, 0xBA, 0xA4, 0xBB, /* 0xBC-0xBF */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xD6, 0xA4, 0xD7, /* 0xC4-0xC7 */ + 0xA4, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xA4, 0xD9, 0x00, 0x00, 0xA4, 0xDA, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xDB, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xDC, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xA4, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xA4, 0xDE, 0xA4, 0xDF, 0x00, 0x00, 0xA4, 0xE0, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xE8, 0xA4, 0xEA, /* 0xE4-0xE7 */ + 0xA4, 0xEC, 0x00, 0x00, 0xA4, 0xED, 0xA4, 0xEF, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xF0, 0x00, 0x00, /* 0xEC-0xEF */ + 0xA4, 0xB7, 0xA4, 0xF2, 0xA4, 0xF3, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xA4, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xA4, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_20[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xA1, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xA1, 0xAE, 0xA1, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xA1, 0xB0, 0xA1, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xA2, 0xD3, 0xA2, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xA1, 0xA5, 0xA1, 0xA6, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA2, 0xB6, 0x00, 0x00, 0xA1, 0xC7, 0xA1, 0xC8, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD8, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xA9, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xFA, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xA9, 0xFB, 0xA9, 0xFC, 0xA9, 0xFD, /* 0x80-0x83 */ + 0xA9, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ +}; + +static unsigned char u2c_21[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xC9, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xA2, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xA4, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0xE0, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xA2, 0xE5, 0xA2, 0xE2, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0xD9, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xCA, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xF7, /* 0x50-0x53 */ + 0xA8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xFB, /* 0x58-0x5B */ + 0xA8, 0xFC, 0xA8, 0xFD, 0xA8, 0xFE, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA5, 0xB0, 0xA5, 0xB1, 0xA5, 0xB2, 0xA5, 0xB3, /* 0x60-0x63 */ + 0xA5, 0xB4, 0xA5, 0xB5, 0xA5, 0xB6, 0xA5, 0xB7, /* 0x64-0x67 */ + 0xA5, 0xB8, 0xA5, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xA5, 0xA1, 0xA5, 0xA2, 0xA5, 0xA3, 0xA5, 0xA4, /* 0x70-0x73 */ + 0xA5, 0xA5, 0xA5, 0xA6, 0xA5, 0xA7, 0xA5, 0xA8, /* 0x74-0x77 */ + 0xA5, 0xA9, 0xA5, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xA1, 0xE7, 0xA1, 0xE8, 0xA1, 0xE6, 0xA1, 0xE9, /* 0x90-0x93 */ + 0xA1, 0xEA, 0xA2, 0xD5, 0xA2, 0xD8, 0xA2, 0xD6, /* 0x94-0x97 */ + 0xA2, 0xD9, 0xA2, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0xA1, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xA2, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ +}; + +static unsigned char u2c_22[512] = { + 0xA2, 0xA3, 0x00, 0x00, 0xA1, 0xD3, 0xA2, 0xA4, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD4, /* 0x04-0x07 */ + 0xA1, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF5, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xB3, /* 0x0C-0x0F */ + 0x00, 0x00, 0xA2, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xEE, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xA1, 0xF0, 0xA1, 0xC4, 0x00, 0x00, /* 0x1C-0x1F */ + 0xA1, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xA1, 0xAB, 0x00, 0x00, 0xA1, 0xFC, /* 0x24-0x27 */ + 0xA1, 0xFD, 0xA1, 0xFB, 0xA1, 0xFA, 0xA1, 0xF2, /* 0x28-0x2B */ + 0xA1, 0xF3, 0x00, 0x00, 0xA2, 0xB1, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xA1, 0xC5, 0xA1, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xA1, 0xAD, 0xA1, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD6, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA1, 0xC1, 0xA1, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xA1, 0xC2, 0xA1, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xEC, 0xA1, 0xED, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF8, 0xA1, 0xF9, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF6, 0xA1, 0xF7, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xA2, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xA1, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ +}; + +static unsigned char u2c_23[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD2, 0x00, 0x00, /* 0x10-0x13 */ +}; + +static unsigned char u2c_24[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA8, 0xE7, 0xA8, 0xE8, 0xA8, 0xE9, 0xA8, 0xEA, /* 0x60-0x63 */ + 0xA8, 0xEB, 0xA8, 0xEC, 0xA8, 0xED, 0xA8, 0xEE, /* 0x64-0x67 */ + 0xA8, 0xEF, 0xA8, 0xF0, 0xA8, 0xF1, 0xA8, 0xF2, /* 0x68-0x6B */ + 0xA8, 0xF3, 0xA8, 0xF4, 0xA8, 0xF5, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xA9, 0xE7, 0xA9, 0xE8, 0xA9, 0xE9, 0xA9, 0xEA, /* 0x74-0x77 */ + 0xA9, 0xEB, 0xA9, 0xEC, 0xA9, 0xED, 0xA9, 0xEE, /* 0x78-0x7B */ + 0xA9, 0xEF, 0xA9, 0xF0, 0xA9, 0xF1, 0xA9, 0xF2, /* 0x7C-0x7F */ + + 0xA9, 0xF3, 0xA9, 0xF4, 0xA9, 0xF5, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xA9, 0xCD, 0xA9, 0xCE, 0xA9, 0xCF, 0xA9, 0xD0, /* 0x9C-0x9F */ + 0xA9, 0xD1, 0xA9, 0xD2, 0xA9, 0xD3, 0xA9, 0xD4, /* 0xA0-0xA3 */ + 0xA9, 0xD5, 0xA9, 0xD6, 0xA9, 0xD7, 0xA9, 0xD8, /* 0xA4-0xA7 */ + 0xA9, 0xD9, 0xA9, 0xDA, 0xA9, 0xDB, 0xA9, 0xDC, /* 0xA8-0xAB */ + 0xA9, 0xDD, 0xA9, 0xDE, 0xA9, 0xDF, 0xA9, 0xE0, /* 0xAC-0xAF */ + 0xA9, 0xE1, 0xA9, 0xE2, 0xA9, 0xE3, 0xA9, 0xE4, /* 0xB0-0xB3 */ + 0xA9, 0xE5, 0xA9, 0xE6, 0xA8, 0xCD, 0xA8, 0xCE, /* 0xB4-0xB7 */ + 0xA8, 0xCF, 0xA8, 0xD0, 0xA8, 0xD1, 0xA8, 0xD2, /* 0xB8-0xBB */ + 0xA8, 0xD3, 0xA8, 0xD4, 0xA8, 0xD5, 0xA8, 0xD6, /* 0xBC-0xBF */ + 0xA8, 0xD7, 0xA8, 0xD8, 0xA8, 0xD9, 0xA8, 0xDA, /* 0xC0-0xC3 */ + 0xA8, 0xDB, 0xA8, 0xDC, 0xA8, 0xDD, 0xA8, 0xDE, /* 0xC4-0xC7 */ + 0xA8, 0xDF, 0xA8, 0xE0, 0xA8, 0xE1, 0xA8, 0xE2, /* 0xC8-0xCB */ + 0xA8, 0xE3, 0xA8, 0xE4, 0xA8, 0xE5, 0xA8, 0xE6, /* 0xCC-0xCF */ + 0xA8, 0xCD, 0xA8, 0xCE, 0xA8, 0xCF, 0xA8, 0xD0, /* 0xD0-0xD3 */ + 0xA8, 0xD1, 0xA8, 0xD2, 0xA8, 0xD3, 0xA8, 0xD4, /* 0xD4-0xD7 */ + 0xA8, 0xD5, 0xA8, 0xD6, 0xA8, 0xD7, 0xA8, 0xD8, /* 0xD8-0xDB */ + 0xA8, 0xD9, 0xA8, 0xDA, 0xA8, 0xDB, 0xA8, 0xDC, /* 0xDC-0xDF */ + 0xA8, 0xDD, 0xA8, 0xDE, 0xA8, 0xDF, 0xA8, 0xE0, /* 0xE0-0xE3 */ + 0xA8, 0xE1, 0xA8, 0xE2, 0xA8, 0xE3, 0xA8, 0xE4, /* 0xE4-0xE7 */ + 0xA8, 0xE5, 0xA8, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ +}; + +static unsigned char u2c_25[512] = { + 0xA6, 0xA1, 0xA6, 0xAC, 0xA6, 0xA2, 0xA6, 0xAD, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xA6, 0xA3, 0xA6, 0xC8, 0xA6, 0xC7, 0xA6, 0xAE, /* 0x0C-0x0F */ + 0xA6, 0xA4, 0xA6, 0xC2, 0xA6, 0xC1, 0xA6, 0xAF, /* 0x10-0x13 */ + 0xA6, 0xA6, 0xA6, 0xC6, 0xA6, 0xC5, 0xA6, 0xB1, /* 0x14-0x17 */ + 0xA6, 0xA5, 0xA6, 0xC4, 0xA6, 0xC3, 0xA6, 0xB0, /* 0x18-0x1B */ + 0xA6, 0xA7, 0xA6, 0xBC, 0xA6, 0xC9, 0xA6, 0xCA, /* 0x1C-0x1F */ + 0xA6, 0xB7, 0xA6, 0xCB, 0xA6, 0xCC, 0xA6, 0xB2, /* 0x20-0x23 */ + 0xA6, 0xA9, 0xA6, 0xBE, 0xA6, 0xCD, 0xA6, 0xCE, /* 0x24-0x27 */ + 0xA6, 0xB9, 0xA6, 0xCF, 0xA6, 0xD0, 0xA6, 0xB4, /* 0x28-0x2B */ + 0xA6, 0xA8, 0xA6, 0xD1, 0xA6, 0xD2, 0xA6, 0xB8, /* 0x2C-0x2F */ + 0xA6, 0xBD, 0xA6, 0xD3, 0xA6, 0xD4, 0xA6, 0xB3, /* 0x30-0x33 */ + 0xA6, 0xAA, 0xA6, 0xD5, 0xA6, 0xD6, 0xA6, 0xBA, /* 0x34-0x37 */ + 0xA6, 0xBF, 0xA6, 0xD7, 0xA6, 0xD8, 0xA6, 0xB5, /* 0x38-0x3B */ + 0xA6, 0xAB, 0xA6, 0xD9, 0xA6, 0xDA, 0xA6, 0xBB, /* 0x3C-0x3F */ + 0xA6, 0xDB, 0xA6, 0xDC, 0xA6, 0xC0, 0xA6, 0xDD, /* 0x40-0x43 */ + 0xA6, 0xDE, 0xA6, 0xDF, 0xA6, 0xE0, 0xA6, 0xE1, /* 0x44-0x47 */ + 0xA6, 0xE2, 0xA6, 0xE3, 0xA6, 0xE4, 0xA6, 0xB6, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0xC6, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xA1, 0xE1, 0xA1, 0xE0, 0x00, 0x00, 0xA2, 0xC3, /* 0xA0-0xA3 */ + 0xA2, 0xC7, 0xA2, 0xC8, 0xA2, 0xCB, 0xA2, 0xCA, /* 0xA4-0xA7 */ + 0xA2, 0xC9, 0xA2, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xE3, 0xA1, 0xE2, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0xBA, 0xA2, 0xB9, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xA1, 0xE5, 0xA1, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xA2, 0xB8, 0xA2, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xDF, 0xA1, 0xDE, /* 0xC4-0xC7 */ + 0xA2, 0xC2, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xDB, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xDD, 0xA1, 0xDC, /* 0xCC-0xCF */ + 0xA2, 0xC4, 0xA2, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ +}; + +static unsigned char u2c_26[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA1, 0xDA, 0xA1, 0xD9, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0xCF, 0xA2, 0xCE, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xA2, 0xD0, 0x00, 0x00, 0xA2, 0xD1, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xA1, 0xCF, 0x00, 0x00, 0xA1, 0xCE, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA2, 0xBC, 0xA2, 0xBD, 0x00, 0x00, 0xA2, 0xC0, /* 0x60-0x63 */ + 0xA2, 0xBB, 0xA2, 0xBE, 0x00, 0x00, 0xA2, 0xBF, /* 0x64-0x67 */ + 0xA2, 0xCD, 0xA2, 0xDB, 0xA2, 0xDC, 0x00, 0x00, /* 0x68-0x6B */ + 0xA2, 0xDD, 0xA2, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ +}; + +static unsigned char u2c_30[512] = { + 0xA1, 0xA1, 0xA1, 0xA2, 0xA1, 0xA3, 0xA1, 0xA8, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xA1, 0xB4, 0xA1, 0xB5, 0xA1, 0xB6, 0xA1, 0xB7, /* 0x08-0x0B */ + 0xA1, 0xB8, 0xA1, 0xB9, 0xA1, 0xBA, 0xA1, 0xBB, /* 0x0C-0x0F */ + 0xA1, 0xBC, 0xA1, 0xBD, 0x00, 0x00, 0xA1, 0xEB, /* 0x10-0x13 */ + 0xA1, 0xB2, 0xA1, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xAA, 0xA1, 0xAA, 0xA2, 0xAA, 0xA3, /* 0x40-0x43 */ + 0xAA, 0xA4, 0xAA, 0xA5, 0xAA, 0xA6, 0xAA, 0xA7, /* 0x44-0x47 */ + 0xAA, 0xA8, 0xAA, 0xA9, 0xAA, 0xAA, 0xAA, 0xAB, /* 0x48-0x4B */ + 0xAA, 0xAC, 0xAA, 0xAD, 0xAA, 0xAE, 0xAA, 0xAF, /* 0x4C-0x4F */ + 0xAA, 0xB0, 0xAA, 0xB1, 0xAA, 0xB2, 0xAA, 0xB3, /* 0x50-0x53 */ + 0xAA, 0xB4, 0xAA, 0xB5, 0xAA, 0xB6, 0xAA, 0xB7, /* 0x54-0x57 */ + 0xAA, 0xB8, 0xAA, 0xB9, 0xAA, 0xBA, 0xAA, 0xBB, /* 0x58-0x5B */ + 0xAA, 0xBC, 0xAA, 0xBD, 0xAA, 0xBE, 0xAA, 0xBF, /* 0x5C-0x5F */ + 0xAA, 0xC0, 0xAA, 0xC1, 0xAA, 0xC2, 0xAA, 0xC3, /* 0x60-0x63 */ + 0xAA, 0xC4, 0xAA, 0xC5, 0xAA, 0xC6, 0xAA, 0xC7, /* 0x64-0x67 */ + 0xAA, 0xC8, 0xAA, 0xC9, 0xAA, 0xCA, 0xAA, 0xCB, /* 0x68-0x6B */ + 0xAA, 0xCC, 0xAA, 0xCD, 0xAA, 0xCE, 0xAA, 0xCF, /* 0x6C-0x6F */ + 0xAA, 0xD0, 0xAA, 0xD1, 0xAA, 0xD2, 0xAA, 0xD3, /* 0x70-0x73 */ + 0xAA, 0xD4, 0xAA, 0xD5, 0xAA, 0xD6, 0xAA, 0xD7, /* 0x74-0x77 */ + 0xAA, 0xD8, 0xAA, 0xD9, 0xAA, 0xDA, 0xAA, 0xDB, /* 0x78-0x7B */ + 0xAA, 0xDC, 0xAA, 0xDD, 0xAA, 0xDE, 0xAA, 0xDF, /* 0x7C-0x7F */ + + 0xAA, 0xE0, 0xAA, 0xE1, 0xAA, 0xE2, 0xAA, 0xE3, /* 0x80-0x83 */ + 0xAA, 0xE4, 0xAA, 0xE5, 0xAA, 0xE6, 0xAA, 0xE7, /* 0x84-0x87 */ + 0xAA, 0xE8, 0xAA, 0xE9, 0xAA, 0xEA, 0xAA, 0xEB, /* 0x88-0x8B */ + 0xAA, 0xEC, 0xAA, 0xED, 0xAA, 0xEE, 0xAA, 0xEF, /* 0x8C-0x8F */ + 0xAA, 0xF0, 0xAA, 0xF1, 0xAA, 0xF2, 0xAA, 0xF3, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xAB, 0xA1, 0xAB, 0xA2, 0xAB, 0xA3, /* 0xA0-0xA3 */ + 0xAB, 0xA4, 0xAB, 0xA5, 0xAB, 0xA6, 0xAB, 0xA7, /* 0xA4-0xA7 */ + 0xAB, 0xA8, 0xAB, 0xA9, 0xAB, 0xAA, 0xAB, 0xAB, /* 0xA8-0xAB */ + 0xAB, 0xAC, 0xAB, 0xAD, 0xAB, 0xAE, 0xAB, 0xAF, /* 0xAC-0xAF */ + 0xAB, 0xB0, 0xAB, 0xB1, 0xAB, 0xB2, 0xAB, 0xB3, /* 0xB0-0xB3 */ + 0xAB, 0xB4, 0xAB, 0xB5, 0xAB, 0xB6, 0xAB, 0xB7, /* 0xB4-0xB7 */ + 0xAB, 0xB8, 0xAB, 0xB9, 0xAB, 0xBA, 0xAB, 0xBB, /* 0xB8-0xBB */ + 0xAB, 0xBC, 0xAB, 0xBD, 0xAB, 0xBE, 0xAB, 0xBF, /* 0xBC-0xBF */ + 0xAB, 0xC0, 0xAB, 0xC1, 0xAB, 0xC2, 0xAB, 0xC3, /* 0xC0-0xC3 */ + 0xAB, 0xC4, 0xAB, 0xC5, 0xAB, 0xC6, 0xAB, 0xC7, /* 0xC4-0xC7 */ + 0xAB, 0xC8, 0xAB, 0xC9, 0xAB, 0xCA, 0xAB, 0xCB, /* 0xC8-0xCB */ + 0xAB, 0xCC, 0xAB, 0xCD, 0xAB, 0xCE, 0xAB, 0xCF, /* 0xCC-0xCF */ + 0xAB, 0xD0, 0xAB, 0xD1, 0xAB, 0xD2, 0xAB, 0xD3, /* 0xD0-0xD3 */ + 0xAB, 0xD4, 0xAB, 0xD5, 0xAB, 0xD6, 0xAB, 0xD7, /* 0xD4-0xD7 */ + 0xAB, 0xD8, 0xAB, 0xD9, 0xAB, 0xDA, 0xAB, 0xDB, /* 0xD8-0xDB */ + 0xAB, 0xDC, 0xAB, 0xDD, 0xAB, 0xDE, 0xAB, 0xDF, /* 0xDC-0xDF */ + 0xAB, 0xE0, 0xAB, 0xE1, 0xAB, 0xE2, 0xAB, 0xE3, /* 0xE0-0xE3 */ + 0xAB, 0xE4, 0xAB, 0xE5, 0xAB, 0xE6, 0xAB, 0xE7, /* 0xE4-0xE7 */ + 0xAB, 0xE8, 0xAB, 0xE9, 0xAB, 0xEA, 0xAB, 0xEB, /* 0xE8-0xEB */ + 0xAB, 0xEC, 0xAB, 0xED, 0xAB, 0xEE, 0xAB, 0xEF, /* 0xEC-0xEF */ + 0xAB, 0xF0, 0xAB, 0xF1, 0xAB, 0xF2, 0xAB, 0xF3, /* 0xF0-0xF3 */ + 0xAB, 0xF4, 0xAB, 0xF5, 0xAB, 0xF6, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_31[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA3, /* 0x30-0x33 */ + 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA6, 0xA4, 0xA7, /* 0x34-0x37 */ + 0xA4, 0xA8, 0xA4, 0xA9, 0xA4, 0xAA, 0xA4, 0xAB, /* 0x38-0x3B */ + 0xA4, 0xAC, 0xA4, 0xAD, 0xA4, 0xAE, 0xA4, 0xAF, /* 0x3C-0x3F */ + 0xA4, 0xB0, 0xA4, 0xB1, 0xA4, 0xB2, 0xA4, 0xB3, /* 0x40-0x43 */ + 0xA4, 0xB4, 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB7, /* 0x44-0x47 */ + 0xA4, 0xB8, 0xA4, 0xB9, 0xA4, 0xBA, 0xA4, 0xBB, /* 0x48-0x4B */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0xA4, 0xBF, /* 0x4C-0x4F */ + 0xA4, 0xC0, 0xA4, 0xC1, 0xA4, 0xC2, 0xA4, 0xC3, /* 0x50-0x53 */ + 0xA4, 0xC4, 0xA4, 0xC5, 0xA4, 0xC6, 0xA4, 0xC7, /* 0x54-0x57 */ + 0xA4, 0xC8, 0xA4, 0xC9, 0xA4, 0xCA, 0xA4, 0xCB, /* 0x58-0x5B */ + 0xA4, 0xCC, 0xA4, 0xCD, 0xA4, 0xCE, 0xA4, 0xCF, /* 0x5C-0x5F */ + 0xA4, 0xD0, 0xA4, 0xD1, 0xA4, 0xD2, 0xA4, 0xD3, /* 0x60-0x63 */ + 0xA4, 0xD4, 0xA4, 0xD5, 0xA4, 0xD6, 0xA4, 0xD7, /* 0x64-0x67 */ + 0xA4, 0xD8, 0xA4, 0xD9, 0xA4, 0xDA, 0xA4, 0xDB, /* 0x68-0x6B */ + 0xA4, 0xDC, 0xA4, 0xDD, 0xA4, 0xDE, 0xA4, 0xDF, /* 0x6C-0x6F */ + 0xA4, 0xE0, 0xA4, 0xE1, 0xA4, 0xE2, 0xA4, 0xE3, /* 0x70-0x73 */ + 0xA4, 0xE4, 0xA4, 0xE5, 0xA4, 0xE6, 0xA4, 0xE7, /* 0x74-0x77 */ + 0xA4, 0xE8, 0xA4, 0xE9, 0xA4, 0xEA, 0xA4, 0xEB, /* 0x78-0x7B */ + 0xA4, 0xEC, 0xA4, 0xED, 0xA4, 0xEE, 0xA4, 0xEF, /* 0x7C-0x7F */ + + 0xA4, 0xF0, 0xA4, 0xF1, 0xA4, 0xF2, 0xA4, 0xF3, /* 0x80-0x83 */ + 0xA4, 0xF4, 0xA4, 0xF5, 0xA4, 0xF6, 0xA4, 0xF7, /* 0x84-0x87 */ + 0xA4, 0xF8, 0xA4, 0xF9, 0xA4, 0xFA, 0xA4, 0xFB, /* 0x88-0x8B */ + 0xA4, 0xFC, 0xA4, 0xFD, 0xA4, 0xFE, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xE9, 0xEC, 0xA3, /* 0x90-0x93 */ + 0xDF, 0xB2, 0xDE, 0xCC, 0xDF, 0xBE, 0xF1, 0xE9, /* 0x94-0x97 */ + 0xF9, 0xBB, 0xCB, 0xA3, 0xEB, 0xE0, 0xDC, 0xB0, /* 0x98-0x9B */ + 0xEF, 0xCB, 0xF4, 0xB8, 0xF2, 0xA2, 0xEC, 0xD1, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_32[512] = { + 0xA9, 0xB1, 0xA9, 0xB2, 0xA9, 0xB3, 0xA9, 0xB4, /* 0x00-0x03 */ + 0xA9, 0xB5, 0xA9, 0xB6, 0xA9, 0xB7, 0xA9, 0xB8, /* 0x04-0x07 */ + 0xA9, 0xB9, 0xA9, 0xBA, 0xA9, 0xBB, 0xA9, 0xBC, /* 0x08-0x0B */ + 0xA9, 0xBD, 0xA9, 0xBE, 0xA9, 0xBF, 0xA9, 0xC0, /* 0x0C-0x0F */ + 0xA9, 0xC1, 0xA9, 0xC2, 0xA9, 0xC3, 0xA9, 0xC4, /* 0x10-0x13 */ + 0xA9, 0xC5, 0xA9, 0xC6, 0xA9, 0xC7, 0xA9, 0xC8, /* 0x14-0x17 */ + 0xA9, 0xC9, 0xA9, 0xCA, 0xA9, 0xCB, 0xA9, 0xCC, /* 0x18-0x1B */ + 0xA2, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xEC, 0xE9, 0xEC, 0xA3, 0xDF, 0xB2, 0xDE, 0xCC, /* 0x20-0x23 */ + 0xE7, 0xE9, 0xD7, 0xBF, 0xF6, 0xD2, 0xF8, 0xA2, /* 0x24-0x27 */ + 0xCE, 0xFA, 0xE4, 0xA8, 0xEA, 0xC5, 0xFB, 0xFD, /* 0x28-0x2B */ + 0xE2, 0xA9, 0xD9, 0xCA, 0xD1, 0xD1, 0xF7, 0xCF, /* 0x2C-0x2F */ + 0xEC, 0xED, 0xF1, 0xBB, 0xEA, 0xF3, 0xDE, 0xE4, /* 0x30-0x33 */ + 0xD9, 0xA3, 0xF7, 0xE5, 0xEE, 0xAF, 0xF5, 0xE6, /* 0x34-0x37 */ + 0xD6, 0xCC, 0xD3, 0xDB, 0xFB, 0xBC, 0xF9, 0xCA, /* 0x38-0x3B */ + 0xCA, 0xF8, 0xD0, 0xEA, 0xED, 0xC0, 0xFA, 0xF0, /* 0x3C-0x3F */ + 0xF0, 0xAE, 0xFD, 0xCC, 0xED, 0xBB, 0xF2, 0xB8, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA8, 0xB1, 0xA8, 0xB2, 0xA8, 0xB3, 0xA8, 0xB4, /* 0x60-0x63 */ + 0xA8, 0xB5, 0xA8, 0xB6, 0xA8, 0xB7, 0xA8, 0xB8, /* 0x64-0x67 */ + 0xA8, 0xB9, 0xA8, 0xBA, 0xA8, 0xBB, 0xA8, 0xBC, /* 0x68-0x6B */ + 0xA8, 0xBD, 0xA8, 0xBE, 0xA8, 0xBF, 0xA8, 0xC0, /* 0x6C-0x6F */ + 0xA8, 0xC1, 0xA8, 0xC2, 0xA8, 0xC3, 0xA8, 0xC4, /* 0x70-0x73 */ + 0xA8, 0xC5, 0xA8, 0xC6, 0xA8, 0xC7, 0xA8, 0xC8, /* 0x74-0x77 */ + 0xA8, 0xC9, 0xA8, 0xCA, 0xA8, 0xCB, 0xA8, 0xCC, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0xDE, /* 0x7C-0x7F */ + + 0xEC, 0xE9, 0xEC, 0xA3, 0xDF, 0xB2, 0xDE, 0xCC, /* 0x80-0x83 */ + 0xE7, 0xE9, 0xD7, 0xBF, 0xF6, 0xD2, 0xF8, 0xA2, /* 0x84-0x87 */ + 0xCE, 0xFA, 0xE4, 0xA8, 0xEA, 0xC5, 0xFB, 0xFD, /* 0x88-0x8B */ + 0xE2, 0xA9, 0xD9, 0xCA, 0xD1, 0xD1, 0xF7, 0xCF, /* 0x8C-0x8F */ + 0xEC, 0xED, 0xF1, 0xBB, 0xEA, 0xF3, 0xDE, 0xE4, /* 0x90-0x93 */ + 0xD9, 0xA3, 0xF7, 0xE5, 0xEE, 0xAF, 0xF5, 0xE6, /* 0x94-0x97 */ + 0xD6, 0xCC, 0xDD, 0xFA, 0xD1, 0xFB, 0xD2, 0xB3, /* 0x98-0x9B */ + 0xEE, 0xEA, 0xE9, 0xD0, 0xEC, 0xD4, 0xF1, 0xBC, /* 0x9C-0x9F */ + 0xFA, 0xA3, 0xFD, 0xCC, 0xDE, 0xD0, 0xEF, 0xE1, /* 0xA0-0xA3 */ + 0xDF, 0xBE, 0xF1, 0xE9, 0xF9, 0xBB, 0xF1, 0xA7, /* 0xA4-0xA7 */ + 0xE9, 0xD3, 0xEC, 0xA2, 0xF0, 0xF3, 0xF9, 0xCA, /* 0xA8-0xAB */ + 0xCA, 0xF8, 0xD0, 0xEA, 0xED, 0xC0, 0xFA, 0xF0, /* 0xAC-0xAF */ + 0xE5, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ +}; + +static unsigned char u2c_33[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xA7, 0xC9, 0xA7, 0xCA, 0xA7, 0xCB, 0xA7, 0xCC, /* 0x80-0x83 */ + 0xA7, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xA7, 0xBA, 0xA7, 0xBB, 0xA7, 0xDC, 0xA7, 0xDD, /* 0x88-0x8B */ + 0xA7, 0xDE, 0xA7, 0xB6, 0xA7, 0xB7, 0xA7, 0xB8, /* 0x8C-0x8F */ + 0xA7, 0xD4, 0xA7, 0xD5, 0xA7, 0xD6, 0xA7, 0xD7, /* 0x90-0x93 */ + 0xA7, 0xD8, 0xA7, 0xA1, 0xA7, 0xA2, 0xA7, 0xA3, /* 0x94-0x97 */ + 0xA7, 0xA5, 0xA7, 0xAB, 0xA7, 0xAC, 0xA7, 0xAD, /* 0x98-0x9B */ + 0xA7, 0xAE, 0xA7, 0xAF, 0xA7, 0xB0, 0xA7, 0xB1, /* 0x9C-0x9F */ + 0xA7, 0xB2, 0xA7, 0xB3, 0xA7, 0xB4, 0xA7, 0xA7, /* 0xA0-0xA3 */ + 0xA7, 0xA8, 0xA7, 0xA9, 0xA7, 0xAA, 0xA7, 0xBD, /* 0xA4-0xA7 */ + 0xA7, 0xBE, 0xA7, 0xE5, 0xA7, 0xE6, 0xA7, 0xE7, /* 0xA8-0xAB */ + 0xA7, 0xE8, 0xA7, 0xE1, 0xA7, 0xE2, 0xA7, 0xE3, /* 0xAC-0xAF */ + 0xA7, 0xBF, 0xA7, 0xC0, 0xA7, 0xC1, 0xA7, 0xC2, /* 0xB0-0xB3 */ + 0xA7, 0xC3, 0xA7, 0xC4, 0xA7, 0xC5, 0xA7, 0xC6, /* 0xB4-0xB7 */ + 0xA7, 0xC7, 0xA7, 0xC8, 0xA7, 0xCE, 0xA7, 0xCF, /* 0xB8-0xBB */ + 0xA7, 0xD0, 0xA7, 0xD1, 0xA7, 0xD2, 0xA7, 0xD3, /* 0xBC-0xBF */ + 0xA7, 0xDA, 0xA7, 0xDB, 0xA2, 0xE3, 0xA7, 0xEC, /* 0xC0-0xC3 */ + 0xA7, 0xA6, 0xA7, 0xE0, 0xA7, 0xEF, 0xA2, 0xE1, /* 0xC4-0xC7 */ + 0xA7, 0xBC, 0xA7, 0xED, 0xA7, 0xB5, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xB9, /* 0xCC-0xCF */ + 0xA7, 0xEA, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xEB, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0xDF, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xA2, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xE4, /* 0xD8-0xDB */ + 0xA7, 0xEE, 0xA7, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ +}; + +static unsigned char u2c_4E[512] = { + 0xEC, 0xE9, 0xEF, 0xCB, 0x00, 0x00, 0xF6, 0xD2, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xB2, /* 0x04-0x07 */ + 0xED, 0xDB, 0xDF, 0xB2, 0xDF, 0xBE, 0xF9, 0xBB, /* 0x08-0x0B */ + 0x00, 0x00, 0xDC, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xF5, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xF3, 0xA6, 0xDD, 0xE0, 0xE1, 0xA6, 0x00, 0x00, /* 0x14-0x17 */ + 0xCE, 0xF8, 0xDC, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xAA, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xF1, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xFA, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xFC, 0xAF, 0xD3, 0xA1, 0x00, 0x00, 0xF1, 0xAB, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xD1, 0xD2, 0xAC, /* 0x40-0x43 */ + 0x00, 0x00, 0xCE, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFD, /* 0x48-0x4B */ + 0x00, 0x00, 0xDE, 0xBF, 0xFB, 0xBA, 0xF9, 0xB9, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xD2, 0x00, 0x00, /* 0x54-0x57 */ + 0xE3, 0xAB, 0xEB, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xCE, 0xFA, 0xCB, 0xF7, 0xE5, 0xA5, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xE1, /* 0x68-0x6B */ + 0x00, 0x00, 0xD4, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xE1, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xE3, 0xDF, 0xAD, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xEB, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xAF, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF5, 0x00, 0x00, /* 0x84-0x87 */ + 0xE5, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xC0, /* 0x88-0x8B */ + 0xEC, 0xA3, 0x00, 0x00, 0xE9, 0xCD, 0x00, 0x00, /* 0x8C-0x8F */ + 0xEA, 0xA7, 0xE9, 0xF6, 0xFB, 0xBB, 0x00, 0x00, /* 0x90-0x93 */ + 0xE7, 0xE9, 0xEF, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xD0, 0xE6, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xC1, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xAC, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xD8, 0xCC, 0xF9, 0xF1, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xCE, 0xDF, 0xFA, 0xA4, 0xE6, 0xB2, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xFA, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xBD, /* 0xA8-0xAB */ + 0xCC, 0xC8, 0xEF, 0xCD, 0xD5, 0xD5, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xA2, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xD1, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE4, 0xA7, 0xEC, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF6, 0xB1, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xFB, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xD1, 0xCB, 0xBF, /* 0xC8-0xCB */ + 0x00, 0x00, 0xED, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xED, 0xA8, 0xDE, 0xC2, 0xF6, 0xE2, 0xED, 0xDC, /* 0xD4-0xD7 */ + 0xDC, 0xF5, 0xE0, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xD4, 0xCE, 0x00, 0x00, 0xF4, 0xB5, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xDB, /* 0xE0-0xE3 */ + 0xD6, 0xB5, 0xEC, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE4, 0xE6, 0x00, 0x00, 0xF1, 0xEA, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xEC, 0xCB, 0xC0, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xF2, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_4F[512] = { + 0x00, 0x00, 0xD0, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xF9, 0xF2, 0xEC, 0xA5, 0xD0, 0xDF, /* 0x08-0x0B */ + 0x00, 0x00, 0xE7, 0xEA, 0xD0, 0xEB, 0xDC, 0xD1, /* 0x0C-0x0F */ + 0xDB, 0xE9, 0xFD, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xD7, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xDA, 0xE1, 0x00, 0x00, 0xD6, 0xB6, 0x00, 0x00, /* 0x34-0x37 */ + 0xE3, 0xDF, 0x00, 0x00, 0xDE, 0xC3, 0x00, 0x00, /* 0x38-0x3B */ + 0xDE, 0xC4, 0xCA, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xEC, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xA3, 0xEE, 0xB7, /* 0x44-0x47 */ + 0xF8, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xEA, 0xC8, 0xEE, 0xB8, 0xF1, 0xAC, /* 0x4C-0x4F */ + 0xF1, 0xA5, 0xE9, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xF9, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE5, 0xF9, 0xEC, 0xEA, 0xDD, 0xD6, /* 0x58-0x5B */ + 0xED, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xF8, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xBA, /* 0x6C-0x6F */ + 0xDB, 0xD8, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xA2, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xCD, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xED, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xEB, 0xDE, 0xC5, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE3, 0xE0, 0x00, 0x00, 0xCA, 0xC9, /* 0x80-0x83 */ + 0xF2, 0xE9, 0x00, 0x00, 0xD5, 0xCE, 0x00, 0x00, /* 0x84-0x87 */ + 0xF6, 0xB6, 0x00, 0x00, 0xCE, 0xC2, 0xD6, 0xC7, /* 0x88-0x8B */ + 0x00, 0x00, 0xE3, 0xB4, 0x00, 0x00, 0xF1, 0xAD, /* 0x8C-0x8F */ + 0x00, 0x00, 0xEA, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xC2, 0x00, 0x00, /* 0x94-0x97 */ + 0xF3, 0xA7, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xEA, /* 0x98-0x9B */ + 0x00, 0x00, 0xEB, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xB2, 0xFD, 0xA5, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF6, 0xD5, 0xD5, 0xE2, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB5, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xF5, 0xF5, 0xB5, /* 0xC0-0xC3 */ + 0xE4, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE7, 0xEB, 0xF1, 0xD5, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBB, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE9, 0xB5, 0x00, 0x00, 0xCC, 0xC9, /* 0xD0-0xD3 */ + 0xFA, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD4, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xD6, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xDC, 0xC1, 0x00, 0x00, 0xDE, 0xC6, /* 0xDC-0xDF */ + 0xFA, 0xEF, 0xE3, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF3, 0xDC, 0xF6, /* 0xEC-0xEF */ + 0x00, 0x00, 0xCE, 0xFC, 0x00, 0x00, 0xDB, 0xC4, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xF8, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xDC, 0xE4, 0x00, 0x00, 0xE5, 0xEF, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_50[512] = { + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB1, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xD6, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xF3, 0xDA, 0x00, 0x00, 0xCB, 0xC1, /* 0x08-0x0B */ + 0x00, 0x00, 0xDB, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xD9, 0xFA, 0xD3, 0xEE, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xB8, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xFD, 0xA6, 0xEB, 0xEF, 0x00, 0x00, /* 0x18-0x1B */ + 0xF4, 0xA6, 0x00, 0x00, 0xCC, 0xCA, 0xF3, 0xA8, /* 0x1C-0x1F */ + 0x00, 0x00, 0xF3, 0xDB, 0x00, 0x00, 0xDB, 0xA7, /* 0x20-0x23 */ + 0xF6, 0xB7, 0x00, 0x00, 0xCF, 0xE6, 0xF0, 0xF2, /* 0x24-0x27 */ + 0xCB, 0xDA, 0x00, 0x00, 0xE7, 0xD2, 0xD7, 0xC3, /* 0x28-0x2B */ + 0xF6, 0xF0, 0xE8, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA6, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE7, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xA3, /* 0x44-0x47 */ + 0xCC, 0xA7, 0xEA, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB6, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xFA, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xAE, 0x00, 0x00, /* 0x58-0x5B */ + 0xEF, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xCB, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xF6, 0xB0, 0xEF, 0xCF, 0xE9, 0xCF, 0x00, 0x00, /* 0x74-0x77 */ + 0xF7, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xCE, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xDC, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xDB, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xCB, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xDF, 0xA1, 0xDD, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xF5, 0xCA, 0xE9, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xEC, 0xEE, 0xEE, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF3, 0xF0, 0x00, 0x00, 0xDF, 0xBF, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCB, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xD0, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF4, 0xD2, 0xE0, 0xBA, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xC0, /* 0xCC-0xCF */ + 0x00, 0x00, 0xCE, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xDC, 0xD2, 0xFD, 0xEA, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF6, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xCA, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE8, 0xE9, 0x00, 0x00, 0xE3, 0xAC, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF3, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xCA, 0xA4, 0x00, 0x00, 0xDB, 0xF8, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xC7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0xEB, 0xF0, 0xF1, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xE5, 0xE2, 0x00, 0x00, 0xCC, 0xCC, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xCB, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xE3, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xC1, /* 0x1C-0x1F */ + 0x00, 0x00, 0xD6, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xD0, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xB9, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xE3, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xD3, 0x00, 0x00, /* 0x38-0x3B */ + 0xE5, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE8, 0xB4, 0xEB, 0xC3, 0x00, 0x00, 0xEA, 0xAA, /* 0x40-0x43 */ + 0xFA, 0xFC, 0xF5, 0xF6, 0xF0, 0xBC, 0xFD, 0xD4, /* 0x44-0x47 */ + 0xE0, 0xBB, 0xCE, 0xC3, 0x00, 0x00, 0xD0, 0xBA, /* 0x48-0x4B */ + 0xF7, 0xBA, 0xD8, 0xF3, 0xF7, 0xCD, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xAE, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xD4, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xE7, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xEC, 0xFD, 0x00, 0x00, 0xD2, 0xAE, /* 0x64-0x67 */ + 0xEE, 0xEF, 0xD5, 0xD7, 0xEA, 0xE4, 0xF8, 0xA2, /* 0x68-0x6B */ + 0xCD, 0xEB, 0xD7, 0xBF, 0xFB, 0xB1, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xCD, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xDC, 0xB2, 0xD0, 0xEC, 0xCE, 0xFD, /* 0x74-0x77 */ + 0xEE, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xCC, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xD0, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xF7, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFC, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xEE, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xB3, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xD8, 0xF4, 0x00, 0x00, 0xE9, 0xB7, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCE, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xD9, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xF1, 0x00, 0x00, /* 0xA8-0xAB */ + 0xD4, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA7, 0xD5, 0xD2, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD6, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF4, 0xA2, 0x00, 0x00, 0xF1, 0xD7, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xD5, 0xD8, 0x00, 0x00, 0xF0, 0xBD, /* 0xC8-0xCB */ + 0xD7, 0xD0, 0xD4, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD7, 0xCF, 0xEB, 0xEA, 0xFD, 0xEB, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xDB, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xFC, 0xC5, 0xCB, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD5, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xF4, 0xC8, 0xE8, 0xEA, 0xF5, 0xF3, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF9, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0xD3, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xD3, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xC2, 0xEF, 0xB7, /* 0x04-0x07 */ + 0xE7, 0xD4, 0x00, 0x00, 0xCA, 0xCA, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xFB, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xFA, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xAA, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xF4, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xF7, 0xF7, 0xDC, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xD7, 0xD7, 0xDF, 0xA2, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xBE, 0x00, 0x00, /* 0x2C-0x2F */ + 0xD3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xA4, 0xE1, 0xEC, /* 0x34-0x37 */ + 0xCF, 0xE7, 0xF3, 0xCB, 0xED, 0xA9, 0xCA, 0xBE, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xEF, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xCE, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xFB, 0xD0, 0xBB, /* 0x48-0x4B */ + 0xD5, 0xB7, 0xEE, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xF4, 0xA8, 0x00, 0x00, 0xDC, 0xF8, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xA7, /* 0x58-0x5B */ + 0x00, 0x00, 0xDA, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE0, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xED, 0xA5, 0xEE, 0xF2, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xF9, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDC, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xF3, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xF8, 0xF2, 0x00, 0x00, 0xF4, 0xF9, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF1, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xBC, /* 0x84-0x87 */ + 0xDB, 0xF9, 0xD7, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xCB, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF0, 0xA5, 0xCB, 0xFD, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xF4, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xED, /* 0x9C-0x9F */ + 0xCA, 0xA5, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xAB, /* 0xA0-0xA3 */ + 0xD0, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xF0, 0xBE, 0xD2, 0xBD, 0xCC, 0xA4, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xB6, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xCC, 0xCD, 0x00, 0x00, 0xDA, 0xFA, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xF6, 0xCF, 0x00, 0x00, 0xE9, 0xB8, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xD8, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xCD, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xD4, 0xD1, 0xE9, 0xED, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xCA, 0xEB, 0xD9, 0xE2, 0x00, 0x00, 0xFD, 0xB2, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE3, 0xAD, 0xD6, 0xCC, 0xD9, 0xB4, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA7, 0xEE, 0xD3, /* 0xE0-0xE3 */ + 0xD0, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB3, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xD5, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xCF, 0xE8, 0x00, 0x00, 0xED, 0xC3, 0xD0, 0xB2, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xFE, 0xDA, 0xA8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xF8, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xFD, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xF8, 0xD1, 0x00, 0x00, 0xF8, 0xD2, /* 0x0C-0x0F */ + 0xDC, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xDD, 0xE2, 0xFB, 0xF9, 0xDD, 0xC1, /* 0x14-0x17 */ + 0x00, 0x00, 0xE3, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xED, 0xDD, 0xCE, 0xC4, 0x00, 0x00, 0xCB, 0xA1, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xE3, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xDD, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xF9, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xFB, /* 0x3C-0x3F */ + 0xCF, 0xA1, 0xE4, 0xA8, 0x00, 0x00, 0xF4, 0xB6, /* 0x40-0x43 */ + 0xEC, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xAE, /* 0x44-0x47 */ + 0xE7, 0xED, 0xFD, 0xC1, 0xDA, 0xE2, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xD8, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xDD, 0xE4, 0xF0, 0xEF, 0xF6, 0xF1, /* 0x50-0x53 */ + 0xFA, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xF5, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xCF, 0x00, 0x00, /* 0x58-0x5B */ + 0xDC, 0xD4, 0x00, 0x00, 0xDC, 0xA6, 0x00, 0x00, /* 0x5C-0x5F */ + 0xEF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xCF, 0x00, 0x00, /* 0x64-0x67 */ + 0xE0, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xD6, /* 0x6C-0x6F */ + 0xEC, 0xD4, 0xEA, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xCA, 0xBF, 0xD5, 0xB0, 0x00, 0x00, 0xCF, 0xE9, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xF1, 0xED, 0x00, 0x00, 0xCC, 0xCF, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xE4, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xED, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xD7, 0xD8, 0x00, 0x00, 0xFD, 0xA7, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xAB, /* 0x9C-0x9F */ + 0xF6, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xCF, 0xF0, 0xF9, 0xBD, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE6, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xDB, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xD1, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE9, 0xD1, 0xF3, 0xA9, 0xD0, 0xE0, 0xE9, 0xD2, /* 0xC8-0xCB */ + 0x00, 0x00, 0xDA, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE2, 0xD2, 0x00, 0x00, 0xF6, 0xA2, 0xE1, 0xF4, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xE4, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE7, 0xD5, 0xF5, 0xBF, 0xCF, 0xA2, /* 0xE0-0xE3 */ + 0xCD, 0xAF, 0xCF, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xCD, 0xB0, 0xF1, 0xFE, 0xD0, 0xA3, /* 0xE8-0xEB */ + 0xE1, 0xAF, 0xF8, 0xA3, 0x00, 0x00, 0xCA, 0xA6, /* 0xEC-0xEF */ + 0xF7, 0xBB, 0xF2, 0xEA, 0xDE, 0xC8, 0xE9, 0xD3, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xDE, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_54[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xDE, /* 0x00-0x03 */ + 0xCA, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xF9, 0xEA, 0xD1, 0xCE, 0xEE, 0xD4, 0x00, 0x00, /* 0x08-0x0B */ + 0xD4, 0xD2, 0xD9, 0xA3, 0xFD, 0xA8, 0xD7, 0xD9, /* 0x0C-0x0F */ + 0xF7, 0xCE, 0xFA, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xD6, /* 0x18-0x1B */ + 0x00, 0x00, 0xD7, 0xF0, 0x00, 0x00, 0xEB, 0xE1, /* 0x1C-0x1F */ + 0xF8, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xFA, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xDD, 0xC3, 0x00, 0x00, 0xF9, 0xDF, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xEF, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xFD, 0xE5, 0xF6, 0xA3, 0x00, 0x00, 0xD9, 0xFC, /* 0x38-0x3B */ + 0xFD, 0xA9, 0x00, 0x00, 0xE7, 0xEE, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xE5, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xEF, 0xD0, 0x00, 0x00, 0xCD, 0xB1, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xF7, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF1, 0xB2, 0x00, 0x00, 0xF1, 0xB1, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xCD, 0xB2, 0x00, 0x00, 0xDA, 0xAB, /* 0x70-0x73 */ + 0x00, 0x00, 0xCA, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xE2, /* 0x78-0x7B */ + 0xFB, 0xBC, 0xD9, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xEE, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD3, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xFB, 0xFA, 0x00, 0x00, 0xCF, 0xA4, 0x00, 0x00, /* 0x8C-0x8F */ + 0xDC, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xF6, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xED, 0xAA, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA1, /* 0xA8-0xAB */ + 0xCE, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xA6, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xF9, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xEC, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE4, 0xEE, 0xF9, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xFB, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xF9, 0xEB, 0xEE, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xEA, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xCA, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF4, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xCD, 0xD6, 0xFC, 0xF6, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xC9, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD4, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_55[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xF8, 0xA6, 0x00, 0x00, 0xDE, 0xCA, 0xF2, 0xC6, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xDA, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xD8, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xE6, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF3, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE4, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xE4, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xF6, 0xF2, 0x00, 0x00, 0xDF, 0xC2, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xFD, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xF6, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xBA, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xAF, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xE1, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xF0, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xCB, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xE0, 0xBC, 0x00, 0x00, 0xF4, 0xCA, 0xD4, 0xFA, /* 0x84-0x87 */ + 0x00, 0x00, 0xFD, 0xAA, 0xF9, 0xE2, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xF4, 0xB7, 0xFD, 0xC2, 0xFC, 0xB0, 0x00, 0x00, /* 0x98-0x9B */ + 0xFD, 0xEC, 0xCA, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xBD, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xEA, 0xE7, 0xDF, 0xC3, 0xD1, 0xD2, /* 0xA8-0xAB */ + 0xCE, 0xE2, 0x00, 0x00, 0xD3, 0xA4, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xFD, 0xAB, 0x00, 0x00, 0xDF, 0xE0, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xF2, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF0, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD0, 0xEE, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xAA, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xCB, /* 0xE0-0xE3 */ + 0xF6, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE1, 0xF5, 0xF1, 0xB3, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xA3, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xCA, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xCF, 0xA5, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xC4, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB0, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBF, 0x00, 0x00, /* 0x30-0x33 */ + 0xF6, 0xA4, 0x00, 0x00, 0xE3, 0xB6, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xC6, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xD0, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xED, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xDD, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xE6, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xDE, 0xAD, 0x00, 0x00, 0xFA, 0xBF, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE5, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xED, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0xA5, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xFD, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xF5, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF6, 0xDE, 0xCC, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xDE, 0x00, 0x00, /* 0xDC-0xDF */ + 0xEC, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xCD, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xD6, 0xB7, 0xCD, 0xB3, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_57[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD5, /* 0x00-0x03 */ + 0xE5, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xCF, 0xEA, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xD0, /* 0x08-0x0B */ + 0x00, 0x00, 0xEA, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xAE, 0xEA, 0xAD, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xF1, 0x00, 0x00, /* 0x14-0x17 */ + 0xD3, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xCF, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xEE, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD0, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xF2, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xF0, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xF2, 0xA3, 0x00, 0x00, 0xF7, 0xF8, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xB3, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xA9, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xD3, 0xBB, 0xCA, 0xEC, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF1, 0xA6, 0xCB, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xF7, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xCD, 0xDE, 0x00, 0x00, 0xF7, 0xA4, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xC0, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xDD, 0x00, 0x00, /* 0x6C-0x6F */ + 0xCC, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xCF, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xF6, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF7, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xD3, 0xDC, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFE, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xA7, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xEB, 0xD9, 0x00, 0x00, 0xCF, 0xA7, 0xEA, 0xAF, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xEF, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xB9, /* 0xC4-0xC7 */ + 0xF1, 0xD8, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD8, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF2, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xB4, /* 0xDC-0xDF */ + 0xDC, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xF3, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFB, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xDB, 0xC6, 0xD0, 0xF1, 0x00, 0x00, /* 0xF8-0xFB */ + 0xD0, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0xCF, 0xDC, 0x00, 0x00, 0xD3, 0xD1, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xCC, 0xB1, 0xF7, 0xD8, 0x00, 0x00, /* 0x04-0x07 */ + 0xCB, 0xA8, 0xEB, 0xBC, 0xE4, 0xBE, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xDC, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xDC, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xF0, 0xA7, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xC0, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xED, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xEB, /* 0x2C-0x2F */ + 0xE5, 0xE8, 0xDC, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xED, 0xDE, 0xD3, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xF7, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xD4, 0xE7, 0xAB, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xC3, /* 0x4C-0x4F */ + 0x00, 0x00, 0xE1, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xF7, 0xB2, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xF3, /* 0x54-0x57 */ + 0xD3, 0xD2, 0x00, 0x00, 0xF5, 0xC0, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xDD, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xEE, 0xF3, 0xE7, 0xF1, 0x00, 0x00, /* 0x60-0x63 */ + 0xFD, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xF2, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xF3, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xEE, 0xF4, 0x00, 0x00, 0xE2, 0xD3, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xD1, /* 0x80-0x83 */ + 0x00, 0x00, 0xDF, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE9, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xD7, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xF5, 0xCD, 0x00, 0x00, 0xF1, 0xF2, 0xFA, 0xC7, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xD9, 0xF8, 0xD4, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xE5, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xC5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF2, 0xED, 0xDF, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xCB, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xDB, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE8, 0xB5, 0x00, 0x00, 0xD3, 0xA6, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB5, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xF9, 0xC9, 0x00, 0x00, 0xE4, 0xE2, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xFB, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xD7, 0xA4, 0xCE, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xD5, 0xD6, 0xE6, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE5, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xCD, /* 0xE8-0xEB */ + 0xEC, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xED, 0xE0, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xEC, 0xEC, 0xFB, 0xBE, 0xDF, 0xEB, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE1, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xBE, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xD0, 0xF3, 0xE0, 0xAA, 0xE8, 0xE2, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE2, 0xD4, 0xD2, 0xFD, 0x00, 0x00, /* 0x18-0x1B */ + 0xE5, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xD3, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xDE, /* 0x24-0x27 */ + 0x00, 0x00, 0xF4, 0xB8, 0xF7, 0xBC, 0xDC, 0xFD, /* 0x28-0x2B */ + 0x00, 0x00, 0xE8, 0xEC, 0xE4, 0xE7, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE3, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xA8, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xF1, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE5, 0xF2, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xF4, /* 0x44-0x47 */ + 0xD2, 0xAF, 0xDC, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xA5, 0xF1, 0xB4, /* 0x4C-0x4F */ + 0xFC, 0xB1, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xDD, 0xC6, 0xFA, 0xD1, 0x00, 0x00, 0xF7, 0xDF, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xA8, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xEE, 0xF5, 0x00, 0x00, 0xDE, 0xCE, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF3, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xAC, 0xEB, 0xC4, /* 0x68-0x6B */ + 0xED, 0xE1, 0xE0, 0xAB, 0xDD, 0xC7, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xB3, /* 0x70-0x73 */ + 0xD2, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xCA, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xFB, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xFD, 0xDD, 0xE5, /* 0x80-0x83 */ + 0xD8, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xF4, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xF5, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xED, 0xD0, 0xD2, /* 0x94-0x97 */ + 0x00, 0x00, 0xD9, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xF6, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xDB, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xF7, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xD8, 0xD9, 0x00, 0x00, 0xF4, 0xA3, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xDD, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xD1, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xB5, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xED, 0xAB, 0x00, 0x00, 0xE3, 0xB7, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xEE, 0xBB, 0xCD, 0xB4, 0x00, 0x00, 0xE0, 0xF3, /* 0xD0-0xD3 */ + 0xEA, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xEC, 0xF5, 0xE8, 0xEE, 0x00, 0x00, /* 0xD8-0xDB */ + 0xCB, 0xA9, 0xF1, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xCD, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xEC, 0xA9, 0x00, 0x00, 0xF2, 0xEB, 0x00, 0x00, /* 0xE8-0xEB */ + 0xFD, 0xEF, 0x00, 0x00, 0xF9, 0xF3, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xE6, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xD8, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xAC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0x00, 0x00, 0xEA, 0xCE, 0x00, 0x00, 0xE8, 0xDF, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xDE, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xD2, 0xA6, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF4, /* 0x18-0x1B */ + 0xD1, 0xD6, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xC2, /* 0x1C-0x1F */ + 0xE3, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE4, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xD8, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xA5, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xF3, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xD7, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xE8, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE8, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE6, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xE6, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xFE, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xDA, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xAC, 0xEA, 0xB0, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE3, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xCA, 0xAA, 0xE1, 0xF9, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xEA, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF2, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xFA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xEE, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xF4, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xD2, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ +}; + +static unsigned char u2c_5B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xFB, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xFD, 0xF0, 0x00, 0x00, 0xE0, 0xBD, /* 0x08-0x0B */ + 0xCE, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xC6, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAE, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xDF, 0xC5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xBE, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xED, 0xAD, 0xFA, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xCD, 0xEE, 0xED, 0xA6, 0x00, 0x00, 0xED, 0xAE, /* 0x54-0x57 */ + 0xF0, 0xED, 0x00, 0x00, 0xDD, 0xA1, 0x00, 0x00, /* 0x58-0x5B */ + 0xED, 0xAF, 0xFC, 0xF8, 0x00, 0x00, 0xD8, 0xEB, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xF9, /* 0x60-0x63 */ + 0xCD, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xFA, 0xA9, 0x00, 0x00, 0xE1, 0xDD, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE2, 0xD5, 0xED, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xDD, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xF9, 0xCA, 0x00, 0x00, 0xEA, 0xE8, 0x00, 0x00, /* 0x78-0x7B */ + 0xE5, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xD3, 0xEB, 0x00, 0x00, 0xE9, 0xD4, /* 0x84-0x87 */ + 0xE1, 0xFA, 0xE4, 0xCC, 0x00, 0x00, 0xE1, 0xE4, /* 0x88-0x8B */ + 0xE8, 0xC7, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xDB, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xD5, /* 0x90-0x93 */ + 0x00, 0x00, 0xF7, 0xB5, 0xFC, 0xF3, 0xF0, 0xF3, /* 0x94-0x97 */ + 0xCE, 0xAF, 0xF1, 0xB5, 0xEF, 0xD2, 0xE8, 0xC8, /* 0x98-0x9B */ + 0xEB, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xD4, 0xE0, 0xBE, /* 0xA0-0xA3 */ + 0xE3, 0xF8, 0xEA, 0xE9, 0xFC, 0xB2, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE0, 0xF4, 0x00, 0x00, 0xCF, 0xE0, 0x00, 0x00, /* 0xAC-0xAF */ + 0xEE, 0xA5, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xAA, /* 0xB0-0xB3 */ + 0xE6, 0xC3, 0xE1, 0xB2, 0xCA, 0xAB, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE3, 0xE4, 0xE9, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD6, /* 0xBC-0xBF */ + 0xF3, 0xF2, 0x00, 0x00, 0xEE, 0xD6, 0xEA, 0xB2, /* 0xC0-0xC3 */ + 0xD0, 0xF6, 0xEC, 0xD9, 0xDA, 0xCB, 0xCF, 0xA8, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xDD, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xD8, 0xDB, 0x00, 0x00, 0xF9, 0xCE, 0xE9, 0xD5, /* 0xD0-0xD3 */ + 0xE3, 0xD1, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xBC, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xAC, 0xF3, 0xCC, /* 0xDC-0xDF */ + 0x00, 0x00, 0xCD, 0xFB, 0xF6, 0xD6, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE7, 0xF5, 0xE8, 0xEF, 0xE3, 0xF9, 0xD2, 0xBB, /* 0xE4-0xE7 */ + 0xF3, 0xF3, 0xE3, 0xFB, 0x00, 0x00, 0xDE, 0xD0, /* 0xE8-0xEB */ + 0xCE, 0xB0, 0x00, 0x00, 0xD6, 0xF7, 0xF1, 0xD9, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xF5, 0xC1, 0xDC, 0xC4, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xF5, 0xBB, 0x00, 0x00, 0xDE, 0xD1, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_5C[512] = { + 0x00, 0x00, 0xDC, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xDE, 0xD2, 0x00, 0x00, 0x00, 0x00, 0xED, 0xE2, /* 0x04-0x07 */ + 0xEE, 0xF6, 0xEA, 0xCF, 0xF0, 0xEE, 0xE3, 0xFC, /* 0x08-0x0B */ + 0x00, 0x00, 0xD3, 0xDF, 0xD3, 0xF4, 0xE1, 0xB3, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE1, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xD3, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xDF, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE9, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xDB, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF6, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xE3, 0xB9, 0xEB, 0xC5, 0xF4, 0xA9, 0xCD, 0xB6, /* 0x38-0x3B */ + 0xD2, 0xF9, 0x00, 0x00, 0xDA, 0xAD, 0xD2, 0xE3, /* 0x3C-0x3F */ + 0xCF, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xCB, 0xDC, 0xCC, 0xFA, 0x00, 0x00, /* 0x44-0x47 */ + 0xCF, 0xDD, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xA9, /* 0x48-0x4B */ + 0x00, 0x00, 0xE3, 0xBB, 0xE3, 0xBA, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xE0, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xEE, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB3, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xD3, 0xF5, 0x00, 0x00, 0xD7, 0xA6, 0x00, 0x00, /* 0x60-0x63 */ + 0xF6, 0xB5, 0xD7, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE1, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xEA, /* 0x6C-0x6F */ + 0x00, 0x00, 0xDF, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xFD, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xD0, 0xF7, 0xED, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xCB, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE4, 0xDB, 0x00, 0x00, 0xE1, 0xFB, /* 0xA8-0xAB */ + 0xCB, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xD3, 0xE0, 0x00, 0x00, 0xE4, 0xBF, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xFB, 0xC0, 0x00, 0x00, 0xDA, 0xBE, /* 0xB4-0xB7 */ + 0xE4, 0xCD, 0x00, 0x00, 0xD6, 0xB9, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xC0, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE1, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xF6, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xDF, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE4, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xE7, /* 0xEC-0xEF */ + 0xDC, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xFA, 0xD6, 0x00, 0x00, 0xD3, 0xF6, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xDA, /* 0xF8-0xFB */ + 0x00, 0x00, 0xFA, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFD, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xD5, 0xCF, 0xD0, 0xF8, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xCD, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xF5, 0xCB, 0x00, 0x00, 0xE4, 0xF0, 0xCB, 0xAB, /* 0x14-0x17 */ + 0x00, 0x00, 0xD7, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFE, /* 0x24-0x27 */ + 0x00, 0x00, 0xDD, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xAE, /* 0x48-0x4B */ + 0xCA, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xD5, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE3, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE8, 0xE3, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xAB, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xA9, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xF7, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xD4, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCE, 0xE4, 0x00, 0x00, 0xE8, 0xF2, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xF5, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE7, 0xAE, 0x00, 0x00, 0xD6, 0xBA, 0x00, 0x00, /* 0xB8-0xBB */ + 0xDF, 0xEC, 0xE4, 0xC0, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE8, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xB5, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xDC, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF4, 0xB9, 0xF1, 0xB6, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE2, 0xDE, 0xE1, 0xB5, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xCD, 0xEF, 0xF1, 0xA7, 0xCE, 0xE5, /* 0xE4-0xE7 */ + 0xCB, 0xDD, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xE3, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xAC, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xD0, 0xF9, 0xEC, 0xAB, 0xDE, 0xD3, /* 0xF0-0xF3 */ + 0xF7, 0xE9, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xF5, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE1, 0xDE, 0xCB, 0xEE, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xBC, 0xF8, 0xD6, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xEE, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xFD, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xF7, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xDE, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xF2, 0xED, 0x00, 0x00, 0xDB, 0xD9, /* 0x18-0x1B */ + 0x00, 0x00, 0xF0, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE1, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xD4, /* 0x28-0x2B */ + 0x00, 0x00, 0xE0, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xE3, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xE1, 0x00, 0x00, /* 0x34-0x37 */ + 0xDF, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xD9, 0xB6, 0x00, 0x00, 0xFD, 0xAC, /* 0x3C-0x3F */ + 0xEF, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE4, 0xC1, 0xF8, 0xEB, 0x00, 0x00, 0xDB, 0xAC, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xFC, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xD8, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xBA, /* 0x5C-0x5F */ + 0x00, 0x00, 0xDB, 0xDF, 0xD3, 0xD3, 0xF8, 0xC7, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xCE, 0xF8, 0xC1, /* 0x70-0x73 */ + 0xD2, 0xB4, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB4, /* 0x74-0x77 */ + 0xFA, 0xB9, 0xCA, 0xCF, 0x00, 0x00, 0xFC, 0xB3, /* 0x78-0x7B */ + 0xEA, 0xEA, 0xEA, 0xEB, 0xD0, 0xFA, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xED, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xE7, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xC9, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xED, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xEE, 0xBC, 0x00, 0x00, 0xEF, 0xC1, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xD2, 0x00, 0x00, /* 0x98-0x9B */ + 0xDD, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xDF, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xF8, 0xF1, 0xA8, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xB7, /* 0xA8-0xAB */ + 0x00, 0x00, 0xEF, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE4, 0xDD, 0xDF, 0xEE, 0xCB, 0xAC, /* 0xB4-0xB7 */ + 0xE9, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xEC, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xCB, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xF9, 0xBF, 0xD6, 0xAF, 0xD5, 0xC6, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xCF, 0xAA, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xA9, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF8, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xB7, 0xEE, 0xF8, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xD9, /* 0xDC-0xDF */ + 0xF3, 0xDF, 0x00, 0x00, 0xF8, 0xC8, 0xCE, 0xC6, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xD5, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xE6, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xC5, 0xEF, 0xD5, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xEF, 0xFC, 0xDF, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_5F[512] = { + 0x00, 0x00, 0xDC, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xD6, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xC9, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD2, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE3, 0xBD, 0x00, 0x00, 0xCF, 0xE1, /* 0x10-0x13 */ + 0xF0, 0xC0, 0xEC, 0xDA, 0x00, 0x00, 0xDD, 0xD7, /* 0x14-0x17 */ + 0xFB, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xAC, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xA9, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xD7, 0xFB, 0xC1, /* 0x24-0x27 */ + 0x00, 0x00, 0xD2, 0xC0, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE5, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xED, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xAD, 0x00, 0x00, /* 0x38-0x3B */ + 0xF9, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xF7, 0xA5, 0x00, 0x00, 0xCB, 0xAE, 0x00, 0x00, /* 0x48-0x4B */ + 0xDA, 0xAF, 0x00, 0x00, 0xD8, 0xB6, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xA7, 0xFB, 0xB2, /* 0x54-0x57 */ + 0x00, 0x00, 0xFD, 0xC4, 0x00, 0x00, 0xEC, 0xAD, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xA1, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE9, 0xE9, 0xEE, /* 0x64-0x67 */ + 0x00, 0x00, 0xF3, 0xF4, 0xF8, 0xF3, 0xF0, 0xC1, /* 0x68-0x6B */ + 0xDE, 0xAF, 0xF8, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xF3, 0xE0, 0xE7, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xAD, /* 0x74-0x77 */ + 0x00, 0x00, 0xE6, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xF9, 0xA8, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xD8, /* 0x7C-0x7F */ + + 0xE8, 0xD9, 0xEF, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xD3, 0xE2, 0x00, 0x00, 0xE2, 0xDF, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xE0, 0xD7, 0xC8, /* 0x88-0x8B */ + 0xFD, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xDF, 0xEF, 0xCC, 0xD3, 0xD3, 0xF9, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xF0, /* 0x94-0x97 */ + 0xDB, 0xC7, 0xDE, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF4, 0x00, 0x00, /* 0x9C-0x9F */ + 0xD5, 0xD0, 0xE5, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xFC, 0xC7, 0xDC, 0xD6, 0xE2, 0xE0, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB0, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF3, 0xA3, 0x00, 0x00, 0xD3, 0xEC, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xF4, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xFD, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFD, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xF9, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xD0, 0xFB, 0xEC, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xBC, 0xF2, 0xA4, /* 0xD4-0xD7 */ + 0xD8, 0xCE, 0xD8, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xF5, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xE1, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xD2, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xFB, 0xEC, 0x00, 0x00, 0xDD, 0xC8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xE8, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0xC1, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD7, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xD6, 0xBB, 0xDE, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xF7, 0xBD, 0xEC, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xD0, 0xE1, 0x00, 0x00, 0xE0, 0xF5, /* 0x24-0x27 */ + 0xEA, 0xB3, 0x00, 0x00, 0xCE, 0xD6, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xA5, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xEC, 0xF6, 0xE2, 0xE1, 0xE3, 0xBE, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xFC, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xCD, 0xF0, 0x00, 0x00, 0xF9, 0xF6, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xDF, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE5, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xCE, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xE1, 0xED, 0xB0, /* 0x60-0x63 */ + 0xFD, 0xD1, 0xF6, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF9, 0xCF, 0xEB, 0xDA, 0xCA, 0xC1, 0x00, 0x00, /* 0x68-0x6B */ + 0xD2, 0xB8, 0xCD, 0xF1, 0x00, 0x00, 0xE3, 0xD3, /* 0x6C-0x6F */ + 0xFD, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xE6, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE3, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xF0, 0xAA, 0xF9, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xFC, 0xE2, 0x00, 0x00, 0xF8, 0xA7, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE5, 0xEE, 0xF9, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF6, /* 0x9C-0x9F */ + 0xEA, 0xED, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xB4, /* 0xA0-0xA3 */ + 0xF5, 0xC2, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xDC, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xF0, 0xF5, 0x00, 0x00, 0xDD, 0xE8, 0xD3, 0xED, /* 0xB0-0xB3 */ + 0xF5, 0xFC, 0x00, 0x00, 0xDA, 0xBF, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xCC, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xD3, 0xFA, 0xF4, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xEF, 0xD7, 0x00, 0x00, 0xD4, 0xC3, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xFB, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xED, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE0, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xEE, /* 0xDC-0xDF */ + 0xFB, 0xB3, 0xE4, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xF6, 0xE7, 0xD2, 0xDD, 0x00, 0x00, 0xDF, 0xCC, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC9, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE5, 0xA9, 0xE0, 0xF6, 0xF6, 0xB3, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_61[512] = { + 0x00, 0x00, 0xE1, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xF0, 0x00, 0x00, /* 0x04-0x07 */ + 0xEA, 0xEF, 0xEA, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xDA, 0xC0, 0xF8, 0xB4, 0xEB, 0xF2, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xE4, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xD7, 0xE4, 0xF1, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xEF, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xD7, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xFC, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xF3, 0xE1, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xC4, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xE3, 0xE5, 0x00, 0x00, 0xCB, 0xC5, 0xEA, 0xB4, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xBD, 0x00, 0x00, /* 0x40-0x43 */ + 0xD7, 0xC9, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xDB, /* 0x44-0x47 */ + 0xED, 0xB1, 0x00, 0x00, 0xCC, 0xC3, 0xF7, 0xBE, /* 0x48-0x4B */ + 0xFC, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF4, /* 0x50-0x53 */ + 0x00, 0x00, 0xD9, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xF3, 0xD3, 0xF3, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xF7, 0xE4, 0x00, 0x00, 0xF7, 0xD1, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xB7, 0xCE, 0xB1, /* 0x60-0x63 */ + 0xCA, 0xC2, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xB4, /* 0x64-0x67 */ + 0xCB, 0xC6, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF6, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xE7, 0x00, 0x00, /* 0x6C-0x6F */ + 0xEA, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xD4, 0xCB, 0xAF, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xF4, 0xAA, 0xE9, 0xAF, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xF5, 0xC3, 0xE9, 0xD8, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xE9, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xF3, 0x00, 0x00, /* 0x8C-0x8F */ + 0xD5, 0xFB, 0xDE, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xF4, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xFD, 0xF3, 0xFD, 0xF2, 0xF7, 0xA6, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xDD, 0xC9, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xD3, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xCC, 0xA8, 0x00, 0x00, 0xDA, 0xC1, /* 0xA8-0xAB */ + 0xCC, 0xD5, 0x00, 0x00, 0xD9, 0xE4, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xCA, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE3, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xBC, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xF0, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xC4, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xD0, /* 0xC4-0xC7 */ + 0xFA, 0xAB, 0xEB, 0xEB, 0xE7, 0xF8, 0xD9, 0xE5, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xD7, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xA4, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xFB, 0xFC, 0xE3, /* 0xF4-0xF7 */ + 0xFA, 0xD8, 0x00, 0x00, 0xF3, 0xD5, 0x00, 0x00, /* 0xF8-0xFB */ + 0xCF, 0xAB, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0xD5, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xD4, /* 0x04-0x07 */ + 0xCD, 0xFC, 0x00, 0x00, 0xD9, 0xE6, 0x00, 0x00, /* 0x08-0x0B */ + 0xE2, 0xF9, 0xE2, 0xA1, 0xEB, 0xD4, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE0, 0xF7, 0xE4, 0xB2, 0xCC, 0xFC, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xE4, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xAB, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xBD, /* 0x1C-0x1F */ + 0x00, 0x00, 0xCA, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xB8, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xC0, 0x00, 0x00, /* 0x2C-0x2F */ + 0xEE, 0xFA, 0xFD, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xD3, 0xE3, 0x00, 0x00, 0xFB, 0xC2, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xE8, 0xDB, 0xAE, /* 0x3C-0x3F */ + 0xE1, 0xB6, 0xF8, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xBF, /* 0x44-0x47 */ + 0xFB, 0xC3, 0xDD, 0xEA, 0x00, 0x00, 0xE2, 0xA2, /* 0x48-0x4B */ + 0x00, 0x00, 0xEE, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xE8, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xF6, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xCA, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xD0, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xA6, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xDD, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE4, 0xF9, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xAF, /* 0x7C-0x7F */ + + 0xD0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xF4, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xCC, 0xBC, 0xF7, 0xEA, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE5, 0xE4, 0xDF, 0xF1, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xF7, 0xE1, 0x00, 0x00, 0xF9, 0xF7, /* 0x94-0x97 */ + 0xEF, 0xB9, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD8, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xA9, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xF8, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xEE, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xD8, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE4, 0xE3, 0xF5, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xD9, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xE7, /* 0xC4-0xC7 */ + 0xD2, 0xB9, 0xD5, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xDA, 0xE5, 0xDA, 0xD0, 0x00, 0x00, 0xD1, 0xD9, /* 0xCC-0xCF */ + 0xCE, 0xD8, 0x00, 0x00, 0xCB, 0xDE, 0xF4, 0xAC, /* 0xD0-0xD3 */ + 0xDA, 0xFB, 0x00, 0x00, 0xF6, 0xE9, 0xE8, 0xF3, /* 0xD4-0xD7 */ + 0xCF, 0xAC, 0xF0, 0xF0, 0x00, 0x00, 0xF4, 0xFD, /* 0xD8-0xDB */ + 0xDB, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xCE, 0xC0, 0xE3, 0xD4, 0xD1, 0xCF, 0xF1, 0xF5, /* 0xEC-0xEF */ + 0x00, 0x00, 0xCD, 0xF2, 0x00, 0x00, 0xCF, 0xEB, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xB8, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xA6, 0xD1, 0xDA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0x00, 0x00, 0xF2, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA6, /* 0x04-0x07 */ + 0x00, 0x00, 0xE4, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xD3, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xA9, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xC9, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xD8, 0xE6, 0xC9, /* 0x38-0x3B */ + 0x00, 0x00, 0xD8, 0xB8, 0xFA, 0xF3, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xF3, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xF8, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xF3, /* 0x4C-0x4F */ + 0xE6, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xF8, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xE9, /* 0x64-0x67 */ + 0xDE, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xDF, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xEC, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xDF, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xF4, 0xD2, 0xBA, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xF2, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB7, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE2, 0xA3, 0xD3, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xED, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xC9, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFA, 0x00, 0x00, /* 0x94-0x97 */ + 0xCF, 0xDE, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xD0, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xD5, 0xD3, 0xF3, 0xF5, 0xF7, 0xAE, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xEF, 0xC8, 0x00, 0x00, 0xCD, 0xF3, /* 0xA4-0xA7 */ + 0xF5, 0xCF, 0xE5, 0xF3, 0xF0, 0xC2, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCA, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xEA, 0xF1, 0x00, 0x00, 0xD0, 0xA6, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xDA, /* 0xCC-0xCF */ + 0xF0, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xE7, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xC0, 0xFC, 0xB5, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE4, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xCC, 0xA9, 0xFD, 0xC6, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xEA, 0xB5, 0x00, 0x00, 0xE5, 0xAA, 0xDF, 0xBA, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_64[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE1, 0xDF, 0x00, 0x00, 0xDA, 0xD1, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xE1, 0xB8, 0x00, 0x00, 0xE8, 0xF4, 0xD3, 0xFD, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xE2, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xCA, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xDA, 0xE6, 0xF7, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xCD, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xB6, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xEE, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xF5, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xD8, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA7, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xD9, 0xB8, 0xD9, 0xB9, 0xEF, 0xC9, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xD6, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF7, 0xCB, 0xDF, 0xAE, 0xE8, 0xF5, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0xB5, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xD5, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xF4, 0xCC, 0xDA, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xE8, /* 0xA8-0xAB */ + 0x00, 0x00, 0xF7, 0xEB, 0xF5, 0xC9, 0x00, 0x00, /* 0xAC-0xAF */ + 0xF3, 0xBC, 0x00, 0x00, 0xDA, 0xD2, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB5, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE8, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xD6, 0xCF, 0xF4, 0xBA, 0x00, 0x00, 0xF7, 0xC9, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xAA, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xF0, 0xC3, 0xCC, 0xD6, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xD3, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xD3, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xDB, 0xFB, 0x00, 0x00, 0xCB, 0xE0, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xD3, 0xE4, 0xF6, 0xF7, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xD5, 0xBA, 0xF3, 0xCD, 0xCB, 0xE1, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xEB, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xAD, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xFC, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xEC, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xF6, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0xDA, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xF7, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE5, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xE0, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xFD, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xE6, 0xFC, 0xAB, /* 0x28-0x2B */ + 0xD5, 0xBB, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA8, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xA5, 0xCD, 0xB9, /* 0x34-0x37 */ + 0xEA, 0xF2, 0xCB, 0xC7, 0x00, 0x00, 0xCD, 0xF4, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xAF, 0xEF, 0xD9, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xCD, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xFC, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xDF, 0xF3, 0xCE, 0xE7, 0xDA, 0xC2, /* 0x4C-0x4F */ + 0x00, 0x00, 0xCF, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF9, 0xF8, 0xA8, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xE2, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xF2, 0xDF, 0xA4, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xC4, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xCC, 0xD7, 0xE5, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xBB, 0x00, 0x00, /* 0x70-0x73 */ + 0xEF, 0xDA, 0xEE, 0xD8, 0x00, 0x00, 0xDD, 0xA7, /* 0x74-0x77 */ + 0xE2, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xB0, 0xF8, 0xCA, /* 0x80-0x83 */ + 0x00, 0x00, 0xFC, 0xFA, 0x00, 0x00, 0xD9, 0xFE, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xDE, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xDD, 0xEC, 0xDA, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xE0, /* 0x94-0x97 */ + 0x00, 0x00, 0xD6, 0xF9, 0x00, 0x00, 0xCD, 0xD7, /* 0x98-0x9B */ + 0xDE, 0xD8, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xF8, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE4, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xD0, 0xC5, 0xF4, 0xAE, 0x00, 0x00, 0xDD, 0xA8, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xC5, /* 0xA8-0xAB */ + 0xF3, 0xD6, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xD9, /* 0xAC-0xAF */ + 0xE3, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xA8, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xDB, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE5, 0xDA, 0xE3, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xDB, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xD5, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC1, /* 0xC8-0xCB */ + 0xEF, 0xDB, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE9, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xB2, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFD, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xD9, 0xE9, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFE, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xEC, 0xED, 0xD3, 0xA9, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF2, 0xA9, 0xF0, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE2, 0xE2, 0xE9, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xF9, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE9, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xDA, 0xDA, 0xC3, /* 0xF8-0xFB */ + 0xDA, 0xC4, 0xD4, 0xC5, 0x00, 0x00, 0xE7, 0xFA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xE0, 0xE3, 0xB0, /* 0x04-0x07 */ + 0x00, 0x00, 0xDB, 0xB2, 0xFB, 0xC4, 0x00, 0x00, /* 0x08-0x0B */ + 0xF3, 0xE3, 0x00, 0x00, 0xD9, 0xA5, 0xFB, 0xE7, /* 0x0C-0x0F */ + 0xDD, 0xCB, 0xD0, 0xD4, 0x00, 0x00, 0xE6, 0xB6, /* 0x10-0x13 */ + 0xE0, 0xAE, 0xFD, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB5, 0xE0, 0xF8, /* 0x1C-0x1F */ + 0xE7, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xF5, 0xF0, 0x00, 0x00, 0xD8, 0xDC, /* 0x24-0x27 */ + 0xED, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xE1, 0xB9, 0x00, 0x00, 0xE3, 0xC0, /* 0x2C-0x2F */ + 0xF9, 0xC0, 0xE9, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xD9, 0xDB, 0x00, 0x00, 0xF3, 0xE4, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB6, 0xE4, 0xE9, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xF0, 0xC5, 0xE3, 0xC1, 0xFC, 0xCC, /* 0x40-0x43 */ + 0xFC, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xF2, 0xCB, 0x00, 0x00, 0xF2, 0xCC, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xCF, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xF1, 0xDB, 0x00, 0x00, 0xFA, 0xD9, /* 0x58-0x5B */ + 0x00, 0x00, 0xF1, 0xB8, 0xFD, 0xF5, 0xE0, 0xF9, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xE7, 0xFB, 0xFC, 0xB7, 0xFC, 0xE4, 0xFB, 0xC5, /* 0x64-0x67 */ + 0xE3, 0xE7, 0xD8, 0xB9, 0x00, 0x00, 0xF6, 0xF8, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xC5, 0xCC, 0xD8, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xAF, /* 0x70-0x73 */ + 0xF4, 0xE7, 0x00, 0x00, 0xEF, 0xDC, 0xCF, 0xFC, /* 0x74-0x77 */ + 0xEF, 0xDD, 0x00, 0x00, 0xF2, 0xAA, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xFD, 0xBE, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xAC, /* 0x84-0x87 */ + 0xFD, 0xBB, 0xFD, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xB2, 0x00, 0x00, /* 0x8C-0x8F */ + 0xEA, 0xD1, 0xDF, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xEC, 0xE4, 0xDE, /* 0x94-0x97 */ + 0xE5, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xD9, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCD, 0xBC, 0x00, 0x00, 0xF3, 0xE5, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xD5, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xBA, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xE7, 0xFB, 0xB5, /* 0xB0-0xB3 */ + 0xF8, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE0, 0xE7, 0x00, 0x00, 0xCC, 0xD9, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xC6, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE7, 0xA5, 0x00, 0x00, 0xD5, 0xF5, 0xD3, 0xBE, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xFC, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xF2, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xDF, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xE8, 0xF8, 0xF8, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xCE, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xF6, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE8, 0xD8, 0x00, 0x00, 0xCD, 0xD8, 0xE7, 0xD6, /* 0xF0-0xF3 */ + 0xCC, 0xDA, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xE3, /* 0xF4-0xF7 */ + 0xDF, 0xF6, 0xF0, 0xC7, 0xF0, 0xC6, 0x00, 0x00, /* 0xF8-0xFB */ + 0xD8, 0xBA, 0x00, 0x00, 0xF1, 0xF4, 0xF4, 0xF0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0xF5, 0xCC, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xE5, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xEA, 0xC5, 0xEA, 0xF3, 0x00, 0x00, 0xDD, 0xDB, /* 0x08-0x0B */ + 0x00, 0x00, 0xDC, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xDE, 0xFD, 0xF2, 0xF9, 0x00, 0x00, 0xD5, 0xC7, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD0, /* 0x18-0x1B */ + 0x00, 0x00, 0xF0, 0xC8, 0xD1, 0xA1, 0xD1, 0xA2, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xD4, 0xD6, 0xE8, /* 0x24-0x27 */ + 0xD9, 0xCA, 0x00, 0x00, 0xDA, 0xB1, 0xD8, 0xC7, /* 0x28-0x2B */ + 0xDC, 0xE2, 0xF3, 0xCE, 0xF5, 0xF4, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF1, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xDA, 0xD3, 0x00, 0x00, 0xF6, 0xEA, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xF5, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xFD, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xD2, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xDF, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xDD, 0xFA, 0xBA, /* 0x4C-0x4F */ + 0xEE, 0xA7, 0xF5, 0xBD, 0x00, 0x00, 0xF8, 0xF5, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xE8, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xD4, 0xE1, 0x00, 0x00, 0xD1, 0xA3, 0xE1, 0xD6, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xF9, 0xF8, 0x00, 0x00, 0xDB, 0xCA, /* 0x6C-0x6F */ + 0xCB, 0xF9, 0xD4, 0xD4, 0x00, 0x00, 0xD9, 0xDC, /* 0x70-0x73 */ + 0x00, 0x00, 0xEE, 0xBE, 0x00, 0x00, 0xF7, 0xED, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xEE, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE6, 0xF7, 0xF9, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xED, /* 0x84-0x87 */ + 0x00, 0x00, 0xE8, 0xDB, 0x00, 0x00, 0xDB, 0xB3, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xF7, /* 0x8C-0x8F */ + 0xE0, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xE2, /* 0x90-0x93 */ + 0x00, 0x00, 0xF6, 0xD7, 0x00, 0x00, 0xD7, 0xF9, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xDD, 0x00, 0x00, /* 0x98-0x9B */ + 0xCD, 0xFD, 0xF2, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xBD, /* 0xAC-0xAF */ + 0xF8, 0xC2, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xAC, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xAD, 0xCA, 0xAE, /* 0xB4-0xB7 */ + 0xCF, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xC2, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xDC, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xDA, /* 0xCC-0xCF */ + 0xD9, 0xBB, 0xCA, 0xF3, 0xF6, 0xD3, 0xE6, 0xF8, /* 0xD0-0xD3 */ + 0xEA, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xF6, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF6, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xCF, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xCA, 0xD3, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xAF, /* 0xEC-0xEF */ + 0xD2, 0xB0, 0xF1, 0xBA, 0x00, 0x00, 0xD7, 0xB3, /* 0xF0-0xF3 */ + 0xE3, 0xC3, 0xF3, 0xFD, 0xDE, 0xDA, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xDB, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xDE, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xE3, 0xEE, 0xFB, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xF7, 0xD7, 0xCA, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xCE, 0xE8, 0xDB, 0xDB, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xBB, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF1, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xFA, 0xB7, 0xD0, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xCC, 0xAB, 0xEE, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xCB, 0xFA, 0xF9, 0xF9, 0xCC, 0xFD, 0xD3, 0xFE, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xE4, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xEE, 0x00, 0x00, /* 0x4C-0x4F */ + 0xD4, 0xD5, 0xDF, 0xCD, 0x00, 0x00, 0xFC, 0xB8, /* 0x50-0x53 */ + 0xD1, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xF2, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xD2, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xD4, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xD5, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xD8, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xD9, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xA9, /* 0x90-0x93 */ + 0xF6, 0xBC, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xDB, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xF0, 0xC9, 0x00, 0x00, 0xFC, 0xFC, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE8, 0xC9, 0xF4, 0xFE, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xFC, /* 0xA4-0xA7 */ + 0xD7, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xDE, 0xDC, 0x00, 0x00, 0xF0, 0xAC, /* 0xAC-0xAF */ + 0xCC, 0xFE, 0xCD, 0xE1, 0x00, 0x00, 0xE1, 0xBA, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xDB, 0xEF, 0xDA, 0xB2, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xD1, 0xA5, 0xDC, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xD8, 0xF6, 0x00, 0x00, 0xD1, 0xA4, /* 0xC8-0xCB */ + 0x00, 0x00, 0xCD, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xEA, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xF0, 0xF7, 0x00, 0x00, 0xF0, 0xCA, /* 0xD4-0xD7 */ + 0xD0, 0xBE, 0x00, 0x00, 0xDD, 0xDC, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xD6, /* 0xDC-0xDF */ + 0xD3, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xD0, /* 0xE4-0xE7 */ + 0xCD, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xB5, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xF8, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xD4, 0xA1, 0xCE, 0xB2, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_69[512] = { + 0xE8, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xEB, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE3, 0xD5, 0xF5, 0xD0, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xA1, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xA7, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE5, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xE6, 0xCB, 0x00, 0x00, 0xF5, 0xF1, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xC5, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xA3, /* 0x50-0x53 */ + 0xE0, 0xDB, 0xF6, 0xEB, 0x00, 0x00, 0xCB, 0xF1, /* 0x54-0x57 */ + 0x00, 0x00, 0xD9, 0xEA, 0xF5, 0xA2, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xD1, 0x00, 0x00, /* 0x5C-0x5F */ + 0xD1, 0xF8, 0xEA, 0xF8, 0xEA, 0xF9, 0xDA, 0xB3, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xEF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xEF, /* 0x68-0x6B */ + 0x00, 0x00, 0xE5, 0xF6, 0xEE, 0xBF, 0xE2, 0xE4, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD0, 0xBF, 0x00, 0x00, 0xFA, 0xAC, /* 0x74-0x77 */ + 0xF5, 0xD1, 0xE7, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xE9, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xCE, /* 0x98-0x9B */ + 0xDB, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xFC, 0xCE, 0x00, 0x00, 0xDD, 0xEE, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xB4, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xD7, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xB4, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xCD, 0xBE, 0x00, 0x00, 0xDA, 0xE9, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xB0, /* 0xC8-0xCB */ + 0xF7, 0xD9, 0xF3, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xCE, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xCE, 0xAA, 0x00, 0x00, 0xCB, 0xC8, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xA7, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF0, 0xCB, 0x00, 0x00, 0xD0, 0xC7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xC5, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xE0, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xD5, 0xDA, 0x00, 0x00, 0xD7, 0xA7, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xC0, /* 0x14-0x17 */ + 0x00, 0x00, 0xF8, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xD2, 0xED, 0xE9, /* 0x1C-0x1F */ + 0x00, 0x00, 0xD9, 0xBC, 0x00, 0x00, 0xE5, 0xC6, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xF5, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xDA, 0xD4, 0xE2, 0xA7, 0xFB, 0xFC, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF1, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xCA, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xE8, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xE9, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF8, 0xE2, 0xE5, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xD0, 0xB9, 0xD4, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xA6, /* 0x5C-0x5F */ + 0x00, 0x00, 0xDF, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF4, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xD3, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xCC, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xE5, 0xE5, 0xD0, 0xD5, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xFC, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xFC, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xFE, 0xED, 0xEA, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xB1, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xE3, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xA2, 0xCF, 0xF6, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD0, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xEA, 0xF1, 0xEE, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xCB, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA1, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_6B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xD5, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xED, 0x00, 0x00, /* 0x08-0x0B */ + 0xED, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xB2, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xBC, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xFD, 0xE2, 0xF3, 0xAD, 0x00, 0x00, 0xFD, 0xDB, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xB0, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xA7, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xFD, 0xE3, 0xCE, 0xB3, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xE4, 0xFA, 0xCE, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xCA, 0xB0, 0x00, 0x00, 0xF7, 0xA7, 0x00, 0x00, /* 0x4C-0x4F */ + 0xCF, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xA2, /* 0x5C-0x5F */ + 0x00, 0x00, 0xFC, 0xB6, 0xF2, 0xAD, 0xEF, 0xE1, /* 0x60-0x63 */ + 0xF3, 0xAE, 0xDC, 0xC6, 0xD9, 0xEB, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE0, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA8, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xF6, /* 0x74-0x77 */ + 0xCF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xDD, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xD1, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xEA, /* 0x80-0x83 */ + 0xF2, 0xCF, 0x00, 0x00, 0xF7, 0xBF, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE2, 0xE6, 0xE2, 0xA8, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD6, 0x00, 0x00, /* 0x94-0x97 */ + 0xED, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF9, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xB1, 0xDE, 0xB2, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE8, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xD3, 0xAB, 0x00, 0x00, 0xEB, 0xDC, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xAF, 0x00, 0x00, /* 0xB8-0xBB */ + 0xCA, 0xC3, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xFC, /* 0xBC-0xBF */ + 0x00, 0x00, 0xFD, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xEB, 0xF6, 0xCF, 0xB2, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xEC, /* 0xC8-0xCB */ + 0x00, 0x00, 0xD9, 0xBD, 0x00, 0x00, 0xD8, 0xDF, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xB8, 0xEB, 0xBE, /* 0xD0-0xD3 */ + 0xDD, 0xEF, 0x00, 0x00, 0xDD, 0xF0, 0xDD, 0xF1, /* 0xD4-0xD7 */ + 0xDD, 0xF2, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xBE, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xC6, /* 0xE8-0xEB */ + 0xCF, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ +}; + +static unsigned char u2c_6C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xEE, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xAB, /* 0x0C-0x0F */ + 0x00, 0x00, 0xDA, 0xC5, 0x00, 0x00, 0xD8, 0xEC, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xA8, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE2, 0xA9, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xBC, /* 0x34-0x37 */ + 0xE7, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xF0, 0x00, 0x00, /* 0x3C-0x3F */ + 0xEF, 0xE2, 0xF1, 0xF0, 0xCF, 0xB4, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xF1, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE0, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xDF, 0xA5, 0x00, 0x00, 0xF9, 0xD2, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xFD, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xE6, 0xA3, 0xFB, 0xF1, 0xCB, 0xB0, /* 0x5C-0x5F */ + 0xF2, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xCD, 0xE7, 0x00, 0x00, 0xE8, 0xDC, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xE7, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xF7, 0xC0, 0x00, 0x00, 0xD0, 0xE3, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xA1, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xBD, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xD1, 0xA9, 0xDD, 0xCC, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE3, 0xFE, 0xD1, 0xAA, 0xE8, 0xAA, /* 0x80-0x83 */ + 0x00, 0x00, 0xEA, 0xB6, 0xF9, 0xFA, 0xE6, 0xCC, /* 0x84-0x87 */ + 0xF6, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xD4, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xD9, 0xCB, 0x00, 0x00, 0xD9, 0xD2, 0xD3, 0xCB, /* 0x90-0x93 */ + 0xD8, 0xF7, 0xDA, 0xA9, 0xF5, 0xF8, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xDE, 0xDE, 0xF2, 0xAF, 0xF8, 0xA9, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xC8, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xC1, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xC1, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xDD, 0xF3, 0xEA, 0xFA, 0x00, 0x00, 0xF6, 0xBD, /* 0xB8-0xBB */ + 0xE1, 0xBB, 0xCD, 0xBF, 0xF4, 0xD4, 0xE6, 0xCD, /* 0xBC-0xBF */ + 0x00, 0x00, 0xFC, 0xCF, 0xFB, 0xA2, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE0, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF4, 0xBB, 0xDA, 0xD5, 0x00, 0x00, /* 0xC8-0xCB */ + 0xF9, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xF2, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xDB, 0xF6, 0x00, 0x00, 0xDE, 0xDF, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xF2, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF8, 0xDC, 0xF7, 0xEE, 0xEB, 0xE8, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xD2, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF1, 0xBC, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xDA, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xEA, 0xDA, 0xC6, /* 0xEC-0xEF */ + 0xF7, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xB6, /* 0xF0-0xF3 */ +}; + +static unsigned char u2c_6D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xC7, /* 0x08-0x0B */ + 0xD6, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xDC, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA9, /* 0x14-0x17 */ + 0x00, 0x00, 0xE2, 0xAA, 0x00, 0x00, 0xD5, 0xA6, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xD7, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xF2, 0xD0, 0x00, 0x00, 0xEA, 0xFB, /* 0x24-0x27 */ + 0x00, 0x00, 0xE0, 0xDD, 0xFB, 0xF3, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xBD, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xE2, 0xE7, 0xFD, 0xD7, 0x00, 0x00, /* 0x34-0x37 */ + 0xCE, 0xC8, 0xEA, 0xB7, 0x00, 0x00, 0xFC, 0xC0, /* 0x38-0x3B */ + 0x00, 0x00, 0xFD, 0xE7, 0xF7, 0xEF, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xD7, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xEF, 0xBA, 0xF1, 0xDD, 0x00, 0x00, /* 0x58-0x5B */ + 0xDE, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xCB, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xDD, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xFB, 0xC7, 0xD5, 0xC8, 0x00, 0x00, /* 0x68-0x6B */ + 0xD7, 0xDF, 0x00, 0x00, 0xDD, 0xA9, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE9, 0xB1, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xAD, /* 0x74-0x77 */ + 0xF6, 0xD9, 0xFA, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xAA, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xE6, 0xEE, 0x00, 0x00, 0xCC, 0xDC, /* 0x84-0x87 */ + 0xE1, 0xBC, 0xE0, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xE9, 0xBF, 0xFC, 0xFD, 0xE6, 0xCE, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE1, 0xD7, 0x00, 0x00, 0xE6, 0xCF, /* 0x90-0x93 */ + 0x00, 0x00, 0xF4, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xF3, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFB, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF9, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xEF, 0xE3, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xEE, /* 0xC0-0xC3 */ + 0xF6, 0xBE, 0xE0, 0xB2, 0xFC, 0xFE, 0xD1, 0xAB, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xFA, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xC8, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE2, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xD4, 0xA3, 0xF0, 0xF8, 0xD7, 0xA8, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE7, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xD3, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xEF, 0xE4, 0x00, 0x00, 0xD7, 0xC5, 0xEB, 0xE2, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xE7, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE4, 0xA2, 0x00, 0x00, 0xE2, 0xE8, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xE6, 0xD0, 0x00, 0x00, 0xFB, 0xE8, /* 0xF4-0xF7 */ + 0xF4, 0xE8, 0xE5, 0xF4, 0xF4, 0xBC, 0xF4, 0xD5, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_6E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xB6, /* 0x14-0x17 */ + 0x00, 0x00, 0xFC, 0xB9, 0xEE, 0xC2, 0xCA, 0xF5, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xE5, /* 0x1C-0x1F */ + 0xCB, 0xE2, 0xD4, 0xA4, 0x00, 0x00, 0xDE, 0xE0, /* 0x20-0x23 */ + 0xDA, 0xFD, 0xE4, 0xC6, 0xE8, 0xBE, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xDE, /* 0x28-0x2B */ + 0xF6, 0xB4, 0xEA, 0xD2, 0x00, 0x00, 0xF9, 0xFB, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC2, 0x00, 0x00, /* 0x30-0x33 */ + 0xCA, 0xE4, 0x00, 0x00, 0xE7, 0xB7, 0x00, 0x00, /* 0x34-0x37 */ + 0xEA, 0xFD, 0x00, 0x00, 0xD9, 0xDD, 0x00, 0x00, /* 0x38-0x3B */ + 0xDA, 0xB4, 0xEE, 0xAA, 0xFB, 0xE9, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xCB, /* 0x40-0x43 */ + 0xDA, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xBE, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xD3, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xC9, 0x00, 0x00, /* 0x54-0x57 */ + 0xDF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xC0, /* 0x58-0x5B */ + 0xE3, 0xD7, 0x00, 0x00, 0xEF, 0xE6, 0xFC, 0xD0, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC0, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xD3, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xDC, 0xF7, 0xB7, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xB8, 0xD1, 0xF9, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xC8, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xEA, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xDE, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xD7, 0xB6, 0xCF, 0xB5, 0x00, 0x00, 0xD9, 0xA8, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xEE, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xDD, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xA2, 0xE8, 0xAE, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xBD, /* 0xAC-0xAF */ + 0x00, 0x00, 0xF2, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC1, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0xFC, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xB5, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF3, 0xE7, 0xD8, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xFC, 0xD1, 0x00, 0x00, 0xED, 0xB2, /* 0xC8-0xCB */ + 0xF4, 0xAF, 0x00, 0x00, 0xFB, 0xA3, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xFC, 0xC1, 0x00, 0x00, 0xEE, 0xAB, /* 0xD0-0xD3 */ + 0xD4, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xF2, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xEE, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xFB, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xE3, 0xD8, 0xBB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0x00, 0x00, 0xE5, 0xDB, 0xF8, 0xF7, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xD4, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xA9, /* 0x0C-0x0F */ + 0x00, 0x00, 0xCB, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xE6, 0xD1, 0xF0, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xD8, 0xAE, 0x00, 0x00, 0xF9, 0xD3, 0xD5, 0xFE, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xBC, /* 0x28-0x2B */ + 0xF2, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE2, 0xAB, 0xF3, 0xE8, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xEF, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xEC, /* 0x3C-0x3F */ + 0x00, 0x00, 0xE7, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xDA, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xCC, 0xBE, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFC, /* 0x54-0x57 */ + 0xDA, 0xEB, 0x00, 0x00, 0xE2, 0xD8, 0xED, 0xD6, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD1, 0xE0, 0xB3, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xD2, 0x00, 0x00, /* 0x60-0x63 */ + 0xEB, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xD3, 0xC1, 0xF0, 0xCD, 0x00, 0x00, /* 0x6C-0x6F */ + 0xCF, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xD2, 0x00, 0x00, /* 0x78-0x7B */ + 0xD4, 0xD8, 0xDC, 0xC9, 0xD7, 0xF1, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xDF, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xF3, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xF4, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xF1, 0xBF, 0xF8, 0xB1, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE9, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xFB, 0xCB, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xD5, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xD4, /* 0xA0-0xA3 */ + 0xF7, 0xCA, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xC8, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xE8, 0xF3, 0xBD, /* 0xAC-0xAF */ + 0x00, 0x00, 0xEE, 0xFE, 0x00, 0x00, 0xE7, 0xFE, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xD3, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB6, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCC, 0xAD, 0xF6, 0xFA, 0xD6, 0xB2, 0xD2, 0xD8, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xD8, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE3, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xB9, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xAD, /* 0xDC-0xDF */ + 0xFB, 0xCC, 0xEB, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xD4, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xFB, 0xCD, 0x00, 0x00, 0xD5, 0xBD, /* 0xE8-0xEB */ + 0xF1, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFB, /* 0xEC-0xEF */ + 0x00, 0x00, 0xDE, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xEB, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0x00, 0x00, 0xE5, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xFB, 0xA4, 0xD4, 0xB9, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xDE, 0xE1, 0x00, 0x00, 0xE4, 0xA3, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xB7, /* 0x0C-0x0F */ + 0x00, 0x00, 0xF8, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xDE, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xD6, 0xD2, 0x00, 0x00, 0xF9, 0xD5, 0xE7, 0xBA, /* 0x18-0x1B */ + 0xEB, 0xD5, 0xD5, 0xF7, 0xEF, 0xE7, 0xE1, 0xBE, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xAE, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xE9, /* 0x24-0x27 */ + 0xD6, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xBB, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xCB, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xB3, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xCE, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xFB, 0xA5, 0xE1, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xF7, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xFB, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xBD, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFD, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xFC, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xCF, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xED, 0xC7, 0xEE, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xCC, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xA7, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xFA, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xA4, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xFD, 0xDC, 0xED, 0xB3, 0xCE, 0xC9, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xEF, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE1, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xDB, /* 0xA8-0xAB */ + 0xCB, 0xE3, 0xF7, 0xA9, 0x00, 0x00, 0xFB, 0xA6, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB9, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xC0, /* 0xB4-0xB7 */ + 0xED, 0xC8, 0xEF, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xD6, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xCE, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xA1, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xFB, 0xF4, 0xD5, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF1, 0xF6, 0x00, 0x00, 0xE6, 0xD3, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xCC, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xF8, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xDC, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xFD, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE5, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xF1, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xDB, 0xCC, 0xDD, 0xCD, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xC8, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xD9, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xA5, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE6, 0xFB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xD4, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xC8, /* 0x44-0x47 */ + 0x00, 0x00, 0xD6, 0xA1, 0xFD, 0xBF, 0x00, 0x00, /* 0x48-0x4B */ + 0xFC, 0xD3, 0x00, 0x00, 0xEF, 0xA1, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE7, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xEE, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE6, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xE9, 0xF2, 0x00, 0x00, 0xDF, 0xB0, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xD8, 0xE0, 0xFC, 0xBA, 0xFD, 0xAF, 0xF0, 0xCE, /* 0x64-0x67 */ + 0x00, 0x00, 0xDB, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE5, 0xC9, 0x00, 0x00, 0xED, 0xB4, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE0, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xE3, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE9, 0xFB, 0xEA, 0xA8, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB7, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xA7, 0x00, 0x00, /* 0x90-0x93 */ + 0xE9, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xFD, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD9, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xEC, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE8, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE6, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xFD, 0xF8, 0xFD, 0xF9, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xBF, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE7, 0xA7, 0x00, 0x00, 0xE6, 0xD7, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xD4, 0xF3, 0xD4, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xFA, 0x00, 0x00, /* 0xCC-0xCF */ + 0xD7, 0xF2, 0x00, 0x00, 0xE1, 0xC0, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xDB, 0xE2, 0xE6, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xBD, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xF0, 0xCF, 0xF3, 0xBE, 0xE2, 0xAC, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF5, 0xB7, 0xE0, 0xF0, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xB8, /* 0xF8-0xFB */ + 0xE3, 0xE8, 0x00, 0x00, 0xD4, 0xA7, 0xE8, 0xFC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0xFA, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEF, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD6, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xB4, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xD0, 0x00, 0x00, /* 0x28-0x2B */ + 0xF7, 0xF0, 0xEE, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xEA, 0xBA, 0x00, 0x00, 0xEA, 0xD3, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xED, 0xC9, 0xDD, 0xAB, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xAC, 0xFD, 0xA1, /* 0x38-0x3B */ + 0x00, 0x00, 0xDF, 0xD0, 0xEC, 0xB3, 0x00, 0x00, /* 0x3C-0x3F */ + 0xDF, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xED, 0xF8, 0xB8, /* 0x44-0x47 */ + 0xF7, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xF8, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xE0, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xD4, 0xBA, 0xE4, 0xB3, 0x00, 0x00, 0xE9, 0xDA, /* 0x58-0x5B */ + 0x00, 0x00, 0xDE, 0xB6, 0x00, 0x00, 0xD9, 0xBF, /* 0x5C-0x5F */ + 0x00, 0x00, 0xD9, 0xC0, 0xD6, 0xEF, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xCC, /* 0x64-0x67 */ + 0x00, 0x00, 0xDA, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xE5, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xF7, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xCC, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xDF, 0xF9, 0xD7, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xBB, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFA, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xCC, 0xB3, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xF3, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xDF, 0xD2, 0x00, 0x00, 0xCE, 0xCA, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xEE, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xE4, 0x00, 0x00, /* 0xCC-0xCF */ + 0xFB, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xB7, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xEE, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xCE, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE2, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xD7, 0xE1, 0xFA, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xD5, 0xC9, 0xF8, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xD9, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xE9, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xED, /* 0x18-0x1B */ + 0xE3, 0xC4, 0xF0, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE8, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE0, 0xFA, 0xEE, 0xC4, 0xD9, 0xDE, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xA2, 0xEB, 0xA3, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC2, 0xEA, 0xBB, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE8, 0xAB, 0xDE, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xED, 0xEF, 0x00, 0x00, 0xE8, 0xA3, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xF1, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xD4, 0xBC, 0x00, 0x00, 0xFC, 0xEA, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE7, 0xBE, 0x00, 0x00, 0xFC, 0xF2, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD6, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xE2, 0xAE, 0x00, 0x00, 0xD3, 0xB7, 0xFA, 0xCC, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xFA, 0xDC, 0x00, 0x00, 0xED, 0xB5, 0xE1, 0xE3, /* 0x84-0x87 */ + 0x00, 0x00, 0xE8, 0xAC, 0x00, 0x00, 0xE8, 0xDD, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xE9, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xF4, 0xBD, 0x00, 0x00, 0xCF, 0xB8, 0xE9, 0xDB, /* 0x94-0x97 */ + 0xD1, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xC7, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xC9, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE8, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xDE, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xBC, 0xD3, 0xE5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xFA, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xDA, 0xD6, 0x00, 0x00, 0xCA, 0xB1, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xDA, 0xC8, 0xDF, 0xA6, 0x00, 0x00, /* 0xC8-0xCB */ + 0xF9, 0xB3, 0xF2, 0xD2, 0x00, 0x00, 0xCA, 0xC4, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xCB, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xCD, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xFD, 0xB0, 0xD5, 0xA8, 0x00, 0x00, /* 0xDC-0xDF */ + 0xF1, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xE9, /* 0xE0-0xE3 */ + 0xDC, 0xCA, 0xEC, 0xB4, 0xFA, 0xC0, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xFB, 0xA8, 0xD0, 0xA8, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xDA, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xEE, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE0, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xEF, 0xEA, 0xFA, 0xDE, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0x00, 0x00, 0xE0, 0xC4, 0x00, 0x00, 0xCF, 0xB9, /* 0x00-0x03 */ + 0x00, 0x00, 0xD5, 0xCA, 0xD7, 0xE2, 0xE2, 0xAF, /* 0x04-0x07 */ + 0x00, 0x00, 0xD7, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xCD, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xDA, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xEF, 0xA2, 0xE2, 0xDA, 0xF6, 0xFC, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xFB, 0xD0, 0xD1, 0xAD, 0x00, 0x00, /* 0x24-0x27 */ + 0xCD, 0xE4, 0x00, 0x00, 0xD1, 0xAE, 0xDC, 0xED, /* 0x28-0x2B */ + 0xE8, 0xCE, 0x00, 0x00, 0xF0, 0xF9, 0xCE, 0xB5, /* 0x2C-0x2F */ + 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xFB, /* 0x30-0x33 */ + 0xD0, 0xD6, 0xDD, 0xF5, 0xF7, 0xF1, 0x00, 0x00, /* 0x34-0x37 */ + 0xF6, 0xFD, 0x00, 0x00, 0xDB, 0xF7, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xEA, /* 0x3C-0x3F */ + 0xE9, 0xDC, 0xD9, 0xC1, 0x00, 0x00, 0xF5, 0xF2, /* 0x40-0x43 */ + 0xE0, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xD4, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xF9, 0xC2, 0x00, 0x00, 0xEA, 0xBC, /* 0x54-0x57 */ + 0x00, 0x00, 0xD2, 0xC5, 0xFB, 0xD1, 0xE7, 0xC0, /* 0x58-0x5B */ + 0xEB, 0xA5, 0x00, 0x00, 0xDF, 0xFA, 0xE3, 0xA2, /* 0x5C-0x5F */ + 0xD7, 0xB9, 0x00, 0x00, 0xE9, 0xC3, 0x00, 0x00, /* 0x60-0x63 */ + 0xE8, 0xFD, 0xE8, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF2, 0xD3, 0xFB, 0xA9, 0xD8, 0xA5, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xCB, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xC8, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xAF, 0xD7, 0xE3, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC6, /* 0x84-0x87 */ + 0x00, 0x00, 0xD6, 0xA2, 0x00, 0x00, 0xED, 0xF0, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xD7, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xFC, 0xD4, 0x00, 0x00, 0xDA, 0xD7, 0xCC, 0xDF, /* 0x9C-0x9F */ + 0x00, 0x00, 0xF2, 0xD4, 0x00, 0x00, 0xD1, 0xB0, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xCC, 0xE0, 0x00, 0x00, 0xDB, 0xFD, /* 0xA4-0xA7 */ + 0xF3, 0xBF, 0x00, 0x00, 0xF0, 0xD1, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xFC, 0xBB, 0x00, 0x00, 0xE2, 0xB0, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE6, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE2, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xDF, 0xDE, 0x00, 0x00, 0xE0, 0xC7, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xEF, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xE1, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xEA, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE7, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xCE, 0xB6, 0x00, 0x00, 0xF3, 0xC0, 0x00, 0x00, /* 0xD8-0xDB */ + 0xCD, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xFB, 0xD2, 0x00, 0x00, 0xF8, 0xF8, 0xF7, 0xFB, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xBF, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xB7, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xB6, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_75[512] = { + 0x00, 0x00, 0xDC, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xCC, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xF1, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xE8, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xCA, 0xF6, 0x00, 0x00, 0xE4, 0xA4, 0xF4, 0xD6, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xE6, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xA7, /* 0x20-0x23 */ + 0x00, 0x00, 0xDF, 0xE7, 0xE1, 0xC1, 0x00, 0x00, /* 0x24-0x27 */ + 0xE9, 0xC4, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xCB, /* 0x28-0x2B */ + 0xE9, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xEF, 0xA3, 0xEB, 0xA6, 0xCB, 0xA3, 0xE3, 0xE9, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFB, /* 0x34-0x37 */ + 0xEF, 0xA4, 0x00, 0x00, 0xEF, 0xEB, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xB4, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xCD, 0xA3, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE6, /* 0x4C-0x4F */ + 0x00, 0x00, 0xEF, 0xA5, 0x00, 0x00, 0xD3, 0xCC, /* 0x50-0x53 */ + 0xDA, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xD7, 0xBA, 0x00, 0x00, 0xF2, 0xD5, /* 0x58-0x5B */ + 0xF5, 0xE5, 0xD9, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xB4, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xD5, 0xD4, 0xFD, 0xCF, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xE3, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xE1, /* 0x6C-0x6F */ + 0xEC, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xFB, 0xFE, 0xD3, 0xD7, 0x00, 0x00, /* 0x74-0x77 */ + 0xD1, 0xB1, 0x00, 0x00, 0xCB, 0xB1, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xB2, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xB2, 0xF1, 0xC2, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xE1, 0xF9, 0xB5, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xC3, 0xE1, 0xC2, /* 0x8C-0x8F */ + 0x00, 0x00, 0xEB, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xDF, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xCB, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xB9, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xF8, 0xDE, 0xF9, 0xAA, 0xCA, 0xF7, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xED, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xD3, 0xB8, 0xF2, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xD4, 0xD9, 0xEE, 0xC5, 0xF2, 0xF0, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xB2, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xDC, 0xBB, 0x00, 0x00, 0xF1, 0xF8, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xEC, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xCA, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xF6, 0xC0, 0xFD, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xD4, 0xE3, 0xCC, 0xE2, 0x00, 0x00, 0xF7, 0xD4, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xE5, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xD3, 0xC3, 0x00, 0x00, 0xD8, 0xA6, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xF6, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xF6, 0x00, 0x00, /* 0xF8-0xFB */ + 0xCD, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0xE5, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE5, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE1, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xB0, /* 0x1C-0x1F */ + 0xF4, 0xB0, 0xF3, 0xEA, 0xDA, 0xEE, 0x00, 0x00, /* 0x20-0x23 */ + 0xD7, 0xBB, 0x00, 0x00, 0xE2, 0xB1, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xAA, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xFB, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE4, 0xDF, 0x00, 0x00, 0xCA, 0xD6, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xA8, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xFE, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xF6, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xEF, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xD4, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE0, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE8, 0xB9, 0x00, 0x00, 0xEF, 0xA6, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xCD, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xF4, /* 0x78-0x7B */ + 0xDB, 0xA1, 0xDB, 0xDC, 0xDB, 0xDD, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xEE, 0xDC, 0x00, 0x00, 0xCB, 0xCB, 0xFC, 0xD5, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xEB, 0x00, 0x00, /* 0x8C-0x8F */ + 0xCD, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xD3, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xAB, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xD4, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xA9, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xDD, 0xDB, 0xCD, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xCE, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE7, 0xC3, 0x00, 0x00, 0xEC, 0xCC, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xEC, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xCC, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFC, /* 0xD8-0xDB */ + 0xD4, 0xA8, 0x00, 0x00, 0xED, 0xD3, 0xD8, 0xEF, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF2, 0xD7, 0x00, 0x00, 0xCA, 0xF8, /* 0xE0-0xE3 */ + 0xDA, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD4, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xCD, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xEE, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xF2, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xDF, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xDA, 0xF0, 0x00, 0x00, 0xE2, 0xEA, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0x00, 0x00, 0xE0, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xD8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xF7, 0xAF, 0xDA, 0xB6, 0x00, 0x00, 0xCA, 0xD7, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xD8, 0x00, 0x00, /* 0x1C-0x1F */ + 0xD8, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xFA, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xEF, /* 0x34-0x37 */ + 0xD9, 0xC2, 0x00, 0x00, 0xF0, 0xD2, 0x00, 0x00, /* 0x38-0x3B */ + 0xE4, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xFA, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xEC, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE2, 0xB2, 0x00, 0x00, 0xD4, 0xBD, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xCE, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xE2, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xD4, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xC2, 0xE7, 0xDA, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xD9, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xD9, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xBE, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xDC, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE2, 0xEB, 0xD6, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xCA, 0xF9, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xDA, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xD7, /* 0xB8-0xBB */ + 0xCC, 0xA1, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xBA, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xB8, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xC3, /* 0xD8-0xDB */ + 0xD0, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xC5, 0xEB, 0xF8, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xF2, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xCF, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xD3, 0xAD, 0xE8, 0xE1, 0xCE, 0xEC, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB4, /* 0xF0-0xF3 */ +}; + +static unsigned char u2c_78[512] = { + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xE3, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xF7, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xF2, 0xB2, 0xF3, 0xF6, 0xF6, 0xDB, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xD7, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xDF, 0x00, 0x00, /* 0x30-0x33 */ + 0xF7, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xD0, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDA, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xF5, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xBC, /* 0x68-0x6B */ + 0xCC, 0xE3, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xDB, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xDD, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xD1, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xED, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xD6, 0xDE, 0xE4, 0xF4, 0xE1, 0xEF, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xDD, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xCF, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xE5, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xA1, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE0, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xAC, 0xFC, 0xAD, /* 0xB8-0xBB */ + 0xD8, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xED, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xDB, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF0, 0xF3, 0xAF, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xA5, 0x00, 0x00, /* 0xCC-0xCF */ + 0xDA, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xD8, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xCC, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xB4, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xCA, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xF2, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_79[512] = { + 0x00, 0x00, 0xF5, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xA8, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xA6, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xEC, 0xD5, 0xF8, /* 0x28-0x2B */ + 0xDA, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xC6, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xE4, 0x00, 0x00, /* 0x3C-0x3F */ + 0xDE, 0xE5, 0xD1, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xB6, /* 0x44-0x47 */ + 0xD1, 0xB7, 0xF2, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE9, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xD3, 0xF2, 0xB4, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xD4, 0xCB, 0xE4, /* 0x58-0x5B */ + 0xFB, 0xD4, 0xF5, 0xE6, 0xE3, 0xEA, 0x00, 0x00, /* 0x5C-0x5F */ + 0xDE, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xDF, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF8, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xF0, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xB8, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xDF, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xD0, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xFC, 0xA1, 0xEF, 0xEE, 0xDC, 0xD8, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE9, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xDD, 0xFD, 0xFB, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC9, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xC9, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xD4, 0xAA, 0x00, 0x00, 0xE5, 0xCC, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE9, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD0, 0xD8, 0xFC, 0xA2, 0xD4, 0xBE, /* 0xBC-0xBF */ + 0xE2, 0xB3, 0xDE, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xDC, 0xBC, 0xD2, 0xB6, 0xF5, 0xD5, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xCE, 0xA1, 0xF5, 0xA9, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xDD, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xDD, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xD5, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xF6, 0xDF, 0x00, 0x00, 0xF2, 0xDA, 0xE4, 0xEB, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xF2, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xB9, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_7A[512] = { + 0xFD, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xE1, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xCA, 0xD9, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xEF, /* 0x08-0x0B */ + 0x00, 0x00, 0xF5, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xEC, 0xF9, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xAD, /* 0x14-0x17 */ + 0x00, 0x00, 0xF2, 0xC2, 0xF6, 0xC3, 0x00, 0x00, /* 0x18-0x1B */ + 0xD7, 0xD2, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xA2, /* 0x1C-0x1F */ + 0xF0, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFA, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF6, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF3, 0xF2, 0xC3, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xAB, /* 0x38-0x3B */ + 0xCA, 0xB3, 0xCD, 0xA6, 0x00, 0x00, 0xCD, 0xC3, /* 0x3C-0x3F */ + 0xCD, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xCF, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xF6, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xEE, 0xDD, 0xE7, 0xC4, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xB4, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xDF, 0xE2, 0xE7, 0xDB, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE8, 0xB1, 0x00, 0x00, 0xFC, 0xAE, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE5, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xFA, 0xEB, 0x00, 0x00, 0xCF, 0xBC, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xCF, 0xE2, 0xCD, 0xF6, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xEF, 0xF0, 0x00, 0x00, 0xF4, 0xBE, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xD4, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xF3, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xF2, 0xF3, 0xEB, /* 0x90-0x93 */ + 0x00, 0x00, 0xF0, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xCF, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xDF, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE8, 0xC0, 0xE8, 0xC1, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xE3, 0xE9, 0xA2, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xAA, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF3, 0xC1, 0xD0, 0xAB, 0x00, 0x00, 0xD4, 0xE4, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xBC, 0xD8, 0xA1, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xDF, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xF3, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xDC, 0xBD, 0x00, 0x00, 0xCC, 0xE5, /* 0xDC-0xDF */ + 0xED, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xE2, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xD4, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xB5, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xCA, 0xE6, 0x00, 0x00, 0xD3, 0xAE, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xE6, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xF1, 0xD3, 0xF5, 0xE7, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xDA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xEE, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE1, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xDF, 0xE9, 0x00, 0x00, 0xEE, 0xDE, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xC2, 0x00, 0x00, /* 0x1C-0x1F */ + 0xD8, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xAC, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xF0, 0xAF, 0xD6, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xE1, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xB6, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xD4, 0xF5, 0x00, 0x00, 0xD0, 0xC9, /* 0x48-0x4B */ + 0xEF, 0xA7, 0xE2, 0xEC, 0x00, 0x00, 0xDB, 0xEA, /* 0x4C-0x4F */ + 0xCE, 0xCC, 0xF5, 0xE8, 0xF7, 0xD5, 0x00, 0x00, /* 0x50-0x53 */ + 0xD3, 0xCD, 0x00, 0x00, 0xF3, 0xFE, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xD0, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE0, 0xFE, 0x00, 0x00, 0xDF, 0xFB, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xE6, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE8, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xCD, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xA8, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xB4, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xDA, 0xD8, 0xD1, 0xB9, 0x00, 0x00, 0xDF, 0xA9, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xB0, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xCC, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xCE, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xEF, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xDF, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xED, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xEE, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xEF, 0xBD, 0xFC, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xDB, 0xF4, 0x00, 0x00, 0xEF, 0xAA, 0xF8, 0xB9, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF5, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD9, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xE1, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xD4, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xDE, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ +}; + +static unsigned char u2c_7C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xEA, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC2, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xAF, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xCA, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xD7, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xD8, 0xE1, 0xC7, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF4, 0xD8, 0xD6, 0xB3, 0xDD, 0xAD, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xBE, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xF1, 0xC3, 0xEE, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xD6, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xF4, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xD7, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB7, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xFB, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xDD, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xA3, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xDA, 0xD9, 0x00, 0x00, 0xF0, 0xD8, /* 0x94-0x97 */ + 0xEF, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD8, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xF1, 0xD4, 0x00, 0x00, 0xED, 0xF2, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xDB, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xD5, 0xDC, 0xF3, 0xC4, 0xCB, 0xD7, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE2, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xF1, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xD5, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xD8, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xD0, 0xF0, 0xD9, /* 0xDC-0xDF */ + 0xCB, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xDD, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xA7, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xAC, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0xD1, 0xBA, 0x00, 0x00, 0xF1, 0xC4, 0x00, 0x00, /* 0x00-0x03 */ + 0xE5, 0xB3, 0xFB, 0xF5, 0xE9, 0xE1, 0xFD, 0xE0, /* 0x04-0x07 */ + 0xFC, 0xBC, 0x00, 0x00, 0xDA, 0xA2, 0xDA, 0xA3, /* 0x08-0x0B */ + 0x00, 0x00, 0xD2, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD2, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xE2, 0xED, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xE9, /* 0x14-0x17 */ + 0xCE, 0xDC, 0xF2, 0xB5, 0xD0, 0xE4, 0xDD, 0xD1, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE1, 0xC8, 0xDB, 0xB7, 0xDF, 0xE3, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xB9, /* 0x28-0x2B */ + 0xF1, 0xC5, 0x00, 0x00, 0xF3, 0xCF, 0xD7, 0xAB, /* 0x2C-0x2F */ + 0xE1, 0xAC, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xEB, /* 0x30-0x33 */ + 0x00, 0x00, 0xEE, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xE1, 0xC9, 0xCA, 0xFA, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFB, 0xFA, 0xE1, /* 0x40-0x43 */ + 0xF0, 0xDA, 0xCC, 0xE7, 0xDA, 0xF4, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xCC, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xED, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xD5, 0xA9, 0xFA, 0xE2, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xE5, 0x00, 0x00, /* 0x64-0x67 */ + 0xEB, 0xD6, 0x00, 0x00, 0xEC, 0xDF, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFC, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xF7, 0xD6, 0xDE, 0xEA, 0xCB, 0xB4, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xBE, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xCC, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xBD, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xF2, 0xE2, 0xB7, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xE8, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xD6, 0xE0, 0x00, 0x00, 0xF1, 0xC6, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE2, 0xB8, 0xEB, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xCB, 0xB5, 0xD8, 0xD1, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xF4, 0xCE, 0xF3, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xD7, 0xC6, 0x00, 0x00, 0xD1, 0xBB, 0xF7, 0xAA, /* 0xB8-0xBB */ + 0x00, 0x00, 0xED, 0xCA, 0xD7, 0xD3, 0xD8, 0xFA, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xC5, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xCC, 0xDD, 0xFC, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFD, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xF9, 0xE5, 0x00, 0x00, 0xE0, 0xCA, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF2, 0xFD, 0xD3, 0xB0, 0x00, 0x00, /* 0xDC-0xDF */ + 0xF4, 0xF3, 0xDA, 0xC9, 0x00, 0x00, 0xE6, 0xDE, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF8, 0xBA, 0xE8, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xD8, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xD5, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xD6, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xC6, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_7E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xF2, 0xDB, 0xE4, 0xFC, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xE8, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xDA, /* 0x18-0x1B */ + 0x00, 0x00, 0xF2, 0xDC, 0xFB, 0xD6, 0xE9, 0xB2, /* 0x1C-0x1F */ + 0x00, 0x00, 0xEE, 0xAD, 0x00, 0x00, 0xFA, 0xE3, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xEE, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xEA, 0xE6, 0xE0, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF0, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xAC, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF5, 0xC5, 0xEE, 0xE0, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xDB, 0xE5, 0x00, 0x00, 0xDD, 0xDE, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xF0, 0xE9, 0xA3, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xF9, 0x00, 0x00, /* 0x50-0x53 */ + 0xF2, 0xC4, 0xE0, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xA4, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE2, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE3, 0xB1, 0xFC, 0xEB, 0xCD, 0xA8, /* 0x68-0x6B */ + 0x00, 0x00, 0xCC, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xF0, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xE6, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xCD, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC3, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xE1, 0xD9, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xAB, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xC5, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE9, 0x00, 0x00, /* 0x94-0x97 */ + 0xF3, 0xC5, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xC0, /* 0x98-0x9B */ + 0xD5, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_7F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xAE, 0x00, 0x00, /* 0x34-0x37 */ + 0xF9, 0xFC, 0x00, 0x00, 0xCC, 0xC0, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xE5, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xCE, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xD8, 0xD2, 0xF9, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xAA, 0xCE, 0xD1, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xC7, 0x00, 0x00, /* 0x6C-0x6F */ + 0xDB, 0xEB, 0x00, 0x00, 0xDF, 0xFE, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD8, 0xE1, 0x00, 0x00, 0xF7, 0xF3, /* 0x74-0x77 */ + 0x00, 0x00, 0xD7, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xD4, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xD1, 0xBC, 0x00, 0x00, 0xE5, 0xCF, 0x00, 0x00, /* 0x88-0x8B */ + 0xCB, 0xB6, 0x00, 0x00, 0xDA, 0xB8, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xCD, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xBE, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xBA, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xCF, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE0, 0xCC, 0xEB, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xD7, 0xE8, 0xCB, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE9, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE8, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE3, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xCD, 0x00, 0x00, /* 0xC8-0xCB */ + 0xEC, 0xCE, 0x00, 0x00, 0xD6, 0xBF, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xA7, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xDF, 0xD6, 0xFD, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE1, /* 0xDC-0xDF */ + 0xF6, 0xA8, 0xDD, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xF8, 0xBB, 0x00, 0x00, 0xE8, 0xD1, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xF9, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xCE, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xEC, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0xE9, 0xA5, 0xD6, 0xD5, 0x00, 0x00, 0xCD, 0xC5, /* 0x00-0x03 */ + 0x00, 0x00, 0xED, 0xBA, 0xD1, 0xBD, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xCF, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xEC, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD2, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xCC, 0xE9, 0x00, 0x00, 0xD9, 0xC4, /* 0x14-0x17 */ + 0xE9, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD1, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xBC, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xAD, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF7, 0xB0, 0x00, 0x00, 0xCC, 0xEA, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xC4, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xC0, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xFD, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA1, 0x00, 0x00, /* 0x54-0x57 */ + 0xDE, 0xBD, 0x00, 0x00, 0xF6, 0xA9, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xA4, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xA4, /* 0x6C-0x6F */ + 0xF5, 0xC6, 0x00, 0x00, 0xE1, 0xA2, 0xE9, 0xC6, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xC5, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xF4, 0xE9, 0xD6, 0xEC, 0xEB, 0xD3, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xEC, 0xBD, 0xE2, 0xDC, 0xDE, 0xEB, 0xF0, 0xDC, /* 0x84-0x87 */ + 0x00, 0x00, 0xEB, 0xBF, 0x00, 0x00, 0xD7, 0xCE, /* 0x88-0x8B */ + 0xD1, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xAB, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFD, /* 0x98-0x9B */ + 0x00, 0x00, 0xCA, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xCD, 0xC6, 0xF2, 0xB6, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xDD, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xCC, 0xB7, 0xDB, 0xB8, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xE9, /* 0xAC-0xAF */ + 0x00, 0x00, 0xCE, 0xDD, 0xEB, 0xC0, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xFD, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xCB, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xD6, /* 0xC0-0xC3 */ + 0xF1, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xDB, 0xCE, 0x00, 0x00, 0xF7, 0xC3, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xCF, 0xCB, 0xA4, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xE0, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xFB, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xEB, 0xCA, 0xE0, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xCE, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xD4, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xFD, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xD2, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xB7, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xFA, 0xF6, 0xF6, 0xAA, 0xFA, 0xF7, /* 0x04-0x07 */ + 0xD8, 0xE6, 0x00, 0x00, 0xF4, 0xB1, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE8, 0xD2, 0x00, 0x00, 0xCA, 0xC5, 0xCC, 0xEB, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xEE, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xE2, 0xBB, 0x00, 0x00, 0xF7, 0xAD, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xE1, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xF3, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xA1, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFD, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xEC, 0x00, 0x00, /* 0x4C-0x4F */ + 0xDD, 0xAF, 0xDD, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xCB, 0xB7, 0xE8, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xE1, 0xA3, 0xD2, 0xE0, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFE, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE9, 0xA6, 0xCB, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xED, 0xF3, 0xDC, 0xD9, 0xE0, 0xCD, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xDA, /* 0x7C-0x7F */ + + 0xDB, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xCC, 0xAE, 0x00, 0x00, 0xDA, 0xDB, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xC7, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xB1, 0x00, 0x00, /* 0x98-0x9B */ + 0xD8, 0xAF, 0xE3, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCE, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xF3, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xF8, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xCE, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF5, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xEC, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD3, 0xC5, 0xFC, 0xEC, 0xD2, 0xDB, /* 0xBC-0xBF */ + 0xD4, 0xEB, 0x00, 0x00, 0xDE, 0xA2, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE6, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xF0, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xD5, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xF4, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xED, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE8, 0xC2, 0x00, 0x00, 0xED, 0xF5, /* 0xE4-0xE7 */ + 0xD7, 0xFC, 0x00, 0x00, 0xED, 0xBB, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF6, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xB8, /* 0xF0-0xF3 */ + 0xF6, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xE6, 0xF2, 0xDD, /* 0xF8-0xFB */ + 0xCF, 0xBF, 0x00, 0x00, 0xEB, 0xAC, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xCF, 0xC0, 0x00, 0x00, 0xE6, 0xA8, /* 0x04-0x07 */ + 0xFD, 0xE9, 0x00, 0x00, 0xCF, 0xC1, 0x00, 0x00, /* 0x08-0x0B */ + 0xE0, 0xDF, 0xDE, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xA2, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xBF, /* 0x18-0x1B */ + 0xE2, 0xEF, 0x00, 0x00, 0xD9, 0xF1, 0xF1, 0xC7, /* 0x1C-0x1F */ + 0x00, 0x00, 0xCB, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFE, 0xDB, 0xBA, /* 0x28-0x2B */ + 0xDA, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xF6, 0xEC, 0xDA, 0xDC, 0xFA, 0xE4, /* 0x34-0x37 */ + 0x00, 0x00, 0xE0, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xDD, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xE6, 0xA9, 0x00, 0x00, 0xEF, 0xF3, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xF3, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xEB, 0xFA, 0x00, 0x00, 0xF9, 0xE6, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xDD, 0xD5, 0xDE, /* 0x6C-0x6F */ + 0x00, 0x00, 0xCA, 0xDE, 0xDF, 0xE4, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xFD, 0x00, 0x00, /* 0x74-0x77 */ + 0xF5, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xF5, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE3, /* 0x88-0x8B */ + 0x00, 0x00, 0xED, 0xCB, 0xCF, 0xE4, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD3, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xDD, 0xB3, 0xD4, 0xEC, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xF2, 0xB9, 0x00, 0x00, 0xDF, 0xB7, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xCB, 0xCE, 0xFB, 0xD8, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xD0, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xDD, 0xD2, 0xF7, 0xF4, 0xE7, 0xDC, 0xE4, 0xA5, /* 0xAC-0xAF */ + 0x00, 0x00, 0xFC, 0xA3, 0x00, 0x00, 0xDB, 0xBB, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xBA, /* 0xB4-0xB7 */ + 0xE9, 0xFD, 0xD0, 0xCA, 0x00, 0x00, 0xF5, 0xD6, /* 0xB8-0xBB */ + 0xD9, 0xC5, 0xE4, 0xB4, 0x00, 0x00, 0xED, 0xA7, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xEA, 0xBD, 0xE6, 0xFE, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xF7, 0xC4, 0xF5, 0xAD, 0x00, 0x00, 0xD9, 0xE0, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xB4, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xE2, 0xCF, 0xC2, /* 0xDC-0xDF */ + 0x00, 0x00, 0xEC, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE5, 0xB4, 0xCD, 0xC8, 0xEE, 0xC8, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE7, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xCD, 0xC9, 0xF9, 0xB7, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0x00, 0x00, 0xF1, 0xE8, 0xD9, 0xF2, 0xDB, 0xF5, /* 0x00-0x03 */ + 0xCA, 0xB5, 0xD9, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xD8, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xAB, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xED, 0xBC, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD4, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDA, /* 0x2C-0x2F */ + 0x00, 0x00, 0xE2, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xFC, 0xED, 0xEC, 0xE0, 0xD2, 0xFE, 0x00, 0x00, /* 0x34-0x37 */ + 0xE9, 0xC7, 0xE6, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xE2, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xBB, /* 0x44-0x47 */ + 0x00, 0x00, 0xF5, 0xAE, 0xFB, 0xAA, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFB, /* 0x4C-0x4F */ + 0x00, 0x00, 0xEC, 0xBF, 0xFC, 0xD8, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xE5, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xC3, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE2, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xD7, 0xE9, 0xED, 0xF6, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xED, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xEC, 0x00, 0x00, /* 0x94-0x97 */ + 0xE3, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xD4, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xF8, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xDD, 0xB4, 0xE4, 0xB5, 0xD8, 0xB0, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD8, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xF4, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xCE, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xD6, 0xE1, 0xCF, 0xD2, 0x00, 0x00, /* 0xC8-0xCB */ + 0xD0, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xA2, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xEE, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xF3, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xDC, 0xCC, 0x00, 0x00, 0xD0, 0xCB, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xA4, /* 0xEC-0xEF */ + 0xCD, 0xCA, 0xD7, 0xD4, 0xDE, 0xA3, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE4, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xEE, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE2, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFE, /* 0x00-0x03 */ + 0xD4, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xD1, 0x00, 0x00, /* 0x08-0x0B */ + 0xD8, 0xF0, 0xF8, 0xC3, 0xEA, 0xD7, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xF5, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xD8, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xFD, 0xC0, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xEB, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xD5, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xE7, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xCA, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xE7, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xF8, 0xE3, 0x00, 0x00, 0xD4, 0xDD, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xD8, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xD9, /* 0x68-0x6B */ + 0xED, 0xF7, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB5, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD0, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xF1, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE2, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE3, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xD9, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xDF, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xDB, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xE4, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xF1, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB6, /* 0xB8-0xBB */ + 0xF3, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xDA, /* 0xBC-0xBF */ + 0xE1, 0xE0, 0x00, 0x00, 0xD9, 0xAC, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF5, 0xEB, 0x00, 0x00, 0xE0, 0xB6, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE9, 0xC8, 0x00, 0x00, 0xCB, 0xCF, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE3, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xDE, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xBE, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xDC, 0xEF, 0x00, 0x00, 0xD6, 0xA5, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xE2, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xD6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xD9, 0xA1, 0x00, 0x00, 0xD8, 0xC0, /* 0x10-0x13 */ + 0xDC, 0xDB, 0x00, 0x00, 0x00, 0x00, 0xED, 0xBD, /* 0x14-0x17 */ + 0xDF, 0xB8, 0x00, 0x00, 0xEA, 0xA5, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xAD, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xF3, 0xF9, 0x00, 0x00, 0xED, 0xF8, /* 0x20-0x23 */ + 0x00, 0x00, 0xF5, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xE1, 0xCA, 0xEB, 0xE3, 0x00, 0x00, 0xF2, 0xDE, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF8, 0xCC, 0x00, 0x00, 0xEA, 0xD9, /* 0x3C-0x3F */ + 0x00, 0x00, 0xD3, 0xC6, 0x00, 0x00, 0xDB, 0xE6, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xF5, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF0, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xFE, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xFB, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF2, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xCF, 0xF2, 0xF7, 0xB9, 0xD9, 0xF3, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xE1, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xDA, 0xDD, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB9, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xFB, /* 0x8C-0x8F */ + 0x00, 0x00, 0xCB, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xED, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xC0, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xFD, 0xBC, 0xDF, 0xB1, 0xE3, 0xEF, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xA3, /* 0xAC-0xAF */ + 0xFD, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xB1, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xCD, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xED, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xD5, 0xC0, 0xE3, 0xF0, 0xED, 0xFA, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE9, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD5, 0xED, 0xE7, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xD4, 0xF6, 0xE5, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xDB, 0xE7, 0xE2, 0xBF, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xCB, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xF4, 0xF0, 0xDD, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xAB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xDE, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD6, 0xE1, 0xCC, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xB3, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xEE, 0xDC, 0xA2, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xD0, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD5, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xA1, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xDB, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF9, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xCB, 0xF3, 0xF4, 0xA5, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xC8, /* 0x58-0x5B */ + 0xD6, 0xD7, 0x00, 0x00, 0xE9, 0xE5, 0xFB, 0xDC, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD0, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xFB, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xA5, 0x00, 0x00, /* 0x88-0x8B */ + 0xDB, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xE2, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xF7, /* 0xA0-0xA3 */ + 0xF0, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xF6, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xEF, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB1, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xFC, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE8, 0xC3, 0x00, 0x00, 0xF1, 0xC8, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF1, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xF9, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF2, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xB6, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xF5, 0xB9, 0x00, 0x00, 0xDC, 0xF0, 0xE3, 0xF1, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xE8, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xF2, 0xBB, 0x00, 0x00, 0xDE, 0xA4, 0x00, 0x00, /* 0x18-0x1B */ + 0xDA, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xE9, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE3, 0xDA, 0x00, 0x00, 0xFC, 0xD9, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xDA, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xC4, 0x00, 0x00, /* 0x64-0x67 */ + 0xE3, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xFB, 0xDD, 0x00, 0x00, 0xEF, 0xCA, 0x00, 0x00, /* 0x74-0x77 */ + 0xE8, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xCC, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xEB, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xAD, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xAB, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xD9, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xA2, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF6, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xDA, 0xF6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE0, 0xD1, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xA8, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xF9, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xFA, 0xAF, 0x00, 0x00, 0xEB, 0xFC, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xEA, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xE3, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC5, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xE3, 0xD5, 0xEE, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xCD, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xD9, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xC1, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xFA, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xEB, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xFA, 0xBC, 0xE6, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xE5, 0xE2, 0xFA, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xB6, /* 0x54-0x57 */ + 0x00, 0x00, 0xE4, 0xB7, 0x00, 0x00, 0xEA, 0xDB, /* 0x58-0x5B */ + 0x00, 0x00, 0xF5, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xFB, 0xAC, 0xCF, 0xC3, 0xEB, 0xFD, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF8, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xB9, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xE1, 0xF1, 0x00, 0x00, 0xD2, 0xA4, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFB, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xDA, 0xD0, 0xDB, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xEA, 0xBE, 0xD9, 0xB1, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xCA, 0xB7, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xE7, /* 0x88-0x8B */ + 0x00, 0x00, 0xF8, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB2, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC0, 0xF2, 0xDF, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xE5, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xAC, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xCD, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xEE, 0xAE, 0xD6, 0xAE, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xEA, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE7, 0xE0, 0xEB, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xCF, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xDC, 0xCD, 0xED, 0xFB, 0x00, 0x00, 0xDE, 0xF0, /* 0xDC-0xDF */ + 0x00, 0x00, 0xD7, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xDE, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xD7, /* 0xF0-0xF3 */ + 0xDB, 0xD0, 0xDB, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xD5, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF0, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDC, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xCA, 0xE8, 0x00, 0x00, 0xF8, 0xE6, 0xDC, 0xCE, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xEA, 0xDC, 0xDB, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE9, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xDB, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xA8, 0x00, 0x00, /* 0x34-0x37 */ + 0xD7, 0xAE, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE1, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xCB, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xE5, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xDC, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xD5, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xCA, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xA9, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xA4, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE9, 0xA9, 0x00, 0x00, 0xD3, 0xC7, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDD, 0xF8, 0xAE, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xB8, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xAE, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xF2, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xCA, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xCC, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xD4, 0xAD, 0xF6, 0xD1, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xCC, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xC6, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD5, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCE, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xC7, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xB0, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xDF, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xF5, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_8A[512] = { + 0xE5, 0xEB, 0x00, 0x00, 0xEF, 0xF4, 0xDD, 0xB5, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xCD, 0xAA, 0x00, 0x00, 0xE3, 0xF2, 0x00, 0x00, /* 0x08-0x0B */ + 0xFB, 0xF7, 0x00, 0x00, 0xF7, 0xD0, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xBA, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xE1, 0xF6, 0xFE, /* 0x14-0x17 */ + 0xD1, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xC5, /* 0x18-0x1B */ + 0x00, 0x00, 0xE4, 0xB8, 0x00, 0x00, 0xE1, 0xE8, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xC1, /* 0x20-0x23 */ + 0x00, 0x00, 0xD2, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xBE, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xE0, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xFA, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE1, 0xCD, 0x00, 0x00, 0xCA, 0xB8, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xE0, 0xF1, 0xC9, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xDE, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xF0, 0xDF, 0xF8, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xCC, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xF2, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE7, 0xC9, 0x00, 0x00, 0xE2, 0xF3, 0xE7, 0xE1, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xCB, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xE3, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xCF, 0xF8, 0xEF, 0xAC, 0x00, 0x00, /* 0x6C-0x6F */ + 0xFD, 0xFE, 0xFC, 0xA5, 0xFA, 0xB1, 0xDF, 0xD9, /* 0x70-0x73 */ + 0x00, 0x00, 0xE0, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xF4, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xF1, 0xCA, 0x00, 0x00, 0xCE, 0xA3, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xF2, 0xBC, 0xEC, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xA5, /* 0x90-0x93 */ + 0x00, 0x00, 0xF7, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xEB, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xDE, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE1, 0xA4, 0xCD, 0xAB, 0x00, 0x00, 0xD9, 0xF4, /* 0xA0-0xA3 */ + 0xE8, 0xA6, 0xCD, 0xCE, 0xE1, 0xE9, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xFC, 0xEF, 0x00, 0x00, 0xE0, 0xE3, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE2, 0xC1, 0x00, 0x00, 0xCE, 0xA4, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xDE, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xEB, 0xFE, 0x00, 0x00, 0xEB, 0xDD, 0xF0, 0xE0, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xDB, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE2, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xC8, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xEB, /* 0xC8-0xCB */ + 0x00, 0x00, 0xEE, 0xB5, 0x00, 0x00, 0xF5, 0xD8, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xDF, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xE5, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xB0, /* 0xD8-0xDB */ + 0xF4, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE3, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xF4, 0xFA, 0xB2, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xF5, 0xCA, 0xDF, /* 0xE8-0xEB */ + 0x00, 0x00, 0xEB, 0xB1, 0xED, 0xBF, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xFD, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xA6, 0xF9, 0xA4, /* 0xF4-0xF7 */ + 0xF0, 0xB3, 0x00, 0x00, 0xE5, 0xEC, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xE7, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0xD9, 0xC7, 0xE4, 0xD7, 0xEA, 0xDD, 0x00, 0x00, /* 0x00-0x03 */ + 0xD4, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xBA, 0x00, 0x00, /* 0x0C-0x0F */ + 0xDA, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xF9, 0xCC, 0x00, 0x00, 0xE1, 0xDA, 0xDB, 0xBF, /* 0x14-0x17 */ + 0x00, 0x00, 0xCC, 0xC5, 0xEC, 0xD0, 0xCB, 0xBB, /* 0x18-0x1B */ + 0x00, 0x00, 0xDE, 0xF3, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE9, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xD9, 0xC8, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE3, /* 0x28-0x2B */ + 0xD7, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC4, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xD0, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xFC, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xF1, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xD2, 0xD1, 0xC1, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xE3, 0xDB, 0x00, 0x00, 0xD3, 0xC9, 0x00, 0x00, /* 0x58-0x5B */ + 0xDC, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xED, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xDE, 0xA7, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xBB, /* 0x6C-0x6F */ + 0xEC, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xCC, 0xB9, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xDE, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE7, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xD4, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xA8, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE2, 0xC2, 0x00, 0x00, 0xF3, 0xD8, 0xE5, 0xD3, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xD9, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xC6, 0x00, 0x00, /* 0x98-0x9B */ +}; + +static unsigned char u2c_8C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xDB, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xAC, /* 0x3C-0x3F */ + 0x00, 0x00, 0xFC, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xE7, 0x00, 0x00, /* 0x44-0x47 */ + 0xD1, 0xC2, 0x00, 0x00, 0xF9, 0xA5, 0x00, 0x00, /* 0x48-0x4B */ + 0xE8, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xE3, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0xCA, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xDF, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xDF, 0xE7, 0xE3, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xF8, 0xFB, 0xE3, 0xCF, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xB0, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xE7, 0x00, 0x00, /* 0x88-0x8B */ + 0xD9, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xF8, 0xAF, 0xEF, 0xF6, 0x00, 0x00, /* 0x9C-0x9F */ + 0xDD, 0xB6, 0xEE, 0xAF, 0xCD, 0xF8, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xB8, /* 0xA4-0xA7 */ + 0xFC, 0xA7, 0xF7, 0xFC, 0xF7, 0xB1, 0xCE, 0xBB, /* 0xA8-0xAB */ + 0xF4, 0xA1, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xCD, /* 0xAC-0xAF */ + 0xE1, 0xAE, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xC3, /* 0xB0-0xB3 */ + 0xCF, 0xFE, 0x00, 0x00, 0xF8, 0xBF, 0xD8, 0xE2, /* 0xB4-0xB7 */ + 0xD3, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xA8, /* 0xB8-0xBB */ + 0xF4, 0xE4, 0xEC, 0xC2, 0x00, 0x00, 0xD9, 0xF5, /* 0xBC-0xBF */ + 0xF9, 0xC5, 0xDD, 0xD3, 0xD6, 0xF1, 0xEC, 0xFC, /* 0xC0-0xC3 */ + 0xFC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xED, 0xC0, /* 0xC4-0xC7 */ + 0xCA, 0xB9, 0x00, 0x00, 0xEE, 0xE4, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xF2, 0xE1, 0x00, 0x00, 0xDE, 0xB9, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xF2, 0x00, 0x00, /* 0xD8-0xDB */ + 0xDE, 0xF4, 0x00, 0x00, 0xDF, 0xDB, 0x00, 0x00, /* 0xDC-0xDF */ + 0xDB, 0xD3, 0x00, 0x00, 0xFA, 0xE7, 0xD8, 0xE3, /* 0xE0-0xE3 */ + 0xF4, 0xC1, 0x00, 0x00, 0xDD, 0xB7, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xF5, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xD4, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xD6, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xB8, /* 0xF8-0xFB */ + 0xCF, 0xC5, 0xDF, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xF2, 0xBE, 0xF6, 0xA1, 0x00, 0x00, 0xEB, 0xCB, /* 0x04-0x07 */ + 0xF1, 0xFC, 0x00, 0x00, 0xF3, 0xC7, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE0, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xFC, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xDB, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xEE, 0xE5, 0x00, 0x00, 0xDE, 0xF5, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xD3, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xF1, 0xCB, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xAF, /* 0x70-0x73 */ + 0xDD, 0xB9, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xC3, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xF5, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xC6, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xF0, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xAC, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xF5, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xEB, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0xBA, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xBF, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xC5, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xA2, /* 0xC8-0xCB */ + 0xF2, 0xF6, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xBA, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xF5, /* 0xD8-0xDB */ + 0x00, 0x00, 0xCB, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xEE, 0xE6, 0x00, 0x00, 0xE0, 0xD3, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xCE, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD8, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xAF, /* 0xF0-0xF3 */ +}; + +static unsigned char u2c_8E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC9, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xCE, /* 0x0C-0x0F */ + 0xF4, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xE6, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xA1, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xEB, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xF1, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xB3, 0x00, 0x00, /* 0x40-0x43 */ + 0xF0, 0xB4, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xF4, /* 0x44-0x47 */ + 0xD4, 0xB0, 0xF3, 0xB2, 0xFB, 0xB7, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xF5, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE7, /* 0x5C-0x5F */ + 0xF4, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xF5, 0xED, 0x00, 0x00, 0xCF, 0xF3, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xF0, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xCE, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xCC, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xE5, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xF5, 0xE3, 0xF3, /* 0xA8-0xAB */ + 0xCF, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCF, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xB3, 0xE4, 0xD8, /* 0xC8-0xCB */ + 0xCF, 0xF9, 0xCF, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xFA, 0xCD, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE3, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xE2, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xF5, 0xEE, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xBB, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xDC, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF2, /* 0x00-0x03 */ + 0x00, 0x00, 0xD6, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xEE, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xE5, 0xD8, 0xC2, /* 0x10-0x13 */ + 0xDC, 0xD0, 0xCC, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xE0, /* 0x18-0x1B */ + 0xF6, 0xCA, 0xFD, 0xCA, 0xD8, 0xD6, 0xF4, 0xCF, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xA6, 0xDC, 0xBE, /* 0x24-0x27 */ + 0x00, 0x00, 0xDB, 0xD4, 0xD7, 0xC7, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFE, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xCD, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xE2, 0xC3, 0xDC, 0xDE, 0x00, 0x00, 0xDC, 0xDF, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xAD, 0xE6, 0xAB, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xF9, 0xDD, 0xEA, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xEF, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xF4, 0xD0, 0xCE, 0xF3, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xE6, 0xAC, 0x00, 0x00, 0xCE, 0xDE, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xF9, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xF4, /* 0x98-0x9B */ + 0xCD, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xB8, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFD, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xDC, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xDE, 0xF6, 0x00, 0x00, 0xDC, 0xAA, /* 0xAC-0xAF */ + 0xF2, 0xE3, 0xE9, 0xB4, 0xD2, 0xDC, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE6, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE3, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xCA, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xD0, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xDA, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xBC, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xE8, 0xDA, 0xDE, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF2, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE2, 0xFB, 0x00, 0x00, 0xCC, 0xA6, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xBB, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xEE, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF5, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0xF7, 0xDC, 0xE1, 0xEA, 0xCE, 0xC1, 0xD4, 0xB1, /* 0x00-0x03 */ + 0x00, 0x00, 0xFD, 0xB1, 0xE6, 0xBD, 0x00, 0x00, /* 0x04-0x07 */ + 0xFB, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xE7, /* 0x08-0x0B */ + 0x00, 0x00, 0xE1, 0xCE, 0x00, 0x00, 0xF7, 0xE2, /* 0x0C-0x0F */ + 0xF5, 0xEF, 0xCF, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xD4, 0xB2, 0xCC, 0xEF, 0x00, 0x00, 0xD4, 0xE8, /* 0x14-0x17 */ + 0x00, 0x00, 0xEE, 0xCF, 0xF7, 0xD7, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xE0, 0xA6, 0xD6, 0xC1, 0xE1, 0xDC, /* 0x1C-0x1F */ + 0xF0, 0xE3, 0xF1, 0xE4, 0xDC, 0xF1, 0xD6, 0xA7, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xF5, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF1, 0xCE, 0xF2, 0xE4, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xD0, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xEC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xF9, 0xBA, 0x00, 0x00, 0xEB, 0xB5, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xD4, 0xED, 0xE2, 0xC4, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE7, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xB4, 0xEA, 0xA1, /* 0x48-0x4B */ + 0x00, 0x00, 0xF8, 0xBC, 0xCE, 0xA6, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF9, 0xC6, 0xFC, 0xDA, 0x00, 0x00, 0xD4, 0xB3, /* 0x50-0x53 */ + 0xD3, 0xB9, 0xEA, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xE9, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xE1, 0xE1, 0xD3, 0xCF, 0xF4, 0xF6, 0x00, 0x00, /* 0x5C-0x5F */ + 0xEA, 0xC0, 0xE1, 0xCF, 0x00, 0x00, 0xCC, 0xBA, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xEE, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xF0, 0xE4, 0xF3, 0xB4, 0xD4, 0xEE, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xC0, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xF1, 0xE5, 0x00, 0x00, 0xF4, 0xC3, /* 0x74-0x77 */ + 0xE0, 0xD4, 0x00, 0x00, 0xEB, 0xB6, 0x00, 0x00, /* 0x78-0x7B */ + 0xD7, 0xA1, 0xCB, 0xE8, 0x00, 0x00, 0xF9, 0xAD, /* 0x7C-0x7F */ + + 0xE9, 0xAD, 0xD8, 0xE4, 0xFA, 0xB3, 0xE2, 0xC5, /* 0x80-0x83 */ + 0xFC, 0xBD, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xC4, /* 0x84-0x87 */ + 0xD8, 0xB1, 0x00, 0x00, 0xDC, 0xAB, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xA4, /* 0x8C-0x8F */ + 0x00, 0x00, 0xEB, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xE8, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xD8, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xFB, 0xAE, 0xD1, 0xE1, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xC0, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xF5, 0xBE, 0x00, 0x00, 0xDE, 0xF7, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xFB, /* 0xAC-0xAF */ + 0xF7, 0xC6, 0xCF, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE1, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xEE, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE9, 0xF4, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF4, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xCD, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xCF, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xDD, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xCE, 0xAC, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xE9, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xD4, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xC7, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xDB, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xFA, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xDE, 0xA9, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xF8, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xEF, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB3, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xEB, 0xB7, 0xEF, 0xF8, 0xF5, 0xDC, /* 0x48-0x4B */ + 0xED, 0xCC, 0xDB, 0xD5, 0xF1, 0xCF, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xD0, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xB2, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xD9, 0xAE, 0xD5, 0xAC, 0x00, 0x00, /* 0x68-0x6B */ + 0xE2, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xFD, 0xA3, 0x00, 0x00, 0xFB, 0xE5, /* 0x74-0x77 */ + 0xDF, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF5, /* 0x84-0x87 */ + 0x00, 0x00, 0xF6, 0xAD, 0x00, 0x00, 0xF5, 0xB3, /* 0x88-0x8B */ + 0x00, 0x00, 0xF0, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA5, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xF5, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xA2, /* 0xA8-0xAB */ + 0xED, 0xFD, 0x00, 0x00, 0xF5, 0xB4, 0xFB, 0xB8, /* 0xAC-0xAF */ + 0x00, 0x00, 0xDB, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xD6, 0xCA, 0xCB, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE5, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFA, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xEB, 0xB8, 0x00, 0x00, 0xE0, 0xB7, /* 0xC8-0xCB */ + 0xD7, 0xEC, 0xF1, 0xEC, 0xE5, 0xAF, 0xD5, 0xE1, /* 0xCC-0xCF */ + 0xD7, 0xED, 0xD1, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xF2, /* 0xD4-0xD7 */ + 0xEF, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xDD, 0xBC, 0xF6, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE5, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xC4, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE9, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xF3, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_92[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xD4, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xCC, 0xA2, 0xF7, 0xFE, 0xDF, 0xBC, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xCD, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xB7, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xD6, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xAD, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xAF, /* 0x3C-0x3F */ + 0xCB, 0xA5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xCB, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xFA, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xC6, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE7, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xC7, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xA4, 0x00, 0x00, /* 0x60-0x63 */ + 0xCF, 0xC9, 0xE2, 0xFC, 0xEF, 0xFA, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xEB, 0xDE, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xC8, /* 0x80-0x83 */ + 0x00, 0x00, 0xD4, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE0, 0xD5, 0x00, 0x00, 0xEF, 0xB0, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC7, 0x00, 0x00, /* 0x94-0x97 */ + 0xD9, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xF9, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xE5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xCA, 0xE1, 0xD1, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE2, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xEF, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xF9, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xF2, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE0, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xE8, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xCB, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xCB, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xD6, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xF5, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xF5, 0xDF, 0x00, 0x00, 0xEE, 0xB6, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF6, 0xD3, 0xCA, /* 0x1C-0x1F */ + 0xEF, 0xFC, 0xD1, 0xC4, 0xEF, 0xB1, 0x00, 0x00, /* 0x20-0x23 */ + 0xD1, 0xC5, 0x00, 0x00, 0xD0, 0xDE, 0x00, 0x00, /* 0x24-0x27 */ + 0xD9, 0xE1, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB8, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xD1, 0xF3, 0xB9, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xE7, 0xCC, 0x00, 0x00, 0xD6, 0xA8, 0xCE, 0xA7, /* 0x48-0x4B */ + 0x00, 0x00, 0xD4, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE4, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xB4, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xB9, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xCB, 0xF5, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xF6, 0xDD, 0x00, 0x00, 0xF1, 0xA3, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xCC, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE9, 0xCA, 0x00, 0x00, 0xE1, 0xF0, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xE0, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xAF, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xD1, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xFB, 0xE0, 0xF2, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xEC, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xEC, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xEE, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xCB, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xCC, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xD7, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xA1, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_94[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xFC, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xF1, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xE0, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xB2, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xF4, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xF7, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xF1, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xCA, 0xFC, 0xCA, 0xFD, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xCE, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xF3, 0xC8, 0x00, 0x00, 0xF3, 0xBA, /* 0x7C-0x7F */ +}; + +static unsigned char u2c_95[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xED, 0xFE, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xDA, 0xA6, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xEC, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xF8, 0xCD, 0x00, 0x00, 0xCB, 0xD2, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xCE, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF9, 0xD8, 0xF9, 0xD9, 0xCA, 0xE0, /* 0x90-0x93 */ + 0xDA, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xCB, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCA, 0xC8, /* 0xA0-0xA3 */ + 0xF9, 0xEE, 0xDB, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xD0, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xD5, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE6, 0xF3, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xA2, /* 0xB8-0xBB */ + 0xE4, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xE1, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xFC, 0xC4, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xF9, 0xEF, 0xCF, 0xF4, 0xF7, 0xE6, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xCE, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF4, 0xC5, 0xDC, 0xA3, 0x00, 0x00, /* 0xE0-0xE3 */ +}; + +static unsigned char u2c_96[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xDD, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xF4, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xA1, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xD6, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xC1, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE6, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xB9, /* 0x3C-0x3F */ + 0xF6, 0xED, 0x00, 0x00, 0xF9, 0xAE, 0x00, 0x00, /* 0x40-0x43 */ + 0xDD, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xB0, /* 0x48-0x4B */ + 0xD8, 0xE8, 0xCB, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF9, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xCE, /* 0x58-0x5B */ + 0xF9, 0xF0, 0xE0, 0xED, 0xE3, 0xB3, 0xF4, 0xB3, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xC2, 0xF2, 0xE6, /* 0x60-0x63 */ + 0xF0, 0xB6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xD6, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xEB, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xE7, /* 0x70-0x73 */ + 0x00, 0x00, 0xD7, 0xD5, 0xD4, 0xB6, 0xF9, 0xE8, /* 0x74-0x77 */ + 0xD7, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE5, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xE9, 0xEA, 0xD7, 0xCC, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xE9, 0xE2, 0xC9, /* 0x88-0x8B */ + 0x00, 0x00, 0xFC, 0xDB, 0xCD, 0xAD, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xCC, 0xB0, 0xEA, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xE4, 0xF6, 0xD0, 0xC0, 0x00, 0x00, 0xF0, 0xB7, /* 0x98-0x9B */ + 0xEE, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xF6, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCA, /* 0xA4-0xA7 */ + 0xE2, 0xCB, 0x00, 0x00, 0xFA, 0xCF, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xEB, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xCB, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xB4, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xED, 0xCD, 0xE4, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xEA, 0xA9, 0xE4, 0xBA, 0xF3, 0xA2, 0xCD, 0xD2, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF6, 0xCB, 0x00, 0x00, 0xF1, 0xE6, /* 0xC8-0xCB */ + 0xED, 0xC1, 0xE8, 0xBC, 0xEE, 0xD1, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xF0, 0xE7, 0xE2, 0xCC, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE4, 0xAA, 0x00, 0x00, 0xF5, 0xE1, /* 0xD8-0xDB */ + 0xED, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xEE, 0xD1, 0xF1, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE9, 0xEB, 0xE9, 0xEC, 0xE0, 0xE4, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xA7, /* 0xEC-0xEF */ + 0xDD, 0xD4, 0x00, 0x00, 0xEA, 0xA3, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xC3, 0xD6, 0xF4, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xDA, 0xDF, 0x00, 0x00, 0xEF, 0xB3, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_97[512] = { + 0xE2, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xFD, 0xF2, 0xE8, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xEF, 0xC5, 0x00, 0x00, 0xE7, 0xE7, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xFD, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE7, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xDF, 0xDC, 0x00, 0x00, 0xF9, 0xC7, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xF6, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xDF, 0xAC, 0x00, 0x00, 0xD6, 0xDA, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xDC, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF0, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xFA, 0x00, 0x00, /* 0x40-0x43 */ + 0xE4, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xD6, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xF4, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xFE, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xF0, 0xA1, 0x00, 0x00, 0xDE, 0xAA, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xDA, 0xBC, 0xD8, 0xFC, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xFA, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xEC, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xFC, 0xA8, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xE6, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xCB, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xB9, /* 0x88-0x8B */ + 0x00, 0x00, 0xE4, 0xD3, 0x00, 0x00, 0xCD, 0xF9, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCF, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xCA, 0xEA, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xD4, /* 0xA8-0xAB */ + 0x00, 0x00, 0xF8, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xC7, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xDF, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDB, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD4, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xE5, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD2, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xA4, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xC2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0xFB, 0xE1, 0xFA, 0xED, 0xF0, 0xA2, 0xCC, 0xF1, /* 0x00-0x03 */ + 0x00, 0x00, 0xFA, 0xA3, 0xE2, 0xF7, 0x00, 0x00, /* 0x04-0x07 */ + 0xE2, 0xCE, 0x00, 0x00, 0xE9, 0xF5, 0x00, 0x00, /* 0x08-0x0B */ + 0xE1, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE7, 0xE8, 0xE8, 0xD7, 0xDA, 0xF8, 0xD4, 0xCB, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xF6, /* 0x14-0x17 */ + 0xD6, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD4, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xFA, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xCC, 0xF2, 0xF7, 0xDD, 0x00, 0x00, 0xDE, 0xBA, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xA8, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xF0, 0xB9, 0xE4, 0xFE, 0xE4, 0xC9, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE4, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xEA, 0xC3, 0x00, 0x00, 0xEF, 0xB4, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xBE, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xFB, 0xE2, 0x00, 0x00, 0xCD, 0xD3, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xB5, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xE9, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xF9, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xBD, /* 0xAC-0xAF */ + 0x00, 0x00, 0xF7, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF8, 0xFD, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFC, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAB, /* 0xD8-0xDB */ + 0xDB, 0xE8, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xDD, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE1, 0xE2, 0xD1, 0xC6, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF6, 0xD0, 0xEB, 0xE6, 0xDA, 0xF9, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xEC, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xDE, 0xF8, 0xF8, 0xE9, 0xE3, 0xDE, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF5, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xFA, 0xC3, 0xE5, 0xD7, 0x00, 0x00, /* 0x08-0x0B */ + 0xEC, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xF3, 0xC9, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xBB, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE6, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xB6, 0x00, 0x00, /* 0x1C-0x1F */ + 0xDC, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xCE, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xD8, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xD0, 0xCF, 0x00, 0x00, 0xCF, 0xFA, /* 0x48-0x4B */ + 0xF3, 0xCA, 0xE0, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xD1, 0xC7, 0xE9, 0xAE, 0x00, 0x00, /* 0x50-0x53 */ + 0xE8, 0xBD, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xC4, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCF, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xFA, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xF9, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xDC, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xFB, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xD8, 0xA9, 0xE5, 0xDF, 0xF9, 0xA7, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xF6, 0xEE, 0x00, 0x00, 0xF6, 0xCC, /* 0xB0-0xB3 */ + 0xE2, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xEC, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xDA, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xF1, 0xD2, 0xD2, 0xCC, 0xCF, 0xCB, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xCA, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xDD, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF6, 0xEF, 0x00, 0x00, 0xDE, 0xF9, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xFA, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xD5, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xE7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0x00, 0x00, 0xDE, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xDC, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xC8, 0xD1, 0xC9, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xF8, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xF6, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xD4, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xE2, 0xE1, 0xD3, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xD8, 0xE9, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFE, /* 0x40-0x43 */ + 0x00, 0x00, 0xCF, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xFD, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xCE, 0xF6, 0x00, 0x00, 0xFA, 0xD0, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xF3, 0xE6, 0xBE, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xAE, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xF0, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xD1, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xFC, 0xBE, 0xD5, 0xF1, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xCD, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xFA, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD0, /* 0xD0-0xD3 */ + 0xF4, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xCD, 0xD4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE7, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xA5, 0x00, 0x00, /* 0xEC-0xEF */ +}; + +static unsigned char u2c_9B[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD1, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xA2, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xE3, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xEA, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xD0, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xCE, 0xDA, 0xFB, 0xEB, 0xDB, 0xA6, /* 0x40-0x43 */ + 0xDB, 0xDE, 0xD8, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xE0, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xD8, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE0, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xDB, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xC6, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF8, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xD5, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF7, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xD8, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xD7, 0xEF, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xED, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xCD, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xCC, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ +}; + +static unsigned char u2c_9C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xF5, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE4, 0xCA, 0x00, 0x00, 0xDC, 0xE1, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xF9, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xFC, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xE8, 0xA7, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xC4, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xBE, /* 0x44-0x47 */ + 0x00, 0x00, 0xDC, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xF7, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xF0, 0xE8, 0x00, 0x00, 0xDD, 0xC0, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xCF, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xF3, /* 0xF0-0xF3 */ + 0xD9, 0xB0, 0x00, 0x00, 0xE6, 0xE9, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_9D[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xE4, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xC4, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xEC, 0x00, 0x00, /* 0x24-0x27 */ + 0xE4, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xF8, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xCC, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xE4, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xCD, 0xDC, 0xD9, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xDD, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xCE, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xD9, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA3, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xF9, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xCD, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xCE, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xAF, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xFD, 0xD3, 0xEB, 0xED, 0xD6, 0xDC, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_9E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xA4, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0xB6, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD6, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xF9, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE7, 0xA4, 0x00, 0x00, 0xD6, 0xE3, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xCB, 0xD6, 0xE4, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xF2, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xDE, 0xFA, 0x00, 0x00, 0xD7, 0xF8, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xD8, 0xEA, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xCF, 0xD5, 0xD8, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xAB, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xFD, 0xCB, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xDC, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xE0, 0xA8, 0xD5, 0xF3, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xFD, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xCC, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xD9, 0xF9, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xEA, /* 0xD8-0xDB */ + 0xF5, 0xF5, 0x00, 0x00, 0xEF, 0xC7, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xD3, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xDA, 0xBD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ +}; + +static unsigned char u2c_9F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xA8, /* 0x04-0x07 */ + 0xDC, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xA3, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xD5, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE0, 0xA9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAC, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xBA, 0xEE, 0xB1, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xB2, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xCD, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xD2, /* 0x5C-0x5F */ + 0x00, 0x00, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE5, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xBB, 0x00, 0x00, /* 0x68-0x6B */ + 0xE5, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xCB, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xD7, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xDB, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xCA, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xCF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_AC[512] = { + 0xB0, 0xA1, 0xB0, 0xA2, 0x81, 0x41, 0x81, 0x42, /* 0x00-0x03 */ + 0xB0, 0xA3, 0x81, 0x43, 0x81, 0x44, 0xB0, 0xA4, /* 0x04-0x07 */ + 0xB0, 0xA5, 0xB0, 0xA6, 0xB0, 0xA7, 0x81, 0x45, /* 0x08-0x0B */ + 0x81, 0x46, 0x81, 0x47, 0x81, 0x48, 0x81, 0x49, /* 0x0C-0x0F */ + 0xB0, 0xA8, 0xB0, 0xA9, 0xB0, 0xAA, 0xB0, 0xAB, /* 0x10-0x13 */ + 0xB0, 0xAC, 0xB0, 0xAD, 0xB0, 0xAE, 0xB0, 0xAF, /* 0x14-0x17 */ + 0x81, 0x4A, 0xB0, 0xB0, 0xB0, 0xB1, 0xB0, 0xB2, /* 0x18-0x1B */ + 0xB0, 0xB3, 0xB0, 0xB4, 0x81, 0x4B, 0x81, 0x4C, /* 0x1C-0x1F */ + 0xB0, 0xB5, 0x81, 0x4D, 0x81, 0x4E, 0x81, 0x4F, /* 0x20-0x23 */ + 0xB0, 0xB6, 0x81, 0x50, 0x81, 0x51, 0x81, 0x52, /* 0x24-0x27 */ + 0x81, 0x53, 0x81, 0x54, 0x81, 0x55, 0x81, 0x56, /* 0x28-0x2B */ + 0xB0, 0xB7, 0xB0, 0xB8, 0x81, 0x57, 0xB0, 0xB9, /* 0x2C-0x2F */ + 0xB0, 0xBA, 0xB0, 0xBB, 0x81, 0x58, 0x81, 0x59, /* 0x30-0x33 */ + 0x81, 0x5A, 0x81, 0x61, 0x81, 0x62, 0x81, 0x63, /* 0x34-0x37 */ + 0xB0, 0xBC, 0xB0, 0xBD, 0x81, 0x64, 0x81, 0x65, /* 0x38-0x3B */ + 0xB0, 0xBE, 0x81, 0x66, 0x81, 0x67, 0x81, 0x68, /* 0x3C-0x3F */ + 0xB0, 0xBF, 0x81, 0x69, 0x81, 0x6A, 0x81, 0x6B, /* 0x40-0x43 */ + 0x81, 0x6C, 0x81, 0x6D, 0x81, 0x6E, 0x81, 0x6F, /* 0x44-0x47 */ + 0x81, 0x70, 0x81, 0x71, 0x81, 0x72, 0xB0, 0xC0, /* 0x48-0x4B */ + 0x81, 0x73, 0xB0, 0xC1, 0x81, 0x74, 0x81, 0x75, /* 0x4C-0x4F */ + 0x81, 0x76, 0x81, 0x77, 0x81, 0x78, 0x81, 0x79, /* 0x50-0x53 */ + 0xB0, 0xC2, 0x81, 0x7A, 0x81, 0x81, 0x81, 0x82, /* 0x54-0x57 */ + 0xB0, 0xC3, 0x81, 0x83, 0x81, 0x84, 0x81, 0x85, /* 0x58-0x5B */ + 0xB0, 0xC4, 0x81, 0x86, 0x81, 0x87, 0x81, 0x88, /* 0x5C-0x5F */ + 0x81, 0x89, 0x81, 0x8A, 0x81, 0x8B, 0x81, 0x8C, /* 0x60-0x63 */ + 0x81, 0x8D, 0x81, 0x8E, 0x81, 0x8F, 0x81, 0x90, /* 0x64-0x67 */ + 0x81, 0x91, 0x81, 0x92, 0x81, 0x93, 0x81, 0x94, /* 0x68-0x6B */ + 0x81, 0x95, 0x81, 0x96, 0x81, 0x97, 0x81, 0x98, /* 0x6C-0x6F */ + 0xB0, 0xC5, 0xB0, 0xC6, 0x81, 0x99, 0x81, 0x9A, /* 0x70-0x73 */ + 0xB0, 0xC7, 0x81, 0x9B, 0x81, 0x9C, 0xB0, 0xC8, /* 0x74-0x77 */ + 0xB0, 0xC9, 0x81, 0x9D, 0xB0, 0xCA, 0x81, 0x9E, /* 0x78-0x7B */ + 0x81, 0x9F, 0x81, 0xA0, 0x81, 0xA1, 0x81, 0xA2, /* 0x7C-0x7F */ + + 0xB0, 0xCB, 0xB0, 0xCC, 0x81, 0xA3, 0xB0, 0xCD, /* 0x80-0x83 */ + 0xB0, 0xCE, 0xB0, 0xCF, 0xB0, 0xD0, 0x81, 0xA4, /* 0x84-0x87 */ + 0x81, 0xA5, 0xB0, 0xD1, 0xB0, 0xD2, 0xB0, 0xD3, /* 0x88-0x8B */ + 0xB0, 0xD4, 0x81, 0xA6, 0x81, 0xA7, 0x81, 0xA8, /* 0x8C-0x8F */ + 0xB0, 0xD5, 0x81, 0xA9, 0x81, 0xAA, 0x81, 0xAB, /* 0x90-0x93 */ + 0xB0, 0xD6, 0x81, 0xAC, 0x81, 0xAD, 0x81, 0xAE, /* 0x94-0x97 */ + 0x81, 0xAF, 0x81, 0xB0, 0x81, 0xB1, 0x81, 0xB2, /* 0x98-0x9B */ + 0xB0, 0xD7, 0xB0, 0xD8, 0x81, 0xB3, 0xB0, 0xD9, /* 0x9C-0x9F */ + 0xB0, 0xDA, 0xB0, 0xDB, 0x81, 0xB4, 0x81, 0xB5, /* 0xA0-0xA3 */ + 0x81, 0xB6, 0x81, 0xB7, 0x81, 0xB8, 0x81, 0xB9, /* 0xA4-0xA7 */ + 0xB0, 0xDC, 0xB0, 0xDD, 0xB0, 0xDE, 0x81, 0xBA, /* 0xA8-0xAB */ + 0xB0, 0xDF, 0x81, 0xBB, 0x81, 0xBC, 0xB0, 0xE0, /* 0xAC-0xAF */ + 0xB0, 0xE1, 0x81, 0xBD, 0x81, 0xBE, 0x81, 0xBF, /* 0xB0-0xB3 */ + 0x81, 0xC0, 0x81, 0xC1, 0x81, 0xC2, 0x81, 0xC3, /* 0xB4-0xB7 */ + 0xB0, 0xE2, 0xB0, 0xE3, 0x81, 0xC4, 0xB0, 0xE4, /* 0xB8-0xBB */ + 0xB0, 0xE5, 0xB0, 0xE6, 0x81, 0xC5, 0x81, 0xC6, /* 0xBC-0xBF */ + 0x81, 0xC7, 0xB0, 0xE7, 0x81, 0xC8, 0x81, 0xC9, /* 0xC0-0xC3 */ + 0xB0, 0xE8, 0x81, 0xCA, 0x81, 0xCB, 0x81, 0xCC, /* 0xC4-0xC7 */ + 0xB0, 0xE9, 0x81, 0xCD, 0x81, 0xCE, 0x81, 0xCF, /* 0xC8-0xCB */ + 0xB0, 0xEA, 0x81, 0xD0, 0x81, 0xD1, 0x81, 0xD2, /* 0xCC-0xCF */ + 0x81, 0xD3, 0x81, 0xD4, 0x81, 0xD5, 0x81, 0xD6, /* 0xD0-0xD3 */ + 0x81, 0xD7, 0xB0, 0xEB, 0x81, 0xD8, 0xB0, 0xEC, /* 0xD4-0xD7 */ + 0x81, 0xD9, 0x81, 0xDA, 0x81, 0xDB, 0x81, 0xDC, /* 0xD8-0xDB */ + 0x81, 0xDD, 0x81, 0xDE, 0x81, 0xDF, 0x81, 0xE0, /* 0xDC-0xDF */ + 0xB0, 0xED, 0xB0, 0xEE, 0x81, 0xE1, 0x81, 0xE2, /* 0xE0-0xE3 */ + 0xB0, 0xEF, 0x81, 0xE3, 0x81, 0xE4, 0xB0, 0xF0, /* 0xE4-0xE7 */ + 0xB0, 0xF1, 0x81, 0xE5, 0xB0, 0xF2, 0x81, 0xE6, /* 0xE8-0xEB */ + 0xB0, 0xF3, 0x81, 0xE7, 0x81, 0xE8, 0xB0, 0xF4, /* 0xEC-0xEF */ + 0xB0, 0xF5, 0xB0, 0xF6, 0x81, 0xE9, 0xB0, 0xF7, /* 0xF0-0xF3 */ + 0x81, 0xEA, 0xB0, 0xF8, 0xB0, 0xF9, 0x81, 0xEB, /* 0xF4-0xF7 */ + 0x81, 0xEC, 0x81, 0xED, 0x81, 0xEE, 0x81, 0xEF, /* 0xF8-0xFB */ + 0xB0, 0xFA, 0xB0, 0xFB, 0x81, 0xF0, 0x81, 0xF1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AD[512] = { + 0xB0, 0xFC, 0x81, 0xF2, 0x81, 0xF3, 0x81, 0xF4, /* 0x00-0x03 */ + 0xB0, 0xFD, 0x81, 0xF5, 0xB0, 0xFE, 0x81, 0xF6, /* 0x04-0x07 */ + 0x81, 0xF7, 0x81, 0xF8, 0x81, 0xF9, 0x81, 0xFA, /* 0x08-0x0B */ + 0xB1, 0xA1, 0xB1, 0xA2, 0x81, 0xFB, 0xB1, 0xA3, /* 0x0C-0x0F */ + 0x81, 0xFC, 0xB1, 0xA4, 0x81, 0xFD, 0x81, 0xFE, /* 0x10-0x13 */ + 0x82, 0x41, 0x82, 0x42, 0x82, 0x43, 0x82, 0x44, /* 0x14-0x17 */ + 0xB1, 0xA5, 0x82, 0x45, 0x82, 0x46, 0x82, 0x47, /* 0x18-0x1B */ + 0xB1, 0xA6, 0x82, 0x48, 0x82, 0x49, 0x82, 0x4A, /* 0x1C-0x1F */ + 0xB1, 0xA7, 0x82, 0x4B, 0x82, 0x4C, 0x82, 0x4D, /* 0x20-0x23 */ + 0x82, 0x4E, 0x82, 0x4F, 0x82, 0x50, 0x82, 0x51, /* 0x24-0x27 */ + 0x82, 0x52, 0xB1, 0xA8, 0x82, 0x53, 0x82, 0x54, /* 0x28-0x2B */ + 0xB1, 0xA9, 0xB1, 0xAA, 0x82, 0x55, 0x82, 0x56, /* 0x2C-0x2F */ + 0x82, 0x57, 0x82, 0x58, 0x82, 0x59, 0x82, 0x5A, /* 0x30-0x33 */ + 0xB1, 0xAB, 0xB1, 0xAC, 0x82, 0x61, 0x82, 0x62, /* 0x34-0x37 */ + 0xB1, 0xAD, 0x82, 0x63, 0x82, 0x64, 0x82, 0x65, /* 0x38-0x3B */ + 0xB1, 0xAE, 0x82, 0x66, 0x82, 0x67, 0x82, 0x68, /* 0x3C-0x3F */ + 0x82, 0x69, 0x82, 0x6A, 0x82, 0x6B, 0x82, 0x6C, /* 0x40-0x43 */ + 0xB1, 0xAF, 0xB1, 0xB0, 0x82, 0x6D, 0xB1, 0xB1, /* 0x44-0x47 */ + 0x82, 0x6E, 0xB1, 0xB2, 0x82, 0x6F, 0x82, 0x70, /* 0x48-0x4B */ + 0x82, 0x71, 0x82, 0x72, 0x82, 0x73, 0x82, 0x74, /* 0x4C-0x4F */ + 0xB1, 0xB3, 0x82, 0x75, 0x82, 0x76, 0x82, 0x77, /* 0x50-0x53 */ + 0xB1, 0xB4, 0x82, 0x78, 0x82, 0x79, 0x82, 0x7A, /* 0x54-0x57 */ + 0xB1, 0xB5, 0x82, 0x81, 0x82, 0x82, 0x82, 0x83, /* 0x58-0x5B */ + 0x82, 0x84, 0x82, 0x85, 0x82, 0x86, 0x82, 0x87, /* 0x5C-0x5F */ + 0x82, 0x88, 0xB1, 0xB6, 0x82, 0x89, 0xB1, 0xB7, /* 0x60-0x63 */ + 0x82, 0x8A, 0x82, 0x8B, 0x82, 0x8C, 0x82, 0x8D, /* 0x64-0x67 */ + 0x82, 0x8E, 0x82, 0x8F, 0x82, 0x90, 0x82, 0x91, /* 0x68-0x6B */ + 0xB1, 0xB8, 0xB1, 0xB9, 0x82, 0x92, 0x82, 0x93, /* 0x6C-0x6F */ + 0xB1, 0xBA, 0x82, 0x94, 0x82, 0x95, 0xB1, 0xBB, /* 0x70-0x73 */ + 0xB1, 0xBC, 0xB1, 0xBD, 0xB1, 0xBE, 0x82, 0x96, /* 0x74-0x77 */ + 0x82, 0x97, 0x82, 0x98, 0x82, 0x99, 0xB1, 0xBF, /* 0x78-0x7B */ + 0xB1, 0xC0, 0xB1, 0xC1, 0x82, 0x9A, 0xB1, 0xC2, /* 0x7C-0x7F */ + + 0x82, 0x9B, 0xB1, 0xC3, 0xB1, 0xC4, 0x82, 0x9C, /* 0x80-0x83 */ + 0x82, 0x9D, 0x82, 0x9E, 0x82, 0x9F, 0x82, 0xA0, /* 0x84-0x87 */ + 0xB1, 0xC5, 0xB1, 0xC6, 0x82, 0xA1, 0x82, 0xA2, /* 0x88-0x8B */ + 0xB1, 0xC7, 0x82, 0xA3, 0x82, 0xA4, 0x82, 0xA5, /* 0x8C-0x8F */ + 0xB1, 0xC8, 0x82, 0xA6, 0x82, 0xA7, 0x82, 0xA8, /* 0x90-0x93 */ + 0x82, 0xA9, 0x82, 0xAA, 0x82, 0xAB, 0x82, 0xAC, /* 0x94-0x97 */ + 0x82, 0xAD, 0x82, 0xAE, 0x82, 0xAF, 0x82, 0xB0, /* 0x98-0x9B */ + 0xB1, 0xC9, 0xB1, 0xCA, 0x82, 0xB1, 0x82, 0xB2, /* 0x9C-0x9F */ + 0x82, 0xB3, 0x82, 0xB4, 0x82, 0xB5, 0x82, 0xB6, /* 0xA0-0xA3 */ + 0xB1, 0xCB, 0x82, 0xB7, 0x82, 0xB8, 0x82, 0xB9, /* 0xA4-0xA7 */ + 0x82, 0xBA, 0x82, 0xBB, 0x82, 0xBC, 0x82, 0xBD, /* 0xA8-0xAB */ + 0x82, 0xBE, 0x82, 0xBF, 0x82, 0xC0, 0x82, 0xC1, /* 0xAC-0xAF */ + 0x82, 0xC2, 0x82, 0xC3, 0x82, 0xC4, 0x82, 0xC5, /* 0xB0-0xB3 */ + 0x82, 0xC6, 0x82, 0xC7, 0x82, 0xC8, 0xB1, 0xCC, /* 0xB4-0xB7 */ + 0x82, 0xC9, 0x82, 0xCA, 0x82, 0xCB, 0x82, 0xCC, /* 0xB8-0xBB */ + 0x82, 0xCD, 0x82, 0xCE, 0x82, 0xCF, 0x82, 0xD0, /* 0xBC-0xBF */ + 0xB1, 0xCD, 0xB1, 0xCE, 0x82, 0xD1, 0x82, 0xD2, /* 0xC0-0xC3 */ + 0xB1, 0xCF, 0x82, 0xD3, 0x82, 0xD4, 0x82, 0xD5, /* 0xC4-0xC7 */ + 0xB1, 0xD0, 0x82, 0xD6, 0x82, 0xD7, 0x82, 0xD8, /* 0xC8-0xCB */ + 0x82, 0xD9, 0x82, 0xDA, 0x82, 0xDB, 0x82, 0xDC, /* 0xCC-0xCF */ + 0xB1, 0xD1, 0xB1, 0xD2, 0x82, 0xDD, 0xB1, 0xD3, /* 0xD0-0xD3 */ + 0x82, 0xDE, 0x82, 0xDF, 0x82, 0xE0, 0x82, 0xE1, /* 0xD4-0xD7 */ + 0x82, 0xE2, 0x82, 0xE3, 0x82, 0xE4, 0x82, 0xE5, /* 0xD8-0xDB */ + 0xB1, 0xD4, 0x82, 0xE6, 0x82, 0xE7, 0x82, 0xE8, /* 0xDC-0xDF */ + 0xB1, 0xD5, 0x82, 0xE9, 0x82, 0xEA, 0x82, 0xEB, /* 0xE0-0xE3 */ + 0xB1, 0xD6, 0x82, 0xEC, 0x82, 0xED, 0x82, 0xEE, /* 0xE4-0xE7 */ + 0x82, 0xEF, 0x82, 0xF0, 0x82, 0xF1, 0x82, 0xF2, /* 0xE8-0xEB */ + 0x82, 0xF3, 0x82, 0xF4, 0x82, 0xF5, 0x82, 0xF6, /* 0xEC-0xEF */ + 0x82, 0xF7, 0x82, 0xF8, 0x82, 0xF9, 0x82, 0xFA, /* 0xF0-0xF3 */ + 0x82, 0xFB, 0x82, 0xFC, 0x82, 0xFD, 0x82, 0xFE, /* 0xF4-0xF7 */ + 0xB1, 0xD7, 0xB1, 0xD8, 0x83, 0x41, 0x83, 0x42, /* 0xF8-0xFB */ + 0xB1, 0xD9, 0x83, 0x43, 0x83, 0x44, 0xB1, 0xDA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AE[512] = { + 0xB1, 0xDB, 0xB1, 0xDC, 0x83, 0x45, 0x83, 0x46, /* 0x00-0x03 */ + 0x83, 0x47, 0x83, 0x48, 0x83, 0x49, 0x83, 0x4A, /* 0x04-0x07 */ + 0xB1, 0xDD, 0xB1, 0xDE, 0x83, 0x4B, 0xB1, 0xDF, /* 0x08-0x0B */ + 0x83, 0x4C, 0xB1, 0xE0, 0x83, 0x4D, 0x83, 0x4E, /* 0x0C-0x0F */ + 0x83, 0x4F, 0x83, 0x50, 0x83, 0x51, 0x83, 0x52, /* 0x10-0x13 */ + 0xB1, 0xE1, 0x83, 0x53, 0x83, 0x54, 0x83, 0x55, /* 0x14-0x17 */ + 0x83, 0x56, 0x83, 0x57, 0x83, 0x58, 0x83, 0x59, /* 0x18-0x1B */ + 0x83, 0x5A, 0x83, 0x61, 0x83, 0x62, 0x83, 0x63, /* 0x1C-0x1F */ + 0x83, 0x64, 0x83, 0x65, 0x83, 0x66, 0x83, 0x67, /* 0x20-0x23 */ + 0x83, 0x68, 0x83, 0x69, 0x83, 0x6A, 0x83, 0x6B, /* 0x24-0x27 */ + 0x83, 0x6C, 0x83, 0x6D, 0x83, 0x6E, 0x83, 0x6F, /* 0x28-0x2B */ + 0x83, 0x70, 0x83, 0x71, 0x83, 0x72, 0x83, 0x73, /* 0x2C-0x2F */ + 0xB1, 0xE2, 0xB1, 0xE3, 0x83, 0x74, 0x83, 0x75, /* 0x30-0x33 */ + 0xB1, 0xE4, 0x83, 0x76, 0x83, 0x77, 0xB1, 0xE5, /* 0x34-0x37 */ + 0xB1, 0xE6, 0x83, 0x78, 0xB1, 0xE7, 0x83, 0x79, /* 0x38-0x3B */ + 0x83, 0x7A, 0x83, 0x81, 0x83, 0x82, 0x83, 0x83, /* 0x3C-0x3F */ + 0xB1, 0xE8, 0xB1, 0xE9, 0x83, 0x84, 0xB1, 0xEA, /* 0x40-0x43 */ + 0x83, 0x85, 0xB1, 0xEB, 0xB1, 0xEC, 0x83, 0x86, /* 0x44-0x47 */ + 0x83, 0x87, 0x83, 0x88, 0xB1, 0xED, 0x83, 0x89, /* 0x48-0x4B */ + 0xB1, 0xEE, 0xB1, 0xEF, 0xB1, 0xF0, 0x83, 0x8A, /* 0x4C-0x4F */ + 0xB1, 0xF1, 0x83, 0x8B, 0x83, 0x8C, 0x83, 0x8D, /* 0x50-0x53 */ + 0xB1, 0xF2, 0x83, 0x8E, 0xB1, 0xF3, 0x83, 0x8F, /* 0x54-0x57 */ + 0x83, 0x90, 0x83, 0x91, 0x83, 0x92, 0x83, 0x93, /* 0x58-0x5B */ + 0xB1, 0xF4, 0xB1, 0xF5, 0x83, 0x94, 0xB1, 0xF6, /* 0x5C-0x5F */ + 0xB1, 0xF7, 0xB1, 0xF8, 0x83, 0x95, 0x83, 0x96, /* 0x60-0x63 */ + 0x83, 0x97, 0xB1, 0xF9, 0x83, 0x98, 0x83, 0x99, /* 0x64-0x67 */ + 0xB1, 0xFA, 0xB1, 0xFB, 0x83, 0x9A, 0x83, 0x9B, /* 0x68-0x6B */ + 0xB1, 0xFC, 0x83, 0x9C, 0x83, 0x9D, 0x83, 0x9E, /* 0x6C-0x6F */ + 0xB1, 0xFD, 0x83, 0x9F, 0x83, 0xA0, 0x83, 0xA1, /* 0x70-0x73 */ + 0x83, 0xA2, 0x83, 0xA3, 0x83, 0xA4, 0x83, 0xA5, /* 0x74-0x77 */ + 0xB1, 0xFE, 0xB2, 0xA1, 0x83, 0xA6, 0xB2, 0xA2, /* 0x78-0x7B */ + 0xB2, 0xA3, 0xB2, 0xA4, 0x83, 0xA7, 0x83, 0xA8, /* 0x7C-0x7F */ + + 0x83, 0xA9, 0x83, 0xAA, 0x83, 0xAB, 0x83, 0xAC, /* 0x80-0x83 */ + 0xB2, 0xA5, 0xB2, 0xA6, 0x83, 0xAD, 0x83, 0xAE, /* 0x84-0x87 */ + 0x83, 0xAF, 0x83, 0xB0, 0x83, 0xB1, 0x83, 0xB2, /* 0x88-0x8B */ + 0xB2, 0xA7, 0x83, 0xB3, 0x83, 0xB4, 0x83, 0xB5, /* 0x8C-0x8F */ + 0x83, 0xB6, 0x83, 0xB7, 0x83, 0xB8, 0x83, 0xB9, /* 0x90-0x93 */ + 0x83, 0xBA, 0x83, 0xBB, 0x83, 0xBC, 0x83, 0xBD, /* 0x94-0x97 */ + 0x83, 0xBE, 0x83, 0xBF, 0x83, 0xC0, 0x83, 0xC1, /* 0x98-0x9B */ + 0x83, 0xC2, 0x83, 0xC3, 0x83, 0xC4, 0x83, 0xC5, /* 0x9C-0x9F */ + 0x83, 0xC6, 0x83, 0xC7, 0x83, 0xC8, 0x83, 0xC9, /* 0xA0-0xA3 */ + 0x83, 0xCA, 0x83, 0xCB, 0x83, 0xCC, 0x83, 0xCD, /* 0xA4-0xA7 */ + 0x83, 0xCE, 0x83, 0xCF, 0x83, 0xD0, 0x83, 0xD1, /* 0xA8-0xAB */ + 0x83, 0xD2, 0x83, 0xD3, 0x83, 0xD4, 0x83, 0xD5, /* 0xAC-0xAF */ + 0x83, 0xD6, 0x83, 0xD7, 0x83, 0xD8, 0x83, 0xD9, /* 0xB0-0xB3 */ + 0x83, 0xDA, 0x83, 0xDB, 0x83, 0xDC, 0x83, 0xDD, /* 0xB4-0xB7 */ + 0x83, 0xDE, 0x83, 0xDF, 0x83, 0xE0, 0x83, 0xE1, /* 0xB8-0xBB */ + 0xB2, 0xA8, 0xB2, 0xA9, 0xB2, 0xAA, 0x83, 0xE2, /* 0xBC-0xBF */ + 0xB2, 0xAB, 0x83, 0xE3, 0x83, 0xE4, 0x83, 0xE5, /* 0xC0-0xC3 */ + 0xB2, 0xAC, 0x83, 0xE6, 0x83, 0xE7, 0x83, 0xE8, /* 0xC4-0xC7 */ + 0x83, 0xE9, 0x83, 0xEA, 0x83, 0xEB, 0x83, 0xEC, /* 0xC8-0xCB */ + 0xB2, 0xAD, 0xB2, 0xAE, 0x83, 0xED, 0xB2, 0xAF, /* 0xCC-0xCF */ + 0xB2, 0xB0, 0xB2, 0xB1, 0x83, 0xEE, 0x83, 0xEF, /* 0xD0-0xD3 */ + 0x83, 0xF0, 0x83, 0xF1, 0x83, 0xF2, 0x83, 0xF3, /* 0xD4-0xD7 */ + 0xB2, 0xB2, 0xB2, 0xB3, 0x83, 0xF4, 0x83, 0xF5, /* 0xD8-0xDB */ + 0xB2, 0xB4, 0x83, 0xF6, 0x83, 0xF7, 0x83, 0xF8, /* 0xDC-0xDF */ + 0x83, 0xF9, 0x83, 0xFA, 0x83, 0xFB, 0x83, 0xFC, /* 0xE0-0xE3 */ + 0x83, 0xFD, 0x83, 0xFE, 0x84, 0x41, 0x84, 0x42, /* 0xE4-0xE7 */ + 0xB2, 0xB5, 0x84, 0x43, 0x84, 0x44, 0xB2, 0xB6, /* 0xE8-0xEB */ + 0x84, 0x45, 0xB2, 0xB7, 0x84, 0x46, 0x84, 0x47, /* 0xEC-0xEF */ + 0x84, 0x48, 0x84, 0x49, 0x84, 0x4A, 0x84, 0x4B, /* 0xF0-0xF3 */ + 0xB2, 0xB8, 0x84, 0x4C, 0x84, 0x4D, 0x84, 0x4E, /* 0xF4-0xF7 */ + 0xB2, 0xB9, 0x84, 0x4F, 0x84, 0x50, 0x84, 0x51, /* 0xF8-0xFB */ + 0xB2, 0xBA, 0x84, 0x52, 0x84, 0x53, 0x84, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_AF[512] = { + 0x84, 0x55, 0x84, 0x56, 0x84, 0x57, 0x84, 0x58, /* 0x00-0x03 */ + 0x84, 0x59, 0x84, 0x5A, 0x84, 0x61, 0xB2, 0xBB, /* 0x04-0x07 */ + 0xB2, 0xBC, 0x84, 0x62, 0x84, 0x63, 0x84, 0x64, /* 0x08-0x0B */ + 0x84, 0x65, 0xB2, 0xBD, 0x84, 0x66, 0x84, 0x67, /* 0x0C-0x0F */ + 0xB2, 0xBE, 0x84, 0x68, 0x84, 0x69, 0x84, 0x6A, /* 0x10-0x13 */ + 0x84, 0x6B, 0x84, 0x6C, 0x84, 0x6D, 0x84, 0x6E, /* 0x14-0x17 */ + 0x84, 0x6F, 0x84, 0x70, 0x84, 0x71, 0x84, 0x72, /* 0x18-0x1B */ + 0x84, 0x73, 0x84, 0x74, 0x84, 0x75, 0x84, 0x76, /* 0x1C-0x1F */ + 0x84, 0x77, 0x84, 0x78, 0x84, 0x79, 0x84, 0x7A, /* 0x20-0x23 */ + 0x84, 0x81, 0x84, 0x82, 0x84, 0x83, 0x84, 0x84, /* 0x24-0x27 */ + 0x84, 0x85, 0x84, 0x86, 0x84, 0x87, 0x84, 0x88, /* 0x28-0x2B */ + 0xB2, 0xBF, 0xB2, 0xC0, 0x84, 0x89, 0x84, 0x8A, /* 0x2C-0x2F */ + 0xB2, 0xC1, 0x84, 0x8B, 0xB2, 0xC2, 0x84, 0x8C, /* 0x30-0x33 */ + 0xB2, 0xC3, 0x84, 0x8D, 0x84, 0x8E, 0x84, 0x8F, /* 0x34-0x37 */ + 0x84, 0x90, 0x84, 0x91, 0x84, 0x92, 0x84, 0x93, /* 0x38-0x3B */ + 0xB2, 0xC4, 0xB2, 0xC5, 0x84, 0x94, 0xB2, 0xC6, /* 0x3C-0x3F */ + 0x84, 0x95, 0xB2, 0xC7, 0xB2, 0xC8, 0xB2, 0xC9, /* 0x40-0x43 */ + 0x84, 0x96, 0x84, 0x97, 0x84, 0x98, 0x84, 0x99, /* 0x44-0x47 */ + 0xB2, 0xCA, 0xB2, 0xCB, 0x84, 0x9A, 0x84, 0x9B, /* 0x48-0x4B */ + 0x84, 0x9C, 0x84, 0x9D, 0x84, 0x9E, 0x84, 0x9F, /* 0x4C-0x4F */ + 0xB2, 0xCC, 0x84, 0xA0, 0x84, 0xA1, 0x84, 0xA2, /* 0x50-0x53 */ + 0x84, 0xA3, 0x84, 0xA4, 0x84, 0xA5, 0x84, 0xA6, /* 0x54-0x57 */ + 0x84, 0xA7, 0x84, 0xA8, 0x84, 0xA9, 0x84, 0xAA, /* 0x58-0x5B */ + 0xB2, 0xCD, 0xB2, 0xCE, 0x84, 0xAB, 0x84, 0xAC, /* 0x5C-0x5F */ + 0x84, 0xAD, 0x84, 0xAE, 0x84, 0xAF, 0x84, 0xB0, /* 0x60-0x63 */ + 0xB2, 0xCF, 0xB2, 0xD0, 0x84, 0xB1, 0x84, 0xB2, /* 0x64-0x67 */ + 0x84, 0xB3, 0x84, 0xB4, 0x84, 0xB5, 0x84, 0xB6, /* 0x68-0x6B */ + 0x84, 0xB7, 0x84, 0xB8, 0x84, 0xB9, 0x84, 0xBA, /* 0x6C-0x6F */ + 0x84, 0xBB, 0x84, 0xBC, 0x84, 0xBD, 0x84, 0xBE, /* 0x70-0x73 */ + 0x84, 0xBF, 0x84, 0xC0, 0x84, 0xC1, 0x84, 0xC2, /* 0x74-0x77 */ + 0x84, 0xC3, 0xB2, 0xD1, 0x84, 0xC4, 0x84, 0xC5, /* 0x78-0x7B */ + 0x84, 0xC6, 0x84, 0xC7, 0x84, 0xC8, 0x84, 0xC9, /* 0x7C-0x7F */ + + 0xB2, 0xD2, 0x84, 0xCA, 0x84, 0xCB, 0x84, 0xCC, /* 0x80-0x83 */ + 0xB2, 0xD3, 0x84, 0xCD, 0x84, 0xCE, 0x84, 0xCF, /* 0x84-0x87 */ + 0xB2, 0xD4, 0x84, 0xD0, 0x84, 0xD1, 0x84, 0xD2, /* 0x88-0x8B */ + 0x84, 0xD3, 0x84, 0xD4, 0x84, 0xD5, 0x84, 0xD6, /* 0x8C-0x8F */ + 0xB2, 0xD5, 0xB2, 0xD6, 0x84, 0xD7, 0x84, 0xD8, /* 0x90-0x93 */ + 0x84, 0xD9, 0xB2, 0xD7, 0x84, 0xDA, 0x84, 0xDB, /* 0x94-0x97 */ + 0x84, 0xDC, 0x84, 0xDD, 0x84, 0xDE, 0x84, 0xDF, /* 0x98-0x9B */ + 0xB2, 0xD8, 0x84, 0xE0, 0x84, 0xE1, 0x84, 0xE2, /* 0x9C-0x9F */ + 0x84, 0xE3, 0x84, 0xE4, 0x84, 0xE5, 0x84, 0xE6, /* 0xA0-0xA3 */ + 0x84, 0xE7, 0x84, 0xE8, 0x84, 0xE9, 0x84, 0xEA, /* 0xA4-0xA7 */ + 0x84, 0xEB, 0x84, 0xEC, 0x84, 0xED, 0x84, 0xEE, /* 0xA8-0xAB */ + 0x84, 0xEF, 0x84, 0xF0, 0x84, 0xF1, 0x84, 0xF2, /* 0xAC-0xAF */ + 0x84, 0xF3, 0x84, 0xF4, 0x84, 0xF5, 0x84, 0xF6, /* 0xB0-0xB3 */ + 0x84, 0xF7, 0x84, 0xF8, 0x84, 0xF9, 0x84, 0xFA, /* 0xB4-0xB7 */ + 0xB2, 0xD9, 0xB2, 0xDA, 0x84, 0xFB, 0x84, 0xFC, /* 0xB8-0xBB */ + 0xB2, 0xDB, 0x84, 0xFD, 0x84, 0xFE, 0x85, 0x41, /* 0xBC-0xBF */ + 0xB2, 0xDC, 0x85, 0x42, 0x85, 0x43, 0x85, 0x44, /* 0xC0-0xC3 */ + 0x85, 0x45, 0x85, 0x46, 0x85, 0x47, 0xB2, 0xDD, /* 0xC4-0xC7 */ + 0xB2, 0xDE, 0xB2, 0xDF, 0x85, 0x48, 0xB2, 0xE0, /* 0xC8-0xCB */ + 0x85, 0x49, 0xB2, 0xE1, 0xB2, 0xE2, 0x85, 0x4A, /* 0xCC-0xCF */ + 0x85, 0x4B, 0x85, 0x4C, 0x85, 0x4D, 0x85, 0x4E, /* 0xD0-0xD3 */ + 0xB2, 0xE3, 0x85, 0x4F, 0x85, 0x50, 0x85, 0x51, /* 0xD4-0xD7 */ + 0x85, 0x52, 0x85, 0x53, 0x85, 0x54, 0x85, 0x55, /* 0xD8-0xDB */ + 0xB2, 0xE4, 0x85, 0x56, 0x85, 0x57, 0x85, 0x58, /* 0xDC-0xDF */ + 0x85, 0x59, 0x85, 0x5A, 0x85, 0x61, 0x85, 0x62, /* 0xE0-0xE3 */ + 0x85, 0x63, 0x85, 0x64, 0x85, 0x65, 0x85, 0x66, /* 0xE4-0xE7 */ + 0xB2, 0xE5, 0xB2, 0xE6, 0x85, 0x67, 0x85, 0x68, /* 0xE8-0xEB */ + 0x85, 0x69, 0x85, 0x6A, 0x85, 0x6B, 0x85, 0x6C, /* 0xEC-0xEF */ + 0xB2, 0xE7, 0xB2, 0xE8, 0x85, 0x6D, 0x85, 0x6E, /* 0xF0-0xF3 */ + 0xB2, 0xE9, 0x85, 0x6F, 0x85, 0x70, 0x85, 0x71, /* 0xF4-0xF7 */ + 0xB2, 0xEA, 0x85, 0x72, 0x85, 0x73, 0x85, 0x74, /* 0xF8-0xFB */ + 0x85, 0x75, 0x85, 0x76, 0x85, 0x77, 0x85, 0x78, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B0[512] = { + 0xB2, 0xEB, 0xB2, 0xEC, 0x85, 0x79, 0x85, 0x7A, /* 0x00-0x03 */ + 0xB2, 0xED, 0x85, 0x81, 0x85, 0x82, 0x85, 0x83, /* 0x04-0x07 */ + 0x85, 0x84, 0x85, 0x85, 0x85, 0x86, 0x85, 0x87, /* 0x08-0x0B */ + 0xB2, 0xEE, 0x85, 0x88, 0x85, 0x89, 0x85, 0x8A, /* 0x0C-0x0F */ + 0xB2, 0xEF, 0x85, 0x8B, 0x85, 0x8C, 0x85, 0x8D, /* 0x10-0x13 */ + 0xB2, 0xF0, 0x85, 0x8E, 0x85, 0x8F, 0x85, 0x90, /* 0x14-0x17 */ + 0x85, 0x91, 0x85, 0x92, 0x85, 0x93, 0x85, 0x94, /* 0x18-0x1B */ + 0xB2, 0xF1, 0xB2, 0xF2, 0x85, 0x95, 0x85, 0x96, /* 0x1C-0x1F */ + 0x85, 0x97, 0x85, 0x98, 0x85, 0x99, 0x85, 0x9A, /* 0x20-0x23 */ + 0x85, 0x9B, 0x85, 0x9C, 0x85, 0x9D, 0x85, 0x9E, /* 0x24-0x27 */ + 0xB2, 0xF3, 0x85, 0x9F, 0x85, 0xA0, 0x85, 0xA1, /* 0x28-0x2B */ + 0x85, 0xA2, 0x85, 0xA3, 0x85, 0xA4, 0x85, 0xA5, /* 0x2C-0x2F */ + 0x85, 0xA6, 0x85, 0xA7, 0x85, 0xA8, 0x85, 0xA9, /* 0x30-0x33 */ + 0x85, 0xAA, 0x85, 0xAB, 0x85, 0xAC, 0x85, 0xAD, /* 0x34-0x37 */ + 0x85, 0xAE, 0x85, 0xAF, 0x85, 0xB0, 0x85, 0xB1, /* 0x38-0x3B */ + 0x85, 0xB2, 0x85, 0xB3, 0x85, 0xB4, 0x85, 0xB5, /* 0x3C-0x3F */ + 0x85, 0xB6, 0x85, 0xB7, 0x85, 0xB8, 0x85, 0xB9, /* 0x40-0x43 */ + 0xB2, 0xF4, 0xB2, 0xF5, 0x85, 0xBA, 0x85, 0xBB, /* 0x44-0x47 */ + 0xB2, 0xF6, 0x85, 0xBC, 0xB2, 0xF7, 0x85, 0xBD, /* 0x48-0x4B */ + 0xB2, 0xF8, 0x85, 0xBE, 0xB2, 0xF9, 0x85, 0xBF, /* 0x4C-0x4F */ + 0x85, 0xC0, 0x85, 0xC1, 0x85, 0xC2, 0xB2, 0xFA, /* 0x50-0x53 */ + 0xB2, 0xFB, 0xB2, 0xFC, 0x85, 0xC3, 0xB2, 0xFD, /* 0x54-0x57 */ + 0x85, 0xC4, 0xB2, 0xFE, 0x85, 0xC5, 0x85, 0xC6, /* 0x58-0x5B */ + 0x85, 0xC7, 0xB3, 0xA1, 0x85, 0xC8, 0x85, 0xC9, /* 0x5C-0x5F */ + 0x85, 0xCA, 0x85, 0xCB, 0x85, 0xCC, 0x85, 0xCD, /* 0x60-0x63 */ + 0x85, 0xCE, 0x85, 0xCF, 0x85, 0xD0, 0x85, 0xD1, /* 0x64-0x67 */ + 0x85, 0xD2, 0x85, 0xD3, 0x85, 0xD4, 0x85, 0xD5, /* 0x68-0x6B */ + 0x85, 0xD6, 0x85, 0xD7, 0x85, 0xD8, 0x85, 0xD9, /* 0x6C-0x6F */ + 0x85, 0xDA, 0x85, 0xDB, 0x85, 0xDC, 0x85, 0xDD, /* 0x70-0x73 */ + 0x85, 0xDE, 0x85, 0xDF, 0x85, 0xE0, 0x85, 0xE1, /* 0x74-0x77 */ + 0x85, 0xE2, 0x85, 0xE3, 0x85, 0xE4, 0x85, 0xE5, /* 0x78-0x7B */ + 0xB3, 0xA2, 0xB3, 0xA3, 0x85, 0xE6, 0x85, 0xE7, /* 0x7C-0x7F */ + + 0xB3, 0xA4, 0x85, 0xE8, 0x85, 0xE9, 0x85, 0xEA, /* 0x80-0x83 */ + 0xB3, 0xA5, 0x85, 0xEB, 0x85, 0xEC, 0x85, 0xED, /* 0x84-0x87 */ + 0x85, 0xEE, 0x85, 0xEF, 0x85, 0xF0, 0x85, 0xF1, /* 0x88-0x8B */ + 0xB3, 0xA6, 0xB3, 0xA7, 0x85, 0xF2, 0xB3, 0xA8, /* 0x8C-0x8F */ + 0x85, 0xF3, 0xB3, 0xA9, 0x85, 0xF4, 0x85, 0xF5, /* 0x90-0x93 */ + 0x85, 0xF6, 0x85, 0xF7, 0x85, 0xF8, 0x85, 0xF9, /* 0x94-0x97 */ + 0xB3, 0xAA, 0xB3, 0xAB, 0xB3, 0xAC, 0x85, 0xFA, /* 0x98-0x9B */ + 0xB3, 0xAD, 0x85, 0xFB, 0x85, 0xFC, 0xB3, 0xAE, /* 0x9C-0x9F */ + 0xB3, 0xAF, 0xB3, 0xB0, 0xB3, 0xB1, 0x85, 0xFD, /* 0xA0-0xA3 */ + 0x85, 0xFE, 0x86, 0x41, 0x86, 0x42, 0x86, 0x43, /* 0xA4-0xA7 */ + 0xB3, 0xB2, 0xB3, 0xB3, 0x86, 0x44, 0xB3, 0xB4, /* 0xA8-0xAB */ + 0xB3, 0xB5, 0xB3, 0xB6, 0xB3, 0xB7, 0xB3, 0xB8, /* 0xAC-0xAF */ + 0x86, 0x45, 0xB3, 0xB9, 0x86, 0x46, 0xB3, 0xBA, /* 0xB0-0xB3 */ + 0xB3, 0xBB, 0xB3, 0xBC, 0x86, 0x47, 0x86, 0x48, /* 0xB4-0xB7 */ + 0xB3, 0xBD, 0x86, 0x49, 0x86, 0x4A, 0x86, 0x4B, /* 0xB8-0xBB */ + 0xB3, 0xBE, 0x86, 0x4C, 0x86, 0x4D, 0x86, 0x4E, /* 0xBC-0xBF */ + 0x86, 0x4F, 0x86, 0x50, 0x86, 0x51, 0x86, 0x52, /* 0xC0-0xC3 */ + 0xB3, 0xBF, 0xB3, 0xC0, 0x86, 0x53, 0xB3, 0xC1, /* 0xC4-0xC7 */ + 0xB3, 0xC2, 0xB3, 0xC3, 0x86, 0x54, 0x86, 0x55, /* 0xC8-0xCB */ + 0x86, 0x56, 0x86, 0x57, 0x86, 0x58, 0x86, 0x59, /* 0xCC-0xCF */ + 0xB3, 0xC4, 0xB3, 0xC5, 0x86, 0x5A, 0x86, 0x61, /* 0xD0-0xD3 */ + 0xB3, 0xC6, 0x86, 0x62, 0x86, 0x63, 0x86, 0x64, /* 0xD4-0xD7 */ + 0xB3, 0xC7, 0x86, 0x65, 0x86, 0x66, 0x86, 0x67, /* 0xD8-0xDB */ + 0x86, 0x68, 0x86, 0x69, 0x86, 0x6A, 0x86, 0x6B, /* 0xDC-0xDF */ + 0xB3, 0xC8, 0x86, 0x6C, 0x86, 0x6D, 0x86, 0x6E, /* 0xE0-0xE3 */ + 0x86, 0x6F, 0xB3, 0xC9, 0x86, 0x70, 0x86, 0x71, /* 0xE4-0xE7 */ + 0x86, 0x72, 0x86, 0x73, 0x86, 0x74, 0x86, 0x75, /* 0xE8-0xEB */ + 0x86, 0x76, 0x86, 0x77, 0x86, 0x78, 0x86, 0x79, /* 0xEC-0xEF */ + 0x86, 0x7A, 0x86, 0x81, 0x86, 0x82, 0x86, 0x83, /* 0xF0-0xF3 */ + 0x86, 0x84, 0x86, 0x85, 0x86, 0x86, 0x86, 0x87, /* 0xF4-0xF7 */ + 0x86, 0x88, 0x86, 0x89, 0x86, 0x8A, 0x86, 0x8B, /* 0xF8-0xFB */ + 0x86, 0x8C, 0x86, 0x8D, 0x86, 0x8E, 0x86, 0x8F, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B1[512] = { + 0x86, 0x90, 0x86, 0x91, 0x86, 0x92, 0x86, 0x93, /* 0x00-0x03 */ + 0x86, 0x94, 0x86, 0x95, 0x86, 0x96, 0x86, 0x97, /* 0x04-0x07 */ + 0xB3, 0xCA, 0xB3, 0xCB, 0x86, 0x98, 0xB3, 0xCC, /* 0x08-0x0B */ + 0xB3, 0xCD, 0x86, 0x99, 0x86, 0x9A, 0x86, 0x9B, /* 0x0C-0x0F */ + 0xB3, 0xCE, 0x86, 0x9C, 0xB3, 0xCF, 0xB3, 0xD0, /* 0x10-0x13 */ + 0x86, 0x9D, 0x86, 0x9E, 0x86, 0x9F, 0x86, 0xA0, /* 0x14-0x17 */ + 0xB3, 0xD1, 0xB3, 0xD2, 0x86, 0xA1, 0xB3, 0xD3, /* 0x18-0x1B */ + 0xB3, 0xD4, 0xB3, 0xD5, 0x86, 0xA2, 0x86, 0xA3, /* 0x1C-0x1F */ + 0x86, 0xA4, 0x86, 0xA5, 0x86, 0xA6, 0xB3, 0xD6, /* 0x20-0x23 */ + 0xB3, 0xD7, 0xB3, 0xD8, 0x86, 0xA7, 0x86, 0xA8, /* 0x24-0x27 */ + 0xB3, 0xD9, 0x86, 0xA9, 0x86, 0xAA, 0x86, 0xAB, /* 0x28-0x2B */ + 0xB3, 0xDA, 0x86, 0xAC, 0x86, 0xAD, 0x86, 0xAE, /* 0x2C-0x2F */ + 0x86, 0xAF, 0x86, 0xB0, 0x86, 0xB1, 0x86, 0xB2, /* 0x30-0x33 */ + 0xB3, 0xDB, 0xB3, 0xDC, 0x86, 0xB3, 0xB3, 0xDD, /* 0x34-0x37 */ + 0xB3, 0xDE, 0xB3, 0xDF, 0x86, 0xB4, 0x86, 0xB5, /* 0x38-0x3B */ + 0x86, 0xB6, 0x86, 0xB7, 0x86, 0xB8, 0x86, 0xB9, /* 0x3C-0x3F */ + 0xB3, 0xE0, 0xB3, 0xE1, 0x86, 0xBA, 0x86, 0xBB, /* 0x40-0x43 */ + 0xB3, 0xE2, 0x86, 0xBC, 0x86, 0xBD, 0x86, 0xBE, /* 0x44-0x47 */ + 0xB3, 0xE3, 0x86, 0xBF, 0x86, 0xC0, 0x86, 0xC1, /* 0x48-0x4B */ + 0x86, 0xC2, 0x86, 0xC3, 0x86, 0xC4, 0x86, 0xC5, /* 0x4C-0x4F */ + 0xB3, 0xE4, 0xB3, 0xE5, 0x86, 0xC6, 0x86, 0xC7, /* 0x50-0x53 */ + 0xB3, 0xE6, 0xB3, 0xE7, 0x86, 0xC8, 0x86, 0xC9, /* 0x54-0x57 */ + 0xB3, 0xE8, 0x86, 0xCA, 0x86, 0xCB, 0x86, 0xCC, /* 0x58-0x5B */ + 0xB3, 0xE9, 0x86, 0xCD, 0x86, 0xCE, 0x86, 0xCF, /* 0x5C-0x5F */ + 0xB3, 0xEA, 0x86, 0xD0, 0x86, 0xD1, 0x86, 0xD2, /* 0x60-0x63 */ + 0x86, 0xD3, 0x86, 0xD4, 0x86, 0xD5, 0x86, 0xD6, /* 0x64-0x67 */ + 0x86, 0xD7, 0x86, 0xD8, 0x86, 0xD9, 0x86, 0xDA, /* 0x68-0x6B */ + 0x86, 0xDB, 0x86, 0xDC, 0x86, 0xDD, 0x86, 0xDE, /* 0x6C-0x6F */ + 0x86, 0xDF, 0x86, 0xE0, 0x86, 0xE1, 0x86, 0xE2, /* 0x70-0x73 */ + 0x86, 0xE3, 0x86, 0xE4, 0x86, 0xE5, 0x86, 0xE6, /* 0x74-0x77 */ + 0xB3, 0xEB, 0xB3, 0xEC, 0x86, 0xE7, 0x86, 0xE8, /* 0x78-0x7B */ + 0xB3, 0xED, 0x86, 0xE9, 0x86, 0xEA, 0x86, 0xEB, /* 0x7C-0x7F */ + + 0xB3, 0xEE, 0x86, 0xEC, 0xB3, 0xEF, 0x86, 0xED, /* 0x80-0x83 */ + 0x86, 0xEE, 0x86, 0xEF, 0x86, 0xF0, 0x86, 0xF1, /* 0x84-0x87 */ + 0xB3, 0xF0, 0xB3, 0xF1, 0x86, 0xF2, 0xB3, 0xF2, /* 0x88-0x8B */ + 0x86, 0xF3, 0xB3, 0xF3, 0x86, 0xF4, 0x86, 0xF5, /* 0x8C-0x8F */ + 0x86, 0xF6, 0x86, 0xF7, 0xB3, 0xF4, 0xB3, 0xF5, /* 0x90-0x93 */ + 0xB3, 0xF6, 0x86, 0xF8, 0x86, 0xF9, 0x86, 0xFA, /* 0x94-0x97 */ + 0xB3, 0xF7, 0x86, 0xFB, 0x86, 0xFC, 0x86, 0xFD, /* 0x98-0x9B */ + 0xB3, 0xF8, 0x86, 0xFE, 0x87, 0x41, 0x87, 0x42, /* 0x9C-0x9F */ + 0x87, 0x43, 0x87, 0x44, 0x87, 0x45, 0x87, 0x46, /* 0xA0-0xA3 */ + 0x87, 0x47, 0x87, 0x48, 0x87, 0x49, 0x87, 0x4A, /* 0xA4-0xA7 */ + 0xB3, 0xF9, 0x87, 0x4B, 0x87, 0x4C, 0x87, 0x4D, /* 0xA8-0xAB */ + 0x87, 0x4E, 0x87, 0x4F, 0x87, 0x50, 0x87, 0x51, /* 0xAC-0xAF */ + 0x87, 0x52, 0x87, 0x53, 0x87, 0x54, 0x87, 0x55, /* 0xB0-0xB3 */ + 0x87, 0x56, 0x87, 0x57, 0x87, 0x58, 0x87, 0x59, /* 0xB4-0xB7 */ + 0x87, 0x5A, 0x87, 0x61, 0x87, 0x62, 0x87, 0x63, /* 0xB8-0xBB */ + 0x87, 0x64, 0x87, 0x65, 0x87, 0x66, 0x87, 0x67, /* 0xBC-0xBF */ + 0x87, 0x68, 0x87, 0x69, 0x87, 0x6A, 0x87, 0x6B, /* 0xC0-0xC3 */ + 0x87, 0x6C, 0x87, 0x6D, 0x87, 0x6E, 0x87, 0x6F, /* 0xC4-0xC7 */ + 0x87, 0x70, 0x87, 0x71, 0x87, 0x72, 0x87, 0x73, /* 0xC8-0xCB */ + 0xB3, 0xFA, 0x87, 0x74, 0x87, 0x75, 0x87, 0x76, /* 0xCC-0xCF */ + 0xB3, 0xFB, 0x87, 0x77, 0x87, 0x78, 0x87, 0x79, /* 0xD0-0xD3 */ + 0xB3, 0xFC, 0x87, 0x7A, 0x87, 0x81, 0x87, 0x82, /* 0xD4-0xD7 */ + 0x87, 0x83, 0x87, 0x84, 0x87, 0x85, 0x87, 0x86, /* 0xD8-0xDB */ + 0xB3, 0xFD, 0xB3, 0xFE, 0x87, 0x87, 0xB4, 0xA1, /* 0xDC-0xDF */ + 0x87, 0x88, 0x87, 0x89, 0x87, 0x8A, 0x87, 0x8B, /* 0xE0-0xE3 */ + 0x87, 0x8C, 0x87, 0x8D, 0x87, 0x8E, 0x87, 0x8F, /* 0xE4-0xE7 */ + 0xB4, 0xA2, 0xB4, 0xA3, 0x87, 0x90, 0x87, 0x91, /* 0xE8-0xEB */ + 0xB4, 0xA4, 0x87, 0x92, 0x87, 0x93, 0x87, 0x94, /* 0xEC-0xEF */ + 0xB4, 0xA5, 0x87, 0x95, 0x87, 0x96, 0x87, 0x97, /* 0xF0-0xF3 */ + 0x87, 0x98, 0x87, 0x99, 0x87, 0x9A, 0x87, 0x9B, /* 0xF4-0xF7 */ + 0x87, 0x9C, 0xB4, 0xA6, 0x87, 0x9D, 0xB4, 0xA7, /* 0xF8-0xFB */ + 0x87, 0x9E, 0xB4, 0xA8, 0x87, 0x9F, 0x87, 0xA0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B2[512] = { + 0x87, 0xA1, 0x87, 0xA2, 0x87, 0xA3, 0x87, 0xA4, /* 0x00-0x03 */ + 0xB4, 0xA9, 0xB4, 0xAA, 0x87, 0xA5, 0x87, 0xA6, /* 0x04-0x07 */ + 0xB4, 0xAB, 0x87, 0xA7, 0x87, 0xA8, 0xB4, 0xAC, /* 0x08-0x0B */ + 0xB4, 0xAD, 0x87, 0xA9, 0x87, 0xAA, 0x87, 0xAB, /* 0x0C-0x0F */ + 0x87, 0xAC, 0x87, 0xAD, 0x87, 0xAE, 0x87, 0xAF, /* 0x10-0x13 */ + 0xB4, 0xAE, 0xB4, 0xAF, 0x87, 0xB0, 0xB4, 0xB0, /* 0x14-0x17 */ + 0x87, 0xB1, 0xB4, 0xB1, 0x87, 0xB2, 0x87, 0xB3, /* 0x18-0x1B */ + 0x87, 0xB4, 0x87, 0xB5, 0x87, 0xB6, 0x87, 0xB7, /* 0x1C-0x1F */ + 0xB4, 0xB2, 0x87, 0xB8, 0x87, 0xB9, 0x87, 0xBA, /* 0x20-0x23 */ + 0x87, 0xBB, 0x87, 0xBC, 0x87, 0xBD, 0x87, 0xBE, /* 0x24-0x27 */ + 0x87, 0xBF, 0x87, 0xC0, 0x87, 0xC1, 0x87, 0xC2, /* 0x28-0x2B */ + 0x87, 0xC3, 0x87, 0xC4, 0x87, 0xC5, 0x87, 0xC6, /* 0x2C-0x2F */ + 0x87, 0xC7, 0x87, 0xC8, 0x87, 0xC9, 0x87, 0xCA, /* 0x30-0x33 */ + 0xB4, 0xB3, 0x87, 0xCB, 0x87, 0xCC, 0x87, 0xCD, /* 0x34-0x37 */ + 0x87, 0xCE, 0x87, 0xCF, 0x87, 0xD0, 0x87, 0xD1, /* 0x38-0x3B */ + 0xB4, 0xB4, 0x87, 0xD2, 0x87, 0xD3, 0x87, 0xD4, /* 0x3C-0x3F */ + 0x87, 0xD5, 0x87, 0xD6, 0x87, 0xD7, 0x87, 0xD8, /* 0x40-0x43 */ + 0x87, 0xD9, 0x87, 0xDA, 0x87, 0xDB, 0x87, 0xDC, /* 0x44-0x47 */ + 0x87, 0xDD, 0x87, 0xDE, 0x87, 0xDF, 0x87, 0xE0, /* 0x48-0x4B */ + 0x87, 0xE1, 0x87, 0xE2, 0x87, 0xE3, 0x87, 0xE4, /* 0x4C-0x4F */ + 0x87, 0xE5, 0x87, 0xE6, 0x87, 0xE7, 0x87, 0xE8, /* 0x50-0x53 */ + 0x87, 0xE9, 0x87, 0xEA, 0x87, 0xEB, 0x87, 0xEC, /* 0x54-0x57 */ + 0xB4, 0xB5, 0x87, 0xED, 0x87, 0xEE, 0x87, 0xEF, /* 0x58-0x5B */ + 0xB4, 0xB6, 0x87, 0xF0, 0x87, 0xF1, 0x87, 0xF2, /* 0x5C-0x5F */ + 0xB4, 0xB7, 0x87, 0xF3, 0x87, 0xF4, 0x87, 0xF5, /* 0x60-0x63 */ + 0x87, 0xF6, 0x87, 0xF7, 0x87, 0xF8, 0x87, 0xF9, /* 0x64-0x67 */ + 0xB4, 0xB8, 0xB4, 0xB9, 0x87, 0xFA, 0x87, 0xFB, /* 0x68-0x6B */ + 0x87, 0xFC, 0x87, 0xFD, 0x87, 0xFE, 0x88, 0x41, /* 0x6C-0x6F */ + 0x88, 0x42, 0x88, 0x43, 0x88, 0x44, 0x88, 0x45, /* 0x70-0x73 */ + 0xB4, 0xBA, 0xB4, 0xBB, 0x88, 0x46, 0x88, 0x47, /* 0x74-0x77 */ + 0x88, 0x48, 0x88, 0x49, 0x88, 0x4A, 0x88, 0x4B, /* 0x78-0x7B */ + 0xB4, 0xBC, 0x88, 0x4C, 0x88, 0x4D, 0x88, 0x4E, /* 0x7C-0x7F */ + + 0x88, 0x4F, 0x88, 0x50, 0x88, 0x51, 0x88, 0x52, /* 0x80-0x83 */ + 0xB4, 0xBD, 0xB4, 0xBE, 0x88, 0x53, 0x88, 0x54, /* 0x84-0x87 */ + 0x88, 0x55, 0xB4, 0xBF, 0x88, 0x56, 0x88, 0x57, /* 0x88-0x8B */ + 0x88, 0x58, 0x88, 0x59, 0x88, 0x5A, 0x88, 0x61, /* 0x8C-0x8F */ + 0xB4, 0xC0, 0xB4, 0xC1, 0x88, 0x62, 0x88, 0x63, /* 0x90-0x93 */ + 0xB4, 0xC2, 0x88, 0x64, 0x88, 0x65, 0x88, 0x66, /* 0x94-0x97 */ + 0xB4, 0xC3, 0xB4, 0xC4, 0xB4, 0xC5, 0x88, 0x67, /* 0x98-0x9B */ + 0x88, 0x68, 0x88, 0x69, 0x88, 0x6A, 0x88, 0x6B, /* 0x9C-0x9F */ + 0xB4, 0xC6, 0xB4, 0xC7, 0x88, 0x6C, 0xB4, 0xC8, /* 0xA0-0xA3 */ + 0x88, 0x6D, 0xB4, 0xC9, 0xB4, 0xCA, 0x88, 0x6E, /* 0xA4-0xA7 */ + 0x88, 0x6F, 0x88, 0x70, 0xB4, 0xCB, 0x88, 0x71, /* 0xA8-0xAB */ + 0xB4, 0xCC, 0x88, 0x72, 0x88, 0x73, 0x88, 0x74, /* 0xAC-0xAF */ + 0xB4, 0xCD, 0x88, 0x75, 0x88, 0x76, 0x88, 0x77, /* 0xB0-0xB3 */ + 0xB4, 0xCE, 0x88, 0x78, 0x88, 0x79, 0x88, 0x7A, /* 0xB4-0xB7 */ + 0x88, 0x81, 0x88, 0x82, 0x88, 0x83, 0x88, 0x84, /* 0xB8-0xBB */ + 0x88, 0x85, 0x88, 0x86, 0x88, 0x87, 0x88, 0x88, /* 0xBC-0xBF */ + 0x88, 0x89, 0x88, 0x8A, 0x88, 0x8B, 0x88, 0x8C, /* 0xC0-0xC3 */ + 0x88, 0x8D, 0x88, 0x8E, 0x88, 0x8F, 0x88, 0x90, /* 0xC4-0xC7 */ + 0xB4, 0xCF, 0xB4, 0xD0, 0x88, 0x91, 0x88, 0x92, /* 0xC8-0xCB */ + 0xB4, 0xD1, 0x88, 0x93, 0x88, 0x94, 0x88, 0x95, /* 0xCC-0xCF */ + 0xB4, 0xD2, 0x88, 0x96, 0xB4, 0xD3, 0x88, 0x97, /* 0xD0-0xD3 */ + 0x88, 0x98, 0x88, 0x99, 0x88, 0x9A, 0x88, 0x9B, /* 0xD4-0xD7 */ + 0xB4, 0xD4, 0xB4, 0xD5, 0x88, 0x9C, 0xB4, 0xD6, /* 0xD8-0xDB */ + 0x88, 0x9D, 0xB4, 0xD7, 0x88, 0x9E, 0x88, 0x9F, /* 0xDC-0xDF */ + 0x88, 0xA0, 0x88, 0xA1, 0xB4, 0xD8, 0x88, 0xA2, /* 0xE0-0xE3 */ + 0xB4, 0xD9, 0xB4, 0xDA, 0xB4, 0xDB, 0x88, 0xA3, /* 0xE4-0xE7 */ + 0xB4, 0xDC, 0x88, 0xA4, 0x88, 0xA5, 0xB4, 0xDD, /* 0xE8-0xEB */ + 0xB4, 0xDE, 0xB4, 0xDF, 0xB4, 0xE0, 0xB4, 0xE1, /* 0xEC-0xEF */ + 0x88, 0xA6, 0x88, 0xA7, 0x88, 0xA8, 0xB4, 0xE2, /* 0xF0-0xF3 */ + 0xB4, 0xE3, 0xB4, 0xE4, 0x88, 0xA9, 0xB4, 0xE5, /* 0xF4-0xF7 */ + 0xB4, 0xE6, 0xB4, 0xE7, 0xB4, 0xE8, 0xB4, 0xE9, /* 0xF8-0xFB */ + 0x88, 0xAA, 0x88, 0xAB, 0x88, 0xAC, 0xB4, 0xEA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B3[512] = { + 0xB4, 0xEB, 0xB4, 0xEC, 0x88, 0xAD, 0x88, 0xAE, /* 0x00-0x03 */ + 0xB4, 0xED, 0x88, 0xAF, 0x88, 0xB0, 0x88, 0xB1, /* 0x04-0x07 */ + 0xB4, 0xEE, 0x88, 0xB2, 0x88, 0xB3, 0x88, 0xB4, /* 0x08-0x0B */ + 0x88, 0xB5, 0x88, 0xB6, 0x88, 0xB7, 0x88, 0xB8, /* 0x0C-0x0F */ + 0xB4, 0xEF, 0xB4, 0xF0, 0x88, 0xB9, 0xB4, 0xF1, /* 0x10-0x13 */ + 0xB4, 0xF2, 0xB4, 0xF3, 0x88, 0xBA, 0x88, 0xBB, /* 0x14-0x17 */ + 0x88, 0xBC, 0x88, 0xBD, 0x88, 0xBE, 0x88, 0xBF, /* 0x18-0x1B */ + 0xB4, 0xF4, 0x88, 0xC0, 0x88, 0xC1, 0x88, 0xC2, /* 0x1C-0x1F */ + 0x88, 0xC3, 0x88, 0xC4, 0x88, 0xC5, 0x88, 0xC6, /* 0x20-0x23 */ + 0x88, 0xC7, 0x88, 0xC8, 0x88, 0xC9, 0x88, 0xCA, /* 0x24-0x27 */ + 0x88, 0xCB, 0x88, 0xCC, 0x88, 0xCD, 0x88, 0xCE, /* 0x28-0x2B */ + 0x88, 0xCF, 0x88, 0xD0, 0x88, 0xD1, 0x88, 0xD2, /* 0x2C-0x2F */ + 0x88, 0xD3, 0x88, 0xD4, 0x88, 0xD5, 0x88, 0xD6, /* 0x30-0x33 */ + 0x88, 0xD7, 0x88, 0xD8, 0x88, 0xD9, 0x88, 0xDA, /* 0x34-0x37 */ + 0x88, 0xDB, 0x88, 0xDC, 0x88, 0xDD, 0x88, 0xDE, /* 0x38-0x3B */ + 0x88, 0xDF, 0x88, 0xE0, 0x88, 0xE1, 0x88, 0xE2, /* 0x3C-0x3F */ + 0x88, 0xE3, 0x88, 0xE4, 0x88, 0xE5, 0x88, 0xE6, /* 0x40-0x43 */ + 0x88, 0xE7, 0x88, 0xE8, 0x88, 0xE9, 0x88, 0xEA, /* 0x44-0x47 */ + 0x88, 0xEB, 0x88, 0xEC, 0x88, 0xED, 0x88, 0xEE, /* 0x48-0x4B */ + 0x88, 0xEF, 0x88, 0xF0, 0x88, 0xF1, 0x88, 0xF2, /* 0x4C-0x4F */ + 0x88, 0xF3, 0x88, 0xF4, 0x88, 0xF5, 0x88, 0xF6, /* 0x50-0x53 */ + 0xB4, 0xF5, 0xB4, 0xF6, 0xB4, 0xF7, 0x88, 0xF7, /* 0x54-0x57 */ + 0xB4, 0xF8, 0x88, 0xF8, 0x88, 0xF9, 0xB4, 0xF9, /* 0x58-0x5B */ + 0xB4, 0xFA, 0x88, 0xFA, 0xB4, 0xFB, 0xB4, 0xFC, /* 0x5C-0x5F */ + 0x88, 0xFB, 0x88, 0xFC, 0x88, 0xFD, 0x88, 0xFE, /* 0x60-0x63 */ + 0xB4, 0xFD, 0xB4, 0xFE, 0x89, 0x41, 0xB5, 0xA1, /* 0x64-0x67 */ + 0x89, 0x42, 0xB5, 0xA2, 0x89, 0x43, 0xB5, 0xA3, /* 0x68-0x6B */ + 0x89, 0x44, 0x89, 0x45, 0xB5, 0xA4, 0x89, 0x46, /* 0x6C-0x6F */ + 0xB5, 0xA5, 0xB5, 0xA6, 0x89, 0x47, 0x89, 0x48, /* 0x70-0x73 */ + 0xB5, 0xA7, 0x89, 0x49, 0x89, 0x4A, 0x89, 0x4B, /* 0x74-0x77 */ + 0xB5, 0xA8, 0x89, 0x4C, 0x89, 0x4D, 0x89, 0x4E, /* 0x78-0x7B */ + 0x89, 0x4F, 0x89, 0x50, 0x89, 0x51, 0x89, 0x52, /* 0x7C-0x7F */ + + 0xB5, 0xA9, 0xB5, 0xAA, 0x89, 0x53, 0xB5, 0xAB, /* 0x80-0x83 */ + 0xB5, 0xAC, 0xB5, 0xAD, 0x89, 0x54, 0x89, 0x55, /* 0x84-0x87 */ + 0x89, 0x56, 0x89, 0x57, 0x89, 0x58, 0x89, 0x59, /* 0x88-0x8B */ + 0xB5, 0xAE, 0x89, 0x5A, 0x89, 0x61, 0x89, 0x62, /* 0x8C-0x8F */ + 0xB5, 0xAF, 0x89, 0x63, 0x89, 0x64, 0x89, 0x65, /* 0x90-0x93 */ + 0xB5, 0xB0, 0x89, 0x66, 0x89, 0x67, 0x89, 0x68, /* 0x94-0x97 */ + 0x89, 0x69, 0x89, 0x6A, 0x89, 0x6B, 0x89, 0x6C, /* 0x98-0x9B */ + 0x89, 0x6D, 0x89, 0x6E, 0x89, 0x6F, 0x89, 0x70, /* 0x9C-0x9F */ + 0xB5, 0xB1, 0xB5, 0xB2, 0x89, 0x71, 0x89, 0x72, /* 0xA0-0xA3 */ + 0x89, 0x73, 0x89, 0x74, 0x89, 0x75, 0x89, 0x76, /* 0xA4-0xA7 */ + 0xB5, 0xB3, 0x89, 0x77, 0x89, 0x78, 0x89, 0x79, /* 0xA8-0xAB */ + 0xB5, 0xB4, 0x89, 0x7A, 0x89, 0x81, 0x89, 0x82, /* 0xAC-0xAF */ + 0x89, 0x83, 0x89, 0x84, 0x89, 0x85, 0x89, 0x86, /* 0xB0-0xB3 */ + 0x89, 0x87, 0x89, 0x88, 0x89, 0x89, 0x89, 0x8A, /* 0xB4-0xB7 */ + 0x89, 0x8B, 0x89, 0x8C, 0x89, 0x8D, 0x89, 0x8E, /* 0xB8-0xBB */ + 0x89, 0x8F, 0x89, 0x90, 0x89, 0x91, 0x89, 0x92, /* 0xBC-0xBF */ + 0x89, 0x93, 0x89, 0x94, 0x89, 0x95, 0x89, 0x96, /* 0xC0-0xC3 */ + 0xB5, 0xB5, 0xB5, 0xB6, 0x89, 0x97, 0x89, 0x98, /* 0xC4-0xC7 */ + 0xB5, 0xB7, 0x89, 0x99, 0x89, 0x9A, 0xB5, 0xB8, /* 0xC8-0xCB */ + 0xB5, 0xB9, 0x89, 0x9B, 0xB5, 0xBA, 0x89, 0x9C, /* 0xCC-0xCF */ + 0xB5, 0xBB, 0x89, 0x9D, 0x89, 0x9E, 0x89, 0x9F, /* 0xD0-0xD3 */ + 0xB5, 0xBC, 0xB5, 0xBD, 0x89, 0xA0, 0xB5, 0xBE, /* 0xD4-0xD7 */ + 0x89, 0xA1, 0xB5, 0xBF, 0x89, 0xA2, 0xB5, 0xC0, /* 0xD8-0xDB */ + 0x89, 0xA3, 0xB5, 0xC1, 0x89, 0xA4, 0x89, 0xA5, /* 0xDC-0xDF */ + 0xB5, 0xC2, 0x89, 0xA6, 0x89, 0xA7, 0x89, 0xA8, /* 0xE0-0xE3 */ + 0xB5, 0xC3, 0x89, 0xA9, 0x89, 0xAA, 0x89, 0xAB, /* 0xE4-0xE7 */ + 0xB5, 0xC4, 0x89, 0xAC, 0x89, 0xAD, 0x89, 0xAE, /* 0xE8-0xEB */ + 0x89, 0xAF, 0x89, 0xB0, 0x89, 0xB1, 0x89, 0xB2, /* 0xEC-0xEF */ + 0x89, 0xB3, 0x89, 0xB4, 0x89, 0xB5, 0x89, 0xB6, /* 0xF0-0xF3 */ + 0x89, 0xB7, 0x89, 0xB8, 0x89, 0xB9, 0x89, 0xBA, /* 0xF4-0xF7 */ + 0x89, 0xBB, 0x89, 0xBC, 0x89, 0xBD, 0x89, 0xBE, /* 0xF8-0xFB */ + 0xB5, 0xC5, 0x89, 0xBF, 0x89, 0xC0, 0x89, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B4[512] = { + 0x89, 0xC2, 0x89, 0xC3, 0x89, 0xC4, 0x89, 0xC5, /* 0x00-0x03 */ + 0x89, 0xC6, 0x89, 0xC7, 0x89, 0xC8, 0x89, 0xC9, /* 0x04-0x07 */ + 0x89, 0xCA, 0x89, 0xCB, 0x89, 0xCC, 0x89, 0xCD, /* 0x08-0x0B */ + 0x89, 0xCE, 0x89, 0xCF, 0x89, 0xD0, 0x89, 0xD1, /* 0x0C-0x0F */ + 0xB5, 0xC6, 0x89, 0xD2, 0x89, 0xD3, 0x89, 0xD4, /* 0x10-0x13 */ + 0x89, 0xD5, 0x89, 0xD6, 0x89, 0xD7, 0x89, 0xD8, /* 0x14-0x17 */ + 0xB5, 0xC7, 0x89, 0xD9, 0x89, 0xDA, 0x89, 0xDB, /* 0x18-0x1B */ + 0xB5, 0xC8, 0x89, 0xDC, 0x89, 0xDD, 0x89, 0xDE, /* 0x1C-0x1F */ + 0xB5, 0xC9, 0x89, 0xDF, 0x89, 0xE0, 0x89, 0xE1, /* 0x20-0x23 */ + 0x89, 0xE2, 0x89, 0xE3, 0x89, 0xE4, 0x89, 0xE5, /* 0x24-0x27 */ + 0xB5, 0xCA, 0xB5, 0xCB, 0x89, 0xE6, 0xB5, 0xCC, /* 0x28-0x2B */ + 0x89, 0xE7, 0x89, 0xE8, 0x89, 0xE9, 0x89, 0xEA, /* 0x2C-0x2F */ + 0x89, 0xEB, 0x89, 0xEC, 0x89, 0xED, 0x89, 0xEE, /* 0x30-0x33 */ + 0xB5, 0xCD, 0x89, 0xEF, 0x89, 0xF0, 0x89, 0xF1, /* 0x34-0x37 */ + 0x89, 0xF2, 0x89, 0xF3, 0x89, 0xF4, 0x89, 0xF5, /* 0x38-0x3B */ + 0x89, 0xF6, 0x89, 0xF7, 0x89, 0xF8, 0x89, 0xF9, /* 0x3C-0x3F */ + 0x89, 0xFA, 0x89, 0xFB, 0x89, 0xFC, 0x89, 0xFD, /* 0x40-0x43 */ + 0x89, 0xFE, 0x8A, 0x41, 0x8A, 0x42, 0x8A, 0x43, /* 0x44-0x47 */ + 0x8A, 0x44, 0x8A, 0x45, 0x8A, 0x46, 0x8A, 0x47, /* 0x48-0x4B */ + 0x8A, 0x48, 0x8A, 0x49, 0x8A, 0x4A, 0x8A, 0x4B, /* 0x4C-0x4F */ + 0xB5, 0xCE, 0xB5, 0xCF, 0x8A, 0x4C, 0x8A, 0x4D, /* 0x50-0x53 */ + 0xB5, 0xD0, 0x8A, 0x4E, 0x8A, 0x4F, 0x8A, 0x50, /* 0x54-0x57 */ + 0xB5, 0xD1, 0x8A, 0x51, 0x8A, 0x52, 0x8A, 0x53, /* 0x58-0x5B */ + 0x8A, 0x54, 0x8A, 0x55, 0x8A, 0x56, 0x8A, 0x57, /* 0x5C-0x5F */ + 0xB5, 0xD2, 0xB5, 0xD3, 0x8A, 0x58, 0xB5, 0xD4, /* 0x60-0x63 */ + 0x8A, 0x59, 0xB5, 0xD5, 0x8A, 0x5A, 0x8A, 0x61, /* 0x64-0x67 */ + 0x8A, 0x62, 0x8A, 0x63, 0x8A, 0x64, 0x8A, 0x65, /* 0x68-0x6B */ + 0xB5, 0xD6, 0x8A, 0x66, 0x8A, 0x67, 0x8A, 0x68, /* 0x6C-0x6F */ + 0x8A, 0x69, 0x8A, 0x6A, 0x8A, 0x6B, 0x8A, 0x6C, /* 0x70-0x73 */ + 0x8A, 0x6D, 0x8A, 0x6E, 0x8A, 0x6F, 0x8A, 0x70, /* 0x74-0x77 */ + 0x8A, 0x71, 0x8A, 0x72, 0x8A, 0x73, 0x8A, 0x74, /* 0x78-0x7B */ + 0x8A, 0x75, 0x8A, 0x76, 0x8A, 0x77, 0x8A, 0x78, /* 0x7C-0x7F */ + + 0xB5, 0xD7, 0x8A, 0x79, 0x8A, 0x7A, 0x8A, 0x81, /* 0x80-0x83 */ + 0x8A, 0x82, 0x8A, 0x83, 0x8A, 0x84, 0x8A, 0x85, /* 0x84-0x87 */ + 0xB5, 0xD8, 0x8A, 0x86, 0x8A, 0x87, 0x8A, 0x88, /* 0x88-0x8B */ + 0x8A, 0x89, 0x8A, 0x8A, 0x8A, 0x8B, 0x8A, 0x8C, /* 0x8C-0x8F */ + 0x8A, 0x8D, 0x8A, 0x8E, 0x8A, 0x8F, 0x8A, 0x90, /* 0x90-0x93 */ + 0x8A, 0x91, 0x8A, 0x92, 0x8A, 0x93, 0x8A, 0x94, /* 0x94-0x97 */ + 0x8A, 0x95, 0x8A, 0x96, 0x8A, 0x97, 0x8A, 0x98, /* 0x98-0x9B */ + 0x8A, 0x99, 0xB5, 0xD9, 0x8A, 0x9A, 0x8A, 0x9B, /* 0x9C-0x9F */ + 0x8A, 0x9C, 0x8A, 0x9D, 0x8A, 0x9E, 0x8A, 0x9F, /* 0xA0-0xA3 */ + 0xB5, 0xDA, 0x8A, 0xA0, 0x8A, 0xA1, 0x8A, 0xA2, /* 0xA4-0xA7 */ + 0xB5, 0xDB, 0x8A, 0xA3, 0x8A, 0xA4, 0x8A, 0xA5, /* 0xA8-0xAB */ + 0xB5, 0xDC, 0x8A, 0xA6, 0x8A, 0xA7, 0x8A, 0xA8, /* 0xAC-0xAF */ + 0x8A, 0xA9, 0x8A, 0xAA, 0x8A, 0xAB, 0x8A, 0xAC, /* 0xB0-0xB3 */ + 0x8A, 0xAD, 0xB5, 0xDD, 0x8A, 0xAE, 0xB5, 0xDE, /* 0xB4-0xB7 */ + 0x8A, 0xAF, 0xB5, 0xDF, 0x8A, 0xB0, 0x8A, 0xB1, /* 0xB8-0xBB */ + 0x8A, 0xB2, 0x8A, 0xB3, 0x8A, 0xB4, 0x8A, 0xB5, /* 0xBC-0xBF */ + 0xB5, 0xE0, 0x8A, 0xB6, 0x8A, 0xB7, 0x8A, 0xB8, /* 0xC0-0xC3 */ + 0xB5, 0xE1, 0x8A, 0xB9, 0x8A, 0xBA, 0x8A, 0xBB, /* 0xC4-0xC7 */ + 0xB5, 0xE2, 0x8A, 0xBC, 0x8A, 0xBD, 0x8A, 0xBE, /* 0xC8-0xCB */ + 0x8A, 0xBF, 0x8A, 0xC0, 0x8A, 0xC1, 0x8A, 0xC2, /* 0xCC-0xCF */ + 0xB5, 0xE3, 0x8A, 0xC3, 0x8A, 0xC4, 0x8A, 0xC5, /* 0xD0-0xD3 */ + 0x8A, 0xC6, 0xB5, 0xE4, 0x8A, 0xC7, 0x8A, 0xC8, /* 0xD4-0xD7 */ + 0x8A, 0xC9, 0x8A, 0xCA, 0x8A, 0xCB, 0x8A, 0xCC, /* 0xD8-0xDB */ + 0xB5, 0xE5, 0xB5, 0xE6, 0x8A, 0xCD, 0x8A, 0xCE, /* 0xDC-0xDF */ + 0xB5, 0xE7, 0x8A, 0xCF, 0x8A, 0xD0, 0xB5, 0xE8, /* 0xE0-0xE3 */ + 0xB5, 0xE9, 0x8A, 0xD1, 0xB5, 0xEA, 0x8A, 0xD2, /* 0xE4-0xE7 */ + 0x8A, 0xD3, 0x8A, 0xD4, 0x8A, 0xD5, 0x8A, 0xD6, /* 0xE8-0xEB */ + 0xB5, 0xEB, 0xB5, 0xEC, 0x8A, 0xD7, 0xB5, 0xED, /* 0xEC-0xEF */ + 0x8A, 0xD8, 0xB5, 0xEE, 0x8A, 0xD9, 0x8A, 0xDA, /* 0xF0-0xF3 */ + 0x8A, 0xDB, 0x8A, 0xDC, 0x8A, 0xDD, 0x8A, 0xDE, /* 0xF4-0xF7 */ + 0xB5, 0xEF, 0x8A, 0xDF, 0x8A, 0xE0, 0x8A, 0xE1, /* 0xF8-0xFB */ + 0x8A, 0xE2, 0x8A, 0xE3, 0x8A, 0xE4, 0x8A, 0xE5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B5[512] = { + 0x8A, 0xE6, 0x8A, 0xE7, 0x8A, 0xE8, 0x8A, 0xE9, /* 0x00-0x03 */ + 0x8A, 0xEA, 0x8A, 0xEB, 0x8A, 0xEC, 0x8A, 0xED, /* 0x04-0x07 */ + 0x8A, 0xEE, 0x8A, 0xEF, 0x8A, 0xF0, 0x8A, 0xF1, /* 0x08-0x0B */ + 0x8A, 0xF2, 0x8A, 0xF3, 0x8A, 0xF4, 0x8A, 0xF5, /* 0x0C-0x0F */ + 0x8A, 0xF6, 0x8A, 0xF7, 0x8A, 0xF8, 0x8A, 0xF9, /* 0x10-0x13 */ + 0xB5, 0xF0, 0xB5, 0xF1, 0x8A, 0xFA, 0x8A, 0xFB, /* 0x14-0x17 */ + 0xB5, 0xF2, 0x8A, 0xFC, 0x8A, 0xFD, 0xB5, 0xF3, /* 0x18-0x1B */ + 0xB5, 0xF4, 0x8A, 0xFE, 0x8B, 0x41, 0x8B, 0x42, /* 0x1C-0x1F */ + 0x8B, 0x43, 0x8B, 0x44, 0x8B, 0x45, 0x8B, 0x46, /* 0x20-0x23 */ + 0xB5, 0xF5, 0xB5, 0xF6, 0x8B, 0x47, 0xB5, 0xF7, /* 0x24-0x27 */ + 0xB5, 0xF8, 0xB5, 0xF9, 0xB5, 0xFA, 0x8B, 0x48, /* 0x28-0x2B */ + 0x8B, 0x49, 0x8B, 0x4A, 0x8B, 0x4B, 0x8B, 0x4C, /* 0x2C-0x2F */ + 0xB5, 0xFB, 0xB5, 0xFC, 0x8B, 0x4D, 0x8B, 0x4E, /* 0x30-0x33 */ + 0xB5, 0xFD, 0x8B, 0x4F, 0x8B, 0x50, 0x8B, 0x51, /* 0x34-0x37 */ + 0xB5, 0xFE, 0x8B, 0x52, 0x8B, 0x53, 0x8B, 0x54, /* 0x38-0x3B */ + 0x8B, 0x55, 0x8B, 0x56, 0x8B, 0x57, 0x8B, 0x58, /* 0x3C-0x3F */ + 0xB6, 0xA1, 0xB6, 0xA2, 0x8B, 0x59, 0xB6, 0xA3, /* 0x40-0x43 */ + 0xB6, 0xA4, 0xB6, 0xA5, 0x8B, 0x5A, 0x8B, 0x61, /* 0x44-0x47 */ + 0x8B, 0x62, 0x8B, 0x63, 0x8B, 0x64, 0xB6, 0xA6, /* 0x48-0x4B */ + 0xB6, 0xA7, 0xB6, 0xA8, 0x8B, 0x65, 0x8B, 0x66, /* 0x4C-0x4F */ + 0xB6, 0xA9, 0x8B, 0x67, 0x8B, 0x68, 0x8B, 0x69, /* 0x50-0x53 */ + 0xB6, 0xAA, 0x8B, 0x6A, 0x8B, 0x6B, 0x8B, 0x6C, /* 0x54-0x57 */ + 0x8B, 0x6D, 0x8B, 0x6E, 0x8B, 0x6F, 0x8B, 0x70, /* 0x58-0x5B */ + 0xB6, 0xAB, 0xB6, 0xAC, 0x8B, 0x71, 0xB6, 0xAD, /* 0x5C-0x5F */ + 0xB6, 0xAE, 0xB6, 0xAF, 0x8B, 0x72, 0x8B, 0x73, /* 0x60-0x63 */ + 0x8B, 0x74, 0x8B, 0x75, 0x8B, 0x76, 0x8B, 0x77, /* 0x64-0x67 */ + 0x8B, 0x78, 0x8B, 0x79, 0x8B, 0x7A, 0x8B, 0x81, /* 0x68-0x6B */ + 0x8B, 0x82, 0x8B, 0x83, 0x8B, 0x84, 0x8B, 0x85, /* 0x6C-0x6F */ + 0x8B, 0x86, 0x8B, 0x87, 0x8B, 0x88, 0x8B, 0x89, /* 0x70-0x73 */ + 0x8B, 0x8A, 0x8B, 0x8B, 0x8B, 0x8C, 0x8B, 0x8D, /* 0x74-0x77 */ + 0x8B, 0x8E, 0x8B, 0x8F, 0x8B, 0x90, 0x8B, 0x91, /* 0x78-0x7B */ + 0x8B, 0x92, 0x8B, 0x93, 0x8B, 0x94, 0x8B, 0x95, /* 0x7C-0x7F */ + + 0x8B, 0x96, 0x8B, 0x97, 0x8B, 0x98, 0x8B, 0x99, /* 0x80-0x83 */ + 0x8B, 0x9A, 0x8B, 0x9B, 0x8B, 0x9C, 0x8B, 0x9D, /* 0x84-0x87 */ + 0x8B, 0x9E, 0x8B, 0x9F, 0x8B, 0xA0, 0x8B, 0xA1, /* 0x88-0x8B */ + 0x8B, 0xA2, 0x8B, 0xA3, 0x8B, 0xA4, 0x8B, 0xA5, /* 0x8C-0x8F */ + 0x8B, 0xA6, 0x8B, 0xA7, 0x8B, 0xA8, 0x8B, 0xA9, /* 0x90-0x93 */ + 0x8B, 0xAA, 0x8B, 0xAB, 0x8B, 0xAC, 0x8B, 0xAD, /* 0x94-0x97 */ + 0x8B, 0xAE, 0x8B, 0xAF, 0x8B, 0xB0, 0x8B, 0xB1, /* 0x98-0x9B */ + 0x8B, 0xB2, 0x8B, 0xB3, 0x8B, 0xB4, 0x8B, 0xB5, /* 0x9C-0x9F */ + 0xB6, 0xB0, 0xB6, 0xB1, 0x8B, 0xB6, 0x8B, 0xB7, /* 0xA0-0xA3 */ + 0xB6, 0xB2, 0x8B, 0xB8, 0x8B, 0xB9, 0x8B, 0xBA, /* 0xA4-0xA7 */ + 0xB6, 0xB3, 0x8B, 0xBB, 0xB6, 0xB4, 0xB6, 0xB5, /* 0xA8-0xAB */ + 0x8B, 0xBC, 0x8B, 0xBD, 0x8B, 0xBE, 0x8B, 0xBF, /* 0xAC-0xAF */ + 0xB6, 0xB6, 0xB6, 0xB7, 0x8B, 0xC0, 0xB6, 0xB8, /* 0xB0-0xB3 */ + 0xB6, 0xB9, 0xB6, 0xBA, 0x8B, 0xC1, 0x8B, 0xC2, /* 0xB4-0xB7 */ + 0x8B, 0xC3, 0x8B, 0xC4, 0x8B, 0xC5, 0xB6, 0xBB, /* 0xB8-0xBB */ + 0xB6, 0xBC, 0xB6, 0xBD, 0x8B, 0xC6, 0x8B, 0xC7, /* 0xBC-0xBF */ + 0xB6, 0xBE, 0x8B, 0xC8, 0x8B, 0xC9, 0x8B, 0xCA, /* 0xC0-0xC3 */ + 0xB6, 0xBF, 0x8B, 0xCB, 0x8B, 0xCC, 0x8B, 0xCD, /* 0xC4-0xC7 */ + 0x8B, 0xCE, 0x8B, 0xCF, 0x8B, 0xD0, 0x8B, 0xD1, /* 0xC8-0xCB */ + 0xB6, 0xC0, 0xB6, 0xC1, 0x8B, 0xD2, 0xB6, 0xC2, /* 0xCC-0xCF */ + 0xB6, 0xC3, 0xB6, 0xC4, 0x8B, 0xD3, 0x8B, 0xD4, /* 0xD0-0xD3 */ + 0x8B, 0xD5, 0x8B, 0xD6, 0x8B, 0xD7, 0x8B, 0xD8, /* 0xD4-0xD7 */ + 0xB6, 0xC5, 0x8B, 0xD9, 0x8B, 0xDA, 0x8B, 0xDB, /* 0xD8-0xDB */ + 0x8B, 0xDC, 0x8B, 0xDD, 0x8B, 0xDE, 0x8B, 0xDF, /* 0xDC-0xDF */ + 0x8B, 0xE0, 0x8B, 0xE1, 0x8B, 0xE2, 0x8B, 0xE3, /* 0xE0-0xE3 */ + 0x8B, 0xE4, 0x8B, 0xE5, 0x8B, 0xE6, 0x8B, 0xE7, /* 0xE4-0xE7 */ + 0x8B, 0xE8, 0x8B, 0xE9, 0x8B, 0xEA, 0x8B, 0xEB, /* 0xE8-0xEB */ + 0xB6, 0xC6, 0x8B, 0xEC, 0x8B, 0xED, 0x8B, 0xEE, /* 0xEC-0xEF */ + 0x8B, 0xEF, 0x8B, 0xF0, 0x8B, 0xF1, 0x8B, 0xF2, /* 0xF0-0xF3 */ + 0x8B, 0xF3, 0x8B, 0xF4, 0x8B, 0xF5, 0x8B, 0xF6, /* 0xF4-0xF7 */ + 0x8B, 0xF7, 0x8B, 0xF8, 0x8B, 0xF9, 0x8B, 0xFA, /* 0xF8-0xFB */ + 0x8B, 0xFB, 0x8B, 0xFC, 0x8B, 0xFD, 0x8B, 0xFE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B6[512] = { + 0x8C, 0x41, 0x8C, 0x42, 0x8C, 0x43, 0x8C, 0x44, /* 0x00-0x03 */ + 0x8C, 0x45, 0x8C, 0x46, 0x8C, 0x47, 0x8C, 0x48, /* 0x04-0x07 */ + 0x8C, 0x49, 0x8C, 0x4A, 0x8C, 0x4B, 0x8C, 0x4C, /* 0x08-0x0B */ + 0x8C, 0x4D, 0x8C, 0x4E, 0x8C, 0x4F, 0x8C, 0x50, /* 0x0C-0x0F */ + 0xB6, 0xC7, 0xB6, 0xC8, 0x8C, 0x51, 0x8C, 0x52, /* 0x10-0x13 */ + 0xB6, 0xC9, 0x8C, 0x53, 0x8C, 0x54, 0x8C, 0x55, /* 0x14-0x17 */ + 0xB6, 0xCA, 0x8C, 0x56, 0x8C, 0x57, 0x8C, 0x58, /* 0x18-0x1B */ + 0x8C, 0x59, 0x8C, 0x5A, 0x8C, 0x61, 0x8C, 0x62, /* 0x1C-0x1F */ + 0x8C, 0x63, 0x8C, 0x64, 0x8C, 0x65, 0x8C, 0x66, /* 0x20-0x23 */ + 0x8C, 0x67, 0xB6, 0xCB, 0x8C, 0x68, 0x8C, 0x69, /* 0x24-0x27 */ + 0x8C, 0x6A, 0x8C, 0x6B, 0x8C, 0x6C, 0x8C, 0x6D, /* 0x28-0x2B */ + 0xB6, 0xCC, 0x8C, 0x6E, 0x8C, 0x6F, 0x8C, 0x70, /* 0x2C-0x2F */ + 0x8C, 0x71, 0x8C, 0x72, 0x8C, 0x73, 0x8C, 0x74, /* 0x30-0x33 */ + 0xB6, 0xCD, 0x8C, 0x75, 0x8C, 0x76, 0x8C, 0x77, /* 0x34-0x37 */ + 0x8C, 0x78, 0x8C, 0x79, 0x8C, 0x7A, 0x8C, 0x81, /* 0x38-0x3B */ + 0x8C, 0x82, 0x8C, 0x83, 0x8C, 0x84, 0x8C, 0x85, /* 0x3C-0x3F */ + 0x8C, 0x86, 0x8C, 0x87, 0x8C, 0x88, 0x8C, 0x89, /* 0x40-0x43 */ + 0x8C, 0x8A, 0x8C, 0x8B, 0x8C, 0x8C, 0x8C, 0x8D, /* 0x44-0x47 */ + 0xB6, 0xCE, 0x8C, 0x8E, 0x8C, 0x8F, 0x8C, 0x90, /* 0x48-0x4B */ + 0x8C, 0x91, 0x8C, 0x92, 0x8C, 0x93, 0x8C, 0x94, /* 0x4C-0x4F */ + 0x8C, 0x95, 0x8C, 0x96, 0x8C, 0x97, 0x8C, 0x98, /* 0x50-0x53 */ + 0x8C, 0x99, 0x8C, 0x9A, 0x8C, 0x9B, 0x8C, 0x9C, /* 0x54-0x57 */ + 0x8C, 0x9D, 0x8C, 0x9E, 0x8C, 0x9F, 0x8C, 0xA0, /* 0x58-0x5B */ + 0x8C, 0xA1, 0x8C, 0xA2, 0x8C, 0xA3, 0x8C, 0xA4, /* 0x5C-0x5F */ + 0x8C, 0xA5, 0x8C, 0xA6, 0x8C, 0xA7, 0x8C, 0xA8, /* 0x60-0x63 */ + 0xB6, 0xCF, 0x8C, 0xA9, 0x8C, 0xAA, 0x8C, 0xAB, /* 0x64-0x67 */ + 0xB6, 0xD0, 0x8C, 0xAC, 0x8C, 0xAD, 0x8C, 0xAE, /* 0x68-0x6B */ + 0x8C, 0xAF, 0x8C, 0xB0, 0x8C, 0xB1, 0x8C, 0xB2, /* 0x6C-0x6F */ + 0x8C, 0xB3, 0x8C, 0xB4, 0x8C, 0xB5, 0x8C, 0xB6, /* 0x70-0x73 */ + 0x8C, 0xB7, 0x8C, 0xB8, 0x8C, 0xB9, 0x8C, 0xBA, /* 0x74-0x77 */ + 0x8C, 0xBB, 0x8C, 0xBC, 0x8C, 0xBD, 0x8C, 0xBE, /* 0x78-0x7B */ + 0x8C, 0xBF, 0x8C, 0xC0, 0x8C, 0xC1, 0x8C, 0xC2, /* 0x7C-0x7F */ + + 0x8C, 0xC3, 0x8C, 0xC4, 0x8C, 0xC5, 0x8C, 0xC6, /* 0x80-0x83 */ + 0x8C, 0xC7, 0x8C, 0xC8, 0x8C, 0xC9, 0x8C, 0xCA, /* 0x84-0x87 */ + 0x8C, 0xCB, 0x8C, 0xCC, 0x8C, 0xCD, 0x8C, 0xCE, /* 0x88-0x8B */ + 0x8C, 0xCF, 0x8C, 0xD0, 0x8C, 0xD1, 0x8C, 0xD2, /* 0x8C-0x8F */ + 0x8C, 0xD3, 0x8C, 0xD4, 0x8C, 0xD5, 0x8C, 0xD6, /* 0x90-0x93 */ + 0x8C, 0xD7, 0x8C, 0xD8, 0x8C, 0xD9, 0x8C, 0xDA, /* 0x94-0x97 */ + 0x8C, 0xDB, 0x8C, 0xDC, 0x8C, 0xDD, 0x8C, 0xDE, /* 0x98-0x9B */ + 0xB6, 0xD1, 0xB6, 0xD2, 0x8C, 0xDF, 0x8C, 0xE0, /* 0x9C-0x9F */ + 0xB6, 0xD3, 0x8C, 0xE1, 0x8C, 0xE2, 0x8C, 0xE3, /* 0xA0-0xA3 */ + 0xB6, 0xD4, 0x8C, 0xE4, 0x8C, 0xE5, 0x8C, 0xE6, /* 0xA4-0xA7 */ + 0x8C, 0xE7, 0x8C, 0xE8, 0x8C, 0xE9, 0xB6, 0xD5, /* 0xA8-0xAB */ + 0xB6, 0xD6, 0x8C, 0xEA, 0x8C, 0xEB, 0x8C, 0xEC, /* 0xAC-0xAF */ + 0x8C, 0xED, 0xB6, 0xD7, 0x8C, 0xEE, 0x8C, 0xEF, /* 0xB0-0xB3 */ + 0x8C, 0xF0, 0x8C, 0xF1, 0x8C, 0xF2, 0x8C, 0xF3, /* 0xB4-0xB7 */ + 0x8C, 0xF4, 0x8C, 0xF5, 0x8C, 0xF6, 0x8C, 0xF7, /* 0xB8-0xBB */ + 0x8C, 0xF8, 0x8C, 0xF9, 0x8C, 0xFA, 0x8C, 0xFB, /* 0xBC-0xBF */ + 0x8C, 0xFC, 0x8C, 0xFD, 0x8C, 0xFE, 0x8D, 0x41, /* 0xC0-0xC3 */ + 0x8D, 0x42, 0x8D, 0x43, 0x8D, 0x44, 0x8D, 0x45, /* 0xC4-0xC7 */ + 0x8D, 0x46, 0x8D, 0x47, 0x8D, 0x48, 0x8D, 0x49, /* 0xC8-0xCB */ + 0x8D, 0x4A, 0x8D, 0x4B, 0x8D, 0x4C, 0x8D, 0x4D, /* 0xCC-0xCF */ + 0x8D, 0x4E, 0x8D, 0x4F, 0x8D, 0x50, 0x8D, 0x51, /* 0xD0-0xD3 */ + 0xB6, 0xD8, 0x8D, 0x52, 0x8D, 0x53, 0x8D, 0x54, /* 0xD4-0xD7 */ + 0x8D, 0x55, 0x8D, 0x56, 0x8D, 0x57, 0x8D, 0x58, /* 0xD8-0xDB */ + 0x8D, 0x59, 0x8D, 0x5A, 0x8D, 0x61, 0x8D, 0x62, /* 0xDC-0xDF */ + 0x8D, 0x63, 0x8D, 0x64, 0x8D, 0x65, 0x8D, 0x66, /* 0xE0-0xE3 */ + 0x8D, 0x67, 0x8D, 0x68, 0x8D, 0x69, 0x8D, 0x6A, /* 0xE4-0xE7 */ + 0x8D, 0x6B, 0x8D, 0x6C, 0x8D, 0x6D, 0x8D, 0x6E, /* 0xE8-0xEB */ + 0x8D, 0x6F, 0x8D, 0x70, 0x8D, 0x71, 0x8D, 0x72, /* 0xEC-0xEF */ + 0xB6, 0xD9, 0x8D, 0x73, 0x8D, 0x74, 0x8D, 0x75, /* 0xF0-0xF3 */ + 0xB6, 0xDA, 0x8D, 0x76, 0x8D, 0x77, 0x8D, 0x78, /* 0xF4-0xF7 */ + 0xB6, 0xDB, 0x8D, 0x79, 0x8D, 0x7A, 0x8D, 0x81, /* 0xF8-0xFB */ + 0x8D, 0x82, 0x8D, 0x83, 0x8D, 0x84, 0x8D, 0x85, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B7[512] = { + 0xB6, 0xDC, 0xB6, 0xDD, 0x8D, 0x86, 0x8D, 0x87, /* 0x00-0x03 */ + 0x8D, 0x88, 0xB6, 0xDE, 0x8D, 0x89, 0x8D, 0x8A, /* 0x04-0x07 */ + 0x8D, 0x8B, 0x8D, 0x8C, 0x8D, 0x8D, 0x8D, 0x8E, /* 0x08-0x0B */ + 0x8D, 0x8F, 0x8D, 0x90, 0x8D, 0x91, 0x8D, 0x92, /* 0x0C-0x0F */ + 0x8D, 0x93, 0x8D, 0x94, 0x8D, 0x95, 0x8D, 0x96, /* 0x10-0x13 */ + 0x8D, 0x97, 0x8D, 0x98, 0x8D, 0x99, 0x8D, 0x9A, /* 0x14-0x17 */ + 0x8D, 0x9B, 0x8D, 0x9C, 0x8D, 0x9D, 0x8D, 0x9E, /* 0x18-0x1B */ + 0x8D, 0x9F, 0x8D, 0xA0, 0x8D, 0xA1, 0x8D, 0xA2, /* 0x1C-0x1F */ + 0x8D, 0xA3, 0x8D, 0xA4, 0x8D, 0xA5, 0x8D, 0xA6, /* 0x20-0x23 */ + 0x8D, 0xA7, 0x8D, 0xA8, 0x8D, 0xA9, 0x8D, 0xAA, /* 0x24-0x27 */ + 0xB6, 0xDF, 0xB6, 0xE0, 0x8D, 0xAB, 0x8D, 0xAC, /* 0x28-0x2B */ + 0xB6, 0xE1, 0x8D, 0xAD, 0x8D, 0xAE, 0xB6, 0xE2, /* 0x2C-0x2F */ + 0xB6, 0xE3, 0x8D, 0xAF, 0x8D, 0xB0, 0x8D, 0xB1, /* 0x30-0x33 */ + 0x8D, 0xB2, 0x8D, 0xB3, 0x8D, 0xB4, 0x8D, 0xB5, /* 0x34-0x37 */ + 0xB6, 0xE4, 0xB6, 0xE5, 0x8D, 0xB6, 0xB6, 0xE6, /* 0x38-0x3B */ + 0x8D, 0xB7, 0x8D, 0xB8, 0x8D, 0xB9, 0x8D, 0xBA, /* 0x3C-0x3F */ + 0x8D, 0xBB, 0x8D, 0xBC, 0x8D, 0xBD, 0x8D, 0xBE, /* 0x40-0x43 */ + 0xB6, 0xE7, 0x8D, 0xBF, 0x8D, 0xC0, 0x8D, 0xC1, /* 0x44-0x47 */ + 0xB6, 0xE8, 0x8D, 0xC2, 0x8D, 0xC3, 0x8D, 0xC4, /* 0x48-0x4B */ + 0xB6, 0xE9, 0x8D, 0xC5, 0x8D, 0xC6, 0x8D, 0xC7, /* 0x4C-0x4F */ + 0x8D, 0xC8, 0x8D, 0xC9, 0x8D, 0xCA, 0x8D, 0xCB, /* 0x50-0x53 */ + 0xB6, 0xEA, 0xB6, 0xEB, 0x8D, 0xCC, 0x8D, 0xCD, /* 0x54-0x57 */ + 0x8D, 0xCE, 0x8D, 0xCF, 0x8D, 0xD0, 0x8D, 0xD1, /* 0x58-0x5B */ + 0x8D, 0xD2, 0x8D, 0xD3, 0x8D, 0xD4, 0x8D, 0xD5, /* 0x5C-0x5F */ + 0xB6, 0xEC, 0x8D, 0xD6, 0x8D, 0xD7, 0x8D, 0xD8, /* 0x60-0x63 */ + 0xB6, 0xED, 0x8D, 0xD9, 0x8D, 0xDA, 0x8D, 0xDB, /* 0x64-0x67 */ + 0xB6, 0xEE, 0x8D, 0xDC, 0x8D, 0xDD, 0x8D, 0xDE, /* 0x68-0x6B */ + 0x8D, 0xDF, 0x8D, 0xE0, 0x8D, 0xE1, 0x8D, 0xE2, /* 0x6C-0x6F */ + 0xB6, 0xEF, 0xB6, 0xF0, 0x8D, 0xE3, 0xB6, 0xF1, /* 0x70-0x73 */ + 0x8D, 0xE4, 0xB6, 0xF2, 0x8D, 0xE5, 0x8D, 0xE6, /* 0x74-0x77 */ + 0x8D, 0xE7, 0x8D, 0xE8, 0x8D, 0xE9, 0x8D, 0xEA, /* 0x78-0x7B */ + 0xB6, 0xF3, 0xB6, 0xF4, 0x8D, 0xEB, 0x8D, 0xEC, /* 0x7C-0x7F */ + + 0xB6, 0xF5, 0x8D, 0xED, 0x8D, 0xEE, 0x8D, 0xEF, /* 0x80-0x83 */ + 0xB6, 0xF6, 0x8D, 0xF0, 0x8D, 0xF1, 0x8D, 0xF2, /* 0x84-0x87 */ + 0x8D, 0xF3, 0x8D, 0xF4, 0x8D, 0xF5, 0x8D, 0xF6, /* 0x88-0x8B */ + 0xB6, 0xF7, 0xB6, 0xF8, 0x8D, 0xF7, 0xB6, 0xF9, /* 0x8C-0x8F */ + 0xB6, 0xFA, 0xB6, 0xFB, 0xB6, 0xFC, 0x8D, 0xF8, /* 0x90-0x93 */ + 0x8D, 0xF9, 0x8D, 0xFA, 0xB6, 0xFD, 0xB6, 0xFE, /* 0x94-0x97 */ + 0xB7, 0xA1, 0xB7, 0xA2, 0x8D, 0xFB, 0x8D, 0xFC, /* 0x98-0x9B */ + 0xB7, 0xA3, 0x8D, 0xFD, 0x8D, 0xFE, 0x8E, 0x41, /* 0x9C-0x9F */ + 0xB7, 0xA4, 0x8E, 0x42, 0x8E, 0x43, 0x8E, 0x44, /* 0xA0-0xA3 */ + 0x8E, 0x45, 0x8E, 0x46, 0x8E, 0x47, 0x8E, 0x48, /* 0xA4-0xA7 */ + 0xB7, 0xA5, 0xB7, 0xA6, 0x8E, 0x49, 0xB7, 0xA7, /* 0xA8-0xAB */ + 0xB7, 0xA8, 0xB7, 0xA9, 0x8E, 0x4A, 0x8E, 0x4B, /* 0xAC-0xAF */ + 0x8E, 0x4C, 0x8E, 0x4D, 0x8E, 0x4E, 0x8E, 0x4F, /* 0xB0-0xB3 */ + 0xB7, 0xAA, 0xB7, 0xAB, 0x8E, 0x50, 0x8E, 0x51, /* 0xB4-0xB7 */ + 0xB7, 0xAC, 0x8E, 0x52, 0x8E, 0x53, 0x8E, 0x54, /* 0xB8-0xBB */ + 0x8E, 0x55, 0x8E, 0x56, 0x8E, 0x57, 0x8E, 0x58, /* 0xBC-0xBF */ + 0x8E, 0x59, 0x8E, 0x5A, 0x8E, 0x61, 0x8E, 0x62, /* 0xC0-0xC3 */ + 0x8E, 0x63, 0x8E, 0x64, 0x8E, 0x65, 0xB7, 0xAD, /* 0xC4-0xC7 */ + 0x8E, 0x66, 0xB7, 0xAE, 0x8E, 0x67, 0x8E, 0x68, /* 0xC8-0xCB */ + 0x8E, 0x69, 0x8E, 0x6A, 0x8E, 0x6B, 0x8E, 0x6C, /* 0xCC-0xCF */ + 0x8E, 0x6D, 0x8E, 0x6E, 0x8E, 0x6F, 0x8E, 0x70, /* 0xD0-0xD3 */ + 0x8E, 0x71, 0x8E, 0x72, 0x8E, 0x73, 0x8E, 0x74, /* 0xD4-0xD7 */ + 0x8E, 0x75, 0x8E, 0x76, 0x8E, 0x77, 0x8E, 0x78, /* 0xD8-0xDB */ + 0x8E, 0x79, 0x8E, 0x7A, 0x8E, 0x81, 0x8E, 0x82, /* 0xDC-0xDF */ + 0x8E, 0x83, 0x8E, 0x84, 0x8E, 0x85, 0x8E, 0x86, /* 0xE0-0xE3 */ + 0x8E, 0x87, 0x8E, 0x88, 0x8E, 0x89, 0x8E, 0x8A, /* 0xE4-0xE7 */ + 0x8E, 0x8B, 0x8E, 0x8C, 0x8E, 0x8D, 0x8E, 0x8E, /* 0xE8-0xEB */ + 0xB7, 0xAF, 0xB7, 0xB0, 0x8E, 0x8F, 0x8E, 0x90, /* 0xEC-0xEF */ + 0xB7, 0xB1, 0x8E, 0x91, 0x8E, 0x92, 0x8E, 0x93, /* 0xF0-0xF3 */ + 0xB7, 0xB2, 0x8E, 0x94, 0x8E, 0x95, 0x8E, 0x96, /* 0xF4-0xF7 */ + 0x8E, 0x97, 0x8E, 0x98, 0x8E, 0x99, 0x8E, 0x9A, /* 0xF8-0xFB */ + 0xB7, 0xB3, 0xB7, 0xB4, 0x8E, 0x9B, 0xB7, 0xB5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B8[512] = { + 0xB7, 0xB6, 0xB7, 0xB7, 0x8E, 0x9C, 0x8E, 0x9D, /* 0x00-0x03 */ + 0x8E, 0x9E, 0x8E, 0x9F, 0x8E, 0xA0, 0xB7, 0xB8, /* 0x04-0x07 */ + 0xB7, 0xB9, 0xB7, 0xBA, 0x8E, 0xA1, 0x8E, 0xA2, /* 0x08-0x0B */ + 0xB7, 0xBB, 0x8E, 0xA3, 0x8E, 0xA4, 0x8E, 0xA5, /* 0x0C-0x0F */ + 0xB7, 0xBC, 0x8E, 0xA6, 0x8E, 0xA7, 0x8E, 0xA8, /* 0x10-0x13 */ + 0x8E, 0xA9, 0x8E, 0xAA, 0x8E, 0xAB, 0x8E, 0xAC, /* 0x14-0x17 */ + 0xB7, 0xBD, 0xB7, 0xBE, 0x8E, 0xAD, 0xB7, 0xBF, /* 0x18-0x1B */ + 0x8E, 0xAE, 0xB7, 0xC0, 0x8E, 0xAF, 0x8E, 0xB0, /* 0x1C-0x1F */ + 0x8E, 0xB1, 0x8E, 0xB2, 0x8E, 0xB3, 0x8E, 0xB4, /* 0x20-0x23 */ + 0xB7, 0xC1, 0xB7, 0xC2, 0x8E, 0xB5, 0x8E, 0xB6, /* 0x24-0x27 */ + 0xB7, 0xC3, 0x8E, 0xB7, 0x8E, 0xB8, 0x8E, 0xB9, /* 0x28-0x2B */ + 0xB7, 0xC4, 0x8E, 0xBA, 0x8E, 0xBB, 0x8E, 0xBC, /* 0x2C-0x2F */ + 0x8E, 0xBD, 0x8E, 0xBE, 0x8E, 0xBF, 0x8E, 0xC0, /* 0x30-0x33 */ + 0xB7, 0xC5, 0xB7, 0xC6, 0x8E, 0xC1, 0xB7, 0xC7, /* 0x34-0x37 */ + 0xB7, 0xC8, 0xB7, 0xC9, 0x8E, 0xC2, 0x8E, 0xC3, /* 0x38-0x3B */ + 0x8E, 0xC4, 0x8E, 0xC5, 0x8E, 0xC6, 0x8E, 0xC7, /* 0x3C-0x3F */ + 0xB7, 0xCA, 0x8E, 0xC8, 0x8E, 0xC9, 0x8E, 0xCA, /* 0x40-0x43 */ + 0xB7, 0xCB, 0x8E, 0xCB, 0x8E, 0xCC, 0x8E, 0xCD, /* 0x44-0x47 */ + 0x8E, 0xCE, 0x8E, 0xCF, 0x8E, 0xD0, 0x8E, 0xD1, /* 0x48-0x4B */ + 0x8E, 0xD2, 0x8E, 0xD3, 0x8E, 0xD4, 0x8E, 0xD5, /* 0x4C-0x4F */ + 0x8E, 0xD6, 0xB7, 0xCC, 0x8E, 0xD7, 0xB7, 0xCD, /* 0x50-0x53 */ + 0x8E, 0xD8, 0x8E, 0xD9, 0x8E, 0xDA, 0x8E, 0xDB, /* 0x54-0x57 */ + 0x8E, 0xDC, 0x8E, 0xDD, 0x8E, 0xDE, 0x8E, 0xDF, /* 0x58-0x5B */ + 0xB7, 0xCE, 0xB7, 0xCF, 0x8E, 0xE0, 0x8E, 0xE1, /* 0x5C-0x5F */ + 0xB7, 0xD0, 0x8E, 0xE2, 0x8E, 0xE3, 0x8E, 0xE4, /* 0x60-0x63 */ + 0xB7, 0xD1, 0x8E, 0xE5, 0x8E, 0xE6, 0x8E, 0xE7, /* 0x64-0x67 */ + 0x8E, 0xE8, 0x8E, 0xE9, 0x8E, 0xEA, 0x8E, 0xEB, /* 0x68-0x6B */ + 0xB7, 0xD2, 0xB7, 0xD3, 0x8E, 0xEC, 0xB7, 0xD4, /* 0x6C-0x6F */ + 0x8E, 0xED, 0xB7, 0xD5, 0x8E, 0xEE, 0x8E, 0xEF, /* 0x70-0x73 */ + 0x8E, 0xF0, 0x8E, 0xF1, 0x8E, 0xF2, 0x8E, 0xF3, /* 0x74-0x77 */ + 0xB7, 0xD6, 0x8E, 0xF4, 0x8E, 0xF5, 0x8E, 0xF6, /* 0x78-0x7B */ + 0xB7, 0xD7, 0x8E, 0xF7, 0x8E, 0xF8, 0x8E, 0xF9, /* 0x7C-0x7F */ + + 0x8E, 0xFA, 0x8E, 0xFB, 0x8E, 0xFC, 0x8E, 0xFD, /* 0x80-0x83 */ + 0x8E, 0xFE, 0x8F, 0x41, 0x8F, 0x42, 0x8F, 0x43, /* 0x84-0x87 */ + 0x8F, 0x44, 0x8F, 0x45, 0x8F, 0x46, 0x8F, 0x47, /* 0x88-0x8B */ + 0x8F, 0x48, 0xB7, 0xD8, 0x8F, 0x49, 0x8F, 0x4A, /* 0x8C-0x8F */ + 0x8F, 0x4B, 0x8F, 0x4C, 0x8F, 0x4D, 0x8F, 0x4E, /* 0x90-0x93 */ + 0x8F, 0x4F, 0x8F, 0x50, 0x8F, 0x51, 0x8F, 0x52, /* 0x94-0x97 */ + 0x8F, 0x53, 0x8F, 0x54, 0x8F, 0x55, 0x8F, 0x56, /* 0x98-0x9B */ + 0x8F, 0x57, 0x8F, 0x58, 0x8F, 0x59, 0x8F, 0x5A, /* 0x9C-0x9F */ + 0x8F, 0x61, 0x8F, 0x62, 0x8F, 0x63, 0x8F, 0x64, /* 0xA0-0xA3 */ + 0x8F, 0x65, 0x8F, 0x66, 0x8F, 0x67, 0x8F, 0x68, /* 0xA4-0xA7 */ + 0xB7, 0xD9, 0x8F, 0x69, 0x8F, 0x6A, 0x8F, 0x6B, /* 0xA8-0xAB */ + 0x8F, 0x6C, 0x8F, 0x6D, 0x8F, 0x6E, 0x8F, 0x6F, /* 0xAC-0xAF */ + 0xB7, 0xDA, 0x8F, 0x70, 0x8F, 0x71, 0x8F, 0x72, /* 0xB0-0xB3 */ + 0xB7, 0xDB, 0x8F, 0x73, 0x8F, 0x74, 0x8F, 0x75, /* 0xB4-0xB7 */ + 0xB7, 0xDC, 0x8F, 0x76, 0x8F, 0x77, 0x8F, 0x78, /* 0xB8-0xBB */ + 0x8F, 0x79, 0x8F, 0x7A, 0x8F, 0x81, 0x8F, 0x82, /* 0xBC-0xBF */ + 0xB7, 0xDD, 0xB7, 0xDE, 0x8F, 0x83, 0xB7, 0xDF, /* 0xC0-0xC3 */ + 0x8F, 0x84, 0xB7, 0xE0, 0x8F, 0x85, 0x8F, 0x86, /* 0xC4-0xC7 */ + 0x8F, 0x87, 0x8F, 0x88, 0x8F, 0x89, 0x8F, 0x8A, /* 0xC8-0xCB */ + 0xB7, 0xE1, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8D, /* 0xCC-0xCF */ + 0xB7, 0xE2, 0x8F, 0x8E, 0x8F, 0x8F, 0x8F, 0x90, /* 0xD0-0xD3 */ + 0xB7, 0xE3, 0x8F, 0x91, 0x8F, 0x92, 0x8F, 0x93, /* 0xD4-0xD7 */ + 0x8F, 0x94, 0x8F, 0x95, 0x8F, 0x96, 0x8F, 0x97, /* 0xD8-0xDB */ + 0x8F, 0x98, 0xB7, 0xE4, 0x8F, 0x99, 0xB7, 0xE5, /* 0xDC-0xDF */ + 0x8F, 0x9A, 0xB7, 0xE6, 0x8F, 0x9B, 0x8F, 0x9C, /* 0xE0-0xE3 */ + 0x8F, 0x9D, 0x8F, 0x9E, 0x8F, 0x9F, 0x8F, 0xA0, /* 0xE4-0xE7 */ + 0xB7, 0xE7, 0xB7, 0xE8, 0x8F, 0xA1, 0x8F, 0xA2, /* 0xE8-0xEB */ + 0xB7, 0xE9, 0x8F, 0xA3, 0x8F, 0xA4, 0x8F, 0xA5, /* 0xEC-0xEF */ + 0xB7, 0xEA, 0x8F, 0xA6, 0x8F, 0xA7, 0x8F, 0xA8, /* 0xF0-0xF3 */ + 0x8F, 0xA9, 0x8F, 0xAA, 0x8F, 0xAB, 0x8F, 0xAC, /* 0xF4-0xF7 */ + 0xB7, 0xEB, 0xB7, 0xEC, 0x8F, 0xAD, 0xB7, 0xED, /* 0xF8-0xFB */ + 0x8F, 0xAE, 0xB7, 0xEE, 0x8F, 0xAF, 0x8F, 0xB0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_B9[512] = { + 0x8F, 0xB1, 0x8F, 0xB2, 0x8F, 0xB3, 0x8F, 0xB4, /* 0x00-0x03 */ + 0xB7, 0xEF, 0x8F, 0xB5, 0x8F, 0xB6, 0x8F, 0xB7, /* 0x04-0x07 */ + 0x8F, 0xB8, 0x8F, 0xB9, 0x8F, 0xBA, 0x8F, 0xBB, /* 0x08-0x0B */ + 0x8F, 0xBC, 0x8F, 0xBD, 0x8F, 0xBE, 0x8F, 0xBF, /* 0x0C-0x0F */ + 0x8F, 0xC0, 0x8F, 0xC1, 0x8F, 0xC2, 0x8F, 0xC3, /* 0x10-0x13 */ + 0x8F, 0xC4, 0x8F, 0xC5, 0x8F, 0xC6, 0x8F, 0xC7, /* 0x14-0x17 */ + 0xB7, 0xF0, 0x8F, 0xC8, 0x8F, 0xC9, 0x8F, 0xCA, /* 0x18-0x1B */ + 0x8F, 0xCB, 0x8F, 0xCC, 0x8F, 0xCD, 0x8F, 0xCE, /* 0x1C-0x1F */ + 0xB7, 0xF1, 0x8F, 0xCF, 0x8F, 0xD0, 0x8F, 0xD1, /* 0x20-0x23 */ + 0x8F, 0xD2, 0x8F, 0xD3, 0x8F, 0xD4, 0x8F, 0xD5, /* 0x24-0x27 */ + 0x8F, 0xD6, 0x8F, 0xD7, 0x8F, 0xD8, 0x8F, 0xD9, /* 0x28-0x2B */ + 0x8F, 0xDA, 0x8F, 0xDB, 0x8F, 0xDC, 0x8F, 0xDD, /* 0x2C-0x2F */ + 0x8F, 0xDE, 0x8F, 0xDF, 0x8F, 0xE0, 0x8F, 0xE1, /* 0x30-0x33 */ + 0x8F, 0xE2, 0x8F, 0xE3, 0x8F, 0xE4, 0x8F, 0xE5, /* 0x34-0x37 */ + 0x8F, 0xE6, 0x8F, 0xE7, 0x8F, 0xE8, 0x8F, 0xE9, /* 0x38-0x3B */ + 0xB7, 0xF2, 0xB7, 0xF3, 0x8F, 0xEA, 0x8F, 0xEB, /* 0x3C-0x3F */ + 0xB7, 0xF4, 0x8F, 0xEC, 0x8F, 0xED, 0x8F, 0xEE, /* 0x40-0x43 */ + 0xB7, 0xF5, 0x8F, 0xEF, 0x8F, 0xF0, 0x8F, 0xF1, /* 0x44-0x47 */ + 0x8F, 0xF2, 0x8F, 0xF3, 0x8F, 0xF4, 0x8F, 0xF5, /* 0x48-0x4B */ + 0xB7, 0xF6, 0x8F, 0xF6, 0x8F, 0xF7, 0xB7, 0xF7, /* 0x4C-0x4F */ + 0x8F, 0xF8, 0xB7, 0xF8, 0x8F, 0xF9, 0x8F, 0xFA, /* 0x50-0x53 */ + 0x8F, 0xFB, 0x8F, 0xFC, 0x8F, 0xFD, 0x8F, 0xFE, /* 0x54-0x57 */ + 0xB7, 0xF9, 0xB7, 0xFA, 0x90, 0x41, 0x90, 0x42, /* 0x58-0x5B */ + 0xB7, 0xFB, 0x90, 0x43, 0x90, 0x44, 0x90, 0x45, /* 0x5C-0x5F */ + 0xB7, 0xFC, 0x90, 0x46, 0x90, 0x47, 0x90, 0x48, /* 0x60-0x63 */ + 0x90, 0x49, 0x90, 0x4A, 0x90, 0x4B, 0x90, 0x4C, /* 0x64-0x67 */ + 0xB7, 0xFD, 0xB7, 0xFE, 0x90, 0x4D, 0xB8, 0xA1, /* 0x68-0x6B */ + 0x90, 0x4E, 0xB8, 0xA2, 0x90, 0x4F, 0x90, 0x50, /* 0x6C-0x6F */ + 0x90, 0x51, 0x90, 0x52, 0x90, 0x53, 0x90, 0x54, /* 0x70-0x73 */ + 0xB8, 0xA3, 0xB8, 0xA4, 0x90, 0x55, 0x90, 0x56, /* 0x74-0x77 */ + 0xB8, 0xA5, 0x90, 0x57, 0x90, 0x58, 0x90, 0x59, /* 0x78-0x7B */ + 0xB8, 0xA6, 0x90, 0x5A, 0x90, 0x61, 0x90, 0x62, /* 0x7C-0x7F */ + + 0x90, 0x63, 0x90, 0x64, 0x90, 0x65, 0x90, 0x66, /* 0x80-0x83 */ + 0xB8, 0xA7, 0xB8, 0xA8, 0x90, 0x67, 0xB8, 0xA9, /* 0x84-0x87 */ + 0x90, 0x68, 0xB8, 0xAA, 0xB8, 0xAB, 0x90, 0x69, /* 0x88-0x8B */ + 0x90, 0x6A, 0xB8, 0xAC, 0xB8, 0xAD, 0x90, 0x6B, /* 0x8C-0x8F */ + 0x90, 0x6C, 0x90, 0x6D, 0x90, 0x6E, 0x90, 0x6F, /* 0x90-0x93 */ + 0x90, 0x70, 0x90, 0x71, 0x90, 0x72, 0x90, 0x73, /* 0x94-0x97 */ + 0x90, 0x74, 0x90, 0x75, 0x90, 0x76, 0x90, 0x77, /* 0x98-0x9B */ + 0x90, 0x78, 0x90, 0x79, 0x90, 0x7A, 0x90, 0x81, /* 0x9C-0x9F */ + 0x90, 0x82, 0x90, 0x83, 0x90, 0x84, 0x90, 0x85, /* 0xA0-0xA3 */ + 0x90, 0x86, 0x90, 0x87, 0x90, 0x88, 0x90, 0x89, /* 0xA4-0xA7 */ + 0x90, 0x8A, 0x90, 0x8B, 0x90, 0x8C, 0x90, 0x8D, /* 0xA8-0xAB */ + 0xB8, 0xAE, 0xB8, 0xAF, 0x90, 0x8E, 0x90, 0x8F, /* 0xAC-0xAF */ + 0xB8, 0xB0, 0x90, 0x90, 0x90, 0x91, 0x90, 0x92, /* 0xB0-0xB3 */ + 0xB8, 0xB1, 0x90, 0x93, 0x90, 0x94, 0x90, 0x95, /* 0xB4-0xB7 */ + 0x90, 0x96, 0x90, 0x97, 0x90, 0x98, 0x90, 0x99, /* 0xB8-0xBB */ + 0xB8, 0xB2, 0xB8, 0xB3, 0x90, 0x9A, 0xB8, 0xB4, /* 0xBC-0xBF */ + 0x90, 0x9B, 0xB8, 0xB5, 0x90, 0x9C, 0x90, 0x9D, /* 0xC0-0xC3 */ + 0x90, 0x9E, 0x90, 0x9F, 0x90, 0xA0, 0x90, 0xA1, /* 0xC4-0xC7 */ + 0xB8, 0xB6, 0xB8, 0xB7, 0x90, 0xA2, 0x90, 0xA3, /* 0xC8-0xCB */ + 0xB8, 0xB8, 0x90, 0xA4, 0xB8, 0xB9, 0xB8, 0xBA, /* 0xCC-0xCF */ + 0xB8, 0xBB, 0xB8, 0xBC, 0xB8, 0xBD, 0x90, 0xA5, /* 0xD0-0xD3 */ + 0x90, 0xA6, 0x90, 0xA7, 0x90, 0xA8, 0x90, 0xA9, /* 0xD4-0xD7 */ + 0xB8, 0xBE, 0xB8, 0xBF, 0x90, 0xAA, 0xB8, 0xC0, /* 0xD8-0xDB */ + 0x90, 0xAB, 0xB8, 0xC1, 0xB8, 0xC2, 0x90, 0xAC, /* 0xDC-0xDF */ + 0x90, 0xAD, 0xB8, 0xC3, 0x90, 0xAE, 0xB8, 0xC4, /* 0xE0-0xE3 */ + 0xB8, 0xC5, 0xB8, 0xC6, 0x90, 0xAF, 0x90, 0xB0, /* 0xE4-0xE7 */ + 0xB8, 0xC7, 0x90, 0xB1, 0x90, 0xB2, 0x90, 0xB3, /* 0xE8-0xEB */ + 0xB8, 0xC8, 0x90, 0xB4, 0x90, 0xB5, 0x90, 0xB6, /* 0xEC-0xEF */ + 0x90, 0xB7, 0x90, 0xB8, 0x90, 0xB9, 0x90, 0xBA, /* 0xF0-0xF3 */ + 0xB8, 0xC9, 0xB8, 0xCA, 0x90, 0xBB, 0xB8, 0xCB, /* 0xF4-0xF7 */ + 0xB8, 0xCC, 0xB8, 0xCD, 0xB8, 0xCE, 0x90, 0xBC, /* 0xF8-0xFB */ + 0x90, 0xBD, 0x90, 0xBE, 0x90, 0xBF, 0x90, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BA[512] = { + 0xB8, 0xCF, 0xB8, 0xD0, 0x90, 0xC1, 0x90, 0xC2, /* 0x00-0x03 */ + 0x90, 0xC3, 0x90, 0xC4, 0x90, 0xC5, 0x90, 0xC6, /* 0x04-0x07 */ + 0xB8, 0xD1, 0x90, 0xC7, 0x90, 0xC8, 0x90, 0xC9, /* 0x08-0x0B */ + 0x90, 0xCA, 0x90, 0xCB, 0x90, 0xCC, 0x90, 0xCD, /* 0x0C-0x0F */ + 0x90, 0xCE, 0x90, 0xCF, 0x90, 0xD0, 0x90, 0xD1, /* 0x10-0x13 */ + 0x90, 0xD2, 0xB8, 0xD2, 0x90, 0xD3, 0x90, 0xD4, /* 0x14-0x17 */ + 0x90, 0xD5, 0x90, 0xD6, 0x90, 0xD7, 0x90, 0xD8, /* 0x18-0x1B */ + 0x90, 0xD9, 0x90, 0xDA, 0x90, 0xDB, 0x90, 0xDC, /* 0x1C-0x1F */ + 0x90, 0xDD, 0x90, 0xDE, 0x90, 0xDF, 0x90, 0xE0, /* 0x20-0x23 */ + 0x90, 0xE1, 0x90, 0xE2, 0x90, 0xE3, 0x90, 0xE4, /* 0x24-0x27 */ + 0x90, 0xE5, 0x90, 0xE6, 0x90, 0xE7, 0x90, 0xE8, /* 0x28-0x2B */ + 0x90, 0xE9, 0x90, 0xEA, 0x90, 0xEB, 0x90, 0xEC, /* 0x2C-0x2F */ + 0x90, 0xED, 0x90, 0xEE, 0x90, 0xEF, 0x90, 0xF0, /* 0x30-0x33 */ + 0x90, 0xF1, 0x90, 0xF2, 0x90, 0xF3, 0x90, 0xF4, /* 0x34-0x37 */ + 0xB8, 0xD3, 0xB8, 0xD4, 0x90, 0xF5, 0x90, 0xF6, /* 0x38-0x3B */ + 0xB8, 0xD5, 0x90, 0xF7, 0x90, 0xF8, 0x90, 0xF9, /* 0x3C-0x3F */ + 0xB8, 0xD6, 0x90, 0xFA, 0xB8, 0xD7, 0x90, 0xFB, /* 0x40-0x43 */ + 0x90, 0xFC, 0x90, 0xFD, 0x90, 0xFE, 0x91, 0x41, /* 0x44-0x47 */ + 0xB8, 0xD8, 0xB8, 0xD9, 0x91, 0x42, 0xB8, 0xDA, /* 0x48-0x4B */ + 0x91, 0x43, 0xB8, 0xDB, 0xB8, 0xDC, 0x91, 0x44, /* 0x4C-0x4F */ + 0x91, 0x45, 0x91, 0x46, 0x91, 0x47, 0xB8, 0xDD, /* 0x50-0x53 */ + 0xB8, 0xDE, 0xB8, 0xDF, 0x91, 0x48, 0x91, 0x49, /* 0x54-0x57 */ + 0xB8, 0xE0, 0x91, 0x4A, 0x91, 0x4B, 0x91, 0x4C, /* 0x58-0x5B */ + 0xB8, 0xE1, 0x91, 0x4D, 0x91, 0x4E, 0x91, 0x4F, /* 0x5C-0x5F */ + 0x91, 0x50, 0x91, 0x51, 0x91, 0x52, 0x91, 0x53, /* 0x60-0x63 */ + 0xB8, 0xE2, 0xB8, 0xE3, 0x91, 0x54, 0xB8, 0xE4, /* 0x64-0x67 */ + 0xB8, 0xE5, 0xB8, 0xE6, 0x91, 0x55, 0x91, 0x56, /* 0x68-0x6B */ + 0x91, 0x57, 0x91, 0x58, 0x91, 0x59, 0x91, 0x5A, /* 0x6C-0x6F */ + 0xB8, 0xE7, 0xB8, 0xE8, 0x91, 0x61, 0x91, 0x62, /* 0x70-0x73 */ + 0xB8, 0xE9, 0x91, 0x63, 0x91, 0x64, 0x91, 0x65, /* 0x74-0x77 */ + 0xB8, 0xEA, 0x91, 0x66, 0x91, 0x67, 0x91, 0x68, /* 0x78-0x7B */ + 0x91, 0x69, 0x91, 0x6A, 0x91, 0x6B, 0x91, 0x6C, /* 0x7C-0x7F */ + + 0x91, 0x6D, 0x91, 0x6E, 0x91, 0x6F, 0xB8, 0xEB, /* 0x80-0x83 */ + 0xB8, 0xEC, 0xB8, 0xED, 0x91, 0x70, 0xB8, 0xEE, /* 0x84-0x87 */ + 0x91, 0x71, 0x91, 0x72, 0x91, 0x73, 0x91, 0x74, /* 0x88-0x8B */ + 0xB8, 0xEF, 0x91, 0x75, 0x91, 0x76, 0x91, 0x77, /* 0x8C-0x8F */ + 0x91, 0x78, 0x91, 0x79, 0x91, 0x7A, 0x91, 0x81, /* 0x90-0x93 */ + 0x91, 0x82, 0x91, 0x83, 0x91, 0x84, 0x91, 0x85, /* 0x94-0x97 */ + 0x91, 0x86, 0x91, 0x87, 0x91, 0x88, 0x91, 0x89, /* 0x98-0x9B */ + 0x91, 0x8A, 0x91, 0x8B, 0x91, 0x8C, 0x91, 0x8D, /* 0x9C-0x9F */ + 0x91, 0x8E, 0x91, 0x8F, 0x91, 0x90, 0x91, 0x91, /* 0xA0-0xA3 */ + 0x91, 0x92, 0x91, 0x93, 0x91, 0x94, 0x91, 0x95, /* 0xA4-0xA7 */ + 0xB8, 0xF0, 0xB8, 0xF1, 0x91, 0x96, 0xB8, 0xF2, /* 0xA8-0xAB */ + 0xB8, 0xF3, 0x91, 0x97, 0x91, 0x98, 0x91, 0x99, /* 0xAC-0xAF */ + 0xB8, 0xF4, 0x91, 0x9A, 0xB8, 0xF5, 0x91, 0x9B, /* 0xB0-0xB3 */ + 0x91, 0x9C, 0x91, 0x9D, 0x91, 0x9E, 0x91, 0x9F, /* 0xB4-0xB7 */ + 0xB8, 0xF6, 0xB8, 0xF7, 0x91, 0xA0, 0xB8, 0xF8, /* 0xB8-0xBB */ + 0x91, 0xA1, 0xB8, 0xF9, 0x91, 0xA2, 0x91, 0xA3, /* 0xBC-0xBF */ + 0x91, 0xA4, 0x91, 0xA5, 0x91, 0xA6, 0x91, 0xA7, /* 0xC0-0xC3 */ + 0xB8, 0xFA, 0x91, 0xA8, 0x91, 0xA9, 0x91, 0xAA, /* 0xC4-0xC7 */ + 0xB8, 0xFB, 0x91, 0xAB, 0x91, 0xAC, 0x91, 0xAD, /* 0xC8-0xCB */ + 0x91, 0xAE, 0x91, 0xAF, 0x91, 0xB0, 0x91, 0xB1, /* 0xCC-0xCF */ + 0x91, 0xB2, 0x91, 0xB3, 0x91, 0xB4, 0x91, 0xB5, /* 0xD0-0xD3 */ + 0x91, 0xB6, 0x91, 0xB7, 0x91, 0xB8, 0x91, 0xB9, /* 0xD4-0xD7 */ + 0xB8, 0xFC, 0xB8, 0xFD, 0x91, 0xBA, 0x91, 0xBB, /* 0xD8-0xDB */ + 0x91, 0xBC, 0x91, 0xBD, 0x91, 0xBE, 0x91, 0xBF, /* 0xDC-0xDF */ + 0x91, 0xC0, 0x91, 0xC1, 0x91, 0xC2, 0x91, 0xC3, /* 0xE0-0xE3 */ + 0x91, 0xC4, 0x91, 0xC5, 0x91, 0xC6, 0x91, 0xC7, /* 0xE4-0xE7 */ + 0x91, 0xC8, 0x91, 0xC9, 0x91, 0xCA, 0x91, 0xCB, /* 0xE8-0xEB */ + 0x91, 0xCC, 0x91, 0xCD, 0x91, 0xCE, 0x91, 0xCF, /* 0xEC-0xEF */ + 0x91, 0xD0, 0x91, 0xD1, 0x91, 0xD2, 0x91, 0xD3, /* 0xF0-0xF3 */ + 0x91, 0xD4, 0x91, 0xD5, 0x91, 0xD6, 0x91, 0xD7, /* 0xF4-0xF7 */ + 0x91, 0xD8, 0x91, 0xD9, 0x91, 0xDA, 0x91, 0xDB, /* 0xF8-0xFB */ + 0xB8, 0xFE, 0x91, 0xDC, 0x91, 0xDD, 0x91, 0xDE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BB[512] = { + 0xB9, 0xA1, 0x91, 0xDF, 0x91, 0xE0, 0x91, 0xE1, /* 0x00-0x03 */ + 0xB9, 0xA2, 0x91, 0xE2, 0x91, 0xE3, 0x91, 0xE4, /* 0x04-0x07 */ + 0x91, 0xE5, 0x91, 0xE6, 0x91, 0xE7, 0x91, 0xE8, /* 0x08-0x0B */ + 0x91, 0xE9, 0xB9, 0xA3, 0x91, 0xEA, 0xB9, 0xA4, /* 0x0C-0x0F */ + 0x91, 0xEB, 0xB9, 0xA5, 0x91, 0xEC, 0x91, 0xED, /* 0x10-0x13 */ + 0x91, 0xEE, 0x91, 0xEF, 0x91, 0xF0, 0x91, 0xF1, /* 0x14-0x17 */ + 0xB9, 0xA6, 0x91, 0xF2, 0x91, 0xF3, 0x91, 0xF4, /* 0x18-0x1B */ + 0xB9, 0xA7, 0x91, 0xF5, 0x91, 0xF6, 0x91, 0xF7, /* 0x1C-0x1F */ + 0xB9, 0xA8, 0x91, 0xF8, 0x91, 0xF9, 0x91, 0xFA, /* 0x20-0x23 */ + 0x91, 0xFB, 0x91, 0xFC, 0x91, 0xFD, 0x91, 0xFE, /* 0x24-0x27 */ + 0x92, 0x41, 0xB9, 0xA9, 0x92, 0x42, 0xB9, 0xAA, /* 0x28-0x2B */ + 0x92, 0x43, 0x92, 0x44, 0x92, 0x45, 0x92, 0x46, /* 0x2C-0x2F */ + 0x92, 0x47, 0x92, 0x48, 0x92, 0x49, 0x92, 0x4A, /* 0x30-0x33 */ + 0xB9, 0xAB, 0xB9, 0xAC, 0xB9, 0xAD, 0x92, 0x4B, /* 0x34-0x37 */ + 0xB9, 0xAE, 0x92, 0x4C, 0x92, 0x4D, 0xB9, 0xAF, /* 0x38-0x3B */ + 0xB9, 0xB0, 0xB9, 0xB1, 0xB9, 0xB2, 0x92, 0x4E, /* 0x3C-0x3F */ + 0x92, 0x4F, 0x92, 0x50, 0x92, 0x51, 0x92, 0x52, /* 0x40-0x43 */ + 0xB9, 0xB3, 0xB9, 0xB4, 0x92, 0x53, 0xB9, 0xB5, /* 0x44-0x47 */ + 0x92, 0x54, 0xB9, 0xB6, 0x92, 0x55, 0x92, 0x56, /* 0x48-0x4B */ + 0x92, 0x57, 0xB9, 0xB7, 0x92, 0x58, 0xB9, 0xB8, /* 0x4C-0x4F */ + 0xB9, 0xB9, 0x92, 0x59, 0x92, 0x5A, 0x92, 0x61, /* 0x50-0x53 */ + 0xB9, 0xBA, 0x92, 0x62, 0x92, 0x63, 0x92, 0x64, /* 0x54-0x57 */ + 0xB9, 0xBB, 0x92, 0x65, 0x92, 0x66, 0x92, 0x67, /* 0x58-0x5B */ + 0x92, 0x68, 0x92, 0x69, 0x92, 0x6A, 0x92, 0x6B, /* 0x5C-0x5F */ + 0x92, 0x6C, 0xB9, 0xBC, 0x92, 0x6D, 0xB9, 0xBD, /* 0x60-0x63 */ + 0x92, 0x6E, 0x92, 0x6F, 0x92, 0x70, 0x92, 0x71, /* 0x64-0x67 */ + 0x92, 0x72, 0x92, 0x73, 0x92, 0x74, 0x92, 0x75, /* 0x68-0x6B */ + 0xB9, 0xBE, 0x92, 0x76, 0x92, 0x77, 0x92, 0x78, /* 0x6C-0x6F */ + 0x92, 0x79, 0x92, 0x7A, 0x92, 0x81, 0x92, 0x82, /* 0x70-0x73 */ + 0x92, 0x83, 0x92, 0x84, 0x92, 0x85, 0x92, 0x86, /* 0x74-0x77 */ + 0x92, 0x87, 0x92, 0x88, 0x92, 0x89, 0x92, 0x8A, /* 0x78-0x7B */ + 0x92, 0x8B, 0x92, 0x8C, 0x92, 0x8D, 0x92, 0x8E, /* 0x7C-0x7F */ + + 0x92, 0x8F, 0x92, 0x90, 0x92, 0x91, 0x92, 0x92, /* 0x80-0x83 */ + 0x92, 0x93, 0x92, 0x94, 0x92, 0x95, 0x92, 0x96, /* 0x84-0x87 */ + 0xB9, 0xBF, 0x92, 0x97, 0x92, 0x98, 0x92, 0x99, /* 0x88-0x8B */ + 0xB9, 0xC0, 0x92, 0x9A, 0x92, 0x9B, 0x92, 0x9C, /* 0x8C-0x8F */ + 0xB9, 0xC1, 0x92, 0x9D, 0x92, 0x9E, 0x92, 0x9F, /* 0x90-0x93 */ + 0x92, 0xA0, 0x92, 0xA1, 0x92, 0xA2, 0x92, 0xA3, /* 0x94-0x97 */ + 0x92, 0xA4, 0x92, 0xA5, 0x92, 0xA6, 0x92, 0xA7, /* 0x98-0x9B */ + 0x92, 0xA8, 0x92, 0xA9, 0x92, 0xAA, 0x92, 0xAB, /* 0x9C-0x9F */ + 0x92, 0xAC, 0x92, 0xAD, 0x92, 0xAE, 0x92, 0xAF, /* 0xA0-0xA3 */ + 0xB9, 0xC2, 0x92, 0xB0, 0x92, 0xB1, 0x92, 0xB2, /* 0xA4-0xA7 */ + 0xB9, 0xC3, 0x92, 0xB3, 0x92, 0xB4, 0x92, 0xB5, /* 0xA8-0xAB */ + 0xB9, 0xC4, 0x92, 0xB6, 0x92, 0xB7, 0x92, 0xB8, /* 0xAC-0xAF */ + 0x92, 0xB9, 0x92, 0xBA, 0x92, 0xBB, 0x92, 0xBC, /* 0xB0-0xB3 */ + 0xB9, 0xC5, 0x92, 0xBD, 0x92, 0xBE, 0xB9, 0xC6, /* 0xB4-0xB7 */ + 0x92, 0xBF, 0x92, 0xC0, 0x92, 0xC1, 0x92, 0xC2, /* 0xB8-0xBB */ + 0x92, 0xC3, 0x92, 0xC4, 0x92, 0xC5, 0x92, 0xC6, /* 0xBC-0xBF */ + 0xB9, 0xC7, 0x92, 0xC7, 0x92, 0xC8, 0x92, 0xC9, /* 0xC0-0xC3 */ + 0xB9, 0xC8, 0x92, 0xCA, 0x92, 0xCB, 0x92, 0xCC, /* 0xC4-0xC7 */ + 0xB9, 0xC9, 0x92, 0xCD, 0x92, 0xCE, 0x92, 0xCF, /* 0xC8-0xCB */ + 0x92, 0xD0, 0x92, 0xD1, 0x92, 0xD2, 0x92, 0xD3, /* 0xCC-0xCF */ + 0xB9, 0xCA, 0x92, 0xD4, 0x92, 0xD5, 0xB9, 0xCB, /* 0xD0-0xD3 */ + 0x92, 0xD6, 0x92, 0xD7, 0x92, 0xD8, 0x92, 0xD9, /* 0xD4-0xD7 */ + 0x92, 0xDA, 0x92, 0xDB, 0x92, 0xDC, 0x92, 0xDD, /* 0xD8-0xDB */ + 0x92, 0xDE, 0x92, 0xDF, 0x92, 0xE0, 0x92, 0xE1, /* 0xDC-0xDF */ + 0x92, 0xE2, 0x92, 0xE3, 0x92, 0xE4, 0x92, 0xE5, /* 0xE0-0xE3 */ + 0x92, 0xE6, 0x92, 0xE7, 0x92, 0xE8, 0x92, 0xE9, /* 0xE4-0xE7 */ + 0x92, 0xEA, 0x92, 0xEB, 0x92, 0xEC, 0x92, 0xED, /* 0xE8-0xEB */ + 0x92, 0xEE, 0x92, 0xEF, 0x92, 0xF0, 0x92, 0xF1, /* 0xEC-0xEF */ + 0x92, 0xF2, 0x92, 0xF3, 0x92, 0xF4, 0x92, 0xF5, /* 0xF0-0xF3 */ + 0x92, 0xF6, 0x92, 0xF7, 0x92, 0xF8, 0x92, 0xF9, /* 0xF4-0xF7 */ + 0xB9, 0xCC, 0xB9, 0xCD, 0x92, 0xFA, 0x92, 0xFB, /* 0xF8-0xFB */ + 0xB9, 0xCE, 0x92, 0xFC, 0x92, 0xFD, 0xB9, 0xCF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BC[512] = { + 0xB9, 0xD0, 0x92, 0xFE, 0xB9, 0xD1, 0x93, 0x41, /* 0x00-0x03 */ + 0x93, 0x42, 0x93, 0x43, 0x93, 0x44, 0x93, 0x45, /* 0x04-0x07 */ + 0xB9, 0xD2, 0xB9, 0xD3, 0x93, 0x46, 0xB9, 0xD4, /* 0x08-0x0B */ + 0xB9, 0xD5, 0xB9, 0xD6, 0x93, 0x47, 0xB9, 0xD7, /* 0x0C-0x0F */ + 0x93, 0x48, 0xB9, 0xD8, 0x93, 0x49, 0x93, 0x4A, /* 0x10-0x13 */ + 0xB9, 0xD9, 0xB9, 0xDA, 0xB9, 0xDB, 0xB9, 0xDC, /* 0x14-0x17 */ + 0xB9, 0xDD, 0x93, 0x4B, 0x93, 0x4C, 0xB9, 0xDE, /* 0x18-0x1B */ + 0xB9, 0xDF, 0xB9, 0xE0, 0xB9, 0xE1, 0xB9, 0xE2, /* 0x1C-0x1F */ + 0x93, 0x4D, 0x93, 0x4E, 0x93, 0x4F, 0x93, 0x50, /* 0x20-0x23 */ + 0xB9, 0xE3, 0xB9, 0xE4, 0x93, 0x51, 0xB9, 0xE5, /* 0x24-0x27 */ + 0x93, 0x52, 0xB9, 0xE6, 0x93, 0x53, 0x93, 0x54, /* 0x28-0x2B */ + 0x93, 0x55, 0xB9, 0xE7, 0x93, 0x56, 0x93, 0x57, /* 0x2C-0x2F */ + 0xB9, 0xE8, 0xB9, 0xE9, 0x93, 0x58, 0x93, 0x59, /* 0x30-0x33 */ + 0xB9, 0xEA, 0x93, 0x5A, 0x93, 0x61, 0x93, 0x62, /* 0x34-0x37 */ + 0xB9, 0xEB, 0x93, 0x63, 0x93, 0x64, 0x93, 0x65, /* 0x38-0x3B */ + 0x93, 0x66, 0x93, 0x67, 0x93, 0x68, 0x93, 0x69, /* 0x3C-0x3F */ + 0xB9, 0xEC, 0xB9, 0xED, 0x93, 0x6A, 0xB9, 0xEE, /* 0x40-0x43 */ + 0xB9, 0xEF, 0xB9, 0xF0, 0x93, 0x6B, 0x93, 0x6C, /* 0x44-0x47 */ + 0x93, 0x6D, 0xB9, 0xF1, 0x93, 0x6E, 0x93, 0x6F, /* 0x48-0x4B */ + 0xB9, 0xF2, 0xB9, 0xF3, 0x93, 0x70, 0x93, 0x71, /* 0x4C-0x4F */ + 0xB9, 0xF4, 0x93, 0x72, 0x93, 0x73, 0x93, 0x74, /* 0x50-0x53 */ + 0x93, 0x75, 0x93, 0x76, 0x93, 0x77, 0x93, 0x78, /* 0x54-0x57 */ + 0x93, 0x79, 0x93, 0x7A, 0x93, 0x81, 0x93, 0x82, /* 0x58-0x5B */ + 0x93, 0x83, 0xB9, 0xF5, 0x93, 0x84, 0x93, 0x85, /* 0x5C-0x5F */ + 0x93, 0x86, 0x93, 0x87, 0x93, 0x88, 0x93, 0x89, /* 0x60-0x63 */ + 0x93, 0x8A, 0x93, 0x8B, 0x93, 0x8C, 0x93, 0x8D, /* 0x64-0x67 */ + 0x93, 0x8E, 0x93, 0x8F, 0x93, 0x90, 0x93, 0x91, /* 0x68-0x6B */ + 0x93, 0x92, 0x93, 0x93, 0x93, 0x94, 0x93, 0x95, /* 0x6C-0x6F */ + 0x93, 0x96, 0x93, 0x97, 0x93, 0x98, 0x93, 0x99, /* 0x70-0x73 */ + 0x93, 0x9A, 0x93, 0x9B, 0x93, 0x9C, 0x93, 0x9D, /* 0x74-0x77 */ + 0x93, 0x9E, 0x93, 0x9F, 0x93, 0xA0, 0x93, 0xA1, /* 0x78-0x7B */ + 0x93, 0xA2, 0x93, 0xA3, 0x93, 0xA4, 0x93, 0xA5, /* 0x7C-0x7F */ + + 0x93, 0xA6, 0x93, 0xA7, 0x93, 0xA8, 0x93, 0xA9, /* 0x80-0x83 */ + 0xB9, 0xF6, 0xB9, 0xF7, 0x93, 0xAA, 0x93, 0xAB, /* 0x84-0x87 */ + 0xB9, 0xF8, 0x93, 0xAC, 0x93, 0xAD, 0xB9, 0xF9, /* 0x88-0x8B */ + 0xB9, 0xFA, 0x93, 0xAE, 0xB9, 0xFB, 0x93, 0xAF, /* 0x8C-0x8F */ + 0x93, 0xB0, 0x93, 0xB1, 0x93, 0xB2, 0x93, 0xB3, /* 0x90-0x93 */ + 0xB9, 0xFC, 0xB9, 0xFD, 0x93, 0xB4, 0xB9, 0xFE, /* 0x94-0x97 */ + 0x93, 0xB5, 0xBA, 0xA1, 0xBA, 0xA2, 0x93, 0xB6, /* 0x98-0x9B */ + 0x93, 0xB7, 0x93, 0xB8, 0x93, 0xB9, 0x93, 0xBA, /* 0x9C-0x9F */ + 0xBA, 0xA3, 0xBA, 0xA4, 0x93, 0xBB, 0x93, 0xBC, /* 0xA0-0xA3 */ + 0xBA, 0xA5, 0x93, 0xBD, 0x93, 0xBE, 0xBA, 0xA6, /* 0xA4-0xA7 */ + 0xBA, 0xA7, 0x93, 0xBF, 0x93, 0xC0, 0x93, 0xC1, /* 0xA8-0xAB */ + 0x93, 0xC2, 0x93, 0xC3, 0x93, 0xC4, 0x93, 0xC5, /* 0xAC-0xAF */ + 0xBA, 0xA8, 0xBA, 0xA9, 0x93, 0xC6, 0xBA, 0xAA, /* 0xB0-0xB3 */ + 0xBA, 0xAB, 0xBA, 0xAC, 0x93, 0xC7, 0x93, 0xC8, /* 0xB4-0xB7 */ + 0x93, 0xC9, 0x93, 0xCA, 0x93, 0xCB, 0x93, 0xCC, /* 0xB8-0xBB */ + 0xBA, 0xAD, 0xBA, 0xAE, 0x93, 0xCD, 0x93, 0xCE, /* 0xBC-0xBF */ + 0xBA, 0xAF, 0x93, 0xCF, 0x93, 0xD0, 0x93, 0xD1, /* 0xC0-0xC3 */ + 0xBA, 0xB0, 0x93, 0xD2, 0x93, 0xD3, 0x93, 0xD4, /* 0xC4-0xC7 */ + 0x93, 0xD5, 0x93, 0xD6, 0x93, 0xD7, 0x93, 0xD8, /* 0xC8-0xCB */ + 0x93, 0xD9, 0xBA, 0xB1, 0x93, 0xDA, 0xBA, 0xB2, /* 0xCC-0xCF */ + 0xBA, 0xB3, 0xBA, 0xB4, 0x93, 0xDB, 0x93, 0xDC, /* 0xD0-0xD3 */ + 0x93, 0xDD, 0xBA, 0xB5, 0x93, 0xDE, 0x93, 0xDF, /* 0xD4-0xD7 */ + 0xBA, 0xB6, 0x93, 0xE0, 0x93, 0xE1, 0x93, 0xE2, /* 0xD8-0xDB */ + 0xBA, 0xB7, 0x93, 0xE3, 0x93, 0xE4, 0x93, 0xE5, /* 0xDC-0xDF */ + 0x93, 0xE6, 0x93, 0xE7, 0x93, 0xE8, 0x93, 0xE9, /* 0xE0-0xE3 */ + 0x93, 0xEA, 0x93, 0xEB, 0x93, 0xEC, 0x93, 0xED, /* 0xE4-0xE7 */ + 0x93, 0xEE, 0x93, 0xEF, 0x93, 0xF0, 0x93, 0xF1, /* 0xE8-0xEB */ + 0x93, 0xF2, 0x93, 0xF3, 0x93, 0xF4, 0x93, 0xF5, /* 0xEC-0xEF */ + 0x93, 0xF6, 0x93, 0xF7, 0x93, 0xF8, 0x93, 0xF9, /* 0xF0-0xF3 */ + 0xBA, 0xB8, 0xBA, 0xB9, 0xBA, 0xBA, 0x93, 0xFA, /* 0xF4-0xF7 */ + 0xBA, 0xBB, 0x93, 0xFB, 0x93, 0xFC, 0x93, 0xFD, /* 0xF8-0xFB */ + 0xBA, 0xBC, 0x93, 0xFE, 0x94, 0x41, 0x94, 0x42, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BD[512] = { + 0x94, 0x43, 0x94, 0x44, 0x94, 0x45, 0x94, 0x46, /* 0x00-0x03 */ + 0xBA, 0xBD, 0xBA, 0xBE, 0x94, 0x47, 0xBA, 0xBF, /* 0x04-0x07 */ + 0x94, 0x48, 0xBA, 0xC0, 0x94, 0x49, 0x94, 0x4A, /* 0x08-0x0B */ + 0x94, 0x4B, 0x94, 0x4C, 0x94, 0x4D, 0x94, 0x4E, /* 0x0C-0x0F */ + 0xBA, 0xC1, 0x94, 0x4F, 0x94, 0x50, 0x94, 0x51, /* 0x10-0x13 */ + 0xBA, 0xC2, 0x94, 0x52, 0x94, 0x53, 0x94, 0x54, /* 0x14-0x17 */ + 0x94, 0x55, 0x94, 0x56, 0x94, 0x57, 0x94, 0x58, /* 0x18-0x1B */ + 0x94, 0x59, 0x94, 0x5A, 0x94, 0x61, 0x94, 0x62, /* 0x1C-0x1F */ + 0x94, 0x63, 0x94, 0x64, 0x94, 0x65, 0x94, 0x66, /* 0x20-0x23 */ + 0xBA, 0xC3, 0x94, 0x67, 0x94, 0x68, 0x94, 0x69, /* 0x24-0x27 */ + 0x94, 0x6A, 0x94, 0x6B, 0x94, 0x6C, 0x94, 0x6D, /* 0x28-0x2B */ + 0xBA, 0xC4, 0x94, 0x6E, 0x94, 0x6F, 0x94, 0x70, /* 0x2C-0x2F */ + 0x94, 0x71, 0x94, 0x72, 0x94, 0x73, 0x94, 0x74, /* 0x30-0x33 */ + 0x94, 0x75, 0x94, 0x76, 0x94, 0x77, 0x94, 0x78, /* 0x34-0x37 */ + 0x94, 0x79, 0x94, 0x7A, 0x94, 0x81, 0x94, 0x82, /* 0x38-0x3B */ + 0x94, 0x83, 0x94, 0x84, 0x94, 0x85, 0x94, 0x86, /* 0x3C-0x3F */ + 0xBA, 0xC5, 0x94, 0x87, 0x94, 0x88, 0x94, 0x89, /* 0x40-0x43 */ + 0x94, 0x8A, 0x94, 0x8B, 0x94, 0x8C, 0x94, 0x8D, /* 0x44-0x47 */ + 0xBA, 0xC6, 0xBA, 0xC7, 0x94, 0x8E, 0x94, 0x8F, /* 0x48-0x4B */ + 0xBA, 0xC8, 0x94, 0x90, 0x94, 0x91, 0x94, 0x92, /* 0x4C-0x4F */ + 0xBA, 0xC9, 0x94, 0x93, 0x94, 0x94, 0x94, 0x95, /* 0x50-0x53 */ + 0x94, 0x96, 0x94, 0x97, 0x94, 0x98, 0x94, 0x99, /* 0x54-0x57 */ + 0xBA, 0xCA, 0xBA, 0xCB, 0x94, 0x9A, 0x94, 0x9B, /* 0x58-0x5B */ + 0x94, 0x9C, 0x94, 0x9D, 0x94, 0x9E, 0x94, 0x9F, /* 0x5C-0x5F */ + 0x94, 0xA0, 0x94, 0xA1, 0x94, 0xA2, 0x94, 0xA3, /* 0x60-0x63 */ + 0xBA, 0xCC, 0x94, 0xA4, 0x94, 0xA5, 0x94, 0xA6, /* 0x64-0x67 */ + 0xBA, 0xCD, 0x94, 0xA7, 0x94, 0xA8, 0x94, 0xA9, /* 0x68-0x6B */ + 0x94, 0xAA, 0x94, 0xAB, 0x94, 0xAC, 0x94, 0xAD, /* 0x6C-0x6F */ + 0x94, 0xAE, 0x94, 0xAF, 0x94, 0xB0, 0x94, 0xB1, /* 0x70-0x73 */ + 0x94, 0xB2, 0x94, 0xB3, 0x94, 0xB4, 0x94, 0xB5, /* 0x74-0x77 */ + 0x94, 0xB6, 0x94, 0xB7, 0x94, 0xB8, 0x94, 0xB9, /* 0x78-0x7B */ + 0x94, 0xBA, 0x94, 0xBB, 0x94, 0xBC, 0x94, 0xBD, /* 0x7C-0x7F */ + + 0xBA, 0xCE, 0xBA, 0xCF, 0x94, 0xBE, 0x94, 0xBF, /* 0x80-0x83 */ + 0xBA, 0xD0, 0x94, 0xC0, 0x94, 0xC1, 0xBA, 0xD1, /* 0x84-0x87 */ + 0xBA, 0xD2, 0xBA, 0xD3, 0xBA, 0xD4, 0x94, 0xC2, /* 0x88-0x8B */ + 0x94, 0xC3, 0x94, 0xC4, 0x94, 0xC5, 0x94, 0xC6, /* 0x8C-0x8F */ + 0xBA, 0xD5, 0xBA, 0xD6, 0x94, 0xC7, 0xBA, 0xD7, /* 0x90-0x93 */ + 0x94, 0xC8, 0xBA, 0xD8, 0x94, 0xC9, 0x94, 0xCA, /* 0x94-0x97 */ + 0x94, 0xCB, 0xBA, 0xD9, 0xBA, 0xDA, 0x94, 0xCC, /* 0x98-0x9B */ + 0xBA, 0xDB, 0x94, 0xCD, 0x94, 0xCE, 0x94, 0xCF, /* 0x9C-0x9F */ + 0x94, 0xD0, 0x94, 0xD1, 0x94, 0xD2, 0x94, 0xD3, /* 0xA0-0xA3 */ + 0xBA, 0xDC, 0x94, 0xD4, 0x94, 0xD5, 0x94, 0xD6, /* 0xA4-0xA7 */ + 0x94, 0xD7, 0x94, 0xD8, 0x94, 0xD9, 0x94, 0xDA, /* 0xA8-0xAB */ + 0x94, 0xDB, 0x94, 0xDC, 0x94, 0xDD, 0x94, 0xDE, /* 0xAC-0xAF */ + 0xBA, 0xDD, 0x94, 0xDF, 0x94, 0xE0, 0x94, 0xE1, /* 0xB0-0xB3 */ + 0x94, 0xE2, 0x94, 0xE3, 0x94, 0xE4, 0x94, 0xE5, /* 0xB4-0xB7 */ + 0xBA, 0xDE, 0x94, 0xE6, 0x94, 0xE7, 0x94, 0xE8, /* 0xB8-0xBB */ + 0x94, 0xE9, 0x94, 0xEA, 0x94, 0xEB, 0x94, 0xEC, /* 0xBC-0xBF */ + 0x94, 0xED, 0x94, 0xEE, 0x94, 0xEF, 0x94, 0xF0, /* 0xC0-0xC3 */ + 0x94, 0xF1, 0x94, 0xF2, 0x94, 0xF3, 0x94, 0xF4, /* 0xC4-0xC7 */ + 0x94, 0xF5, 0x94, 0xF6, 0x94, 0xF7, 0x94, 0xF8, /* 0xC8-0xCB */ + 0x94, 0xF9, 0x94, 0xFA, 0x94, 0xFB, 0x94, 0xFC, /* 0xCC-0xCF */ + 0x94, 0xFD, 0x94, 0xFE, 0x95, 0x41, 0x95, 0x42, /* 0xD0-0xD3 */ + 0xBA, 0xDF, 0xBA, 0xE0, 0x95, 0x43, 0x95, 0x44, /* 0xD4-0xD7 */ + 0xBA, 0xE1, 0x95, 0x45, 0x95, 0x46, 0x95, 0x47, /* 0xD8-0xDB */ + 0xBA, 0xE2, 0x95, 0x48, 0x95, 0x49, 0x95, 0x4A, /* 0xDC-0xDF */ + 0x95, 0x4B, 0x95, 0x4C, 0x95, 0x4D, 0x95, 0x4E, /* 0xE0-0xE3 */ + 0x95, 0x4F, 0x95, 0x50, 0x95, 0x51, 0x95, 0x52, /* 0xE4-0xE7 */ + 0x95, 0x53, 0xBA, 0xE3, 0x95, 0x54, 0x95, 0x55, /* 0xE8-0xEB */ + 0x95, 0x56, 0x95, 0x57, 0x95, 0x58, 0x95, 0x59, /* 0xEC-0xEF */ + 0xBA, 0xE4, 0x95, 0x5A, 0x95, 0x61, 0x95, 0x62, /* 0xF0-0xF3 */ + 0xBA, 0xE5, 0x95, 0x63, 0x95, 0x64, 0x95, 0x65, /* 0xF4-0xF7 */ + 0xBA, 0xE6, 0x95, 0x66, 0x95, 0x67, 0x95, 0x68, /* 0xF8-0xFB */ + 0x95, 0x69, 0x95, 0x6A, 0x95, 0x6B, 0x95, 0x6C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BE[512] = { + 0xBA, 0xE7, 0x95, 0x6D, 0x95, 0x6E, 0xBA, 0xE8, /* 0x00-0x03 */ + 0x95, 0x6F, 0xBA, 0xE9, 0x95, 0x70, 0x95, 0x71, /* 0x04-0x07 */ + 0x95, 0x72, 0x95, 0x73, 0x95, 0x74, 0x95, 0x75, /* 0x08-0x0B */ + 0xBA, 0xEA, 0xBA, 0xEB, 0x95, 0x76, 0x95, 0x77, /* 0x0C-0x0F */ + 0xBA, 0xEC, 0x95, 0x78, 0x95, 0x79, 0x95, 0x7A, /* 0x10-0x13 */ + 0xBA, 0xED, 0x95, 0x81, 0x95, 0x82, 0x95, 0x83, /* 0x14-0x17 */ + 0x95, 0x84, 0x95, 0x85, 0x95, 0x86, 0x95, 0x87, /* 0x18-0x1B */ + 0xBA, 0xEE, 0xBA, 0xEF, 0x95, 0x88, 0xBA, 0xF0, /* 0x1C-0x1F */ + 0x95, 0x89, 0x95, 0x8A, 0x95, 0x8B, 0x95, 0x8C, /* 0x20-0x23 */ + 0x95, 0x8D, 0x95, 0x8E, 0x95, 0x8F, 0x95, 0x90, /* 0x24-0x27 */ + 0x95, 0x91, 0x95, 0x92, 0x95, 0x93, 0x95, 0x94, /* 0x28-0x2B */ + 0x95, 0x95, 0x95, 0x96, 0x95, 0x97, 0x95, 0x98, /* 0x2C-0x2F */ + 0x95, 0x99, 0x95, 0x9A, 0x95, 0x9B, 0x95, 0x9C, /* 0x30-0x33 */ + 0x95, 0x9D, 0x95, 0x9E, 0x95, 0x9F, 0x95, 0xA0, /* 0x34-0x37 */ + 0x95, 0xA1, 0x95, 0xA2, 0x95, 0xA3, 0x95, 0xA4, /* 0x38-0x3B */ + 0x95, 0xA5, 0x95, 0xA6, 0x95, 0xA7, 0x95, 0xA8, /* 0x3C-0x3F */ + 0x95, 0xA9, 0x95, 0xAA, 0x95, 0xAB, 0x95, 0xAC, /* 0x40-0x43 */ + 0xBA, 0xF1, 0xBA, 0xF2, 0x95, 0xAD, 0x95, 0xAE, /* 0x44-0x47 */ + 0xBA, 0xF3, 0x95, 0xAF, 0x95, 0xB0, 0x95, 0xB1, /* 0x48-0x4B */ + 0xBA, 0xF4, 0x95, 0xB2, 0xBA, 0xF5, 0x95, 0xB3, /* 0x4C-0x4F */ + 0x95, 0xB4, 0x95, 0xB5, 0x95, 0xB6, 0x95, 0xB7, /* 0x50-0x53 */ + 0xBA, 0xF6, 0xBA, 0xF7, 0x95, 0xB8, 0xBA, 0xF8, /* 0x54-0x57 */ + 0x95, 0xB9, 0xBA, 0xF9, 0xBA, 0xFA, 0xBA, 0xFB, /* 0x58-0x5B */ + 0x95, 0xBA, 0x95, 0xBB, 0x95, 0xBC, 0x95, 0xBD, /* 0x5C-0x5F */ + 0xBA, 0xFC, 0xBA, 0xFD, 0x95, 0xBE, 0x95, 0xBF, /* 0x60-0x63 */ + 0xBA, 0xFE, 0x95, 0xC0, 0x95, 0xC1, 0x95, 0xC2, /* 0x64-0x67 */ + 0xBB, 0xA1, 0x95, 0xC3, 0xBB, 0xA2, 0x95, 0xC4, /* 0x68-0x6B */ + 0x95, 0xC5, 0x95, 0xC6, 0x95, 0xC7, 0x95, 0xC8, /* 0x6C-0x6F */ + 0xBB, 0xA3, 0xBB, 0xA4, 0x95, 0xC9, 0xBB, 0xA5, /* 0x70-0x73 */ + 0xBB, 0xA6, 0xBB, 0xA7, 0x95, 0xCA, 0x95, 0xCB, /* 0x74-0x77 */ + 0x95, 0xCC, 0x95, 0xCD, 0x95, 0xCE, 0xBB, 0xA8, /* 0x78-0x7B */ + 0xBB, 0xA9, 0xBB, 0xAA, 0x95, 0xCF, 0x95, 0xD0, /* 0x7C-0x7F */ + + 0xBB, 0xAB, 0x95, 0xD1, 0x95, 0xD2, 0x95, 0xD3, /* 0x80-0x83 */ + 0xBB, 0xAC, 0x95, 0xD4, 0x95, 0xD5, 0x95, 0xD6, /* 0x84-0x87 */ + 0x95, 0xD7, 0x95, 0xD8, 0x95, 0xD9, 0x95, 0xDA, /* 0x88-0x8B */ + 0xBB, 0xAD, 0xBB, 0xAE, 0x95, 0xDB, 0xBB, 0xAF, /* 0x8C-0x8F */ + 0xBB, 0xB0, 0xBB, 0xB1, 0x95, 0xDC, 0x95, 0xDD, /* 0x90-0x93 */ + 0x95, 0xDE, 0x95, 0xDF, 0x95, 0xE0, 0x95, 0xE1, /* 0x94-0x97 */ + 0xBB, 0xB2, 0xBB, 0xB3, 0x95, 0xE2, 0x95, 0xE3, /* 0x98-0x9B */ + 0x95, 0xE4, 0x95, 0xE5, 0x95, 0xE6, 0x95, 0xE7, /* 0x9C-0x9F */ + 0x95, 0xE8, 0x95, 0xE9, 0x95, 0xEA, 0x95, 0xEB, /* 0xA0-0xA3 */ + 0x95, 0xEC, 0x95, 0xED, 0x95, 0xEE, 0x95, 0xEF, /* 0xA4-0xA7 */ + 0xBB, 0xB4, 0x95, 0xF0, 0x95, 0xF1, 0x95, 0xF2, /* 0xA8-0xAB */ + 0x95, 0xF3, 0x95, 0xF4, 0x95, 0xF5, 0x95, 0xF6, /* 0xAC-0xAF */ + 0x95, 0xF7, 0x95, 0xF8, 0x95, 0xF9, 0x95, 0xFA, /* 0xB0-0xB3 */ + 0x95, 0xFB, 0x95, 0xFC, 0x95, 0xFD, 0x95, 0xFE, /* 0xB4-0xB7 */ + 0x96, 0x41, 0x96, 0x42, 0x96, 0x43, 0x96, 0x44, /* 0xB8-0xBB */ + 0x96, 0x45, 0x96, 0x46, 0x96, 0x47, 0x96, 0x48, /* 0xBC-0xBF */ + 0x96, 0x49, 0x96, 0x4A, 0x96, 0x4B, 0x96, 0x4C, /* 0xC0-0xC3 */ + 0x96, 0x4D, 0x96, 0x4E, 0x96, 0x4F, 0x96, 0x50, /* 0xC4-0xC7 */ + 0x96, 0x51, 0x96, 0x52, 0x96, 0x53, 0x96, 0x54, /* 0xC8-0xCB */ + 0x96, 0x55, 0x96, 0x56, 0x96, 0x57, 0x96, 0x58, /* 0xCC-0xCF */ + 0xBB, 0xB5, 0xBB, 0xB6, 0x96, 0x59, 0x96, 0x5A, /* 0xD0-0xD3 */ + 0xBB, 0xB7, 0x96, 0x61, 0x96, 0x62, 0xBB, 0xB8, /* 0xD4-0xD7 */ + 0xBB, 0xB9, 0x96, 0x63, 0x96, 0x64, 0x96, 0x65, /* 0xD8-0xDB */ + 0x96, 0x66, 0x96, 0x67, 0x96, 0x68, 0x96, 0x69, /* 0xDC-0xDF */ + 0xBB, 0xBA, 0x96, 0x6A, 0x96, 0x6B, 0xBB, 0xBB, /* 0xE0-0xE3 */ + 0xBB, 0xBC, 0xBB, 0xBD, 0x96, 0x6C, 0x96, 0x6D, /* 0xE4-0xE7 */ + 0x96, 0x6E, 0x96, 0x6F, 0x96, 0x70, 0x96, 0x71, /* 0xE8-0xEB */ + 0xBB, 0xBE, 0x96, 0x72, 0x96, 0x73, 0x96, 0x74, /* 0xEC-0xEF */ + 0x96, 0x75, 0x96, 0x76, 0x96, 0x77, 0x96, 0x78, /* 0xF0-0xF3 */ + 0x96, 0x79, 0x96, 0x7A, 0x96, 0x81, 0x96, 0x82, /* 0xF4-0xF7 */ + 0x96, 0x83, 0x96, 0x84, 0x96, 0x85, 0x96, 0x86, /* 0xF8-0xFB */ + 0x96, 0x87, 0x96, 0x88, 0x96, 0x89, 0x96, 0x8A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_BF[512] = { + 0x96, 0x8B, 0xBB, 0xBF, 0x96, 0x8C, 0x96, 0x8D, /* 0x00-0x03 */ + 0x96, 0x8E, 0x96, 0x8F, 0x96, 0x90, 0x96, 0x91, /* 0x04-0x07 */ + 0xBB, 0xC0, 0xBB, 0xC1, 0x96, 0x92, 0x96, 0x93, /* 0x08-0x0B */ + 0x96, 0x94, 0x96, 0x95, 0x96, 0x96, 0x96, 0x97, /* 0x0C-0x0F */ + 0x96, 0x98, 0x96, 0x99, 0x96, 0x9A, 0x96, 0x9B, /* 0x10-0x13 */ + 0x96, 0x9C, 0x96, 0x9D, 0x96, 0x9E, 0x96, 0x9F, /* 0x14-0x17 */ + 0xBB, 0xC2, 0xBB, 0xC3, 0x96, 0xA0, 0xBB, 0xC4, /* 0x18-0x1B */ + 0xBB, 0xC5, 0xBB, 0xC6, 0x96, 0xA1, 0x96, 0xA2, /* 0x1C-0x1F */ + 0x96, 0xA3, 0x96, 0xA4, 0x96, 0xA5, 0x96, 0xA6, /* 0x20-0x23 */ + 0x96, 0xA7, 0x96, 0xA8, 0x96, 0xA9, 0x96, 0xAA, /* 0x24-0x27 */ + 0x96, 0xAB, 0x96, 0xAC, 0x96, 0xAD, 0x96, 0xAE, /* 0x28-0x2B */ + 0x96, 0xAF, 0x96, 0xB0, 0x96, 0xB1, 0x96, 0xB2, /* 0x2C-0x2F */ + 0x96, 0xB3, 0x96, 0xB4, 0x96, 0xB5, 0x96, 0xB6, /* 0x30-0x33 */ + 0x96, 0xB7, 0x96, 0xB8, 0x96, 0xB9, 0x96, 0xBA, /* 0x34-0x37 */ + 0x96, 0xBB, 0x96, 0xBC, 0x96, 0xBD, 0x96, 0xBE, /* 0x38-0x3B */ + 0x96, 0xBF, 0x96, 0xC0, 0x96, 0xC1, 0x96, 0xC2, /* 0x3C-0x3F */ + 0xBB, 0xC7, 0xBB, 0xC8, 0x96, 0xC3, 0x96, 0xC4, /* 0x40-0x43 */ + 0xBB, 0xC9, 0x96, 0xC5, 0x96, 0xC6, 0x96, 0xC7, /* 0x44-0x47 */ + 0xBB, 0xCA, 0x96, 0xC8, 0x96, 0xC9, 0x96, 0xCA, /* 0x48-0x4B */ + 0x96, 0xCB, 0x96, 0xCC, 0x96, 0xCD, 0x96, 0xCE, /* 0x4C-0x4F */ + 0xBB, 0xCB, 0xBB, 0xCC, 0x96, 0xCF, 0x96, 0xD0, /* 0x50-0x53 */ + 0x96, 0xD1, 0xBB, 0xCD, 0x96, 0xD2, 0x96, 0xD3, /* 0x54-0x57 */ + 0x96, 0xD4, 0x96, 0xD5, 0x96, 0xD6, 0x96, 0xD7, /* 0x58-0x5B */ + 0x96, 0xD8, 0x96, 0xD9, 0x96, 0xDA, 0x96, 0xDB, /* 0x5C-0x5F */ + 0x96, 0xDC, 0x96, 0xDD, 0x96, 0xDE, 0x96, 0xDF, /* 0x60-0x63 */ + 0x96, 0xE0, 0x96, 0xE1, 0x96, 0xE2, 0x96, 0xE3, /* 0x64-0x67 */ + 0x96, 0xE4, 0x96, 0xE5, 0x96, 0xE6, 0x96, 0xE7, /* 0x68-0x6B */ + 0x96, 0xE8, 0x96, 0xE9, 0x96, 0xEA, 0x96, 0xEB, /* 0x6C-0x6F */ + 0x96, 0xEC, 0x96, 0xED, 0x96, 0xEE, 0x96, 0xEF, /* 0x70-0x73 */ + 0x96, 0xF0, 0x96, 0xF1, 0x96, 0xF2, 0x96, 0xF3, /* 0x74-0x77 */ + 0x96, 0xF4, 0x96, 0xF5, 0x96, 0xF6, 0x96, 0xF7, /* 0x78-0x7B */ + 0x96, 0xF8, 0x96, 0xF9, 0x96, 0xFA, 0x96, 0xFB, /* 0x7C-0x7F */ + + 0x96, 0xFC, 0x96, 0xFD, 0x96, 0xFE, 0x97, 0x41, /* 0x80-0x83 */ + 0x97, 0x42, 0x97, 0x43, 0x97, 0x44, 0x97, 0x45, /* 0x84-0x87 */ + 0x97, 0x46, 0x97, 0x47, 0x97, 0x48, 0x97, 0x49, /* 0x88-0x8B */ + 0x97, 0x4A, 0x97, 0x4B, 0x97, 0x4C, 0x97, 0x4D, /* 0x8C-0x8F */ + 0x97, 0x4E, 0x97, 0x4F, 0x97, 0x50, 0x97, 0x51, /* 0x90-0x93 */ + 0xBB, 0xCE, 0x97, 0x52, 0x97, 0x53, 0x97, 0x54, /* 0x94-0x97 */ + 0x97, 0x55, 0x97, 0x56, 0x97, 0x57, 0x97, 0x58, /* 0x98-0x9B */ + 0x97, 0x59, 0x97, 0x5A, 0x97, 0x61, 0x97, 0x62, /* 0x9C-0x9F */ + 0x97, 0x63, 0x97, 0x64, 0x97, 0x65, 0x97, 0x66, /* 0xA0-0xA3 */ + 0x97, 0x67, 0x97, 0x68, 0x97, 0x69, 0x97, 0x6A, /* 0xA4-0xA7 */ + 0x97, 0x6B, 0x97, 0x6C, 0x97, 0x6D, 0x97, 0x6E, /* 0xA8-0xAB */ + 0x97, 0x6F, 0x97, 0x70, 0x97, 0x71, 0x97, 0x72, /* 0xAC-0xAF */ + 0xBB, 0xCF, 0x97, 0x73, 0x97, 0x74, 0x97, 0x75, /* 0xB0-0xB3 */ + 0x97, 0x76, 0x97, 0x77, 0x97, 0x78, 0x97, 0x79, /* 0xB4-0xB7 */ + 0x97, 0x7A, 0x97, 0x81, 0x97, 0x82, 0x97, 0x83, /* 0xB8-0xBB */ + 0x97, 0x84, 0x97, 0x85, 0x97, 0x86, 0x97, 0x87, /* 0xBC-0xBF */ + 0x97, 0x88, 0x97, 0x89, 0x97, 0x8A, 0x97, 0x8B, /* 0xC0-0xC3 */ + 0x97, 0x8C, 0xBB, 0xD0, 0x97, 0x8D, 0x97, 0x8E, /* 0xC4-0xC7 */ + 0x97, 0x8F, 0x97, 0x90, 0x97, 0x91, 0x97, 0x92, /* 0xC8-0xCB */ + 0xBB, 0xD1, 0xBB, 0xD2, 0x97, 0x93, 0x97, 0x94, /* 0xCC-0xCF */ + 0xBB, 0xD3, 0x97, 0x95, 0x97, 0x96, 0x97, 0x97, /* 0xD0-0xD3 */ + 0xBB, 0xD4, 0x97, 0x98, 0x97, 0x99, 0x97, 0x9A, /* 0xD4-0xD7 */ + 0x97, 0x9B, 0x97, 0x9C, 0x97, 0x9D, 0x97, 0x9E, /* 0xD8-0xDB */ + 0xBB, 0xD5, 0x97, 0x9F, 0x97, 0xA0, 0xBB, 0xD6, /* 0xDC-0xDF */ + 0x97, 0xA1, 0xBB, 0xD7, 0x97, 0xA2, 0x97, 0xA3, /* 0xE0-0xE3 */ + 0x97, 0xA4, 0x97, 0xA5, 0x97, 0xA6, 0x97, 0xA7, /* 0xE4-0xE7 */ + 0x97, 0xA8, 0x97, 0xA9, 0x97, 0xAA, 0x97, 0xAB, /* 0xE8-0xEB */ + 0x97, 0xAC, 0x97, 0xAD, 0x97, 0xAE, 0x97, 0xAF, /* 0xEC-0xEF */ + 0x97, 0xB0, 0x97, 0xB1, 0x97, 0xB2, 0x97, 0xB3, /* 0xF0-0xF3 */ + 0x97, 0xB4, 0x97, 0xB5, 0x97, 0xB6, 0x97, 0xB7, /* 0xF4-0xF7 */ + 0x97, 0xB8, 0x97, 0xB9, 0x97, 0xBA, 0x97, 0xBB, /* 0xF8-0xFB */ + 0x97, 0xBC, 0x97, 0xBD, 0x97, 0xBE, 0x97, 0xBF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C0[512] = { + 0x97, 0xC0, 0x97, 0xC1, 0x97, 0xC2, 0x97, 0xC3, /* 0x00-0x03 */ + 0x97, 0xC4, 0x97, 0xC5, 0x97, 0xC6, 0x97, 0xC7, /* 0x04-0x07 */ + 0x97, 0xC8, 0x97, 0xC9, 0x97, 0xCA, 0x97, 0xCB, /* 0x08-0x0B */ + 0x97, 0xCC, 0x97, 0xCD, 0x97, 0xCE, 0x97, 0xCF, /* 0x0C-0x0F */ + 0x97, 0xD0, 0x97, 0xD1, 0x97, 0xD2, 0x97, 0xD3, /* 0x10-0x13 */ + 0x97, 0xD4, 0x97, 0xD5, 0x97, 0xD6, 0x97, 0xD7, /* 0x14-0x17 */ + 0x97, 0xD8, 0x97, 0xD9, 0x97, 0xDA, 0x97, 0xDB, /* 0x18-0x1B */ + 0x97, 0xDC, 0x97, 0xDD, 0x97, 0xDE, 0x97, 0xDF, /* 0x1C-0x1F */ + 0x97, 0xE0, 0x97, 0xE1, 0x97, 0xE2, 0x97, 0xE3, /* 0x20-0x23 */ + 0x97, 0xE4, 0x97, 0xE5, 0x97, 0xE6, 0x97, 0xE7, /* 0x24-0x27 */ + 0x97, 0xE8, 0x97, 0xE9, 0x97, 0xEA, 0x97, 0xEB, /* 0x28-0x2B */ + 0x97, 0xEC, 0x97, 0xED, 0x97, 0xEE, 0x97, 0xEF, /* 0x2C-0x2F */ + 0x97, 0xF0, 0x97, 0xF1, 0x97, 0xF2, 0x97, 0xF3, /* 0x30-0x33 */ + 0x97, 0xF4, 0x97, 0xF5, 0x97, 0xF6, 0x97, 0xF7, /* 0x34-0x37 */ + 0x97, 0xF8, 0x97, 0xF9, 0x97, 0xFA, 0x97, 0xFB, /* 0x38-0x3B */ + 0xBB, 0xD8, 0x97, 0xFC, 0x97, 0xFD, 0x97, 0xFE, /* 0x3C-0x3F */ + 0x98, 0x41, 0x98, 0x42, 0x98, 0x43, 0x98, 0x44, /* 0x40-0x43 */ + 0x98, 0x45, 0x98, 0x46, 0x98, 0x47, 0x98, 0x48, /* 0x44-0x47 */ + 0x98, 0x49, 0x98, 0x4A, 0x98, 0x4B, 0x98, 0x4C, /* 0x48-0x4B */ + 0x98, 0x4D, 0x98, 0x4E, 0x98, 0x4F, 0x98, 0x50, /* 0x4C-0x4F */ + 0x98, 0x51, 0xBB, 0xD9, 0x98, 0x52, 0x98, 0x53, /* 0x50-0x53 */ + 0x98, 0x54, 0x98, 0x55, 0x98, 0x56, 0x98, 0x57, /* 0x54-0x57 */ + 0xBB, 0xDA, 0x98, 0x58, 0x98, 0x59, 0x98, 0x5A, /* 0x58-0x5B */ + 0xBB, 0xDB, 0x98, 0x61, 0x98, 0x62, 0x98, 0x63, /* 0x5C-0x5F */ + 0xBB, 0xDC, 0x98, 0x64, 0x98, 0x65, 0x98, 0x66, /* 0x60-0x63 */ + 0x98, 0x67, 0x98, 0x68, 0x98, 0x69, 0x98, 0x6A, /* 0x64-0x67 */ + 0xBB, 0xDD, 0xBB, 0xDE, 0x98, 0x6B, 0x98, 0x6C, /* 0x68-0x6B */ + 0x98, 0x6D, 0x98, 0x6E, 0x98, 0x6F, 0x98, 0x70, /* 0x6C-0x6F */ + 0x98, 0x71, 0x98, 0x72, 0x98, 0x73, 0x98, 0x74, /* 0x70-0x73 */ + 0x98, 0x75, 0x98, 0x76, 0x98, 0x77, 0x98, 0x78, /* 0x74-0x77 */ + 0x98, 0x79, 0x98, 0x7A, 0x98, 0x81, 0x98, 0x82, /* 0x78-0x7B */ + 0x98, 0x83, 0x98, 0x84, 0x98, 0x85, 0x98, 0x86, /* 0x7C-0x7F */ + + 0x98, 0x87, 0x98, 0x88, 0x98, 0x89, 0x98, 0x8A, /* 0x80-0x83 */ + 0x98, 0x8B, 0x98, 0x8C, 0x98, 0x8D, 0x98, 0x8E, /* 0x84-0x87 */ + 0x98, 0x8F, 0x98, 0x90, 0x98, 0x91, 0x98, 0x92, /* 0x88-0x8B */ + 0x98, 0x93, 0x98, 0x94, 0x98, 0x95, 0x98, 0x96, /* 0x8C-0x8F */ + 0xBB, 0xDF, 0xBB, 0xE0, 0x98, 0x97, 0x98, 0x98, /* 0x90-0x93 */ + 0xBB, 0xE1, 0x98, 0x99, 0x98, 0x9A, 0x98, 0x9B, /* 0x94-0x97 */ + 0xBB, 0xE2, 0x98, 0x9C, 0x98, 0x9D, 0x98, 0x9E, /* 0x98-0x9B */ + 0x98, 0x9F, 0x98, 0xA0, 0x98, 0xA1, 0x98, 0xA2, /* 0x9C-0x9F */ + 0xBB, 0xE3, 0xBB, 0xE4, 0x98, 0xA3, 0xBB, 0xE5, /* 0xA0-0xA3 */ + 0x98, 0xA4, 0xBB, 0xE6, 0x98, 0xA5, 0x98, 0xA6, /* 0xA4-0xA7 */ + 0x98, 0xA7, 0x98, 0xA8, 0x98, 0xA9, 0x98, 0xAA, /* 0xA8-0xAB */ + 0xBB, 0xE7, 0xBB, 0xE8, 0x98, 0xAB, 0xBB, 0xE9, /* 0xAC-0xAF */ + 0xBB, 0xEA, 0x98, 0xAC, 0x98, 0xAD, 0xBB, 0xEB, /* 0xB0-0xB3 */ + 0xBB, 0xEC, 0xBB, 0xED, 0xBB, 0xEE, 0x98, 0xAE, /* 0xB4-0xB7 */ + 0x98, 0xAF, 0x98, 0xB0, 0x98, 0xB1, 0x98, 0xB2, /* 0xB8-0xBB */ + 0xBB, 0xEF, 0xBB, 0xF0, 0x98, 0xB3, 0xBB, 0xF1, /* 0xBC-0xBF */ + 0xBB, 0xF2, 0xBB, 0xF3, 0x98, 0xB4, 0x98, 0xB5, /* 0xC0-0xC3 */ + 0x98, 0xB6, 0xBB, 0xF4, 0x98, 0xB7, 0x98, 0xB8, /* 0xC4-0xC7 */ + 0xBB, 0xF5, 0xBB, 0xF6, 0x98, 0xB9, 0x98, 0xBA, /* 0xC8-0xCB */ + 0xBB, 0xF7, 0x98, 0xBB, 0x98, 0xBC, 0x98, 0xBD, /* 0xCC-0xCF */ + 0xBB, 0xF8, 0x98, 0xBE, 0x98, 0xBF, 0x98, 0xC0, /* 0xD0-0xD3 */ + 0x98, 0xC1, 0x98, 0xC2, 0x98, 0xC3, 0x98, 0xC4, /* 0xD4-0xD7 */ + 0xBB, 0xF9, 0xBB, 0xFA, 0x98, 0xC5, 0xBB, 0xFB, /* 0xD8-0xDB */ + 0xBB, 0xFC, 0xBB, 0xFD, 0x98, 0xC6, 0x98, 0xC7, /* 0xDC-0xDF */ + 0x98, 0xC8, 0x98, 0xC9, 0x98, 0xCA, 0x98, 0xCB, /* 0xE0-0xE3 */ + 0xBB, 0xFE, 0xBC, 0xA1, 0x98, 0xCC, 0x98, 0xCD, /* 0xE4-0xE7 */ + 0xBC, 0xA2, 0x98, 0xCE, 0x98, 0xCF, 0x98, 0xD0, /* 0xE8-0xEB */ + 0xBC, 0xA3, 0x98, 0xD1, 0x98, 0xD2, 0x98, 0xD3, /* 0xEC-0xEF */ + 0x98, 0xD4, 0x98, 0xD5, 0x98, 0xD6, 0x98, 0xD7, /* 0xF0-0xF3 */ + 0xBC, 0xA4, 0xBC, 0xA5, 0x98, 0xD8, 0xBC, 0xA6, /* 0xF4-0xF7 */ + 0x98, 0xD9, 0xBC, 0xA7, 0x98, 0xDA, 0x98, 0xDB, /* 0xF8-0xFB */ + 0x98, 0xDC, 0x98, 0xDD, 0x98, 0xDE, 0x98, 0xDF, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C1[512] = { + 0xBC, 0xA8, 0x98, 0xE0, 0x98, 0xE1, 0x98, 0xE2, /* 0x00-0x03 */ + 0xBC, 0xA9, 0x98, 0xE3, 0x98, 0xE4, 0x98, 0xE5, /* 0x04-0x07 */ + 0xBC, 0xAA, 0x98, 0xE6, 0x98, 0xE7, 0x98, 0xE8, /* 0x08-0x0B */ + 0x98, 0xE9, 0x98, 0xEA, 0x98, 0xEB, 0x98, 0xEC, /* 0x0C-0x0F */ + 0xBC, 0xAB, 0x98, 0xED, 0x98, 0xEE, 0x98, 0xEF, /* 0x10-0x13 */ + 0x98, 0xF0, 0xBC, 0xAC, 0x98, 0xF1, 0x98, 0xF2, /* 0x14-0x17 */ + 0x98, 0xF3, 0x98, 0xF4, 0x98, 0xF5, 0x98, 0xF6, /* 0x18-0x1B */ + 0xBC, 0xAD, 0xBC, 0xAE, 0xBC, 0xAF, 0xBC, 0xB0, /* 0x1C-0x1F */ + 0xBC, 0xB1, 0x98, 0xF7, 0x98, 0xF8, 0xBC, 0xB2, /* 0x20-0x23 */ + 0xBC, 0xB3, 0x98, 0xF9, 0xBC, 0xB4, 0xBC, 0xB5, /* 0x24-0x27 */ + 0x98, 0xFA, 0x98, 0xFB, 0x98, 0xFC, 0x98, 0xFD, /* 0x28-0x2B */ + 0xBC, 0xB6, 0xBC, 0xB7, 0x98, 0xFE, 0xBC, 0xB8, /* 0x2C-0x2F */ + 0xBC, 0xB9, 0xBC, 0xBA, 0x99, 0x41, 0x99, 0x42, /* 0x30-0x33 */ + 0x99, 0x43, 0x99, 0x44, 0xBC, 0xBB, 0x99, 0x45, /* 0x34-0x37 */ + 0xBC, 0xBC, 0xBC, 0xBD, 0x99, 0x46, 0x99, 0x47, /* 0x38-0x3B */ + 0xBC, 0xBE, 0x99, 0x48, 0x99, 0x49, 0x99, 0x4A, /* 0x3C-0x3F */ + 0xBC, 0xBF, 0x99, 0x4B, 0x99, 0x4C, 0x99, 0x4D, /* 0x40-0x43 */ + 0x99, 0x4E, 0x99, 0x4F, 0x99, 0x50, 0x99, 0x51, /* 0x44-0x47 */ + 0xBC, 0xC0, 0xBC, 0xC1, 0x99, 0x52, 0xBC, 0xC2, /* 0x48-0x4B */ + 0xBC, 0xC3, 0xBC, 0xC4, 0x99, 0x53, 0x99, 0x54, /* 0x4C-0x4F */ + 0x99, 0x55, 0x99, 0x56, 0x99, 0x57, 0x99, 0x58, /* 0x50-0x53 */ + 0xBC, 0xC5, 0xBC, 0xC6, 0x99, 0x59, 0x99, 0x5A, /* 0x54-0x57 */ + 0xBC, 0xC7, 0x99, 0x61, 0x99, 0x62, 0x99, 0x63, /* 0x58-0x5B */ + 0xBC, 0xC8, 0x99, 0x64, 0x99, 0x65, 0x99, 0x66, /* 0x5C-0x5F */ + 0x99, 0x67, 0x99, 0x68, 0x99, 0x69, 0x99, 0x6A, /* 0x60-0x63 */ + 0xBC, 0xC9, 0xBC, 0xCA, 0x99, 0x6B, 0xBC, 0xCB, /* 0x64-0x67 */ + 0xBC, 0xCC, 0xBC, 0xCD, 0x99, 0x6C, 0x99, 0x6D, /* 0x68-0x6B */ + 0x99, 0x6E, 0x99, 0x6F, 0x99, 0x70, 0x99, 0x71, /* 0x6C-0x6F */ + 0xBC, 0xCE, 0x99, 0x72, 0x99, 0x73, 0x99, 0x74, /* 0x70-0x73 */ + 0xBC, 0xCF, 0x99, 0x75, 0x99, 0x76, 0x99, 0x77, /* 0x74-0x77 */ + 0xBC, 0xD0, 0x99, 0x78, 0x99, 0x79, 0x99, 0x7A, /* 0x78-0x7B */ + 0x99, 0x81, 0x99, 0x82, 0x99, 0x83, 0x99, 0x84, /* 0x7C-0x7F */ + + 0x99, 0x85, 0x99, 0x86, 0x99, 0x87, 0x99, 0x88, /* 0x80-0x83 */ + 0x99, 0x89, 0xBC, 0xD1, 0x99, 0x8A, 0x99, 0x8B, /* 0x84-0x87 */ + 0x99, 0x8C, 0x99, 0x8D, 0x99, 0x8E, 0x99, 0x8F, /* 0x88-0x8B */ + 0xBC, 0xD2, 0xBC, 0xD3, 0xBC, 0xD4, 0x99, 0x90, /* 0x8C-0x8F */ + 0xBC, 0xD5, 0x99, 0x91, 0x99, 0x92, 0x99, 0x93, /* 0x90-0x93 */ + 0xBC, 0xD6, 0x99, 0x94, 0xBC, 0xD7, 0x99, 0x95, /* 0x94-0x97 */ + 0x99, 0x96, 0x99, 0x97, 0x99, 0x98, 0x99, 0x99, /* 0x98-0x9B */ + 0xBC, 0xD8, 0xBC, 0xD9, 0x99, 0x9A, 0xBC, 0xDA, /* 0x9C-0x9F */ + 0x99, 0x9B, 0xBC, 0xDB, 0x99, 0x9C, 0x99, 0x9D, /* 0xA0-0xA3 */ + 0x99, 0x9E, 0xBC, 0xDC, 0x99, 0x9F, 0x99, 0xA0, /* 0xA4-0xA7 */ + 0xBC, 0xDD, 0xBC, 0xDE, 0x99, 0xA1, 0x99, 0xA2, /* 0xA8-0xAB */ + 0xBC, 0xDF, 0x99, 0xA3, 0x99, 0xA4, 0x99, 0xA5, /* 0xAC-0xAF */ + 0xBC, 0xE0, 0x99, 0xA6, 0x99, 0xA7, 0x99, 0xA8, /* 0xB0-0xB3 */ + 0x99, 0xA9, 0x99, 0xAA, 0x99, 0xAB, 0x99, 0xAC, /* 0xB4-0xB7 */ + 0x99, 0xAD, 0x99, 0xAE, 0x99, 0xAF, 0x99, 0xB0, /* 0xB8-0xBB */ + 0x99, 0xB1, 0xBC, 0xE1, 0x99, 0xB2, 0x99, 0xB3, /* 0xBC-0xBF */ + 0x99, 0xB4, 0x99, 0xB5, 0x99, 0xB6, 0x99, 0xB7, /* 0xC0-0xC3 */ + 0xBC, 0xE2, 0x99, 0xB8, 0x99, 0xB9, 0x99, 0xBA, /* 0xC4-0xC7 */ + 0xBC, 0xE3, 0x99, 0xBB, 0x99, 0xBC, 0x99, 0xBD, /* 0xC8-0xCB */ + 0xBC, 0xE4, 0x99, 0xBE, 0x99, 0xBF, 0x99, 0xC0, /* 0xCC-0xCF */ + 0x99, 0xC1, 0x99, 0xC2, 0x99, 0xC3, 0x99, 0xC4, /* 0xD0-0xD3 */ + 0xBC, 0xE5, 0x99, 0xC5, 0x99, 0xC6, 0xBC, 0xE6, /* 0xD4-0xD7 */ + 0xBC, 0xE7, 0x99, 0xC7, 0x99, 0xC8, 0x99, 0xC9, /* 0xD8-0xDB */ + 0x99, 0xCA, 0x99, 0xCB, 0x99, 0xCC, 0x99, 0xCD, /* 0xDC-0xDF */ + 0xBC, 0xE8, 0x99, 0xCE, 0x99, 0xCF, 0x99, 0xD0, /* 0xE0-0xE3 */ + 0xBC, 0xE9, 0x99, 0xD1, 0x99, 0xD2, 0x99, 0xD3, /* 0xE4-0xE7 */ + 0xBC, 0xEA, 0x99, 0xD4, 0x99, 0xD5, 0x99, 0xD6, /* 0xE8-0xEB */ + 0x99, 0xD7, 0x99, 0xD8, 0x99, 0xD9, 0x99, 0xDA, /* 0xEC-0xEF */ + 0xBC, 0xEB, 0xBC, 0xEC, 0x99, 0xDB, 0xBC, 0xED, /* 0xF0-0xF3 */ + 0x99, 0xDC, 0x99, 0xDD, 0x99, 0xDE, 0x99, 0xDF, /* 0xF4-0xF7 */ + 0x99, 0xE0, 0x99, 0xE1, 0x99, 0xE2, 0x99, 0xE3, /* 0xF8-0xFB */ + 0xBC, 0xEE, 0xBC, 0xEF, 0x99, 0xE4, 0x99, 0xE5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C2[512] = { + 0xBC, 0xF0, 0x99, 0xE6, 0x99, 0xE7, 0x99, 0xE8, /* 0x00-0x03 */ + 0xBC, 0xF1, 0x99, 0xE9, 0x99, 0xEA, 0x99, 0xEB, /* 0x04-0x07 */ + 0x99, 0xEC, 0x99, 0xED, 0x99, 0xEE, 0x99, 0xEF, /* 0x08-0x0B */ + 0xBC, 0xF2, 0xBC, 0xF3, 0x99, 0xF0, 0xBC, 0xF4, /* 0x0C-0x0F */ + 0x99, 0xF1, 0xBC, 0xF5, 0x99, 0xF2, 0x99, 0xF3, /* 0x10-0x13 */ + 0x99, 0xF4, 0x99, 0xF5, 0x99, 0xF6, 0x99, 0xF7, /* 0x14-0x17 */ + 0xBC, 0xF6, 0xBC, 0xF7, 0x99, 0xF8, 0x99, 0xF9, /* 0x18-0x1B */ + 0xBC, 0xF8, 0x99, 0xFA, 0x99, 0xFB, 0xBC, 0xF9, /* 0x1C-0x1F */ + 0xBC, 0xFA, 0x99, 0xFC, 0x99, 0xFD, 0x99, 0xFE, /* 0x20-0x23 */ + 0x9A, 0x41, 0x9A, 0x42, 0x9A, 0x43, 0x9A, 0x44, /* 0x24-0x27 */ + 0xBC, 0xFB, 0xBC, 0xFC, 0x9A, 0x45, 0xBC, 0xFD, /* 0x28-0x2B */ + 0x9A, 0x46, 0xBC, 0xFE, 0x9A, 0x47, 0xBD, 0xA1, /* 0x2C-0x2F */ + 0x9A, 0x48, 0xBD, 0xA2, 0xBD, 0xA3, 0x9A, 0x49, /* 0x30-0x33 */ + 0xBD, 0xA4, 0x9A, 0x4A, 0x9A, 0x4B, 0x9A, 0x4C, /* 0x34-0x37 */ + 0x9A, 0x4D, 0x9A, 0x4E, 0x9A, 0x4F, 0x9A, 0x50, /* 0x38-0x3B */ + 0x9A, 0x51, 0x9A, 0x52, 0x9A, 0x53, 0x9A, 0x54, /* 0x3C-0x3F */ + 0x9A, 0x55, 0x9A, 0x56, 0x9A, 0x57, 0x9A, 0x58, /* 0x40-0x43 */ + 0x9A, 0x59, 0x9A, 0x5A, 0x9A, 0x61, 0x9A, 0x62, /* 0x44-0x47 */ + 0xBD, 0xA5, 0x9A, 0x63, 0x9A, 0x64, 0x9A, 0x65, /* 0x48-0x4B */ + 0x9A, 0x66, 0x9A, 0x67, 0x9A, 0x68, 0x9A, 0x69, /* 0x4C-0x4F */ + 0xBD, 0xA6, 0xBD, 0xA7, 0x9A, 0x6A, 0x9A, 0x6B, /* 0x50-0x53 */ + 0xBD, 0xA8, 0x9A, 0x6C, 0x9A, 0x6D, 0x9A, 0x6E, /* 0x54-0x57 */ + 0xBD, 0xA9, 0x9A, 0x6F, 0x9A, 0x70, 0x9A, 0x71, /* 0x58-0x5B */ + 0x9A, 0x72, 0x9A, 0x73, 0x9A, 0x74, 0x9A, 0x75, /* 0x5C-0x5F */ + 0xBD, 0xAA, 0x9A, 0x76, 0x9A, 0x77, 0x9A, 0x78, /* 0x60-0x63 */ + 0x9A, 0x79, 0xBD, 0xAB, 0x9A, 0x7A, 0x9A, 0x81, /* 0x64-0x67 */ + 0x9A, 0x82, 0x9A, 0x83, 0x9A, 0x84, 0x9A, 0x85, /* 0x68-0x6B */ + 0xBD, 0xAC, 0xBD, 0xAD, 0x9A, 0x86, 0x9A, 0x87, /* 0x6C-0x6F */ + 0xBD, 0xAE, 0x9A, 0x88, 0x9A, 0x89, 0x9A, 0x8A, /* 0x70-0x73 */ + 0xBD, 0xAF, 0x9A, 0x8B, 0x9A, 0x8C, 0x9A, 0x8D, /* 0x74-0x77 */ + 0x9A, 0x8E, 0x9A, 0x8F, 0x9A, 0x90, 0x9A, 0x91, /* 0x78-0x7B */ + 0xBD, 0xB0, 0xBD, 0xB1, 0x9A, 0x92, 0xBD, 0xB2, /* 0x7C-0x7F */ + + 0x9A, 0x93, 0xBD, 0xB3, 0x9A, 0x94, 0x9A, 0x95, /* 0x80-0x83 */ + 0x9A, 0x96, 0x9A, 0x97, 0x9A, 0x98, 0x9A, 0x99, /* 0x84-0x87 */ + 0xBD, 0xB4, 0xBD, 0xB5, 0x9A, 0x9A, 0x9A, 0x9B, /* 0x88-0x8B */ + 0x9A, 0x9C, 0x9A, 0x9D, 0x9A, 0x9E, 0x9A, 0x9F, /* 0x8C-0x8F */ + 0xBD, 0xB6, 0x9A, 0xA0, 0x9A, 0xA1, 0x9A, 0xA2, /* 0x90-0x93 */ + 0x9A, 0xA3, 0x9A, 0xA4, 0x9A, 0xA5, 0x9A, 0xA6, /* 0x94-0x97 */ + 0xBD, 0xB7, 0x9A, 0xA7, 0x9A, 0xA8, 0xBD, 0xB8, /* 0x98-0x9B */ + 0x9A, 0xA9, 0xBD, 0xB9, 0x9A, 0xAA, 0x9A, 0xAB, /* 0x9C-0x9F */ + 0x9A, 0xAC, 0x9A, 0xAD, 0x9A, 0xAE, 0x9A, 0xAF, /* 0xA0-0xA3 */ + 0xBD, 0xBA, 0xBD, 0xBB, 0x9A, 0xB0, 0x9A, 0xB1, /* 0xA4-0xA7 */ + 0xBD, 0xBC, 0x9A, 0xB2, 0x9A, 0xB3, 0x9A, 0xB4, /* 0xA8-0xAB */ + 0xBD, 0xBD, 0xBD, 0xBE, 0x9A, 0xB5, 0x9A, 0xB6, /* 0xAC-0xAF */ + 0x9A, 0xB7, 0x9A, 0xB8, 0x9A, 0xB9, 0x9A, 0xBA, /* 0xB0-0xB3 */ + 0xBD, 0xBF, 0xBD, 0xC0, 0x9A, 0xBB, 0xBD, 0xC1, /* 0xB4-0xB7 */ + 0x9A, 0xBC, 0xBD, 0xC2, 0x9A, 0xBD, 0x9A, 0xBE, /* 0xB8-0xBB */ + 0x9A, 0xBF, 0x9A, 0xC0, 0x9A, 0xC1, 0x9A, 0xC2, /* 0xBC-0xBF */ + 0x9A, 0xC3, 0x9A, 0xC4, 0x9A, 0xC5, 0x9A, 0xC6, /* 0xC0-0xC3 */ + 0x9A, 0xC7, 0x9A, 0xC8, 0x9A, 0xC9, 0x9A, 0xCA, /* 0xC4-0xC7 */ + 0x9A, 0xCB, 0x9A, 0xCC, 0x9A, 0xCD, 0x9A, 0xCE, /* 0xC8-0xCB */ + 0x9A, 0xCF, 0x9A, 0xD0, 0x9A, 0xD1, 0x9A, 0xD2, /* 0xCC-0xCF */ + 0x9A, 0xD3, 0x9A, 0xD4, 0x9A, 0xD5, 0x9A, 0xD6, /* 0xD0-0xD3 */ + 0x9A, 0xD7, 0x9A, 0xD8, 0x9A, 0xD9, 0x9A, 0xDA, /* 0xD4-0xD7 */ + 0x9A, 0xDB, 0x9A, 0xDC, 0x9A, 0xDD, 0x9A, 0xDE, /* 0xD8-0xDB */ + 0xBD, 0xC3, 0xBD, 0xC4, 0x9A, 0xDF, 0x9A, 0xE0, /* 0xDC-0xDF */ + 0xBD, 0xC5, 0x9A, 0xE1, 0x9A, 0xE2, 0xBD, 0xC6, /* 0xE0-0xE3 */ + 0xBD, 0xC7, 0x9A, 0xE3, 0x9A, 0xE4, 0x9A, 0xE5, /* 0xE4-0xE7 */ + 0x9A, 0xE6, 0x9A, 0xE7, 0x9A, 0xE8, 0xBD, 0xC8, /* 0xE8-0xEB */ + 0xBD, 0xC9, 0xBD, 0xCA, 0x9A, 0xE9, 0xBD, 0xCB, /* 0xEC-0xEF */ + 0x9A, 0xEA, 0xBD, 0xCC, 0x9A, 0xEB, 0x9A, 0xEC, /* 0xF0-0xF3 */ + 0x9A, 0xED, 0x9A, 0xEE, 0xBD, 0xCD, 0x9A, 0xEF, /* 0xF4-0xF7 */ + 0xBD, 0xCE, 0xBD, 0xCF, 0x9A, 0xF0, 0xBD, 0xD0, /* 0xF8-0xFB */ + 0xBD, 0xD1, 0x9A, 0xF1, 0x9A, 0xF2, 0x9A, 0xF3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C3[512] = { + 0xBD, 0xD2, 0x9A, 0xF4, 0x9A, 0xF5, 0x9A, 0xF6, /* 0x00-0x03 */ + 0x9A, 0xF7, 0x9A, 0xF8, 0x9A, 0xF9, 0x9A, 0xFA, /* 0x04-0x07 */ + 0xBD, 0xD3, 0xBD, 0xD4, 0x9A, 0xFB, 0x9A, 0xFC, /* 0x08-0x0B */ + 0xBD, 0xD5, 0xBD, 0xD6, 0x9A, 0xFD, 0x9A, 0xFE, /* 0x0C-0x0F */ + 0x9B, 0x41, 0x9B, 0x42, 0x9B, 0x43, 0xBD, 0xD7, /* 0x10-0x13 */ + 0xBD, 0xD8, 0xBD, 0xD9, 0x9B, 0x44, 0x9B, 0x45, /* 0x14-0x17 */ + 0xBD, 0xDA, 0x9B, 0x46, 0x9B, 0x47, 0x9B, 0x48, /* 0x18-0x1B */ + 0xBD, 0xDB, 0x9B, 0x49, 0x9B, 0x4A, 0x9B, 0x4B, /* 0x1C-0x1F */ + 0x9B, 0x4C, 0x9B, 0x4D, 0x9B, 0x4E, 0x9B, 0x4F, /* 0x20-0x23 */ + 0xBD, 0xDC, 0xBD, 0xDD, 0x9B, 0x50, 0x9B, 0x51, /* 0x24-0x27 */ + 0xBD, 0xDE, 0xBD, 0xDF, 0x9B, 0x52, 0x9B, 0x53, /* 0x28-0x2B */ + 0x9B, 0x54, 0x9B, 0x55, 0x9B, 0x56, 0x9B, 0x57, /* 0x2C-0x2F */ + 0x9B, 0x58, 0x9B, 0x59, 0x9B, 0x5A, 0x9B, 0x61, /* 0x30-0x33 */ + 0x9B, 0x62, 0x9B, 0x63, 0x9B, 0x64, 0x9B, 0x65, /* 0x34-0x37 */ + 0x9B, 0x66, 0x9B, 0x67, 0x9B, 0x68, 0x9B, 0x69, /* 0x38-0x3B */ + 0x9B, 0x6A, 0x9B, 0x6B, 0x9B, 0x6C, 0x9B, 0x6D, /* 0x3C-0x3F */ + 0x9B, 0x6E, 0x9B, 0x6F, 0x9B, 0x70, 0x9B, 0x71, /* 0x40-0x43 */ + 0x9B, 0x72, 0xBD, 0xE0, 0x9B, 0x73, 0x9B, 0x74, /* 0x44-0x47 */ + 0x9B, 0x75, 0x9B, 0x76, 0x9B, 0x77, 0x9B, 0x78, /* 0x48-0x4B */ + 0x9B, 0x79, 0x9B, 0x7A, 0x9B, 0x81, 0x9B, 0x82, /* 0x4C-0x4F */ + 0x9B, 0x83, 0x9B, 0x84, 0x9B, 0x85, 0x9B, 0x86, /* 0x50-0x53 */ + 0x9B, 0x87, 0x9B, 0x88, 0x9B, 0x89, 0x9B, 0x8A, /* 0x54-0x57 */ + 0x9B, 0x8B, 0x9B, 0x8C, 0x9B, 0x8D, 0x9B, 0x8E, /* 0x58-0x5B */ + 0x9B, 0x8F, 0x9B, 0x90, 0x9B, 0x91, 0x9B, 0x92, /* 0x5C-0x5F */ + 0x9B, 0x93, 0x9B, 0x94, 0x9B, 0x95, 0x9B, 0x96, /* 0x60-0x63 */ + 0x9B, 0x97, 0x9B, 0x98, 0x9B, 0x99, 0x9B, 0x9A, /* 0x64-0x67 */ + 0xBD, 0xE1, 0xBD, 0xE2, 0x9B, 0x9B, 0x9B, 0x9C, /* 0x68-0x6B */ + 0xBD, 0xE3, 0x9B, 0x9D, 0x9B, 0x9E, 0x9B, 0x9F, /* 0x6C-0x6F */ + 0xBD, 0xE4, 0x9B, 0xA0, 0xBD, 0xE5, 0x9B, 0xA1, /* 0x70-0x73 */ + 0x9B, 0xA2, 0x9B, 0xA3, 0x9B, 0xA4, 0x9B, 0xA5, /* 0x74-0x77 */ + 0xBD, 0xE6, 0xBD, 0xE7, 0x9B, 0xA6, 0x9B, 0xA7, /* 0x78-0x7B */ + 0xBD, 0xE8, 0xBD, 0xE9, 0x9B, 0xA8, 0x9B, 0xA9, /* 0x7C-0x7F */ + + 0x9B, 0xAA, 0x9B, 0xAB, 0x9B, 0xAC, 0x9B, 0xAD, /* 0x80-0x83 */ + 0xBD, 0xEA, 0x9B, 0xAE, 0x9B, 0xAF, 0x9B, 0xB0, /* 0x84-0x87 */ + 0xBD, 0xEB, 0x9B, 0xB1, 0x9B, 0xB2, 0x9B, 0xB3, /* 0x88-0x8B */ + 0xBD, 0xEC, 0x9B, 0xB4, 0x9B, 0xB5, 0x9B, 0xB6, /* 0x8C-0x8F */ + 0x9B, 0xB7, 0x9B, 0xB8, 0x9B, 0xB9, 0x9B, 0xBA, /* 0x90-0x93 */ + 0x9B, 0xBB, 0x9B, 0xBC, 0x9B, 0xBD, 0x9B, 0xBE, /* 0x94-0x97 */ + 0x9B, 0xBF, 0x9B, 0xC0, 0x9B, 0xC1, 0x9B, 0xC2, /* 0x98-0x9B */ + 0x9B, 0xC3, 0x9B, 0xC4, 0x9B, 0xC5, 0x9B, 0xC6, /* 0x9C-0x9F */ + 0x9B, 0xC7, 0x9B, 0xC8, 0x9B, 0xC9, 0x9B, 0xCA, /* 0xA0-0xA3 */ + 0x9B, 0xCB, 0x9B, 0xCC, 0x9B, 0xCD, 0x9B, 0xCE, /* 0xA4-0xA7 */ + 0x9B, 0xCF, 0x9B, 0xD0, 0x9B, 0xD1, 0x9B, 0xD2, /* 0xA8-0xAB */ + 0x9B, 0xD3, 0x9B, 0xD4, 0x9B, 0xD5, 0x9B, 0xD6, /* 0xAC-0xAF */ + 0x9B, 0xD7, 0x9B, 0xD8, 0x9B, 0xD9, 0x9B, 0xDA, /* 0xB0-0xB3 */ + 0x9B, 0xDB, 0x9B, 0xDC, 0x9B, 0xDD, 0x9B, 0xDE, /* 0xB4-0xB7 */ + 0x9B, 0xDF, 0x9B, 0xE0, 0x9B, 0xE1, 0x9B, 0xE2, /* 0xB8-0xBB */ + 0x9B, 0xE3, 0x9B, 0xE4, 0x9B, 0xE5, 0x9B, 0xE6, /* 0xBC-0xBF */ + 0xBD, 0xED, 0x9B, 0xE7, 0x9B, 0xE8, 0x9B, 0xE9, /* 0xC0-0xC3 */ + 0x9B, 0xEA, 0x9B, 0xEB, 0x9B, 0xEC, 0x9B, 0xED, /* 0xC4-0xC7 */ + 0x9B, 0xEE, 0x9B, 0xEF, 0x9B, 0xF0, 0x9B, 0xF1, /* 0xC8-0xCB */ + 0x9B, 0xF2, 0x9B, 0xF3, 0x9B, 0xF4, 0x9B, 0xF5, /* 0xCC-0xCF */ + 0x9B, 0xF6, 0x9B, 0xF7, 0x9B, 0xF8, 0x9B, 0xF9, /* 0xD0-0xD3 */ + 0x9B, 0xFA, 0x9B, 0xFB, 0x9B, 0xFC, 0x9B, 0xFD, /* 0xD4-0xD7 */ + 0xBD, 0xEE, 0xBD, 0xEF, 0x9B, 0xFE, 0x9C, 0x41, /* 0xD8-0xDB */ + 0xBD, 0xF0, 0x9C, 0x42, 0x9C, 0x43, 0xBD, 0xF1, /* 0xDC-0xDF */ + 0xBD, 0xF2, 0x9C, 0x44, 0xBD, 0xF3, 0x9C, 0x45, /* 0xE0-0xE3 */ + 0x9C, 0x46, 0x9C, 0x47, 0x9C, 0x48, 0x9C, 0x49, /* 0xE4-0xE7 */ + 0xBD, 0xF4, 0xBD, 0xF5, 0x9C, 0x4A, 0x9C, 0x4B, /* 0xE8-0xEB */ + 0x9C, 0x4C, 0xBD, 0xF6, 0x9C, 0x4D, 0x9C, 0x4E, /* 0xEC-0xEF */ + 0x9C, 0x4F, 0x9C, 0x50, 0x9C, 0x51, 0x9C, 0x52, /* 0xF0-0xF3 */ + 0xBD, 0xF7, 0xBD, 0xF8, 0x9C, 0x53, 0x9C, 0x54, /* 0xF4-0xF7 */ + 0xBD, 0xF9, 0x9C, 0x55, 0x9C, 0x56, 0x9C, 0x57, /* 0xF8-0xFB */ + 0x9C, 0x58, 0x9C, 0x59, 0x9C, 0x5A, 0x9C, 0x61, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C4[512] = { + 0x9C, 0x62, 0x9C, 0x63, 0x9C, 0x64, 0x9C, 0x65, /* 0x00-0x03 */ + 0x9C, 0x66, 0x9C, 0x67, 0x9C, 0x68, 0x9C, 0x69, /* 0x04-0x07 */ + 0xBD, 0xFA, 0x9C, 0x6A, 0x9C, 0x6B, 0x9C, 0x6C, /* 0x08-0x0B */ + 0x9C, 0x6D, 0x9C, 0x6E, 0x9C, 0x6F, 0x9C, 0x70, /* 0x0C-0x0F */ + 0xBD, 0xFB, 0x9C, 0x71, 0x9C, 0x72, 0x9C, 0x73, /* 0x10-0x13 */ + 0x9C, 0x74, 0x9C, 0x75, 0x9C, 0x76, 0x9C, 0x77, /* 0x14-0x17 */ + 0x9C, 0x78, 0x9C, 0x79, 0x9C, 0x7A, 0x9C, 0x81, /* 0x18-0x1B */ + 0x9C, 0x82, 0x9C, 0x83, 0x9C, 0x84, 0x9C, 0x85, /* 0x1C-0x1F */ + 0x9C, 0x86, 0x9C, 0x87, 0x9C, 0x88, 0x9C, 0x89, /* 0x20-0x23 */ + 0xBD, 0xFC, 0x9C, 0x8A, 0x9C, 0x8B, 0x9C, 0x8C, /* 0x24-0x27 */ + 0x9C, 0x8D, 0x9C, 0x8E, 0x9C, 0x8F, 0x9C, 0x90, /* 0x28-0x2B */ + 0xBD, 0xFD, 0x9C, 0x91, 0x9C, 0x92, 0x9C, 0x93, /* 0x2C-0x2F */ + 0xBD, 0xFE, 0x9C, 0x94, 0x9C, 0x95, 0x9C, 0x96, /* 0x30-0x33 */ + 0xBE, 0xA1, 0x9C, 0x97, 0x9C, 0x98, 0x9C, 0x99, /* 0x34-0x37 */ + 0x9C, 0x9A, 0x9C, 0x9B, 0x9C, 0x9C, 0x9C, 0x9D, /* 0x38-0x3B */ + 0xBE, 0xA2, 0xBE, 0xA3, 0x9C, 0x9E, 0x9C, 0x9F, /* 0x3C-0x3F */ + 0x9C, 0xA0, 0x9C, 0xA1, 0x9C, 0xA2, 0x9C, 0xA3, /* 0x40-0x43 */ + 0x9C, 0xA4, 0x9C, 0xA5, 0x9C, 0xA6, 0x9C, 0xA7, /* 0x44-0x47 */ + 0xBE, 0xA4, 0x9C, 0xA8, 0x9C, 0xA9, 0x9C, 0xAA, /* 0x48-0x4B */ + 0x9C, 0xAB, 0x9C, 0xAC, 0x9C, 0xAD, 0x9C, 0xAE, /* 0x4C-0x4F */ + 0x9C, 0xAF, 0x9C, 0xB0, 0x9C, 0xB1, 0x9C, 0xB2, /* 0x50-0x53 */ + 0x9C, 0xB3, 0x9C, 0xB4, 0x9C, 0xB5, 0x9C, 0xB6, /* 0x54-0x57 */ + 0x9C, 0xB7, 0x9C, 0xB8, 0x9C, 0xB9, 0x9C, 0xBA, /* 0x58-0x5B */ + 0x9C, 0xBB, 0x9C, 0xBC, 0x9C, 0xBD, 0x9C, 0xBE, /* 0x5C-0x5F */ + 0x9C, 0xBF, 0x9C, 0xC0, 0x9C, 0xC1, 0x9C, 0xC2, /* 0x60-0x63 */ + 0xBE, 0xA5, 0xBE, 0xA6, 0x9C, 0xC3, 0x9C, 0xC4, /* 0x64-0x67 */ + 0xBE, 0xA7, 0x9C, 0xC5, 0x9C, 0xC6, 0x9C, 0xC7, /* 0x68-0x6B */ + 0xBE, 0xA8, 0x9C, 0xC8, 0x9C, 0xC9, 0x9C, 0xCA, /* 0x6C-0x6F */ + 0x9C, 0xCB, 0x9C, 0xCC, 0x9C, 0xCD, 0x9C, 0xCE, /* 0x70-0x73 */ + 0xBE, 0xA9, 0xBE, 0xAA, 0x9C, 0xCF, 0x9C, 0xD0, /* 0x74-0x77 */ + 0x9C, 0xD1, 0xBE, 0xAB, 0x9C, 0xD2, 0x9C, 0xD3, /* 0x78-0x7B */ + 0x9C, 0xD4, 0x9C, 0xD5, 0x9C, 0xD6, 0x9C, 0xD7, /* 0x7C-0x7F */ + + 0xBE, 0xAC, 0x9C, 0xD8, 0x9C, 0xD9, 0x9C, 0xDA, /* 0x80-0x83 */ + 0x9C, 0xDB, 0x9C, 0xDC, 0x9C, 0xDD, 0x9C, 0xDE, /* 0x84-0x87 */ + 0x9C, 0xDF, 0x9C, 0xE0, 0x9C, 0xE1, 0x9C, 0xE2, /* 0x88-0x8B */ + 0x9C, 0xE3, 0x9C, 0xE4, 0x9C, 0xE5, 0x9C, 0xE6, /* 0x8C-0x8F */ + 0x9C, 0xE7, 0x9C, 0xE8, 0x9C, 0xE9, 0x9C, 0xEA, /* 0x90-0x93 */ + 0xBE, 0xAD, 0x9C, 0xEB, 0x9C, 0xEC, 0x9C, 0xED, /* 0x94-0x97 */ + 0x9C, 0xEE, 0x9C, 0xEF, 0x9C, 0xF0, 0x9C, 0xF1, /* 0x98-0x9B */ + 0xBE, 0xAE, 0x9C, 0xF2, 0x9C, 0xF3, 0x9C, 0xF4, /* 0x9C-0x9F */ + 0x9C, 0xF5, 0x9C, 0xF6, 0x9C, 0xF7, 0x9C, 0xF8, /* 0xA0-0xA3 */ + 0x9C, 0xF9, 0x9C, 0xFA, 0x9C, 0xFB, 0x9C, 0xFC, /* 0xA4-0xA7 */ + 0x9C, 0xFD, 0x9C, 0xFE, 0x9D, 0x41, 0x9D, 0x42, /* 0xA8-0xAB */ + 0x9D, 0x43, 0x9D, 0x44, 0x9D, 0x45, 0x9D, 0x46, /* 0xAC-0xAF */ + 0x9D, 0x47, 0x9D, 0x48, 0x9D, 0x49, 0x9D, 0x4A, /* 0xB0-0xB3 */ + 0x9D, 0x4B, 0x9D, 0x4C, 0x9D, 0x4D, 0x9D, 0x4E, /* 0xB4-0xB7 */ + 0xBE, 0xAF, 0x9D, 0x4F, 0x9D, 0x50, 0x9D, 0x51, /* 0xB8-0xBB */ + 0xBE, 0xB0, 0x9D, 0x52, 0x9D, 0x53, 0x9D, 0x54, /* 0xBC-0xBF */ + 0x9D, 0x55, 0x9D, 0x56, 0x9D, 0x57, 0x9D, 0x58, /* 0xC0-0xC3 */ + 0x9D, 0x59, 0x9D, 0x5A, 0x9D, 0x61, 0x9D, 0x62, /* 0xC4-0xC7 */ + 0x9D, 0x63, 0x9D, 0x64, 0x9D, 0x65, 0x9D, 0x66, /* 0xC8-0xCB */ + 0x9D, 0x67, 0x9D, 0x68, 0x9D, 0x69, 0x9D, 0x6A, /* 0xCC-0xCF */ + 0x9D, 0x6B, 0x9D, 0x6C, 0x9D, 0x6D, 0x9D, 0x6E, /* 0xD0-0xD3 */ + 0x9D, 0x6F, 0x9D, 0x70, 0x9D, 0x71, 0x9D, 0x72, /* 0xD4-0xD7 */ + 0x9D, 0x73, 0x9D, 0x74, 0x9D, 0x75, 0x9D, 0x76, /* 0xD8-0xDB */ + 0x9D, 0x77, 0x9D, 0x78, 0x9D, 0x79, 0x9D, 0x7A, /* 0xDC-0xDF */ + 0x9D, 0x81, 0x9D, 0x82, 0x9D, 0x83, 0x9D, 0x84, /* 0xE0-0xE3 */ + 0x9D, 0x85, 0x9D, 0x86, 0x9D, 0x87, 0x9D, 0x88, /* 0xE4-0xE7 */ + 0x9D, 0x89, 0xBE, 0xB1, 0x9D, 0x8A, 0x9D, 0x8B, /* 0xE8-0xEB */ + 0x9D, 0x8C, 0x9D, 0x8D, 0x9D, 0x8E, 0x9D, 0x8F, /* 0xEC-0xEF */ + 0xBE, 0xB2, 0xBE, 0xB3, 0x9D, 0x90, 0x9D, 0x91, /* 0xF0-0xF3 */ + 0xBE, 0xB4, 0x9D, 0x92, 0x9D, 0x93, 0x9D, 0x94, /* 0xF4-0xF7 */ + 0xBE, 0xB5, 0x9D, 0x95, 0xBE, 0xB6, 0x9D, 0x96, /* 0xF8-0xFB */ + 0x9D, 0x97, 0x9D, 0x98, 0x9D, 0x99, 0xBE, 0xB7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C5[512] = { + 0xBE, 0xB8, 0xBE, 0xB9, 0x9D, 0x9A, 0x9D, 0x9B, /* 0x00-0x03 */ + 0x9D, 0x9C, 0x9D, 0x9D, 0x9D, 0x9E, 0x9D, 0x9F, /* 0x04-0x07 */ + 0x9D, 0xA0, 0x9D, 0xA1, 0x9D, 0xA2, 0x9D, 0xA3, /* 0x08-0x0B */ + 0xBE, 0xBA, 0x9D, 0xA4, 0x9D, 0xA5, 0x9D, 0xA6, /* 0x0C-0x0F */ + 0xBE, 0xBB, 0x9D, 0xA7, 0x9D, 0xA8, 0x9D, 0xA9, /* 0x10-0x13 */ + 0xBE, 0xBC, 0x9D, 0xAA, 0x9D, 0xAB, 0x9D, 0xAC, /* 0x14-0x17 */ + 0x9D, 0xAD, 0x9D, 0xAE, 0x9D, 0xAF, 0x9D, 0xB0, /* 0x18-0x1B */ + 0xBE, 0xBD, 0x9D, 0xB1, 0x9D, 0xB2, 0x9D, 0xB3, /* 0x1C-0x1F */ + 0x9D, 0xB4, 0x9D, 0xB5, 0x9D, 0xB6, 0x9D, 0xB7, /* 0x20-0x23 */ + 0x9D, 0xB8, 0x9D, 0xB9, 0x9D, 0xBA, 0x9D, 0xBB, /* 0x24-0x27 */ + 0xBE, 0xBE, 0xBE, 0xBF, 0x9D, 0xBC, 0x9D, 0xBD, /* 0x28-0x2B */ + 0xBE, 0xC0, 0x9D, 0xBE, 0x9D, 0xBF, 0x9D, 0xC0, /* 0x2C-0x2F */ + 0xBE, 0xC1, 0x9D, 0xC1, 0x9D, 0xC2, 0x9D, 0xC3, /* 0x30-0x33 */ + 0x9D, 0xC4, 0x9D, 0xC5, 0x9D, 0xC6, 0x9D, 0xC7, /* 0x34-0x37 */ + 0xBE, 0xC2, 0xBE, 0xC3, 0x9D, 0xC8, 0xBE, 0xC4, /* 0x38-0x3B */ + 0x9D, 0xC9, 0xBE, 0xC5, 0x9D, 0xCA, 0x9D, 0xCB, /* 0x3C-0x3F */ + 0x9D, 0xCC, 0x9D, 0xCD, 0x9D, 0xCE, 0x9D, 0xCF, /* 0x40-0x43 */ + 0xBE, 0xC6, 0xBE, 0xC7, 0x9D, 0xD0, 0x9D, 0xD1, /* 0x44-0x47 */ + 0xBE, 0xC8, 0xBE, 0xC9, 0xBE, 0xCA, 0x9D, 0xD2, /* 0x48-0x4B */ + 0xBE, 0xCB, 0xBE, 0xCC, 0xBE, 0xCD, 0x9D, 0xD3, /* 0x4C-0x4F */ + 0x9D, 0xD4, 0x9D, 0xD5, 0x9D, 0xD6, 0xBE, 0xCE, /* 0x50-0x53 */ + 0xBE, 0xCF, 0xBE, 0xD0, 0x9D, 0xD7, 0xBE, 0xD1, /* 0x54-0x57 */ + 0xBE, 0xD2, 0xBE, 0xD3, 0x9D, 0xD8, 0x9D, 0xD9, /* 0x58-0x5B */ + 0x9D, 0xDA, 0xBE, 0xD4, 0xBE, 0xD5, 0x9D, 0xDB, /* 0x5C-0x5F */ + 0xBE, 0xD6, 0xBE, 0xD7, 0x9D, 0xDC, 0x9D, 0xDD, /* 0x60-0x63 */ + 0xBE, 0xD8, 0x9D, 0xDE, 0x9D, 0xDF, 0x9D, 0xE0, /* 0x64-0x67 */ + 0xBE, 0xD9, 0x9D, 0xE1, 0x9D, 0xE2, 0x9D, 0xE3, /* 0x68-0x6B */ + 0x9D, 0xE4, 0x9D, 0xE5, 0x9D, 0xE6, 0x9D, 0xE7, /* 0x6C-0x6F */ + 0xBE, 0xDA, 0xBE, 0xDB, 0x9D, 0xE8, 0xBE, 0xDC, /* 0x70-0x73 */ + 0xBE, 0xDD, 0xBE, 0xDE, 0x9D, 0xE9, 0x9D, 0xEA, /* 0x74-0x77 */ + 0x9D, 0xEB, 0x9D, 0xEC, 0x9D, 0xED, 0x9D, 0xEE, /* 0x78-0x7B */ + 0xBE, 0xDF, 0xBE, 0xE0, 0x9D, 0xEF, 0x9D, 0xF0, /* 0x7C-0x7F */ + + 0xBE, 0xE1, 0x9D, 0xF1, 0x9D, 0xF2, 0x9D, 0xF3, /* 0x80-0x83 */ + 0xBE, 0xE2, 0x9D, 0xF4, 0x9D, 0xF5, 0xBE, 0xE3, /* 0x84-0x87 */ + 0x9D, 0xF6, 0x9D, 0xF7, 0x9D, 0xF8, 0x9D, 0xF9, /* 0x88-0x8B */ + 0xBE, 0xE4, 0xBE, 0xE5, 0x9D, 0xFA, 0xBE, 0xE6, /* 0x8C-0x8F */ + 0x9D, 0xFB, 0xBE, 0xE7, 0x9D, 0xFC, 0x9D, 0xFD, /* 0x90-0x93 */ + 0x9D, 0xFE, 0xBE, 0xE8, 0x9E, 0x41, 0xBE, 0xE9, /* 0x94-0x97 */ + 0xBE, 0xEA, 0x9E, 0x42, 0x9E, 0x43, 0x9E, 0x44, /* 0x98-0x9B */ + 0xBE, 0xEB, 0x9E, 0x45, 0x9E, 0x46, 0x9E, 0x47, /* 0x9C-0x9F */ + 0xBE, 0xEC, 0x9E, 0x48, 0x9E, 0x49, 0x9E, 0x4A, /* 0xA0-0xA3 */ + 0x9E, 0x4B, 0x9E, 0x4C, 0x9E, 0x4D, 0x9E, 0x4E, /* 0xA4-0xA7 */ + 0x9E, 0x4F, 0xBE, 0xED, 0x9E, 0x50, 0x9E, 0x51, /* 0xA8-0xAB */ + 0x9E, 0x52, 0x9E, 0x53, 0x9E, 0x54, 0x9E, 0x55, /* 0xAC-0xAF */ + 0x9E, 0x56, 0x9E, 0x57, 0x9E, 0x58, 0x9E, 0x59, /* 0xB0-0xB3 */ + 0xBE, 0xEE, 0xBE, 0xEF, 0x9E, 0x5A, 0x9E, 0x61, /* 0xB4-0xB7 */ + 0xBE, 0xF0, 0xBE, 0xF1, 0x9E, 0x62, 0xBE, 0xF2, /* 0xB8-0xBB */ + 0xBE, 0xF3, 0xBE, 0xF4, 0xBE, 0xF5, 0x9E, 0x63, /* 0xBC-0xBF */ + 0x9E, 0x64, 0x9E, 0x65, 0x9E, 0x66, 0x9E, 0x67, /* 0xC0-0xC3 */ + 0xBE, 0xF6, 0xBE, 0xF7, 0xBE, 0xF8, 0xBE, 0xF9, /* 0xC4-0xC7 */ + 0xBE, 0xFA, 0xBE, 0xFB, 0xBE, 0xFC, 0x9E, 0x68, /* 0xC8-0xCB */ + 0xBE, 0xFD, 0x9E, 0x69, 0xBE, 0xFE, 0x9E, 0x6A, /* 0xCC-0xCF */ + 0xBF, 0xA1, 0xBF, 0xA2, 0x9E, 0x6B, 0x9E, 0x6C, /* 0xD0-0xD3 */ + 0xBF, 0xA3, 0x9E, 0x6D, 0x9E, 0x6E, 0x9E, 0x6F, /* 0xD4-0xD7 */ + 0xBF, 0xA4, 0x9E, 0x70, 0x9E, 0x71, 0x9E, 0x72, /* 0xD8-0xDB */ + 0x9E, 0x73, 0x9E, 0x74, 0x9E, 0x75, 0x9E, 0x76, /* 0xDC-0xDF */ + 0xBF, 0xA5, 0xBF, 0xA6, 0x9E, 0x77, 0xBF, 0xA7, /* 0xE0-0xE3 */ + 0x9E, 0x78, 0xBF, 0xA8, 0x9E, 0x79, 0x9E, 0x7A, /* 0xE4-0xE7 */ + 0x9E, 0x81, 0x9E, 0x82, 0x9E, 0x83, 0x9E, 0x84, /* 0xE8-0xEB */ + 0xBF, 0xA9, 0xBF, 0xAA, 0xBF, 0xAB, 0x9E, 0x85, /* 0xEC-0xEF */ + 0xBF, 0xAC, 0x9E, 0x86, 0x9E, 0x87, 0x9E, 0x88, /* 0xF0-0xF3 */ + 0xBF, 0xAD, 0x9E, 0x89, 0xBF, 0xAE, 0xBF, 0xAF, /* 0xF4-0xF7 */ + 0x9E, 0x8A, 0x9E, 0x8B, 0x9E, 0x8C, 0x9E, 0x8D, /* 0xF8-0xFB */ + 0xBF, 0xB0, 0xBF, 0xB1, 0xBF, 0xB2, 0xBF, 0xB3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C6[512] = { + 0xBF, 0xB4, 0xBF, 0xB5, 0x9E, 0x8E, 0x9E, 0x8F, /* 0x00-0x03 */ + 0x9E, 0x90, 0xBF, 0xB6, 0xBF, 0xB7, 0xBF, 0xB8, /* 0x04-0x07 */ + 0xBF, 0xB9, 0x9E, 0x91, 0x9E, 0x92, 0x9E, 0x93, /* 0x08-0x0B */ + 0xBF, 0xBA, 0x9E, 0x94, 0x9E, 0x95, 0x9E, 0x96, /* 0x0C-0x0F */ + 0xBF, 0xBB, 0x9E, 0x97, 0x9E, 0x98, 0x9E, 0x99, /* 0x10-0x13 */ + 0x9E, 0x9A, 0x9E, 0x9B, 0x9E, 0x9C, 0x9E, 0x9D, /* 0x14-0x17 */ + 0xBF, 0xBC, 0xBF, 0xBD, 0x9E, 0x9E, 0xBF, 0xBE, /* 0x18-0x1B */ + 0xBF, 0xBF, 0x9E, 0x9F, 0x9E, 0xA0, 0x9E, 0xA1, /* 0x1C-0x1F */ + 0x9E, 0xA2, 0x9E, 0xA3, 0x9E, 0xA4, 0x9E, 0xA5, /* 0x20-0x23 */ + 0xBF, 0xC0, 0xBF, 0xC1, 0x9E, 0xA6, 0x9E, 0xA7, /* 0x24-0x27 */ + 0xBF, 0xC2, 0x9E, 0xA8, 0x9E, 0xA9, 0x9E, 0xAA, /* 0x28-0x2B */ + 0xBF, 0xC3, 0xBF, 0xC4, 0xBF, 0xC5, 0x9E, 0xAB, /* 0x2C-0x2F */ + 0xBF, 0xC6, 0x9E, 0xAC, 0x9E, 0xAD, 0xBF, 0xC7, /* 0x30-0x33 */ + 0xBF, 0xC8, 0xBF, 0xC9, 0x9E, 0xAE, 0xBF, 0xCA, /* 0x34-0x37 */ + 0x9E, 0xAF, 0xBF, 0xCB, 0x9E, 0xB0, 0xBF, 0xCC, /* 0x38-0x3B */ + 0x9E, 0xB1, 0x9E, 0xB2, 0x9E, 0xB3, 0x9E, 0xB4, /* 0x3C-0x3F */ + 0xBF, 0xCD, 0xBF, 0xCE, 0x9E, 0xB5, 0x9E, 0xB6, /* 0x40-0x43 */ + 0xBF, 0xCF, 0x9E, 0xB7, 0x9E, 0xB8, 0x9E, 0xB9, /* 0x44-0x47 */ + 0xBF, 0xD0, 0x9E, 0xBA, 0x9E, 0xBB, 0x9E, 0xBC, /* 0x48-0x4B */ + 0x9E, 0xBD, 0x9E, 0xBE, 0x9E, 0xBF, 0x9E, 0xC0, /* 0x4C-0x4F */ + 0xBF, 0xD1, 0xBF, 0xD2, 0x9E, 0xC1, 0xBF, 0xD3, /* 0x50-0x53 */ + 0xBF, 0xD4, 0xBF, 0xD5, 0x9E, 0xC2, 0x9E, 0xC3, /* 0x54-0x57 */ + 0x9E, 0xC4, 0x9E, 0xC5, 0x9E, 0xC6, 0x9E, 0xC7, /* 0x58-0x5B */ + 0xBF, 0xD6, 0xBF, 0xD7, 0x9E, 0xC8, 0x9E, 0xC9, /* 0x5C-0x5F */ + 0xBF, 0xD8, 0x9E, 0xCA, 0x9E, 0xCB, 0x9E, 0xCC, /* 0x60-0x63 */ + 0x9E, 0xCD, 0x9E, 0xCE, 0x9E, 0xCF, 0x9E, 0xD0, /* 0x64-0x67 */ + 0x9E, 0xD1, 0x9E, 0xD2, 0x9E, 0xD3, 0x9E, 0xD4, /* 0x68-0x6B */ + 0xBF, 0xD9, 0x9E, 0xD5, 0x9E, 0xD6, 0xBF, 0xDA, /* 0x6C-0x6F */ + 0x9E, 0xD7, 0xBF, 0xDB, 0x9E, 0xD8, 0x9E, 0xD9, /* 0x70-0x73 */ + 0x9E, 0xDA, 0x9E, 0xDB, 0x9E, 0xDC, 0x9E, 0xDD, /* 0x74-0x77 */ + 0xBF, 0xDC, 0xBF, 0xDD, 0x9E, 0xDE, 0x9E, 0xDF, /* 0x78-0x7B */ + 0xBF, 0xDE, 0x9E, 0xE0, 0x9E, 0xE1, 0x9E, 0xE2, /* 0x7C-0x7F */ + + 0xBF, 0xDF, 0x9E, 0xE3, 0x9E, 0xE4, 0x9E, 0xE5, /* 0x80-0x83 */ + 0x9E, 0xE6, 0x9E, 0xE7, 0x9E, 0xE8, 0x9E, 0xE9, /* 0x84-0x87 */ + 0xBF, 0xE0, 0xBF, 0xE1, 0x9E, 0xEA, 0xBF, 0xE2, /* 0x88-0x8B */ + 0x9E, 0xEB, 0xBF, 0xE3, 0x9E, 0xEC, 0x9E, 0xED, /* 0x8C-0x8F */ + 0x9E, 0xEE, 0x9E, 0xEF, 0x9E, 0xF0, 0x9E, 0xF1, /* 0x90-0x93 */ + 0xBF, 0xE4, 0xBF, 0xE5, 0x9E, 0xF2, 0x9E, 0xF3, /* 0x94-0x97 */ + 0xBF, 0xE6, 0x9E, 0xF4, 0x9E, 0xF5, 0x9E, 0xF6, /* 0x98-0x9B */ + 0xBF, 0xE7, 0x9E, 0xF7, 0x9E, 0xF8, 0x9E, 0xF9, /* 0x9C-0x9F */ + 0x9E, 0xFA, 0x9E, 0xFB, 0x9E, 0xFC, 0x9E, 0xFD, /* 0xA0-0xA3 */ + 0xBF, 0xE8, 0xBF, 0xE9, 0x9E, 0xFE, 0xBF, 0xEA, /* 0xA4-0xA7 */ + 0x9F, 0x41, 0xBF, 0xEB, 0x9F, 0x42, 0x9F, 0x43, /* 0xA8-0xAB */ + 0x9F, 0x44, 0x9F, 0x45, 0x9F, 0x46, 0x9F, 0x47, /* 0xAC-0xAF */ + 0xBF, 0xEC, 0xBF, 0xED, 0x9F, 0x48, 0x9F, 0x49, /* 0xB0-0xB3 */ + 0xBF, 0xEE, 0x9F, 0x4A, 0x9F, 0x4B, 0x9F, 0x4C, /* 0xB4-0xB7 */ + 0xBF, 0xEF, 0xBF, 0xF0, 0xBF, 0xF1, 0x9F, 0x4D, /* 0xB8-0xBB */ + 0x9F, 0x4E, 0x9F, 0x4F, 0x9F, 0x50, 0x9F, 0x51, /* 0xBC-0xBF */ + 0xBF, 0xF2, 0xBF, 0xF3, 0x9F, 0x52, 0xBF, 0xF4, /* 0xC0-0xC3 */ + 0x9F, 0x53, 0xBF, 0xF5, 0x9F, 0x54, 0x9F, 0x55, /* 0xC4-0xC7 */ + 0x9F, 0x56, 0x9F, 0x57, 0x9F, 0x58, 0x9F, 0x59, /* 0xC8-0xCB */ + 0xBF, 0xF6, 0xBF, 0xF7, 0x9F, 0x5A, 0x9F, 0x61, /* 0xCC-0xCF */ + 0xBF, 0xF8, 0x9F, 0x62, 0x9F, 0x63, 0x9F, 0x64, /* 0xD0-0xD3 */ + 0xBF, 0xF9, 0x9F, 0x65, 0x9F, 0x66, 0x9F, 0x67, /* 0xD4-0xD7 */ + 0x9F, 0x68, 0x9F, 0x69, 0x9F, 0x6A, 0x9F, 0x6B, /* 0xD8-0xDB */ + 0xBF, 0xFA, 0xBF, 0xFB, 0x9F, 0x6C, 0x9F, 0x6D, /* 0xDC-0xDF */ + 0xBF, 0xFC, 0xBF, 0xFD, 0x9F, 0x6E, 0x9F, 0x6F, /* 0xE0-0xE3 */ + 0x9F, 0x70, 0x9F, 0x71, 0x9F, 0x72, 0x9F, 0x73, /* 0xE4-0xE7 */ + 0xBF, 0xFE, 0xC0, 0xA1, 0x9F, 0x74, 0x9F, 0x75, /* 0xE8-0xEB */ + 0xC0, 0xA2, 0x9F, 0x76, 0x9F, 0x77, 0x9F, 0x78, /* 0xEC-0xEF */ + 0xC0, 0xA3, 0x9F, 0x79, 0x9F, 0x7A, 0x9F, 0x81, /* 0xF0-0xF3 */ + 0x9F, 0x82, 0x9F, 0x83, 0x9F, 0x84, 0x9F, 0x85, /* 0xF4-0xF7 */ + 0xC0, 0xA4, 0xC0, 0xA5, 0x9F, 0x86, 0x9F, 0x87, /* 0xF8-0xFB */ + 0x9F, 0x88, 0xC0, 0xA6, 0x9F, 0x89, 0x9F, 0x8A, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C7[512] = { + 0x9F, 0x8B, 0x9F, 0x8C, 0x9F, 0x8D, 0x9F, 0x8E, /* 0x00-0x03 */ + 0xC0, 0xA7, 0xC0, 0xA8, 0x9F, 0x8F, 0x9F, 0x90, /* 0x04-0x07 */ + 0xC0, 0xA9, 0x9F, 0x91, 0x9F, 0x92, 0x9F, 0x93, /* 0x08-0x0B */ + 0xC0, 0xAA, 0x9F, 0x94, 0x9F, 0x95, 0x9F, 0x96, /* 0x0C-0x0F */ + 0x9F, 0x97, 0x9F, 0x98, 0x9F, 0x99, 0x9F, 0x9A, /* 0x10-0x13 */ + 0xC0, 0xAB, 0xC0, 0xAC, 0x9F, 0x9B, 0xC0, 0xAD, /* 0x14-0x17 */ + 0x9F, 0x9C, 0xC0, 0xAE, 0x9F, 0x9D, 0x9F, 0x9E, /* 0x18-0x1B */ + 0x9F, 0x9F, 0x9F, 0xA0, 0x9F, 0xA1, 0x9F, 0xA2, /* 0x1C-0x1F */ + 0xC0, 0xAF, 0xC0, 0xB0, 0x9F, 0xA3, 0x9F, 0xA4, /* 0x20-0x23 */ + 0xC0, 0xB1, 0x9F, 0xA5, 0x9F, 0xA6, 0x9F, 0xA7, /* 0x24-0x27 */ + 0xC0, 0xB2, 0x9F, 0xA8, 0x9F, 0xA9, 0x9F, 0xAA, /* 0x28-0x2B */ + 0x9F, 0xAB, 0x9F, 0xAC, 0x9F, 0xAD, 0x9F, 0xAE, /* 0x2C-0x2F */ + 0xC0, 0xB3, 0xC0, 0xB4, 0x9F, 0xAF, 0xC0, 0xB5, /* 0x30-0x33 */ + 0x9F, 0xB0, 0xC0, 0xB6, 0x9F, 0xB1, 0xC0, 0xB7, /* 0x34-0x37 */ + 0x9F, 0xB2, 0x9F, 0xB3, 0x9F, 0xB4, 0x9F, 0xB5, /* 0x38-0x3B */ + 0xC0, 0xB8, 0xC0, 0xB9, 0x9F, 0xB6, 0x9F, 0xB7, /* 0x3C-0x3F */ + 0xC0, 0xBA, 0x9F, 0xB8, 0x9F, 0xB9, 0x9F, 0xBA, /* 0x40-0x43 */ + 0xC0, 0xBB, 0x9F, 0xBB, 0x9F, 0xBC, 0x9F, 0xBD, /* 0x44-0x47 */ + 0x9F, 0xBE, 0x9F, 0xBF, 0xC0, 0xBC, 0x9F, 0xC0, /* 0x48-0x4B */ + 0xC0, 0xBD, 0xC0, 0xBE, 0x9F, 0xC1, 0xC0, 0xBF, /* 0x4C-0x4F */ + 0x9F, 0xC2, 0xC0, 0xC0, 0xC0, 0xC1, 0xC0, 0xC2, /* 0x50-0x53 */ + 0xC0, 0xC3, 0xC0, 0xC4, 0xC0, 0xC5, 0xC0, 0xC6, /* 0x54-0x57 */ + 0xC0, 0xC7, 0x9F, 0xC3, 0x9F, 0xC4, 0x9F, 0xC5, /* 0x58-0x5B */ + 0xC0, 0xC8, 0x9F, 0xC6, 0x9F, 0xC7, 0x9F, 0xC8, /* 0x5C-0x5F */ + 0xC0, 0xC9, 0x9F, 0xC9, 0x9F, 0xCA, 0x9F, 0xCB, /* 0x60-0x63 */ + 0x9F, 0xCC, 0x9F, 0xCD, 0x9F, 0xCE, 0x9F, 0xCF, /* 0x64-0x67 */ + 0xC0, 0xCA, 0x9F, 0xD0, 0x9F, 0xD1, 0xC0, 0xCB, /* 0x68-0x6B */ + 0x9F, 0xD2, 0x9F, 0xD3, 0x9F, 0xD4, 0x9F, 0xD5, /* 0x6C-0x6F */ + 0x9F, 0xD6, 0x9F, 0xD7, 0x9F, 0xD8, 0x9F, 0xD9, /* 0x70-0x73 */ + 0xC0, 0xCC, 0xC0, 0xCD, 0x9F, 0xDA, 0x9F, 0xDB, /* 0x74-0x77 */ + 0xC0, 0xCE, 0x9F, 0xDC, 0x9F, 0xDD, 0x9F, 0xDE, /* 0x78-0x7B */ + 0xC0, 0xCF, 0xC0, 0xD0, 0xC0, 0xD1, 0x9F, 0xDF, /* 0x7C-0x7F */ + + 0x9F, 0xE0, 0x9F, 0xE1, 0x9F, 0xE2, 0xC0, 0xD2, /* 0x80-0x83 */ + 0xC0, 0xD3, 0xC0, 0xD4, 0x9F, 0xE3, 0xC0, 0xD5, /* 0x84-0x87 */ + 0xC0, 0xD6, 0xC0, 0xD7, 0xC0, 0xD8, 0x9F, 0xE4, /* 0x88-0x8B */ + 0x9F, 0xE5, 0x9F, 0xE6, 0xC0, 0xD9, 0x9F, 0xE7, /* 0x8C-0x8F */ + 0xC0, 0xDA, 0xC0, 0xDB, 0x9F, 0xE8, 0x9F, 0xE9, /* 0x90-0x93 */ + 0xC0, 0xDC, 0x9F, 0xEA, 0xC0, 0xDD, 0xC0, 0xDE, /* 0x94-0x97 */ + 0xC0, 0xDF, 0x9F, 0xEB, 0xC0, 0xE0, 0x9F, 0xEC, /* 0x98-0x9B */ + 0x9F, 0xED, 0x9F, 0xEE, 0x9F, 0xEF, 0x9F, 0xF0, /* 0x9C-0x9F */ + 0xC0, 0xE1, 0xC0, 0xE2, 0x9F, 0xF1, 0xC0, 0xE3, /* 0xA0-0xA3 */ + 0xC0, 0xE4, 0xC0, 0xE5, 0xC0, 0xE6, 0x9F, 0xF2, /* 0xA4-0xA7 */ + 0x9F, 0xF3, 0x9F, 0xF4, 0x9F, 0xF5, 0x9F, 0xF6, /* 0xA8-0xAB */ + 0xC0, 0xE7, 0xC0, 0xE8, 0x9F, 0xF7, 0x9F, 0xF8, /* 0xAC-0xAF */ + 0xC0, 0xE9, 0x9F, 0xF9, 0x9F, 0xFA, 0x9F, 0xFB, /* 0xB0-0xB3 */ + 0xC0, 0xEA, 0x9F, 0xFC, 0x9F, 0xFD, 0x9F, 0xFE, /* 0xB4-0xB7 */ + 0xA0, 0x41, 0xA0, 0x42, 0xA0, 0x43, 0xA0, 0x44, /* 0xB8-0xBB */ + 0xC0, 0xEB, 0xC0, 0xEC, 0xA0, 0x45, 0xC0, 0xED, /* 0xBC-0xBF */ + 0xC0, 0xEE, 0xC0, 0xEF, 0xA0, 0x46, 0xA0, 0x47, /* 0xC0-0xC3 */ + 0xA0, 0x48, 0xA0, 0x49, 0xA0, 0x4A, 0xA0, 0x4B, /* 0xC4-0xC7 */ + 0xC0, 0xF0, 0xC0, 0xF1, 0xA0, 0x4C, 0xA0, 0x4D, /* 0xC8-0xCB */ + 0xC0, 0xF2, 0xA0, 0x4E, 0xC0, 0xF3, 0xA0, 0x4F, /* 0xCC-0xCF */ + 0xC0, 0xF4, 0xA0, 0x50, 0xA0, 0x51, 0xA0, 0x52, /* 0xD0-0xD3 */ + 0xA0, 0x53, 0xA0, 0x54, 0xA0, 0x55, 0xA0, 0x56, /* 0xD4-0xD7 */ + 0xC0, 0xF5, 0xA0, 0x57, 0xA0, 0x58, 0xA0, 0x59, /* 0xD8-0xDB */ + 0xA0, 0x5A, 0xC0, 0xF6, 0xA0, 0x61, 0xA0, 0x62, /* 0xDC-0xDF */ + 0xA0, 0x63, 0xA0, 0x64, 0xA0, 0x65, 0xA0, 0x66, /* 0xE0-0xE3 */ + 0xC0, 0xF7, 0xA0, 0x67, 0xA0, 0x68, 0xA0, 0x69, /* 0xE4-0xE7 */ + 0xC0, 0xF8, 0xA0, 0x6A, 0xA0, 0x6B, 0xA0, 0x6C, /* 0xE8-0xEB */ + 0xC0, 0xF9, 0xA0, 0x6D, 0xA0, 0x6E, 0xA0, 0x6F, /* 0xEC-0xEF */ + 0xA0, 0x70, 0xA0, 0x71, 0xA0, 0x72, 0xA0, 0x73, /* 0xF0-0xF3 */ + 0xA0, 0x74, 0xA0, 0x75, 0xA0, 0x76, 0xA0, 0x77, /* 0xF4-0xF7 */ + 0xA0, 0x78, 0xA0, 0x79, 0xA0, 0x7A, 0xA0, 0x81, /* 0xF8-0xFB */ + 0xA0, 0x82, 0xA0, 0x83, 0xA0, 0x84, 0xA0, 0x85, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C8[512] = { + 0xC0, 0xFA, 0xC0, 0xFB, 0xA0, 0x86, 0xA0, 0x87, /* 0x00-0x03 */ + 0xC0, 0xFC, 0xA0, 0x88, 0xA0, 0x89, 0xA0, 0x8A, /* 0x04-0x07 */ + 0xC0, 0xFD, 0xA0, 0x8B, 0xC0, 0xFE, 0xA0, 0x8C, /* 0x08-0x0B */ + 0xA0, 0x8D, 0xA0, 0x8E, 0xA0, 0x8F, 0xA0, 0x90, /* 0x0C-0x0F */ + 0xC1, 0xA1, 0xC1, 0xA2, 0xA0, 0x91, 0xC1, 0xA3, /* 0x10-0x13 */ + 0xA0, 0x92, 0xC1, 0xA4, 0xC1, 0xA5, 0xA0, 0x93, /* 0x14-0x17 */ + 0xA0, 0x94, 0xA0, 0x95, 0xA0, 0x96, 0xA0, 0x97, /* 0x18-0x1B */ + 0xC1, 0xA6, 0xC1, 0xA7, 0xA0, 0x98, 0xA0, 0x99, /* 0x1C-0x1F */ + 0xC1, 0xA8, 0xA0, 0x9A, 0xA0, 0x9B, 0xA0, 0x9C, /* 0x20-0x23 */ + 0xC1, 0xA9, 0xA0, 0x9D, 0xA0, 0x9E, 0xA0, 0x9F, /* 0x24-0x27 */ + 0xA0, 0xA0, 0xA0, 0xA1, 0xA0, 0xA2, 0xA0, 0xA3, /* 0x28-0x2B */ + 0xC1, 0xAA, 0xC1, 0xAB, 0xA0, 0xA4, 0xC1, 0xAC, /* 0x2C-0x2F */ + 0xA0, 0xA5, 0xC1, 0xAD, 0xA0, 0xA6, 0xA0, 0xA7, /* 0x30-0x33 */ + 0xA0, 0xA8, 0xA0, 0xA9, 0xA0, 0xAA, 0xA0, 0xAB, /* 0x34-0x37 */ + 0xC1, 0xAE, 0xA0, 0xAC, 0xA0, 0xAD, 0xA0, 0xAE, /* 0x38-0x3B */ + 0xC1, 0xAF, 0xA0, 0xAF, 0xA0, 0xB0, 0xA0, 0xB1, /* 0x3C-0x3F */ + 0xC1, 0xB0, 0xA0, 0xB2, 0xA0, 0xB3, 0xA0, 0xB4, /* 0x40-0x43 */ + 0xA0, 0xB5, 0xA0, 0xB6, 0xA0, 0xB7, 0xA0, 0xB8, /* 0x44-0x47 */ + 0xC1, 0xB1, 0xC1, 0xB2, 0xA0, 0xB9, 0xA0, 0xBA, /* 0x48-0x4B */ + 0xC1, 0xB3, 0xC1, 0xB4, 0xA0, 0xBB, 0xA0, 0xBC, /* 0x4C-0x4F */ + 0xA0, 0xBD, 0xA0, 0xBE, 0xA0, 0xBF, 0xA0, 0xC0, /* 0x50-0x53 */ + 0xC1, 0xB5, 0xA0, 0xC1, 0xA0, 0xC2, 0xA0, 0xC3, /* 0x54-0x57 */ + 0xA0, 0xC4, 0xA0, 0xC5, 0xA0, 0xC6, 0xA0, 0xC7, /* 0x58-0x5B */ + 0xA0, 0xC8, 0xA0, 0xC9, 0xA0, 0xCA, 0xA0, 0xCB, /* 0x5C-0x5F */ + 0xA0, 0xCC, 0xA0, 0xCD, 0xA0, 0xCE, 0xA0, 0xCF, /* 0x60-0x63 */ + 0xA0, 0xD0, 0xA0, 0xD1, 0xA0, 0xD2, 0xA0, 0xD3, /* 0x64-0x67 */ + 0xA0, 0xD4, 0xA0, 0xD5, 0xA0, 0xD6, 0xA0, 0xD7, /* 0x68-0x6B */ + 0xA0, 0xD8, 0xA0, 0xD9, 0xA0, 0xDA, 0xA0, 0xDB, /* 0x6C-0x6F */ + 0xC1, 0xB6, 0xC1, 0xB7, 0xA0, 0xDC, 0xA0, 0xDD, /* 0x70-0x73 */ + 0xC1, 0xB8, 0xA0, 0xDE, 0xA0, 0xDF, 0xA0, 0xE0, /* 0x74-0x77 */ + 0xC1, 0xB9, 0xA0, 0xE1, 0xC1, 0xBA, 0xA0, 0xE2, /* 0x78-0x7B */ + 0xA0, 0xE3, 0xA0, 0xE4, 0xA0, 0xE5, 0xA0, 0xE6, /* 0x7C-0x7F */ + + 0xC1, 0xBB, 0xC1, 0xBC, 0xA0, 0xE7, 0xC1, 0xBD, /* 0x80-0x83 */ + 0xA0, 0xE8, 0xC1, 0xBE, 0xC1, 0xBF, 0xC1, 0xC0, /* 0x84-0x87 */ + 0xA0, 0xE9, 0xA0, 0xEA, 0xA0, 0xEB, 0xC1, 0xC1, /* 0x88-0x8B */ + 0xC1, 0xC2, 0xC1, 0xC3, 0xA0, 0xEC, 0xA0, 0xED, /* 0x8C-0x8F */ + 0xA0, 0xEE, 0xA0, 0xEF, 0xA0, 0xF0, 0xA0, 0xF1, /* 0x90-0x93 */ + 0xC1, 0xC4, 0xA0, 0xF2, 0xA0, 0xF3, 0xA0, 0xF4, /* 0x94-0x97 */ + 0xA0, 0xF5, 0xA0, 0xF6, 0xA0, 0xF7, 0xA0, 0xF8, /* 0x98-0x9B */ + 0xA0, 0xF9, 0xC1, 0xC5, 0xA0, 0xFA, 0xC1, 0xC6, /* 0x9C-0x9F */ + 0xA0, 0xFB, 0xC1, 0xC7, 0xA0, 0xFC, 0xA0, 0xFD, /* 0xA0-0xA3 */ + 0xA0, 0xFE, 0xA1, 0x41, 0xA1, 0x42, 0xA1, 0x43, /* 0xA4-0xA7 */ + 0xC1, 0xC8, 0xA1, 0x44, 0xA1, 0x45, 0xA1, 0x46, /* 0xA8-0xAB */ + 0xA1, 0x47, 0xA1, 0x48, 0xA1, 0x49, 0xA1, 0x4A, /* 0xAC-0xAF */ + 0xA1, 0x4B, 0xA1, 0x4C, 0xA1, 0x4D, 0xA1, 0x4E, /* 0xB0-0xB3 */ + 0xA1, 0x4F, 0xA1, 0x50, 0xA1, 0x51, 0xA1, 0x52, /* 0xB4-0xB7 */ + 0xA1, 0x53, 0xA1, 0x54, 0xA1, 0x55, 0xA1, 0x56, /* 0xB8-0xBB */ + 0xC1, 0xC9, 0xC1, 0xCA, 0xA1, 0x57, 0xA1, 0x58, /* 0xBC-0xBF */ + 0xA1, 0x59, 0xA1, 0x5A, 0xA1, 0x61, 0xA1, 0x62, /* 0xC0-0xC3 */ + 0xC1, 0xCB, 0xA1, 0x63, 0xA1, 0x64, 0xA1, 0x65, /* 0xC4-0xC7 */ + 0xC1, 0xCC, 0xA1, 0x66, 0xA1, 0x67, 0xA1, 0x68, /* 0xC8-0xCB */ + 0xC1, 0xCD, 0xA1, 0x69, 0xA1, 0x6A, 0xA1, 0x6B, /* 0xCC-0xCF */ + 0xA1, 0x6C, 0xA1, 0x6D, 0xA1, 0x6E, 0xA1, 0x6F, /* 0xD0-0xD3 */ + 0xC1, 0xCE, 0xC1, 0xCF, 0xA1, 0x70, 0xC1, 0xD0, /* 0xD4-0xD7 */ + 0xA1, 0x71, 0xC1, 0xD1, 0xA1, 0x72, 0xA1, 0x73, /* 0xD8-0xDB */ + 0xA1, 0x74, 0xA1, 0x75, 0xA1, 0x76, 0xA1, 0x77, /* 0xDC-0xDF */ + 0xC1, 0xD2, 0xC1, 0xD3, 0xA1, 0x78, 0xA1, 0x79, /* 0xE0-0xE3 */ + 0xC1, 0xD4, 0xA1, 0x7A, 0xA1, 0x81, 0xA1, 0x82, /* 0xE4-0xE7 */ + 0xA1, 0x83, 0xA1, 0x84, 0xA1, 0x85, 0xA1, 0x86, /* 0xE8-0xEB */ + 0xA1, 0x87, 0xA1, 0x88, 0xA1, 0x89, 0xA1, 0x8A, /* 0xEC-0xEF */ + 0xA1, 0x8B, 0xA1, 0x8C, 0xA1, 0x8D, 0xA1, 0x8E, /* 0xF0-0xF3 */ + 0xA1, 0x8F, 0xC1, 0xD5, 0xA1, 0x90, 0xA1, 0x91, /* 0xF4-0xF7 */ + 0xA1, 0x92, 0xA1, 0x93, 0xA1, 0x94, 0xA1, 0x95, /* 0xF8-0xFB */ + 0xC1, 0xD6, 0xC1, 0xD7, 0xA1, 0x96, 0xA1, 0x97, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_C9[512] = { + 0xC1, 0xD8, 0xA1, 0x98, 0xA1, 0x99, 0xA1, 0x9A, /* 0x00-0x03 */ + 0xC1, 0xD9, 0xC1, 0xDA, 0xC1, 0xDB, 0xA1, 0x9B, /* 0x04-0x07 */ + 0xA1, 0x9C, 0xA1, 0x9D, 0xA1, 0x9E, 0xA1, 0x9F, /* 0x08-0x0B */ + 0xC1, 0xDC, 0xC1, 0xDD, 0xA1, 0xA0, 0xC1, 0xDE, /* 0x0C-0x0F */ + 0xA2, 0x41, 0xC1, 0xDF, 0xA2, 0x42, 0xA2, 0x43, /* 0x10-0x13 */ + 0xA2, 0x44, 0xA2, 0x45, 0xA2, 0x46, 0xA2, 0x47, /* 0x14-0x17 */ + 0xC1, 0xE0, 0xA2, 0x48, 0xA2, 0x49, 0xA2, 0x4A, /* 0x18-0x1B */ + 0xA2, 0x4B, 0xA2, 0x4C, 0xA2, 0x4D, 0xA2, 0x4E, /* 0x1C-0x1F */ + 0xA2, 0x4F, 0xA2, 0x50, 0xA2, 0x51, 0xA2, 0x52, /* 0x20-0x23 */ + 0xA2, 0x53, 0xA2, 0x54, 0xA2, 0x55, 0xA2, 0x56, /* 0x24-0x27 */ + 0xA2, 0x57, 0xA2, 0x58, 0xA2, 0x59, 0xA2, 0x5A, /* 0x28-0x2B */ + 0xC1, 0xE1, 0xA2, 0x61, 0xA2, 0x62, 0xA2, 0x63, /* 0x2C-0x2F */ + 0xA2, 0x64, 0xA2, 0x65, 0xA2, 0x66, 0xA2, 0x67, /* 0x30-0x33 */ + 0xC1, 0xE2, 0xA2, 0x68, 0xA2, 0x69, 0xA2, 0x6A, /* 0x34-0x37 */ + 0xA2, 0x6B, 0xA2, 0x6C, 0xA2, 0x6D, 0xA2, 0x6E, /* 0x38-0x3B */ + 0xA2, 0x6F, 0xA2, 0x70, 0xA2, 0x71, 0xA2, 0x72, /* 0x3C-0x3F */ + 0xA2, 0x73, 0xA2, 0x74, 0xA2, 0x75, 0xA2, 0x76, /* 0x40-0x43 */ + 0xA2, 0x77, 0xA2, 0x78, 0xA2, 0x79, 0xA2, 0x7A, /* 0x44-0x47 */ + 0xA2, 0x81, 0xA2, 0x82, 0xA2, 0x83, 0xA2, 0x84, /* 0x48-0x4B */ + 0xA2, 0x85, 0xA2, 0x86, 0xA2, 0x87, 0xA2, 0x88, /* 0x4C-0x4F */ + 0xC1, 0xE3, 0xC1, 0xE4, 0xA2, 0x89, 0xA2, 0x8A, /* 0x50-0x53 */ + 0xC1, 0xE5, 0xA2, 0x8B, 0xA2, 0x8C, 0xA2, 0x8D, /* 0x54-0x57 */ + 0xC1, 0xE6, 0xA2, 0x8E, 0xA2, 0x8F, 0xA2, 0x90, /* 0x58-0x5B */ + 0xA2, 0x91, 0xA2, 0x92, 0xA2, 0x93, 0xA2, 0x94, /* 0x5C-0x5F */ + 0xC1, 0xE7, 0xC1, 0xE8, 0xA2, 0x95, 0xC1, 0xE9, /* 0x60-0x63 */ + 0xA2, 0x96, 0xA2, 0x97, 0xA2, 0x98, 0xA2, 0x99, /* 0x64-0x67 */ + 0xA2, 0x9A, 0xA2, 0x9B, 0xA2, 0x9C, 0xA2, 0x9D, /* 0x68-0x6B */ + 0xC1, 0xEA, 0xA2, 0x9E, 0xA2, 0x9F, 0xA2, 0xA0, /* 0x6C-0x6F */ + 0xC1, 0xEB, 0xA3, 0x41, 0xA3, 0x42, 0xA3, 0x43, /* 0x70-0x73 */ + 0xC1, 0xEC, 0xA3, 0x44, 0xA3, 0x45, 0xA3, 0x46, /* 0x74-0x77 */ + 0xA3, 0x47, 0xA3, 0x48, 0xA3, 0x49, 0xA3, 0x4A, /* 0x78-0x7B */ + 0xC1, 0xED, 0xA3, 0x4B, 0xA3, 0x4C, 0xA3, 0x4D, /* 0x7C-0x7F */ + + 0xA3, 0x4E, 0xA3, 0x4F, 0xA3, 0x50, 0xA3, 0x51, /* 0x80-0x83 */ + 0xA3, 0x52, 0xA3, 0x53, 0xA3, 0x54, 0xA3, 0x55, /* 0x84-0x87 */ + 0xC1, 0xEE, 0xC1, 0xEF, 0xA3, 0x56, 0xA3, 0x57, /* 0x88-0x8B */ + 0xC1, 0xF0, 0xA3, 0x58, 0xA3, 0x59, 0xA3, 0x5A, /* 0x8C-0x8F */ + 0xC1, 0xF1, 0xA3, 0x61, 0xA3, 0x62, 0xA3, 0x63, /* 0x90-0x93 */ + 0xA3, 0x64, 0xA3, 0x65, 0xA3, 0x66, 0xA3, 0x67, /* 0x94-0x97 */ + 0xC1, 0xF2, 0xC1, 0xF3, 0xA3, 0x68, 0xC1, 0xF4, /* 0x98-0x9B */ + 0xA3, 0x69, 0xC1, 0xF5, 0xA3, 0x6A, 0xA3, 0x6B, /* 0x9C-0x9F */ + 0xA3, 0x6C, 0xA3, 0x6D, 0xA3, 0x6E, 0xA3, 0x6F, /* 0xA0-0xA3 */ + 0xA3, 0x70, 0xA3, 0x71, 0xA3, 0x72, 0xA3, 0x73, /* 0xA4-0xA7 */ + 0xA3, 0x74, 0xA3, 0x75, 0xA3, 0x76, 0xA3, 0x77, /* 0xA8-0xAB */ + 0xA3, 0x78, 0xA3, 0x79, 0xA3, 0x7A, 0xA3, 0x81, /* 0xAC-0xAF */ + 0xA3, 0x82, 0xA3, 0x83, 0xA3, 0x84, 0xA3, 0x85, /* 0xB0-0xB3 */ + 0xA3, 0x86, 0xA3, 0x87, 0xA3, 0x88, 0xA3, 0x89, /* 0xB4-0xB7 */ + 0xA3, 0x8A, 0xA3, 0x8B, 0xA3, 0x8C, 0xA3, 0x8D, /* 0xB8-0xBB */ + 0xA3, 0x8E, 0xA3, 0x8F, 0xA3, 0x90, 0xA3, 0x91, /* 0xBC-0xBF */ + 0xC1, 0xF6, 0xC1, 0xF7, 0xA3, 0x92, 0xA3, 0x93, /* 0xC0-0xC3 */ + 0xC1, 0xF8, 0xA3, 0x94, 0xA3, 0x95, 0xC1, 0xF9, /* 0xC4-0xC7 */ + 0xC1, 0xFA, 0xA3, 0x96, 0xC1, 0xFB, 0xA3, 0x97, /* 0xC8-0xCB */ + 0xA3, 0x98, 0xA3, 0x99, 0xA3, 0x9A, 0xA3, 0x9B, /* 0xCC-0xCF */ + 0xC1, 0xFC, 0xC1, 0xFD, 0xA3, 0x9C, 0xC1, 0xFE, /* 0xD0-0xD3 */ + 0xA3, 0x9D, 0xC2, 0xA1, 0xC2, 0xA2, 0xA3, 0x9E, /* 0xD4-0xD7 */ + 0xA3, 0x9F, 0xC2, 0xA3, 0xC2, 0xA4, 0xA3, 0xA0, /* 0xD8-0xDB */ + 0xC2, 0xA5, 0xC2, 0xA6, 0xA4, 0x41, 0xA4, 0x42, /* 0xDC-0xDF */ + 0xC2, 0xA7, 0xA4, 0x43, 0xC2, 0xA8, 0xA4, 0x44, /* 0xE0-0xE3 */ + 0xC2, 0xA9, 0xA4, 0x45, 0xA4, 0x46, 0xC2, 0xAA, /* 0xE4-0xE7 */ + 0xA4, 0x47, 0xA4, 0x48, 0xA4, 0x49, 0xA4, 0x4A, /* 0xE8-0xEB */ + 0xC2, 0xAB, 0xC2, 0xAC, 0xA4, 0x4B, 0xC2, 0xAD, /* 0xEC-0xEF */ + 0xC2, 0xAE, 0xC2, 0xAF, 0xA4, 0x4C, 0xA4, 0x4D, /* 0xF0-0xF3 */ + 0xA4, 0x4E, 0xA4, 0x4F, 0xA4, 0x50, 0xA4, 0x51, /* 0xF4-0xF7 */ + 0xC2, 0xB0, 0xC2, 0xB1, 0xA4, 0x52, 0xA4, 0x53, /* 0xF8-0xFB */ + 0xC2, 0xB2, 0xA4, 0x54, 0xA4, 0x55, 0xA4, 0x56, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CA[512] = { + 0xC2, 0xB3, 0xA4, 0x57, 0xA4, 0x58, 0xA4, 0x59, /* 0x00-0x03 */ + 0xA4, 0x5A, 0xA4, 0x61, 0xA4, 0x62, 0xA4, 0x63, /* 0x04-0x07 */ + 0xC2, 0xB4, 0xC2, 0xB5, 0xA4, 0x64, 0xC2, 0xB6, /* 0x08-0x0B */ + 0xC2, 0xB7, 0xC2, 0xB8, 0xA4, 0x65, 0xA4, 0x66, /* 0x0C-0x0F */ + 0xA4, 0x67, 0xA4, 0x68, 0xA4, 0x69, 0xA4, 0x6A, /* 0x10-0x13 */ + 0xC2, 0xB9, 0xA4, 0x6B, 0xA4, 0x6C, 0xA4, 0x6D, /* 0x14-0x17 */ + 0xC2, 0xBA, 0xA4, 0x6E, 0xA4, 0x6F, 0xA4, 0x70, /* 0x18-0x1B */ + 0xA4, 0x71, 0xA4, 0x72, 0xA4, 0x73, 0xA4, 0x74, /* 0x1C-0x1F */ + 0xA4, 0x75, 0xA4, 0x76, 0xA4, 0x77, 0xA4, 0x78, /* 0x20-0x23 */ + 0xA4, 0x79, 0xA4, 0x7A, 0xA4, 0x81, 0xA4, 0x82, /* 0x24-0x27 */ + 0xA4, 0x83, 0xC2, 0xBB, 0xA4, 0x84, 0xA4, 0x85, /* 0x28-0x2B */ + 0xA4, 0x86, 0xA4, 0x87, 0xA4, 0x88, 0xA4, 0x89, /* 0x2C-0x2F */ + 0xA4, 0x8A, 0xA4, 0x8B, 0xA4, 0x8C, 0xA4, 0x8D, /* 0x30-0x33 */ + 0xA4, 0x8E, 0xA4, 0x8F, 0xA4, 0x90, 0xA4, 0x91, /* 0x34-0x37 */ + 0xA4, 0x92, 0xA4, 0x93, 0xA4, 0x94, 0xA4, 0x95, /* 0x38-0x3B */ + 0xA4, 0x96, 0xA4, 0x97, 0xA4, 0x98, 0xA4, 0x99, /* 0x3C-0x3F */ + 0xA4, 0x9A, 0xA4, 0x9B, 0xA4, 0x9C, 0xA4, 0x9D, /* 0x40-0x43 */ + 0xA4, 0x9E, 0xA4, 0x9F, 0xA4, 0xA0, 0xA5, 0x41, /* 0x44-0x47 */ + 0xA5, 0x42, 0xA5, 0x43, 0xA5, 0x44, 0xA5, 0x45, /* 0x48-0x4B */ + 0xC2, 0xBC, 0xC2, 0xBD, 0xA5, 0x46, 0xA5, 0x47, /* 0x4C-0x4F */ + 0xC2, 0xBE, 0xA5, 0x48, 0xA5, 0x49, 0xA5, 0x4A, /* 0x50-0x53 */ + 0xC2, 0xBF, 0xA5, 0x4B, 0xA5, 0x4C, 0xA5, 0x4D, /* 0x54-0x57 */ + 0xA5, 0x4E, 0xA5, 0x4F, 0xA5, 0x50, 0xA5, 0x51, /* 0x58-0x5B */ + 0xC2, 0xC0, 0xC2, 0xC1, 0xA5, 0x52, 0xC2, 0xC2, /* 0x5C-0x5F */ + 0xC2, 0xC3, 0xC2, 0xC4, 0xA5, 0x53, 0xA5, 0x54, /* 0x60-0x63 */ + 0xA5, 0x55, 0xA5, 0x56, 0xA5, 0x57, 0xA5, 0x58, /* 0x64-0x67 */ + 0xC2, 0xC5, 0xA5, 0x59, 0xA5, 0x5A, 0xA5, 0x61, /* 0x68-0x6B */ + 0xA5, 0x62, 0xA5, 0x63, 0xA5, 0x64, 0xA5, 0x65, /* 0x6C-0x6F */ + 0xA5, 0x66, 0xA5, 0x67, 0xA5, 0x68, 0xA5, 0x69, /* 0x70-0x73 */ + 0xA5, 0x6A, 0xA5, 0x6B, 0xA5, 0x6C, 0xA5, 0x6D, /* 0x74-0x77 */ + 0xA5, 0x6E, 0xA5, 0x6F, 0xA5, 0x70, 0xA5, 0x71, /* 0x78-0x7B */ + 0xA5, 0x72, 0xC2, 0xC6, 0xA5, 0x73, 0xA5, 0x74, /* 0x7C-0x7F */ + + 0xA5, 0x75, 0xA5, 0x76, 0xA5, 0x77, 0xA5, 0x78, /* 0x80-0x83 */ + 0xC2, 0xC7, 0xA5, 0x79, 0xA5, 0x7A, 0xA5, 0x81, /* 0x84-0x87 */ + 0xA5, 0x82, 0xA5, 0x83, 0xA5, 0x84, 0xA5, 0x85, /* 0x88-0x8B */ + 0xA5, 0x86, 0xA5, 0x87, 0xA5, 0x88, 0xA5, 0x89, /* 0x8C-0x8F */ + 0xA5, 0x8A, 0xA5, 0x8B, 0xA5, 0x8C, 0xA5, 0x8D, /* 0x90-0x93 */ + 0xA5, 0x8E, 0xA5, 0x8F, 0xA5, 0x90, 0xA5, 0x91, /* 0x94-0x97 */ + 0xC2, 0xC8, 0xA5, 0x92, 0xA5, 0x93, 0xA5, 0x94, /* 0x98-0x9B */ + 0xA5, 0x95, 0xA5, 0x96, 0xA5, 0x97, 0xA5, 0x98, /* 0x9C-0x9F */ + 0xA5, 0x99, 0xA5, 0x9A, 0xA5, 0x9B, 0xA5, 0x9C, /* 0xA0-0xA3 */ + 0xA5, 0x9D, 0xA5, 0x9E, 0xA5, 0x9F, 0xA5, 0xA0, /* 0xA4-0xA7 */ + 0xA6, 0x41, 0xA6, 0x42, 0xA6, 0x43, 0xA6, 0x44, /* 0xA8-0xAB */ + 0xA6, 0x45, 0xA6, 0x46, 0xA6, 0x47, 0xA6, 0x48, /* 0xAC-0xAF */ + 0xA6, 0x49, 0xA6, 0x4A, 0xA6, 0x4B, 0xA6, 0x4C, /* 0xB0-0xB3 */ + 0xA6, 0x4D, 0xA6, 0x4E, 0xA6, 0x4F, 0xA6, 0x50, /* 0xB4-0xB7 */ + 0xA6, 0x51, 0xA6, 0x52, 0xA6, 0x53, 0xA6, 0x54, /* 0xB8-0xBB */ + 0xC2, 0xC9, 0xC2, 0xCA, 0xA6, 0x55, 0xA6, 0x56, /* 0xBC-0xBF */ + 0xC2, 0xCB, 0xA6, 0x57, 0xA6, 0x58, 0xA6, 0x59, /* 0xC0-0xC3 */ + 0xC2, 0xCC, 0xA6, 0x5A, 0xA6, 0x61, 0xA6, 0x62, /* 0xC4-0xC7 */ + 0xA6, 0x63, 0xA6, 0x64, 0xA6, 0x65, 0xA6, 0x66, /* 0xC8-0xCB */ + 0xC2, 0xCD, 0xC2, 0xCE, 0xA6, 0x67, 0xC2, 0xCF, /* 0xCC-0xCF */ + 0xA6, 0x68, 0xC2, 0xD0, 0xA6, 0x69, 0xC2, 0xD1, /* 0xD0-0xD3 */ + 0xA6, 0x6A, 0xA6, 0x6B, 0xA6, 0x6C, 0xA6, 0x6D, /* 0xD4-0xD7 */ + 0xC2, 0xD2, 0xC2, 0xD3, 0xA6, 0x6E, 0xA6, 0x6F, /* 0xD8-0xDB */ + 0xA6, 0x70, 0xA6, 0x71, 0xA6, 0x72, 0xA6, 0x73, /* 0xDC-0xDF */ + 0xC2, 0xD4, 0xA6, 0x74, 0xA6, 0x75, 0xA6, 0x76, /* 0xE0-0xE3 */ + 0xA6, 0x77, 0xA6, 0x78, 0xA6, 0x79, 0xA6, 0x7A, /* 0xE4-0xE7 */ + 0xA6, 0x81, 0xA6, 0x82, 0xA6, 0x83, 0xA6, 0x84, /* 0xE8-0xEB */ + 0xC2, 0xD5, 0xA6, 0x85, 0xA6, 0x86, 0xA6, 0x87, /* 0xEC-0xEF */ + 0xA6, 0x88, 0xA6, 0x89, 0xA6, 0x8A, 0xA6, 0x8B, /* 0xF0-0xF3 */ + 0xC2, 0xD6, 0xA6, 0x8C, 0xA6, 0x8D, 0xA6, 0x8E, /* 0xF4-0xF7 */ + 0xA6, 0x8F, 0xA6, 0x90, 0xA6, 0x91, 0xA6, 0x92, /* 0xF8-0xFB */ + 0xA6, 0x93, 0xA6, 0x94, 0xA6, 0x95, 0xA6, 0x96, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CB[512] = { + 0xA6, 0x97, 0xA6, 0x98, 0xA6, 0x99, 0xA6, 0x9A, /* 0x00-0x03 */ + 0xA6, 0x9B, 0xA6, 0x9C, 0xA6, 0x9D, 0xA6, 0x9E, /* 0x04-0x07 */ + 0xC2, 0xD7, 0xA6, 0x9F, 0xA6, 0xA0, 0xA7, 0x41, /* 0x08-0x0B */ + 0xA7, 0x42, 0xA7, 0x43, 0xA7, 0x44, 0xA7, 0x45, /* 0x0C-0x0F */ + 0xC2, 0xD8, 0xA7, 0x46, 0xA7, 0x47, 0xA7, 0x48, /* 0x10-0x13 */ + 0xC2, 0xD9, 0xA7, 0x49, 0xA7, 0x4A, 0xA7, 0x4B, /* 0x14-0x17 */ + 0xC2, 0xDA, 0xA7, 0x4C, 0xA7, 0x4D, 0xA7, 0x4E, /* 0x18-0x1B */ + 0xA7, 0x4F, 0xA7, 0x50, 0xA7, 0x51, 0xA7, 0x52, /* 0x1C-0x1F */ + 0xC2, 0xDB, 0xC2, 0xDC, 0xA7, 0x53, 0xA7, 0x54, /* 0x20-0x23 */ + 0xA7, 0x55, 0xA7, 0x56, 0xA7, 0x57, 0xA7, 0x58, /* 0x24-0x27 */ + 0xA7, 0x59, 0xA7, 0x5A, 0xA7, 0x61, 0xA7, 0x62, /* 0x28-0x2B */ + 0xA7, 0x63, 0xA7, 0x64, 0xA7, 0x65, 0xA7, 0x66, /* 0x2C-0x2F */ + 0xA7, 0x67, 0xA7, 0x68, 0xA7, 0x69, 0xA7, 0x6A, /* 0x30-0x33 */ + 0xA7, 0x6B, 0xA7, 0x6C, 0xA7, 0x6D, 0xA7, 0x6E, /* 0x34-0x37 */ + 0xA7, 0x6F, 0xA7, 0x70, 0xA7, 0x71, 0xA7, 0x72, /* 0x38-0x3B */ + 0xA7, 0x73, 0xA7, 0x74, 0xA7, 0x75, 0xA7, 0x76, /* 0x3C-0x3F */ + 0xA7, 0x77, 0xC2, 0xDD, 0xA7, 0x78, 0xA7, 0x79, /* 0x40-0x43 */ + 0xA7, 0x7A, 0xA7, 0x81, 0xA7, 0x82, 0xA7, 0x83, /* 0x44-0x47 */ + 0xC2, 0xDE, 0xC2, 0xDF, 0xA7, 0x84, 0xA7, 0x85, /* 0x48-0x4B */ + 0xC2, 0xE0, 0xA7, 0x86, 0xA7, 0x87, 0xA7, 0x88, /* 0x4C-0x4F */ + 0xC2, 0xE1, 0xA7, 0x89, 0xA7, 0x8A, 0xA7, 0x8B, /* 0x50-0x53 */ + 0xA7, 0x8C, 0xA7, 0x8D, 0xA7, 0x8E, 0xA7, 0x8F, /* 0x54-0x57 */ + 0xC2, 0xE2, 0xC2, 0xE3, 0xA7, 0x90, 0xA7, 0x91, /* 0x58-0x5B */ + 0xA7, 0x92, 0xC2, 0xE4, 0xA7, 0x93, 0xA7, 0x94, /* 0x5C-0x5F */ + 0xA7, 0x95, 0xA7, 0x96, 0xA7, 0x97, 0xA7, 0x98, /* 0x60-0x63 */ + 0xC2, 0xE5, 0xA7, 0x99, 0xA7, 0x9A, 0xA7, 0x9B, /* 0x64-0x67 */ + 0xA7, 0x9C, 0xA7, 0x9D, 0xA7, 0x9E, 0xA7, 0x9F, /* 0x68-0x6B */ + 0xA7, 0xA0, 0xA8, 0x41, 0xA8, 0x42, 0xA8, 0x43, /* 0x6C-0x6F */ + 0xA8, 0x44, 0xA8, 0x45, 0xA8, 0x46, 0xA8, 0x47, /* 0x70-0x73 */ + 0xA8, 0x48, 0xA8, 0x49, 0xA8, 0x4A, 0xA8, 0x4B, /* 0x74-0x77 */ + 0xC2, 0xE6, 0xC2, 0xE7, 0xA8, 0x4C, 0xA8, 0x4D, /* 0x78-0x7B */ + 0xA8, 0x4E, 0xA8, 0x4F, 0xA8, 0x50, 0xA8, 0x51, /* 0x7C-0x7F */ + + 0xA8, 0x52, 0xA8, 0x53, 0xA8, 0x54, 0xA8, 0x55, /* 0x80-0x83 */ + 0xA8, 0x56, 0xA8, 0x57, 0xA8, 0x58, 0xA8, 0x59, /* 0x84-0x87 */ + 0xA8, 0x5A, 0xA8, 0x61, 0xA8, 0x62, 0xA8, 0x63, /* 0x88-0x8B */ + 0xA8, 0x64, 0xA8, 0x65, 0xA8, 0x66, 0xA8, 0x67, /* 0x8C-0x8F */ + 0xA8, 0x68, 0xA8, 0x69, 0xA8, 0x6A, 0xA8, 0x6B, /* 0x90-0x93 */ + 0xA8, 0x6C, 0xA8, 0x6D, 0xA8, 0x6E, 0xA8, 0x6F, /* 0x94-0x97 */ + 0xA8, 0x70, 0xA8, 0x71, 0xA8, 0x72, 0xA8, 0x73, /* 0x98-0x9B */ + 0xC2, 0xE8, 0xA8, 0x74, 0xA8, 0x75, 0xA8, 0x76, /* 0x9C-0x9F */ + 0xA8, 0x77, 0xA8, 0x78, 0xA8, 0x79, 0xA8, 0x7A, /* 0xA0-0xA3 */ + 0xA8, 0x81, 0xA8, 0x82, 0xA8, 0x83, 0xA8, 0x84, /* 0xA4-0xA7 */ + 0xA8, 0x85, 0xA8, 0x86, 0xA8, 0x87, 0xA8, 0x88, /* 0xA8-0xAB */ + 0xA8, 0x89, 0xA8, 0x8A, 0xA8, 0x8B, 0xA8, 0x8C, /* 0xAC-0xAF */ + 0xA8, 0x8D, 0xA8, 0x8E, 0xA8, 0x8F, 0xA8, 0x90, /* 0xB0-0xB3 */ + 0xA8, 0x91, 0xA8, 0x92, 0xA8, 0x93, 0xA8, 0x94, /* 0xB4-0xB7 */ + 0xC2, 0xE9, 0xA8, 0x95, 0xA8, 0x96, 0xA8, 0x97, /* 0xB8-0xBB */ + 0xA8, 0x98, 0xA8, 0x99, 0xA8, 0x9A, 0xA8, 0x9B, /* 0xBC-0xBF */ + 0xA8, 0x9C, 0xA8, 0x9D, 0xA8, 0x9E, 0xA8, 0x9F, /* 0xC0-0xC3 */ + 0xA8, 0xA0, 0xA9, 0x41, 0xA9, 0x42, 0xA9, 0x43, /* 0xC4-0xC7 */ + 0xA9, 0x44, 0xA9, 0x45, 0xA9, 0x46, 0xA9, 0x47, /* 0xC8-0xCB */ + 0xA9, 0x48, 0xA9, 0x49, 0xA9, 0x4A, 0xA9, 0x4B, /* 0xCC-0xCF */ + 0xA9, 0x4C, 0xA9, 0x4D, 0xA9, 0x4E, 0xA9, 0x4F, /* 0xD0-0xD3 */ + 0xC2, 0xEA, 0xA9, 0x50, 0xA9, 0x51, 0xA9, 0x52, /* 0xD4-0xD7 */ + 0xA9, 0x53, 0xA9, 0x54, 0xA9, 0x55, 0xA9, 0x56, /* 0xD8-0xDB */ + 0xA9, 0x57, 0xA9, 0x58, 0xA9, 0x59, 0xA9, 0x5A, /* 0xDC-0xDF */ + 0xA9, 0x61, 0xA9, 0x62, 0xA9, 0x63, 0xA9, 0x64, /* 0xE0-0xE3 */ + 0xC2, 0xEB, 0xA9, 0x65, 0xA9, 0x66, 0xC2, 0xEC, /* 0xE4-0xE7 */ + 0xA9, 0x67, 0xC2, 0xED, 0xA9, 0x68, 0xA9, 0x69, /* 0xE8-0xEB */ + 0xA9, 0x6A, 0xA9, 0x6B, 0xA9, 0x6C, 0xA9, 0x6D, /* 0xEC-0xEF */ + 0xA9, 0x6E, 0xA9, 0x6F, 0xA9, 0x70, 0xA9, 0x71, /* 0xF0-0xF3 */ + 0xA9, 0x72, 0xA9, 0x73, 0xA9, 0x74, 0xA9, 0x75, /* 0xF4-0xF7 */ + 0xA9, 0x76, 0xA9, 0x77, 0xA9, 0x78, 0xA9, 0x79, /* 0xF8-0xFB */ + 0xA9, 0x7A, 0xA9, 0x81, 0xA9, 0x82, 0xA9, 0x83, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CC[512] = { + 0xA9, 0x84, 0xA9, 0x85, 0xA9, 0x86, 0xA9, 0x87, /* 0x00-0x03 */ + 0xA9, 0x88, 0xA9, 0x89, 0xA9, 0x8A, 0xA9, 0x8B, /* 0x04-0x07 */ + 0xA9, 0x8C, 0xA9, 0x8D, 0xA9, 0x8E, 0xA9, 0x8F, /* 0x08-0x0B */ + 0xC2, 0xEE, 0xC2, 0xEF, 0xA9, 0x90, 0xA9, 0x91, /* 0x0C-0x0F */ + 0xC2, 0xF0, 0xA9, 0x92, 0xA9, 0x93, 0xA9, 0x94, /* 0x10-0x13 */ + 0xC2, 0xF1, 0xA9, 0x95, 0xA9, 0x96, 0xA9, 0x97, /* 0x14-0x17 */ + 0xA9, 0x98, 0xA9, 0x99, 0xA9, 0x9A, 0xA9, 0x9B, /* 0x18-0x1B */ + 0xC2, 0xF2, 0xC2, 0xF3, 0xA9, 0x9C, 0xA9, 0x9D, /* 0x1C-0x1F */ + 0xA9, 0x9E, 0xC2, 0xF4, 0xC2, 0xF5, 0xA9, 0x9F, /* 0x20-0x23 */ + 0xA9, 0xA0, 0xAA, 0x41, 0xAA, 0x42, 0xC2, 0xF6, /* 0x24-0x27 */ + 0xC2, 0xF7, 0xC2, 0xF8, 0xAA, 0x43, 0xAA, 0x44, /* 0x28-0x2B */ + 0xC2, 0xF9, 0xAA, 0x45, 0xC2, 0xFA, 0xAA, 0x46, /* 0x2C-0x2F */ + 0xC2, 0xFB, 0xAA, 0x47, 0xAA, 0x48, 0xAA, 0x49, /* 0x30-0x33 */ + 0xAA, 0x4A, 0xAA, 0x4B, 0xAA, 0x4C, 0xAA, 0x4D, /* 0x34-0x37 */ + 0xC2, 0xFC, 0xC2, 0xFD, 0xAA, 0x4E, 0xC2, 0xFE, /* 0x38-0x3B */ + 0xC3, 0xA1, 0xC3, 0xA2, 0xC3, 0xA3, 0xAA, 0x4F, /* 0x3C-0x3F */ + 0xAA, 0x50, 0xAA, 0x51, 0xAA, 0x52, 0xAA, 0x53, /* 0x40-0x43 */ + 0xC3, 0xA4, 0xC3, 0xA5, 0xAA, 0x54, 0xAA, 0x55, /* 0x44-0x47 */ + 0xC3, 0xA6, 0xAA, 0x56, 0xAA, 0x57, 0xAA, 0x58, /* 0x48-0x4B */ + 0xC3, 0xA7, 0xAA, 0x59, 0xAA, 0x5A, 0xAA, 0x61, /* 0x4C-0x4F */ + 0xAA, 0x62, 0xAA, 0x63, 0xAA, 0x64, 0xAA, 0x65, /* 0x50-0x53 */ + 0xC3, 0xA8, 0xC3, 0xA9, 0xAA, 0x66, 0xC3, 0xAA, /* 0x54-0x57 */ + 0xC3, 0xAB, 0xC3, 0xAC, 0xAA, 0x67, 0xAA, 0x68, /* 0x58-0x5B */ + 0xAA, 0x69, 0xAA, 0x6A, 0xAA, 0x6B, 0xAA, 0x6C, /* 0x5C-0x5F */ + 0xC3, 0xAD, 0xAA, 0x6D, 0xAA, 0x6E, 0xAA, 0x6F, /* 0x60-0x63 */ + 0xC3, 0xAE, 0xAA, 0x70, 0xC3, 0xAF, 0xAA, 0x71, /* 0x64-0x67 */ + 0xC3, 0xB0, 0xAA, 0x72, 0xAA, 0x73, 0xAA, 0x74, /* 0x68-0x6B */ + 0xAA, 0x75, 0xAA, 0x76, 0xAA, 0x77, 0xAA, 0x78, /* 0x6C-0x6F */ + 0xC3, 0xB1, 0xAA, 0x79, 0xAA, 0x7A, 0xAA, 0x81, /* 0x70-0x73 */ + 0xAA, 0x82, 0xC3, 0xB2, 0xAA, 0x83, 0xAA, 0x84, /* 0x74-0x77 */ + 0xAA, 0x85, 0xAA, 0x86, 0xAA, 0x87, 0xAA, 0x88, /* 0x78-0x7B */ + 0xAA, 0x89, 0xAA, 0x8A, 0xAA, 0x8B, 0xAA, 0x8C, /* 0x7C-0x7F */ + + 0xAA, 0x8D, 0xAA, 0x8E, 0xAA, 0x8F, 0xAA, 0x90, /* 0x80-0x83 */ + 0xAA, 0x91, 0xAA, 0x92, 0xAA, 0x93, 0xAA, 0x94, /* 0x84-0x87 */ + 0xAA, 0x95, 0xAA, 0x96, 0xAA, 0x97, 0xAA, 0x98, /* 0x88-0x8B */ + 0xAA, 0x99, 0xAA, 0x9A, 0xAA, 0x9B, 0xAA, 0x9C, /* 0x8C-0x8F */ + 0xAA, 0x9D, 0xAA, 0x9E, 0xAA, 0x9F, 0xAA, 0xA0, /* 0x90-0x93 */ + 0xAB, 0x41, 0xAB, 0x42, 0xAB, 0x43, 0xAB, 0x44, /* 0x94-0x97 */ + 0xC3, 0xB3, 0xC3, 0xB4, 0xAB, 0x45, 0xAB, 0x46, /* 0x98-0x9B */ + 0xC3, 0xB5, 0xAB, 0x47, 0xAB, 0x48, 0xAB, 0x49, /* 0x9C-0x9F */ + 0xC3, 0xB6, 0xAB, 0x4A, 0xAB, 0x4B, 0xAB, 0x4C, /* 0xA0-0xA3 */ + 0xAB, 0x4D, 0xAB, 0x4E, 0xAB, 0x4F, 0xAB, 0x50, /* 0xA4-0xA7 */ + 0xC3, 0xB7, 0xC3, 0xB8, 0xAB, 0x51, 0xC3, 0xB9, /* 0xA8-0xAB */ + 0xC3, 0xBA, 0xC3, 0xBB, 0xAB, 0x52, 0xAB, 0x53, /* 0xAC-0xAF */ + 0xAB, 0x54, 0xAB, 0x55, 0xAB, 0x56, 0xAB, 0x57, /* 0xB0-0xB3 */ + 0xC3, 0xBC, 0xC3, 0xBD, 0xAB, 0x58, 0xAB, 0x59, /* 0xB4-0xB7 */ + 0xC3, 0xBE, 0xAB, 0x5A, 0xAB, 0x61, 0xAB, 0x62, /* 0xB8-0xBB */ + 0xC3, 0xBF, 0xAB, 0x63, 0xAB, 0x64, 0xAB, 0x65, /* 0xBC-0xBF */ + 0xAB, 0x66, 0xAB, 0x67, 0xAB, 0x68, 0xAB, 0x69, /* 0xC0-0xC3 */ + 0xC3, 0xC0, 0xC3, 0xC1, 0xAB, 0x6A, 0xC3, 0xC2, /* 0xC4-0xC7 */ + 0xAB, 0x6B, 0xC3, 0xC3, 0xAB, 0x6C, 0xAB, 0x6D, /* 0xC8-0xCB */ + 0xAB, 0x6E, 0xAB, 0x6F, 0xAB, 0x70, 0xAB, 0x71, /* 0xCC-0xCF */ + 0xC3, 0xC4, 0xAB, 0x72, 0xAB, 0x73, 0xAB, 0x74, /* 0xD0-0xD3 */ + 0xC3, 0xC5, 0xAB, 0x75, 0xAB, 0x76, 0xAB, 0x77, /* 0xD4-0xD7 */ + 0xAB, 0x78, 0xAB, 0x79, 0xAB, 0x7A, 0xAB, 0x81, /* 0xD8-0xDB */ + 0xAB, 0x82, 0xAB, 0x83, 0xAB, 0x84, 0xAB, 0x85, /* 0xDC-0xDF */ + 0xAB, 0x86, 0xAB, 0x87, 0xAB, 0x88, 0xAB, 0x89, /* 0xE0-0xE3 */ + 0xC3, 0xC6, 0xAB, 0x8A, 0xAB, 0x8B, 0xAB, 0x8C, /* 0xE4-0xE7 */ + 0xAB, 0x8D, 0xAB, 0x8E, 0xAB, 0x8F, 0xAB, 0x90, /* 0xE8-0xEB */ + 0xC3, 0xC7, 0xAB, 0x91, 0xAB, 0x92, 0xAB, 0x93, /* 0xEC-0xEF */ + 0xC3, 0xC8, 0xAB, 0x94, 0xAB, 0x95, 0xAB, 0x96, /* 0xF0-0xF3 */ + 0xAB, 0x97, 0xAB, 0x98, 0xAB, 0x99, 0xAB, 0x9A, /* 0xF4-0xF7 */ + 0xAB, 0x9B, 0xAB, 0x9C, 0xAB, 0x9D, 0xAB, 0x9E, /* 0xF8-0xFB */ + 0xAB, 0x9F, 0xAB, 0xA0, 0xAC, 0x41, 0xAC, 0x42, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CD[512] = { + 0xAC, 0x43, 0xC3, 0xC9, 0xAC, 0x44, 0xAC, 0x45, /* 0x00-0x03 */ + 0xAC, 0x46, 0xAC, 0x47, 0xAC, 0x48, 0xAC, 0x49, /* 0x04-0x07 */ + 0xC3, 0xCA, 0xC3, 0xCB, 0xAC, 0x4A, 0xAC, 0x4B, /* 0x08-0x0B */ + 0xC3, 0xCC, 0xAC, 0x4C, 0xAC, 0x4D, 0xAC, 0x4E, /* 0x0C-0x0F */ + 0xC3, 0xCD, 0xAC, 0x4F, 0xAC, 0x50, 0xAC, 0x51, /* 0x10-0x13 */ + 0xAC, 0x52, 0xAC, 0x53, 0xAC, 0x54, 0xAC, 0x55, /* 0x14-0x17 */ + 0xC3, 0xCE, 0xC3, 0xCF, 0xAC, 0x56, 0xC3, 0xD0, /* 0x18-0x1B */ + 0xAC, 0x57, 0xC3, 0xD1, 0xAC, 0x58, 0xAC, 0x59, /* 0x1C-0x1F */ + 0xAC, 0x5A, 0xAC, 0x61, 0xAC, 0x62, 0xAC, 0x63, /* 0x20-0x23 */ + 0xC3, 0xD2, 0xAC, 0x64, 0xAC, 0x65, 0xAC, 0x66, /* 0x24-0x27 */ + 0xC3, 0xD3, 0xAC, 0x67, 0xAC, 0x68, 0xAC, 0x69, /* 0x28-0x2B */ + 0xC3, 0xD4, 0xAC, 0x6A, 0xAC, 0x6B, 0xAC, 0x6C, /* 0x2C-0x2F */ + 0xAC, 0x6D, 0xAC, 0x6E, 0xAC, 0x6F, 0xAC, 0x70, /* 0x30-0x33 */ + 0xAC, 0x71, 0xAC, 0x72, 0xAC, 0x73, 0xAC, 0x74, /* 0x34-0x37 */ + 0xAC, 0x75, 0xC3, 0xD5, 0xAC, 0x76, 0xAC, 0x77, /* 0x38-0x3B */ + 0xAC, 0x78, 0xAC, 0x79, 0xAC, 0x7A, 0xAC, 0x81, /* 0x3C-0x3F */ + 0xAC, 0x82, 0xAC, 0x83, 0xAC, 0x84, 0xAC, 0x85, /* 0x40-0x43 */ + 0xAC, 0x86, 0xAC, 0x87, 0xAC, 0x88, 0xAC, 0x89, /* 0x44-0x47 */ + 0xAC, 0x8A, 0xAC, 0x8B, 0xAC, 0x8C, 0xAC, 0x8D, /* 0x48-0x4B */ + 0xAC, 0x8E, 0xAC, 0x8F, 0xAC, 0x90, 0xAC, 0x91, /* 0x4C-0x4F */ + 0xAC, 0x92, 0xAC, 0x93, 0xAC, 0x94, 0xAC, 0x95, /* 0x50-0x53 */ + 0xAC, 0x96, 0xAC, 0x97, 0xAC, 0x98, 0xAC, 0x99, /* 0x54-0x57 */ + 0xAC, 0x9A, 0xAC, 0x9B, 0xAC, 0x9C, 0xAC, 0x9D, /* 0x58-0x5B */ + 0xC3, 0xD6, 0xAC, 0x9E, 0xAC, 0x9F, 0xAC, 0xA0, /* 0x5C-0x5F */ + 0xC3, 0xD7, 0xAD, 0x41, 0xAD, 0x42, 0xAD, 0x43, /* 0x60-0x63 */ + 0xC3, 0xD8, 0xAD, 0x44, 0xAD, 0x45, 0xAD, 0x46, /* 0x64-0x67 */ + 0xAD, 0x47, 0xAD, 0x48, 0xAD, 0x49, 0xAD, 0x4A, /* 0x68-0x6B */ + 0xC3, 0xD9, 0xC3, 0xDA, 0xAD, 0x4B, 0xC3, 0xDB, /* 0x6C-0x6F */ + 0xAD, 0x4C, 0xC3, 0xDC, 0xAD, 0x4D, 0xAD, 0x4E, /* 0x70-0x73 */ + 0xAD, 0x4F, 0xAD, 0x50, 0xAD, 0x51, 0xAD, 0x52, /* 0x74-0x77 */ + 0xC3, 0xDD, 0xAD, 0x53, 0xAD, 0x54, 0xAD, 0x55, /* 0x78-0x7B */ + 0xAD, 0x56, 0xAD, 0x57, 0xAD, 0x58, 0xAD, 0x59, /* 0x7C-0x7F */ + + 0xAD, 0x5A, 0xAD, 0x61, 0xAD, 0x62, 0xAD, 0x63, /* 0x80-0x83 */ + 0xAD, 0x64, 0xAD, 0x65, 0xAD, 0x66, 0xAD, 0x67, /* 0x84-0x87 */ + 0xC3, 0xDE, 0xAD, 0x68, 0xAD, 0x69, 0xAD, 0x6A, /* 0x88-0x8B */ + 0xAD, 0x6B, 0xAD, 0x6C, 0xAD, 0x6D, 0xAD, 0x6E, /* 0x8C-0x8F */ + 0xAD, 0x6F, 0xAD, 0x70, 0xAD, 0x71, 0xAD, 0x72, /* 0x90-0x93 */ + 0xC3, 0xDF, 0xC3, 0xE0, 0xAD, 0x73, 0xAD, 0x74, /* 0x94-0x97 */ + 0xC3, 0xE1, 0xAD, 0x75, 0xAD, 0x76, 0xAD, 0x77, /* 0x98-0x9B */ + 0xC3, 0xE2, 0xAD, 0x78, 0xAD, 0x79, 0xAD, 0x7A, /* 0x9C-0x9F */ + 0xAD, 0x81, 0xAD, 0x82, 0xAD, 0x83, 0xAD, 0x84, /* 0xA0-0xA3 */ + 0xC3, 0xE3, 0xC3, 0xE4, 0xAD, 0x85, 0xC3, 0xE5, /* 0xA4-0xA7 */ + 0xAD, 0x86, 0xC3, 0xE6, 0xAD, 0x87, 0xAD, 0x88, /* 0xA8-0xAB */ + 0xAD, 0x89, 0xAD, 0x8A, 0xAD, 0x8B, 0xAD, 0x8C, /* 0xAC-0xAF */ + 0xC3, 0xE7, 0xAD, 0x8D, 0xAD, 0x8E, 0xAD, 0x8F, /* 0xB0-0xB3 */ + 0xAD, 0x90, 0xAD, 0x91, 0xAD, 0x92, 0xAD, 0x93, /* 0xB4-0xB7 */ + 0xAD, 0x94, 0xAD, 0x95, 0xAD, 0x96, 0xAD, 0x97, /* 0xB8-0xBB */ + 0xAD, 0x98, 0xAD, 0x99, 0xAD, 0x9A, 0xAD, 0x9B, /* 0xBC-0xBF */ + 0xAD, 0x9C, 0xAD, 0x9D, 0xAD, 0x9E, 0xAD, 0x9F, /* 0xC0-0xC3 */ + 0xC3, 0xE8, 0xAD, 0xA0, 0xAE, 0x41, 0xAE, 0x42, /* 0xC4-0xC7 */ + 0xAE, 0x43, 0xAE, 0x44, 0xAE, 0x45, 0xAE, 0x46, /* 0xC8-0xCB */ + 0xC3, 0xE9, 0xAE, 0x47, 0xAE, 0x48, 0xAE, 0x49, /* 0xCC-0xCF */ + 0xC3, 0xEA, 0xAE, 0x4A, 0xAE, 0x4B, 0xAE, 0x4C, /* 0xD0-0xD3 */ + 0xAE, 0x4D, 0xAE, 0x4E, 0xAE, 0x4F, 0xAE, 0x50, /* 0xD4-0xD7 */ + 0xAE, 0x51, 0xAE, 0x52, 0xAE, 0x53, 0xAE, 0x54, /* 0xD8-0xDB */ + 0xAE, 0x55, 0xAE, 0x56, 0xAE, 0x57, 0xAE, 0x58, /* 0xDC-0xDF */ + 0xAE, 0x59, 0xAE, 0x5A, 0xAE, 0x61, 0xAE, 0x62, /* 0xE0-0xE3 */ + 0xAE, 0x63, 0xAE, 0x64, 0xAE, 0x65, 0xAE, 0x66, /* 0xE4-0xE7 */ + 0xC3, 0xEB, 0xAE, 0x67, 0xAE, 0x68, 0xAE, 0x69, /* 0xE8-0xEB */ + 0xC3, 0xEC, 0xAE, 0x6A, 0xAE, 0x6B, 0xAE, 0x6C, /* 0xEC-0xEF */ + 0xC3, 0xED, 0xAE, 0x6D, 0xAE, 0x6E, 0xAE, 0x6F, /* 0xF0-0xF3 */ + 0xAE, 0x70, 0xAE, 0x71, 0xAE, 0x72, 0xAE, 0x73, /* 0xF4-0xF7 */ + 0xC3, 0xEE, 0xC3, 0xEF, 0xAE, 0x74, 0xC3, 0xF0, /* 0xF8-0xFB */ + 0xAE, 0x75, 0xC3, 0xF1, 0xAE, 0x76, 0xAE, 0x77, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CE[512] = { + 0xAE, 0x78, 0xAE, 0x79, 0xAE, 0x7A, 0xAE, 0x81, /* 0x00-0x03 */ + 0xC3, 0xF2, 0xAE, 0x82, 0xAE, 0x83, 0xAE, 0x84, /* 0x04-0x07 */ + 0xC3, 0xF3, 0xAE, 0x85, 0xAE, 0x86, 0xAE, 0x87, /* 0x08-0x0B */ + 0xC3, 0xF4, 0xAE, 0x88, 0xAE, 0x89, 0xAE, 0x8A, /* 0x0C-0x0F */ + 0xAE, 0x8B, 0xAE, 0x8C, 0xAE, 0x8D, 0xAE, 0x8E, /* 0x10-0x13 */ + 0xC3, 0xF5, 0xAE, 0x8F, 0xAE, 0x90, 0xAE, 0x91, /* 0x14-0x17 */ + 0xAE, 0x92, 0xC3, 0xF6, 0xAE, 0x93, 0xAE, 0x94, /* 0x18-0x1B */ + 0xAE, 0x95, 0xAE, 0x96, 0xAE, 0x97, 0xAE, 0x98, /* 0x1C-0x1F */ + 0xC3, 0xF7, 0xC3, 0xF8, 0xAE, 0x99, 0xAE, 0x9A, /* 0x20-0x23 */ + 0xC3, 0xF9, 0xAE, 0x9B, 0xAE, 0x9C, 0xAE, 0x9D, /* 0x24-0x27 */ + 0xC3, 0xFA, 0xAE, 0x9E, 0xAE, 0x9F, 0xAE, 0xA0, /* 0x28-0x2B */ + 0xAF, 0x41, 0xAF, 0x42, 0xAF, 0x43, 0xAF, 0x44, /* 0x2C-0x2F */ + 0xC3, 0xFB, 0xC3, 0xFC, 0xAF, 0x45, 0xC3, 0xFD, /* 0x30-0x33 */ + 0xAF, 0x46, 0xC3, 0xFE, 0xAF, 0x47, 0xAF, 0x48, /* 0x34-0x37 */ + 0xAF, 0x49, 0xAF, 0x4A, 0xAF, 0x4B, 0xAF, 0x4C, /* 0x38-0x3B */ + 0xAF, 0x4D, 0xAF, 0x4E, 0xAF, 0x4F, 0xAF, 0x50, /* 0x3C-0x3F */ + 0xAF, 0x51, 0xAF, 0x52, 0xAF, 0x53, 0xAF, 0x54, /* 0x40-0x43 */ + 0xAF, 0x55, 0xAF, 0x56, 0xAF, 0x57, 0xAF, 0x58, /* 0x44-0x47 */ + 0xAF, 0x59, 0xAF, 0x5A, 0xAF, 0x61, 0xAF, 0x62, /* 0x48-0x4B */ + 0xAF, 0x63, 0xAF, 0x64, 0xAF, 0x65, 0xAF, 0x66, /* 0x4C-0x4F */ + 0xAF, 0x67, 0xAF, 0x68, 0xAF, 0x69, 0xAF, 0x6A, /* 0x50-0x53 */ + 0xAF, 0x6B, 0xAF, 0x6C, 0xAF, 0x6D, 0xAF, 0x6E, /* 0x54-0x57 */ + 0xC4, 0xA1, 0xC4, 0xA2, 0xAF, 0x6F, 0xAF, 0x70, /* 0x58-0x5B */ + 0xC4, 0xA3, 0xAF, 0x71, 0xAF, 0x72, 0xC4, 0xA4, /* 0x5C-0x5F */ + 0xC4, 0xA5, 0xC4, 0xA6, 0xAF, 0x73, 0xAF, 0x74, /* 0x60-0x63 */ + 0xAF, 0x75, 0xAF, 0x76, 0xAF, 0x77, 0xAF, 0x78, /* 0x64-0x67 */ + 0xC4, 0xA7, 0xC4, 0xA8, 0xAF, 0x79, 0xC4, 0xA9, /* 0x68-0x6B */ + 0xAF, 0x7A, 0xC4, 0xAA, 0xAF, 0x81, 0xAF, 0x82, /* 0x6C-0x6F */ + 0xAF, 0x83, 0xAF, 0x84, 0xAF, 0x85, 0xAF, 0x86, /* 0x70-0x73 */ + 0xC4, 0xAB, 0xC4, 0xAC, 0xAF, 0x87, 0xAF, 0x88, /* 0x74-0x77 */ + 0xC4, 0xAD, 0xAF, 0x89, 0xAF, 0x8A, 0xAF, 0x8B, /* 0x78-0x7B */ + 0xC4, 0xAE, 0xAF, 0x8C, 0xAF, 0x8D, 0xAF, 0x8E, /* 0x7C-0x7F */ + + 0xAF, 0x8F, 0xAF, 0x90, 0xAF, 0x91, 0xAF, 0x92, /* 0x80-0x83 */ + 0xC4, 0xAF, 0xC4, 0xB0, 0xAF, 0x93, 0xC4, 0xB1, /* 0x84-0x87 */ + 0xAF, 0x94, 0xC4, 0xB2, 0xAF, 0x95, 0xAF, 0x96, /* 0x88-0x8B */ + 0xAF, 0x97, 0xAF, 0x98, 0xAF, 0x99, 0xAF, 0x9A, /* 0x8C-0x8F */ + 0xC4, 0xB3, 0xC4, 0xB4, 0xAF, 0x9B, 0xAF, 0x9C, /* 0x90-0x93 */ + 0xC4, 0xB5, 0xAF, 0x9D, 0xAF, 0x9E, 0xAF, 0x9F, /* 0x94-0x97 */ + 0xC4, 0xB6, 0xAF, 0xA0, 0xB0, 0x41, 0xB0, 0x42, /* 0x98-0x9B */ + 0xB0, 0x43, 0xB0, 0x44, 0xB0, 0x45, 0xB0, 0x46, /* 0x9C-0x9F */ + 0xC4, 0xB7, 0xC4, 0xB8, 0xB0, 0x47, 0xC4, 0xB9, /* 0xA0-0xA3 */ + 0xC4, 0xBA, 0xC4, 0xBB, 0xB0, 0x48, 0xB0, 0x49, /* 0xA4-0xA7 */ + 0xB0, 0x4A, 0xB0, 0x4B, 0xB0, 0x4C, 0xB0, 0x4D, /* 0xA8-0xAB */ + 0xC4, 0xBC, 0xC4, 0xBD, 0xB0, 0x4E, 0xB0, 0x4F, /* 0xAC-0xAF */ + 0xB0, 0x50, 0xB0, 0x51, 0xB0, 0x52, 0xB0, 0x53, /* 0xB0-0xB3 */ + 0xB0, 0x54, 0xB0, 0x55, 0xB0, 0x56, 0xB0, 0x57, /* 0xB4-0xB7 */ + 0xB0, 0x58, 0xB0, 0x59, 0xB0, 0x5A, 0xB0, 0x61, /* 0xB8-0xBB */ + 0xB0, 0x62, 0xB0, 0x63, 0xB0, 0x64, 0xB0, 0x65, /* 0xBC-0xBF */ + 0xB0, 0x66, 0xC4, 0xBE, 0xB0, 0x67, 0xB0, 0x68, /* 0xC0-0xC3 */ + 0xB0, 0x69, 0xB0, 0x6A, 0xB0, 0x6B, 0xB0, 0x6C, /* 0xC4-0xC7 */ + 0xB0, 0x6D, 0xB0, 0x6E, 0xB0, 0x6F, 0xB0, 0x70, /* 0xC8-0xCB */ + 0xB0, 0x71, 0xB0, 0x72, 0xB0, 0x73, 0xB0, 0x74, /* 0xCC-0xCF */ + 0xB0, 0x75, 0xB0, 0x76, 0xB0, 0x77, 0xB0, 0x78, /* 0xD0-0xD3 */ + 0xB0, 0x79, 0xB0, 0x7A, 0xB0, 0x81, 0xB0, 0x82, /* 0xD4-0xD7 */ + 0xB0, 0x83, 0xB0, 0x84, 0xB0, 0x85, 0xB0, 0x86, /* 0xD8-0xDB */ + 0xB0, 0x87, 0xB0, 0x88, 0xB0, 0x89, 0xB0, 0x8A, /* 0xDC-0xDF */ + 0xB0, 0x8B, 0xB0, 0x8C, 0xB0, 0x8D, 0xB0, 0x8E, /* 0xE0-0xE3 */ + 0xC4, 0xBF, 0xC4, 0xC0, 0xB0, 0x8F, 0xB0, 0x90, /* 0xE4-0xE7 */ + 0xC4, 0xC1, 0xB0, 0x91, 0xB0, 0x92, 0xC4, 0xC2, /* 0xE8-0xEB */ + 0xC4, 0xC3, 0xB0, 0x93, 0xB0, 0x94, 0xB0, 0x95, /* 0xEC-0xEF */ + 0xB0, 0x96, 0xB0, 0x97, 0xB0, 0x98, 0xB0, 0x99, /* 0xF0-0xF3 */ + 0xC4, 0xC4, 0xC4, 0xC5, 0xB0, 0x9A, 0xC4, 0xC6, /* 0xF4-0xF7 */ + 0xC4, 0xC7, 0xC4, 0xC8, 0xB0, 0x9B, 0xB0, 0x9C, /* 0xF8-0xFB */ + 0xB0, 0x9D, 0xB0, 0x9E, 0xB0, 0x9F, 0xB0, 0xA0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_CF[512] = { + 0xC4, 0xC9, 0xC4, 0xCA, 0xB1, 0x41, 0xB1, 0x42, /* 0x00-0x03 */ + 0xC4, 0xCB, 0xB1, 0x43, 0xB1, 0x44, 0xB1, 0x45, /* 0x04-0x07 */ + 0xC4, 0xCC, 0xB1, 0x46, 0xB1, 0x47, 0xB1, 0x48, /* 0x08-0x0B */ + 0xB1, 0x49, 0xB1, 0x4A, 0xB1, 0x4B, 0xB1, 0x4C, /* 0x0C-0x0F */ + 0xC4, 0xCD, 0xC4, 0xCE, 0xB1, 0x4D, 0xC4, 0xCF, /* 0x10-0x13 */ + 0xB1, 0x4E, 0xC4, 0xD0, 0xB1, 0x4F, 0xB1, 0x50, /* 0x14-0x17 */ + 0xB1, 0x51, 0xB1, 0x52, 0xB1, 0x53, 0xB1, 0x54, /* 0x18-0x1B */ + 0xC4, 0xD1, 0xB1, 0x55, 0xB1, 0x56, 0xB1, 0x57, /* 0x1C-0x1F */ + 0xC4, 0xD2, 0xB1, 0x58, 0xB1, 0x59, 0xB1, 0x5A, /* 0x20-0x23 */ + 0xC4, 0xD3, 0xB1, 0x61, 0xB1, 0x62, 0xB1, 0x63, /* 0x24-0x27 */ + 0xB1, 0x64, 0xB1, 0x65, 0xB1, 0x66, 0xB1, 0x67, /* 0x28-0x2B */ + 0xC4, 0xD4, 0xC4, 0xD5, 0xB1, 0x68, 0xC4, 0xD6, /* 0x2C-0x2F */ + 0xC4, 0xD7, 0xC4, 0xD8, 0xB1, 0x69, 0xB1, 0x6A, /* 0x30-0x33 */ + 0xB1, 0x6B, 0xB1, 0x6C, 0xB1, 0x6D, 0xB1, 0x6E, /* 0x34-0x37 */ + 0xC4, 0xD9, 0xB1, 0x6F, 0xB1, 0x70, 0xB1, 0x71, /* 0x38-0x3B */ + 0xB1, 0x72, 0xB1, 0x73, 0xB1, 0x74, 0xB1, 0x75, /* 0x3C-0x3F */ + 0xB1, 0x76, 0xB1, 0x77, 0xB1, 0x78, 0xB1, 0x79, /* 0x40-0x43 */ + 0xB1, 0x7A, 0xB1, 0x81, 0xB1, 0x82, 0xB1, 0x83, /* 0x44-0x47 */ + 0xB1, 0x84, 0xB1, 0x85, 0xB1, 0x86, 0xB1, 0x87, /* 0x48-0x4B */ + 0xB1, 0x88, 0xB1, 0x89, 0xB1, 0x8A, 0xB1, 0x8B, /* 0x4C-0x4F */ + 0xB1, 0x8C, 0xB1, 0x8D, 0xB1, 0x8E, 0xB1, 0x8F, /* 0x50-0x53 */ + 0xC4, 0xDA, 0xC4, 0xDB, 0xB1, 0x90, 0xB1, 0x91, /* 0x54-0x57 */ + 0xC4, 0xDC, 0xB1, 0x92, 0xB1, 0x93, 0xB1, 0x94, /* 0x58-0x5B */ + 0xC4, 0xDD, 0xB1, 0x95, 0xB1, 0x96, 0xB1, 0x97, /* 0x5C-0x5F */ + 0xB1, 0x98, 0xB1, 0x99, 0xB1, 0x9A, 0xB1, 0x9B, /* 0x60-0x63 */ + 0xC4, 0xDE, 0xC4, 0xDF, 0xB1, 0x9C, 0xC4, 0xE0, /* 0x64-0x67 */ + 0xB1, 0x9D, 0xC4, 0xE1, 0xB1, 0x9E, 0xB1, 0x9F, /* 0x68-0x6B */ + 0xB1, 0xA0, 0xB2, 0x41, 0xB2, 0x42, 0xB2, 0x43, /* 0x6C-0x6F */ + 0xC4, 0xE2, 0xC4, 0xE3, 0xB2, 0x44, 0xB2, 0x45, /* 0x70-0x73 */ + 0xC4, 0xE4, 0xB2, 0x46, 0xB2, 0x47, 0xB2, 0x48, /* 0x74-0x77 */ + 0xC4, 0xE5, 0xB2, 0x49, 0xB2, 0x4A, 0xB2, 0x4B, /* 0x78-0x7B */ + 0xB2, 0x4C, 0xB2, 0x4D, 0xB2, 0x4E, 0xB2, 0x4F, /* 0x7C-0x7F */ + + 0xC4, 0xE6, 0xB2, 0x50, 0xB2, 0x51, 0xB2, 0x52, /* 0x80-0x83 */ + 0xB2, 0x53, 0xC4, 0xE7, 0xB2, 0x54, 0xB2, 0x55, /* 0x84-0x87 */ + 0xB2, 0x56, 0xB2, 0x57, 0xB2, 0x58, 0xB2, 0x59, /* 0x88-0x8B */ + 0xC4, 0xE8, 0xB2, 0x5A, 0xB2, 0x61, 0xB2, 0x62, /* 0x8C-0x8F */ + 0xB2, 0x63, 0xB2, 0x64, 0xB2, 0x65, 0xB2, 0x66, /* 0x90-0x93 */ + 0xB2, 0x67, 0xB2, 0x68, 0xB2, 0x69, 0xB2, 0x6A, /* 0x94-0x97 */ + 0xB2, 0x6B, 0xB2, 0x6C, 0xB2, 0x6D, 0xB2, 0x6E, /* 0x98-0x9B */ + 0xB2, 0x6F, 0xB2, 0x70, 0xB2, 0x71, 0xB2, 0x72, /* 0x9C-0x9F */ + 0xB2, 0x73, 0xC4, 0xE9, 0xB2, 0x74, 0xB2, 0x75, /* 0xA0-0xA3 */ + 0xB2, 0x76, 0xB2, 0x77, 0xB2, 0x78, 0xB2, 0x79, /* 0xA4-0xA7 */ + 0xC4, 0xEA, 0xB2, 0x7A, 0xB2, 0x81, 0xB2, 0x82, /* 0xA8-0xAB */ + 0xB2, 0x83, 0xB2, 0x84, 0xB2, 0x85, 0xB2, 0x86, /* 0xAC-0xAF */ + 0xC4, 0xEB, 0xB2, 0x87, 0xB2, 0x88, 0xB2, 0x89, /* 0xB0-0xB3 */ + 0xB2, 0x8A, 0xB2, 0x8B, 0xB2, 0x8C, 0xB2, 0x8D, /* 0xB4-0xB7 */ + 0xB2, 0x8E, 0xB2, 0x8F, 0xB2, 0x90, 0xB2, 0x91, /* 0xB8-0xBB */ + 0xB2, 0x92, 0xB2, 0x93, 0xB2, 0x94, 0xB2, 0x95, /* 0xBC-0xBF */ + 0xB2, 0x96, 0xB2, 0x97, 0xB2, 0x98, 0xB2, 0x99, /* 0xC0-0xC3 */ + 0xC4, 0xEC, 0xB2, 0x9A, 0xB2, 0x9B, 0xB2, 0x9C, /* 0xC4-0xC7 */ + 0xB2, 0x9D, 0xB2, 0x9E, 0xB2, 0x9F, 0xB2, 0xA0, /* 0xC8-0xCB */ + 0xB3, 0x41, 0xB3, 0x42, 0xB3, 0x43, 0xB3, 0x44, /* 0xCC-0xCF */ + 0xB3, 0x45, 0xB3, 0x46, 0xB3, 0x47, 0xB3, 0x48, /* 0xD0-0xD3 */ + 0xB3, 0x49, 0xB3, 0x4A, 0xB3, 0x4B, 0xB3, 0x4C, /* 0xD4-0xD7 */ + 0xB3, 0x4D, 0xB3, 0x4E, 0xB3, 0x4F, 0xB3, 0x50, /* 0xD8-0xDB */ + 0xB3, 0x51, 0xB3, 0x52, 0xB3, 0x53, 0xB3, 0x54, /* 0xDC-0xDF */ + 0xC4, 0xED, 0xC4, 0xEE, 0xB3, 0x55, 0xB3, 0x56, /* 0xE0-0xE3 */ + 0xC4, 0xEF, 0xB3, 0x57, 0xB3, 0x58, 0xB3, 0x59, /* 0xE4-0xE7 */ + 0xC4, 0xF0, 0xB3, 0x5A, 0xB3, 0x61, 0xB3, 0x62, /* 0xE8-0xEB */ + 0xB3, 0x63, 0xB3, 0x64, 0xB3, 0x65, 0xB3, 0x66, /* 0xEC-0xEF */ + 0xC4, 0xF1, 0xC4, 0xF2, 0xB3, 0x67, 0xC4, 0xF3, /* 0xF0-0xF3 */ + 0xB3, 0x68, 0xC4, 0xF4, 0xB3, 0x69, 0xB3, 0x6A, /* 0xF4-0xF7 */ + 0xB3, 0x6B, 0xB3, 0x6C, 0xB3, 0x6D, 0xB3, 0x6E, /* 0xF8-0xFB */ + 0xC4, 0xF5, 0xB3, 0x6F, 0xB3, 0x70, 0xB3, 0x71, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D0[512] = { + 0xC4, 0xF6, 0xB3, 0x72, 0xB3, 0x73, 0xB3, 0x74, /* 0x00-0x03 */ + 0xC4, 0xF7, 0xB3, 0x75, 0xB3, 0x76, 0xB3, 0x77, /* 0x04-0x07 */ + 0xB3, 0x78, 0xB3, 0x79, 0xB3, 0x7A, 0xB3, 0x81, /* 0x08-0x0B */ + 0xB3, 0x82, 0xB3, 0x83, 0xB3, 0x84, 0xB3, 0x85, /* 0x0C-0x0F */ + 0xB3, 0x86, 0xC4, 0xF8, 0xB3, 0x87, 0xB3, 0x88, /* 0x10-0x13 */ + 0xB3, 0x89, 0xB3, 0x8A, 0xB3, 0x8B, 0xB3, 0x8C, /* 0x14-0x17 */ + 0xC4, 0xF9, 0xB3, 0x8D, 0xB3, 0x8E, 0xB3, 0x8F, /* 0x18-0x1B */ + 0xB3, 0x90, 0xB3, 0x91, 0xB3, 0x92, 0xB3, 0x93, /* 0x1C-0x1F */ + 0xB3, 0x94, 0xB3, 0x95, 0xB3, 0x96, 0xB3, 0x97, /* 0x20-0x23 */ + 0xB3, 0x98, 0xB3, 0x99, 0xB3, 0x9A, 0xB3, 0x9B, /* 0x24-0x27 */ + 0xB3, 0x9C, 0xB3, 0x9D, 0xB3, 0x9E, 0xB3, 0x9F, /* 0x28-0x2B */ + 0xB3, 0xA0, 0xC4, 0xFA, 0xB4, 0x41, 0xB4, 0x42, /* 0x2C-0x2F */ + 0xB4, 0x43, 0xB4, 0x44, 0xB4, 0x45, 0xB4, 0x46, /* 0x30-0x33 */ + 0xC4, 0xFB, 0xC4, 0xFC, 0xB4, 0x47, 0xB4, 0x48, /* 0x34-0x37 */ + 0xC4, 0xFD, 0xB4, 0x49, 0xB4, 0x4A, 0xB4, 0x4B, /* 0x38-0x3B */ + 0xC4, 0xFE, 0xB4, 0x4C, 0xB4, 0x4D, 0xB4, 0x4E, /* 0x3C-0x3F */ + 0xB4, 0x4F, 0xB4, 0x50, 0xB4, 0x51, 0xB4, 0x52, /* 0x40-0x43 */ + 0xC5, 0xA1, 0xC5, 0xA2, 0xB4, 0x53, 0xC5, 0xA3, /* 0x44-0x47 */ + 0xB4, 0x54, 0xC5, 0xA4, 0xB4, 0x55, 0xB4, 0x56, /* 0x48-0x4B */ + 0xB4, 0x57, 0xB4, 0x58, 0xB4, 0x59, 0xB4, 0x5A, /* 0x4C-0x4F */ + 0xC5, 0xA5, 0xB4, 0x61, 0xB4, 0x62, 0xB4, 0x63, /* 0x50-0x53 */ + 0xC5, 0xA6, 0xB4, 0x64, 0xB4, 0x65, 0xB4, 0x66, /* 0x54-0x57 */ + 0xC5, 0xA7, 0xB4, 0x67, 0xB4, 0x68, 0xB4, 0x69, /* 0x58-0x5B */ + 0xB4, 0x6A, 0xB4, 0x6B, 0xB4, 0x6C, 0xB4, 0x6D, /* 0x5C-0x5F */ + 0xC5, 0xA8, 0xB4, 0x6E, 0xB4, 0x6F, 0xB4, 0x70, /* 0x60-0x63 */ + 0xB4, 0x71, 0xB4, 0x72, 0xB4, 0x73, 0xB4, 0x74, /* 0x64-0x67 */ + 0xB4, 0x75, 0xB4, 0x76, 0xB4, 0x77, 0xB4, 0x78, /* 0x68-0x6B */ + 0xC5, 0xA9, 0xC5, 0xAA, 0xB4, 0x79, 0xB4, 0x7A, /* 0x6C-0x6F */ + 0xC5, 0xAB, 0xB4, 0x81, 0xB4, 0x82, 0xB4, 0x83, /* 0x70-0x73 */ + 0xC5, 0xAC, 0xB4, 0x84, 0xB4, 0x85, 0xB4, 0x86, /* 0x74-0x77 */ + 0xB4, 0x87, 0xB4, 0x88, 0xB4, 0x89, 0xB4, 0x8A, /* 0x78-0x7B */ + 0xC5, 0xAD, 0xC5, 0xAE, 0xB4, 0x8B, 0xB4, 0x8C, /* 0x7C-0x7F */ + + 0xB4, 0x8D, 0xC5, 0xAF, 0xB4, 0x8E, 0xB4, 0x8F, /* 0x80-0x83 */ + 0xB4, 0x90, 0xB4, 0x91, 0xB4, 0x92, 0xB4, 0x93, /* 0x84-0x87 */ + 0xB4, 0x94, 0xB4, 0x95, 0xB4, 0x96, 0xB4, 0x97, /* 0x88-0x8B */ + 0xB4, 0x98, 0xB4, 0x99, 0xB4, 0x9A, 0xB4, 0x9B, /* 0x8C-0x8F */ + 0xB4, 0x9C, 0xB4, 0x9D, 0xB4, 0x9E, 0xB4, 0x9F, /* 0x90-0x93 */ + 0xB4, 0xA0, 0xB5, 0x41, 0xB5, 0x42, 0xB5, 0x43, /* 0x94-0x97 */ + 0xB5, 0x44, 0xB5, 0x45, 0xB5, 0x46, 0xB5, 0x47, /* 0x98-0x9B */ + 0xB5, 0x48, 0xB5, 0x49, 0xB5, 0x4A, 0xB5, 0x4B, /* 0x9C-0x9F */ + 0xB5, 0x4C, 0xB5, 0x4D, 0xB5, 0x4E, 0xB5, 0x4F, /* 0xA0-0xA3 */ + 0xC5, 0xB0, 0xC5, 0xB1, 0xB5, 0x50, 0xB5, 0x51, /* 0xA4-0xA7 */ + 0xC5, 0xB2, 0xB5, 0x52, 0xB5, 0x53, 0xB5, 0x54, /* 0xA8-0xAB */ + 0xC5, 0xB3, 0xB5, 0x55, 0xB5, 0x56, 0xB5, 0x57, /* 0xAC-0xAF */ + 0xB5, 0x58, 0xB5, 0x59, 0xB5, 0x5A, 0xB5, 0x61, /* 0xB0-0xB3 */ + 0xC5, 0xB4, 0xC5, 0xB5, 0xB5, 0x62, 0xC5, 0xB6, /* 0xB4-0xB7 */ + 0xB5, 0x63, 0xC5, 0xB7, 0xB5, 0x64, 0xB5, 0x65, /* 0xB8-0xBB */ + 0xB5, 0x66, 0xB5, 0x67, 0xB5, 0x68, 0xB5, 0x69, /* 0xBC-0xBF */ + 0xC5, 0xB8, 0xC5, 0xB9, 0xB5, 0x6A, 0xB5, 0x6B, /* 0xC0-0xC3 */ + 0xC5, 0xBA, 0xB5, 0x6C, 0xB5, 0x6D, 0xB5, 0x6E, /* 0xC4-0xC7 */ + 0xC5, 0xBB, 0xC5, 0xBC, 0xB5, 0x6F, 0xB5, 0x70, /* 0xC8-0xCB */ + 0xB5, 0x71, 0xB5, 0x72, 0xB5, 0x73, 0xB5, 0x74, /* 0xCC-0xCF */ + 0xC5, 0xBD, 0xC5, 0xBE, 0xB5, 0x75, 0xC5, 0xBF, /* 0xD0-0xD3 */ + 0xC5, 0xC0, 0xC5, 0xC1, 0xB5, 0x76, 0xB5, 0x77, /* 0xD4-0xD7 */ + 0xB5, 0x78, 0xB5, 0x79, 0xB5, 0x7A, 0xB5, 0x81, /* 0xD8-0xDB */ + 0xC5, 0xC2, 0xC5, 0xC3, 0xB5, 0x82, 0xB5, 0x83, /* 0xDC-0xDF */ + 0xC5, 0xC4, 0xB5, 0x84, 0xB5, 0x85, 0xB5, 0x86, /* 0xE0-0xE3 */ + 0xC5, 0xC5, 0xB5, 0x87, 0xB5, 0x88, 0xB5, 0x89, /* 0xE4-0xE7 */ + 0xB5, 0x8A, 0xB5, 0x8B, 0xB5, 0x8C, 0xB5, 0x8D, /* 0xE8-0xEB */ + 0xC5, 0xC6, 0xC5, 0xC7, 0xB5, 0x8E, 0xC5, 0xC8, /* 0xEC-0xEF */ + 0xC5, 0xC9, 0xC5, 0xCA, 0xB5, 0x8F, 0xB5, 0x90, /* 0xF0-0xF3 */ + 0xB5, 0x91, 0xB5, 0x92, 0xB5, 0x93, 0xB5, 0x94, /* 0xF4-0xF7 */ + 0xC5, 0xCB, 0xB5, 0x95, 0xB5, 0x96, 0xB5, 0x97, /* 0xF8-0xFB */ + 0xB5, 0x98, 0xB5, 0x99, 0xB5, 0x9A, 0xB5, 0x9B, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D1[512] = { + 0xB5, 0x9C, 0xB5, 0x9D, 0xB5, 0x9E, 0xB5, 0x9F, /* 0x00-0x03 */ + 0xB5, 0xA0, 0xB6, 0x41, 0xB6, 0x42, 0xB6, 0x43, /* 0x04-0x07 */ + 0xB6, 0x44, 0xB6, 0x45, 0xB6, 0x46, 0xB6, 0x47, /* 0x08-0x0B */ + 0xB6, 0x48, 0xC5, 0xCC, 0xB6, 0x49, 0xB6, 0x4A, /* 0x0C-0x0F */ + 0xB6, 0x4B, 0xB6, 0x4C, 0xB6, 0x4D, 0xB6, 0x4E, /* 0x10-0x13 */ + 0xB6, 0x4F, 0xB6, 0x50, 0xB6, 0x51, 0xB6, 0x52, /* 0x14-0x17 */ + 0xB6, 0x53, 0xB6, 0x54, 0xB6, 0x55, 0xB6, 0x56, /* 0x18-0x1B */ + 0xB6, 0x57, 0xB6, 0x58, 0xB6, 0x59, 0xB6, 0x5A, /* 0x1C-0x1F */ + 0xB6, 0x61, 0xB6, 0x62, 0xB6, 0x63, 0xB6, 0x64, /* 0x20-0x23 */ + 0xB6, 0x65, 0xB6, 0x66, 0xB6, 0x67, 0xB6, 0x68, /* 0x24-0x27 */ + 0xB6, 0x69, 0xB6, 0x6A, 0xB6, 0x6B, 0xB6, 0x6C, /* 0x28-0x2B */ + 0xB6, 0x6D, 0xB6, 0x6E, 0xB6, 0x6F, 0xB6, 0x70, /* 0x2C-0x2F */ + 0xC5, 0xCD, 0xC5, 0xCE, 0xB6, 0x71, 0xB6, 0x72, /* 0x30-0x33 */ + 0xC5, 0xCF, 0xB6, 0x73, 0xB6, 0x74, 0xB6, 0x75, /* 0x34-0x37 */ + 0xC5, 0xD0, 0xB6, 0x76, 0xC5, 0xD1, 0xB6, 0x77, /* 0x38-0x3B */ + 0xB6, 0x78, 0xB6, 0x79, 0xB6, 0x7A, 0xB6, 0x81, /* 0x3C-0x3F */ + 0xC5, 0xD2, 0xC5, 0xD3, 0xB6, 0x82, 0xC5, 0xD4, /* 0x40-0x43 */ + 0xC5, 0xD5, 0xC5, 0xD6, 0xB6, 0x83, 0xB6, 0x84, /* 0x44-0x47 */ + 0xB6, 0x85, 0xB6, 0x86, 0xB6, 0x87, 0xB6, 0x88, /* 0x48-0x4B */ + 0xC5, 0xD7, 0xC5, 0xD8, 0xB6, 0x89, 0xB6, 0x8A, /* 0x4C-0x4F */ + 0xC5, 0xD9, 0xB6, 0x8B, 0xB6, 0x8C, 0xB6, 0x8D, /* 0x50-0x53 */ + 0xC5, 0xDA, 0xB6, 0x8E, 0xB6, 0x8F, 0xB6, 0x90, /* 0x54-0x57 */ + 0xB6, 0x91, 0xB6, 0x92, 0xB6, 0x93, 0xB6, 0x94, /* 0x58-0x5B */ + 0xC5, 0xDB, 0xC5, 0xDC, 0xB6, 0x95, 0xC5, 0xDD, /* 0x5C-0x5F */ + 0xB6, 0x96, 0xC5, 0xDE, 0xB6, 0x97, 0xB6, 0x98, /* 0x60-0x63 */ + 0xB6, 0x99, 0xB6, 0x9A, 0xB6, 0x9B, 0xB6, 0x9C, /* 0x64-0x67 */ + 0xC5, 0xDF, 0xB6, 0x9D, 0xB6, 0x9E, 0xB6, 0x9F, /* 0x68-0x6B */ + 0xC5, 0xE0, 0xB6, 0xA0, 0xB7, 0x41, 0xB7, 0x42, /* 0x6C-0x6F */ + 0xB7, 0x43, 0xB7, 0x44, 0xB7, 0x45, 0xB7, 0x46, /* 0x70-0x73 */ + 0xB7, 0x47, 0xB7, 0x48, 0xB7, 0x49, 0xB7, 0x4A, /* 0x74-0x77 */ + 0xB7, 0x4B, 0xB7, 0x4C, 0xB7, 0x4D, 0xB7, 0x4E, /* 0x78-0x7B */ + 0xC5, 0xE1, 0xB7, 0x4F, 0xB7, 0x50, 0xB7, 0x51, /* 0x7C-0x7F */ + + 0xB7, 0x52, 0xB7, 0x53, 0xB7, 0x54, 0xB7, 0x55, /* 0x80-0x83 */ + 0xC5, 0xE2, 0xB7, 0x56, 0xB7, 0x57, 0xB7, 0x58, /* 0x84-0x87 */ + 0xC5, 0xE3, 0xB7, 0x59, 0xB7, 0x5A, 0xB7, 0x61, /* 0x88-0x8B */ + 0xB7, 0x62, 0xB7, 0x63, 0xB7, 0x64, 0xB7, 0x65, /* 0x8C-0x8F */ + 0xB7, 0x66, 0xB7, 0x67, 0xB7, 0x68, 0xB7, 0x69, /* 0x90-0x93 */ + 0xB7, 0x6A, 0xB7, 0x6B, 0xB7, 0x6C, 0xB7, 0x6D, /* 0x94-0x97 */ + 0xB7, 0x6E, 0xB7, 0x6F, 0xB7, 0x70, 0xB7, 0x71, /* 0x98-0x9B */ + 0xB7, 0x72, 0xB7, 0x73, 0xB7, 0x74, 0xB7, 0x75, /* 0x9C-0x9F */ + 0xC5, 0xE4, 0xC5, 0xE5, 0xB7, 0x76, 0xB7, 0x77, /* 0xA0-0xA3 */ + 0xC5, 0xE6, 0xB7, 0x78, 0xB7, 0x79, 0xB7, 0x7A, /* 0xA4-0xA7 */ + 0xC5, 0xE7, 0xB7, 0x81, 0xB7, 0x82, 0xB7, 0x83, /* 0xA8-0xAB */ + 0xB7, 0x84, 0xB7, 0x85, 0xB7, 0x86, 0xB7, 0x87, /* 0xAC-0xAF */ + 0xC5, 0xE8, 0xC5, 0xE9, 0xB7, 0x88, 0xC5, 0xEA, /* 0xB0-0xB3 */ + 0xB7, 0x89, 0xC5, 0xEB, 0xB7, 0x8A, 0xB7, 0x8B, /* 0xB4-0xB7 */ + 0xB7, 0x8C, 0xB7, 0x8D, 0xC5, 0xEC, 0xB7, 0x8E, /* 0xB8-0xBB */ + 0xC5, 0xED, 0xB7, 0x8F, 0xB7, 0x90, 0xB7, 0x91, /* 0xBC-0xBF */ + 0xC5, 0xEE, 0xB7, 0x92, 0xB7, 0x93, 0xB7, 0x94, /* 0xC0-0xC3 */ + 0xB7, 0x95, 0xB7, 0x96, 0xB7, 0x97, 0xB7, 0x98, /* 0xC4-0xC7 */ + 0xB7, 0x99, 0xB7, 0x9A, 0xB7, 0x9B, 0xB7, 0x9C, /* 0xC8-0xCB */ + 0xB7, 0x9D, 0xB7, 0x9E, 0xB7, 0x9F, 0xB7, 0xA0, /* 0xCC-0xCF */ + 0xB8, 0x41, 0xB8, 0x42, 0xB8, 0x43, 0xB8, 0x44, /* 0xD0-0xD3 */ + 0xB8, 0x45, 0xB8, 0x46, 0xB8, 0x47, 0xB8, 0x48, /* 0xD4-0xD7 */ + 0xC5, 0xEF, 0xB8, 0x49, 0xB8, 0x4A, 0xB8, 0x4B, /* 0xD8-0xDB */ + 0xB8, 0x4C, 0xB8, 0x4D, 0xB8, 0x4E, 0xB8, 0x4F, /* 0xDC-0xDF */ + 0xB8, 0x50, 0xB8, 0x51, 0xB8, 0x52, 0xB8, 0x53, /* 0xE0-0xE3 */ + 0xB8, 0x54, 0xB8, 0x55, 0xB8, 0x56, 0xB8, 0x57, /* 0xE4-0xE7 */ + 0xB8, 0x58, 0xB8, 0x59, 0xB8, 0x5A, 0xB8, 0x61, /* 0xE8-0xEB */ + 0xB8, 0x62, 0xB8, 0x63, 0xB8, 0x64, 0xB8, 0x65, /* 0xEC-0xEF */ + 0xB8, 0x66, 0xB8, 0x67, 0xB8, 0x68, 0xB8, 0x69, /* 0xF0-0xF3 */ + 0xC5, 0xF0, 0xB8, 0x6A, 0xB8, 0x6B, 0xB8, 0x6C, /* 0xF4-0xF7 */ + 0xC5, 0xF1, 0xB8, 0x6D, 0xB8, 0x6E, 0xB8, 0x6F, /* 0xF8-0xFB */ + 0xB8, 0x70, 0xB8, 0x71, 0xB8, 0x72, 0xB8, 0x73, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D2[512] = { + 0xB8, 0x74, 0xB8, 0x75, 0xB8, 0x76, 0xB8, 0x77, /* 0x00-0x03 */ + 0xB8, 0x78, 0xB8, 0x79, 0xB8, 0x7A, 0xC5, 0xF2, /* 0x04-0x07 */ + 0xB8, 0x81, 0xC5, 0xF3, 0xB8, 0x82, 0xB8, 0x83, /* 0x08-0x0B */ + 0xB8, 0x84, 0xB8, 0x85, 0xB8, 0x86, 0xB8, 0x87, /* 0x0C-0x0F */ + 0xC5, 0xF4, 0xB8, 0x88, 0xB8, 0x89, 0xB8, 0x8A, /* 0x10-0x13 */ + 0xB8, 0x8B, 0xB8, 0x8C, 0xB8, 0x8D, 0xB8, 0x8E, /* 0x14-0x17 */ + 0xB8, 0x8F, 0xB8, 0x90, 0xB8, 0x91, 0xB8, 0x92, /* 0x18-0x1B */ + 0xB8, 0x93, 0xB8, 0x94, 0xB8, 0x95, 0xB8, 0x96, /* 0x1C-0x1F */ + 0xB8, 0x97, 0xB8, 0x98, 0xB8, 0x99, 0xB8, 0x9A, /* 0x20-0x23 */ + 0xB8, 0x9B, 0xB8, 0x9C, 0xB8, 0x9D, 0xB8, 0x9E, /* 0x24-0x27 */ + 0xB8, 0x9F, 0xB8, 0xA0, 0xB9, 0x41, 0xB9, 0x42, /* 0x28-0x2B */ + 0xC5, 0xF5, 0xC5, 0xF6, 0xB9, 0x43, 0xB9, 0x44, /* 0x2C-0x2F */ + 0xC5, 0xF7, 0xB9, 0x45, 0xB9, 0x46, 0xB9, 0x47, /* 0x30-0x33 */ + 0xC5, 0xF8, 0xB9, 0x48, 0xB9, 0x49, 0xB9, 0x4A, /* 0x34-0x37 */ + 0xB9, 0x4B, 0xB9, 0x4C, 0xB9, 0x4D, 0xB9, 0x4E, /* 0x38-0x3B */ + 0xC5, 0xF9, 0xC5, 0xFA, 0xB9, 0x4F, 0xC5, 0xFB, /* 0x3C-0x3F */ + 0xB9, 0x50, 0xC5, 0xFC, 0xB9, 0x51, 0xB9, 0x52, /* 0x40-0x43 */ + 0xB9, 0x53, 0xB9, 0x54, 0xB9, 0x55, 0xB9, 0x56, /* 0x44-0x47 */ + 0xC5, 0xFD, 0xB9, 0x57, 0xB9, 0x58, 0xB9, 0x59, /* 0x48-0x4B */ + 0xB9, 0x5A, 0xB9, 0x61, 0xB9, 0x62, 0xB9, 0x63, /* 0x4C-0x4F */ + 0xB9, 0x64, 0xB9, 0x65, 0xB9, 0x66, 0xB9, 0x67, /* 0x50-0x53 */ + 0xB9, 0x68, 0xB9, 0x69, 0xB9, 0x6A, 0xB9, 0x6B, /* 0x54-0x57 */ + 0xB9, 0x6C, 0xB9, 0x6D, 0xB9, 0x6E, 0xB9, 0x6F, /* 0x58-0x5B */ + 0xC5, 0xFE, 0xB9, 0x70, 0xB9, 0x71, 0xB9, 0x72, /* 0x5C-0x5F */ + 0xB9, 0x73, 0xB9, 0x74, 0xB9, 0x75, 0xB9, 0x76, /* 0x60-0x63 */ + 0xC6, 0xA1, 0xB9, 0x77, 0xB9, 0x78, 0xB9, 0x79, /* 0x64-0x67 */ + 0xB9, 0x7A, 0xB9, 0x81, 0xB9, 0x82, 0xB9, 0x83, /* 0x68-0x6B */ + 0xB9, 0x84, 0xB9, 0x85, 0xB9, 0x86, 0xB9, 0x87, /* 0x6C-0x6F */ + 0xB9, 0x88, 0xB9, 0x89, 0xB9, 0x8A, 0xB9, 0x8B, /* 0x70-0x73 */ + 0xB9, 0x8C, 0xB9, 0x8D, 0xB9, 0x8E, 0xB9, 0x8F, /* 0x74-0x77 */ + 0xB9, 0x90, 0xB9, 0x91, 0xB9, 0x92, 0xB9, 0x93, /* 0x78-0x7B */ + 0xB9, 0x94, 0xB9, 0x95, 0xB9, 0x96, 0xB9, 0x97, /* 0x7C-0x7F */ + + 0xC6, 0xA2, 0xC6, 0xA3, 0xB9, 0x98, 0xB9, 0x99, /* 0x80-0x83 */ + 0xC6, 0xA4, 0xB9, 0x9A, 0xB9, 0x9B, 0xB9, 0x9C, /* 0x84-0x87 */ + 0xC6, 0xA5, 0xB9, 0x9D, 0xB9, 0x9E, 0xB9, 0x9F, /* 0x88-0x8B */ + 0xB9, 0xA0, 0xBA, 0x41, 0xBA, 0x42, 0xBA, 0x43, /* 0x8C-0x8F */ + 0xC6, 0xA6, 0xC6, 0xA7, 0xBA, 0x44, 0xBA, 0x45, /* 0x90-0x93 */ + 0xBA, 0x46, 0xC6, 0xA8, 0xBA, 0x47, 0xBA, 0x48, /* 0x94-0x97 */ + 0xBA, 0x49, 0xBA, 0x4A, 0xBA, 0x4B, 0xBA, 0x4C, /* 0x98-0x9B */ + 0xC6, 0xA9, 0xBA, 0x4D, 0xBA, 0x4E, 0xBA, 0x4F, /* 0x9C-0x9F */ + 0xC6, 0xAA, 0xBA, 0x50, 0xBA, 0x51, 0xBA, 0x52, /* 0xA0-0xA3 */ + 0xC6, 0xAB, 0xBA, 0x53, 0xBA, 0x54, 0xBA, 0x55, /* 0xA4-0xA7 */ + 0xBA, 0x56, 0xBA, 0x57, 0xBA, 0x58, 0xBA, 0x59, /* 0xA8-0xAB */ + 0xC6, 0xAC, 0xBA, 0x5A, 0xBA, 0x61, 0xBA, 0x62, /* 0xAC-0xAF */ + 0xBA, 0x63, 0xC6, 0xAD, 0xBA, 0x64, 0xBA, 0x65, /* 0xB0-0xB3 */ + 0xBA, 0x66, 0xBA, 0x67, 0xBA, 0x68, 0xBA, 0x69, /* 0xB4-0xB7 */ + 0xC6, 0xAE, 0xC6, 0xAF, 0xBA, 0x6A, 0xBA, 0x6B, /* 0xB8-0xBB */ + 0xC6, 0xB0, 0xBA, 0x6C, 0xBA, 0x6D, 0xC6, 0xB1, /* 0xBC-0xBF */ + 0xC6, 0xB2, 0xBA, 0x6E, 0xC6, 0xB3, 0xBA, 0x6F, /* 0xC0-0xC3 */ + 0xBA, 0x70, 0xBA, 0x71, 0xBA, 0x72, 0xBA, 0x73, /* 0xC4-0xC7 */ + 0xC6, 0xB4, 0xC6, 0xB5, 0xBA, 0x74, 0xC6, 0xB6, /* 0xC8-0xCB */ + 0xBA, 0x75, 0xBA, 0x76, 0xBA, 0x77, 0xBA, 0x78, /* 0xCC-0xCF */ + 0xBA, 0x79, 0xBA, 0x7A, 0xBA, 0x81, 0xBA, 0x82, /* 0xD0-0xD3 */ + 0xC6, 0xB7, 0xBA, 0x83, 0xBA, 0x84, 0xBA, 0x85, /* 0xD4-0xD7 */ + 0xC6, 0xB8, 0xBA, 0x86, 0xBA, 0x87, 0xBA, 0x88, /* 0xD8-0xDB */ + 0xC6, 0xB9, 0xBA, 0x89, 0xBA, 0x8A, 0xBA, 0x8B, /* 0xDC-0xDF */ + 0xBA, 0x8C, 0xBA, 0x8D, 0xBA, 0x8E, 0xBA, 0x8F, /* 0xE0-0xE3 */ + 0xC6, 0xBA, 0xC6, 0xBB, 0xBA, 0x90, 0xBA, 0x91, /* 0xE4-0xE7 */ + 0xBA, 0x92, 0xBA, 0x93, 0xBA, 0x94, 0xBA, 0x95, /* 0xE8-0xEB */ + 0xBA, 0x96, 0xBA, 0x97, 0xBA, 0x98, 0xBA, 0x99, /* 0xEC-0xEF */ + 0xC6, 0xBC, 0xC6, 0xBD, 0xBA, 0x9A, 0xBA, 0x9B, /* 0xF0-0xF3 */ + 0xC6, 0xBE, 0xBA, 0x9C, 0xBA, 0x9D, 0xBA, 0x9E, /* 0xF4-0xF7 */ + 0xC6, 0xBF, 0xBA, 0x9F, 0xBA, 0xA0, 0xBB, 0x41, /* 0xF8-0xFB */ + 0xBB, 0x42, 0xBB, 0x43, 0xBB, 0x44, 0xBB, 0x45, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D3[512] = { + 0xC6, 0xC0, 0xC6, 0xC1, 0xBB, 0x46, 0xC6, 0xC2, /* 0x00-0x03 */ + 0xBB, 0x47, 0xC6, 0xC3, 0xBB, 0x48, 0xBB, 0x49, /* 0x04-0x07 */ + 0xBB, 0x4A, 0xBB, 0x4B, 0xBB, 0x4C, 0xBB, 0x4D, /* 0x08-0x0B */ + 0xC6, 0xC4, 0xC6, 0xC5, 0xC6, 0xC6, 0xBB, 0x4E, /* 0x0C-0x0F */ + 0xC6, 0xC7, 0xBB, 0x4F, 0xBB, 0x50, 0xBB, 0x51, /* 0x10-0x13 */ + 0xC6, 0xC8, 0xBB, 0x52, 0xC6, 0xC9, 0xBB, 0x53, /* 0x14-0x17 */ + 0xBB, 0x54, 0xBB, 0x55, 0xBB, 0x56, 0xBB, 0x57, /* 0x18-0x1B */ + 0xC6, 0xCA, 0xC6, 0xCB, 0xBB, 0x58, 0xC6, 0xCC, /* 0x1C-0x1F */ + 0xC6, 0xCD, 0xC6, 0xCE, 0xBB, 0x59, 0xBB, 0x5A, /* 0x20-0x23 */ + 0xBB, 0x61, 0xC6, 0xCF, 0xBB, 0x62, 0xBB, 0x63, /* 0x24-0x27 */ + 0xC6, 0xD0, 0xC6, 0xD1, 0xBB, 0x64, 0xBB, 0x65, /* 0x28-0x2B */ + 0xC6, 0xD2, 0xBB, 0x66, 0xBB, 0x67, 0xBB, 0x68, /* 0x2C-0x2F */ + 0xC6, 0xD3, 0xBB, 0x69, 0xBB, 0x6A, 0xBB, 0x6B, /* 0x30-0x33 */ + 0xBB, 0x6C, 0xBB, 0x6D, 0xBB, 0x6E, 0xBB, 0x6F, /* 0x34-0x37 */ + 0xC6, 0xD4, 0xC6, 0xD5, 0xBB, 0x70, 0xC6, 0xD6, /* 0x38-0x3B */ + 0xC6, 0xD7, 0xC6, 0xD8, 0xBB, 0x71, 0xBB, 0x72, /* 0x3C-0x3F */ + 0xBB, 0x73, 0xBB, 0x74, 0xBB, 0x75, 0xBB, 0x76, /* 0x40-0x43 */ + 0xC6, 0xD9, 0xC6, 0xDA, 0xBB, 0x77, 0xBB, 0x78, /* 0x44-0x47 */ + 0xBB, 0x79, 0xBB, 0x7A, 0xBB, 0x81, 0xBB, 0x82, /* 0x48-0x4B */ + 0xBB, 0x83, 0xBB, 0x84, 0xBB, 0x85, 0xBB, 0x86, /* 0x4C-0x4F */ + 0xBB, 0x87, 0xBB, 0x88, 0xBB, 0x89, 0xBB, 0x8A, /* 0x50-0x53 */ + 0xBB, 0x8B, 0xBB, 0x8C, 0xBB, 0x8D, 0xBB, 0x8E, /* 0x54-0x57 */ + 0xBB, 0x8F, 0xBB, 0x90, 0xBB, 0x91, 0xBB, 0x92, /* 0x58-0x5B */ + 0xBB, 0x93, 0xBB, 0x94, 0xBB, 0x95, 0xBB, 0x96, /* 0x5C-0x5F */ + 0xBB, 0x97, 0xBB, 0x98, 0xBB, 0x99, 0xBB, 0x9A, /* 0x60-0x63 */ + 0xBB, 0x9B, 0xBB, 0x9C, 0xBB, 0x9D, 0xBB, 0x9E, /* 0x64-0x67 */ + 0xBB, 0x9F, 0xBB, 0xA0, 0xBC, 0x41, 0xBC, 0x42, /* 0x68-0x6B */ + 0xBC, 0x43, 0xBC, 0x44, 0xBC, 0x45, 0xBC, 0x46, /* 0x6C-0x6F */ + 0xBC, 0x47, 0xBC, 0x48, 0xBC, 0x49, 0xBC, 0x4A, /* 0x70-0x73 */ + 0xBC, 0x4B, 0xBC, 0x4C, 0xBC, 0x4D, 0xBC, 0x4E, /* 0x74-0x77 */ + 0xBC, 0x4F, 0xBC, 0x50, 0xBC, 0x51, 0xBC, 0x52, /* 0x78-0x7B */ + 0xC6, 0xDB, 0xC6, 0xDC, 0xBC, 0x53, 0xBC, 0x54, /* 0x7C-0x7F */ + + 0xC6, 0xDD, 0xBC, 0x55, 0xBC, 0x56, 0xBC, 0x57, /* 0x80-0x83 */ + 0xC6, 0xDE, 0xBC, 0x58, 0xBC, 0x59, 0xBC, 0x5A, /* 0x84-0x87 */ + 0xBC, 0x61, 0xBC, 0x62, 0xBC, 0x63, 0xBC, 0x64, /* 0x88-0x8B */ + 0xC6, 0xDF, 0xC6, 0xE0, 0xBC, 0x65, 0xC6, 0xE1, /* 0x8C-0x8F */ + 0xC6, 0xE2, 0xC6, 0xE3, 0xBC, 0x66, 0xBC, 0x67, /* 0x90-0x93 */ + 0xBC, 0x68, 0xBC, 0x69, 0xBC, 0x6A, 0xBC, 0x6B, /* 0x94-0x97 */ + 0xC6, 0xE4, 0xC6, 0xE5, 0xBC, 0x6C, 0xBC, 0x6D, /* 0x98-0x9B */ + 0xC6, 0xE6, 0xBC, 0x6E, 0xBC, 0x6F, 0xBC, 0x70, /* 0x9C-0x9F */ + 0xC6, 0xE7, 0xBC, 0x71, 0xBC, 0x72, 0xBC, 0x73, /* 0xA0-0xA3 */ + 0xBC, 0x74, 0xBC, 0x75, 0xBC, 0x76, 0xBC, 0x77, /* 0xA4-0xA7 */ + 0xC6, 0xE8, 0xC6, 0xE9, 0xBC, 0x78, 0xC6, 0xEA, /* 0xA8-0xAB */ + 0xBC, 0x79, 0xC6, 0xEB, 0xBC, 0x7A, 0xBC, 0x81, /* 0xAC-0xAF */ + 0xBC, 0x82, 0xBC, 0x83, 0xBC, 0x84, 0xBC, 0x85, /* 0xB0-0xB3 */ + 0xC6, 0xEC, 0xBC, 0x86, 0xBC, 0x87, 0xBC, 0x88, /* 0xB4-0xB7 */ + 0xC6, 0xED, 0xBC, 0x89, 0xBC, 0x8A, 0xBC, 0x8B, /* 0xB8-0xBB */ + 0xC6, 0xEE, 0xBC, 0x8C, 0xBC, 0x8D, 0xBC, 0x8E, /* 0xBC-0xBF */ + 0xBC, 0x8F, 0xBC, 0x90, 0xBC, 0x91, 0xBC, 0x92, /* 0xC0-0xC3 */ + 0xC6, 0xEF, 0xC6, 0xF0, 0xBC, 0x93, 0xBC, 0x94, /* 0xC4-0xC7 */ + 0xC6, 0xF1, 0xC6, 0xF2, 0xBC, 0x95, 0xBC, 0x96, /* 0xC8-0xCB */ + 0xBC, 0x97, 0xBC, 0x98, 0xBC, 0x99, 0xBC, 0x9A, /* 0xCC-0xCF */ + 0xC6, 0xF3, 0xBC, 0x9B, 0xBC, 0x9C, 0xBC, 0x9D, /* 0xD0-0xD3 */ + 0xBC, 0x9E, 0xBC, 0x9F, 0xBC, 0xA0, 0xBD, 0x41, /* 0xD4-0xD7 */ + 0xC6, 0xF4, 0xBD, 0x42, 0xBD, 0x43, 0xBD, 0x44, /* 0xD8-0xDB */ + 0xBD, 0x45, 0xBD, 0x46, 0xBD, 0x47, 0xBD, 0x48, /* 0xDC-0xDF */ + 0xBD, 0x49, 0xC6, 0xF5, 0xBD, 0x4A, 0xC6, 0xF6, /* 0xE0-0xE3 */ + 0xBD, 0x4B, 0xBD, 0x4C, 0xBD, 0x4D, 0xBD, 0x4E, /* 0xE4-0xE7 */ + 0xBD, 0x4F, 0xBD, 0x50, 0xBD, 0x51, 0xBD, 0x52, /* 0xE8-0xEB */ + 0xC6, 0xF7, 0xC6, 0xF8, 0xBD, 0x53, 0xBD, 0x54, /* 0xEC-0xEF */ + 0xC6, 0xF9, 0xBD, 0x55, 0xBD, 0x56, 0xBD, 0x57, /* 0xF0-0xF3 */ + 0xC6, 0xFA, 0xBD, 0x58, 0xBD, 0x59, 0xBD, 0x5A, /* 0xF4-0xF7 */ + 0xBD, 0x61, 0xBD, 0x62, 0xBD, 0x63, 0xBD, 0x64, /* 0xF8-0xFB */ + 0xC6, 0xFB, 0xC6, 0xFC, 0xBD, 0x65, 0xC6, 0xFD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D4[512] = { + 0xBD, 0x66, 0xC6, 0xFE, 0xBD, 0x67, 0xBD, 0x68, /* 0x00-0x03 */ + 0xBD, 0x69, 0xBD, 0x6A, 0xBD, 0x6B, 0xBD, 0x6C, /* 0x04-0x07 */ + 0xC7, 0xA1, 0xBD, 0x6D, 0xBD, 0x6E, 0xBD, 0x6F, /* 0x08-0x0B */ + 0xBD, 0x70, 0xBD, 0x71, 0xBD, 0x72, 0xBD, 0x73, /* 0x0C-0x0F */ + 0xBD, 0x74, 0xBD, 0x75, 0xBD, 0x76, 0xBD, 0x77, /* 0x10-0x13 */ + 0xBD, 0x78, 0xBD, 0x79, 0xBD, 0x7A, 0xBD, 0x81, /* 0x14-0x17 */ + 0xBD, 0x82, 0xBD, 0x83, 0xBD, 0x84, 0xBD, 0x85, /* 0x18-0x1B */ + 0xBD, 0x86, 0xC7, 0xA2, 0xBD, 0x87, 0xBD, 0x88, /* 0x1C-0x1F */ + 0xBD, 0x89, 0xBD, 0x8A, 0xBD, 0x8B, 0xBD, 0x8C, /* 0x20-0x23 */ + 0xBD, 0x8D, 0xBD, 0x8E, 0xBD, 0x8F, 0xBD, 0x90, /* 0x24-0x27 */ + 0xBD, 0x91, 0xBD, 0x92, 0xBD, 0x93, 0xBD, 0x94, /* 0x28-0x2B */ + 0xBD, 0x95, 0xBD, 0x96, 0xBD, 0x97, 0xBD, 0x98, /* 0x2C-0x2F */ + 0xBD, 0x99, 0xBD, 0x9A, 0xBD, 0x9B, 0xBD, 0x9C, /* 0x30-0x33 */ + 0xBD, 0x9D, 0xBD, 0x9E, 0xBD, 0x9F, 0xBD, 0xA0, /* 0x34-0x37 */ + 0xBE, 0x41, 0xBE, 0x42, 0xBE, 0x43, 0xBE, 0x44, /* 0x38-0x3B */ + 0xBE, 0x45, 0xBE, 0x46, 0xBE, 0x47, 0xBE, 0x48, /* 0x3C-0x3F */ + 0xC7, 0xA3, 0xBE, 0x49, 0xBE, 0x4A, 0xBE, 0x4B, /* 0x40-0x43 */ + 0xC7, 0xA4, 0xBE, 0x4C, 0xBE, 0x4D, 0xBE, 0x4E, /* 0x44-0x47 */ + 0xBE, 0x4F, 0xBE, 0x50, 0xBE, 0x51, 0xBE, 0x52, /* 0x48-0x4B */ + 0xBE, 0x53, 0xBE, 0x54, 0xBE, 0x55, 0xBE, 0x56, /* 0x4C-0x4F */ + 0xBE, 0x57, 0xBE, 0x58, 0xBE, 0x59, 0xBE, 0x5A, /* 0x50-0x53 */ + 0xBE, 0x61, 0xBE, 0x62, 0xBE, 0x63, 0xBE, 0x64, /* 0x54-0x57 */ + 0xBE, 0x65, 0xBE, 0x66, 0xBE, 0x67, 0xBE, 0x68, /* 0x58-0x5B */ + 0xC7, 0xA5, 0xBE, 0x69, 0xBE, 0x6A, 0xBE, 0x6B, /* 0x5C-0x5F */ + 0xC7, 0xA6, 0xBE, 0x6C, 0xBE, 0x6D, 0xBE, 0x6E, /* 0x60-0x63 */ + 0xC7, 0xA7, 0xBE, 0x6F, 0xBE, 0x70, 0xBE, 0x71, /* 0x64-0x67 */ + 0xBE, 0x72, 0xBE, 0x73, 0xBE, 0x74, 0xBE, 0x75, /* 0x68-0x6B */ + 0xBE, 0x76, 0xC7, 0xA8, 0xBE, 0x77, 0xC7, 0xA9, /* 0x6C-0x6F */ + 0xBE, 0x78, 0xBE, 0x79, 0xBE, 0x7A, 0xBE, 0x81, /* 0x70-0x73 */ + 0xBE, 0x82, 0xBE, 0x83, 0xBE, 0x84, 0xBE, 0x85, /* 0x74-0x77 */ + 0xC7, 0xAA, 0xC7, 0xAB, 0xBE, 0x86, 0xBE, 0x87, /* 0x78-0x7B */ + 0xC7, 0xAC, 0xBE, 0x88, 0xBE, 0x89, 0xC7, 0xAD, /* 0x7C-0x7F */ + + 0xC7, 0xAE, 0xBE, 0x8A, 0xC7, 0xAF, 0xBE, 0x8B, /* 0x80-0x83 */ + 0xBE, 0x8C, 0xBE, 0x8D, 0xBE, 0x8E, 0xBE, 0x8F, /* 0x84-0x87 */ + 0xC7, 0xB0, 0xC7, 0xB1, 0xBE, 0x90, 0xC7, 0xB2, /* 0x88-0x8B */ + 0xBE, 0x91, 0xC7, 0xB3, 0xBE, 0x92, 0xBE, 0x93, /* 0x8C-0x8F */ + 0xBE, 0x94, 0xBE, 0x95, 0xBE, 0x96, 0xBE, 0x97, /* 0x90-0x93 */ + 0xC7, 0xB4, 0xBE, 0x98, 0xBE, 0x99, 0xBE, 0x9A, /* 0x94-0x97 */ + 0xBE, 0x9B, 0xBE, 0x9C, 0xBE, 0x9D, 0xBE, 0x9E, /* 0x98-0x9B */ + 0xBE, 0x9F, 0xBE, 0xA0, 0xBF, 0x41, 0xBF, 0x42, /* 0x9C-0x9F */ + 0xBF, 0x43, 0xBF, 0x44, 0xBF, 0x45, 0xBF, 0x46, /* 0xA0-0xA3 */ + 0xBF, 0x47, 0xBF, 0x48, 0xBF, 0x49, 0xBF, 0x4A, /* 0xA4-0xA7 */ + 0xBF, 0x4B, 0xC7, 0xB5, 0xBF, 0x4C, 0xBF, 0x4D, /* 0xA8-0xAB */ + 0xBF, 0x4E, 0xBF, 0x4F, 0xBF, 0x50, 0xBF, 0x51, /* 0xAC-0xAF */ + 0xBF, 0x52, 0xBF, 0x53, 0xBF, 0x54, 0xBF, 0x55, /* 0xB0-0xB3 */ + 0xBF, 0x56, 0xBF, 0x57, 0xBF, 0x58, 0xBF, 0x59, /* 0xB4-0xB7 */ + 0xBF, 0x5A, 0xBF, 0x61, 0xBF, 0x62, 0xBF, 0x63, /* 0xB8-0xBB */ + 0xBF, 0x64, 0xBF, 0x65, 0xBF, 0x66, 0xBF, 0x67, /* 0xBC-0xBF */ + 0xBF, 0x68, 0xBF, 0x69, 0xBF, 0x6A, 0xBF, 0x6B, /* 0xC0-0xC3 */ + 0xBF, 0x6C, 0xBF, 0x6D, 0xBF, 0x6E, 0xBF, 0x6F, /* 0xC4-0xC7 */ + 0xBF, 0x70, 0xBF, 0x71, 0xBF, 0x72, 0xBF, 0x73, /* 0xC8-0xCB */ + 0xC7, 0xB6, 0xBF, 0x74, 0xBF, 0x75, 0xBF, 0x76, /* 0xCC-0xCF */ + 0xC7, 0xB7, 0xBF, 0x77, 0xBF, 0x78, 0xBF, 0x79, /* 0xD0-0xD3 */ + 0xC7, 0xB8, 0xBF, 0x7A, 0xBF, 0x81, 0xBF, 0x82, /* 0xD4-0xD7 */ + 0xBF, 0x83, 0xBF, 0x84, 0xBF, 0x85, 0xBF, 0x86, /* 0xD8-0xDB */ + 0xC7, 0xB9, 0xBF, 0x87, 0xBF, 0x88, 0xC7, 0xBA, /* 0xDC-0xDF */ + 0xBF, 0x89, 0xBF, 0x8A, 0xBF, 0x8B, 0xBF, 0x8C, /* 0xE0-0xE3 */ + 0xBF, 0x8D, 0xBF, 0x8E, 0xBF, 0x8F, 0xBF, 0x90, /* 0xE4-0xE7 */ + 0xC7, 0xBB, 0xBF, 0x91, 0xBF, 0x92, 0xBF, 0x93, /* 0xE8-0xEB */ + 0xC7, 0xBC, 0xBF, 0x94, 0xBF, 0x95, 0xBF, 0x96, /* 0xEC-0xEF */ + 0xC7, 0xBD, 0xBF, 0x97, 0xBF, 0x98, 0xBF, 0x99, /* 0xF0-0xF3 */ + 0xBF, 0x9A, 0xBF, 0x9B, 0xBF, 0x9C, 0xBF, 0x9D, /* 0xF4-0xF7 */ + 0xC7, 0xBE, 0xBF, 0x9E, 0xBF, 0x9F, 0xC7, 0xBF, /* 0xF8-0xFB */ + 0xBF, 0xA0, 0xC7, 0xC0, 0xC0, 0x41, 0xC0, 0x42, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D5[512] = { + 0xC0, 0x43, 0xC0, 0x44, 0xC0, 0x45, 0xC0, 0x46, /* 0x00-0x03 */ + 0xC7, 0xC1, 0xC0, 0x47, 0xC0, 0x48, 0xC0, 0x49, /* 0x04-0x07 */ + 0xC7, 0xC2, 0xC0, 0x4A, 0xC0, 0x4B, 0xC0, 0x4C, /* 0x08-0x0B */ + 0xC7, 0xC3, 0xC0, 0x4D, 0xC0, 0x4E, 0xC0, 0x4F, /* 0x0C-0x0F */ + 0xC0, 0x50, 0xC0, 0x51, 0xC0, 0x52, 0xC0, 0x53, /* 0x10-0x13 */ + 0xC7, 0xC4, 0xC7, 0xC5, 0xC0, 0x54, 0xC7, 0xC6, /* 0x14-0x17 */ + 0xC0, 0x55, 0xC0, 0x56, 0xC0, 0x57, 0xC0, 0x58, /* 0x18-0x1B */ + 0xC0, 0x59, 0xC0, 0x5A, 0xC0, 0x61, 0xC0, 0x62, /* 0x1C-0x1F */ + 0xC0, 0x63, 0xC0, 0x64, 0xC0, 0x65, 0xC0, 0x66, /* 0x20-0x23 */ + 0xC0, 0x67, 0xC0, 0x68, 0xC0, 0x69, 0xC0, 0x6A, /* 0x24-0x27 */ + 0xC0, 0x6B, 0xC0, 0x6C, 0xC0, 0x6D, 0xC0, 0x6E, /* 0x28-0x2B */ + 0xC0, 0x6F, 0xC0, 0x70, 0xC0, 0x71, 0xC0, 0x72, /* 0x2C-0x2F */ + 0xC0, 0x73, 0xC0, 0x74, 0xC0, 0x75, 0xC0, 0x76, /* 0x30-0x33 */ + 0xC0, 0x77, 0xC0, 0x78, 0xC0, 0x79, 0xC0, 0x7A, /* 0x34-0x37 */ + 0xC0, 0x81, 0xC0, 0x82, 0xC0, 0x83, 0xC0, 0x84, /* 0x38-0x3B */ + 0xC7, 0xC7, 0xC7, 0xC8, 0xC0, 0x85, 0xC0, 0x86, /* 0x3C-0x3F */ + 0xC7, 0xC9, 0xC0, 0x87, 0xC0, 0x88, 0xC0, 0x89, /* 0x40-0x43 */ + 0xC7, 0xCA, 0xC0, 0x8A, 0xC0, 0x8B, 0xC0, 0x8C, /* 0x44-0x47 */ + 0xC0, 0x8D, 0xC0, 0x8E, 0xC0, 0x8F, 0xC0, 0x90, /* 0x48-0x4B */ + 0xC7, 0xCB, 0xC7, 0xCC, 0xC0, 0x91, 0xC7, 0xCD, /* 0x4C-0x4F */ + 0xC0, 0x92, 0xC7, 0xCE, 0xC0, 0x93, 0xC0, 0x94, /* 0x50-0x53 */ + 0xC0, 0x95, 0xC0, 0x96, 0xC0, 0x97, 0xC0, 0x98, /* 0x54-0x57 */ + 0xC7, 0xCF, 0xC7, 0xD0, 0xC0, 0x99, 0xC0, 0x9A, /* 0x58-0x5B */ + 0xC7, 0xD1, 0xC0, 0x9B, 0xC0, 0x9C, 0xC0, 0x9D, /* 0x5C-0x5F */ + 0xC7, 0xD2, 0xC0, 0x9E, 0xC0, 0x9F, 0xC0, 0xA0, /* 0x60-0x63 */ + 0xC1, 0x41, 0xC7, 0xD3, 0xC1, 0x42, 0xC1, 0x43, /* 0x64-0x67 */ + 0xC7, 0xD4, 0xC7, 0xD5, 0xC1, 0x44, 0xC7, 0xD6, /* 0x68-0x6B */ + 0xC1, 0x45, 0xC7, 0xD7, 0xC1, 0x46, 0xC1, 0x47, /* 0x6C-0x6F */ + 0xC1, 0x48, 0xC1, 0x49, 0xC1, 0x4A, 0xC1, 0x4B, /* 0x70-0x73 */ + 0xC7, 0xD8, 0xC7, 0xD9, 0xC1, 0x4C, 0xC1, 0x4D, /* 0x74-0x77 */ + 0xC7, 0xDA, 0xC1, 0x4E, 0xC1, 0x4F, 0xC1, 0x50, /* 0x78-0x7B */ + 0xC7, 0xDB, 0xC1, 0x51, 0xC1, 0x52, 0xC1, 0x53, /* 0x7C-0x7F */ + + 0xC1, 0x54, 0xC1, 0x55, 0xC1, 0x56, 0xC1, 0x57, /* 0x80-0x83 */ + 0xC7, 0xDC, 0xC7, 0xDD, 0xC1, 0x58, 0xC7, 0xDE, /* 0x84-0x87 */ + 0xC7, 0xDF, 0xC7, 0xE0, 0xC1, 0x59, 0xC1, 0x5A, /* 0x88-0x8B */ + 0xC1, 0x61, 0xC1, 0x62, 0xC1, 0x63, 0xC1, 0x64, /* 0x8C-0x8F */ + 0xC7, 0xE1, 0xC1, 0x65, 0xC1, 0x66, 0xC1, 0x67, /* 0x90-0x93 */ + 0xC1, 0x68, 0xC1, 0x69, 0xC1, 0x6A, 0xC1, 0x6B, /* 0x94-0x97 */ + 0xC1, 0x6C, 0xC1, 0x6D, 0xC1, 0x6E, 0xC1, 0x6F, /* 0x98-0x9B */ + 0xC1, 0x70, 0xC1, 0x71, 0xC1, 0x72, 0xC1, 0x73, /* 0x9C-0x9F */ + 0xC1, 0x74, 0xC1, 0x75, 0xC1, 0x76, 0xC1, 0x77, /* 0xA0-0xA3 */ + 0xC1, 0x78, 0xC7, 0xE2, 0xC1, 0x79, 0xC1, 0x7A, /* 0xA4-0xA7 */ + 0xC1, 0x81, 0xC1, 0x82, 0xC1, 0x83, 0xC1, 0x84, /* 0xA8-0xAB */ + 0xC1, 0x85, 0xC1, 0x86, 0xC1, 0x87, 0xC1, 0x88, /* 0xAC-0xAF */ + 0xC1, 0x89, 0xC1, 0x8A, 0xC1, 0x8B, 0xC1, 0x8C, /* 0xB0-0xB3 */ + 0xC1, 0x8D, 0xC1, 0x8E, 0xC1, 0x8F, 0xC1, 0x90, /* 0xB4-0xB7 */ + 0xC1, 0x91, 0xC1, 0x92, 0xC1, 0x93, 0xC1, 0x94, /* 0xB8-0xBB */ + 0xC1, 0x95, 0xC1, 0x96, 0xC1, 0x97, 0xC1, 0x98, /* 0xBC-0xBF */ + 0xC1, 0x99, 0xC1, 0x9A, 0xC1, 0x9B, 0xC1, 0x9C, /* 0xC0-0xC3 */ + 0xC1, 0x9D, 0xC1, 0x9E, 0xC1, 0x9F, 0xC1, 0xA0, /* 0xC4-0xC7 */ + 0xC7, 0xE3, 0xC7, 0xE4, 0xC2, 0x41, 0xC2, 0x42, /* 0xC8-0xCB */ + 0xC7, 0xE5, 0xC2, 0x43, 0xC2, 0x44, 0xC2, 0x45, /* 0xCC-0xCF */ + 0xC7, 0xE6, 0xC2, 0x46, 0xC7, 0xE7, 0xC2, 0x47, /* 0xD0-0xD3 */ + 0xC2, 0x48, 0xC2, 0x49, 0xC2, 0x4A, 0xC2, 0x4B, /* 0xD4-0xD7 */ + 0xC7, 0xE8, 0xC7, 0xE9, 0xC2, 0x4C, 0xC7, 0xEA, /* 0xD8-0xDB */ + 0xC2, 0x4D, 0xC7, 0xEB, 0xC2, 0x4E, 0xC2, 0x4F, /* 0xDC-0xDF */ + 0xC2, 0x50, 0xC2, 0x51, 0xC2, 0x52, 0xC2, 0x53, /* 0xE0-0xE3 */ + 0xC7, 0xEC, 0xC7, 0xED, 0xC2, 0x54, 0xC2, 0x55, /* 0xE4-0xE7 */ + 0xC7, 0xEE, 0xC2, 0x56, 0xC2, 0x57, 0xC2, 0x58, /* 0xE8-0xEB */ + 0xC7, 0xEF, 0xC2, 0x59, 0xC2, 0x5A, 0xC2, 0x61, /* 0xEC-0xEF */ + 0xC2, 0x62, 0xC2, 0x63, 0xC2, 0x64, 0xC2, 0x65, /* 0xF0-0xF3 */ + 0xC7, 0xF0, 0xC7, 0xF1, 0xC2, 0x66, 0xC7, 0xF2, /* 0xF4-0xF7 */ + 0xC2, 0x67, 0xC7, 0xF3, 0xC2, 0x68, 0xC2, 0x69, /* 0xF8-0xFB */ + 0xC2, 0x6A, 0xC2, 0x6B, 0xC2, 0x6C, 0xC2, 0x6D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D6[512] = { + 0xC7, 0xF4, 0xC7, 0xF5, 0xC2, 0x6E, 0xC2, 0x6F, /* 0x00-0x03 */ + 0xC7, 0xF6, 0xC2, 0x70, 0xC2, 0x71, 0xC2, 0x72, /* 0x04-0x07 */ + 0xC7, 0xF7, 0xC2, 0x73, 0xC2, 0x74, 0xC2, 0x75, /* 0x08-0x0B */ + 0xC2, 0x76, 0xC2, 0x77, 0xC2, 0x78, 0xC2, 0x79, /* 0x0C-0x0F */ + 0xC7, 0xF8, 0xC7, 0xF9, 0xC2, 0x7A, 0xC7, 0xFA, /* 0x10-0x13 */ + 0xC7, 0xFB, 0xC7, 0xFC, 0xC2, 0x81, 0xC2, 0x82, /* 0x14-0x17 */ + 0xC2, 0x83, 0xC2, 0x84, 0xC2, 0x85, 0xC2, 0x86, /* 0x18-0x1B */ + 0xC7, 0xFD, 0xC2, 0x87, 0xC2, 0x88, 0xC2, 0x89, /* 0x1C-0x1F */ + 0xC7, 0xFE, 0xC2, 0x8A, 0xC2, 0x8B, 0xC2, 0x8C, /* 0x20-0x23 */ + 0xC8, 0xA1, 0xC2, 0x8D, 0xC2, 0x8E, 0xC2, 0x8F, /* 0x24-0x27 */ + 0xC2, 0x90, 0xC2, 0x91, 0xC2, 0x92, 0xC2, 0x93, /* 0x28-0x2B */ + 0xC2, 0x94, 0xC8, 0xA2, 0xC2, 0x95, 0xC2, 0x96, /* 0x2C-0x2F */ + 0xC2, 0x97, 0xC2, 0x98, 0xC2, 0x99, 0xC2, 0x9A, /* 0x30-0x33 */ + 0xC2, 0x9B, 0xC2, 0x9C, 0xC2, 0x9D, 0xC2, 0x9E, /* 0x34-0x37 */ + 0xC8, 0xA3, 0xC8, 0xA4, 0xC2, 0x9F, 0xC2, 0xA0, /* 0x38-0x3B */ + 0xC8, 0xA5, 0xC3, 0x41, 0xC3, 0x42, 0xC3, 0x43, /* 0x3C-0x3F */ + 0xC8, 0xA6, 0xC3, 0x44, 0xC3, 0x45, 0xC3, 0x46, /* 0x40-0x43 */ + 0xC3, 0x47, 0xC8, 0xA7, 0xC3, 0x48, 0xC3, 0x49, /* 0x44-0x47 */ + 0xC8, 0xA8, 0xC8, 0xA9, 0xC3, 0x4A, 0xC8, 0xAA, /* 0x48-0x4B */ + 0xC3, 0x4B, 0xC8, 0xAB, 0xC3, 0x4C, 0xC3, 0x4D, /* 0x4C-0x4F */ + 0xC3, 0x4E, 0xC8, 0xAC, 0xC3, 0x4F, 0xC3, 0x50, /* 0x50-0x53 */ + 0xC8, 0xAD, 0xC8, 0xAE, 0xC3, 0x51, 0xC3, 0x52, /* 0x54-0x57 */ + 0xC8, 0xAF, 0xC3, 0x53, 0xC3, 0x54, 0xC3, 0x55, /* 0x58-0x5B */ + 0xC8, 0xB0, 0xC3, 0x56, 0xC3, 0x57, 0xC3, 0x58, /* 0x5C-0x5F */ + 0xC3, 0x59, 0xC3, 0x5A, 0xC3, 0x61, 0xC3, 0x62, /* 0x60-0x63 */ + 0xC3, 0x63, 0xC3, 0x64, 0xC3, 0x65, 0xC8, 0xB1, /* 0x64-0x67 */ + 0xC3, 0x66, 0xC8, 0xB2, 0xC3, 0x67, 0xC3, 0x68, /* 0x68-0x6B */ + 0xC3, 0x69, 0xC3, 0x6A, 0xC3, 0x6B, 0xC3, 0x6C, /* 0x6C-0x6F */ + 0xC8, 0xB3, 0xC8, 0xB4, 0xC3, 0x6D, 0xC3, 0x6E, /* 0x70-0x73 */ + 0xC8, 0xB5, 0xC3, 0x6F, 0xC3, 0x70, 0xC3, 0x71, /* 0x74-0x77 */ + 0xC3, 0x72, 0xC3, 0x73, 0xC3, 0x74, 0xC3, 0x75, /* 0x78-0x7B */ + 0xC3, 0x76, 0xC3, 0x77, 0xC3, 0x78, 0xC3, 0x79, /* 0x7C-0x7F */ + + 0xC3, 0x7A, 0xC3, 0x81, 0xC3, 0x82, 0xC8, 0xB6, /* 0x80-0x83 */ + 0xC3, 0x83, 0xC8, 0xB7, 0xC3, 0x84, 0xC3, 0x85, /* 0x84-0x87 */ + 0xC3, 0x86, 0xC3, 0x87, 0xC3, 0x88, 0xC3, 0x89, /* 0x88-0x8B */ + 0xC8, 0xB8, 0xC8, 0xB9, 0xC3, 0x8A, 0xC3, 0x8B, /* 0x8C-0x8F */ + 0xC8, 0xBA, 0xC3, 0x8C, 0xC3, 0x8D, 0xC3, 0x8E, /* 0x90-0x93 */ + 0xC8, 0xBB, 0xC3, 0x8F, 0xC3, 0x90, 0xC3, 0x91, /* 0x94-0x97 */ + 0xC3, 0x92, 0xC3, 0x93, 0xC3, 0x94, 0xC3, 0x95, /* 0x98-0x9B */ + 0xC3, 0x96, 0xC8, 0xBC, 0xC3, 0x97, 0xC8, 0xBD, /* 0x9C-0x9F */ + 0xC3, 0x98, 0xC8, 0xBE, 0xC3, 0x99, 0xC3, 0x9A, /* 0xA0-0xA3 */ + 0xC3, 0x9B, 0xC3, 0x9C, 0xC3, 0x9D, 0xC3, 0x9E, /* 0xA4-0xA7 */ + 0xC8, 0xBF, 0xC3, 0x9F, 0xC3, 0xA0, 0xC4, 0x41, /* 0xA8-0xAB */ + 0xC8, 0xC0, 0xC4, 0x42, 0xC4, 0x43, 0xC4, 0x44, /* 0xAC-0xAF */ + 0xC8, 0xC1, 0xC4, 0x45, 0xC4, 0x46, 0xC4, 0x47, /* 0xB0-0xB3 */ + 0xC4, 0x48, 0xC4, 0x49, 0xC4, 0x4A, 0xC4, 0x4B, /* 0xB4-0xB7 */ + 0xC4, 0x4C, 0xC8, 0xC2, 0xC4, 0x4D, 0xC8, 0xC3, /* 0xB8-0xBB */ + 0xC4, 0x4E, 0xC4, 0x4F, 0xC4, 0x50, 0xC4, 0x51, /* 0xBC-0xBF */ + 0xC4, 0x52, 0xC4, 0x53, 0xC4, 0x54, 0xC4, 0x55, /* 0xC0-0xC3 */ + 0xC8, 0xC4, 0xC8, 0xC5, 0xC4, 0x56, 0xC4, 0x57, /* 0xC4-0xC7 */ + 0xC8, 0xC6, 0xC4, 0x58, 0xC4, 0x59, 0xC4, 0x5A, /* 0xC8-0xCB */ + 0xC8, 0xC7, 0xC4, 0x61, 0xC4, 0x62, 0xC4, 0x63, /* 0xCC-0xCF */ + 0xC4, 0x64, 0xC8, 0xC8, 0xC4, 0x65, 0xC4, 0x66, /* 0xD0-0xD3 */ + 0xC8, 0xC9, 0xC4, 0x67, 0xC4, 0x68, 0xC8, 0xCA, /* 0xD4-0xD7 */ + 0xC4, 0x69, 0xC8, 0xCB, 0xC4, 0x6A, 0xC4, 0x6B, /* 0xD8-0xDB */ + 0xC4, 0x6C, 0xC4, 0x6D, 0xC4, 0x6E, 0xC4, 0x6F, /* 0xDC-0xDF */ + 0xC8, 0xCC, 0xC4, 0x70, 0xC4, 0x71, 0xC4, 0x72, /* 0xE0-0xE3 */ + 0xC8, 0xCD, 0xC4, 0x73, 0xC4, 0x74, 0xC4, 0x75, /* 0xE4-0xE7 */ + 0xC8, 0xCE, 0xC4, 0x76, 0xC4, 0x77, 0xC4, 0x78, /* 0xE8-0xEB */ + 0xC4, 0x79, 0xC4, 0x7A, 0xC4, 0x81, 0xC4, 0x82, /* 0xEC-0xEF */ + 0xC8, 0xCF, 0xC4, 0x83, 0xC4, 0x84, 0xC4, 0x85, /* 0xF0-0xF3 */ + 0xC4, 0x86, 0xC8, 0xD0, 0xC4, 0x87, 0xC4, 0x88, /* 0xF4-0xF7 */ + 0xC4, 0x89, 0xC4, 0x8A, 0xC4, 0x8B, 0xC4, 0x8C, /* 0xF8-0xFB */ + 0xC8, 0xD1, 0xC8, 0xD2, 0xC4, 0x8D, 0xC4, 0x8E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_D7[512] = { + 0xC8, 0xD3, 0xC4, 0x8F, 0xC4, 0x90, 0xC4, 0x91, /* 0x00-0x03 */ + 0xC8, 0xD4, 0xC4, 0x92, 0xC4, 0x93, 0xC4, 0x94, /* 0x04-0x07 */ + 0xC4, 0x95, 0xC4, 0x96, 0xC4, 0x97, 0xC4, 0x98, /* 0x08-0x0B */ + 0xC4, 0x99, 0xC4, 0x9A, 0xC4, 0x9B, 0xC4, 0x9C, /* 0x0C-0x0F */ + 0xC4, 0x9D, 0xC8, 0xD5, 0xC4, 0x9E, 0xC4, 0x9F, /* 0x10-0x13 */ + 0xC4, 0xA0, 0xC5, 0x41, 0xC5, 0x42, 0xC5, 0x43, /* 0x14-0x17 */ + 0xC8, 0xD6, 0xC8, 0xD7, 0xC5, 0x44, 0xC5, 0x45, /* 0x18-0x1B */ + 0xC8, 0xD8, 0xC5, 0x46, 0xC5, 0x47, 0xC5, 0x48, /* 0x1C-0x1F */ + 0xC8, 0xD9, 0xC5, 0x49, 0xC5, 0x4A, 0xC5, 0x4B, /* 0x20-0x23 */ + 0xC5, 0x4C, 0xC5, 0x4D, 0xC5, 0x4E, 0xC5, 0x4F, /* 0x24-0x27 */ + 0xC8, 0xDA, 0xC8, 0xDB, 0xC5, 0x50, 0xC8, 0xDC, /* 0x28-0x2B */ + 0xC5, 0x51, 0xC8, 0xDD, 0xC5, 0x52, 0xC5, 0x53, /* 0x2C-0x2F */ + 0xC5, 0x54, 0xC5, 0x55, 0xC5, 0x56, 0xC5, 0x57, /* 0x30-0x33 */ + 0xC8, 0xDE, 0xC8, 0xDF, 0xC5, 0x58, 0xC5, 0x59, /* 0x34-0x37 */ + 0xC8, 0xE0, 0xC5, 0x5A, 0xC5, 0x61, 0xC5, 0x62, /* 0x38-0x3B */ + 0xC8, 0xE1, 0xC5, 0x63, 0xC5, 0x64, 0xC5, 0x65, /* 0x3C-0x3F */ + 0xC5, 0x66, 0xC5, 0x67, 0xC5, 0x68, 0xC5, 0x69, /* 0x40-0x43 */ + 0xC8, 0xE2, 0xC5, 0x6A, 0xC5, 0x6B, 0xC8, 0xE3, /* 0x44-0x47 */ + 0xC5, 0x6C, 0xC8, 0xE4, 0xC5, 0x6D, 0xC5, 0x6E, /* 0x48-0x4B */ + 0xC5, 0x6F, 0xC5, 0x70, 0xC5, 0x71, 0xC5, 0x72, /* 0x4C-0x4F */ + 0xC8, 0xE5, 0xC8, 0xE6, 0xC5, 0x73, 0xC5, 0x74, /* 0x50-0x53 */ + 0xC8, 0xE7, 0xC5, 0x75, 0xC8, 0xE8, 0xC8, 0xE9, /* 0x54-0x57 */ + 0xC8, 0xEA, 0xC8, 0xEB, 0xC5, 0x76, 0xC5, 0x77, /* 0x58-0x5B */ + 0xC5, 0x78, 0xC5, 0x79, 0xC5, 0x7A, 0xC5, 0x81, /* 0x5C-0x5F */ + 0xC8, 0xEC, 0xC8, 0xED, 0xC5, 0x82, 0xC8, 0xEE, /* 0x60-0x63 */ + 0xC5, 0x83, 0xC8, 0xEF, 0xC5, 0x84, 0xC5, 0x85, /* 0x64-0x67 */ + 0xC5, 0x86, 0xC8, 0xF0, 0xC5, 0x87, 0xC5, 0x88, /* 0x68-0x6B */ + 0xC8, 0xF1, 0xC5, 0x89, 0xC5, 0x8A, 0xC5, 0x8B, /* 0x6C-0x6F */ + 0xC8, 0xF2, 0xC5, 0x8C, 0xC5, 0x8D, 0xC5, 0x8E, /* 0x70-0x73 */ + 0xC8, 0xF3, 0xC5, 0x8F, 0xC5, 0x90, 0xC5, 0x91, /* 0x74-0x77 */ + 0xC5, 0x92, 0xC5, 0x93, 0xC5, 0x94, 0xC5, 0x95, /* 0x78-0x7B */ + 0xC8, 0xF4, 0xC8, 0xF5, 0xC5, 0x96, 0xC5, 0x97, /* 0x7C-0x7F */ + + 0xC5, 0x98, 0xC8, 0xF6, 0xC5, 0x99, 0xC5, 0x9A, /* 0x80-0x83 */ + 0xC5, 0x9B, 0xC5, 0x9C, 0xC5, 0x9D, 0xC5, 0x9E, /* 0x84-0x87 */ + 0xC8, 0xF7, 0xC8, 0xF8, 0xC5, 0x9F, 0xC5, 0xA0, /* 0x88-0x8B */ + 0xC8, 0xF9, 0xC6, 0x41, 0xC6, 0x42, 0xC6, 0x43, /* 0x8C-0x8F */ + 0xC8, 0xFA, 0xC6, 0x44, 0xC6, 0x45, 0xC6, 0x46, /* 0x90-0x93 */ + 0xC6, 0x47, 0xC6, 0x48, 0xC6, 0x49, 0xC6, 0x4A, /* 0x94-0x97 */ + 0xC8, 0xFB, 0xC8, 0xFC, 0xC6, 0x4B, 0xC8, 0xFD, /* 0x98-0x9B */ + 0xC6, 0x4C, 0xC8, 0xFE, 0xC6, 0x4D, 0xC6, 0x4E, /* 0x9C-0x9F */ + 0xC6, 0x4F, 0xC6, 0x50, 0xC6, 0x51, 0xC6, 0x52, /* 0xA0-0xA3 */ +}; + +static unsigned char u2c_DC[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ +}; + +static unsigned char u2c_F9[512] = { + 0xCB, 0xD0, 0xCB, 0xD6, 0xCB, 0xE7, 0xCD, 0xCF, /* 0x00-0x03 */ + 0xCD, 0xE8, 0xCE, 0xAD, 0xCF, 0xFB, 0xD0, 0xA2, /* 0x04-0x07 */ + 0xD0, 0xB8, 0xD0, 0xD0, 0xD0, 0xDD, 0xD1, 0xD4, /* 0x08-0x0B */ + 0xD1, 0xD5, 0xD1, 0xD8, 0xD1, 0xDB, 0xD1, 0xDC, /* 0x0C-0x0F */ + 0xD1, 0xDD, 0xD1, 0xDE, 0xD1, 0xDF, 0xD1, 0xE0, /* 0x10-0x13 */ + 0xD1, 0xE2, 0xD1, 0xE3, 0xD1, 0xE4, 0xD1, 0xE5, /* 0x14-0x17 */ + 0xD1, 0xE6, 0xD1, 0xE8, 0xD1, 0xE9, 0xD1, 0xEA, /* 0x18-0x1B */ + 0xD1, 0xEB, 0xD1, 0xED, 0xD1, 0xEF, 0xD1, 0xF0, /* 0x1C-0x1F */ + 0xD1, 0xF2, 0xD1, 0xF6, 0xD1, 0xFA, 0xD1, 0xFC, /* 0x20-0x23 */ + 0xD1, 0xFD, 0xD1, 0xFE, 0xD2, 0xA2, 0xD2, 0xA3, /* 0x24-0x27 */ + 0xD2, 0xA7, 0xD2, 0xA8, 0xD2, 0xA9, 0xD2, 0xAA, /* 0x28-0x2B */ + 0xD2, 0xAB, 0xD2, 0xAD, 0xD2, 0xB2, 0xD2, 0xBE, /* 0x2C-0x2F */ + 0xD2, 0xC2, 0xD2, 0xC3, 0xD2, 0xC4, 0xD2, 0xC6, /* 0x30-0x33 */ + 0xD2, 0xC7, 0xD2, 0xC8, 0xD2, 0xC9, 0xD2, 0xCA, /* 0x34-0x37 */ + 0xD2, 0xCB, 0xD2, 0xCD, 0xD2, 0xCE, 0xD2, 0xCF, /* 0x38-0x3B */ + 0xD2, 0xD0, 0xD2, 0xD1, 0xD2, 0xD2, 0xD2, 0xD3, /* 0x3C-0x3F */ + 0xD2, 0xD4, 0xD2, 0xD5, 0xD2, 0xD6, 0xD2, 0xD7, /* 0x40-0x43 */ + 0xD2, 0xD9, 0xD2, 0xDA, 0xD2, 0xDE, 0xD2, 0xDF, /* 0x44-0x47 */ + 0xD2, 0xE1, 0xD2, 0xE2, 0xD2, 0xE4, 0xD2, 0xE5, /* 0x48-0x4B */ + 0xD2, 0xE6, 0xD2, 0xE7, 0xD2, 0xE8, 0xD2, 0xE9, /* 0x4C-0x4F */ + 0xD2, 0xEA, 0xD2, 0xEB, 0xD2, 0xF0, 0xD2, 0xF1, /* 0x50-0x53 */ + 0xD2, 0xF2, 0xD2, 0xF3, 0xD2, 0xF4, 0xD2, 0xF5, /* 0x54-0x57 */ + 0xD2, 0xF7, 0xD2, 0xF8, 0xD4, 0xE6, 0xD4, 0xFC, /* 0x58-0x5B */ + 0xD5, 0xA5, 0xD5, 0xAB, 0xD5, 0xAE, 0xD6, 0xB8, /* 0x5C-0x5F */ + 0xD6, 0xCD, 0xD7, 0xCB, 0xD7, 0xE4, 0xDB, 0xC5, /* 0x60-0x63 */ + 0xDB, 0xE4, 0xDC, 0xA5, 0xDD, 0xA5, 0xDD, 0xD5, /* 0x64-0x67 */ + 0xDD, 0xF4, 0xDE, 0xFC, 0xDE, 0xFE, 0xDF, 0xB3, /* 0x68-0x6B */ + 0xDF, 0xE1, 0xDF, 0xE8, 0xE0, 0xF1, 0xE1, 0xAD, /* 0x6C-0x6F */ + 0xE1, 0xED, 0xE3, 0xF5, 0xE4, 0xA1, 0xE4, 0xA9, /* 0x70-0x73 */ + 0xE5, 0xAE, 0xE5, 0xB1, 0xE5, 0xB2, 0xE5, 0xB9, /* 0x74-0x77 */ + 0xE5, 0xBB, 0xE5, 0xBC, 0xE5, 0xC4, 0xE5, 0xCE, /* 0x78-0x7B */ + 0xE5, 0xD0, 0xE5, 0xD2, 0xE5, 0xD6, 0xE5, 0xFA, /* 0x7C-0x7F */ + + 0xE5, 0xFB, 0xE5, 0xFC, 0xE5, 0xFE, 0xE6, 0xA1, /* 0x80-0x83 */ + 0xE6, 0xA4, 0xE6, 0xA7, 0xE6, 0xAD, 0xE6, 0xAF, /* 0x84-0x87 */ + 0xE6, 0xB0, 0xE6, 0xB1, 0xE6, 0xB3, 0xE6, 0xB7, /* 0x88-0x8B */ + 0xE6, 0xB8, 0xE6, 0xBC, 0xE6, 0xC4, 0xE6, 0xC6, /* 0x8C-0x8F */ + 0xE6, 0xC7, 0xE6, 0xCA, 0xE6, 0xD2, 0xE6, 0xD6, /* 0x90-0x93 */ + 0xE6, 0xD9, 0xE6, 0xDC, 0xE6, 0xDF, 0xE6, 0xE1, /* 0x94-0x97 */ + 0xE6, 0xE4, 0xE6, 0xE5, 0xE6, 0xE6, 0xE6, 0xE8, /* 0x98-0x9B */ + 0xE6, 0xEA, 0xE6, 0xEB, 0xE6, 0xEC, 0xE6, 0xEF, /* 0x9C-0x9F */ + 0xE6, 0xF1, 0xE6, 0xF2, 0xE6, 0xF5, 0xE6, 0xF6, /* 0xA0-0xA3 */ + 0xE6, 0xF7, 0xE6, 0xF9, 0xE7, 0xA1, 0xE7, 0xA6, /* 0xA4-0xA7 */ + 0xE7, 0xA9, 0xE7, 0xAA, 0xE7, 0xAC, 0xE7, 0xAD, /* 0xA8-0xAB */ + 0xE7, 0xB0, 0xE7, 0xBF, 0xE7, 0xC1, 0xE7, 0xC6, /* 0xAC-0xAF */ + 0xE7, 0xC7, 0xE7, 0xCB, 0xE7, 0xCD, 0xE7, 0xCF, /* 0xB0-0xB3 */ + 0xE7, 0xD0, 0xE7, 0xD3, 0xE7, 0xDF, 0xE7, 0xE4, /* 0xB4-0xB7 */ + 0xE7, 0xE6, 0xE7, 0xF7, 0xE8, 0xE7, 0xE8, 0xE8, /* 0xB8-0xBB */ + 0xE8, 0xF0, 0xE8, 0xF1, 0xE8, 0xF7, 0xE8, 0xF9, /* 0xBC-0xBF */ + 0xE8, 0xFB, 0xE8, 0xFE, 0xE9, 0xA7, 0xE9, 0xAC, /* 0xC0-0xC3 */ + 0xE9, 0xCC, 0xE9, 0xF7, 0xEA, 0xC1, 0xEA, 0xE5, /* 0xC4-0xC7 */ + 0xEA, 0xF4, 0xEA, 0xF7, 0xEA, 0xFC, 0xEA, 0xFE, /* 0xC8-0xCB */ + 0xEB, 0xA4, 0xEB, 0xA7, 0xEB, 0xA9, 0xEB, 0xAA, /* 0xCC-0xCF */ + 0xEB, 0xBA, 0xEB, 0xBB, 0xEB, 0xBD, 0xEB, 0xC1, /* 0xD0-0xD3 */ + 0xEB, 0xC2, 0xEB, 0xC6, 0xEB, 0xC7, 0xEB, 0xCC, /* 0xD4-0xD7 */ + 0xEB, 0xCF, 0xEB, 0xD0, 0xEB, 0xD1, 0xEB, 0xD2, /* 0xD8-0xDB */ + 0xEB, 0xD8, 0xEC, 0xA6, 0xEC, 0xA7, 0xEC, 0xAA, /* 0xDC-0xDF */ + 0xEC, 0xAF, 0xEC, 0xB0, 0xEC, 0xB1, 0xEC, 0xB2, /* 0xE0-0xE3 */ + 0xEC, 0xB5, 0xEC, 0xB8, 0xEC, 0xBA, 0xEC, 0xC0, /* 0xE4-0xE7 */ + 0xEC, 0xC1, 0xEC, 0xC5, 0xEC, 0xC6, 0xEC, 0xC9, /* 0xE8-0xEB */ + 0xEC, 0xCA, 0xEC, 0xD5, 0xEC, 0xDD, 0xEC, 0xDE, /* 0xEC-0xEF */ + 0xEC, 0xE1, 0xEC, 0xE4, 0xEC, 0xE7, 0xEC, 0xE8, /* 0xF0-0xF3 */ + 0xEC, 0xF7, 0xEC, 0xF8, 0xEC, 0xFA, 0xED, 0xA1, /* 0xF4-0xF7 */ + 0xED, 0xA2, 0xED, 0xA3, 0xED, 0xEE, 0xEE, 0xDB, /* 0xF8-0xFB */ + 0xF2, 0xBD, 0xF2, 0xFA, 0xF3, 0xB1, 0xF4, 0xA7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0xF4, 0xEE, 0xF6, 0xF4, 0xF6, 0xF6, 0xF7, 0xB8, /* 0x00-0x03 */ + 0xF7, 0xC8, 0xF7, 0xD3, 0xF8, 0xDB, 0xF8, 0xF0, /* 0x04-0x07 */ + 0xFA, 0xA1, 0xFA, 0xA2, 0xFA, 0xE6, 0xFC, 0xA9, /* 0x08-0x0B */ + 0xE8, 0xB4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xF5, 0xC0, 0x00, 0x00, 0xF4, 0xE7, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xFD, 0xEB, 0x00, 0x00, 0xEC, 0xCC, /* 0x14-0x17 */ + 0x00, 0x00, 0xE3, 0xEA, 0xDF, 0xD4, 0xDC, 0xD8, /* 0x18-0x1B */ + 0xEF, 0xFE, 0xEF, 0xF1, 0xE9, 0xE2, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0xB3, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xEC, 0xEF, 0xD4, 0xB4, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xF9, 0xDE, 0xF8, /* 0x28-0x2B */ + 0xCE, 0xBD, 0xF9, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ +}; + +static unsigned char u2c_FF[512] = { + 0x00, 0x00, 0xA3, 0xA1, 0xA3, 0xA2, 0xA3, 0xA3, /* 0x00-0x03 */ + 0xA3, 0xA4, 0xA3, 0xA5, 0xA3, 0xA6, 0xA3, 0xA7, /* 0x04-0x07 */ + 0xA3, 0xA8, 0xA3, 0xA9, 0xA3, 0xAA, 0xA3, 0xAB, /* 0x08-0x0B */ + 0xA3, 0xAC, 0xA3, 0xAD, 0xA3, 0xAE, 0xA3, 0xAF, /* 0x0C-0x0F */ + 0xA3, 0xB0, 0xA3, 0xB1, 0xA3, 0xB2, 0xA3, 0xB3, /* 0x10-0x13 */ + 0xA3, 0xB4, 0xA3, 0xB5, 0xA3, 0xB6, 0xA3, 0xB7, /* 0x14-0x17 */ + 0xA3, 0xB8, 0xA3, 0xB9, 0xA3, 0xBA, 0xA3, 0xBB, /* 0x18-0x1B */ + 0xA3, 0xBC, 0xA3, 0xBD, 0xA3, 0xBE, 0xA3, 0xBF, /* 0x1C-0x1F */ + 0xA3, 0xC0, 0xA3, 0xC1, 0xA3, 0xC2, 0xA3, 0xC3, /* 0x20-0x23 */ + 0xA3, 0xC4, 0xA3, 0xC5, 0xA3, 0xC6, 0xA3, 0xC7, /* 0x24-0x27 */ + 0xA3, 0xC8, 0xA3, 0xC9, 0xA3, 0xCA, 0xA3, 0xCB, /* 0x28-0x2B */ + 0xA3, 0xCC, 0xA3, 0xCD, 0xA3, 0xCE, 0xA3, 0xCF, /* 0x2C-0x2F */ + 0xA3, 0xD0, 0xA3, 0xD1, 0xA3, 0xD2, 0xA3, 0xD3, /* 0x30-0x33 */ + 0xA3, 0xD4, 0xA3, 0xD5, 0xA3, 0xD6, 0xA3, 0xD7, /* 0x34-0x37 */ + 0xA3, 0xD8, 0xA3, 0xD9, 0xA3, 0xDA, 0xA3, 0xDB, /* 0x38-0x3B */ + 0xA1, 0xAC, 0xA3, 0xDD, 0xA3, 0xDE, 0xA3, 0xDF, /* 0x3C-0x3F */ + 0xA3, 0xE0, 0xA3, 0xE1, 0xA3, 0xE2, 0xA3, 0xE3, /* 0x40-0x43 */ + 0xA3, 0xE4, 0xA3, 0xE5, 0xA3, 0xE6, 0xA3, 0xE7, /* 0x44-0x47 */ + 0xA3, 0xE8, 0xA3, 0xE9, 0xA3, 0xEA, 0xA3, 0xEB, /* 0x48-0x4B */ + 0xA3, 0xEC, 0xA3, 0xED, 0xA3, 0xEE, 0xA3, 0xEF, /* 0x4C-0x4F */ + 0xA3, 0xF0, 0xA3, 0xF1, 0xA3, 0xF2, 0xA3, 0xF3, /* 0x50-0x53 */ + 0xA3, 0xF4, 0xA3, 0xF5, 0xA3, 0xF6, 0xA3, 0xF7, /* 0x54-0x57 */ + 0xA3, 0xF8, 0xA3, 0xF9, 0xA3, 0xFA, 0xA3, 0xFB, /* 0x58-0x5B */ + 0xA3, 0xFC, 0xA3, 0xFD, 0xA2, 0xA6, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xA4, 0xD4, 0xA4, 0xA1, 0xA4, 0xA2, 0xA4, 0xA3, /* 0xA0-0xA3 */ + 0xA4, 0xA4, 0xA4, 0xA5, 0xA4, 0xA6, 0xA4, 0xA7, /* 0xA4-0xA7 */ + 0xA4, 0xA8, 0xA4, 0xA9, 0xA4, 0xAA, 0xA4, 0xAB, /* 0xA8-0xAB */ + 0xA4, 0xAC, 0xA4, 0xAD, 0xA4, 0xAE, 0xA4, 0xAF, /* 0xAC-0xAF */ + 0xA4, 0xB0, 0xA4, 0xB1, 0xA4, 0xB2, 0xA4, 0xB3, /* 0xB0-0xB3 */ + 0xA4, 0xB4, 0xA4, 0xB5, 0xA4, 0xB6, 0xA4, 0xB7, /* 0xB4-0xB7 */ + 0xA4, 0xB8, 0xA4, 0xB9, 0xA4, 0xBA, 0xA4, 0xBB, /* 0xB8-0xBB */ + 0xA4, 0xBC, 0xA4, 0xBD, 0xA4, 0xBE, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xBF, 0xA4, 0xC0, /* 0xC0-0xC3 */ + 0xA4, 0xC1, 0xA4, 0xC2, 0xA4, 0xC3, 0xA4, 0xC4, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xC5, 0xA4, 0xC6, /* 0xC8-0xCB */ + 0xA4, 0xC7, 0xA4, 0xC8, 0xA4, 0xC9, 0xA4, 0xCA, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xCB, 0xA4, 0xCC, /* 0xD0-0xD3 */ + 0xA4, 0xCD, 0xA4, 0xCE, 0xA4, 0xCF, 0xA4, 0xD0, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xD1, 0xA4, 0xD2, /* 0xD8-0xDB */ + 0xA4, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xA1, 0xCB, 0xA1, 0xCC, 0xA1, 0xFE, 0xA3, 0xFE, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xA1, 0xCD, 0xA3, 0xDC, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, u2c_01, u2c_02, u2c_03, u2c_04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_11, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, u2c_24, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, u2c_31, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u2c_AC, u2c_AD, u2c_AE, u2c_AF, + u2c_B0, u2c_B1, u2c_B2, u2c_B3, u2c_B4, u2c_B5, u2c_B6, u2c_B7, + u2c_B8, u2c_B9, u2c_BA, u2c_BB, u2c_BC, u2c_BD, u2c_BE, u2c_BF, + u2c_C0, u2c_C1, u2c_C2, u2c_C3, u2c_C4, u2c_C5, u2c_C6, u2c_C7, + u2c_C8, u2c_C9, u2c_CA, u2c_CB, u2c_CC, u2c_CD, u2c_CE, u2c_CF, + u2c_D0, u2c_D1, u2c_D2, u2c_D3, u2c_D4, u2c_D5, u2c_D6, u2c_D7, + NULL, NULL, NULL, NULL, u2c_DC, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, NULL, u2c_FF, }; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(const wchar_t uni, + unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni&0xFF; + unsigned char ch = (uni>>8)&0xFF; + int n; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + + uni2charset = page_uni2charset[ch]; + if (uni2charset) { + if (boundlen <= 1) + return -ENAMETOOLONG; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + if (out[0] == 0x00 && out[1] == 0x00) + return -EINVAL; + n = 2; + } else if (ch==0 && cl) { + out[0] = cl; + n = 1; + } + else + return -EINVAL; + + return n; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, + wchar_t *uni) +{ + unsigned char ch, cl; + wchar_t *charset2uni; + int n; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + if (boundlen == 1) { + *uni = rawstring[0]; + return 1; + } + + ch = rawstring[0]; + cl = rawstring[1]; + + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl) { + *uni = charset2uni[cl]; + if (*uni == 0x0000) + return -EINVAL; + n = 2; + } else{ + *uni = ch; + n = 1; + } + return n; +} + +static struct nls_table table = { + "cp949", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp949(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp949(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp949) +module_exit(exit_nls_cp949) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_cp950.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_cp9…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_cp950.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_cp950.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,9500 @@ +/* + * linux/fs/nls_cp950.c + * + * Charset cp950 translation tables. + * This translation table was generated automatically, the + * original table can be download from the Microsoft website. + * (
http://www.microsoft.com/typography/unicode/unicodecp.htm
) + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t c2u_A1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x3000,0xFF0C,0x3001,0x3002,0xFF0E,0x2027,0xFF1B,0xFF1A,/* 0x40-0x47 */ + 0xFF1F,0xFF01,0xFE30,0x2026,0x2025,0xFE50,0xFF64,0xFE52,/* 0x48-0x4F */ + 0x00B7,0xFE54,0xFE55,0xFE56,0xFE57,0xFF5C,0x2013,0xFE31,/* 0x50-0x57 */ + 0x2014,0xFE33,0x2574,0xFE34,0xFE4F,0xFF08,0xFF09,0xFE35,/* 0x58-0x5F */ + 0xFE36,0xFF5B,0xFF5D,0xFE37,0xFE38,0xFF3B,0xFF3D,0xFE39,/* 0x60-0x67 */ + 0xFE3A,0x3010,0x3011,0xFE3B,0xFE3C,0x300A,0x300B,0xFE3D,/* 0x68-0x6F */ + 0xFE3E,0x3008,0x3009,0xFF3E,0xFE40,0x300C,0x300D,0xFE41,/* 0x70-0x77 */ + 0xFE42,0x300E,0x300F,0xFE43,0xFE44,0xFE59,0xFE5A,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFF40,0xFF07,0x201C,/* 0xA0-0xA7 */ + 0xFF02,0x301D,0x301E,0x2035,0x2032,0xFF03,0xFF06,0xFF0A,/* 0xA8-0xAF */ + 0x203B,0x00A7,0x3003,0x25CB,0x25CF,0x25B3,0x25B2,0x25CE,/* 0xB0-0xB7 */ + 0x2606,0x2605,0x25C7,0x25C6,0x25A1,0x25A0,0x25BD,0x25BC,/* 0xB8-0xBF */ + 0x32A3,0x2105,0x0305,0xFFE3,0xFF3F,0x02CD,0xFE49,0xFE4A,/* 0xC0-0xC7 */ + 0xFE4D,0xFE4E,0xFE4B,0xFE4C,0xFE5F,0xFE60,0xFE61,0xFF0B,/* 0xC8-0xCF */ + 0xFF0D,0x00D7,0x00F7,0x00B1,0x221A,0xFF1C,0xFF1E,0xFF1D,/* 0xD0-0xD7 */ + 0x2266,0x2267,0x2260,0x221E,0x2252,0x2263,0xFE62,0xFE63,/* 0xD8-0xDF */ + 0xFE64,0xFE65,0xFE66,0xFF5E,0x2229,0x222A,0x22A5,0x2220,/* 0xE0-0xE7 */ + 0x221F,0x22BF,0x33D2,0x33D1,0x222B,0x222E,0x2235,0x2234,/* 0xE8-0xEF */ + 0x2640,0x2642,0x2641,0x2609,0x2191,0x2193,0x2190,0x2192,/* 0xF0-0xF7 */ + 0x2196,0x2197,0x2199,0x2198,0x2225,0x2223,0xFF0F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0xFF3C,0x2215,0xFE68,0xFF04,0xFFE5,0x3012,0xFFE0,0xFFE1,/* 0x40-0x47 */ + 0xFF05,0xFF20,0x2103,0x2109,0xFE69,0xFE6A,0xFE6B,0x33D5,/* 0x48-0x4F */ + 0x339C,0x339D,0x339E,0x33CE,0x33A1,0x338E,0x338F,0x33C4,/* 0x50-0x57 */ + 0x2218,0x5159,0x515B,0x515E,0x515D,0x5161,0x5163,0x55E7,/* 0x58-0x5F */ + 0x74E9,0x7CCE,0x2581,0x2582,0x2583,0x2584,0x2585,0x2586,/* 0x60-0x67 */ + 0x2587,0x2588,0x258F,0x258E,0x258D,0x258C,0x258B,0x258A,/* 0x68-0x6F */ + 0x2589,0x253C,0x2534,0x252C,0x2524,0x251C,0x2594,0x2500,/* 0x70-0x77 */ + 0x2502,0x2595,0x250C,0x2510,0x2514,0x2518,0x256D,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x256E,0x2570,0x256F,0x0000,0x0000,0x0000,0x0000,/* 0xA0-0xA7 */ + 0x25E2,0x25E3,0x25E5,0x25E4,0x2571,0x2572,0x2573,0xFF10,/* 0xA8-0xAF */ + 0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18,/* 0xB0-0xB7 */ + 0xFF19,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,/* 0xB8-0xBF */ + 0x2167,0x2168,0x2169,0x3021,0x3022,0x3023,0x3024,0x3025,/* 0xC0-0xC7 */ + 0x3026,0x3027,0x3028,0x3029,0x0000,0x5344,0x0000,0xFF21,/* 0xC8-0xCF */ + 0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28,0xFF29,/* 0xD0-0xD7 */ + 0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30,0xFF31,/* 0xD8-0xDF */ + 0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38,0xFF39,/* 0xE0-0xE7 */ + 0xFF3A,0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,/* 0xE8-0xEF */ + 0xFF48,0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,/* 0xF0-0xF7 */ + 0xFF50,0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0xFF57,0xFF58,0xFF59,0xFF5A,0x0391,0x0392,0x0393,0x0394,/* 0x40-0x47 */ + 0x0395,0x0396,0x0397,0x0398,0x0399,0x039A,0x039B,0x039C,/* 0x48-0x4F */ + 0x039D,0x039E,0x039F,0x03A0,0x03A1,0x03A3,0x03A4,0x03A5,/* 0x50-0x57 */ + 0x03A6,0x03A7,0x03A8,0x03A9,0x03B1,0x03B2,0x03B3,0x03B4,/* 0x58-0x5F */ + 0x03B5,0x03B6,0x03B7,0x03B8,0x03B9,0x03BA,0x03BB,0x03BC,/* 0x60-0x67 */ + 0x03BD,0x03BE,0x03BF,0x03C0,0x03C1,0x03C3,0x03C4,0x03C5,/* 0x68-0x6F */ + 0x03C6,0x03C7,0x03C8,0x03C9,0x3105,0x3106,0x3107,0x3108,/* 0x70-0x77 */ + 0x3109,0x310A,0x310B,0x310C,0x310D,0x310E,0x310F,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,/* 0xA0-0xA7 */ + 0x3117,0x3118,0x3119,0x311A,0x311B,0x311C,0x311D,0x311E,/* 0xA8-0xAF */ + 0x311F,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,/* 0xB0-0xB7 */ + 0x3127,0x3128,0x3129,0x2024,0x02C9,0x02CA,0x02C7,0x02CB,/* 0xB8-0xBF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC0-0xC7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xC8-0xCF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD0-0xD7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xD8-0xDF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE0-0xE7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xE8-0xEF */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF0-0xF7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x4E00,0x4E59,0x4E01,0x4E03,0x4E43,0x4E5D,0xF9BA,0x4E8C,/* 0x40-0x47 */ + 0x4EBA,0x513F,0x5165,0x516B,0x51E0,0x5200,0x5201,0xF98A,/* 0x48-0x4F */ + 0x5315,0x5341,0x535C,0x53C8,0x4E09,0x4E0B,0x4E08,0x4E0A,/* 0x50-0x57 */ + 0x4E2B,0x4E38,0x51E1,0x4E45,0x4E48,0x4E5F,0x4E5E,0x4E8E,/* 0x58-0x5F */ + 0x4EA1,0x5140,0x5203,0x52FA,0x5343,0x53C9,0x53E3,0x571F,/* 0x60-0x67 */ + 0x58EB,0x5915,0x5927,0xF981,0x5B50,0x5B51,0x5B53,0x5BF8,/* 0x68-0x6F */ + 0x5C0F,0x5C22,0x5C38,0x5C71,0x5DDD,0x5DE5,0x5DF1,0x5DF2,/* 0x70-0x77 */ + 0x5DF3,0x5DFE,0x5E72,0x5EFE,0x5F0B,0x5F13,0x624D,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x4E11,0x4E10,0xF967,0x4E2D,0x4E30,0xF95E,0x4E4B,/* 0xA0-0xA7 */ + 0x5C39,0x4E88,0x4E91,0x4E95,0x4E92,0x4E94,0x4EA2,0x4EC1,/* 0xA8-0xAF */ + 0xF9FD,0x4EC3,0x4EC6,0x4EC7,0x4ECD,0x4ECA,0x4ECB,0x4EC4,/* 0xB0-0xB7 */ + 0x5143,0x5141,0x5167,0xF9D1,0x516E,0x516C,0x5197,0x51F6,/* 0xB8-0xBF */ + 0x5206,0xFA00,0x5208,0x52FB,0x52FE,0x52FF,0x5316,0x5339,/* 0xC0-0xC7 */ + 0x5348,0x5347,0x5345,0x535E,0x5384,0x53CB,0x53CA,0x53CD,/* 0xC8-0xCF */ + 0x58EC,0x5929,0x592B,0x592A,0x592D,0x5B54,0x5C11,0x5C24,/* 0xD0-0xD7 */ + 0x5C3A,0x5C6F,0x5DF4,0x5E7B,0x5EFF,0x5F14,0x5F15,0x5FC3,/* 0xD8-0xDF */ + 0x6208,0x6236,0x624B,0x624E,0x652F,0x6587,0x6597,0x65A4,/* 0xE0-0xE7 */ + 0x65B9,0x65E5,0x66F0,0x6708,0x6728,0x6B20,0x6B62,0x6B79,/* 0xE8-0xEF */ + 0x6BCB,0x6BD4,0x6BDB,0x6C0F,0x6C34,0x706B,0x722A,0x7236,/* 0xF0-0xF7 */ + 0x723B,0x7247,0x7259,0x725B,0x72AC,0x738B,0x4E19,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x4E16,0x4E15,0x4E14,0x4E18,0x4E3B,0x4E4D,0x4E4F,0x4E4E,/* 0x40-0x47 */ + 0x4EE5,0x4ED8,0x4ED4,0x4ED5,0x4ED6,0x4ED7,0x4EE3,0xF9A8,/* 0x48-0x4F */ + 0x4ED9,0x4EDE,0x5145,0x5144,0x5189,0x518A,0x51AC,0x51F9,/* 0x50-0x57 */ + 0x51FA,0x51F8,0x520A,0x52A0,0x529F,0x5305,0x5306,0xF963,/* 0x58-0x5F */ + 0x531D,0x4EDF,0x534A,0x5349,0x5361,0x5360,0x536F,0x536E,/* 0x60-0x67 */ + 0x53BB,0x53EF,0x53E4,0x53F3,0x53EC,0x53EE,0x53E9,0x53E8,/* 0x68-0x6F */ + 0x53FC,0x53F8,0x53F5,0x53EB,0x53E6,0x53EA,0x53F2,0x53F1,/* 0x70-0x77 */ + 0x53F0,0xF906,0x53ED,0x53FB,0x56DB,0x56DA,0x5916,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x592E,0x5931,0x5974,0x5976,0x5B55,0x5B83,0x5C3C,/* 0xA0-0xA7 */ + 0x5DE8,0x5DE7,0x5DE6,0x5E02,0x5E03,0x5E73,0x5E7C,0x5F01,/* 0xA8-0xAF */ + 0x5F18,0x5F17,0x5FC5,0x620A,0x6253,0x6254,0x6252,0x6251,/* 0xB0-0xB7 */ + 0x65A5,0x65E6,0x672E,0x672C,0x672A,0x672B,0x672D,0x6B63,/* 0xB8-0xBF */ + 0x6BCD,0x6C11,0x6C10,0x6C38,0x6C41,0x6C40,0x6C3E,0x72AF,/* 0xC0-0xC7 */ + 0x7384,0x7389,0x74DC,0x74E6,0x7518,0x751F,0x7528,0x7529,/* 0xC8-0xCF */ + 0x7530,0x7531,0x7532,0x7533,0x758B,0x767D,0x76AE,0x76BF,/* 0xD0-0xD7 */ + 0x76EE,0x77DB,0x77E2,0x77F3,0x793A,0x79BE,0x7A74,0xF9F7,/* 0xD8-0xDF */ + 0x4E1E,0x4E1F,0x4E52,0x4E53,0x4E69,0x4E99,0x4EA4,0x4EA6,/* 0xE0-0xE7 */ + 0x4EA5,0x4EFF,0x4F09,0x4F19,0x4F0A,0x4F15,0x4F0D,0x4F10,/* 0xE8-0xEF */ + 0x4F11,0x4F0F,0x4EF2,0x4EF6,0x4EFB,0x4EF0,0x4EF3,0x4EFD,/* 0xF0-0xF7 */ + 0x4F01,0x4F0B,0x5149,0x5147,0x5146,0x5148,0x5168,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5171,0x518D,0x51B0,0xF99C,0x5211,0x5212,0x520E,0x5216,/* 0x40-0x47 */ + 0xF99D,0x5308,0x5321,0x5320,0x5370,0x5371,0x5409,0xF9DE,/* 0x48-0x4F */ + 0x540C,0x540A,0x5410,0x5401,0x540B,0x5404,0x5411,0x540D,/* 0x50-0x57 */ + 0x5408,0x5403,0x540E,0x5406,0x5412,0x56E0,0x56DE,0x56DD,/* 0x58-0x5F */ + 0x5733,0x5730,0x5728,0x572D,0x572C,0x572F,0x5729,0x5919,/* 0x60-0x67 */ + 0x591A,0x5937,0x5938,0x5984,0x5978,0x5983,0x597D,0x5979,/* 0x68-0x6F */ + 0x5982,0x5981,0x5B57,0x5B58,0x5B87,0x5B88,0xFA04,0x5B89,/* 0x70-0x77 */ + 0x5BFA,0x5C16,0x5C79,0x5DDE,0x5E06,0x5E76,0xF98E,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5F0F,0x5F1B,0x5FD9,0x5FD6,0x620E,0x620C,0x620D,/* 0xA0-0xA7 */ + 0x6210,0x6263,0x625B,0x6258,0x6536,0x65E9,0x65E8,0x65EC,/* 0xA8-0xAF */ + 0x65ED,0x66F2,0x66F3,0x6709,0x673D,0x6734,0x6731,0x6735,/* 0xB0-0xB7 */ + 0x6B21,0x6B64,0x6B7B,0x6C16,0x6C5D,0x6C57,0x6C59,0x6C5F,/* 0xB8-0xBF */ + 0x6C60,0x6C50,0x6C55,0x6C61,0x6C5B,0x6C4D,0x6C4E,0x7070,/* 0xC0-0xC7 */ + 0x725F,0x725D,0x767E,0x7AF9,0x7C73,0x7CF8,0x7F36,0x7F8A,/* 0xC8-0xCF */ + 0xFA1E,0xF934,0x8003,0x800C,0x8012,0x8033,0x807F,0x8089,/* 0xD0-0xD7 */ + 0xF953,0x808C,0x81E3,0x81EA,0x81F3,0x81FC,0x820C,0x821B,/* 0xD8-0xDF */ + 0x821F,0x826E,0x8272,0x827E,0x866B,0x8840,0xFA08,0x8863,/* 0xE0-0xE7 */ + 0x897F,0x9621,0xF905,0x4EA8,0x4F4D,0x4F4F,0x4F47,0x4F57,/* 0xE8-0xEF */ + 0x4F5E,0x4F34,0x4F5B,0x4F55,0x4F30,0x4F50,0x4F51,0x4F3D,/* 0xF0-0xF7 */ + 0x4F3A,0x4F38,0x4F43,0x4F54,0x4F3C,0x4F46,0x4F63,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x4F5C,0x4F60,0x4F2F,0x4F4E,0x4F36,0x4F59,0x4F5D,0x4F48,/* 0x40-0x47 */ + 0x4F5A,0x514C,0x514B,0x514D,0x5175,0x51B6,0xF92E,0x5225,/* 0x48-0x4F */ + 0x5224,0xF9DD,0x522A,0x5228,0x52AB,0x52A9,0x52AA,0x52AC,/* 0x50-0x57 */ + 0x5323,0x5373,0xF91C,0xF9ED,0x542D,0x541E,0x543E,0x5426,/* 0x58-0x5F */ + 0x544E,0x5427,0x5446,0x5443,0x5433,0x5448,0xF980,0x541B,/* 0x60-0x67 */ + 0x5429,0x544A,0x5439,0x543B,0x5438,0x542E,0x5435,0x5436,/* 0x68-0x6F */ + 0x5420,0x543C,0x5440,0x5431,0x542B,0x541F,0x542C,0x56EA,/* 0x70-0x77 */ + 0x56F0,0x56E4,0x56EB,0x574A,0x5751,0x5740,0x574D,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5747,0x574E,0x573E,0x5750,0x574F,0x573B,0x58EF,/* 0xA0-0xA7 */ + 0x593E,0x599D,0x5992,0x59A8,0x599E,0x59A3,0x5999,0x5996,/* 0xA8-0xAF */ + 0x598D,0x59A4,0x5993,0x598A,0x59A5,0x5B5D,0x5B5C,0x5B5A,/* 0xB0-0xB7 */ + 0x5B5B,0x5B8C,0x5B8B,0x5B8F,0x5C2C,0x5C40,0x5C41,0xF9BD,/* 0xB8-0xBF */ + 0x5C3E,0x5C90,0x5C91,0x5C94,0x5C8C,0x5DEB,0x5E0C,0x5E8F,/* 0xC0-0xC7 */ + 0x5E87,0x5E8A,0x5EF7,0xF943,0x5F1F,0x5F64,0x5F62,0x5F77,/* 0xC8-0xCF */ + 0x5F79,0x5FD8,0x5FCC,0x5FD7,0x5FCD,0x5FF1,0x5FEB,0x5FF8,/* 0xD0-0xD7 */ + 0x5FEA,0x6212,0x6211,0x6284,0x6297,0x6296,0x6280,0x6276,/* 0xD8-0xDF */ + 0x6289,0x626D,0x628A,0x627C,0x627E,0x6279,0x6273,0x6292,/* 0xE0-0xE7 */ + 0x626F,0x6298,0x626E,0x6295,0x6293,0x6291,0x6286,0x6539,/* 0xE8-0xEF */ + 0x653B,0x6538,0x65F1,0xF901,0x675F,0xF9E1,0x674F,0x6750,/* 0xF0-0xF7 */ + 0x6751,0x675C,0x6756,0x675E,0x6749,0x6746,0x6760,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6753,0x6757,0x6B65,0x6BCF,0x6C42,0x6C5E,0x6C99,0x6C81,/* 0x40-0x47 */ + 0xF972,0x6C89,0x6C85,0x6C9B,0x6C6A,0x6C7A,0x6C90,0x6C70,/* 0x48-0x4F */ + 0x6C8C,0x6C68,0x6C96,0x6C92,0x6C7D,0x6C83,0x6C72,0x6C7E,/* 0x50-0x57 */ + 0x6C74,0x6C86,0x6C76,0x6C8D,0x6C94,0x6C98,0x6C82,0x7076,/* 0x58-0x5F */ + 0x707C,0x707D,0x7078,0xF946,0x7261,0x7260,0x72C4,0x72C2,/* 0x60-0x67 */ + 0x7396,0x752C,0x752B,0x7537,0x7538,0x7682,0x76EF,0x77E3,/* 0x68-0x6F */ + 0x79C1,0x79C0,0x79BF,0x7A76,0x7CFB,0x7F55,0x8096,0x8093,/* 0x70-0x77 */ + 0x809D,0x8098,0x809B,0x809A,0x80B2,0xF97C,0x8292,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x828B,0x828D,0xFA0A,0x89D2,0x8A00,0x8C37,0x8C46,/* 0xA0-0xA7 */ + 0x8C55,0x8C9D,0x8D64,0x8D70,0x8DB3,0x8EAB,0xF902,0x8F9B,/* 0xA8-0xAF */ + 0xF971,0x8FC2,0x8FC6,0x8FC5,0x8FC4,0x5DE1,0x9091,0x90A2,/* 0xB0-0xB7 */ + 0x90AA,0x90A6,0x90A3,0x9149,0x91C6,0xF9E9,0x9632,0xF9C6,/* 0xB8-0xBF */ + 0x9631,0x962A,0x962C,0x4E26,0x4E56,0x4E73,0x4E8B,0x4E9B,/* 0xC0-0xC7 */ + 0x4E9E,0x4EAB,0x4EAC,0x4F6F,0x4F9D,0x4F8D,0x4F73,0x4F7F,/* 0xC8-0xCF */ + 0x4F6C,0x4F9B,0xF9B5,0xF92D,0x4F83,0x4F70,0x4F75,0x4F88,/* 0xD0-0xD7 */ + 0x4F69,0x4F7B,0x4F96,0x4F7E,0x4F8F,0x4F91,0x4F7A,0x5154,/* 0xD8-0xDF */ + 0x5152,0x5155,0xF978,0x5177,0x5176,0x5178,0x51BD,0x51FD,/* 0xE0-0xE7 */ + 0x523B,0x5238,0x5237,0xF9FF,0x5230,0x522E,0x5236,0x5241,/* 0xE8-0xEF */ + 0x52BE,0x52BB,0x5352,0x5354,0x5353,0x5351,0x5366,0x5377,/* 0xF0-0xF7 */ + 0x5378,0x5379,0x53D6,0x53D4,0x53D7,0x5473,0x5475,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_A9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5496,0x5478,0x5495,0x5480,0x547B,0x5477,0x5484,0x5492,/* 0x40-0x47 */ + 0x5486,0x547C,0x5490,0x5471,0x5476,0x548C,0x549A,0x5462,/* 0x48-0x4F */ + 0x5468,0x548B,0x547D,0x548E,0x56FA,0x5783,0x5777,0x576A,/* 0x50-0x57 */ + 0x5769,0x5761,0x5766,0x5764,0x577C,0x591C,0x5949,0x5947,/* 0x58-0x5F */ + 0xF90C,0x5944,0x5954,0x59BE,0x59BB,0x59D4,0x59B9,0x59AE,/* 0x60-0x67 */ + 0x59D1,0x59C6,0x59D0,0x59CD,0x59CB,0x59D3,0x59CA,0x59AF,/* 0x68-0x6F */ + 0x59B3,0x59D2,0x59C5,0x5B5F,0x5B64,0x5B63,0x5B97,0x5B9A,/* 0x70-0x77 */ + 0x5B98,0x5B9C,0x5B99,0x5B9B,0x5C1A,0x5C48,0x5C45,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5C46,0x5CB7,0x5CA1,0x5CB8,0x5CA9,0x5CAB,0x5CB1,/* 0xA0-0xA7 */ + 0x5CB3,0x5E18,0x5E1A,0x5E16,0x5E15,0x5E1B,0x5E11,0x5E78,/* 0xA8-0xAF */ + 0x5E9A,0x5E97,0x5E9C,0x5E95,0x5E96,0x5EF6,0x5F26,0x5F27,/* 0xB0-0xB7 */ + 0x5F29,0x5F80,0x5F81,0x5F7F,0x5F7C,0x5FDD,0x5FE0,0x5FFD,/* 0xB8-0xBF */ + 0xF9A3,0x5FFF,0x600F,0x6014,0x602F,0x6035,0x6016,0x602A,/* 0xC0-0xC7 */ + 0x6015,0x6021,0x6027,0x6029,0x602B,0x601B,0x6216,0x6215,/* 0xC8-0xCF */ + 0x623F,0x623E,0x6240,0x627F,0xF925,0x62CC,0x62C4,0x62BF,/* 0xD0-0xD7 */ + 0x62C2,0x62B9,0x62D2,0x62DB,0x62AB,0xFA02,0x62D4,0x62CB,/* 0xD8-0xDF */ + 0x62C8,0x62A8,0x62BD,0x62BC,0x62D0,0x62D9,0x62C7,0x62CD,/* 0xE0-0xE7 */ + 0x62B5,0x62DA,0x62B1,0x62D8,0x62D6,0x62D7,0x62C6,0x62AC,/* 0xE8-0xEF */ + 0x62CE,0x653E,0x65A7,0x65BC,0x65FA,0x6614,0xF9E0,0x660C,/* 0xF0-0xF7 */ + 0x6606,0x6602,0x660E,0x6600,0x660F,0x6615,0x660A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6607,0x670D,0x670B,0x676D,0x678B,0x6795,0x6771,0x679C,/* 0x40-0x47 */ + 0x6773,0x6777,0x6787,0x679D,0xF9F4,0x676F,0x6770,0x677F,/* 0x48-0x4F */ + 0x6789,0x677E,0x6790,0x6775,0x679A,0x6793,0x677C,0x676A,/* 0x50-0x57 */ + 0x6772,0x6B23,0x6B66,0x6B67,0x6B7F,0x6C13,0x6C1B,0x6CE3,/* 0x58-0x5F */ + 0x6CE8,0x6CF3,0x6CB1,0xF968,0xF9E3,0x6CB3,0x6CBD,0x6CBE,/* 0x60-0x67 */ + 0x6CBC,0x6CE2,0x6CAB,0x6CD5,0x6CD3,0x6CB8,0x6CC4,0x6CB9,/* 0x68-0x6F */ + 0x6CC1,0x6CAE,0x6CD7,0x6CC5,0x6CF1,0x6CBF,0x6CBB,0x6CE1,/* 0x70-0x77 */ + 0x6CDB,0x6CCA,0x6CAC,0x6CEF,0x6CDC,0x6CD6,0x6CE0,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7095,0x708E,0x7092,0x708A,0xF9FB,0x722C,0x722D,/* 0xA0-0xA7 */ + 0x7238,0x7248,0x7267,0x7269,0xF9FA,0x72CE,0x72D9,0x72D7,/* 0xA8-0xAF */ + 0x72D0,0x73A9,0x73A8,0x739F,0x73AB,0x73A5,0x753D,0x759D,/* 0xB0-0xB7 */ + 0x7599,0x759A,0x7684,0x76C2,0x76F2,0x76F4,0x77E5,0x77FD,/* 0xB8-0xBF */ + 0x793E,0x7940,0x7941,0x79C9,0x79C8,0x7A7A,0x7A79,0x7AFA,/* 0xC0-0xC7 */ + 0x7CFE,0x7F54,0x7F8C,0x7F8B,0x8005,0x80BA,0x80A5,0x80A2,/* 0xC8-0xCF */ + 0x80B1,0x80A1,0x80AB,0x80A9,0x80B4,0x80AA,0x80AF,0x81E5,/* 0xD0-0xD7 */ + 0x81FE,0x820D,0x82B3,0x829D,0x8299,0x82AD,0x82BD,0x829F,/* 0xD8-0xDF */ + 0x82B9,0x82B1,0x82AC,0x82A5,0x82AF,0x82B8,0x82A3,0x82B0,/* 0xE0-0xE7 */ + 0x82BE,0x82B7,0x864E,0x8671,0x521D,0x8868,0x8ECB,0x8FCE,/* 0xE8-0xEF */ + 0x8FD4,0x8FD1,0x90B5,0x90B8,0x90B1,0x90B6,0x91C7,0xF90A,/* 0xF0-0xF7 */ + 0x9577,0x9580,0x961C,0x9640,0x963F,0x963B,0x9644,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9642,0x96B9,0x96E8,0x9752,0x975E,0x4E9F,0x4EAD,0xF977,/* 0x40-0x47 */ + 0x4FE1,0x4FB5,0x4FAF,0xF965,0x4FE0,0x4FD1,0x4FCF,0x4FDD,/* 0x48-0x4F */ + 0x4FC3,0x4FB6,0x4FD8,0x4FDF,0x4FCA,0x4FD7,0x4FAE,0x4FD0,/* 0x50-0x57 */ + 0x4FC4,0x4FC2,0x4FDA,0x4FCE,0x4FDE,0x4FB7,0x5157,0x5192,/* 0x58-0x5F */ + 0x5191,0x51A0,0x524E,0x5243,0x524A,0x524D,0x524C,0x524B,/* 0x60-0x67 */ + 0x5247,0x52C7,0x52C9,0x52C3,0x52C1,0x530D,0x5357,0x537B,/* 0x68-0x6F */ + 0x539A,0x53DB,0x54AC,0x54C0,0x54A8,0x54CE,0x54C9,0x54B8,/* 0x70-0x77 */ + 0x54A6,0x54B3,0x54C7,0x54C2,0xF99E,0x54AA,0x54C1,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x54C4,0x54C8,0x54AF,0x54AB,0x54B1,0x54BB,0x54A9,/* 0xA0-0xA7 */ + 0x54A7,0x54BF,0x56FF,0x5782,0x578B,0x57A0,0x57A3,0x57A2,/* 0xA8-0xAF */ + 0x57CE,0x57AE,0x5793,0x5955,0xF909,0x594F,0x594E,0x5950,/* 0xB0-0xB7 */ + 0x59DC,0x59D8,0x59FF,0x59E3,0x59E8,0x5A03,0x59E5,0x59EA,/* 0xB8-0xBF */ + 0x59DA,0x59E6,0x5A01,0x59FB,0x5B69,0x5BA3,0x5BA6,0x5BA4,/* 0xC0-0xC7 */ + 0x5BA2,0x5BA5,0x5C01,0x5C4E,0x5C4F,0x5C4D,0x5C4B,0x5CD9,/* 0xC8-0xCF */ + 0x5CD2,0x5DF7,0x5E1D,0x5E25,0x5E1F,0x5E7D,0x5EA0,0xFA01,/* 0xD0-0xD7 */ + 0x5EFA,0x5F08,0x5F2D,0x5F65,0x5F88,0x5F85,0x5F8A,0xF9D8,/* 0xD8-0xDF */ + 0x5F87,0x5F8C,0x5F89,0xF960,0x601D,0x6020,0x6025,0x600E,/* 0xE0-0xE7 */ + 0x6028,0x604D,0x6070,0x6068,0x6062,0x6046,0x6043,0x606C,/* 0xE8-0xEF */ + 0x606B,0x606A,0x6064,0x6241,0x62DC,0x6316,0x6309,0x62FC,/* 0xF0-0xF7 */ + 0x62ED,0x6301,0x62EE,0x62FD,0x6307,0x62F1,0x62F7,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x62EF,0x62EC,0xF973,0x62F4,0x6311,0x6302,0x653F,0x6545,/* 0x40-0x47 */ + 0x65AB,0x65BD,0x65E2,0x6625,0x662D,0x6620,0x6627,0x662F,/* 0x48-0x4F */ + 0x661F,0x6628,0x6631,0x6624,0x66F7,0x67FF,0x67D3,0x67F1,/* 0x50-0x57 */ + 0x67D4,0x67D0,0x67EC,0x67B6,0x67AF,0x67F5,0x67E9,0x67EF,/* 0x58-0x5F */ + 0x67C4,0x67D1,0x67B4,0x67DA,0x67E5,0x67B8,0x67CF,0x67DE,/* 0x60-0x67 */ + 0xF9C9,0x67B0,0x67D9,0x67E2,0x67DD,0x67D2,0x6B6A,0x6B83,/* 0x68-0x6F */ + 0x6B86,0x6BB5,0x6BD2,0x6BD7,0x6C1F,0x6CC9,0x6D0B,0x6D32,/* 0x70-0x77 */ + 0x6D2A,0xF9CA,0x6D25,0x6D0C,0x6D31,0xFA05,0x6D17,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6D3B,0x6D3D,0x6D3E,0x6D36,0xF915,0x6CF5,0x6D39,/* 0xA0-0xA7 */ + 0x6D27,0x6D38,0x6D29,0x6D2E,0x6D35,0x6D0E,0x6D2B,0x70AB,/* 0xA8-0xAF */ + 0x70BA,0x70B3,0x70AC,0x70AF,0x70AD,0x70B8,0x70AE,0x70A4,/* 0xB0-0xB7 */ + 0x7230,0x7272,0x726F,0x7274,0x72E9,0x72E0,0x72E1,0x73B7,/* 0xB8-0xBF */ + 0x73CA,0x73BB,0xF9AD,0x73CD,0x73C0,0x73B3,0x751A,0x752D,/* 0xC0-0xC7 */ + 0x754F,0x754C,0x754E,0x754B,0x75AB,0x75A4,0x75A5,0x75A2,/* 0xC8-0xCF */ + 0x75A3,0x7678,0x7686,0x7687,0x7688,0x76C8,0x76C6,0x76C3,/* 0xD0-0xD7 */ + 0x76C5,0xF96D,0x76F9,0x76F8,0x7709,0x770B,0x76FE,0x76FC,/* 0xD8-0xDF */ + 0x7707,0x77DC,0x7802,0x7814,0x780C,0x780D,0x7946,0x7949,/* 0xE0-0xE7 */ + 0x7948,0x7947,0x79B9,0x79BA,0x79D1,0x79D2,0x79CB,0x7A7F,/* 0xE8-0xEF */ + 0x7A81,0x7AFF,0x7AFD,0x7C7D,0x7D02,0x7D05,0x7D00,0x7D09,/* 0xF0-0xF7 */ + 0x7D07,0x7D04,0x7D06,0x7F38,0x7F8E,0x7FBF,0x8004,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8010,0x800D,0x8011,0x8036,0x80D6,0x80E5,0x80DA,0x80C3,/* 0x40-0x47 */ + 0x80C4,0x80CC,0x80E1,0x80DB,0x80CE,0x80DE,0x80E4,0x80DD,/* 0x48-0x4F */ + 0x81F4,0x8222,0x82E7,0x8303,0x8305,0x82E3,0x82DB,0x82E6,/* 0x50-0x57 */ + 0x8304,0xF974,0x8302,0x8309,0x82D2,0x82D7,0x82F1,0x8301,/* 0x58-0x5F */ + 0x82DC,0x82D4,0x82D1,0x82DE,0x82D3,0x82DF,0x82EF,0x8306,/* 0x60-0x67 */ + 0x8650,0x8679,0x867B,0x867A,0x884D,0x886B,0x8981,0x89D4,/* 0x68-0x6F */ + 0x8A08,0x8A02,0x8A03,0x8C9E,0x8CA0,0x8D74,0x8D73,0x8DB4,/* 0x70-0x77 */ + 0x8ECD,0x8ECC,0x8FF0,0x8FE6,0x8FE2,0x8FEA,0x8FE5,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8FED,0x8FEB,0x8FE4,0x8FE8,0x90CA,0x90CE,0x90C1,/* 0xA0-0xA7 */ + 0x90C3,0x914B,0x914A,0x91CD,0x9582,0x9650,0xF951,0x964C,/* 0xA8-0xAF */ + 0xFA09,0x9762,0x9769,0x97CB,0x97ED,0x97F3,0x9801,0x98A8,/* 0xB0-0xB7 */ + 0x98DB,0x98DF,0x9996,0x9999,0x4E58,0x4EB3,0x500C,0x500D,/* 0xB8-0xBF */ + 0x5023,0x4FEF,0x5026,0x5025,0x4FF8,0x5029,0x5016,0x5006,/* 0xC0-0xC7 */ + 0x503C,0x501F,0x501A,0x5012,0x5011,0x4FFA,0x5000,0x5014,/* 0xC8-0xCF */ + 0x5028,0x4FF1,0x5021,0x500B,0x5019,0x5018,0x4FF3,0x4FEE,/* 0xD0-0xD7 */ + 0x502D,0x502A,0x4FFE,0xF9D4,0x5009,0x517C,0x51A4,0x51A5,/* 0xD8-0xDF */ + 0x51A2,0x51CD,0xF955,0x51C6,0x51CB,0x5256,0x525C,0x5254,/* 0xE0-0xE7 */ + 0x525B,0x525D,0x532A,0x537F,0x539F,0x539D,0x53DF,0x54E8,/* 0xE8-0xEF */ + 0x5510,0x5501,0x5537,0x54FC,0x54E5,0x54F2,0x5506,0x54FA,/* 0xF0-0xF7 */ + 0x5514,0x54E9,0x54ED,0x54E1,0x5509,0x54EE,0x54EA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x54E6,0x5527,0x5507,0x54FD,0x550F,0x5703,0x5704,0x57C2,/* 0x40-0x47 */ + 0x57D4,0x57CB,0x57C3,0x5809,0x590F,0x5957,0x5958,0x595A,/* 0x48-0x4F */ + 0x5A11,0x5A18,0x5A1C,0x5A1F,0x5A1B,0x5A13,0x59EC,0x5A20,/* 0x50-0x57 */ + 0x5A23,0x5A29,0x5A25,0x5A0C,0x5A09,0x5B6B,0x5C58,0x5BB0,/* 0x58-0x5F */ + 0x5BB3,0x5BB6,0x5BB4,0x5BAE,0x5BB5,0x5BB9,0x5BB8,0x5C04,/* 0x60-0x67 */ + 0x5C51,0x5C55,0x5C50,0x5CED,0x5CFD,0x5CFB,0x5CEA,0x5CE8,/* 0x68-0x6F */ + 0x5CF0,0x5CF6,0x5D01,0x5CF4,0x5DEE,0x5E2D,0x5E2B,0x5EAB,/* 0x70-0x77 */ + 0x5EAD,0x5EA7,0x5F31,0x5F92,0x5F91,0x5F90,0x6059,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6063,0x6065,0x6050,0x6055,0x606D,0x6069,0x606F,/* 0xA0-0xA7 */ + 0x6084,0x609F,0x609A,0x608D,0x6094,0x608C,0x6085,0x6096,/* 0xA8-0xAF */ + 0x6247,0x62F3,0x6308,0x62FF,0x634E,0x633E,0x632F,0x6355,/* 0xB0-0xB7 */ + 0x6342,0x6346,0x634F,0x6349,0x633A,0x6350,0x633D,0x632A,/* 0xB8-0xBF */ + 0x632B,0x6328,0x634D,0x634C,0x6548,0x6549,0xF9BE,0x65C1,/* 0xC0-0xC7 */ + 0xF983,0x6642,0x6649,0x664F,0x6643,0x6652,0x664C,0x6645,/* 0xC8-0xCF */ + 0x6641,0x66F8,0x6714,0x6715,0xF929,0x6821,0x6838,0x6848,/* 0xD0-0xD7 */ + 0x6846,0x6853,0x6839,0x6842,0x6854,0x6829,0x68B3,0xF9DA,/* 0xD8-0xDF */ + 0x684C,0x6851,0x683D,0x67F4,0x6850,0x6840,0x683C,0x6843,/* 0xE0-0xE7 */ + 0x682A,0x6845,0x6813,0x6818,0x6841,0x6B8A,0x6B89,0x6BB7,/* 0xE8-0xEF */ + 0x6C23,0x6C27,0x6C28,0x6C26,0x6C24,0x6CF0,0xF92A,0x6D95,/* 0xF0-0xF7 */ + 0x6D88,0x6D87,0x6D66,0x6D78,0x6D77,0x6D59,0x6D93,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_AF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6D6C,0x6D89,0x6D6E,0x6D5A,0x6D74,0x6D69,0x6D8C,0x6D8A,/* 0x40-0x47 */ + 0x6D79,0x6D85,0x6D65,0x6D94,0x70CA,0x70D8,0x70E4,0xF916,/* 0x48-0x4F */ + 0xF99F,0x70CF,0x7239,0x7279,0xF92B,0x72F9,0x72FD,0x72F8,/* 0x50-0x57 */ + 0x72F7,0x7386,0x73ED,0xF9CC,0x73EE,0x73E0,0x73EA,0xF917,/* 0x58-0x5F */ + 0x7554,0x755D,0x755C,0x755A,0xF9CD,0x75BE,0x75C5,0x75C7,/* 0x60-0x67 */ + 0x75B2,0x75B3,0x75BD,0x75BC,0x75B9,0x75C2,0x75B8,0x768B,/* 0x68-0x6F */ + 0x76B0,0xFA17,0x76CD,0x76CE,0x7729,0x771F,0x7720,0x7728,/* 0x70-0x77 */ + 0x77E9,0x7830,0x7827,0x7838,0x781D,0x7834,0x7837,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7825,0x782D,0x7820,0x781F,0x7832,0x7955,0x7950,/* 0xA0-0xA7 */ + 0x7960,0x795F,0x7956,0xFA19,0x795D,0x7957,0x795A,0x79E4,/* 0xA8-0xAF */ + 0x79E3,0x79E7,0x79DF,0x79E6,0x79E9,0x79D8,0x7A84,0x7A88,/* 0xB0-0xB7 */ + 0x7AD9,0x7B06,0x7B11,0x7C89,0x7D21,0x7D17,0x7D0B,0x7D0A,/* 0xB8-0xBF */ + 0x7D20,0xF96A,0x7D14,0xF9CF,0x7D15,0x7D1A,0x7D1C,0x7D0D,/* 0xC0-0xC7 */ + 0x7D19,0x7D1B,0x7F3A,0x7F5F,0x7F94,0x7FC5,0x7FC1,0x8006,/* 0xC8-0xCF */ + 0x8018,0x8015,0x8019,0x8017,0x803D,0x803F,0x80F1,0x8102,/* 0xD0-0xD7 */ + 0x80F0,0x8105,0x80ED,0x80F4,0x8106,0x80F8,0x80F3,0x8108,/* 0xD8-0xDF */ + 0x80FD,0x810A,0x80FC,0x80EF,0x81ED,0x81EC,0x8200,0x8210,/* 0xE0-0xE7 */ + 0x822A,0x822B,0x8228,0x822C,0x82BB,0x832B,0x8352,0x8354,/* 0xE8-0xEF */ + 0x834A,0x8338,0x8350,0x8349,0x8335,0x8334,0x834F,0x8332,/* 0xF0-0xF7 */ + 0x8339,0xF9FE,0x8317,0x8340,0x8331,0x8328,0x8343,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8654,0x868A,0x86AA,0x8693,0x86A4,0x86A9,0x868C,0x86A3,/* 0x40-0x47 */ + 0x869C,0x8870,0x8877,0x8881,0x8882,0x887D,0x8879,0x8A18,/* 0x48-0x4F */ + 0x8A10,0x8A0E,0x8A0C,0x8A15,0x8A0A,0x8A17,0x8A13,0x8A16,/* 0x50-0x57 */ + 0x8A0F,0x8A11,0xF900,0x8C7A,0x8C79,0x8CA1,0x8CA2,0x8D77,/* 0x58-0x5F */ + 0x8EAC,0x8ED2,0x8ED4,0x8ECF,0x8FB1,0x9001,0x9006,0x8FF7,/* 0x60-0x67 */ + 0x9000,0x8FFA,0x8FF4,0x9003,0x8FFD,0x9005,0x8FF8,0x9095,/* 0x68-0x6F */ + 0x90E1,0x90DD,0x90E2,0x9152,0x914D,0x914C,0x91D8,0x91DD,/* 0x70-0x77 */ + 0x91D7,0x91DC,0x91D9,0x9583,0x9662,0x9663,0x9661,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x965B,0x965D,0x9664,0x9658,0x965E,0x96BB,0x98E2,/* 0xA0-0xA7 */ + 0x99AC,0x9AA8,0x9AD8,0x9B25,0x9B32,0x9B3C,0x4E7E,0x507A,/* 0xA8-0xAF */ + 0x507D,0x505C,0x5047,0x5043,0x504C,0x505A,0x5049,0x5065,/* 0xB0-0xB7 */ + 0x5076,0x504E,0x5055,0x5075,0x5074,0x5077,0x504F,0x500F,/* 0xB8-0xBF */ + 0x506F,0x506D,0x515C,0x5195,0x51F0,0x526A,0x526F,0xF952,/* 0xC0-0xC7 */ + 0x52D9,0x52D8,0x52D5,0x5310,0x530F,0x5319,0xF9EB,0x5340,/* 0xC8-0xCF */ + 0x533E,0xF96B,0x66FC,0x5546,0x556A,0x5566,0x5544,0x555E,/* 0xD0-0xD7 */ + 0x5561,0x5543,0x554A,0x5531,0x5556,0x554F,0x5555,0x552F,/* 0xD8-0xDF */ + 0x5564,0x5538,0x552E,0x555C,0x552C,0x5563,0x5533,0x5541,/* 0xE0-0xE7 */ + 0x5557,0x5708,0x570B,0x5709,0x57DF,0x5805,0x580A,0x5806,/* 0xE8-0xEF */ + 0x57E0,0x57E4,0x57FA,0x5802,0x5835,0x57F7,0x57F9,0x5920,/* 0xF0-0xF7 */ + 0x5962,0x5A36,0x5A41,0x5A49,0x5A66,0x5A6A,0x5A40,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5A3C,0x5A62,0x5A5A,0x5A46,0x5A4A,0x5B70,0x5BC7,0x5BC5,/* 0x40-0x47 */ + 0x5BC4,0x5BC2,0x5BBF,0x5BC6,0x5C09,0x5C08,0x5C07,0x5C60,/* 0x48-0x4F */ + 0x5C5C,0x5C5D,0x5D07,0x5D06,0x5D0E,0x5D1B,0x5D16,0x5D22,/* 0x50-0x57 */ + 0x5D11,0x5D29,0x5D14,0xF9D5,0x5D24,0x5D27,0x5D17,0x5DE2,/* 0x58-0x5F */ + 0x5E38,0x5E36,0x5E33,0x5E37,0x5EB7,0x5EB8,0x5EB6,0x5EB5,/* 0x60-0x67 */ + 0x5EBE,0x5F35,0x5F37,0x5F57,0x5F6C,0x5F69,0x5F6B,0x5F97,/* 0x68-0x6F */ + 0x5F99,0x5F9E,0x5F98,0x5FA1,0x5FA0,0x5F9C,0x607F,0x60A3,/* 0x70-0x77 */ + 0x6089,0x60A0,0x60A8,0x60CB,0x60B4,0x60E6,0x60BD,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x60C5,0x60BB,0x60B5,0x60DC,0x60BC,0x60D8,0x60D5,/* 0xA0-0xA7 */ + 0x60C6,0x60DF,0x60B8,0x60DA,0x60C7,0x621A,0x621B,0x6248,/* 0xA8-0xAF */ + 0xF975,0x63A7,0x6372,0x6396,0x63A2,0x63A5,0x6377,0x6367,/* 0xB0-0xB7 */ + 0x6398,0x63AA,0x6371,0x63A9,0x6389,0x6383,0x639B,0x636B,/* 0xB8-0xBF */ + 0x63A8,0x6384,0x6388,0x6399,0x63A1,0x63AC,0x6392,0x638F,/* 0xC0-0xC7 */ + 0x6380,0xF9A4,0x6369,0x6368,0x637A,0x655D,0x6556,0x6551,/* 0xC8-0xCF */ + 0x6559,0x6557,0x555F,0x654F,0x6558,0x6555,0x6554,0x659C,/* 0xD0-0xD7 */ + 0x659B,0x65AC,0x65CF,0x65CB,0x65CC,0x65CE,0x665D,0x665A,/* 0xD8-0xDF */ + 0x6664,0x6668,0x6666,0x665E,0x66F9,0x52D7,0x671B,0xF97A,/* 0xE0-0xE7 */ + 0x68AF,0x68A2,0x6893,0x68B5,0x687F,0x6876,0x68B1,0x68A7,/* 0xE8-0xEF */ + 0x6897,0x68B0,0x6883,0x68C4,0x68AD,0x6886,0x6885,0x6894,/* 0xF0-0xF7 */ + 0x689D,0xF9E2,0x689F,0x68A1,0x6882,0x6B32,0xF970,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6BEB,0x6BEC,0x6C2B,0x6D8E,0x6DBC,0x6DF3,0x6DD9,0x6DB2,/* 0x40-0x47 */ + 0x6DE1,0x6DCC,0x6DE4,0x6DFB,0x6DFA,0x6E05,0x6DC7,0xF9F5,/* 0x48-0x4F */ + 0x6DAF,0x6DD1,0x6DAE,0x6DDE,0x6DF9,0x6DB8,0x6DF7,0x6DF5,/* 0x50-0x57 */ + 0x6DC5,0x6DD2,0x6E1A,0x6DB5,0xF94D,0x6DEB,0x6DD8,0xF9D6,/* 0x58-0x5F */ + 0x6DF1,0x6DEE,0x6DE8,0x6DC6,0x6DC4,0x6DAA,0x6DEC,0x6DBF,/* 0x60-0x67 */ + 0x6DE6,0x70F9,0x7109,0x710A,0x70FD,0x70EF,0x723D,0x727D,/* 0x68-0x6F */ + 0x7281,0x731C,0x731B,0x7316,0x7313,0x7319,0xF9DB,0x7405,/* 0x70-0x77 */ + 0x740A,0x7403,0xF9E4,0x73FE,0x740D,0x74E0,0x74F6,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x74F7,0x751C,0x7522,0xF976,0x7566,0x7562,0xF962,/* 0xA0-0xA7 */ + 0x758F,0x75D4,0x75D5,0x75B5,0x75CA,0x75CD,0x768E,0x76D4,/* 0xA8-0xAF */ + 0x76D2,0x76DB,0x7737,0x773E,0x773C,0x7736,0x7738,0x773A,/* 0xB0-0xB7 */ + 0xF9CE,0x7843,0x784E,0xFA1A,0x7968,0x796D,0x79FB,0x7A92,/* 0xB8-0xBF */ + 0x7A95,0xF9F8,0x7B28,0x7B1B,0x7B2C,0x7B26,0x7B19,0x7B1E,/* 0xC0-0xC7 */ + 0x7B2E,0xF9F9,0x7C97,0x7C95,0x7D46,0x7D43,0x7D71,0x7D2E,/* 0xC8-0xCF */ + 0x7D39,0x7D3C,0x7D40,0x7D30,0x7D33,0x7D44,0xF94F,0x7D42,/* 0xD0-0xD7 */ + 0x7D32,0x7D31,0x7F3D,0x7F9E,0xF9AF,0x7FCC,0x7FCE,0x7FD2,/* 0xD8-0xDF */ + 0x801C,0x804A,0xF9B0,0x812F,0x8116,0x8123,0x812B,0x8129,/* 0xE0-0xE7 */ + 0x8130,0x8124,0x8202,0x8235,0x8237,0x8236,0x8239,0x838E,/* 0xE8-0xEF */ + 0x839E,0x8398,0x8378,0x83A2,0x8396,0x83BD,0x83AB,0x8392,/* 0xF0-0xF7 */ + 0x838A,0x8393,0x8389,0x83A0,0x8377,0x837B,0x837C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8386,0x83A7,0x8655,0x5F6A,0x86C7,0x86C0,0x86B6,0x86C4,/* 0x40-0x47 */ + 0x86B5,0x86C6,0x86CB,0x86B1,0x86AF,0x86C9,0x8853,0x889E,/* 0x48-0x4F */ + 0x8888,0x88AB,0x8892,0x8896,0x888D,0x888B,0x8993,0x898F,/* 0x50-0x57 */ + 0x8A2A,0x8A1D,0x8A23,0x8A25,0x8A31,0x8A2D,0x8A1F,0x8A1B,/* 0x58-0x5F */ + 0x8A22,0x8C49,0x8C5A,0x8CA9,0x8CAC,0x8CAB,0x8CA8,0x8CAA,/* 0x60-0x67 */ + 0x8CA7,0x8D67,0x8D66,0x8DBE,0x8DBA,0x8EDB,0x8EDF,0x9019,/* 0x68-0x6F */ + 0x900D,0x901A,0x9017,0xF99A,0x901F,0x901D,0x9010,0x9015,/* 0x70-0x77 */ + 0x901E,0x9020,0x900F,0x9022,0x9016,0x901B,0x9014,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x90E8,0x90ED,0xFA26,0x9157,0x91CE,0x91F5,0x91E6,/* 0xA0-0xA7 */ + 0x91E3,0x91E7,0x91ED,0x91E9,0x9589,0x966A,0xF959,0x9673,/* 0xA8-0xAF */ + 0xF9D3,0x9670,0x9674,0x9676,0x9677,0x966C,0x96C0,0x96EA,/* 0xB0-0xB7 */ + 0x96E9,0x7AE0,0x7ADF,0x9802,0x9803,0x9B5A,0x9CE5,0x9E75,/* 0xB8-0xBF */ + 0xF940,0x9EA5,0x9EBB,0x50A2,0x508D,0x5085,0x5099,0x5091,/* 0xC0-0xC7 */ + 0x5080,0x5096,0x5098,0x509A,0x6700,0x51F1,0x5272,0x5274,/* 0xC8-0xCF */ + 0x5275,0x5269,0xF92F,0x52DD,0x52DB,0x535A,0x53A5,0x557B,/* 0xD0-0xD7 */ + 0x5580,0x55A7,0x557C,0x558A,0x559D,0x5598,0x5582,0x559C,/* 0xD8-0xDF */ + 0x55AA,0x5594,0xF90B,0x558B,0x5583,0x55B3,0x55AE,0x559F,/* 0xE0-0xE7 */ + 0x553E,0x55B2,0x559A,0x55BB,0x55AC,0x55B1,0x557E,0x5589,/* 0xE8-0xEF */ + 0x55AB,0x5599,0x570D,0x582F,0x582A,0x5834,0x5824,0x5830,/* 0xF0-0xF7 */ + 0x5831,0x5821,0x581D,0x5820,0x58F9,0x58FA,0x5960,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5A77,0x5A9A,0x5A7F,0x5A92,0x5A9B,0x5AA7,0x5B73,0x5B71,/* 0x40-0x47 */ + 0x5BD2,0x5BCC,0x5BD3,0x5BD0,0x5C0A,0x5C0B,0x5C31,0x5D4C,/* 0x48-0x4F */ + 0xF921,0x5D34,0x5D47,0x5DFD,0x5E45,0x5E3D,0x5E40,0x5E43,/* 0x50-0x57 */ + 0x5E7E,0xF928,0x5EC1,0x5EC2,0x5EC4,0x5F3C,0x5F6D,0xF966,/* 0x58-0x5F */ + 0x5FAA,0x5FA8,0x60D1,0xF9B9,0x60B2,0x60B6,0x60E0,0x611C,/* 0x60-0x67 */ + 0x6123,0x60FA,0x6115,0x60F0,0x60FB,0x60F4,0x6168,0x60F1,/* 0x68-0x6F */ + 0x610E,0x60F6,0x6109,0x6100,0x6112,0x621F,0x6249,0x63A3,/* 0x70-0x77 */ + 0x638C,0x63CF,0x63C0,0x63E9,0x63C9,0x63C6,0x63CD,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x63D2,0x63E3,0x63D0,0x63E1,0x63D6,0x63ED,0x63EE,/* 0xA0-0xA7 */ + 0x6376,0x63F4,0x63EA,0x63DB,0x6452,0x63DA,0x63F9,0x655E,/* 0xA8-0xAF */ + 0x6566,0x6562,0x6563,0x6591,0x6590,0x65AF,0x666E,0x6670,/* 0xB0-0xB7 */ + 0xFA12,0x6676,0x666F,0x6691,0x667A,0x667E,0x6677,0x66FE,/* 0xB8-0xBF */ + 0x66FF,0x671F,0x671D,0x68FA,0x68D5,0x68E0,0x68D8,0x68D7,/* 0xC0-0xC7 */ + 0x6905,0x68DF,0x68F5,0x68EE,0x68E7,0x68F9,0x68D2,0x68F2,/* 0xC8-0xCF */ + 0x68E3,0x68CB,0x68CD,0x690D,0x6912,0x690E,0x68C9,0x68DA,/* 0xD0-0xD7 */ + 0x696E,0x68FB,0x6B3E,0x6B3A,0x6B3D,0x6B98,0x6B96,0x6BBC,/* 0xD8-0xDF */ + 0x6BEF,0x6C2E,0x6C2F,0x6C2C,0x6E2F,0x6E38,0x6E54,0x6E21,/* 0xE0-0xE7 */ + 0x6E32,0x6E67,0x6E4A,0x6E20,0x6E25,0x6E23,0x6E1B,0x6E5B,/* 0xE8-0xEF */ + 0x6E58,0x6E24,0x6E56,0x6E6E,0x6E2D,0x6E26,0x6E6F,0x6E34,/* 0xF0-0xF7 */ + 0x6E4D,0x6E3A,0x6E2C,0x6E43,0x6E1D,0x6E3E,0x6ECB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6E89,0x6E19,0x6E4E,0x6E63,0x6E44,0x6E72,0x6E69,0x6E5F,/* 0x40-0x47 */ + 0x7119,0x711A,0x7126,0x7130,0x7121,0x7136,0x716E,0x711C,/* 0x48-0x4F */ + 0x724C,0x7284,0x7280,0x7336,0x7325,0x7334,0x7329,0x743A,/* 0x50-0x57 */ + 0x742A,0x7433,0x7422,0x7425,0x7435,0x7436,0x7434,0x742F,/* 0x58-0x5F */ + 0x741B,0x7426,0x7428,0x7525,0x7526,0x756B,0x756A,0xF9E5,/* 0x60-0x67 */ + 0x75DB,0x75E3,0x75D9,0x75D8,0x75DE,0x75E0,0x767B,0x767C,/* 0x68-0x6F */ + 0x7696,0x7693,0x76B4,0x76DC,0x774F,0x77ED,0x785D,0x786C,/* 0x70-0x77 */ + 0x786F,0x7A0D,0x7A08,0x7A0B,0x7A05,0x7A00,0x7A98,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7A97,0x7A96,0x7AE5,0x7AE3,0x7B49,0x7B56,0x7B46,/* 0xA0-0xA7 */ + 0x7B50,0x7B52,0x7B54,0x7B4D,0x7B4B,0x7B4F,0x7B51,0x7C9F,/* 0xA8-0xAF */ + 0x7CA5,0x7D5E,0x7D50,0x7D68,0x7D55,0x7D2B,0x7D6E,0x7D72,/* 0xB0-0xB7 */ + 0x7D61,0x7D66,0x7D62,0x7D70,0x7D73,0x5584,0x7FD4,0x7FD5,/* 0xB8-0xBF */ + 0x800B,0x8052,0x8085,0x8155,0x8154,0x814B,0x8151,0x814E,/* 0xC0-0xC7 */ + 0x8139,0x8146,0x813E,0x814C,0x8153,0x8174,0x8212,0x821C,/* 0xC8-0xCF */ + 0x83E9,0x8403,0x83F8,0x840D,0x83E0,0x83C5,0x840B,0x83C1,/* 0xD0-0xD7 */ + 0x83EF,0xF958,0x83F4,0x8457,0x840A,0x83F0,0x840C,0x83CC,/* 0xD8-0xDF */ + 0x83FD,0x83F2,0x83CA,0x8438,0x840E,0x8404,0x83DC,0x8407,/* 0xE0-0xE7 */ + 0x83D4,0x83DF,0x865B,0x86DF,0x86D9,0x86ED,0x86D4,0x86DB,/* 0xE8-0xEF */ + 0x86E4,0x86D0,0x86DE,0x8857,0x88C1,0xF9A0,0x88B1,0x8983,/* 0xF0-0xF7 */ + 0x8996,0x8A3B,0x8A60,0x8A55,0x8A5E,0x8A3C,0x8A41,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8A54,0x8A5B,0x8A50,0x8A46,0x8A34,0x8A3A,0x8A36,0x8A56,/* 0x40-0x47 */ + 0x8C61,0x8C82,0x8CAF,0x8CBC,0x8CB3,0x8CBD,0x8CC1,0x8CBB,/* 0x48-0x4F */ + 0x8CC0,0x8CB4,0x8CB7,0x8CB6,0x8CBF,0x8CB8,0x8D8A,0x8D85,/* 0x50-0x57 */ + 0x8D81,0x8DCE,0x8DDD,0x8DCB,0x8DDA,0x8DD1,0x8DCC,0x8DDB,/* 0x58-0x5F */ + 0x8DC6,0x8EFB,0x8EF8,0x8EFC,0x8F9C,0x902E,0x9035,0x9031,/* 0x60-0x67 */ + 0xFA25,0x9032,0x9036,0x9102,0x90F5,0x9109,0x90FE,0x9163,/* 0x68-0x6F */ + 0x9165,0xF97E,0x9214,0x9215,0x9223,0x9209,0x921E,0x920D,/* 0x70-0x77 */ + 0x9210,0x9207,0x9211,0x9594,0x958F,0x958B,0x9591,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9593,0x9592,0x958E,0x968A,0x968E,0x968B,0x967D,/* 0xA0-0xA7 */ + 0x9685,0xF9DC,0x968D,0x9672,0x9684,0x96C1,0x96C5,0x96C4,/* 0xA8-0xAF */ + 0x96C6,0x96C7,0x96EF,0x96F2,0x97CC,0x9805,0x9806,0x9808,/* 0xB0-0xB7 */ + 0x98E7,0x98EA,0xFA2A,0x98E9,0x98F2,0x98ED,0x99AE,0x99AD,/* 0xB8-0xBF */ + 0x9EC3,0x9ECD,0x9ED1,0xF91B,0x50AD,0x50B5,0x50B2,0x50B3,/* 0xC0-0xC7 */ + 0x50C5,0x50BE,0x50AC,0x50B7,0x50BB,0x50AF,0x50C7,0x527F,/* 0xC8-0xCF */ + 0x5277,0x527D,0x52DF,0x52E6,0x52E4,0x52E2,0x52E3,0x532F,/* 0xD0-0xD7 */ + 0x55DF,0x55E8,0x55D3,0x55E6,0x55CE,0x55DC,0x55C7,0x55D1,/* 0xD8-0xDF */ + 0x55E3,0x55E4,0x55EF,0x55DA,0x55E1,0x55C5,0x55C6,0x55E5,/* 0xE0-0xE7 */ + 0x55C9,0x5712,0x5713,0xF96C,0x5851,0x5858,0x5857,0xFA10,/* 0xE8-0xEF */ + 0x5854,0x586B,0x584C,0x586D,0x584A,0x5862,0x5852,0x584B,/* 0xF0-0xF7 */ + 0x5967,0x5AC1,0x5AC9,0x5ACC,0x5ABE,0x5ABD,0x5ABC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5AB3,0x5AC2,0x5AB2,0x5D69,0x5D6F,0x5E4C,0x5E79,0xF9A2,/* 0x40-0x47 */ + 0x5EC8,0x5F12,0x5F59,0x5FAC,0x5FAE,0x611A,0x610F,0x6148,/* 0x48-0x4F */ + 0x611F,0x60F3,0x611B,0x60F9,0x6101,0x6108,0x614E,0x614C,/* 0x50-0x57 */ + 0xF9D9,0x614D,0x613E,0x6134,0x6127,0x610D,0x6106,0x6137,/* 0x58-0x5F */ + 0x6221,0x6222,0x6413,0x643E,0x641E,0x642A,0x642D,0x643D,/* 0x60-0x67 */ + 0x642C,0x640F,0x641C,0x6414,0x640D,0x6436,0x6416,0x6417,/* 0x68-0x6F */ + 0x6406,0x656C,0x659F,0x65B0,0x6697,0x6689,0x6687,0xF9C5,/* 0x70-0x77 */ + 0x6696,0x6684,0x6698,0x668D,0x6703,0x6994,0x696D,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x695A,0x6977,0x6960,0x6954,0x6975,0x6930,0x6982,/* 0xA0-0xA7 */ + 0x694A,0x6968,0x696B,0x695E,0x6953,0x6979,0x6986,0x695D,/* 0xA8-0xAF */ + 0x6963,0x695B,0x6B47,0x6B72,0x6BC0,0x6BBF,0x6BD3,0x6BFD,/* 0xB0-0xB7 */ + 0x6EA2,0x6EAF,0x6ED3,0x6EB6,0x6EC2,0x6E90,0x6E9D,0x6EC7,/* 0xB8-0xBF */ + 0x6EC5,0x6EA5,0x6E98,0x6EBC,0xF9EC,0x6EAB,0xF904,0x6E96,/* 0xC0-0xC7 */ + 0xF9CB,0x6EC4,0x6ED4,0x6EAA,0x6EA7,0x6EB4,0x714E,0x7159,/* 0xC8-0xCF */ + 0x7169,0x7164,0xF993,0x7167,0x715C,0x716C,0x7166,0x714C,/* 0xD0-0xD7 */ + 0x7165,0x715E,0x7146,0x7168,0x7156,0x723A,0x7252,0x7337,/* 0xD8-0xDF */ + 0x7345,0x733F,0x733E,0x746F,0x745A,0x7455,0x745F,0x745E,/* 0xE0-0xE7 */ + 0x7441,0x743F,0x7459,0x745B,0x745C,0x7576,0x7578,0x7600,/* 0xE8-0xEF */ + 0x75F0,0x7601,0x75F2,0x75F1,0x75FA,0x75FF,0x75F4,0x75F3,/* 0xF0-0xF7 */ + 0x76DE,0x76DF,0x775B,0x776B,0x7766,0x775E,0x7763,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7779,0x776A,0x776C,0x775C,0x7765,0x7768,0x7762,0x77EE,/* 0x40-0x47 */ + 0x788E,0x78B0,0x7897,0x7898,0xF93B,0x7889,0x787C,0x7891,/* 0x48-0x4F */ + 0x7893,0x787F,0x797A,0xF93C,0x7981,0x842C,0x79BD,0xF956,/* 0x50-0x57 */ + 0x7A1A,0x7A20,0x7A14,0x7A1F,0x7A1E,0x7A9F,0x7AA0,0x7B77,/* 0x58-0x5F */ + 0x7BC0,0x7B60,0x7B6E,0x7B67,0x7CB1,0x7CB3,0x7CB5,0x7D93,/* 0x60-0x67 */ + 0x7D79,0x7D91,0x7D81,0x7D8F,0x7D5B,0x7F6E,0x7F69,0x7F6A,/* 0x68-0x6F */ + 0x7F72,0x7FA9,0x7FA8,0x7FA4,0x8056,0x8058,0x8086,0x8084,/* 0x70-0x77 */ + 0x8171,0x8170,0x8178,0x8165,0x816E,0x8173,0x816B,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8179,0x817A,0x8166,0x8205,0x8247,0x8482,0x8477,/* 0xA0-0xA7 */ + 0xF918,0x8431,0x8475,0x8466,0x846B,0xF96E,0x846C,0x845B,/* 0xA8-0xAF */ + 0x843C,0x8435,0x8461,0x8463,0x8469,0x846D,0x8446,0x865E,/* 0xB0-0xB7 */ + 0xF936,0x865F,0x86F9,0x8713,0x8708,0x8707,0x8700,0x86FE,/* 0xB8-0xBF */ + 0x86FB,0x8702,0x8703,0x8706,0x870A,0x8859,0x88DF,0x88D4,/* 0xC0-0xC7 */ + 0x88D9,0x88DC,0x88D8,0x88DD,0xF9E8,0x88CA,0x88D5,0x88D2,/* 0xC8-0xCF */ + 0x899C,0x89E3,0x8A6B,0x8A72,0x8A73,0x8A66,0x8A69,0x8A70,/* 0xD0-0xD7 */ + 0x8A87,0x8A7C,0x8A63,0x8AA0,0x8A71,0x8A85,0x8A6D,0x8A62,/* 0xD8-0xDF */ + 0x8A6E,0x8A6C,0x8A79,0x8A7B,0x8A3E,0x8A68,0x8C62,0x8C8A,/* 0xE0-0xE7 */ + 0x8C89,0x8CCA,0x8CC7,0xF903,0x8CC4,0x8CB2,0x8CC3,0xF948,/* 0xE8-0xEF */ + 0x8CC5,0x8DE1,0x8DDF,0x8DE8,0xF937,0x8DF3,0x8DFA,0x8DEA,/* 0xF0-0xF7 */ + 0x8DE4,0x8DE6,0x8EB2,0x8F03,0x8F09,0x8EFE,0x8F0A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_B9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8F9F,0x8FB2,0x904B,0x904A,0x9053,0x9042,0x9054,0x903C,/* 0x40-0x47 */ + 0x9055,0x9050,0x9047,0x904F,0x904E,0x904D,0x9051,0x903E,/* 0x48-0x4F */ + 0x9041,0x9112,0x9117,0x916C,0xF919,0x9169,0x91C9,0x9237,/* 0x50-0x57 */ + 0x9257,0x9238,0x923D,0x9240,0x923E,0x925B,0x924B,0x9264,/* 0x58-0x5F */ + 0x9251,0xF9B1,0x9249,0x924D,0x9245,0x9239,0x923F,0x925A,/* 0x60-0x67 */ + 0x9598,0x9698,0x9694,0x9695,0x96CD,0x96CB,0x96C9,0x96CA,/* 0x68-0x6F */ + 0xF949,0x96FB,0x96F9,0xF9B2,0xFA1C,0x9774,0x9776,0x9810,/* 0x70-0x77 */ + 0x9811,0x9813,0x980A,0x9812,0x980C,0xFA2B,0x98F4,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x98FD,0x98FE,0x99B3,0x99B1,0x99B4,0x9AE1,0x9CE9,/* 0xA0-0xA7 */ + 0x9E82,0x9F0E,0x9F13,0x9F20,0x50E7,0x50EE,0x50E5,0x50D6,/* 0xA8-0xAF */ + 0x50ED,0xF9BB,0x50D5,0x50CF,0x50D1,0x50F1,0x50CE,0x50E9,/* 0xB0-0xB7 */ + 0x5162,0x51F3,0x5283,0x5282,0x5331,0x53AD,0x55FE,0x5600,/* 0xB8-0xBF */ + 0x561B,0x5617,0x55FD,0x5614,0x5606,0x5609,0x560D,0x560E,/* 0xC0-0xC7 */ + 0x55F7,0x5616,0x561F,0x5608,0x5610,0x55F6,0x5718,0x5716,/* 0xC8-0xCF */ + 0x5875,0x587E,0x5883,0x5893,0x588A,0x5879,0x5885,0x587D,/* 0xD0-0xD7 */ + 0x58FD,0x5925,0x5922,0x5924,0x596A,0x5969,0x5AE1,0x5AE6,/* 0xD8-0xDF */ + 0x5AE9,0x5AD7,0x5AD6,0x5AD8,0x5AE3,0x5B75,0x5BDE,0xF9AA,/* 0xE0-0xE7 */ + 0x5BE1,0x5BE5,0x5BE6,0x5BE8,0x5BE2,0x5BE4,0x5BDF,0x5C0D,/* 0xE8-0xEF */ + 0xF94B,0x5D84,0x5D87,0x5E5B,0x5E63,0x5E55,0x5E57,0x5E54,/* 0xF0-0xF7 */ + 0xFA0B,0x5ED6,0x5F0A,0x5F46,0x5F70,0x5FB9,0x6147,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x613F,0x614B,0x6177,0x6162,0x6163,0x615F,0x615A,0x6158,/* 0x40-0x47 */ + 0x6175,0x622A,0x6487,0x6458,0x6454,0x64A4,0x6478,0x645F,/* 0x48-0x4F */ + 0x647A,0x6451,0x6467,0x6434,0x646D,0x647B,0x6572,0x65A1,/* 0x50-0x57 */ + 0x65D7,0x65D6,0x66A2,0x66A8,0x669D,0x699C,0x69A8,0x6995,/* 0x58-0x5F */ + 0x69C1,0x69AE,0x69D3,0x69CB,0x699B,0x69B7,0x69BB,0x69AB,/* 0x60-0x67 */ + 0x69B4,0x69D0,0x69CD,0x69AD,0x69CC,0x69A6,0x69C3,0x69A3,/* 0x68-0x6F */ + 0x6B49,0x6B4C,0x6C33,0x6F33,0x6F14,0x6EFE,0x6F13,0x6EF4,/* 0x70-0x77 */ + 0x6F29,0x6F3E,0x6F20,0x6F2C,0xF94E,0x6F02,0x6F22,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6EFF,0x6EEF,0x6F06,0x6F31,0x6F38,0x6F32,0xF992,/* 0xA0-0xA7 */ + 0x6F15,0x6F2B,0x6F2F,0x6F88,0x6F2A,0x6EEC,0x6F01,0x6EF2,/* 0xA8-0xAF */ + 0x6ECC,0x6EF7,0x7194,0x7199,0x717D,0x718A,0x7184,0x7192,/* 0xB0-0xB7 */ + 0x723E,0x7292,0x7296,0x7344,0x7350,0x7464,0x7463,0x746A,/* 0xB8-0xBF */ + 0x7470,0x746D,0x7504,0x7591,0x7627,0x760D,0x760B,0x7609,/* 0xC0-0xC7 */ + 0x7613,0x76E1,0x76E3,0x7784,0x777D,0x777F,0x7761,0x78C1,/* 0xC8-0xCF */ + 0x789F,0x78A7,0x78B3,0x78A9,0x78A3,0x798E,0xFA1B,0x798D,/* 0xD0-0xD7 */ + 0x7A2E,0x7A31,0x7AAA,0x7AA9,0x7AED,0x7AEF,0x7BA1,0x7B95,/* 0xD8-0xDF */ + 0x7B8B,0x7B75,0x7B97,0x7B9D,0x7B94,0x7B8F,0x7BB8,0x7B87,/* 0xE0-0xE7 */ + 0x7B84,0x7CB9,0x7CBD,0xFA1D,0x7DBB,0x7DB0,0x7D9C,0x7DBD,/* 0xE8-0xEF */ + 0xF957,0xF93D,0x7DCA,0x7DB4,0x7DB2,0x7DB1,0x7DBA,0x7DA2,/* 0xF0-0xF7 */ + 0x7DBF,0x7DB5,0x7DB8,0x7DAD,0x7DD2,0x7DC7,0x7DAC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7F70,0x7FE0,0x7FE1,0x7FDF,0x805E,0x805A,0x8087,0x8150,/* 0x40-0x47 */ + 0x8180,0x818F,0x8188,0x818A,0x817F,0x8182,0x81E7,0x81FA,/* 0x48-0x4F */ + 0x8207,0x8214,0x821E,0x824B,0x84C9,0x84BF,0x84C6,0x84C4,/* 0x50-0x57 */ + 0x8499,0x849E,0x84B2,0x849C,0x84CB,0x84B8,0x84C0,0x84D3,/* 0x58-0x5F */ + 0x8490,0x84BC,0x84D1,0x84CA,0x873F,0x871C,0x873B,0x8722,/* 0x60-0x67 */ + 0x8725,0x8734,0x8718,0x8755,0x8737,0x8729,0x88F3,0x8902,/* 0x68-0x6F */ + 0x88F4,0x88F9,0xF912,0x88FD,0x88E8,0x891A,0x88EF,0x8AA6,/* 0x70-0x77 */ + 0x8A8C,0x8A9E,0x8AA3,0x8A8D,0x8AA1,0x8A93,0x8AA4,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0xF9A1,0x8AA5,0x8AA8,0x8A98,0x8A91,0x8A9A,0x8AA7,/* 0xA0-0xA7 */ + 0x8C6A,0x8C8D,0x8C8C,0x8CD3,0x8CD1,0x8CD2,0x8D6B,0x8D99,/* 0xA8-0xAF */ + 0x8D95,0x8DFC,0x8F14,0x8F12,0x8F15,0x8F13,0x8FA3,0x9060,/* 0xB0-0xB7 */ + 0x9058,0x905C,0x9063,0x9059,0x905E,0x9062,0x905D,0x905B,/* 0xB8-0xBF */ + 0x9119,0x9118,0x911E,0x9175,0x9178,0x9177,0x9174,0x9278,/* 0xC0-0xC7 */ + 0x9280,0x9285,0x9298,0x9296,0x927B,0x9293,0x929C,0x92A8,/* 0xC8-0xCF */ + 0x927C,0x9291,0x95A1,0x95A8,0x95A9,0x95A3,0x95A5,0x95A4,/* 0xD0-0xD7 */ + 0x9699,0x969C,0x969B,0x96CC,0x96D2,0x9700,0x977C,0x9785,/* 0xD8-0xDF */ + 0x97F6,0x9817,0xF9B4,0x98AF,0x98B1,0x9903,0x9905,0x990C,/* 0xE0-0xE7 */ + 0x9909,0x99C1,0x9AAF,0x9AB0,0x9AE6,0x9B41,0x9B42,0x9CF4,/* 0xE8-0xEF */ + 0x9CF6,0x9CF3,0x9EBC,0x9F3B,0x9F4A,0x5104,0x5100,0x50FB,/* 0xF0-0xF7 */ + 0x50F5,0x50F9,0x5102,0x5108,0x5109,0x5105,0xF954,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5287,0x5288,0xF9C7,0x528D,0x528A,0x52F0,0x53B2,0x562E,/* 0x40-0x47 */ + 0x563B,0x5639,0x5632,0x563F,0x5634,0x5629,0x5653,0x564E,/* 0x48-0x4F */ + 0x5657,0x5674,0x5636,0x562F,0x5630,0x5880,0x589F,0x589E,/* 0x50-0x57 */ + 0x58B3,0x589C,0x58AE,0x58A9,0x58A6,0x596D,0x5B09,0x5AFB,/* 0x58-0x5F */ + 0x5B0B,0x5AF5,0x5B0C,0x5B08,0xF9BC,0x5BEC,0x5BE9,0x5BEB,/* 0x60-0x67 */ + 0x5C64,0xF9DF,0x5D9D,0x5D94,0x5E62,0x5E5F,0x5E61,0x5EE2,/* 0x68-0x6F */ + 0x5EDA,0x5EDF,0x5EDD,0x5EE3,0x5EE0,0x5F48,0x5F71,0x5FB7,/* 0x70-0x77 */ + 0x5FB5,0x6176,0x6167,0x616E,0x615D,0x6155,0x6182,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x617C,0x6170,0x616B,0x617E,0x61A7,0xF98F,0x61AB,/* 0xA0-0xA7 */ + 0x618E,0x61AC,0x619A,0x61A4,0x6194,0x61AE,0xF9D2,0x6469,/* 0xA8-0xAF */ + 0x646F,0x6479,0x649E,0x64B2,0x6488,0x6490,0x64B0,0x64A5,/* 0xB0-0xB7 */ + 0x6493,0x6495,0x64A9,0x6492,0x64AE,0x64AD,0x64AB,0xF991,/* 0xB8-0xBF */ + 0x64AC,0x6499,0x64A2,0x64B3,0x6575,0x6577,0xF969,0x66AE,/* 0xC0-0xC7 */ + 0x66AB,0xFA06,0x66B1,0x6A23,0x6A1F,0x69E8,0x6A01,0x6A1E,/* 0xC8-0xCF */ + 0x6A19,0x69FD,0x6A21,0xF94C,0x6A0A,0x69F3,0xF9BF,0x6A05,/* 0xD0-0xD7 */ + 0x69ED,0x6A11,0x6B50,0x6B4E,0x6BA4,0x6BC5,0x6BC6,0x6F3F,/* 0xD8-0xDF */ + 0x6F7C,0x6F84,0x6F51,0x6F66,0x6F54,0x6F86,0x6F6D,0x6F5B,/* 0xE0-0xE7 */ + 0x6F78,0x6F6E,0x6F8E,0x6F7A,0x6F70,0x6F64,0x6F97,0x6F58,/* 0xE8-0xEF */ + 0x6ED5,0x6F6F,0x6F60,0x6F5F,0x719F,0x71AC,0x71B1,0x71A8,/* 0xF0-0xF7 */ + 0x7256,0x729B,0x734E,0x7357,0xF9AE,0x748B,0x7483,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x747E,0x7480,0x757F,0x7620,0x7629,0x761F,0x7624,0x7626,/* 0x40-0x47 */ + 0x7621,0x7622,0x769A,0x76BA,0x76E4,0x778E,0x7787,0x778C,/* 0x48-0x4F */ + 0x7791,0x778B,0x78CB,0x78C5,0x78BA,0xF947,0x78BE,0x78D5,/* 0x50-0x57 */ + 0x78BC,0x78D0,0x7A3F,0x7A3C,0x7A40,0x7A3D,0x7A37,0x7A3B,/* 0x58-0x5F */ + 0x7AAF,0x7AAE,0x7BAD,0x7BB1,0x7BC4,0x7BB4,0x7BC6,0x7BC7,/* 0x60-0x67 */ + 0x7BC1,0x7BA0,0x7BCC,0x7CCA,0x7DE0,0xF996,0x7DEF,0x7DFB,/* 0x68-0x6F */ + 0x7DD8,0x7DEC,0x7DDD,0x7DE8,0x7DE3,0x7DDA,0x7DDE,0x7DE9,/* 0x70-0x77 */ + 0x7D9E,0x7DD9,0x7DF2,0x7DF9,0x7F75,0x7F77,0x7FAF,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7FE9,0x8026,0x819B,0x819C,0x819D,0x81A0,0x819A,/* 0xA0-0xA7 */ + 0x8198,0x8517,0x853D,0x851A,0xF999,0x852C,0x852D,0x8513,/* 0xA8-0xAF */ + 0x8511,0x8523,0x8521,0x8514,0x84EC,0x8525,0x84FF,0x8506,/* 0xB0-0xB7 */ + 0x8782,0x8774,0x8776,0x8760,0x8766,0x8778,0x8768,0x8759,/* 0xB8-0xBF */ + 0x8757,0x874C,0x8753,0x885B,0x885D,0x8910,0x8907,0x8912,/* 0xC0-0xC7 */ + 0x8913,0x8915,0x890A,0x8ABC,0xF97D,0x8AC7,0x8AC4,0x8A95,/* 0xC8-0xCF */ + 0x8ACB,0xFA22,0x8AB2,0x8AC9,0x8AC2,0x8ABF,0x8AB0,0xF941,/* 0xD0-0xD7 */ + 0x8ACD,0x8AB6,0x8AB9,0x8ADB,0x8C4C,0x8C4E,0xFA16,0x8CE0,/* 0xD8-0xDF */ + 0x8CDE,0x8CE6,0x8CE4,0x8CEC,0x8CED,0x8CE2,0x8CE3,0x8CDC,/* 0xE0-0xE7 */ + 0x8CEA,0x8CE1,0x8D6D,0x8D9F,0x8DA3,0x8E2B,0x8E10,0x8E1D,/* 0xE8-0xEF */ + 0x8E22,0x8E0F,0x8E29,0x8E1F,0x8E21,0x8E1E,0x8EBA,0x8F1D,/* 0xF0-0xF7 */ + 0x8F1B,0x8F1F,0x8F29,0xF998,0xF9D7,0x8F1C,0x8F1E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8F25,0x9069,0x906E,0x9068,0x906D,0x9077,0x9130,0x912D,/* 0x40-0x47 */ + 0x9127,0x9131,0x9187,0x9189,0x918B,0x9183,0x92C5,0x92BB,/* 0x48-0x4F */ + 0x92B7,0x92EA,0x92AC,0x92E4,0x92C1,0x92B3,0x92BC,0x92D2,/* 0x50-0x57 */ + 0x92C7,0x92F0,0x92B2,0xF986,0x95B1,0x9704,0x9706,0x9707,/* 0x58-0x5F */ + 0x9709,0x9760,0x978D,0x978B,0x978F,0x9821,0x982B,0x981C,/* 0x60-0x67 */ + 0x98B3,0x990A,0x9913,0x9912,0x9918,0x99DD,0x99D0,0x99DF,/* 0x68-0x6F */ + 0x99DB,0x99D1,0x99D5,0x99D2,0x99D9,0x9AB7,0x9AEE,0x9AEF,/* 0x70-0x77 */ + 0x9B27,0x9B45,0x9B44,0x9B77,0xF939,0x9D06,0x9D09,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9D03,0x9EA9,0x9EBE,0xF989,0x58A8,0x9F52,0x5112,/* 0xA0-0xA7 */ + 0x5118,0x5114,0x5110,0x5115,0x5180,0x51AA,0x51DD,0x5291,/* 0xA8-0xAF */ + 0x5293,0x52F3,0x5659,0x566B,0x5679,0x5669,0x5664,0x5678,/* 0xB0-0xB7 */ + 0x566A,0x5668,0x5665,0x5671,0x566F,0x566C,0x5662,0x5676,/* 0xB8-0xBF */ + 0x58C1,0x58BE,0x58C7,0x58C5,0x596E,0x5B1D,0x5B34,0x5B78,/* 0xC0-0xC7 */ + 0x5BF0,0x5C0E,0x5F4A,0x61B2,0x6191,0x61A9,0x618A,0x61CD,/* 0xC8-0xCF */ + 0x61B6,0x61BE,0x61CA,0x61C8,0x6230,0x64C5,0x64C1,0x64CB,/* 0xD0-0xD7 */ + 0x64BB,0x64BC,0x64DA,0xF930,0x64C7,0x64C2,0x64CD,0x64BF,/* 0xD8-0xDF */ + 0x64D2,0x64D4,0x64BE,0x6574,0xF98B,0x66C9,0x66B9,0x66C4,/* 0xE0-0xE7 */ + 0x66C7,0x66B8,0x6A3D,0x6A38,0x6A3A,0x6A59,0x6A6B,0x6A58,/* 0xE8-0xEF */ + 0x6A39,0x6A44,0x6A62,0x6A61,0x6A4B,0x6A47,0x6A35,0x6A5F,/* 0xF0-0xF7 */ + 0x6A48,0x6B59,0xF98C,0x6C05,0x6FC2,0x6FB1,0x6FA1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_BF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6FC3,0x6FA4,0x6FC1,0x6FA7,0x6FB3,0x6FC0,0x6FB9,0x6FB6,/* 0x40-0x47 */ + 0x6FA6,0x6FA0,0x6FB4,0x71BE,0x71C9,0xF9EE,0x71D2,0x71C8,/* 0x48-0x4F */ + 0x71D5,0x71B9,0xF9C0,0x71D9,0x71DC,0x71C3,0x71C4,0x7368,/* 0x50-0x57 */ + 0x749C,0x74A3,0xF9EF,0x749F,0x749E,0x74E2,0x750C,0x750D,/* 0x58-0x5F */ + 0x7634,0x7638,0x763A,0xF933,0x76E5,0x77A0,0x779E,0x779F,/* 0x60-0x67 */ + 0x77A5,0x78E8,0x78DA,0x78EC,0x78E7,0x79A6,0x7A4D,0x7A4E,/* 0x68-0x6F */ + 0x7A46,0x7A4C,0x7A4B,0x7ABA,0x7BD9,0x7C11,0x7BC9,0x7BE4,/* 0x70-0x77 */ + 0x7BDB,0x7BE1,0x7BE9,0x7BE6,0x7CD5,0xFA03,0x7E0A,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7E11,0x7E08,0x7E1B,0x7E23,0x7E1E,0x7E1D,0x7E09,/* 0xA0-0xA7 */ + 0x7E10,0xF9E6,0x7FB2,0x7FF0,0x7FF1,0x7FEE,0x8028,0x81B3,/* 0xA8-0xAF */ + 0x81A9,0x81A8,0x81FB,0x8208,0x8258,0x8259,0x854A,0x8559,/* 0xB0-0xB7 */ + 0x8548,0x8568,0x8569,0x8543,0x8549,0x856D,0x856A,0x855E,/* 0xB8-0xBF */ + 0x8783,0x879F,0x879E,0x87A2,0x878D,0x8861,0x892A,0x8932,/* 0xC0-0xC7 */ + 0x8925,0x892B,0x8921,0x89AA,0x89A6,0x8AE6,0x8AFA,0x8AEB,/* 0xC8-0xCF */ + 0x8AF1,0x8B00,0x8ADC,0x8AE7,0x8AEE,0xF95D,0x8B01,0x8B02,/* 0xD0-0xD7 */ + 0x8AF7,0x8AED,0x8AF3,0x8AF6,0x8AFC,0x8C6B,0x8C6D,0x8C93,/* 0xD8-0xDF */ + 0x8CF4,0x8E44,0x8E31,0x8E34,0x8E42,0x8E39,0x8E35,0xFA07,/* 0xE0-0xE7 */ + 0x8F2F,0x8F38,0x8F33,0x8FA8,0x8FA6,0x9075,0x9074,0x9078,/* 0xE8-0xEF */ + 0x9072,0xF9C3,0x907A,0x9134,0x9192,0x9320,0x9336,0x92F8,/* 0xF0-0xF7 */ + 0x9333,0x932F,0x9322,0x92FC,0x932B,0xF93F,0x931A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9310,0x9326,0x9321,0x9315,0x932E,0x9319,0x95BB,0x96A7,/* 0x40-0x47 */ + 0x96A8,0x96AA,0x96D5,0x970E,0x9711,0x9716,0x970D,0x9713,/* 0x48-0x4F */ + 0x970F,0x975B,0x975C,0x9766,0x9798,0x9830,0x9838,0x983B,/* 0x50-0x57 */ + 0x9837,0x982D,0x9839,0x9824,0x9910,0xFA2C,0x991E,0x991B,/* 0x58-0x5F */ + 0x9921,0x991A,0x99ED,0x99E2,0xF91A,0x9AB8,0x9ABC,0x9AFB,/* 0x60-0x67 */ + 0x9AED,0x9B28,0x9B91,0x9D15,0x9D23,0x9D26,0x9D28,0x9D12,/* 0x68-0x6F */ + 0x9D1B,0x9ED8,0x9ED4,0xF9C4,0xF908,0x512A,0x511F,0x5121,/* 0x70-0x77 */ + 0x5132,0xF97F,0x568E,0x5680,0x5690,0x5685,0x5687,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x568F,0x58D5,0x58D3,0x58D1,0x58CE,0x5B30,0x5B2A,/* 0xA0-0xA7 */ + 0x5B24,0x5B7A,0x5C37,0x5C68,0x5DBC,0xF9AB,0x5DBD,0x5DB8,/* 0xA8-0xAF */ + 0x5E6B,0x5F4C,0x5FBD,0x61C9,0x61C2,0x61C7,0x61E6,0x61CB,/* 0xB0-0xB7 */ + 0x6232,0x6234,0x64CE,0x64CA,0x64D8,0x64E0,0x64F0,0x64E6,/* 0xB8-0xBF */ + 0x64EC,0x64F1,0x64E2,0x64ED,0x6582,0x6583,0x66D9,0x66D6,/* 0xC0-0xC7 */ + 0x6A80,0x6A94,0x6A84,0x6AA2,0x6A9C,0x6ADB,0x6AA3,0x6A7E,/* 0xC8-0xCF */ + 0x6A97,0x6A90,0x6AA0,0x6B5C,0xF9A5,0x6BDA,0x6C08,0x6FD8,/* 0xD0-0xD7 */ + 0x6FF1,0x6FDF,0x6FE0,0x6FDB,0x6FE4,0xF922,0x6FEF,0x6F80,/* 0xD8-0xDF */ + 0x6FEC,0x6FE1,0x6FE9,0x6FD5,0x6FEE,0x6FF0,0x71E7,0x71DF,/* 0xE0-0xE7 */ + 0x71EE,0x71E6,0x71E5,0x71ED,0x71EC,0x71F4,0x71E0,0x7235,/* 0xE8-0xEF */ + 0x7246,0x7370,0x7372,0x74A9,0x74B0,0x74A6,0x74A8,0x7646,/* 0xF0-0xF7 */ + 0xF9C1,0x764C,0x76EA,0x77B3,0x77AA,0x77B0,0x77AC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x77A7,0x77AD,0x77EF,0x78F7,0x78FA,0x78F4,0x78EF,0x7901,/* 0x40-0x47 */ + 0x79A7,0x79AA,0x7A57,0x7ABF,0x7C07,0x7C0D,0x7BFE,0x7BF7,/* 0x48-0x4F */ + 0x7C0C,0x7BE0,0x7CE0,0x7CDC,0x7CDE,0x7CE2,0x7CDF,0x7CD9,/* 0x50-0x57 */ + 0x7CDD,0x7E2E,0x7E3E,0x7E46,0xF950,0x7E32,0x7E43,0x7E2B,/* 0x58-0x5F */ + 0x7E3D,0x7E31,0x7E45,0x7E41,0x7E34,0x7E39,0x7E48,0x7E35,/* 0x60-0x67 */ + 0x7E3F,0x7E2F,0x7F44,0x7FF3,0x7FFC,0x8071,0x8072,0x8070,/* 0x68-0x6F */ + 0xF997,0x8073,0x81C6,0x81C3,0x81BA,0x81C2,0x81C0,0x81BF,/* 0x70-0x77 */ + 0x81BD,0x81C9,0x81BE,0xF9F6,0x8209,0x8271,0x85AA,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8584,0x857E,0x859C,0x8591,0x8594,0x85AF,0x859B,/* 0xA0-0xA7 */ + 0x8587,0x85A8,0x858A,0x8667,0x87C0,0x87D1,0x87B3,0x87D2,/* 0xA8-0xAF */ + 0x87C6,0x87AB,0x87BB,0xF911,0x87C8,0x87CB,0x893B,0x8936,/* 0xB0-0xB7 */ + 0x8944,0x8938,0x893D,0x89AC,0x8B0E,0x8B17,0x8B19,0x8B1B,/* 0xB8-0xBF */ + 0x8B0A,0x8B20,0x8B1D,0x8B04,0x8B10,0x8C41,0x8C3F,0x8C73,/* 0xC0-0xC7 */ + 0x8CFA,0x8CFD,0x8CFC,0x8CF8,0x8CFB,0x8DA8,0x8E49,0x8E4B,/* 0xC8-0xCF */ + 0x8E48,0x8E4A,0x8F44,0x8F3E,0x8F42,0x8F45,0x8F3F,0x907F,/* 0xD0-0xD7 */ + 0x907D,0x9084,0x9081,0x9082,0x9080,0x9139,0x91A3,0x919E,/* 0xD8-0xDF */ + 0x919C,0x934D,0x9382,0x9328,0x9375,0xF99B,0x9365,0x934B,/* 0xE0-0xE7 */ + 0x9318,0x937E,0x936C,0x935B,0x9370,0x935A,0x9354,0x95CA,/* 0xE8-0xEF */ + 0x95CB,0x95CC,0x95C8,0x95C6,0x96B1,0xF9B8,0x96D6,0x971C,/* 0xF0-0xF7 */ + 0x971E,0x97A0,0x97D3,0x9846,0x98B6,0x9935,0x9A01,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x99FF,0x9BAE,0x9BAB,0x9BAA,0x9BAD,0x9D3B,0x9D3F,0x9E8B,/* 0x40-0x47 */ + 0x9ECF,0x9EDE,0x9EDC,0x9EDD,0x9EDB,0x9F3E,0x9F4B,0x53E2,/* 0x48-0x4F */ + 0x5695,0x56AE,0x58D9,0xF94A,0x5B38,0x5F5D,0x61E3,0x6233,/* 0x50-0x57 */ + 0x64F4,0x64F2,0x64FE,0x6506,0x64FA,0x64FB,0x64F7,0x65B7,/* 0x58-0x5F */ + 0x66DC,0x6726,0x6AB3,0x6AAC,0x6AC3,0x6ABB,0x6AB8,0x6AC2,/* 0x60-0x67 */ + 0x6AAE,0x6AAF,0x6B5F,0x6B78,0x6BAF,0x7009,0x700B,0xF984,/* 0x68-0x6F */ + 0x7006,0x6FFA,0x7011,0x700F,0x71FB,0x71FC,0x71FE,0x71F8,/* 0x70-0x77 */ + 0x7377,0xF9A7,0x74A7,0x74BF,0x7515,0x7656,0x7658,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7652,0x77BD,0x77BF,0x77BB,0x77BC,0x790E,0xF9B6,/* 0xA0-0xA7 */ + 0x7A61,0x7A62,0x7A60,0x7AC4,0x7AC5,0x7C2B,0x7C27,0x7C2A,/* 0xA8-0xAF */ + 0x7C1E,0x7C23,0x7C21,0xF97B,0x7E54,0x7E55,0x7E5E,0x7E5A,/* 0xB0-0xB7 */ + 0x7E61,0x7E52,0x7E59,0x7F48,0x7FF9,0x7FFB,0x8077,0x8076,/* 0xB8-0xBF */ + 0x81CD,0x81CF,0x820A,0x85CF,0x85A9,0xF923,0x85D0,0x85C9,/* 0xC0-0xC7 */ + 0x85B0,0x85BA,0x85B9,0x85A6,0x87EF,0x87EC,0x87F2,0x87E0,/* 0xC8-0xCF */ + 0x8986,0x89B2,0x89F4,0x8B28,0x8B39,0x8B2C,0x8B2B,0x8C50,/* 0xD0-0xD7 */ + 0x8D05,0x8E59,0x8E63,0x8E66,0x8E64,0x8E5F,0x8E55,0x8EC0,/* 0xD8-0xDF */ + 0x8F49,0x8F4D,0x9087,0x9083,0x9088,0x91AB,0x91AC,0x91D0,/* 0xE0-0xE7 */ + 0x9394,0x938A,0x9396,0x93A2,0x93B3,0x93AE,0x93AC,0x93B0,/* 0xE8-0xEF */ + 0x9398,0x939A,0x9397,0x95D4,0x95D6,0x95D0,0x95D5,0xF9EA,/* 0xF0-0xF7 */ + 0x96DC,0x96D9,0x96DB,0x96DE,0x9724,0x97A3,0x97A6,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x97AD,0x97F9,0x984D,0x984F,0x984C,0x984E,0x9853,0x98BA,/* 0x40-0x47 */ + 0x993E,0x993F,0x993D,0x992E,0x99A5,0x9A0E,0x9AC1,0x9B03,/* 0x48-0x4F */ + 0x9B06,0x9B4F,0x9B4E,0x9B4D,0x9BCA,0x9BC9,0x9BFD,0x9BC8,/* 0x50-0x57 */ + 0x9BC0,0x9D51,0x9D5D,0x9D60,0x9EE0,0x9F15,0x9F2C,0x5133,/* 0x58-0x5F */ + 0x56A5,0x58DE,0xF942,0x58E2,0x5BF5,0x9F90,0xF982,0x61F2,/* 0x60-0x67 */ + 0x61F7,0xF90D,0x61F5,0x6500,0x650F,0x66E0,0x66DD,0x6AE5,/* 0x68-0x6F */ + 0x6ADD,0x6ADA,0xF931,0x701B,0x701F,0x7028,0x701A,0x701D,/* 0x70-0x77 */ + 0x7015,0x7018,0x7206,0x720D,0x7258,0x72A2,0x7378,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x737A,0x74BD,0x74CA,0x74E3,0x7587,0x7586,0x765F,/* 0xA0-0xA7 */ + 0x7661,0x77C7,0x7919,0x79B1,0x7A6B,0x7A69,0xF9A6,0x7C3F,/* 0xA8-0xAF */ + 0x7C38,0x7C3D,0x7C37,0x7C40,0x7E6B,0x7E6D,0x7E79,0x7E69,/* 0xB0-0xB7 */ + 0x7E6A,0xF90F,0x7E73,0x7FB6,0x7FB9,0x7FB8,0xF926,0x85E9,/* 0xB8-0xBF */ + 0x85DD,0x85EA,0x85D5,0x85E4,0x85E5,0x85F7,0x87FB,0x8805,/* 0xC0-0xC7 */ + 0x880D,0x87F9,0x87FE,0x8960,0x895F,0x8956,0x895E,0x8B41,/* 0xC8-0xCF */ + 0x8B5C,0xF9FC,0x8B49,0x8B5A,0x8B4E,0x8B4F,0x8B46,0x8B59,/* 0xD0-0xD7 */ + 0x8D08,0x8D0A,0x8E7C,0x8E72,0x8E87,0x8E76,0x8E6C,0x8E7A,/* 0xD8-0xDF */ + 0x8E74,0x8F54,0x8F4E,0x8FAD,0x908A,0x908B,0x91B1,0x91AE,/* 0xE0-0xE7 */ + 0x93E1,0x93D1,0x93DF,0x93C3,0x93C8,0x93DC,0x93DD,0x93D6,/* 0xE8-0xEF */ + 0x93E2,0x93CD,0x93D8,0x93E4,0x93D7,0x93E8,0x95DC,0x96B4,/* 0xF0-0xF7 */ + 0x96E3,0x972A,0x9727,0x9761,0x97DC,0x97FB,0xF9D0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x9858,0x985B,0x98BC,0x9945,0x9949,0x9A16,0x9A19,0x9B0D,/* 0x40-0x47 */ + 0x9BE8,0x9BE7,0x9BD6,0x9BDB,0x9D89,0x9D61,0x9D72,0x9D6A,/* 0x48-0x4F */ + 0x9D6C,0x9E92,0xF988,0x9E93,0x9EB4,0x52F8,0x56A8,0x56B7,/* 0x50-0x57 */ + 0x56B6,0x56B4,0x56BC,0x58E4,0x5B40,0x5B43,0x5B7D,0x5BF6,/* 0x58-0x5F */ + 0x5DC9,0x61F8,0x61FA,0x6518,0x6514,0x6519,0x66E6,0x6727,/* 0x60-0x67 */ + 0x6AEC,0x703E,0x7030,0x7032,0xF932,0x737B,0x74CF,0x7662,/* 0x68-0x6F */ + 0x7665,0x7926,0xF985,0x792C,0x792B,0x7AC7,0x7AF6,0x7C4C,/* 0x70-0x77 */ + 0x7C43,0x7C4D,0x7CEF,0x7CF0,0x8FAE,0x7E7D,0x7E7C,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7E82,0x7F4C,0x8000,0x81DA,0x8266,0x85FB,0x85F9,/* 0xA0-0xA7 */ + 0x8611,0xF9F0,0xF935,0x860B,0x8607,0x860A,0x8814,0x8815,/* 0xA8-0xAF */ + 0xF924,0x89BA,0x89F8,0x8B70,0x8B6C,0x8B66,0x8B6F,0x8B5F,/* 0xB0-0xB7 */ + 0x8B6B,0x8D0F,0x8D0D,0x8E89,0x8E81,0x8E85,0x8E82,0xF9B7,/* 0xB8-0xBF */ + 0x91CB,0x9418,0x9403,0x93FD,0x95E1,0x9730,0x98C4,0x9952,/* 0xC0-0xC7 */ + 0x9951,0x99A8,0x9A2B,0x9A30,0x9A37,0x9A35,0x9C13,0x9C0D,/* 0xC8-0xCF */ + 0x9E79,0x9EB5,0x9EE8,0x9F2F,0x9F5F,0x9F63,0x9F61,0x5137,/* 0xD0-0xD7 */ + 0x5138,0x56C1,0x56C0,0x56C2,0x5914,0x5C6C,0x5DCD,0x61FC,/* 0xD8-0xDF */ + 0x61FE,0x651D,0x651C,0x6595,0x66E9,0x6AFB,0xF91D,0x6AFA,/* 0xE0-0xE7 */ + 0x6BB2,0x704C,0xF91E,0x72A7,0x74D6,0x74D4,0xF90E,0x77D3,/* 0xE8-0xEF */ + 0x7C50,0x7E8F,0x7E8C,0x7FBC,0x8617,0xF91F,0x861A,0x8823,/* 0xF0-0xF7 */ + 0x8822,0x8821,0xF927,0x896A,0x896C,0x89BD,0x8B74,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8B77,0x8B7D,0x8D13,0x8E8A,0x8E8D,0x8E8B,0x8F5F,0x8FAF,/* 0x40-0x47 */ + 0x91BA,0x942E,0x9433,0x9435,0x943A,0x9438,0x9432,0x942B,/* 0x48-0x4F */ + 0x95E2,0x9738,0x9739,0xF938,0x97FF,0x9867,0x9865,0x9957,/* 0x50-0x57 */ + 0x9A45,0x9A43,0x9A40,0x9A3E,0x9ACF,0x9B54,0x9B51,0x9C2D,/* 0x58-0x5F */ + 0x9C25,0x9DAF,0xFA2D,0x9DC2,0x9DB8,0x9E9D,0x9EEF,0x9F19,/* 0x60-0x67 */ + 0x9F5C,0x9F66,0x9F67,0x513C,0x513B,0x56C8,0x56CA,0x56C9,/* 0x68-0x6F */ + 0x5B7F,0x5DD4,0x5DD2,0x5F4E,0x61FF,0x6524,0x6B0A,0x6B61,/* 0x70-0x77 */ + 0x7051,0x7058,0x7380,0x74E4,0x758A,0x766E,0x766C,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x79B3,0xF944,0x7C5F,0xF945,0x807D,0x81DF,0x8972,/* 0xA0-0xA7 */ + 0x896F,0x89FC,0xF95A,0x8D16,0x8D17,0x8E91,0x8E93,0x8F61,/* 0xA8-0xAF */ + 0x9148,0x9444,0x9451,0x9452,0x973D,0x973E,0x97C3,0x97C1,/* 0xB0-0xB7 */ + 0x986B,0x9955,0x9A55,0x9A4D,0x9AD2,0x9B1A,0x9C49,0x9C31,/* 0xB8-0xBF */ + 0x9C3E,0x9C3B,0x9DD3,0x9DD7,0x9F34,0x9F6C,0x9F6A,0x9F94,/* 0xC0-0xC7 */ + 0x56CC,0x5DD6,0xF990,0x6523,0x652B,0x652A,0x66EC,0x6B10,/* 0xC8-0xCF */ + 0x74DA,0x7ACA,0x7C64,0x7C63,0x7C65,0x7E93,0x7E96,0x7E94,/* 0xD0-0xD7 */ + 0x81E2,0x8638,0xF910,0x8831,0x8B8A,0x9090,0xF913,0x9463,/* 0xD8-0xDF */ + 0x9460,0x9464,0x9768,0x986F,0x995C,0x9A5A,0x9A5B,0x9A57,/* 0xE0-0xE7 */ + 0x9AD3,0x9AD4,0x9AD1,0x9C54,0xF9F2,0x9C56,0x9DE5,0xF9F3,/* 0xE8-0xEF */ + 0x9EF4,0x56D1,0x58E9,0x652C,0x705E,0x7671,0x7672,0x77D7,/* 0xF0-0xF7 */ + 0x7F50,0x7F88,0x8836,0x8839,0x8862,0x8B93,0x8B92,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_C6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8B96,0x8277,0x8D1B,0x91C0,0x946A,0x9742,0xF9B3,0x9744,/* 0x40-0x47 */ + 0x97C6,0x9870,0x9A5F,0x9B22,0x9B58,0x9C5F,0x9DF9,0xF93A,/* 0x48-0x4F */ + 0x9E7C,0x9E7D,0x9F07,0x9F77,0x9F72,0x5EF3,0x6B16,0x7063,/* 0x50-0x57 */ + 0x7C6C,0x7C6E,0x883B,0x89C0,0x8EA1,0x91C1,0x9472,0x9470,/* 0x58-0x5F */ + 0x9871,0x995E,0x9AD6,0x9B23,0x9ECC,0x7064,0x77DA,0x8B9A,/* 0x60-0x67 */ + 0x9477,0x97C9,0x9A62,0x9A65,0x7E9C,0x8B9C,0x8EAA,0x91C5,/* 0x68-0x6F */ + 0x947D,0x947E,0x947C,0x9C77,0x9C78,0x9EF7,0x8C54,0x947F,/* 0x70-0x77 */ + 0x9E1A,0x7228,0xF987,0x9B31,0x9E1B,0xF920,0x7C72,0x0000,/* 0x78-0x7F */ +}; + +static wchar_t c2u_C9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x4E42,0x4E5C,0x51F5,0x531A,0x5382,0x4E07,0x4E0C,0x4E47,/* 0x40-0x47 */ + 0x4E8D,0x56D7,0xFA0C,0x5C6E,0x5F73,0x4E0F,0x5187,0x4E0E,/* 0x48-0x4F */ + 0x4E2E,0x4E93,0x4EC2,0x4EC9,0x4EC8,0x5198,0x52FC,0x536C,/* 0x50-0x57 */ + 0x53B9,0x5720,0x5903,0x592C,0x5C10,0x5DFF,0x65E1,0x6BB3,/* 0x58-0x5F */ + 0x6BCC,0x6C14,0x723F,0x4E31,0x4E3C,0x4EE8,0x4EDC,0x4EE9,/* 0x60-0x67 */ + 0x4EE1,0x4EDD,0x4EDA,0x520C,0x531C,0x534C,0x5722,0x5723,/* 0x68-0x6F */ + 0x5917,0x592F,0x5B81,0x5B84,0x5C12,0x5C3B,0x5C74,0x5C73,/* 0x70-0x77 */ + 0x5E04,0x5E80,0x5E82,0x5FC9,0x6209,0x6250,0x6C15,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6C36,0x6C43,0x6C3F,0x6C3B,0x72AE,0x72B0,0x738A,/* 0xA0-0xA7 */ + 0x79B8,0x808A,0x961E,0x4F0E,0x4F18,0x4F2C,0x4EF5,0x4F14,/* 0xA8-0xAF */ + 0x4EF1,0x4F00,0x4EF7,0x4F08,0x4F1D,0x4F02,0x4F05,0x4F22,/* 0xB0-0xB7 */ + 0x4F13,0x4F04,0x4EF4,0x4F12,0x51B1,0x5213,0x5209,0x5210,/* 0xB8-0xBF */ + 0x52A6,0x5322,0x531F,0x534D,0x538A,0x5407,0x56E1,0x56DF,/* 0xC0-0xC7 */ + 0x572E,0x572A,0x5734,0x593C,0x5980,0x597C,0x5985,0x597B,/* 0xC8-0xCF */ + 0x597E,0x5977,0x597F,0x5B56,0x5C15,0x5C25,0x5C7C,0x5C7A,/* 0xD0-0xD7 */ + 0x5C7B,0x5C7E,0x5DDF,0x5E75,0x5E84,0x5F02,0x5F1A,0x5F74,/* 0xD8-0xDF */ + 0x5FD5,0x5FD4,0x5FCF,0x625C,0x625E,0x6264,0x6261,0x6266,/* 0xE0-0xE7 */ + 0x6262,0x6259,0x6260,0x625A,0x6265,0x65EF,0x65EE,0x673E,/* 0xE8-0xEF */ + 0x6739,0x6738,0x673B,0x673A,0x673F,0x673C,0x6733,0x6C18,/* 0xF0-0xF7 */ + 0x6C46,0x6C52,0x6C5C,0x6C4F,0x6C4A,0x6C54,0x6C4B,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6C4C,0x7071,0x725E,0x72B4,0x72B5,0x738E,0x752A,0x767F,/* 0x40-0x47 */ + 0x7A75,0x7F51,0x8278,0x827C,0x8280,0x827D,0x827F,0x864D,/* 0x48-0x4F */ + 0x897E,0x9099,0x9097,0x9098,0x909B,0x9094,0x9622,0x9624,/* 0x50-0x57 */ + 0x9620,0x9623,0x4F56,0x4F3B,0x4F62,0x4F49,0x4F53,0x4F64,/* 0x58-0x5F */ + 0x4F3E,0x4F67,0x4F52,0x4F5F,0x4F41,0x4F58,0x4F2D,0x4F33,/* 0x60-0x67 */ + 0x4F3F,0x4F61,0x518F,0x51B9,0x521C,0x521E,0x5221,0x52AD,/* 0x68-0x6F */ + 0x52AE,0x5309,0x5363,0x5372,0x538E,0x538F,0x5430,0x5437,/* 0x70-0x77 */ + 0x542A,0x5454,0x5445,0x5419,0x541C,0x5425,0x5418,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x543D,0x544F,0x5441,0x5428,0x5424,0x5447,0x56EE,/* 0xA0-0xA7 */ + 0x56E7,0x56E5,0x5741,0x5745,0x574C,0x5749,0x574B,0x5752,/* 0xA8-0xAF */ + 0x5906,0x5940,0x59A6,0x5998,0x59A0,0x5997,0x598E,0x59A2,/* 0xB0-0xB7 */ + 0x5990,0x598F,0x59A7,0x59A1,0x5B8E,0x5B92,0x5C28,0x5C2A,/* 0xB8-0xBF */ + 0x5C8D,0x5C8F,0x5C88,0x5C8B,0x5C89,0x5C92,0x5C8A,0x5C86,/* 0xC0-0xC7 */ + 0x5C93,0x5C95,0x5DE0,0x5E0A,0x5E0E,0x5E8B,0x5E89,0x5E8C,/* 0xC8-0xCF */ + 0x5E88,0x5E8D,0x5F05,0x5F1D,0x5F78,0x5F76,0x5FD2,0x5FD1,/* 0xD0-0xD7 */ + 0x5FD0,0x5FED,0x5FE8,0x5FEE,0x5FF3,0x5FE1,0x5FE4,0x5FE3,/* 0xD8-0xDF */ + 0x5FFA,0x5FEF,0x5FF7,0x5FFB,0x6000,0x5FF4,0x623A,0x6283,/* 0xE0-0xE7 */ + 0x628C,0x628E,0x628F,0x6294,0x6287,0x6271,0x627B,0x627A,/* 0xE8-0xEF */ + 0x6270,0x6281,0x6288,0x6277,0x627D,0x6272,0x6274,0x6537,/* 0xF0-0xF7 */ + 0x65F0,0x65F4,0x65F3,0x65F2,0x65F5,0x6745,0x6747,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6759,0x6755,0x674C,0x6748,0x675D,0x674D,0x675A,0x674B,/* 0x40-0x47 */ + 0x6BD0,0x6C19,0x6C1A,0x6C78,0x6C67,0x6C6B,0x6C84,0x6C8B,/* 0x48-0x4F */ + 0x6C8F,0x6C71,0x6C6F,0x6C69,0x6C9A,0x6C6D,0x6C87,0x6C95,/* 0x50-0x57 */ + 0x6C9C,0x6C66,0x6C73,0x6C65,0x6C7B,0x6C8E,0x7074,0x707A,/* 0x58-0x5F */ + 0x7263,0x72BF,0x72BD,0x72C3,0x72C6,0x72C1,0x72BA,0x72C5,/* 0x60-0x67 */ + 0x7395,0x7397,0x7393,0x7394,0x7392,0x753A,0x7539,0x7594,/* 0x68-0x6F */ + 0x7595,0x7681,0x793D,0x8034,0x8095,0x8099,0x8090,0x8092,/* 0x70-0x77 */ + 0x809C,0x8290,0x828F,0x8285,0x828E,0x8291,0x8293,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x828A,0x8283,0x8284,0x8C78,0x8FC9,0x8FBF,0x909F,/* 0xA0-0xA7 */ + 0x90A1,0x90A5,0x909E,0x90A7,0x90A0,0x9630,0x9628,0x962F,/* 0xA8-0xAF */ + 0x962D,0x4E33,0x4F98,0x4F7C,0x4F85,0x4F7D,0x4F80,0x4F87,/* 0xB0-0xB7 */ + 0x4F76,0x4F74,0x4F89,0x4F84,0x4F77,0x4F4C,0x4F97,0x4F6A,/* 0xB8-0xBF */ + 0x4F9A,0x4F79,0x4F81,0x4F78,0x4F90,0x4F9C,0x4F94,0x4F9E,/* 0xC0-0xC7 */ + 0x4F92,0x4F82,0x4F95,0x4F6B,0x4F6E,0x519E,0x51BC,0x51BE,/* 0xC8-0xCF */ + 0x5235,0x5232,0x5233,0x5246,0x5231,0x52BC,0x530A,0x530B,/* 0xD0-0xD7 */ + 0x533C,0x5392,0x5394,0x5487,0x547F,0x5481,0x5491,0x5482,/* 0xD8-0xDF */ + 0x5488,0x546B,0x547A,0x547E,0x5465,0x546C,0x5474,0x5466,/* 0xE0-0xE7 */ + 0x548D,0x546F,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464,/* 0xE8-0xEF */ + 0x56F7,0xF9A9,0x576F,0x5772,0x576D,0x576B,0x5771,0x5770,/* 0xF0-0xF7 */ + 0x5776,0x5780,0x5775,0x577B,0x5773,0x5774,0x5762,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5768,0x577D,0x590C,0x5945,0x59B5,0x59BA,0x59CF,0x59CE,/* 0x40-0x47 */ + 0x59B2,0x59CC,0x59C1,0x59B6,0x59BC,0x59C3,0x59D6,0x59B1,/* 0x48-0x4F */ + 0x59BD,0x59C0,0x59C8,0x59B4,0x59C7,0x5B62,0x5B65,0x5B93,/* 0x50-0x57 */ + 0x5B95,0x5C44,0x5C47,0x5CAE,0x5CA4,0x5CA0,0x5CB5,0x5CAF,/* 0x58-0x5F */ + 0x5CA8,0x5CAC,0x5C9F,0x5CA3,0x5CAD,0x5CA2,0x5CAA,0x5CA7,/* 0x60-0x67 */ + 0x5C9D,0x5CA5,0x5CB6,0x5CB0,0x5CA6,0x5E17,0x5E14,0x5E19,/* 0x68-0x6F */ + 0x5F28,0x5F22,0x5F23,0x5F24,0x5F54,0x5F82,0x5F7E,0x5F7D,/* 0x70-0x77 */ + 0x5FDE,0x5FE5,0x602D,0x6026,0x6019,0x6032,0x600B,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6034,0x600A,0x6017,0x6033,0x601A,0x601E,0x602C,/* 0xA0-0xA7 */ + 0x6022,0x600D,0x6010,0x602E,0x6013,0x6011,0x600C,0x6009,/* 0xA8-0xAF */ + 0xF9AC,0x6214,0x623D,0x62AD,0x62B4,0x62D1,0x62BE,0x62AA,/* 0xB0-0xB7 */ + 0x62B6,0x62CA,0x62AE,0x62B3,0x62AF,0x62BB,0x62A9,0x62B0,/* 0xB8-0xBF */ + 0x62B8,0x653D,0x65A8,0x65BB,0x6609,0x65FC,0x6604,0x6612,/* 0xC0-0xC7 */ + 0x6608,0x65FB,0x6603,0x660B,0x660D,0x6605,0x65FD,0x6611,/* 0xC8-0xCF */ + 0x6610,0x66F6,0x670A,0x6785,0x676C,0x678E,0x6792,0x6776,/* 0xD0-0xD7 */ + 0xF9C8,0x6798,0x6786,0x6784,0x6774,0x678D,0x678C,0x677A,/* 0xD8-0xDF */ + 0x679F,0x6791,0x6799,0x6783,0x677D,0x6781,0x6778,0x6779,/* 0xE0-0xE7 */ + 0x6794,0x6B25,0x6B80,0x6B7E,0x6BDE,0x6C1D,0x6C93,0x6CEC,/* 0xE8-0xEF */ + 0x6CEB,0x6CEE,0x6CD9,0x6CB6,0x6CD4,0x6CAD,0x6CE7,0x6CB7,/* 0xF0-0xF7 */ + 0x6CD0,0x6CC2,0x6CBA,0x6CC3,0x6CC6,0x6CED,0x6CF2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6CD2,0x6CDD,0x6CB4,0x6C8A,0x6C9D,0x6C80,0x6CDE,0x6CC0,/* 0x40-0x47 */ + 0x6D30,0x6CCD,0x6CC7,0x6CB0,0x6CF9,0x6CCF,0x6CE9,0x6CD1,/* 0x48-0x4F */ + 0x7094,0x7098,0x7085,0x7093,0x7086,0x7084,0x7091,0x7096,/* 0x50-0x57 */ + 0x7082,0x709A,0x7083,0x726A,0x72D6,0x72CB,0x72D8,0x72C9,/* 0x58-0x5F */ + 0x72DC,0x72D2,0x72D4,0x72DA,0x72CC,0x72D1,0x73A4,0x73A1,/* 0x60-0x67 */ + 0x73AD,0x73A6,0x73A2,0x73A0,0x73AC,0x739D,0x74DD,0x74E8,/* 0x68-0x6F */ + 0x753F,0x7540,0x753E,0x758C,0x7598,0x76AF,0x76F3,0x76F1,/* 0x70-0x77 */ + 0x76F0,0x76F5,0x77F8,0x77FC,0x77F9,0x77FB,0x77FA,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x77F7,0x7942,0x793F,0x79C5,0x7A78,0x7A7B,0x7AFB,/* 0xA0-0xA7 */ + 0x7C75,0x7CFD,0x8035,0x808F,0x80AE,0x80A3,0x80B8,0x80B5,/* 0xA8-0xAF */ + 0x80AD,0x8220,0x82A0,0x82C0,0x82AB,0x829A,0x8298,0x829B,/* 0xB0-0xB7 */ + 0x82B5,0x82A7,0x82AE,0x82BC,0x829E,0x82BA,0x82B4,0x82A8,/* 0xB8-0xBF */ + 0x82A1,0x82A9,0x82C2,0x82A4,0x82C3,0x82B6,0x82A2,0x8670,/* 0xC0-0xC7 */ + 0x866F,0x866D,0x866E,0x8C56,0x8FD2,0x8FCB,0x8FD3,0x8FCD,/* 0xC8-0xCF */ + 0x8FD6,0x8FD5,0x8FD7,0x90B2,0x90B4,0x90AF,0x90B3,0x90B0,/* 0xD0-0xD7 */ + 0x9639,0x963D,0x963C,0x963A,0x9643,0x4FCD,0x4FC5,0x4FD3,/* 0xD8-0xDF */ + 0x4FB2,0x4FC9,0x4FCB,0x4FC1,0x4FD4,0x4FDC,0x4FD9,0x4FBB,/* 0xE0-0xE7 */ + 0x4FB3,0x4FDB,0x4FC7,0x4FD6,0x4FBA,0x4FC0,0x4FB9,0x4FEC,/* 0xE8-0xEF */ + 0x5244,0x5249,0x52C0,0x52C2,0x533D,0x537C,0x5397,0x5396,/* 0xF0-0xF7 */ + 0x5399,0x5398,0x54BA,0x54A1,0x54AD,0x54A5,0x54CF,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x54C3,0x830D,0x54B7,0x54AE,0x54D6,0x54B6,0x54C5,0x54C6,/* 0x40-0x47 */ + 0x54A0,0x5470,0x54BC,0x54A2,0x54BE,0x5472,0x54DE,0x54B0,/* 0x48-0x4F */ + 0x57B5,0x579E,0x579F,0x57A4,0x578C,0x5797,0x579D,0x579B,/* 0x50-0x57 */ + 0x5794,0x5798,0x578F,0x5799,0x57A5,0x579A,0x5795,0x58F4,/* 0x58-0x5F */ + 0x590D,0x5953,0x59E1,0x59DE,0x59EE,0x5A00,0x59F1,0x59DD,/* 0x60-0x67 */ + 0x59FA,0x59FD,0x59FC,0x59F6,0x59E4,0x59F2,0x59F7,0x59DB,/* 0x68-0x6F */ + 0x59E9,0x59F3,0x59F5,0x59E0,0x59FE,0x59F4,0x59ED,0x5BA8,/* 0x70-0x77 */ + 0x5C4C,0x5CD0,0x5CD8,0x5CCC,0x5CD7,0x5CCB,0x5CDB,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5CDE,0x5CDA,0x5CC9,0x5CC7,0x5CCA,0x5CD6,0x5CD3,/* 0xA0-0xA7 */ + 0x5CD4,0x5CCF,0x5CC8,0x5CC6,0x5CCE,0x5CDF,0x5CF8,0x5DF9,/* 0xA8-0xAF */ + 0x5E21,0x5E22,0x5E23,0x5E20,0x5E24,0x5EB0,0x5EA4,0x5EA2,/* 0xB0-0xB7 */ + 0x5E9B,0x5EA3,0x5EA5,0x5F07,0x5F2E,0x5F56,0x5F86,0x6037,/* 0xB8-0xBF */ + 0x6039,0x6054,0x6072,0x605E,0x6045,0x6053,0x6047,0x6049,/* 0xC0-0xC7 */ + 0x605B,0x604C,0x6040,0x6042,0x605F,0x6024,0x6044,0x6058,/* 0xC8-0xCF */ + 0x6066,0x606E,0x6242,0x6243,0xF95B,0x630D,0x630B,0x62F5,/* 0xD0-0xD7 */ + 0x630E,0x6303,0x62EB,0x62F9,0x630F,0x630C,0x62F8,0x62F6,/* 0xD8-0xDF */ + 0x6300,0x6313,0x6314,0x62FA,0x6315,0x62FB,0x62F0,0x6541,/* 0xE0-0xE7 */ + 0x6543,0x65AA,0x65BF,0x6636,0x6621,0x6632,0x6635,0x661C,/* 0xE8-0xEF */ + 0x6626,0x6622,0x6633,0x662B,0x663A,0x661D,0x6634,0x6639,/* 0xF0-0xF7 */ + 0x662E,0x670F,0x6710,0x67C1,0x67F2,0x67C8,0x67BA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_CF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x67DC,0x67BB,0x67F8,0x67D8,0x67C0,0x67B7,0x67C5,0x67EB,/* 0x40-0x47 */ + 0x67E4,0x67DF,0x67B5,0x67CD,0x67B3,0x67F7,0x67F6,0x67EE,/* 0x48-0x4F */ + 0x67E3,0x67C2,0x67B9,0x67CE,0x67E7,0x67F0,0x67B2,0x67FC,/* 0x50-0x57 */ + 0x67C6,0x67ED,0x67CC,0x67AE,0x67E6,0x67DB,0x67FA,0x67C9,/* 0x58-0x5F */ + 0x67CA,0x67C3,0x67EA,0x67CB,0x6B28,0x6B82,0x6B84,0x6BB6,/* 0x60-0x67 */ + 0x6BD6,0x6BD8,0x6BE0,0x6C20,0x6C21,0x6D28,0x6D34,0x6D2D,/* 0x68-0x6F */ + 0x6D1F,0x6D3C,0x6D3F,0x6D12,0x6D0A,0x6CDA,0x6D33,0x6D04,/* 0x70-0x77 */ + 0x6D19,0x6D3A,0x6D1A,0x6D11,0x6D00,0x6D1D,0x6D42,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6D01,0x6D18,0x6D37,0x6D03,0x6D0F,0x6D40,0x6D07,/* 0xA0-0xA7 */ + 0x6D20,0x6D2C,0x6D08,0x6D22,0x6D09,0x6D10,0x70B7,0x709F,/* 0xA8-0xAF */ + 0x70BE,0x70B1,0x70B0,0x70A1,0x70B4,0x70B5,0x70A9,0x7241,/* 0xB0-0xB7 */ + 0x7249,0x724A,0x726C,0x7270,0x7273,0x726E,0x72CA,0x72E4,/* 0xB8-0xBF */ + 0x72E8,0x72EB,0x72DF,0x72EA,0x72E6,0x72E3,0x7385,0x73CC,/* 0xC0-0xC7 */ + 0x73C2,0x73C8,0x73C5,0x73B9,0x73B6,0x73B5,0x73B4,0x73EB,/* 0xC8-0xCF */ + 0x73BF,0x73C7,0x73BE,0x73C3,0x73C6,0x73B8,0x73CB,0x74EC,/* 0xD0-0xD7 */ + 0x74EE,0x752E,0x7547,0x7548,0x75A7,0x75AA,0x7679,0x76C4,/* 0xD8-0xDF */ + 0x7708,0x7703,0x7704,0x7705,0x770A,0x76F7,0x76FB,0x76FA,/* 0xE0-0xE7 */ + 0x77E7,0x77E8,0x7806,0x7811,0x7812,0x7805,0x7810,0x780F,/* 0xE8-0xEF */ + 0x780E,0x7809,0x7803,0x7813,0x794A,0x794C,0x794B,0x7945,/* 0xF0-0xF7 */ + 0x7944,0x79D5,0x79CD,0x79CF,0x79D6,0x79CE,0x7A80,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7A7E,0x7AD1,0x7B00,0x7B01,0x7C7A,0x7C78,0x7C79,0x7C7F,/* 0x40-0x47 */ + 0x7C80,0x7C81,0x7D03,0x7D08,0x7D01,0x7F58,0x7F91,0x7F8D,/* 0x48-0x4F */ + 0x7FBE,0x8007,0x800E,0x800F,0x8014,0x8037,0x80D8,0x80C7,/* 0x50-0x57 */ + 0x80E0,0x80D1,0x80C8,0x80C2,0x80D0,0x80C5,0x80E3,0x80D9,/* 0x58-0x5F */ + 0x80DC,0x80CA,0x80D5,0x80C9,0x80CF,0x80D7,0x80E6,0x80CD,/* 0x60-0x67 */ + 0x81FF,0x8221,0x8294,0x82D9,0x82FE,0x82F9,0x8307,0x82E8,/* 0x68-0x6F */ + 0x8300,0x82D5,0x833A,0x82EB,0x82D6,0x82F4,0x82EC,0x82E1,/* 0x70-0x77 */ + 0x82F2,0x82F5,0x830C,0x82FB,0x82F6,0x82F0,0x82EA,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x82E4,0x82E0,0x82FA,0x82F3,0x82ED,0x8677,0x8674,/* 0xA0-0xA7 */ + 0x867C,0x8673,0x8841,0x884E,0x8867,0x886A,0x8869,0x89D3,/* 0xA8-0xAF */ + 0x8A04,0x8A07,0x8D72,0x8FE3,0x8FE1,0x8FEE,0x8FE0,0x90F1,/* 0xB0-0xB7 */ + 0x90BD,0x90BF,0x90D5,0x90C5,0x90BE,0x90C7,0x90CB,0x90C8,/* 0xB8-0xBF */ + 0x91D4,0x91D3,0x9654,0x964F,0x9651,0x9653,0x964A,0x964E,/* 0xC0-0xC7 */ + 0x501E,0x5005,0x5007,0x5013,0x5022,0x5030,0x501B,0x4FF5,/* 0xC8-0xCF */ + 0x4FF4,0x5033,0x5037,0x502C,0x4FF6,0x4FF7,0x5017,0x501C,/* 0xD0-0xD7 */ + 0x5020,0x5027,0x5035,0x502F,0x5031,0x500E,0x515A,0x5194,/* 0xD8-0xDF */ + 0x5193,0x51CA,0x51C4,0x51C5,0x51C8,0x51CE,0x5261,0x525A,/* 0xE0-0xE7 */ + 0x5252,0x525E,0x525F,0x5255,0x5262,0x52CD,0x530E,0x539E,/* 0xE8-0xEF */ + 0x5526,0x54E2,0x5517,0x5512,0x54E7,0x54F3,0x54E4,0x551A,/* 0xF0-0xF7 */ + 0x54FF,0x5504,0x5508,0x54EB,0x5511,0x5505,0x54F1,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x550A,0x54FB,0x54F7,0x54F8,0x54E0,0x550E,0x5503,0x550B,/* 0x40-0x47 */ + 0x5701,0x5702,0x57CC,0x5832,0x57D5,0x57D2,0x57BA,0x57C6,/* 0x48-0x4F */ + 0x57BD,0x57BC,0x57B8,0x57B6,0x57BF,0x57C7,0x57D0,0x57B9,/* 0x50-0x57 */ + 0x57C1,0x590E,0x594A,0x5A19,0x5A16,0x5A2D,0x5A2E,0x5A15,/* 0x58-0x5F */ + 0x5A0F,0x5A17,0x5A0A,0x5A1E,0x5A33,0x5B6C,0x5BA7,0x5BAD,/* 0x60-0x67 */ + 0x5BAC,0x5C03,0x5C56,0x5C54,0x5CEC,0x5CFF,0x5CEE,0x5CF1,/* 0x68-0x6F */ + 0x5CF7,0x5D00,0x5CF9,0x5E29,0x5E28,0x5EA8,0x5EAE,0x5EAA,/* 0x70-0x77 */ + 0x5EAC,0x5F33,0x5F30,0x5F67,0x605D,0x605A,0x6067,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6041,0x60A2,0x6088,0x6080,0x6092,0x6081,0x609D,/* 0xA0-0xA7 */ + 0x6083,0x6095,0x609B,0x6097,0x6087,0x609C,0x608E,0x6219,/* 0xA8-0xAF */ + 0x6246,0x62F2,0x6310,0x6356,0x632C,0x6344,0x6345,0x6336,/* 0xB0-0xB7 */ + 0x6343,0x63E4,0x6339,0x634B,0x634A,0x633C,0x6329,0x6341,/* 0xB8-0xBF */ + 0x6334,0x6358,0x6354,0x6359,0x632D,0x6347,0x6333,0x635A,/* 0xC0-0xC7 */ + 0x6351,0x6338,0x6357,0x6340,0x6348,0x654A,0x6546,0x65C6,/* 0xC8-0xCF */ + 0x65C3,0x65C4,0x65C2,0x664A,0x665F,0x6647,0x6651,0x6712,/* 0xD0-0xD7 */ + 0x6713,0x681F,0x681A,0x6849,0x6832,0x6833,0x683B,0x684B,/* 0xD8-0xDF */ + 0x684F,0x6816,0x6831,0x681C,0x6835,0x682B,0x682D,0x682F,/* 0xE0-0xE7 */ + 0x684E,0x6844,0x6834,0x681D,0x6812,0x6814,0x6826,0x6828,/* 0xE8-0xEF */ + 0x682E,0x684D,0x683A,0x6825,0x6820,0x6B2C,0x6B2F,0x6B2D,/* 0xF0-0xF7 */ + 0x6B31,0x6B34,0x6B6D,0x8082,0x6B88,0x6BE6,0x6BE4,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6BE8,0x6BE3,0x6BE2,0x6BE7,0x6C25,0x6D7A,0x6D63,0x6D64,/* 0x40-0x47 */ + 0x6D76,0x6D0D,0x6D61,0x6D92,0x6D58,0x6D62,0x6D6D,0x6D6F,/* 0x48-0x4F */ + 0x6D91,0x6D8D,0x6DEF,0x6D7F,0x6D86,0x6D5E,0x6D67,0x6D60,/* 0x50-0x57 */ + 0x6D97,0x6D70,0x6D7C,0x6D5F,0x6D82,0x6D98,0x6D2F,0x6D68,/* 0x58-0x5F */ + 0x6D8B,0x6D7E,0x6D80,0x6D84,0x6D16,0x6D83,0x6D7B,0x6D7D,/* 0x60-0x67 */ + 0x6D75,0x6D90,0x70DC,0x70D3,0x70D1,0x70DD,0x70CB,0x7F39,/* 0x68-0x6F */ + 0x70E2,0x70D7,0x70D2,0x70DE,0x70E0,0x70D4,0x70CD,0x70C5,/* 0x70-0x77 */ + 0x70C6,0x70C7,0x70DA,0x70CE,0x70E1,0x7242,0x7278,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7277,0x7276,0x7300,0x72FA,0x72F4,0x72FE,0x72F6,/* 0xA0-0xA7 */ + 0x72F3,0x72FB,0x7301,0x73D3,0x73D9,0x73E5,0x73D6,0x73BC,/* 0xA8-0xAF */ + 0x73E7,0x73E3,0x73E9,0x73DC,0x73D2,0x73DB,0x73D4,0x73DD,/* 0xB0-0xB7 */ + 0x73DA,0x73D7,0x73D8,0x73E8,0x74DE,0x74DF,0x74F4,0x74F5,/* 0xB8-0xBF */ + 0x7521,0x755B,0x755F,0x75B0,0x75C1,0x75BB,0x75C4,0x75C0,/* 0xC0-0xC7 */ + 0x75BF,0x75B6,0x75BA,0x768A,0x76C9,0x771D,0x771B,0x7710,/* 0xC8-0xCF */ + 0x7713,0x7712,0x7723,0x7711,0x7715,0x7719,0x771A,0x7722,/* 0xD0-0xD7 */ + 0x7727,0x7823,0x782C,0x7822,0x7835,0x782F,0x7828,0x782E,/* 0xD8-0xDF */ + 0x782B,0x7821,0x7829,0x7833,0x782A,0x7831,0x7954,0x795B,/* 0xE0-0xE7 */ + 0x794F,0x795C,0x7953,0x7952,0x7951,0x79EB,0x79EC,0x79E0,/* 0xE8-0xEF */ + 0x79EE,0x79ED,0x79EA,0x79DC,0x79DE,0x79DD,0x7A86,0x7A89,/* 0xF0-0xF7 */ + 0x7A85,0x7A8B,0x7A8C,0x7A8A,0x7A87,0x7AD8,0x7B10,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7B04,0x7B13,0x7B05,0x7B0F,0x7B08,0x7B0A,0x7B0E,0x7B09,/* 0x40-0x47 */ + 0x7B12,0x7C84,0x7C91,0x7C8A,0x7C8C,0x7C88,0x7C8D,0x7C85,/* 0x48-0x4F */ + 0x7D1E,0x7D1D,0x7D11,0x7D0E,0x7D18,0x7D16,0x7D13,0x7D1F,/* 0x50-0x57 */ + 0x7D12,0x7D0F,0x7D0C,0x7F5C,0x7F61,0x7F5E,0x7F60,0x7F5D,/* 0x58-0x5F */ + 0x7F5B,0x7F96,0x7F92,0x7FC3,0x7FC2,0x7FC0,0x8016,0x803E,/* 0x60-0x67 */ + 0x8039,0x80FA,0x80F2,0x80F9,0x80F5,0x8101,0x80FB,0x8100,/* 0x68-0x6F */ + 0x8201,0x822F,0x8225,0x8333,0x832D,0x8344,0x8319,0x8351,/* 0x70-0x77 */ + 0x8325,0x8356,0x833F,0x8341,0x8326,0x831C,0x8322,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8342,0x834E,0x831B,0x832A,0x8308,0x833C,0x834D,/* 0xA0-0xA7 */ + 0x8316,0x8324,0x8320,0x8337,0x832F,0x8329,0x8347,0x8345,/* 0xA8-0xAF */ + 0x834C,0x8353,0x831E,0x832C,0x834B,0x8327,0x8348,0x8653,/* 0xB0-0xB7 */ + 0x8652,0x86A2,0x86A8,0x8696,0x868D,0x8691,0x869E,0x8687,/* 0xB8-0xBF */ + 0x8697,0x8686,0x868B,0x869A,0x8685,0x86A5,0x8699,0x86A1,/* 0xC0-0xC7 */ + 0x86A7,0x8695,0x8698,0x868E,0x869D,0x8690,0x8694,0x8843,/* 0xC8-0xCF */ + 0x8844,0x886D,0x8875,0x8876,0x8872,0x8880,0x8871,0x887F,/* 0xD0-0xD7 */ + 0x886F,0x8883,0x887E,0x8874,0x887C,0x8A12,0x8C47,0x8C57,/* 0xD8-0xDF */ + 0x8C7B,0x8CA4,0x8CA3,0x8D76,0x8D78,0x8DB5,0x8DB7,0x8DB6,/* 0xE0-0xE7 */ + 0x8ED1,0x8ED3,0x8FFE,0x8FF5,0x9002,0x8FFF,0x8FFB,0x9004,/* 0xE8-0xEF */ + 0x8FFC,0x8FF6,0x90D6,0x90E0,0x90D9,0x90DA,0x90E3,0x90DF,/* 0xF0-0xF7 */ + 0x90E5,0x90D8,0x90DB,0x90D7,0x90DC,0x90E4,0x9150,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x914E,0x914F,0x91D5,0x91E2,0x91DA,0x965C,0x965F,0x96BC,/* 0x40-0x47 */ + 0x98E3,0x9ADF,0x9B2F,0x4E7F,0x5070,0x506A,0x5061,0x505E,/* 0x48-0x4F */ + 0x5060,0x5053,0x504B,0x505D,0x5072,0x5048,0x504D,0x5041,/* 0x50-0x57 */ + 0x505B,0x504A,0x5062,0x5015,0x5045,0x505F,0x5069,0x506B,/* 0x58-0x5F */ + 0x5063,0x5064,0x5046,0x5040,0x506E,0x5073,0x5057,0x5051,/* 0x60-0x67 */ + 0x51D0,0x526B,0x526D,0x526C,0x526E,0x52D6,0x52D3,0x532D,/* 0x68-0x6F */ + 0x539C,0x5575,0x5576,0x553C,0x554D,0x5550,0x5534,0x552A,/* 0x70-0x77 */ + 0x5551,0x5562,0x5536,0x5535,0x5530,0x5552,0x5545,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x550C,0x5532,0x5565,0x554E,0x5539,0x5548,0x552D,/* 0xA0-0xA7 */ + 0x553B,0x5540,0x554B,0x570A,0x5707,0x57FB,0x5814,0x57E2,/* 0xA8-0xAF */ + 0x57F6,0x57DC,0x57F4,0x5800,0x57ED,0x57FD,0x5808,0x57F8,/* 0xB0-0xB7 */ + 0x580B,0x57F3,0x57CF,0x5807,0x57EE,0x57E3,0x57F2,0x57E5,/* 0xB8-0xBF */ + 0x57EC,0x57E1,0x580E,0x57FC,0x5810,0x57E7,0x5801,0x580C,/* 0xC0-0xC7 */ + 0x57F1,0x57E9,0x57F0,0x580D,0x5804,0x595C,0x5A60,0x5A58,/* 0xC8-0xCF */ + 0x5A55,0x5A67,0x5A5E,0x5A38,0x5A35,0x5A6D,0x5A50,0x5A5F,/* 0xD0-0xD7 */ + 0x5A65,0x5A6C,0x5A53,0x5A64,0x5A57,0x5A43,0x5A5D,0x5A52,/* 0xD8-0xDF */ + 0x5A44,0x5A5B,0x5A48,0x5A8E,0x5A3E,0x5A4D,0x5A39,0x5A4C,/* 0xE0-0xE7 */ + 0x5A70,0x5A69,0x5A47,0x5A51,0x5A56,0x5A42,0x5A5C,0x5B72,/* 0xE8-0xEF */ + 0x5B6E,0x5BC1,0x5BC0,0x5C59,0x5D1E,0x5D0B,0x5D1D,0x5D1A,/* 0xF0-0xF7 */ + 0x5D20,0x5D0C,0x5D28,0x5D0D,0x5D26,0x5D25,0x5D0F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5D30,0x5D12,0x5D23,0x5D1F,0x5D2E,0x5E3E,0x5E34,0x5EB1,/* 0x40-0x47 */ + 0x5EB4,0x5EB9,0x5EB2,0x5EB3,0x5F36,0x5F38,0x5F9B,0x5F96,/* 0x48-0x4F */ + 0x5F9F,0x608A,0x6090,0x6086,0x60BE,0x60B0,0x60BA,0x60D3,/* 0x50-0x57 */ + 0x60D4,0x60CF,0x60E4,0x60D9,0x60DD,0x60C8,0x60B1,0x60DB,/* 0x58-0x5F */ + 0x60B7,0x60CA,0x60BF,0x60C3,0x60CD,0x60C0,0x6332,0x6365,/* 0x60-0x67 */ + 0x638A,0x6382,0x637D,0x63BD,0x639E,0x63AD,0x639D,0x6397,/* 0x68-0x6F */ + 0x63AB,0x638E,0x636F,0x6387,0x6390,0x636E,0x63AF,0x6375,/* 0x70-0x77 */ + 0x639C,0x636D,0x63AE,0x637C,0x63A4,0x633B,0x639F,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6378,0x6385,0x6381,0x6391,0x638D,0x6370,0x6553,/* 0xA0-0xA7 */ + 0x65CD,0x6665,0x6661,0x665B,0x6659,0x665C,0x6662,0x6718,/* 0xA8-0xAF */ + 0x6879,0x6887,0x6890,0x689C,0x686D,0x686E,0x68AE,0x68AB,/* 0xB0-0xB7 */ + 0x6956,0x686F,0x68A3,0x68AC,0x68A9,0x6875,0x6874,0x68B2,/* 0xB8-0xBF */ + 0x688F,0x6877,0x6892,0x687C,0x686B,0x6872,0x68AA,0x6880,/* 0xC0-0xC7 */ + 0x6871,0x687E,0x689B,0x6896,0x688B,0x68A0,0x6889,0x68A4,/* 0xC8-0xCF */ + 0x6878,0x687B,0x6891,0x688C,0x688A,0x687D,0x6B36,0x6B33,/* 0xD0-0xD7 */ + 0x6B37,0x6B38,0x6B91,0x6B8F,0x6B8D,0x6B8E,0x6B8C,0x6C2A,/* 0xD8-0xDF */ + 0x6DC0,0x6DAB,0x6DB4,0x6DB3,0x6E74,0x6DAC,0x6DE9,0x6DE2,/* 0xE0-0xE7 */ + 0x6DB7,0x6DF6,0x6DD4,0x6E00,0x6DC8,0x6DE0,0x6DDF,0x6DD6,/* 0xE8-0xEF */ + 0x6DBE,0x6DE5,0x6DDC,0x6DDD,0x6DDB,0x6DF4,0x6DCA,0x6DBD,/* 0xF0-0xF7 */ + 0x6DED,0x6DF0,0x6DBA,0x6DD5,0x6DC2,0x6DCF,0x6DC9,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6DD0,0x6DF2,0x6DD3,0x6DFD,0x6DD7,0x6DCD,0x6DE3,0x6DBB,/* 0x40-0x47 */ + 0x70FA,0x710D,0x70F7,0x7117,0x70F4,0x710C,0x70F0,0x7104,/* 0x48-0x4F */ + 0x70F3,0x7110,0x70FC,0x70FF,0x7106,0x7113,0x7100,0x70F8,/* 0x50-0x57 */ + 0x70F6,0x710B,0x7102,0x710E,0x727E,0x727B,0x727C,0x727F,/* 0x58-0x5F */ + 0x731D,0x7317,0x7307,0x7311,0x7318,0x730A,0x7308,0x72FF,/* 0x60-0x67 */ + 0x730F,0x731E,0x7388,0x73F6,0x73F8,0x73F5,0x7404,0x7401,/* 0x68-0x6F */ + 0x73FD,0x7407,0x7400,0x73FA,0x73FC,0x73FF,0x740C,0x740B,/* 0x70-0x77 */ + 0x73F4,0x7408,0x7564,0x7563,0x75CE,0x75D2,0x75CF,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x75CB,0x75CC,0x75D1,0x75D0,0x768F,0x7689,0x76D3,/* 0xA0-0xA7 */ + 0x7739,0x772F,0x772D,0x7731,0x7732,0x7734,0x7733,0x773D,/* 0xA8-0xAF */ + 0x7725,0x773B,0x7735,0x7848,0x7852,0x7849,0x784D,0x784A,/* 0xB0-0xB7 */ + 0x784C,0x7826,0x7845,0x7850,0x7964,0x7967,0x7969,0x796A,/* 0xB8-0xBF */ + 0x7963,0x796B,0x7961,0x79BB,0x79FA,0x79F8,0x79F6,0x79F7,/* 0xC0-0xC7 */ + 0x7A8F,0x7A94,0x7A90,0x7B35,0x7B47,0x7B34,0x7B25,0x7B30,/* 0xC8-0xCF */ + 0x7B22,0x7B24,0x7B33,0x7B18,0x7B2A,0x7B1D,0x7B31,0x7B2B,/* 0xD0-0xD7 */ + 0x7B2D,0x7B2F,0x7B32,0x7B38,0x7B1A,0x7B23,0x7C94,0x7C98,/* 0xD8-0xDF */ + 0x7C96,0x7CA3,0x7D35,0x7D3D,0x7D38,0x7D36,0x7D3A,0x7D45,/* 0xE0-0xE7 */ + 0x7D2C,0x7D29,0x7D41,0x7D47,0x7D3E,0x7D3F,0x7D4A,0x7D3B,/* 0xE8-0xEF */ + 0x7D28,0x7F63,0x7F95,0x7F9C,0x7F9D,0x7F9B,0x7FCA,0x7FCB,/* 0xF0-0xF7 */ + 0x7FCD,0x7FD0,0x7FD1,0x7FC7,0x7FCF,0x7FC9,0x801F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x801E,0x801B,0x8047,0x8043,0x8048,0x8118,0x8125,0x8119,/* 0x40-0x47 */ + 0x811B,0x812D,0x811F,0x812C,0x811E,0x8121,0x8115,0x8127,/* 0x48-0x4F */ + 0x811D,0x8122,0x8211,0x8238,0x8233,0x823A,0x8234,0x8232,/* 0x50-0x57 */ + 0x8274,0x8390,0x83A3,0x83A8,0x838D,0x837A,0x8373,0x83A4,/* 0x58-0x5F */ + 0x8374,0x838F,0x8381,0x8395,0x8399,0x8375,0x8394,0x83A9,/* 0x60-0x67 */ + 0x837D,0x8383,0x838C,0x839D,0x839B,0x83AA,0x838B,0x837E,/* 0x68-0x6F */ + 0x83A5,0x83AF,0x8388,0x8397,0x83B0,0x837F,0x83A6,0x8387,/* 0x70-0x77 */ + 0x83AE,0x8376,0x839A,0x8659,0x8656,0x86BF,0x86B7,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x86C2,0x86C1,0x86C5,0x86BA,0x86B0,0x86C8,0x86B9,/* 0xA0-0xA7 */ + 0x86B3,0x86B8,0x86CC,0x86B4,0x86BB,0x86BC,0x86C3,0x86BD,/* 0xA8-0xAF */ + 0x86BE,0x8852,0x8889,0x8895,0x88A8,0x88A2,0x88AA,0x889A,/* 0xB0-0xB7 */ + 0x8891,0x88A1,0x889F,0x8898,0x88A7,0x8899,0x889B,0x8897,/* 0xB8-0xBF */ + 0x88A4,0x88AC,0x888C,0x8893,0x888E,0x8982,0x89D6,0x89D9,/* 0xC0-0xC7 */ + 0x89D5,0x8A30,0x8A27,0x8A2C,0x8A1E,0x8C39,0x8C3B,0x8C5C,/* 0xC8-0xCF */ + 0x8C5D,0x8C7D,0x8CA5,0x8D7D,0x8D7B,0x8D79,0x8DBC,0x8DC2,/* 0xD0-0xD7 */ + 0x8DB9,0x8DBF,0x8DC1,0x8ED8,0x8EDE,0x8EDD,0x8EDC,0x8ED7,/* 0xD8-0xDF */ + 0x8EE0,0x8EE1,0x9024,0x900B,0x9011,0x901C,0x900C,0x9021,/* 0xE0-0xE7 */ + 0x90EF,0x90EA,0x90F0,0x90F4,0x90F2,0x90F3,0x90D4,0x90EB,/* 0xE8-0xEF */ + 0x90EC,0x90E9,0x9156,0x9158,0x915A,0x9153,0x9155,0x91EC,/* 0xF0-0xF7 */ + 0x91F4,0x91F1,0x91F3,0x91F8,0x91E4,0x91F9,0x91EA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x91EB,0x91F7,0x91E8,0x91EE,0x957A,0x9586,0x9588,0x967C,/* 0x40-0x47 */ + 0x966D,0x966B,0x9671,0x966F,0x96BF,0x976A,0x9804,0x98E5,/* 0x48-0x4F */ + 0x9997,0x509B,0x5095,0x5094,0x509E,0x508B,0x50A3,0x5083,/* 0x50-0x57 */ + 0x508C,0x508E,0x509D,0x5068,0x509C,0x5092,0x5082,0x5087,/* 0x58-0x5F */ + 0x515F,0x51D4,0x5312,0x5311,0x53A4,0x53A7,0x5591,0x55A8,/* 0x60-0x67 */ + 0x55A5,0x55AD,0x5577,0x5645,0x55A2,0x5593,0x5588,0x558F,/* 0x68-0x6F */ + 0x55B5,0x5581,0x55A3,0x5592,0x55A4,0x557D,0x558C,0x55A6,/* 0x70-0x77 */ + 0x557F,0x5595,0x55A1,0x558E,0x570C,0x5829,0x5837,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5819,0x581E,0x5827,0x5823,0x5828,0x57F5,0x5848,/* 0xA0-0xA7 */ + 0x5825,0x581C,0x581B,0x5833,0x583F,0x5836,0x582E,0x5839,/* 0xA8-0xAF */ + 0x5838,0x582D,0x582C,0x583B,0x5961,0x5AAF,0x5A94,0x5A9F,/* 0xB0-0xB7 */ + 0x5A7A,0x5AA2,0x5A9E,0x5A78,0x5AA6,0x5A7C,0x5AA5,0x5AAC,/* 0xB8-0xBF */ + 0x5A95,0x5AAE,0x5A37,0x5A84,0x5A8A,0x5A97,0x5A83,0x5A8B,/* 0xC0-0xC7 */ + 0x5AA9,0x5A7B,0x5A7D,0x5A8C,0x5A9C,0x5A8F,0x5A93,0x5A9D,/* 0xC8-0xCF */ + 0x5BEA,0x5BCD,0x5BCB,0x5BD4,0x5BD1,0x5BCA,0x5BCE,0x5C0C,/* 0xD0-0xD7 */ + 0x5C30,0x5D37,0x5D43,0x5D6B,0x5D41,0x5D4B,0x5D3F,0x5D35,/* 0xD8-0xDF */ + 0x5D51,0x5D4E,0x5D55,0x5D33,0x5D3A,0x5D52,0x5D3D,0x5D31,/* 0xE0-0xE7 */ + 0x5D59,0x5D42,0x5D39,0x5D49,0x5D38,0x5D3C,0x5D32,0x5D36,/* 0xE8-0xEF */ + 0x5D40,0x5D45,0x5E44,0x5E41,0x5F58,0x5FA6,0x5FA5,0x5FAB,/* 0xF0-0xF7 */ + 0x60C9,0x60B9,0x60CC,0x60E2,0x60CE,0x60C4,0x6114,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_D9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x60F2,0x610A,0x6116,0x6105,0x60F5,0x6113,0x60F8,0x60FC,/* 0x40-0x47 */ + 0x60FE,0x60C1,0x6103,0x6118,0x611D,0x6110,0x60FF,0x6104,/* 0x48-0x4F */ + 0x610B,0x624A,0x6394,0x63B1,0x63B0,0x63CE,0x63E5,0x63E8,/* 0x50-0x57 */ + 0x63EF,0x63C3,0x649D,0x63F3,0x63CA,0x63E0,0x63F6,0x63D5,/* 0x58-0x5F */ + 0x63F2,0x63F5,0x6461,0x63DF,0x63BE,0x63DD,0x63DC,0x63C4,/* 0x60-0x67 */ + 0x63D8,0x63D3,0x63C2,0x63C7,0x63CC,0x63CB,0x63C8,0x63F0,/* 0x68-0x6F */ + 0x63D7,0x63D9,0x6532,0x6567,0x656A,0x6564,0x655C,0x6568,/* 0x70-0x77 */ + 0x6565,0x658C,0x659D,0x659E,0x65AE,0x65D0,0x65D2,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x667C,0x666C,0x667B,0x6680,0x6671,0x6679,0x666A,/* 0xA0-0xA7 */ + 0x6672,0x6701,0x690C,0x68D3,0x6904,0x68DC,0x692A,0x68EC,/* 0xA8-0xAF */ + 0x68EA,0x68F1,0x690F,0x68D6,0x68F7,0x68EB,0x68E4,0x68F6,/* 0xB0-0xB7 */ + 0x6913,0x6910,0x68F3,0x68E1,0x6907,0x68CC,0x6908,0x6970,/* 0xB8-0xBF */ + 0x68B4,0x6911,0x68EF,0x68C6,0x6914,0x68F8,0x68D0,0x68FD,/* 0xC0-0xC7 */ + 0x68FC,0x68E8,0x690B,0x690A,0x6917,0x68CE,0x68C8,0x68DD,/* 0xC8-0xCF */ + 0x68DE,0x68E6,0x68F4,0x68D1,0x6906,0x68D4,0x68E9,0x6915,/* 0xD0-0xD7 */ + 0x6925,0x68C7,0x6B39,0x6B3B,0x6B3F,0x6B3C,0x6B94,0x6B97,/* 0xD8-0xDF */ + 0x6B99,0x6B95,0x6BBD,0x6BF0,0x6BF2,0x6BF3,0x6C30,0x6DFC,/* 0xE0-0xE7 */ + 0x6E46,0x6E47,0x6E1F,0x6E49,0x6E88,0x6E3C,0x6E3D,0x6E45,/* 0xE8-0xEF */ + 0x6E62,0x6E2B,0x6E3F,0x6E41,0x6E5D,0x6E73,0x6E1C,0x6E33,/* 0xF0-0xF7 */ + 0x6E4B,0x6E40,0x6E51,0x6E3B,0x6E03,0x6E2E,0x6E5E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6E68,0x6E5C,0x6E61,0x6E31,0x6E28,0x6E60,0x6E71,0x6E6B,/* 0x40-0x47 */ + 0x6E39,0x6E22,0x6E30,0x6E53,0x6E65,0x6E27,0x6E78,0x6E64,/* 0x48-0x4F */ + 0x6E77,0x6E55,0x6E79,0x6E52,0x6E66,0x6E35,0x6E36,0x6E5A,/* 0x50-0x57 */ + 0x7120,0x711E,0x712F,0x70FB,0x712E,0x7131,0x7123,0x7125,/* 0x58-0x5F */ + 0x7122,0x7132,0x711F,0x7128,0x713A,0x711B,0x724B,0x725A,/* 0x60-0x67 */ + 0x7288,0x7289,0x7286,0x7285,0x728B,0x7312,0x730B,0x7330,/* 0x68-0x6F */ + 0x7322,0x7331,0x7333,0x7327,0x7332,0x732D,0x7326,0x7323,/* 0x70-0x77 */ + 0x7335,0x730C,0x742E,0x742C,0x7430,0x742B,0x7416,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x741A,0x7421,0x742D,0x7431,0x7424,0x7423,0x741D,/* 0xA0-0xA7 */ + 0x7429,0x7420,0x7432,0x74FB,0x752F,0x756F,0x756C,0x75E7,/* 0xA8-0xAF */ + 0x75DA,0x75E1,0x75E6,0x75DD,0x75DF,0x75E4,0x75D7,0x7695,/* 0xB0-0xB7 */ + 0x7692,0x76DA,0x7746,0x7747,0x7744,0x774D,0x7745,0x774A,/* 0xB8-0xBF */ + 0x774E,0x774B,0x774C,0x77DE,0x77EC,0x7860,0x7864,0x7865,/* 0xC0-0xC7 */ + 0x785C,0x786D,0x7871,0x786A,0x786E,0x7870,0x7869,0x7868,/* 0xC8-0xCF */ + 0x785E,0x7862,0x7974,0x7973,0x7972,0x7970,0x7A02,0x7A0A,/* 0xD0-0xD7 */ + 0x7A03,0x7A0C,0x7A04,0x7A99,0x7AE6,0x7AE4,0x7B4A,0x7B3B,/* 0xD8-0xDF */ + 0x7B44,0x7B48,0x7B4C,0x7B4E,0x7B40,0x7B58,0x7B45,0x7CA2,/* 0xE0-0xE7 */ + 0x7C9E,0x7CA8,0x7CA1,0x7D58,0x7D6F,0x7D63,0x7D53,0x7D56,/* 0xE8-0xEF */ + 0x7D67,0x7D6A,0x7D4F,0x7D6D,0x7D5C,0x7D6B,0x7D52,0x7D54,/* 0xF0-0xF7 */ + 0x7D69,0x7D51,0x7D5F,0x7D4E,0x7F3E,0x7F3F,0x7F65,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7F66,0x7FA2,0x7FA0,0x7FA1,0x7FD7,0x8051,0x804F,0x8050,/* 0x40-0x47 */ + 0x80FE,0x80D4,0x8143,0x814A,0x8152,0x814F,0x8147,0x813D,/* 0x48-0x4F */ + 0x814D,0x813A,0x81E6,0x81EE,0x81F7,0x81F8,0x81F9,0x8204,/* 0x50-0x57 */ + 0x823C,0x823D,0x823F,0x8275,0x833B,0x83CF,0x83F9,0x8423,/* 0x58-0x5F */ + 0x83C0,0x83E8,0x8412,0x83E7,0x83E4,0x83FC,0x83F6,0x8410,/* 0x60-0x67 */ + 0x83C6,0x83C8,0x83EB,0x83E3,0x83BF,0x8401,0x83DD,0x83E5,/* 0x68-0x6F */ + 0x83D8,0x83FF,0x83E1,0x83CB,0x83CE,0x83D6,0x83F5,0xF93E,/* 0x70-0x77 */ + 0x8409,0x840F,0x83DE,0x8411,0x8406,0x83C2,0x83F3,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x83D5,0x83FA,0x83C7,0x83D1,0x83EA,0x8413,0x83C3,/* 0xA0-0xA7 */ + 0x83EC,0x83EE,0x83C4,0x83FB,0x83D7,0x83E2,0x841B,0x83DB,/* 0xA8-0xAF */ + 0x83FE,0x86D8,0x86E2,0x86E6,0x86D3,0x86E3,0x86DA,0x86EA,/* 0xB0-0xB7 */ + 0x86DD,0x86EB,0x86DC,0x86EC,0x86E9,0x86D7,0x86E8,0x86D1,/* 0xB8-0xBF */ + 0x8848,0x8856,0x8855,0x88BA,0x88D7,0x88B9,0x88B8,0x88C0,/* 0xC0-0xC7 */ + 0x88BE,0x88B6,0x88BC,0x88B7,0x88BD,0x88B2,0x8901,0x88C9,/* 0xC8-0xCF */ + 0x8995,0x8998,0x8997,0x89DD,0x89DA,0x89DB,0x8A4E,0x8A4D,/* 0xD0-0xD7 */ + 0x8A39,0x8A59,0x8A40,0x8A57,0x8A58,0x8A44,0x8A45,0x8A52,/* 0xD8-0xDF */ + 0x8A48,0x8A51,0x8A4A,0x8A4C,0x8A4F,0x8C5F,0x8C81,0x8C80,/* 0xE0-0xE7 */ + 0x8CBA,0x8CBE,0x8CB0,0x8CB9,0x8CB5,0x8D84,0x8D80,0x8D89,/* 0xE8-0xEF */ + 0x8DD8,0x8DD3,0x8DCD,0x8DC7,0x8DD6,0x8DDC,0x8DCF,0x8DD5,/* 0xF0-0xF7 */ + 0x8DD9,0x8DC8,0x8DD7,0x8DC5,0x8EEF,0x8EF7,0x8EFA,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8EF9,0x8EE6,0x8EEE,0x8EE5,0x8EF5,0x8EE7,0x8EE8,0x8EF6,/* 0x40-0x47 */ + 0x8EEB,0x8EF1,0x8EEC,0x8EF4,0x8EE9,0x902D,0x9034,0x902F,/* 0x48-0x4F */ + 0x9106,0x912C,0x9104,0x90FF,0x90FC,0x9108,0x90F9,0x90FB,/* 0x50-0x57 */ + 0x9101,0x9100,0x9107,0x9105,0x9103,0x9161,0x9164,0x915F,/* 0x58-0x5F */ + 0x9162,0x9160,0x9201,0x920A,0x9225,0x9203,0x921A,0x9226,/* 0x60-0x67 */ + 0x920F,0x920C,0x9200,0x9212,0x91FF,0x91FD,0x9206,0x9204,/* 0x68-0x6F */ + 0x9227,0x9202,0x921C,0x9224,0x9219,0x9217,0x9205,0x9216,/* 0x70-0x77 */ + 0x957B,0x958D,0x958C,0x9590,0x9687,0x967E,0x9688,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9689,0x9683,0x9680,0x96C2,0x96C8,0x96C3,0x96F1,/* 0xA0-0xA7 */ + 0x96F0,0x976C,0x9770,0x976E,0x9807,0x98A9,0x98EB,0x9CE6,/* 0xA8-0xAF */ + 0x9EF9,0x4E83,0x4E84,0x4EB6,0x50BD,0x50BF,0x50C6,0x50AE,/* 0xB0-0xB7 */ + 0x50C4,0x50CA,0x50B4,0x50C8,0x50C2,0x50B0,0x50C1,0x50BA,/* 0xB8-0xBF */ + 0x50B1,0x50CB,0x50C9,0x50B6,0x50B8,0x51D7,0x527A,0x5278,/* 0xC0-0xC7 */ + 0x527B,0x527C,0x55C3,0x55DB,0x55CC,0x55D0,0x55CB,0x55CA,/* 0xC8-0xCF */ + 0x55DD,0x55C0,0x55D4,0x55C4,0x55E9,0x55BF,0x55D2,0x558D,/* 0xD0-0xD7 */ + 0x55CF,0x55D5,0x55E2,0x55D6,0x55C8,0x55F2,0x55CD,0x55D9,/* 0xD8-0xDF */ + 0x55C2,0x5714,0x5853,0x5868,0x5864,0x584F,0x584D,0x5849,/* 0xE0-0xE7 */ + 0x586F,0x5855,0x584E,0x585D,0x5859,0x5865,0x585B,0x583D,/* 0xE8-0xEF */ + 0x5863,0x5871,0x58FC,0x5AC7,0x5AC4,0x5ACB,0x5ABA,0x5AB8,/* 0xF0-0xF7 */ + 0x5AB1,0x5AB5,0x5AB0,0x5ABF,0x5AC8,0x5ABB,0x5AC6,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DD[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5AB7,0x5AC0,0x5ACA,0x5AB4,0x5AB6,0x5ACD,0x5AB9,0x5A90,/* 0x40-0x47 */ + 0x5BD6,0x5BD8,0x5BD9,0x5C1F,0x5C33,0x5D71,0x5D63,0x5D4A,/* 0x48-0x4F */ + 0x5D65,0x5D72,0x5D6C,0x5D5E,0x5D68,0x5D67,0x5D62,0x5DF0,/* 0x50-0x57 */ + 0x5E4F,0x5E4E,0x5E4A,0x5E4D,0x5E4B,0x5EC5,0x5ECC,0x5EC6,/* 0x58-0x5F */ + 0x5ECB,0x5EC7,0x5F40,0x5FAF,0x5FAD,0x60F7,0x6149,0x614A,/* 0x60-0x67 */ + 0x612B,0x6145,0x6136,0x6132,0x612E,0x6146,0x612F,0x614F,/* 0x68-0x6F */ + 0x6129,0x6140,0x6220,0x9168,0x6223,0x6225,0x6224,0x63C5,/* 0x70-0x77 */ + 0x63F1,0x63EB,0x6410,0x6412,0x6409,0x6420,0x6424,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6433,0x6443,0x641F,0x6415,0x6418,0x6439,0x6437,/* 0xA0-0xA7 */ + 0x6422,0x6423,0x640C,0x6426,0x6430,0x6428,0x6441,0x6435,/* 0xA8-0xAF */ + 0x642F,0x640A,0x641A,0x6440,0x6425,0x6427,0x640B,0x63E7,/* 0xB0-0xB7 */ + 0x641B,0x642E,0x6421,0x640E,0x656F,0x6592,0x65D3,0x6686,/* 0xB8-0xBF */ + 0x668C,0x6695,0x6690,0x668B,0x668A,0x6699,0x6694,0x6678,/* 0xC0-0xC7 */ + 0x6720,0x6966,0x695F,0x6938,0x694E,0x6962,0x6971,0x693F,/* 0xC8-0xCF */ + 0x6945,0x696A,0x6939,0x6942,0x6957,0x6959,0x697A,0x6948,/* 0xD0-0xD7 */ + 0x6949,0x6935,0x696C,0x6933,0x693D,0x6965,0x68F0,0x6978,/* 0xD8-0xDF */ + 0x6934,0x6969,0x6940,0x696F,0x6944,0x6976,0x6958,0x6941,/* 0xE0-0xE7 */ + 0x6974,0x694C,0x693B,0x694B,0x6937,0x695C,0x694F,0x6951,/* 0xE8-0xEF */ + 0x6932,0x6952,0x692F,0x697B,0x693C,0x6B46,0x6B45,0x6B43,/* 0xF0-0xF7 */ + 0x6B42,0x6B48,0x6B41,0x6B9B,0xFA0D,0x6BFB,0x6BFC,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6BF9,0x6BF7,0x6BF8,0x6E9B,0x6ED6,0x6EC8,0x6E8F,0x6EC0,/* 0x40-0x47 */ + 0x6E9F,0x6E93,0x6E94,0x6EA0,0x6EB1,0x6EB9,0x6EC6,0x6ED2,/* 0x48-0x4F */ + 0x6EBD,0x6EC1,0x6E9E,0x6EC9,0x6EB7,0x6EB0,0x6ECD,0x6EA6,/* 0x50-0x57 */ + 0x6ECF,0x6EB2,0x6EBE,0x6EC3,0x6EDC,0x6ED8,0x6E99,0x6E92,/* 0x58-0x5F */ + 0x6E8E,0x6E8D,0x6EA4,0x6EA1,0x6EBF,0x6EB3,0x6ED0,0x6ECA,/* 0x60-0x67 */ + 0x6E97,0x6EAE,0x6EA3,0x7147,0x7154,0x7152,0x7163,0x7160,/* 0x68-0x6F */ + 0x7141,0x715D,0x7162,0x7172,0x7178,0x716A,0x7161,0x7142,/* 0x70-0x77 */ + 0x7158,0x7143,0x714B,0x7170,0x715F,0x7150,0x7153,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7144,0x714D,0x715A,0x724F,0x728D,0x728C,0x7291,/* 0xA0-0xA7 */ + 0x7290,0x728E,0x733C,0x7342,0x733B,0x733A,0x7340,0x734A,/* 0xA8-0xAF */ + 0x7349,0x7444,0x744A,0x744B,0x7452,0x7451,0x7457,0x7440,/* 0xB0-0xB7 */ + 0x744F,0x7450,0x744E,0x7442,0x7446,0x744D,0x7454,0x74E1,/* 0xB8-0xBF */ + 0x74FF,0x74FE,0x74FD,0x751D,0x7579,0x7577,0x6983,0x75EF,/* 0xC0-0xC7 */ + 0x760F,0x7603,0x75F7,0x75FE,0x75FC,0x75F9,0x75F8,0x7610,/* 0xC8-0xCF */ + 0x75FB,0x75F6,0x75ED,0x75F5,0x75FD,0x7699,0x76B5,0x76DD,/* 0xD0-0xD7 */ + 0x7755,0x775F,0x7760,0x7752,0x7756,0x775A,0x7769,0x7767,/* 0xD8-0xDF */ + 0x7754,0x7759,0x776D,0x77E0,0x7887,0x789A,0x7894,0x788F,/* 0xE0-0xE7 */ + 0x7884,0x7895,0x7885,0x7886,0x78A1,0x7883,0x7879,0x7899,/* 0xE8-0xEF */ + 0x7880,0x7896,0x787B,0x797C,0x7982,0x797D,0x7979,0x7A11,/* 0xF0-0xF7 */ + 0x7A18,0x7A19,0x7A12,0x7A17,0x7A15,0x7A22,0x7A13,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_DF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7A1B,0x7A10,0x7AA3,0x7AA2,0x7A9E,0x7AEB,0x7B66,0x7B64,/* 0x40-0x47 */ + 0x7B6D,0x7B74,0x7B69,0x7B72,0x7B65,0x7B73,0x7B71,0x7B70,/* 0x48-0x4F */ + 0x7B61,0x7B78,0x7B76,0x7B63,0x7CB2,0x7CB4,0x7CAF,0x7D88,/* 0x50-0x57 */ + 0x7D86,0x7D80,0x7D8D,0x7D7F,0x7D85,0x7D7A,0x7D8E,0x7D7B,/* 0x58-0x5F */ + 0x7D83,0x7D7C,0x7D8C,0x7D94,0x7D84,0x7D7D,0x7D92,0x7F6D,/* 0x60-0x67 */ + 0x7F6B,0x7F67,0x7F68,0x7F6C,0x7FA6,0x7FA5,0x7FA7,0x7FDB,/* 0x68-0x6F */ + 0x7FDC,0x8021,0x8164,0x8160,0x8177,0x815C,0x8169,0x815B,/* 0x70-0x77 */ + 0x8162,0x8172,0x6721,0x815E,0x8176,0x8167,0x816F,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8144,0x8161,0x821D,0x8249,0x8244,0x8240,0x8242,/* 0xA0-0xA7 */ + 0x8245,0x84F1,0x843F,0x8456,0x8476,0x8479,0x848F,0x848D,/* 0xA8-0xAF */ + 0x8465,0x8451,0x8440,0x8486,0x8467,0x8430,0x844D,0x847D,/* 0xB0-0xB7 */ + 0x845A,0x8459,0x8474,0x8473,0x845D,0x8507,0x845E,0x8437,/* 0xB8-0xBF */ + 0x843A,0x8434,0x847A,0x8443,0x8478,0x8432,0x8445,0x8429,/* 0xC0-0xC7 */ + 0x83D9,0x844B,0x842F,0x8442,0x842D,0x845F,0x8470,0x8439,/* 0xC8-0xCF */ + 0x844E,0x844C,0x8452,0x846F,0x84C5,0x848E,0x843B,0x8447,/* 0xD0-0xD7 */ + 0x8436,0x8433,0x8468,0x847E,0x8444,0x842B,0x8460,0x8454,/* 0xD8-0xDF */ + 0x846E,0x8450,0x870B,0x8704,0x86F7,0x870C,0x86FA,0x86D6,/* 0xE0-0xE7 */ + 0x86F5,0x874D,0x86F8,0x870E,0x8709,0x8701,0x86F6,0x870D,/* 0xE8-0xEF */ + 0x8705,0x88D6,0x88CB,0x88CD,0x88CE,0x88DE,0x88DB,0x88DA,/* 0xF0-0xF7 */ + 0x88CC,0x88D0,0x8985,0x899B,0x89DF,0x89E5,0x89E4,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x89E1,0x89E0,0x89E2,0x89DC,0x89E6,0x8A76,0x8A86,0x8A7F,/* 0x40-0x47 */ + 0x8A61,0x8A3F,0x8A77,0x8A82,0x8A84,0x8A75,0x8A83,0x8A81,/* 0x48-0x4F */ + 0x8A74,0x8A7A,0x8C3C,0x8C4B,0x8C4A,0x8C65,0x8C64,0x8C66,/* 0x50-0x57 */ + 0x8C86,0x8C84,0x8C85,0x8CCC,0x8D68,0x8D69,0x8D91,0x8D8C,/* 0x58-0x5F */ + 0x8D8E,0x8D8F,0x8D8D,0x8D93,0x8D94,0x8D90,0x8D92,0x8DF0,/* 0x60-0x67 */ + 0x8DE0,0x8DEC,0x8DF1,0x8DEE,0x8DD0,0x8DE9,0x8DE3,0x8DE2,/* 0x68-0x6F */ + 0x8DE7,0x8DF2,0x8DEB,0x8DF4,0x8F06,0x8EFF,0x8F01,0x8F00,/* 0x70-0x77 */ + 0x8F05,0x8F07,0x8F08,0x8F02,0x8F0B,0x9052,0x903F,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9044,0x9049,0x903D,0x9110,0x910D,0x910F,0x9111,/* 0xA0-0xA7 */ + 0x9116,0x9114,0x910B,0x910E,0x916E,0x916F,0x9248,0x9252,/* 0xA8-0xAF */ + 0x9230,0x923A,0x9266,0x9233,0x9265,0x925E,0x9283,0x922E,/* 0xB0-0xB7 */ + 0x924A,0x9246,0x926D,0x926C,0x924F,0x9260,0x9267,0x926F,/* 0xB8-0xBF */ + 0x9236,0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,0x9272,/* 0xC0-0xC7 */ + 0x924E,0x9253,0x924C,0x9256,0x9232,0x959F,0x959C,0x959E,/* 0xC8-0xCF */ + 0x959B,0x9692,0x9693,0x9691,0x9697,0x96CE,0x96FA,0x96FD,/* 0xD0-0xD7 */ + 0x96F8,0x96F5,0x9773,0x9777,0x9778,0x9772,0x980F,0x980D,/* 0xD8-0xDF */ + 0x980E,0x98AC,0x98F6,0x98F9,0x99AF,0x99B2,0x99B0,0x99B5,/* 0xE0-0xE7 */ + 0x9AAD,0x9AAB,0x9B5B,0x9CEA,0x9CED,0x9CE7,0x9E80,0x9EFD,/* 0xE8-0xEF */ + 0x50E6,0x50D4,0x50D7,0x50E8,0x50F3,0x50DB,0x50EA,0x50DD,/* 0xF0-0xF7 */ + 0x50E4,0x50D3,0x50EC,0x50F0,0x50EF,0x50E3,0x50E0,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x51D8,0x5280,0x5281,0x52E9,0x52EB,0x5330,0x53AC,0x5627,/* 0x40-0x47 */ + 0x5615,0x560C,0x5612,0x55FC,0x560F,0x561C,0x5601,0x5613,/* 0x48-0x4F */ + 0x5602,0x55FA,0x561D,0x5604,0x55FF,0x55F9,0x5889,0x587C,/* 0x50-0x57 */ + 0x5890,0x5898,0x5886,0x5881,0x587F,0x5874,0x588B,0x587A,/* 0x58-0x5F */ + 0x5887,0x5891,0x588E,0x5876,0x5882,0x5888,0x587B,0x5894,/* 0x60-0x67 */ + 0x588F,0x58FE,0x596B,0x5ADC,0x5AEE,0x5AE5,0x5AD5,0x5AEA,/* 0x68-0x6F */ + 0x5ADA,0x5AED,0x5AEB,0x5AF3,0x5AE2,0x5AE0,0x5ADB,0x5AEC,/* 0x70-0x77 */ + 0x5ADE,0x5ADD,0x5AD9,0x5AE8,0x5ADF,0x5B77,0x5BE0,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x5BE3,0x5C63,0x5D82,0x5D80,0x5D7D,0x5D86,0x5D7A,/* 0xA0-0xA7 */ + 0x5D81,0x5D77,0x5D8A,0x5D89,0x5D88,0x5D7E,0x5D7C,0x5D8D,/* 0xA8-0xAF */ + 0x5D79,0x5D7F,0x5E58,0x5E59,0x5E53,0x5ED8,0x5ED1,0x5ED7,/* 0xB0-0xB7 */ + 0x5ECE,0x5EDC,0x5ED5,0x5ED9,0x5ED2,0x5ED4,0x5F44,0x5F43,/* 0xB8-0xBF */ + 0x5F6F,0x5FB6,0x612C,0x6128,0x6141,0x615E,0x6171,0x6173,/* 0xC0-0xC7 */ + 0x6152,0x6153,0x6172,0x616C,0x6180,0x6174,0x6154,0x617A,/* 0xC8-0xCF */ + 0x615B,0x6165,0x613B,0x616A,0x6161,0x6156,0x6229,0x6227,/* 0xD0-0xD7 */ + 0x622B,0x642B,0x644D,0x645B,0x645D,0x6474,0x6476,0x6472,/* 0xD8-0xDF */ + 0x6473,0x647D,0x6475,0x6466,0x64A6,0x644E,0x6482,0x645E,/* 0xE0-0xE7 */ + 0x645C,0x644B,0x6453,0x6460,0x6450,0x647F,0x643F,0x646C,/* 0xE8-0xEF */ + 0x646B,0x6459,0x6465,0x6477,0x6573,0x65A0,0x66A1,0x66A0,/* 0xF0-0xF7 */ + 0x669F,0x6705,0x6704,0x6722,0x69B1,0x69B6,0x69C9,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x69A0,0x69CE,0x6996,0x69B0,0x69AC,0x69BC,0x6991,0x6999,/* 0x40-0x47 */ + 0x698E,0x69A7,0x698D,0x69A9,0x69BE,0x69AF,0x69BF,0x69C4,/* 0x48-0x4F */ + 0x69BD,0x69A4,0x69D4,0x69B9,0x69CA,0x699A,0x69CF,0x69B3,/* 0x50-0x57 */ + 0x6993,0x69AA,0x69A1,0x699E,0x69D9,0x6997,0x6990,0x69C2,/* 0x58-0x5F */ + 0x69B5,0x69A5,0x69C6,0x6B4A,0x6B4D,0x6B4B,0x6B9E,0x6B9F,/* 0x60-0x67 */ + 0x6BA0,0x6BC3,0x6BC4,0x6BFE,0x6ECE,0x6EF5,0x6EF1,0x6F03,/* 0x68-0x6F */ + 0x6F25,0x6EF8,0x6F37,0x6EFB,0x6F2E,0x6F09,0x6F4E,0x6F19,/* 0x70-0x77 */ + 0x6F1A,0x6F27,0x6F18,0x6F3B,0x6F12,0x6EED,0x6F0A,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x6F36,0x6F73,0x6EF9,0x6EEE,0x6F2D,0x6F40,0x6F30,/* 0xA0-0xA7 */ + 0x6F3C,0x6F35,0x6EEB,0x6F07,0x6F0E,0x6F43,0x6F05,0x6EFD,/* 0xA8-0xAF */ + 0x6EF6,0x6F39,0x6F1C,0x6EFC,0x6F3A,0x6F1F,0x6F0D,0x6F1E,/* 0xB0-0xB7 */ + 0x6F08,0x6F21,0x7187,0x7190,0x7189,0x7180,0x7185,0x7182,/* 0xB8-0xBF */ + 0x718F,0x717B,0x7186,0x7181,0x7197,0x7244,0x7253,0x7297,/* 0xC0-0xC7 */ + 0x7295,0x7293,0x7343,0x734D,0x7351,0x734C,0x7462,0x7473,/* 0xC8-0xCF */ + 0x7471,0x7475,0x7472,0x7467,0x746E,0x7500,0x7502,0x7503,/* 0xD0-0xD7 */ + 0x757D,0x7590,0x7616,0x7608,0x760C,0x7615,0x7611,0x760A,/* 0xD8-0xDF */ + 0x7614,0x76B8,0x7781,0x777C,0x7785,0x7782,0x776E,0x7780,/* 0xE0-0xE7 */ + 0x776F,0x777E,0x7783,0x78B2,0x78AA,0x78B4,0x78AD,0x78A8,/* 0xE8-0xEF */ + 0x787E,0x78AB,0x789E,0x78A5,0x78A0,0x78AC,0x78A2,0x78A4,/* 0xF0-0xF7 */ + 0x7998,0x798A,0x798B,0x7996,0x7995,0x7994,0x7993,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7997,0x7988,0x7992,0x7990,0x7A2B,0x7A4A,0x7A30,0x7A2F,/* 0x40-0x47 */ + 0x7A28,0x7A26,0x7AA8,0x7AAB,0x7AAC,0x7AEE,0x7B88,0x7B9C,/* 0x48-0x4F */ + 0x7B8A,0x7B91,0x7B90,0x7B96,0x7B8D,0x7B8C,0x7B9B,0x7B8E,/* 0x50-0x57 */ + 0x7B85,0x7B98,0x5284,0x7B99,0x7BA4,0x7B82,0x7CBB,0x7CBF,/* 0x58-0x5F */ + 0x7CBC,0x7CBA,0x7DA7,0x7DB7,0x7DC2,0x7DA3,0x7DAA,0x7DC1,/* 0x60-0x67 */ + 0x7DC0,0x7DC5,0x7D9D,0x7DCE,0x7DC4,0x7DC6,0x7DCB,0x7DCC,/* 0x68-0x6F */ + 0x7DAF,0x7DB9,0x7D96,0x7DBC,0x7D9F,0x7DA6,0x7DAE,0x7DA9,/* 0x70-0x77 */ + 0x7DA1,0x7DC9,0x7F73,0x7FE2,0x7FE3,0x7FE5,0x7FDE,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8024,0x805D,0x805C,0x8189,0x8186,0x8183,0x8187,/* 0xA0-0xA7 */ + 0x818D,0x818C,0x818B,0x8215,0x8497,0x84A4,0x84A1,0x849F,/* 0xA8-0xAF */ + 0x84BA,0x84CE,0x84C2,0x84AC,0x84AE,0x84AB,0x84B9,0x84B4,/* 0xB0-0xB7 */ + 0x84C1,0x84CD,0x84AA,0x849A,0x84B1,0x84D0,0x849D,0x84A7,/* 0xB8-0xBF */ + 0x84BB,0x84A2,0x8494,0x84C7,0x84CC,0x849B,0x84A9,0x84AF,/* 0xC0-0xC7 */ + 0x84A8,0x84D6,0x8498,0x84B6,0x84CF,0x84A0,0x84D7,0x84D4,/* 0xC8-0xCF */ + 0x84D2,0x84DB,0x84B0,0x8491,0x8661,0x8733,0x8723,0x8728,/* 0xD0-0xD7 */ + 0x876B,0x8740,0x872E,0x871E,0x8721,0x8719,0x871B,0x8743,/* 0xD8-0xDF */ + 0x872C,0x8741,0x873E,0x8746,0x8720,0x8732,0x872A,0x872D,/* 0xE0-0xE7 */ + 0x873C,0x8712,0x873A,0x8731,0x8735,0x8742,0x8726,0x8727,/* 0xE8-0xEF */ + 0x8738,0x8724,0x871A,0x8730,0x8711,0x88F7,0x88E7,0x88F1,/* 0xF0-0xF7 */ + 0x88F2,0x88FA,0x88FE,0x88EE,0x88FC,0x88F6,0x88FB,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x88F0,0x88EC,0x88EB,0x899D,0x89A1,0x899F,0x899E,0x89E9,/* 0x40-0x47 */ + 0x89EB,0x89E8,0x8AAB,0x8A99,0x8A8B,0x8A92,0x8A8F,0x8A96,/* 0x48-0x4F */ + 0x8C3D,0x8C68,0x8C69,0x8CD5,0x8CCF,0x8CD7,0x8D96,0x8E09,/* 0x50-0x57 */ + 0x8E02,0x8DFF,0x8E0D,0x8DFD,0x8E0A,0x8E03,0x8E07,0x8E06,/* 0x58-0x5F */ + 0x8E05,0x8DFE,0x8E00,0x8E04,0x8F10,0x8F11,0x8F0E,0x8F0D,/* 0x60-0x67 */ + 0x9123,0x911C,0x9120,0x9122,0x911F,0x911D,0x911A,0x9124,/* 0x68-0x6F */ + 0x9121,0x911B,0x917A,0x9172,0x9179,0x9173,0x92A5,0x92A4,/* 0x70-0x77 */ + 0x9276,0x929B,0x927A,0x92A0,0x9294,0x92AA,0x928D,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x92A6,0x929A,0x92AB,0x9279,0x9297,0x927F,0x92A3,/* 0xA0-0xA7 */ + 0x92EE,0x928E,0x9282,0x9295,0x92A2,0x927D,0x9288,0x92A1,/* 0xA8-0xAF */ + 0x928A,0x9286,0x928C,0x9299,0x92A7,0x927E,0x9287,0x92A9,/* 0xB0-0xB7 */ + 0x929D,0x928B,0x922D,0x969E,0x96A1,0x96FF,0x9758,0x977D,/* 0xB8-0xBF */ + 0x977A,0x977E,0x9783,0x9780,0x9782,0x977B,0x9784,0x9781,/* 0xC0-0xC7 */ + 0x977F,0x97CE,0x97CD,0x9816,0x98AD,0x98AE,0x9902,0x9900,/* 0xC8-0xCF */ + 0x9907,0x999D,0x999C,0x99C3,0x99B9,0x99BB,0x99BA,0x99C2,/* 0xD0-0xD7 */ + 0x99BD,0x99C7,0x9AB1,0x9AE3,0x9AE7,0x9B3E,0x9B3F,0x9B60,/* 0xD8-0xDF */ + 0x9B61,0x9B5F,0x9CF1,0x9CF2,0x9CF5,0x9EA7,0x50FF,0x5103,/* 0xE0-0xE7 */ + 0x5130,0x50F8,0x5106,0x5107,0x50F6,0x50FE,0x510B,0x510C,/* 0xE8-0xEF */ + 0x50FD,0x510A,0x528B,0x528C,0x52F1,0x52EF,0x5648,0x5642,/* 0xF0-0xF7 */ + 0x564C,0x5635,0x5641,0x564A,0x5649,0x5646,0x5658,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x565A,0x5640,0x5633,0x563D,0x562C,0x563E,0x5638,0x562A,/* 0x40-0x47 */ + 0x563A,0x571A,0x58AB,0x589D,0x58B1,0x58A0,0x58A3,0x58AF,/* 0x48-0x4F */ + 0x58AC,0x58A5,0x58A1,0x58FF,0x5AFF,0x5AF4,0x5AFD,0x5AF7,/* 0x50-0x57 */ + 0x5AF6,0x5B03,0x5AF8,0x5B02,0x5AF9,0x5B01,0x5B07,0x5B05,/* 0x58-0x5F */ + 0x5B0F,0x5C67,0x5D99,0x5D97,0x5D9F,0x5D92,0x5DA2,0x5D93,/* 0x60-0x67 */ + 0x5D95,0x5DA0,0x5D9C,0x5DA1,0x5D9A,0x5D9E,0x5E69,0x5E5D,/* 0x68-0x6F */ + 0x5E60,0x5E5C,0x7DF3,0x5EDB,0x5EDE,0x5EE1,0x5F49,0x5FB2,/* 0x70-0x77 */ + 0x618B,0x6183,0x6179,0x61B1,0x61B0,0x61A2,0x6189,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x619B,0x6193,0x61AF,0x61AD,0x619F,0x6192,0x61AA,/* 0xA0-0xA7 */ + 0x61A1,0x618D,0x6166,0x61B3,0x622D,0x646E,0x6470,0x6496,/* 0xA8-0xAF */ + 0x64A0,0x6485,0x6497,0x649C,0x648F,0x648B,0x648A,0x648C,/* 0xB0-0xB7 */ + 0x64A3,0x649F,0x6468,0x64B1,0x6498,0x6576,0x657A,0x6579,/* 0xB8-0xBF */ + 0x657B,0x65B2,0x65B3,0x66B5,0x66B0,0x66A9,0x66B2,0x66B7,/* 0xC0-0xC7 */ + 0x66AA,0x66AF,0x6A00,0x6A06,0x6A17,0x69E5,0x69F8,0x6A15,/* 0xC8-0xCF */ + 0x69F1,0x69E4,0x6A20,0x69FF,0x69EC,0x69E2,0x6A1B,0x6A1D,/* 0xD0-0xD7 */ + 0x69FE,0x6A27,0x69F2,0x69EE,0x6A14,0x69F7,0x69E7,0x6A40,/* 0xD8-0xDF */ + 0x6A08,0x69E6,0x69FB,0x6A0D,0x69FC,0x69EB,0x6A09,0x6A04,/* 0xE0-0xE7 */ + 0x6A18,0x6A25,0x6A0F,0x69F6,0x6A26,0x6A07,0x69F4,0x6A16,/* 0xE8-0xEF */ + 0x6B51,0x6BA5,0x6BA3,0x6BA2,0x6BA6,0x6C01,0x6C00,0x6BFF,/* 0xF0-0xF7 */ + 0x6C02,0x6F41,0x6F26,0x6F7E,0x6F87,0x6FC6,0x6F92,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6F8D,0x6F89,0x6F8C,0x6F62,0x6F4F,0x6F85,0x6F5A,0x6F96,/* 0x40-0x47 */ + 0x6F76,0x6F6C,0x6F82,0x6F55,0x6F72,0x6F52,0x6F50,0x6F57,/* 0x48-0x4F */ + 0x6F94,0x6F93,0x6F5D,0x6F00,0x6F61,0x6F6B,0x6F7D,0x6F67,/* 0x50-0x57 */ + 0x6F90,0x6F53,0x6F8B,0x6F69,0x6F7F,0x6F95,0x6F63,0x6F77,/* 0x58-0x5F */ + 0x6F6A,0x6F7B,0x71B2,0x71AF,0x719B,0x71B0,0x71A0,0x719A,/* 0x60-0x67 */ + 0x71A9,0x71B5,0x719D,0x71A5,0x719E,0x71A4,0x71A1,0x71AA,/* 0x68-0x6F */ + 0x719C,0x71A7,0x71B3,0x7298,0x729A,0x7358,0x7352,0x735E,/* 0x70-0x77 */ + 0x735F,0x7360,0x735D,0x735B,0x7361,0x735A,0x7359,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7362,0x7487,0xF994,0x748A,0x7486,0x7481,0x747D,/* 0xA0-0xA7 */ + 0x7485,0x7488,0x747C,0x7479,0x7508,0x7507,0x757E,0x7625,/* 0xA8-0xAF */ + 0x761E,0x7619,0x761D,0x761C,0x7623,0x761A,0x7628,0x761B,/* 0xB0-0xB7 */ + 0x769C,0x769D,0x769E,0x769B,0x778D,0x778F,0x7789,0x7788,/* 0xB8-0xBF */ + 0x78CD,0x78BB,0x78CF,0x78CC,0x78D1,0x78CE,0x78D4,0x78C8,/* 0xC0-0xC7 */ + 0x78C3,0x78C4,0x78C9,0x799A,0x79A1,0x79A0,0x799C,0x79A2,/* 0xC8-0xCF */ + 0x799B,0x6B76,0x7A39,0x7AB2,0x7AB4,0x7AB3,0x7BB7,0x7BCB,/* 0xD0-0xD7 */ + 0x7BBE,0x7BAC,0x7BCE,0x7BAF,0x7BB9,0x7BCA,0x7BB5,0x7CC5,/* 0xD8-0xDF */ + 0x7CC8,0x7CCC,0x7CCB,0x7DF7,0x7DDB,0x7DEA,0x7DE7,0x7DD7,/* 0xE0-0xE7 */ + 0x7DE1,0x7E03,0x7DFA,0x7DE6,0x7DF6,0x7DF1,0x7DF0,0x7DEE,/* 0xE8-0xEF */ + 0x7DDF,0x7F76,0x7FAC,0x7FB0,0x7FAD,0x7FED,0x7FEB,0x7FEA,/* 0xF0-0xF7 */ + 0x7FEC,0x7FE6,0x7FE8,0x8064,0x8067,0x81A3,0x819F,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x819E,0x8195,0x81A2,0x8199,0x8197,0x8216,0x824F,0x8253,/* 0x40-0x47 */ + 0x8252,0x8250,0x824E,0x8251,0x8524,0x853B,0x850F,0x8500,/* 0x48-0x4F */ + 0x8529,0x850E,0x8509,0x850D,0x851F,0x850A,0x8527,0x851C,/* 0x50-0x57 */ + 0x84FB,0x852B,0x84FA,0x8508,0x850C,0x84F4,0x852A,0x84F2,/* 0x58-0x5F */ + 0x8515,0x84F7,0x84EB,0x84F3,0xF9C2,0x8512,0x84EA,0x84E9,/* 0x60-0x67 */ + 0x8516,0x84FE,0x8528,0x851D,0x852E,0x8502,0x84FD,0x851E,/* 0x68-0x6F */ + 0x84F6,0x8531,0x8526,0x84E7,0x84E8,0x84F0,0x84EF,0x84F9,/* 0x70-0x77 */ + 0x8518,0x8520,0x8530,0x850B,0x8519,0x852F,0x8662,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8756,0x8763,0x8764,0x8777,0x87E1,0x8773,0x8758,/* 0xA0-0xA7 */ + 0x8754,0x875B,0x8752,0x8761,0x875A,0x8751,0x875E,0x876D,/* 0xA8-0xAF */ + 0x876A,0x8750,0x874E,0x875F,0x875D,0x876F,0x876C,0x877A,/* 0xB0-0xB7 */ + 0x876E,0x875C,0x8765,0x874F,0x877B,0x8775,0x8762,0x8767,/* 0xB8-0xBF */ + 0x8769,0x885A,0x8905,0x890C,0x8914,0x890B,0x8917,0x8918,/* 0xC0-0xC7 */ + 0x8919,0x8906,0x8916,0x8911,0x890E,0x8909,0x89A2,0x89A4,/* 0xC8-0xCF */ + 0x89A3,0x89ED,0x89F0,0x89EC,0x8ACF,0x8AC6,0x8AB8,0x8AD3,/* 0xD0-0xD7 */ + 0x8AD1,0x8AD4,0x8AD5,0x8ABB,0x8AD7,0x8ABE,0x8AC0,0x8AC5,/* 0xD8-0xDF */ + 0x8AD8,0x8AC3,0x8ABA,0x8ABD,0x8AD9,0x8C3E,0x8C4D,0x8C8F,/* 0xE0-0xE7 */ + 0x8CE5,0x8CDF,0x8CD9,0x8CE8,0x8CDA,0x8CDD,0x8CE7,0x8DA0,/* 0xE8-0xEF */ + 0x8D9C,0x8DA1,0x8D9B,0x8E20,0x8E23,0x8E25,0x8E24,0x8E2E,/* 0xF0-0xF7 */ + 0x8E15,0x8E1B,0x8E16,0x8E11,0x8E19,0x8E26,0x8E27,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8E14,0x8E12,0x8E18,0x8E13,0x8E1C,0x8E17,0x8E1A,0x8F2C,/* 0x40-0x47 */ + 0x8F24,0x8F18,0x8F1A,0x8F20,0x8F23,0x8F16,0x8F17,0x9073,/* 0x48-0x4F */ + 0x9070,0x906F,0x9067,0x906B,0x912F,0x912B,0x9129,0x912A,/* 0x50-0x57 */ + 0x9132,0x9126,0x912E,0x9185,0x9186,0x918A,0x9181,0x9182,/* 0x58-0x5F */ + 0x9184,0x9180,0x92D0,0x92C3,0x92C4,0x92C0,0x92D9,0x92B6,/* 0x60-0x67 */ + 0x92CF,0x92F1,0x92DF,0x92D8,0x92E9,0x92D7,0x92DD,0x92CC,/* 0x68-0x6F */ + 0x92EF,0x92C2,0x92E8,0x92CA,0x92C8,0x92CE,0x92E6,0x92CD,/* 0x70-0x77 */ + 0x92D5,0x92C9,0x92E0,0x92DE,0x92E7,0x92D1,0x92D3,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x92B5,0x92E1,0x92C6,0x92B4,0x957C,0x95AC,0x95AB,/* 0xA0-0xA7 */ + 0x95AE,0x95B0,0x96A4,0x96A2,0x96D3,0x9705,0x9708,0x9702,/* 0xA8-0xAF */ + 0x975A,0x978A,0x978E,0x9788,0x97D0,0x97CF,0x981E,0x981D,/* 0xB0-0xB7 */ + 0x9826,0x9829,0x9828,0x9820,0x981B,0x9827,0x98B2,0x9908,/* 0xB8-0xBF */ + 0x98FA,0x9911,0x9914,0x9916,0x9917,0x9915,0x99DC,0x99CD,/* 0xC0-0xC7 */ + 0x99CF,0x99D3,0x99D4,0x99CE,0x99C9,0x99D6,0x99D8,0x99CB,/* 0xC8-0xCF */ + 0x99D7,0x99CC,0x9AB3,0x9AEC,0x9AEB,0x9AF3,0x9AF2,0x9AF1,/* 0xD0-0xD7 */ + 0x9B46,0x9B43,0x9B67,0x9B74,0x9B71,0x9B66,0x9B76,0x9B75,/* 0xD8-0xDF */ + 0x9B70,0x9B68,0x9B64,0x9B6C,0x9CFC,0x9CFA,0x9CFD,0x9CFF,/* 0xE0-0xE7 */ + 0x9CF7,0x9D07,0x9D00,0x9CF9,0x9CFB,0x9D08,0x9D05,0x9D04,/* 0xE8-0xEF */ + 0x9E83,0x9ED3,0x9F0F,0x9F10,0x511C,0x5113,0x5117,0x511A,/* 0xF0-0xF7 */ + 0x5111,0xFA15,0x5334,0x53E1,0x5670,0x5660,0x566E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_E9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5673,0x5666,0x5663,0x566D,0x5672,0x565E,0x5677,0x571C,/* 0x40-0x47 */ + 0x571B,0x58C8,0x58BD,0x58C9,0x58BF,0x58BA,0x58C2,0x58BC,/* 0x48-0x4F */ + 0x58C6,0x5B17,0x5B19,0x5B1B,0x5B21,0x5B14,0x5B13,0x5B10,/* 0x50-0x57 */ + 0x5B16,0x5B28,0x5B1A,0x5B20,0x5B1E,0x5BEF,0x5DAC,0x5DB1,/* 0x58-0x5F */ + 0x5DA9,0x5DA7,0x5DB5,0x5DB0,0x5DAE,0x5DAA,0x5DA8,0x5DB2,/* 0x60-0x67 */ + 0x5DAD,0x5DAF,0x5DB4,0x5E67,0x5E68,0x5E66,0x5E6F,0x5EE9,/* 0x68-0x6F */ + 0x5EE7,0x5EE6,0x5EE8,0x5EE5,0x5F4B,0x5FBC,0x619D,0x61A8,/* 0x70-0x77 */ + 0x6196,0x61C5,0x61B4,0x61C6,0x61C1,0x61CC,0x61BA,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x61BF,0x61B8,0x618C,0x64D7,0x64D6,0x64D0,0x64CF,/* 0xA0-0xA7 */ + 0x64C9,0x64BD,0x6489,0x64C3,0x64DB,0x64F3,0x64D9,0x6533,/* 0xA8-0xAF */ + 0x657F,0x657C,0x65A2,0x66C8,0x66BE,0x66C0,0x66CA,0x66CB,/* 0xB0-0xB7 */ + 0x66CF,0x66BD,0x66BB,0x66BA,0x66CC,0x6723,0x6A34,0x6A66,/* 0xB8-0xBF */ + 0x6A49,0x6A67,0x6A32,0x6A68,0x6A3E,0x6A5D,0x6A6D,0x6A76,/* 0xC0-0xC7 */ + 0x6A5B,0x6A51,0x6A28,0x6A5A,0x6A3B,0x6A3F,0x6A41,0x6A6A,/* 0xC8-0xCF */ + 0x6A64,0x6A50,0x6A4F,0x6A54,0x6A6F,0x6A69,0x6A60,0x6A3C,/* 0xD0-0xD7 */ + 0x6A5E,0x6A56,0x6A55,0x6A4D,0x6A4E,0x6A46,0x6B55,0x6B54,/* 0xD8-0xDF */ + 0x6B56,0x6BA7,0x6BAA,0x6BAB,0x6BC8,0x6BC7,0x6C04,0x6C03,/* 0xE0-0xE7 */ + 0x6C06,0x6FAD,0x6FCB,0x6FA3,0x6FC7,0x6FBC,0x6FCE,0x6FC8,/* 0xE8-0xEF */ + 0x6F5E,0x6FC4,0x6FBD,0x6F9E,0x6FCA,0x6FA8,0x7004,0x6FA5,/* 0xF0-0xF7 */ + 0x6FAE,0x6FBA,0x6FAC,0x6FAA,0x6FCF,0x6FBF,0x6FB8,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EA[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6FA2,0x6FC9,0x6FAB,0x6FCD,0x6FAF,0x6FB2,0x6FB0,0x71C5,/* 0x40-0x47 */ + 0x71C2,0x71BF,0x71B8,0x71D6,0x71C0,0x71C1,0x71CB,0x71D4,/* 0x48-0x4F */ + 0x71CA,0x71C7,0x71CF,0x71BD,0x71D8,0x71BC,0x71C6,0x71DA,/* 0x50-0x57 */ + 0x71DB,0x729D,0x729E,0x7369,0x7366,0x7367,0x736C,0x7365,/* 0x58-0x5F */ + 0x736B,0x736A,0x747F,0x749A,0x74A0,0x7494,0x7492,0x7495,/* 0x60-0x67 */ + 0x74A1,0x750B,0x7580,0x762F,0x762D,0x7631,0x763D,0x7633,/* 0x68-0x6F */ + 0x763C,0x7635,0x7632,0x7630,0x76BB,0x76E6,0x779A,0x779D,/* 0x70-0x77 */ + 0x77A1,0x779C,0x779B,0x77A2,0x77A3,0x7795,0x7799,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7797,0x78DD,0x78E9,0x78E5,0x78EA,0x78DE,0x78E3,/* 0xA0-0xA7 */ + 0x78DB,0x78E1,0x78E2,0x78ED,0x78DF,0x78E0,0x79A4,0x7A44,/* 0xA8-0xAF */ + 0x7A48,0x7A47,0x7AB6,0x7AB8,0x7AB5,0x7AB1,0x7AB7,0x7BDE,/* 0xB0-0xB7 */ + 0x7BE3,0x7BE7,0x7BDD,0x7BD5,0x7BE5,0x7BDA,0x7BE8,0x7BF9,/* 0xB8-0xBF */ + 0x7BD4,0x7BEA,0x7BE2,0x7BDC,0x7BEB,0x7BD8,0x7BDF,0x7CD2,/* 0xC0-0xC7 */ + 0x7CD4,0x7CD7,0x7CD0,0x7CD1,0x7E12,0x7E21,0x7E17,0x7E0C,/* 0xC8-0xCF */ + 0x7E1F,0x7E20,0x7E13,0x7E0E,0x7E1C,0x7E15,0x7E1A,0x7E22,/* 0xD0-0xD7 */ + 0x7E0B,0x7E0F,0x7E16,0x7E0D,0x7E14,0x7E25,0x7E24,0x7F43,/* 0xD8-0xDF */ + 0x7F7B,0x7F7C,0x7F7A,0x7FB1,0x7FEF,0x802A,0x8029,0x806C,/* 0xE0-0xE7 */ + 0x81B1,0x81A6,0x81AE,0x81B9,0x81B5,0x81AB,0x81B0,0x81AC,/* 0xE8-0xEF */ + 0x81B4,0x81B2,0x81B7,0x81A7,0x81F2,0x8255,0x8256,0x8257,/* 0xF0-0xF7 */ + 0x8556,0x8545,0x856B,0x854D,0x8553,0x8561,0x8558,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EB[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8540,0x8546,0x8564,0x8541,0x8562,0x8544,0x8551,0x8547,/* 0x40-0x47 */ + 0x8563,0x853E,0x855B,0x8571,0x854E,0x856E,0x8575,0x8555,/* 0x48-0x4F */ + 0x8567,0x8560,0x858C,0x8566,0x855D,0x8554,0x8565,0x856C,/* 0x50-0x57 */ + 0x8663,0x8665,0x8664,0x879B,0x878F,0x8797,0x8793,0x8792,/* 0x58-0x5F */ + 0x8788,0x8781,0x8796,0x8798,0x8779,0x8787,0x87A3,0x8785,/* 0x60-0x67 */ + 0x8790,0x8791,0x879D,0x8784,0x8794,0x879C,0x879A,0x8789,/* 0x68-0x6F */ + 0x891E,0x8926,0x8930,0x892D,0x892E,0x8927,0x8931,0x8922,/* 0x70-0x77 */ + 0x8929,0x8923,0x892F,0x892C,0x891F,0x89F1,0x8AE0,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8AE2,0x8AF2,0x8AF4,0x8AF5,0x8ADD,0x8B14,0x8AE4,/* 0xA0-0xA7 */ + 0x8ADF,0x8AF0,0x8AC8,0x8ADE,0x8AE1,0x8AE8,0x8AFF,0x8AEF,/* 0xA8-0xAF */ + 0x8AFB,0x8C91,0x8C92,0x8C90,0x8CF5,0x8CEE,0x8CF1,0x8CF0,/* 0xB0-0xB7 */ + 0x8CF3,0x8D6C,0x8D6E,0x8DA5,0x8DA7,0x8E33,0x8E3E,0x8E38,/* 0xB8-0xBF */ + 0x8E40,0x8E45,0x8E36,0x8E3C,0x8E3D,0x8E41,0x8E30,0x8E3F,/* 0xC0-0xC7 */ + 0x8EBD,0x8F36,0x8F2E,0x8F35,0x8F32,0x8F39,0x8F37,0x8F34,/* 0xC8-0xCF */ + 0x9076,0x9079,0x907B,0x9086,0x90FA,0x9133,0x9135,0x9136,/* 0xD0-0xD7 */ + 0x9193,0x9190,0x9191,0x918D,0x918F,0x9327,0x931E,0x9308,/* 0xD8-0xDF */ + 0x931F,0x9306,0x930F,0x937A,0x9338,0x933C,0x931B,0x9323,/* 0xE0-0xE7 */ + 0x9312,0x9301,0x9346,0x932D,0x930E,0x930D,0x92CB,0x931D,/* 0xE8-0xEF */ + 0x92FA,0x9325,0x9313,0x92F9,0x92F7,0x9334,0x9302,0x9324,/* 0xF0-0xF7 */ + 0x92FF,0x9329,0x9339,0x9335,0x932A,0x9314,0x930C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EC[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x930B,0x92FE,0x9309,0x9300,0x92FB,0x9316,0x95BC,0x95CD,/* 0x40-0x47 */ + 0x95BE,0x95B9,0x95BA,0x95B6,0x95BF,0x95B5,0x95BD,0x96A9,/* 0x48-0x4F */ + 0x96D4,0x970B,0x9712,0x9710,0x9799,0x9797,0x9794,0x97F0,/* 0x50-0x57 */ + 0x97F8,0x9835,0x982F,0x9832,0x9924,0x991F,0x9927,0x9929,/* 0x58-0x5F */ + 0x999E,0x99EE,0x99EC,0x99E5,0x99E4,0x99F0,0x99E3,0x99EA,/* 0x60-0x67 */ + 0x99E9,0x99E7,0x9AB9,0x9ABF,0x9AB4,0x9ABB,0x9AF6,0x9AFA,/* 0x68-0x6F */ + 0x9AF9,0x9AF7,0x9B33,0x9B80,0x9B85,0x9B87,0x9B7C,0x9B7E,/* 0x70-0x77 */ + 0x9B7B,0x9B82,0x9B93,0x9B92,0x9B90,0x9B7A,0x9B95,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9B7D,0x9B88,0x9D25,0x9D17,0x9D20,0x9D1E,0x9D14,/* 0xA0-0xA7 */ + 0x9D29,0x9D1D,0x9D18,0x9D22,0x9D10,0x9D19,0x9D1F,0x9E88,/* 0xA8-0xAF */ + 0x9E86,0x9E87,0x9EAE,0x9EAD,0x9ED5,0x9ED6,0x9EFA,0x9F12,/* 0xB0-0xB7 */ + 0x9F3D,0x5126,0x5125,0x5122,0x5124,0x5120,0x5129,0x52F4,/* 0xB8-0xBF */ + 0x5693,0x568C,0x568D,0x5686,0x5684,0x5683,0x567E,0x5682,/* 0xC0-0xC7 */ + 0x567F,0x5681,0x58D6,0x58D4,0x58CF,0x58D2,0x5B2D,0x5B25,/* 0xC8-0xCF */ + 0x5B32,0x5B23,0x5B2C,0x5B27,0x5B26,0x5B2F,0x5B2E,0x5B7B,/* 0xD0-0xD7 */ + 0x5BF1,0x5BF2,0x5DB7,0x5E6C,0x5E6A,0x5FBE,0x5FBB,0x61C3,/* 0xD8-0xDF */ + 0x61B5,0x61BC,0x61E7,0x61E0,0x61E5,0x61E4,0x61E8,0x61DE,/* 0xE0-0xE7 */ + 0x64EF,0x64E9,0x64E3,0x64EB,0x64E4,0x64E8,0x6581,0x6580,/* 0xE8-0xEF */ + 0x65B6,0x65DA,0x66D2,0x6A8D,0x6A96,0x6A81,0x6AA5,0x6A89,/* 0xF0-0xF7 */ + 0x6A9F,0x6A9B,0x6AA1,0x6A9E,0x6A87,0x6A93,0x6A8E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_ED[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x6A95,0x6A83,0x6AA8,0x6AA4,0x6A91,0x6A7F,0x6AA6,0x6A9A,/* 0x40-0x47 */ + 0x6A85,0x6A8C,0x6A92,0x6B5B,0x6BAD,0x6C09,0x6FCC,0x6FA9,/* 0x48-0x4F */ + 0x6FF4,0x6FD4,0x6FE3,0x6FDC,0x6FED,0x6FE7,0x6FE6,0x6FDE,/* 0x50-0x57 */ + 0x6FF2,0x6FDD,0x6FE2,0x6FE8,0x71E1,0x71F1,0x71E8,0x71F2,/* 0x58-0x5F */ + 0x71E4,0x71F0,0x71E2,0x7373,0x736E,0x736F,0x7497,0x74B2,/* 0x60-0x67 */ + 0x74AB,0x7490,0x74AA,0x74AD,0x74B1,0x74A5,0x74AF,0x7510,/* 0x68-0x6F */ + 0x7511,0x7512,0x750F,0x7584,0x7643,0x7648,0x7649,0x7647,/* 0x70-0x77 */ + 0x76A4,0x76E9,0x77B5,0x77AB,0x77B2,0x77B7,0x77B6,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x77B4,0x77B1,0x77A8,0x77F0,0x78F3,0x78FD,0x7902,/* 0xA0-0xA7 */ + 0xF964,0x78FC,0x78F2,0x7905,0x78F9,0x78FE,0x7904,0x79AB,/* 0xA8-0xAF */ + 0x79A8,0x7A5C,0x7A5B,0x7A56,0x7A58,0x7A54,0x7A5A,0x7ABE,/* 0xB0-0xB7 */ + 0x7AC0,0x7AC1,0x7C05,0x7C0F,0x7BF2,0x7C00,0x7BFF,0x7BFB,/* 0xB8-0xBF */ + 0x7C0E,0x7BF4,0x7C0B,0x7BF3,0x7C02,0x7C09,0x7C03,0x7C01,/* 0xC0-0xC7 */ + 0x7BF8,0x7BFD,0x7C06,0x7BF0,0x7BF1,0x7C10,0x7C0A,0x7CE8,/* 0xC8-0xCF */ + 0x7E2D,0x7E3C,0x7E42,0x7E33,0x9848,0x7E38,0x7E2A,0x7E49,/* 0xD0-0xD7 */ + 0x7E40,0x7E47,0x7E29,0x7E4C,0x7E30,0x7E3B,0x7E36,0x7E44,/* 0xD8-0xDF */ + 0x7E3A,0x7F45,0x7F7F,0x7F7E,0x7F7D,0x7FF4,0x7FF2,0x802C,/* 0xE0-0xE7 */ + 0x81BB,0x81C4,0x81CC,0x81CA,0x81C5,0x81C7,0x81BC,0x81E9,/* 0xE8-0xEF */ + 0x825B,0x825A,0x825C,0x8583,0x8580,0x858F,0x85A7,0x8595,/* 0xF0-0xF7 */ + 0x85A0,0x858B,0x85A3,0x857B,0x85A4,0x859A,0x859E,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EE[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8577,0x857C,0x8589,0x85A1,0x857A,0x8578,0x8557,0x858E,/* 0x40-0x47 */ + 0x8596,0x8586,0x858D,0x8599,0x859D,0x8581,0x85A2,0x8582,/* 0x48-0x4F */ + 0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859F,0x8668,/* 0x50-0x57 */ + 0x87BE,0x87AA,0x87AD,0x87C5,0x87B0,0x87AC,0x87B9,0x87B5,/* 0x58-0x5F */ + 0x87BC,0x87AE,0x87C9,0x87C3,0x87C2,0x87CC,0x87B7,0x87AF,/* 0x60-0x67 */ + 0x87C4,0x87CA,0x87B4,0x87B6,0x87BF,0x87B8,0x87BD,0x87DE,/* 0x68-0x6F */ + 0x87B2,0x8935,0x8933,0x893C,0x893E,0x8941,0x8952,0x8937,/* 0x70-0x77 */ + 0x8942,0x89AD,0x89AF,0x89AE,0x89F2,0x89F3,0x8B1E,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x8B18,0x8B16,0x8B11,0x8B05,0x8B0B,0x8B22,0x8B0F,/* 0xA0-0xA7 */ + 0x8B12,0x8B15,0x8B07,0x8B0D,0x8B08,0x8B06,0x8B1C,0x8B13,/* 0xA8-0xAF */ + 0x8B1A,0x8C4F,0x8C70,0x8C72,0x8C71,0x8C6F,0x8C95,0x8C94,/* 0xB0-0xB7 */ + 0x8CF9,0x8D6F,0x8E4E,0x8E4D,0x8E53,0x8E50,0x8E4C,0x8E47,/* 0xB8-0xBF */ + 0x8F43,0x8F40,0x9085,0x907E,0x9138,0x919A,0x91A2,0x919B,/* 0xC0-0xC7 */ + 0x9199,0x919F,0x91A1,0x919D,0x91A0,0x93A1,0x9383,0x93AF,/* 0xC8-0xCF */ + 0x9364,0x9356,0x9347,0x937C,0x9358,0x935C,0x9376,0x9349,/* 0xD0-0xD7 */ + 0x9350,0x9351,0x9360,0x936D,0x938F,0x934C,0x936A,0x9379,/* 0xD8-0xDF */ + 0x9357,0x9355,0x9352,0x934F,0x9371,0x9377,0x937B,0x9361,/* 0xE0-0xE7 */ + 0x935E,0x9363,0x9367,0x9380,0x934E,0x9359,0x95C7,0x95C0,/* 0xE8-0xEF */ + 0x95C9,0x95C3,0x95C5,0x95B7,0x96AE,0x96B0,0x96AC,0x9720,/* 0xF0-0xF7 */ + 0x971F,0x9718,0x971D,0x9719,0x979A,0x97A1,0x979C,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_EF[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x979E,0x979D,0x97D5,0x97D4,0x97F1,0x9841,0x9844,0x984A,/* 0x40-0x47 */ + 0x9849,0x9845,0x9843,0x9925,0x992B,0x992C,0x992A,0x9933,/* 0x48-0x4F */ + 0x9932,0x992F,0x992D,0x9931,0x9930,0x9998,0x99A3,0x99A1,/* 0x50-0x57 */ + 0x9A02,0x99FA,0x99F4,0x99F7,0x99F9,0x99F8,0x99F6,0x99FB,/* 0x58-0x5F */ + 0x99FD,0x99FE,0x99FC,0x9A03,0x9ABE,0x9AFE,0x9AFD,0x9B01,/* 0x60-0x67 */ + 0x9AFC,0x9B48,0x9B9A,0x9BA8,0x9B9E,0x9B9B,0x9BA6,0x9BA1,/* 0x68-0x6F */ + 0x9BA5,0x9BA4,0x9B86,0x9BA2,0x9BA0,0x9BAF,0x9D33,0x9D41,/* 0x70-0x77 */ + 0x9D67,0x9D36,0x9D2E,0x9D2F,0x9D31,0x9D38,0x9D30,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9D45,0x9D42,0x9D43,0x9D3E,0x9D37,0x9D40,0x9D3D,/* 0xA0-0xA7 */ + 0x7FF5,0x9D2D,0x9E8A,0x9E89,0x9E8D,0x9EB0,0x9EC8,0x9EDA,/* 0xA8-0xAF */ + 0x9EFB,0x9EFF,0x9F24,0x9F23,0x9F22,0x9F54,0x9FA0,0x5131,/* 0xB0-0xB7 */ + 0x512D,0x512E,0x5698,0x569C,0x5697,0x569A,0x569D,0x5699,/* 0xB8-0xBF */ + 0x5970,0x5B3C,0x5C69,0x5C6A,0x5DC0,0x5E6D,0x5E6E,0x61D8,/* 0xC0-0xC7 */ + 0x61DF,0x61ED,0x61EE,0x61F1,0x61EA,0x61F0,0x61EB,0x61D6,/* 0xC8-0xCF */ + 0x61E9,0x64FF,0x6504,0x64FD,0x64F8,0x6501,0x6503,0x64FC,/* 0xD0-0xD7 */ + 0x6594,0x65DB,0x66DA,0x66DB,0x66D8,0x6AC5,0x6AB9,0x6ABD,/* 0xD8-0xDF */ + 0x6AE1,0x6AC6,0x6ABA,0x6AB6,0x6AB7,0x6AC7,0x6AB4,0x6AAD,/* 0xE0-0xE7 */ + 0x6B5E,0x6BC9,0x6C0B,0x7007,0x700C,0x700D,0x7001,0x7005,/* 0xE8-0xEF */ + 0x7014,0x700E,0x6FFF,0x7000,0x6FFB,0x7026,0x6FFC,0x6FF7,/* 0xF0-0xF7 */ + 0x700A,0x7201,0x71FF,0x71F9,0x7203,0x71FD,0x7376,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F0[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x74B8,0x74C0,0x74B5,0x74C1,0x74BE,0x74B6,0x74BB,0x74C2,/* 0x40-0x47 */ + 0x7514,0x7513,0x765C,0x7664,0x7659,0x7650,0x7653,0x7657,/* 0x48-0x4F */ + 0x765A,0x76A6,0x76BD,0x76EC,0x77C2,0x77BA,0x78FF,0x790C,/* 0x50-0x57 */ + 0x7913,0x7914,0x7909,0x7910,0x7912,0x7911,0x79AD,0x79AC,/* 0x58-0x5F */ + 0x7A5F,0x7C1C,0x7C29,0x7C19,0x7C20,0x7C1F,0x7C2D,0x7C1D,/* 0x60-0x67 */ + 0x7C26,0x7C28,0x7C22,0x7C25,0x7C30,0x7E5C,0x7E50,0x7E56,/* 0x68-0x6F */ + 0x7E63,0x7E58,0x7E62,0x7E5F,0x7E51,0x7E60,0x7E57,0x7E53,/* 0x70-0x77 */ + 0x7FB5,0x7FB3,0x7FF7,0x7FF8,0x8075,0x81D1,0x81D2,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x81D0,0x825F,0x825E,0x85B4,0x85C6,0x85C0,0x85C3,/* 0xA0-0xA7 */ + 0x85C2,0x85B3,0x85B5,0x85BD,0x85C7,0x85C4,0x85BF,0x85CB,/* 0xA8-0xAF */ + 0x85CE,0x85C8,0x85C5,0x85B1,0x85B6,0x85D2,0x8624,0x85B8,/* 0xB0-0xB7 */ + 0x85B7,0x85BE,0x8669,0x87E7,0x87E6,0x87E2,0x87DB,0x87EB,/* 0xB8-0xBF */ + 0x87EA,0x87E5,0x87DF,0x87F3,0x87E4,0x87D4,0x87DC,0x87D3,/* 0xC0-0xC7 */ + 0x87ED,0x87D8,0x87E3,0x87A4,0x87D7,0x87D9,0x8801,0x87F4,/* 0xC8-0xCF */ + 0x87E8,0x87DD,0x8953,0x894B,0x894F,0x894C,0x8946,0x8950,/* 0xD0-0xD7 */ + 0x8951,0x8949,0x8B2A,0x8B27,0x8B23,0x8B33,0x8B30,0x8B35,/* 0xD8-0xDF */ + 0x8B47,0x8B2F,0x8B3C,0x8B3E,0x8B31,0x8B25,0x8B37,0x8B26,/* 0xE0-0xE7 */ + 0x8B36,0x8B2E,0x8B24,0x8B3B,0x8B3D,0x8B3A,0x8C42,0x8C75,/* 0xE8-0xEF */ + 0x8C99,0x8C98,0x8C97,0x8CFE,0x8D04,0x8D02,0x8D00,0x8E5C,/* 0xF0-0xF7 */ + 0x8E62,0x8E60,0x8E57,0x8E56,0x8E5E,0x8E65,0x8E67,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F1[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8E5B,0x8E5A,0x8E61,0x8E5D,0x8E69,0x8E54,0x8F46,0x8F47,/* 0x40-0x47 */ + 0x8F48,0x8F4B,0x9128,0x913A,0x913B,0x913E,0x91A8,0x91A5,/* 0x48-0x4F */ + 0x91A7,0x91AF,0x91AA,0x93B5,0x938C,0x9392,0x93B7,0x939B,/* 0x50-0x57 */ + 0x939D,0x9389,0x93A7,0x938E,0x93AA,0x939E,0x93A6,0x9395,/* 0x58-0x5F */ + 0x9388,0x9399,0x939F,0x938D,0x93B1,0x9391,0x93B2,0x93A4,/* 0x60-0x67 */ + 0x93A8,0x93B4,0x93A3,0x93A5,0x95D2,0x95D3,0x95D1,0x96B3,/* 0x68-0x6F */ + 0x96D7,0x96DA,0x5DC2,0x96DF,0x96D8,0x96DD,0x9723,0x9722,/* 0x70-0x77 */ + 0x9725,0x97AC,0x97AE,0x97A8,0x97AB,0x97A4,0x97AA,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x97A2,0x97A5,0x97D7,0x97D9,0x97D6,0x97D8,0x97FA,/* 0xA0-0xA7 */ + 0x9850,0x9851,0x9852,0x98B8,0x9941,0x993C,0x993A,0x9A0F,/* 0xA8-0xAF */ + 0x9A0B,0x9A09,0x9A0D,0x9A04,0x9A11,0x9A0A,0x9A05,0x9A07,/* 0xB0-0xB7 */ + 0x9A06,0x9AC0,0x9ADC,0x9B08,0x9B04,0x9B05,0x9B29,0x9B35,/* 0xB8-0xBF */ + 0x9B4A,0x9B4C,0x9B4B,0x9BC7,0x9BC6,0x9BC3,0x9BBF,0x9BC1,/* 0xC0-0xC7 */ + 0x9BB5,0x9BB8,0x9BD3,0x9BB6,0x9BC4,0x9BB9,0x9BBD,0x9D5C,/* 0xC8-0xCF */ + 0x9D53,0x9D4F,0x9D4A,0x9D5B,0x9D4B,0x9D59,0x9D56,0x9D4C,/* 0xD0-0xD7 */ + 0x9D57,0x9D52,0x9D54,0x9D5F,0x9D58,0x9D5A,0x9E8E,0x9E8C,/* 0xD8-0xDF */ + 0x9EDF,0x9F01,0x9F00,0x9F16,0x9F25,0x9F2B,0x9F2A,0x9F29,/* 0xE0-0xE7 */ + 0x9F28,0x9F4C,0x9F55,0x5134,0x5135,0x5296,0x52F7,0x53B4,/* 0xE8-0xEF */ + 0x56AB,0x56AD,0x56A6,0x56A7,0x56AA,0x56AC,0x58DA,0x58DD,/* 0xF0-0xF7 */ + 0x58DB,0x5912,0x5B3D,0x5B3E,0x5B3F,0x5DC3,0x5E70,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F2[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x5FBF,0x61FB,0x6507,0x6510,0x650D,0x6509,0x650C,0x650E,/* 0x40-0x47 */ + 0x6584,0x65DE,0x65DD,0x66DE,0x6AE7,0x6AE0,0x6ACC,0x6AD1,/* 0x48-0x4F */ + 0x6AD9,0x6ACB,0x6ADF,0x6ADC,0x6AD0,0x6AEB,0x6ACF,0x6ACD,/* 0x50-0x57 */ + 0x6ADE,0x6B60,0x6BB0,0x6C0C,0x7019,0x7027,0x7020,0x7016,/* 0x58-0x5F */ + 0x702B,0x7021,0x7022,0x7023,0x7029,0x7017,0x7024,0x701C,/* 0x60-0x67 */ + 0x702A,0x720C,0x720A,0x7207,0x7202,0x7205,0x72A5,0x72A6,/* 0x68-0x6F */ + 0x72A4,0x72A3,0x72A1,0x74CB,0x74C5,0x74B7,0x74C3,0x7516,/* 0x70-0x77 */ + 0x7660,0x77C9,0x77CA,0x77C4,0x77F1,0x791D,0x791B,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x7921,0x791C,0x7917,0x791E,0x79B0,0x7A67,0x7A68,/* 0xA0-0xA7 */ + 0x7C33,0x7C3C,0x7C39,0x7C2C,0x7C3B,0x7CEC,0x7CEA,0x7E76,/* 0xA8-0xAF */ + 0x7E75,0x7E78,0x7E70,0x7E77,0x7E6F,0x7E7A,0x7E72,0x7E74,/* 0xB0-0xB7 */ + 0x7E68,0x7F4B,0x7F4A,0x7F83,0x7F86,0x7FB7,0x7FFD,0x7FFE,/* 0xB8-0xBF */ + 0x8078,0x81D7,0x81D5,0x8264,0x8261,0x8263,0x85EB,0x85F1,/* 0xC0-0xC7 */ + 0x85ED,0x85D9,0x85E1,0x85E8,0x85DA,0x85D7,0x85EC,0x85F2,/* 0xC8-0xCF */ + 0x85F8,0x85D8,0x85DF,0x85E3,0x85DC,0x85D1,0x85F0,0x85E6,/* 0xD0-0xD7 */ + 0x85EF,0x85DE,0x85E2,0x8800,0x87FA,0x8803,0x87F6,0x87F7,/* 0xD8-0xDF */ + 0x8809,0x880C,0x880B,0x8806,0x87FC,0x8808,0x87FF,0x880A,/* 0xE0-0xE7 */ + 0x8802,0x8962,0x895A,0x895B,0x8957,0x8961,0x895C,0x8958,/* 0xE8-0xEF */ + 0x895D,0x8959,0x8988,0x89B7,0x89B6,0x89F6,0x8B50,0x8B48,/* 0xF0-0xF7 */ + 0x8B4A,0x8B40,0x8B53,0x8B56,0x8B54,0x8B4B,0x8B55,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F3[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8B51,0x8B42,0x8B52,0x8B57,0x8C43,0x8C77,0x8C76,0x8C9A,/* 0x40-0x47 */ + 0x8D06,0x8D07,0x8D09,0x8DAC,0x8DAA,0x8DAD,0x8DAB,0x8E6D,/* 0x48-0x4F */ + 0x8E78,0x8E73,0x8E6A,0x8E6F,0x8E7B,0x8EC2,0x8F52,0x8F51,/* 0x50-0x57 */ + 0x8F4F,0x8F50,0x8F53,0x8FB4,0x9140,0x913F,0x91B0,0x91AD,/* 0x58-0x5F */ + 0x93DE,0x93C7,0x93CF,0x93C2,0x93DA,0x93D0,0x93F9,0x93EC,/* 0x60-0x67 */ + 0x93CC,0x93D9,0x93A9,0x93E6,0x93CA,0x93D4,0x93EE,0x93E3,/* 0x68-0x6F */ + 0x93D5,0x93C4,0x93CE,0x93C0,0x93D2,0x93E7,0x957D,0x95DA,/* 0x70-0x77 */ + 0x95DB,0x96E1,0x9729,0x972B,0x972C,0x9728,0x9726,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x97B3,0x97B7,0x97B6,0x97DD,0x97DE,0x97DF,0x985C,/* 0xA0-0xA7 */ + 0x9859,0x985D,0x9857,0x98BF,0x98BD,0x98BB,0x98BE,0x9948,/* 0xA8-0xAF */ + 0x9947,0x9943,0x99A6,0x99A7,0x9A1A,0x9A15,0x9A25,0x9A1D,/* 0xB0-0xB7 */ + 0x9A24,0x9A1B,0x9A22,0x9A20,0x9A27,0x9A23,0x9A1E,0x9A1C,/* 0xB8-0xBF */ + 0x9A14,0x9AC2,0x9B0B,0x9B0A,0x9B0E,0x9B0C,0x9B37,0x9BEA,/* 0xC0-0xC7 */ + 0x9BEB,0x9BE0,0x9BDE,0x9BE4,0x9BE6,0x9BE2,0x9BF0,0x9BD4,/* 0xC8-0xCF */ + 0x9BD7,0x9BEC,0x9BDC,0x9BD9,0x9BE5,0x9BD5,0x9BE1,0x9BDA,/* 0xD0-0xD7 */ + 0x9D77,0x9D81,0x9D8A,0x9D84,0x9D88,0x9D71,0x9D80,0x9D78,/* 0xD8-0xDF */ + 0x9D86,0x9D8B,0x9D8C,0x9D7D,0x9D6B,0x9D74,0x9D75,0x9D70,/* 0xE0-0xE7 */ + 0x9D69,0x9D85,0x9D73,0x9D7B,0x9D82,0x9D6F,0x9D79,0x9D7F,/* 0xE8-0xEF */ + 0x9D87,0x9D68,0x9E94,0x9E91,0x9EC0,0x9EFC,0x9F2D,0x9F40,/* 0xF0-0xF7 */ + 0x9F41,0x9F4D,0x9F56,0x9F57,0x9F58,0x5337,0x56B2,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F4[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x56B5,0x56B3,0x58E3,0x5B45,0x5DC6,0x5DC7,0x5EEE,0x5EEF,/* 0x40-0x47 */ + 0x5FC0,0x5FC1,0x61F9,0x6517,0x6516,0x6515,0x6513,0x65DF,/* 0x48-0x4F */ + 0x66E8,0x66E3,0x66E4,0x6AF3,0x6AF0,0x6AEA,0x6AE8,0x6AF9,/* 0x50-0x57 */ + 0x6AF1,0x6AEE,0x6AEF,0x703C,0x7035,0x702F,0x7037,0x7034,/* 0x58-0x5F */ + 0x7031,0x7042,0x7038,0x703F,0x703A,0x7039,0x7040,0x703B,/* 0x60-0x67 */ + 0x7033,0x7041,0x7213,0x7214,0x72A8,0x737D,0x737C,0x74BA,/* 0x68-0x6F */ + 0x76AB,0x76AA,0x76BE,0x76ED,0x77CC,0x77CE,0x77CF,0x77CD,/* 0x70-0x77 */ + 0x77F2,0x7925,0x7923,0x7927,0x7928,0x7924,0x7929,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x79B2,0x7A6E,0x7A6C,0x7A6D,0x7AF7,0x7C49,0x7C48,/* 0xA0-0xA7 */ + 0x7C4A,0x7C47,0x7C45,0x7CEE,0x7E7B,0x7E7E,0x7E81,0x7E80,/* 0xA8-0xAF */ + 0x7FBA,0x7FFF,0x8079,0x81DB,0x81D9,0x820B,0x8268,0x8269,/* 0xB0-0xB7 */ + 0x8622,0x85FF,0x8601,0x85FE,0x861B,0x8600,0x85F6,0x8604,/* 0xB8-0xBF */ + 0x8609,0x8605,0x860C,0x85FD,0x8819,0x8810,0x8811,0x8817,/* 0xC0-0xC7 */ + 0x8813,0x8816,0x8963,0x8966,0x89B9,0x89F7,0x8B60,0x8B6A,/* 0xC8-0xCF */ + 0x8B5D,0x8B68,0x8B63,0x8B65,0x8B67,0x8B6D,0x8DAE,0x8E86,/* 0xD0-0xD7 */ + 0x8E88,0x8E84,0x8F59,0x8F56,0x8F57,0x8F55,0x8F58,0x8F5A,/* 0xD8-0xDF */ + 0x908D,0x9143,0x9141,0x91B7,0x91B5,0x91B2,0x91B3,0x940B,/* 0xE0-0xE7 */ + 0x9413,0x93FB,0x9420,0x940F,0x9414,0x93FE,0x9415,0x9410,/* 0xE8-0xEF */ + 0x9428,0x9419,0x940D,0x93F5,0x9400,0x93F7,0x9407,0x940E,/* 0xF0-0xF7 */ + 0x9416,0x9412,0x93FA,0x9409,0x93F8,0x940A,0x93FF,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F5[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x93FC,0x940C,0x93F6,0x9411,0x9406,0x95DE,0x95E0,0x95DF,/* 0x40-0x47 */ + 0x972E,0x972F,0x97B9,0x97BB,0x97FD,0x97FE,0x9860,0x9862,/* 0x48-0x4F */ + 0x9863,0x985F,0x98C1,0x98C2,0x9950,0x994E,0x9959,0x994C,/* 0x50-0x57 */ + 0x994B,0x9953,0x9A32,0x9A34,0x9A31,0x9A2C,0x9A2A,0x9A36,/* 0x58-0x5F */ + 0x9A29,0x9A2E,0x9A38,0x9A2D,0x9AC7,0x9ACA,0x9AC6,0x9B10,/* 0x60-0x67 */ + 0x9B12,0x9B11,0x9C0B,0x9C08,0x9BF7,0x9C05,0x9C12,0x9BF8,/* 0x68-0x6F */ + 0x9C40,0x9C07,0x9C0E,0x9C06,0x9C17,0x9C14,0x9C09,0x9D9F,/* 0x70-0x77 */ + 0x9D99,0x9DA4,0x9D9D,0x9D92,0x9D98,0x9D90,0x9D9B,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9DA0,0x9D94,0x9D9C,0x9DAA,0x9D97,0x9DA1,0x9D9A,/* 0xA0-0xA7 */ + 0x9DA2,0x9DA8,0x9D9E,0x9DA3,0x9DBF,0x9DA9,0x9D96,0x9DA6,/* 0xA8-0xAF */ + 0x9DA7,0x9E99,0x9E9B,0x9E9A,0x9EE5,0x9EE4,0x9EE7,0x9EE6,/* 0xB0-0xB7 */ + 0x9F30,0x9F2E,0x9F5B,0x9F60,0x9F5E,0x9F5D,0x9F59,0x9F91,/* 0xB8-0xBF */ + 0x513A,0x5139,0x5298,0x5297,0x56C3,0x56BD,0x56BE,0x5B48,/* 0xC0-0xC7 */ + 0x5B47,0x5DCB,0x5DCF,0x5EF1,0x61FD,0x651B,0x6B02,0x6AFC,/* 0xC8-0xCF */ + 0x6B03,0x6AF8,0x6B00,0x7043,0x7044,0x704A,0x7048,0x7049,/* 0xD0-0xD7 */ + 0x7045,0x7046,0x721D,0x721A,0x7219,0x737E,0x7517,0x766A,/* 0xD8-0xDF */ + 0x77D0,0x792D,0x7931,0x792F,0x7C54,0x7C53,0x7CF2,0x7E8A,/* 0xE0-0xE7 */ + 0x7E87,0x7E88,0x7E8B,0x7E86,0x7E8D,0x7F4D,0x7FBB,0x8030,/* 0xE8-0xEF */ + 0x81DD,0x8618,0x862A,0x8626,0x861F,0x8623,0x861C,0x8619,/* 0xF0-0xF7 */ + 0x8627,0x862E,0x8621,0x8620,0x8629,0x861E,0x8625,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F6[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8829,0x881D,0x881B,0x8820,0x8824,0x881C,0x882B,0x884A,/* 0x40-0x47 */ + 0x896D,0x8969,0x896E,0x896B,0x89FA,0x8B79,0x8B78,0x8B45,/* 0x48-0x4F */ + 0x8B7A,0x8B7B,0x8D10,0x8D14,0x8DAF,0x8E8E,0x8E8C,0x8F5E,/* 0x50-0x57 */ + 0x8F5B,0x8F5D,0x9146,0x9144,0x9145,0x91B9,0x943F,0x943B,/* 0x58-0x5F */ + 0x9436,0x9429,0x943D,0x943C,0x9430,0x9439,0x942A,0x9437,/* 0x60-0x67 */ + 0x942C,0x9440,0x9431,0x95E5,0x95E4,0x95E3,0x9735,0x973A,/* 0x68-0x6F */ + 0x97BF,0x97E1,0x9864,0x98C9,0x98C6,0x98C0,0x9958,0x9956,/* 0x70-0x77 */ + 0x9A39,0x9A3D,0x9A46,0x9A44,0x9A42,0x9A41,0x9A3A,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9A3F,0x9ACD,0x9B15,0x9B17,0x9B18,0x9B16,0x9B3A,/* 0xA0-0xA7 */ + 0x9B52,0x9C2B,0x9C1D,0x9C1C,0x9C2C,0x9C23,0x9C28,0x9C29,/* 0xA8-0xAF */ + 0x9C24,0x9C21,0x9DB7,0x9DB6,0x9DBC,0x9DC1,0x9DC7,0x9DCA,/* 0xB0-0xB7 */ + 0x9DCF,0x9DBE,0x9DC5,0x9DC3,0x9DBB,0x9DB5,0x9DCE,0x9DB9,/* 0xB8-0xBF */ + 0x9DBA,0x9DAC,0x9DC8,0x9DB1,0x9DAD,0x9DCC,0x9DB3,0x9DCD,/* 0xC0-0xC7 */ + 0x9DB2,0x9E7A,0x9E9C,0x9EEB,0x9EEE,0x9EED,0x9F1B,0x9F18,/* 0xC8-0xCF */ + 0x9F1A,0x9F31,0x9F4E,0x9F65,0x9F64,0x9F92,0x4EB9,0x56C6,/* 0xD0-0xD7 */ + 0x56C5,0x56CB,0x5971,0x5B4B,0x5B4C,0x5DD5,0x5DD1,0x5EF2,/* 0xD8-0xDF */ + 0x6521,0x6520,0x6526,0x6522,0x6B0B,0x6B08,0x6B09,0x6C0D,/* 0xE0-0xE7 */ + 0x7055,0x7056,0x7057,0x7052,0x721E,0x721F,0x72A9,0x737F,/* 0xE8-0xEF */ + 0x74D8,0x74D5,0x74D9,0x74D7,0x766D,0x76AD,0x7935,0x79B4,/* 0xF0-0xF7 */ + 0x7A70,0x7A71,0x7C57,0x7C5C,0x7C59,0x7C5B,0x7C5A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F7[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7CF4,0x7CF1,0x7E91,0x7F4F,0x7F87,0x81DE,0x826B,0x8634,/* 0x40-0x47 */ + 0x8635,0x8633,0x862C,0x8632,0x8636,0x882C,0x8828,0x8826,/* 0x48-0x4F */ + 0x882A,0x8825,0x8971,0x89BF,0x89BE,0x89FB,0x8B7E,0x8B84,/* 0x50-0x57 */ + 0x8B82,0x8B86,0x8B85,0x8B7F,0x8D15,0x8E95,0x8E94,0x8E9A,/* 0x58-0x5F */ + 0x8E92,0x8E90,0x8E96,0x8E97,0x8F60,0xF98D,0x9147,0x944C,/* 0x60-0x67 */ + 0x9450,0x944A,0x944B,0x944F,0x9447,0x9445,0x9448,0x9449,/* 0x68-0x6F */ + 0x9446,0x973F,0x97E3,0x986A,0x9869,0x98CB,0x9954,0x995B,/* 0x70-0x77 */ + 0x9A4E,0x9A53,0x9A54,0x9A4C,0x9A4F,0x9A48,0x9A4A,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9A49,0x9A52,0x9A50,0x9AD0,0x9B19,0x9B2B,0x9B3B,/* 0xA0-0xA7 */ + 0x9B56,0x9B55,0x9C46,0x9C48,0x9C3F,0x9C44,0x9C39,0x9C33,/* 0xA8-0xAF */ + 0x9C41,0x9C3C,0x9C37,0x9C34,0x9C32,0x9C3D,0x9C36,0x9DDB,/* 0xB0-0xB7 */ + 0x9DD2,0x9DDE,0x9DDA,0x9DCB,0x9DD0,0x9DDC,0x9DD1,0x9DDF,/* 0xB8-0xBF */ + 0x9DE9,0x9DD9,0x9DD8,0x9DD6,0x9DF5,0x9DD5,0x9DDD,0x9EB6,/* 0xC0-0xC7 */ + 0x9EF0,0x9F35,0x9F33,0x9F32,0x9F42,0x9F6B,0x9F95,0x9FA2,/* 0xC8-0xCF */ + 0x513D,0x5299,0x58E8,0x58E7,0x5972,0x5B4D,0x5DD8,0x882F,/* 0xD0-0xD7 */ + 0x5F4F,0x6201,0x6203,0x6204,0x6529,0x6525,0x6596,0x66EB,/* 0xD8-0xDF */ + 0x6B11,0x6B12,0x6B0F,0x6BCA,0x705B,0x705A,0x7222,0x7382,/* 0xE0-0xE7 */ + 0x7381,0x7383,0x7670,0x77D4,0x7C67,0x7C66,0x7E95,0x826C,/* 0xE8-0xEF */ + 0x863A,0x8640,0x8639,0x863C,0x8631,0x863B,0x863E,0x8830,/* 0xF0-0xF7 */ + 0x8832,0x882E,0x8833,0x8976,0x8974,0x8973,0x89FE,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F8[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x8B8C,0x8B8E,0x8B8B,0x8B88,0x8C45,0x8D19,0x8E98,0x8F64,/* 0x40-0x47 */ + 0x8F63,0x91BC,0x9462,0x9455,0x945D,0x9457,0x945E,0x97C4,/* 0x48-0x4F */ + 0x97C5,0x9800,0x9A56,0x9A59,0x9B1E,0x9B1F,0x9B20,0x9C52,/* 0x50-0x57 */ + 0x9C58,0x9C50,0x9C4A,0x9C4D,0x9C4B,0x9C55,0x9C59,0x9C4C,/* 0x58-0x5F */ + 0x9C4E,0x9DFB,0x9DF7,0x9DEF,0x9DE3,0x9DEB,0x9DF8,0x9DE4,/* 0x60-0x67 */ + 0x9DF6,0x9DE1,0x9DEE,0x9DE6,0x9DF2,0x9DF0,0x9DE2,0x9DEC,/* 0x68-0x6F */ + 0x9DF4,0x9DF3,0x9DE8,0x9DED,0x9EC2,0x9ED0,0x9EF2,0x9EF3,/* 0x70-0x77 */ + 0x9F06,0x9F1C,0x9F38,0x9F37,0x9F36,0x9F43,0x9F4F,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9F71,0x9F70,0x9F6E,0x9F6F,0x56D3,0x56CD,0x5B4E,/* 0xA0-0xA7 */ + 0x5C6D,0x652D,0x66ED,0x66EE,0x6B13,0x705F,0x7061,0x705D,/* 0xA8-0xAF */ + 0x7060,0x7223,0x74DB,0x74E5,0x77D5,0x7938,0x79B7,0x79B6,/* 0xB0-0xB7 */ + 0x7C6A,0x7E97,0x7F89,0x826D,0x8643,0x8838,0x8837,0x8835,/* 0xB8-0xBF */ + 0x884B,0x8B94,0x8B95,0x8E9E,0x8E9F,0x8EA0,0x8E9D,0x91BE,/* 0xC0-0xC7 */ + 0x91BD,0x91C2,0x946B,0x9468,0x9469,0x96E5,0x9746,0x9743,/* 0xC8-0xCF */ + 0x9747,0x97C7,0x97E5,0x9A5E,0x9AD5,0x9B59,0x9C63,0x9C67,/* 0xD0-0xD7 */ + 0x9C66,0x9C62,0x9C5E,0x9C60,0x9E02,0x9DFE,0x9E07,0x9E03,/* 0xD8-0xDF */ + 0x9E06,0x9E05,0x9E00,0x9E01,0x9E09,0x9DFF,0x9DFD,0x9E04,/* 0xE0-0xE7 */ + 0x9EA0,0x9F1E,0x9F46,0x9F74,0x9F75,0x9F76,0x56D4,0x652E,/* 0xE8-0xEF */ + 0x65B8,0x6B18,0x6B19,0x6B17,0x6B1A,0x7062,0x7226,0x72AA,/* 0xF0-0xF7 */ + 0x77D8,0x77D9,0x7939,0x7C69,0x7C6B,0x7CF6,0x7E9A,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t c2u_F9[256] = { + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x00-0x07 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x08-0x0F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x10-0x17 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x18-0x1F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x20-0x27 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x28-0x2F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x30-0x37 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x38-0x3F */ + 0x7E98,0x7E9B,0x7E99,0x81E0,0x81E1,0x8646,0x8647,0x8648,/* 0x40-0x47 */ + 0x8979,0x897A,0x897C,0x897B,0x89FF,0x8B98,0x8B99,0x8EA5,/* 0x48-0x4F */ + 0x8EA4,0x8EA3,0x946E,0x946D,0x946F,0x9471,0x9473,0x9749,/* 0x50-0x57 */ + 0x9872,0x995F,0x9C68,0x9C6E,0x9C6D,0x9E0B,0x9E0D,0x9E10,/* 0x58-0x5F */ + 0x9E0F,0x9E12,0x9E11,0x9EA1,0x9EF5,0x9F09,0x9F47,0x9F78,/* 0x60-0x67 */ + 0x9F7B,0x9F7A,0x9F79,0x571E,0x7066,0x7C6F,0x883C,0x8DB2,/* 0x68-0x6F */ + 0x8EA6,0x91C3,0x9474,0x9478,0x9476,0x9475,0x9A60,0x9C74,/* 0x70-0x77 */ + 0x9C73,0x9C71,0x9C75,0x9E14,0x9E13,0x9EF6,0x9F0A,0x0000,/* 0x78-0x7F */ + + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x80-0x87 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x88-0x8F */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x90-0x97 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,/* 0x98-0x9F */ + 0x0000,0x9FA4,0x7068,0x7065,0x7CF7,0x866A,0x883E,0x883D,/* 0xA0-0xA7 */ + 0x883F,0x8B9E,0x8C9C,0x8EA9,0x8EC9,0x974B,0x9873,0x9874,/* 0xA8-0xAF */ + 0x98CC,0x9961,0x99AB,0x9A64,0x9A66,0x9A67,0x9B24,0x9E15,/* 0xB0-0xB7 */ + 0x9E17,0x9F48,0x6207,0x6B1E,0x7227,0x864C,0x8EA8,0x9482,/* 0xB8-0xBF */ + 0x9480,0x9481,0x9A69,0x9A68,0x9B2E,0x9E19,0x7229,0x864B,/* 0xC0-0xC7 */ + 0x8B9F,0x9483,0x9C79,0x9EB7,0x7675,0x9A6B,0x9C7A,0x9E1D,/* 0xC8-0xCF */ + 0x7069,0x706A,0x9EA4,0x9F7E,0x9F49,0x9F98,0x7881,0x92B9,/* 0xD0-0xD7 */ + 0x88CF,0x58BB,0x6052,0x7CA7,0x5AFA,0x2554,0x2566,0x2557,/* 0xD8-0xDF */ + 0x2560,0x256C,0x2563,0x255A,0x2569,0x255D,0x2552,0x2564,/* 0xE0-0xE7 */ + 0x2555,0x255E,0x256A,0x2561,0x2558,0x2567,0x255B,0x2553,/* 0xE8-0xEF */ + 0x2565,0x2556,0x255F,0x256B,0x2562,0x2559,0x2568,0x255C,/* 0xF0-0xF7 */ + 0x2551,0x2550,0x0000,0x0000,0x0000,0x0000,0x2593,0x0000,/* 0xF8-0xFF */ +}; + +static wchar_t *page_charset2uni[256] = { + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, c2u_A1, c2u_A2, c2u_A3, c2u_A4, c2u_A5, c2u_A6, c2u_A7, + c2u_A8, c2u_A9, c2u_AA, c2u_AB, c2u_AC, c2u_AD, c2u_AE, c2u_AF, + c2u_B0, c2u_B1, c2u_B2, c2u_B3, c2u_B4, c2u_B5, c2u_B6, c2u_B7, + c2u_B8, c2u_B9, c2u_BA, c2u_BB, c2u_BC, c2u_BD, c2u_BE, c2u_BF, + c2u_C0, c2u_C1, c2u_C2, c2u_C3, c2u_C4, c2u_C5, c2u_C6, NULL, + NULL, c2u_C9, c2u_CA, c2u_CB, c2u_CC, c2u_CD, c2u_CE, c2u_CF, + c2u_D0, c2u_D1, c2u_D2, c2u_D3, c2u_D4, c2u_D5, c2u_D6, c2u_D7, + c2u_D8, c2u_D9, c2u_DA, c2u_DB, c2u_DC, c2u_DD, c2u_DE, c2u_DF, + c2u_E0, c2u_E1, c2u_E2, c2u_E3, c2u_E4, c2u_E5, c2u_E6, c2u_E7, + c2u_E8, c2u_E9, c2u_EA, c2u_EB, c2u_EC, c2u_ED, c2u_EE, c2u_EF, + c2u_F0, c2u_F1, c2u_F2, c2u_F3, c2u_F4, c2u_F5, c2u_F6, c2u_F7, + c2u_F8, c2u_F9, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char u2c_02[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xBE, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xA3, 0xBC, 0xA3, 0xBD, 0xA3, 0xBF, /* 0xC8-0xCB */ + 0x00, 0x00, 0xA1, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xA3, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ +}; + +static unsigned char u2c_03[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA1, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xA3, 0x44, 0xA3, 0x45, 0xA3, 0x46, /* 0x90-0x93 */ + 0xA3, 0x47, 0xA3, 0x48, 0xA3, 0x49, 0xA3, 0x4A, /* 0x94-0x97 */ + 0xA3, 0x4B, 0xA3, 0x4C, 0xA3, 0x4D, 0xA3, 0x4E, /* 0x98-0x9B */ + 0xA3, 0x4F, 0xA3, 0x50, 0xA3, 0x51, 0xA3, 0x52, /* 0x9C-0x9F */ + 0xA3, 0x53, 0xA3, 0x54, 0x00, 0x00, 0xA3, 0x55, /* 0xA0-0xA3 */ + 0xA3, 0x56, 0xA3, 0x57, 0xA3, 0x58, 0xA3, 0x59, /* 0xA4-0xA7 */ + 0xA3, 0x5A, 0xA3, 0x5B, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xA3, 0x5C, 0xA3, 0x5D, 0xA3, 0x5E, /* 0xB0-0xB3 */ + 0xA3, 0x5F, 0xA3, 0x60, 0xA3, 0x61, 0xA3, 0x62, /* 0xB4-0xB7 */ + 0xA3, 0x63, 0xA3, 0x64, 0xA3, 0x65, 0xA3, 0x66, /* 0xB8-0xBB */ + 0xA3, 0x67, 0xA3, 0x68, 0xA3, 0x69, 0xA3, 0x6A, /* 0xBC-0xBF */ + 0xA3, 0x6B, 0xA3, 0x6C, 0x00, 0x00, 0xA3, 0x6D, /* 0xC0-0xC3 */ + 0xA3, 0x6E, 0xA3, 0x6F, 0xA3, 0x70, 0xA3, 0x71, /* 0xC4-0xC7 */ + 0xA3, 0x72, 0xA3, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ +}; + +static unsigned char u2c_20[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x56, /* 0x10-0x13 */ + 0xA1, 0x58, 0xA2, 0x77, 0xA1, 0xFC, 0x00, 0x00, /* 0x14-0x17 */ + 0xA1, 0xA5, 0xA1, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xA1, 0xA7, 0xA1, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0x45, 0x00, 0x00, /* 0x20-0x23 */ + 0xA3, 0xBB, 0xA1, 0x4C, 0xA1, 0x4B, 0xA1, 0x45, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xAC, 0xA1, 0xB2, /* 0x30-0x33 */ + 0x00, 0x00, 0xA1, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB0, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xC3, 0x00, 0x00, /* 0x3C-0x3F */ +}; + +static unsigned char u2c_21[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA2, 0x4A, /* 0x00-0x03 */ + 0x00, 0x00, 0xA1, 0xC1, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xA2, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA2, 0xB9, 0xA2, 0xBA, 0xA2, 0xBB, 0xA2, 0xBC, /* 0x60-0x63 */ + 0xA2, 0xBD, 0xA2, 0xBE, 0xA2, 0xBF, 0xA2, 0xC0, /* 0x64-0x67 */ + 0xA2, 0xC1, 0xA2, 0xC2, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xA1, 0xF6, 0xA1, 0xF4, 0xA1, 0xF7, 0xA1, 0xF5, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xF8, 0xA1, 0xF9, /* 0x94-0x97 */ + 0xA1, 0xFB, 0xA1, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ +}; + +static unsigned char u2c_22[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xA2, 0x41, 0xA2, 0x42, 0x00, 0x00, /* 0x14-0x17 */ + 0xA2, 0x58, 0x00, 0x00, 0xA1, 0xD4, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xDB, 0xA1, 0xE8, /* 0x1C-0x1F */ + 0xA1, 0xE7, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFD, /* 0x20-0x23 */ + 0x00, 0x00, 0xA1, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xA1, 0xE4, 0xA1, 0xE5, 0xA1, 0xEC, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xED, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xA1, 0xEF, 0xA1, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xDC, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA1, 0xDA, 0xA1, 0xDD, 0x00, 0x00, 0xA1, 0xDD, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xD8, 0xA1, 0xD9, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xA1, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xA1, 0xF3, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xA1, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xE9, /* 0xBC-0xBF */ +}; + +static unsigned char u2c_23[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0x5B, /* 0x04-0x07 */ +}; + +static unsigned char u2c_25[512] = { + 0xA2, 0x77, 0x00, 0x00, 0xA2, 0x78, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xA2, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xA2, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xA2, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xA2, 0x7D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xA2, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xA2, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xA2, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xA2, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xA2, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF9, 0xF9, 0xF9, 0xF8, 0xF9, 0xE6, 0xF9, 0xEF, /* 0x50-0x53 */ + 0xF9, 0xDD, 0xF9, 0xE8, 0xF9, 0xF1, 0xF9, 0xDF, /* 0x54-0x57 */ + 0xF9, 0xEC, 0xF9, 0xF5, 0xF9, 0xE3, 0xF9, 0xEE, /* 0x58-0x5B */ + 0xF9, 0xF7, 0xF9, 0xE5, 0xF9, 0xE9, 0xF9, 0xF2, /* 0x5C-0x5F */ + 0xF9, 0xE0, 0xF9, 0xEB, 0xF9, 0xF4, 0xF9, 0xE2, /* 0x60-0x63 */ + 0xF9, 0xE7, 0xF9, 0xF0, 0xF9, 0xDE, 0xF9, 0xED, /* 0x64-0x67 */ + 0xF9, 0xF6, 0xF9, 0xE4, 0xF9, 0xEA, 0xF9, 0xF3, /* 0x68-0x6B */ + 0xF9, 0xE1, 0xA2, 0x7E, 0xA2, 0xA1, 0xA2, 0xA3, /* 0x6C-0x6F */ + 0xA2, 0xA2, 0xA2, 0xAC, 0xA2, 0xAD, 0xA2, 0xAE, /* 0x70-0x73 */ + 0xA1, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xA2, 0x62, 0xA2, 0x63, 0xA2, 0x64, /* 0x80-0x83 */ + 0xA2, 0x65, 0xA2, 0x66, 0xA2, 0x67, 0xA2, 0x68, /* 0x84-0x87 */ + 0xA2, 0x69, 0xA2, 0x70, 0xA2, 0x6F, 0xA2, 0x6E, /* 0x88-0x8B */ + 0xA2, 0x6D, 0xA2, 0x6C, 0xA2, 0x6B, 0xA2, 0x6A, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFE, /* 0x90-0x93 */ + 0xA2, 0x76, 0xA2, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xA1, 0xBD, 0xA1, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB6, 0xA1, 0xB5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xA1, 0xBF, 0xA1, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xBB, 0xA1, 0xBA, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB3, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xA1, 0xB7, 0xA1, 0xB4, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0xA8, 0xA2, 0xA9, /* 0xE0-0xE3 */ + 0xA2, 0xAB, 0xA2, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char u2c_26[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA1, 0xB9, 0xA1, 0xB8, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xA1, 0xF3, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xA1, 0xF0, 0xA1, 0xF2, 0xA1, 0xF1, 0x00, 0x00, /* 0x40-0x43 */ +}; + +static unsigned char u2c_30[512] = { + 0xA1, 0x40, 0xA1, 0x42, 0xA1, 0x43, 0xA1, 0xB2, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xA1, 0x71, 0xA1, 0x72, 0xA1, 0x6D, 0xA1, 0x6E, /* 0x08-0x0B */ + 0xA1, 0x75, 0xA1, 0x76, 0xA1, 0x79, 0xA1, 0x7A, /* 0x0C-0x0F */ + 0xA1, 0x69, 0xA1, 0x6A, 0xA2, 0x45, 0x00, 0x00, /* 0x10-0x13 */ + 0xA1, 0x65, 0xA1, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xA1, 0xE3, 0xA1, 0xA9, 0xA1, 0xAA, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xA2, 0xC3, 0xA2, 0xC4, 0xA2, 0xC5, /* 0x20-0x23 */ + 0xA2, 0xC6, 0xA2, 0xC7, 0xA2, 0xC8, 0xA2, 0xC9, /* 0x24-0x27 */ + 0xA2, 0xCA, 0xA2, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA1, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ +}; + +static unsigned char u2c_31[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA3, 0x74, 0xA3, 0x75, 0xA3, 0x76, /* 0x04-0x07 */ + 0xA3, 0x77, 0xA3, 0x78, 0xA3, 0x79, 0xA3, 0x7A, /* 0x08-0x0B */ + 0xA3, 0x7B, 0xA3, 0x7C, 0xA3, 0x7D, 0xA3, 0x7E, /* 0x0C-0x0F */ + 0xA3, 0xA1, 0xA3, 0xA2, 0xA3, 0xA3, 0xA3, 0xA4, /* 0x10-0x13 */ + 0xA3, 0xA5, 0xA3, 0xA6, 0xA3, 0xA7, 0xA3, 0xA8, /* 0x14-0x17 */ + 0xA3, 0xA9, 0xA3, 0xAA, 0xA3, 0xAB, 0xA3, 0xAC, /* 0x18-0x1B */ + 0xA3, 0xAD, 0xA3, 0xAE, 0xA3, 0xAF, 0xA3, 0xB0, /* 0x1C-0x1F */ + 0xA3, 0xB1, 0xA3, 0xB2, 0xA3, 0xB3, 0xA3, 0xB4, /* 0x20-0x23 */ + 0xA3, 0xB5, 0xA3, 0xB6, 0xA3, 0xB7, 0xA3, 0xB8, /* 0x24-0x27 */ + 0xA3, 0xB9, 0xA3, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0x40, 0xA4, 0x47, /* 0x90-0x93 */ + 0xA4, 0x54, 0xA5, 0x7C, 0xA4, 0x57, 0xA4, 0xA4, /* 0x94-0x97 */ + 0xA4, 0x55, 0xA5, 0xD2, 0xA4, 0x41, 0xA4, 0xFE, /* 0x98-0x9B */ + 0xA4, 0x42, 0xA4, 0xD1, 0xA6, 0x61, 0xA4, 0x48, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_32[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xA4, 0x40, 0xA4, 0x47, 0xA4, 0x54, 0xA5, 0x7C, /* 0x20-0x23 */ + 0xA4, 0xAD, 0xA4, 0xBB, 0xA4, 0x43, 0xA4, 0x4B, /* 0x24-0x27 */ + 0xA4, 0x45, 0xA4, 0x51, 0xA4, 0xEB, 0xA4, 0xF5, /* 0x28-0x2B */ + 0xA4, 0xF4, 0xA4, 0xEC, 0xAA, 0xF7, 0xA4, 0x67, /* 0x2C-0x2F */ + 0xA4, 0xE9, 0xAE, 0xE8, 0xA6, 0xB3, 0xAA, 0xC0, /* 0x30-0x33 */ + 0xA6, 0x57, 0xAF, 0x53, 0xB0, 0x5D, 0xAF, 0xAC, /* 0x34-0x37 */ + 0xB3, 0xD2, 0xA5, 0x4E, 0xA9, 0x49, 0xBE, 0xC7, /* 0x38-0x3B */ + 0xBA, 0xCA, 0xA5, 0xF8, 0xB8, 0xEA, 0xA8, 0xF3, /* 0x3C-0x3F */ + 0xB2, 0xBD, 0xA5, 0xF0, 0xA6, 0xDB, 0xA6, 0xDC, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xA4, 0x40, 0xA4, 0x47, 0xA4, 0x54, 0xA5, 0x7C, /* 0x80-0x83 */ + 0xA4, 0xAD, 0xA4, 0xBB, 0xA4, 0x43, 0xA4, 0x4B, /* 0x84-0x87 */ + 0xA4, 0x45, 0xA4, 0x51, 0xA4, 0xEB, 0xA4, 0xF5, /* 0x88-0x8B */ + 0xA4, 0xF4, 0xA4, 0xEC, 0xAA, 0xF7, 0xA4, 0x67, /* 0x8C-0x8F */ + 0xA4, 0xE9, 0xAE, 0xE8, 0xA6, 0xB3, 0xAA, 0xC0, /* 0x90-0x93 */ + 0xA6, 0x57, 0xAF, 0x53, 0xB0, 0x5D, 0xAF, 0xAC, /* 0x94-0x97 */ + 0xB3, 0xD2, 0xAF, 0xB5, 0xA8, 0x6B, 0xA4, 0x6B, /* 0x98-0x9B */ + 0xBE, 0x41, 0xC0, 0x75, 0xA6, 0x4C, 0xAA, 0x60, /* 0x9C-0x9F */ + 0xB6, 0xB5, 0xA5, 0xF0, 0xBC, 0x67, 0xA1, 0xC0, /* 0xA0-0xA3 */ + 0xA4, 0x57, 0xA4, 0xA4, 0xA4, 0x55, 0xA5, 0xAA, /* 0xA4-0xA7 */ + 0xA5, 0x6B, 0xC2, 0xE5, 0xA9, 0x76, 0xBE, 0xC7, /* 0xA8-0xAB */ + 0xBA, 0xCA, 0xA5, 0xF8, 0xB8, 0xEA, 0xA8, 0xF3, /* 0xAC-0xAF */ + 0xA9, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ +}; + +static unsigned char u2c_33[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0x55, 0xA2, 0x56, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xA2, 0x50, 0xA2, 0x51, 0xA2, 0x52, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xA2, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xA2, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xA2, 0x53, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xA1, 0xEB, 0xA1, 0xEA, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xA2, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ +}; + +static unsigned char u2c_4E[512] = { + 0xA4, 0x40, 0xA4, 0x42, 0x00, 0x00, 0xA4, 0x43, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x45, /* 0x04-0x07 */ + 0xA4, 0x56, 0xA4, 0x54, 0xA4, 0x57, 0xA4, 0x55, /* 0x08-0x0B */ + 0xC9, 0x46, 0xA4, 0xA3, 0xC9, 0x4F, 0xC9, 0x4D, /* 0x0C-0x0F */ + 0xA4, 0xA2, 0xA4, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xA5, 0x42, 0xA5, 0x41, 0xA5, 0x40, 0x00, 0x00, /* 0x14-0x17 */ + 0xA5, 0x43, 0xA4, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xA5, 0xE0, 0xA5, 0xE1, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC3, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x58, /* 0x28-0x2B */ + 0x00, 0x00, 0xA4, 0xA4, 0xC9, 0x50, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA4, 0xA5, 0xC9, 0x63, 0xA6, 0xEA, 0xCB, 0xB1, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xA4, 0x59, 0xA4, 0xA6, 0x00, 0x00, 0xA5, 0x44, /* 0x38-0x3B */ + 0xC9, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xC9, 0x40, 0xA4, 0x44, /* 0x40-0x43 */ + 0x00, 0x00, 0xA4, 0x5B, 0x00, 0x00, 0xC9, 0x47, /* 0x44-0x47 */ + 0xA4, 0x5C, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA7, /* 0x48-0x4B */ + 0x00, 0x00, 0xA5, 0x45, 0xA5, 0x47, 0xA5, 0x46, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xA5, 0xE2, 0xA5, 0xE3, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC4, 0x00, 0x00, /* 0x54-0x57 */ + 0xAD, 0xBC, 0xA4, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xC9, 0x41, 0xA4, 0x45, 0xA4, 0x5E, 0xA4, 0x5D, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xA5, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC5, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0xAE, 0xD4, 0x4B, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xB6, 0xC3, 0xDC, 0xB1, /* 0x80-0x83 */ + 0xDC, 0xB2, 0x00, 0x00, 0xA4, 0x46, 0x00, 0x00, /* 0x84-0x87 */ + 0xA4, 0xA9, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC6, /* 0x88-0x8B */ + 0xA4, 0x47, 0xC9, 0x48, 0xA4, 0x5F, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xA4, 0xAA, 0xA4, 0xAC, 0xC9, 0x51, /* 0x90-0x93 */ + 0xA4, 0xAD, 0xA4, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xA5, 0xE5, 0x00, 0x00, 0xA8, 0xC7, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC8, 0xAB, 0x45, /* 0x9C-0x9F */ + 0x00, 0x00, 0xA4, 0x60, 0xA4, 0xAE, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xA5, 0xE6, 0xA5, 0xE8, 0xA5, 0xE7, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xA6, 0xEB, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xC9, /* 0xA8-0xAB */ + 0xA8, 0xCA, 0xAB, 0x46, 0xAB, 0x47, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0xBD, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xB3, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xF6, 0xD6, 0xA4, 0x48, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xA4, 0xB0, 0xA4, 0xAF, 0xC9, 0x52, 0xA4, 0xB1, /* 0xC0-0xC3 */ + 0xA4, 0xB7, 0x00, 0x00, 0xA4, 0xB2, 0xA4, 0xB3, /* 0xC4-0xC7 */ + 0xC9, 0x54, 0xC9, 0x53, 0xA4, 0xB5, 0xA4, 0xB6, /* 0xC8-0xCB */ + 0x00, 0x00, 0xA4, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xA5, 0x4A, 0xA5, 0x4B, 0xA5, 0x4C, 0xA5, 0x4D, /* 0xD4-0xD7 */ + 0xA5, 0x49, 0xA5, 0x50, 0xC9, 0x6A, 0x00, 0x00, /* 0xD8-0xDB */ + 0xC9, 0x66, 0xC9, 0x69, 0xA5, 0x51, 0xA5, 0x61, /* 0xDC-0xDF */ + 0x00, 0x00, 0xC9, 0x68, 0x00, 0x00, 0xA5, 0x4E, /* 0xE0-0xE3 */ + 0xA5, 0x4F, 0xA5, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xC9, 0x65, 0xC9, 0x67, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xA5, 0xF5, 0xC9, 0xB0, 0xA5, 0xF2, 0xA5, 0xF6, /* 0xF0-0xF3 */ + 0xC9, 0xBA, 0xC9, 0xAE, 0xA5, 0xF3, 0xC9, 0xB2, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0xF4, /* 0xF8-0xFB */ + 0x00, 0x00, 0xA5, 0xF7, 0x00, 0x00, 0xA5, 0xE9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_4F[512] = { + 0xC9, 0xB1, 0xA5, 0xF8, 0xC9, 0xB5, 0x00, 0x00, /* 0x00-0x03 */ + 0xC9, 0xB9, 0xC9, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xC9, 0xB3, 0xA5, 0xEA, 0xA5, 0xEC, 0xA5, 0xF9, /* 0x08-0x0B */ + 0x00, 0x00, 0xA5, 0xEE, 0xC9, 0xAB, 0xA5, 0xF1, /* 0x0C-0x0F */ + 0xA5, 0xEF, 0xA5, 0xF0, 0xC9, 0xBB, 0xC9, 0xB8, /* 0x10-0x13 */ + 0xC9, 0xAF, 0xA5, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xC9, 0xAC, 0xA5, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xC9, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xC9, 0xB7, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xC9, 0xAD, 0xCA, 0x66, 0x00, 0x00, 0xA7, 0x42, /* 0x2C-0x2F */ + 0xA6, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x67, /* 0x30-0x33 */ + 0xA6, 0xF1, 0x00, 0x00, 0xA7, 0x44, 0x00, 0x00, /* 0x34-0x37 */ + 0xA6, 0xF9, 0x00, 0x00, 0xA6, 0xF8, 0xCA, 0x5B, /* 0x38-0x3B */ + 0xA6, 0xFC, 0xA6, 0xF7, 0xCA, 0x60, 0xCA, 0x68, /* 0x3C-0x3F */ + 0x00, 0x00, 0xCA, 0x64, 0x00, 0x00, 0xA6, 0xFA, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xA6, 0xFD, 0xA6, 0xEE, /* 0x44-0x47 */ + 0xA7, 0x47, 0xCA, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xCB, 0xBD, 0xA6, 0xEC, 0xA7, 0x43, 0xA6, 0xED, /* 0x4C-0x4F */ + 0xA6, 0xF5, 0xA6, 0xF6, 0xCA, 0x62, 0xCA, 0x5E, /* 0x50-0x53 */ + 0xA6, 0xFB, 0xA6, 0xF3, 0xCA, 0x5A, 0xA6, 0xEF, /* 0x54-0x57 */ + 0xCA, 0x65, 0xA7, 0x45, 0xA7, 0x48, 0xA6, 0xF2, /* 0x58-0x5B */ + 0xA7, 0x40, 0xA7, 0x46, 0xA6, 0xF0, 0xCA, 0x63, /* 0x5C-0x5F */ + 0xA7, 0x41, 0xCA, 0x69, 0xCA, 0x5C, 0xA6, 0xFE, /* 0x60-0x63 */ + 0xCA, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xCA, 0x61, /* 0x64-0x67 */ + 0x00, 0x00, 0xA8, 0xD8, 0xCB, 0xBF, 0xCB, 0xCB, /* 0x68-0x6B */ + 0xA8, 0xD0, 0x00, 0x00, 0xCB, 0xCC, 0xA8, 0xCB, /* 0x6C-0x6F */ + 0xA8, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xCE, /* 0x70-0x73 */ + 0xCB, 0xB9, 0xA8, 0xD6, 0xCB, 0xB8, 0xCB, 0xBC, /* 0x74-0x77 */ + 0xCB, 0xC3, 0xCB, 0xC1, 0xA8, 0xDE, 0xA8, 0xD9, /* 0x78-0x7B */ + 0xCB, 0xB3, 0xCB, 0xB5, 0xA8, 0xDB, 0xA8, 0xCF, /* 0x7C-0x7F */ + + 0xCB, 0xB6, 0xCB, 0xC2, 0xCB, 0xC9, 0xA8, 0xD4, /* 0x80-0x83 */ + 0xCB, 0xBB, 0xCB, 0xB4, 0xA8, 0xD3, 0xCB, 0xB7, /* 0x84-0x87 */ + 0xA8, 0xD7, 0xCB, 0xBA, 0x00, 0x00, 0xA8, 0xD2, /* 0x88-0x8B */ + 0x00, 0x00, 0xA8, 0xCD, 0x00, 0x00, 0xA8, 0xDC, /* 0x8C-0x8F */ + 0xCB, 0xC4, 0xA8, 0xDD, 0xCB, 0xC8, 0x00, 0x00, /* 0x90-0x93 */ + 0xCB, 0xC6, 0xCB, 0xCA, 0xA8, 0xDA, 0xCB, 0xBE, /* 0x94-0x97 */ + 0xCB, 0xB2, 0x00, 0x00, 0xCB, 0xC0, 0xA8, 0xD1, /* 0x98-0x9B */ + 0xCB, 0xC5, 0xA8, 0xCC, 0xCB, 0xC7, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0x56, 0xAB, 0x4A, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xCD, 0xE0, 0xCD, 0xE8, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xAB, 0x49, 0xAB, 0x51, 0xAB, 0x5D, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xCD, 0xEE, 0xCD, 0xEC, 0xCD, 0xE7, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x4B, /* 0xBC-0xBF */ + 0xCD, 0xED, 0xCD, 0xE3, 0xAB, 0x59, 0xAB, 0x50, /* 0xC0-0xC3 */ + 0xAB, 0x58, 0xCD, 0xDE, 0x00, 0x00, 0xCD, 0xEA, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xCD, 0xE1, 0xAB, 0x54, 0xCD, 0xE2, /* 0xC8-0xCB */ + 0x00, 0x00, 0xCD, 0xDD, 0xAB, 0x5B, 0xAB, 0x4E, /* 0xCC-0xCF */ + 0xAB, 0x57, 0xAB, 0x4D, 0x00, 0x00, 0xCD, 0xDF, /* 0xD0-0xD3 */ + 0xCD, 0xE4, 0x00, 0x00, 0xCD, 0xEB, 0xAB, 0x55, /* 0xD4-0xD7 */ + 0xAB, 0x52, 0xCD, 0xE6, 0xAB, 0x5A, 0xCD, 0xE9, /* 0xD8-0xDB */ + 0xCD, 0xE5, 0xAB, 0x4F, 0xAB, 0x5C, 0xAB, 0x53, /* 0xDC-0xDF */ + 0xAB, 0x4C, 0xAB, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xCD, 0xEF, 0x00, 0x00, 0xAD, 0xD7, 0xAD, 0xC1, /* 0xEC-0xEF */ + 0x00, 0x00, 0xAD, 0xD1, 0x00, 0x00, 0xAD, 0xD6, /* 0xF0-0xF3 */ + 0xD0, 0xD0, 0xD0, 0xCF, 0xD0, 0xD4, 0xD0, 0xD5, /* 0xF4-0xF7 */ + 0xAD, 0xC4, 0x00, 0x00, 0xAD, 0xCD, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xAD, 0xDA, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_50[512] = { + 0xAD, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xD0, 0xC9, 0xAD, 0xC7, 0xD0, 0xCA, /* 0x04-0x07 */ + 0x00, 0x00, 0xAD, 0xDC, 0x00, 0x00, 0xAD, 0xD3, /* 0x08-0x0B */ + 0xAD, 0xBE, 0xAD, 0xBF, 0xD0, 0xDD, 0xB0, 0xBF, /* 0x0C-0x0F */ + 0x00, 0x00, 0xAD, 0xCC, 0xAD, 0xCB, 0xD0, 0xCB, /* 0x10-0x13 */ + 0xAD, 0xCF, 0xD4, 0x5B, 0xAD, 0xC6, 0xD0, 0xD6, /* 0x14-0x17 */ + 0xAD, 0xD5, 0xAD, 0xD4, 0xAD, 0xCA, 0xD0, 0xCE, /* 0x18-0x1B */ + 0xD0, 0xD7, 0x00, 0x00, 0xD0, 0xC8, 0xAD, 0xC9, /* 0x1C-0x1F */ + 0xD0, 0xD8, 0xAD, 0xD2, 0xD0, 0xCC, 0xAD, 0xC0, /* 0x20-0x23 */ + 0x00, 0x00, 0xAD, 0xC3, 0xAD, 0xC2, 0xD0, 0xD9, /* 0x24-0x27 */ + 0xAD, 0xD0, 0xAD, 0xC5, 0xAD, 0xD9, 0xAD, 0xDB, /* 0x28-0x2B */ + 0xD0, 0xD3, 0xAD, 0xD8, 0x00, 0x00, 0xD0, 0xDB, /* 0x2C-0x2F */ + 0xD0, 0xCD, 0xD0, 0xDC, 0x00, 0x00, 0xD0, 0xD1, /* 0x30-0x33 */ + 0x00, 0x00, 0xD0, 0xDA, 0x00, 0x00, 0xD0, 0xD2, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xAD, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xD4, 0x63, 0xD4, 0x57, 0x00, 0x00, 0xB0, 0xB3, /* 0x40-0x43 */ + 0x00, 0x00, 0xD4, 0x5C, 0xD4, 0x62, 0xB0, 0xB2, /* 0x44-0x47 */ + 0xD4, 0x55, 0xB0, 0xB6, 0xD4, 0x59, 0xD4, 0x52, /* 0x48-0x4B */ + 0xB0, 0xB4, 0xD4, 0x56, 0xB0, 0xB9, 0xB0, 0xBE, /* 0x4C-0x4F */ + 0x00, 0x00, 0xD4, 0x67, 0x00, 0x00, 0xD4, 0x51, /* 0x50-0x53 */ + 0x00, 0x00, 0xB0, 0xBA, 0x00, 0x00, 0xD4, 0x66, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0xB5, 0xD4, 0x58, /* 0x58-0x5B */ + 0xB0, 0xB1, 0xD4, 0x53, 0xD4, 0x4F, 0xD4, 0x5D, /* 0x5C-0x5F */ + 0xD4, 0x50, 0xD4, 0x4E, 0xD4, 0x5A, 0xD4, 0x60, /* 0x60-0x63 */ + 0xD4, 0x61, 0xB0, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xD8, 0x5B, 0xD4, 0x5E, 0xD4, 0x4D, 0xD4, 0x5F, /* 0x68-0x6B */ + 0x00, 0x00, 0xB0, 0xC1, 0xD4, 0x64, 0xB0, 0xC0, /* 0x6C-0x6F */ + 0xD4, 0x4C, 0x00, 0x00, 0xD4, 0x54, 0xD4, 0x65, /* 0x70-0x73 */ + 0xB0, 0xBC, 0xB0, 0xBB, 0xB0, 0xB8, 0xB0, 0xBD, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0xAF, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xB0, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xB3, 0xC8, 0x00, 0x00, 0xD8, 0x5E, 0xD8, 0x57, /* 0x80-0x83 */ + 0x00, 0x00, 0xB3, 0xC5, 0x00, 0x00, 0xD8, 0x5F, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x55, /* 0x88-0x8B */ + 0xD8, 0x58, 0xB3, 0xC4, 0xD8, 0x59, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xB3, 0xC7, 0xD8, 0x5D, 0x00, 0x00, /* 0x90-0x93 */ + 0xD8, 0x53, 0xD8, 0x52, 0xB3, 0xC9, 0x00, 0x00, /* 0x94-0x97 */ + 0xB3, 0xCA, 0xB3, 0xC6, 0xB3, 0xCB, 0xD8, 0x51, /* 0x98-0x9B */ + 0xD8, 0x5C, 0xD8, 0x5A, 0xD8, 0x54, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0xC3, 0xD8, 0x56, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xB6, 0xCA, 0xB6, 0xC4, 0xDC, 0xB7, 0xB6, 0xCD, /* 0xAC-0xAF */ + 0xDC, 0xBD, 0xDC, 0xC0, 0xB6, 0xC6, 0xB6, 0xC7, /* 0xB0-0xB3 */ + 0xDC, 0xBA, 0xB6, 0xC5, 0xDC, 0xC3, 0xB6, 0xCB, /* 0xB4-0xB7 */ + 0xDC, 0xC4, 0x00, 0x00, 0xDC, 0xBF, 0xB6, 0xCC, /* 0xB8-0xBB */ + 0x00, 0x00, 0xDC, 0xB4, 0xB6, 0xC9, 0xDC, 0xB5, /* 0xBC-0xBF */ + 0x00, 0x00, 0xDC, 0xBE, 0xDC, 0xBC, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xDC, 0xB8, 0xB6, 0xC8, 0xDC, 0xB6, 0xB6, 0xCE, /* 0xC4-0xC7 */ + 0xDC, 0xBB, 0xDC, 0xC2, 0xDC, 0xB9, 0xDC, 0xC1, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0xB6, 0xB9, 0xB3, /* 0xCC-0xCF */ + 0x00, 0x00, 0xB9, 0xB4, 0x00, 0x00, 0xE0, 0xF9, /* 0xD0-0xD3 */ + 0xE0, 0xF1, 0xB9, 0xB2, 0xB9, 0xAF, 0xE0, 0xF2, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0xB1, 0xE0, 0xF5, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE0, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xE0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFD, /* 0xE0-0xE3 */ + 0xE0, 0xF8, 0xB9, 0xAE, 0xE0, 0xF0, 0xB9, 0xAC, /* 0xE4-0xE7 */ + 0xE0, 0xF3, 0xB9, 0xB7, 0xE0, 0xF6, 0x00, 0x00, /* 0xE8-0xEB */ + 0xE0, 0xFA, 0xB9, 0xB0, 0xB9, 0xAD, 0xE0, 0xFC, /* 0xEC-0xEF */ + 0xE0, 0xFB, 0xB9, 0xB5, 0x00, 0x00, 0xE0, 0xF4, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xBB, 0xF8, 0xE4, 0xEC, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xE4, 0xE9, 0xBB, 0xF9, 0x00, 0x00, 0xBB, 0xF7, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE4, 0xF0, 0xE4, 0xED, 0xE4, 0xE6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_51[512] = { + 0xBB, 0xF6, 0x00, 0x00, 0xBB, 0xFA, 0xE4, 0xE7, /* 0x00-0x03 */ + 0xBB, 0xF5, 0xBB, 0xFD, 0xE4, 0xEA, 0xE4, 0xEB, /* 0x04-0x07 */ + 0xBB, 0xFB, 0xBB, 0xFC, 0xE4, 0xF1, 0xE4, 0xEE, /* 0x08-0x0B */ + 0xE4, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xBE, 0xAA, 0xE8, 0xF8, 0xBE, 0xA7, 0xE8, 0xF5, /* 0x10-0x13 */ + 0xBE, 0xA9, 0xBE, 0xAB, 0x00, 0x00, 0xE8, 0xF6, /* 0x14-0x17 */ + 0xBE, 0xA8, 0x00, 0x00, 0xE8, 0xF7, 0x00, 0x00, /* 0x18-0x1B */ + 0xE8, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x76, /* 0x1C-0x1F */ + 0xEC, 0xBD, 0xC0, 0x77, 0xEC, 0xBB, 0x00, 0x00, /* 0x20-0x23 */ + 0xEC, 0xBC, 0xEC, 0xBA, 0xEC, 0xB9, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xEC, 0xBE, 0xC0, 0x75, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xEF, 0xB8, 0xEF, 0xB9, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE4, 0xE8, 0xEF, 0xB7, 0xC0, 0x78, 0xC3, 0x5F, /* 0x30-0x33 */ + 0xF1, 0xEB, 0xF1, 0xEC, 0x00, 0x00, 0xC4, 0xD7, /* 0x34-0x37 */ + 0xC4, 0xD8, 0xF5, 0xC1, 0xF5, 0xC0, 0xC5, 0x6C, /* 0x38-0x3B */ + 0xC5, 0x6B, 0xF7, 0xD0, 0x00, 0x00, 0xA4, 0x49, /* 0x3C-0x3F */ + 0xA4, 0x61, 0xA4, 0xB9, 0x00, 0x00, 0xA4, 0xB8, /* 0x40-0x43 */ + 0xA5, 0x53, 0xA5, 0x52, 0xA5, 0xFC, 0xA5, 0xFB, /* 0x44-0x47 */ + 0xA5, 0xFD, 0xA5, 0xFA, 0x00, 0x00, 0xA7, 0x4A, /* 0x48-0x4B */ + 0xA7, 0x49, 0xA7, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xE0, 0x00, 0x00, /* 0x50-0x53 */ + 0xA8, 0xDF, 0xA8, 0xE1, 0x00, 0x00, 0xAB, 0x5E, /* 0x54-0x57 */ + 0x00, 0x00, 0xA2, 0x59, 0xD0, 0xDE, 0xA2, 0x5A, /* 0x58-0x5B */ + 0xB0, 0xC2, 0xA2, 0x5C, 0xA2, 0x5B, 0xD8, 0x60, /* 0x5C-0x5F */ + 0x00, 0x00, 0xA2, 0x5D, 0xB9, 0xB8, 0xA2, 0x5E, /* 0x60-0x63 */ + 0x00, 0x00, 0xA4, 0x4A, 0x00, 0x00, 0xA4, 0xBA, /* 0x64-0x67 */ + 0xA5, 0xFE, 0xA8, 0xE2, 0x00, 0x00, 0xA4, 0x4B, /* 0x68-0x6B */ + 0xA4, 0xBD, 0xA4, 0xBB, 0xA4, 0xBC, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xA6, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xA7, 0x4C, 0xA8, 0xE4, 0xA8, 0xE3, /* 0x74-0x77 */ + 0xA8, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xAD, 0xDD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xBE, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x4E, /* 0x84-0x87 */ + 0x00, 0x00, 0xA5, 0x54, 0xA5, 0x55, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xA6, 0x41, 0x00, 0x00, 0xCA, 0x6A, /* 0x8C-0x8F */ + 0x00, 0x00, 0xAB, 0x60, 0xAB, 0x5F, 0xD0, 0xE0, /* 0x90-0x93 */ + 0xD0, 0xDF, 0xB0, 0xC3, 0x00, 0x00, 0xA4, 0xBE, /* 0x94-0x97 */ + 0xC9, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xCD, 0x00, 0x00, /* 0x9C-0x9F */ + 0xAB, 0x61, 0x00, 0x00, 0xAD, 0xE0, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xAD, 0xDE, 0xAD, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xBE, 0xAD, 0x00, 0x00, /* 0xA8-0xAB */ + 0xA5, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xA6, 0x42, 0xC9, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0x4D, 0xA7, 0x4E, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xCA, 0x6B, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xCB, 0xCE, 0xA8, 0xE6, 0xCB, 0xCF, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xD0, 0xE2, 0xD0, 0xE3, 0xAD, 0xE3, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xD0, 0xE4, 0x00, 0x00, 0xD0, 0xE1, 0xAD, 0xE4, /* 0xC8-0xCB */ + 0xAD, 0xE2, 0xAD, 0xE1, 0xD0, 0xE5, 0x00, 0x00, /* 0xCC-0xCF */ + 0xD4, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xD8, 0x61, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xC5, /* 0xD4-0xD7 */ + 0xE1, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xBB, 0xFE, 0xBE, 0xAE, 0xE8, 0xF9, 0x00, 0x00, /* 0xDC-0xDF */ + 0xA4, 0x4C, 0xA4, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xB0, 0xC4, 0xB3, 0xCD, 0x00, 0x00, 0xB9, 0xB9, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xC9, 0x42, 0xA4, 0xBF, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xA5, 0x59, 0xA5, 0x57, 0xA5, 0x58, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xA8, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_52[512] = { + 0xA4, 0x4D, 0xA4, 0x4E, 0x00, 0x00, 0xA4, 0x62, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0xC0, 0xA4, 0xC1, /* 0x04-0x07 */ + 0xA4, 0xC2, 0xC9, 0xBE, 0xA5, 0x5A, 0x00, 0x00, /* 0x08-0x0B */ + 0xC9, 0x6B, 0x00, 0x00, 0xA6, 0x46, 0x00, 0x00, /* 0x0C-0x0F */ + 0xC9, 0xBF, 0xA6, 0x44, 0xA6, 0x45, 0xC9, 0xBD, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xA6, 0x47, 0xA6, 0x43, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xCA, 0x6C, 0xAA, 0xEC, 0xCA, 0x6D, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xCA, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xA7, 0x50, 0xA7, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xA7, 0x53, 0xA7, 0x51, 0xA7, 0x52, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xED, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA8, 0xEC, 0xCB, 0xD4, 0xCB, 0xD1, 0xCB, 0xD2, /* 0x30-0x33 */ + 0x00, 0x00, 0xCB, 0xD0, 0xA8, 0xEE, 0xA8, 0xEA, /* 0x34-0x37 */ + 0xA8, 0xE9, 0x00, 0x00, 0xA8, 0xEB, 0xA8, 0xE8, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xA8, 0xEF, 0x00, 0x00, 0xAB, 0x63, /* 0x40-0x43 */ + 0xCD, 0xF0, 0x00, 0x00, 0xCB, 0xD3, 0xAB, 0x68, /* 0x44-0x47 */ + 0x00, 0x00, 0xCD, 0xF1, 0xAB, 0x64, 0xAB, 0x67, /* 0x48-0x4B */ + 0xAB, 0x66, 0xAB, 0x65, 0xAB, 0x62, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xE8, 0x00, 0x00, /* 0x50-0x53 */ + 0xAD, 0xE7, 0xD0, 0xEB, 0xAD, 0xE5, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xE7, 0xAD, 0xE8, /* 0x58-0x5B */ + 0xAD, 0xE6, 0xAD, 0xE9, 0xD0, 0xE9, 0xD0, 0xEA, /* 0x5C-0x5F */ + 0x00, 0x00, 0xD0, 0xE6, 0xD0, 0xEC, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xB3, 0xD1, 0xB0, 0xC5, 0xD4, 0x69, /* 0x68-0x6B */ + 0xD4, 0x6B, 0xD4, 0x6A, 0xD4, 0x6C, 0xB0, 0xC6, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0xCE, 0x00, 0x00, /* 0x70-0x73 */ + 0xB3, 0xCF, 0xB3, 0xD0, 0x00, 0x00, 0xB6, 0xD0, /* 0x74-0x77 */ + 0xDC, 0xC7, 0x00, 0x00, 0xDC, 0xC6, 0xDC, 0xC8, /* 0x78-0x7B */ + 0xDC, 0xC9, 0xB6, 0xD1, 0x00, 0x00, 0xB6, 0xCF, /* 0x7C-0x7F */ + + 0xE1, 0x41, 0xE1, 0x42, 0xB9, 0xBB, 0xB9, 0xBA, /* 0x80-0x83 */ + 0xE3, 0x5A, 0x00, 0x00, 0x00, 0x00, 0xBC, 0x40, /* 0x84-0x87 */ + 0xBC, 0x41, 0xBC, 0x42, 0xBC, 0x44, 0xE4, 0xF2, /* 0x88-0x8B */ + 0xE4, 0xF3, 0xBC, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xBE, 0xAF, 0x00, 0x00, 0xBE, 0xB0, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xED, 0xF5, 0xC3, /* 0x94-0x97 */ + 0xF5, 0xC2, 0xF7, 0xD1, 0x00, 0x00, 0xA4, 0x4F, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x5C, /* 0x9C-0x9F */ + 0xA5, 0x5B, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x48, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xC9, 0xC0, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xA7, 0x55, 0xA7, 0x56, 0xA7, 0x54, /* 0xA8-0xAB */ + 0xA7, 0x57, 0xCA, 0x6F, 0xCA, 0x70, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xF1, /* 0xB8-0xBB */ + 0xCB, 0xD5, 0x00, 0x00, 0xA8, 0xF0, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCD, 0xF2, 0xAB, 0x6C, 0xCD, 0xF3, 0xAB, 0x6B, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x69, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xAB, 0x6A, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xD0, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0xC7, 0xD4, 0x6E, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xB0, 0xCA, 0xD4, 0x6D, 0xB1, 0xE5, /* 0xD4-0xD7 */ + 0xB0, 0xC9, 0xB0, 0xC8, 0x00, 0x00, 0xB3, 0xD4, /* 0xD8-0xDB */ + 0x00, 0x00, 0xB3, 0xD3, 0xB3, 0xD2, 0xB6, 0xD2, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xB6, 0xD5, 0xB6, 0xD6, /* 0xE0-0xE3 */ + 0xB6, 0xD4, 0x00, 0x00, 0xB6, 0xD3, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xE1, 0x43, 0x00, 0x00, 0xE1, 0x44, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xF5, /* 0xEC-0xEF */ + 0xBC, 0x45, 0xE4, 0xF4, 0x00, 0x00, 0xBE, 0xB1, /* 0xF0-0xF3 */ + 0xEC, 0xBF, 0xC0, 0x79, 0x00, 0x00, 0xF1, 0xEE, /* 0xF4-0xF7 */ + 0xC4, 0x55, 0x00, 0x00, 0xA4, 0x63, 0xA4, 0xC3, /* 0xF8-0xFB */ + 0xC9, 0x56, 0x00, 0x00, 0xA4, 0xC4, 0xA4, 0xC5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_53[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xA5, 0x5D, 0xA5, 0x5E, 0x00, 0x00, /* 0x04-0x07 */ + 0xA6, 0x49, 0xCA, 0x71, 0xCB, 0xD6, 0xCB, 0xD7, /* 0x08-0x0B */ + 0x00, 0x00, 0xAB, 0x6D, 0xD0, 0xEE, 0xB0, 0xCC, /* 0x0C-0x0F */ + 0xB0, 0xCB, 0xD8, 0x63, 0xD8, 0x62, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xA4, 0x50, 0xA4, 0xC6, 0xA5, 0x5F, /* 0x14-0x17 */ + 0x00, 0x00, 0xB0, 0xCD, 0xC9, 0x43, 0x00, 0x00, /* 0x18-0x1B */ + 0xC9, 0x6C, 0xA5, 0x60, 0x00, 0x00, 0xC9, 0xC2, /* 0x1C-0x1F */ + 0xA6, 0x4B, 0xA6, 0x4A, 0xC9, 0xC1, 0xA7, 0x58, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xAD, 0xEA, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD4, 0x6F, 0x00, 0x00, 0xB6, 0xD7, /* 0x2C-0x2F */ + 0xE1, 0x45, 0xB9, 0xBC, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xE8, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFD, /* 0x34-0x37 */ + 0x00, 0x00, 0xA4, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xCB, 0xD8, 0xCD, 0xF4, 0xB0, 0xD0, 0xB0, 0xCE, /* 0x3C-0x3F */ + 0xB0, 0xCF, 0xA4, 0x51, 0x00, 0x00, 0xA4, 0x64, /* 0x40-0x43 */ + 0xA2, 0xCD, 0xA4, 0xCA, 0x00, 0x00, 0xA4, 0xC9, /* 0x44-0x47 */ + 0xA4, 0xC8, 0xA5, 0x63, 0xA5, 0x62, 0x00, 0x00, /* 0x48-0x4B */ + 0xC9, 0x6D, 0xC9, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xA8, 0xF5, 0xA8, 0xF2, 0xA8, 0xF4, /* 0x50-0x53 */ + 0xA8, 0xF3, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x6E, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0xD5, 0x00, 0x00, /* 0x58-0x5B */ + 0xA4, 0x52, 0x00, 0x00, 0xA4, 0xCB, 0x00, 0x00, /* 0x5C-0x5F */ + 0xA5, 0x65, 0xA5, 0x64, 0x00, 0x00, 0xCA, 0x72, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xF6, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xC9, 0x57, 0x00, 0x00, 0xA5, 0x67, 0xA5, 0x66, /* 0x6C-0x6F */ + 0xA6, 0x4C, 0xA6, 0x4D, 0xCA, 0x73, 0xA7, 0x59, /* 0x70-0x73 */ + 0x00, 0x00, 0xA7, 0x5A, 0x00, 0x00, 0xA8, 0xF7, /* 0x74-0x77 */ + 0xA8, 0xF8, 0xA8, 0xF9, 0x00, 0x00, 0xAB, 0x6F, /* 0x78-0x7B */ + 0xCD, 0xF5, 0x00, 0x00, 0x00, 0x00, 0xAD, 0xEB, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xC9, 0x44, 0x00, 0x00, /* 0x80-0x83 */ + 0xA4, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xC9, 0xC4, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0x74, 0xCA, 0x75, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xD9, 0x00, 0x00, /* 0x90-0x93 */ + 0xCB, 0xDA, 0x00, 0x00, 0xCD, 0xF7, 0xCD, 0xF6, /* 0x94-0x97 */ + 0xCD, 0xF9, 0xCD, 0xF8, 0xAB, 0x70, 0x00, 0x00, /* 0x98-0x9B */ + 0xD4, 0x70, 0xAD, 0xED, 0xD0, 0xEF, 0xAD, 0xEC, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xD8, 0x64, 0xB3, 0xD6, 0x00, 0x00, 0xD8, 0x65, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE1, 0x46, 0xB9, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xBC, 0x46, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xF1, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xC9, 0x58, 0x00, 0x00, 0xA5, 0x68, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xD1, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xA4, 0x53, 0xA4, 0x65, 0xA4, 0xCE, 0xA4, 0xCD, /* 0xC8-0xCB */ + 0x00, 0x00, 0xA4, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xA8, 0xFB, 0x00, 0x00, 0xA8, 0xFA, 0xA8, 0xFC, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0x71, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0xEE, /* 0xDC-0xDF */ + 0x00, 0x00, 0xE8, 0xFB, 0xC2, 0x4F, 0xA4, 0x66, /* 0xE0-0xE3 */ + 0xA5, 0x6A, 0xA5, 0x79, 0xA5, 0x74, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xA5, 0x6F, 0xA5, 0x6E, 0xA5, 0x75, 0xA5, 0x73, /* 0xE8-0xEB */ + 0xA5, 0x6C, 0xA5, 0x7A, 0xA5, 0x6D, 0xA5, 0x69, /* 0xEC-0xEF */ + 0xA5, 0x78, 0xA5, 0x77, 0xA5, 0x76, 0xA5, 0x6B, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xA5, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xA5, 0x71, 0x00, 0x00, 0x00, 0x00, 0xA5, 0x7B, /* 0xF8-0xFB */ + 0xA5, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_54[512] = { + 0x00, 0x00, 0xA6, 0x53, 0x00, 0x00, 0xA6, 0x59, /* 0x00-0x03 */ + 0xA6, 0x55, 0x00, 0x00, 0xA6, 0x5B, 0xC9, 0xC5, /* 0x04-0x07 */ + 0xA6, 0x58, 0xA6, 0x4E, 0xA6, 0x51, 0xA6, 0x54, /* 0x08-0x0B */ + 0xA6, 0x50, 0xA6, 0x57, 0xA6, 0x5A, 0xA6, 0x4F, /* 0x0C-0x0F */ + 0xA6, 0x52, 0xA6, 0x56, 0xA6, 0x5C, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xCA, 0x7E, 0xCA, 0x7B, 0x00, 0x00, 0xA7, 0x67, /* 0x18-0x1B */ + 0xCA, 0x7C, 0xA7, 0x5B, 0xA7, 0x5D, 0xA7, 0x75, /* 0x1C-0x1F */ + 0xA7, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xCA, 0xA5, 0xCA, 0x7D, 0xA7, 0x5F, 0xA7, 0x61, /* 0x24-0x27 */ + 0xCA, 0xA4, 0xA7, 0x68, 0xCA, 0x78, 0xA7, 0x74, /* 0x28-0x2B */ + 0xA7, 0x76, 0xA7, 0x5C, 0xA7, 0x6D, 0x00, 0x00, /* 0x2C-0x2F */ + 0xCA, 0x76, 0xA7, 0x73, 0x00, 0x00, 0xA7, 0x64, /* 0x30-0x33 */ + 0x00, 0x00, 0xA7, 0x6E, 0xA7, 0x6F, 0xCA, 0x77, /* 0x34-0x37 */ + 0xA7, 0x6C, 0xA7, 0x6A, 0x00, 0x00, 0xA7, 0x6B, /* 0x38-0x3B */ + 0xA7, 0x71, 0xCA, 0xA1, 0xA7, 0x5E, 0x00, 0x00, /* 0x3C-0x3F */ + 0xA7, 0x72, 0xCA, 0xA3, 0xA7, 0x66, 0xA7, 0x63, /* 0x40-0x43 */ + 0x00, 0x00, 0xCA, 0x7A, 0xA7, 0x62, 0xCA, 0xA6, /* 0x44-0x47 */ + 0xA7, 0x65, 0x00, 0x00, 0xA7, 0x69, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0x60, 0xCA, 0xA2, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xCA, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xCB, 0xEB, 0xCB, 0xEA, 0xA9, 0x4F, 0xCB, 0xED, /* 0x60-0x63 */ + 0xCB, 0xEF, 0xCB, 0xE4, 0xCB, 0xE7, 0xCB, 0xEE, /* 0x64-0x67 */ + 0xA9, 0x50, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xE1, /* 0x68-0x6B */ + 0xCB, 0xE5, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xE9, /* 0x6C-0x6F */ + 0xCE, 0x49, 0xA9, 0x4B, 0xCE, 0x4D, 0xA8, 0xFD, /* 0x70-0x73 */ + 0xCB, 0xE6, 0xA8, 0xFE, 0xA9, 0x4C, 0xA9, 0x45, /* 0x74-0x77 */ + 0xA9, 0x41, 0x00, 0x00, 0xCB, 0xE2, 0xA9, 0x44, /* 0x78-0x7B */ + 0xA9, 0x49, 0xA9, 0x52, 0xCB, 0xE3, 0xCB, 0xDC, /* 0x7C-0x7F */ + + 0xA9, 0x43, 0xCB, 0xDD, 0xCB, 0xDF, 0x00, 0x00, /* 0x80-0x83 */ + 0xA9, 0x46, 0x00, 0x00, 0xA9, 0x48, 0xCB, 0xDB, /* 0x84-0x87 */ + 0xCB, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xA9, 0x51, /* 0x88-0x8B */ + 0xA9, 0x4D, 0xCB, 0xE8, 0xA9, 0x53, 0x00, 0x00, /* 0x8C-0x8F */ + 0xA9, 0x4A, 0xCB, 0xDE, 0xA9, 0x47, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xA9, 0x42, 0xA9, 0x40, 0x00, 0x00, /* 0x94-0x97 */ + 0xCB, 0xEC, 0x00, 0x00, 0xA9, 0x4E, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCE, 0x48, 0xCD, 0xFB, 0xCE, 0x4B, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xCD, 0xFD, 0xAB, 0x78, 0xAB, 0xA8, /* 0xA4-0xA7 */ + 0xAB, 0x74, 0xAB, 0xA7, 0xAB, 0x7D, 0xAB, 0xA4, /* 0xA8-0xAB */ + 0xAB, 0x72, 0xCD, 0xFC, 0xCE, 0x43, 0xAB, 0xA3, /* 0xAC-0xAF */ + 0xCE, 0x4F, 0xAB, 0xA5, 0x00, 0x00, 0xAB, 0x79, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0x45, 0xCE, 0x42, /* 0xB4-0xB7 */ + 0xAB, 0x77, 0x00, 0x00, 0xCD, 0xFA, 0xAB, 0xA6, /* 0xB8-0xBB */ + 0xCE, 0x4A, 0xAB, 0x7C, 0xCE, 0x4C, 0xAB, 0xA9, /* 0xBC-0xBF */ + 0xAB, 0x73, 0xAB, 0x7E, 0xAB, 0x7B, 0xCE, 0x40, /* 0xC0-0xC3 */ + 0xAB, 0xA1, 0xCE, 0x46, 0xCE, 0x47, 0xAB, 0x7A, /* 0xC4-0xC7 */ + 0xAB, 0xA2, 0xAB, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0x75, 0xCD, 0xFE, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0x44, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0x4E, 0x00, 0x00, /* 0xDC-0xDF */ + 0xD1, 0x44, 0xAD, 0xFB, 0xD0, 0xF1, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xD0, 0xF6, 0xAD, 0xF4, 0xAE, 0x40, 0xD0, 0xF4, /* 0xE4-0xE7 */ + 0xAD, 0xEF, 0xAD, 0xF9, 0xAD, 0xFE, 0xD0, 0xFB, /* 0xE8-0xEB */ + 0x00, 0x00, 0xAD, 0xFA, 0xAD, 0xFD, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xD0, 0xFE, 0xAD, 0xF5, 0xD0, 0xF5, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x42, /* 0xF4-0xF7 */ + 0xD1, 0x43, 0x00, 0x00, 0xAD, 0xF7, 0xD1, 0x41, /* 0xF8-0xFB */ + 0xAD, 0xF3, 0xAE, 0x43, 0x00, 0x00, 0xD0, 0xF8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_55[512] = { + 0x00, 0x00, 0xAD, 0xF1, 0x00, 0x00, 0xD1, 0x46, /* 0x00-0x03 */ + 0xD0, 0xF9, 0xD0, 0xFD, 0xAD, 0xF6, 0xAE, 0x42, /* 0x04-0x07 */ + 0xD0, 0xFA, 0xAD, 0xFC, 0xD1, 0x40, 0xD1, 0x47, /* 0x08-0x0B */ + 0xD4, 0xA1, 0x00, 0x00, 0xD1, 0x45, 0xAE, 0x44, /* 0x0C-0x0F */ + 0xAD, 0xF0, 0xD0, 0xFC, 0xD0, 0xF3, 0x00, 0x00, /* 0x10-0x13 */ + 0xAD, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xF2, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xF7, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xF0, 0xAE, 0x41, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0x77, 0x00, 0x00, /* 0x28-0x2B */ + 0xB0, 0xE4, 0xD4, 0xA7, 0xB0, 0xE2, 0xB0, 0xDF, /* 0x2C-0x2F */ + 0xD4, 0x7C, 0xB0, 0xDB, 0xD4, 0xA2, 0xB0, 0xE6, /* 0x30-0x33 */ + 0xD4, 0x76, 0xD4, 0x7B, 0xD4, 0x7A, 0xAD, 0xF2, /* 0x34-0x37 */ + 0xB0, 0xE1, 0xD4, 0xA5, 0x00, 0x00, 0xD4, 0xA8, /* 0x38-0x3B */ + 0xD4, 0x73, 0x00, 0x00, 0xB3, 0xE8, 0x00, 0x00, /* 0x3C-0x3F */ + 0xD4, 0xA9, 0xB0, 0xE7, 0x00, 0x00, 0xB0, 0xD9, /* 0x40-0x43 */ + 0xB0, 0xD6, 0xD4, 0x7E, 0xB0, 0xD3, 0x00, 0x00, /* 0x44-0x47 */ + 0xD4, 0xA6, 0x00, 0x00, 0xB0, 0xDA, 0xD4, 0xAA, /* 0x48-0x4B */ + 0x00, 0x00, 0xD4, 0x74, 0xD4, 0xA4, 0xB0, 0xDD, /* 0x4C-0x4F */ + 0xD4, 0x75, 0xD4, 0x78, 0xD4, 0x7D, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xB0, 0xDE, 0xB0, 0xDC, 0xB0, 0xE8, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xB0, 0xE3, 0x00, 0x00, 0xB0, 0xD7, 0xB1, 0xD2, /* 0x5C-0x5F */ + 0x00, 0x00, 0xB0, 0xD8, 0xD4, 0x79, 0xB0, 0xE5, /* 0x60-0x63 */ + 0xB0, 0xE0, 0xD4, 0xA3, 0xB0, 0xD5, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0xD4, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD4, 0x71, 0xD4, 0x72, 0xD8, 0x6A, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xD7, /* 0x78-0x7B */ + 0xB3, 0xDA, 0xD8, 0x75, 0xB3, 0xEE, 0xD8, 0x78, /* 0x7C-0x7F */ + + 0xB3, 0xD8, 0xD8, 0x71, 0xB3, 0xDE, 0xB3, 0xE4, /* 0x80-0x83 */ + 0xB5, 0xBD, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xE2, /* 0x84-0x87 */ + 0xD8, 0x6E, 0xB3, 0xEF, 0xB3, 0xDB, 0xB3, 0xE3, /* 0x88-0x8B */ + 0xD8, 0x76, 0xDC, 0xD7, 0xD8, 0x7B, 0xD8, 0x6F, /* 0x8C-0x8F */ + 0x00, 0x00, 0xD8, 0x66, 0xD8, 0x73, 0xD8, 0x6D, /* 0x90-0x93 */ + 0xB3, 0xE1, 0xD8, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xB3, 0xDD, 0xB3, 0xF1, 0xB3, 0xEA, 0x00, 0x00, /* 0x98-0x9B */ + 0xB3, 0xDF, 0xB3, 0xDC, 0x00, 0x00, 0xB3, 0xE7, /* 0x9C-0x9F */ + 0x00, 0x00, 0xD8, 0x7A, 0xD8, 0x6C, 0xD8, 0x72, /* 0xA0-0xA3 */ + 0xD8, 0x74, 0xD8, 0x68, 0xD8, 0x77, 0xB3, 0xD9, /* 0xA4-0xA7 */ + 0xD8, 0x67, 0x00, 0x00, 0xB3, 0xE0, 0xB3, 0xF0, /* 0xA8-0xAB */ + 0xB3, 0xEC, 0xD8, 0x69, 0xB3, 0xE6, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xB3, 0xED, 0xB3, 0xE9, 0xB3, 0xE5, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xEB, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xD5, /* 0xBC-0xBF */ + 0xDC, 0xD1, 0x00, 0x00, 0xDC, 0xE0, 0xDC, 0xCA, /* 0xC0-0xC3 */ + 0xDC, 0xD3, 0xB6, 0xE5, 0xB6, 0xE6, 0xB6, 0xDE, /* 0xC4-0xC7 */ + 0xDC, 0xDC, 0xB6, 0xE8, 0xDC, 0xCF, 0xDC, 0xCE, /* 0xC8-0xCB */ + 0xDC, 0xCC, 0xDC, 0xDE, 0xB6, 0xDC, 0xDC, 0xD8, /* 0xCC-0xCF */ + 0xDC, 0xCD, 0xB6, 0xDF, 0xDC, 0xD6, 0xB6, 0xDA, /* 0xD0-0xD3 */ + 0xDC, 0xD2, 0xDC, 0xD9, 0xDC, 0xDB, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xDC, 0xDF, 0xB6, 0xE3, 0xDC, 0xCB, /* 0xD8-0xDB */ + 0xB6, 0xDD, 0xDC, 0xD0, 0x00, 0x00, 0xB6, 0xD8, /* 0xDC-0xDF */ + 0x00, 0x00, 0xB6, 0xE4, 0xDC, 0xDA, 0xB6, 0xE0, /* 0xE0-0xE3 */ + 0xB6, 0xE1, 0xB6, 0xE7, 0xB6, 0xDB, 0xA2, 0x5F, /* 0xE4-0xE7 */ + 0xB6, 0xD9, 0xDC, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xE2, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xDC, 0xDD, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0xCD, 0xB9, 0xC8, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE1, 0x55, 0xE1, 0x51, 0x00, 0x00, /* 0xF8-0xFB */ + 0xE1, 0x4B, 0xB9, 0xC2, 0xB9, 0xBE, 0xE1, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_56[512] = { + 0xB9, 0xBF, 0xE1, 0x4E, 0xE1, 0x50, 0x00, 0x00, /* 0x00-0x03 */ + 0xE1, 0x53, 0x00, 0x00, 0xB9, 0xC4, 0x00, 0x00, /* 0x04-0x07 */ + 0xB9, 0xCB, 0xB9, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xE1, 0x49, 0xB9, 0xC6, 0xB9, 0xC7, 0xE1, 0x4C, /* 0x0C-0x0F */ + 0xB9, 0xCC, 0x00, 0x00, 0xE1, 0x4A, 0xE1, 0x4F, /* 0x10-0x13 */ + 0xB9, 0xC3, 0xE1, 0x48, 0xB9, 0xC9, 0xB9, 0xC1, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0xC0, /* 0x18-0x1B */ + 0xE1, 0x4D, 0xE1, 0x52, 0x00, 0x00, 0xB9, 0xCA, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x47, /* 0x24-0x27 */ + 0x00, 0x00, 0xBC, 0x4D, 0xE5, 0x47, 0x00, 0x00, /* 0x28-0x2B */ + 0xE5, 0x44, 0x00, 0x00, 0xBC, 0x47, 0xBC, 0x53, /* 0x2C-0x2F */ + 0xBC, 0x54, 0x00, 0x00, 0xBC, 0x4A, 0xE5, 0x42, /* 0x30-0x33 */ + 0xBC, 0x4C, 0xE4, 0xF9, 0xBC, 0x52, 0x00, 0x00, /* 0x34-0x37 */ + 0xE5, 0x46, 0xBC, 0x49, 0xE5, 0x48, 0xBC, 0x48, /* 0x38-0x3B */ + 0x00, 0x00, 0xE5, 0x43, 0xE5, 0x45, 0xBC, 0x4B, /* 0x3C-0x3F */ + 0xE5, 0x41, 0xE4, 0xFA, 0xE4, 0xF7, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xD8, 0x6B, 0xE4, 0xFD, 0x00, 0x00, /* 0x44-0x47 */ + 0xE4, 0xF6, 0xE4, 0xFC, 0xE4, 0xFB, 0x00, 0x00, /* 0x48-0x4B */ + 0xE4, 0xF8, 0x00, 0x00, 0xBC, 0x4F, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0x4E, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0x50, /* 0x54-0x57 */ + 0xE4, 0xFE, 0xBE, 0xB2, 0xE5, 0x40, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x45, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE8, 0xFD, 0x00, 0x00, 0xBE, 0xBE, 0xE9, 0x42, /* 0x60-0x63 */ + 0xBE, 0xB6, 0xBE, 0xBA, 0xE9, 0x41, 0x00, 0x00, /* 0x64-0x67 */ + 0xBE, 0xB9, 0xBE, 0xB5, 0xBE, 0xB8, 0xBE, 0xB3, /* 0x68-0x6B */ + 0xBE, 0xBD, 0xE9, 0x43, 0xE8, 0xFE, 0xBE, 0xBC, /* 0x6C-0x6F */ + 0xE8, 0xFC, 0xBE, 0xBB, 0xE9, 0x44, 0xE9, 0x40, /* 0x70-0x73 */ + 0xBC, 0x51, 0x00, 0x00, 0xBE, 0xBF, 0xE9, 0x46, /* 0x74-0x77 */ + 0xBE, 0xB7, 0xBE, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xC6, 0xEC, 0xC8, /* 0x7C-0x7F */ + + 0xC0, 0x7B, 0xEC, 0xC9, 0xEC, 0xC7, 0xEC, 0xC5, /* 0x80-0x83 */ + 0xEC, 0xC4, 0xC0, 0x7D, 0xEC, 0xC3, 0xC0, 0x7E, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xEC, 0xC1, 0xEC, 0xC2, 0xC0, 0x7A, 0xC0, 0xA1, /* 0x8C-0x8F */ + 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xC0, /* 0x90-0x93 */ + 0x00, 0x00, 0xC2, 0x50, 0x00, 0x00, 0xEF, 0xBC, /* 0x94-0x97 */ + 0xEF, 0xBA, 0xEF, 0xBF, 0xEF, 0xBD, 0x00, 0x00, /* 0x98-0x9B */ + 0xEF, 0xBB, 0xEF, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xC3, 0x60, 0xF1, 0xF2, 0xF1, 0xF3, /* 0xA4-0xA7 */ + 0xC4, 0x56, 0x00, 0x00, 0xF1, 0xF4, 0xF1, 0xF0, /* 0xA8-0xAB */ + 0xF1, 0xF5, 0xF1, 0xF1, 0xC2, 0x51, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFE, 0xF4, 0x41, /* 0xB0-0xB3 */ + 0xC4, 0x59, 0xF4, 0x40, 0xC4, 0x58, 0xC4, 0x57, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xC4, 0x5A, 0xF5, 0xC5, 0xF5, 0xC6, 0x00, 0x00, /* 0xBC-0xBF */ + 0xC4, 0xDA, 0xC4, 0xD9, 0xC4, 0xDB, 0xF5, 0xC4, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xF6, 0xD8, 0xF6, 0xD7, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xC5, 0x6D, 0xC5, 0x6F, 0xC5, 0x6E, 0xF6, 0xD9, /* 0xC8-0xCB */ + 0xC5, 0xC8, 0xF8, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xC5, 0xF1, 0x00, 0x00, 0xF8, 0xA5, /* 0xD0-0xD3 */ + 0xF8, 0xEE, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x49, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xA5, 0x7D, 0xA5, 0x7C, /* 0xD8-0xDB */ + 0x00, 0x00, 0xA6, 0x5F, 0xA6, 0x5E, 0xC9, 0xC7, /* 0xDC-0xDF */ + 0xA6, 0x5D, 0xC9, 0xC6, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xA7, 0x79, 0xCA, 0xA9, 0x00, 0x00, 0xCA, 0xA8, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0x77, 0xA7, 0x7A, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xA7, 0x00, 0x00, /* 0xEC-0xEF */ + 0xA7, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xF0, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xCB, 0xF1, 0xA9, 0x54, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xAA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_57[512] = { + 0x00, 0x00, 0xD1, 0x48, 0xD1, 0x49, 0xAE, 0x45, /* 0x00-0x03 */ + 0xAE, 0x46, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xAC, /* 0x04-0x07 */ + 0xB0, 0xE9, 0xB0, 0xEB, 0xD4, 0xAB, 0xB0, 0xEA, /* 0x08-0x0B */ + 0xD8, 0x7C, 0xB3, 0xF2, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xB6, 0xE9, 0xB6, 0xEA, /* 0x10-0x13 */ + 0xDC, 0xE1, 0x00, 0x00, 0xB9, 0xCF, 0x00, 0x00, /* 0x14-0x17 */ + 0xB9, 0xCE, 0x00, 0x00, 0xE5, 0x49, 0xE9, 0x48, /* 0x18-0x1B */ + 0xE9, 0x47, 0x00, 0x00, 0xF9, 0x6B, 0xA4, 0x67, /* 0x1C-0x1F */ + 0xC9, 0x59, 0x00, 0x00, 0xC9, 0x6E, 0xC9, 0x6F, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xA6, 0x62, 0xA6, 0x66, 0xC9, 0xC9, 0x00, 0x00, /* 0x28-0x2B */ + 0xA6, 0x64, 0xA6, 0x63, 0xC9, 0xC8, 0xA6, 0x65, /* 0x2C-0x2F */ + 0xA6, 0x61, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x60, /* 0x30-0x33 */ + 0xC9, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xA6, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0xA3, 0x00, 0x00, /* 0x3C-0x3F */ + 0xA7, 0x7D, 0xCA, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xCA, 0xAB, 0x00, 0x00, 0xA7, 0xA1, /* 0x44-0x47 */ + 0x00, 0x00, 0xCA, 0xAD, 0xA7, 0x7B, 0xCA, 0xAE, /* 0x48-0x4B */ + 0xCA, 0xAC, 0xA7, 0x7E, 0xA7, 0xA2, 0xA7, 0xA5, /* 0x4C-0x4F */ + 0xA7, 0xA4, 0xA7, 0x7C, 0xCA, 0xAF, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xA9, 0x59, 0xCB, 0xFE, 0x00, 0x00, /* 0x60-0x63 */ + 0xA9, 0x5B, 0x00, 0x00, 0xA9, 0x5A, 0x00, 0x00, /* 0x64-0x67 */ + 0xCC, 0x40, 0xA9, 0x58, 0xA9, 0x57, 0xCB, 0xF5, /* 0x68-0x6B */ + 0x00, 0x00, 0xCB, 0xF4, 0x00, 0x00, 0xCB, 0xF2, /* 0x6C-0x6F */ + 0xCB, 0xF7, 0xCB, 0xF6, 0xCB, 0xF3, 0xCB, 0xFC, /* 0x70-0x73 */ + 0xCB, 0xFD, 0xCB, 0xFA, 0xCB, 0xF8, 0xA9, 0x56, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xFB, /* 0x78-0x7B */ + 0xA9, 0x5C, 0xCC, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xCB, 0xF9, 0x00, 0x00, 0xAB, 0xAB, 0xA9, 0x55, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xAC, /* 0x88-0x8B */ + 0xCE, 0x54, 0x00, 0x00, 0x00, 0x00, 0xCE, 0x5A, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xB2, /* 0x90-0x93 */ + 0xCE, 0x58, 0xCE, 0x5E, 0x00, 0x00, 0xCE, 0x55, /* 0x94-0x97 */ + 0xCE, 0x59, 0xCE, 0x5B, 0xCE, 0x5D, 0xCE, 0x57, /* 0x98-0x9B */ + 0x00, 0x00, 0xCE, 0x56, 0xCE, 0x51, 0xCE, 0x52, /* 0x9C-0x9F */ + 0xAB, 0xAD, 0x00, 0x00, 0xAB, 0xAF, 0xAB, 0xAE, /* 0xA0-0xA3 */ + 0xCE, 0x53, 0xCE, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0xB1, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xCE, 0x50, 0xD1, 0x53, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xD1, 0x52, 0xD1, 0x57, 0xD1, 0x4E, 0x00, 0x00, /* 0xB8-0xBB */ + 0xD1, 0x51, 0xD1, 0x50, 0x00, 0x00, 0xD1, 0x54, /* 0xBC-0xBF */ + 0x00, 0x00, 0xD1, 0x58, 0xAE, 0x47, 0xAE, 0x4A, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0x4F, 0xD1, 0x55, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAE, 0x49, /* 0xC8-0xCB */ + 0xD1, 0x4A, 0x00, 0x00, 0xAB, 0xB0, 0xD4, 0xBA, /* 0xCC-0xCF */ + 0xD1, 0x56, 0x00, 0x00, 0xD1, 0x4D, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xAE, 0x48, 0xD1, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD4, 0xB1, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xEC, /* 0xDC-0xDF */ + 0xB0, 0xF0, 0xD4, 0xC1, 0xD4, 0xAF, 0xD4, 0xBD, /* 0xE0-0xE3 */ + 0xB0, 0xF1, 0xD4, 0xBF, 0x00, 0x00, 0xD4, 0xC5, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xD4, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xD4, 0xC0, 0xD4, 0xB4, 0xD4, 0xBC, 0x00, 0x00, /* 0xEC-0xEF */ + 0xD4, 0xCA, 0xD4, 0xC8, 0xD4, 0xBE, 0xD4, 0xB9, /* 0xF0-0xF3 */ + 0xD4, 0xB2, 0xD8, 0xA6, 0xD4, 0xB0, 0xB0, 0xF5, /* 0xF4-0xF7 */ + 0xD4, 0xB7, 0xB0, 0xF6, 0xB0, 0xF2, 0xD4, 0xAD, /* 0xF8-0xFB */ + 0xD4, 0xC3, 0xD4, 0xB5, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_58[512] = { + 0xD4, 0xB3, 0xD4, 0xC6, 0xB0, 0xF3, 0x00, 0x00, /* 0x00-0x03 */ + 0xD4, 0xCC, 0xB0, 0xED, 0xB0, 0xEF, 0xD4, 0xBB, /* 0x04-0x07 */ + 0xD4, 0xB6, 0xAE, 0x4B, 0xB0, 0xEE, 0xD4, 0xB8, /* 0x08-0x0B */ + 0xD4, 0xC7, 0xD4, 0xCB, 0xD4, 0xC2, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD4, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xD4, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xD8, 0xA1, 0x00, 0x00, 0xD8, 0xAA, /* 0x18-0x1B */ + 0xD8, 0xA9, 0xB3, 0xFA, 0xD8, 0xA2, 0x00, 0x00, /* 0x1C-0x1F */ + 0xB3, 0xFB, 0xB3, 0xF9, 0x00, 0x00, 0xD8, 0xA4, /* 0x20-0x23 */ + 0xB3, 0xF6, 0xD8, 0xA8, 0x00, 0x00, 0xD8, 0xA3, /* 0x24-0x27 */ + 0xD8, 0xA5, 0xD8, 0x7D, 0xB3, 0xF4, 0x00, 0x00, /* 0x28-0x2B */ + 0xD8, 0xB2, 0xD8, 0xB1, 0xD8, 0xAE, 0xB3, 0xF3, /* 0x2C-0x2F */ + 0xB3, 0xF7, 0xB3, 0xF8, 0xD1, 0x4B, 0xD8, 0xAB, /* 0x30-0x33 */ + 0xB3, 0xF5, 0xB0, 0xF4, 0xD8, 0xAD, 0xD8, 0x7E, /* 0x34-0x37 */ + 0xD8, 0xB0, 0xD8, 0xAF, 0x00, 0x00, 0xD8, 0xB3, /* 0x38-0x3B */ + 0x00, 0x00, 0xDC, 0xEF, 0x00, 0x00, 0xD8, 0xAC, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xD8, 0xA7, 0xDC, 0xE7, 0xB6, 0xF4, 0xB6, 0xF7, /* 0x48-0x4B */ + 0xB6, 0xF2, 0xDC, 0xE6, 0xDC, 0xEA, 0xDC, 0xE5, /* 0x4C-0x4F */ + 0x00, 0x00, 0xB6, 0xEC, 0xB6, 0xF6, 0xDC, 0xE2, /* 0x50-0x53 */ + 0xB6, 0xF0, 0xDC, 0xE9, 0x00, 0x00, 0xB6, 0xEE, /* 0x54-0x57 */ + 0xB6, 0xED, 0xDC, 0xEC, 0xB6, 0xEF, 0xDC, 0xEE, /* 0x58-0x5B */ + 0x00, 0x00, 0xDC, 0xEB, 0xB6, 0xEB, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xB6, 0xF5, 0xDC, 0xF0, /* 0x60-0x63 */ + 0xDC, 0xE4, 0xDC, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xDC, 0xE3, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xF1, /* 0x68-0x6B */ + 0x00, 0x00, 0xB6, 0xF3, 0x00, 0x00, 0xDC, 0xE8, /* 0x6C-0x6F */ + 0x00, 0x00, 0xDC, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE1, 0x5D, 0xB9, 0xD0, 0xE1, 0x63, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xB9, 0xD5, 0xE1, 0x5F, 0xE1, 0x66, /* 0x78-0x7B */ + 0xE1, 0x57, 0xB9, 0xD7, 0xB9, 0xD1, 0xE1, 0x5C, /* 0x7C-0x7F */ + + 0xBC, 0x55, 0xE1, 0x5B, 0xE1, 0x64, 0xB9, 0xD2, /* 0x80-0x83 */ + 0x00, 0x00, 0xB9, 0xD6, 0xE1, 0x5A, 0xE1, 0x60, /* 0x84-0x87 */ + 0xE1, 0x65, 0xE1, 0x56, 0xB9, 0xD4, 0xE1, 0x5E, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0x62, 0xE1, 0x68, /* 0x8C-0x8F */ + 0xE1, 0x58, 0xE1, 0x61, 0x00, 0x00, 0xB9, 0xD3, /* 0x90-0x93 */ + 0xE1, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xE1, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xBC, 0x59, 0xE5, 0x4B, 0xBC, 0x57, 0xBC, 0x56, /* 0x9C-0x9F */ + 0xE5, 0x4D, 0xE5, 0x52, 0x00, 0x00, 0xE5, 0x4E, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xE5, 0x51, 0xBC, 0x5C, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xBE, 0xA5, 0xBC, 0x5B, 0x00, 0x00, 0xE5, 0x4A, /* 0xA8-0xAB */ + 0xE5, 0x50, 0x00, 0x00, 0xBC, 0x5A, 0xE5, 0x4F, /* 0xAC-0xAF */ + 0x00, 0x00, 0xE5, 0x4C, 0x00, 0x00, 0xBC, 0x58, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x4D, 0xF9, 0xD9, /* 0xB8-0xBB */ + 0xE9, 0x4F, 0xE9, 0x4A, 0xBE, 0xC1, 0xE9, 0x4C, /* 0xBC-0xBF */ + 0x00, 0x00, 0xBE, 0xC0, 0xE9, 0x4E, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xBE, 0xC3, 0xE9, 0x50, 0xBE, 0xC2, /* 0xC4-0xC7 */ + 0xE9, 0x49, 0xE9, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xA5, 0xEC, 0xCC, /* 0xCC-0xCF */ + 0x00, 0x00, 0xC0, 0xA4, 0xEC, 0xCD, 0xC0, 0xA3, /* 0xD0-0xD3 */ + 0xEC, 0xCB, 0xC0, 0xA2, 0xEC, 0xCA, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xC2, 0x53, 0xC2, 0x52, 0xF1, 0xF6, 0xF1, 0xF8, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF1, 0xF7, 0xC3, 0x61, 0xC3, 0x62, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0x63, 0xF4, 0x42, /* 0xE0-0xE3 */ + 0xC4, 0x5B, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xD3, /* 0xE4-0xE7 */ + 0xF7, 0xD2, 0xC5, 0xF2, 0x00, 0x00, 0xA4, 0x68, /* 0xE8-0xEB */ + 0xA4, 0xD0, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xA7, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xCE, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xB3, 0xFC, 0xB3, 0xFD, 0x00, 0x00, /* 0xF8-0xFB */ + 0xDC, 0xF2, 0xB9, 0xD8, 0xE1, 0x69, 0xE5, 0x53, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_59[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x5A, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xB0, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xCC, 0x42, 0xCE, 0x60, 0xD1, 0x59, 0xAE, 0x4C, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xF9, 0x00, 0x00, /* 0x10-0x13 */ + 0xC4, 0xDC, 0xA4, 0x69, 0xA5, 0x7E, 0xC9, 0x70, /* 0x14-0x17 */ + 0x00, 0x00, 0xA6, 0x67, 0xA6, 0x68, 0x00, 0x00, /* 0x18-0x1B */ + 0xA9, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xB0, 0xF7, 0x00, 0x00, 0xB9, 0xDA, 0x00, 0x00, /* 0x20-0x23 */ + 0xB9, 0xDB, 0xB9, 0xD9, 0x00, 0x00, 0xA4, 0x6A, /* 0x24-0x27 */ + 0x00, 0x00, 0xA4, 0xD1, 0xA4, 0xD3, 0xA4, 0xD2, /* 0x28-0x2B */ + 0xC9, 0x5B, 0xA4, 0xD4, 0xA5, 0xA1, 0xC9, 0x71, /* 0x2C-0x2F */ + 0x00, 0x00, 0xA5, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0x69, /* 0x34-0x37 */ + 0xA6, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xC9, 0xCB, 0x00, 0x00, 0xA7, 0xA8, 0x00, 0x00, /* 0x3C-0x3F */ + 0xCA, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xA9, 0x61, 0xCC, 0x43, 0x00, 0x00, 0xA9, 0x5F, /* 0x44-0x47 */ + 0xA9, 0x60, 0xA9, 0x5E, 0xD1, 0x5A, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0xB6, 0xAB, 0xB5, /* 0x4C-0x4F */ + 0xAB, 0xB7, 0xAB, 0xB4, 0x00, 0x00, 0xCE, 0x61, /* 0x50-0x53 */ + 0xA9, 0x62, 0xAB, 0xB3, 0x00, 0x00, 0xAE, 0x4D, /* 0x54-0x57 */ + 0xAE, 0x4E, 0x00, 0x00, 0xAE, 0x4F, 0x00, 0x00, /* 0x58-0x5B */ + 0xD4, 0xCD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xB3, 0xFE, 0xD8, 0xB4, 0xB0, 0xF8, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xF8, /* 0x64-0x67 */ + 0x00, 0x00, 0xB9, 0xDD, 0xB9, 0xDC, 0xE1, 0x6A, /* 0x68-0x6B */ + 0x00, 0x00, 0xBC, 0x5D, 0xBE, 0xC4, 0x00, 0x00, /* 0x6C-0x6F */ + 0xEF, 0xC0, 0xF6, 0xDA, 0xF7, 0xD4, 0xA4, 0x6B, /* 0x70-0x73 */ + 0xA5, 0xA3, 0x00, 0x00, 0xA5, 0xA4, 0xC9, 0xD1, /* 0x74-0x77 */ + 0xA6, 0x6C, 0xA6, 0x6F, 0x00, 0x00, 0xC9, 0xCF, /* 0x78-0x7B */ + 0xC9, 0xCD, 0xA6, 0x6E, 0xC9, 0xD0, 0xC9, 0xD2, /* 0x7C-0x7F */ + + 0xC9, 0xCC, 0xA6, 0x71, 0xA6, 0x70, 0xA6, 0x6D, /* 0x80-0x83 */ + 0xA6, 0x6B, 0xC9, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0xB3, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xA7, 0xB0, 0xCA, 0xB6, 0xCA, 0xB9, /* 0x8C-0x8F */ + 0xCA, 0xB8, 0x00, 0x00, 0xA7, 0xAA, 0xA7, 0xB2, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0xAF, 0xCA, 0xB5, /* 0x94-0x97 */ + 0xCA, 0xB3, 0xA7, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xA7, 0xA9, 0xA7, 0xAC, 0x00, 0x00, /* 0x9C-0x9F */ + 0xCA, 0xB4, 0xCA, 0xBB, 0xCA, 0xB7, 0xA7, 0xAD, /* 0xA0-0xA3 */ + 0xA7, 0xB1, 0xA7, 0xB4, 0xCA, 0xB2, 0xCA, 0xBA, /* 0xA4-0xA7 */ + 0xA7, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0x67, 0xA9, 0x6F, /* 0xAC-0xAF */ + 0x00, 0x00, 0xCC, 0x4F, 0xCC, 0x48, 0xA9, 0x70, /* 0xB0-0xB3 */ + 0xCC, 0x53, 0xCC, 0x44, 0xCC, 0x4B, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xA9, 0x66, 0xCC, 0x45, 0xA9, 0x64, /* 0xB8-0xBB */ + 0xCC, 0x4C, 0xCC, 0x50, 0xA9, 0x63, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCC, 0x51, 0xCC, 0x4A, 0x00, 0x00, 0xCC, 0x4D, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xA9, 0x72, 0xA9, 0x69, 0xCC, 0x54, /* 0xC4-0xC7 */ + 0xCC, 0x52, 0x00, 0x00, 0xA9, 0x6E, 0xA9, 0x6C, /* 0xC8-0xCB */ + 0xCC, 0x49, 0xA9, 0x6B, 0xCC, 0x47, 0xCC, 0x46, /* 0xCC-0xCF */ + 0xA9, 0x6A, 0xA9, 0x68, 0xA9, 0x71, 0xA9, 0x6D, /* 0xD0-0xD3 */ + 0xA9, 0x65, 0x00, 0x00, 0xCC, 0x4E, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xAB, 0xB9, 0x00, 0x00, 0xAB, 0xC0, 0xCE, 0x6F, /* 0xD8-0xDB */ + 0xAB, 0xB8, 0xCE, 0x67, 0xCE, 0x63, 0x00, 0x00, /* 0xDC-0xDF */ + 0xCE, 0x73, 0xCE, 0x62, 0x00, 0x00, 0xAB, 0xBB, /* 0xE0-0xE3 */ + 0xCE, 0x6C, 0xAB, 0xBE, 0xAB, 0xC1, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xAB, 0xBC, 0xCE, 0x70, 0xAB, 0xBF, 0x00, 0x00, /* 0xE8-0xEB */ + 0xAE, 0x56, 0xCE, 0x76, 0xCE, 0x64, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xCE, 0x66, 0xCE, 0x6D, 0xCE, 0x71, /* 0xF0-0xF3 */ + 0xCE, 0x75, 0xCE, 0x72, 0xCE, 0x6B, 0xCE, 0x6E, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0x68, 0xAB, 0xC3, /* 0xF8-0xFB */ + 0xCE, 0x6A, 0xCE, 0x69, 0xCE, 0x74, 0xAB, 0xBA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5A[512] = { + 0xCE, 0x65, 0xAB, 0xC2, 0x00, 0x00, 0xAB, 0xBD, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xAE, 0x5C, 0xD1, 0x62, 0x00, 0x00, /* 0x08-0x0B */ + 0xAE, 0x5B, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x60, /* 0x0C-0x0F */ + 0x00, 0x00, 0xAE, 0x50, 0x00, 0x00, 0xAE, 0x55, /* 0x10-0x13 */ + 0x00, 0x00, 0xD1, 0x5F, 0xD1, 0x5C, 0xD1, 0x61, /* 0x14-0x17 */ + 0xAE, 0x51, 0xD1, 0x5B, 0x00, 0x00, 0xAE, 0x54, /* 0x18-0x1B */ + 0xAE, 0x52, 0x00, 0x00, 0xD1, 0x63, 0xAE, 0x53, /* 0x1C-0x1F */ + 0xAE, 0x57, 0x00, 0x00, 0x00, 0x00, 0xAE, 0x58, /* 0x20-0x23 */ + 0x00, 0x00, 0xAE, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xAE, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD1, 0x5D, 0xD1, 0x5E, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0x64, /* 0x30-0x33 */ + 0x00, 0x00, 0xD4, 0xD4, 0xB0, 0xF9, 0xD8, 0xC2, /* 0x34-0x37 */ + 0xD4, 0xD3, 0xD4, 0xE6, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xB1, 0x40, 0x00, 0x00, 0xD4, 0xE4, 0x00, 0x00, /* 0x3C-0x3F */ + 0xB0, 0xFE, 0xB0, 0xFA, 0xD4, 0xED, 0xD4, 0xDD, /* 0x40-0x43 */ + 0xD4, 0xE0, 0x00, 0x00, 0xB1, 0x43, 0xD4, 0xEA, /* 0x44-0x47 */ + 0xD4, 0xE2, 0xB0, 0xFB, 0xB1, 0x44, 0x00, 0x00, /* 0x48-0x4B */ + 0xD4, 0xE7, 0xD4, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xD4, 0xD6, 0xD4, 0xEB, 0xD4, 0xDF, 0xD4, 0xDA, /* 0x50-0x53 */ + 0x00, 0x00, 0xD4, 0xD0, 0xD4, 0xEC, 0xD4, 0xDC, /* 0x54-0x57 */ + 0xD4, 0xCF, 0x00, 0x00, 0xB1, 0x42, 0xD4, 0xE1, /* 0x58-0x5B */ + 0xD4, 0xEE, 0xD4, 0xDE, 0xD4, 0xD2, 0xD4, 0xD7, /* 0x5C-0x5F */ + 0xD4, 0xCE, 0x00, 0x00, 0xB1, 0x41, 0x00, 0x00, /* 0x60-0x63 */ + 0xD4, 0xDB, 0xD4, 0xD8, 0xB0, 0xFC, 0xD4, 0xD1, /* 0x64-0x67 */ + 0x00, 0x00, 0xD4, 0xE9, 0xB0, 0xFD, 0x00, 0x00, /* 0x68-0x6B */ + 0xD4, 0xD9, 0xD4, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xD4, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x40, /* 0x74-0x77 */ + 0xD8, 0xBB, 0x00, 0x00, 0xD8, 0xB8, 0xD8, 0xC9, /* 0x78-0x7B */ + 0xD8, 0xBD, 0xD8, 0xCA, 0x00, 0x00, 0xB4, 0x42, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0xC6, /* 0x80-0x83 */ + 0xD8, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xC4, 0xD8, 0xC7, /* 0x88-0x8B */ + 0xD8, 0xCB, 0x00, 0x00, 0xD4, 0xE3, 0xD8, 0xCD, /* 0x8C-0x8F */ + 0xDD, 0x47, 0x00, 0x00, 0xB4, 0x43, 0xD8, 0xCE, /* 0x90-0x93 */ + 0xD8, 0xB6, 0xD8, 0xC0, 0x00, 0x00, 0xD8, 0xC5, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xB4, 0x41, 0xB4, 0x44, /* 0x98-0x9B */ + 0xD8, 0xCC, 0xD8, 0xCF, 0xD8, 0xBA, 0xD8, 0xB7, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xB9, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xD8, 0xBE, 0xD8, 0xBC, 0xB4, 0x45, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xD8, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xD8, 0xBF, 0x00, 0x00, 0xD8, 0xC1, 0xD8, 0xB5, /* 0xAC-0xAF */ + 0xDC, 0xFA, 0xDC, 0xF8, 0xB7, 0x42, 0xB7, 0x40, /* 0xB0-0xB3 */ + 0xDD, 0x43, 0xDC, 0xF9, 0xDD, 0x44, 0xDD, 0x40, /* 0xB4-0xB7 */ + 0xDC, 0xF7, 0xDD, 0x46, 0xDC, 0xF6, 0xDC, 0xFD, /* 0xB8-0xBB */ + 0xB6, 0xFE, 0xB6, 0xFD, 0xB6, 0xFC, 0xDC, 0xFB, /* 0xBC-0xBF */ + 0xDD, 0x41, 0xB6, 0xF9, 0xB7, 0x41, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xDC, 0xF4, 0x00, 0x00, 0xDC, 0xFE, 0xDC, 0xF3, /* 0xC4-0xC7 */ + 0xDC, 0xFC, 0xB6, 0xFA, 0xDD, 0x42, 0xDC, 0xF5, /* 0xC8-0xCB */ + 0xB6, 0xFB, 0xDD, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE1, 0x6E, 0xB9, 0xE2, 0xB9, 0xE1, /* 0xD4-0xD7 */ + 0xB9, 0xE3, 0xE1, 0x7A, 0xE1, 0x70, 0xE1, 0x76, /* 0xD8-0xDB */ + 0xE1, 0x6B, 0xE1, 0x79, 0xE1, 0x78, 0xE1, 0x7C, /* 0xDC-0xDF */ + 0xE1, 0x75, 0xB9, 0xDE, 0xE1, 0x74, 0xB9, 0xE4, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE1, 0x6D, 0xB9, 0xDF, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE1, 0x7B, 0xB9, 0xE0, 0xE1, 0x6F, 0xE1, 0x72, /* 0xE8-0xEB */ + 0xE1, 0x77, 0xE1, 0x71, 0xE1, 0x6C, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x73, /* 0xF0-0xF3 */ + 0xE5, 0x55, 0xBC, 0x61, 0xE5, 0x58, 0xE5, 0x57, /* 0xF4-0xF7 */ + 0xE5, 0x5A, 0xE5, 0x5C, 0xF9, 0xDC, 0xBC, 0x5F, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE5, 0x56, 0x00, 0x00, 0xE5, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5B[512] = { + 0x00, 0x00, 0xE5, 0x5D, 0xE5, 0x5B, 0xE5, 0x59, /* 0x00-0x03 */ + 0x00, 0x00, 0xE5, 0x5F, 0x00, 0x00, 0xE5, 0x5E, /* 0x04-0x07 */ + 0xBC, 0x63, 0xBC, 0x5E, 0x00, 0x00, 0xBC, 0x60, /* 0x08-0x0B */ + 0xBC, 0x62, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x60, /* 0x0C-0x0F */ + 0xE9, 0x57, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x56, /* 0x10-0x13 */ + 0xE9, 0x55, 0x00, 0x00, 0xE9, 0x58, 0xE9, 0x51, /* 0x14-0x17 */ + 0x00, 0x00, 0xE9, 0x52, 0xE9, 0x5A, 0xE9, 0x53, /* 0x18-0x1B */ + 0x00, 0x00, 0xBE, 0xC5, 0xE9, 0x5C, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE9, 0x5B, 0xE9, 0x54, 0x00, 0x00, 0xEC, 0xD1, /* 0x20-0x23 */ + 0xC0, 0xA8, 0xEC, 0xCF, 0xEC, 0xD4, 0xEC, 0xD3, /* 0x24-0x27 */ + 0xE9, 0x59, 0x00, 0x00, 0xC0, 0xA7, 0x00, 0x00, /* 0x28-0x2B */ + 0xEC, 0xD2, 0xEC, 0xCE, 0xEC, 0xD6, 0xEC, 0xD5, /* 0x2C-0x2F */ + 0xC0, 0xA6, 0x00, 0x00, 0xEC, 0xD0, 0x00, 0x00, /* 0x30-0x33 */ + 0xBE, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xC2, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xEF, 0xC1, 0xF1, 0xFA, 0xF1, 0xFB, 0xF1, 0xFC, /* 0x3C-0x3F */ + 0xC4, 0x5C, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x5D, /* 0x40-0x43 */ + 0x00, 0x00, 0xF4, 0x43, 0x00, 0x00, 0xF5, 0xC8, /* 0x44-0x47 */ + 0xF5, 0xC7, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xDB, /* 0x48-0x4B */ + 0xF6, 0xDC, 0xF7, 0xD5, 0xF8, 0xA7, 0x00, 0x00, /* 0x4C-0x4F */ + 0xA4, 0x6C, 0xA4, 0x6D, 0x00, 0x00, 0xA4, 0x6E, /* 0x50-0x53 */ + 0xA4, 0xD5, 0xA5, 0xA5, 0xC9, 0xD3, 0xA6, 0x72, /* 0x54-0x57 */ + 0xA6, 0x73, 0x00, 0x00, 0xA7, 0xB7, 0xA7, 0xB8, /* 0x58-0x5B */ + 0xA7, 0xB6, 0xA7, 0xB5, 0x00, 0x00, 0xA9, 0x73, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0x55, 0xA9, 0x75, /* 0x60-0x63 */ + 0xA9, 0x74, 0xCC, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xAB, 0xC4, 0x00, 0x00, 0xAE, 0x5D, /* 0x68-0x6B */ + 0xD1, 0x65, 0x00, 0x00, 0xD4, 0xF0, 0x00, 0x00, /* 0x6C-0x6F */ + 0xB1, 0x45, 0xB4, 0x47, 0xD4, 0xEF, 0xB4, 0x46, /* 0x70-0x73 */ + 0x00, 0x00, 0xB9, 0xE5, 0x00, 0x00, 0xE1, 0x7D, /* 0x74-0x77 */ + 0xBE, 0xC7, 0x00, 0x00, 0xC0, 0xA9, 0xEC, 0xD7, /* 0x78-0x7B */ + 0x00, 0x00, 0xC4, 0x5E, 0x00, 0x00, 0xC5, 0x70, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xC9, 0x72, 0x00, 0x00, 0xA5, 0xA6, /* 0x80-0x83 */ + 0xC9, 0x73, 0xA6, 0x76, 0x00, 0x00, 0xA6, 0x74, /* 0x84-0x87 */ + 0xA6, 0x75, 0xA6, 0x77, 0x00, 0x00, 0xA7, 0xBA, /* 0x88-0x8B */ + 0xA7, 0xB9, 0x00, 0x00, 0xCA, 0xBC, 0xA7, 0xBB, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xBD, 0xCC, 0x57, /* 0x90-0x93 */ + 0x00, 0x00, 0xCC, 0x58, 0x00, 0x00, 0xA9, 0x76, /* 0x94-0x97 */ + 0xA9, 0x78, 0xA9, 0x7A, 0xA9, 0x77, 0xA9, 0x7B, /* 0x98-0x9B */ + 0xA9, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0xC8, 0xAB, 0xC5, /* 0xA0-0xA3 */ + 0xAB, 0xC7, 0xAB, 0xC9, 0xAB, 0xC6, 0xD1, 0x66, /* 0xA4-0xA7 */ + 0xCE, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xD1, 0x68, 0xD1, 0x67, 0xAE, 0x63, 0x00, 0x00, /* 0xAC-0xAF */ + 0xAE, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xAE, 0x60, /* 0xB0-0xB3 */ + 0xAE, 0x62, 0xAE, 0x64, 0xAE, 0x61, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xAE, 0x66, 0xAE, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x4A, /* 0xBC-0xBF */ + 0xD4, 0xF2, 0xD4, 0xF1, 0xB1, 0x49, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xB1, 0x48, 0xB1, 0x47, 0xB1, 0x4B, 0xB1, 0x46, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0xD5, 0xD8, 0xD2, /* 0xC8-0xCB */ + 0xB4, 0x49, 0xD8, 0xD1, 0xD8, 0xD6, 0x00, 0x00, /* 0xCC-0xCF */ + 0xB4, 0x4B, 0xD8, 0xD4, 0xB4, 0x48, 0xB4, 0x4A, /* 0xD0-0xD3 */ + 0xD8, 0xD3, 0x00, 0x00, 0xDD, 0x48, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xDD, 0x49, 0xDD, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0xE6, 0xB9, 0xEE, /* 0xDC-0xDF */ + 0xE1, 0x7E, 0xB9, 0xE8, 0xB9, 0xEC, 0xE1, 0xA1, /* 0xE0-0xE3 */ + 0xB9, 0xED, 0xB9, 0xE9, 0xB9, 0xEA, 0xB9, 0xE7, /* 0xE4-0xE7 */ + 0xB9, 0xEB, 0xBC, 0x66, 0xD8, 0xD0, 0xBC, 0x67, /* 0xE8-0xEB */ + 0xBC, 0x65, 0x00, 0x00, 0xBC, 0x64, 0xE9, 0x5D, /* 0xEC-0xEF */ + 0xBE, 0xC8, 0xEC, 0xD8, 0xEC, 0xD9, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xC3, 0x64, 0xC4, 0x5F, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xA4, 0x6F, 0x00, 0x00, 0xA6, 0x78, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5C[512] = { + 0x00, 0x00, 0xAB, 0xCA, 0x00, 0x00, 0xD1, 0x69, /* 0x00-0x03 */ + 0xAE, 0x67, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x4E, /* 0x04-0x07 */ + 0xB1, 0x4D, 0xB1, 0x4C, 0xB4, 0x4C, 0xB4, 0x4D, /* 0x08-0x0B */ + 0xD8, 0xD7, 0xB9, 0xEF, 0xBE, 0xC9, 0xA4, 0x70, /* 0x0C-0x0F */ + 0xC9, 0x5C, 0xA4, 0xD6, 0xC9, 0x74, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xC9, 0xD4, 0xA6, 0x79, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0x7C, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0x4B, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0x71, 0x00, 0x00, /* 0x20-0x23 */ + 0xA4, 0xD7, 0xC9, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xCA, 0xBE, 0x00, 0x00, 0xCA, 0xBF, 0x00, 0x00, /* 0x28-0x2B */ + 0xA7, 0xBC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xD8, 0xD8, 0xB4, 0x4E, 0x00, 0x00, 0xDD, 0x4C, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xAA, /* 0x34-0x37 */ + 0xA4, 0x72, 0xA4, 0xA8, 0xA4, 0xD8, 0xC9, 0x75, /* 0x38-0x3B */ + 0xA5, 0xA7, 0x00, 0x00, 0xA7, 0xC0, 0xA7, 0xBF, /* 0x3C-0x3F */ + 0xA7, 0xBD, 0xA7, 0xBE, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xCC, 0x59, 0xA9, 0x7E, 0xA9, 0xA1, 0xCC, 0x5A, /* 0x44-0x47 */ + 0xA9, 0x7D, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xCE, /* 0x48-0x4B */ + 0xCE, 0x78, 0xAB, 0xCD, 0xAB, 0xCB, 0xAB, 0xCC, /* 0x4C-0x4F */ + 0xAE, 0x6A, 0xAE, 0x68, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xD1, 0x6B, 0xAE, 0x69, 0xD1, 0x6A, 0x00, 0x00, /* 0x54-0x57 */ + 0xAE, 0x5E, 0xD4, 0xF3, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xB1, 0x50, 0xB1, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xB1, 0x4F, 0x00, 0x00, 0xB9, 0xF0, 0xE1, 0xA2, /* 0x60-0x63 */ + 0xBC, 0x68, 0xBC, 0x69, 0x00, 0x00, 0xE5, 0x61, /* 0x64-0x67 */ + 0xC0, 0xAB, 0xEF, 0xC2, 0xEF, 0xC3, 0x00, 0x00, /* 0x68-0x6B */ + 0xC4, 0xDD, 0xF8, 0xA8, 0xC9, 0x4B, 0xA4, 0xD9, /* 0x6C-0x6F */ + 0x00, 0x00, 0xA4, 0x73, 0x00, 0x00, 0xC9, 0x77, /* 0x70-0x73 */ + 0xC9, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xA6, 0x7A, 0xC9, 0xD7, 0xC9, 0xD8, /* 0x78-0x7B */ + 0xC9, 0xD6, 0x00, 0x00, 0xC9, 0xD9, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xC7, 0x00, 0x00, /* 0x84-0x87 */ + 0xCA, 0xC2, 0xCA, 0xC4, 0xCA, 0xC6, 0xCA, 0xC3, /* 0x88-0x8B */ + 0xA7, 0xC4, 0xCA, 0xC0, 0x00, 0x00, 0xCA, 0xC1, /* 0x8C-0x8F */ + 0xA7, 0xC1, 0xA7, 0xC2, 0xCA, 0xC5, 0xCA, 0xC8, /* 0x90-0x93 */ + 0xA7, 0xC3, 0xCA, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xCC, 0x68, 0x00, 0x00, 0xCC, 0x62, /* 0x9C-0x9F */ + 0xCC, 0x5D, 0xA9, 0xA3, 0xCC, 0x65, 0xCC, 0x63, /* 0xA0-0xA3 */ + 0xCC, 0x5C, 0xCC, 0x69, 0xCC, 0x6C, 0xCC, 0x67, /* 0xA4-0xA7 */ + 0xCC, 0x60, 0xA9, 0xA5, 0xCC, 0x66, 0xA9, 0xA6, /* 0xA8-0xAB */ + 0xCC, 0x61, 0xCC, 0x64, 0xCC, 0x5B, 0xCC, 0x5F, /* 0xAC-0xAF */ + 0xCC, 0x6B, 0xA9, 0xA7, 0x00, 0x00, 0xA9, 0xA8, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xCC, 0x5E, 0xCC, 0x6A, 0xA9, 0xA2, /* 0xB4-0xB7 */ + 0xA9, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xAB, 0xCE, 0xA4, /* 0xC4-0xC7 */ + 0xCE, 0xAA, 0xCE, 0xA3, 0xCE, 0xA5, 0xCE, 0x7D, /* 0xC8-0xCB */ + 0xCE, 0x7B, 0x00, 0x00, 0xCE, 0xAC, 0xCE, 0xA9, /* 0xCC-0xCF */ + 0xCE, 0x79, 0x00, 0x00, 0xAB, 0xD0, 0xCE, 0xA7, /* 0xD0-0xD3 */ + 0xCE, 0xA8, 0x00, 0x00, 0xCE, 0xA6, 0xCE, 0x7C, /* 0xD4-0xD7 */ + 0xCE, 0x7A, 0xAB, 0xCF, 0xCE, 0xA2, 0xCE, 0x7E, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xCE, 0xA1, 0xCE, 0xAD, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xAE, 0x6F, 0x00, 0x00, 0xAE, 0x6E, 0x00, 0x00, /* 0xE8-0xEB */ + 0xD1, 0x6C, 0xAE, 0x6B, 0xD1, 0x6E, 0x00, 0x00, /* 0xEC-0xEF */ + 0xAE, 0x70, 0xD1, 0x6F, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xAE, 0x73, 0x00, 0x00, 0xAE, 0x71, 0xD1, 0x70, /* 0xF4-0xF7 */ + 0xCE, 0xAE, 0xD1, 0x72, 0x00, 0x00, 0xAE, 0x6D, /* 0xF8-0xFB */ + 0x00, 0x00, 0xAE, 0x6C, 0x00, 0x00, 0xD1, 0x6D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5D[512] = { + 0xD1, 0x71, 0xAE, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xB1, 0x53, 0xB1, 0x52, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xF5, /* 0x08-0x0B */ + 0xD4, 0xF9, 0xD4, 0xFB, 0xB1, 0x54, 0xD4, 0xFE, /* 0x0C-0x0F */ + 0x00, 0x00, 0xB1, 0x58, 0xD5, 0x41, 0x00, 0x00, /* 0x10-0x13 */ + 0xB1, 0x5A, 0x00, 0x00, 0xB1, 0x56, 0xB1, 0x5E, /* 0x14-0x17 */ + 0x00, 0x00, 0xB1, 0x5B, 0xD4, 0xF7, 0xB1, 0x55, /* 0x18-0x1B */ + 0x00, 0x00, 0xD4, 0xF6, 0xD4, 0xF4, 0xD5, 0x43, /* 0x1C-0x1F */ + 0xD4, 0xF8, 0x00, 0x00, 0xB1, 0x57, 0xD5, 0x42, /* 0x20-0x23 */ + 0xB1, 0x5C, 0xD4, 0xFD, 0xD4, 0xFC, 0xB1, 0x5D, /* 0x24-0x27 */ + 0xD4, 0xFA, 0xB1, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0x44, 0x00, 0x00, /* 0x2C-0x2F */ + 0xD5, 0x40, 0xD8, 0xE7, 0xD8, 0xEE, 0xD8, 0xE3, /* 0x30-0x33 */ + 0xB4, 0x51, 0xD8, 0xDF, 0xD8, 0xEF, 0xD8, 0xD9, /* 0x34-0x37 */ + 0xD8, 0xEC, 0xD8, 0xEA, 0xD8, 0xE4, 0x00, 0x00, /* 0x38-0x3B */ + 0xD8, 0xED, 0xD8, 0xE6, 0x00, 0x00, 0xD8, 0xDE, /* 0x3C-0x3F */ + 0xD8, 0xF0, 0xD8, 0xDC, 0xD8, 0xE9, 0xD8, 0xDA, /* 0x40-0x43 */ + 0x00, 0x00, 0xD8, 0xF1, 0x00, 0x00, 0xB4, 0x52, /* 0x44-0x47 */ + 0x00, 0x00, 0xD8, 0xEB, 0xDD, 0x4F, 0xD8, 0xDD, /* 0x48-0x4B */ + 0xB4, 0x4F, 0x00, 0x00, 0xD8, 0xE1, 0x00, 0x00, /* 0x4C-0x4F */ + 0xB4, 0x50, 0xD8, 0xE0, 0xD8, 0xE5, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xD8, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xD8, 0xE8, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0x53, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0x56, 0xDD, 0x4E, /* 0x60-0x63 */ + 0x00, 0x00, 0xDD, 0x50, 0x00, 0x00, 0xDD, 0x55, /* 0x64-0x67 */ + 0xDD, 0x54, 0xB7, 0x43, 0x00, 0x00, 0xD8, 0xDB, /* 0x68-0x6B */ + 0xDD, 0x52, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x44, /* 0x6C-0x6F */ + 0x00, 0x00, 0xDD, 0x4D, 0xDD, 0x51, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xA9, /* 0x74-0x77 */ + 0x00, 0x00, 0xE1, 0xB0, 0xE1, 0xA7, 0x00, 0x00, /* 0x78-0x7B */ + 0xE1, 0xAE, 0xE1, 0xA5, 0xE1, 0xAD, 0xE1, 0xB1, /* 0x7C-0x7F */ + + 0xE1, 0xA4, 0xE1, 0xA8, 0xE1, 0xA3, 0x00, 0x00, /* 0x80-0x83 */ + 0xB9, 0xF1, 0x00, 0x00, 0xE1, 0xA6, 0xB9, 0xF2, /* 0x84-0x87 */ + 0xE1, 0xAC, 0xE1, 0xAB, 0xE1, 0xAA, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xE1, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0xE5, 0x67, /* 0x90-0x93 */ + 0xBC, 0x6B, 0xE5, 0x68, 0x00, 0x00, 0xE5, 0x63, /* 0x94-0x97 */ + 0x00, 0x00, 0xE5, 0x62, 0xE5, 0x6C, 0x00, 0x00, /* 0x98-0x9B */ + 0xE5, 0x6A, 0xBC, 0x6A, 0xE5, 0x6D, 0xE5, 0x64, /* 0x9C-0x9F */ + 0xE5, 0x69, 0xE5, 0x6B, 0xE5, 0x66, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x61, /* 0xA4-0xA7 */ + 0xE9, 0x66, 0xE9, 0x60, 0xE9, 0x65, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE9, 0x5E, 0xE9, 0x68, 0xE9, 0x64, 0xE9, 0x69, /* 0xAC-0xAF */ + 0xE9, 0x63, 0xE9, 0x5F, 0xE9, 0x67, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE9, 0x6A, 0xE9, 0x62, 0x00, 0x00, 0xEC, 0xDA, /* 0xB4-0xB7 */ + 0xC0, 0xAF, 0x00, 0x00, 0xC0, 0xAD, 0x00, 0x00, /* 0xB8-0xBB */ + 0xC0, 0xAC, 0xC0, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xEF, 0xC4, 0x00, 0x00, 0xF1, 0x72, 0xF1, 0xFD, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x44, 0xF4, 0x45, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xC4, 0x60, 0x00, 0x00, 0xF5, 0xC9, /* 0xC8-0xCB */ + 0x00, 0x00, 0xC4, 0xDE, 0x00, 0x00, 0xF5, 0xCA, /* 0xCC-0xCF */ + 0x00, 0x00, 0xF6, 0xDE, 0xC5, 0x72, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xC5, 0x71, 0xF6, 0xDD, 0xC5, 0xC9, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xF7, 0xD6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xA4, 0x74, 0xA6, 0x7B, 0xC9, 0xDA, /* 0xDC-0xDF */ + 0xCA, 0xCA, 0xA8, 0xB5, 0xB1, 0x5F, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xA4, 0x75, 0xA5, 0xAA, 0xA5, 0xA9, /* 0xE4-0xE7 */ + 0xA5, 0xA8, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xC5, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xAE, 0x74, 0x00, 0x00, /* 0xEC-0xEF */ + 0xDD, 0x57, 0xA4, 0x76, 0xA4, 0x77, 0xA4, 0x78, /* 0xF0-0xF3 */ + 0xA4, 0xDA, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xD1, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xCE, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xB4, 0x53, 0xA4, 0x79, 0xC9, 0x5D, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5E[512] = { + 0x00, 0x00, 0x00, 0x00, 0xA5, 0xAB, 0xA5, 0xAC, /* 0x00-0x03 */ + 0xC9, 0x78, 0x00, 0x00, 0xA6, 0x7C, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xCB, 0x00, 0x00, /* 0x08-0x0B */ + 0xA7, 0xC6, 0x00, 0x00, 0xCA, 0xCC, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xA9, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xCC, 0x6E, 0xA9, 0xAC, 0xA9, 0xAB, 0xCC, 0x6D, /* 0x14-0x17 */ + 0xA9, 0xA9, 0xCC, 0x6F, 0xA9, 0xAA, 0xA9, 0xAD, /* 0x18-0x1B */ + 0x00, 0x00, 0xAB, 0xD2, 0x00, 0x00, 0xAB, 0xD4, /* 0x1C-0x1F */ + 0xCE, 0xB3, 0xCE, 0xB0, 0xCE, 0xB1, 0xCE, 0xB2, /* 0x20-0x23 */ + 0xCE, 0xB4, 0xAB, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xD1, 0x74, 0xD1, 0x73, 0x00, 0x00, 0xAE, 0x76, /* 0x28-0x2B */ + 0x00, 0x00, 0xAE, 0x75, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x62, /* 0x30-0x33 */ + 0xD5, 0x46, 0x00, 0x00, 0xB1, 0x61, 0xB1, 0x63, /* 0x34-0x37 */ + 0xB1, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xB4, 0x55, 0xD5, 0x45, 0x00, 0x00, /* 0x3C-0x3F */ + 0xB4, 0x56, 0xD8, 0xF3, 0x00, 0x00, 0xB4, 0x57, /* 0x40-0x43 */ + 0xD8, 0xF2, 0xB4, 0x54, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0x5A, 0xDD, 0x5C, /* 0x48-0x4B */ + 0xB7, 0x45, 0xDD, 0x5B, 0xDD, 0x59, 0xDD, 0x58, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xB4, /* 0x50-0x53 */ + 0xB9, 0xF7, 0xB9, 0xF5, 0x00, 0x00, 0xB9, 0xF6, /* 0x54-0x57 */ + 0xE1, 0xB2, 0xE1, 0xB3, 0x00, 0x00, 0xB9, 0xF3, /* 0x58-0x5B */ + 0xE5, 0x71, 0xE5, 0x6F, 0x00, 0x00, 0xBC, 0x6D, /* 0x5C-0x5F */ + 0xE5, 0x70, 0xBC, 0x6E, 0xBC, 0x6C, 0xB9, 0xF4, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0x6D, 0xE9, 0x6B, /* 0x64-0x67 */ + 0xE9, 0x6C, 0xE5, 0x6E, 0xEC, 0xDC, 0xC0, 0xB0, /* 0x68-0x6B */ + 0xEC, 0xDB, 0xEF, 0xC5, 0xEF, 0xC6, 0xE9, 0x6E, /* 0x6C-0x6F */ + 0xF1, 0xFE, 0x00, 0x00, 0xA4, 0x7A, 0xA5, 0xAD, /* 0x70-0x73 */ + 0xA6, 0x7E, 0xC9, 0xDB, 0xA6, 0x7D, 0x00, 0x00, /* 0x74-0x77 */ + 0xA9, 0xAF, 0xB7, 0x46, 0x00, 0x00, 0xA4, 0xDB, /* 0x78-0x7B */ + 0xA5, 0xAE, 0xAB, 0xD5, 0xB4, 0x58, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xC9, 0x79, 0x00, 0x00, 0xC9, 0x7A, 0x00, 0x00, /* 0x80-0x83 */ + 0xC9, 0xDC, 0x00, 0x00, 0x00, 0x00, 0xA7, 0xC8, /* 0x84-0x87 */ + 0xCA, 0xD0, 0xCA, 0xCE, 0xA7, 0xC9, 0xCA, 0xCD, /* 0x88-0x8B */ + 0xCA, 0xCF, 0xCA, 0xD1, 0x00, 0x00, 0xA7, 0xC7, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xA9, 0xB3, 0xA9, 0xB4, 0xA9, 0xB1, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0xB0, 0xCE, 0xB8, /* 0x98-0x9B */ + 0xA9, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xAB, 0xD6, 0x00, 0x00, 0xCE, 0xB7, 0xCE, 0xB9, /* 0xA0-0xA3 */ + 0xCE, 0xB6, 0xCE, 0xBA, 0xAB, 0xD7, 0xAE, 0x79, /* 0xA4-0xA7 */ + 0xD1, 0x75, 0x00, 0x00, 0xD1, 0x77, 0xAE, 0x77, /* 0xA8-0xAB */ + 0xD1, 0x78, 0xAE, 0x78, 0xD1, 0x76, 0x00, 0x00, /* 0xAC-0xAF */ + 0xCE, 0xB5, 0xD5, 0x47, 0xD5, 0x4A, 0xD5, 0x4B, /* 0xB0-0xB3 */ + 0xD5, 0x48, 0xB1, 0x67, 0xB1, 0x66, 0xB1, 0x64, /* 0xB4-0xB7 */ + 0xB1, 0x65, 0xD5, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xB1, 0x68, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xB4, 0x5A, 0xB4, 0x5B, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xB4, 0x5C, 0xDD, 0x5D, 0xDD, 0x5F, 0xDD, 0x61, /* 0xC4-0xC7 */ + 0xB7, 0x48, 0xB7, 0x47, 0xB4, 0x59, 0xDD, 0x60, /* 0xC8-0xCB */ + 0xDD, 0x5E, 0x00, 0x00, 0xE1, 0xB8, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE1, 0xB6, 0xE1, 0xBC, 0xB9, 0xF8, /* 0xD0-0xD3 */ + 0xE1, 0xBD, 0xE1, 0xBA, 0xB9, 0xF9, 0xE1, 0xB7, /* 0xD4-0xD7 */ + 0xE1, 0xB5, 0xE1, 0xBB, 0xBC, 0x70, 0xE5, 0x73, /* 0xD8-0xDB */ + 0xE1, 0xB9, 0xBC, 0x72, 0xE5, 0x74, 0xBC, 0x71, /* 0xDC-0xDF */ + 0xBC, 0x74, 0xE5, 0x75, 0xBC, 0x6F, 0xBC, 0x73, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE9, 0x73, 0xE9, 0x71, 0xE9, 0x70, /* 0xE4-0xE7 */ + 0xE9, 0x72, 0xE9, 0x6F, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xC3, 0x66, 0x00, 0x00, 0xF4, 0x46, 0xF4, 0x47, /* 0xEC-0xEF */ + 0x00, 0x00, 0xF5, 0xCB, 0xF6, 0xDF, 0xC6, 0x55, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0xB5, 0xA7, 0xCA, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0xD8, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xA4, 0x7B, 0xA4, 0xDC, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_5F[512] = { + 0x00, 0x00, 0xA5, 0xAF, 0xC9, 0xDD, 0x00, 0x00, /* 0x00-0x03 */ + 0xA7, 0xCB, 0xCA, 0xD2, 0x00, 0x00, 0xCE, 0xBB, /* 0x04-0x07 */ + 0xAB, 0xD9, 0x00, 0x00, 0xB9, 0xFA, 0xA4, 0x7C, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xA1, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0x49, 0xA4, 0x7D, /* 0x10-0x13 */ + 0xA4, 0xDD, 0xA4, 0xDE, 0x00, 0x00, 0xA5, 0xB1, /* 0x14-0x17 */ + 0xA5, 0xB0, 0x00, 0x00, 0xC9, 0xDE, 0xA6, 0xA2, /* 0x18-0x1B */ + 0x00, 0x00, 0xCA, 0xD3, 0x00, 0x00, 0xA7, 0xCC, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0x71, 0xCC, 0x72, /* 0x20-0x23 */ + 0xCC, 0x73, 0x00, 0x00, 0xA9, 0xB6, 0xA9, 0xB7, /* 0x24-0x27 */ + 0xCC, 0x70, 0xA9, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xAB, 0xDA, 0xCE, 0xBC, 0x00, 0x00, /* 0x2C-0x2F */ + 0xD1, 0x7A, 0xAE, 0x7A, 0x00, 0x00, 0xD1, 0x79, /* 0x30-0x33 */ + 0x00, 0x00, 0xB1, 0x69, 0xD5, 0x4C, 0xB1, 0x6A, /* 0x34-0x37 */ + 0xD5, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xB4, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xDD, 0x62, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xBF, /* 0x40-0x43 */ + 0xE1, 0xBE, 0x00, 0x00, 0xB9, 0xFB, 0x00, 0x00, /* 0x44-0x47 */ + 0xBC, 0x75, 0xE5, 0x76, 0xBE, 0xCA, 0xE9, 0x74, /* 0x48-0x4B */ + 0xC0, 0xB1, 0x00, 0x00, 0xC5, 0x73, 0xF7, 0xD8, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xCC, 0x74, 0x00, 0x00, 0xCE, 0xBD, 0xB1, 0x6B, /* 0x54-0x57 */ + 0xD8, 0xF4, 0xB7, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xC2, 0x55, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xA7, 0xCE, 0x00, 0x00, /* 0x60-0x63 */ + 0xA7, 0xCD, 0xAB, 0xDB, 0x00, 0x00, 0xD1, 0x7B, /* 0x64-0x67 */ + 0x00, 0x00, 0xB1, 0x6D, 0xB3, 0x43, 0xB1, 0x6E, /* 0x68-0x6B */ + 0xB1, 0x6C, 0xB4, 0x5E, 0x00, 0x00, 0xE1, 0xC0, /* 0x6C-0x6F */ + 0xB9, 0xFC, 0xBC, 0x76, 0x00, 0x00, 0xC9, 0x4C, /* 0x70-0x73 */ + 0xC9, 0xDF, 0x00, 0x00, 0xCA, 0xD5, 0xA7, 0xCF, /* 0x74-0x77 */ + 0xCA, 0xD4, 0xA7, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xA9, 0xBC, 0xCC, 0x77, 0xCC, 0x76, 0xA9, 0xBB, /* 0x7C-0x7F */ + + 0xA9, 0xB9, 0xA9, 0xBA, 0xCC, 0x75, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xAB, 0xDD, 0xCE, 0xBE, 0xAB, 0xE0, /* 0x84-0x87 */ + 0xAB, 0xDC, 0xAB, 0xE2, 0xAB, 0xDE, 0xAB, 0xDF, /* 0x88-0x8B */ + 0xAB, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xAE, 0x7D, 0xAE, 0x7C, 0xAE, 0x7B, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0x4F, 0xB1, 0x6F, /* 0x94-0x97 */ + 0xB1, 0x72, 0xB1, 0x70, 0x00, 0x00, 0xD5, 0x4E, /* 0x98-0x9B */ + 0xB1, 0x75, 0x00, 0x00, 0xB1, 0x71, 0xD5, 0x50, /* 0x9C-0x9F */ + 0xB1, 0x74, 0xB1, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xD8, 0xF6, 0xD8, 0xF5, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xB4, 0x61, 0xB4, 0x5F, 0xB4, 0x60, 0xD8, 0xF7, /* 0xA8-0xAB */ + 0xB7, 0x4B, 0xDD, 0x64, 0xB7, 0x4C, 0xDD, 0x63, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0x77, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xBC, 0x78, 0xE1, 0xC1, 0xBC, 0x77, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xB9, 0xFD, 0x00, 0x00, 0xEC, 0xDE, /* 0xB8-0xBB */ + 0xE9, 0x75, 0xC0, 0xB2, 0xEC, 0xDD, 0xF2, 0x40, /* 0xBC-0xBF */ + 0xF4, 0x48, 0xF4, 0x49, 0x00, 0x00, 0xA4, 0xDF, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xA5, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xC9, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xA7, 0xD2, 0xA7, 0xD4, 0x00, 0x00, 0xC9, 0xE2, /* 0xCC-0xCF */ + 0xCA, 0xD8, 0xCA, 0xD7, 0xCA, 0xD6, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xC9, 0xE1, 0xC9, 0xE0, 0xA6, 0xA4, 0xA7, 0xD3, /* 0xD4-0xD7 */ + 0xA7, 0xD1, 0xA6, 0xA3, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xA9, 0xBD, 0xCC, 0x78, 0x00, 0x00, /* 0xDC-0xDF */ + 0xA9, 0xBE, 0xCA, 0xDD, 0x00, 0x00, 0xCA, 0xDF, /* 0xE0-0xE3 */ + 0xCA, 0xDE, 0xCC, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xCA, 0xDA, 0x00, 0x00, 0xA7, 0xD8, 0xA7, 0xD6, /* 0xE8-0xEB */ + 0x00, 0x00, 0xCA, 0xD9, 0xCA, 0xDB, 0xCA, 0xE1, /* 0xEC-0xEF */ + 0x00, 0x00, 0xA7, 0xD5, 0x00, 0x00, 0xCA, 0xDC, /* 0xF0-0xF3 */ + 0xCA, 0xE5, 0xA9, 0xC0, 0x00, 0x00, 0xCA, 0xE2, /* 0xF4-0xF7 */ + 0xA7, 0xD7, 0x00, 0x00, 0xCA, 0xE0, 0xCA, 0xE3, /* 0xF8-0xFB */ + 0x00, 0x00, 0xA9, 0xBF, 0x00, 0x00, 0xA9, 0xC1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_60[512] = { + 0xCA, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xCC, 0xAF, 0xCC, 0xA2, 0xCC, 0x7E, /* 0x08-0x0B */ + 0xCC, 0xAE, 0xCC, 0xA9, 0xAB, 0xE7, 0xA9, 0xC2, /* 0x0C-0x0F */ + 0xCC, 0xAA, 0xCC, 0xAD, 0xAB, 0xE3, 0xCC, 0xAC, /* 0x10-0x13 */ + 0xA9, 0xC3, 0xA9, 0xC8, 0xA9, 0xC6, 0xCC, 0xA3, /* 0x14-0x17 */ + 0x00, 0x00, 0xCC, 0x7C, 0xCC, 0xA5, 0xA9, 0xCD, /* 0x18-0x1B */ + 0xCC, 0xB0, 0xAB, 0xE4, 0xCC, 0xA6, 0x00, 0x00, /* 0x1C-0x1F */ + 0xAB, 0xE5, 0xA9, 0xC9, 0xCC, 0xA8, 0x00, 0x00, /* 0x20-0x23 */ + 0xCE, 0xCD, 0xAB, 0xE6, 0xCC, 0x7B, 0xA9, 0xCA, /* 0x24-0x27 */ + 0xAB, 0xE8, 0xA9, 0xCB, 0xA9, 0xC7, 0xA9, 0xCC, /* 0x28-0x2B */ + 0xCC, 0xA7, 0xCC, 0x7A, 0xCC, 0xAB, 0xA9, 0xC4, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0x7D, 0xCC, 0xA4, /* 0x30-0x33 */ + 0xCC, 0xA1, 0xA9, 0xC5, 0x00, 0x00, 0xCE, 0xBF, /* 0x34-0x37 */ + 0x00, 0x00, 0xCE, 0xC0, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xCE, 0xCA, 0xD1, 0xA1, 0xCE, 0xCB, 0xAB, 0xEE, /* 0x40-0x43 */ + 0xCE, 0xCE, 0xCE, 0xC4, 0xAB, 0xED, 0xCE, 0xC6, /* 0x44-0x47 */ + 0x00, 0x00, 0xCE, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xCE, 0xC9, 0xAB, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xAE, 0xA3, 0x00, 0x00, 0xF9, 0xDA, 0xCE, 0xC5, /* 0x50-0x53 */ + 0xCE, 0xC1, 0xAE, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xCE, 0xCF, 0xAE, 0x7E, 0xD1, 0x7D, 0xCE, 0xC8, /* 0x58-0x5B */ + 0x00, 0x00, 0xD1, 0x7C, 0xCE, 0xC3, 0xCE, 0xCC, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0xEC, 0xAE, 0xA1, /* 0x60-0x63 */ + 0xAB, 0xF2, 0xAE, 0xA2, 0xCE, 0xD0, 0xD1, 0x7E, /* 0x64-0x67 */ + 0xAB, 0xEB, 0xAE, 0xA6, 0xAB, 0xF1, 0xAB, 0xF0, /* 0x68-0x6B */ + 0xAB, 0xEF, 0xAE, 0xA5, 0xCE, 0xD1, 0xAE, 0xA7, /* 0x6C-0x6F */ + 0xAB, 0xEA, 0x00, 0x00, 0xCE, 0xC2, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x76, /* 0x7C-0x7F */ + + 0xD1, 0xA4, 0xD1, 0xA6, 0x00, 0x00, 0xD1, 0xA8, /* 0x80-0x83 */ + 0xAE, 0xA8, 0xAE, 0xAE, 0xD5, 0x53, 0xD1, 0xAC, /* 0x84-0x87 */ + 0xD1, 0xA3, 0xB1, 0x78, 0xD5, 0x51, 0x00, 0x00, /* 0x88-0x8B */ + 0xAE, 0xAD, 0xAE, 0xAB, 0xD1, 0xAE, 0x00, 0x00, /* 0x8C-0x8F */ + 0xD5, 0x52, 0x00, 0x00, 0xD1, 0xA5, 0x00, 0x00, /* 0x90-0x93 */ + 0xAE, 0xAC, 0xD1, 0xA9, 0xAE, 0xAF, 0xD1, 0xAB, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xAE, 0xAA, 0xD1, 0xAA, /* 0x98-0x9B */ + 0xD1, 0xAD, 0xD1, 0xA7, 0x00, 0x00, 0xAE, 0xA9, /* 0x9C-0x9F */ + 0xB1, 0x79, 0x00, 0x00, 0xD1, 0xA2, 0xB1, 0x77, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xB1, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xD5, 0x55, 0xD5, 0x5E, 0xB4, 0x64, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xB1, 0x7C, 0xB1, 0xA3, 0xB4, 0x65, 0xD5, 0x60, /* 0xB4-0xB7 */ + 0xB1, 0xAA, 0xD8, 0xF9, 0xD5, 0x56, 0xB1, 0xA2, /* 0xB8-0xBB */ + 0xB1, 0xA5, 0xB1, 0x7E, 0xD5, 0x54, 0xD5, 0x62, /* 0xBC-0xBF */ + 0xD5, 0x65, 0xD9, 0x49, 0x00, 0x00, 0xD5, 0x63, /* 0xC0-0xC3 */ + 0xD8, 0xFD, 0xB1, 0xA1, 0xB1, 0xA8, 0xB1, 0xAC, /* 0xC4-0xC7 */ + 0xD5, 0x5D, 0xD8, 0xF8, 0xD5, 0x61, 0xB1, 0x7B, /* 0xC8-0xCB */ + 0xD8, 0xFA, 0xD5, 0x64, 0xD8, 0xFC, 0xD5, 0x59, /* 0xCC-0xCF */ + 0x00, 0x00, 0xB4, 0x62, 0x00, 0x00, 0xD5, 0x57, /* 0xD0-0xD3 */ + 0xD5, 0x58, 0xB1, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xB1, 0xA6, 0xD5, 0x5B, 0xB1, 0xAB, 0xD5, 0x5F, /* 0xD8-0xDB */ + 0xB1, 0xA4, 0xD5, 0x5C, 0x00, 0x00, 0xB1, 0xA9, /* 0xDC-0xDF */ + 0xB4, 0x66, 0xB4, 0x63, 0xD8, 0xFB, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xD5, 0x5A, 0x00, 0x00, 0xB1, 0x7D, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xB4, 0x6B, 0xB4, 0x6F, 0xD9, 0x40, 0xB7, 0x51, /* 0xF0-0xF3 */ + 0xB4, 0x6D, 0xD9, 0x44, 0xB4, 0x71, 0xDD, 0x65, /* 0xF4-0xF7 */ + 0xD9, 0x46, 0xB7, 0x53, 0xB4, 0x69, 0xB4, 0x6C, /* 0xF8-0xFB */ + 0xD9, 0x47, 0x00, 0x00, 0xD9, 0x48, 0xD9, 0x4E, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_61[512] = { + 0xB4, 0x73, 0xB7, 0x54, 0x00, 0x00, 0xD9, 0x4A, /* 0x00-0x03 */ + 0xD9, 0x4F, 0xD9, 0x43, 0xB7, 0x5E, 0x00, 0x00, /* 0x04-0x07 */ + 0xB7, 0x55, 0xB4, 0x72, 0xD9, 0x41, 0xD9, 0x50, /* 0x08-0x0B */ + 0x00, 0x00, 0xB7, 0x5D, 0xB4, 0x70, 0xB7, 0x4E, /* 0x0C-0x0F */ + 0xD9, 0x4D, 0x00, 0x00, 0xB4, 0x74, 0xD9, 0x45, /* 0x10-0x13 */ + 0xD8, 0xFE, 0xB4, 0x6A, 0xD9, 0x42, 0x00, 0x00, /* 0x14-0x17 */ + 0xD9, 0x4B, 0x00, 0x00, 0xB7, 0x4D, 0xB7, 0x52, /* 0x18-0x1B */ + 0xB4, 0x67, 0xD9, 0x4C, 0x00, 0x00, 0xB7, 0x50, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x68, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x5C, /* 0x24-0x27 */ + 0xE1, 0xC3, 0xDD, 0x70, 0x00, 0x00, 0xDD, 0x68, /* 0x28-0x2B */ + 0xE1, 0xC2, 0x00, 0x00, 0xDD, 0x6C, 0xDD, 0x6E, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xDD, 0x6B, 0x00, 0x00, /* 0x30-0x33 */ + 0xB7, 0x5B, 0x00, 0x00, 0xDD, 0x6A, 0xB7, 0x5F, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xD2, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0x5A, 0xBA, 0x40, /* 0x3C-0x3F */ + 0xDD, 0x71, 0xE1, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xB7, 0x58, 0xDD, 0x69, 0xDD, 0x6D, 0xB9, 0xFE, /* 0x44-0x47 */ + 0xB7, 0x4F, 0xDD, 0x66, 0xDD, 0x67, 0xBA, 0x41, /* 0x48-0x4B */ + 0xB7, 0x57, 0xB7, 0x59, 0xB7, 0x56, 0xDD, 0x6F, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xC8, 0xE1, 0xC9, /* 0x50-0x53 */ + 0xE1, 0xCE, 0xBC, 0x7D, 0xE1, 0xD5, 0x00, 0x00, /* 0x54-0x57 */ + 0xBA, 0x47, 0x00, 0x00, 0xBA, 0x46, 0xE1, 0xD0, /* 0x58-0x5B */ + 0x00, 0x00, 0xBC, 0x7C, 0xE1, 0xC5, 0xBA, 0x45, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE1, 0xD4, 0xBA, 0x43, 0xBA, 0x44, /* 0x60-0x63 */ + 0x00, 0x00, 0xE1, 0xD1, 0xE5, 0xAA, 0xBC, 0x7A, /* 0x64-0x67 */ + 0xB4, 0x6E, 0x00, 0x00, 0xE1, 0xD3, 0xBC, 0xA3, /* 0x68-0x6B */ + 0xE1, 0xCB, 0x00, 0x00, 0xBC, 0x7B, 0x00, 0x00, /* 0x6C-0x6F */ + 0xBC, 0xA2, 0xE1, 0xC6, 0xE1, 0xCA, 0xE1, 0xC7, /* 0x70-0x73 */ + 0xE1, 0xCD, 0xBA, 0x48, 0xBC, 0x79, 0xBA, 0x42, /* 0x74-0x77 */ + 0x00, 0x00, 0xE5, 0x7A, 0xE1, 0xCF, 0x00, 0x00, /* 0x78-0x7B */ + 0xBC, 0xA1, 0x00, 0x00, 0xBC, 0xA4, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xE1, 0xCC, 0x00, 0x00, 0xBC, 0x7E, 0xE5, 0x79, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xE5, 0x7E, 0xBE, 0xCE, 0xE5, 0x78, /* 0x88-0x8B */ + 0xE9, 0xA3, 0xE5, 0xA9, 0xBC, 0xA8, 0x00, 0x00, /* 0x8C-0x8F */ + 0xBC, 0xA6, 0xBE, 0xCC, 0xE5, 0xA6, 0xE5, 0xA2, /* 0x90-0x93 */ + 0xBC, 0xAC, 0x00, 0x00, 0xE9, 0x78, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xBC, 0xAA, 0xE5, 0xA1, /* 0x98-0x9B */ + 0x00, 0x00, 0xE9, 0x76, 0x00, 0x00, 0xE5, 0xA5, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE5, 0xA8, 0xE5, 0x7D, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xBC, 0xAB, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xA5, /* 0xA4-0xA7 */ + 0xE9, 0x77, 0xBE, 0xCD, 0xE5, 0xA7, 0xBC, 0xA7, /* 0xA8-0xAB */ + 0xBC, 0xA9, 0xE5, 0xA4, 0xBC, 0xAD, 0xE5, 0xA3, /* 0xAC-0xAF */ + 0xE5, 0x7C, 0xE5, 0x7B, 0xBE, 0xCB, 0xE5, 0xAB, /* 0xB0-0xB3 */ + 0xE9, 0x7A, 0xEC, 0xE0, 0xBE, 0xD0, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE9, 0xA2, 0x00, 0x00, 0xE9, 0x7E, 0x00, 0x00, /* 0xB8-0xBB */ + 0xEC, 0xE1, 0x00, 0x00, 0xBE, 0xD1, 0xE9, 0xA1, /* 0xBC-0xBF */ + 0x00, 0x00, 0xE9, 0x7C, 0xC0, 0xB4, 0xEC, 0xDF, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE9, 0x79, 0xE9, 0x7B, 0xC0, 0xB5, /* 0xC4-0xC7 */ + 0xBE, 0xD3, 0xC0, 0xB3, 0xBE, 0xD2, 0xC0, 0xB7, /* 0xC8-0xCB */ + 0xE9, 0x7D, 0xBE, 0xCF, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0xCF, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xEF, 0xC7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xE7, 0xEF, 0xC8, /* 0xDC-0xDF */ + 0xEC, 0xE3, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x56, /* 0xE0-0xE3 */ + 0xEC, 0xE5, 0xEC, 0xE4, 0xC0, 0xB6, 0xEC, 0xE2, /* 0xE4-0xE7 */ + 0xEC, 0xE6, 0xEF, 0xD0, 0xEF, 0xCC, 0xEF, 0xCE, /* 0xE8-0xEB */ + 0x00, 0x00, 0xEF, 0xC9, 0xEF, 0xCA, 0x00, 0x00, /* 0xEC-0xEF */ + 0xEF, 0xCD, 0xEF, 0xCB, 0xC3, 0x67, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xC3, 0x6A, 0xC3, 0x69, 0xC3, 0x68, /* 0xF4-0xF7 */ + 0xC4, 0x61, 0xF4, 0x4A, 0xC4, 0x62, 0xF2, 0x41, /* 0xF8-0xFB */ + 0xC4, 0xDF, 0xF5, 0xCC, 0xC4, 0xE0, 0xC5, 0x74, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_62[512] = { + 0xC5, 0xCA, 0xF7, 0xD9, 0x00, 0x00, 0xF7, 0xDA, /* 0x00-0x03 */ + 0xF7, 0xDB, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xBA, /* 0x04-0x07 */ + 0xA4, 0xE0, 0xC9, 0x7C, 0xA5, 0xB3, 0x00, 0x00, /* 0x08-0x0B */ + 0xA6, 0xA6, 0xA6, 0xA7, 0xA6, 0xA5, 0x00, 0x00, /* 0x0C-0x0F */ + 0xA6, 0xA8, 0xA7, 0xDA, 0xA7, 0xD9, 0x00, 0x00, /* 0x10-0x13 */ + 0xCC, 0xB1, 0xA9, 0xCF, 0xA9, 0xCE, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xD1, 0xAF, 0xB1, 0xAD, 0xB1, 0xAE, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0x75, /* 0x1C-0x1F */ + 0xDD, 0x72, 0xB7, 0x60, 0xB7, 0x61, 0xDD, 0x74, /* 0x20-0x23 */ + 0xDD, 0x76, 0xDD, 0x75, 0x00, 0x00, 0xE1, 0xD7, /* 0x24-0x27 */ + 0x00, 0x00, 0xE1, 0xD6, 0xBA, 0x49, 0xE1, 0xD8, /* 0x28-0x2B */ + 0x00, 0x00, 0xE5, 0xAC, 0xBC, 0xAE, 0x00, 0x00, /* 0x2C-0x2F */ + 0xBE, 0xD4, 0x00, 0x00, 0xC0, 0xB8, 0xC2, 0x57, /* 0x30-0x33 */ + 0xC0, 0xB9, 0x00, 0x00, 0xA4, 0xE1, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0xE6, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xCC, 0xB2, 0xA9, 0xD1, 0xA9, 0xD0, /* 0x3C-0x3F */ + 0xA9, 0xD2, 0xAB, 0xF3, 0xCE, 0xD2, 0xCE, 0xD3, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xB0, 0xAE, 0xB0, /* 0x44-0x47 */ + 0xB1, 0xAF, 0xB4, 0x76, 0xD9, 0x51, 0xA4, 0xE2, /* 0x48-0x4B */ + 0x00, 0x00, 0xA4, 0x7E, 0xA4, 0xE3, 0x00, 0x00, /* 0x4C-0x4F */ + 0xC9, 0x7D, 0xA5, 0xB7, 0xA5, 0xB6, 0xA5, 0xB4, /* 0x50-0x53 */ + 0xA5, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xA6, 0xAB, 0xC9, 0xE9, 0xC9, 0xEB, 0xA6, 0xAA, /* 0x58-0x5B */ + 0xC9, 0xE3, 0x00, 0x00, 0xC9, 0xE4, 0x00, 0x00, /* 0x5C-0x5F */ + 0xC9, 0xEA, 0xC9, 0xE6, 0xC9, 0xE8, 0xA6, 0xA9, /* 0x60-0x63 */ + 0xC9, 0xE5, 0xC9, 0xEC, 0xC9, 0xE7, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xA7, 0xE1, 0xA7, 0xEA, 0xA7, 0xE8, /* 0x6C-0x6F */ + 0xCA, 0xF0, 0xCA, 0xED, 0xCA, 0xF5, 0xA7, 0xE6, /* 0x70-0x73 */ + 0xCA, 0xF6, 0x00, 0x00, 0xA7, 0xDF, 0xCA, 0xF3, /* 0x74-0x77 */ + 0x00, 0x00, 0xA7, 0xE5, 0xCA, 0xEF, 0xCA, 0xEE, /* 0x78-0x7B */ + 0xA7, 0xE3, 0xCA, 0xF4, 0xA7, 0xE4, 0xA9, 0xD3, /* 0x7C-0x7F */ + + 0xA7, 0xDE, 0xCA, 0xF1, 0x00, 0x00, 0xCA, 0xE7, /* 0x80-0x83 */ + 0xA7, 0xDB, 0x00, 0x00, 0xA7, 0xEE, 0xCA, 0xEC, /* 0x84-0x87 */ + 0xCA, 0xF2, 0xA7, 0xE0, 0xA7, 0xE2, 0x00, 0x00, /* 0x88-0x8B */ + 0xCA, 0xE8, 0x00, 0x00, 0xCA, 0xE9, 0xCA, 0xEA, /* 0x8C-0x8F */ + 0x00, 0x00, 0xA7, 0xED, 0xA7, 0xE7, 0xA7, 0xEC, /* 0x90-0x93 */ + 0xCA, 0xEB, 0xA7, 0xEB, 0xA7, 0xDD, 0xA7, 0xDC, /* 0x94-0x97 */ + 0xA7, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xA9, 0xE1, 0xCC, 0xBE, 0xCC, 0xB7, 0xA9, 0xDC, /* 0xA8-0xAB */ + 0xA9, 0xEF, 0xCC, 0xB3, 0xCC, 0xBA, 0xCC, 0xBC, /* 0xAC-0xAF */ + 0xCC, 0xBF, 0xA9, 0xEA, 0x00, 0x00, 0xCC, 0xBB, /* 0xB0-0xB3 */ + 0xCC, 0xB4, 0xA9, 0xE8, 0xCC, 0xB8, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xCC, 0xC0, 0xA9, 0xD9, 0x00, 0x00, 0xCC, 0xBD, /* 0xB8-0xBB */ + 0xA9, 0xE3, 0xA9, 0xE2, 0xCC, 0xB6, 0xA9, 0xD7, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0xD8, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xA9, 0xD6, 0x00, 0x00, 0xA9, 0xEE, 0xA9, 0xE6, /* 0xC4-0xC7 */ + 0xA9, 0xE0, 0xA9, 0xD4, 0xCC, 0xB9, 0xA9, 0xDF, /* 0xC8-0xCB */ + 0xA9, 0xD5, 0xA9, 0xE7, 0xA9, 0xF0, 0xCE, 0xD4, /* 0xCC-0xCF */ + 0xA9, 0xE4, 0xCC, 0xB5, 0xA9, 0xDA, 0xA9, 0xDD, /* 0xD0-0xD3 */ + 0xA9, 0xDE, 0x00, 0x00, 0xA9, 0xEC, 0xA9, 0xED, /* 0xD4-0xD7 */ + 0xA9, 0xEB, 0xA9, 0xE5, 0xA9, 0xE9, 0xA9, 0xDB, /* 0xD8-0xDB */ + 0xAB, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xDA, /* 0xE8-0xEB */ + 0xAC, 0x41, 0xAB, 0xF8, 0xAB, 0xFA, 0xAC, 0x40, /* 0xEC-0xEF */ + 0xCE, 0xE6, 0xAB, 0xFD, 0xD1, 0xB1, 0xAE, 0xB1, /* 0xF0-0xF3 */ + 0xAC, 0x43, 0xCE, 0xD7, 0xCE, 0xDF, 0xAB, 0xFE, /* 0xF4-0xF7 */ + 0xCE, 0xDE, 0xCE, 0xDB, 0xCE, 0xE3, 0xCE, 0xE5, /* 0xF8-0xFB */ + 0xAB, 0xF7, 0xAB, 0xFB, 0xAC, 0x42, 0xAE, 0xB3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_63[512] = { + 0xCE, 0xE0, 0xAB, 0xF9, 0xAC, 0x45, 0xCE, 0xD9, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xFC, /* 0x04-0x07 */ + 0xAE, 0xB2, 0xAB, 0xF6, 0x00, 0x00, 0xCE, 0xD6, /* 0x08-0x0B */ + 0xCE, 0xDD, 0xCE, 0xD5, 0xCE, 0xD8, 0xCE, 0xDC, /* 0x0C-0x0F */ + 0xD1, 0xB2, 0xAC, 0x44, 0x00, 0x00, 0xCE, 0xE1, /* 0x10-0x13 */ + 0xCE, 0xE2, 0xCE, 0xE4, 0xAB, 0xF5, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xAE, 0xC1, 0xD1, 0xBE, 0xAE, 0xBF, 0xAE, 0xC0, /* 0x28-0x2B */ + 0xD1, 0xB4, 0xD1, 0xC4, 0x00, 0x00, 0xAE, 0xB6, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xD5, 0x66, 0xD1, 0xC6, /* 0x30-0x33 */ + 0xD1, 0xC0, 0x00, 0x00, 0xD1, 0xB7, 0x00, 0x00, /* 0x34-0x37 */ + 0xD1, 0xC9, 0xD1, 0xBA, 0xAE, 0xBC, 0xD5, 0x7D, /* 0x38-0x3B */ + 0xD1, 0xBD, 0xAE, 0xBE, 0xAE, 0xB5, 0x00, 0x00, /* 0x3C-0x3F */ + 0xD1, 0xCB, 0xD1, 0xBF, 0xAE, 0xB8, 0xD1, 0xB8, /* 0x40-0x43 */ + 0xD1, 0xB5, 0xD1, 0xB6, 0xAE, 0xB9, 0xD1, 0xC5, /* 0x44-0x47 */ + 0xD1, 0xCC, 0xAE, 0xBB, 0xD1, 0xBC, 0xD1, 0xBB, /* 0x48-0x4B */ + 0xAE, 0xC3, 0xAE, 0xC2, 0xAE, 0xB4, 0xAE, 0xBA, /* 0x4C-0x4F */ + 0xAE, 0xBD, 0xD1, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xD1, 0xC2, 0xAE, 0xB7, 0xD1, 0xB3, 0xD1, 0xCA, /* 0x54-0x57 */ + 0xD1, 0xC1, 0xD1, 0xC3, 0xD1, 0xC7, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xD5, 0x67, 0x00, 0x00, 0xB1, 0xB7, /* 0x64-0x67 */ + 0xB1, 0xCB, 0xB1, 0xCA, 0x00, 0x00, 0xB1, 0xBF, /* 0x68-0x6B */ + 0x00, 0x00, 0xD5, 0x79, 0xD5, 0x75, 0xD5, 0x72, /* 0x6C-0x6F */ + 0xD5, 0xA6, 0xB1, 0xBA, 0xB1, 0xB2, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xD5, 0x77, 0xB4, 0xA8, 0xB1, 0xB6, /* 0x74-0x77 */ + 0xD5, 0xA1, 0x00, 0x00, 0xB1, 0xCC, 0xB1, 0xC9, /* 0x78-0x7B */ + 0xD5, 0x7B, 0xD5, 0x6A, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xB1, 0xC8, 0xD5, 0xA3, 0xD5, 0x69, 0xB1, 0xBD, /* 0x80-0x83 */ + 0xB1, 0xC1, 0xD5, 0xA2, 0x00, 0x00, 0xD5, 0x73, /* 0x84-0x87 */ + 0xB1, 0xC2, 0xB1, 0xBC, 0xD5, 0x68, 0x00, 0x00, /* 0x88-0x8B */ + 0xB4, 0x78, 0xD5, 0xA5, 0xD5, 0x71, 0xB1, 0xC7, /* 0x8C-0x8F */ + 0xD5, 0x74, 0xD5, 0xA4, 0xB1, 0xC6, 0x00, 0x00, /* 0x90-0x93 */ + 0xD9, 0x52, 0x00, 0x00, 0xB1, 0xB3, 0xD5, 0x6F, /* 0x94-0x97 */ + 0xB1, 0xB8, 0xB1, 0xC3, 0x00, 0x00, 0xB1, 0xBE, /* 0x98-0x9B */ + 0xD5, 0x78, 0xD5, 0x6E, 0xD5, 0x6C, 0xD5, 0x7E, /* 0x9C-0x9F */ + 0xB1, 0xB0, 0xB1, 0xC4, 0xB1, 0xB4, 0xB4, 0x77, /* 0xA0-0xA3 */ + 0xD5, 0x7C, 0xB1, 0xB5, 0x00, 0x00, 0xB1, 0xB1, /* 0xA4-0xA7 */ + 0xB1, 0xC0, 0xB1, 0xBB, 0xB1, 0xB9, 0xD5, 0x70, /* 0xA8-0xAB */ + 0xB1, 0xC5, 0xD5, 0x6D, 0xD5, 0x7A, 0xD5, 0x76, /* 0xAC-0xAF */ + 0xD9, 0x54, 0xD9, 0x53, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD5, 0x6B, 0xD9, 0x64, 0x00, 0x00, /* 0xBC-0xBF */ + 0xB4, 0x7A, 0x00, 0x00, 0xD9, 0x6A, 0xD9, 0x59, /* 0xC0-0xC3 */ + 0xD9, 0x67, 0xDD, 0x77, 0xB4, 0x7D, 0xD9, 0x6B, /* 0xC4-0xC7 */ + 0xD9, 0x6E, 0xB4, 0x7C, 0xD9, 0x5C, 0xD9, 0x6D, /* 0xC8-0xCB */ + 0xD9, 0x6C, 0xB4, 0x7E, 0xD9, 0x55, 0xB4, 0x79, /* 0xCC-0xCF */ + 0xB4, 0xA3, 0x00, 0x00, 0xB4, 0xA1, 0xD9, 0x69, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xD9, 0x5F, 0xB4, 0xA5, 0xD9, 0x70, /* 0xD4-0xD7 */ + 0xD9, 0x68, 0xD9, 0x71, 0xB4, 0xAD, 0xB4, 0xAB, /* 0xD8-0xDB */ + 0xD9, 0x66, 0xD9, 0x65, 0x00, 0x00, 0xD9, 0x63, /* 0xDC-0xDF */ + 0xD9, 0x5D, 0xB4, 0xA4, 0x00, 0x00, 0xB4, 0xA2, /* 0xE0-0xE3 */ + 0xD1, 0xB9, 0xD9, 0x56, 0x00, 0x00, 0xDD, 0xB7, /* 0xE4-0xE7 */ + 0xD9, 0x57, 0xB4, 0x7B, 0xB4, 0xAA, 0xDD, 0x79, /* 0xE8-0xEB */ + 0x00, 0x00, 0xB4, 0xA6, 0xB4, 0xA7, 0xD9, 0x58, /* 0xEC-0xEF */ + 0xD9, 0x6F, 0xDD, 0x78, 0xD9, 0x60, 0xD9, 0x5B, /* 0xF0-0xF3 */ + 0xB4, 0xA9, 0xD9, 0x61, 0xD9, 0x5E, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xB4, 0xAE, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_64[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0x70, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xDD, 0x7C, 0xDD, 0xB1, 0xDD, 0xB6, /* 0x08-0x0B */ + 0xDD, 0xAA, 0xB7, 0x6C, 0xDD, 0xBB, 0xB7, 0x69, /* 0x0C-0x0F */ + 0xDD, 0x7A, 0x00, 0x00, 0xDD, 0x7B, 0xB7, 0x62, /* 0x10-0x13 */ + 0xB7, 0x6B, 0xDD, 0xA4, 0xB7, 0x6E, 0xB7, 0x6F, /* 0x14-0x17 */ + 0xDD, 0xA5, 0x00, 0x00, 0xDD, 0xB2, 0xDD, 0xB8, /* 0x18-0x1B */ + 0xB7, 0x6A, 0x00, 0x00, 0xB7, 0x64, 0xDD, 0xA3, /* 0x1C-0x1F */ + 0xDD, 0x7D, 0xDD, 0xBA, 0xDD, 0xA8, 0xDD, 0xA9, /* 0x20-0x23 */ + 0xDD, 0x7E, 0xDD, 0xB4, 0xDD, 0xAB, 0xDD, 0xB5, /* 0x24-0x27 */ + 0xDD, 0xAD, 0x00, 0x00, 0xB7, 0x65, 0xE1, 0xD9, /* 0x28-0x2B */ + 0xB7, 0x68, 0xB7, 0x66, 0xDD, 0xB9, 0xDD, 0xB0, /* 0x2C-0x2F */ + 0xDD, 0xAC, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xA1, /* 0x30-0x33 */ + 0xBA, 0x53, 0xDD, 0xAF, 0xB7, 0x6D, 0xDD, 0xA7, /* 0x34-0x37 */ + 0x00, 0x00, 0xDD, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xB7, 0x67, 0xB7, 0x63, 0xE1, 0xEE, /* 0x3C-0x3F */ + 0xDD, 0xB3, 0xDD, 0xAE, 0x00, 0x00, 0xDD, 0xA2, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE9, /* 0x48-0x4B */ + 0x00, 0x00, 0xE1, 0xDA, 0xE1, 0xE5, 0x00, 0x00, /* 0x4C-0x4F */ + 0xE1, 0xEC, 0xBA, 0x51, 0xB4, 0xAC, 0xE1, 0xEA, /* 0x50-0x53 */ + 0xBA, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xBA, 0x4B, 0xE1, 0xF1, 0x00, 0x00, 0xE1, 0xDB, /* 0x58-0x5B */ + 0xE1, 0xE8, 0xE1, 0xDC, 0xE1, 0xE7, 0xBA, 0x4F, /* 0x5C-0x5F */ + 0xE1, 0xEB, 0xD9, 0x62, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xE1, 0xF2, 0xE1, 0xE3, 0xBA, 0x52, /* 0x64-0x67 */ + 0xE5, 0xBA, 0xBC, 0xAF, 0x00, 0x00, 0xE1, 0xF0, /* 0x68-0x6B */ + 0xE1, 0xEF, 0xBA, 0x54, 0xE5, 0xAD, 0xBC, 0xB0, /* 0x6C-0x6F */ + 0xE5, 0xAE, 0x00, 0x00, 0xE1, 0xDF, 0xE1, 0xE0, /* 0x70-0x73 */ + 0xE1, 0xDD, 0xE1, 0xE2, 0xE1, 0xDE, 0xE1, 0xF3, /* 0x74-0x77 */ + 0xBA, 0x4E, 0xBC, 0xB1, 0xBA, 0x50, 0xBA, 0x55, /* 0x78-0x7B */ + 0x00, 0x00, 0xE1, 0xE1, 0x00, 0x00, 0xE1, 0xED, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE1, 0xE6, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xE5, 0xB1, 0x00, 0x00, 0xBA, 0x4A, /* 0x84-0x87 */ + 0xBC, 0xB4, 0xE9, 0xAA, 0xE5, 0xB6, 0xE5, 0xB5, /* 0x88-0x8B */ + 0xE5, 0xB7, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xB4, /* 0x8C-0x8F */ + 0xBC, 0xB5, 0x00, 0x00, 0xBC, 0xBB, 0xBC, 0xB8, /* 0x90-0x93 */ + 0x00, 0x00, 0xBC, 0xB9, 0xE5, 0xAF, 0xE5, 0xB2, /* 0x94-0x97 */ + 0xE5, 0xBC, 0xBC, 0xC1, 0xBC, 0xBF, 0x00, 0x00, /* 0x98-0x9B */ + 0xE5, 0xB3, 0xD9, 0x5A, 0xBC, 0xB2, 0xE5, 0xB9, /* 0x9C-0x9F */ + 0xE5, 0xB0, 0x00, 0x00, 0xBC, 0xC2, 0xE5, 0xB8, /* 0xA0-0xA3 */ + 0xBA, 0x4D, 0xBC, 0xB7, 0xE1, 0xE4, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xBC, 0xBA, 0x00, 0x00, 0xBC, 0xBE, /* 0xA8-0xAB */ + 0xBC, 0xC0, 0xBC, 0xBD, 0xBC, 0xBC, 0x00, 0x00, /* 0xAC-0xAF */ + 0xBC, 0xB6, 0xE5, 0xBB, 0xBC, 0xB3, 0xBC, 0xC3, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xD8, /* 0xB8-0xBB */ + 0xBE, 0xD9, 0xE9, 0xA9, 0xBE, 0xE2, 0xBE, 0xDF, /* 0xBC-0xBF */ + 0x00, 0x00, 0xBE, 0xD6, 0xBE, 0xDD, 0xE9, 0xAB, /* 0xC0-0xC3 */ + 0xBE, 0xDB, 0xBE, 0xD5, 0x00, 0x00, 0xBE, 0xDC, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE9, 0xA8, 0xC0, 0xBB, 0xBE, 0xD7, /* 0xC8-0xCB */ + 0x00, 0x00, 0xBE, 0xDE, 0xC0, 0xBA, 0xE9, 0xA7, /* 0xCC-0xCF */ + 0xE9, 0xA6, 0x00, 0x00, 0xBE, 0xE0, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xBE, 0xE1, 0x00, 0x00, 0xE9, 0xA5, 0xE9, 0xA4, /* 0xD4-0xD7 */ + 0xC0, 0xBC, 0xE9, 0xAE, 0xBE, 0xDA, 0xE9, 0xAC, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xC0, 0xBD, 0x00, 0x00, 0xC0, 0xC2, 0xEC, 0xEA, /* 0xE0-0xE3 */ + 0xEC, 0xEC, 0x00, 0x00, 0xC0, 0xBF, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xEC, 0xED, 0xEC, 0xE9, 0x00, 0x00, 0xEC, 0xEB, /* 0xE8-0xEB */ + 0xC0, 0xC0, 0xC0, 0xC3, 0x00, 0x00, 0xEC, 0xE8, /* 0xEC-0xEF */ + 0xC0, 0xBE, 0xC0, 0xC1, 0xC2, 0x59, 0xE9, 0xAD, /* 0xF0-0xF3 */ + 0xC2, 0x58, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x5E, /* 0xF4-0xF7 */ + 0xEF, 0xD4, 0x00, 0x00, 0xC2, 0x5C, 0xC2, 0x5D, /* 0xF8-0xFB */ + 0xEF, 0xD7, 0xEF, 0xD3, 0xC2, 0x5A, 0xEF, 0xD1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_65[512] = { + 0xC3, 0x6B, 0xEF, 0xD5, 0x00, 0x00, 0xEF, 0xD6, /* 0x00-0x03 */ + 0xEF, 0xD2, 0x00, 0x00, 0xC2, 0x5B, 0xF2, 0x42, /* 0x04-0x07 */ + 0x00, 0x00, 0xF2, 0x45, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xF2, 0x46, 0xF2, 0x44, 0xF2, 0x47, 0xC3, 0x6C, /* 0x0C-0x0F */ + 0xF2, 0x43, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x4E, /* 0x10-0x13 */ + 0xC4, 0x64, 0xF4, 0x4D, 0xF4, 0x4C, 0xF4, 0x4B, /* 0x14-0x17 */ + 0xC4, 0x63, 0xC4, 0x65, 0x00, 0x00, 0xF5, 0xCD, /* 0x18-0x1B */ + 0xC4, 0xE2, 0xC4, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xF6, 0xE1, 0xF6, 0xE0, 0xF6, 0xE3, 0xC5, 0xCB, /* 0x20-0x23 */ + 0xC5, 0x75, 0xF7, 0xDD, 0xF6, 0xE2, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xF7, 0xDC, 0xC5, 0xCD, 0xC5, 0xCC, /* 0x28-0x2B */ + 0xC5, 0xF3, 0xF8, 0xA9, 0xF8, 0xEF, 0xA4, 0xE4, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0x72, 0xE9, 0xAF, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xA6, 0xAC, 0xCA, 0xF7, /* 0x34-0x37 */ + 0xA7, 0xF1, 0xA7, 0xEF, 0x00, 0x00, 0xA7, 0xF0, /* 0x38-0x3B */ + 0x00, 0x00, 0xCC, 0xC1, 0xA9, 0xF1, 0xAC, 0x46, /* 0x3C-0x3F */ + 0x00, 0x00, 0xCE, 0xE7, 0x00, 0x00, 0xCE, 0xE8, /* 0x40-0x43 */ + 0x00, 0x00, 0xAC, 0x47, 0xD1, 0xCE, 0x00, 0x00, /* 0x44-0x47 */ + 0xAE, 0xC4, 0xAE, 0xC5, 0xD1, 0xCD, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xD3, /* 0x4C-0x4F */ + 0x00, 0x00, 0xB1, 0xCF, 0x00, 0x00, 0xD5, 0xA7, /* 0x50-0x53 */ + 0xB1, 0xD6, 0xB1, 0xD5, 0xB1, 0xCE, 0xB1, 0xD1, /* 0x54-0x57 */ + 0xB1, 0xD4, 0xB1, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xD9, 0x76, 0xB1, 0xCD, 0xB4, 0xAF, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xB4, 0xB1, 0xB4, 0xB2, /* 0x60-0x63 */ + 0xD9, 0x75, 0xD9, 0x78, 0xB4, 0xB0, 0xD9, 0x73, /* 0x64-0x67 */ + 0xD9, 0x77, 0x00, 0x00, 0xD9, 0x74, 0x00, 0x00, /* 0x68-0x6B */ + 0xB7, 0x71, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xBC, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xBA, 0x56, 0xE1, 0xF4, /* 0x70-0x73 */ + 0xBE, 0xE3, 0xBC, 0xC4, 0xE5, 0xBD, 0xBC, 0xC5, /* 0x74-0x77 */ + 0xBC, 0xC6, 0xE5, 0xBF, 0xE5, 0xBE, 0xE5, 0xC0, /* 0x78-0x7B */ + 0xE9, 0xB1, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xB0, /* 0x7C-0x7F */ + + 0xEC, 0xEF, 0xEC, 0xEE, 0xC0, 0xC4, 0xC0, 0xC5, /* 0x80-0x83 */ + 0xF2, 0x48, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xE5, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xD9, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xB4, 0xB4, 0xB4, 0xB3, 0xDD, 0xBD, 0x00, 0x00, /* 0x90-0x93 */ + 0xEF, 0xD8, 0xC4, 0xE3, 0xF7, 0xDE, 0xA4, 0xE6, /* 0x94-0x97 */ + 0x00, 0x00, 0xAE, 0xC6, 0x00, 0x00, 0xB1, 0xD8, /* 0x98-0x9B */ + 0xB1, 0xD7, 0xD9, 0x7A, 0xD9, 0x7B, 0xB7, 0x72, /* 0x9C-0x9F */ + 0xE1, 0xF5, 0xBA, 0x57, 0xE9, 0xB2, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xA4, 0xE7, 0xA5, 0xB8, 0x00, 0x00, 0xA9, 0xF2, /* 0xA4-0xA7 */ + 0xCC, 0xC2, 0x00, 0x00, 0xCE, 0xE9, 0xAC, 0x48, /* 0xA8-0xAB */ + 0xB1, 0xD9, 0x00, 0x00, 0xD9, 0x7C, 0xB4, 0xB5, /* 0xAC-0xAF */ + 0xB7, 0x73, 0x00, 0x00, 0xE5, 0xC1, 0xE5, 0xC2, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xF0, 0xC2, 0x5F, /* 0xB4-0xB7 */ + 0xF8, 0xF0, 0xA4, 0xE8, 0x00, 0x00, 0xCC, 0xC3, /* 0xB8-0xBB */ + 0xA9, 0xF3, 0xAC, 0x49, 0x00, 0x00, 0xCE, 0xEA, /* 0xBC-0xBF */ + 0x00, 0x00, 0xAE, 0xC7, 0xD1, 0xD2, 0xD1, 0xD0, /* 0xC0-0xC3 */ + 0xD1, 0xD1, 0xAE, 0xC8, 0xD1, 0xCF, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xDB, /* 0xC8-0xCB */ + 0xB1, 0xDC, 0xD5, 0xA8, 0xB1, 0xDD, 0xB1, 0xDA, /* 0xCC-0xCF */ + 0xD9, 0x7D, 0x00, 0x00, 0xD9, 0x7E, 0xDD, 0xBE, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xBA, 0x59, 0xBA, 0x58, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xF1, 0xEF, 0xD9, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF2, 0x4A, 0xF2, 0x49, 0xF4, 0x4F, /* 0xDC-0xDF */ + 0x00, 0x00, 0xC9, 0x5E, 0xAC, 0x4A, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xA4, 0xE9, 0xA5, 0xB9, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xA6, 0xAE, 0xA6, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xA6, 0xAF, 0xA6, 0xB0, 0xC9, 0xEE, 0xC9, 0xED, /* 0xEC-0xEF */ + 0xCA, 0xF8, 0xA7, 0xF2, 0xCA, 0xFB, 0xCA, 0xFA, /* 0xF0-0xF3 */ + 0xCA, 0xF9, 0xCA, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xA9, 0xF4, 0xCC, 0xC9, /* 0xF8-0xFB */ + 0xCC, 0xC5, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_66[512] = { + 0xA9, 0xFB, 0x00, 0x00, 0xA9, 0xF9, 0xCC, 0xCA, /* 0x00-0x03 */ + 0xCC, 0xC6, 0xCC, 0xCD, 0xA9, 0xF8, 0xAA, 0x40, /* 0x04-0x07 */ + 0xCC, 0xC8, 0xCC, 0xC4, 0xA9, 0xFE, 0xCC, 0xCB, /* 0x08-0x0B */ + 0xA9, 0xF7, 0xCC, 0xCC, 0xA9, 0xFA, 0xA9, 0xFC, /* 0x0C-0x0F */ + 0xCC, 0xD0, 0xCC, 0xCF, 0xCC, 0xC7, 0xA9, 0xF6, /* 0x10-0x13 */ + 0xA9, 0xF5, 0xA9, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xCE, 0xEF, 0xCE, 0xF5, 0x00, 0x00, 0xAC, 0x50, /* 0x1C-0x1F */ + 0xAC, 0x4D, 0xCE, 0xEC, 0xCE, 0xF1, 0x00, 0x00, /* 0x20-0x23 */ + 0xAC, 0x53, 0xAC, 0x4B, 0xCE, 0xF0, 0xAC, 0x4E, /* 0x24-0x27 */ + 0xAC, 0x51, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xF3, /* 0x28-0x2B */ + 0x00, 0x00, 0xAC, 0x4C, 0xCE, 0xF8, 0xAC, 0x4F, /* 0x2C-0x2F */ + 0x00, 0x00, 0xAC, 0x52, 0xCE, 0xED, 0xCE, 0xF2, /* 0x30-0x33 */ + 0xCE, 0xF6, 0xCE, 0xEE, 0xCE, 0xEB, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xCE, 0xF7, 0xCE, 0xF4, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xAE, 0xD0, 0xAE, 0xC9, 0xAE, 0xCC, /* 0x40-0x43 */ + 0x00, 0x00, 0xAE, 0xCF, 0x00, 0x00, 0xD1, 0xD5, /* 0x44-0x47 */ + 0x00, 0x00, 0xAE, 0xCA, 0xD1, 0xD3, 0x00, 0x00, /* 0x48-0x4B */ + 0xAE, 0xCE, 0x00, 0x00, 0x00, 0x00, 0xAE, 0xCB, /* 0x4C-0x4F */ + 0x00, 0x00, 0xD1, 0xD6, 0xAE, 0xCD, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xD5, 0xAC, 0xB1, 0xDF, 0xD5, 0xAB, /* 0x58-0x5B */ + 0xD5, 0xAD, 0xB1, 0xDE, 0xB1, 0xE3, 0xD1, 0xD4, /* 0x5C-0x5F */ + 0x00, 0x00, 0xD5, 0xAA, 0xD5, 0xAE, 0x00, 0x00, /* 0x60-0x63 */ + 0xB1, 0xE0, 0xD5, 0xA9, 0xB1, 0xE2, 0x00, 0x00, /* 0x64-0x67 */ + 0xB1, 0xE1, 0x00, 0x00, 0xD9, 0xA7, 0x00, 0x00, /* 0x68-0x6B */ + 0xD9, 0xA2, 0x00, 0x00, 0xB4, 0xB6, 0xB4, 0xBA, /* 0x6C-0x6F */ + 0xB4, 0xB7, 0xD9, 0xA5, 0xD9, 0xA8, 0x00, 0x00, /* 0x70-0x73 */ + 0xB4, 0xB8, 0x00, 0x00, 0xB4, 0xB9, 0xB4, 0xBE, /* 0x74-0x77 */ + 0xDD, 0xC7, 0xD9, 0xA6, 0xB4, 0xBC, 0xD9, 0xA3, /* 0x78-0x7B */ + 0xD9, 0xA1, 0x00, 0x00, 0xB4, 0xBD, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xD9, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xB7, 0x79, 0x00, 0x00, 0xDD, 0xBF, 0xB7, 0x76, /* 0x84-0x87 */ + 0xB7, 0x77, 0xB7, 0x75, 0xDD, 0xC4, 0xDD, 0xC3, /* 0x88-0x8B */ + 0xDD, 0xC0, 0xB7, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xDD, 0xC2, 0xB4, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xDD, 0xC6, 0xDD, 0xC1, 0xB7, 0x78, 0xB7, 0x74, /* 0x94-0x97 */ + 0xB7, 0x7A, 0xDD, 0xC5, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xBA, 0x5C, 0x00, 0x00, 0xE1, 0xF8, /* 0x9C-0x9F */ + 0xE1, 0xF7, 0xE1, 0xF6, 0xBA, 0x5A, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xBA, 0x5B, 0xE5, 0xC5, 0xE5, 0xC8, 0xBC, 0xC8, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xBC, 0xC7, 0xE5, 0xC9, /* 0xAC-0xAF */ + 0xE5, 0xC4, 0xBC, 0xCA, 0xE5, 0xC6, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xBC, 0xC9, 0xE5, 0xC3, 0x00, 0x00, 0xE5, 0xC7, /* 0xB4-0xB7 */ + 0xBE, 0xE9, 0xBE, 0xE6, 0xE9, 0xBB, 0xE9, 0xBA, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE9, 0xB9, 0xE9, 0xB4, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE9, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xBE, 0xE7, 0x00, 0x00, 0xBE, 0xE4, 0xBE, 0xE8, /* 0xC4-0xC7 */ + 0xE9, 0xB3, 0xBE, 0xE5, 0xE9, 0xB6, 0xE9, 0xB7, /* 0xC8-0xCB */ + 0xE9, 0xBC, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xB8, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xF2, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC7, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xEF, 0xDC, 0xC0, 0xC6, 0xEF, 0xDA, 0xEF, 0xDB, /* 0xD8-0xDB */ + 0xC2, 0x60, 0xC3, 0x6E, 0xF2, 0x4B, 0x00, 0x00, /* 0xDC-0xDF */ + 0xC3, 0x6D, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x51, /* 0xE0-0xE3 */ + 0xF4, 0x52, 0x00, 0x00, 0xC4, 0x66, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF4, 0x50, 0xC4, 0xE4, 0x00, 0x00, 0xF7, 0xDF, /* 0xE8-0xEB */ + 0xC5, 0xCE, 0xF8, 0xAA, 0xF8, 0xAB, 0x00, 0x00, /* 0xEC-0xEF */ + 0xA4, 0xEA, 0x00, 0x00, 0xA6, 0xB1, 0xA6, 0xB2, /* 0xF0-0xF3 */ + 0xA7, 0xF3, 0x00, 0x00, 0xCC, 0xD1, 0xAC, 0x54, /* 0xF4-0xF7 */ + 0xAE, 0xD1, 0xB1, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0xB0, 0xD2, 0x00, 0x00, 0xB4, 0xBF, 0xB4, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_67[512] = { + 0xB3, 0xCC, 0xD9, 0xA9, 0x00, 0x00, 0xB7, 0x7C, /* 0x00-0x03 */ + 0xE1, 0xFA, 0xE1, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xA4, 0xEB, 0xA6, 0xB3, 0xCC, 0xD2, 0xAA, 0x42, /* 0x08-0x0B */ + 0x00, 0x00, 0xAA, 0x41, 0x00, 0x00, 0xCE, 0xF9, /* 0x0C-0x0F */ + 0xCE, 0xFA, 0x00, 0x00, 0xD1, 0xD7, 0xD1, 0xD8, /* 0x10-0x13 */ + 0xAE, 0xD2, 0xAE, 0xD3, 0x00, 0x00, 0xAE, 0xD4, /* 0x14-0x17 */ + 0xD5, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xE6, /* 0x18-0x1B */ + 0x00, 0x00, 0xB4, 0xC2, 0x00, 0x00, 0xB4, 0xC1, /* 0x1C-0x1F */ + 0xDD, 0xC8, 0xDF, 0x7A, 0xE1, 0xFB, 0xE9, 0xBD, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xC2, 0x61, 0xC4, 0x67, /* 0x24-0x27 */ + 0xA4, 0xEC, 0x00, 0x00, 0xA5, 0xBC, 0xA5, 0xBD, /* 0x28-0x2B */ + 0xA5, 0xBB, 0xA5, 0xBE, 0xA5, 0xBA, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xA6, 0xB6, 0x00, 0x00, 0xC9, 0xF6, /* 0x30-0x33 */ + 0xA6, 0xB5, 0xA6, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xC9, 0xF1, 0xC9, 0xF0, 0xC9, 0xF3, 0xC9, 0xF2, /* 0x38-0x3B */ + 0xC9, 0xF5, 0xA6, 0xB4, 0xC9, 0xEF, 0xC9, 0xF4, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xCA, 0xFD, 0xA7, 0xFD, 0xCA, 0xFE, /* 0x44-0x47 */ + 0xCB, 0x43, 0xA7, 0xFC, 0x00, 0x00, 0xCB, 0x47, /* 0x48-0x4B */ + 0xCB, 0x42, 0xCB, 0x45, 0xA7, 0xF5, 0xA7, 0xF6, /* 0x4C-0x4F */ + 0xA7, 0xF7, 0xA7, 0xF8, 0x00, 0x00, 0xA8, 0x40, /* 0x50-0x53 */ + 0x00, 0x00, 0xCB, 0x41, 0xA7, 0xFA, 0xA8, 0x41, /* 0x54-0x57 */ + 0x00, 0x00, 0xCB, 0x40, 0xCB, 0x46, 0x00, 0x00, /* 0x58-0x5B */ + 0xA7, 0xF9, 0xCB, 0x44, 0xA7, 0xFB, 0xA7, 0xF4, /* 0x5C-0x5F */ + 0xA7, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xAA, 0x57, 0x00, 0x00, /* 0x68-0x6B */ + 0xCC, 0xD4, 0xAA, 0x43, 0x00, 0x00, 0xAA, 0x4D, /* 0x6C-0x6F */ + 0xAA, 0x4E, 0xAA, 0x46, 0xAA, 0x58, 0xAA, 0x48, /* 0x70-0x73 */ + 0xCC, 0xDC, 0xAA, 0x53, 0xCC, 0xD7, 0xAA, 0x49, /* 0x74-0x77 */ + 0xCC, 0xE6, 0xCC, 0xE7, 0xCC, 0xDF, 0xCC, 0xD8, /* 0x78-0x7B */ + 0xAA, 0x56, 0xCC, 0xE4, 0xAA, 0x51, 0xAA, 0x4F, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xCC, 0xE5, 0x00, 0x00, 0xCC, 0xE3, /* 0x80-0x83 */ + 0xCC, 0xDB, 0xCC, 0xD3, 0xCC, 0xDA, 0xAA, 0x4A, /* 0x84-0x87 */ + 0x00, 0x00, 0xAA, 0x50, 0x00, 0x00, 0xAA, 0x44, /* 0x88-0x8B */ + 0xCC, 0xDE, 0xCC, 0xDD, 0xCC, 0xD5, 0x00, 0x00, /* 0x8C-0x8F */ + 0xAA, 0x52, 0xCC, 0xE1, 0xCC, 0xD6, 0xAA, 0x55, /* 0x90-0x93 */ + 0xCC, 0xE8, 0xAA, 0x45, 0x00, 0x00, 0xAA, 0x4C, /* 0x94-0x97 */ + 0xCC, 0xD9, 0xCC, 0xE2, 0xAA, 0x54, 0x00, 0x00, /* 0x98-0x9B */ + 0xAA, 0x47, 0xAA, 0x4B, 0x00, 0x00, 0xCC, 0xE0, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0x5B, 0xAC, 0x5C, /* 0xAC-0xAF */ + 0xAC, 0x69, 0x00, 0x00, 0xCF, 0x56, 0xCF, 0x4C, /* 0xB0-0xB3 */ + 0xAC, 0x62, 0xCF, 0x4A, 0xAC, 0x5B, 0xCF, 0x45, /* 0xB4-0xB7 */ + 0xAC, 0x65, 0xCF, 0x52, 0xCE, 0xFE, 0xCF, 0x41, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCF, 0x44, 0xCE, 0xFB, 0xCF, 0x51, 0xCF, 0x61, /* 0xC0-0xC3 */ + 0xAC, 0x60, 0xCF, 0x46, 0xCF, 0x58, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xCE, 0xFD, 0xCF, 0x5F, 0xCF, 0x60, 0xCF, 0x63, /* 0xC8-0xCB */ + 0xCF, 0x5A, 0xCF, 0x4B, 0xCF, 0x53, 0xAC, 0x66, /* 0xCC-0xCF */ + 0xAC, 0x59, 0xAC, 0x61, 0xAC, 0x6D, 0xAC, 0x56, /* 0xD0-0xD3 */ + 0xAC, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xCF, 0x43, 0xAC, 0x6A, 0xAC, 0x63, 0xCF, 0x5D, /* 0xD8-0xDB */ + 0xCF, 0x40, 0xAC, 0x6C, 0xAC, 0x67, 0xCF, 0x49, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xAC, 0x6B, 0xCF, 0x50, /* 0xE0-0xE3 */ + 0xCF, 0x48, 0xAC, 0x64, 0xCF, 0x5C, 0xCF, 0x54, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xAC, 0x5E, 0xCF, 0x62, 0xCF, 0x47, /* 0xE8-0xEB */ + 0xAC, 0x5A, 0xCF, 0x59, 0xCF, 0x4F, 0xAC, 0x5F, /* 0xEC-0xEF */ + 0xCF, 0x55, 0xAC, 0x57, 0xCE, 0xFC, 0xAC, 0x68, /* 0xF0-0xF3 */ + 0xAE, 0xE3, 0xAC, 0x5D, 0xCF, 0x4E, 0xCF, 0x4D, /* 0xF4-0xF7 */ + 0xCF, 0x42, 0x00, 0x00, 0xCF, 0x5E, 0x00, 0x00, /* 0xF8-0xFB */ + 0xCF, 0x57, 0x00, 0x00, 0x00, 0x00, 0xAC, 0x55, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_68[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xEC, 0xAE, 0xEA, /* 0x10-0x13 */ + 0xD1, 0xED, 0x00, 0x00, 0xD1, 0xE1, 0xAE, 0xDF, /* 0x14-0x17 */ + 0xAE, 0xEB, 0x00, 0x00, 0xD1, 0xDA, 0x00, 0x00, /* 0x18-0x1B */ + 0xD1, 0xE3, 0xD1, 0xEB, 0x00, 0x00, 0xD1, 0xD9, /* 0x1C-0x1F */ + 0xD1, 0xF4, 0xAE, 0xD5, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xD1, 0xF3, 0xD1, 0xEE, 0x00, 0x00, /* 0x24-0x27 */ + 0xD1, 0xEF, 0xAE, 0xDD, 0xAE, 0xE8, 0xD1, 0xE5, /* 0x28-0x2B */ + 0x00, 0x00, 0xD1, 0xE6, 0xD1, 0xF0, 0xD1, 0xE7, /* 0x2C-0x2F */ + 0x00, 0x00, 0xD1, 0xE2, 0xD1, 0xDC, 0xD1, 0xDD, /* 0x30-0x33 */ + 0xD1, 0xEA, 0xD1, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xAE, 0xD6, 0xAE, 0xDA, 0xD1, 0xF2, 0xD1, 0xDE, /* 0x38-0x3B */ + 0xAE, 0xE6, 0xAE, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xAE, 0xE5, 0xAE, 0xEC, 0xAE, 0xDB, 0xAE, 0xE7, /* 0x40-0x43 */ + 0xD1, 0xE9, 0xAE, 0xE9, 0xAE, 0xD8, 0x00, 0x00, /* 0x44-0x47 */ + 0xAE, 0xD7, 0xD1, 0xDB, 0x00, 0x00, 0xD1, 0xDF, /* 0x48-0x4B */ + 0xAE, 0xE0, 0xD1, 0xF1, 0xD1, 0xE8, 0xD1, 0xE0, /* 0x4C-0x4F */ + 0xAE, 0xE4, 0xAE, 0xE1, 0x00, 0x00, 0xAE, 0xD9, /* 0x50-0x53 */ + 0xAE, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC4, /* 0x68-0x6B */ + 0x00, 0x00, 0xD5, 0xB4, 0xD5, 0xB5, 0xD5, 0xB9, /* 0x6C-0x6F */ + 0x00, 0x00, 0xD5, 0xC8, 0xD5, 0xC5, 0x00, 0x00, /* 0x70-0x73 */ + 0xD5, 0xBE, 0xD5, 0xBD, 0xB1, 0xED, 0xD5, 0xC1, /* 0x74-0x77 */ + 0xD5, 0xD0, 0xD5, 0xB0, 0x00, 0x00, 0xD5, 0xD1, /* 0x78-0x7B */ + 0xD5, 0xC3, 0xD5, 0xD5, 0xD5, 0xC9, 0xB1, 0xEC, /* 0x7C-0x7F */ + + 0xD5, 0xC7, 0xB1, 0xE7, 0xB1, 0xFC, 0xB1, 0xF2, /* 0x80-0x83 */ + 0x00, 0x00, 0xB1, 0xF6, 0xB1, 0xF5, 0xD5, 0xB1, /* 0x84-0x87 */ + 0x00, 0x00, 0xD5, 0xCE, 0xD5, 0xD4, 0xD5, 0xCC, /* 0x88-0x8B */ + 0xD5, 0xD3, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC0, /* 0x8C-0x8F */ + 0xD5, 0xB2, 0xD5, 0xD2, 0xD5, 0xC2, 0xB1, 0xEA, /* 0x90-0x93 */ + 0xB1, 0xF7, 0x00, 0x00, 0xD5, 0xCB, 0xB1, 0xF0, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xCA, /* 0x98-0x9B */ + 0xD5, 0xB3, 0xB1, 0xF8, 0x00, 0x00, 0xB1, 0xFA, /* 0x9C-0x9F */ + 0xD5, 0xCD, 0xB1, 0xFB, 0xB1, 0xE9, 0xD5, 0xBA, /* 0xA0-0xA3 */ + 0xD5, 0xCF, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xEF, /* 0xA4-0xA7 */ + 0xB1, 0xF9, 0xD5, 0xBC, 0xD5, 0xC6, 0xD5, 0xB7, /* 0xA8-0xAB */ + 0xD5, 0xBB, 0xB1, 0xF4, 0xD5, 0xB6, 0xB1, 0xE8, /* 0xAC-0xAF */ + 0xB1, 0xF1, 0xB1, 0xEE, 0xD5, 0xBF, 0xAE, 0xDE, /* 0xB0-0xB3 */ + 0xD9, 0xC0, 0xB1, 0xEB, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xB1, 0xF3, 0x00, 0x00, 0xD9, 0xC3, 0xD9, 0xD9, /* 0xC4-0xC7 */ + 0xD9, 0xCE, 0xB4, 0xD6, 0x00, 0x00, 0xB4, 0xD1, /* 0xC8-0xCB */ + 0xD9, 0xBD, 0xB4, 0xD2, 0xD9, 0xCD, 0x00, 0x00, /* 0xCC-0xCF */ + 0xD9, 0xC6, 0xD9, 0xD3, 0xB4, 0xCE, 0xD9, 0xAB, /* 0xD0-0xD3 */ + 0xD9, 0xD5, 0xB4, 0xC4, 0xD9, 0xB3, 0xB4, 0xC7, /* 0xD4-0xD7 */ + 0xB4, 0xC6, 0x00, 0x00, 0xB4, 0xD7, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD9, 0xAD, 0xD9, 0xCF, 0xD9, 0xD0, 0xB4, 0xC9, /* 0xDC-0xDF */ + 0xB4, 0xC5, 0xD9, 0xBB, 0x00, 0x00, 0xB4, 0xD0, /* 0xE0-0xE3 */ + 0xD9, 0xB6, 0x00, 0x00, 0xD9, 0xD1, 0xB4, 0xCC, /* 0xE4-0xE7 */ + 0xD9, 0xC9, 0xD9, 0xD6, 0xD9, 0xB0, 0xD9, 0xB5, /* 0xE8-0xEB */ + 0xD9, 0xAF, 0x00, 0x00, 0xB4, 0xCB, 0xD9, 0xC2, /* 0xEC-0xEF */ + 0xDD, 0xDE, 0xD9, 0xB1, 0xB4, 0xCF, 0xD9, 0xBA, /* 0xF0-0xF3 */ + 0xD9, 0xD2, 0xB4, 0xCA, 0xD9, 0xB7, 0xD9, 0xB4, /* 0xF4-0xF7 */ + 0xD9, 0xC5, 0xB4, 0xCD, 0xB4, 0xC3, 0xB4, 0xD9, /* 0xF8-0xFB */ + 0xD9, 0xC8, 0xD9, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_69[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xD9, 0xAC, 0xB4, 0xC8, 0xD9, 0xD4, 0xD9, 0xBC, /* 0x04-0x07 */ + 0xD9, 0xBE, 0x00, 0x00, 0xD9, 0xCB, 0xD9, 0xCA, /* 0x08-0x0B */ + 0xD9, 0xAA, 0xB4, 0xD3, 0xB4, 0xD5, 0xD9, 0xB2, /* 0x0C-0x0F */ + 0xD9, 0xB9, 0xD9, 0xC1, 0xB4, 0xD4, 0xD9, 0xB8, /* 0x10-0x13 */ + 0xD9, 0xC4, 0xD9, 0xD7, 0x00, 0x00, 0xD9, 0xCC, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xD9, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xD9, 0xAE, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDD, 0xF2, /* 0x2C-0x2F */ + 0xB7, 0xA6, 0x00, 0x00, 0xDD, 0xF0, 0xDD, 0xDB, /* 0x30-0x33 */ + 0xDD, 0xE0, 0xDD, 0xD9, 0x00, 0x00, 0xDD, 0xEC, /* 0x34-0x37 */ + 0xDD, 0xCB, 0xDD, 0xD2, 0x00, 0x00, 0xDD, 0xEA, /* 0x38-0x3B */ + 0xDD, 0xF4, 0xDD, 0xDC, 0x00, 0x00, 0xDD, 0xCF, /* 0x3C-0x3F */ + 0xDD, 0xE2, 0xDD, 0xE7, 0xDD, 0xD3, 0x00, 0x00, /* 0x40-0x43 */ + 0xDD, 0xE4, 0xDD, 0xD0, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xDD, 0xD7, 0xDD, 0xD8, 0xB7, 0xA8, 0xDD, 0xEB, /* 0x48-0x4B */ + 0xDD, 0xE9, 0x00, 0x00, 0xDD, 0xCC, 0xDD, 0xEE, /* 0x4C-0x4F */ + 0x00, 0x00, 0xDD, 0xEF, 0xDD, 0xF1, 0xB7, 0xAC, /* 0x50-0x53 */ + 0xB7, 0xA4, 0x00, 0x00, 0xD5, 0xB8, 0xDD, 0xD4, /* 0x54-0x57 */ + 0xDD, 0xE6, 0xDD, 0xD5, 0xB7, 0xA1, 0xB7, 0xB1, /* 0x58-0x5B */ + 0xDD, 0xED, 0xB7, 0xAF, 0xB7, 0xAB, 0xDD, 0xCA, /* 0x5C-0x5F */ + 0xB7, 0xA3, 0x00, 0x00, 0xDD, 0xCD, 0xB7, 0xB0, /* 0x60-0x63 */ + 0x00, 0x00, 0xDD, 0xDD, 0xDD, 0xC9, 0x00, 0x00, /* 0x64-0x67 */ + 0xB7, 0xA9, 0xDD, 0xE1, 0xDD, 0xD1, 0xB7, 0xAA, /* 0x68-0x6B */ + 0xDD, 0xDA, 0xB7, 0x7E, 0xB4, 0xD8, 0xDD, 0xE3, /* 0x6C-0x6F */ + 0xD9, 0xBF, 0xDD, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xDD, 0xE8, 0xB7, 0xA5, 0xDD, 0xE5, 0xB7, 0xA2, /* 0x74-0x77 */ + 0xDD, 0xDF, 0xB7, 0xAD, 0xDD, 0xD6, 0xDD, 0xF3, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xB7, 0xA7, 0xDE, 0xC6, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0xAE, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xE2, 0x4A, 0xE2, 0x48, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE2, 0x5E, 0xE2, 0x46, 0x00, 0x00, 0xE2, 0x58, /* 0x90-0x93 */ + 0xB7, 0x7D, 0xBA, 0x5F, 0xE2, 0x42, 0xE2, 0x5D, /* 0x94-0x97 */ + 0x00, 0x00, 0xE2, 0x47, 0xE2, 0x55, 0xBA, 0x64, /* 0x98-0x9B */ + 0xBA, 0x5D, 0x00, 0x00, 0xE2, 0x5B, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE2, 0x40, 0xE2, 0x5A, 0x00, 0x00, 0xBA, 0x6F, /* 0xA0-0xA3 */ + 0xE2, 0x51, 0xE2, 0x61, 0xBA, 0x6D, 0xE2, 0x49, /* 0xA4-0xA7 */ + 0xBA, 0x5E, 0xE2, 0x4B, 0xE2, 0x59, 0xBA, 0x67, /* 0xA8-0xAB */ + 0xE2, 0x44, 0xBA, 0x6B, 0xBA, 0x61, 0xE2, 0x4D, /* 0xAC-0xAF */ + 0xE2, 0x43, 0xE1, 0xFC, 0x00, 0x00, 0xE2, 0x57, /* 0xB0-0xB3 */ + 0xBA, 0x68, 0xE2, 0x60, 0xE1, 0xFD, 0xBA, 0x65, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE2, 0x53, 0x00, 0x00, 0xBA, 0x66, /* 0xB8-0xBB */ + 0xE2, 0x45, 0xE2, 0x50, 0xE2, 0x4C, 0xE2, 0x4E, /* 0xBC-0xBF */ + 0x00, 0x00, 0xBA, 0x60, 0xE2, 0x5F, 0xBA, 0x6E, /* 0xC0-0xC3 */ + 0xE2, 0x4F, 0x00, 0x00, 0xE2, 0x62, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE1, 0xFE, 0xE2, 0x54, 0xBA, 0x63, /* 0xC8-0xCB */ + 0xBA, 0x6C, 0xBA, 0x6A, 0xE2, 0x41, 0xE2, 0x56, /* 0xCC-0xCF */ + 0xBA, 0x69, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x62, /* 0xD0-0xD3 */ + 0xE2, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE2, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xE5, 0xD5, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xE5, 0xD1, 0xE5, 0xCD, 0xE5, 0xE1, 0xE5, 0xDE, /* 0xE4-0xE7 */ + 0xBC, 0xCD, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE5, /* 0xE8-0xEB */ + 0xE5, 0xD4, 0xBC, 0xD8, 0xE5, 0xDB, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE5, 0xD0, 0xE5, 0xDA, 0xBC, 0xD5, /* 0xF0-0xF3 */ + 0xE5, 0xEE, 0x00, 0x00, 0xE5, 0xEB, 0xE5, 0xDD, /* 0xF4-0xF7 */ + 0xE5, 0xCE, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xE2, /* 0xF8-0xFB */ + 0xE5, 0xE4, 0xBC, 0xD1, 0xE5, 0xD8, 0xE5, 0xD3, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6A[512] = { + 0xE5, 0xCA, 0xBC, 0xCE, 0xBC, 0xD6, 0x00, 0x00, /* 0x00-0x03 */ + 0xE5, 0xE7, 0xBC, 0xD7, 0xE5, 0xCB, 0xE5, 0xED, /* 0x04-0x07 */ + 0xE5, 0xE0, 0xE5, 0xE6, 0xBC, 0xD4, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE5, 0xE3, 0x00, 0x00, 0xE5, 0xEA, /* 0x0C-0x0F */ + 0x00, 0x00, 0xBC, 0xD9, 0x00, 0x00, 0xBC, 0xD3, /* 0x10-0x13 */ + 0xE5, 0xDC, 0xE5, 0xCF, 0xE5, 0xEF, 0xE5, 0xCC, /* 0x14-0x17 */ + 0xE5, 0xE8, 0xBC, 0xD0, 0x00, 0x00, 0xE5, 0xD6, /* 0x18-0x1B */ + 0x00, 0x00, 0xE5, 0xD7, 0xBC, 0xCF, 0xBC, 0xCC, /* 0x1C-0x1F */ + 0xE5, 0xD2, 0xBC, 0xD2, 0x00, 0x00, 0xBC, 0xCB, /* 0x20-0x23 */ + 0x00, 0x00, 0xE5, 0xE9, 0xE5, 0xEC, 0xE5, 0xD9, /* 0x24-0x27 */ + 0xE9, 0xCA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC2, 0x00, 0x00, /* 0x30-0x33 */ + 0xE9, 0xBE, 0xBE, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xBE, 0xEB, 0xBE, 0xF0, 0xBE, 0xEC, 0xE9, 0xCC, /* 0x38-0x3B */ + 0xE9, 0xD7, 0xBE, 0xEA, 0xE9, 0xC4, 0xE9, 0xCD, /* 0x3C-0x3F */ + 0xE5, 0xDF, 0xE9, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xBE, 0xF1, 0x00, 0x00, 0xE9, 0xDD, 0xBE, 0xF5, /* 0x44-0x47 */ + 0xBE, 0xF8, 0xE9, 0xC0, 0x00, 0x00, 0xBE, 0xF4, /* 0x48-0x4B */ + 0x00, 0x00, 0xE9, 0xDB, 0xE9, 0xDC, 0xE9, 0xD2, /* 0x4C-0x4F */ + 0xE9, 0xD1, 0xE9, 0xC9, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE9, 0xD3, 0xE9, 0xDA, 0xE9, 0xD9, 0x00, 0x00, /* 0x54-0x57 */ + 0xBE, 0xEF, 0xBE, 0xED, 0xE9, 0xCB, 0xE9, 0xC8, /* 0x58-0x5B */ + 0x00, 0x00, 0xE9, 0xC5, 0xE9, 0xD8, 0xBE, 0xF7, /* 0x5C-0x5F */ + 0xE9, 0xD6, 0xBE, 0xF3, 0xBE, 0xF2, 0x00, 0x00, /* 0x60-0x63 */ + 0xE9, 0xD0, 0x00, 0x00, 0xE9, 0xBF, 0xE9, 0xC1, /* 0x64-0x67 */ + 0xE9, 0xC3, 0xE9, 0xD5, 0xE9, 0xCF, 0xBE, 0xEE, /* 0x68-0x6B */ + 0x00, 0x00, 0xE9, 0xC6, 0x00, 0x00, 0xE9, 0xD4, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC7, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xCF, 0xED, 0x45, /* 0x7C-0x7F */ + + 0xC0, 0xC8, 0xEC, 0xF5, 0x00, 0x00, 0xED, 0x41, /* 0x80-0x83 */ + 0xC0, 0xCA, 0xED, 0x48, 0x00, 0x00, 0xEC, 0xFC, /* 0x84-0x87 */ + 0x00, 0x00, 0xEC, 0xF7, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xED, 0x49, 0xEC, 0xF3, 0xEC, 0xFE, 0x00, 0x00, /* 0x8C-0x8F */ + 0xC0, 0xD1, 0xED, 0x44, 0xED, 0x4A, 0xEC, 0xFD, /* 0x90-0x93 */ + 0xC0, 0xC9, 0xED, 0x40, 0xEC, 0xF4, 0xC0, 0xD0, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0x47, 0xEC, 0xF9, /* 0x98-0x9B */ + 0xC0, 0xCC, 0x00, 0x00, 0xEC, 0xFB, 0xEC, 0xF8, /* 0x9C-0x9F */ + 0xC0, 0xD2, 0xEC, 0xFA, 0xC0, 0xCB, 0xC0, 0xCE, /* 0xA0-0xA3 */ + 0xED, 0x43, 0xEC, 0xF6, 0xED, 0x46, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xED, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xC2, 0x63, 0xEF, 0xE7, 0xC2, 0x68, 0xC2, 0x69, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x62, /* 0xB0-0xB3 */ + 0xEF, 0xE6, 0x00, 0x00, 0xEF, 0xE3, 0xEF, 0xE4, /* 0xB4-0xB7 */ + 0xC2, 0x66, 0xEF, 0xDE, 0xEF, 0xE2, 0xC2, 0x65, /* 0xB8-0xBB */ + 0x00, 0x00, 0xEF, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xC2, 0x67, 0xC2, 0x64, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xEF, 0xDD, 0xEF, 0xE1, 0xEF, 0xE5, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0x51, /* 0xC8-0xCB */ + 0xF2, 0x4E, 0xF2, 0x57, 0x00, 0x00, 0xF2, 0x56, /* 0xCC-0xCF */ + 0xF2, 0x54, 0xF2, 0x4F, 0x00, 0x00, 0xC3, 0x72, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xF2, 0x50, 0xC3, 0x71, 0xC0, 0xCD, /* 0xD8-0xDB */ + 0xF2, 0x53, 0xC3, 0x70, 0xF2, 0x58, 0xF2, 0x52, /* 0xDC-0xDF */ + 0xF2, 0x4D, 0xEF, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xC3, 0x6F, 0x00, 0x00, 0xF2, 0x4C, /* 0xE4-0xE7 */ + 0xF4, 0x56, 0x00, 0x00, 0xF4, 0x55, 0xF2, 0x55, /* 0xE8-0xEB */ + 0xC4, 0x68, 0x00, 0x00, 0xF4, 0x59, 0xF4, 0x5A, /* 0xEC-0xEF */ + 0xF4, 0x54, 0xF4, 0x58, 0x00, 0x00, 0xF4, 0x53, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xF5, 0xD1, 0xF4, 0x57, 0xC4, 0xE7, 0xC4, 0xE5, /* 0xF8-0xFB */ + 0xF5, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6B[512] = { + 0xF5, 0xD2, 0x00, 0x00, 0xF5, 0xCE, 0xF5, 0xD0, /* 0x00-0x03 */ + 0xC4, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xF6, 0xE5, 0xF6, 0xE6, 0xC5, 0x76, 0xF6, 0xE4, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xE2, /* 0x0C-0x0F */ + 0xC5, 0xCF, 0xF7, 0xE0, 0xF7, 0xE1, 0xF8, 0xAC, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xC6, 0x56, 0xF8, 0xF3, /* 0x14-0x17 */ + 0xF8, 0xF1, 0xF8, 0xF2, 0xF8, 0xF4, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xBB, 0x00, 0x00, /* 0x1C-0x1F */ + 0xA4, 0xED, 0xA6, 0xB8, 0x00, 0x00, 0xAA, 0x59, /* 0x20-0x23 */ + 0x00, 0x00, 0xCC, 0xE9, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xCF, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0xD1, 0xF5, 0xD1, 0xF7, 0x00, 0x00, 0xD1, 0xF6, /* 0x2C-0x2F */ + 0x00, 0x00, 0xD1, 0xF8, 0xB1, 0xFD, 0xD5, 0xD7, /* 0x30-0x33 */ + 0xD1, 0xF9, 0x00, 0x00, 0xD5, 0xD6, 0xD5, 0xD8, /* 0x34-0x37 */ + 0xD5, 0xD9, 0xD9, 0xDA, 0xB4, 0xDB, 0xD9, 0xDB, /* 0x38-0x3B */ + 0xD9, 0xDD, 0xB4, 0xDC, 0xB4, 0xDA, 0xD9, 0xDC, /* 0x3C-0x3F */ + 0x00, 0x00, 0xDD, 0xFA, 0xDD, 0xF8, 0xDD, 0xF7, /* 0x40-0x43 */ + 0x00, 0x00, 0xDD, 0xF6, 0xDD, 0xF5, 0xB7, 0xB2, /* 0x44-0x47 */ + 0xDD, 0xF9, 0xBA, 0x70, 0xE2, 0x63, 0xE2, 0x65, /* 0x48-0x4B */ + 0xBA, 0x71, 0xE2, 0x64, 0xBC, 0xDB, 0x00, 0x00, /* 0x4C-0x4F */ + 0xBC, 0xDA, 0xE5, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xE9, 0xDF, 0xE9, 0xDE, 0xE9, 0xE0, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xBE, 0xF9, 0x00, 0x00, 0xED, 0x4B, /* 0x58-0x5B */ + 0xC0, 0xD3, 0x00, 0x00, 0xEF, 0xE8, 0xC2, 0x6A, /* 0x5C-0x5F */ + 0xF2, 0x59, 0xC5, 0x77, 0xA4, 0xEE, 0xA5, 0xBF, /* 0x60-0x63 */ + 0xA6, 0xB9, 0xA8, 0x42, 0xAA, 0x5A, 0xAA, 0x5B, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xAC, 0x6E, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xD1, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0xB3, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xD1, 0xBE, 0xFA, /* 0x74-0x77 */ + 0xC2, 0x6B, 0xA4, 0xEF, 0x00, 0x00, 0xA6, 0xBA, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xEB, 0xAA, 0x5C, /* 0x7C-0x7F */ + + 0xCC, 0xEA, 0x00, 0x00, 0xCF, 0x65, 0xAC, 0x6F, /* 0x80-0x83 */ + 0xCF, 0x66, 0x00, 0x00, 0xAC, 0x70, 0x00, 0x00, /* 0x84-0x87 */ + 0xD1, 0xFC, 0xAE, 0xEE, 0xAE, 0xED, 0x00, 0x00, /* 0x88-0x8B */ + 0xD5, 0xDE, 0xD5, 0xDC, 0xD5, 0xDD, 0xD5, 0xDB, /* 0x8C-0x8F */ + 0x00, 0x00, 0xD5, 0xDA, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xD9, 0xDE, 0xD9, 0xE1, 0xB4, 0xDE, 0xD9, 0xDF, /* 0x94-0x97 */ + 0xB4, 0xDD, 0xD9, 0xE0, 0x00, 0x00, 0xDD, 0xFB, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x66, 0xE2, 0x67, /* 0x9C-0x9F */ + 0xE2, 0x68, 0x00, 0x00, 0xE5, 0xF3, 0xE5, 0xF2, /* 0xA0-0xA3 */ + 0xBC, 0xDC, 0xE5, 0xF1, 0xE5, 0xF4, 0xE9, 0xE1, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xE2, 0xE9, 0xE3, /* 0xA8-0xAB */ + 0x00, 0x00, 0xED, 0x4C, 0xC0, 0xD4, 0xC2, 0x6C, /* 0xAC-0xAF */ + 0xF2, 0x5A, 0x00, 0x00, 0xC4, 0xE8, 0xC9, 0x5F, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xAC, 0x71, 0xCF, 0x67, 0xAE, 0xEF, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFE, 0x00, 0x00, /* 0xB8-0xBB */ + 0xB4, 0xDF, 0xD9, 0xE2, 0x00, 0x00, 0xB7, 0xB5, /* 0xBC-0xBF */ + 0xB7, 0xB4, 0x00, 0x00, 0x00, 0x00, 0xE2, 0x69, /* 0xC0-0xC3 */ + 0xE2, 0x6A, 0xBC, 0xDD, 0xBC, 0xDE, 0xE9, 0xE5, /* 0xC4-0xC7 */ + 0xE9, 0xE4, 0xEF, 0xE9, 0xF7, 0xE3, 0xA4, 0xF0, /* 0xC8-0xCB */ + 0xC9, 0x60, 0xA5, 0xC0, 0x00, 0x00, 0xA8, 0x43, /* 0xCC-0xCF */ + 0xCB, 0x48, 0x00, 0x00, 0xAC, 0x72, 0xB7, 0xB6, /* 0xD0-0xD3 */ + 0xA4, 0xF1, 0x00, 0x00, 0xCF, 0x68, 0xAC, 0x73, /* 0xD4-0xD7 */ + 0xCF, 0x69, 0x00, 0x00, 0xC0, 0xD5, 0xA4, 0xF2, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0xCC, 0xEC, 0x00, 0x00, /* 0xDC-0xDF */ + 0xCF, 0x6A, 0x00, 0x00, 0xD2, 0x42, 0xD2, 0x41, /* 0xE0-0xE3 */ + 0xD1, 0xFE, 0x00, 0x00, 0xD1, 0xFD, 0xD2, 0x43, /* 0xE4-0xE7 */ + 0xD2, 0x40, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x40, /* 0xE8-0xEB */ + 0xB2, 0x41, 0x00, 0x00, 0x00, 0x00, 0xB4, 0xE0, /* 0xEC-0xEF */ + 0xD9, 0xE3, 0x00, 0x00, 0xD9, 0xE4, 0xD9, 0xE5, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, 0x41, /* 0xF4-0xF7 */ + 0xDE, 0x42, 0xDE, 0x40, 0x00, 0x00, 0xDD, 0xFD, /* 0xF8-0xFB */ + 0xDD, 0xFE, 0xB7, 0xB7, 0xE2, 0x6B, 0xE5, 0xF7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6C[512] = { + 0xE5, 0xF6, 0xE5, 0xF5, 0xE5, 0xF8, 0xE9, 0xE7, /* 0x00-0x03 */ + 0xE9, 0xE6, 0xBE, 0xFB, 0xE9, 0xE8, 0x00, 0x00, /* 0x04-0x07 */ + 0xC0, 0xD6, 0xED, 0x4D, 0x00, 0x00, 0xEF, 0xEA, /* 0x08-0x0B */ + 0xF2, 0x5B, 0xF6, 0xE7, 0x00, 0x00, 0xA4, 0xF3, /* 0x0C-0x0F */ + 0xA5, 0xC2, 0xA5, 0xC1, 0x00, 0x00, 0xAA, 0x5D, /* 0x10-0x13 */ + 0xC9, 0x61, 0xC9, 0x7E, 0xA6, 0xBB, 0x00, 0x00, /* 0x14-0x17 */ + 0xC9, 0xF7, 0xCB, 0x49, 0xCB, 0x4A, 0xAA, 0x5E, /* 0x18-0x1B */ + 0x00, 0x00, 0xCC, 0xED, 0x00, 0x00, 0xAC, 0x74, /* 0x1C-0x1F */ + 0xCF, 0x6B, 0xCF, 0x6C, 0x00, 0x00, 0xAE, 0xF0, /* 0x20-0x23 */ + 0xAE, 0xF4, 0xD2, 0x44, 0xAE, 0xF3, 0xAE, 0xF1, /* 0x24-0x27 */ + 0xAE, 0xF2, 0x00, 0x00, 0xD5, 0xDF, 0xB2, 0x42, /* 0x28-0x2B */ + 0xB4, 0xE3, 0x00, 0x00, 0xB4, 0xE1, 0xB4, 0xE2, /* 0x2C-0x2F */ + 0xD9, 0xE6, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x72, /* 0x30-0x33 */ + 0xA4, 0xF4, 0x00, 0x00, 0xC9, 0xA1, 0x00, 0x00, /* 0x34-0x37 */ + 0xA5, 0xC3, 0x00, 0x00, 0x00, 0x00, 0xC9, 0xA4, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xA5, 0xC6, 0xC9, 0xA3, /* 0x3C-0x3F */ + 0xA5, 0xC5, 0xA5, 0xC4, 0xA8, 0x44, 0xC9, 0xA2, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xC9, 0xF8, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xC9, 0xFC, 0xC9, 0xFE, /* 0x48-0x4B */ + 0xCA, 0x40, 0xA6, 0xC5, 0xA6, 0xC6, 0xC9, 0xFB, /* 0x4C-0x4F */ + 0xA6, 0xC1, 0x00, 0x00, 0xC9, 0xF9, 0x00, 0x00, /* 0x50-0x53 */ + 0xC9, 0xFD, 0xA6, 0xC2, 0x00, 0x00, 0xA6, 0xBD, /* 0x54-0x57 */ + 0x00, 0x00, 0xA6, 0xBE, 0x00, 0x00, 0xA6, 0xC4, /* 0x58-0x5B */ + 0xC9, 0xFA, 0xA6, 0xBC, 0xA8, 0x45, 0xA6, 0xBF, /* 0x5C-0x5F */ + 0xA6, 0xC0, 0xA6, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xCB, 0x5B, 0xCB, 0x59, 0xCB, 0x4C, /* 0x64-0x67 */ + 0xA8, 0x51, 0xCB, 0x53, 0xA8, 0x4C, 0xCB, 0x4D, /* 0x68-0x6B */ + 0x00, 0x00, 0xCB, 0x55, 0x00, 0x00, 0xCB, 0x52, /* 0x6C-0x6F */ + 0xA8, 0x4F, 0xCB, 0x51, 0xA8, 0x56, 0xCB, 0x5A, /* 0x70-0x73 */ + 0xA8, 0x58, 0x00, 0x00, 0xA8, 0x5A, 0x00, 0x00, /* 0x74-0x77 */ + 0xCB, 0x4B, 0x00, 0x00, 0xA8, 0x4D, 0xCB, 0x5C, /* 0x78-0x7B */ + 0x00, 0x00, 0xA8, 0x54, 0xA8, 0x57, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xCD, 0x45, 0xA8, 0x47, 0xA8, 0x5E, 0xA8, 0x55, /* 0x80-0x83 */ + 0xCB, 0x4E, 0xA8, 0x4A, 0xA8, 0x59, 0xCB, 0x56, /* 0x84-0x87 */ + 0xA8, 0x48, 0xA8, 0x49, 0xCD, 0x43, 0xCB, 0x4F, /* 0x88-0x8B */ + 0xA8, 0x50, 0xA8, 0x5B, 0xCB, 0x5D, 0xCB, 0x50, /* 0x8C-0x8F */ + 0xA8, 0x4E, 0x00, 0x00, 0xA8, 0x53, 0xCC, 0xEE, /* 0x90-0x93 */ + 0xA8, 0x5C, 0xCB, 0x57, 0xA8, 0x52, 0x00, 0x00, /* 0x94-0x97 */ + 0xA8, 0x5D, 0xA8, 0x46, 0xCB, 0x54, 0xA8, 0x4B, /* 0x98-0x9B */ + 0xCB, 0x58, 0xCD, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0x6A, /* 0xA8-0xAB */ + 0xAA, 0x7A, 0xCC, 0xF5, 0xAA, 0x71, 0x00, 0x00, /* 0xAC-0xAF */ + 0xCD, 0x4B, 0xAA, 0x62, 0x00, 0x00, 0xAA, 0x65, /* 0xB0-0xB3 */ + 0xCD, 0x42, 0x00, 0x00, 0xCC, 0xF3, 0xCC, 0xF7, /* 0xB4-0xB7 */ + 0xAA, 0x6D, 0xAA, 0x6F, 0xCC, 0xFA, 0xAA, 0x76, /* 0xB8-0xBB */ + 0xAA, 0x68, 0xAA, 0x66, 0xAA, 0x67, 0xAA, 0x75, /* 0xBC-0xBF */ + 0xCD, 0x47, 0xAA, 0x70, 0xCC, 0xF9, 0xCC, 0xFB, /* 0xC0-0xC3 */ + 0xAA, 0x6E, 0xAA, 0x73, 0xCC, 0xFC, 0xCD, 0x4A, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xAC, 0x75, 0xAA, 0x79, 0x00, 0x00, /* 0xC8-0xCB */ + 0xAA, 0x63, 0xCD, 0x49, 0x00, 0x00, 0xCD, 0x4D, /* 0xCC-0xCF */ + 0xCC, 0xF8, 0xCD, 0x4F, 0xCD, 0x40, 0xAA, 0x6C, /* 0xD0-0xD3 */ + 0xCC, 0xF4, 0xAA, 0x6B, 0xAA, 0x7D, 0xAA, 0x72, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xCC, 0xF2, 0xCF, 0x75, 0xAA, 0x78, /* 0xD8-0xDB */ + 0xAA, 0x7C, 0xCD, 0x41, 0xCD, 0x46, 0x00, 0x00, /* 0xDC-0xDF */ + 0xAA, 0x7E, 0xAA, 0x77, 0xAA, 0x69, 0xAA, 0x5F, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xAA, 0x64, 0x00, 0x00, 0xCC, 0xF6, /* 0xE4-0xE7 */ + 0xAA, 0x60, 0xCD, 0x4E, 0x00, 0x00, 0xCC, 0xF0, /* 0xE8-0xEB */ + 0xCC, 0xEF, 0xCC, 0xFD, 0xCC, 0xF1, 0xAA, 0x7B, /* 0xEC-0xEF */ + 0xAE, 0xF5, 0xAA, 0x74, 0xCC, 0xFE, 0xAA, 0x61, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xAC, 0xA6, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xCD, 0x4C, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_6D[512] = { + 0xCF, 0x7C, 0xCF, 0xA1, 0x00, 0x00, 0xCF, 0xA4, /* 0x00-0x03 */ + 0xCF, 0x77, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xA7, /* 0x04-0x07 */ + 0xCF, 0xAA, 0xCF, 0xAC, 0xCF, 0x74, 0xAC, 0x76, /* 0x08-0x0B */ + 0xAC, 0x7B, 0xD2, 0x49, 0xAC, 0xAD, 0xCF, 0xA5, /* 0x0C-0x0F */ + 0xCF, 0xAD, 0xCF, 0x7B, 0xCF, 0x73, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0x64, 0xAC, 0x7E, /* 0x14-0x17 */ + 0xCF, 0xA2, 0xCF, 0x78, 0xCF, 0x7A, 0xAC, 0xA5, /* 0x18-0x1B */ + 0x00, 0x00, 0xCF, 0x7D, 0xAC, 0x7D, 0xCF, 0x70, /* 0x1C-0x1F */ + 0xCF, 0xA8, 0x00, 0x00, 0xCF, 0xAB, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xAC, 0x7A, 0x00, 0x00, 0xAC, 0xA8, /* 0x24-0x27 */ + 0xCF, 0x6D, 0xAC, 0xAA, 0xAC, 0x78, 0xAC, 0xAE, /* 0x28-0x2B */ + 0xCF, 0xA9, 0xCF, 0x6F, 0xAC, 0xAB, 0xD2, 0x5E, /* 0x2C-0x2F */ + 0xCD, 0x48, 0xAC, 0x7C, 0xAC, 0x77, 0xCF, 0x76, /* 0x30-0x33 */ + 0xCF, 0x6E, 0xAC, 0xAC, 0xAC, 0xA4, 0xCF, 0xA3, /* 0x34-0x37 */ + 0xAC, 0xA9, 0xAC, 0xA7, 0xCF, 0x79, 0xAC, 0xA1, /* 0x38-0x3B */ + 0xCF, 0x71, 0xAC, 0xA2, 0xAC, 0xA3, 0xCF, 0x72, /* 0x3C-0x3F */ + 0xCF, 0xA6, 0xAC, 0x79, 0xCF, 0x7E, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xD2, 0x4C, 0xAE, 0xFD, 0xAF, 0x43, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0x55, 0xD2, 0x5B, /* 0x5C-0x5F */ + 0xD2, 0x57, 0xD2, 0x4A, 0xD2, 0x4D, 0xD2, 0x46, /* 0x60-0x63 */ + 0xD2, 0x47, 0xAF, 0x4A, 0xAE, 0xFA, 0xD2, 0x56, /* 0x64-0x67 */ + 0xD2, 0x5F, 0xAF, 0x45, 0xAE, 0xF6, 0x00, 0x00, /* 0x68-0x6B */ + 0xAF, 0x40, 0xD2, 0x4E, 0xAF, 0x42, 0xD2, 0x4F, /* 0x6C-0x6F */ + 0xD2, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xAF, 0x44, 0xD2, 0x68, 0xD2, 0x48, 0xAE, 0xFC, /* 0x74-0x77 */ + 0xAE, 0xFB, 0xAF, 0x48, 0xD2, 0x45, 0xD2, 0x66, /* 0x78-0x7B */ + 0xD2, 0x5A, 0xD2, 0x67, 0xD2, 0x61, 0xD2, 0x53, /* 0x7C-0x7F */ + + 0xD2, 0x62, 0x00, 0x00, 0xD2, 0x5C, 0xD2, 0x65, /* 0x80-0x83 */ + 0xD2, 0x63, 0xAF, 0x49, 0xD2, 0x54, 0xAE, 0xF9, /* 0x84-0x87 */ + 0xAE, 0xF8, 0xAF, 0x41, 0xAF, 0x47, 0xD2, 0x60, /* 0x88-0x8B */ + 0xAF, 0x46, 0xD2, 0x51, 0xB2, 0x43, 0x00, 0x00, /* 0x8C-0x8F */ + 0xD2, 0x69, 0xD2, 0x50, 0xD2, 0x4B, 0xAE, 0xFE, /* 0x90-0x93 */ + 0xAF, 0x4B, 0xAE, 0xF7, 0x00, 0x00, 0xD2, 0x58, /* 0x94-0x97 */ + 0xD2, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0x65, 0xD5, 0xE1, /* 0xA8-0xAB */ + 0xD5, 0xE5, 0x00, 0x00, 0xB2, 0x52, 0xB2, 0x50, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0x47, 0xD5, 0xE3, /* 0xB0-0xB3 */ + 0xD5, 0xE2, 0xB2, 0x5B, 0x00, 0x00, 0xD5, 0xE8, /* 0xB4-0xB7 */ + 0xB2, 0x55, 0x00, 0x00, 0xD5, 0xFA, 0xD6, 0x47, /* 0xB8-0xBB */ + 0xB2, 0x44, 0xD5, 0xF7, 0xD5, 0xF0, 0xB2, 0x67, /* 0xBC-0xBF */ + 0xD5, 0xE0, 0x00, 0x00, 0xD5, 0xFC, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xB2, 0x64, 0xB2, 0x58, 0xB2, 0x63, 0xB2, 0x4E, /* 0xC4-0xC7 */ + 0xD5, 0xEC, 0xD5, 0xFE, 0xD5, 0xF6, 0xB2, 0x4F, /* 0xC8-0xCB */ + 0xB2, 0x49, 0xD6, 0x45, 0x00, 0x00, 0xD5, 0xFD, /* 0xCC-0xCF */ + 0xD6, 0x40, 0xB2, 0x51, 0xB2, 0x59, 0xD6, 0x42, /* 0xD0-0xD3 */ + 0xD5, 0xEA, 0xD5, 0xFB, 0xD5, 0xEF, 0xD6, 0x44, /* 0xD4-0xD7 */ + 0xB2, 0x5E, 0xB2, 0x46, 0xB2, 0x5C, 0xD5, 0xF4, /* 0xD8-0xDB */ + 0xD5, 0xF2, 0xD5, 0xF3, 0xB2, 0x53, 0xD5, 0xEE, /* 0xDC-0xDF */ + 0xD5, 0xED, 0xB2, 0x48, 0xD5, 0xE7, 0xD6, 0x46, /* 0xE0-0xE3 */ + 0xB2, 0x4A, 0xD5, 0xF1, 0xB2, 0x68, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xB2, 0x62, 0xD5, 0xE6, 0xB2, 0x5F, 0xB2, 0x5D, /* 0xE8-0xEB */ + 0xB2, 0x66, 0xD5, 0xF8, 0xB2, 0x61, 0xD2, 0x52, /* 0xEC-0xEF */ + 0xD5, 0xF9, 0xB2, 0x60, 0xD6, 0x41, 0xB2, 0x45, /* 0xF0-0xF3 */ + 0xD5, 0xF5, 0xB2, 0x57, 0xD5, 0xE9, 0xB2, 0x56, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xB2, 0x54, 0xB2, 0x4C, 0xB2, 0x4B, /* 0xF8-0xFB */ + 0xD9, 0xE7, 0xD6, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6E[512] = { + 0xD5, 0xEB, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xFC, /* 0x00-0x03 */ + 0x00, 0x00, 0xB2, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xB5, 0x41, 0xB2, 0x5A, 0xB4, 0xEE, /* 0x18-0x1B */ + 0xD9, 0xF6, 0xB4, 0xFC, 0x00, 0x00, 0xD9, 0xEA, /* 0x1C-0x1F */ + 0xB4, 0xEB, 0xB4, 0xE7, 0xDA, 0x49, 0xB4, 0xED, /* 0x20-0x23 */ + 0xB4, 0xF1, 0xB4, 0xEC, 0xB4, 0xF5, 0xDA, 0x4D, /* 0x24-0x27 */ + 0xDA, 0x44, 0x00, 0x00, 0x00, 0x00, 0xD9, 0xF1, /* 0x28-0x2B */ + 0xB4, 0xFA, 0xB4, 0xF4, 0xD9, 0xFD, 0xB4, 0xE4, /* 0x2C-0x2F */ + 0xDA, 0x4A, 0xDA, 0x43, 0xB4, 0xE8, 0xD9, 0xF7, /* 0x30-0x33 */ + 0xB4, 0xF7, 0xDA, 0x55, 0xDA, 0x56, 0x00, 0x00, /* 0x34-0x37 */ + 0xB4, 0xE5, 0xDA, 0x48, 0xB4, 0xF9, 0xD9, 0xFB, /* 0x38-0x3B */ + 0xD9, 0xED, 0xD9, 0xEE, 0xB4, 0xFD, 0xD9, 0xF2, /* 0x3C-0x3F */ + 0xD9, 0xF9, 0xD9, 0xF3, 0x00, 0x00, 0xB4, 0xFB, /* 0x40-0x43 */ + 0xB5, 0x44, 0xD9, 0xEF, 0xD9, 0xE8, 0xD9, 0xE9, /* 0x44-0x47 */ + 0x00, 0x00, 0xD9, 0xEB, 0xB4, 0xEA, 0xD9, 0xF8, /* 0x48-0x4B */ + 0x00, 0x00, 0xB4, 0xF8, 0xB5, 0x42, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xD9, 0xFA, 0xDA, 0x53, 0xDA, 0x4B, /* 0x50-0x53 */ + 0xB4, 0xE6, 0xDA, 0x51, 0xB4, 0xF2, 0x00, 0x00, /* 0x54-0x57 */ + 0xB4, 0xF0, 0x00, 0x00, 0xDA, 0x57, 0xB4, 0xEF, /* 0x58-0x5B */ + 0xDA, 0x41, 0xD9, 0xF4, 0xD9, 0xFE, 0xB5, 0x47, /* 0x5C-0x5F */ + 0xDA, 0x45, 0xDA, 0x42, 0xD9, 0xF0, 0xB5, 0x43, /* 0x60-0x63 */ + 0xDA, 0x4F, 0xDA, 0x4C, 0xDA, 0x54, 0xB4, 0xE9, /* 0x64-0x67 */ + 0xDA, 0x40, 0xB5, 0x46, 0x00, 0x00, 0xDA, 0x47, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xB4, 0xF3, 0xB4, 0xF6, /* 0x6C-0x6F */ + 0x00, 0x00, 0xDA, 0x46, 0xB5, 0x45, 0xD9, 0xF5, /* 0x70-0x73 */ + 0xD5, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xDA, 0x50, /* 0x74-0x77 */ + 0xDA, 0x4E, 0xDA, 0x52, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xD9, 0xEC, 0xB5, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xDE, 0x61, 0xDE, 0x60, 0xDE, 0x46, /* 0x8C-0x8F */ + 0xB7, 0xBD, 0x00, 0x00, 0xDE, 0x5F, 0xDE, 0x49, /* 0x90-0x93 */ + 0xDE, 0x4A, 0x00, 0x00, 0xB7, 0xC7, 0xDE, 0x68, /* 0x94-0x97 */ + 0xB7, 0xC2, 0xDE, 0x5E, 0x00, 0x00, 0xDE, 0x43, /* 0x98-0x9B */ + 0xB7, 0xC8, 0xB7, 0xBE, 0xDE, 0x52, 0xDE, 0x48, /* 0x9C-0x9F */ + 0xDE, 0x4B, 0xDE, 0x63, 0xB7, 0xB8, 0xDE, 0x6A, /* 0xA0-0xA3 */ + 0xDE, 0x62, 0xB7, 0xC1, 0xDE, 0x57, 0xB7, 0xCC, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0xCB, 0xB7, 0xC5, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0x69, 0xB7, 0xB9, /* 0xAC-0xAF */ + 0xDE, 0x55, 0xDE, 0x4C, 0xDE, 0x59, 0xDE, 0x65, /* 0xB0-0xB3 */ + 0xB7, 0xCD, 0x00, 0x00, 0xB7, 0xBB, 0xDE, 0x54, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xDE, 0x4D, 0xB7, 0xC4, 0x00, 0x00, /* 0xB8-0xBB */ + 0xB7, 0xC3, 0xDE, 0x50, 0xDE, 0x5A, 0xDE, 0x64, /* 0xBC-0xBF */ + 0xDE, 0x47, 0xDE, 0x51, 0xB7, 0xBC, 0xDE, 0x5B, /* 0xC0-0xC3 */ + 0xB7, 0xC9, 0xB7, 0xC0, 0xDE, 0x4E, 0xB7, 0xBF, /* 0xC4-0xC7 */ + 0xDE, 0x45, 0xDE, 0x53, 0xDE, 0x67, 0xB4, 0xFE, /* 0xC8-0xCB */ + 0xBA, 0xB0, 0xDE, 0x56, 0xE2, 0x6C, 0xDE, 0x58, /* 0xCC-0xCF */ + 0xDE, 0x66, 0xB7, 0xC6, 0xDE, 0x4F, 0xB7, 0xBA, /* 0xD0-0xD3 */ + 0xB7, 0xCA, 0xBC, 0xF0, 0xDE, 0x44, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xDE, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xDE, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xAA, /* 0xE8-0xEB */ + 0xBA, 0xAD, 0xE2, 0x7D, 0xE2, 0xA4, 0xBA, 0xA2, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE2, 0x6E, 0xBA, 0xAF, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xBA, 0x77, 0xE2, 0x6D, 0xE2, 0xB0, 0xBA, 0xB1, /* 0xF4-0xF7 */ + 0xE2, 0x71, 0xE2, 0xA3, 0x00, 0x00, 0xE2, 0x73, /* 0xF8-0xFB */ + 0xE2, 0xB3, 0xE2, 0xAF, 0xBA, 0x75, 0xBA, 0xA1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_6F[512] = { + 0xE6, 0x53, 0xBA, 0xAE, 0xBA, 0x7D, 0xE2, 0x6F, /* 0x00-0x03 */ + 0x00, 0x00, 0xE2, 0xAE, 0xBA, 0xA3, 0xE2, 0xAB, /* 0x04-0x07 */ + 0xE2, 0xB8, 0xE2, 0x75, 0xE2, 0x7E, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE2, 0xB6, 0xE2, 0xAC, 0xBA, 0x7C, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x7C, 0xBA, 0x76, /* 0x10-0x13 */ + 0xBA, 0x74, 0xBA, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xE2, 0x7A, 0xE2, 0x77, 0xE2, 0x78, 0x00, 0x00, /* 0x18-0x1B */ + 0xE2, 0xB2, 0x00, 0x00, 0xE2, 0xB7, 0xE2, 0xB5, /* 0x1C-0x1F */ + 0xBA, 0x7A, 0xE2, 0xB9, 0xBA, 0x7E, 0xBA, 0xA7, /* 0x20-0x23 */ + 0x00, 0x00, 0xE2, 0x70, 0xE5, 0xFA, 0xE2, 0x79, /* 0x24-0x27 */ + 0x00, 0x00, 0xBA, 0x78, 0xBA, 0xAC, 0xBA, 0xA9, /* 0x28-0x2B */ + 0xBA, 0x7B, 0xE2, 0xA5, 0xE2, 0x74, 0xBA, 0xAA, /* 0x2C-0x2F */ + 0xE2, 0xA7, 0xBA, 0xA4, 0xBA, 0xA6, 0xBA, 0x73, /* 0x30-0x33 */ + 0x00, 0x00, 0xE2, 0xA9, 0xE2, 0xA1, 0xE2, 0x72, /* 0x34-0x37 */ + 0xBA, 0xA5, 0xE2, 0xB1, 0xE2, 0xB4, 0xE2, 0x7B, /* 0x38-0x3B */ + 0xE2, 0xA8, 0x00, 0x00, 0xBA, 0x79, 0xBC, 0xDF, /* 0x3C-0x3F */ + 0xE2, 0xA6, 0xE5, 0xF9, 0x00, 0x00, 0xE2, 0xAD, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0x76, 0xE6, 0x44, /* 0x4C-0x4F */ + 0xE6, 0x4E, 0xBC, 0xE2, 0xE6, 0x4D, 0xE6, 0x59, /* 0x50-0x53 */ + 0xBC, 0xE4, 0xE6, 0x4B, 0x00, 0x00, 0xE6, 0x4F, /* 0x54-0x57 */ + 0xBC, 0xEF, 0x00, 0x00, 0xE6, 0x46, 0xBC, 0xE7, /* 0x58-0x5B */ + 0x00, 0x00, 0xE6, 0x52, 0xE9, 0xF0, 0xBC, 0xF3, /* 0x5C-0x5F */ + 0xBC, 0xF2, 0xE6, 0x54, 0xE6, 0x43, 0xE6, 0x5E, /* 0x60-0x63 */ + 0xBC, 0xED, 0x00, 0x00, 0xBC, 0xE3, 0xE6, 0x57, /* 0x64-0x67 */ + 0x00, 0x00, 0xE6, 0x5B, 0xE6, 0x60, 0xE6, 0x55, /* 0x68-0x6B */ + 0xE6, 0x49, 0xBC, 0xE6, 0xBC, 0xE9, 0xBC, 0xF1, /* 0x6C-0x6F */ + 0xBC, 0xEC, 0x00, 0x00, 0xE6, 0x4C, 0xE2, 0xA2, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0x48, 0xE6, 0x5F, /* 0x74-0x77 */ + 0xBC, 0xE8, 0x00, 0x00, 0xBC, 0xEB, 0xE6, 0x61, /* 0x78-0x7B */ + 0xBC, 0xE0, 0xE6, 0x56, 0xE5, 0xFB, 0xE6, 0x5C, /* 0x7C-0x7F */ + + 0xC0, 0xDF, 0x00, 0x00, 0xE6, 0x4A, 0x00, 0x00, /* 0x80-0x83 */ + 0xBC, 0xE1, 0xE6, 0x45, 0xBC, 0xE5, 0xE5, 0xFC, /* 0x84-0x87 */ + 0xBA, 0xAB, 0xE6, 0x41, 0x00, 0x00, 0xE6, 0x5A, /* 0x88-0x8B */ + 0xE6, 0x42, 0xE6, 0x40, 0xBC, 0xEA, 0x00, 0x00, /* 0x8C-0x8F */ + 0xE6, 0x58, 0x00, 0x00, 0xE5, 0xFE, 0xE6, 0x51, /* 0x90-0x93 */ + 0xE6, 0x50, 0xE6, 0x5D, 0xE6, 0x47, 0xBC, 0xEE, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE9, 0xF3, 0x00, 0x00, /* 0x9C-0x9F */ + 0xBF, 0x49, 0xBE, 0xFE, 0xEA, 0x40, 0xE9, 0xEB, /* 0xA0-0xA3 */ + 0xBF, 0x41, 0xE9, 0xF7, 0xBF, 0x48, 0xBF, 0x43, /* 0xA4-0xA7 */ + 0xE9, 0xF5, 0xED, 0x4F, 0xE9, 0xFB, 0xEA, 0x42, /* 0xA8-0xAB */ + 0xE9, 0xFA, 0xE9, 0xE9, 0xE9, 0xF8, 0xEA, 0x44, /* 0xAC-0xAF */ + 0xEA, 0x46, 0xBE, 0xFD, 0xEA, 0x45, 0xBF, 0x44, /* 0xB0-0xB3 */ + 0xBF, 0x4A, 0x00, 0x00, 0xBF, 0x47, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE9, 0xFE, 0xBF, 0x46, 0xE9, 0xF9, 0x00, 0x00, /* 0xB8-0xBB */ + 0xE9, 0xED, 0xE9, 0xF2, 0x00, 0x00, 0xE9, 0xFD, /* 0xBC-0xBF */ + 0xBF, 0x45, 0xBF, 0x42, 0xBE, 0xFC, 0xBF, 0x40, /* 0xC0-0xC3 */ + 0xE9, 0xF1, 0x00, 0x00, 0xE5, 0xFD, 0xE9, 0xEC, /* 0xC4-0xC7 */ + 0xE9, 0xEF, 0xEA, 0x41, 0xE9, 0xF4, 0xE9, 0xEA, /* 0xC8-0xCB */ + 0xED, 0x4E, 0xEA, 0x43, 0xE9, 0xEE, 0xE9, 0xFC, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xED, 0x51, 0xC0, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xC0, 0xD7, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xDB, /* 0xD8-0xDB */ + 0xED, 0x53, 0xED, 0x59, 0xED, 0x57, 0xC0, 0xD9, /* 0xDC-0xDF */ + 0xC0, 0xDA, 0xC0, 0xE1, 0xED, 0x5A, 0xED, 0x52, /* 0xE0-0xE3 */ + 0xC0, 0xDC, 0x00, 0x00, 0xED, 0x56, 0xED, 0x55, /* 0xE4-0xE7 */ + 0xED, 0x5B, 0xC0, 0xE2, 0x00, 0x00, 0xC0, 0xDD, /* 0xE8-0xEB */ + 0xC0, 0xE0, 0xED, 0x54, 0xC0, 0xE4, 0xC0, 0xDE, /* 0xEC-0xEF */ + 0xC0, 0xE5, 0xC0, 0xD8, 0xED, 0x58, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xED, 0x50, 0x00, 0x00, 0x00, 0x00, 0xEF, 0xF7, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xC2, 0x71, 0xEF, 0xF4, /* 0xF8-0xFB */ + 0xEF, 0xF6, 0x00, 0x00, 0xC2, 0x6F, 0xEF, 0xF2, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_70[512] = { + 0xEF, 0xF3, 0xEF, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xE9, 0xF6, 0xEF, 0xEF, 0xC2, 0x70, 0xEF, 0xEB, /* 0x04-0x07 */ + 0x00, 0x00, 0xC2, 0x6D, 0xEF, 0xF8, 0xC2, 0x6E, /* 0x08-0x0B */ + 0xEF, 0xEC, 0xEF, 0xED, 0xEF, 0xF1, 0xC2, 0x73, /* 0x0C-0x0F */ + 0x00, 0x00, 0xC2, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xEF, 0xF0, 0xC3, 0x78, 0xF2, 0x5F, 0xF2, 0x65, /* 0x14-0x17 */ + 0xC3, 0x79, 0xF2, 0x5C, 0xC3, 0x76, 0xC3, 0x73, /* 0x18-0x1B */ + 0xF2, 0x67, 0xC3, 0x77, 0x00, 0x00, 0xC3, 0x74, /* 0x1C-0x1F */ + 0xF2, 0x5E, 0xF2, 0x61, 0xF2, 0x62, 0xF2, 0x63, /* 0x20-0x23 */ + 0xF2, 0x66, 0x00, 0x00, 0xEF, 0xF5, 0xF2, 0x5D, /* 0x24-0x27 */ + 0xC3, 0x75, 0xF2, 0x64, 0xF2, 0x68, 0xF2, 0x60, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x5D, /* 0x2C-0x2F */ + 0xC4, 0x6A, 0xF4, 0x60, 0xC4, 0x6B, 0xF4, 0x68, /* 0x30-0x33 */ + 0xF4, 0x5F, 0xF4, 0x5C, 0x00, 0x00, 0xF4, 0x5E, /* 0x34-0x37 */ + 0xF4, 0x62, 0xF4, 0x65, 0xF4, 0x64, 0xF4, 0x67, /* 0x38-0x3B */ + 0xF4, 0x5B, 0x00, 0x00, 0xC4, 0x69, 0xF4, 0x63, /* 0x3C-0x3F */ + 0xF4, 0x66, 0xF4, 0x69, 0xF4, 0x61, 0xF5, 0xD3, /* 0x40-0x43 */ + 0xF5, 0xD4, 0xF5, 0xD8, 0xF5, 0xD9, 0x00, 0x00, /* 0x44-0x47 */ + 0xF5, 0xD6, 0xF5, 0xD7, 0xF5, 0xD5, 0x00, 0x00, /* 0x48-0x4B */ + 0xC4, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xC5, 0x78, 0xF6, 0xEB, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xF6, 0xE8, 0xF6, 0xE9, 0xF6, 0xEA, /* 0x54-0x57 */ + 0xC5, 0x79, 0x00, 0x00, 0xF7, 0xE5, 0xF7, 0xE4, /* 0x58-0x5B */ + 0x00, 0x00, 0xF8, 0xAF, 0xC5, 0xF4, 0xF8, 0xAD, /* 0x5C-0x5F */ + 0xF8, 0xB0, 0xF8, 0xAE, 0xF8, 0xF5, 0xC6, 0x57, /* 0x60-0x63 */ + 0xC6, 0x65, 0xF9, 0xA3, 0xF9, 0x6C, 0x00, 0x00, /* 0x64-0x67 */ + 0xF9, 0xA2, 0xF9, 0xD0, 0xF9, 0xD1, 0xA4, 0xF5, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xA6, 0xC7, 0xCA, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xCB, 0x5E, 0x00, 0x00, 0xA8, 0x5F, 0x00, 0x00, /* 0x74-0x77 */ + 0xA8, 0x62, 0x00, 0x00, 0xCB, 0x5F, 0x00, 0x00, /* 0x78-0x7B */ + 0xA8, 0x60, 0xA8, 0x61, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xCD, 0x58, 0xCD, 0x5A, /* 0x80-0x83 */ + 0xCD, 0x55, 0xCD, 0x52, 0xCD, 0x54, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xAA, 0xA4, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xAA, 0xA2, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xCD, 0x56, 0xAA, 0xA3, 0xCD, 0x53, /* 0x90-0x93 */ + 0xCD, 0x50, 0xAA, 0xA1, 0xCD, 0x57, 0x00, 0x00, /* 0x94-0x97 */ + 0xCD, 0x51, 0xAA, 0xA5, 0xCD, 0x59, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xAF, /* 0x9C-0x9F */ + 0x00, 0x00, 0xCF, 0xB3, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xAC, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xCF, 0xB6, 0x00, 0x00, 0xAC, 0xAF, /* 0xA8-0xAB */ + 0xAC, 0xB2, 0xAC, 0xB4, 0xAC, 0xB6, 0xAC, 0xB3, /* 0xAC-0xAF */ + 0xCF, 0xB2, 0xCF, 0xB1, 0x00, 0x00, 0xAC, 0xB1, /* 0xB0-0xB3 */ + 0xCF, 0xB4, 0xCF, 0xB5, 0x00, 0x00, 0xCF, 0xAE, /* 0xB4-0xB7 */ + 0xAC, 0xB5, 0x00, 0x00, 0xAC, 0xB0, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xB0, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xD2, 0x77, 0xD2, 0x78, 0xD2, 0x79, /* 0xC4-0xC7 */ + 0xAF, 0x50, 0x00, 0x00, 0xAF, 0x4C, 0xD2, 0x6E, /* 0xC8-0xCB */ + 0x00, 0x00, 0xD2, 0x76, 0xD2, 0x7B, 0xAF, 0x51, /* 0xCC-0xCF */ + 0x00, 0x00, 0xD2, 0x6C, 0xD2, 0x72, 0xD2, 0x6B, /* 0xD0-0xD3 */ + 0xD2, 0x75, 0x00, 0x00, 0x00, 0x00, 0xD2, 0x71, /* 0xD4-0xD7 */ + 0xAF, 0x4D, 0xAF, 0x4F, 0xD2, 0x7A, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD2, 0x6A, 0xD2, 0x6D, 0xD2, 0x73, 0x00, 0x00, /* 0xDC-0xDF */ + 0xD2, 0x74, 0xD2, 0x7C, 0xD2, 0x70, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xAF, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0x6D, /* 0xEC-0xEF */ + 0xD6, 0x4E, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x50, /* 0xF0-0xF3 */ + 0xD6, 0x4C, 0x00, 0x00, 0xD6, 0x58, 0xD6, 0x4A, /* 0xF4-0xF7 */ + 0xD6, 0x57, 0xB2, 0x69, 0xD6, 0x48, 0xDA, 0x5B, /* 0xF8-0xFB */ + 0xD6, 0x52, 0xB2, 0x6C, 0x00, 0x00, 0xD6, 0x53, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_71[512] = { + 0xD6, 0x56, 0x00, 0x00, 0xD6, 0x5A, 0x00, 0x00, /* 0x00-0x03 */ + 0xD6, 0x4F, 0x00, 0x00, 0xD6, 0x54, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xB2, 0x6A, 0xB2, 0x6B, 0xD6, 0x59, /* 0x08-0x0B */ + 0xD6, 0x4D, 0xD6, 0x49, 0xD6, 0x5B, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD6, 0x51, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x55, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x4B, /* 0x14-0x17 */ + 0x00, 0x00, 0xB5, 0x48, 0xB5, 0x49, 0xDA, 0x65, /* 0x18-0x1B */ + 0xB5, 0x4F, 0x00, 0x00, 0xDA, 0x59, 0xDA, 0x62, /* 0x1C-0x1F */ + 0xDA, 0x58, 0xB5, 0x4C, 0xDA, 0x60, 0xDA, 0x5E, /* 0x20-0x23 */ + 0x00, 0x00, 0xDA, 0x5F, 0xB5, 0x4A, 0x00, 0x00, /* 0x24-0x27 */ + 0xDA, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0x5C, 0xDA, 0x5A, /* 0x2C-0x2F */ + 0xB5, 0x4B, 0xDA, 0x5D, 0xDA, 0x61, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xB5, 0x4D, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0x64, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xDE, 0x70, 0xDE, 0x77, 0xDE, 0x79, /* 0x40-0x43 */ + 0xDE, 0xA1, 0x00, 0x00, 0xB7, 0xDA, 0xDE, 0x6B, /* 0x44-0x47 */ + 0x00, 0x00, 0xB7, 0xD2, 0x00, 0x00, 0xDE, 0x7A, /* 0x48-0x4B */ + 0xB7, 0xD7, 0xDE, 0xA2, 0xB7, 0xCE, 0x00, 0x00, /* 0x4C-0x4F */ + 0xDE, 0x7D, 0x00, 0x00, 0xDE, 0x6D, 0xDE, 0x7E, /* 0x50-0x53 */ + 0xDE, 0x6C, 0x00, 0x00, 0xB7, 0xDC, 0x00, 0x00, /* 0x54-0x57 */ + 0xDE, 0x78, 0xB7, 0xCF, 0xDE, 0xA3, 0x00, 0x00, /* 0x58-0x5B */ + 0xB7, 0xD4, 0xDE, 0x71, 0xB7, 0xD9, 0xDE, 0x7C, /* 0x5C-0x5F */ + 0xDE, 0x6F, 0xDE, 0x76, 0xDE, 0x72, 0xDE, 0x6E, /* 0x60-0x63 */ + 0xB7, 0xD1, 0xB7, 0xD8, 0xB7, 0xD6, 0xB7, 0xD3, /* 0x64-0x67 */ + 0xB7, 0xDB, 0xB7, 0xD0, 0xDE, 0x75, 0x00, 0x00, /* 0x68-0x6B */ + 0xB7, 0xD5, 0x00, 0x00, 0xB5, 0x4E, 0x00, 0x00, /* 0x6C-0x6F */ + 0xDE, 0x7B, 0x00, 0x00, 0xDE, 0x73, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xDE, 0x74, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC1, /* 0x78-0x7B */ + 0x00, 0x00, 0xBA, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xE2, 0xBD, 0xE2, 0xC3, 0xE2, 0xBF, 0x00, 0x00, /* 0x80-0x83 */ + 0xBA, 0xB6, 0xE2, 0xBE, 0xE2, 0xC2, 0xE2, 0xBA, /* 0x84-0x87 */ + 0x00, 0x00, 0xE2, 0xBC, 0xBA, 0xB5, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC0, /* 0x8C-0x8F */ + 0xE2, 0xBB, 0x00, 0x00, 0xBA, 0xB7, 0x00, 0x00, /* 0x90-0x93 */ + 0xBA, 0xB2, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xC4, /* 0x94-0x97 */ + 0x00, 0x00, 0xBA, 0xB3, 0xE6, 0x67, 0xE6, 0x64, /* 0x98-0x9B */ + 0xE6, 0x70, 0xE6, 0x6A, 0xE6, 0x6C, 0xBC, 0xF4, /* 0x9C-0x9F */ + 0xE6, 0x66, 0xE6, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE6, 0x6D, 0xE6, 0x6B, 0x00, 0x00, 0xE6, 0x71, /* 0xA4-0xA7 */ + 0xBC, 0xF7, 0xE6, 0x68, 0xE6, 0x6F, 0x00, 0x00, /* 0xA8-0xAB */ + 0xBC, 0xF5, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x63, /* 0xAC-0xAF */ + 0xE6, 0x65, 0xBC, 0xF6, 0xE6, 0x62, 0xE6, 0x72, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xE6, 0x69, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xEA, 0x4A, 0xBF, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0xEA, 0x55, 0xEA, 0x53, 0xBF, 0x4B, 0xEA, 0x49, /* 0xBC-0xBF */ + 0xEA, 0x4C, 0xEA, 0x4D, 0xEA, 0x48, 0xBF, 0x55, /* 0xC0-0xC3 */ + 0xBF, 0x56, 0xEA, 0x47, 0xEA, 0x56, 0xEA, 0x51, /* 0xC4-0xC7 */ + 0xBF, 0x4F, 0xBF, 0x4C, 0xEA, 0x50, 0xEA, 0x4E, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xBF, 0x52, 0xEA, 0x52, /* 0xCC-0xCF */ + 0xBF, 0x4D, 0x00, 0x00, 0xBF, 0x4E, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xEA, 0x4F, 0xBF, 0x50, 0xEA, 0x4B, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xEA, 0x54, 0xBF, 0x53, 0xEA, 0x57, 0xEA, 0x58, /* 0xD8-0xDB */ + 0xBF, 0x54, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE7, /* 0xDC-0xDF */ + 0xC0, 0xEE, 0xED, 0x5C, 0xED, 0x62, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xED, 0x60, 0xC0, 0xEA, 0xC0, 0xE9, 0xC0, 0xE6, /* 0xE4-0xE7 */ + 0xED, 0x5E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xC0, 0xEC, 0xC0, 0xEB, 0xC0, 0xE8, 0x00, 0x00, /* 0xEC-0xEF */ + 0xED, 0x61, 0xED, 0x5D, 0xED, 0x5F, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xC0, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xC2, 0x77, 0xEF, 0xFB, 0x00, 0x00, 0xC2, 0x74, /* 0xF8-0xFB */ + 0xC2, 0x75, 0xEF, 0xFD, 0xC2, 0x76, 0xEF, 0xFA, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_72[512] = { + 0x00, 0x00, 0xEF, 0xF9, 0xF2, 0x6C, 0xEF, 0xFC, /* 0x00-0x03 */ + 0x00, 0x00, 0xF2, 0x6D, 0xC3, 0x7A, 0xF2, 0x6B, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0x6A, 0x00, 0x00, /* 0x08-0x0B */ + 0xF2, 0x69, 0xC3, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xC4, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x6A, /* 0x10-0x13 */ + 0xF4, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xF5, 0xDC, 0xF5, 0xDB, 0xC4, 0xEA, /* 0x18-0x1B */ + 0x00, 0x00, 0xF5, 0xDA, 0xF6, 0xEC, 0xF6, 0xED, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xF7, 0xE6, 0xF8, 0xB1, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF6, 0xF9, 0xBC, /* 0x24-0x27 */ + 0xC6, 0x79, 0xF9, 0xC6, 0xA4, 0xF6, 0x00, 0x00, /* 0x28-0x2B */ + 0xAA, 0xA6, 0xAA, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xAC, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xC0, 0xEF, 0xA4, 0xF7, 0x00, 0x00, /* 0x34-0x37 */ + 0xAA, 0xA8, 0xAF, 0x52, 0xB7, 0xDD, 0xA4, 0xF8, /* 0x38-0x3B */ + 0x00, 0x00, 0xB2, 0x6E, 0xBA, 0xB8, 0xC9, 0x62, /* 0x3C-0x3F */ + 0x00, 0x00, 0xCF, 0xB7, 0xD2, 0x7D, 0x00, 0x00, /* 0x40-0x43 */ + 0xE2, 0xC5, 0x00, 0x00, 0xC0, 0xF0, 0xA4, 0xF9, /* 0x44-0x47 */ + 0xAA, 0xA9, 0xCF, 0xB8, 0xCF, 0xB9, 0xDA, 0x66, /* 0x48-0x4B */ + 0xB5, 0x50, 0x00, 0x00, 0x00, 0x00, 0xDE, 0xA4, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0xDE, 0xE2, 0xC6, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xBC, 0xF8, 0x00, 0x00, /* 0x54-0x57 */ + 0xC3, 0x7C, 0xA4, 0xFA, 0xDA, 0x67, 0xA4, 0xFB, /* 0x58-0x5B */ + 0x00, 0x00, 0xA6, 0xC9, 0xCA, 0x42, 0xA6, 0xC8, /* 0x5C-0x5F */ + 0xA8, 0x65, 0xA8, 0x64, 0xA8, 0x63, 0xCB, 0x60, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xAA, /* 0x64-0x67 */ + 0x00, 0x00, 0xAA, 0xAB, 0xCD, 0x5B, 0x00, 0x00, /* 0x68-0x6B */ + 0xCF, 0xBA, 0x00, 0x00, 0xCF, 0xBD, 0xAC, 0xBA, /* 0x6C-0x6F */ + 0xCF, 0xBB, 0x00, 0x00, 0xAC, 0xB9, 0xCF, 0xBC, /* 0x70-0x73 */ + 0xAC, 0xBB, 0x00, 0x00, 0xD2, 0xA2, 0xD2, 0xA1, /* 0x74-0x77 */ + 0xD2, 0x7E, 0xAF, 0x53, 0x00, 0x00, 0xD6, 0x5D, /* 0x78-0x7B */ + 0xD6, 0x5E, 0xB2, 0x6F, 0xD6, 0x5C, 0xD6, 0x5F, /* 0x7C-0x7F */ + + 0xB5, 0x52, 0xB2, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xB5, 0x51, 0xDA, 0x6B, 0xDA, 0x6A, 0x00, 0x00, /* 0x84-0x87 */ + 0xDA, 0x68, 0xDA, 0x69, 0x00, 0x00, 0xDA, 0x6C, /* 0x88-0x8B */ + 0xDE, 0xA6, 0xDE, 0xA5, 0xDE, 0xA9, 0x00, 0x00, /* 0x8C-0x8F */ + 0xDE, 0xA8, 0xDE, 0xA7, 0xBA, 0xB9, 0xE2, 0xC9, /* 0x90-0x93 */ + 0x00, 0x00, 0xE2, 0xC8, 0xBA, 0xBA, 0xE2, 0xC7, /* 0x94-0x97 */ + 0xE6, 0x73, 0x00, 0x00, 0xE6, 0x74, 0xBC, 0xF9, /* 0x98-0x9B */ + 0x00, 0x00, 0xEA, 0x59, 0xEA, 0x5A, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xF2, 0x72, 0xC3, 0x7D, 0xF2, 0x71, /* 0xA0-0xA3 */ + 0xF2, 0x70, 0xF2, 0x6E, 0xF2, 0x6F, 0xC4, 0xEB, /* 0xA4-0xA7 */ + 0xF4, 0x6C, 0xF6, 0xEE, 0xF8, 0xF7, 0x00, 0x00, /* 0xA8-0xAB */ + 0xA4, 0xFC, 0x00, 0x00, 0xC9, 0xA5, 0xA5, 0xC7, /* 0xAC-0xAF */ + 0xC9, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xCA, 0x43, 0xCA, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x66, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xCB, 0x62, 0x00, 0x00, 0xCB, 0x61, /* 0xBC-0xBF */ + 0xAA, 0xAC, 0xCB, 0x65, 0xA8, 0x67, 0xCB, 0x63, /* 0xC0-0xC3 */ + 0xA8, 0x66, 0xCB, 0x67, 0xCB, 0x64, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xCD, 0x5F, 0xCF, 0xBE, 0xCD, 0x5D, /* 0xC8-0xCB */ + 0xCD, 0x64, 0x00, 0x00, 0xAA, 0xAD, 0x00, 0x00, /* 0xCC-0xCF */ + 0xAA, 0xB0, 0xCD, 0x65, 0xCD, 0x61, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xCD, 0x62, 0x00, 0x00, 0xCD, 0x5C, 0xAA, 0xAF, /* 0xD4-0xD7 */ + 0xCD, 0x5E, 0xAA, 0xAE, 0xCD, 0x63, 0x00, 0x00, /* 0xD8-0xDB */ + 0xCD, 0x60, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC2, /* 0xDC-0xDF */ + 0xAC, 0xBD, 0xAC, 0xBE, 0x00, 0x00, 0xCF, 0xC5, /* 0xE0-0xE3 */ + 0xCF, 0xBF, 0x00, 0x00, 0xCF, 0xC4, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xCF, 0xC0, 0xAC, 0xBC, 0xCF, 0xC3, 0xCF, 0xC1, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xA8, /* 0xF0-0xF3 */ + 0xD2, 0xA5, 0x00, 0x00, 0xD2, 0xA7, 0xAF, 0x58, /* 0xF4-0xF7 */ + 0xAF, 0x57, 0xAF, 0x55, 0xD2, 0xA4, 0xD2, 0xA9, /* 0xF8-0xFB */ + 0xAF, 0x54, 0xAF, 0x56, 0xD2, 0xA6, 0xD6, 0x67, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_73[512] = { + 0xD2, 0xA3, 0xD2, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x62, /* 0x04-0x07 */ + 0xD6, 0x66, 0x00, 0x00, 0xD6, 0x65, 0xDA, 0x6E, /* 0x08-0x0B */ + 0xDA, 0x79, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x68, /* 0x0C-0x0F */ + 0x00, 0x00, 0xD6, 0x63, 0xDA, 0x6D, 0xB2, 0x74, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0x73, 0xD6, 0x61, /* 0x14-0x17 */ + 0xD6, 0x64, 0xB2, 0x75, 0x00, 0x00, 0xB2, 0x72, /* 0x18-0x1B */ + 0xB2, 0x71, 0xD6, 0x60, 0xD6, 0x69, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0x70, 0xDA, 0x77, /* 0x20-0x23 */ + 0x00, 0x00, 0xB5, 0x54, 0xDA, 0x76, 0xDA, 0x73, /* 0x24-0x27 */ + 0x00, 0x00, 0xB5, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xDA, 0x75, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xDA, 0x6F, 0xDA, 0x71, 0xDA, 0x74, 0xDA, 0x72, /* 0x30-0x33 */ + 0xB5, 0x55, 0xDA, 0x78, 0xB5, 0x53, 0xB7, 0xDF, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xAD, 0xDE, 0xAC, /* 0x38-0x3B */ + 0xDE, 0xAA, 0x00, 0x00, 0xB7, 0xE2, 0xB7, 0xE1, /* 0x3C-0x3F */ + 0xDE, 0xAE, 0x00, 0x00, 0xDE, 0xAB, 0xE2, 0xCA, /* 0x40-0x43 */ + 0xBA, 0xBB, 0xB7, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xDE, 0xB0, 0xDE, 0xAF, 0x00, 0x00, /* 0x48-0x4B */ + 0xE2, 0xCD, 0xE2, 0xCB, 0xBC, 0xFA, 0x00, 0x00, /* 0x4C-0x4F */ + 0xBA, 0xBC, 0xE2, 0xCC, 0xE6, 0x76, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBC, 0xFB, /* 0x54-0x57 */ + 0xE6, 0x75, 0xE6, 0x7E, 0xE6, 0x7D, 0xE6, 0x7B, /* 0x58-0x5B */ + 0x00, 0x00, 0xE6, 0x7A, 0xE6, 0x77, 0xE6, 0x78, /* 0x5C-0x5F */ + 0xE6, 0x79, 0xE6, 0x7C, 0xE6, 0xA1, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0xEA, 0x5F, 0xEA, 0x5C, 0xEA, 0x5D, /* 0x64-0x67 */ + 0xBF, 0x57, 0xEA, 0x5B, 0xEA, 0x61, 0xEA, 0x60, /* 0x68-0x6B */ + 0xEA, 0x5E, 0x00, 0x00, 0xED, 0x64, 0xED, 0x65, /* 0x6C-0x6F */ + 0xC0, 0xF1, 0x00, 0x00, 0xC0, 0xF2, 0xED, 0x63, /* 0x70-0x73 */ + 0x00, 0x00, 0xC2, 0x79, 0xEF, 0xFE, 0xC2, 0x78, /* 0x74-0x77 */ + 0xC3, 0x7E, 0x00, 0x00, 0xC3, 0xA1, 0xC4, 0x6D, /* 0x78-0x7B */ + 0xF4, 0x6E, 0xF4, 0x6D, 0xF5, 0xDD, 0xF6, 0xEF, /* 0x7C-0x7F */ + + 0xC5, 0x7A, 0xF7, 0xE8, 0xF7, 0xE7, 0xF7, 0xE9, /* 0x80-0x83 */ + 0xA5, 0xC8, 0xCF, 0xC6, 0xAF, 0x59, 0xB2, 0x76, /* 0x84-0x87 */ + 0xD6, 0x6A, 0xA5, 0xC9, 0xC9, 0xA7, 0xA4, 0xFD, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xCA, 0x45, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0x6C, 0xCB, 0x6A, /* 0x90-0x93 */ + 0xCB, 0x6B, 0xCB, 0x68, 0xA8, 0x68, 0xCB, 0x69, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xCD, 0x6D, 0x00, 0x00, 0xAA, 0xB3, /* 0x9C-0x9F */ + 0xCD, 0x6B, 0xCD, 0x67, 0xCD, 0x6A, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xCD, 0x66, 0xAA, 0xB5, 0xCD, 0x69, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xAA, 0xB2, 0xAA, 0xB1, 0x00, 0x00, 0xAA, 0xB4, /* 0xA8-0xAB */ + 0xCD, 0x6C, 0xCD, 0x68, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xAC, 0xC2, 0xAC, 0xC5, /* 0xB0-0xB3 */ + 0xCF, 0xCE, 0xCF, 0xCD, 0xCF, 0xCC, 0xAC, 0xBF, /* 0xB4-0xB7 */ + 0xCF, 0xD5, 0xCF, 0xCB, 0x00, 0x00, 0xAC, 0xC1, /* 0xB8-0xBB */ + 0xD2, 0xAF, 0x00, 0x00, 0xCF, 0xD2, 0xCF, 0xD0, /* 0xBC-0xBF */ + 0xAC, 0xC4, 0x00, 0x00, 0xCF, 0xC8, 0xCF, 0xD3, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xCF, 0xCA, 0xCF, 0xD4, 0xCF, 0xD1, /* 0xC4-0xC7 */ + 0xCF, 0xC9, 0x00, 0x00, 0xAC, 0xC0, 0xCF, 0xD6, /* 0xC8-0xCB */ + 0xCF, 0xC7, 0xAC, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xD2, 0xB4, 0xD2, 0xAB, /* 0xD0-0xD3 */ + 0xD2, 0xB6, 0x00, 0x00, 0xD2, 0xAE, 0xD2, 0xB9, /* 0xD4-0xD7 */ + 0xD2, 0xBA, 0xD2, 0xAC, 0xD2, 0xB8, 0xD2, 0xB5, /* 0xD8-0xDB */ + 0xD2, 0xB3, 0xD2, 0xB7, 0xAF, 0x5F, 0x00, 0x00, /* 0xDC-0xDF */ + 0xAF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xB1, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xD2, 0xAD, 0x00, 0x00, 0xD2, 0xB0, /* 0xE4-0xE7 */ + 0xD2, 0xBB, 0xD2, 0xB2, 0xAF, 0x5E, 0xCF, 0xCF, /* 0xE8-0xEB */ + 0x00, 0x00, 0xAF, 0x5A, 0xAF, 0x5C, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xD6, 0x78, 0xD6, 0x6D, 0xD6, 0x6B, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xD6, 0x6C, 0x00, 0x00, 0xD6, 0x73, 0x00, 0x00, /* 0xF8-0xFB */ + 0xD6, 0x74, 0xD6, 0x70, 0xB2, 0x7B, 0xD6, 0x75, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_74[512] = { + 0xD6, 0x72, 0xD6, 0x6F, 0x00, 0x00, 0xB2, 0x79, /* 0x00-0x03 */ + 0xD6, 0x6E, 0xB2, 0x77, 0xB2, 0x7A, 0xD6, 0x71, /* 0x04-0x07 */ + 0xD6, 0x79, 0xAF, 0x5B, 0xB2, 0x78, 0xD6, 0x77, /* 0x08-0x0B */ + 0xD6, 0x76, 0xB2, 0x7C, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0x7E, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xA1, 0xB5, 0x60, /* 0x18-0x1B */ + 0x00, 0x00, 0xDA, 0xA7, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xDA, 0xA9, 0xDA, 0xA2, 0xB5, 0x5A, 0xDA, 0xA6, /* 0x20-0x23 */ + 0xDA, 0xA5, 0xB5, 0x5B, 0xB5, 0x61, 0x00, 0x00, /* 0x24-0x27 */ + 0xB5, 0x62, 0xDA, 0xA8, 0xB5, 0x58, 0xDA, 0x7D, /* 0x28-0x2B */ + 0xDA, 0x7B, 0xDA, 0xA3, 0xDA, 0x7A, 0xB5, 0x5F, /* 0x2C-0x2F */ + 0xDA, 0x7C, 0xDA, 0xA4, 0xDA, 0xAA, 0xB5, 0x59, /* 0x30-0x33 */ + 0xB5, 0x5E, 0xB5, 0x5C, 0xB5, 0x5D, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xB5, 0x57, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xE9, /* 0x3C-0x3F */ + 0xDE, 0xB7, 0xB7, 0xE8, 0xDE, 0xBB, 0x00, 0x00, /* 0x40-0x43 */ + 0xDE, 0xB1, 0x00, 0x00, 0xDE, 0xBC, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xB2, 0xDE, 0xB3, /* 0x48-0x4B */ + 0x00, 0x00, 0xDE, 0xBD, 0xDE, 0xBA, 0xDE, 0xB8, /* 0x4C-0x4F */ + 0xDE, 0xB9, 0xDE, 0xB5, 0xDE, 0xB4, 0x00, 0x00, /* 0x50-0x53 */ + 0xDE, 0xBE, 0xB7, 0xE5, 0x00, 0x00, 0xDE, 0xB6, /* 0x54-0x57 */ + 0x00, 0x00, 0xB7, 0xEA, 0xB7, 0xE4, 0xB7, 0xEB, /* 0x58-0x5B */ + 0xB7, 0xEC, 0x00, 0x00, 0xB7, 0xE7, 0xB7, 0xE6, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xCE, 0xBA, 0xBE, /* 0x60-0x63 */ + 0xBA, 0xBD, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xD3, /* 0x64-0x67 */ + 0x00, 0x00, 0xBC, 0xFC, 0xBA, 0xBF, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xBA, 0xC1, 0xE2, 0xD4, 0xB7, 0xE3, /* 0x6C-0x6F */ + 0xBA, 0xC0, 0xE2, 0xD0, 0xE2, 0xD2, 0xE2, 0xCF, /* 0x70-0x73 */ + 0x00, 0x00, 0xE2, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xE6, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE6, 0xAA, 0xE6, 0xA7, 0xBD, 0x40, 0xEA, 0x62, /* 0x7C-0x7F */ + + 0xBD, 0x41, 0xE6, 0xA6, 0x00, 0x00, 0xBC, 0xFE, /* 0x80-0x83 */ + 0x00, 0x00, 0xE6, 0xA8, 0xE6, 0xA5, 0xE6, 0xA2, /* 0x84-0x87 */ + 0xE6, 0xA9, 0xE6, 0xA3, 0xE6, 0xA4, 0xBC, 0xFD, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xED, 0x69, 0x00, 0x00, 0xEA, 0x66, 0x00, 0x00, /* 0x90-0x93 */ + 0xEA, 0x65, 0xEA, 0x67, 0x00, 0x00, 0xED, 0x66, /* 0x94-0x97 */ + 0xBF, 0x5A, 0x00, 0x00, 0xEA, 0x63, 0x00, 0x00, /* 0x98-0x9B */ + 0xBF, 0x58, 0x00, 0x00, 0xBF, 0x5C, 0xBF, 0x5B, /* 0x9C-0x9F */ + 0xEA, 0x64, 0xEA, 0x68, 0x00, 0x00, 0xBF, 0x59, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xED, 0x6D, 0xC0, 0xF5, 0xC2, 0x7A, /* 0xA4-0xA7 */ + 0xC0, 0xF6, 0xC0, 0xF3, 0xED, 0x6A, 0xED, 0x68, /* 0xA8-0xAB */ + 0x00, 0x00, 0xED, 0x6B, 0x00, 0x00, 0xED, 0x6E, /* 0xAC-0xAF */ + 0xC0, 0xF4, 0xED, 0x6C, 0xED, 0x67, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF0, 0x42, 0xF0, 0x45, 0xF2, 0x75, /* 0xB4-0xB7 */ + 0xF0, 0x40, 0x00, 0x00, 0xF4, 0x6F, 0xF0, 0x46, /* 0xB8-0xBB */ + 0x00, 0x00, 0xC3, 0xA2, 0xF0, 0x44, 0xC2, 0x7B, /* 0xBC-0xBF */ + 0xF0, 0x41, 0xF0, 0x43, 0xF0, 0x47, 0xF2, 0x76, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xF2, 0x74, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0xA3, 0xF2, 0x73, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x6E, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xC4, 0xED, 0xF6, 0xF1, 0xC4, 0xEC, 0xF6, 0xF3, /* 0xD4-0xD7 */ + 0xF6, 0xF0, 0xF6, 0xF2, 0xC5, 0xD0, 0xF8, 0xB2, /* 0xD8-0xDB */ + 0xA5, 0xCA, 0xCD, 0x6E, 0xD2, 0xBC, 0xD2, 0xBD, /* 0xDC-0xDF */ + 0xB2, 0x7D, 0xDE, 0xBF, 0xBF, 0x5D, 0xC3, 0xA4, /* 0xE0-0xE3 */ + 0xC5, 0x7B, 0xF8, 0xB3, 0xA5, 0xCB, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xCD, 0x6F, 0xA2, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xCF, 0xD7, 0x00, 0x00, 0xCF, 0xD8, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xD2, 0xBE, 0xD2, 0xBF, 0xB2, 0x7E, 0xB2, 0xA1, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xAB, /* 0xF8-0xFB */ + 0x00, 0x00, 0xDE, 0xC2, 0xDE, 0xC1, 0xDE, 0xC0, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_75[512] = { + 0xE2, 0xD5, 0x00, 0x00, 0xE2, 0xD6, 0xE2, 0xD7, /* 0x00-0x03 */ + 0xBA, 0xC2, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xAD, /* 0x04-0x07 */ + 0xE6, 0xAC, 0x00, 0x00, 0x00, 0x00, 0xEA, 0x69, /* 0x08-0x0B */ + 0xBF, 0x5E, 0xBF, 0x5F, 0x00, 0x00, 0xED, 0x72, /* 0x0C-0x0F */ + 0xED, 0x6F, 0xED, 0x70, 0xED, 0x71, 0xF0, 0x49, /* 0x10-0x13 */ + 0xF0, 0x48, 0xC2, 0x7C, 0xF2, 0x77, 0xF5, 0xDE, /* 0x14-0x17 */ + 0xA5, 0xCC, 0x00, 0x00, 0xAC, 0xC6, 0x00, 0x00, /* 0x18-0x1B */ + 0xB2, 0xA2, 0xDE, 0xC3, 0x00, 0x00, 0xA5, 0xCD, /* 0x1C-0x1F */ + 0x00, 0x00, 0xD2, 0xC0, 0xB2, 0xA3, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xB5, 0x63, 0xB5, 0x64, 0x00, 0x00, /* 0x24-0x27 */ + 0xA5, 0xCE, 0xA5, 0xCF, 0xCA, 0x46, 0xA8, 0x6A, /* 0x28-0x2B */ + 0xA8, 0x69, 0xAC, 0xC7, 0xCF, 0xD9, 0xDA, 0xAC, /* 0x2C-0x2F */ + 0xA5, 0xD0, 0xA5, 0xD1, 0xA5, 0xD2, 0xA5, 0xD3, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x6B, /* 0x34-0x37 */ + 0xA8, 0x6C, 0xCB, 0x6E, 0xCB, 0x6D, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xAA, 0xB6, 0xCD, 0x72, 0xCD, 0x70, /* 0x3C-0x3F */ + 0xCD, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xDA, /* 0x44-0x47 */ + 0xCF, 0xDB, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xCB, /* 0x48-0x4B */ + 0xAC, 0xC9, 0x00, 0x00, 0xAC, 0xCA, 0xAC, 0xC8, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xAF, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xAF, 0x64, 0xAF, 0x63, 0xD2, 0xC1, /* 0x58-0x5B */ + 0xAF, 0x62, 0xAF, 0x61, 0x00, 0x00, 0xD2, 0xC2, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0xA6, 0xD6, 0x7B, /* 0x60-0x63 */ + 0xD6, 0x7A, 0xB2, 0xA4, 0xB2, 0xA5, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xB5, 0x66, 0xB5, 0x65, /* 0x68-0x6B */ + 0xDA, 0xAE, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xAD, /* 0x6C-0x6F */ + 0xB2, 0xA7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xB7, 0xED, 0xDE, 0xC5, /* 0x74-0x77 */ + 0xB7, 0xEE, 0xDE, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xE2, 0xD8, 0xE6, 0xAE, 0xBD, 0x42, /* 0x7C-0x7F */ + + 0xEA, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xED, 0x73, 0x00, 0x00, 0xC3, 0xA6, 0xC3, 0xA5, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xC5, 0x7C, 0xA5, 0xD4, /* 0x88-0x8B */ + 0xCD, 0x73, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xA8, /* 0x8C-0x8F */ + 0xE2, 0xD9, 0xBA, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xCB, 0x6F, 0xCB, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xCD, 0x74, 0xAA, 0xB8, 0xAA, 0xB9, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xAA, 0xB7, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xAC, 0xCF, 0xAC, 0xD0, /* 0xA0-0xA3 */ + 0xAC, 0xCD, 0xAC, 0xCE, 0x00, 0x00, 0xCF, 0xDC, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xCF, 0xDD, 0xAC, 0xCC, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xD2, 0xC3, 0x00, 0x00, 0xAF, 0x68, 0xAF, 0x69, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xB2, 0xAB, 0xD2, 0xC9, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xAF, 0x6E, 0xAF, 0x6C, 0xD2, 0xCA, 0xD2, 0xC5, /* 0xB8-0xBB */ + 0xAF, 0x6B, 0xAF, 0x6A, 0xAF, 0x65, 0xD2, 0xC8, /* 0xBC-0xBF */ + 0xD2, 0xC7, 0xD2, 0xC4, 0xAF, 0x6D, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xD2, 0xC6, 0xAF, 0x66, 0x00, 0x00, 0xAF, 0x67, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0xAC, 0xD6, 0xA1, /* 0xC8-0xCB */ + 0xD6, 0xA2, 0xB2, 0xAD, 0xD6, 0x7C, 0xD6, 0x7E, /* 0xCC-0xCF */ + 0xD6, 0xA4, 0xD6, 0xA3, 0xD6, 0x7D, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xB2, 0xA9, 0xB2, 0xAA, 0x00, 0x00, 0xDA, 0xB6, /* 0xD4-0xD7 */ + 0xB5, 0x6B, 0xB5, 0x6A, 0xDA, 0xB0, 0xB5, 0x68, /* 0xD8-0xDB */ + 0x00, 0x00, 0xDA, 0xB3, 0xB5, 0x6C, 0xDA, 0xB4, /* 0xDC-0xDF */ + 0xB5, 0x6D, 0xDA, 0xB1, 0xB5, 0x67, 0xB5, 0x69, /* 0xE0-0xE3 */ + 0xDA, 0xB5, 0x00, 0x00, 0xDA, 0xB2, 0xDA, 0xAF, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xDE, 0xD2, 0x00, 0x00, 0xDE, 0xC7, /* 0xEC-0xEF */ + 0xB7, 0xF0, 0xB7, 0xF3, 0xB7, 0xF2, 0xB7, 0xF7, /* 0xF0-0xF3 */ + 0xB7, 0xF6, 0xDE, 0xD3, 0xDE, 0xD1, 0xDE, 0xCA, /* 0xF4-0xF7 */ + 0xDE, 0xCE, 0xDE, 0xCD, 0xB7, 0xF4, 0xDE, 0xD0, /* 0xF8-0xFB */ + 0xDE, 0xCC, 0xDE, 0xD4, 0xDE, 0xCB, 0xB7, 0xF5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_76[512] = { + 0xB7, 0xEF, 0xB7, 0xF1, 0x00, 0x00, 0xDE, 0xC9, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xE2, 0xDB, 0xBA, 0xC7, 0xE2, 0xDF, 0xBA, 0xC6, /* 0x08-0x0B */ + 0xE2, 0xDC, 0xBA, 0xC5, 0x00, 0x00, 0xDE, 0xC8, /* 0x0C-0x0F */ + 0xDE, 0xCF, 0xE2, 0xDE, 0x00, 0x00, 0xBA, 0xC8, /* 0x10-0x13 */ + 0xE2, 0xE0, 0xE2, 0xDD, 0xE2, 0xDA, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xE6, 0xB1, 0xE6, 0xB5, 0xE6, 0xB7, /* 0x18-0x1B */ + 0xE6, 0xB3, 0xE6, 0xB2, 0xE6, 0xB0, 0xBD, 0x45, /* 0x1C-0x1F */ + 0xBD, 0x43, 0xBD, 0x48, 0xBD, 0x49, 0xE6, 0xB4, /* 0x20-0x23 */ + 0xBD, 0x46, 0xE6, 0xAF, 0xBD, 0x47, 0xBA, 0xC4, /* 0x24-0x27 */ + 0xE6, 0xB6, 0xBD, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xEA, 0x6C, 0x00, 0x00, 0xEA, 0x6B, /* 0x2C-0x2F */ + 0xEA, 0x73, 0xEA, 0x6D, 0xEA, 0x72, 0xEA, 0x6F, /* 0x30-0x33 */ + 0xBF, 0x60, 0xEA, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xBF, 0x61, 0x00, 0x00, 0xBF, 0x62, 0x00, 0x00, /* 0x38-0x3B */ + 0xEA, 0x70, 0xEA, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF8, 0xED, 0x74, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF7, 0xED, 0x77, /* 0x44-0x47 */ + 0xED, 0x75, 0xED, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xC0, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF0, 0x4D, 0x00, 0x00, 0xC2, 0xA1, 0xF0, 0x4E, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xC2, 0x7D, 0xF0, 0x4F, /* 0x54-0x57 */ + 0xC2, 0x7E, 0xF0, 0x4C, 0xF0, 0x50, 0x00, 0x00, /* 0x58-0x5B */ + 0xF0, 0x4A, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xA7, /* 0x5C-0x5F */ + 0xF2, 0x78, 0xC3, 0xA8, 0xC4, 0x6F, 0x00, 0x00, /* 0x60-0x63 */ + 0xF0, 0x4B, 0xC4, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xC4, 0xEE, 0xF5, 0xDF, 0x00, 0x00, /* 0x68-0x6B */ + 0xC5, 0x7E, 0xF6, 0xF4, 0xC5, 0x7D, 0x00, 0x00, /* 0x6C-0x6F */ + 0xF7, 0xEA, 0xC5, 0xF5, 0xC5, 0xF6, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xF9, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xAC, 0xD1, 0xCF, 0xDE, 0x00, 0x00, 0xB5, 0x6E, /* 0x78-0x7B */ + 0xB5, 0x6F, 0xA5, 0xD5, 0xA6, 0xCA, 0xCA, 0x47, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xCB, 0x71, 0xA8, 0x6D, 0x00, 0x00, /* 0x80-0x83 */ + 0xAA, 0xBA, 0x00, 0x00, 0xAC, 0xD2, 0xAC, 0xD3, /* 0x84-0x87 */ + 0xAC, 0xD4, 0xD6, 0xA6, 0xD2, 0xCB, 0xAF, 0x6F, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0xAE, 0xD6, 0xA5, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB8, 0xB5, 0x71, /* 0x90-0x93 */ + 0x00, 0x00, 0xDA, 0xB7, 0xB5, 0x70, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xDE, 0xD5, 0xBD, 0x4A, 0xE6, 0xBB, /* 0x98-0x9B */ + 0xE6, 0xB8, 0xE6, 0xB9, 0xE6, 0xBA, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xED, 0x78, 0x00, 0x00, 0xF0, 0x51, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0x71, 0xF4, 0x70, /* 0xA8-0xAB */ + 0x00, 0x00, 0xF6, 0xF5, 0xA5, 0xD6, 0xCD, 0x75, /* 0xAC-0xAF */ + 0xAF, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xB5, 0x72, 0xDE, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE2, 0xE1, 0x00, 0x00, 0xBD, 0x4B, 0xEA, 0x74, /* 0xB8-0xBB */ + 0x00, 0x00, 0xF0, 0x52, 0xF4, 0x72, 0xA5, 0xD7, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xAA, 0xBB, 0xAC, 0xD7, /* 0xC0-0xC3 */ + 0xCF, 0xDF, 0xAC, 0xD8, 0xAC, 0xD6, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xAC, 0xD5, 0xD2, 0xCC, 0xAF, 0x71, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xAF, 0x72, 0xAF, 0x73, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0xB0, 0xD6, 0xA7, /* 0xD0-0xD3 */ + 0xB2, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xB9, 0xB2, 0xB1, /* 0xD8-0xDB */ + 0xB5, 0x73, 0xDE, 0xD7, 0xB7, 0xF8, 0xB7, 0xF9, /* 0xDC-0xDF */ + 0x00, 0x00, 0xBA, 0xC9, 0x00, 0x00, 0xBA, 0xCA, /* 0xE0-0xE3 */ + 0xBD, 0x4C, 0xBF, 0x64, 0xEA, 0x75, 0xBF, 0x63, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xED, 0x79, 0xC0, 0xFA, 0x00, 0x00, /* 0xE8-0xEB */ + 0xF0, 0x53, 0xF4, 0x73, 0xA5, 0xD8, 0xA8, 0x6E, /* 0xEC-0xEF */ + 0xCD, 0x78, 0xCD, 0x77, 0xAA, 0xBC, 0xCD, 0x76, /* 0xF0-0xF3 */ + 0xAA, 0xBD, 0xCD, 0x79, 0x00, 0x00, 0xCF, 0xE5, /* 0xF4-0xF7 */ + 0xAC, 0xDB, 0xAC, 0xDA, 0xCF, 0xE7, 0xCF, 0xE6, /* 0xF8-0xFB */ + 0xAC, 0xDF, 0x00, 0x00, 0xAC, 0xDE, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_77[512] = { + 0x00, 0x00, 0xAC, 0xD9, 0x00, 0x00, 0xCF, 0xE1, /* 0x00-0x03 */ + 0xCF, 0xE2, 0xCF, 0xE3, 0x00, 0x00, 0xAC, 0xE0, /* 0x04-0x07 */ + 0xCF, 0xE0, 0xAC, 0xDC, 0xCF, 0xE4, 0xAC, 0xDD, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xD2, 0xCF, 0xD2, 0xD3, 0xD2, 0xD1, 0xD2, 0xD0, /* 0x10-0x13 */ + 0x00, 0x00, 0xD2, 0xD4, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xD2, 0xD5, 0xD2, 0xD6, 0xD2, 0xCE, /* 0x18-0x1B */ + 0x00, 0x00, 0xD2, 0xCD, 0x00, 0x00, 0xAF, 0x75, /* 0x1C-0x1F */ + 0xAF, 0x76, 0x00, 0x00, 0xD2, 0xD7, 0xD2, 0xD2, /* 0x20-0x23 */ + 0x00, 0x00, 0xD6, 0xB0, 0x00, 0x00, 0xD2, 0xD8, /* 0x24-0x27 */ + 0xAF, 0x77, 0xAF, 0x74, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xD6, 0xAA, 0x00, 0x00, 0xD6, 0xA9, /* 0x2C-0x2F */ + 0x00, 0x00, 0xD6, 0xAB, 0xD6, 0xAC, 0xD6, 0xAE, /* 0x30-0x33 */ + 0xD6, 0xAD, 0xD6, 0xB2, 0xB2, 0xB5, 0xB2, 0xB2, /* 0x34-0x37 */ + 0xB2, 0xB6, 0xD6, 0xA8, 0xB2, 0xB7, 0xD6, 0xB1, /* 0x38-0x3B */ + 0xB2, 0xB4, 0xD6, 0xAF, 0xB2, 0xB3, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xDA, 0xBC, 0xDA, 0xBE, 0xDA, 0xBA, 0xDA, 0xBB, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xBF, 0xDA, 0xC1, /* 0x48-0x4B */ + 0xDA, 0xC2, 0xDA, 0xBD, 0xDA, 0xC0, 0xB5, 0x74, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xDE, 0xDB, 0x00, 0x00, /* 0x50-0x53 */ + 0xDE, 0xE0, 0xDE, 0xD8, 0xDE, 0xDC, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xDE, 0xE1, 0xDE, 0xDD, 0xB7, 0xFA, /* 0x58-0x5B */ + 0xB8, 0x43, 0x00, 0x00, 0xB7, 0xFD, 0xDE, 0xD9, /* 0x5C-0x5F */ + 0xDE, 0xDA, 0xBA, 0xCE, 0xB8, 0x46, 0xB7, 0xFE, /* 0x60-0x63 */ + 0x00, 0x00, 0xB8, 0x44, 0xB7, 0xFC, 0xDE, 0xDF, /* 0x64-0x67 */ + 0xB8, 0x45, 0xDE, 0xDE, 0xB8, 0x41, 0xB7, 0xFB, /* 0x68-0x6B */ + 0xB8, 0x42, 0xDE, 0xE2, 0xE2, 0xE6, 0xE2, 0xE8, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xB8, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xE2, 0xE3, 0xBA, 0xCC, 0xE2, 0xE9, 0xBA, 0xCD, /* 0x7C-0x7F */ + + 0xE2, 0xE7, 0xE2, 0xE2, 0xE2, 0xE5, 0xE2, 0xEA, /* 0x80-0x83 */ + 0xBA, 0xCB, 0xE2, 0xE4, 0x00, 0x00, 0xBD, 0x4E, /* 0x84-0x87 */ + 0xE6, 0xBF, 0xE6, 0xBE, 0x00, 0x00, 0xBD, 0x51, /* 0x88-0x8B */ + 0xBD, 0x4F, 0xE6, 0xBC, 0xBD, 0x4D, 0xE6, 0xBD, /* 0x8C-0x8F */ + 0x00, 0x00, 0xBD, 0x50, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xEA, 0x7D, 0x00, 0x00, 0xEA, 0xA1, /* 0x94-0x97 */ + 0x00, 0x00, 0xEA, 0x7E, 0xEA, 0x76, 0xEA, 0x7A, /* 0x98-0x9B */ + 0xEA, 0x79, 0xEA, 0x77, 0xBF, 0x66, 0xBF, 0x67, /* 0x9C-0x9F */ + 0xBF, 0x65, 0xEA, 0x78, 0xEA, 0x7B, 0xEA, 0x7C, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xBF, 0x68, 0x00, 0x00, 0xC1, 0x40, /* 0xA4-0xA7 */ + 0xED, 0xA3, 0x00, 0x00, 0xC0, 0xFC, 0xED, 0x7B, /* 0xA8-0xAB */ + 0xC0, 0xFE, 0xC1, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xC0, 0xFD, 0xED, 0xA2, 0xED, 0x7C, 0xC0, 0xFB, /* 0xB0-0xB3 */ + 0xED, 0xA1, 0xED, 0x7A, 0xED, 0x7E, 0xED, 0x7D, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0x55, 0xC2, 0xA4, /* 0xB8-0xBB */ + 0xC2, 0xA5, 0xC2, 0xA2, 0x00, 0x00, 0xC2, 0xA3, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xF0, 0x54, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xF2, 0x7B, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xA9, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF2, 0x79, 0xF2, 0x7A, 0x00, 0x00, /* 0xC8-0xCB */ + 0xF4, 0x74, 0xF4, 0x77, 0xF4, 0x75, 0xF4, 0x76, /* 0xCC-0xCF */ + 0xF5, 0xE0, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xEF, /* 0xD0-0xD3 */ + 0xF7, 0xEB, 0xF8, 0xB4, 0x00, 0x00, 0xC5, 0xF7, /* 0xD4-0xD7 */ + 0xF8, 0xF8, 0xF8, 0xF9, 0xC6, 0x66, 0xA5, 0xD9, /* 0xD8-0xDB */ + 0xAC, 0xE1, 0x00, 0x00, 0xDA, 0xC3, 0x00, 0x00, /* 0xDC-0xDF */ + 0xDE, 0xE3, 0x00, 0x00, 0xA5, 0xDA, 0xA8, 0x6F, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xAA, 0xBE, 0x00, 0x00, 0xCF, 0xE8, /* 0xE4-0xE7 */ + 0xCF, 0xE9, 0xAF, 0x78, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xDA, 0xC4, 0xB5, 0x75, 0xB8, 0x47, 0xC1, 0x42, /* 0xEC-0xEF */ + 0xED, 0xA4, 0xF2, 0x7C, 0xF4, 0x78, 0xA5, 0xDB, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xA1, /* 0xF4-0xF7 */ + 0xCD, 0x7A, 0xCD, 0x7C, 0xCD, 0x7E, 0xCD, 0x7D, /* 0xF8-0xFB */ + 0xCD, 0x7B, 0xAA, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_78[512] = { + 0x00, 0x00, 0x00, 0x00, 0xAC, 0xE2, 0xCF, 0xF2, /* 0x00-0x03 */ + 0x00, 0x00, 0xCF, 0xED, 0xCF, 0xEA, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xCF, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xAC, 0xE4, 0xAC, 0xE5, 0xCF, 0xF0, 0xCF, 0xEF, /* 0x0C-0x0F */ + 0xCF, 0xEE, 0xCF, 0xEB, 0xCF, 0xEC, 0xCF, 0xF3, /* 0x10-0x13 */ + 0xAC, 0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0xAF, 0x7C, 0x00, 0x00, 0xAF, 0xA4, /* 0x1C-0x1F */ + 0xAF, 0xA3, 0xD2, 0xE1, 0xD2, 0xDB, 0xD2, 0xD9, /* 0x20-0x23 */ + 0x00, 0x00, 0xAF, 0xA1, 0xD6, 0xB9, 0xAF, 0x7A, /* 0x24-0x27 */ + 0xD2, 0xDE, 0xD2, 0xE2, 0xD2, 0xE4, 0xD2, 0xE0, /* 0x28-0x2B */ + 0xD2, 0xDA, 0xAF, 0xA2, 0xD2, 0xDF, 0xD2, 0xDD, /* 0x2C-0x2F */ + 0xAF, 0x79, 0xD2, 0xE5, 0xAF, 0xA5, 0xD2, 0xE3, /* 0x30-0x33 */ + 0xAF, 0x7D, 0xD2, 0xDC, 0x00, 0x00, 0xAF, 0x7E, /* 0x34-0x37 */ + 0xAF, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xB9, /* 0x40-0x43 */ + 0x00, 0x00, 0xD6, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xD6, 0xB3, 0xD6, 0xB5, 0xD6, 0xB7, 0x00, 0x00, /* 0x48-0x4B */ + 0xD6, 0xB8, 0xD6, 0xB6, 0xB2, 0xBA, 0x00, 0x00, /* 0x4C-0x4F */ + 0xD6, 0xBB, 0x00, 0x00, 0xD6, 0xB4, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0xDA, 0xC8, 0xB5, 0x76, 0xDA, 0xD0, 0x00, 0x00, /* 0x5C-0x5F */ + 0xDA, 0xC5, 0x00, 0x00, 0xDA, 0xD1, 0x00, 0x00, /* 0x60-0x63 */ + 0xDA, 0xC6, 0xDA, 0xC7, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xDA, 0xCF, 0xDA, 0xCE, 0xDA, 0xCB, 0xB2, 0xB8, /* 0x68-0x6B */ + 0xB5, 0x77, 0xDA, 0xC9, 0xDA, 0xCC, 0xB5, 0x78, /* 0x6C-0x6F */ + 0xDA, 0xCD, 0xDA, 0xCA, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xDE, 0xEE, 0x00, 0x00, 0xDE, 0xF2, /* 0x78-0x7B */ + 0xB8, 0x4E, 0x00, 0x00, 0xE2, 0xF0, 0xB8, 0x51, /* 0x7C-0x7F */ + + 0xDE, 0xF0, 0xF9, 0xD6, 0x00, 0x00, 0xDE, 0xED, /* 0x80-0x83 */ + 0xDE, 0xE8, 0xDE, 0xEA, 0xDE, 0xEB, 0xDE, 0xE4, /* 0x84-0x87 */ + 0x00, 0x00, 0xB8, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xB8, 0x4C, 0x00, 0x00, 0xB8, 0x48, 0xDE, 0xE7, /* 0x8C-0x8F */ + 0x00, 0x00, 0xB8, 0x4F, 0x00, 0x00, 0xB8, 0x50, /* 0x90-0x93 */ + 0xDE, 0xE6, 0xDE, 0xE9, 0xDE, 0xF1, 0xB8, 0x4A, /* 0x94-0x97 */ + 0xB8, 0x4B, 0xDE, 0xEF, 0xDE, 0xE5, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xE2, 0xF2, 0xBA, 0xD0, /* 0x9C-0x9F */ + 0xE2, 0xF4, 0xDE, 0xEC, 0xE2, 0xF6, 0xBA, 0xD4, /* 0xA0-0xA3 */ + 0xE2, 0xF7, 0xE2, 0xF3, 0x00, 0x00, 0xBA, 0xD1, /* 0xA4-0xA7 */ + 0xE2, 0xEF, 0xBA, 0xD3, 0xE2, 0xEC, 0xE2, 0xF1, /* 0xA8-0xAB */ + 0xE2, 0xF5, 0xE2, 0xEE, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xB8, 0x49, 0x00, 0x00, 0xE2, 0xEB, 0xBA, 0xD2, /* 0xB0-0xB3 */ + 0xE2, 0xED, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xBD, 0x54, 0xE6, 0xC1, /* 0xB8-0xBB */ + 0xBD, 0x58, 0x00, 0x00, 0xBD, 0x56, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xBA, 0xCF, 0x00, 0x00, 0xE6, 0xC8, /* 0xC0-0xC3 */ + 0xE6, 0xC9, 0xBD, 0x53, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE6, 0xC7, 0xE6, 0xCA, 0xBD, 0x55, 0xBD, 0x52, /* 0xC8-0xCB */ + 0xE6, 0xC3, 0xE6, 0xC0, 0xE6, 0xC5, 0xE6, 0xC2, /* 0xCC-0xCF */ + 0xBD, 0x59, 0xE6, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xE6, 0xC6, 0xBD, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xBF, 0x6A, 0xEA, 0xA8, /* 0xD8-0xDB */ + 0x00, 0x00, 0xEA, 0xA2, 0xEA, 0xA6, 0xEA, 0xAC, /* 0xDC-0xDF */ + 0xEA, 0xAD, 0xEA, 0xA9, 0xEA, 0xAA, 0xEA, 0xA7, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xEA, 0xA4, 0x00, 0x00, 0xBF, 0x6C, /* 0xE4-0xE7 */ + 0xBF, 0x69, 0xEA, 0xA3, 0xEA, 0xA5, 0x00, 0x00, /* 0xE8-0xEB */ + 0xBF, 0x6B, 0xEA, 0xAB, 0x00, 0x00, 0xC1, 0x46, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xAA, 0xED, 0xA5, /* 0xF0-0xF3 */ + 0xC1, 0x45, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x43, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xED, 0xAC, 0xC1, 0x44, 0xED, 0xA8, /* 0xF8-0xFB */ + 0xED, 0xA9, 0xED, 0xA6, 0xED, 0xAD, 0xF0, 0x56, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_79[512] = { + 0x00, 0x00, 0xC1, 0x47, 0xED, 0xA7, 0x00, 0x00, /* 0x00-0x03 */ + 0xED, 0xAE, 0xED, 0xAB, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0xF0, 0x5A, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xF0, 0x57, 0x00, 0x00, 0xC2, 0xA6, 0x00, 0x00, /* 0x0C-0x0F */ + 0xF0, 0x5B, 0xF0, 0x5D, 0xF0, 0x5C, 0xF0, 0x58, /* 0x10-0x13 */ + 0xF0, 0x59, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA3, /* 0x14-0x17 */ + 0x00, 0x00, 0xC3, 0xAA, 0x00, 0x00, 0xF2, 0x7E, /* 0x18-0x1B */ + 0xF2, 0xA2, 0xF2, 0x7D, 0xF2, 0xA4, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xF2, 0xA1, 0x00, 0x00, 0xF4, 0x7A, /* 0x20-0x23 */ + 0xF4, 0x7D, 0xF4, 0x79, 0xC4, 0x71, 0xF4, 0x7B, /* 0x24-0x27 */ + 0xF4, 0x7C, 0xF4, 0x7E, 0xC4, 0x72, 0xC4, 0x74, /* 0x28-0x2B */ + 0xC4, 0x73, 0xF5, 0xE1, 0x00, 0x00, 0xF5, 0xE3, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF5, 0xE2, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xF6, 0xF6, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xF8, 0xB5, 0xF8, 0xFA, 0xA5, 0xDC, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xCB, 0x72, 0xAA, 0xC0, 0xCD, 0xA3, /* 0x3C-0x3F */ + 0xAA, 0xC1, 0xAA, 0xC2, 0xCD, 0xA2, 0x00, 0x00, /* 0x40-0x43 */ + 0xCF, 0xF8, 0xCF, 0xF7, 0xAC, 0xE6, 0xAC, 0xE9, /* 0x44-0x47 */ + 0xAC, 0xE8, 0xAC, 0xE7, 0xCF, 0xF4, 0xCF, 0xF6, /* 0x48-0x4B */ + 0xCF, 0xF5, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xE8, /* 0x4C-0x4F */ + 0xAF, 0xA7, 0xD2, 0xEC, 0xD2, 0xEB, 0xD2, 0xEA, /* 0x50-0x53 */ + 0xD2, 0xE6, 0xAF, 0xA6, 0xAF, 0xAA, 0xAF, 0xAD, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xAF, 0xAE, 0xD2, 0xE7, /* 0x58-0x5B */ + 0xD2, 0xE9, 0xAF, 0xAC, 0xAF, 0xAB, 0xAF, 0xA9, /* 0x5C-0x5F */ + 0xAF, 0xA8, 0xD6, 0xC2, 0x00, 0x00, 0xD6, 0xC0, /* 0x60-0x63 */ + 0xD6, 0xBC, 0xB2, 0xBB, 0x00, 0x00, 0xD6, 0xBD, /* 0x64-0x67 */ + 0xB2, 0xBC, 0xD6, 0xBE, 0xD6, 0xBF, 0xD6, 0xC1, /* 0x68-0x6B */ + 0x00, 0x00, 0xB2, 0xBD, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xDA, 0xD5, 0x00, 0x00, 0xDA, 0xD4, 0xDA, 0xD3, /* 0x70-0x73 */ + 0xDA, 0xD2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xDE, 0xF6, 0xB8, 0x52, 0x00, 0x00, /* 0x78-0x7B */ + 0xDE, 0xF3, 0xDE, 0xF5, 0x00, 0x00, 0xB8, 0x53, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xB8, 0x54, 0xDE, 0xF4, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE3, 0x41, 0x00, 0x00, 0xE2, 0xF9, 0xE2, 0xFA, /* 0x88-0x8B */ + 0x00, 0x00, 0xBA, 0xD7, 0xBA, 0xD5, 0xBA, 0xD6, /* 0x8C-0x8F */ + 0xE3, 0x43, 0x00, 0x00, 0xE3, 0x42, 0xE2, 0xFE, /* 0x90-0x93 */ + 0xE2, 0xFD, 0xE2, 0xFC, 0xE2, 0xFB, 0xE3, 0x40, /* 0x94-0x97 */ + 0xE2, 0xF8, 0x00, 0x00, 0xE6, 0xCB, 0xE6, 0xD0, /* 0x98-0x9B */ + 0xE6, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE6, 0xCD, 0xE6, 0xCC, 0xE6, 0xCF, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xEA, 0xAE, 0x00, 0x00, 0xBF, 0x6D, 0xC1, 0x48, /* 0xA4-0xA7 */ + 0xED, 0xB0, 0x00, 0x00, 0xC1, 0x49, 0xED, 0xAF, /* 0xA8-0xAB */ + 0xF0, 0x5F, 0xF0, 0x5E, 0xC2, 0xA7, 0x00, 0x00, /* 0xAC-0xAF */ + 0xF2, 0xA5, 0xC3, 0xAB, 0xF4, 0xA1, 0xC5, 0xA1, /* 0xB0-0xB3 */ + 0xF6, 0xF7, 0x00, 0x00, 0xF8, 0xB7, 0xF8, 0xB6, /* 0xB4-0xB7 */ + 0xC9, 0xA8, 0xAC, 0xEA, 0xAC, 0xEB, 0xD6, 0xC3, /* 0xB8-0xBB */ + 0x00, 0x00, 0xB8, 0x56, 0xA5, 0xDD, 0xA8, 0x72, /* 0xBC-0xBF */ + 0xA8, 0x71, 0xA8, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xCD, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xAA, 0xC4, 0xAA, 0xC3, 0x00, 0x00, 0xAC, 0xEE, /* 0xC8-0xCB */ + 0x00, 0x00, 0xCF, 0xFA, 0xCF, 0xFD, 0xCF, 0xFB, /* 0xCC-0xCF */ + 0x00, 0x00, 0xAC, 0xEC, 0xAC, 0xED, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xCF, 0xF9, 0xCF, 0xFC, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xAF, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xD2, 0xF3, 0xD2, 0xF5, 0xD2, 0xF4, 0xAF, 0xB2, /* 0xDC-0xDF */ + 0xD2, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xAF, 0xB0, /* 0xE0-0xE3 */ + 0xAF, 0xAF, 0x00, 0x00, 0xAF, 0xB3, 0xAF, 0xB1, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xAF, 0xB4, 0xD2, 0xF2, 0xD2, 0xED, /* 0xE8-0xEB */ + 0xD2, 0xEE, 0xD2, 0xF1, 0xD2, 0xF0, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xC6, 0xD6, 0xC7, /* 0xF4-0xF7 */ + 0xD6, 0xC5, 0x00, 0x00, 0xD6, 0xC4, 0xB2, 0xBE, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7A[512] = { + 0xB5, 0x7D, 0x00, 0x00, 0xDA, 0xD6, 0xDA, 0xD8, /* 0x00-0x03 */ + 0xDA, 0xDA, 0xB5, 0x7C, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xB5, 0x7A, 0x00, 0x00, 0xDA, 0xD7, 0xB5, 0x7B, /* 0x08-0x0B */ + 0xDA, 0xD9, 0xB5, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xDF, 0x41, 0xDE, 0xF7, 0xDE, 0xFA, 0xDE, 0xFE, /* 0x10-0x13 */ + 0xB8, 0x5A, 0xDE, 0xFC, 0x00, 0x00, 0xDE, 0xFB, /* 0x14-0x17 */ + 0xDE, 0xF8, 0xDE, 0xF9, 0xB8, 0x58, 0xDF, 0x40, /* 0x18-0x1B */ + 0xB8, 0x57, 0x00, 0x00, 0xB8, 0x5C, 0xB8, 0x5B, /* 0x1C-0x1F */ + 0xB8, 0x59, 0x00, 0x00, 0xDE, 0xFD, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x49, 0x00, 0x00, /* 0x24-0x27 */ + 0xE3, 0x48, 0x00, 0x00, 0x00, 0x00, 0xE3, 0x44, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xBA, 0xD8, 0xE3, 0x47, /* 0x2C-0x2F */ + 0xE3, 0x46, 0xBA, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0x5E, /* 0x34-0x37 */ + 0x00, 0x00, 0xE6, 0xD2, 0x00, 0x00, 0xBD, 0x5F, /* 0x38-0x3B */ + 0xBD, 0x5B, 0xBD, 0x5D, 0x00, 0x00, 0xBD, 0x5A, /* 0x3C-0x3F */ + 0xBD, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xEA, 0xAF, 0x00, 0x00, 0xBF, 0x70, 0xEA, 0xB1, /* 0x44-0x47 */ + 0xEA, 0xB0, 0x00, 0x00, 0xE3, 0x45, 0xBF, 0x72, /* 0x48-0x4B */ + 0xBF, 0x71, 0xBF, 0x6E, 0xBF, 0x6F, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xED, 0xB5, 0x00, 0x00, 0xED, 0xB3, 0xC1, 0x4A, /* 0x54-0x57 */ + 0xED, 0xB4, 0x00, 0x00, 0xED, 0xB6, 0xED, 0xB2, /* 0x58-0x5B */ + 0xED, 0xB1, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, /* 0x5C-0x5F */ + 0xC2, 0xAA, 0xC2, 0xA8, 0xC2, 0xA9, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA6, /* 0x64-0x67 */ + 0xF2, 0xA7, 0xC3, 0xAD, 0x00, 0x00, 0xC3, 0xAC, /* 0x68-0x6B */ + 0xF4, 0xA3, 0xF4, 0xA4, 0xF4, 0xA2, 0x00, 0x00, /* 0x6C-0x6F */ + 0xF6, 0xF8, 0xF6, 0xF9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xA5, 0xDE, 0xCA, 0x48, 0xA8, 0x73, 0x00, 0x00, /* 0x74-0x77 */ + 0xCD, 0xA5, 0xAA, 0xC6, 0xAA, 0xC5, 0xCD, 0xA6, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0x40, 0xAC, 0xEF, /* 0x7C-0x7F */ + + 0xCF, 0xFE, 0xAC, 0xF0, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xAF, 0xB6, 0xD2, 0xF8, 0xD2, 0xF6, 0xD2, 0xFC, /* 0x84-0x87 */ + 0xAF, 0xB7, 0xD2, 0xF7, 0xD2, 0xFB, 0xD2, 0xF9, /* 0x88-0x8B */ + 0xD2, 0xFA, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xC8, /* 0x8C-0x8F */ + 0xD6, 0xCA, 0x00, 0x00, 0xB2, 0xBF, 0x00, 0x00, /* 0x90-0x93 */ + 0xD6, 0xC9, 0xB2, 0xC0, 0xB5, 0xA2, 0xB5, 0xA1, /* 0x94-0x97 */ + 0xB5, 0x7E, 0xDA, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0x44, 0xB8, 0x5D, /* 0x9C-0x9F */ + 0xB8, 0x5E, 0x00, 0x00, 0xDF, 0x43, 0xDF, 0x42, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xE3, 0x4A, 0xBA, 0xDB, 0xBA, 0xDA, 0xE3, 0x4B, /* 0xA8-0xAB */ + 0xE3, 0x4C, 0x00, 0x00, 0xBD, 0x61, 0xBD, 0x60, /* 0xAC-0xAF */ + 0x00, 0x00, 0xEA, 0xB5, 0xE6, 0xD3, 0xE6, 0xD5, /* 0xB0-0xB3 */ + 0xE6, 0xD4, 0xEA, 0xB4, 0xEA, 0xB2, 0xEA, 0xB6, /* 0xB4-0xB7 */ + 0xEA, 0xB3, 0x00, 0x00, 0xBF, 0x73, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xED, 0xB7, 0xC1, 0x4B, /* 0xBC-0xBF */ + 0xED, 0xB8, 0xED, 0xB9, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xC2, 0xAB, 0xC2, 0xAC, 0x00, 0x00, 0xC4, 0x75, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xC5, 0xD1, 0xA5, 0xDF, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xD0, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xD2, 0xFD, 0xAF, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xBA, /* 0xDC-0xDF */ + 0xB3, 0xB9, 0x00, 0x00, 0x00, 0x00, 0xB5, 0xA4, /* 0xE0-0xE3 */ + 0xDA, 0xDD, 0xB5, 0xA3, 0xDA, 0xDC, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x45, /* 0xE8-0xEB */ + 0x00, 0x00, 0xBA, 0xDC, 0xE3, 0x4D, 0xBA, 0xDD, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xC4, 0x76, 0xF4, 0xA5, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xA6, 0xCB, 0xAA, 0xC7, 0xCD, 0xA7, /* 0xF8-0xFB */ + 0x00, 0x00, 0xAC, 0xF2, 0x00, 0x00, 0xAC, 0xF1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7B[512] = { + 0xD0, 0x42, 0xD0, 0x43, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xD3, 0x40, 0xD3, 0x42, 0xAF, 0xB9, 0x00, 0x00, /* 0x04-0x07 */ + 0xD3, 0x44, 0xD3, 0x47, 0xD3, 0x45, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0x46, 0xD3, 0x43, /* 0x0C-0x0F */ + 0xD2, 0xFE, 0xAF, 0xBA, 0xD3, 0x48, 0xD3, 0x41, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xD6, 0xD3, 0xB2, 0xC6, 0xD6, 0xDC, 0xB2, 0xC3, /* 0x18-0x1B */ + 0x00, 0x00, 0xD6, 0xD5, 0xB2, 0xC7, 0x00, 0x00, /* 0x1C-0x1F */ + 0xB2, 0xC1, 0x00, 0x00, 0xD6, 0xD0, 0xD6, 0xDD, /* 0x20-0x23 */ + 0xD6, 0xD1, 0xD6, 0xCE, 0xB2, 0xC5, 0x00, 0x00, /* 0x24-0x27 */ + 0xB2, 0xC2, 0x00, 0x00, 0xD6, 0xD4, 0xD6, 0xD7, /* 0x28-0x2B */ + 0xB2, 0xC4, 0xD6, 0xD8, 0xB2, 0xC8, 0xD6, 0xD9, /* 0x2C-0x2F */ + 0xD6, 0xCF, 0xD6, 0xD6, 0xD6, 0xDA, 0xD6, 0xD2, /* 0x30-0x33 */ + 0xD6, 0xCD, 0xD6, 0xCB, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xD6, 0xDB, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xDF, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0xDA, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xDA, 0xE0, 0xDA, 0xE6, 0xB5, 0xA7, 0xD6, 0xCC, /* 0x44-0x47 */ + 0xDA, 0xE1, 0xB5, 0xA5, 0xDA, 0xDE, 0xB5, 0xAC, /* 0x48-0x4B */ + 0xDA, 0xE2, 0xB5, 0xAB, 0xDA, 0xE3, 0xB5, 0xAD, /* 0x4C-0x4F */ + 0xB5, 0xA8, 0xB5, 0xAE, 0xB5, 0xA9, 0x00, 0x00, /* 0x50-0x53 */ + 0xB5, 0xAA, 0x00, 0x00, 0xB5, 0xA6, 0x00, 0x00, /* 0x54-0x57 */ + 0xDA, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0xB8, 0x61, 0xDF, 0x50, 0x00, 0x00, 0xDF, 0x53, /* 0x60-0x63 */ + 0xDF, 0x47, 0xDF, 0x4C, 0xDF, 0x46, 0xB8, 0x63, /* 0x64-0x67 */ + 0x00, 0x00, 0xDF, 0x4A, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xDF, 0x48, 0xB8, 0x62, 0x00, 0x00, /* 0x6C-0x6F */ + 0xDF, 0x4F, 0xDF, 0x4E, 0xDF, 0x4B, 0xDF, 0x4D, /* 0x70-0x73 */ + 0xDF, 0x49, 0xBA, 0xE1, 0xDF, 0x52, 0xB8, 0x5F, /* 0x74-0x77 */ + 0xDF, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x5D, 0x00, 0x00, /* 0x80-0x83 */ + 0xBA, 0xE8, 0xE3, 0x58, 0x00, 0x00, 0xBA, 0xE7, /* 0x84-0x87 */ + 0xE3, 0x4E, 0x00, 0x00, 0xE3, 0x50, 0xBA, 0xE0, /* 0x88-0x8B */ + 0xE3, 0x55, 0xE3, 0x54, 0xE3, 0x57, 0xBA, 0xE5, /* 0x8C-0x8F */ + 0xE3, 0x52, 0xE3, 0x51, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xBA, 0xE4, 0xBA, 0xDF, 0xE3, 0x53, 0xBA, 0xE2, /* 0x94-0x97 */ + 0xE3, 0x59, 0xE3, 0x5B, 0x00, 0x00, 0xE3, 0x56, /* 0x98-0x9B */ + 0xE3, 0x4F, 0xBA, 0xE3, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xBD, 0x69, 0xBA, 0xDE, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE3, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE6, 0xD9, 0xBD, 0x62, 0x00, 0x00, 0xE6, 0xDB, /* 0xAC-0xAF */ + 0x00, 0x00, 0xBD, 0x63, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xBD, 0x65, 0xE6, 0xDE, 0x00, 0x00, 0xE6, 0xD6, /* 0xB4-0xB7 */ + 0xBA, 0xE6, 0xE6, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xD8, 0x00, 0x00, /* 0xBC-0xBF */ + 0xB8, 0x60, 0xBD, 0x68, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xBD, 0x64, 0x00, 0x00, 0xBD, 0x66, 0xBD, 0x67, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xBF, 0x76, 0xE6, 0xDD, 0xE6, 0xD7, /* 0xC8-0xCB */ + 0xBD, 0x6A, 0x00, 0x00, 0xE6, 0xDA, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xEA, 0xC0, 0xEA, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xEA, 0xC5, 0xBF, 0x74, 0xEA, 0xBD, 0xBF, 0x78, /* 0xD8-0xDB */ + 0xEA, 0xC3, 0xEA, 0xBA, 0xEA, 0xB7, 0xEA, 0xC6, /* 0xDC-0xDF */ + 0xC1, 0x51, 0xBF, 0x79, 0xEA, 0xC2, 0xEA, 0xB8, /* 0xE0-0xE3 */ + 0xBF, 0x77, 0xEA, 0xBC, 0xBF, 0x7B, 0xEA, 0xB9, /* 0xE4-0xE7 */ + 0xEA, 0xBE, 0xBF, 0x7A, 0xEA, 0xC1, 0xEA, 0xC4, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xED, 0xCB, 0xED, 0xCC, 0xED, 0xBC, 0xED, 0xC3, /* 0xF0-0xF3 */ + 0xED, 0xC1, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x4F, /* 0xF4-0xF7 */ + 0xED, 0xC8, 0xEA, 0xBF, 0x00, 0x00, 0xED, 0xBF, /* 0xF8-0xFB */ + 0x00, 0x00, 0xED, 0xC9, 0xC1, 0x4E, 0xED, 0xBE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7C[512] = { + 0xED, 0xBD, 0xED, 0xC7, 0xED, 0xC4, 0xED, 0xC6, /* 0x00-0x03 */ + 0x00, 0x00, 0xED, 0xBA, 0xED, 0xCA, 0xC1, 0x4C, /* 0x04-0x07 */ + 0x00, 0x00, 0xED, 0xC5, 0xED, 0xCE, 0xED, 0xC2, /* 0x08-0x0B */ + 0xC1, 0x50, 0xC1, 0x4D, 0xED, 0xC0, 0xED, 0xBB, /* 0x0C-0x0F */ + 0xED, 0xCD, 0xBF, 0x75, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xF0, 0x63, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xF0, 0x61, 0xF0, 0x67, 0xC2, 0xB0, 0xF0, 0x65, /* 0x1C-0x1F */ + 0xF0, 0x64, 0xC2, 0xB2, 0xF0, 0x6A, 0xC2, 0xB1, /* 0x20-0x23 */ + 0x00, 0x00, 0xF0, 0x6B, 0xF0, 0x68, 0xC2, 0xAE, /* 0x24-0x27 */ + 0xF0, 0x69, 0xF0, 0x62, 0xC2, 0xAF, 0xC2, 0xAD, /* 0x28-0x2B */ + 0xF2, 0xAB, 0xF0, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xF0, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xA8, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0xB2, /* 0x34-0x37 */ + 0xC3, 0xB0, 0xF2, 0xAA, 0x00, 0x00, 0xF2, 0xAC, /* 0x38-0x3B */ + 0xF2, 0xA9, 0xC3, 0xB1, 0xC3, 0xAE, 0xC3, 0xAF, /* 0x3C-0x3F */ + 0xC3, 0xB3, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x78, /* 0x40-0x43 */ + 0x00, 0x00, 0xF4, 0xAA, 0x00, 0x00, 0xF4, 0xA9, /* 0x44-0x47 */ + 0xF4, 0xA7, 0xF4, 0xA6, 0xF4, 0xA8, 0x00, 0x00, /* 0x48-0x4B */ + 0xC4, 0x77, 0xC4, 0x79, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xC4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xE5, /* 0x50-0x53 */ + 0xF5, 0xE4, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFA, /* 0x54-0x57 */ + 0x00, 0x00, 0xF6, 0xFC, 0xF6, 0xFE, 0xF6, 0xFD, /* 0x58-0x5B */ + 0xF6, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xC5, 0xA3, /* 0x5C-0x5F */ + 0xC5, 0xA2, 0x00, 0x00, 0x00, 0x00, 0xC5, 0xD3, /* 0x60-0x63 */ + 0xC5, 0xD2, 0xC5, 0xD4, 0xF7, 0xED, 0xF7, 0xEC, /* 0x64-0x67 */ + 0x00, 0x00, 0xF8, 0xFB, 0xF8, 0xB8, 0xF8, 0xFC, /* 0x68-0x6B */ + 0xC6, 0x58, 0x00, 0x00, 0xC6, 0x59, 0xF9, 0x6D, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xC6, 0x7E, 0xA6, 0xCC, /* 0x70-0x73 */ + 0x00, 0x00, 0xCD, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0xD0, 0x45, 0xD0, 0x46, 0xD0, 0x44, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xAC, 0xF3, 0x00, 0x00, 0xD0, 0x47, /* 0x7C-0x7F */ + + 0xD0, 0x48, 0xD0, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xD3, 0x49, 0xD3, 0x4F, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xD3, 0x4D, 0xAF, 0xBB, 0xD3, 0x4B, 0x00, 0x00, /* 0x88-0x8B */ + 0xD3, 0x4C, 0xD3, 0x4E, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xD3, 0x4A, 0xB2, 0xC9, 0x00, 0x00, /* 0x90-0x93 */ + 0xD6, 0xDE, 0xB2, 0xCB, 0xD6, 0xE0, 0xB2, 0xCA, /* 0x94-0x97 */ + 0xD6, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xE8, 0xB5, 0xAF, /* 0x9C-0x9F */ + 0x00, 0x00, 0xDA, 0xEA, 0xDA, 0xE7, 0xD6, 0xE1, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xB5, 0xB0, 0x00, 0x00, 0xF9, 0xDB, /* 0xA4-0xA7 */ + 0xDA, 0xE9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x56, /* 0xAC-0xAF */ + 0x00, 0x00, 0xB8, 0x64, 0xDF, 0x54, 0xB8, 0x65, /* 0xB0-0xB3 */ + 0xDF, 0x55, 0xB8, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xBA, 0xE9, 0xE3, 0x61, 0xE3, 0x5E, /* 0xB8-0xBB */ + 0xE3, 0x60, 0xBA, 0xEA, 0xBA, 0xEB, 0xE3, 0x5F, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xE6, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xE6, 0xE0, 0x00, 0x00, 0xBD, 0x6B, 0xE6, 0xE2, /* 0xC8-0xCB */ + 0xE6, 0xE1, 0x00, 0x00, 0xA2, 0x61, 0x00, 0x00, /* 0xCC-0xCF */ + 0xEA, 0xCA, 0xEA, 0xCB, 0xEA, 0xC7, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xEA, 0xC8, 0xBF, 0x7C, 0xBF, 0x7D, 0xEA, 0xC9, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xC1, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xC1, 0x53, 0xC1, 0x58, 0xC1, 0x54, 0xC1, 0x56, /* 0xDC-0xDF */ + 0xC1, 0x52, 0x00, 0x00, 0xC1, 0x55, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xB3, /* 0xE4-0xE7 */ + 0xED, 0xCF, 0x00, 0x00, 0xF2, 0xAE, 0x00, 0x00, /* 0xE8-0xEB */ + 0xF2, 0xAD, 0x00, 0x00, 0xF4, 0xAB, 0xC4, 0x7A, /* 0xEC-0xEF */ + 0xC4, 0x7B, 0xF7, 0x41, 0xF5, 0xE6, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xF7, 0x40, 0x00, 0x00, 0xF8, 0xFD, 0xF9, 0xA4, /* 0xF4-0xF7 */ + 0xA6, 0xCD, 0x00, 0x00, 0x00, 0x00, 0xA8, 0x74, /* 0xF8-0xFB */ + 0x00, 0x00, 0xCD, 0xA9, 0xAA, 0xC8, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_7D[512] = { + 0xAC, 0xF6, 0xD0, 0x4C, 0xAC, 0xF4, 0xD0, 0x4A, /* 0x00-0x03 */ + 0xAC, 0xF9, 0xAC, 0xF5, 0xAC, 0xFA, 0xAC, 0xF8, /* 0x04-0x07 */ + 0xD0, 0x4B, 0xAC, 0xF7, 0xAF, 0xBF, 0xAF, 0xBE, /* 0x08-0x0B */ + 0xD3, 0x5A, 0xAF, 0xC7, 0xD3, 0x53, 0xD3, 0x59, /* 0x0C-0x0F */ + 0xAF, 0xC3, 0xD3, 0x52, 0xD3, 0x58, 0xD3, 0x56, /* 0x10-0x13 */ + 0xAF, 0xC2, 0xAF, 0xC4, 0xD3, 0x55, 0xAF, 0xBD, /* 0x14-0x17 */ + 0xD3, 0x54, 0xAF, 0xC8, 0xAF, 0xC5, 0xAF, 0xC9, /* 0x18-0x1B */ + 0xAF, 0xC6, 0xD3, 0x51, 0xD3, 0x50, 0xD3, 0x57, /* 0x1C-0x1F */ + 0xAF, 0xC0, 0xAF, 0xBC, 0xAF, 0xC1, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xD6, 0xF0, 0xD6, 0xE9, 0x00, 0x00, 0xB5, 0xB5, /* 0x28-0x2B */ + 0xD6, 0xE8, 0x00, 0x00, 0xB2, 0xCF, 0xB2, 0xD6, /* 0x2C-0x2F */ + 0xB2, 0xD3, 0xB2, 0xD9, 0xB2, 0xD8, 0xB2, 0xD4, /* 0x30-0x33 */ + 0x00, 0x00, 0xD6, 0xE2, 0xD6, 0xE5, 0x00, 0x00, /* 0x34-0x37 */ + 0xD6, 0xE4, 0xB2, 0xD0, 0xD6, 0xE6, 0xD6, 0xEF, /* 0x38-0x3B */ + 0xB2, 0xD1, 0xD6, 0xE3, 0xD6, 0xEC, 0xD6, 0xED, /* 0x3C-0x3F */ + 0xB2, 0xD2, 0xD6, 0xEA, 0xB2, 0xD7, 0xB2, 0xCD, /* 0x40-0x43 */ + 0xB2, 0xD5, 0xD6, 0xE7, 0xB2, 0xCC, 0xD6, 0xEB, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xD6, 0xEE, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xDA, 0xFB, 0xDA, 0xF2, /* 0x4C-0x4F */ + 0xB5, 0xB2, 0xDA, 0xF9, 0xDA, 0xF6, 0xDA, 0xEE, /* 0x50-0x53 */ + 0xDA, 0xF7, 0xB5, 0xB4, 0xDA, 0xEF, 0x00, 0x00, /* 0x54-0x57 */ + 0xDA, 0xEB, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x6C, /* 0x58-0x5B */ + 0xDA, 0xF4, 0x00, 0x00, 0xB5, 0xB1, 0xDA, 0xFA, /* 0x5C-0x5F */ + 0x00, 0x00, 0xB5, 0xB8, 0xB5, 0xBA, 0xDA, 0xED, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xB5, 0xB9, 0xDA, 0xF0, /* 0x64-0x67 */ + 0xB5, 0xB3, 0xDA, 0xF8, 0xDA, 0xF1, 0xDA, 0xF5, /* 0x68-0x6B */ + 0x00, 0x00, 0xDA, 0xF3, 0xB5, 0xB6, 0xDA, 0xEC, /* 0x6C-0x6F */ + 0xB5, 0xBB, 0xB2, 0xCE, 0xB5, 0xB7, 0xB5, 0xBC, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xB8, 0x68, 0xDF, 0x5D, 0xDF, 0x5F, /* 0x78-0x7B */ + 0xDF, 0x61, 0xDF, 0x65, 0x00, 0x00, 0xDF, 0x5B, /* 0x7C-0x7F */ + + 0xDF, 0x59, 0xB8, 0x6A, 0x00, 0x00, 0xDF, 0x60, /* 0x80-0x83 */ + 0xDF, 0x64, 0xDF, 0x5C, 0xDF, 0x58, 0x00, 0x00, /* 0x84-0x87 */ + 0xDF, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0xDF, 0x62, 0xDF, 0x5A, 0xDF, 0x5E, 0xB8, 0x6B, /* 0x8C-0x8F */ + 0x00, 0x00, 0xB8, 0x69, 0xDF, 0x66, 0xB8, 0x67, /* 0x90-0x93 */ + 0xDF, 0x63, 0x00, 0x00, 0xE3, 0x72, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xBA, 0xEE, 0xE3, 0x6A, 0xBD, 0x78, 0xE3, 0x74, /* 0x9C-0x9F */ + 0xBA, 0xF1, 0xE3, 0x78, 0xBA, 0xF7, 0xE3, 0x65, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0x75, 0xE3, 0x62, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xE3, 0x77, 0xE3, 0x66, 0x00, 0x00, /* 0xA8-0xAB */ + 0xBA, 0xFE, 0xBA, 0xFB, 0xE3, 0x76, 0xE3, 0x70, /* 0xAC-0xAF */ + 0xBA, 0xED, 0xBA, 0xF5, 0xBA, 0xF4, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xBA, 0xF3, 0xBA, 0xF9, 0x00, 0x00, 0xE3, 0x63, /* 0xB4-0xB7 */ + 0xBA, 0xFA, 0xE3, 0x71, 0xBA, 0xF6, 0xBA, 0xEC, /* 0xB8-0xBB */ + 0xE3, 0x73, 0xBA, 0xEF, 0xBA, 0xF0, 0xBA, 0xF8, /* 0xBC-0xBF */ + 0xE3, 0x68, 0xE3, 0x67, 0xE3, 0x64, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xE3, 0x6C, 0xE3, 0x69, 0xE3, 0x6D, 0xBA, 0xFD, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE3, 0x79, 0xBA, 0xF2, 0xE3, 0x6E, /* 0xC8-0xCB */ + 0xE3, 0x6F, 0x00, 0x00, 0xE3, 0x6B, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xBA, 0xFC, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE7, /* 0xD4-0xD7 */ + 0xBD, 0x70, 0xBD, 0x79, 0xBD, 0x75, 0xE6, 0xE4, /* 0xD8-0xDB */ + 0x00, 0x00, 0xBD, 0x72, 0xBD, 0x76, 0xE6, 0xF0, /* 0xDC-0xDF */ + 0xBD, 0x6C, 0xE6, 0xE8, 0x00, 0x00, 0xBD, 0x74, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xE6, 0xEB, 0xE6, 0xE6, /* 0xE4-0xE7 */ + 0xBD, 0x73, 0xBD, 0x77, 0xE6, 0xE5, 0x00, 0x00, /* 0xE8-0xEB */ + 0xBD, 0x71, 0x00, 0x00, 0xE6, 0xEF, 0xBD, 0x6E, /* 0xEC-0xEF */ + 0xE6, 0xEE, 0xE6, 0xED, 0xBD, 0x7A, 0xE5, 0x72, /* 0xF0-0xF3 */ + 0xBD, 0x6D, 0x00, 0x00, 0xE6, 0xEC, 0xE6, 0xE3, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xBD, 0x7B, 0xE6, 0xEA, 0xBD, 0x6F, /* 0xF8-0xFB */ +}; + +static unsigned char u2c_7E[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xE9, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0xBF, 0xA2, 0xBF, 0xA7, 0xBF, 0x7E, 0xEA, 0xD8, /* 0x08-0x0B */ + 0xEA, 0xCF, 0xEA, 0xDB, 0xEA, 0xD3, 0xEA, 0xD9, /* 0x0C-0x0F */ + 0xBF, 0xA8, 0xBF, 0xA1, 0xEA, 0xCC, 0xEA, 0xD2, /* 0x10-0x13 */ + 0xEA, 0xDC, 0xEA, 0xD5, 0xEA, 0xDA, 0xEA, 0xCE, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xD6, 0xBF, 0xA3, /* 0x18-0x1B */ + 0xEA, 0xD4, 0xBF, 0xA6, 0xBF, 0xA5, 0xEA, 0xD0, /* 0x1C-0x1F */ + 0xEA, 0xD1, 0xEA, 0xCD, 0xEA, 0xD7, 0xBF, 0xA4, /* 0x20-0x23 */ + 0xEA, 0xDE, 0xEA, 0xDD, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xED, 0xDA, 0xED, 0xD6, 0xC1, 0x5F, /* 0x28-0x2B */ + 0x00, 0x00, 0xED, 0xD0, 0xC1, 0x59, 0xC1, 0x69, /* 0x2C-0x2F */ + 0xED, 0xDC, 0xC1, 0x61, 0xC1, 0x5D, 0xED, 0xD3, /* 0x30-0x33 */ + 0xC1, 0x64, 0xC1, 0x67, 0xED, 0xDE, 0xC1, 0x5C, /* 0x34-0x37 */ + 0xED, 0xD5, 0xC1, 0x65, 0xED, 0xE0, 0xED, 0xDD, /* 0x38-0x3B */ + 0xED, 0xD1, 0xC1, 0x60, 0xC1, 0x5A, 0xC1, 0x68, /* 0x3C-0x3F */ + 0xED, 0xD8, 0xC1, 0x63, 0xED, 0xD2, 0xC1, 0x5E, /* 0x40-0x43 */ + 0xED, 0xDF, 0xC1, 0x62, 0xC1, 0x5B, 0xED, 0xD9, /* 0x44-0x47 */ + 0xC1, 0x66, 0xED, 0xD7, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xED, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF0, 0x6E, 0xF0, 0x74, 0xC2, 0xB9, 0xF0, 0x77, /* 0x50-0x53 */ + 0xC2, 0xB4, 0xC2, 0xB5, 0xF0, 0x6F, 0xF0, 0x76, /* 0x54-0x57 */ + 0xF0, 0x71, 0xC2, 0xBA, 0xC2, 0xB7, 0x00, 0x00, /* 0x58-0x5B */ + 0xF0, 0x6D, 0x00, 0x00, 0xC2, 0xB6, 0xF0, 0x73, /* 0x5C-0x5F */ + 0xF0, 0x75, 0xC2, 0xB8, 0xF0, 0x72, 0xF0, 0x70, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF2, 0xB8, 0xC3, 0xB7, 0xC3, 0xB8, 0xC3, 0xB4, /* 0x68-0x6B */ + 0x00, 0x00, 0xC3, 0xB5, 0x00, 0x00, 0xF2, 0xB4, /* 0x6C-0x6F */ + 0xF2, 0xB2, 0x00, 0x00, 0xF2, 0xB6, 0xC3, 0xBA, /* 0x70-0x73 */ + 0xF2, 0xB7, 0xF2, 0xB0, 0xF2, 0xAF, 0xF2, 0xB3, /* 0x74-0x77 */ + 0xF2, 0xB1, 0xC3, 0xB6, 0xF2, 0xB5, 0xF4, 0xAC, /* 0x78-0x7B */ + 0xC4, 0x7E, 0xC4, 0x7D, 0xF4, 0xAD, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xF4, 0xAF, 0xF4, 0xAE, 0xC4, 0xA1, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0xEB, 0xF5, 0xE8, /* 0x84-0x87 */ + 0xF5, 0xE9, 0x00, 0x00, 0xF5, 0xE7, 0xF5, 0xEA, /* 0x88-0x8B */ + 0xC4, 0xF2, 0xF5, 0xEC, 0x00, 0x00, 0xC4, 0xF1, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF7, 0x42, 0x00, 0x00, 0xC5, 0xD5, /* 0x90-0x93 */ + 0xC5, 0xD7, 0xF7, 0xEE, 0xC5, 0xD6, 0xF8, 0xB9, /* 0x94-0x97 */ + 0xF9, 0x40, 0xF9, 0x42, 0xF8, 0xFE, 0xF9, 0x41, /* 0x98-0x9B */ + 0xC6, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_7F[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xA6, 0xCE, 0x00, 0x00, /* 0x34-0x37 */ + 0xAC, 0xFB, 0xD2, 0x6F, 0xAF, 0xCA, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xB2, 0xDA, 0xDA, 0xFC, 0xDA, 0xFD, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xDF, /* 0x40-0x43 */ + 0xC1, 0x6A, 0xED, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xC2, 0xBB, 0x00, 0x00, 0xF2, 0xBA, 0xF2, 0xB9, /* 0x48-0x4B */ + 0xC4, 0xA2, 0xF5, 0xED, 0x00, 0x00, 0xF7, 0x43, /* 0x4C-0x4F */ + 0xC5, 0xF8, 0xCA, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xAA, 0xC9, 0xA8, 0x75, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xD0, 0x4D, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x60, /* 0x58-0x5B */ + 0xD3, 0x5B, 0xD3, 0x5F, 0xD3, 0x5D, 0xAF, 0xCB, /* 0x5C-0x5F */ + 0xD3, 0x5E, 0xD3, 0x5C, 0x00, 0x00, 0xD6, 0xF1, /* 0x60-0x63 */ + 0x00, 0x00, 0xDA, 0xFE, 0xDB, 0x40, 0xDF, 0x69, /* 0x64-0x67 */ + 0xDF, 0x6A, 0xB8, 0x6E, 0xB8, 0x6F, 0xDF, 0x68, /* 0x68-0x6B */ + 0xDF, 0x6B, 0xDF, 0x67, 0xB8, 0x6D, 0x00, 0x00, /* 0x6C-0x6F */ + 0xBB, 0x40, 0x00, 0x00, 0xB8, 0x70, 0xE3, 0x7A, /* 0x70-0x73 */ + 0x00, 0x00, 0xBD, 0x7C, 0xE6, 0xF1, 0xBD, 0x7D, /* 0x74-0x77 */ + 0x00, 0x00, 0xBF, 0xA9, 0xEA, 0xE2, 0xEA, 0xE0, /* 0x78-0x7B */ + 0xEA, 0xE1, 0xED, 0xE4, 0xED, 0xE3, 0xED, 0xE2, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xBB, /* 0x80-0x83 */ + 0x00, 0x00, 0xC3, 0xB9, 0xF2, 0xBC, 0xF7, 0x44, /* 0x84-0x87 */ + 0xC5, 0xF9, 0xF8, 0xBA, 0xA6, 0xCF, 0xAA, 0xCB, /* 0x88-0x8B */ + 0xAA, 0xCA, 0xD0, 0x4F, 0xAC, 0xFC, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xD0, 0x4E, 0xD3, 0x62, 0x00, 0x00, /* 0x90-0x93 */ + 0xAF, 0xCC, 0xD6, 0xF2, 0xD3, 0x61, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0xDC, 0xD6, 0xF5, /* 0x98-0x9B */ + 0xD6, 0xF3, 0xD6, 0xF4, 0xB2, 0xDB, 0x00, 0x00, /* 0x9C-0x9F */ + 0xDB, 0x42, 0xDB, 0x43, 0xDB, 0x41, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xB8, 0x73, 0xDF, 0x6D, 0xDF, 0x6C, 0xDF, 0x6E, /* 0xA4-0xA7 */ + 0xB8, 0x72, 0xB8, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE6, 0xF2, 0xE6, 0xF4, 0x00, 0x00, 0xBD, 0x7E, /* 0xAC-0xAF */ + 0xE6, 0xF3, 0xEA, 0xE3, 0xBF, 0xAA, 0xF0, 0x79, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF0, 0x78, 0xC3, 0xBB, 0xF2, 0xBD, /* 0xB4-0xB7 */ + 0xC3, 0xBD, 0xC3, 0xBC, 0xF4, 0xB0, 0xF5, 0xEE, /* 0xB8-0xBB */ + 0xC4, 0xF3, 0xA6, 0xD0, 0xD0, 0x50, 0xAC, 0xFD, /* 0xBC-0xBF */ + 0xD3, 0x65, 0xAF, 0xCE, 0xD3, 0x64, 0xD3, 0x63, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xAF, 0xCD, 0x00, 0x00, 0xD6, 0xFB, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xD6, 0xFD, 0xD6, 0xF6, 0xD6, 0xF7, /* 0xC8-0xCB */ + 0xB2, 0xDD, 0xD6, 0xF8, 0xB2, 0xDE, 0xD6, 0xFC, /* 0xCC-0xCF */ + 0xD6, 0xF9, 0xD6, 0xFA, 0xB2, 0xDF, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xB5, 0xBE, 0xB5, 0xBF, 0x00, 0x00, 0xDB, 0x44, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x6F, /* 0xD8-0xDB */ + 0xDF, 0x70, 0x00, 0x00, 0xE3, 0x7E, 0xBB, 0x43, /* 0xDC-0xDF */ + 0xBB, 0x41, 0xBB, 0x42, 0xE3, 0x7B, 0xE3, 0x7C, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xE3, 0x7D, 0xE6, 0xF9, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE6, 0xFA, 0xBD, 0xA1, 0xE6, 0xF7, 0xE6, 0xF6, /* 0xE8-0xEB */ + 0xE6, 0xF8, 0xE6, 0xF5, 0xBF, 0xAD, 0xEA, 0xE4, /* 0xEC-0xEF */ + 0xBF, 0xAB, 0xBF, 0xAC, 0xED, 0xE6, 0xC1, 0x6B, /* 0xF0-0xF3 */ + 0xED, 0xE5, 0xEF, 0xA8, 0x00, 0x00, 0xF0, 0x7A, /* 0xF4-0xF7 */ + 0xF0, 0x7B, 0xC2, 0xBC, 0x00, 0x00, 0xC2, 0xBD, /* 0xF8-0xFB */ + 0xC1, 0x6C, 0xF2, 0xBE, 0xF2, 0xBF, 0xF4, 0xB1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_80[512] = { + 0xC4, 0xA3, 0xA6, 0xD1, 0x00, 0x00, 0xA6, 0xD2, /* 0x00-0x03 */ + 0xAC, 0xFE, 0xAA, 0xCC, 0xAF, 0xCF, 0xD0, 0x51, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0xC0, /* 0x08-0x0B */ + 0xA6, 0xD3, 0xAD, 0x41, 0xD0, 0x52, 0xD0, 0x53, /* 0x0C-0x0F */ + 0xAD, 0x40, 0xAD, 0x42, 0xA6, 0xD4, 0x00, 0x00, /* 0x10-0x13 */ + 0xD0, 0x54, 0xAF, 0xD1, 0xD3, 0x66, 0xAF, 0xD3, /* 0x14-0x17 */ + 0xAF, 0xD0, 0xAF, 0xD2, 0x00, 0x00, 0xD7, 0x41, /* 0x18-0x1B */ + 0xB2, 0xE0, 0x00, 0x00, 0xD7, 0x40, 0xD6, 0xFE, /* 0x1C-0x1F */ + 0x00, 0x00, 0xDF, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xE3, 0xA1, 0x00, 0x00, 0xBD, 0xA2, 0x00, 0x00, /* 0x24-0x27 */ + 0xBF, 0xAE, 0xEA, 0xE6, 0xEA, 0xE5, 0x00, 0x00, /* 0x28-0x2B */ + 0xED, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xF5, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xD5, /* 0x30-0x33 */ + 0xCB, 0x73, 0xCD, 0xAA, 0xAD, 0x43, 0xD0, 0x55, /* 0x34-0x37 */ + 0x00, 0x00, 0xD3, 0x68, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xAF, 0xD4, 0xD3, 0x67, 0xAF, 0xD5, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x43, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xB2, 0xE2, 0xD7, 0x42, /* 0x44-0x47 */ + 0xD7, 0x44, 0x00, 0x00, 0xB2, 0xE1, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x46, /* 0x4C-0x4F */ + 0xDB, 0x47, 0xDB, 0x45, 0xB5, 0xC1, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xB8, 0x74, 0x00, 0x00, /* 0x54-0x57 */ + 0xB8, 0x75, 0x00, 0x00, 0xBB, 0x45, 0x00, 0x00, /* 0x58-0x5B */ + 0xE3, 0xA3, 0xE3, 0xA2, 0xBB, 0x44, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xE6, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xFC, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xEA, 0xE7, 0x00, 0x00, 0x00, 0x00, 0xC1, 0x70, /* 0x6C-0x6F */ + 0xC1, 0x6F, 0xC1, 0x6D, 0xC1, 0x6E, 0xC1, 0x71, /* 0x70-0x73 */ + 0x00, 0x00, 0xF0, 0x7C, 0xC2, 0xBF, 0xC2, 0xBE, /* 0x74-0x77 */ + 0xF2, 0xC0, 0xF4, 0xB2, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xC5, 0xA5, 0xC5, 0xA4, 0xA6, 0xD6, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFB, 0x00, 0x00, /* 0x80-0x83 */ + 0xB8, 0x77, 0xB5, 0xC2, 0xB8, 0x76, 0xBB, 0x46, /* 0x84-0x87 */ + 0x00, 0x00, 0xA6, 0xD7, 0xC9, 0xA9, 0xA6, 0xD8, /* 0x88-0x8B */ + 0xA6, 0xD9, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xAB, /* 0x8C-0x8F */ + 0xCB, 0x76, 0x00, 0x00, 0xCB, 0x77, 0xA8, 0x77, /* 0x90-0x93 */ + 0x00, 0x00, 0xCB, 0x74, 0xA8, 0x76, 0x00, 0x00, /* 0x94-0x97 */ + 0xA8, 0x79, 0xCB, 0x75, 0xA8, 0x7B, 0xA8, 0x7A, /* 0x98-0x9B */ + 0xCB, 0x78, 0xA8, 0x78, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xAA, 0xD1, 0xAA, 0xCF, 0xCD, 0xAD, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xAA, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xAA, 0xD3, 0xAA, 0xD5, 0xAA, 0xD2, /* 0xA8-0xAB */ + 0x00, 0x00, 0xCD, 0xB0, 0xCD, 0xAC, 0xAA, 0xD6, /* 0xAC-0xAF */ + 0x00, 0x00, 0xAA, 0xD0, 0xA8, 0x7C, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xAA, 0xD4, 0xCD, 0xAF, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xCD, 0xAE, 0x00, 0x00, 0xAA, 0xCD, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0x5B, 0xAD, 0x47, /* 0xC0-0xC3 */ + 0xAD, 0x48, 0xD0, 0x5D, 0x00, 0x00, 0xD0, 0x57, /* 0xC4-0xC7 */ + 0xD0, 0x5A, 0xD0, 0x63, 0xD0, 0x61, 0x00, 0x00, /* 0xC8-0xCB */ + 0xAD, 0x49, 0xD0, 0x67, 0xAD, 0x4C, 0xD0, 0x64, /* 0xCC-0xCF */ + 0xD0, 0x5C, 0xD0, 0x59, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xDB, 0x49, 0xD0, 0x62, 0xAD, 0x44, 0xD0, 0x65, /* 0xD4-0xD7 */ + 0xD0, 0x56, 0xD0, 0x5F, 0xAD, 0x46, 0xAD, 0x4B, /* 0xD8-0xDB */ + 0xD0, 0x60, 0xAD, 0x4F, 0xAD, 0x4D, 0x00, 0x00, /* 0xDC-0xDF */ + 0xD0, 0x58, 0xAD, 0x4A, 0x00, 0x00, 0xD0, 0x5E, /* 0xE0-0xE3 */ + 0xAD, 0x4E, 0xAD, 0x45, 0xD0, 0x66, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xAF, 0xDA, 0x00, 0x00, 0xAF, 0xE3, /* 0xEC-0xEF */ + 0xAF, 0xD8, 0xAF, 0xD6, 0xD3, 0x6A, 0xAF, 0xDE, /* 0xF0-0xF3 */ + 0xAF, 0xDB, 0xD3, 0x6C, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xAF, 0xDD, 0xD3, 0x6B, 0xD3, 0x69, 0xD3, 0x6E, /* 0xF8-0xFB */ + 0xAF, 0xE2, 0xAF, 0xE0, 0xDB, 0x48, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_81[512] = { + 0xD3, 0x6F, 0xD3, 0x6D, 0xAF, 0xD7, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xAF, 0xD9, 0xAF, 0xDC, 0x00, 0x00, /* 0x04-0x07 */ + 0xAF, 0xDF, 0x00, 0x00, 0xAF, 0xE1, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xD7, 0x4E, 0xB2, 0xE4, 0x00, 0x00, /* 0x14-0x17 */ + 0xD7, 0x45, 0xD7, 0x47, 0x00, 0x00, 0xD7, 0x48, /* 0x18-0x1B */ + 0x00, 0x00, 0xD7, 0x50, 0xD7, 0x4C, 0xD7, 0x4A, /* 0x1C-0x1F */ + 0x00, 0x00, 0xD7, 0x4D, 0xD7, 0x51, 0xB2, 0xE5, /* 0x20-0x23 */ + 0xB2, 0xE9, 0xD7, 0x46, 0x00, 0x00, 0xD7, 0x4F, /* 0x24-0x27 */ + 0x00, 0x00, 0xB2, 0xE7, 0x00, 0x00, 0xB2, 0xE6, /* 0x28-0x2B */ + 0xD7, 0x4B, 0xD7, 0x49, 0x00, 0x00, 0xB2, 0xE3, /* 0x2C-0x2F */ + 0xB2, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xB5, 0xC8, 0xDB, 0x51, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xDB, 0x4F, 0xB5, 0xCA, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x4A, /* 0x40-0x43 */ + 0xDF, 0xA1, 0x00, 0x00, 0xB5, 0xC9, 0xDB, 0x4E, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0x4B, 0xB5, 0xC5, /* 0x48-0x4B */ + 0xB5, 0xCB, 0xDB, 0x50, 0xB5, 0xC7, 0xDB, 0x4D, /* 0x4C-0x4F */ + 0xBB, 0x47, 0xB5, 0xC6, 0xDB, 0x4C, 0xB5, 0xCC, /* 0x50-0x53 */ + 0xB5, 0xC4, 0xB5, 0xC3, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x77, /* 0x58-0x5B */ + 0xDF, 0x75, 0x00, 0x00, 0xDF, 0x7B, 0x00, 0x00, /* 0x5C-0x5F */ + 0xDF, 0x73, 0xDF, 0xA2, 0xDF, 0x78, 0x00, 0x00, /* 0x60-0x63 */ + 0xDF, 0x72, 0xB8, 0x7B, 0xB8, 0xA3, 0xDF, 0x7D, /* 0x64-0x67 */ + 0x00, 0x00, 0xDF, 0x76, 0x00, 0x00, 0xB8, 0x7E, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0xB8, 0x7C, 0xDF, 0x7E, /* 0x6C-0x6F */ + 0xB8, 0x79, 0xB8, 0x78, 0xDF, 0x79, 0xB8, 0x7D, /* 0x70-0x73 */ + 0xB5, 0xCD, 0x00, 0x00, 0xDF, 0x7C, 0xDF, 0x74, /* 0x74-0x77 */ + 0xB8, 0x7A, 0xB8, 0xA1, 0xB8, 0xA2, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x4C, /* 0x7C-0x7F */ + + 0xBB, 0x48, 0x00, 0x00, 0xBB, 0x4D, 0xE3, 0xA6, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xA5, 0xE3, 0xA7, /* 0x84-0x87 */ + 0xBB, 0x4A, 0xE3, 0xA4, 0xBB, 0x4B, 0xE3, 0xAA, /* 0x88-0x8B */ + 0xE3, 0xA9, 0xE3, 0xA8, 0x00, 0x00, 0xBB, 0x49, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0xE7, 0x41, 0x00, 0x00, 0xE7, 0x44, /* 0x94-0x97 */ + 0xBD, 0xA8, 0xE7, 0x43, 0xBD, 0xA7, 0xBD, 0xA3, /* 0x98-0x9B */ + 0xBD, 0xA4, 0xBD, 0xA5, 0xE7, 0x40, 0xE6, 0xFE, /* 0x9C-0x9F */ + 0xBD, 0xA6, 0x00, 0x00, 0xE7, 0x42, 0xE6, 0xFD, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xE9, 0xEA, 0xF3, /* 0xA4-0xA7 */ + 0xBF, 0xB1, 0xBF, 0xB0, 0x00, 0x00, 0xEA, 0xED, /* 0xA8-0xAB */ + 0xEA, 0xEF, 0x00, 0x00, 0xEA, 0xEA, 0x00, 0x00, /* 0xAC-0xAF */ + 0xEA, 0xEE, 0xEA, 0xE8, 0xEA, 0xF1, 0xBF, 0xAF, /* 0xB0-0xB3 */ + 0xEA, 0xF0, 0xEA, 0xEC, 0x00, 0x00, 0xEA, 0xF2, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xEA, 0xEB, 0xC1, 0x74, 0xED, 0xE8, /* 0xB8-0xBB */ + 0xED, 0xEE, 0xC1, 0x78, 0xC1, 0x7A, 0xC1, 0x77, /* 0xBC-0xBF */ + 0xC1, 0x76, 0x00, 0x00, 0xC1, 0x75, 0xC1, 0x73, /* 0xC0-0xC3 */ + 0xED, 0xE9, 0xED, 0xEC, 0xC1, 0x72, 0xED, 0xED, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xC1, 0x79, 0xED, 0xEB, 0x00, 0x00, /* 0xC8-0xCB */ + 0xED, 0xEA, 0xC2, 0xC0, 0x00, 0x00, 0xC2, 0xC1, /* 0xCC-0xCF */ + 0xF0, 0xA1, 0xF0, 0x7D, 0xF0, 0x7E, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xF2, 0xC2, 0x00, 0x00, 0xF2, 0xC1, /* 0xD4-0xD7 */ + 0xC3, 0xBE, 0xF4, 0xB4, 0xC4, 0xA4, 0xF4, 0xB3, /* 0xD8-0xDB */ + 0x00, 0x00, 0xF5, 0xF0, 0xF7, 0x45, 0xC5, 0xA6, /* 0xDC-0xDF */ + 0xF9, 0x43, 0xF9, 0x44, 0xC5, 0xD8, 0xA6, 0xDA, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xAA, 0xD7, 0xDB, 0x52, 0xBB, 0x4E, /* 0xE4-0xE7 */ + 0xC1, 0x7B, 0xED, 0xEF, 0xA6, 0xDB, 0x00, 0x00, /* 0xE8-0xEB */ + 0xAF, 0xE5, 0xAF, 0xE4, 0xDB, 0x53, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xEA, 0xF4, 0xA6, 0xDC, /* 0xF0-0xF3 */ + 0xAD, 0x50, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x54, /* 0xF4-0xF7 */ + 0xDB, 0x55, 0xDB, 0x56, 0xBB, 0x4F, 0xBF, 0xB2, /* 0xF8-0xFB */ + 0xA6, 0xDD, 0x00, 0x00, 0xAA, 0xD8, 0xD0, 0x68, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_82[512] = { + 0xAF, 0xE6, 0xD3, 0x70, 0xB2, 0xEA, 0x00, 0x00, /* 0x00-0x03 */ + 0xDB, 0x57, 0xB8, 0xA4, 0x00, 0x00, 0xBB, 0x50, /* 0x04-0x07 */ + 0xBF, 0xB3, 0xC1, 0x7C, 0xC2, 0xC2, 0xF4, 0xB5, /* 0x08-0x0B */ + 0xA6, 0xDE, 0xAA, 0xD9, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xAF, 0xE7, 0xD7, 0x52, 0xB5, 0xCE, 0x00, 0x00, /* 0x10-0x13 */ + 0xBB, 0x51, 0xE3, 0xAB, 0xE7, 0x45, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xDF, /* 0x18-0x1B */ + 0xB5, 0xCF, 0xDF, 0xA3, 0xBB, 0x52, 0xA6, 0xE0, /* 0x1C-0x1F */ + 0xCD, 0xB1, 0xD0, 0x69, 0xAD, 0x51, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xD3, 0x72, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xAF, 0xEA, 0x00, 0x00, 0xAF, 0xE8, 0xAF, 0xE9, /* 0x28-0x2B */ + 0xAF, 0xEB, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x71, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0x57, 0xD7, 0x54, /* 0x30-0x33 */ + 0xD7, 0x56, 0xB2, 0xEB, 0xB2, 0xED, 0xB2, 0xEC, /* 0x34-0x37 */ + 0xD7, 0x53, 0xB2, 0xEE, 0xD7, 0x55, 0x00, 0x00, /* 0x38-0x3B */ + 0xDB, 0x58, 0xDB, 0x59, 0x00, 0x00, 0xDB, 0x5A, /* 0x3C-0x3F */ + 0xDF, 0xA6, 0x00, 0x00, 0xDF, 0xA7, 0x00, 0x00, /* 0x40-0x43 */ + 0xDF, 0xA5, 0xDF, 0xA8, 0x00, 0x00, 0xB8, 0xA5, /* 0x44-0x47 */ + 0x00, 0x00, 0xDF, 0xA4, 0x00, 0x00, 0xBB, 0x53, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0x4A, 0xE7, 0x46, /* 0x4C-0x4F */ + 0xE7, 0x49, 0xE7, 0x4B, 0xE7, 0x48, 0xE7, 0x47, /* 0x50-0x53 */ + 0x00, 0x00, 0xEA, 0xF5, 0xEA, 0xF6, 0xEA, 0xF7, /* 0x54-0x57 */ + 0xBF, 0xB4, 0xBF, 0xB5, 0xED, 0xF1, 0xED, 0xF0, /* 0x58-0x5B */ + 0xED, 0xF2, 0x00, 0x00, 0xF0, 0xA3, 0xF0, 0xA2, /* 0x5C-0x5F */ + 0x00, 0x00, 0xF2, 0xC4, 0x00, 0x00, 0xF2, 0xC5, /* 0x60-0x63 */ + 0xF2, 0xC3, 0x00, 0x00, 0xC4, 0xA5, 0x00, 0x00, /* 0x64-0x67 */ + 0xF4, 0xB6, 0xF4, 0xB7, 0x00, 0x00, 0xF7, 0x46, /* 0x68-0x6B */ + 0xF7, 0xEF, 0xF8, 0xBB, 0xA6, 0xE1, 0xA8, 0x7D, /* 0x6C-0x6F */ + 0x00, 0x00, 0xC1, 0x7D, 0xA6, 0xE2, 0x00, 0x00, /* 0x70-0x73 */ + 0xD7, 0x58, 0xDB, 0x5B, 0x00, 0x00, 0xC6, 0x41, /* 0x74-0x77 */ + 0xCA, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xCA, 0x4B, 0xCA, 0x4D, 0xA6, 0xE3, 0xCA, 0x4E, /* 0x7C-0x7F */ + + 0xCA, 0x4C, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xA2, /* 0x80-0x83 */ + 0xCB, 0xA3, 0xCB, 0x7B, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xA1, 0xA8, 0xA1, /* 0x88-0x8B */ + 0x00, 0x00, 0xA8, 0xA2, 0xCB, 0x7C, 0xCB, 0x7A, /* 0x8C-0x8F */ + 0xCB, 0x79, 0xCB, 0x7D, 0xA8, 0x7E, 0xCB, 0x7E, /* 0x90-0x93 */ + 0xD0, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xCD, 0xB6, 0xAA, 0xDC, 0xCD, 0xB5, 0xCD, 0xB7, /* 0x98-0x9B */ + 0x00, 0x00, 0xAA, 0xDB, 0xCD, 0xBC, 0xAA, 0xDF, /* 0x9C-0x9F */ + 0xCD, 0xB2, 0xCD, 0xC0, 0xCD, 0xC6, 0xAA, 0xE6, /* 0xA0-0xA3 */ + 0xCD, 0xC3, 0xAA, 0xE3, 0x00, 0x00, 0xCD, 0xB9, /* 0xA4-0xA7 */ + 0xCD, 0xBF, 0xCD, 0xC1, 0x00, 0x00, 0xCD, 0xB4, /* 0xA8-0xAB */ + 0xAA, 0xE2, 0xAA, 0xDD, 0xCD, 0xBA, 0xAA, 0xE4, /* 0xAC-0xAF */ + 0xAA, 0xE7, 0xAA, 0xE1, 0x00, 0x00, 0xAA, 0xDA, /* 0xB0-0xB3 */ + 0xCD, 0xBE, 0xCD, 0xB8, 0xCD, 0xC5, 0xAA, 0xE9, /* 0xB4-0xB7 */ + 0xAA, 0xE5, 0xAA, 0xE0, 0xCD, 0xBD, 0xAF, 0xEC, /* 0xB8-0xBB */ + 0xCD, 0xBB, 0xAA, 0xDE, 0xAA, 0xE8, 0x00, 0x00, /* 0xBC-0xBF */ + 0xCD, 0xB3, 0x00, 0x00, 0xCD, 0xC2, 0xCD, 0xC4, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xAD, 0x62, 0xAD, 0x5C, 0xAD, 0x64, /* 0xD0-0xD3 */ + 0xAD, 0x61, 0xD0, 0x71, 0xD0, 0x74, 0xAD, 0x5D, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xD0, 0x6B, 0x00, 0x00, 0xAD, 0x56, /* 0xD8-0xDB */ + 0xAD, 0x60, 0x00, 0x00, 0xAD, 0x63, 0xAD, 0x65, /* 0xDC-0xDF */ + 0xD0, 0xA2, 0xD0, 0x77, 0x00, 0x00, 0xAD, 0x55, /* 0xE0-0xE3 */ + 0xD0, 0xA1, 0xAD, 0x59, 0xAD, 0x57, 0xAD, 0x52, /* 0xE4-0xE7 */ + 0xD0, 0x6F, 0x00, 0x00, 0xD0, 0x7E, 0xD0, 0x73, /* 0xE8-0xEB */ + 0xD0, 0x76, 0xD0, 0xA5, 0x00, 0x00, 0xAD, 0x66, /* 0xEC-0xEF */ + 0xD0, 0x7D, 0xAD, 0x5E, 0xD0, 0x78, 0xD0, 0xA4, /* 0xF0-0xF3 */ + 0xD0, 0x75, 0xD0, 0x79, 0xD0, 0x7C, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xD0, 0x6D, 0xD0, 0xA3, 0xD0, 0x7B, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0x6C, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_83[512] = { + 0xD0, 0x70, 0xAD, 0x5F, 0xAD, 0x5A, 0xAD, 0x53, /* 0x00-0x03 */ + 0xAD, 0x58, 0xAD, 0x54, 0xAD, 0x67, 0xD0, 0x6E, /* 0x04-0x07 */ + 0xD3, 0xA5, 0xAD, 0x5B, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0xD0, 0x7A, 0xCE, 0x41, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xD3, 0xA8, 0xAF, 0xFA, /* 0x14-0x17 */ + 0x00, 0x00, 0xD3, 0x76, 0x00, 0x00, 0xD3, 0xA3, /* 0x18-0x1B */ + 0xD3, 0x7D, 0x00, 0x00, 0xD3, 0xB2, 0x00, 0x00, /* 0x1C-0x1F */ + 0xD3, 0xAA, 0x00, 0x00, 0xD3, 0x7E, 0x00, 0x00, /* 0x20-0x23 */ + 0xD3, 0xA9, 0xD3, 0x78, 0xD3, 0x7C, 0xD3, 0xB5, /* 0x24-0x27 */ + 0xAF, 0xFD, 0xD3, 0xAD, 0xD3, 0xA4, 0xAF, 0xED, /* 0x28-0x2B */ + 0xD3, 0xB3, 0xD3, 0x74, 0x00, 0x00, 0xD3, 0xAC, /* 0x2C-0x2F */ + 0x00, 0x00, 0xAF, 0xFC, 0xAF, 0xF7, 0xD3, 0x73, /* 0x30-0x33 */ + 0xAF, 0xF5, 0xAF, 0xF4, 0xAF, 0xF9, 0xD3, 0xAB, /* 0x34-0x37 */ + 0xAF, 0xF1, 0xAF, 0xF8, 0xD0, 0x72, 0xDB, 0x5C, /* 0x38-0x3B */ + 0xD3, 0xA6, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x7A, /* 0x3C-0x3F */ + 0xAF, 0xFB, 0xD3, 0x7B, 0xD3, 0xA1, 0xAF, 0xFE, /* 0x40-0x43 */ + 0xD3, 0x75, 0xD3, 0xAF, 0x00, 0x00, 0xD3, 0xAE, /* 0x44-0x47 */ + 0xD3, 0xB6, 0xAF, 0xF3, 0xAF, 0xF0, 0xD3, 0xB4, /* 0x48-0x4B */ + 0xD3, 0xB0, 0xD3, 0xA7, 0xD3, 0xA2, 0xAF, 0xF6, /* 0x4C-0x4F */ + 0xAF, 0xF2, 0xD3, 0x77, 0xAF, 0xEE, 0xD3, 0xB1, /* 0x50-0x53 */ + 0xAF, 0xEF, 0x00, 0x00, 0xD3, 0x79, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0x5E, /* 0x70-0x73 */ + 0xD7, 0x60, 0xD7, 0x65, 0xD7, 0x79, 0xB2, 0xFC, /* 0x74-0x77 */ + 0xB2, 0xF2, 0x00, 0x00, 0xD7, 0x5D, 0xB2, 0xFD, /* 0x78-0x7B */ + 0xB2, 0xFE, 0xD7, 0x68, 0xD7, 0x6F, 0xD7, 0x75, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xD7, 0x62, 0x00, 0x00, 0xD7, 0x69, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0x40, 0xD7, 0x77, /* 0x84-0x87 */ + 0xD7, 0x72, 0xB2, 0xFA, 0xB2, 0xF8, 0xD7, 0x6E, /* 0x88-0x8B */ + 0xD7, 0x6A, 0xD7, 0x5C, 0xB2, 0xEF, 0xD7, 0x61, /* 0x8C-0x8F */ + 0xD7, 0x59, 0x00, 0x00, 0xB2, 0xF7, 0xB2, 0xF9, /* 0x90-0x93 */ + 0xD7, 0x66, 0xD7, 0x63, 0xB2, 0xF4, 0xD7, 0x73, /* 0x94-0x97 */ + 0xB2, 0xF1, 0xD7, 0x64, 0xD7, 0x7A, 0xD7, 0x6C, /* 0x98-0x9B */ + 0x00, 0x00, 0xD7, 0x6B, 0xB2, 0xF0, 0x00, 0x00, /* 0x9C-0x9F */ + 0xB2, 0xFB, 0x00, 0x00, 0xB2, 0xF3, 0xD7, 0x5A, /* 0xA0-0xA3 */ + 0xD7, 0x5F, 0xD7, 0x70, 0xD7, 0x76, 0xB3, 0x41, /* 0xA4-0xA7 */ + 0xD7, 0x5B, 0xD7, 0x67, 0xD7, 0x6D, 0xB2, 0xF6, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0x78, 0xD7, 0x71, /* 0xAC-0xAF */ + 0xD7, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xB2, 0xF5, 0x00, 0x00, 0xDB, 0x6C, /* 0xBC-0xBF */ + 0xDB, 0x60, 0xB5, 0xD7, 0xDB, 0x7D, 0xDB, 0xA7, /* 0xC0-0xC3 */ + 0xDB, 0xAA, 0xB5, 0xD5, 0xDB, 0x68, 0xDB, 0xA3, /* 0xC4-0xC7 */ + 0xDB, 0x69, 0xDB, 0x77, 0xB5, 0xE2, 0xDB, 0x73, /* 0xC8-0xCB */ + 0xB5, 0xDF, 0x00, 0x00, 0xDB, 0x74, 0xDB, 0x5D, /* 0xCC-0xCF */ + 0x00, 0x00, 0xDB, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xB5, 0xE8, 0xDB, 0xA1, 0xDB, 0x75, 0xDB, 0xAC, /* 0xD4-0xD7 */ + 0xDB, 0x70, 0xDF, 0xC8, 0x00, 0x00, 0xDB, 0xAF, /* 0xD8-0xDB */ + 0xB5, 0xE6, 0xDB, 0x6E, 0xDB, 0x7A, 0xB5, 0xE9, /* 0xDC-0xDF */ + 0xB5, 0xD4, 0xDB, 0x72, 0xDB, 0xAD, 0xDB, 0x6B, /* 0xE0-0xE3 */ + 0xDB, 0x64, 0xDB, 0x6F, 0x00, 0x00, 0xDB, 0x63, /* 0xE4-0xE7 */ + 0xDB, 0x61, 0xB5, 0xD0, 0xDB, 0xA5, 0xDB, 0x6A, /* 0xE8-0xEB */ + 0xDB, 0xA8, 0x00, 0x00, 0xDB, 0xA9, 0xB5, 0xD8, /* 0xEC-0xEF */ + 0xB5, 0xDD, 0xB5, 0xD9, 0xB5, 0xE1, 0xDB, 0x7E, /* 0xF0-0xF3 */ + 0xB5, 0xDA, 0xDB, 0x76, 0xDB, 0x66, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xB5, 0xD2, 0xDB, 0x5E, 0xDB, 0xA2, 0xDB, 0xAB, /* 0xF8-0xFB */ + 0xDB, 0x65, 0xB5, 0xE0, 0xDB, 0xB0, 0xDB, 0x71, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_84[512] = { + 0x00, 0x00, 0xDB, 0x6D, 0x00, 0x00, 0xB5, 0xD1, /* 0x00-0x03 */ + 0xB5, 0xE5, 0x00, 0x00, 0xDB, 0x7C, 0xB5, 0xE7, /* 0x04-0x07 */ + 0x00, 0x00, 0xDB, 0x78, 0xB5, 0xDC, 0xB5, 0xD6, /* 0x08-0x0B */ + 0xB5, 0xDE, 0xB5, 0xD3, 0xB5, 0xE4, 0xDB, 0x79, /* 0x0C-0x0F */ + 0xDB, 0x67, 0xDB, 0x7B, 0xDB, 0x62, 0xDB, 0xA6, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0xAE, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x5F, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xDF, 0xC7, 0x00, 0x00, 0xDF, 0xDD, /* 0x28-0x2B */ + 0xB8, 0x55, 0xDF, 0xCC, 0x00, 0x00, 0xDF, 0xCA, /* 0x2C-0x2F */ + 0xDF, 0xB5, 0xB8, 0xA9, 0xDF, 0xC5, 0xDF, 0xD9, /* 0x30-0x33 */ + 0xDF, 0xC1, 0xB8, 0xB1, 0xDF, 0xD8, 0xDF, 0xBF, /* 0x34-0x37 */ + 0xB5, 0xE3, 0xDF, 0xCF, 0xDF, 0xC0, 0xDF, 0xD6, /* 0x38-0x3B */ + 0xB8, 0xB0, 0xB8, 0xA8, 0x00, 0x00, 0xDF, 0xAA, /* 0x3C-0x3F */ + 0xDF, 0xB2, 0x00, 0x00, 0xDF, 0xCB, 0xDF, 0xC3, /* 0x40-0x43 */ + 0xDF, 0xDC, 0xDF, 0xC6, 0xB8, 0xB6, 0xDF, 0xD7, /* 0x44-0x47 */ + 0x00, 0x00, 0xB8, 0xAD, 0x00, 0x00, 0xDF, 0xC9, /* 0x48-0x4B */ + 0xDF, 0xD1, 0xDF, 0xB6, 0xDF, 0xD0, 0x00, 0x00, /* 0x4C-0x4F */ + 0xDF, 0xE1, 0xDF, 0xB1, 0xDF, 0xD2, 0x00, 0x00, /* 0x50-0x53 */ + 0xDF, 0xDF, 0x00, 0x00, 0xDF, 0xAB, 0xB5, 0xDB, /* 0x54-0x57 */ + 0x00, 0x00, 0xDF, 0xB9, 0xDF, 0xB8, 0xB8, 0xAF, /* 0x58-0x5B */ + 0x00, 0x00, 0xDF, 0xBC, 0xDF, 0xBE, 0xDF, 0xCD, /* 0x5C-0x5F */ + 0xDF, 0xDE, 0xB8, 0xB2, 0x00, 0x00, 0xB8, 0xB3, /* 0x60-0x63 */ + 0x00, 0x00, 0xDF, 0xB0, 0xB8, 0xAB, 0xDF, 0xB4, /* 0x64-0x67 */ + 0xDF, 0xDA, 0xB8, 0xB4, 0x00, 0x00, 0xB8, 0xAC, /* 0x68-0x6B */ + 0xB8, 0xAE, 0xB8, 0xB5, 0xDF, 0xE0, 0xDF, 0xD3, /* 0x6C-0x6F */ + 0xDF, 0xCE, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xBB, /* 0x70-0x73 */ + 0xDF, 0xBA, 0xB8, 0xAA, 0xDF, 0xAC, 0xB8, 0xA7, /* 0x74-0x77 */ + 0xDF, 0xC4, 0xDF, 0xAD, 0xDF, 0xC2, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0xDF, 0xB7, 0xDF, 0xDB, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0xB8, 0xA6, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xDF, 0xB3, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xDF, 0xAF, 0xDF, 0xD5, 0xDF, 0xAE, /* 0x8C-0x8F */ + 0xBB, 0x60, 0xE3, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xE3, 0xC2, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xAC, /* 0x94-0x97 */ + 0xE3, 0xCA, 0xBB, 0x58, 0xE3, 0xBB, 0xE3, 0xC5, /* 0x98-0x9B */ + 0xBB, 0x5B, 0xE3, 0xBE, 0xBB, 0x59, 0xE3, 0xAF, /* 0x9C-0x9F */ + 0xE3, 0xCD, 0xE3, 0xAE, 0xE3, 0xC1, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE3, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xBF, /* 0xA4-0xA7 */ + 0xE3, 0xC8, 0xE3, 0xC6, 0xE3, 0xBA, 0xE3, 0xB5, /* 0xA8-0xAB */ + 0xE3, 0xB3, 0x00, 0x00, 0xE3, 0xB4, 0xE3, 0xC7, /* 0xAC-0xAF */ + 0xE3, 0xD2, 0xE3, 0xBC, 0xBB, 0x5A, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xE3, 0xB7, 0x00, 0x00, 0xE3, 0xCB, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xBB, 0x5D, 0xE3, 0xB6, 0xE3, 0xB0, 0xE3, 0xC0, /* 0xB8-0xBB */ + 0xBB, 0x61, 0x00, 0x00, 0x00, 0x00, 0xBB, 0x55, /* 0xBC-0xBF */ + 0xBB, 0x5E, 0xE3, 0xB8, 0xE3, 0xB2, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xBB, 0x57, 0xDF, 0xD4, 0xBB, 0x56, 0xE3, 0xC3, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xBB, 0x54, 0xBB, 0x63, 0xBB, 0x5C, /* 0xC8-0xCB */ + 0xE3, 0xC4, 0xE3, 0xB9, 0xE3, 0xB1, 0xE3, 0xCC, /* 0xCC-0xCF */ + 0xE3, 0xBD, 0xBB, 0x62, 0xE3, 0xD0, 0xBB, 0x5F, /* 0xD0-0xD3 */ + 0xE3, 0xCF, 0x00, 0x00, 0xE3, 0xC9, 0xE3, 0xCE, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xD1, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x73, /* 0xE4-0xE7 */ + 0xE7, 0x74, 0xE7, 0x67, 0xE7, 0x66, 0xE7, 0x62, /* 0xE8-0xEB */ + 0xBD, 0xB4, 0x00, 0x00, 0xBD, 0xAC, 0xE7, 0x76, /* 0xEC-0xEF */ + 0xE7, 0x75, 0xDF, 0xA9, 0xE7, 0x5F, 0xE7, 0x63, /* 0xF0-0xF3 */ + 0xE7, 0x5D, 0x00, 0x00, 0xE7, 0x70, 0xE7, 0x61, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE7, 0x77, 0xE7, 0x5A, 0xE7, 0x58, /* 0xF8-0xFB */ + 0xE7, 0x64, 0xE7, 0x6E, 0xE7, 0x69, 0xBD, 0xB6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_85[512] = { + 0xE7, 0x4F, 0x00, 0x00, 0xE7, 0x6D, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xBD, 0xB7, 0xDF, 0xBD, /* 0x04-0x07 */ + 0xE7, 0x5B, 0xE7, 0x52, 0xE7, 0x55, 0xE7, 0x7B, /* 0x08-0x0B */ + 0xE7, 0x5C, 0xE7, 0x53, 0xE7, 0x51, 0xE7, 0x4E, /* 0x0C-0x0F */ + 0x00, 0x00, 0xBD, 0xB0, 0xE7, 0x65, 0xBD, 0xAF, /* 0x10-0x13 */ + 0xBD, 0xB3, 0xE7, 0x60, 0xE7, 0x68, 0xBD, 0xA9, /* 0x14-0x17 */ + 0xE7, 0x78, 0xE7, 0x7C, 0xBD, 0xAB, 0x00, 0x00, /* 0x18-0x1B */ + 0xE7, 0x57, 0xE7, 0x6B, 0xE7, 0x6F, 0xE7, 0x54, /* 0x1C-0x1F */ + 0xE7, 0x79, 0xBD, 0xB2, 0x00, 0x00, 0xBD, 0xB1, /* 0x20-0x23 */ + 0xE7, 0x4C, 0xBD, 0xB5, 0xE7, 0x72, 0xE7, 0x56, /* 0x24-0x27 */ + 0xE7, 0x6A, 0xE7, 0x50, 0xE7, 0x5E, 0xE7, 0x59, /* 0x28-0x2B */ + 0xBD, 0xAD, 0xBD, 0xAE, 0xE7, 0x6C, 0xE7, 0x7D, /* 0x2C-0x2F */ + 0xE7, 0x7A, 0xE7, 0x71, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0x4D, /* 0x38-0x3B */ + 0x00, 0x00, 0xBD, 0xAA, 0xEB, 0x49, 0x00, 0x00, /* 0x3C-0x3F */ + 0xEB, 0x40, 0xEB, 0x43, 0x00, 0x00, 0xBF, 0xBB, /* 0x40-0x43 */ + 0xEB, 0x45, 0xEA, 0xF9, 0xEB, 0x41, 0xEB, 0x47, /* 0x44-0x47 */ + 0xBF, 0xB8, 0xBF, 0xBC, 0xBF, 0xB6, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0xEA, 0xFB, 0xEB, 0x4C, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0xEB, 0x46, 0x00, 0x00, 0xEA, 0xFC, /* 0x50-0x53 */ + 0xEB, 0x55, 0xEB, 0x4F, 0xEA, 0xF8, 0xEE, 0x46, /* 0x54-0x57 */ + 0xEA, 0xFE, 0xBF, 0xB7, 0x00, 0x00, 0xEB, 0x4A, /* 0x58-0x5B */ + 0x00, 0x00, 0xEB, 0x54, 0xBF, 0xBF, 0x00, 0x00, /* 0x5C-0x5F */ + 0xEB, 0x51, 0xEA, 0xFD, 0xEB, 0x44, 0xEB, 0x48, /* 0x60-0x63 */ + 0xEB, 0x42, 0xEB, 0x56, 0xEB, 0x53, 0xEB, 0x50, /* 0x64-0x67 */ + 0xBF, 0xB9, 0xBF, 0xBA, 0xBF, 0xBE, 0xEA, 0xFA, /* 0x68-0x6B */ + 0xEB, 0x57, 0xBF, 0xBD, 0xEB, 0x4D, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xEB, 0x4B, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xEB, 0x4E, 0xEE, 0x53, 0xEE, 0x40, /* 0x74-0x77 */ + 0xEE, 0x45, 0xEE, 0x52, 0xEE, 0x44, 0xED, 0xFB, /* 0x78-0x7B */ + 0xEE, 0x41, 0x00, 0x00, 0xC1, 0xA2, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xED, 0xF4, 0xEE, 0x4D, 0xEE, 0x4F, 0xED, 0xF3, /* 0x80-0x83 */ + 0xC1, 0xA1, 0xEE, 0x51, 0xEE, 0x49, 0xC1, 0xA8, /* 0x84-0x87 */ + 0xEE, 0x50, 0xEE, 0x42, 0xC1, 0xAA, 0xED, 0xF9, /* 0x88-0x8B */ + 0xEB, 0x52, 0xEE, 0x4A, 0xEE, 0x47, 0xED, 0xF5, /* 0x8C-0x8F */ + 0xEE, 0x55, 0xC1, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xC1, 0xA5, 0xED, 0xF7, 0xEE, 0x48, 0x00, 0x00, /* 0x94-0x97 */ + 0xEE, 0x54, 0xEE, 0x4B, 0xED, 0xFD, 0xC1, 0xA7, /* 0x98-0x9B */ + 0xC1, 0xA3, 0xEE, 0x4C, 0xED, 0xFE, 0xEE, 0x56, /* 0x9C-0x9F */ + 0xED, 0xF8, 0xEE, 0x43, 0xEE, 0x4E, 0xED, 0xFA, /* 0xA0-0xA3 */ + 0xED, 0xFC, 0x00, 0x00, 0xC2, 0xCB, 0xED, 0xF6, /* 0xA4-0xA7 */ + 0xC1, 0xA9, 0xC2, 0xC4, 0xC1, 0x7E, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xA6, /* 0xAC-0xAF */ + 0xC2, 0xC8, 0xF0, 0xB3, 0x00, 0x00, 0xF0, 0xA9, /* 0xB0-0xB3 */ + 0xF0, 0xA4, 0xF0, 0xAA, 0xF0, 0xB4, 0xF0, 0xB8, /* 0xB4-0xB7 */ + 0xF0, 0xB7, 0xC2, 0xCA, 0xC2, 0xC9, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xF0, 0xAB, 0xF0, 0xB9, 0xF0, 0xAE, /* 0xBC-0xBF */ + 0xF0, 0xA6, 0x00, 0x00, 0xF0, 0xA8, 0xF0, 0xA7, /* 0xC0-0xC3 */ + 0xF0, 0xAD, 0xF0, 0xB2, 0xF0, 0xA5, 0xF0, 0xAC, /* 0xC4-0xC7 */ + 0xF0, 0xB1, 0xC2, 0xC7, 0x00, 0x00, 0xF0, 0xAF, /* 0xC8-0xCB */ + 0x00, 0x00, 0xC2, 0xC5, 0xF0, 0xB0, 0xC2, 0xC3, /* 0xCC-0xCF */ + 0xC2, 0xC6, 0xF2, 0xD5, 0xF0, 0xB5, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xC3, 0xC2, 0x00, 0x00, 0xF2, 0xCD, /* 0xD4-0xD7 */ + 0xF2, 0xD1, 0xF2, 0xC9, 0xF2, 0xCC, 0x00, 0x00, /* 0xD8-0xDB */ + 0xF2, 0xD4, 0xC3, 0xC0, 0xF2, 0xD9, 0xF2, 0xD2, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF2, 0xCA, 0xF2, 0xDA, 0xF2, 0xD3, /* 0xE0-0xE3 */ + 0xC3, 0xC3, 0xC3, 0xC4, 0xF2, 0xD7, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF2, 0xCB, 0xC3, 0xBF, 0xC3, 0xC1, 0xF2, 0xC6, /* 0xE8-0xEB */ + 0xF2, 0xCE, 0xF2, 0xC8, 0x00, 0x00, 0xF2, 0xD8, /* 0xEC-0xEF */ + 0xF2, 0xD6, 0xF2, 0xC7, 0xF2, 0xCF, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xF4, 0xBE, 0xC3, 0xC5, /* 0xF4-0xF7 */ + 0xF2, 0xD0, 0xC4, 0xA7, 0xC4, 0xA9, 0xC4, 0xA6, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF4, 0xC3, 0xF4, 0xBB, 0xF4, 0xB9, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_86[512] = { + 0xF4, 0xBD, 0xF4, 0xBA, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0xF4, 0xBF, 0xF4, 0xC1, 0xC4, 0xAA, 0xC4, 0xAC, /* 0x04-0x07 */ + 0x00, 0x00, 0xF4, 0xC0, 0xC4, 0xAD, 0xC4, 0xAB, /* 0x08-0x0B */ + 0xF4, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xC4, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xF4, /* 0x14-0x17 */ + 0xF5, 0xF1, 0xF5, 0xF7, 0xC4, 0xF6, 0xF4, 0xBC, /* 0x18-0x1B */ + 0xF5, 0xF6, 0x00, 0x00, 0xF5, 0xFD, 0xF5, 0xF4, /* 0x1C-0x1F */ + 0xF5, 0xFB, 0xF5, 0xFA, 0xF4, 0xB8, 0xF5, 0xF5, /* 0x20-0x23 */ + 0xF0, 0xB6, 0xF5, 0xFE, 0xF5, 0xF3, 0xF5, 0xF8, /* 0x24-0x27 */ + 0x00, 0x00, 0xF5, 0xFC, 0xF5, 0xF2, 0x00, 0x00, /* 0x28-0x2B */ + 0xF7, 0x4A, 0xC4, 0xF5, 0xF5, 0xF9, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xF7, 0xF4, 0xF7, 0x4B, 0xF7, 0x49, /* 0x30-0x33 */ + 0xF7, 0x47, 0xF7, 0x48, 0xF7, 0x4C, 0x00, 0x00, /* 0x34-0x37 */ + 0xC5, 0xD9, 0xF7, 0xF2, 0xF7, 0xF0, 0xF7, 0xF5, /* 0x38-0x3B */ + 0xF7, 0xF3, 0x00, 0x00, 0xF7, 0xF6, 0xC5, 0xDA, /* 0x3C-0x3F */ + 0xF7, 0xF1, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xBC, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0x45, 0xF9, 0x46, /* 0x44-0x47 */ + 0xF9, 0x47, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xC7, /* 0x48-0x4B */ + 0xF9, 0xBD, 0xCA, 0x4F, 0xAA, 0xEA, 0x00, 0x00, /* 0x4C-0x4F */ + 0xAD, 0x68, 0x00, 0x00, 0xD3, 0xB8, 0xD3, 0xB7, /* 0x50-0x53 */ + 0xB0, 0x40, 0xB3, 0x42, 0xD7, 0x7C, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0xD7, 0x7B, 0x00, 0x00, 0xB5, 0xEA, /* 0x58-0x5B */ + 0xB8, 0xB8, 0x00, 0x00, 0xB8, 0xB7, 0xB8, 0xB9, /* 0x5C-0x5F */ + 0x00, 0x00, 0xE3, 0xD4, 0xE7, 0x7E, 0xEB, 0x58, /* 0x60-0x63 */ + 0xEB, 0x5A, 0xEB, 0x59, 0x00, 0x00, 0xC1, 0xAB, /* 0x64-0x67 */ + 0xEE, 0x57, 0xF0, 0xBA, 0xF9, 0xA5, 0xA6, 0xE4, /* 0x68-0x6B */ + 0x00, 0x00, 0xCD, 0xC9, 0xCD, 0xCA, 0xCD, 0xC8, /* 0x6C-0x6F */ + 0xCD, 0xC7, 0xAA, 0xEB, 0x00, 0x00, 0xD0, 0xA9, /* 0x70-0x73 */ + 0xD0, 0xA7, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xA6, /* 0x74-0x77 */ + 0x00, 0x00, 0xAD, 0x69, 0xAD, 0x6B, 0xAD, 0x6A, /* 0x78-0x7B */ + 0xD0, 0xA8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xD3, 0xC4, 0xD3, 0xC1, 0xD3, 0xBF, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0x41, 0xD3, 0xC2, /* 0x88-0x8B */ + 0xB0, 0x46, 0xD3, 0xBC, 0xD3, 0xCB, 0x00, 0x00, /* 0x8C-0x8F */ + 0xD3, 0xCD, 0xD3, 0xBD, 0x00, 0x00, 0xB0, 0x43, /* 0x90-0x93 */ + 0xD3, 0xCE, 0xD3, 0xC9, 0xD3, 0xBB, 0xD3, 0xC0, /* 0x94-0x97 */ + 0xD3, 0xCA, 0xD3, 0xC6, 0xD3, 0xC3, 0x00, 0x00, /* 0x98-0x9B */ + 0xB0, 0x48, 0xD3, 0xCC, 0xD3, 0xBE, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xD3, 0xC7, 0xD3, 0xB9, 0xB0, 0x47, /* 0xA0-0xA3 */ + 0xB0, 0x44, 0xD3, 0xC5, 0x00, 0x00, 0xD3, 0xC8, /* 0xA4-0xA7 */ + 0xD3, 0xBA, 0xB0, 0x45, 0xB0, 0x42, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x4C, /* 0xAC-0xAF */ + 0xD7, 0xA5, 0xB3, 0x4B, 0x00, 0x00, 0xD7, 0xA8, /* 0xB0-0xB3 */ + 0xD7, 0xAB, 0xB3, 0x48, 0xB3, 0x46, 0xD7, 0x7E, /* 0xB4-0xB7 */ + 0xD7, 0xA9, 0xD7, 0xA7, 0xD7, 0xA4, 0xD7, 0xAC, /* 0xB8-0xBB */ + 0xD7, 0xAD, 0xD7, 0xAF, 0xD7, 0xB0, 0xD7, 0x7D, /* 0xBC-0xBF */ + 0xB3, 0x45, 0xD7, 0xA2, 0xD7, 0xA1, 0xD7, 0xAE, /* 0xC0-0xC3 */ + 0xB3, 0x47, 0xD7, 0xA3, 0xB3, 0x49, 0xB3, 0x44, /* 0xC4-0xC7 */ + 0xD7, 0xA6, 0xB3, 0x4D, 0x00, 0x00, 0xB3, 0x4A, /* 0xC8-0xCB */ + 0xD7, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xB5, 0xF1, 0xDB, 0xBF, 0x00, 0x00, 0xDB, 0xB4, /* 0xD0-0xD3 */ + 0xB5, 0xEE, 0x00, 0x00, 0xDF, 0xE7, 0xDB, 0xBD, /* 0xD4-0xD7 */ + 0xDB, 0xB1, 0xB5, 0xEC, 0xDB, 0xB6, 0xB5, 0xEF, /* 0xD8-0xDB */ + 0xDB, 0xBA, 0xDB, 0xB8, 0xB5, 0xF2, 0xB5, 0xEB, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xB2, 0xDB, 0xB5, /* 0xE0-0xE3 */ + 0xB5, 0xF0, 0x00, 0x00, 0xDB, 0xB3, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xDB, 0xBE, 0xDB, 0xBC, 0xDB, 0xB7, 0xDB, 0xB9, /* 0xE8-0xEB */ + 0xDB, 0xBB, 0xB5, 0xED, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xDF, 0xE8, 0xDF, 0xEE, 0xDF, 0xE4, /* 0xF4-0xF7 */ + 0xDF, 0xEA, 0xB8, 0xBA, 0xDF, 0xE6, 0xB8, 0xC0, /* 0xF8-0xFB */ + 0x00, 0x00, 0x00, 0x00, 0xB8, 0xBF, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_87[512] = { + 0xB8, 0xBE, 0xDF, 0xED, 0xB8, 0xC1, 0xB8, 0xC2, /* 0x00-0x03 */ + 0xDF, 0xE3, 0xDF, 0xF0, 0xB8, 0xC3, 0xB8, 0xBD, /* 0x04-0x07 */ + 0xB8, 0xBC, 0xDF, 0xEC, 0xB8, 0xC4, 0xDF, 0xE2, /* 0x08-0x0B */ + 0xDF, 0xE5, 0xDF, 0xEF, 0xDF, 0xEB, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0xE3, 0xF4, 0xE3, 0xE9, 0xB8, 0xBB, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0xBB, 0x6A, 0xE3, 0xDD, 0xE3, 0xF2, 0xE3, 0xDE, /* 0x18-0x1B */ + 0xBB, 0x65, 0x00, 0x00, 0xE3, 0xDB, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE3, 0xE4, 0xE3, 0xDC, 0xBB, 0x67, 0xE3, 0xD6, /* 0x20-0x23 */ + 0xE3, 0xF1, 0xBB, 0x68, 0xE3, 0xEE, 0xE3, 0xEF, /* 0x24-0x27 */ + 0xE3, 0xD7, 0xBB, 0x6D, 0xE3, 0xE6, 0x00, 0x00, /* 0x28-0x2B */ + 0xE3, 0xE0, 0xE3, 0xE7, 0xE3, 0xDA, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE3, 0xF3, 0xE3, 0xEB, 0xE3, 0xE5, 0xE3, 0xD5, /* 0x30-0x33 */ + 0xBB, 0x69, 0xE3, 0xEC, 0x00, 0x00, 0xBB, 0x6C, /* 0x34-0x37 */ + 0xE3, 0xF0, 0x00, 0x00, 0xE3, 0xEA, 0xBB, 0x66, /* 0x38-0x3B */ + 0xE3, 0xE8, 0x00, 0x00, 0xE3, 0xE2, 0xBB, 0x64, /* 0x3C-0x3F */ + 0xE3, 0xD9, 0xE3, 0xE1, 0xE3, 0xED, 0xE3, 0xDF, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xE3, 0xE3, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0xBD, 0xC1, 0xDF, 0xE9, 0xE7, 0xB2, 0xE7, 0xBB, /* 0x4C-0x4F */ + 0xE7, 0xB1, 0xE7, 0xAD, 0xE7, 0xAA, 0xBD, 0xC2, /* 0x50-0x53 */ + 0xE7, 0xA8, 0xBB, 0x6B, 0xE7, 0xA1, 0xBD, 0xC0, /* 0x54-0x57 */ + 0xE7, 0xA7, 0xBD, 0xBF, 0xE7, 0xAC, 0xE7, 0xA9, /* 0x58-0x5B */ + 0xE7, 0xB9, 0xE7, 0xB4, 0xE7, 0xAE, 0xE7, 0xB3, /* 0x5C-0x5F */ + 0xBD, 0xBB, 0xE7, 0xAB, 0xE7, 0xBE, 0xE7, 0xA2, /* 0x60-0x63 */ + 0xE7, 0xA3, 0xE7, 0xBA, 0xBD, 0xBC, 0xE7, 0xBF, /* 0x64-0x67 */ + 0xBD, 0xBE, 0xE7, 0xC0, 0xE7, 0xB0, 0xE3, 0xD8, /* 0x68-0x6B */ + 0xE7, 0xB6, 0xE7, 0xAF, 0xE7, 0xB8, 0xE7, 0xB5, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xA6, /* 0x70-0x73 */ + 0xBD, 0xB9, 0xE7, 0xBD, 0xBD, 0xBA, 0xE7, 0xA4, /* 0x74-0x77 */ + 0xBD, 0xBD, 0xEB, 0x64, 0xE7, 0xB7, 0xE7, 0xBC, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xEB, 0x61, 0xBD, 0xB8, 0xBF, 0xC0, /* 0x80-0x83 */ + 0xEB, 0x6B, 0xEB, 0x67, 0x00, 0x00, 0xEB, 0x65, /* 0x84-0x87 */ + 0xEB, 0x60, 0xEB, 0x6F, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xBF, 0xC4, 0x00, 0x00, 0xEB, 0x5C, /* 0x8C-0x8F */ + 0xEB, 0x68, 0xEB, 0x69, 0xEB, 0x5F, 0xEB, 0x5E, /* 0x90-0x93 */ + 0xEB, 0x6C, 0x00, 0x00, 0xEB, 0x62, 0xEB, 0x5D, /* 0x94-0x97 */ + 0xEB, 0x63, 0x00, 0x00, 0xEB, 0x6E, 0xEB, 0x5B, /* 0x98-0x9B */ + 0xEB, 0x6D, 0xEB, 0x6A, 0xBF, 0xC2, 0xBF, 0xC1, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0xBF, 0xC3, 0xEB, 0x66, /* 0xA0-0xA3 */ + 0xF0, 0xCB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0x59, 0xC1, 0xB1, /* 0xA8-0xAB */ + 0xEE, 0x5D, 0xEE, 0x5A, 0xEE, 0x61, 0xEE, 0x67, /* 0xAC-0xAF */ + 0xEE, 0x5C, 0x00, 0x00, 0xEE, 0x70, 0xC1, 0xAE, /* 0xB0-0xB3 */ + 0xEE, 0x6A, 0xEE, 0x5F, 0xEE, 0x6B, 0xEE, 0x66, /* 0xB4-0xB7 */ + 0xEE, 0x6D, 0xEE, 0x5E, 0xC1, 0xB3, 0xC1, 0xB2, /* 0xB8-0xBB */ + 0xEE, 0x60, 0xEE, 0x6E, 0xEE, 0x58, 0xEE, 0x6C, /* 0xBC-0xBF */ + 0xC1, 0xAC, 0x00, 0x00, 0xEE, 0x64, 0xEE, 0x63, /* 0xC0-0xC3 */ + 0xEE, 0x68, 0xEE, 0x5B, 0xC1, 0xB0, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xC1, 0xB4, 0xEE, 0x62, 0xEE, 0x69, 0xC1, 0xB5, /* 0xC8-0xCB */ + 0xEE, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xC1, 0xAD, 0xC1, 0xAF, 0xF0, 0xC7, /* 0xD0-0xD3 */ + 0xF0, 0xC5, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xCC, /* 0xD4-0xD7 */ + 0xF0, 0xC9, 0xF0, 0xCD, 0x00, 0x00, 0xF0, 0xBE, /* 0xD8-0xDB */ + 0xF0, 0xC6, 0xF0, 0xD1, 0xEE, 0x6F, 0xF0, 0xC2, /* 0xDC-0xDF */ + 0xC2, 0xCF, 0xE7, 0xA5, 0xF0, 0xBD, 0xF0, 0xCA, /* 0xE0-0xE3 */ + 0xF0, 0xC4, 0xF0, 0xC1, 0xF0, 0xBC, 0xF0, 0xBB, /* 0xE4-0xE7 */ + 0xF0, 0xD0, 0x00, 0x00, 0xF0, 0xC0, 0xF0, 0xBF, /* 0xE8-0xEB */ + 0xC2, 0xCD, 0xF0, 0xC8, 0x00, 0x00, 0xC2, 0xCC, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xC2, 0xCE, 0xF0, 0xC3, /* 0xF0-0xF3 */ + 0xF0, 0xCF, 0x00, 0x00, 0xF2, 0xDE, 0xF2, 0xDF, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xC3, 0xC9, 0xF2, 0xDC, 0xC3, 0xC6, /* 0xF8-0xFB */ + 0xF2, 0xE4, 0x00, 0x00, 0xC3, 0xCA, 0xF2, 0xE6, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_88[512] = { + 0xF2, 0xDB, 0xF0, 0xCE, 0xF2, 0xE8, 0xF2, 0xDD, /* 0x00-0x03 */ + 0x00, 0x00, 0xC3, 0xC7, 0xF2, 0xE3, 0x00, 0x00, /* 0x04-0x07 */ + 0xF2, 0xE5, 0xF2, 0xE0, 0xF2, 0xE7, 0xF2, 0xE2, /* 0x08-0x0B */ + 0xF2, 0xE1, 0xC3, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xF4, 0xC5, 0xF4, 0xC6, 0x00, 0x00, 0xF4, 0xC8, /* 0x10-0x13 */ + 0xC4, 0xAE, 0xC4, 0xAF, 0xF4, 0xC9, 0xF4, 0xC7, /* 0x14-0x17 */ + 0x00, 0x00, 0xF4, 0xC4, 0x00, 0x00, 0xF6, 0x42, /* 0x18-0x1B */ + 0xF6, 0x45, 0xF6, 0x41, 0x00, 0x00, 0xC4, 0xFA, /* 0x1C-0x1F */ + 0xF6, 0x43, 0xC4, 0xF9, 0xC4, 0xF8, 0xC4, 0xF7, /* 0x20-0x23 */ + 0xF6, 0x44, 0xF7, 0x51, 0xF7, 0x4F, 0x00, 0x00, /* 0x24-0x27 */ + 0xF7, 0x4E, 0xF6, 0x40, 0xF7, 0x50, 0xF6, 0x46, /* 0x28-0x2B */ + 0xF7, 0x4D, 0x00, 0x00, 0xF7, 0xF9, 0xF7, 0xD7, /* 0x2C-0x2F */ + 0xF7, 0xF7, 0xC5, 0xDB, 0xF7, 0xF8, 0xF7, 0xFA, /* 0x30-0x33 */ + 0x00, 0x00, 0xF8, 0xBF, 0xC5, 0xFA, 0xF8, 0xBE, /* 0x34-0x37 */ + 0xF8, 0xBD, 0xC5, 0xFB, 0x00, 0x00, 0xC6, 0x5A, /* 0x38-0x3B */ + 0xF9, 0x6E, 0xF9, 0xA7, 0xF9, 0xA6, 0xF9, 0xA8, /* 0x3C-0x3F */ + 0xA6, 0xE5, 0xD0, 0xAA, 0x00, 0x00, 0xD3, 0xCF, /* 0x40-0x43 */ + 0xD3, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0xDB, 0xC0, 0x00, 0x00, 0xF6, 0x47, 0xF8, 0xC0, /* 0x48-0x4B */ + 0xA6, 0xE6, 0xAD, 0x6C, 0xD0, 0xAB, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xD7, 0xB1, 0xB3, 0x4E, /* 0x50-0x53 */ + 0x00, 0x00, 0xDB, 0xC2, 0xDB, 0xC1, 0xB5, 0xF3, /* 0x54-0x57 */ + 0x00, 0x00, 0xB8, 0xC5, 0xE7, 0xC1, 0xBD, 0xC3, /* 0x58-0x5B */ + 0x00, 0x00, 0xBD, 0xC4, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0xBF, 0xC5, 0xC5, 0xFC, 0xA6, 0xE7, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xAC, /* 0x64-0x67 */ + 0xAA, 0xED, 0xD0, 0xAE, 0xD0, 0xAD, 0xAD, 0x6D, /* 0x68-0x6B */ + 0x00, 0x00, 0xD3, 0xD1, 0x00, 0x00, 0xD3, 0xD8, /* 0x6C-0x6F */ + 0xB0, 0x49, 0xD3, 0xD6, 0xD3, 0xD4, 0x00, 0x00, /* 0x70-0x73 */ + 0xD3, 0xDB, 0xD3, 0xD2, 0xD3, 0xD3, 0xB0, 0x4A, /* 0x74-0x77 */ + 0x00, 0x00, 0xB0, 0x4E, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xD3, 0xDC, 0xB0, 0x4D, 0xD3, 0xDA, 0xD3, 0xD7, /* 0x7C-0x7F */ + + 0xD3, 0xD5, 0xB0, 0x4B, 0xB0, 0x4C, 0xD3, 0xD9, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xB3, 0x50, 0xD7, 0xB2, 0x00, 0x00, 0xB3, 0x55, /* 0x88-0x8B */ + 0xD7, 0xC2, 0xB3, 0x54, 0xD7, 0xC4, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xD7, 0xB8, 0xB3, 0x52, 0xD7, 0xC3, /* 0x90-0x93 */ + 0x00, 0x00, 0xD7, 0xB3, 0xB3, 0x53, 0xD7, 0xBF, /* 0x94-0x97 */ + 0xD7, 0xBB, 0xD7, 0xBD, 0xD7, 0xB7, 0xD7, 0xBE, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0x4F, 0xD7, 0xBA, /* 0x9C-0x9F */ + 0x00, 0x00, 0xD7, 0xB9, 0xD7, 0xB5, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xD7, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xBC, /* 0xA4-0xA7 */ + 0xD7, 0xB4, 0x00, 0x00, 0xD7, 0xB6, 0xB3, 0x51, /* 0xA8-0xAB */ + 0xD7, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0xB5, 0xF6, 0xDB, 0xCD, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xDB, 0xC9, 0xDB, 0xCB, /* 0xB4-0xB7 */ + 0xDB, 0xC6, 0xDB, 0xC5, 0xDB, 0xC3, 0x00, 0x00, /* 0xB8-0xBB */ + 0xDB, 0xCA, 0xDB, 0xCC, 0xDB, 0xC8, 0x00, 0x00, /* 0xBC-0xBF */ + 0xDB, 0xC7, 0xB5, 0xF4, 0xB5, 0xF5, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xDB, 0xCF, 0xB8, 0xCD, 0xDF, 0xF2, /* 0xC8-0xCB */ + 0xDF, 0xF8, 0xDF, 0xF3, 0xDF, 0xF4, 0xF9, 0xD8, /* 0xCC-0xCF */ + 0xDF, 0xF9, 0x00, 0x00, 0xB8, 0xCF, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xB8, 0xC7, 0xB8, 0xCE, 0xDF, 0xF1, 0xDB, 0xC4, /* 0xD4-0xD7 */ + 0xB8, 0xCA, 0xB8, 0xC8, 0xDF, 0xF7, 0xDF, 0xF6, /* 0xD8-0xDB */ + 0xB8, 0xC9, 0xB8, 0xCB, 0xDF, 0xF5, 0xB8, 0xC6, /* 0xDC-0xDF */ + 0x00, 0x00, 0xB8, 0xCC, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xF6, /* 0xE4-0xE7 */ + 0xBB, 0x74, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x42, /* 0xE8-0xEB */ + 0xE4, 0x41, 0x00, 0x00, 0xE3, 0xFB, 0xBB, 0x76, /* 0xEC-0xEF */ + 0xE4, 0x40, 0xE3, 0xF7, 0xE3, 0xF8, 0xBB, 0x6E, /* 0xF0-0xF3 */ + 0xBB, 0x70, 0x00, 0x00, 0xE3, 0xFD, 0xE3, 0xF5, /* 0xF4-0xF7 */ + 0xBB, 0x72, 0xBB, 0x71, 0xE3, 0xF9, 0xE3, 0xFE, /* 0xF8-0xFB */ + 0xE3, 0xFC, 0xBB, 0x73, 0xE3, 0xFA, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_89[512] = { + 0x00, 0x00, 0xDB, 0xCE, 0xBB, 0x6F, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xE7, 0xC2, 0xE7, 0xC9, 0xBD, 0xC6, /* 0x04-0x07 */ + 0x00, 0x00, 0xE7, 0xCD, 0xBD, 0xCA, 0xE7, 0xC5, /* 0x08-0x0B */ + 0xE7, 0xC3, 0x00, 0x00, 0xE7, 0xCC, 0x00, 0x00, /* 0x0C-0x0F */ + 0xBD, 0xC5, 0xE7, 0xCB, 0xBD, 0xC7, 0xBD, 0xC8, /* 0x10-0x13 */ + 0xE7, 0xC4, 0xBD, 0xC9, 0xE7, 0xCA, 0xE7, 0xC6, /* 0x14-0x17 */ + 0xE7, 0xC7, 0xE7, 0xC8, 0xBB, 0x75, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0x70, 0xEB, 0x7C, /* 0x1C-0x1F */ + 0x00, 0x00, 0xBF, 0xCA, 0xEB, 0x77, 0xEB, 0x79, /* 0x20-0x23 */ + 0x00, 0x00, 0xBF, 0xC8, 0xEB, 0x71, 0xEB, 0x75, /* 0x24-0x27 */ + 0x00, 0x00, 0xEB, 0x78, 0xBF, 0xC6, 0xBF, 0xC9, /* 0x28-0x2B */ + 0xEB, 0x7B, 0xEB, 0x73, 0xEB, 0x74, 0xEB, 0x7A, /* 0x2C-0x2F */ + 0xEB, 0x72, 0xEB, 0x76, 0xBF, 0xC7, 0xEE, 0x72, /* 0x30-0x33 */ + 0x00, 0x00, 0xEE, 0x71, 0xC1, 0xB7, 0xEE, 0x77, /* 0x34-0x37 */ + 0xC1, 0xB9, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xB6, /* 0x38-0x3B */ + 0xEE, 0x73, 0xC1, 0xBA, 0xEE, 0x74, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xEE, 0x75, 0xEE, 0x78, 0x00, 0x00, /* 0x40-0x43 */ + 0xC1, 0xB8, 0x00, 0x00, 0xF0, 0xD6, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xF0, 0xD9, 0x00, 0x00, 0xF0, 0xD3, /* 0x48-0x4B */ + 0xF0, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xD4, /* 0x4C-0x4F */ + 0xF0, 0xD7, 0xF0, 0xD8, 0xEE, 0x76, 0xF0, 0xD2, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0xCD, 0xF2, 0xEC, /* 0x54-0x57 */ + 0xF2, 0xEF, 0xF2, 0xF1, 0xF2, 0xEA, 0xF2, 0xEB, /* 0x58-0x5B */ + 0xF2, 0xEE, 0xF2, 0xF0, 0xC3, 0xCE, 0xC3, 0xCC, /* 0x5C-0x5F */ + 0xC3, 0xCB, 0xF2, 0xED, 0xF2, 0xE9, 0xF4, 0xCA, /* 0x60-0x63 */ + 0xC4, 0xB0, 0x00, 0x00, 0xF4, 0xCB, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0xF6, 0x49, 0xC4, 0xFB, 0xF6, 0x4B, /* 0x68-0x6B */ + 0xC4, 0xFC, 0xF6, 0x48, 0xF6, 0x4A, 0xC5, 0xA8, /* 0x6C-0x6F */ + 0x00, 0x00, 0xF7, 0x52, 0xC5, 0xA7, 0xF7, 0xFD, /* 0x70-0x73 */ + 0xF7, 0xFC, 0x00, 0x00, 0xF7, 0xFB, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xF9, 0x48, 0xF9, 0x49, 0xF9, 0x4B, /* 0x78-0x7B */ + 0xF9, 0x4A, 0x00, 0x00, 0xCA, 0x50, 0xA6, 0xE8, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xAD, 0x6E, 0xD7, 0xC5, 0xB5, 0xF7, /* 0x80-0x83 */ + 0x00, 0x00, 0xDF, 0xFA, 0xC2, 0xD0, 0x00, 0x00, /* 0x84-0x87 */ + 0xF2, 0xF2, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA3, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x57, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x56, /* 0x90-0x93 */ + 0x00, 0x00, 0xDB, 0xD0, 0xB5, 0xF8, 0xDB, 0xD2, /* 0x94-0x97 */ + 0xDB, 0xD1, 0x00, 0x00, 0x00, 0x00, 0xDF, 0xFB, /* 0x98-0x9B */ + 0xB8, 0xD0, 0xE4, 0x43, 0xE4, 0x46, 0xE4, 0x45, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE4, 0x44, 0xE7, 0xCE, 0xE7, 0xD0, /* 0xA0-0xA3 */ + 0xE7, 0xCF, 0x00, 0x00, 0xBF, 0xCC, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xBF, 0xCB, 0x00, 0x00, /* 0xA8-0xAB */ + 0xC1, 0xBB, 0xEE, 0x79, 0xEE, 0x7B, 0xEE, 0x7A, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xC2, 0xD1, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xF2, 0xF4, 0xF2, 0xF3, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xF4, 0xCC, 0xC4, 0xB1, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xC4, 0xFD, 0xF7, 0x54, 0xF7, 0x53, /* 0xBC-0xBF */ + 0xC6, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA4, 0xD0, 0xAF, /* 0xD0-0xD3 */ + 0xAD, 0x6F, 0xD7, 0xC8, 0xD7, 0xC6, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xD7, 0xC7, 0xDB, 0xD4, 0xDB, 0xD5, /* 0xD8-0xDB */ + 0xE0, 0x43, 0xDB, 0xD3, 0x00, 0x00, 0xDF, 0xFC, /* 0xDC-0xDF */ + 0xE0, 0x41, 0xE0, 0x40, 0xE0, 0x42, 0xB8, 0xD1, /* 0xE0-0xE3 */ + 0xDF, 0xFE, 0xDF, 0xFD, 0xE0, 0x44, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xE4, 0x49, 0xE4, 0x47, 0x00, 0x00, 0xE4, 0x48, /* 0xE8-0xEB */ + 0xE7, 0xD3, 0xE7, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xE7, 0xD2, 0xEB, 0x7D, 0xEE, 0x7C, 0xEE, 0x7D, /* 0xF0-0xF3 */ + 0xC2, 0xD2, 0x00, 0x00, 0xF2, 0xF5, 0xF4, 0xCD, /* 0xF4-0xF7 */ + 0xC4, 0xB2, 0x00, 0x00, 0xF6, 0x4C, 0xF7, 0x55, /* 0xF8-0xFB */ + 0xC5, 0xA9, 0x00, 0x00, 0xF7, 0xFE, 0xF9, 0x4C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8A[512] = { + 0xA8, 0xA5, 0x00, 0x00, 0xAD, 0x71, 0xAD, 0x72, /* 0x00-0x03 */ + 0xD0, 0xB0, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xB1, /* 0x04-0x07 */ + 0xAD, 0x70, 0x00, 0x00, 0xB0, 0x54, 0x00, 0x00, /* 0x08-0x0B */ + 0xB0, 0x52, 0x00, 0x00, 0xB0, 0x51, 0xB0, 0x58, /* 0x0C-0x0F */ + 0xB0, 0x50, 0xB0, 0x59, 0xD3, 0xDD, 0xB0, 0x56, /* 0x10-0x13 */ + 0x00, 0x00, 0xB0, 0x53, 0xB0, 0x57, 0xB0, 0x55, /* 0x14-0x17 */ + 0xB0, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x5F, /* 0x18-0x1B */ + 0x00, 0x00, 0xB3, 0x59, 0xD7, 0xCC, 0xB3, 0x5E, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0x60, 0xB3, 0x5A, /* 0x20-0x23 */ + 0x00, 0x00, 0xB3, 0x5B, 0x00, 0x00, 0xD7, 0xCA, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0x58, 0x00, 0x00, /* 0x28-0x2B */ + 0xD7, 0xCB, 0xB3, 0x5D, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xD7, 0xC9, 0xB3, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0xB6, 0x44, 0x00, 0x00, 0xB6, 0x46, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xDB, 0xD8, 0xB6, 0x45, 0xB5, 0xF9, /* 0x38-0x3B */ + 0xB5, 0xFD, 0x00, 0x00, 0xB8, 0xE4, 0xE0, 0x49, /* 0x3C-0x3F */ + 0xDB, 0xDA, 0xB5, 0xFE, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xDB, 0xDD, 0xDB, 0xDE, 0xB6, 0x43, 0x00, 0x00, /* 0x44-0x47 */ + 0xDB, 0xE0, 0x00, 0x00, 0xDB, 0xE2, 0x00, 0x00, /* 0x48-0x4B */ + 0xDB, 0xE3, 0xDB, 0xD7, 0xDB, 0xD6, 0xDB, 0xE4, /* 0x4C-0x4F */ + 0xB6, 0x42, 0xDB, 0xE1, 0xDB, 0xDF, 0x00, 0x00, /* 0x50-0x53 */ + 0xB6, 0x40, 0xB5, 0xFB, 0xB6, 0x47, 0xDB, 0xDB, /* 0x54-0x57 */ + 0xDB, 0xDC, 0xDB, 0xD9, 0x00, 0x00, 0xB6, 0x41, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xB5, 0xFC, 0x00, 0x00, /* 0x5C-0x5F */ + 0xB5, 0xFA, 0xE0, 0x48, 0xB8, 0xDF, 0xB8, 0xDA, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xB8, 0xD5, 0x00, 0x00, /* 0x64-0x67 */ + 0xB8, 0xE5, 0xB8, 0xD6, 0x00, 0x00, 0xB8, 0xD2, /* 0x68-0x6B */ + 0xB8, 0xE1, 0xB8, 0xDE, 0xB8, 0xE0, 0x00, 0x00, /* 0x6C-0x6F */ + 0xB8, 0xD7, 0xB8, 0xDC, 0xB8, 0xD3, 0xB8, 0xD4, /* 0x70-0x73 */ + 0xE0, 0x50, 0xE0, 0x4D, 0xE0, 0x45, 0xE0, 0x4A, /* 0x74-0x77 */ + 0x00, 0x00, 0xB8, 0xE2, 0xE0, 0x51, 0xB8, 0xE3, /* 0x78-0x7B */ + 0xB8, 0xD9, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x47, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xE0, 0x4F, 0xE0, 0x4B, 0xE0, 0x4E, /* 0x80-0x83 */ + 0xE0, 0x4C, 0xB8, 0xDD, 0xE0, 0x46, 0xB8, 0xD8, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x4C, /* 0x88-0x8B */ + 0xBB, 0x78, 0xBB, 0x7B, 0x00, 0x00, 0xE4, 0x4E, /* 0x8C-0x8F */ + 0x00, 0x00, 0xBB, 0xA5, 0xE4, 0x4D, 0xBB, 0x7D, /* 0x90-0x93 */ + 0x00, 0x00, 0xBD, 0xCF, 0xE4, 0x4F, 0x00, 0x00, /* 0x94-0x97 */ + 0xBB, 0xA4, 0xE4, 0x4B, 0xBB, 0xA6, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xBB, 0x79, 0x00, 0x00, /* 0x9C-0x9F */ + 0xB8, 0xDB, 0xBB, 0x7C, 0x00, 0x00, 0xBB, 0x7A, /* 0xA0-0xA3 */ + 0xBB, 0x7E, 0xBB, 0xA2, 0xBB, 0x77, 0xBB, 0xA7, /* 0xA4-0xA7 */ + 0xBB, 0xA3, 0x00, 0x00, 0xBB, 0xA1, 0xE4, 0x4A, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0xBD, 0xD6, 0x00, 0x00, 0xBD, 0xD2, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xBD, 0xD9, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xE7, 0xD6, 0xBD, 0xDA, 0xE7, 0xE2, 0xE7, 0xDB, /* 0xB8-0xBB */ + 0xBD, 0xCB, 0xE7, 0xE3, 0xE7, 0xDD, 0xBD, 0xD5, /* 0xBC-0xBF */ + 0xE7, 0xDE, 0x00, 0x00, 0xBD, 0xD4, 0xE7, 0xE1, /* 0xC0-0xC3 */ + 0xBD, 0xCE, 0xE7, 0xDF, 0xE7, 0xD5, 0xBD, 0xCD, /* 0xC4-0xC7 */ + 0xEB, 0xAA, 0xBD, 0xD3, 0x00, 0x00, 0xBD, 0xD0, /* 0xC8-0xCB */ + 0x00, 0x00, 0xBD, 0xD8, 0x00, 0x00, 0xE7, 0xD4, /* 0xCC-0xCF */ + 0x00, 0x00, 0xE7, 0xD8, 0xBD, 0xCC, 0xE7, 0xD7, /* 0xD0-0xD3 */ + 0xE7, 0xD9, 0xE7, 0xDA, 0xBD, 0xD7, 0xE7, 0xDC, /* 0xD4-0xD7 */ + 0xE7, 0xE0, 0xE7, 0xE4, 0x00, 0x00, 0xBD, 0xDB, /* 0xD8-0xDB */ + 0xBF, 0xD2, 0xEB, 0xA5, 0xEB, 0xAB, 0xEB, 0xA8, /* 0xDC-0xDF */ + 0xEB, 0x7E, 0xEB, 0xAC, 0xEB, 0xA1, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xEB, 0xA7, 0x00, 0x00, 0xBF, 0xCD, 0xBF, 0xD3, /* 0xE4-0xE7 */ + 0xEB, 0xAD, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xCF, /* 0xE8-0xEB */ + 0x00, 0x00, 0xBF, 0xD9, 0xBF, 0xD4, 0xEB, 0xAF, /* 0xEC-0xEF */ + 0xEB, 0xA9, 0xBF, 0xD0, 0xEB, 0xA2, 0xBF, 0xDA, /* 0xF0-0xF3 */ + 0xEB, 0xA3, 0xEB, 0xA4, 0xBF, 0xDB, 0xBF, 0xD8, /* 0xF4-0xF7 */ + 0xBD, 0xD1, 0x00, 0x00, 0xBF, 0xCE, 0xEB, 0xB0, /* 0xF8-0xFB */ + 0xBF, 0xDC, 0x00, 0x00, 0xBF, 0xD5, 0xEB, 0xAE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8B[512] = { + 0xBF, 0xD1, 0xBF, 0xD6, 0xBF, 0xD7, 0x00, 0x00, /* 0x00-0x03 */ + 0xC1, 0xC3, 0xEE, 0xA4, 0xEE, 0xAD, 0xEE, 0xAA, /* 0x04-0x07 */ + 0xEE, 0xAC, 0x00, 0x00, 0xC1, 0xC0, 0xEE, 0xA5, /* 0x08-0x0B */ + 0x00, 0x00, 0xEE, 0xAB, 0xC1, 0xBC, 0xEE, 0xA7, /* 0x0C-0x0F */ + 0xC1, 0xC4, 0xEE, 0xA3, 0xEE, 0xA8, 0xEE, 0xAF, /* 0x10-0x13 */ + 0xEB, 0xA6, 0xEE, 0xA9, 0xEE, 0xA2, 0xC1, 0xBD, /* 0x14-0x17 */ + 0xEE, 0xA1, 0xC1, 0xBE, 0xEE, 0xB0, 0xC1, 0xBF, /* 0x18-0x1B */ + 0xEE, 0xAE, 0xC1, 0xC2, 0xEE, 0x7E, 0x00, 0x00, /* 0x1C-0x1F */ + 0xC1, 0xC1, 0x00, 0x00, 0xEE, 0xA6, 0xF0, 0xDC, /* 0x20-0x23 */ + 0xF0, 0xEA, 0xF0, 0xE5, 0xF0, 0xE7, 0xF0, 0xDB, /* 0x24-0x27 */ + 0xC2, 0xD3, 0x00, 0x00, 0xF0, 0xDA, 0xC2, 0xD6, /* 0x28-0x2B */ + 0xC2, 0xD5, 0x00, 0x00, 0xF0, 0xE9, 0xF0, 0xE1, /* 0x2C-0x2F */ + 0xF0, 0xDE, 0xF0, 0xE4, 0x00, 0x00, 0xF0, 0xDD, /* 0x30-0x33 */ + 0x00, 0x00, 0xF0, 0xDF, 0xF0, 0xE8, 0xF0, 0xE6, /* 0x34-0x37 */ + 0x00, 0x00, 0xC2, 0xD4, 0xF0, 0xED, 0xF0, 0xEB, /* 0x38-0x3B */ + 0xF0, 0xE2, 0xF0, 0xEC, 0xF0, 0xE3, 0x00, 0x00, /* 0x3C-0x3F */ + 0xF2, 0xF9, 0xC3, 0xCF, 0xF3, 0x41, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xF6, 0x4F, 0xC3, 0xD6, 0xF0, 0xE0, /* 0x44-0x47 */ + 0xF2, 0xF7, 0xC3, 0xD2, 0xF2, 0xF8, 0xF2, 0xFD, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0xD4, 0xC3, 0xD5, /* 0x4C-0x4F */ + 0xF2, 0xF6, 0xF3, 0x40, 0xF3, 0x42, 0xF2, 0xFA, /* 0x50-0x53 */ + 0xF2, 0xFC, 0xF2, 0xFE, 0xF2, 0xFB, 0xF3, 0x43, /* 0x54-0x57 */ + 0xC3, 0xD1, 0xC3, 0xD7, 0xC3, 0xD3, 0x00, 0x00, /* 0x58-0x5B */ + 0xC3, 0xD0, 0xF4, 0xD0, 0x00, 0x00, 0xC4, 0xB7, /* 0x5C-0x5F */ + 0xF4, 0xCE, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xD2, /* 0x60-0x63 */ + 0x00, 0x00, 0xF4, 0xD3, 0xC4, 0xB5, 0xF4, 0xD4, /* 0x64-0x67 */ + 0xF4, 0xD1, 0x00, 0x00, 0xF4, 0xCF, 0xC4, 0xB8, /* 0x68-0x6B */ + 0xC4, 0xB4, 0xF4, 0xD5, 0x00, 0x00, 0xC4, 0xB6, /* 0x6C-0x6F */ + 0xC4, 0xB3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xC4, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x40, /* 0x74-0x77 */ + 0xF6, 0x4E, 0xF6, 0x4D, 0xF6, 0x50, 0xF6, 0x51, /* 0x78-0x7B */ + 0x00, 0x00, 0xC5, 0x41, 0xF7, 0x56, 0xF7, 0x5B, /* 0x7C-0x7F */ + + 0xC5, 0xAA, 0x00, 0x00, 0xF7, 0x58, 0x00, 0x00, /* 0x80-0x83 */ + 0xF7, 0x57, 0xF7, 0x5A, 0xF7, 0x59, 0x00, 0x00, /* 0x84-0x87 */ + 0xF8, 0x43, 0x00, 0x00, 0xC5, 0xDC, 0xF8, 0x42, /* 0x88-0x8B */ + 0xF8, 0x40, 0x00, 0x00, 0xF8, 0x41, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0xC5, 0xFE, 0xC5, 0xFD, /* 0x90-0x93 */ + 0xF8, 0xC1, 0xF8, 0xC2, 0xC6, 0x40, 0x00, 0x00, /* 0x94-0x97 */ + 0xF9, 0x4D, 0xF9, 0x4E, 0xC6, 0x67, 0x00, 0x00, /* 0x98-0x9B */ + 0xC6, 0x6D, 0x00, 0x00, 0xF9, 0xA9, 0xF9, 0xC8, /* 0x9C-0x9F */ +}; + +static unsigned char u2c_8C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xA6, /* 0x34-0x37 */ + 0x00, 0x00, 0xD7, 0xCD, 0x00, 0x00, 0xD7, 0xCE, /* 0x38-0x3B */ + 0xE0, 0x52, 0xE4, 0x50, 0xE7, 0xE5, 0xC1, 0xC6, /* 0x3C-0x3F */ + 0x00, 0x00, 0xC1, 0xC5, 0xF0, 0xEE, 0xF3, 0x44, /* 0x40-0x43 */ + 0x00, 0x00, 0xF8, 0x44, 0xA8, 0xA7, 0xD3, 0xDE, /* 0x44-0x47 */ + 0xB0, 0x5A, 0xB3, 0x61, 0xE0, 0x54, 0xE0, 0x53, /* 0x48-0x4B */ + 0xBD, 0xDC, 0xE7, 0xE6, 0xBD, 0xDD, 0xEE, 0xB1, /* 0x4C-0x4F */ + 0xC2, 0xD7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0xC6, 0x76, 0xA8, 0xA8, 0xCD, 0xCB, 0xD3, 0xDF, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0x62, 0x00, 0x00, /* 0x58-0x5B */ + 0xD7, 0xCF, 0xD7, 0xD0, 0x00, 0x00, 0xDB, 0xE5, /* 0x5C-0x5F */ + 0x00, 0x00, 0xB6, 0x48, 0xB8, 0xE6, 0x00, 0x00, /* 0x60-0x63 */ + 0xE0, 0x56, 0xE0, 0x55, 0xE0, 0x57, 0x00, 0x00, /* 0x64-0x67 */ + 0xE4, 0x51, 0xE4, 0x52, 0xBB, 0xA8, 0xBF, 0xDD, /* 0x68-0x6B */ + 0xBD, 0xDE, 0xBF, 0xDE, 0x00, 0x00, 0xEE, 0xB5, /* 0x6C-0x6F */ + 0xEE, 0xB2, 0xEE, 0xB4, 0xEE, 0xB3, 0xC1, 0xC7, /* 0x70-0x73 */ + 0x00, 0x00, 0xF0, 0xEF, 0xF3, 0x46, 0xF3, 0x45, /* 0x74-0x77 */ + 0xCB, 0xA4, 0xB0, 0x5C, 0xB0, 0x5B, 0xD3, 0xE0, /* 0x78-0x7B */ + 0x00, 0x00, 0xD7, 0xD1, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xDB, 0xE7, 0xDB, 0xE6, 0xB6, 0x49, 0x00, 0x00, /* 0x80-0x83 */ + 0xE0, 0x59, 0xE0, 0x5A, 0xE0, 0x58, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xB8, 0xE8, 0xB8, 0xE7, 0x00, 0x00, /* 0x88-0x8B */ + 0xBB, 0xAA, 0xBB, 0xA9, 0x00, 0x00, 0xE7, 0xE7, /* 0x8C-0x8F */ + 0xEB, 0xB3, 0xEB, 0xB1, 0xEB, 0xB2, 0xBF, 0xDF, /* 0x90-0x93 */ + 0xEE, 0xB7, 0xEE, 0xB6, 0x00, 0x00, 0xF0, 0xF2, /* 0x94-0x97 */ + 0xF0, 0xF1, 0xF0, 0xF0, 0xF3, 0x47, 0x00, 0x00, /* 0x98-0x9B */ + 0xF9, 0xAA, 0xA8, 0xA9, 0xAD, 0x73, 0x00, 0x00, /* 0x9C-0x9F */ + 0xAD, 0x74, 0xB0, 0x5D, 0xB0, 0x5E, 0xD3, 0xE2, /* 0xA0-0xA3 */ + 0xD3, 0xE1, 0xD7, 0xD2, 0x00, 0x00, 0xB3, 0x68, /* 0xA4-0xA7 */ + 0xB3, 0x66, 0xB3, 0x63, 0xB3, 0x67, 0xB3, 0x65, /* 0xA8-0xAB */ + 0xB3, 0x64, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x4A, /* 0xAC-0xAF */ + 0xDB, 0xEA, 0x00, 0x00, 0xB8, 0xED, 0xB6, 0x4C, /* 0xB0-0xB3 */ + 0xB6, 0x51, 0xDB, 0xEC, 0xB6, 0x53, 0xB6, 0x52, /* 0xB4-0xB7 */ + 0xB6, 0x55, 0xDB, 0xEB, 0xDB, 0xE8, 0xB6, 0x4F, /* 0xB8-0xBB */ + 0xB6, 0x4B, 0xB6, 0x4D, 0xDB, 0xE9, 0xB6, 0x54, /* 0xBC-0xBF */ + 0xB6, 0x50, 0xB6, 0x4E, 0xB8, 0xEF, 0xB8, 0xEE, /* 0xC0-0xC3 */ + 0xB8, 0xEC, 0xB8, 0xF0, 0x00, 0x00, 0xB8, 0xEA, /* 0xC4-0xC7 */ + 0xB8, 0xEB, 0x00, 0x00, 0xB8, 0xE9, 0x00, 0x00, /* 0xC8-0xCB */ + 0xE0, 0x5B, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x54, /* 0xCC-0xCF */ + 0x00, 0x00, 0xBB, 0xAC, 0xBB, 0xAD, 0xBB, 0xAB, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE4, 0x53, 0x00, 0x00, 0xE4, 0x55, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xE7, 0xEA, 0xE7, 0xEC, 0x00, 0x00, /* 0xD8-0xDB */ + 0xBD, 0xE7, 0xE7, 0xED, 0xBD, 0xE0, 0xE7, 0xE9, /* 0xDC-0xDF */ + 0xBD, 0xDF, 0xBD, 0xE9, 0xBD, 0xE5, 0xBD, 0xE6, /* 0xE0-0xE3 */ + 0xBD, 0xE2, 0xE7, 0xE8, 0xBD, 0xE1, 0xE7, 0xEE, /* 0xE4-0xE7 */ + 0xE7, 0xEB, 0x00, 0x00, 0xBD, 0xE8, 0x00, 0x00, /* 0xE8-0xEB */ + 0xBD, 0xE3, 0xBD, 0xE4, 0xEB, 0xB5, 0x00, 0x00, /* 0xEC-0xEF */ + 0xEB, 0xB7, 0xEB, 0xB6, 0x00, 0x00, 0xEB, 0xB8, /* 0xF0-0xF3 */ + 0xBF, 0xE0, 0xEB, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xC1, 0xCB, 0xEE, 0xB8, 0xC1, 0xC8, 0xC1, 0xCC, /* 0xF8-0xFB */ + 0xC1, 0xCA, 0xC1, 0xC9, 0xF0, 0xF3, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8D[512] = { + 0xF0, 0xF6, 0x00, 0x00, 0xF0, 0xF5, 0x00, 0x00, /* 0x00-0x03 */ + 0xF0, 0xF4, 0xC2, 0xD8, 0xF3, 0x48, 0xF3, 0x49, /* 0x04-0x07 */ + 0xC3, 0xD8, 0xF3, 0x4A, 0xC3, 0xD9, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xC4, 0xBA, 0x00, 0x00, 0xC4, 0xB9, /* 0x0C-0x0F */ + 0xF6, 0x52, 0x00, 0x00, 0x00, 0x00, 0xC5, 0x42, /* 0x10-0x13 */ + 0xF6, 0x53, 0xF7, 0x5C, 0xC5, 0xAB, 0xC5, 0xAC, /* 0x14-0x17 */ + 0x00, 0x00, 0xF8, 0x45, 0x00, 0x00, 0xC6, 0x42, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xA8, 0xAA, 0x00, 0x00, 0xB3, 0x6A, 0xB3, 0x69, /* 0x64-0x67 */ + 0xE0, 0x5C, 0xE0, 0x5D, 0x00, 0x00, 0xBB, 0xAE, /* 0x68-0x6B */ + 0xEB, 0xB9, 0xBD, 0xEA, 0xEB, 0xBA, 0xEE, 0xB9, /* 0x6C-0x6F */ + 0xA8, 0xAB, 0x00, 0x00, 0xD0, 0xB2, 0xAD, 0x76, /* 0x70-0x73 */ + 0xAD, 0x75, 0x00, 0x00, 0xD3, 0xE3, 0xB0, 0x5F, /* 0x74-0x77 */ + 0xD3, 0xE4, 0xD7, 0xD5, 0x00, 0x00, 0xD7, 0xD4, /* 0x78-0x7B */ + 0x00, 0x00, 0xD7, 0xD3, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xDB, 0xEE, 0xB6, 0x58, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0xDB, 0xED, 0xB6, 0x57, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0xDB, 0xEF, 0xB6, 0x56, 0x00, 0x00, /* 0x88-0x8B */ + 0xE0, 0x5F, 0xE0, 0x62, 0xE0, 0x60, 0xE0, 0x61, /* 0x8C-0x8F */ + 0xE0, 0x65, 0xE0, 0x5E, 0xE0, 0x66, 0xE0, 0x63, /* 0x90-0x93 */ + 0xE0, 0x64, 0xBB, 0xB0, 0xE4, 0x56, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xBB, 0xAF, 0x00, 0x00, 0xE7, 0xF2, /* 0x98-0x9B */ + 0xE7, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xEB, /* 0x9C-0x9F */ + 0xE7, 0xEF, 0xE7, 0xF1, 0x00, 0x00, 0xBD, 0xEC, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xEB, 0xBB, 0x00, 0x00, 0xEB, 0xBC, /* 0xA4-0xA7 */ + 0xC1, 0xCD, 0x00, 0x00, 0xF3, 0x4C, 0xF3, 0x4E, /* 0xA8-0xAB */ + 0xF3, 0x4B, 0xF3, 0x4D, 0xF4, 0xD6, 0xF6, 0x54, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0x6F, 0xA8, 0xAC, /* 0xB0-0xB3 */ + 0xAD, 0x77, 0xD3, 0xE5, 0xD3, 0xE7, 0xD3, 0xE6, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xD7, 0xD8, 0xB3, 0x6C, 0x00, 0x00, /* 0xB8-0xBB */ + 0xD7, 0xD6, 0x00, 0x00, 0xB3, 0x6B, 0xD7, 0xD9, /* 0xBC-0xBF */ + 0x00, 0x00, 0xD7, 0xDA, 0xD7, 0xD7, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xDB, 0xFB, 0xB6, 0x60, 0xDB, 0xF3, /* 0xC4-0xC7 */ + 0xDB, 0xF9, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x5B, /* 0xC8-0xCB */ + 0xB6, 0x5E, 0xDB, 0xF2, 0xB6, 0x59, 0xDB, 0xF6, /* 0xCC-0xCF */ + 0xE0, 0x6C, 0xB6, 0x5D, 0x00, 0x00, 0xDB, 0xF1, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xDB, 0xF7, 0xDB, 0xF4, 0xDB, 0xFA, /* 0xD4-0xD7 */ + 0xDB, 0xF0, 0xDB, 0xF8, 0xB6, 0x5C, 0xB6, 0x5F, /* 0xD8-0xDB */ + 0xDB, 0xF5, 0xB6, 0x5A, 0x00, 0x00, 0xB8, 0xF2, /* 0xDC-0xDF */ + 0xE0, 0x68, 0xB8, 0xF1, 0xE0, 0x6F, 0xE0, 0x6E, /* 0xE0-0xE3 */ + 0xB8, 0xF8, 0x00, 0x00, 0xB8, 0xF9, 0xE0, 0x70, /* 0xE4-0xE7 */ + 0xB8, 0xF3, 0xE0, 0x6D, 0xB8, 0xF7, 0xE0, 0x72, /* 0xE8-0xEB */ + 0xE0, 0x69, 0x00, 0x00, 0xE0, 0x6B, 0xB8, 0xF4, /* 0xEC-0xEF */ + 0xE0, 0x67, 0xE0, 0x6A, 0xE0, 0x71, 0xB8, 0xF5, /* 0xF0-0xF3 */ + 0xE0, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0x00, 0x00, 0xB8, 0xF6, 0x00, 0x00, /* 0xF8-0xFB */ + 0xBB, 0xB1, 0xE4, 0x5B, 0xE4, 0x61, 0xE4, 0x59, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8E[512] = { + 0xE4, 0x62, 0x00, 0x00, 0xE4, 0x58, 0xE4, 0x5D, /* 0x00-0x03 */ + 0xE4, 0x63, 0xE4, 0x60, 0xE4, 0x5F, 0xE4, 0x5E, /* 0x04-0x07 */ + 0x00, 0x00, 0xE4, 0x57, 0xE4, 0x5C, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0xE4, 0x5A, 0x00, 0x00, 0xBD, 0xF1, /* 0x0C-0x0F */ + 0xBD, 0xEE, 0xE7, 0xFB, 0xE8, 0x41, 0xE8, 0x43, /* 0x10-0x13 */ + 0xE8, 0x40, 0xE7, 0xF8, 0xE7, 0xFA, 0xE8, 0x45, /* 0x14-0x17 */ + 0xE8, 0x42, 0xE7, 0xFC, 0xE8, 0x46, 0xE7, 0xF9, /* 0x18-0x1B */ + 0xE8, 0x44, 0xBD, 0xEF, 0xBD, 0xF5, 0xBD, 0xF3, /* 0x1C-0x1F */ + 0xE7, 0xF3, 0xBD, 0xF4, 0xBD, 0xF0, 0xE7, 0xF4, /* 0x20-0x23 */ + 0xE7, 0xF6, 0xE7, 0xF5, 0xE7, 0xFD, 0xE7, 0xFE, /* 0x24-0x27 */ + 0x00, 0x00, 0xBD, 0xF2, 0x00, 0x00, 0xBD, 0xED, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xE7, 0xF7, 0x00, 0x00, /* 0x2C-0x2F */ + 0xEB, 0xC6, 0xBF, 0xE2, 0x00, 0x00, 0xEB, 0xBD, /* 0x30-0x33 */ + 0xBF, 0xE3, 0xBF, 0xE6, 0xEB, 0xC2, 0x00, 0x00, /* 0x34-0x37 */ + 0xEB, 0xBF, 0xBF, 0xE5, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xEB, 0xC3, 0xEB, 0xC4, 0xEB, 0xBE, 0xEB, 0xC7, /* 0x3C-0x3F */ + 0xEB, 0xC0, 0xEB, 0xC5, 0xBF, 0xE4, 0x00, 0x00, /* 0x40-0x43 */ + 0xBF, 0xE1, 0xEB, 0xC1, 0x00, 0x00, 0xEE, 0xBF, /* 0x44-0x47 */ + 0xC1, 0xD0, 0xC1, 0xCE, 0xC1, 0xD1, 0xC1, 0xCF, /* 0x48-0x4B */ + 0xEE, 0xBE, 0xEE, 0xBB, 0xEE, 0xBA, 0x00, 0x00, /* 0x4C-0x4F */ + 0xEE, 0xBD, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xBC, /* 0x50-0x53 */ + 0xF1, 0x45, 0xC2, 0xDE, 0xF0, 0xFB, 0xF0, 0xFA, /* 0x54-0x57 */ + 0x00, 0x00, 0xC2, 0xD9, 0xF1, 0x41, 0xF1, 0x40, /* 0x58-0x5B */ + 0xF0, 0xF7, 0xF1, 0x43, 0xF0, 0xFC, 0xC2, 0xDD, /* 0x5C-0x5F */ + 0xF0, 0xF9, 0xF1, 0x42, 0xF0, 0xF8, 0xC2, 0xDA, /* 0x60-0x63 */ + 0xC2, 0xDC, 0xF0, 0xFD, 0xC2, 0xDB, 0xF0, 0xFE, /* 0x64-0x67 */ + 0x00, 0x00, 0xF1, 0x44, 0xF3, 0x52, 0x00, 0x00, /* 0x68-0x6B */ + 0xC3, 0xDE, 0xF3, 0x4F, 0x00, 0x00, 0xF3, 0x53, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xC3, 0xDB, 0xF3, 0x51, /* 0x70-0x73 */ + 0xC3, 0xE0, 0x00, 0x00, 0xC3, 0xDD, 0x00, 0x00, /* 0x74-0x77 */ + 0xF3, 0x50, 0x00, 0x00, 0xC3, 0xDF, 0xF3, 0x54, /* 0x78-0x7B */ + 0xC3, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0xC4, 0xBC, 0xC4, 0xBE, 0x00, 0x00, /* 0x80-0x83 */ + 0xF4, 0xD9, 0xC4, 0xBD, 0xF4, 0xD7, 0xC3, 0xDC, /* 0x84-0x87 */ + 0xF4, 0xD8, 0xC4, 0xBB, 0xC5, 0x43, 0xC5, 0x45, /* 0x88-0x8B */ + 0xF6, 0x56, 0xC5, 0x44, 0xF6, 0x55, 0x00, 0x00, /* 0x8C-0x8F */ + 0xF7, 0x61, 0xC5, 0xAD, 0xF7, 0x60, 0xC5, 0xAE, /* 0x90-0x93 */ + 0xF7, 0x5E, 0xF7, 0x5D, 0xF7, 0x62, 0xF7, 0x63, /* 0x94-0x97 */ + 0xF8, 0x46, 0x00, 0x00, 0xF7, 0x5F, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0xF8, 0xC6, 0xF8, 0xC3, 0xF8, 0xC4, /* 0x9C-0x9F */ + 0xF8, 0xC5, 0xC6, 0x5C, 0x00, 0x00, 0xF9, 0x51, /* 0xA0-0xA3 */ + 0xF9, 0x50, 0xF9, 0x4F, 0xF9, 0x70, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xF9, 0xBE, 0xF9, 0xAB, 0xC6, 0x6E, 0xA8, 0xAD, /* 0xA8-0xAB */ + 0xB0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xB8, 0xFA, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0xBD, 0xF6, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xEB, 0xC8, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xC2, 0xDF, 0x00, 0x00, 0xF3, 0x55, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF9, 0xAC, 0xA8, 0xAE, 0xAA, 0xEE, /* 0xC8-0xCB */ + 0xAD, 0x79, 0xAD, 0x78, 0x00, 0x00, 0xB0, 0x63, /* 0xCC-0xCF */ + 0x00, 0x00, 0xD3, 0xE8, 0xB0, 0x61, 0xD3, 0xE9, /* 0xD0-0xD3 */ + 0xB0, 0x62, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xDF, /* 0xD4-0xD7 */ + 0xD7, 0xDB, 0x00, 0x00, 0x00, 0x00, 0xB3, 0x6D, /* 0xD8-0xDB */ + 0xD7, 0xDE, 0xD7, 0xDD, 0xD7, 0xDC, 0xB3, 0x6E, /* 0xDC-0xDF */ + 0xD7, 0xE0, 0xD7, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xDC, 0x43, 0xDC, 0x41, 0xDC, 0x45, /* 0xE4-0xE7 */ + 0xDC, 0x46, 0xDC, 0x4C, 0x00, 0x00, 0xDC, 0x48, /* 0xE8-0xEB */ + 0xDC, 0x4A, 0x00, 0x00, 0xDC, 0x42, 0xDB, 0xFC, /* 0xEC-0xEF */ + 0x00, 0x00, 0xDC, 0x49, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xDC, 0x4B, 0xDC, 0x44, 0xDC, 0x47, 0xDB, 0xFD, /* 0xF4-0xF7 */ + 0xB6, 0x62, 0xDC, 0x40, 0xDB, 0xFE, 0xB6, 0x61, /* 0xF8-0xFB */ + 0xB6, 0x63, 0x00, 0x00, 0xB8, 0xFD, 0xE0, 0x75, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_8F[512] = { + 0xE0, 0x77, 0xE0, 0x76, 0xE0, 0x7B, 0xB8, 0xFB, /* 0x00-0x03 */ + 0x00, 0x00, 0xE0, 0x78, 0xE0, 0x74, 0xE0, 0x79, /* 0x04-0x07 */ + 0xE0, 0x7A, 0xB8, 0xFC, 0xB8, 0xFE, 0xE0, 0x7C, /* 0x08-0x0B */ + 0x00, 0x00, 0xE4, 0x67, 0xE4, 0x66, 0x00, 0x00, /* 0x0C-0x0F */ + 0xE4, 0x64, 0xE4, 0x65, 0xBB, 0xB3, 0xBB, 0xB5, /* 0x10-0x13 */ + 0xBB, 0xB2, 0xBB, 0xB4, 0xE8, 0x4D, 0xE8, 0x4E, /* 0x14-0x17 */ + 0xE8, 0x49, 0x00, 0x00, 0xE8, 0x4A, 0xBD, 0xF8, /* 0x18-0x1B */ + 0xBD, 0xFD, 0xBD, 0xF7, 0xBD, 0xFE, 0xBD, 0xF9, /* 0x1C-0x1F */ + 0xE8, 0x4B, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x4C, /* 0x20-0x23 */ + 0xE8, 0x48, 0xBE, 0x40, 0xBD, 0xFB, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0xBD, 0xFA, 0xBD, 0xFC, 0x00, 0x00, /* 0x28-0x2B */ + 0xE8, 0x47, 0x00, 0x00, 0xEB, 0xCA, 0xBF, 0xE8, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xCC, 0xBF, 0xEA, /* 0x30-0x33 */ + 0xEB, 0xCF, 0xEB, 0xCB, 0xEB, 0xC9, 0xEB, 0xCE, /* 0x34-0x37 */ + 0xBF, 0xE9, 0xEB, 0xCD, 0x00, 0x00, 0xBF, 0xE7, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xC1, 0xD3, 0xC1, 0xD6, /* 0x3C-0x3F */ + 0xEE, 0xC1, 0x00, 0x00, 0xC1, 0xD4, 0xEE, 0xC0, /* 0x40-0x43 */ + 0xC1, 0xD2, 0xC1, 0xD5, 0xF1, 0x46, 0xF1, 0x47, /* 0x44-0x47 */ + 0xF1, 0x48, 0xC2, 0xE0, 0x00, 0x00, 0xF1, 0x49, /* 0x48-0x4B */ + 0x00, 0x00, 0xC2, 0xE1, 0xC3, 0xE2, 0xF3, 0x58, /* 0x4C-0x4F */ + 0xF3, 0x59, 0xF3, 0x57, 0xF3, 0x56, 0xF3, 0x5A, /* 0x50-0x53 */ + 0xC3, 0xE1, 0xF4, 0xDD, 0xF4, 0xDB, 0xF4, 0xDC, /* 0x54-0x57 */ + 0xF4, 0xDE, 0xF4, 0xDA, 0xF4, 0xDF, 0xF6, 0x58, /* 0x58-0x5B */ + 0x00, 0x00, 0xF6, 0x59, 0xF6, 0x57, 0xC5, 0x46, /* 0x5C-0x5F */ + 0xF7, 0x64, 0xC5, 0xAF, 0xF7, 0x65, 0xF8, 0x48, /* 0x60-0x63 */ + 0xF8, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xAF, /* 0x98-0x9B */ + 0xB6, 0x64, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x40, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xB6, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0xBF, 0xEC, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xBF, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xC3, 0xE3, 0xC4, 0x7C, 0xC5, 0x47, /* 0xAC-0xAF */ + 0xA8, 0xB0, 0xB0, 0x64, 0xB9, 0x41, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xF3, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0xA6, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xB1, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xA8, 0xB4, 0xA8, 0xB3, 0xA8, 0xB2, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xCB, 0xA5, 0x00, 0x00, 0xCD, 0xCD, /* 0xC8-0xCB */ + 0x00, 0x00, 0xCD, 0xCF, 0xAA, 0xEF, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0xAA, 0xF1, 0xCD, 0xCC, 0xCD, 0xCE, /* 0xD0-0xD3 */ + 0xAA, 0xF0, 0xCD, 0xD1, 0xCD, 0xD0, 0xCD, 0xD2, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xD0, 0xB6, 0xD0, 0xB4, 0xAD, 0x7C, 0xD0, 0xB3, /* 0xE0-0xE3 */ + 0xAD, 0xA3, 0xAD, 0x7E, 0xAD, 0x7B, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xAD, 0xA4, 0x00, 0x00, 0xAD, 0x7D, 0xAD, 0xA2, /* 0xE8-0xEB */ + 0x00, 0x00, 0xAD, 0xA1, 0xD0, 0xB5, 0x00, 0x00, /* 0xEC-0xEF */ + 0xAD, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xB0, 0x6A, 0xD3, 0xEB, 0xD3, 0xF1, 0xB0, 0x67, /* 0xF4-0xF7 */ + 0xB0, 0x6E, 0x00, 0x00, 0xB0, 0x69, 0xD3, 0xEE, /* 0xF8-0xFB */ + 0xD3, 0xF0, 0xB0, 0x6C, 0xD3, 0xEA, 0xD3, 0xED, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_90[512] = { + 0xB0, 0x68, 0xB0, 0x65, 0xD3, 0xEC, 0xB0, 0x6B, /* 0x00-0x03 */ + 0xD3, 0xEF, 0xB0, 0x6D, 0xB0, 0x66, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD7, 0xE3, /* 0x08-0x0B */ + 0xD7, 0xE6, 0xB3, 0x70, 0x00, 0x00, 0xB3, 0x7A, /* 0x0C-0x0F */ + 0xB3, 0x76, 0xD7, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xB3, 0x7E, 0xB3, 0x77, 0xB3, 0x7C, 0xB3, 0x72, /* 0x14-0x17 */ + 0x00, 0x00, 0xB3, 0x6F, 0xB3, 0x71, 0xB3, 0x7D, /* 0x18-0x1B */ + 0xD7, 0xE5, 0xB3, 0x75, 0xB3, 0x78, 0xB3, 0x74, /* 0x1C-0x1F */ + 0xB3, 0x79, 0xD7, 0xE7, 0xB3, 0x7B, 0xB3, 0x73, /* 0x20-0x23 */ + 0xD7, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xDC, 0x4D, 0xB6, 0x65, 0xDC, 0x4F, /* 0x2C-0x2F */ + 0x00, 0x00, 0xB6, 0x67, 0xB6, 0x69, 0x00, 0x00, /* 0x30-0x33 */ + 0xDC, 0x4E, 0xB6, 0x66, 0xB6, 0x6A, 0x00, 0x00, /* 0x34-0x37 */ + 0xB6, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xB9, 0x47, 0xE0, 0xA3, 0xB9, 0x4F, 0xE0, 0x7E, /* 0x3C-0x3F */ + 0x00, 0x00, 0xB9, 0x50, 0xB9, 0x45, 0x00, 0x00, /* 0x40-0x43 */ + 0xE0, 0xA1, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x4A, /* 0x44-0x47 */ + 0x00, 0x00, 0xE0, 0xA2, 0xB9, 0x43, 0xB9, 0x42, /* 0x48-0x4B */ + 0x00, 0x00, 0xB9, 0x4D, 0xB9, 0x4C, 0xB9, 0x4B, /* 0x4C-0x4F */ + 0xB9, 0x49, 0xB9, 0x4E, 0xE0, 0x7D, 0xB9, 0x44, /* 0x50-0x53 */ + 0xB9, 0x46, 0xB9, 0x48, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xBB, 0xB8, 0xBB, 0xBB, 0x00, 0x00, 0xBB, 0xBF, /* 0x58-0x5B */ + 0xBB, 0xB9, 0xBB, 0xBE, 0xBB, 0xBC, 0x00, 0x00, /* 0x5C-0x5F */ + 0xBB, 0xB7, 0x00, 0x00, 0xBB, 0xBD, 0xBB, 0xBA, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x52, /* 0x64-0x67 */ + 0xBE, 0x43, 0xBE, 0x41, 0x00, 0x00, 0xE8, 0x53, /* 0x68-0x6B */ + 0x00, 0x00, 0xBE, 0x44, 0xBE, 0x42, 0xE8, 0x51, /* 0x6C-0x6F */ + 0xE8, 0x50, 0x00, 0x00, 0xBF, 0xF0, 0xE8, 0x4F, /* 0x70-0x73 */ + 0xBF, 0xEE, 0xBF, 0xED, 0xEB, 0xD0, 0xBE, 0x45, /* 0x74-0x77 */ + 0xBF, 0xEF, 0xEB, 0xD1, 0xBF, 0xF2, 0xEB, 0xD2, /* 0x78-0x7B */ + 0xBF, 0xF1, 0xC1, 0xD8, 0xEE, 0xC3, 0xC1, 0xD7, /* 0x7C-0x7F */ + + 0xC1, 0xDC, 0xC1, 0xDA, 0xC1, 0xDB, 0xC2, 0xE3, /* 0x80-0x83 */ + 0xC1, 0xD9, 0xEE, 0xC2, 0xEB, 0xD3, 0xC2, 0xE2, /* 0x84-0x87 */ + 0xC2, 0xE4, 0x00, 0x00, 0xC3, 0xE4, 0xC3, 0xE5, /* 0x88-0x8B */ + 0x00, 0x00, 0xF4, 0xE0, 0x00, 0x00, 0xC5, 0xDE, /* 0x8C-0x8F */ + 0xC5, 0xDD, 0xA8, 0xB6, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xCA, 0x55, 0xB0, 0x6F, 0x00, 0x00, 0xCA, 0x52, /* 0x94-0x97 */ + 0xCA, 0x53, 0xCA, 0x51, 0x00, 0x00, 0xCA, 0x54, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xCB, 0xAA, 0xCB, 0xA7, /* 0x9C-0x9F */ + 0xCB, 0xAC, 0xCB, 0xA8, 0xA8, 0xB7, 0xA8, 0xBA, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xCB, 0xA9, 0xA8, 0xB9, 0xCB, 0xAB, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0xA8, 0xB8, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xD5, /* 0xAC-0xAF */ + 0xCD, 0xD7, 0xAA, 0xF4, 0xCD, 0xD3, 0xCD, 0xD6, /* 0xB0-0xB3 */ + 0xCD, 0xD4, 0xAA, 0xF2, 0xAA, 0xF5, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xAA, 0xF3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB9, /* 0xBC-0xBF */ + 0x00, 0x00, 0xAD, 0xA7, 0x00, 0x00, 0xAD, 0xA8, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xD0, 0xBB, 0x00, 0x00, 0xD0, 0xBD, /* 0xC4-0xC7 */ + 0xD0, 0xBF, 0x00, 0x00, 0xAD, 0xA5, 0xD0, 0xBE, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0xAD, 0xA6, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xD7, 0xEE, 0xD0, 0xBA, 0xD3, 0xF2, 0xD3, 0xFB, /* 0xD4-0xD7 */ + 0xD3, 0xF9, 0xD3, 0xF4, 0xD3, 0xF5, 0xD3, 0xFA, /* 0xD8-0xDB */ + 0xD3, 0xFC, 0xB0, 0x71, 0x00, 0x00, 0xD3, 0xF7, /* 0xDC-0xDF */ + 0xD3, 0xF3, 0xB0, 0x70, 0xB0, 0x72, 0xD3, 0xF6, /* 0xE0-0xE3 */ + 0xD3, 0xFD, 0xD3, 0xF8, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xB3, 0xA1, 0xD7, 0xF1, 0xD7, 0xE9, 0xD7, 0xEF, /* 0xE8-0xEB */ + 0xD7, 0xF0, 0xB3, 0xA2, 0x00, 0x00, 0xD7, 0xE8, /* 0xEC-0xEF */ + 0xD7, 0xEA, 0xD0, 0xB7, 0xD7, 0xEC, 0xD7, 0xED, /* 0xF0-0xF3 */ + 0xD7, 0xEB, 0xB6, 0x6C, 0x00, 0x00, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xDC, 0x56, 0xEB, 0xD4, 0xDC, 0x57, /* 0xF8-0xFB */ + 0xDC, 0x54, 0xB3, 0xA3, 0xB6, 0x6E, 0xDC, 0x53, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_91[512] = { + 0xDC, 0x59, 0xDC, 0x58, 0xB6, 0x6B, 0xDC, 0x5C, /* 0x00-0x03 */ + 0xDC, 0x52, 0xDC, 0x5B, 0xDC, 0x50, 0xDC, 0x5A, /* 0x04-0x07 */ + 0xDC, 0x55, 0xB6, 0x6D, 0x00, 0x00, 0xE0, 0xAA, /* 0x08-0x0B */ + 0x00, 0x00, 0xE0, 0xA5, 0xE0, 0xAB, 0xE0, 0xA6, /* 0x0C-0x0F */ + 0xE0, 0xA4, 0xE0, 0xA7, 0xB9, 0x51, 0x00, 0x00, /* 0x10-0x13 */ + 0xE0, 0xA9, 0x00, 0x00, 0xE0, 0xA8, 0xB9, 0x52, /* 0x14-0x17 */ + 0xBB, 0xC1, 0xBB, 0xC0, 0xE4, 0x6E, 0xE4, 0x71, /* 0x18-0x1B */ + 0xE4, 0x69, 0xE4, 0x6D, 0xBB, 0xC2, 0xE4, 0x6C, /* 0x1C-0x1F */ + 0xE4, 0x6A, 0xE4, 0x70, 0xE4, 0x6B, 0xE4, 0x68, /* 0x20-0x23 */ + 0xE4, 0x6F, 0x00, 0x00, 0xE8, 0x59, 0xBE, 0x48, /* 0x24-0x27 */ + 0xF1, 0x4A, 0xE8, 0x56, 0xE8, 0x57, 0xE8, 0x55, /* 0x28-0x2B */ + 0xDC, 0x51, 0xBE, 0x47, 0xE8, 0x5A, 0xE8, 0x54, /* 0x2C-0x2F */ + 0xBE, 0x46, 0xBE, 0x49, 0xE8, 0x58, 0xEB, 0xD5, /* 0x30-0x33 */ + 0xBF, 0xF3, 0xEB, 0xD6, 0xEB, 0xD7, 0x00, 0x00, /* 0x34-0x37 */ + 0xEE, 0xC4, 0xC1, 0xDD, 0xF1, 0x4B, 0xF1, 0x4C, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0x4D, 0xF3, 0x5D, /* 0x3C-0x3F */ + 0xF3, 0x5C, 0xF4, 0xE2, 0x00, 0x00, 0xF4, 0xE1, /* 0x40-0x43 */ + 0xF6, 0x5B, 0xF6, 0x5C, 0xF6, 0x5A, 0xF7, 0x66, /* 0x44-0x47 */ + 0xC5, 0xB0, 0xA8, 0xBB, 0xAD, 0xAA, 0xAD, 0xA9, /* 0x48-0x4B */ + 0xB0, 0x75, 0xB0, 0x74, 0xD4, 0x40, 0xD4, 0x41, /* 0x4C-0x4F */ + 0xD3, 0xFE, 0x00, 0x00, 0xB0, 0x73, 0xD7, 0xF5, /* 0x50-0x53 */ + 0x00, 0x00, 0xD7, 0xF6, 0xD7, 0xF2, 0xB3, 0xA4, /* 0x54-0x57 */ + 0xD7, 0xF3, 0x00, 0x00, 0xD7, 0xF4, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x5F, /* 0x5C-0x5F */ + 0xDC, 0x61, 0xDC, 0x5D, 0xDC, 0x60, 0xB6, 0x6F, /* 0x60-0x63 */ + 0xDC, 0x5E, 0xB6, 0x70, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xDD, 0x73, 0xB9, 0x55, 0xB9, 0x54, 0x00, 0x00, /* 0x68-0x6B */ + 0xB9, 0x53, 0x00, 0x00, 0xE0, 0xAC, 0xE0, 0xAD, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x73, 0xE4, 0x75, /* 0x70-0x73 */ + 0xBB, 0xC6, 0xBB, 0xC3, 0x00, 0x00, 0xBB, 0xC5, /* 0x74-0x77 */ + 0xBB, 0xC4, 0xE4, 0x74, 0xE4, 0x72, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xE8, 0x61, 0xE8, 0x5E, 0xE8, 0x5F, 0xBE, 0x4D, /* 0x80-0x83 */ + 0xE8, 0x60, 0xE8, 0x5B, 0xE8, 0x5C, 0xBE, 0x4A, /* 0x84-0x87 */ + 0x00, 0x00, 0xBE, 0x4B, 0xE8, 0x5D, 0xBE, 0x4C, /* 0x88-0x8B */ + 0x00, 0x00, 0xEB, 0xDB, 0x00, 0x00, 0xEB, 0xDC, /* 0x8C-0x8F */ + 0xEB, 0xD9, 0xEB, 0xDA, 0xBF, 0xF4, 0xEB, 0xD8, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0xEE, 0xC8, 0xEE, 0xC5, 0xEE, 0xC7, /* 0x98-0x9B */ + 0xC1, 0xE0, 0xEE, 0xCB, 0xC1, 0xDF, 0xEE, 0xC9, /* 0x9C-0x9F */ + 0xEE, 0xCC, 0xEE, 0xCA, 0xEE, 0xC6, 0xC1, 0xDE, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xF1, 0x4F, 0x00, 0x00, 0xF1, 0x50, /* 0xA4-0xA7 */ + 0xF1, 0x4E, 0x00, 0x00, 0xF1, 0x52, 0xC2, 0xE5, /* 0xA8-0xAB */ + 0xC2, 0xE6, 0xF3, 0x5F, 0xC3, 0xE7, 0xF1, 0x51, /* 0xAC-0xAF */ + 0xF3, 0x5E, 0xC3, 0xE6, 0xF4, 0xE5, 0xF4, 0xE6, /* 0xB0-0xB3 */ + 0xC4, 0xBF, 0xF4, 0xE4, 0x00, 0x00, 0xF4, 0xE3, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xF6, 0x5D, 0xC5, 0x48, 0x00, 0x00, /* 0xB8-0xBB */ + 0xF8, 0x49, 0xF8, 0xC8, 0xF8, 0xC7, 0x00, 0x00, /* 0xBC-0xBF */ + 0xC6, 0x43, 0xC6, 0x5D, 0xF8, 0xC9, 0xF9, 0x71, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xC6, 0x6F, 0xA8, 0xBC, 0xAA, 0xF6, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xB9, 0x56, 0x00, 0x00, 0xC4, 0xC0, /* 0xC8-0xCB */ + 0xA8, 0xBD, 0xAD, 0xAB, 0xB3, 0xA5, 0xB6, 0x71, /* 0xCC-0xCF */ + 0xC2, 0xE7, 0xAA, 0xF7, 0x00, 0x00, 0xD0, 0xC1, /* 0xD0-0xD3 */ + 0xD0, 0xC0, 0xD4, 0x42, 0x00, 0x00, 0xB0, 0x78, /* 0xD4-0xD7 */ + 0xB0, 0x76, 0xB0, 0x7A, 0xD4, 0x44, 0x00, 0x00, /* 0xD8-0xDB */ + 0xB0, 0x79, 0xB0, 0x77, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xD4, 0x43, 0xB3, 0xA8, /* 0xE0-0xE3 */ + 0xD7, 0xFC, 0x00, 0x00, 0xB3, 0xA7, 0xB3, 0xA9, /* 0xE4-0xE7 */ + 0xD8, 0x42, 0xB3, 0xAB, 0xD7, 0xFE, 0xD8, 0x40, /* 0xE8-0xEB */ + 0xD7, 0xF7, 0xB3, 0xAA, 0xD8, 0x43, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xD7, 0xF9, 0x00, 0x00, 0xD7, 0xFA, /* 0xF0-0xF3 */ + 0xD7, 0xF8, 0xB3, 0xA6, 0x00, 0x00, 0xD8, 0x41, /* 0xF4-0xF7 */ + 0xD7, 0xFB, 0xD7, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xDC, 0x6D, 0x00, 0x00, 0xDC, 0x6C, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_92[512] = { + 0xDC, 0x6A, 0xDC, 0x62, 0xDC, 0x71, 0xDC, 0x65, /* 0x00-0x03 */ + 0xDC, 0x6F, 0xDC, 0x76, 0xDC, 0x6E, 0xB6, 0x79, /* 0x04-0x07 */ + 0x00, 0x00, 0xB6, 0x75, 0xDC, 0x63, 0x00, 0x00, /* 0x08-0x0B */ + 0xDC, 0x69, 0xB6, 0x77, 0x00, 0x00, 0xDC, 0x68, /* 0x0C-0x0F */ + 0xB6, 0x78, 0xB6, 0x7A, 0xDC, 0x6B, 0x00, 0x00, /* 0x10-0x13 */ + 0xB6, 0x72, 0xB6, 0x73, 0xDC, 0x77, 0xDC, 0x75, /* 0x14-0x17 */ + 0x00, 0x00, 0xDC, 0x74, 0xDC, 0x66, 0x00, 0x00, /* 0x18-0x1B */ + 0xDC, 0x72, 0x00, 0x00, 0xB6, 0x76, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0x74, /* 0x20-0x23 */ + 0xDC, 0x73, 0xDC, 0x64, 0xDC, 0x67, 0xDC, 0x70, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xE4, 0xBA, 0xE0, 0xB7, 0x00, 0x00, /* 0x2C-0x2F */ + 0xE0, 0xB0, 0xE0, 0xC3, 0xE0, 0xCC, 0xE0, 0xB3, /* 0x30-0x33 */ + 0xB9, 0x61, 0x00, 0x00, 0xE0, 0xC0, 0xB9, 0x57, /* 0x34-0x37 */ + 0xB9, 0x59, 0xB9, 0x65, 0xE0, 0xB1, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xB9, 0x5A, 0xB9, 0x5C, 0xB9, 0x66, /* 0x3C-0x3F */ + 0xB9, 0x5B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0xB9, 0x64, 0xE0, 0xB9, 0x00, 0x00, /* 0x44-0x47 */ + 0xE0, 0xAE, 0xB9, 0x62, 0xE0, 0xB8, 0xB9, 0x5E, /* 0x48-0x4B */ + 0xE0, 0xCA, 0xB9, 0x63, 0xE0, 0xC8, 0xE0, 0xBC, /* 0x4C-0x4F */ + 0xE0, 0xC6, 0xB9, 0x60, 0xE0, 0xAF, 0xE0, 0xC9, /* 0x50-0x53 */ + 0xE0, 0xC4, 0x00, 0x00, 0xE0, 0xCB, 0xB9, 0x58, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0x67, 0xB9, 0x5D, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xB5, 0x00, 0x00, /* 0x5C-0x5F */ + 0xE0, 0xBD, 0xE0, 0xC1, 0x00, 0x00, 0xE0, 0xC5, /* 0x60-0x63 */ + 0xB9, 0x5F, 0xE0, 0xB4, 0xE0, 0xB2, 0xE0, 0xBE, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE0, 0xBB, 0xE0, 0xBA, 0x00, 0x00, 0xE0, 0xBF, /* 0x6C-0x6F */ + 0xE0, 0xC2, 0x00, 0x00, 0xE0, 0xC7, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0x78, 0x00, 0x00, /* 0x74-0x77 */ + 0xBB, 0xC7, 0xE4, 0xA4, 0xE4, 0x7A, 0xBB, 0xCC, /* 0x78-0x7B */ + 0xBB, 0xD0, 0xE4, 0xAD, 0xE4, 0xB5, 0xE4, 0xA6, /* 0x7C-0x7F */ + + 0xBB, 0xC8, 0x00, 0x00, 0xE4, 0xAA, 0xE0, 0xB6, /* 0x80-0x83 */ + 0x00, 0x00, 0xBB, 0xC9, 0xE4, 0xB1, 0xE4, 0xB6, /* 0x84-0x87 */ + 0xE4, 0xAE, 0x00, 0x00, 0xE4, 0xB0, 0xE4, 0xB9, /* 0x88-0x8B */ + 0xE4, 0xB2, 0xE4, 0x7E, 0xE4, 0xA9, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xBB, 0xD1, 0x00, 0x00, 0xBB, 0xCD, /* 0x90-0x93 */ + 0xE4, 0x7C, 0xE4, 0xAB, 0xBB, 0xCB, 0xE4, 0xA5, /* 0x94-0x97 */ + 0xBB, 0xCA, 0xE4, 0xB3, 0xE4, 0xA2, 0xE4, 0x79, /* 0x98-0x9B */ + 0xBB, 0xCE, 0xE4, 0xB8, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xE4, 0x7B, 0xE4, 0xAF, 0xE4, 0xAC, 0xE4, 0xA7, /* 0xA0-0xA3 */ + 0xE4, 0x77, 0xE4, 0x76, 0xE4, 0xA1, 0xE4, 0xB4, /* 0xA4-0xA7 */ + 0xBB, 0xCF, 0xE4, 0xB7, 0xE4, 0x7D, 0xE4, 0xA3, /* 0xA8-0xAB */ + 0xBE, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0xBE, 0x5A, 0xBE, 0x55, /* 0xB0-0xB3 */ + 0xE8, 0xA4, 0xE8, 0xA1, 0xE8, 0x67, 0xBE, 0x50, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xF9, 0xD7, 0x00, 0x00, 0xBE, 0x4F, /* 0xB8-0xBB */ + 0xBE, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xE8, 0x65, 0xBE, 0x54, 0xE8, 0x71, 0xE8, 0x63, /* 0xC0-0xC3 */ + 0xE8, 0x64, 0xBE, 0x4E, 0xE8, 0xA3, 0xBE, 0x58, /* 0xC4-0xC7 */ + 0xE8, 0x74, 0xE8, 0x79, 0xE8, 0x73, 0xEB, 0xEE, /* 0xC8-0xCB */ + 0xE8, 0x6F, 0xE8, 0x77, 0xE8, 0x75, 0xE8, 0x68, /* 0xCC-0xCF */ + 0xE8, 0x62, 0xE8, 0x7D, 0xBE, 0x57, 0xE8, 0x7E, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xE8, 0x78, 0x00, 0x00, 0xE8, 0x6D, /* 0xD4-0xD7 */ + 0xE8, 0x6B, 0xE8, 0x66, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0xE8, 0x6E, 0xE8, 0x7B, 0xE8, 0x6A, /* 0xDC-0xDF */ + 0xE8, 0x7A, 0xE8, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xBE, 0x53, 0x00, 0x00, 0xE8, 0x76, 0xE8, 0x7C, /* 0xE4-0xE7 */ + 0xE8, 0x72, 0xE8, 0x6C, 0xBE, 0x51, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xA8, 0xE8, 0x70, /* 0xEC-0xEF */ + 0xBE, 0x59, 0xE8, 0x69, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0xF4, /* 0xF4-0xF7 */ + 0xBF, 0xF7, 0xEB, 0xF3, 0xEB, 0xF0, 0xEC, 0x44, /* 0xF8-0xFB */ + 0xBF, 0xFB, 0x00, 0x00, 0xEC, 0x41, 0xEB, 0xF8, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_93[512] = { + 0xEC, 0x43, 0xEB, 0xE9, 0xEB, 0xF6, 0x00, 0x00, /* 0x00-0x03 */ + 0xBF, 0xFD, 0x00, 0x00, 0xEB, 0xE1, 0x00, 0x00, /* 0x04-0x07 */ + 0xEB, 0xDF, 0xEC, 0x42, 0x00, 0x00, 0xEC, 0x40, /* 0x08-0x0B */ + 0xEB, 0xFE, 0xEB, 0xED, 0xEB, 0xEC, 0xEB, 0xE2, /* 0x0C-0x0F */ + 0xC0, 0x40, 0x00, 0x00, 0xEB, 0xE8, 0xEB, 0xF2, /* 0x10-0x13 */ + 0xEB, 0xFD, 0xC0, 0x43, 0xEC, 0x45, 0x00, 0x00, /* 0x14-0x17 */ + 0xC1, 0xE8, 0xC0, 0x45, 0xBF, 0xFE, 0xEB, 0xE6, /* 0x18-0x1B */ + 0x00, 0x00, 0xEB, 0xEF, 0xEB, 0xDE, 0xEB, 0xE0, /* 0x1C-0x1F */ + 0xBF, 0xF5, 0xC0, 0x42, 0xBF, 0xFA, 0xEB, 0xE7, /* 0x20-0x23 */ + 0xEB, 0xF7, 0xEB, 0xF1, 0xC0, 0x41, 0xEB, 0xDD, /* 0x24-0x27 */ + 0xC1, 0xE3, 0xEB, 0xF9, 0xEB, 0xFC, 0xBF, 0xFC, /* 0x28-0x2B */ + 0x00, 0x00, 0xEB, 0xEB, 0xC0, 0x44, 0xBF, 0xF9, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBF, 0xF8, /* 0x30-0x33 */ + 0xEB, 0xF5, 0xEB, 0xFB, 0xBF, 0xF6, 0x00, 0x00, /* 0x34-0x37 */ + 0xEB, 0xE4, 0xEB, 0xFA, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0xEB, 0xE5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xEB, 0xEA, 0xEE, 0xD2, /* 0x44-0x47 */ + 0x00, 0x00, 0xEE, 0xD7, 0xC1, 0xE5, 0xC1, 0xE7, /* 0x48-0x4B */ + 0xEE, 0xDD, 0xC1, 0xE1, 0xEE, 0xEC, 0xEE, 0xE3, /* 0x4C-0x4F */ + 0xEE, 0xD8, 0xEE, 0xD9, 0xEE, 0xE2, 0x00, 0x00, /* 0x50-0x53 */ + 0xC1, 0xEE, 0xEE, 0xE1, 0xEE, 0xD1, 0xEE, 0xE0, /* 0x54-0x57 */ + 0xEE, 0xD4, 0xEE, 0xED, 0xC1, 0xED, 0xC1, 0xEB, /* 0x58-0x5B */ + 0xEE, 0xD5, 0x00, 0x00, 0xEE, 0xE8, 0x00, 0x00, /* 0x5C-0x5F */ + 0xEE, 0xDA, 0xEE, 0xE7, 0x00, 0x00, 0xEE, 0xE9, /* 0x60-0x63 */ + 0xEE, 0xD0, 0xC1, 0xE6, 0x00, 0x00, 0xEE, 0xEA, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xEE, 0xDE, 0x00, 0x00, /* 0x68-0x6B */ + 0xC1, 0xEA, 0xEE, 0xDB, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0xC1, 0xEC, 0xEE, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xC1, 0xE4, 0xEE, 0xD6, 0xEE, 0xE5, /* 0x74-0x77 */ + 0x00, 0x00, 0xEE, 0xDF, 0xEB, 0xE3, 0xEE, 0xE6, /* 0x78-0x7B */ + 0xEE, 0xD3, 0x00, 0x00, 0xC1, 0xE9, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xEE, 0xEB, 0x00, 0x00, 0xC1, 0xE2, 0xEE, 0xCE, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xF1, 0x60, 0xF1, 0x59, 0xC2, 0xE9, 0x00, 0x00, /* 0x88-0x8B */ + 0xF1, 0x54, 0xF1, 0x63, 0xF1, 0x5B, 0xEE, 0xDC, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF1, 0x65, 0xF1, 0x55, 0x00, 0x00, /* 0x90-0x93 */ + 0xC2, 0xE8, 0xF1, 0x5F, 0xC2, 0xEA, 0xC2, 0xF2, /* 0x94-0x97 */ + 0xC2, 0xF0, 0xF1, 0x61, 0xC2, 0xF1, 0xF1, 0x57, /* 0x98-0x9B */ + 0x00, 0x00, 0xF1, 0x58, 0xF1, 0x5D, 0xF1, 0x62, /* 0x9C-0x9F */ + 0x00, 0x00, 0xEE, 0xCD, 0xC2, 0xEB, 0xF1, 0x6A, /* 0xA0-0xA3 */ + 0xF1, 0x67, 0xF1, 0x6B, 0xF1, 0x5E, 0xF1, 0x5A, /* 0xA4-0xA7 */ + 0xF1, 0x68, 0xF3, 0x6A, 0xF1, 0x5C, 0x00, 0x00, /* 0xA8-0xAB */ + 0xC2, 0xEE, 0x00, 0x00, 0xC2, 0xED, 0xEE, 0xCF, /* 0xAC-0xAF */ + 0xC2, 0xEF, 0xF1, 0x64, 0xF1, 0x66, 0xC2, 0xEC, /* 0xB0-0xB3 */ + 0xF1, 0x69, 0xF1, 0x53, 0x00, 0x00, 0xF1, 0x56, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0xF3, 0x73, 0x00, 0x00, 0xF3, 0x63, 0xC3, 0xEB, /* 0xC0-0xC3 */ + 0xF3, 0x71, 0x00, 0x00, 0x00, 0x00, 0xF3, 0x61, /* 0xC4-0xC7 */ + 0xC3, 0xEC, 0x00, 0x00, 0xF3, 0x6C, 0x00, 0x00, /* 0xC8-0xCB */ + 0xF3, 0x68, 0xC3, 0xF1, 0xF3, 0x72, 0xF3, 0x62, /* 0xCC-0xCF */ + 0xF3, 0x65, 0xC3, 0xE9, 0xF3, 0x74, 0x00, 0x00, /* 0xD0-0xD3 */ + 0xF3, 0x6D, 0xF3, 0x70, 0xC3, 0xEF, 0xC3, 0xF4, /* 0xD4-0xD7 */ + 0xC3, 0xF2, 0xF3, 0x69, 0xF3, 0x64, 0x00, 0x00, /* 0xD8-0xDB */ + 0xC3, 0xED, 0xC3, 0xEE, 0xF3, 0x60, 0xC3, 0xEA, /* 0xDC-0xDF */ + 0x00, 0x00, 0xC3, 0xE8, 0xC3, 0xF0, 0xF3, 0x6F, /* 0xE0-0xE3 */ + 0xC3, 0xF3, 0x00, 0x00, 0xF3, 0x6B, 0xF3, 0x75, /* 0xE4-0xE7 */ + 0xC3, 0xF5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0xF3, 0x67, 0x00, 0x00, 0xF3, 0x6E, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xF4, 0xF3, 0xF5, 0x42, 0xF4, 0xF5, /* 0xF4-0xF7 */ + 0xF4, 0xFC, 0xF3, 0x66, 0xF4, 0xFA, 0xF4, 0xE9, /* 0xF8-0xFB */ + 0xF5, 0x40, 0xC4, 0xC3, 0xF4, 0xED, 0xF4, 0xFE, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_94[512] = { + 0xF4, 0xF4, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xC2, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0x44, 0xF4, 0xF6, /* 0x04-0x07 */ + 0x00, 0x00, 0xF4, 0xFB, 0xF4, 0xFD, 0xF4, 0xE7, /* 0x08-0x0B */ + 0xF5, 0x41, 0xF4, 0xF2, 0xF4, 0xF7, 0xF4, 0xEB, /* 0x0C-0x0F */ + 0xF4, 0xEF, 0xF5, 0x43, 0xF4, 0xF9, 0xF4, 0xE8, /* 0x10-0x13 */ + 0xF4, 0xEC, 0xF4, 0xEE, 0xF4, 0xF8, 0x00, 0x00, /* 0x14-0x17 */ + 0xC4, 0xC1, 0xF4, 0xF1, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0xF4, 0xEA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xF4, 0xF0, 0xF6, 0x61, 0xF6, 0x66, 0xC5, 0x4F, /* 0x28-0x2B */ + 0xF6, 0x68, 0x00, 0x00, 0xC5, 0x49, 0x00, 0x00, /* 0x2C-0x2F */ + 0xF6, 0x64, 0xF6, 0x6A, 0xC5, 0x4E, 0xC5, 0x4A, /* 0x30-0x33 */ + 0x00, 0x00, 0xC5, 0x4B, 0xF6, 0x60, 0xF6, 0x67, /* 0x34-0x37 */ + 0xC5, 0x4D, 0xF6, 0x65, 0xC5, 0x4C, 0xF6, 0x5F, /* 0x38-0x3B */ + 0xF6, 0x63, 0xF6, 0x62, 0x00, 0x00, 0xF6, 0x5E, /* 0x3C-0x3F */ + 0xF6, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xC5, 0xB1, 0xF7, 0x6D, 0xF7, 0x70, 0xF7, 0x6C, /* 0x44-0x47 */ + 0xF7, 0x6E, 0xF7, 0x6F, 0xF7, 0x69, 0xF7, 0x6A, /* 0x48-0x4B */ + 0xF7, 0x67, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x6B, /* 0x4C-0x4F */ + 0xF7, 0x68, 0xC5, 0xB2, 0xC5, 0xB3, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0xF8, 0x4B, 0x00, 0x00, 0xF8, 0x4D, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0xF8, 0x4C, 0xF8, 0x4E, 0x00, 0x00, /* 0x5C-0x5F */ + 0xC5, 0xE0, 0x00, 0x00, 0xF8, 0x4A, 0xC5, 0xDF, /* 0x60-0x63 */ + 0xC5, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0xF8, 0xCB, 0xF8, 0xCC, 0xC6, 0x44, 0xF8, 0xCA, /* 0x68-0x6B */ + 0x00, 0x00, 0xF9, 0x53, 0xF9, 0x52, 0xF9, 0x54, /* 0x6C-0x6F */ + 0xC6, 0x5F, 0xF9, 0x55, 0xC6, 0x5E, 0xF9, 0x56, /* 0x70-0x73 */ + 0xF9, 0x72, 0xF9, 0x75, 0xF9, 0x74, 0xC6, 0x68, /* 0x74-0x77 */ + 0xF9, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xC6, 0x72, 0xC6, 0x70, 0xC6, 0x71, 0xC6, 0x77, /* 0x7C-0x7F */ + + 0xF9, 0xC0, 0xF9, 0xC1, 0xF9, 0xBF, 0xF9, 0xC9, /* 0x80-0x83 */ +}; + +static unsigned char u2c_95[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAA, 0xF8, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0x44, 0xDC, 0x78, /* 0x78-0x7B */ + 0xE8, 0xA5, 0xF3, 0x76, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xAA, 0xF9, 0x00, 0x00, 0xAD, 0xAC, 0xB0, 0x7B, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xD8, 0x45, 0x00, 0x00, /* 0x84-0x87 */ + 0xD8, 0x46, 0xB3, 0xAC, 0x00, 0x00, 0xB6, 0x7D, /* 0x88-0x8B */ + 0xDC, 0x7A, 0xDC, 0x79, 0xB6, 0xA3, 0xB6, 0x7C, /* 0x8C-0x8F */ + 0xDC, 0x7B, 0xB6, 0x7E, 0xB6, 0xA2, 0xB6, 0xA1, /* 0x90-0x93 */ + 0xB6, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xB9, 0x68, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xD0, /* 0x98-0x9B */ + 0xE0, 0xCE, 0x00, 0x00, 0xE0, 0xCF, 0xE0, 0xCD, /* 0x9C-0x9F */ + 0x00, 0x00, 0xBB, 0xD2, 0x00, 0x00, 0xBB, 0xD5, /* 0xA0-0xA3 */ + 0xBB, 0xD7, 0xBB, 0xD6, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xBB, 0xD3, 0xBB, 0xD4, 0x00, 0x00, 0xE8, 0xA7, /* 0xA8-0xAB */ + 0xE8, 0xA6, 0xBE, 0x5B, 0xE8, 0xA8, 0x00, 0x00, /* 0xAC-0xAF */ + 0xE8, 0xA9, 0xBE, 0x5C, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xEC, 0x4D, 0xEC, 0x4B, 0xEE, 0xF3, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xEC, 0x49, 0xEC, 0x4A, 0xC0, 0x46, /* 0xB8-0xBB */ + 0xEC, 0x46, 0xEC, 0x4E, 0xEC, 0x48, 0xEC, 0x4C, /* 0xBC-0xBF */ + 0xEE, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xEE, 0xF1, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xEE, 0xF2, 0xC1, 0xF3, 0xEE, 0xEE, /* 0xC4-0xC7 */ + 0xC1, 0xF2, 0xEE, 0xF0, 0xC1, 0xEF, 0xC1, 0xF0, /* 0xC8-0xCB */ + 0xC1, 0xF1, 0xEC, 0x47, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0xC2, 0xF5, 0xF1, 0x6E, 0xF1, 0x6C, 0xF1, 0x6D, /* 0xD0-0xD3 */ + 0xC2, 0xF3, 0xC2, 0xF6, 0xC2, 0xF4, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0x77, 0xF3, 0x78, /* 0xD8-0xDB */ + 0xC3, 0xF6, 0x00, 0x00, 0xF5, 0x45, 0xF5, 0x47, /* 0xDC-0xDF */ + 0xF5, 0x46, 0xC4, 0xC4, 0xC5, 0x50, 0xF6, 0x6D, /* 0xE0-0xE3 */ + 0xF6, 0x6C, 0xF6, 0x6B, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char u2c_96[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xAA, 0xFA, 0x00, 0x00, 0xC9, 0xAA, 0x00, 0x00, /* 0x1C-0x1F */ + 0xCA, 0x58, 0xA6, 0xE9, 0xCA, 0x56, 0xCA, 0x59, /* 0x20-0x23 */ + 0xCA, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xCB, 0xAE, 0x00, 0x00, 0xA8, 0xC1, 0x00, 0x00, /* 0x28-0x2B */ + 0xA8, 0xC2, 0xCB, 0xB0, 0xA8, 0xBF, 0xCB, 0xAF, /* 0x2C-0x2F */ + 0xCB, 0xAD, 0xA8, 0xC0, 0xA8, 0xBE, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0xCD, 0xD8, 0xCD, 0xDB, 0xAA, 0xFD, /* 0x38-0x3B */ + 0xCD, 0xDA, 0xCD, 0xD9, 0x00, 0x00, 0xAA, 0xFC, /* 0x3C-0x3F */ + 0xAA, 0xFB, 0x00, 0x00, 0xAB, 0x40, 0xCD, 0xDC, /* 0x40-0x43 */ + 0xAA, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xD0, 0xC6, 0xAD, 0xAE, /* 0x48-0x4B */ + 0xAD, 0xAF, 0xAD, 0xB0, 0xD0, 0xC7, 0xD0, 0xC3, /* 0x4C-0x4F */ + 0xAD, 0xAD, 0xD0, 0xC4, 0x00, 0x00, 0xD0, 0xC5, /* 0x50-0x53 */ + 0xD0, 0xC2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0xB0, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xA1, /* 0x58-0x5B */ + 0xD4, 0x45, 0xB0, 0xA2, 0xB0, 0xA5, 0xD4, 0x46, /* 0x5C-0x5F */ + 0x00, 0x00, 0xB0, 0x7E, 0xB0, 0x7C, 0xB0, 0x7D, /* 0x60-0x63 */ + 0xB0, 0xA3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xB3, 0xAD, 0xD8, 0x49, /* 0x68-0x6B */ + 0xB3, 0xB5, 0xD8, 0x48, 0x00, 0x00, 0xD8, 0x4B, /* 0x6C-0x6F */ + 0xB3, 0xB1, 0xD8, 0x4A, 0xB6, 0xAB, 0xB3, 0xAF, /* 0x70-0x73 */ + 0xB3, 0xB2, 0xB3, 0xAE, 0xB3, 0xB3, 0xB3, 0xB4, /* 0x74-0x77 */ + 0xB3, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0xD8, 0x47, 0xB6, 0xA7, 0xDC, 0x7D, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xDC, 0xA3, 0x00, 0x00, 0x00, 0x00, 0xDC, 0xA2, /* 0x80-0x83 */ + 0xB6, 0xAC, 0xB6, 0xA8, 0xB6, 0xA9, 0xDC, 0x7C, /* 0x84-0x87 */ + 0xDC, 0x7E, 0xDC, 0xA1, 0xB6, 0xA4, 0xB6, 0xA6, /* 0x88-0x8B */ + 0x00, 0x00, 0xB6, 0xAA, 0xB6, 0xA5, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xE0, 0xD3, 0xE0, 0xD1, 0xE0, 0xD2, /* 0x90-0x93 */ + 0xB9, 0x6A, 0xB9, 0x6B, 0x00, 0x00, 0xE0, 0xD4, /* 0x94-0x97 */ + 0xB9, 0x69, 0xBB, 0xD8, 0x00, 0x00, 0xBB, 0xDA, /* 0x98-0x9B */ + 0xBB, 0xD9, 0x00, 0x00, 0xE4, 0xBB, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xE4, 0xBC, 0xE8, 0xAB, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xE8, 0xAA, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x47, /* 0xA4-0xA7 */ + 0xC0, 0x48, 0xEC, 0x4F, 0xC0, 0x49, 0x00, 0x00, /* 0xA8-0xAB */ + 0xEE, 0xF6, 0x00, 0x00, 0xEE, 0xF4, 0x00, 0x00, /* 0xAC-0xAF */ + 0xEE, 0xF5, 0xC1, 0xF4, 0x00, 0x00, 0xF1, 0x6F, /* 0xB0-0xB3 */ + 0xC3, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xC1, 0xF5, 0xAB, 0x41, 0x00, 0x00, 0xB0, 0xA6, /* 0xB8-0xBB */ + 0xD4, 0x47, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x4C, /* 0xBC-0xBF */ + 0xB3, 0xB6, 0xB6, 0xAD, 0xDC, 0xA4, 0xDC, 0xA6, /* 0xC0-0xC3 */ + 0xB6, 0xAF, 0xB6, 0xAE, 0xB6, 0xB0, 0xB6, 0xB1, /* 0xC4-0xC7 */ + 0xDC, 0xA5, 0xB9, 0x6E, 0xB9, 0x6F, 0xB9, 0x6D, /* 0xC8-0xCB */ + 0xBB, 0xDB, 0xB9, 0x6C, 0xE0, 0xD5, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0xBB, 0xDC, 0xE8, 0xAC, /* 0xD0-0xD3 */ + 0xEC, 0x50, 0xC0, 0x4A, 0xC1, 0xF6, 0xF1, 0x70, /* 0xD4-0xD7 */ + 0xF1, 0x74, 0xC2, 0xF9, 0xF1, 0x71, 0xC2, 0xFA, /* 0xD8-0xDB */ + 0xC2, 0xF8, 0xF1, 0x75, 0xC2, 0xFB, 0xF1, 0x73, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF3, 0x79, 0xC2, 0xF7, 0xC3, 0xF8, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xF8, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xAB, 0x42, 0xB3, 0xB8, 0xB3, 0xB7, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB6, 0xB2, /* 0xEC-0xEF */ + 0xDC, 0xA8, 0xDC, 0xA7, 0xB6, 0xB3, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0xE0, 0xD9, 0xB9, 0x73, 0xB9, 0x70, /* 0xF4-0xF7 */ + 0xE0, 0xD8, 0xB9, 0x72, 0xE0, 0xD6, 0xB9, 0x71, /* 0xF8-0xFB */ + 0x00, 0x00, 0xE0, 0xD7, 0x00, 0x00, 0xE4, 0xBD, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_97[512] = { + 0xBB, 0xDD, 0x00, 0x00, 0xE8, 0xAF, 0x00, 0x00, /* 0x00-0x03 */ + 0xBE, 0x5D, 0xE8, 0xAD, 0xBE, 0x5E, 0xBE, 0x5F, /* 0x04-0x07 */ + 0xE8, 0xAE, 0xBE, 0x60, 0x00, 0x00, 0xEC, 0x51, /* 0x08-0x0B */ + 0x00, 0x00, 0xC0, 0x4E, 0xC0, 0x4B, 0xC0, 0x50, /* 0x0C-0x0F */ + 0xEC, 0x53, 0xC0, 0x4C, 0xEC, 0x52, 0xC0, 0x4F, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x4D, 0x00, 0x00, /* 0x14-0x17 */ + 0xEE, 0xF9, 0xEE, 0xFB, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xC1, 0xF7, 0xEE, 0xFA, 0xC1, 0xF8, 0xEE, 0xF8, /* 0x1C-0x1F */ + 0xEE, 0xF7, 0x00, 0x00, 0xF1, 0x77, 0xF1, 0x76, /* 0x20-0x23 */ + 0xC2, 0xFC, 0xF1, 0x78, 0xF3, 0x7E, 0xC3, 0xFA, /* 0x24-0x27 */ + 0xF3, 0x7D, 0xF3, 0x7A, 0xC3, 0xF9, 0xF3, 0x7B, /* 0x28-0x2B */ + 0xF3, 0x7C, 0x00, 0x00, 0xF5, 0x48, 0xF5, 0x49, /* 0x2C-0x2F */ + 0xC4, 0xC5, 0x00, 0x00, 0xC5, 0x53, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xF6, 0x6E, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0xC5, 0x51, 0xC5, 0x52, 0xF6, 0x6F, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xC5, 0xB4, 0xC5, 0xB5, 0xF7, 0x71, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0xC6, 0x45, 0xF8, 0xCF, /* 0x40-0x43 */ + 0xC6, 0x47, 0x00, 0x00, 0xF8, 0xCE, 0xF8, 0xD0, /* 0x44-0x47 */ + 0xC6, 0x46, 0xF9, 0x57, 0x00, 0x00, 0xF9, 0xAD, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xAB, 0x43, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0x74, 0x00, 0x00, /* 0x54-0x57 */ + 0xE4, 0xBE, 0x00, 0x00, 0xE8, 0xB0, 0xC0, 0x51, /* 0x58-0x5B */ + 0xC0, 0x52, 0x00, 0x00, 0xAB, 0x44, 0x00, 0x00, /* 0x5C-0x5F */ + 0xBE, 0x61, 0xC3, 0xFB, 0xAD, 0xB1, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x53, 0x00, 0x00, /* 0x64-0x67 */ + 0xC5, 0xE2, 0xAD, 0xB2, 0xD8, 0x4D, 0x00, 0x00, /* 0x68-0x6B */ + 0xDC, 0xA9, 0x00, 0x00, 0xDC, 0xAB, 0x00, 0x00, /* 0x6C-0x6F */ + 0xDC, 0xAA, 0x00, 0x00, 0xE0, 0xDD, 0xE0, 0xDA, /* 0x70-0x73 */ + 0xB9, 0x75, 0x00, 0x00, 0xB9, 0x76, 0xE0, 0xDB, /* 0x74-0x77 */ + 0xE0, 0xDC, 0x00, 0x00, 0xE4, 0xC0, 0xE4, 0xC5, /* 0x78-0x7B */ + 0xBB, 0xDE, 0xE4, 0xBF, 0xE4, 0xC1, 0xE4, 0xC8, /* 0x7C-0x7F */ + + 0xE4, 0xC3, 0xE4, 0xC7, 0xE4, 0xC4, 0xE4, 0xC2, /* 0x80-0x83 */ + 0xE4, 0xC6, 0xBB, 0xDF, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0xE8, 0xB3, 0x00, 0x00, 0xE8, 0xB1, 0xBE, 0x63, /* 0x88-0x8B */ + 0x00, 0x00, 0xBE, 0x62, 0xE8, 0xB2, 0xBE, 0x64, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0xEC, 0x56, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x55, /* 0x94-0x97 */ + 0xC0, 0x54, 0xEC, 0x54, 0xEE, 0xFC, 0x00, 0x00, /* 0x98-0x9B */ + 0xEE, 0xFE, 0xEF, 0x41, 0xEF, 0x40, 0x00, 0x00, /* 0x9C-0x9F */ + 0xC1, 0xF9, 0xEE, 0xFD, 0xF1, 0xA1, 0xC2, 0xFD, /* 0xA0-0xA3 */ + 0xF1, 0x7D, 0xF1, 0xA2, 0xC2, 0xFE, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xF1, 0x7B, 0x00, 0x00, 0xF1, 0x7E, 0xF1, 0x7C, /* 0xA8-0xAB */ + 0xF1, 0x79, 0xC3, 0x40, 0xF1, 0x7A, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xA1, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xF3, 0xA3, 0xF3, 0xA2, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xF5, 0x4A, 0x00, 0x00, 0xF5, 0x4B, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x70, /* 0xBC-0xBF */ + 0x00, 0x00, 0xC5, 0xB7, 0x00, 0x00, 0xC5, 0xB6, /* 0xC0-0xC3 */ + 0xF8, 0x4F, 0xF8, 0x50, 0xC6, 0x48, 0xF8, 0xD1, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xC6, 0x69, 0x00, 0x00, 0xAD, 0xB3, /* 0xC8-0xCB */ + 0xB6, 0xB4, 0xE4, 0xCA, 0xE4, 0xC9, 0xE8, 0xB5, /* 0xCC-0xCF */ + 0xE8, 0xB4, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFA, /* 0xD0-0xD3 */ + 0xEF, 0x43, 0xEF, 0x42, 0xF1, 0xA5, 0xF1, 0xA3, /* 0xD4-0xD7 */ + 0xF1, 0xA6, 0xF1, 0xA4, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xC3, 0xFC, 0xF3, 0xA4, 0xF3, 0xA5, 0xF3, 0xA6, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF6, 0x71, 0x00, 0x00, 0xF7, 0x72, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xF8, 0xD2, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xAD, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xEC, 0x57, 0xEF, 0x44, 0x00, 0x00, 0xAD, 0xB5, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xBB, 0xE0, 0x00, 0x00, /* 0xF4-0xF7 */ + 0xEC, 0x58, 0xC3, 0x41, 0xF1, 0xA7, 0xC3, 0xFD, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF5, 0x4C, 0xF5, 0x4D, 0xC5, 0x54, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_98[512] = { + 0xF8, 0x51, 0xAD, 0xB6, 0xB3, 0xBB, 0xB3, 0xBC, /* 0x00-0x03 */ + 0xD8, 0x4E, 0xB6, 0xB5, 0xB6, 0xB6, 0xDC, 0xAC, /* 0x04-0x07 */ + 0xB6, 0xB7, 0x00, 0x00, 0xB9, 0x7A, 0x00, 0x00, /* 0x08-0x0B */ + 0xB9, 0x7C, 0xE0, 0xDF, 0xE0, 0xE0, 0xE0, 0xDE, /* 0x0C-0x0F */ + 0xB9, 0x77, 0xB9, 0x78, 0xB9, 0x7B, 0xB9, 0x79, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0xE4, 0xCB, 0xBB, 0xE1, /* 0x14-0x17 */ + 0xBB, 0xE2, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xBC, /* 0x18-0x1B */ + 0xBE, 0x67, 0xE8, 0xB7, 0xE8, 0xB6, 0x00, 0x00, /* 0x1C-0x1F */ + 0xE8, 0xBB, 0xBE, 0x65, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xC0, 0x5B, 0x00, 0x00, 0xE8, 0xB8, 0xE8, 0xBD, /* 0x24-0x27 */ + 0xE8, 0xBA, 0xE8, 0xB9, 0x00, 0x00, 0xBE, 0x66, /* 0x28-0x2B */ + 0x00, 0x00, 0xC0, 0x59, 0x00, 0x00, 0xEC, 0x5A, /* 0x2C-0x2F */ + 0xC0, 0x55, 0x00, 0x00, 0xEC, 0x5B, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0xEC, 0x59, 0x00, 0x00, 0xC0, 0x58, /* 0x34-0x37 */ + 0xC0, 0x56, 0xC0, 0x5A, 0x00, 0x00, 0xC0, 0x57, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0xEF, 0x45, 0x00, 0x00, 0xEF, 0x4A, /* 0x40-0x43 */ + 0xEF, 0x46, 0xEF, 0x49, 0xC1, 0xFB, 0x00, 0x00, /* 0x44-0x47 */ + 0xED, 0xD4, 0xEF, 0x48, 0xEF, 0x47, 0x00, 0x00, /* 0x48-0x4B */ + 0xC3, 0x44, 0xC3, 0x42, 0xC3, 0x45, 0xC3, 0x43, /* 0x4C-0x4F */ + 0xF1, 0xA8, 0xF1, 0xA9, 0xF1, 0xAA, 0xC3, 0x46, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xAA, /* 0x54-0x57 */ + 0xC4, 0x40, 0xF3, 0xA8, 0x00, 0x00, 0xC4, 0x41, /* 0x58-0x5B */ + 0xF3, 0xA7, 0xF3, 0xA9, 0xC3, 0xFE, 0xF5, 0x51, /* 0x5C-0x5F */ + 0xF5, 0x4E, 0x00, 0x00, 0xF5, 0x4F, 0xF5, 0x50, /* 0x60-0x63 */ + 0xF6, 0x72, 0xC5, 0x56, 0x00, 0x00, 0xC5, 0x55, /* 0x64-0x67 */ + 0x00, 0x00, 0xF7, 0x74, 0xF7, 0x73, 0xC5, 0xB8, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC5, 0xE3, /* 0x6C-0x6F */ + 0xC6, 0x49, 0xC6, 0x60, 0xF9, 0x58, 0xF9, 0xAE, /* 0x70-0x73 */ + 0xF9, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xAD, 0xB7, 0xDC, 0xAD, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0xE0, 0xE1, 0xE4, 0xCC, 0xE4, 0xCD, 0xBB, 0xE3, /* 0xAC-0xAF */ + 0x00, 0x00, 0xBB, 0xE4, 0xE8, 0xBE, 0xBE, 0x68, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFC, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xF1, 0xAB, 0x00, 0x00, 0xC3, 0x47, 0xF3, 0xAD, /* 0xB8-0xBB */ + 0xC4, 0x42, 0xF3, 0xAC, 0xF3, 0xAE, 0xF3, 0xAB, /* 0xBC-0xBF */ + 0xF6, 0x75, 0xF5, 0x52, 0xF5, 0x53, 0x00, 0x00, /* 0xC0-0xC3 */ + 0xC4, 0xC6, 0x00, 0x00, 0xF6, 0x74, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xF6, 0x73, 0x00, 0x00, 0xF7, 0x75, /* 0xC8-0xCB */ + 0xF9, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0xB8, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAD, 0xB9, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xB0, 0xA7, 0xD4, 0x48, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xD8, 0x4F, 0x00, 0x00, 0xB6, 0xB8, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xB6, 0xBB, 0xB6, 0xB9, 0xDC, 0xAE, /* 0xE8-0xEB */ + 0x00, 0x00, 0xB6, 0xBD, 0x00, 0x00, 0xB6, 0xBA, /* 0xEC-0xEF */ + 0x00, 0x00, 0x00, 0x00, 0xB6, 0xBC, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xB9, 0x7E, 0x00, 0x00, 0xE0, 0xE2, 0x00, 0x00, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE0, 0xE3, 0xE8, 0xC0, 0x00, 0x00, /* 0xF8-0xFB */ + 0xB9, 0x7D, 0xB9, 0xA1, 0xB9, 0xA2, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_99[512] = { + 0xE4, 0xCF, 0x00, 0x00, 0xE4, 0xCE, 0xBB, 0xE5, /* 0x00-0x03 */ + 0x00, 0x00, 0xBB, 0xE6, 0x00, 0x00, 0xE4, 0xD0, /* 0x04-0x07 */ + 0xE8, 0xBF, 0xBB, 0xE8, 0xBE, 0x69, 0x00, 0x00, /* 0x08-0x0B */ + 0xBB, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xC0, 0x5C, 0xE8, 0xC1, 0xBE, 0x6B, 0xBE, 0x6A, /* 0x10-0x13 */ + 0xE8, 0xC2, 0xE8, 0xC5, 0xE8, 0xC3, 0xE8, 0xC4, /* 0x14-0x17 */ + 0xBE, 0x6C, 0x00, 0x00, 0xC0, 0x61, 0xC0, 0x5F, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x5E, 0xEC, 0x5D, /* 0x1C-0x1F */ + 0x00, 0x00, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0xEC, 0x5C, 0xEF, 0x4B, 0x00, 0x00, 0xEC, 0x5E, /* 0x24-0x27 */ + 0xC0, 0x5D, 0xEC, 0x5F, 0xEF, 0x4E, 0xEF, 0x4C, /* 0x28-0x2B */ + 0xEF, 0x4D, 0xEF, 0x52, 0xC3, 0x4B, 0xEF, 0x51, /* 0x2C-0x2F */ + 0xEF, 0x54, 0xEF, 0x53, 0xEF, 0x50, 0xEF, 0x4F, /* 0x30-0x33 */ + 0x00, 0x00, 0xC1, 0xFD, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xAE, 0x00, 0x00, /* 0x38-0x3B */ + 0xF1, 0xAD, 0xC3, 0x4A, 0xC3, 0x48, 0xC3, 0x49, /* 0x3C-0x3F */ + 0x00, 0x00, 0xF1, 0xAC, 0x00, 0x00, 0xF3, 0xB1, /* 0x40-0x43 */ + 0x00, 0x00, 0xC4, 0x43, 0x00, 0x00, 0xF3, 0xB0, /* 0x44-0x47 */ + 0xF3, 0xAF, 0xC4, 0x44, 0x00, 0x00, 0xF5, 0x58, /* 0x48-0x4B */ + 0xF5, 0x57, 0x00, 0x00, 0xF5, 0x55, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF5, 0x54, 0xC4, 0xC8, 0xC4, 0xC7, 0xF5, 0x59, /* 0x50-0x53 */ + 0xF7, 0x76, 0xC5, 0xB9, 0xF6, 0x77, 0xC5, 0x57, /* 0x54-0x57 */ + 0xF6, 0x76, 0xF5, 0x56, 0x00, 0x00, 0xF7, 0x77, /* 0x58-0x5B */ + 0xC5, 0xE4, 0x00, 0x00, 0xC6, 0x61, 0xF9, 0x59, /* 0x5C-0x5F */ + 0x00, 0x00, 0xF9, 0xB1, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0xAD, 0xBA, 0xD8, 0x50, /* 0x94-0x97 */ + 0xEF, 0x55, 0xAD, 0xBB, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xE4, 0xD2, 0xE4, 0xD1, 0xEC, 0x60, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0xEF, 0x57, 0x00, 0x00, 0xEF, 0x56, /* 0xA0-0xA3 */ + 0x00, 0x00, 0xC3, 0x4C, 0xF3, 0xB2, 0xF3, 0xB3, /* 0xA4-0xA7 */ + 0xC4, 0xC9, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xB2, /* 0xA8-0xAB */ + 0xB0, 0xA8, 0xB6, 0xBF, 0xB6, 0xBE, 0xE0, 0xE4, /* 0xAC-0xAF */ + 0xE0, 0xE6, 0xB9, 0xA4, 0xE0, 0xE5, 0xB9, 0xA3, /* 0xB0-0xB3 */ + 0xB9, 0xA5, 0xE0, 0xE7, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0xE4, 0xD4, 0xE4, 0xD6, 0xE4, 0xD5, /* 0xB8-0xBB */ + 0x00, 0x00, 0xE4, 0xD8, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0xBB, 0xE9, 0xE4, 0xD7, 0xE4, 0xD3, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xD9, /* 0xC4-0xC7 */ + 0x00, 0x00, 0xE8, 0xCC, 0x00, 0x00, 0xE8, 0xCF, /* 0xC8-0xCB */ + 0xE8, 0xD1, 0xE8, 0xC7, 0xE8, 0xCB, 0xE8, 0xC8, /* 0xCC-0xCF */ + 0xBE, 0x6E, 0xBE, 0x71, 0xBE, 0x73, 0xE8, 0xC9, /* 0xD0-0xD3 */ + 0xE8, 0xCA, 0xBE, 0x72, 0xE8, 0xCD, 0xE8, 0xD0, /* 0xD4-0xD7 */ + 0xE8, 0xCE, 0xBE, 0x74, 0x00, 0x00, 0xBE, 0x70, /* 0xD8-0xDB */ + 0xE8, 0xC6, 0xBE, 0x6D, 0x00, 0x00, 0xBE, 0x6F, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0xC0, 0x63, 0xEC, 0x66, /* 0xE0-0xE3 */ + 0xEC, 0x64, 0xEC, 0x63, 0x00, 0x00, 0xEC, 0x69, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xEC, 0x68, 0xEC, 0x67, 0x00, 0x00, /* 0xE8-0xEB */ + 0xEC, 0x62, 0xC0, 0x62, 0xEC, 0x61, 0x00, 0x00, /* 0xEC-0xEF */ + 0xEC, 0x65, 0xC0, 0x64, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0xEF, 0x5A, 0x00, 0x00, 0xEF, 0x5E, 0xEF, 0x5B, /* 0xF4-0xF7 */ + 0xEF, 0x5D, 0xEF, 0x5C, 0xEF, 0x59, 0xEF, 0x5F, /* 0xF8-0xFB */ + 0xEF, 0x62, 0xEF, 0x60, 0xEF, 0x61, 0xC2, 0x40, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9A[512] = { + 0x00, 0x00, 0xC1, 0xFE, 0xEF, 0x58, 0xEF, 0x63, /* 0x00-0x03 */ + 0xF1, 0xB3, 0xF1, 0xB6, 0xF1, 0xB8, 0xF1, 0xB7, /* 0x04-0x07 */ + 0x00, 0x00, 0xF1, 0xB1, 0xF1, 0xB5, 0xF1, 0xB0, /* 0x08-0x0B */ + 0x00, 0x00, 0xF1, 0xB2, 0xC3, 0x4D, 0xF1, 0xAF, /* 0x0C-0x0F */ + 0x00, 0x00, 0xF1, 0xB4, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0xF3, 0xC0, 0xF3, 0xB5, 0xC4, 0x45, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0xC4, 0x46, 0xF3, 0xB4, 0xF3, 0xB9, /* 0x18-0x1B */ + 0xF3, 0xBF, 0xF3, 0xB7, 0xF3, 0xBE, 0x00, 0x00, /* 0x1C-0x1F */ + 0xF3, 0xBB, 0x00, 0x00, 0xF3, 0xBA, 0xF3, 0xBD, /* 0x20-0x23 */ + 0xF3, 0xB8, 0xF3, 0xB6, 0x00, 0x00, 0xF3, 0xBC, /* 0x24-0x27 */ + 0x00, 0x00, 0xF5, 0x60, 0xF5, 0x5E, 0xC4, 0xCA, /* 0x28-0x2B */ + 0xF5, 0x5D, 0xF5, 0x63, 0xF5, 0x61, 0x00, 0x00, /* 0x2C-0x2F */ + 0xC4, 0xCB, 0xF5, 0x5C, 0xF5, 0x5A, 0x00, 0x00, /* 0x30-0x33 */ + 0xF5, 0x5B, 0xC4, 0xCD, 0xF5, 0x5F, 0xC4, 0xCC, /* 0x34-0x37 */ + 0xF5, 0x62, 0xF6, 0x78, 0xF6, 0x7E, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0xF6, 0x79, 0xC5, 0x5B, 0xF6, 0xA1, /* 0x3C-0x3F */ + 0xC5, 0x5A, 0xF6, 0x7D, 0xF6, 0x7C, 0xC5, 0x59, /* 0x40-0x43 */ + 0xF6, 0x7B, 0xC5, 0x58, 0xF6, 0x7A, 0x00, 0x00, /* 0x44-0x47 */ + 0xF7, 0x7D, 0xF7, 0xA1, 0xF7, 0x7E, 0x00, 0x00, /* 0x48-0x4B */ + 0xF7, 0x7B, 0xC5, 0xBB, 0xF7, 0x78, 0xF7, 0x7C, /* 0x4C-0x4F */ + 0xF7, 0xA3, 0x00, 0x00, 0xF7, 0xA2, 0xF7, 0x79, /* 0x50-0x53 */ + 0xF7, 0x7A, 0xC5, 0xBA, 0xF8, 0x52, 0xC5, 0xE7, /* 0x54-0x57 */ + 0x00, 0x00, 0xF8, 0x53, 0xC5, 0xE5, 0xC5, 0xE6, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD3, 0xC6, 0x4A, /* 0x5C-0x5F */ + 0xF9, 0x76, 0x00, 0x00, 0xC6, 0x6A, 0x00, 0x00, /* 0x60-0x63 */ + 0xF9, 0xB3, 0xC6, 0x6B, 0xF9, 0xB4, 0xF9, 0xB5, /* 0x64-0x67 */ + 0xF9, 0xC3, 0xF9, 0xC2, 0xC6, 0x7A, 0xF9, 0xCD, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xB0, 0xA9, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE9, /* 0xA8-0xAB */ + 0x00, 0x00, 0xE0, 0xE8, 0x00, 0x00, 0xBB, 0xEA, /* 0xAC-0xAF */ + 0xBB, 0xEB, 0xE4, 0xDA, 0x00, 0x00, 0xE8, 0xD2, /* 0xB0-0xB3 */ + 0xEC, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x75, /* 0xB4-0xB7 */ + 0xC0, 0x65, 0xEC, 0x6A, 0x00, 0x00, 0xEC, 0x6D, /* 0xB8-0xBB */ + 0xC0, 0x66, 0x00, 0x00, 0xEF, 0x64, 0xEC, 0x6B, /* 0xBC-0xBF */ + 0xF1, 0xB9, 0xC3, 0x4E, 0xF3, 0xC1, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0x66, 0xF5, 0x64, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0x65, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0xF6, 0xA2, 0x00, 0x00, 0xC5, 0x5C, /* 0xCC-0xCF */ + 0xF7, 0xA4, 0xC5, 0xEA, 0xC5, 0xBC, 0xC5, 0xE8, /* 0xD0-0xD3 */ + 0xC5, 0xE9, 0xF8, 0xD4, 0xC6, 0x62, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xB0, 0xAA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0xF1, 0xBA, 0x00, 0x00, 0x00, 0x00, 0xD4, 0x49, /* 0xDC-0xDF */ + 0x00, 0x00, 0xB9, 0xA6, 0x00, 0x00, 0xE4, 0xDB, /* 0xE0-0xE3 */ + 0x00, 0x00, 0x00, 0x00, 0xBB, 0xEC, 0xE4, 0xDC, /* 0xE4-0xE7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xD4, /* 0xE8-0xEB */ + 0xE8, 0xD3, 0xC0, 0x68, 0xBE, 0x76, 0xBE, 0x77, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE8, 0xD7, 0xE8, 0xD6, 0xE8, 0xD5, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0x6E, 0xEC, 0x71, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xEC, 0x70, 0xEC, 0x6F, 0xC0, 0x67, /* 0xF8-0xFB */ + 0xEF, 0x68, 0xEF, 0x66, 0xEF, 0x65, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9B[512] = { + 0x00, 0x00, 0xEF, 0x67, 0x00, 0x00, 0xC3, 0x4F, /* 0x00-0x03 */ + 0xF1, 0xBC, 0xF1, 0xBD, 0xC3, 0x50, 0x00, 0x00, /* 0x04-0x07 */ + 0xF1, 0xBB, 0x00, 0x00, 0xF3, 0xC3, 0xF3, 0xC2, /* 0x08-0x0B */ + 0xF3, 0xC5, 0xC4, 0x47, 0xF3, 0xC4, 0x00, 0x00, /* 0x0C-0x0F */ + 0xF5, 0x67, 0xF5, 0x69, 0xF5, 0x68, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xF6, 0xA3, 0xF6, 0xA6, 0xF6, 0xA4, /* 0x14-0x17 */ + 0xF6, 0xA5, 0xF7, 0xA5, 0xC5, 0xBD, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x54, 0xF8, 0x55, /* 0x1C-0x1F */ + 0xF8, 0x56, 0x00, 0x00, 0xC6, 0x4B, 0xC6, 0x63, /* 0x20-0x23 */ + 0xF9, 0xB6, 0xB0, 0xAB, 0x00, 0x00, 0xBE, 0x78, /* 0x24-0x27 */ + 0xC0, 0x69, 0xF1, 0xBE, 0x00, 0x00, 0xF7, 0xA6, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xC4, 0xD4, 0x4A, /* 0x2C-0x2F */ + 0x00, 0x00, 0xC6, 0x7B, 0xB0, 0xAC, 0xEC, 0x72, /* 0x30-0x33 */ + 0x00, 0x00, 0xF1, 0xBF, 0x00, 0x00, 0xF3, 0xC6, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0xF6, 0xA7, 0xF7, 0xA7, /* 0x38-0x3B */ + 0xB0, 0xAD, 0x00, 0x00, 0xE4, 0xDD, 0xE4, 0xDE, /* 0x3C-0x3F */ + 0x00, 0x00, 0xBB, 0xED, 0xBB, 0xEE, 0xE8, 0xD9, /* 0x40-0x43 */ + 0xBE, 0x7A, 0xBE, 0x79, 0xE8, 0xD8, 0x00, 0x00, /* 0x44-0x47 */ + 0xEF, 0x69, 0x00, 0x00, 0xF1, 0xC0, 0xF1, 0xC2, /* 0x48-0x4B */ + 0xF1, 0xC1, 0xC3, 0x53, 0xC3, 0x52, 0xC3, 0x51, /* 0x4C-0x4F */ + 0x00, 0x00, 0xC5, 0x5E, 0xF6, 0xA8, 0x00, 0x00, /* 0x50-0x53 */ + 0xC5, 0x5D, 0xF7, 0xA9, 0xF7, 0xA8, 0x00, 0x00, /* 0x54-0x57 */ + 0xC6, 0x4C, 0xF8, 0xD5, 0xB3, 0xBD, 0xE0, 0xEA, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xE1, /* 0x5C-0x5F */ + 0xE4, 0xDF, 0xE4, 0xE0, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xE8, 0xE2, 0x00, 0x00, 0xE8, 0xDD, 0xE8, 0xDA, /* 0x64-0x67 */ + 0xE8, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0xE8, 0xE3, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x7C, /* 0x6C-0x6F */ + 0xE8, 0xE0, 0xE8, 0xDC, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0xE8, 0xDB, 0xE8, 0xDF, 0xE8, 0xDE, 0xBE, 0x7B, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0x7D, 0xEC, 0x78, /* 0x78-0x7B */ + 0xEC, 0x76, 0xEC, 0xA1, 0xEC, 0x77, 0x00, 0x00, /* 0x7C-0x7F */ + + 0xEC, 0x73, 0x00, 0x00, 0xEC, 0x79, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0xEC, 0x74, 0xEF, 0x72, 0xEC, 0x75, /* 0x84-0x87 */ + 0xEC, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xEC, 0x7C, 0xC0, 0x6A, 0xEC, 0x7B, 0xEC, 0x7A, /* 0x90-0x93 */ + 0x00, 0x00, 0xEC, 0x7E, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6A, 0xEF, 0x6D, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0x6C, 0x00, 0x00, /* 0x9C-0x9F */ + 0xEF, 0x74, 0xEF, 0x6F, 0xEF, 0x73, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xEF, 0x71, 0xEF, 0x70, 0xEF, 0x6E, 0x00, 0x00, /* 0xA4-0xA7 */ + 0xEF, 0x6B, 0x00, 0x00, 0xC2, 0x43, 0xC2, 0x42, /* 0xA8-0xAB */ + 0x00, 0x00, 0xC2, 0x44, 0xC2, 0x41, 0xEF, 0x75, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0xF1, 0xC8, 0xF1, 0xCB, 0x00, 0x00, /* 0xB4-0xB7 */ + 0xF1, 0xC9, 0xF1, 0xCD, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0xF1, 0xCE, 0x00, 0x00, 0xF1, 0xC6, /* 0xBC-0xBF */ + 0xC3, 0x58, 0xF1, 0xC7, 0x00, 0x00, 0xF1, 0xC5, /* 0xC0-0xC3 */ + 0xF1, 0xCC, 0x00, 0x00, 0xF1, 0xC4, 0xF1, 0xC3, /* 0xC4-0xC7 */ + 0xC3, 0x57, 0xC3, 0x55, 0xC3, 0x54, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xCA, /* 0xD0-0xD3 */ + 0xF3, 0xCF, 0xF3, 0xD5, 0xC4, 0x4A, 0xF3, 0xD0, /* 0xD4-0xD7 */ + 0x00, 0x00, 0xF3, 0xD3, 0xF3, 0xD7, 0xC4, 0x4B, /* 0xD8-0xDB */ + 0xF3, 0xD2, 0x00, 0x00, 0xF3, 0xCA, 0x00, 0x00, /* 0xDC-0xDF */ + 0xF3, 0xC9, 0xF3, 0xD6, 0xF3, 0xCD, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xF3, 0xCB, 0xF3, 0xD4, 0xF3, 0xCC, 0xC4, 0x49, /* 0xE4-0xE7 */ + 0xC4, 0x48, 0x00, 0x00, 0xF3, 0xC7, 0xF3, 0xC8, /* 0xE8-0xEB */ + 0xF3, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0xF3, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF0-0xF3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x6C, /* 0xF4-0xF7 */ + 0xF5, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xF8-0xFB */ + 0x00, 0x00, 0xC3, 0x56, 0x00, 0x00, 0x00, 0x00, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9C[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0xF5, 0x6D, 0xF5, 0x73, 0xF5, 0x71, /* 0x04-0x07 */ + 0xF5, 0x6B, 0xF5, 0x76, 0x00, 0x00, 0xF5, 0x6A, /* 0x08-0x0B */ + 0x00, 0x00, 0xC4, 0xCF, 0xF5, 0x72, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0xF5, 0x6E, 0xC4, 0xCE, /* 0x10-0x13 */ + 0xF5, 0x75, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x74, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0xF6, 0xAB, 0xF6, 0xAA, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0xF6, 0xB1, 0x00, 0x00, 0xF6, 0xAD, /* 0x20-0x23 */ + 0xF6, 0xB0, 0xC5, 0x60, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xF6, 0xAE, 0xF6, 0xAF, 0x00, 0x00, 0xF6, 0xA9, /* 0x28-0x2B */ + 0xF6, 0xAC, 0xC5, 0x5F, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0xC5, 0xBF, 0xF7, 0xB4, 0xF7, 0xAF, /* 0x30-0x33 */ + 0xF7, 0xB3, 0x00, 0x00, 0xF7, 0xB6, 0xF7, 0xB2, /* 0x34-0x37 */ + 0x00, 0x00, 0xF7, 0xAE, 0x00, 0x00, 0xC5, 0xC1, /* 0x38-0x3B */ + 0xF7, 0xB1, 0xF7, 0xB5, 0xC5, 0xC0, 0xF7, 0xAC, /* 0x3C-0x3F */ + 0xF5, 0x70, 0xF7, 0xB0, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0xF7, 0xAD, 0x00, 0x00, 0xF7, 0xAA, 0x00, 0x00, /* 0x44-0x47 */ + 0xF7, 0xAB, 0xC5, 0xBE, 0xF8, 0x5A, 0xF8, 0x5C, /* 0x48-0x4B */ + 0xF8, 0x5F, 0xF8, 0x5B, 0xF8, 0x60, 0x00, 0x00, /* 0x4C-0x4F */ + 0xF8, 0x59, 0x00, 0x00, 0xF8, 0x57, 0x00, 0x00, /* 0x50-0x53 */ + 0xC5, 0xEB, 0xF8, 0x5D, 0xC5, 0xED, 0xC5, 0xEC, /* 0x54-0x57 */ + 0xF8, 0x58, 0xF8, 0x5E, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xDA, 0xC6, 0x4D, /* 0x5C-0x5F */ + 0xF8, 0xDB, 0x00, 0x00, 0xF8, 0xD9, 0xF8, 0xD6, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xD8, 0xF8, 0xD7, /* 0x64-0x67 */ + 0xF9, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0xF9, 0x5C, 0xF9, 0x5B, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0xF9, 0x79, 0x00, 0x00, 0xF9, 0x78, /* 0x70-0x73 */ + 0xF9, 0x77, 0xF9, 0x7A, 0x00, 0x00, 0xC6, 0x73, /* 0x74-0x77 */ + 0xC6, 0x74, 0xF9, 0xCA, 0xF9, 0xCE, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xB3, 0xBE, 0xDC, 0xAF, 0xE0, 0xED, /* 0xE4-0xE7 */ + 0x00, 0x00, 0xB9, 0xA7, 0xE0, 0xEB, 0x00, 0x00, /* 0xE8-0xEB */ + 0x00, 0x00, 0xE0, 0xEC, 0x00, 0x00, 0x00, 0x00, /* 0xEC-0xEF */ + 0x00, 0x00, 0xE4, 0xE2, 0xE4, 0xE3, 0xBB, 0xF1, /* 0xF0-0xF3 */ + 0xBB, 0xEF, 0xE4, 0xE4, 0xBB, 0xF0, 0xE8, 0xE8, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xE8, 0xEB, 0xE8, 0xE5, 0xE8, 0xEC, /* 0xF8-0xFB */ + 0xE8, 0xE4, 0xE8, 0xE6, 0x00, 0x00, 0xE8, 0xE7, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9D[512] = { + 0xE8, 0xEA, 0x00, 0x00, 0x00, 0x00, 0xBE, 0xA1, /* 0x00-0x03 */ + 0xE8, 0xEF, 0xE8, 0xEE, 0xBE, 0x7D, 0xE8, 0xE9, /* 0x04-0x07 */ + 0xE8, 0xED, 0xBE, 0x7E, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xEC, 0xAC, 0x00, 0x00, 0xC0, 0x6F, 0x00, 0x00, /* 0x10-0x13 */ + 0xEC, 0xA7, 0xC0, 0x6B, 0x00, 0x00, 0xEC, 0xA4, /* 0x14-0x17 */ + 0xEC, 0xAA, 0xEC, 0xAD, 0x00, 0x00, 0xC0, 0x70, /* 0x18-0x1B */ + 0x00, 0x00, 0xEC, 0xA9, 0xEC, 0xA6, 0xEC, 0xAE, /* 0x1C-0x1F */ + 0xEC, 0xA5, 0x00, 0x00, 0xEC, 0xAB, 0xC0, 0x6C, /* 0x20-0x23 */ + 0x00, 0x00, 0xEC, 0xA3, 0xC0, 0x6D, 0x00, 0x00, /* 0x24-0x27 */ + 0xC0, 0x6E, 0xEC, 0xA8, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0xEF, 0xA9, 0xEF, 0x7A, 0xEF, 0x7B, /* 0x2C-0x2F */ + 0xEF, 0x7E, 0xEF, 0x7C, 0x00, 0x00, 0xEF, 0x76, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0xEF, 0x79, 0xEF, 0xA5, /* 0x34-0x37 */ + 0xEF, 0x7D, 0x00, 0x00, 0x00, 0x00, 0xC2, 0x45, /* 0x38-0x3B */ + 0x00, 0x00, 0xEF, 0xA7, 0xEF, 0xA4, 0xC2, 0x46, /* 0x3C-0x3F */ + 0xEF, 0xA6, 0xEF, 0x77, 0xEF, 0xA2, 0xEF, 0xA3, /* 0x40-0x43 */ + 0x00, 0x00, 0xEF, 0xA1, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xF1, 0xD2, 0xF1, 0xD4, /* 0x48-0x4B */ + 0xF1, 0xD7, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xD1, /* 0x4C-0x4F */ + 0x00, 0x00, 0xC3, 0x59, 0xF1, 0xD9, 0xF1, 0xD0, /* 0x50-0x53 */ + 0xF1, 0xDA, 0x00, 0x00, 0xF1, 0xD6, 0xF1, 0xD8, /* 0x54-0x57 */ + 0xF1, 0xDC, 0xF1, 0xD5, 0xF1, 0xDD, 0xF1, 0xD3, /* 0x58-0x5B */ + 0xF1, 0xCF, 0xC3, 0x5A, 0x00, 0x00, 0xF1, 0xDB, /* 0x5C-0x5F */ + 0xC3, 0x5B, 0xC4, 0x4D, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x78, /* 0x64-0x67 */ + 0xF3, 0xF1, 0xF3, 0xE8, 0xC4, 0x4F, 0xF3, 0xE4, /* 0x68-0x6B */ + 0xC4, 0x50, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xED, /* 0x6C-0x6F */ + 0xF3, 0xE7, 0xF3, 0xDD, 0xC4, 0x4E, 0xF3, 0xEA, /* 0x70-0x73 */ + 0xF3, 0xE5, 0xF3, 0xE6, 0x00, 0x00, 0xF3, 0xD8, /* 0x74-0x77 */ + 0xF3, 0xDF, 0xF3, 0xEE, 0x00, 0x00, 0xF3, 0xEB, /* 0x78-0x7B */ + 0x00, 0x00, 0xF3, 0xE3, 0x00, 0x00, 0xF3, 0xEF, /* 0x7C-0x7F */ + + 0xF3, 0xDE, 0xF3, 0xD9, 0xF3, 0xEC, 0x00, 0x00, /* 0x80-0x83 */ + 0xF3, 0xDB, 0xF3, 0xE9, 0xF3, 0xE0, 0xF3, 0xF0, /* 0x84-0x87 */ + 0xF3, 0xDC, 0xC4, 0x4C, 0xF3, 0xDA, 0xF3, 0xE1, /* 0x88-0x8B */ + 0xF3, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xF5, 0x7D, 0x00, 0x00, 0xF5, 0x7B, 0x00, 0x00, /* 0x90-0x93 */ + 0xF5, 0xA2, 0x00, 0x00, 0xF5, 0xAE, 0xF5, 0xA5, /* 0x94-0x97 */ + 0xF5, 0x7C, 0xF5, 0x78, 0xF5, 0xA7, 0xF5, 0x7E, /* 0x98-0x9B */ + 0xF5, 0xA3, 0xF5, 0x7A, 0xF5, 0xAA, 0xF5, 0x77, /* 0x9C-0x9F */ + 0xF5, 0xA1, 0xF5, 0xA6, 0xF5, 0xA8, 0xF5, 0xAB, /* 0xA0-0xA3 */ + 0xF5, 0x79, 0x00, 0x00, 0xF5, 0xAF, 0xF5, 0xB0, /* 0xA4-0xA7 */ + 0xF5, 0xA9, 0xF5, 0xAD, 0xF5, 0xA4, 0x00, 0x00, /* 0xA8-0xAB */ + 0xF6, 0xC1, 0xF6, 0xC4, 0x00, 0x00, 0xC5, 0x61, /* 0xAC-0xAF */ + 0x00, 0x00, 0xF6, 0xC3, 0xF6, 0xC8, 0xF6, 0xC6, /* 0xB0-0xB3 */ + 0xC5, 0x62, 0xF6, 0xBD, 0xF6, 0xB3, 0xF6, 0xB2, /* 0xB4-0xB7 */ + 0xC5, 0x64, 0xF6, 0xBF, 0xF6, 0xC0, 0xF6, 0xBC, /* 0xB8-0xBB */ + 0xF6, 0xB4, 0x00, 0x00, 0xF6, 0xB9, 0xF5, 0xAC, /* 0xBC-0xBF */ + 0x00, 0x00, 0xF6, 0xB5, 0xC5, 0x63, 0xF6, 0xBB, /* 0xC0-0xC3 */ + 0x00, 0x00, 0xF6, 0xBA, 0x00, 0x00, 0xF6, 0xB6, /* 0xC4-0xC7 */ + 0xF6, 0xC2, 0x00, 0x00, 0xF6, 0xB7, 0xF7, 0xBB, /* 0xC8-0xCB */ + 0xF6, 0xC5, 0xF6, 0xC7, 0xF6, 0xBE, 0xF6, 0xB8, /* 0xCC-0xCF */ + 0xF7, 0xBC, 0xF7, 0xBE, 0xF7, 0xB8, 0xC5, 0xC2, /* 0xD0-0xD3 */ + 0x00, 0x00, 0xF7, 0xC5, 0xF7, 0xC3, 0xC5, 0xC3, /* 0xD4-0xD7 */ + 0xF7, 0xC2, 0xF7, 0xC1, 0xF7, 0xBA, 0xF7, 0xB7, /* 0xD8-0xDB */ + 0xF7, 0xBD, 0xF7, 0xC6, 0xF7, 0xB9, 0xF7, 0xBF, /* 0xDC-0xDF */ + 0x00, 0x00, 0xF8, 0x69, 0xF8, 0x6E, 0xF8, 0x64, /* 0xE0-0xE3 */ + 0xF8, 0x67, 0xC5, 0xEE, 0xF8, 0x6B, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xF8, 0x72, 0xF7, 0xC0, 0x00, 0x00, 0xF8, 0x65, /* 0xE8-0xEB */ + 0xF8, 0x6F, 0xF8, 0x73, 0xF8, 0x6A, 0xF8, 0x63, /* 0xEC-0xEF */ + 0xF8, 0x6D, 0x00, 0x00, 0xF8, 0x6C, 0xF8, 0x71, /* 0xF0-0xF3 */ + 0xF8, 0x70, 0xF7, 0xC4, 0xF8, 0x68, 0xF8, 0x62, /* 0xF4-0xF7 */ + 0xF8, 0x66, 0xC6, 0x4E, 0xC6, 0x4F, 0xF8, 0x61, /* 0xF8-0xFB */ + 0x00, 0x00, 0xF8, 0xE6, 0xF8, 0xDD, 0xF8, 0xE5, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9E[512] = { + 0xF8, 0xE2, 0xF8, 0xE3, 0xF8, 0xDC, 0xF8, 0xDF, /* 0x00-0x03 */ + 0xF8, 0xE7, 0xF8, 0xE1, 0xF8, 0xE0, 0xF8, 0xDE, /* 0x04-0x07 */ + 0x00, 0x00, 0xF8, 0xE4, 0x00, 0x00, 0xF9, 0x5D, /* 0x08-0x0B */ + 0x00, 0x00, 0xF9, 0x5E, 0x00, 0x00, 0xF9, 0x60, /* 0x0C-0x0F */ + 0xF9, 0x5F, 0xF9, 0x62, 0xF9, 0x61, 0xF9, 0x7C, /* 0x10-0x13 */ + 0xF9, 0x7B, 0xF9, 0xB7, 0x00, 0x00, 0xF9, 0xB8, /* 0x14-0x17 */ + 0x00, 0x00, 0xF9, 0xC5, 0xC6, 0x78, 0xC6, 0x7C, /* 0x18-0x1B */ + 0x00, 0x00, 0xF9, 0xCF, 0xC6, 0x7D, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x33 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x34-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3C-0x3F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x53 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x54-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0xB3, 0xBF, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0xC4, 0xD0, 0xF6, 0xC9, 0x00, 0x00, /* 0x78-0x7B */ + 0xC6, 0x50, 0xC6, 0x51, 0x00, 0x00, 0xB3, 0xC0, /* 0x7C-0x7F */ + + 0xE0, 0xEE, 0x00, 0x00, 0xB9, 0xA8, 0xE8, 0xF0, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0xEC, 0xB0, 0xEC, 0xB1, /* 0x84-0x87 */ + 0xEC, 0xAF, 0xEF, 0xAB, 0xEF, 0xAA, 0xC2, 0x47, /* 0x88-0x8B */ + 0xF1, 0xDF, 0xEF, 0xAC, 0xF1, 0xDE, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0xF3, 0xF3, 0xC4, 0x51, 0xC4, 0x53, /* 0x90-0x93 */ + 0xF3, 0xF2, 0x00, 0x00, 0x00, 0x00, 0xC4, 0x52, /* 0x94-0x97 */ + 0x00, 0x00, 0xF5, 0xB1, 0xF5, 0xB3, 0xF5, 0xB2, /* 0x98-0x9B */ + 0xF6, 0xCA, 0xC5, 0x65, 0x00, 0x00, 0xC5, 0xEF, /* 0x9C-0x9F */ + 0xF8, 0xE8, 0xF9, 0x63, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xF9, 0xD2, 0xB3, 0xC1, 0x00, 0x00, 0xE4, 0xE5, /* 0xA4-0xA7 */ + 0x00, 0x00, 0xBE, 0xA2, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0xEC, 0xB3, 0xEC, 0xB2, 0x00, 0x00, /* 0xAC-0xAF */ + 0xEF, 0xAD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0xC4, 0x54, 0xC4, 0xD1, 0xF7, 0xC7, 0xF9, 0xCB, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xC2, /* 0xB8-0xBB */ + 0xBB, 0xF2, 0x00, 0x00, 0xBE, 0xA3, 0x00, 0x00, /* 0xBC-0xBF */ + 0xF3, 0xF4, 0x00, 0x00, 0xF8, 0x74, 0xB6, 0xC0, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0xEF, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0xC6, 0x64, 0xB6, 0xC1, 0xBE, 0xA4, 0xC2, 0x48, /* 0xCC-0xCF */ + 0xF8, 0x75, 0xB6, 0xC2, 0x00, 0x00, 0xE8, 0xF1, /* 0xD0-0xD3 */ + 0xC0, 0x72, 0xEC, 0xB4, 0xEC, 0xB5, 0x00, 0x00, /* 0xD4-0xD7 */ + 0xC0, 0x71, 0x00, 0x00, 0xEF, 0xAF, 0xC2, 0x4C, /* 0xD8-0xDB */ + 0xC2, 0x4A, 0xC2, 0x4B, 0xC2, 0x49, 0xF1, 0xE0, /* 0xDC-0xDF */ + 0xC3, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xE0-0xE3 */ + 0xF5, 0xB5, 0xF5, 0xB4, 0xF5, 0xB7, 0xF5, 0xB6, /* 0xE4-0xE7 */ + 0xC4, 0xD2, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xCB, /* 0xE8-0xEB */ + 0x00, 0x00, 0xF6, 0xCD, 0xF6, 0xCC, 0xC5, 0x66, /* 0xEC-0xEF */ + 0xF7, 0xC8, 0x00, 0x00, 0xF8, 0x76, 0xF8, 0x77, /* 0xF0-0xF3 */ + 0xC5, 0xF0, 0xF9, 0x64, 0xF9, 0x7D, 0xC6, 0x75, /* 0xF4-0xF7 */ + 0x00, 0x00, 0xDC, 0xB0, 0xEC, 0xB6, 0xEF, 0xB0, /* 0xF8-0xFB */ + 0xF3, 0xF5, 0xE0, 0xEF, 0x00, 0x00, 0xEF, 0xB1, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_9F[512] = { + 0xF1, 0xE2, 0xF1, 0xE1, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0x78, 0xC6, 0x52, /* 0x04-0x07 */ + 0x00, 0x00, 0xF9, 0x65, 0xF9, 0x7E, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0xB9, 0xA9, 0xE8, 0xF2, /* 0x0C-0x0F */ + 0xE8, 0xF3, 0x00, 0x00, 0xEC, 0xB7, 0xB9, 0xAA, /* 0x10-0x13 */ + 0x00, 0x00, 0xC3, 0x5D, 0xF1, 0xE3, 0x00, 0x00, /* 0x14-0x17 */ + 0xF6, 0xCF, 0xC5, 0x67, 0xF6, 0xD0, 0xF6, 0xCE, /* 0x18-0x1B */ + 0xF8, 0x79, 0x00, 0x00, 0xF8, 0xE9, 0x00, 0x00, /* 0x1C-0x1F */ + 0xB9, 0xAB, 0x00, 0x00, 0xEF, 0xB4, 0xEF, 0xB3, /* 0x20-0x23 */ + 0xEF, 0xB2, 0xF1, 0xE4, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0xF1, 0xE8, 0xF1, 0xE7, 0xF1, 0xE6, 0xF1, 0xE5, /* 0x28-0x2B */ + 0xC3, 0x5E, 0xF3, 0xF6, 0xF5, 0xB9, 0xC4, 0xD3, /* 0x2C-0x2F */ + 0xF5, 0xB8, 0xF6, 0xD1, 0xF7, 0xCB, 0xF7, 0xCA, /* 0x30-0x33 */ + 0xC5, 0xC4, 0xF7, 0xC9, 0xF8, 0x7C, 0xF8, 0x7B, /* 0x34-0x37 */ + 0xF8, 0x7A, 0x00, 0x00, 0x00, 0x00, 0xBB, 0xF3, /* 0x38-0x3B */ + 0x00, 0x00, 0xEC, 0xB8, 0xC2, 0x4D, 0x00, 0x00, /* 0x3C-0x3F */ + 0xF3, 0xF7, 0xF3, 0xF8, 0xF7, 0xCC, 0xF8, 0x7D, /* 0x40-0x43 */ + 0x00, 0x00, 0x00, 0x00, 0xF8, 0xEA, 0xF9, 0x66, /* 0x44-0x47 */ + 0xF9, 0xB9, 0xF9, 0xD4, 0xBB, 0xF4, 0xC2, 0x4E, /* 0x48-0x4B */ + 0xF1, 0xE9, 0xF3, 0xF9, 0xF6, 0xD2, 0xF8, 0x7E, /* 0x4C-0x4F */ + 0x00, 0x00, 0x00, 0x00, 0xBE, 0xA6, 0x00, 0x00, /* 0x50-0x53 */ + 0xEF, 0xB5, 0xF1, 0xEA, 0xF3, 0xFA, 0xF3, 0xFB, /* 0x54-0x57 */ + 0xF3, 0xFC, 0xF5, 0xBE, 0x00, 0x00, 0xF5, 0xBA, /* 0x58-0x5B */ + 0xC5, 0x68, 0xF5, 0xBD, 0xF5, 0xBC, 0xC4, 0xD4, /* 0x5C-0x5F */ + 0xF5, 0xBB, 0xC4, 0xD6, 0x00, 0x00, 0xC4, 0xD5, /* 0x60-0x63 */ + 0xF6, 0xD4, 0xF6, 0xD3, 0xC5, 0x69, 0xC5, 0x6A, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xC5, 0xC6, 0xF7, 0xCD, /* 0x68-0x6B */ + 0xC5, 0xC5, 0x00, 0x00, 0xF8, 0xA3, 0xF8, 0xA4, /* 0x6C-0x6F */ + 0xF8, 0xA2, 0xF8, 0xA1, 0xC6, 0x54, 0x00, 0x00, /* 0x70-0x73 */ + 0xF8, 0xEB, 0xF8, 0xEC, 0xF8, 0xED, 0xC6, 0x53, /* 0x74-0x77 */ + 0xF9, 0x67, 0xF9, 0x6A, 0xF9, 0x69, 0xF9, 0x68, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0xF9, 0xD3, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0xC0, 0x73, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0xC3, 0x65, 0xF5, 0xBF, 0xF6, 0xD5, 0x00, 0x00, /* 0x90-0x93 */ + 0xC5, 0xC7, 0xF7, 0xCE, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0xF9, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0xC0, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0xEF, 0xB6, 0x00, 0x00, 0xF7, 0xCF, 0x00, 0x00, /* 0xA0-0xA3 */ + 0xF9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ +}; + +static unsigned char u2c_DC[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ +}; + +static unsigned char u2c_F9[512] = { + 0xB0, 0x5A, 0xA7, 0xF3, 0xA8, 0xAE, 0xB8, 0xEB, /* 0x00-0x03 */ + 0xB7, 0xC6, 0xA6, 0xEA, 0xA5, 0x79, 0xC0, 0x74, /* 0x04-0x07 */ + 0xC0, 0x74, 0xAB, 0xB4, 0xAA, 0xF7, 0xB3, 0xE2, /* 0x08-0x0B */ + 0xA9, 0x60, 0xC3, 0x69, 0xC4, 0xEE, 0xC3, 0xB9, /* 0x0C-0x0F */ + 0xC5, 0xDA, 0xC1, 0xB3, 0xBB, 0x72, 0xC5, 0xDE, /* 0x10-0x13 */ + 0xBC, 0xD6, 0xAC, 0xA5, 0xAF, 0x4F, 0xAF, 0x5F, /* 0x14-0x17 */ + 0xB8, 0xA8, 0xB9, 0x54, 0xC0, 0x64, 0xB6, 0xC3, /* 0x18-0x1B */ + 0xA7, 0x5A, 0xC4, 0xE6, 0xC4, 0xEA, 0xC4, 0xF5, /* 0x1C-0x1F */ + 0xC6, 0x7D, 0xB4, 0x50, 0xC0, 0xDD, 0xC2, 0xC5, /* 0x20-0x23 */ + 0xC4, 0xB0, 0xA9, 0xD4, 0xC3, 0xBE, 0xC4, 0xFA, /* 0x24-0x27 */ + 0xB4, 0x59, 0xAE, 0xD4, 0xAE, 0xF6, 0xAF, 0x54, /* 0x28-0x2B */ + 0x00, 0x00, 0xA8, 0xD3, 0xA7, 0x4E, 0xB3, 0xD2, /* 0x2C-0x2F */ + 0xBE, 0xDB, 0xC3, 0x72, 0xC4, 0x6C, 0xBF, 0x63, /* 0x30-0x33 */ + 0xA6, 0xD1, 0xC4, 0xAA, 0xB8, 0xB8, 0xB8, 0xF4, /* 0x34-0x37 */ + 0xC5, 0x53, 0xBE, 0x7C, 0xC6, 0x4F, 0xB8, 0x4C, /* 0x38-0x3B */ + 0xB8, 0x53, 0xBA, 0xF1, 0xDB, 0x77, 0xBF, 0xFD, /* 0x3C-0x3F */ + 0xB3, 0xC0, 0xBD, 0xD7, 0xC3, 0x62, 0xA7, 0xCB, /* 0x40-0x43 */ + 0xC5, 0xA2, 0xC5, 0xA4, 0xA8, 0x63, 0xBD, 0x55, /* 0x44-0x47 */ + 0xB8, 0xEF, 0xB9, 0x70, 0xC2, 0x53, 0xB9, 0xF0, /* 0x48-0x4B */ + 0xBC, 0xD3, 0xB2, 0x5C, 0xBA, 0x7C, 0xB2, 0xD6, /* 0x4C-0x4F */ + 0xC1, 0x5C, 0xAD, 0xAE, 0xB0, 0xC7, 0xA6, 0xD8, /* 0x50-0x53 */ + 0xBB, 0xFE, 0xAD, 0xE2, 0xB8, 0x57, 0xBA, 0xF0, /* 0x54-0x57 */ + 0xB5, 0xD9, 0xB3, 0xAE, 0xC5, 0xAA, 0xCE, 0xD4, /* 0x58-0x5B */ + 0xBC, 0xD6, 0xBF, 0xD5, 0xA4, 0xA6, 0xB9, 0xE7, /* 0x5C-0x5F */ + 0xAB, 0xE3, 0xB2, 0x76, 0xB2, 0xA7, 0xA5, 0x5F, /* 0x60-0x63 */ + 0xED, 0xA8, 0xAB, 0x4B, 0xB4, 0x5F, 0xA4, 0xA3, /* 0x64-0x67 */ + 0xAA, 0x63, 0xBC, 0xC6, 0xAF, 0xC1, 0xB0, 0xD1, /* 0x68-0x6B */ + 0xB6, 0xEB, 0xAC, 0xD9, 0xB8, 0xAD, 0xBB, 0xA1, /* 0x6C-0x6F */ + 0xB1, 0xFE, 0xA8, 0xB0, 0xA8, 0x48, 0xAC, 0x42, /* 0x70-0x73 */ + 0xAD, 0x59, 0xB1, 0xB0, 0xB2, 0xA4, 0xAB, 0x47, /* 0x74-0x77 */ + 0xA8, 0xE2, 0x00, 0x00, 0xB1, 0xE7, 0xC2, 0xB3, /* 0x78-0x7B */ + 0xA8, 0x7D, 0xBD, 0xCC, 0xB6, 0x71, 0xC0, 0x79, /* 0x7C-0x7F */ + + 0xA7, 0x66, 0xA4, 0x6B, 0xC3, 0x66, 0xAE, 0xC8, /* 0x80-0x83 */ + 0xC2, 0x6F, 0xC4, 0x72, 0xBE, 0x5B, 0xC6, 0x7A, /* 0x84-0x87 */ + 0xC4, 0x52, 0xBE, 0xA4, 0xA4, 0x4F, 0xBE, 0xE4, /* 0x88-0x8B */ + 0xBE, 0xFA, 0xF7, 0x65, 0xA6, 0x7E, 0xBC, 0xA6, /* 0x8C-0x8F */ + 0xC5, 0xCA, 0xBC, 0xBF, 0xBA, 0xA7, 0xB7, 0xD2, /* 0x90-0x93 */ + 0xE6, 0xA3, 0x00, 0x00, 0xBD, 0x6D, 0xC1, 0x70, /* 0x94-0x97 */ + 0xBD, 0xFB, 0xBD, 0xAC, 0xB3, 0x73, 0xC1, 0xE5, /* 0x98-0x9B */ + 0xA6, 0x43, 0xA6, 0x48, 0xAB, 0x7C, 0xAF, 0x50, /* 0x9C-0x9F */ + 0xB5, 0xF5, 0xBB, 0xA1, 0xB7, 0x47, 0xA9, 0xC0, /* 0xA0-0xA3 */ + 0xB1, 0xC9, 0xC0, 0xD4, 0xC3, 0xAE, 0xC2, 0x79, /* 0xA4-0xA7 */ + 0xA5, 0x4F, 0xCB, 0xF1, 0xB9, 0xE7, 0xC0, 0xAD, /* 0xA8-0xAB */ + 0xCC, 0xB0, 0xAC, 0xC2, 0xBC, 0xFC, 0xB2, 0xDC, /* 0xAC-0xAF */ + 0xB2, 0xE2, 0xB9, 0x61, 0xB9, 0x73, 0xC6, 0x46, /* 0xB0-0xB3 */ + 0xBB, 0xE2, 0xA8, 0xD2, 0xC2, 0xA7, 0xC4, 0xBF, /* 0xB4-0xB7 */ + 0xC1, 0xF5, 0xB4, 0x63, 0xA4, 0x46, 0xB9, 0xB1, /* 0xB8-0xBB */ + 0xBC, 0x64, 0xA7, 0xBF, 0xAE, 0xC6, 0xBC, 0xD6, /* 0xBC-0xBF */ + 0xBF, 0x52, 0xC0, 0xF8, 0xE7, 0x64, 0xBF, 0xF1, /* 0xC0-0xC3 */ + 0xC0, 0x73, 0xB7, 0x77, 0xA8, 0xBF, 0xBC, 0x42, /* 0xC4-0xC7 */ + 0xCC, 0xD8, 0xAC, 0x68, 0xAC, 0x79, 0xB7, 0xC8, /* 0xC8-0xCB */ + 0xAF, 0x5B, 0xAF, 0x64, 0xB2, 0xB8, 0xAF, 0xC3, /* 0xCC-0xCF */ + 0xC3, 0xFE, 0xA4, 0xBB, 0xBC, 0xAE, 0xB3, 0xB0, /* 0xD0-0xD3 */ + 0xAD, 0xDB, 0xB1, 0x5B, 0xB2, 0x5F, 0xBD, 0xFC, /* 0xD4-0xD7 */ + 0xAB, 0xDF, 0xB7, 0x58, 0xAE, 0xDF, 0xB2, 0x76, /* 0xD8-0xDB */ + 0xB6, 0xA9, 0xA7, 0x51, 0xA6, 0x4F, 0xBC, 0x69, /* 0xDC-0xDF */ + 0xA9, 0xF6, 0xA7, 0xF5, 0xB1, 0xF9, 0xAA, 0x64, /* 0xE0-0xE3 */ + 0xB2, 0x7A, 0xB5, 0x67, 0xBF, 0xA9, 0x00, 0x00, /* 0xE4-0xE7 */ + 0xB8, 0xCC, 0xA8, 0xBD, 0xC2, 0xF7, 0xB0, 0xCE, /* 0xE8-0xEB */ + 0xB7, 0xC4, 0xA7, 0x5B, 0xBF, 0x4D, 0xBF, 0x5A, /* 0xEC-0xEF */ + 0xC4, 0xA9, 0x00, 0x00, 0xC5, 0xEC, 0xC5, 0xEF, /* 0xF0-0xF3 */ + 0xAA, 0x4C, 0xB2, 0x4F, 0xC1, 0x7B, 0xA5, 0xDF, /* 0xF4-0xF7 */ + 0xB2, 0xC1, 0xB2, 0xC9, 0xAA, 0xAC, 0xAA, 0xA5, /* 0xF8-0xFB */ + 0xC3, 0xD1, 0xA4, 0xB0, 0xAF, 0xF9, 0xA8, 0xEB, /* 0xFC-0xFF */ +}; + +static unsigned char u2c_FA[512] = { + 0xA4, 0xC1, 0xAB, 0xD7, 0xA9, 0xDD, 0xBF, 0x7D, /* 0x00-0x03 */ + 0xA6, 0x76, 0xAC, 0x7D, 0xBC, 0xC9, 0xBF, 0xE7, /* 0x04-0x07 */ + 0xA6, 0xE6, 0xAD, 0xB0, 0xA8, 0xA3, 0xB9, 0xF8, /* 0x08-0x0B */ + 0xC9, 0x4A, 0xDD, 0xFC, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0xB6, 0xEF, 0x00, 0x00, 0xB4, 0xB8, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0xE8, 0xF9, 0xBD, 0xDE, 0xAF, 0x71, /* 0x14-0x17 */ + 0x00, 0x00, 0xAF, 0xAB, 0xB2, 0xBB, 0xBA, 0xD6, /* 0x18-0x1B */ + 0xB9, 0x74, 0xBA, 0xEB, 0xA6, 0xD0, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0xBD, 0xD1, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0xB6, 0x68, 0xB3, 0xA3, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0xB6, 0xBA, 0xB9, 0x7D, /* 0x28-0x2B */ + 0xC0, 0x5D, 0xC5, 0x62, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ +}; + +static unsigned char u2c_FE[512] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x03 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0C-0x0F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x13 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x14-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1C-0x1F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x23 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x24-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2C-0x2F */ + 0xA1, 0x4A, 0xA1, 0x57, 0x00, 0x00, 0xA1, 0x59, /* 0x30-0x33 */ + 0xA1, 0x5B, 0xA1, 0x5F, 0xA1, 0x60, 0xA1, 0x63, /* 0x34-0x37 */ + 0xA1, 0x64, 0xA1, 0x67, 0xA1, 0x68, 0xA1, 0x6B, /* 0x38-0x3B */ + 0xA1, 0x6C, 0xA1, 0x6F, 0xA1, 0x70, 0xA1, 0x73, /* 0x3C-0x3F */ + 0xA1, 0x74, 0xA1, 0x77, 0xA1, 0x78, 0xA1, 0x7B, /* 0x40-0x43 */ + 0xA1, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x44-0x47 */ + 0x00, 0x00, 0xA1, 0xC6, 0xA1, 0xC7, 0xA1, 0xCA, /* 0x48-0x4B */ + 0xA1, 0xCB, 0xA1, 0xC8, 0xA1, 0xC9, 0xA1, 0x5C, /* 0x4C-0x4F */ + 0xA1, 0x4D, 0xA1, 0x4E, 0xA1, 0x4F, 0x00, 0x00, /* 0x50-0x53 */ + 0xA1, 0x51, 0xA1, 0x52, 0xA1, 0x53, 0xA1, 0x54, /* 0x54-0x57 */ + 0x00, 0x00, 0xA1, 0x7D, 0xA1, 0x7E, 0xA1, 0xA1, /* 0x58-0x5B */ + 0xA1, 0xA2, 0xA1, 0xA3, 0xA1, 0xA4, 0xA1, 0xCC, /* 0x5C-0x5F */ + 0xA1, 0xCD, 0xA1, 0xCE, 0xA1, 0xDE, 0xA1, 0xDF, /* 0x60-0x63 */ + 0xA1, 0xE0, 0xA1, 0xE1, 0xA1, 0xE2, 0x00, 0x00, /* 0x64-0x67 */ + 0xA2, 0x42, 0xA2, 0x4C, 0xA2, 0x4D, 0xA2, 0x4E, /* 0x68-0x6B */ +}; + +static unsigned char u2c_FF[512] = { + 0x00, 0x00, 0xA1, 0x49, 0xA1, 0xA8, 0xA1, 0xAD, /* 0x00-0x03 */ + 0xA2, 0x43, 0xA2, 0x48, 0xA1, 0xAE, 0xA1, 0xA6, /* 0x04-0x07 */ + 0xA1, 0x5D, 0xA1, 0x5E, 0xA1, 0xAF, 0xA1, 0xCF, /* 0x08-0x0B */ + 0xA1, 0x41, 0xA1, 0xD0, 0xA1, 0x44, 0xA1, 0xFE, /* 0x0C-0x0F */ + 0xA2, 0xAF, 0xA2, 0xB0, 0xA2, 0xB1, 0xA2, 0xB2, /* 0x10-0x13 */ + 0xA2, 0xB3, 0xA2, 0xB4, 0xA2, 0xB5, 0xA2, 0xB6, /* 0x14-0x17 */ + 0xA2, 0xB7, 0xA2, 0xB8, 0xA1, 0x47, 0xA1, 0x46, /* 0x18-0x1B */ + 0xA1, 0xD5, 0xA1, 0xD7, 0xA1, 0xD6, 0xA1, 0x48, /* 0x1C-0x1F */ + 0xA2, 0x49, 0xA2, 0xCF, 0xA2, 0xD0, 0xA2, 0xD1, /* 0x20-0x23 */ + 0xA2, 0xD2, 0xA2, 0xD3, 0xA2, 0xD4, 0xA2, 0xD5, /* 0x24-0x27 */ + 0xA2, 0xD6, 0xA2, 0xD7, 0xA2, 0xD8, 0xA2, 0xD9, /* 0x28-0x2B */ + 0xA2, 0xDA, 0xA2, 0xDB, 0xA2, 0xDC, 0xA2, 0xDD, /* 0x2C-0x2F */ + 0xA2, 0xDE, 0xA2, 0xDF, 0xA2, 0xE0, 0xA2, 0xE1, /* 0x30-0x33 */ + 0xA2, 0xE2, 0xA2, 0xE3, 0xA2, 0xE4, 0xA2, 0xE5, /* 0x34-0x37 */ + 0xA2, 0xE6, 0xA2, 0xE7, 0xA2, 0xE8, 0xA1, 0x65, /* 0x38-0x3B */ + 0xA2, 0x40, 0xA1, 0x66, 0xA1, 0x73, 0xA1, 0xC4, /* 0x3C-0x3F */ + 0xA1, 0xA5, 0xA2, 0xE9, 0xA2, 0xEA, 0xA2, 0xEB, /* 0x40-0x43 */ + 0xA2, 0xEC, 0xA2, 0xED, 0xA2, 0xEE, 0xA2, 0xEF, /* 0x44-0x47 */ + 0xA2, 0xF0, 0xA2, 0xF1, 0xA2, 0xF2, 0xA2, 0xF3, /* 0x48-0x4B */ + 0xA2, 0xF4, 0xA2, 0xF5, 0xA2, 0xF6, 0xA2, 0xF7, /* 0x4C-0x4F */ + 0xA2, 0xF8, 0xA2, 0xF9, 0xA2, 0xFA, 0xA2, 0xFB, /* 0x50-0x53 */ + 0xA2, 0xFC, 0xA2, 0xFD, 0xA2, 0xFE, 0xA3, 0x40, /* 0x54-0x57 */ + 0xA3, 0x41, 0xA3, 0x42, 0xA3, 0x43, 0xA1, 0x61, /* 0x58-0x5B */ + 0xA1, 0x55, 0xA1, 0x62, 0xA1, 0xE3, 0x00, 0x00, /* 0x5C-0x5F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x63 */ + 0xA1, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x64-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x6C-0x6F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x73 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x74-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x7C-0x7F */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x83 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x84-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x8C-0x8F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x93 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x94-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9B */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9C-0x9F */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA0-0xA3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA4-0xA7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xA8-0xAB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xAC-0xAF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB0-0xB3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB4-0xB7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xB8-0xBB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xBC-0xBF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC0-0xC3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC4-0xC7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xC8-0xCB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xCC-0xCF */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD0-0xD3 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD4-0xD7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xD8-0xDB */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xDC-0xDF */ + 0xA2, 0x46, 0xA2, 0x47, 0x00, 0x00, 0xA1, 0xC3, /* 0xE0-0xE3 */ + 0x00, 0x00, 0xA2, 0x44, 0x00, 0x00, 0x00, 0x00, /* 0xE4-0xE7 */ +}; + +static unsigned char *page_uni2charset[256] = { + NULL, NULL, u2c_02, u2c_03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_20, u2c_21, u2c_22, u2c_23, NULL, u2c_25, u2c_26, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + u2c_30, u2c_31, u2c_32, u2c_33, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, u2c_4E, u2c_4F, + u2c_50, u2c_51, u2c_52, u2c_53, u2c_54, u2c_55, u2c_56, u2c_57, + u2c_58, u2c_59, u2c_5A, u2c_5B, u2c_5C, u2c_5D, u2c_5E, u2c_5F, + u2c_60, u2c_61, u2c_62, u2c_63, u2c_64, u2c_65, u2c_66, u2c_67, + u2c_68, u2c_69, u2c_6A, u2c_6B, u2c_6C, u2c_6D, u2c_6E, u2c_6F, + u2c_70, u2c_71, u2c_72, u2c_73, u2c_74, u2c_75, u2c_76, u2c_77, + u2c_78, u2c_79, u2c_7A, u2c_7B, u2c_7C, u2c_7D, u2c_7E, u2c_7F, + u2c_80, u2c_81, u2c_82, u2c_83, u2c_84, u2c_85, u2c_86, u2c_87, + u2c_88, u2c_89, u2c_8A, u2c_8B, u2c_8C, u2c_8D, u2c_8E, u2c_8F, + u2c_90, u2c_91, u2c_92, u2c_93, u2c_94, u2c_95, u2c_96, u2c_97, + u2c_98, u2c_99, u2c_9A, u2c_9B, u2c_9C, u2c_9D, u2c_9E, u2c_9F, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, u2c_DC, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, u2c_F9, u2c_FA, NULL, NULL, NULL, u2c_FE, u2c_FF, }; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(const wchar_t uni, + unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni&0xFF; + unsigned char ch = (uni>>8)&0xFF; + int n; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + + uni2charset = page_uni2charset[ch]; + if (uni2charset) { + if (boundlen <= 1) + return -ENAMETOOLONG; + out[0] = uni2charset[cl*2]; + out[1] = uni2charset[cl*2+1]; + if (out[0] == 0x00 && out[1] == 0x00) + return -EINVAL; + n = 2; + } else if (ch==0 && cl) { + out[0] = cl; + n = 1; + } + else + return -EINVAL; + + return n; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, + wchar_t *uni) +{ + unsigned char ch, cl; + wchar_t *charset2uni; + int n; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + if (boundlen == 1) { + *uni = rawstring[0]; + return 1; + } + + ch = rawstring[0]; + cl = rawstring[1]; + + charset2uni = page_charset2uni[ch]; + if (charset2uni && cl) { + *uni = charset2uni[cl]; + if (*uni == 0x0000) + return -EINVAL; + n = 2; + } else{ + *uni = ch; + n = 1; + } + return n; +} + +static struct nls_table table = { + "cp950", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_cp950(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_cp950(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_cp950) +module_exit(exit_nls_cp950) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-jp.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_euc…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-jp.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-jp.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,601 @@ +/* + * linux/fs/nls_euc-jp.c + * + * Added `OSF/JVC Recommended Code Set Conversion Specification + * between Japanese EUC and Shift-JIS' support: <hirofumi(a)mail.parknet.co.jp> + * (
http://www.opengroup.or.jp/jvc/cde/sjis-euc-e.html
) + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +#define IS_SJIS_LOW_BYTE(l) ((0x40 <= (l)) && ((l) <= 0xFC) && ((l) != 0x7F)) +/* JIS X 0208 (include NEC spesial characters) */ +#define IS_SJIS_JISX0208(h, l) ((((0x81 <= (h)) && ((h) <= 0x9F)) \ + || ((0xE0 <= (h)) && ((h) <= 0xEA))) \ + && IS_SJIS_LOW_BYTE(l)) +#define IS_SJIS_JISX0201KANA(c) ((0xA1 <= (c)) && ((c) <= 0xDF)) +#define IS_SJIS_UDC_LOW(h, l) (((0xF0 <= (h)) && ((h) <= 0xF4)) \ + && IS_SJIS_LOW_BYTE(l)) +#define IS_SJIS_UDC_HI(h, l) (((0xF5 <= (h)) && ((h) <= 0xF9)) \ + && IS_SJIS_LOW_BYTE(l)) +#define IS_SJIS_IBM(h, l) (((0xFA <= (h)) && ((h) <= 0xFC)) \ + && IS_SJIS_LOW_BYTE(l)) +#define IS_SJIS_NECIBM(h, l) (((0xED <= (h)) && ((h) <= 0xEE)) \ + && IS_SJIS_LOW_BYTE(l)) +#define MAP_SJIS2EUC(sjis_hi, sjis_lo, sjis_p, euc_hi, euc_lo, euc_p) { \ + if ((sjis_lo) >= 0x9F) { \ + (euc_hi) = (sjis_hi) * 2 - (((sjis_p) * 2 - (euc_p)) - 1); \ + (euc_lo) = (sjis_lo) + 2; \ + } else { \ + (euc_hi) = (sjis_hi) * 2 - ((sjis_p) * 2 - (euc_p)); \ + (euc_lo) = (sjis_lo) + ((sjis_lo) >= 0x7F ? 0x60 : 0x61); \ + } \ +} while(0) + +#define SS2 (0x8E) /* Single Shift 2 */ +#define SS3 (0x8F) /* Single Shift 3 */ +#define IS_EUC_BYTE(c) ((0xA1 <= (c)) && ((c) <= 0xFE)) +#define IS_EUC_JISX0208(h, l) (IS_EUC_BYTE(h) && IS_EUC_BYTE(l)) +#define IS_EUC_JISX0201KANA(h, l) (((h) == SS2) && (0xA1 <= (l) && (l) <= 0xDF)) +#define IS_EUC_UDC_LOW(h, l) (((0xF5 <= (h)) && ((h) <= 0xFE)) \ + && IS_EUC_BYTE(l)) +#define IS_EUC_UDC_HI(h, l) IS_EUC_UDC_LOW(h, l) /* G3 block */ +#define MAP_EUC2SJIS(euc_hi, euc_lo, euc_p, sjis_hi, sjis_lo, sjis_p) { \ + if ((euc_hi) & 1) { \ + (sjis_hi) = (euc_hi) / 2 + ((sjis_p) - (euc_p) / 2); \ + (sjis_lo) = (euc_lo) - ((euc_lo) >= 0xE0 ? 0x60 : 0x61); \ + } else { \ + (sjis_hi) = (euc_hi) / 2 + (((sjis_p) - (euc_p) / 2) - 1); \ + (sjis_lo) = (euc_lo) - 2; \ + } \ +} while(0) + +/* SJIS IBM extended characters to EUC map */ +static unsigned char sjisibm2euc_map[][2] = { + {0xF3, 0xF3}, {0xF3, 0xF4}, {0xF3, 0xF5}, {0xF3, 0xF6}, {0xF3, 0xF7}, + {0xF3, 0xF8}, {0xF3, 0xF9}, {0xF3, 0xFA}, {0xF3, 0xFB}, {0xF3, 0xFC}, + {0xF3, 0xFD}, {0xF3, 0xFE}, {0xF4, 0xA1}, {0xF4, 0xA2}, {0xF4, 0xA3}, + {0xF4, 0xA4}, {0xF4, 0xA5}, {0xF4, 0xA6}, {0xF4, 0xA7}, {0xF4, 0xA8}, + {0xA2, 0xCC}, {0xA2, 0xC3}, {0xF4, 0xA9}, {0xF4, 0xAA}, {0xF4, 0xAB}, + {0xF4, 0xAC}, {0xF4, 0xAD}, {0xA2, 0xE8}, {0xD4, 0xE3}, {0xDC, 0xDF}, + {0xE4, 0xE9}, {0xE3, 0xF8}, {0xD9, 0xA1}, {0xB1, 0xBB}, {0xF4, 0xAE}, + {0xC2, 0xAD}, {0xC3, 0xFC}, {0xE4, 0xD0}, {0xC2, 0xBF}, {0xBC, 0xF4}, + {0xB0, 0xA9}, {0xB0, 0xC8}, {0xF4, 0xAF}, {0xB0, 0xD2}, {0xB0, 0xD4}, + {0xB0, 0xE3}, {0xB0, 0xEE}, {0xB1, 0xA7}, {0xB1, 0xA3}, {0xB1, 0xAC}, + {0xB1, 0xA9}, {0xB1, 0xBE}, {0xB1, 0xDF}, {0xB1, 0xD8}, {0xB1, 0xC8}, + {0xB1, 0xD7}, {0xB1, 0xE3}, {0xB1, 0xF4}, {0xB1, 0xE1}, {0xB2, 0xA3}, + {0xF4, 0xB0}, {0xB2, 0xBB}, {0xB2, 0xE6}, {0x00, 0x00}, {0xB2, 0xED}, + {0xB2, 0xF5}, {0xB2, 0xFC}, {0xF4, 0xB1}, {0xB3, 0xB5}, {0xB3, 0xD8}, + {0xB3, 0xDB}, {0xB3, 0xE5}, {0xB3, 0xEE}, {0xB3, 0xFB}, {0xF4, 0xB2}, + {0xF4, 0xB3}, {0xB4, 0xC0}, {0xB4, 0xC7}, {0xB4, 0xD0}, {0xB4, 0xDE}, + {0xF4, 0xB4}, {0xB5, 0xAA}, {0xF4, 0xB5}, {0xB5, 0xAF}, {0xB5, 0xC4}, + {0xB5, 0xE8}, {0xF4, 0xB6}, {0xB7, 0xC2}, {0xB7, 0xE4}, {0xB7, 0xE8}, + {0xB7, 0xE7}, {0xF4, 0xB7}, {0xF4, 0xB8}, {0xF4, 0xB9}, {0xB8, 0xCE}, + {0xB8, 0xE1}, {0xB8, 0xF5}, {0xB8, 0xF7}, {0xB8, 0xF8}, {0xB8, 0xFC}, + {0xB9, 0xAF}, {0xB9, 0xB7}, {0xBA, 0xBE}, {0xBA, 0xDB}, {0xCD, 0xAA}, + {0xBA, 0xE1}, {0xF4, 0xBA}, {0xBA, 0xEB}, {0xBB, 0xB3}, {0xBB, 0xB8}, + {0xF4, 0xBB}, {0xBB, 0xCA}, {0xF4, 0xBC}, {0xF4, 0xBD}, {0xBB, 0xD0}, + {0xBB, 0xDE}, {0xBB, 0xF4}, {0xBB, 0xF5}, {0xBB, 0xF9}, {0xBC, 0xE4}, + {0xBC, 0xED}, {0xBC, 0xFE}, {0xF4, 0xBE}, {0xBD, 0xC2}, {0xBD, 0xE7}, + {0xF4, 0xBF}, {0xBD, 0xF0}, {0xBE, 0xB0}, {0xBE, 0xAC}, {0xF4, 0xC0}, + {0xBE, 0xB3}, {0xBE, 0xBD}, {0xBE, 0xCD}, {0xBE, 0xC9}, {0xBE, 0xE4}, + {0xBF, 0xA8}, {0xBF, 0xC9}, {0xC0, 0xC4}, {0xC0, 0xE4}, {0xC0, 0xF4}, + {0xC1, 0xA6}, {0xF4, 0xC1}, {0xC1, 0xF5}, {0xC1, 0xFC}, {0xF4, 0xC2}, + {0xC1, 0xF8}, {0xC2, 0xAB}, {0xC2, 0xA1}, {0xC2, 0xA5}, {0xF4, 0xC3}, + {0xC2, 0xB8}, {0xC2, 0xBA}, {0xF4, 0xC4}, {0xC2, 0xC4}, {0xC2, 0xD2}, + {0xC2, 0xD7}, {0xC2, 0xDB}, {0xC2, 0xDE}, {0xC2, 0xED}, {0xC2, 0xF0}, + {0xF4, 0xC5}, {0xC3, 0xA1}, {0xC3, 0xB5}, {0xC3, 0xC9}, {0xC3, 0xB9}, + {0xF4, 0xC6}, {0xC3, 0xD8}, {0xC3, 0xFE}, {0xF4, 0xC7}, {0xC4, 0xCC}, + {0xF4, 0xC8}, {0xC4, 0xD9}, {0xC4, 0xEA}, {0xC4, 0xFD}, {0xF4, 0xC9}, + {0xC5, 0xA7}, {0xC5, 0xB5}, {0xC5, 0xB6}, {0xF4, 0xCA}, {0xC5, 0xD5}, + {0xC6, 0xB8}, {0xC6, 0xD7}, {0xC6, 0xE0}, {0xC6, 0xEA}, {0xC6, 0xE3}, + {0xC7, 0xA1}, {0xC7, 0xAB}, {0xC7, 0xC7}, {0xC7, 0xC3}, {0xC7, 0xCB}, + {0xC7, 0xCF}, {0xC7, 0xD9}, {0xF4, 0xCB}, {0xF4, 0xCC}, {0xC7, 0xE6}, + {0xC7, 0xEE}, {0xC7, 0xFC}, {0xC7, 0xEB}, {0xC7, 0xF0}, {0xC8, 0xB1}, + {0xC8, 0xE5}, {0xC8, 0xF8}, {0xC9, 0xA6}, {0xC9, 0xAB}, {0xC9, 0xAD}, + {0xF4, 0xCD}, {0xC9, 0xCA}, {0xC9, 0xD3}, {0xC9, 0xE9}, {0xC9, 0xE3}, + {0xC9, 0xFC}, {0xC9, 0xF4}, {0xC9, 0xF5}, {0xF4, 0xCE}, {0xCA, 0xB3}, + {0xCA, 0xBD}, {0xCA, 0xEF}, {0xCA, 0xF1}, {0xCB, 0xAE}, {0xF4, 0xCF}, + {0xCB, 0xCA}, {0xCB, 0xE6}, {0xCB, 0xEA}, {0xCB, 0xF0}, {0xCB, 0xF4}, + {0xCB, 0xEE}, {0xCC, 0xA5}, {0xCB, 0xF9}, {0xCC, 0xAB}, {0xCC, 0xAE}, + {0xCC, 0xAD}, {0xCC, 0xB2}, {0xCC, 0xC2}, {0xCC, 0xD0}, {0xCC, 0xD9}, + {0xF4, 0xD0}, {0xCD, 0xBB}, {0xF4, 0xD1}, {0xCE, 0xBB}, {0xF4, 0xD2}, + {0xCE, 0xBA}, {0xCE, 0xC3}, {0xF4, 0xD3}, {0xCE, 0xF2}, {0xB3, 0xDD}, + {0xCF, 0xD5}, {0xCF, 0xE2}, {0xCF, 0xE9}, {0xCF, 0xED}, {0xF4, 0xD4}, + {0xF4, 0xD5}, {0xF4, 0xD6}, {0x00, 0x00}, {0xF4, 0xD7}, {0xD0, 0xE5}, + {0xF4, 0xD8}, {0xD0, 0xE9}, {0xD1, 0xE8}, {0xF4, 0xD9}, {0xF4, 0xDA}, + {0xD1, 0xEC}, {0xD2, 0xBB}, {0xF4, 0xDB}, {0xD3, 0xE1}, {0xD3, 0xE8}, + {0xD4, 0xA7}, {0xF4, 0xDC}, {0xF4, 0xDD}, {0xD4, 0xD4}, {0xD4, 0xF2}, + {0xD5, 0xAE}, {0xF4, 0xDE}, {0xD7, 0xDE}, {0xF4, 0xDF}, {0xD8, 0xA2}, + {0xD8, 0xB7}, {0xD8, 0xC1}, {0xD8, 0xD1}, {0xD8, 0xF4}, {0xD9, 0xC6}, + {0xD9, 0xC8}, {0xD9, 0xD1}, {0xF4, 0xE0}, {0xF4, 0xE1}, {0xF4, 0xE2}, + {0xF4, 0xE3}, {0xF4, 0xE4}, {0xDC, 0xD3}, {0xDD, 0xC8}, {0xDD, 0xD4}, + {0xDD, 0xEA}, {0xDD, 0xFA}, {0xDE, 0xA4}, {0xDE, 0xB0}, {0xF4, 0xE5}, + {0xDE, 0xB5}, {0xDE, 0xCB}, {0xF4, 0xE6}, {0xDF, 0xB9}, {0xF4, 0xE7}, + {0xDF, 0xC3}, {0xF4, 0xE8}, {0xF4, 0xE9}, {0xE0, 0xD9}, {0xF4, 0xEA}, + {0xF4, 0xEB}, {0xE1, 0xE2}, {0xF4, 0xEC}, {0xF4, 0xED}, {0xF4, 0xEE}, + {0xE2, 0xC7}, {0xE3, 0xA8}, {0xE3, 0xA6}, {0xE3, 0xA9}, {0xE3, 0xAF}, + {0xE3, 0xB0}, {0xE3, 0xAA}, {0xE3, 0xAB}, {0xE3, 0xBC}, {0xE3, 0xC1}, + {0xE3, 0xBF}, {0xE3, 0xD5}, {0xE3, 0xD8}, {0xE3, 0xD6}, {0xE3, 0xDF}, + {0xE3, 0xE3}, {0xE3, 0xE1}, {0xE3, 0xD4}, {0xE3, 0xE9}, {0xE4, 0xA6}, + {0xE3, 0xF1}, {0xE3, 0xF2}, {0xE4, 0xCB}, {0xE4, 0xC1}, {0xE4, 0xC3}, + {0xE4, 0xBE}, {0xF4, 0xEF}, {0xE4, 0xC0}, {0xE4, 0xC7}, {0xE4, 0xBF}, + {0xE4, 0xE0}, {0xE4, 0xDE}, {0xE4, 0xD1}, {0xF4, 0xF0}, {0xE4, 0xDC}, + {0xE4, 0xD2}, {0xE4, 0xDB}, {0xE4, 0xD4}, {0xE4, 0xFA}, {0xE4, 0xEF}, + {0xE5, 0xB3}, {0xE5, 0xBF}, {0xE5, 0xC9}, {0xE5, 0xD0}, {0xE5, 0xE2}, + {0xE5, 0xEA}, {0xE5, 0xEB}, {0xF4, 0xF1}, {0xF4, 0xF2}, {0xF4, 0xF3}, + {0xE6, 0xE8}, {0xE6, 0xEF}, {0xE7, 0xAC}, {0xF4, 0xF4}, {0xE7, 0xAE}, + {0xF4, 0xF5}, {0xE7, 0xB1}, {0xF4, 0xF6}, {0xE7, 0xB2}, {0xE8, 0xB1}, + {0xE8, 0xB6}, {0xF4, 0xF7}, {0xF4, 0xF8}, {0xE8, 0xDD}, {0xF4, 0xF9}, + {0xF4, 0xFA}, {0xE9, 0xD1}, {0xF4, 0xFB}, {0xE9, 0xED}, {0xEA, 0xCD}, + {0xF4, 0xFC}, {0xEA, 0xDB}, {0xEA, 0xE6}, {0xEA, 0xEA}, {0xEB, 0xA5}, + {0xEB, 0xFB}, {0xEB, 0xFA}, {0xF4, 0xFD}, {0xEC, 0xD6}, {0xF4, 0xFE}, +}; + +#define IS_EUC_IBM2JISX0208(h, l) \ + (((h) == 0xA2 && (l) == 0xCC) || ((h) == 0xA2 && (l) == 0xE8)) + +/* EUC to SJIS IBM extended characters map (G3 JIS X 0212 block) */ +static struct { + unsigned short euc; + unsigned char sjis[2]; +} euc2sjisibm_jisx0212_map[] = { + {0xA2C3, {0xFA, 0x55}}, {0xB0A9, {0xFA, 0x68}}, {0xB0C8, {0xFA, 0x69}}, + {0xB0D2, {0xFA, 0x6B}}, {0xB0D4, {0xFA, 0x6C}}, {0xB0E3, {0xFA, 0x6D}}, + {0xB0EE, {0xFA, 0x6E}}, {0xB1A3, {0xFA, 0x70}}, {0xB1A7, {0xFA, 0x6F}}, + {0xB1A9, {0xFA, 0x72}}, {0xB1AC, {0xFA, 0x71}}, {0xB1BB, {0xFA, 0x61}}, + {0xB1BE, {0xFA, 0x73}}, {0xB1C8, {0xFA, 0x76}}, {0xB1D7, {0xFA, 0x77}}, + {0xB1D8, {0xFA, 0x75}}, {0xB1DF, {0xFA, 0x74}}, {0xB1E1, {0xFA, 0x7A}}, + {0xB1E3, {0xFA, 0x78}}, {0xB1F4, {0xFA, 0x79}}, {0xB2A3, {0xFA, 0x7B}}, + {0xB2BB, {0xFA, 0x7D}}, {0xB2E6, {0xFA, 0x7E}}, {0xB2ED, {0xFA, 0x80}}, + {0xB2F5, {0xFA, 0x81}}, {0xB2FC, {0xFA, 0x82}}, {0xB3B5, {0xFA, 0x84}}, + {0xB3D8, {0xFA, 0x85}}, {0xB3DB, {0xFA, 0x86}}, {0xB3DD, {0xFB, 0x77}}, + {0xB3E5, {0xFA, 0x87}}, {0xB3EE, {0xFA, 0x88}}, {0xB3FB, {0xFA, 0x89}}, + {0xB4C0, {0xFA, 0x8C}}, {0xB4C7, {0xFA, 0x8D}}, {0xB4D0, {0xFA, 0x8E}}, + {0xB4DE, {0xFA, 0x8F}}, {0xB5AA, {0xFA, 0x91}}, {0xB5AF, {0xFA, 0x93}}, + {0xB5C4, {0xFA, 0x94}}, {0xB5E8, {0xFA, 0x95}}, {0xB7C2, {0xFA, 0x97}}, + {0xB7E4, {0xFA, 0x98}}, {0xB7E7, {0xFA, 0x9A}}, {0xB7E8, {0xFA, 0x99}}, + {0xB8CE, {0xFA, 0x9E}}, {0xB8E1, {0xFA, 0x9F}}, {0xB8F5, {0xFA, 0xA0}}, + {0xB8F7, {0xFA, 0xA1}}, {0xB8F8, {0xFA, 0xA2}}, {0xB8FC, {0xFA, 0xA3}}, + {0xB9AF, {0xFA, 0xA4}}, {0xB9B7, {0xFA, 0xA5}}, {0xBABE, {0xFA, 0xA6}}, + {0xBADB, {0xFA, 0xA7}}, {0xBAE1, {0xFA, 0xA9}}, {0xBAEB, {0xFA, 0xAB}}, + {0xBBB3, {0xFA, 0xAC}}, {0xBBB8, {0xFA, 0xAD}}, {0xBBCA, {0xFA, 0xAF}}, + {0xBBD0, {0xFA, 0xB2}}, {0xBBDE, {0xFA, 0xB3}}, {0xBBF4, {0xFA, 0xB4}}, + {0xBBF5, {0xFA, 0xB5}}, {0xBBF9, {0xFA, 0xB6}}, {0xBCE4, {0xFA, 0xB7}}, + {0xBCED, {0xFA, 0xB8}}, {0xBCF4, {0xFA, 0x67}}, {0xBCFE, {0xFA, 0xB9}}, + {0xBDC2, {0xFA, 0xBB}}, {0xBDE7, {0xFA, 0xBC}}, {0xBDF0, {0xFA, 0xBE}}, + {0xBEAC, {0xFA, 0xC0}}, {0xBEB0, {0xFA, 0xBF}}, {0xBEB3, {0xFA, 0xC2}}, + {0xBEBD, {0xFA, 0xC3}}, {0xBEC9, {0xFA, 0xC5}}, {0xBECD, {0xFA, 0xC4}}, + {0xBEE4, {0xFA, 0xC6}}, {0xBFA8, {0xFA, 0xC7}}, {0xBFC9, {0xFA, 0xC8}}, + {0xC0C4, {0xFA, 0xC9}}, {0xC0E4, {0xFA, 0xCA}}, {0xC0F4, {0xFA, 0xCB}}, + {0xC1A6, {0xFA, 0xCC}}, {0xC1F5, {0xFA, 0xCE}}, {0xC1F8, {0xFA, 0xD1}}, + {0xC1FC, {0xFA, 0xCF}}, {0xC2A1, {0xFA, 0xD3}}, {0xC2A5, {0xFA, 0xD4}}, + {0xC2AB, {0xFA, 0xD2}}, {0xC2AD, {0xFA, 0x63}}, {0xC2B8, {0xFA, 0xD6}}, + {0xC2BA, {0xFA, 0xD7}}, {0xC2BF, {0xFA, 0x66}}, {0xC2C4, {0xFA, 0xD9}}, + {0xC2D2, {0xFA, 0xDA}}, {0xC2D7, {0xFA, 0xDB}}, {0xC2DB, {0xFA, 0xDC}}, + {0xC2DE, {0xFA, 0xDD}}, {0xC2ED, {0xFA, 0xDE}}, {0xC2F0, {0xFA, 0xDF}}, + {0xC3A1, {0xFA, 0xE1}}, {0xC3B5, {0xFA, 0xE2}}, {0xC3B9, {0xFA, 0xE4}}, + {0xC3C9, {0xFA, 0xE3}}, {0xC3D8, {0xFA, 0xE6}}, {0xC3FC, {0xFA, 0x64}}, + {0xC3FE, {0xFA, 0xE7}}, {0xC4CC, {0xFA, 0xE9}}, {0xC4D9, {0xFA, 0xEB}}, + {0xC4EA, {0xFA, 0xEC}}, {0xC4FD, {0xFA, 0xED}}, {0xC5A7, {0xFA, 0xEF}}, + {0xC5B5, {0xFA, 0xF0}}, {0xC5B6, {0xFA, 0xF1}}, {0xC5D5, {0xFA, 0xF3}}, + {0xC6B8, {0xFA, 0xF4}}, {0xC6D7, {0xFA, 0xF5}}, {0xC6E0, {0xFA, 0xF6}}, + {0xC6E3, {0xFA, 0xF8}}, {0xC6EA, {0xFA, 0xF7}}, {0xC7A1, {0xFA, 0xF9}}, + {0xC7AB, {0xFA, 0xFA}}, {0xC7C3, {0xFA, 0xFC}}, {0xC7C7, {0xFA, 0xFB}}, + {0xC7CB, {0xFB, 0x40}}, {0xC7CF, {0xFB, 0x41}}, {0xC7D9, {0xFB, 0x42}}, + {0xC7E6, {0xFB, 0x45}}, {0xC7EB, {0xFB, 0x48}}, {0xC7EE, {0xFB, 0x46}}, + {0xC7F0, {0xFB, 0x49}}, {0xC7FC, {0xFB, 0x47}}, {0xC8B1, {0xFB, 0x4A}}, + {0xC8E5, {0xFB, 0x4B}}, {0xC8F8, {0xFB, 0x4C}}, {0xC9A6, {0xFB, 0x4D}}, + {0xC9AB, {0xFB, 0x4E}}, {0xC9AD, {0xFB, 0x4F}}, {0xC9CA, {0xFB, 0x51}}, + {0xC9D3, {0xFB, 0x52}}, {0xC9E3, {0xFB, 0x54}}, {0xC9E9, {0xFB, 0x53}}, + {0xC9F4, {0xFB, 0x56}}, {0xC9F5, {0xFB, 0x57}}, {0xC9FC, {0xFB, 0x55}}, + {0xCAB3, {0xFB, 0x59}}, {0xCABD, {0xFB, 0x5A}}, {0xCAEF, {0xFB, 0x5B}}, + {0xCAF1, {0xFB, 0x5C}}, {0xCBAE, {0xFB, 0x5D}}, {0xCBCA, {0xFB, 0x5F}}, + {0xCBE6, {0xFB, 0x60}}, {0xCBEA, {0xFB, 0x61}}, {0xCBEE, {0xFB, 0x64}}, + {0xCBF0, {0xFB, 0x62}}, {0xCBF4, {0xFB, 0x63}}, {0xCBF9, {0xFB, 0x66}}, + {0xCCA5, {0xFB, 0x65}}, {0xCCAB, {0xFB, 0x67}}, {0xCCAD, {0xFB, 0x69}}, + {0xCCAE, {0xFB, 0x68}}, {0xCCB2, {0xFB, 0x6A}}, {0xCCC2, {0xFB, 0x6B}}, + {0xCCD0, {0xFB, 0x6C}}, {0xCCD9, {0xFB, 0x6D}}, {0xCDAA, {0xFA, 0xA8}}, + {0xCDBB, {0xFB, 0x6F}}, {0xCEBA, {0xFB, 0x73}}, {0xCEBB, {0xFB, 0x71}}, + {0xCEC3, {0xFB, 0x74}}, {0xCEF2, {0xFB, 0x76}}, {0xCFD5, {0xFB, 0x78}}, + {0xCFE2, {0xFB, 0x79}}, {0xCFE9, {0xFB, 0x7A}}, {0xCFED, {0xFB, 0x7B}}, + {0xD0E5, {0xFB, 0x81}}, {0xD0E9, {0xFB, 0x83}}, {0xD1E8, {0xFB, 0x84}}, + {0xD1EC, {0xFB, 0x87}}, {0xD2BB, {0xFB, 0x88}}, {0xD3E1, {0xFB, 0x8A}}, + {0xD3E8, {0xFB, 0x8B}}, {0xD4A7, {0xFB, 0x8C}}, {0xD4D4, {0xFB, 0x8F}}, + {0xD4E3, {0xFA, 0x5C}}, {0xD4F2, {0xFB, 0x90}}, {0xD5AE, {0xFB, 0x91}}, + {0xD7DE, {0xFB, 0x93}}, {0xD8A2, {0xFB, 0x95}}, {0xD8B7, {0xFB, 0x96}}, + {0xD8C1, {0xFB, 0x97}}, {0xD8D1, {0xFB, 0x98}}, {0xD8F4, {0xFB, 0x99}}, + {0xD9A1, {0xFA, 0x60}}, {0xD9C6, {0xFB, 0x9A}}, {0xD9C8, {0xFB, 0x9B}}, + {0xD9D1, {0xFB, 0x9C}}, {0xDCD3, {0xFB, 0xA2}}, {0xDCDF, {0xFA, 0x5D}}, + {0xDDC8, {0xFB, 0xA3}}, {0xDDD4, {0xFB, 0xA4}}, {0xDDEA, {0xFB, 0xA5}}, + {0xDDFA, {0xFB, 0xA6}}, {0xDEA4, {0xFB, 0xA7}}, {0xDEB0, {0xFB, 0xA8}}, + {0xDEB5, {0xFB, 0xAA}}, {0xDECB, {0xFB, 0xAB}}, {0xDFB9, {0xFB, 0xAD}}, + {0xDFC3, {0xFB, 0xAF}}, {0xE0D9, {0xFB, 0xB2}}, {0xE1E2, {0xFB, 0xB5}}, + {0xE2C7, {0xFB, 0xB9}}, {0xE3A6, {0xFB, 0xBB}}, {0xE3A8, {0xFB, 0xBA}}, + {0xE3A9, {0xFB, 0xBC}}, {0xE3AA, {0xFB, 0xBF}}, {0xE3AB, {0xFB, 0xC0}}, + {0xE3AF, {0xFB, 0xBD}}, {0xE3B0, {0xFB, 0xBE}}, {0xE3BC, {0xFB, 0xC1}}, + {0xE3BF, {0xFB, 0xC3}}, {0xE3C1, {0xFB, 0xC2}}, {0xE3D4, {0xFB, 0xCA}}, + {0xE3D5, {0xFB, 0xC4}}, {0xE3D6, {0xFB, 0xC6}}, {0xE3D8, {0xFB, 0xC5}}, + {0xE3DF, {0xFB, 0xC7}}, {0xE3E1, {0xFB, 0xC9}}, {0xE3E3, {0xFB, 0xC8}}, + {0xE3E9, {0xFB, 0xCB}}, {0xE3F1, {0xFB, 0xCD}}, {0xE3F2, {0xFB, 0xCE}}, + {0xE3F8, {0xFA, 0x5F}}, {0xE4A6, {0xFB, 0xCC}}, {0xE4BE, {0xFB, 0xD2}}, + {0xE4BF, {0xFB, 0xD6}}, {0xE4C0, {0xFB, 0xD4}}, {0xE4C1, {0xFB, 0xD0}}, + {0xE4C3, {0xFB, 0xD1}}, {0xE4C7, {0xFB, 0xD5}}, {0xE4CB, {0xFB, 0xCF}}, + {0xE4D0, {0xFA, 0x65}}, {0xE4D1, {0xFB, 0xD9}}, {0xE4D2, {0xFB, 0xDC}}, + {0xE4D4, {0xFB, 0xDE}}, {0xE4DB, {0xFB, 0xDD}}, {0xE4DC, {0xFB, 0xDB}}, + {0xE4DE, {0xFB, 0xD8}}, {0xE4E0, {0xFB, 0xD7}}, {0xE4E9, {0xFA, 0x5E}}, + {0xE4EF, {0xFB, 0xE0}}, {0xE4FA, {0xFB, 0xDF}}, {0xE5B3, {0xFB, 0xE1}}, + {0xE5BF, {0xFB, 0xE2}}, {0xE5C9, {0xFB, 0xE3}}, {0xE5D0, {0xFB, 0xE4}}, + {0xE5E2, {0xFB, 0xE5}}, {0xE5EA, {0xFB, 0xE6}}, {0xE5EB, {0xFB, 0xE7}}, + {0xE6E8, {0xFB, 0xEB}}, {0xE6EF, {0xFB, 0xEC}}, {0xE7AC, {0xFB, 0xED}}, + {0xE7AE, {0xFB, 0xEF}}, {0xE7B1, {0xFB, 0xF1}}, {0xE7B2, {0xFB, 0xF3}}, + {0xE8B1, {0xFB, 0xF4}}, {0xE8B6, {0xFB, 0xF5}}, {0xE8DD, {0xFB, 0xF8}}, + {0xE9D1, {0xFB, 0xFB}}, {0xE9ED, {0xFC, 0x40}}, {0xEACD, {0xFC, 0x41}}, + {0xEADB, {0xFC, 0x43}}, {0xEAE6, {0xFC, 0x44}}, {0xEAEA, {0xFC, 0x45}}, + {0xEBA5, {0xFC, 0x46}}, {0xEBFA, {0xFC, 0x48}}, {0xEBFB, {0xFC, 0x47}}, + {0xECD6, {0xFC, 0x4A}}, +}; + +/* EUC to SJIS IBM extended characters map (G3 Upper block) */ +static unsigned char euc2sjisibm_g3upper_map[][2] = { + {0xFA, 0x40}, {0xFA, 0x41}, {0xFA, 0x42}, {0xFA, 0x43}, {0xFA, 0x44}, + {0xFA, 0x45}, {0xFA, 0x46}, {0xFA, 0x47}, {0xFA, 0x48}, {0xFA, 0x49}, + {0xFA, 0x4A}, {0xFA, 0x4B}, {0xFA, 0x4C}, {0xFA, 0x4D}, {0xFA, 0x4E}, + {0xFA, 0x4F}, {0xFA, 0x50}, {0xFA, 0x51}, {0xFA, 0x52}, {0xFA, 0x53}, + {0xFA, 0x56}, {0xFA, 0x57}, {0xFA, 0x58}, {0xFA, 0x59}, {0xFA, 0x5A}, + {0xFA, 0x62}, {0xFA, 0x6A}, {0xFA, 0x7C}, {0xFA, 0x83}, {0xFA, 0x8A}, + {0xFA, 0x8B}, {0xFA, 0x90}, {0xFA, 0x92}, {0xFA, 0x96}, {0xFA, 0x9B}, + {0xFA, 0x9C}, {0xFA, 0x9D}, {0xFA, 0xAA}, {0xFA, 0xAE}, {0xFA, 0xB0}, + {0xFA, 0xB1}, {0xFA, 0xBA}, {0xFA, 0xBD}, {0xFA, 0xC1}, {0xFA, 0xCD}, + {0xFA, 0xD0}, {0xFA, 0xD5}, {0xFA, 0xD8}, {0xFA, 0xE0}, {0xFA, 0xE5}, + {0xFA, 0xE8}, {0xFA, 0xEA}, {0xFA, 0xEE}, {0xFA, 0xF2}, {0xFB, 0x43}, + {0xFB, 0x44}, {0xFB, 0x50}, {0xFB, 0x58}, {0xFB, 0x5E}, {0xFB, 0x6E}, + {0xFB, 0x70}, {0xFB, 0x72}, {0xFB, 0x75}, {0xFB, 0x7C}, {0xFB, 0x7D}, + {0xFB, 0x7E}, {0xFB, 0x80}, {0xFB, 0x82}, {0xFB, 0x85}, {0xFB, 0x86}, + {0xFB, 0x89}, {0xFB, 0x8D}, {0xFB, 0x8E}, {0xFB, 0x92}, {0xFB, 0x94}, + {0xFB, 0x9D}, {0xFB, 0x9E}, {0xFB, 0x9F}, {0xFB, 0xA0}, {0xFB, 0xA1}, + {0xFB, 0xA9}, {0xFB, 0xAC}, {0xFB, 0xAE}, {0xFB, 0xB0}, {0xFB, 0xB1}, + {0xFB, 0xB3}, {0xFB, 0xB4}, {0xFB, 0xB6}, {0xFB, 0xB7}, {0xFB, 0xB8}, + {0xFB, 0xD3}, {0xFB, 0xDA}, {0xFB, 0xE8}, {0xFB, 0xE9}, {0xFB, 0xEA}, + {0xFB, 0xEE}, {0xFB, 0xF0}, {0xFB, 0xF2}, {0xFB, 0xF6}, {0xFB, 0xF7}, + {0xFB, 0xF9}, {0xFB, 0xFA}, {0xFB, 0xFC}, {0xFC, 0x42}, {0xFC, 0x49}, + {0xFC, 0x4B}, +}; + +#define MAP_ELEMENT_OF(map) (sizeof(map) / sizeof(map[0])) + +static inline int sjisibm2euc(unsigned char *euc, const unsigned char sjis_hi, + const unsigned char sjis_lo); +static inline int euc2sjisibm_jisx0212(unsigned char *sjis, const unsigned char euc_hi, + const unsigned char euc_lo); +static inline int euc2sjisibm_g3upper(unsigned char *sjis, const unsigned char euc_hi, + const unsigned char euc_lo); +static inline int euc2sjisibm(unsigned char *sjis, const unsigned char euc_hi, + const unsigned char euc_lo); +static inline int sjisnec2sjisibm(unsigned char *sjisibm, + const unsigned char sjisnec_hi, + const unsigned char sjisnec_lo); + +/* SJIS IBM extended characters to EUC */ +static inline int sjisibm2euc(unsigned char *euc, const unsigned char sjis_hi, + const unsigned char sjis_lo) +{ + int index; + + index = ((sjis_hi - 0xFA) * (0xFD - 0x40)) + (sjis_lo - 0x40); + if (IS_EUC_IBM2JISX0208(sjisibm2euc_map[index][0], + sjisibm2euc_map[index][1])) { + euc[0] = sjisibm2euc_map[index][0]; + euc[1] = sjisibm2euc_map[index][1]; + return 2; + } else { + euc[0] = SS3; + euc[1] = sjisibm2euc_map[index][0]; + euc[2] = sjisibm2euc_map[index][1]; + return 3; + } +} + +/* EUC to SJIS IBM extended characters (G3 JIS X 0212 block) */ +static inline int euc2sjisibm_jisx0212(unsigned char *sjis, const unsigned char euc_hi, + const unsigned char euc_lo) +{ + int index, min_index, max_index; + unsigned short euc; + + min_index = 0; + max_index = MAP_ELEMENT_OF(euc2sjisibm_jisx0212_map) - 1; + euc = (euc_hi << 8) | euc_lo; + + while (min_index <= max_index) { + index = (min_index + max_index) / 2; + if (euc < euc2sjisibm_jisx0212_map[index].euc) + max_index = index - 1; + else + min_index = index + 1; + if (euc == euc2sjisibm_jisx0212_map[index].euc) { + sjis[0] = euc2sjisibm_jisx0212_map[index].sjis[0]; + sjis[1] = euc2sjisibm_jisx0212_map[index].sjis[1]; + return 3; + } + } + return 0; +} + +/* EUC to SJIS IBM extended characters (G3 Upper block) */ +static inline int euc2sjisibm_g3upper(unsigned char *sjis, const unsigned char euc_hi, + const unsigned char euc_lo) +{ + int index; + + if (euc_hi == 0xF3) + index = ((euc_hi << 8) | euc_lo) - 0xF3F3; + else + index = ((euc_hi << 8) | euc_lo) - 0xF4A1 + 12; + + if ((index < 0) || (index >= MAP_ELEMENT_OF(euc2sjisibm_g3upper_map))) + return 0; + + sjis[0] = euc2sjisibm_g3upper_map[index][0]; + sjis[1] = euc2sjisibm_g3upper_map[index][1]; + + return 3; +} + +/* EUC to SJIS IBM extended characters (G3 block) */ +static inline int euc2sjisibm(unsigned char *sjis, const unsigned char euc_hi, + const unsigned char euc_lo) +{ + int n; + +#if 0 + if ((euc_hi == 0xA2) && (euc_lo == 0xCC)) { + sjis[0] = 0xFA; + sjis[1] = 0x54; + return 2; + } else if ((euc_hi == 0xA2) && (euc_lo == 0xE8)) { + sjis[0] = 0xFA; + sjis[1] = 0x5B; + return 2; + } +#endif + if ((n = euc2sjisibm_g3upper(sjis, euc_hi, euc_lo))) { + return n; + } else if ((n = euc2sjisibm_jisx0212(sjis, euc_hi, euc_lo))) { + return n; + } + + return 0; +} + +/* NEC/IBM extended characters to IBM extended characters */ +static inline int sjisnec2sjisibm(unsigned char *sjisibm, + const unsigned char sjisnec_hi, + const unsigned char sjisnec_lo) +{ + int count; + + if (! IS_SJIS_NECIBM(sjisnec_hi, sjisnec_lo)) + return 0; + + if ((sjisnec_hi == 0xEE) && (sjisnec_lo == 0xF9)) { + sjisibm[0] = 0x81; + sjisibm[1] = 0xCA; + return 2; + } + + if ((sjisnec_hi == 0xEE) && (sjisnec_lo >= 0xEF)) { + count = (sjisnec_hi << 8 | sjisnec_lo) + - (sjisnec_lo <= 0xF9 ? 0xEEEF : (0xEEEF - 10)); + } else { + count = (sjisnec_hi - 0xED) * (0xFC - 0x40) + + (sjisnec_lo - 0x40) + (0x5C - 0x40); + if (sjisnec_lo >= 0x7F) + count--; + } + + sjisibm[0] = 0xFA + (count / (0xFC - 0x40)); + sjisibm[1] = 0x40 + (count % (0xFC - 0x40)); + if (sjisibm[1] >= 0x7F) + sjisibm[1]++; + + return 2; +} + +static int uni2char(const wchar_t uni, + unsigned char *out, int boundlen) +{ + int n; + + if (!p_nls) + return -EINVAL; + if ((n = p_nls->uni2char(uni, out, boundlen)) < 0) + return n; + + /* translate SJIS into EUC-JP */ + if (n == 1) { + if (IS_SJIS_JISX0201KANA(out[0])) { + /* JIS X 0201 KANA */ + if (boundlen < 2) + return -ENAMETOOLONG; + + out[1] = out[0]; + out[0] = SS2; + return 2; + } + } else if (n == 2) { + /* NEC/IBM extended characters to IBM extended characters */ + sjisnec2sjisibm(out, out[0], out[1]); + + if (IS_SJIS_UDC_LOW(out[0], out[1])) { + /* User defined characters half low */ + MAP_SJIS2EUC(out[0], out[1], 0xF0, out[0], out[1], 0xF5); + } else if (IS_SJIS_UDC_HI(out[0], out[1])) { + /* User defined characters half high */ + unsigned char ch, cl; + + if (boundlen < 3) + return -ENAMETOOLONG; + + n = 3; ch = out[0]; cl = out[1]; + out[0] = SS3; + MAP_SJIS2EUC(ch, cl, 0xF5, out[1], out[2], 0xF5); + } else if (IS_SJIS_IBM(out[0], out[1])) { + /* IBM extended characters */ + unsigned char euc[3], i; + + n = sjisibm2euc(euc, out[0], out[1]); + if (boundlen < n) + return -ENAMETOOLONG; + for (i = 0; i < n; i++) + out[i] = euc[i]; + } else if (IS_SJIS_JISX0208(out[0], out[1])) { + /* JIS X 0208 (include NEC special characters) */ + out[0] = (out[0]^0xA0)*2 + 0x5F; + if (out[1] > 0x9E) + out[0]++; + + if (out[1] < 0x7F) + out[1] = out[1] + 0x61; + else if (out[1] < 0x9F) + out[1] = out[1] + 0x60; + else + out[1] = out[1] + 0x02; + } else { + /* Invalid characters */ + return -EINVAL; + } + } + else + return -EINVAL; + + return n; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, + wchar_t *uni) +{ + unsigned char sjis_temp[2]; + int euc_offset, n; + + if ( !p_nls ) + return -EINVAL; + if (boundlen <= 0) + return -ENAMETOOLONG; + + /* translate EUC-JP into SJIS */ + if (rawstring[0] > 0x7F) { + if (rawstring[0] == SS3) { + if (boundlen < 3) + return -EINVAL; + euc_offset = 3; + + if (IS_EUC_UDC_HI(rawstring[1], rawstring[2])) { + /* User defined characters half high */ + MAP_EUC2SJIS(rawstring[1], rawstring[2], 0xF5, + sjis_temp[0], sjis_temp[1], 0xF5); + } else if (euc2sjisibm(sjis_temp,rawstring[1],rawstring[2])) { + /* IBM extended characters */ + } else { + /* JIS X 0212 and Invalid characters*/ + return -EINVAL; + + /* 'GETA' with SJIS coding */ + /* sjis_temp[0] = 0x81; */ + /* sjis_temp[1] = 0xAC; */ + } + } else { + if (boundlen < 2) + return -EINVAL; + euc_offset = 2; + + if (IS_EUC_JISX0201KANA(rawstring[0], rawstring[1])) { + /* JIS X 0201 KANA */ + sjis_temp[0] = rawstring[1]; + sjis_temp[1] = 0x00; + } else if (IS_EUC_UDC_LOW(rawstring[0], rawstring[1])) { + /* User defined characters half low */ + MAP_EUC2SJIS(rawstring[0], rawstring[1], 0xF5, + sjis_temp[0], sjis_temp[1], 0xF0); + } else if (IS_EUC_JISX0208(rawstring[0], rawstring[1])) { + /* JIS X 0208 (include NEC spesial characters) */ + sjis_temp[0] = ((rawstring[0]-0x5f)/2) ^ 0xA0; + if (!(rawstring[0] & 1)) + sjis_temp[1] = rawstring[1] - 0x02; + else if (rawstring[1] < 0xE0) + sjis_temp[1] = rawstring[1] - 0x61; + else + sjis_temp[1] = rawstring[1] - 0x60; + } else { + /* Invalid characters */ + return -EINVAL; + } + } + } else { + euc_offset = 1; + + /* JIS X 0201 ROMAJI */ + sjis_temp[0] = rawstring[0]; + sjis_temp[1] = 0x00; + } + + if ( (n = p_nls->char2uni(sjis_temp, sizeof(sjis_temp), uni)) < 0) + return n; + + return euc_offset; +} + +static struct nls_table table = { + "euc-jp", + uni2char, + char2uni, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_euc_jp(void) +{ + p_nls = load_nls("cp932"); + + if (p_nls) { + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_euc_jp(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_euc_jp) +module_exit(exit_nls_euc_jp) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-kr.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_euc…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-kr.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_euc-kr.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * linux/fs/nls_euc-kr.c + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static struct nls_table table = { + "euc-kr", + NULL, + NULL, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_euc_kr(void) +{ + p_nls = load_nls("cp949"); + + if (p_nls) { + table.uni2char = p_nls->uni2char; + table.char2uni = p_nls->char2uni; + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_euc_kr(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_euc_kr) +module_exit(exit_nls_euc_kr) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_gb2312.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_gb2…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_gb2312.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_gb2312.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * linux/fs/nls_gb2312.c + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static struct nls_table table = { + "gb2312", + NULL, + NULL, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_gb2312(void) +{ + p_nls = load_nls("cp936"); + + if (p_nls) { + table.uni2char = p_nls->uni2char; + table.char2uni = p_nls->char2uni; + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_gb2312(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_gb2312) +module_exit(exit_nls_gb2312) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-1.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-1.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-1.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,273 @@ +/* + * linux/fs/nls_iso8859-1.c + * + * Charset iso8859-1 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, + 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, + 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0*/ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, + 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, + 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0*/ + 0x00d0, 0x00d1, 0x00d2, 0x00d3, + 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, + 0x00dc, 0x00dd, 0x00de, 0x00df, + /* 0xe0*/ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, + 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0*/ + 0x00f0, 0x00f1, 0x00f2, 0x00f3, + 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x00fd, 0x00fe, 0x00ff, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0x00, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-1", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_1(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_1(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_1) +module_exit(exit_nls_iso8859_1) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-13.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-13.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-13.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,301 @@ +/* + * linux/fs/nls_iso8859-13.c + * + * Charset iso8859-13 translation tables. + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x201d, 0x00a2, 0x00a3, + 0x00a4, 0x201e, 0x00a6, 0x00a7, + 0x00d8, 0x00a9, 0x0156, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x00c6, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x201c, 0x00b5, 0x00b6, 0x00b7, + 0x00f8, 0x00b9, 0x0157, 0x00bb, + 0x00bc, 0x00bd, 0x00be, 0x00e6, + /* 0xc0*/ + 0x0104, 0x012e, 0x0100, 0x0106, + 0x00c4, 0x00c5, 0x0118, 0x0112, + 0x010c, 0x00c9, 0x0179, 0x0116, + 0x0122, 0x0136, 0x012a, 0x013b, + /* 0xd0*/ + 0x0160, 0x0143, 0x0145, 0x00d3, + 0x014c, 0x00d5, 0x00d6, 0x00d7, + 0x0172, 0x0141, 0x015a, 0x016a, + 0x00dc, 0x017b, 0x017d, 0x00df, + /* 0xe0*/ + 0x0105, 0x012f, 0x0101, 0x0107, + 0x00e4, 0x00e5, 0x0119, 0x0113, + 0x010d, 0x00e9, 0x017a, 0x0117, + 0x0123, 0x0137, 0x012b, 0x013c, + /* 0xf0*/ + 0x0161, 0x0144, 0x0146, 0x00f3, + 0x014d, 0x00f5, 0x00f6, 0x00f7, + 0x0173, 0x0142, 0x015b, 0x016b, + 0x00fc, 0x017c, 0x017e, 0x2019, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0xab, 0xac, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0xb9, 0x00, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0xc4, 0xc5, 0xaf, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xd3, 0x00, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xa8, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0xe4, 0xe5, 0xbf, 0x00, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xf3, 0x00, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xb8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0xc2, 0xe2, 0x00, 0x00, 0xc0, 0xe0, 0xc3, 0xe3, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0xc7, 0xe7, 0x00, 0x00, 0xcb, 0xeb, /* 0x10-0x17 */ + 0xc6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0xce, 0xee, 0x00, 0x00, 0xc1, 0xe1, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0xed, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0xcf, 0xef, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0xd9, 0xf9, 0xd1, 0xf1, 0xd2, 0xf2, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0xd4, 0xf4, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xba, /* 0x50-0x57 */ + 0x00, 0x00, 0xda, 0xfa, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xca, 0xea, 0xdd, 0xfd, 0xde, 0xfe, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0xff, 0x00, 0x00, 0xb4, 0xa1, 0xa5, 0x00, /* 0x18-0x1f */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xb1, 0xa2, 0xb3, 0xa4, 0xb5, 0xb6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xb9, 0xba, 0xbb, 0xbc, 0xad, 0xbe, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbf, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xa1, 0xb2, 0xa3, 0xb4, 0xa5, 0xa6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xa9, 0xaa, 0xab, 0xac, 0xbd, 0xae, 0xbd, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-13", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_13(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_13(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_13) +module_exit(exit_nls_iso8859_13) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-14.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-14.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-14.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,357 @@ +/* + * linux/fs/nls_iso8859-14.c + * + * Charset iso8859-14 translation tables. + * + * Generated automatically from the Unicode and charset table + * provided by the Unicode Organisation at + *
http://www.unicode.org/
+ * The Unicode to charset table has only exact mappings. + * + * Rhys Jones, Swansea University Computer Society + * rhys(a)sucs.swan.ac.uk + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x1e02, 0x1e03, 0x00a3, + 0x010a, 0x010b, 0x1e0a, 0x00a7, + 0x1e80, 0x00a9, 0x1e82, 0x1e0b, + 0x1ef2, 0x00ad, 0x00ae, 0x0178, + /* 0xb0*/ + 0x1e1e, 0x1e1f, 0x0120, 0x0121, + 0x1e40, 0x1e41, 0x00b6, 0x1e56, + 0x1e81, 0x1e57, 0x1e83, 0x1e60, + 0x1ef3, 0x1e84, 0x1e85, 0x1e61, + /* 0xc0*/ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, + 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, + 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0*/ + 0x0174, 0x00d1, 0x00d2, 0x00d3, + 0x00d4, 0x00d5, 0x00d6, 0x1e6a, + 0x00d8, 0x00d9, 0x00da, 0x00db, + 0x00dc, 0x00dd, 0x0176, 0x00df, + /* 0xe0*/ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, + 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0*/ + 0x0175, 0x00f1, 0x00f2, 0x00f3, + 0x00f4, 0x00f5, 0x00f6, 0x1e6b, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x00fd, 0x0177, 0x00ff, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0x00, 0x00, 0x00, 0xad, 0xae, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x00, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0x00, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0x00, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1, /* 0x18-0x1f */ + 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, /* 0x70-0x77 */ + 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page1e[256] = { + 0x00, 0x00, 0xa1, 0xa2, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0xa6, 0xab, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xb1, /* 0x18-0x1f */ + 0xb2, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xb4, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0xb9, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xbb, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0xd7, 0xf7, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, 0xde, 0xfe, /* 0x70-0x77 */ + 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0xa8, 0xb8, 0xaa, 0xba, 0xbd, 0xbe, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, page1e, NULL, + + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa2, 0xa2, 0xa3, 0xab, 0xab, 0xab, 0xa7, /* 0xa0-0xa7 */ + 0xb8, 0xa9, 0xba, 0xab, 0xbc, 0xad, 0xae, 0xff, /* 0xa8-0xaf */ + 0xb1, 0xb1, 0xb3, 0xb3, 0xb5, 0xb5, 0xb6, 0xb9, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbf, 0xbc, 0xbe, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa1, 0xa3, 0xa6, 0xa6, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xa6, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb0, 0xb2, 0xb2, 0xb4, 0xb4, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xa8, 0xb7, 0xaa, 0xbb, 0xac, 0xbd, 0xbd, 0xbb, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xaf, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-14", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_14(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_14(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_14) +module_exit(exit_nls_iso8859_14) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-15.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-15.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-15.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,323 @@ +/* + * linux/fs/nls_iso8859-15.c + * + * Charset iso8859-15 translation tables. + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, + 0x20ac, 0x00a5, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x00aa, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x017d, 0x00b5, 0x00b6, 0x00b7, + 0x017e, 0x00b9, 0x00ba, 0x00bb, + 0x0152, 0x0153, 0x0178, 0x00bf, + /* 0xc0*/ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, + 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, + 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0*/ + 0x00d0, 0x00d1, 0x00d2, 0x00d3, + 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, + 0x00dc, 0x00dd, 0x00de, 0x00df, + /* 0xe0*/ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, + 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0*/ + 0x00f0, 0x00f1, 0x00f2, 0x00f3, + 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x00fd, 0x00fe, 0x00ff, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0xa5, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0x00, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0xb9, 0xba, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0xbc, 0xbd, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xa6, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0xbe, 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb8, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + + page20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa8, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb8, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbd, 0xbd, 0xff, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa6, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb4, 0xb9, 0xba, 0xbb, 0xbc, 0xbc, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xbe, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-15", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_15(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_15(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_15) +module_exit(exit_nls_iso8859_15) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-2.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-2.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-2.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,324 @@ +/* + * linux/fs/nls_iso8859-2.c + * + * Charset iso8859-2 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x0104, 0x02d8, 0x0141, + 0x00a4, 0x013d, 0x015a, 0x00a7, + 0x00a8, 0x0160, 0x015e, 0x0164, + 0x0179, 0x00ad, 0x017d, 0x017b, + /* 0xb0*/ + 0x00b0, 0x0105, 0x02db, 0x0142, + 0x00b4, 0x013e, 0x015b, 0x02c7, + 0x00b8, 0x0161, 0x015f, 0x0165, + 0x017a, 0x02dd, 0x017e, 0x017c, + /* 0xc0*/ + 0x0154, 0x00c1, 0x00c2, 0x0102, + 0x00c4, 0x0139, 0x0106, 0x00c7, + 0x010c, 0x00c9, 0x0118, 0x00cb, + 0x011a, 0x00cd, 0x00ce, 0x010e, + /* 0xd0*/ + 0x0110, 0x0143, 0x0147, 0x00d3, + 0x00d4, 0x0150, 0x00d6, 0x00d7, + 0x0158, 0x016e, 0x00da, 0x0170, + 0x00dc, 0x00dd, 0x0162, 0x00df, + /* 0xe0*/ + 0x0155, 0x00e1, 0x00e2, 0x0103, + 0x00e4, 0x013a, 0x0107, 0x00e7, + 0x010d, 0x00e9, 0x0119, 0x00eb, + 0x011b, 0x00ed, 0x00ee, 0x010f, + /* 0xf0*/ + 0x0111, 0x0144, 0x0148, 0x00f3, + 0x00f4, 0x0151, 0x00f6, 0x00f7, + 0x0159, 0x016f, 0x00fa, 0x0171, + 0x00fc, 0x00fd, 0x0163, 0x02d9, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0x00, 0x00, 0xda, 0x00, 0xdc, 0xdd, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0x00, 0x00, 0xfa, 0x00, 0xfc, 0xfd, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0xc3, 0xe3, 0xa1, 0xb1, 0xc6, 0xe6, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0xcf, 0xef, /* 0x08-0x0f */ + 0xd0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0xca, 0xea, 0xcc, 0xec, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0xc5, 0xe5, 0x00, 0x00, 0xa5, 0xb5, 0x00, /* 0x38-0x3f */ + 0x00, 0xa3, 0xb3, 0xd1, 0xf1, 0x00, 0x00, 0xd2, /* 0x40-0x47 */ + 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xd5, 0xf5, 0x00, 0x00, 0xc0, 0xe0, 0x00, 0x00, /* 0x50-0x57 */ + 0xd8, 0xf8, 0xa6, 0xb6, 0x00, 0x00, 0xaa, 0xba, /* 0x58-0x5f */ + 0xa9, 0xb9, 0xde, 0xfe, 0xab, 0xbb, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, /* 0x68-0x6f */ + 0xdb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0xac, 0xbc, 0xaf, 0xbf, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page02[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xa2, 0xff, 0x00, 0xb2, 0x00, 0xbd, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, page02, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xb1, 0xa2, 0xb3, 0xa4, 0xb5, 0xb6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xb9, 0xba, 0xbb, 0xbc, 0xad, 0xbe, 0xbf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xa1, 0xb2, 0xa3, 0xb4, 0xa5, 0xa6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xa9, 0xaa, 0xab, 0xac, 0xbd, 0xae, 0xaf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-2", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_2(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_2(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_2) +module_exit(exit_nls_iso8859_2) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-3.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-3.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-3.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,324 @@ +/* + * linux/fs/nls_iso8859-3.c + * + * Charset iso8859-3 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x0126, 0x02d8, 0x00a3, + 0x00a4, 0x0000, 0x0124, 0x00a7, + 0x00a8, 0x0130, 0x015e, 0x011e, + 0x0134, 0x00ad, 0x0000, 0x017b, + /* 0xb0*/ + 0x00b0, 0x0127, 0x00b2, 0x00b3, + 0x00b4, 0x00b5, 0x0125, 0x00b7, + 0x00b8, 0x0131, 0x015f, 0x011f, + 0x0135, 0x00bd, 0x0000, 0x017c, + /* 0xc0*/ + 0x00c0, 0x00c1, 0x00c2, 0x0000, + 0x00c4, 0x010a, 0x0108, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, + 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0*/ + 0x0000, 0x00d1, 0x00d2, 0x00d3, + 0x00d4, 0x0120, 0x00d6, 0x00d7, + 0x011c, 0x00d9, 0x00da, 0x00db, + 0x00dc, 0x016c, 0x015c, 0x00df, + /* 0xe0*/ + 0x00e0, 0x00e1, 0x00e2, 0x0000, + 0x00e4, 0x010b, 0x0109, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, + 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0*/ + 0x0000, 0x00f1, 0x00f2, 0x00f3, + 0x00f4, 0x0121, 0x00f6, 0x00f7, + 0x011d, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x016d, 0x015d, 0x02d9, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0xa3, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0x00, 0xb2, 0xb3, 0xb4, 0xb5, 0x00, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0x00, 0x00, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0x00, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0x00, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0x00, 0x00, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0x00, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0x00, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0xc6, 0xe6, 0xc5, 0xe5, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0xd8, 0xf8, 0xab, 0xbb, /* 0x18-0x1f */ + 0xd5, 0xf5, 0x00, 0x00, 0xa6, 0xb6, 0xa1, 0xb1, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xa9, 0xb9, 0x00, 0x00, 0xac, 0xbc, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, 0xaa, 0xba, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0xaf, 0xbf, 0x00, 0x00, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page02[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0xa2, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, page02, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xb1, 0xa2, 0xa3, 0xa4, 0x00, 0xb6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x69, 0xba, 0xbb, 0xbc, 0xad, 0x00, 0xbf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x00, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0x00, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xa1, 0xb2, 0xb3, 0xb4, 0x00, 0xa6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0x49, 0xaa, 0xab, 0xac, 0xbd, 0x00, 0xaf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0x00, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-3", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_3(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_3(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_3) +module_exit(exit_nls_iso8859_3) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-4.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-4.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-4.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,324 @@ +/* + * linux/fs/nls_iso8859-4.c + * + * Charset iso8859-4 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x0104, 0x0138, 0x0156, + 0x00a4, 0x0128, 0x013b, 0x00a7, + 0x00a8, 0x0160, 0x0112, 0x0122, + 0x0166, 0x00ad, 0x017d, 0x00af, + /* 0xb0*/ + 0x00b0, 0x0105, 0x02db, 0x0157, + 0x00b4, 0x0129, 0x013c, 0x02c7, + 0x00b8, 0x0161, 0x0113, 0x0123, + 0x0167, 0x014a, 0x017e, 0x014b, + /* 0xc0*/ + 0x0100, 0x00c1, 0x00c2, 0x00c3, + 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, + 0x0116, 0x00cd, 0x00ce, 0x012a, + /* 0xd0*/ + 0x0110, 0x0145, 0x014c, 0x0136, + 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x0172, 0x00da, 0x00db, + 0x00dc, 0x0168, 0x016a, 0x00df, + /* 0xe0*/ + 0x0101, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, + 0x0117, 0x00ed, 0x00ee, 0x012b, + /* 0xf0*/ + 0x0111, 0x0146, 0x014d, 0x0137, + 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x0173, 0x00fa, 0x00fb, + 0x00fc, 0x0169, 0x016b, 0x02d9, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x00, /* 0xc0-0xc7 */ + 0x00, 0xc9, 0x00, 0xcb, 0x00, 0xcd, 0xce, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0x00, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0x00, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x00, /* 0xe0-0xe7 */ + 0x00, 0xe9, 0x00, 0xeb, 0x00, 0xed, 0xee, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0x00, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0xc0, 0xe0, 0x00, 0x00, 0xa1, 0xb1, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xc8, 0xe8, 0x00, 0x00, /* 0x08-0x0f */ + 0xd0, 0xf0, 0xaa, 0xba, 0x00, 0x00, 0xcc, 0xec, /* 0x10-0x17 */ + 0xca, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0xab, 0xbb, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0xa5, 0xb5, 0xcf, 0xef, 0x00, 0x00, 0xc7, 0xe7, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd3, 0xf3, /* 0x30-0x37 */ + 0xa2, 0x00, 0x00, 0xa6, 0xb6, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0xf1, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0xbd, 0xbf, 0xd2, 0xf2, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0xb3, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0xa9, 0xb9, 0x00, 0x00, 0x00, 0x00, 0xac, 0xbc, /* 0x60-0x67 */ + 0xdd, 0xfd, 0xde, 0xfe, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xbe, 0x00, /* 0x78-0x7f */ +}; + +static unsigned char page02[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0xff, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, page02, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xb1, 0xa2, 0xb3, 0xa4, 0xb5, 0xb6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xb9, 0xba, 0xbb, 0xbc, 0xad, 0xbe, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbf, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xa1, 0xb2, 0xa3, 0xb4, 0xa5, 0xa6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xa9, 0xaa, 0xab, 0xac, 0xbd, 0xae, 0xbd, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-4", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_4(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_4(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_4) +module_exit(exit_nls_iso8859_4) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-5.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-5.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-5.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,288 @@ +/* + * linux/fs/nls_iso8859-5.c + * + * Charset iso8859-5 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x0401, 0x0402, 0x0403, + 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, + 0x040c, 0x00ad, 0x040e, 0x040f, + /* 0xb0*/ + 0x0410, 0x0411, 0x0412, 0x0413, + 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, + 0x041c, 0x041d, 0x041e, 0x041f, + /* 0xc0*/ + 0x0420, 0x0421, 0x0422, 0x0423, + 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, + 0x042c, 0x042d, 0x042e, 0x042f, + /* 0xd0*/ + 0x0430, 0x0431, 0x0432, 0x0433, + 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, + 0x043c, 0x043d, 0x043e, 0x043f, + /* 0xe0*/ + 0x0440, 0x0441, 0x0442, 0x0443, + 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, + 0x044c, 0x044d, 0x044e, 0x044f, + /* 0xf0*/ + 0x2116, 0x0451, 0x0452, 0x0453, + 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, + 0x045c, 0x00a7, 0x045e, 0x045f, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static unsigned char page04[256] = { + 0x00, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0x00-0x07 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, /* 0x08-0x0f */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0x10-0x17 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0x18-0x1f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0x50-0x57 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0xfe, 0xff, /* 0x58-0x5f */ +}; + +static unsigned char page21[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, /* 0x10-0x17 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, page21, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xa0-0xa7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xad, 0xfe, 0xff, /* 0xa8-0xaf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xb0-0xb7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xd0-0xd7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xf0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xf0-0xf7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xfd, 0xae, 0xaf, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-5", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_5(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_5(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_5) +module_exit(exit_nls_iso8859_5) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-6.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-6.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-6.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,279 @@ +/* + * linux/fs/nls_iso8859-6.c + * + * Charset iso8859-6 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0660, 0x0661, 0x0662, 0x0663, + 0x0664, 0x0665, 0x0666, 0x0667, + 0x0668, 0x0669, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x0000, 0x0000, 0x0000, + 0x00a4, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x060c, 0x00ad, 0x0000, 0x0000, + /* 0xb0*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x061b, + 0x0000, 0x0000, 0x0000, 0x061f, + /* 0xc0*/ + 0x0000, 0x0621, 0x0622, 0x0623, + 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, + 0x062c, 0x062d, 0x062e, 0x062f, + /* 0xd0*/ + 0x0630, 0x0631, 0x0632, 0x0633, + 0x0634, 0x0635, 0x0636, 0x0637, + 0x0638, 0x0639, 0x063a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xe0*/ + 0x0640, 0x0641, 0x0642, 0x0643, + 0x0644, 0x0645, 0x0646, 0x0647, + 0x0648, 0x0649, 0x064a, 0x064b, + 0x064c, 0x064d, 0x064e, 0x064f, + /* 0xf0*/ + 0x0650, 0x0651, 0x0652, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ +}; + +static unsigned char page06[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0x18-0x1f */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x20-0x27 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x28-0x2f */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0x30-0x37 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0x40-0x47 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0x48-0x4f */ + 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x60-0x67 */ + 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, NULL, NULL, page06, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xbf, /* 0xb8-0xbf */ + 0x00, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0-0xf7 */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-6", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_6(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_6(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_6) +module_exit(exit_nls_iso8859_6) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-7.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-7.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-7.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,333 @@ +/* + * linux/fs/nls_iso8859-7.c + * + * Charset iso8859-7 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x02bd, 0x02bc, 0x00a3, + 0x0000, 0x0000, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x0000, 0x00ab, + 0x00ac, 0x00ad, 0x0000, 0x2015, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x0384, 0x0385, 0x0386, 0x00b7, + 0x0388, 0x0389, 0x038a, 0x00bb, + 0x038c, 0x00bd, 0x038e, 0x038f, + /* 0xc0*/ + 0x0390, 0x0391, 0x0392, 0x0393, + 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, + 0x039c, 0x039d, 0x039e, 0x039f, + /* 0xd0*/ + 0x03a0, 0x03a1, 0x0000, 0x03a3, + 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03aa, 0x03ab, + 0x03ac, 0x03ad, 0x03ae, 0x03af, + /* 0xe0*/ + 0x03b0, 0x03b1, 0x03b2, 0x03b3, + 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, + 0x03bc, 0x03bd, 0x03be, 0x03bf, + /* 0xf0*/ + 0x03c0, 0x03c1, 0x03c2, 0x03c3, + 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, + 0x03cc, 0x03cd, 0x03ce, 0x0000, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0x00, 0x00, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0x00, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0x00, 0x00, 0x00, 0xb7, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0x00, /* 0xb8-0xbf */ +}; + +static unsigned char page02[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0xa2, 0xa1, 0x00, 0x00, /* 0xb8-0xbf */ +}; + +static unsigned char page03[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0xb4, 0xb5, 0xb6, 0x00, /* 0x80-0x87 */ + 0xb8, 0xb9, 0xba, 0x00, 0xbc, 0x00, 0xbe, 0xbf, /* 0x88-0x8f */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0x90-0x97 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0x98-0x9f */ + 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xa0-0xa7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xa8-0xaf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xb0-0xb7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xb8-0xbf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xc0-0xc7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xc8-0xcf */ +}; + +static unsigned char page20[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, /* 0x10-0x17 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, page02, page03, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + page20, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xdc, 0xb7, /* 0xb0-0xb7 */ + 0xdd, 0xde, 0xdf, 0xbb, 0xfc, 0xbd, 0xfd, 0xfe, /* 0xb8-0xbf */ + 0xc0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0x00, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0x00, 0x00, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0x00, 0xab, 0xac, 0xad, 0x00, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0x00, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xb6, 0xb8, 0xb9, 0xba, /* 0xd8-0xdf */ + 0xe0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd3, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xbc, 0xbe, 0xbf, 0x00, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-7", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_7(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_7(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_7) +module_exit(exit_nls_iso8859_7) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-8.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-8.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-8.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * linux/fs/nls_iso8859-8.c + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static struct nls_table table = { + "iso8859-8", + NULL, + NULL, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_8(void) +{ + p_nls = load_nls("cp1255"); + + if (p_nls) { + table.uni2char = p_nls->uni2char; + table.char2uni = p_nls->char2uni; + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_iso8859_8(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_iso8859_8) +module_exit(exit_nls_iso8859_8) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-9.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_iso…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-9.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_iso8859-9.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,288 @@ +/* + * linux/fs/nls_iso8859-9.c + * + * Charset iso8859-9 translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0x90*/ + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + /* 0xa0*/ + 0x00a0, 0x00a1, 0x00a2, 0x00a3, + 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, + 0x00ac, 0x00ad, 0x00ae, 0x00af, + /* 0xb0*/ + 0x00b0, 0x00b1, 0x00b2, 0x00b3, + 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, + 0x00bc, 0x00bd, 0x00be, 0x00bf, + /* 0xc0*/ + 0x00c0, 0x00c1, 0x00c2, 0x00c3, + 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, + 0x00cc, 0x00cd, 0x00ce, 0x00cf, + /* 0xd0*/ + 0x011e, 0x00d1, 0x00d2, 0x00d3, + 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, + 0x00dc, 0x0130, 0x015e, 0x00df, + /* 0xe0*/ + 0x00e0, 0x00e1, 0x00e2, 0x00e3, + 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, + 0x00ec, 0x00ed, 0x00ee, 0x00ef, + /* 0xf0*/ + 0x011f, 0x00f1, 0x00f2, 0x00f3, + 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, + 0x00fc, 0x0131, 0x015f, 0x00ff, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0x00, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x00, 0x00, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0x00, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x00, 0x00, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char page01[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xf0, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0xdd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xfe, /* 0x58-0x5f */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, page01, NULL, NULL, NULL, NULL, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0x69, 0xfe, 0xdf, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0x00, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0x49, 0xde, 0x00, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "iso8859-9", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_iso8859_9(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_iso8859_9(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_iso8859_9) +module_exit(exit_nls_iso8859_9) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-r.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_koi…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-r.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-r.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,339 @@ +/* + * linux/fs/nls_koi8-r.c + * + * Charset koi8-r translation tables. + * Generated automatically from the Unicode and charset + * tables from the Unicode Organization (
www.unicode.org
). + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x2500, 0x2502, 0x250c, 0x2510, + 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, + 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90*/ + 0x2591, 0x2592, 0x2593, 0x2320, + 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, + 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0*/ + 0x2550, 0x2551, 0x2552, 0x0451, + 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255a, + 0x255b, 0x255c, 0x255d, 0x255e, + /* 0xb0*/ + 0x255f, 0x2560, 0x2561, 0x0401, + 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, + 0x256a, 0x256b, 0x256c, 0x00a9, + /* 0xc0*/ + 0x044e, 0x0430, 0x0431, 0x0446, + 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, + 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0*/ + 0x043f, 0x044f, 0x0440, 0x0441, + 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, + 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0*/ + 0x042e, 0x0410, 0x0411, 0x0426, + 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, + 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0*/ + 0x041f, 0x042f, 0x0420, 0x0421, + 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, + 0x042d, 0x0429, 0x0427, 0x042a, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ +}; + +static unsigned char page04[256] = { + 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ + 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xa0, 0xa1, 0xa2, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, /* 0x50-0x57 */ + 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ + 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, /* 0x60-0x67 */ + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "koi8-r", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_koi8_r(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_koi8_r(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_koi8_r) +module_exit(exit_nls_koi8_r) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-ru.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_koi…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-ru.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-ru.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,99 @@ +/* + * linux/fs/nls_koi8-ru.c + * + * Charset koi8-ru translation based on charset koi8-u. + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static int uni2char(const wchar_t uni, + unsigned char *out, int boundlen) +{ + if (boundlen <= 0) + return -ENAMETOOLONG; + + if ((uni & 0xffaf) == 0x040e || (uni & 0xffce) == 0x254c) { + /* koi8-ru and koi8-u differ only on two characters */ + if (uni == 0x040e) + return 0xbe; + else if (uni == 0x045e) + return 0xae; + else if (uni == 0x255d || uni == 0x256c) + return 0; + else + return p_nls->uni2char(uni, out, boundlen); + } + else + /* fast path */ + return p_nls->uni2char(uni, out, boundlen); +} + +static int char2uni(const unsigned char *rawstring, int boundlen, + wchar_t *uni) +{ + int n; + + if ((*rawstring & 0xef) != 0xae) { + /* koi8-ru and koi8-u differ only on two characters */ + *uni = (*rawstring & 0x10) ? 0x040e : 0x045e; + return 1; + } + + n = (int)(p_nls->char2uni((const PUCHAR)rawstring, boundlen,uni)); + return n; +} + +static struct nls_table table = { + "koi8-ru", + uni2char, + char2uni, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_koi8_ru(void) +{ + p_nls = load_nls("koi8-u"); + + if (p_nls) { + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_koi8_ru(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_koi8_ru) +module_exit(exit_nls_koi8_ru) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-u.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_koi…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-u.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_koi8-u.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,346 @@ +/* + * linux/fs/nls_koi8-u.c + * + * Charset koi8-u translation tables. + * The Unicode to charset table has only exact mappings. + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static wchar_t charset2uni[256] = { + /* 0x00*/ + 0x0000, 0x0001, 0x0002, 0x0003, + 0x0004, 0x0005, 0x0006, 0x0007, + 0x0008, 0x0009, 0x000a, 0x000b, + 0x000c, 0x000d, 0x000e, 0x000f, + /* 0x10*/ + 0x0010, 0x0011, 0x0012, 0x0013, + 0x0014, 0x0015, 0x0016, 0x0017, + 0x0018, 0x0019, 0x001a, 0x001b, + 0x001c, 0x001d, 0x001e, 0x001f, + /* 0x20*/ + 0x0020, 0x0021, 0x0022, 0x0023, + 0x0024, 0x0025, 0x0026, 0x0027, + 0x0028, 0x0029, 0x002a, 0x002b, + 0x002c, 0x002d, 0x002e, 0x002f, + /* 0x30*/ + 0x0030, 0x0031, 0x0032, 0x0033, + 0x0034, 0x0035, 0x0036, 0x0037, + 0x0038, 0x0039, 0x003a, 0x003b, + 0x003c, 0x003d, 0x003e, 0x003f, + /* 0x40*/ + 0x0040, 0x0041, 0x0042, 0x0043, + 0x0044, 0x0045, 0x0046, 0x0047, + 0x0048, 0x0049, 0x004a, 0x004b, + 0x004c, 0x004d, 0x004e, 0x004f, + /* 0x50*/ + 0x0050, 0x0051, 0x0052, 0x0053, + 0x0054, 0x0055, 0x0056, 0x0057, + 0x0058, 0x0059, 0x005a, 0x005b, + 0x005c, 0x005d, 0x005e, 0x005f, + /* 0x60*/ + 0x0060, 0x0061, 0x0062, 0x0063, + 0x0064, 0x0065, 0x0066, 0x0067, + 0x0068, 0x0069, 0x006a, 0x006b, + 0x006c, 0x006d, 0x006e, 0x006f, + /* 0x70*/ + 0x0070, 0x0071, 0x0072, 0x0073, + 0x0074, 0x0075, 0x0076, 0x0077, + 0x0078, 0x0079, 0x007a, 0x007b, + 0x007c, 0x007d, 0x007e, 0x007f, + /* 0x80*/ + 0x2500, 0x2502, 0x250c, 0x2510, + 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, + 0x2584, 0x2588, 0x258c, 0x2590, + /* 0x90*/ + 0x2591, 0x2592, 0x2593, 0x2320, + 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, + 0x00b0, 0x00b2, 0x00b7, 0x00f7, + /* 0xa0*/ + 0x2550, 0x2551, 0x2552, 0x0451, + 0x0454, 0x2554, 0x0456, 0x0457, + 0x2557, 0x2558, 0x2559, 0x255a, + 0x255b, 0x0491, 0x255d, 0x255e, + /* 0xb0*/ + 0x255f, 0x2560, 0x2561, 0x0401, + 0x0404, 0x2563, 0x0406, 0x0407, + 0x2566, 0x2567, 0x2568, 0x2569, + 0x256a, 0x0490, 0x256c, 0x00a9, + /* 0xc0*/ + 0x044e, 0x0430, 0x0431, 0x0446, + 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, + 0x043b, 0x043c, 0x043d, 0x043e, + /* 0xd0*/ + 0x043f, 0x044f, 0x0440, 0x0441, + 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, + 0x044d, 0x0449, 0x0447, 0x044a, + /* 0xe0*/ + 0x042e, 0x0410, 0x0411, 0x0426, + 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, + 0x041b, 0x041c, 0x041d, 0x041e, + /* 0xf0*/ + 0x041f, 0x042f, 0x0420, 0x0421, + 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, + 0x042d, 0x0429, 0x0427, 0x042a, +}; + +static unsigned char page00[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ + 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8-0xaf */ + 0x9c, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x9e, /* 0xb0-0xb7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xb8-0xbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc0-0xc7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xc8-0xcf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0-0xd7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd8-0xdf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe0-0xe7 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xe8-0xef */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, /* 0xf0-0xf7 */ +}; + +static unsigned char page04[256] = { + 0x00, 0xb3, 0x00, 0x00, 0xb4, 0x00, 0xb6, 0xb7, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0xe1, 0xe2, 0xf7, 0xe7, 0xe4, 0xe5, 0xf6, 0xfa, /* 0x10-0x17 */ + 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0, /* 0x18-0x1f */ + 0xf2, 0xf3, 0xf4, 0xf5, 0xe6, 0xe8, 0xe3, 0xfe, /* 0x20-0x27 */ + 0xfb, 0xfd, 0xff, 0xf9, 0xf8, 0xfc, 0xe0, 0xf1, /* 0x28-0x2f */ + 0xc1, 0xc2, 0xd7, 0xc7, 0xc4, 0xc5, 0xd6, 0xda, /* 0x30-0x37 */ + 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, /* 0x38-0x3f */ + 0xd2, 0xd3, 0xd4, 0xd5, 0xc6, 0xc8, 0xc3, 0xde, /* 0x40-0x47 */ + 0xdb, 0xdd, 0xdf, 0xd9, 0xd8, 0xdc, 0xc0, 0xd1, /* 0x48-0x4f */ + 0x00, 0xa3, 0x00, 0x00, 0xa4, 0x00, 0xa6, 0xa7, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x60-0x67 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0xbd, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ +}; + +static unsigned char page22[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x95, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x50-0x57 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x58-0x5f */ + 0x00, 0x00, 0x00, 0x00, 0x98, 0x99, 0x00, 0x00, /* 0x60-0x67 */ +}; + +static unsigned char page23[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x93, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20-0x27 */ +}; + +static unsigned char page25[256] = { + 0x80, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00-0x07 */ + 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, /* 0x08-0x0f */ + 0x83, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, /* 0x10-0x17 */ + 0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, /* 0x18-0x1f */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, /* 0x20-0x27 */ + 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, /* 0x28-0x2f */ + 0x00, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, /* 0x30-0x37 */ + 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, /* 0x38-0x3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x40-0x47 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x48-0x4f */ + 0xa0, 0xa1, 0xa2, 0x00, 0xa5, 0x00, 0x00, 0xa8, /* 0x50-0x57 */ + 0xa9, 0xaa, 0xab, 0xac, 0x00, 0xae, 0xaf, 0xb0, /* 0x58-0x5f */ + 0xb1, 0xb2, 0x00, 0xb5, 0x00, 0x00, 0xb8, 0xb9, /* 0x60-0x67 */ + 0xba, 0xbb, 0xbc, 0x00, 0xbe, 0x00, 0x00, 0x00, /* 0x68-0x6f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x70-0x77 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x78-0x7f */ + + 0x8b, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, /* 0x80-0x87 */ + 0x8d, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, /* 0x88-0x8f */ + 0x8f, 0x90, 0x91, 0x92, 0x00, 0x00, 0x00, 0x00, /* 0x90-0x97 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x98-0x9f */ + 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa0-0xa7 */ +}; + +static unsigned char *page_uni2charset[256] = { + page00, NULL, NULL, NULL, page04, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, page22, page23, NULL, page25, NULL, NULL, +}; + +static unsigned char charset2lower[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x40-0x47 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x48-0x4f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x50-0x57 */ + 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 0x60-0x67 */ + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, /* 0x68-0x6f */ + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, /* 0x70-0x77 */ + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xa3, 0xa4, 0xb5, 0xa6, 0xa7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xad, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xc0-0xc7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xc8-0xcf */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xd0-0xd7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xd8-0xdf */ + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 0xe0-0xe7 */ + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* 0xe8-0xef */ + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* 0xf0-0xf7 */ + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* 0xf8-0xff */ +}; + +static unsigned char charset2upper[256] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, /* 0x00-0x07 */ + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* 0x08-0x0f */ + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, /* 0x10-0x17 */ + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, /* 0x18-0x1f */ + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, /* 0x20-0x27 */ + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, /* 0x28-0x2f */ + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 0x30-0x37 */ + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, /* 0x38-0x3f */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x40-0x47 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x48-0x4f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x50-0x57 */ + 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, /* 0x58-0x5f */ + 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 0x60-0x67 */ + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 0x68-0x6f */ + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 0x70-0x77 */ + 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, /* 0x78-0x7f */ + + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 0x80-0x87 */ + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 0x88-0x8f */ + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 0x90-0x97 */ + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 0x98-0x9f */ + 0xa0, 0xa1, 0xa2, 0xb3, 0xb4, 0xa5, 0xb6, 0xb7, /* 0xa0-0xa7 */ + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xbd, 0xae, 0xaf, /* 0xa8-0xaf */ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* 0xb0-0xb7 */ + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* 0xb8-0xbf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xc0-0xc7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xc8-0xcf */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xd0-0xd7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xd8-0xdf */ + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* 0xe0-0xe7 */ + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* 0xe8-0xef */ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 0xf0-0xf7 */ + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, /* 0xf8-0xff */ +}; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + unsigned char *uni2charset; + unsigned char cl = uni & 0x00ff; + unsigned char ch = (uni & 0xff00) >> 8; + + if (boundlen <= 0) + return -ENAMETOOLONG; + + uni2charset = page_uni2charset[ch]; + if (uni2charset && uni2charset[cl]) + out[0] = uni2charset[cl]; + else + return -EINVAL; + return 1; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + *uni = charset2uni[*rawstring]; + if (*uni == 0x0000) + return -EINVAL; + return 1; +} + +static struct nls_table table = { + "koi8-u", + uni2char, + char2uni, + charset2lower, + charset2upper, + THIS_MODULE, +}; + +static int __init init_nls_koi8_u(void) +{ + return register_nls(&table); +} + +static void __exit exit_nls_koi8_u(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_koi8_u) +module_exit(exit_nls_koi8_u) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * --------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_sjis.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_sji…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_sjis.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_sjis.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * linux/fs/nls_sjis.c + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static struct nls_table table = { + "sjis", + NULL, + NULL, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_sjis(void) +{ + p_nls = load_nls("cp932"); + + if (p_nls) { + table.uni2char = p_nls->uni2char; + table.char2uni = p_nls->char2uni; + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_sjis(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_sjis) +module_exit(exit_nls_sjis) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_tis-620.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_tis…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_tis-620.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_tis-620.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * linux/fs/nls_tis-620.c + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static struct nls_table *p_nls; + +static struct nls_table table = { + "tis-620", + NULL, + NULL, + NULL, + NULL, + THIS_MODULE, +}; + +static int __init init_nls_tis_620(void) +{ + p_nls = load_nls("cp874"); + + if (p_nls) { + table.uni2char = p_nls->uni2char; + table.char2uni = p_nls->char2uni; + table.charset2upper = p_nls->charset2upper; + table.charset2lower = p_nls->charset2lower; + return register_nls(&table); + } + + return -EINVAL; +} + +static void __exit exit_nls_tis_620(void) +{ + unregister_nls(&table); + unload_nls(p_nls); +} + +module_init(init_nls_tis_620) +module_exit(exit_nls_tis_620) + +/* + * Overrides for Emacs so that we follow Linus's tabbing style. + * Emacs will notice this stuff at the end of the file and automatically + * adjust the settings for this buffer only. This must remain at the end + * of the file. + * +--------------------------------------------------------------------------- + * Local variables: + * c-indent-level: 8 + * c-brace-imaginary-offset: 0 + * c-brace-offset: -8 + * c-argdecl-indent: 8 + * c-label-offset: -8 + * c-continued-statement-offset: 8 + * c-continued-brace-offset: 0 + * End: + */ Added: vendor/rfsd/current/RFSD/RFSD/nls/nls_utf8.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/nls/nls_utf…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/nls/nls_utf8.c (added) +++ vendor/rfsd/current/RFSD/RFSD/nls/nls_utf8.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,62 @@ +/* + * Module for handling utf8 just like any other charset. + * By Urban Widmark 2000 + */ + +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/string.h> +#include <linux/nls.h> +#include <linux/errno.h> + +static unsigned char identity[256]; + +static int uni2char(wchar_t uni, unsigned char *out, int boundlen) +{ + int n; + + if ( (n = utf8_wctomb(out, uni, boundlen)) == -1) { + KdBreakPoint(); + *out = '?'; + return -EINVAL; + } + return n; +} + +static int char2uni(const unsigned char *rawstring, int boundlen, wchar_t *uni) +{ + int n; + + if ( (n = utf8_mbtowc(uni, rawstring, boundlen)) == -1) { + KdBreakPoint(); + *uni = 0x003f; /* ? */ + n = -EINVAL; + } + return n; +} + +static struct nls_table table = { + "utf8", + uni2char, + char2uni, + identity, /* no conversion */ + identity, + THIS_MODULE, +}; + +static int __init init_nls_utf8(void) +{ + int i; + for (i=0; i<256; i++) + identity[i] = (unsigned char) i; + + return register_nls(&table); +} + +static void __exit exit_nls_utf8(void) +{ + unregister_nls(&table); +} + +module_init(init_nls_utf8) +module_exit(exit_nls_utf8) Added: vendor/rfsd/current/RFSD/RFSD/ntifs.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/ntifs.h?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/ntifs.h (added) +++ vendor/rfsd/current/RFSD/RFSD/ntifs.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,8051 @@ +/* + This is a free version of the file ntifs.h, release 44. + The purpose of this include file is to build file system and + file system filter drivers for Windows NT®, Windows® 2000 and + Windows® XP. + Copyright (C) 1999, 2000, 2001, 2002, 2003 Bo Brantén. + 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 + + The GNU General Public License is also available from: +
http://www.gnu.org/copyleft/gpl.html
+ + Windows and Windows NT are either registered trademarks or trademarks of + Microsoft Corporation in the United States and/or other countries. + + DISCLAIMER: I do not encourage anyone to use this include file to build + drivers used in production. The information in this include file is + incomplete and intended only as an studying companion. The information + has been found in books, magazines, on the Internet and received from + contributors. Some of the information in this file may not be available + in other publications intended for similar use, these should be used with + extra care. Some of the information in this file may have different names + than in other publications even though they describe the same thing. + + Please send comments, corrections and contributions to bosse(a)acc.umu.se + + The most recent version of this file is available from: +
http://www.acc.umu.se/~bosse/ntifs.h
+ + Thanks to: + Andrey Shedel, Luigi Mori, Louis Joubert, Itai Shaham, David Welch, + Emanuele Aliberti, Anton Altaparmakov, Dan Partelly, Mamaich, + Yossi Yaffe, Gunnar André Dalsnes, Vadim V Vorobev, Ashot Oganesyan K, + Oleg Nikityenko, Matt Wu, Tomas Olsson, Raaf, Anthony Choi, + Alexey Logachyov and Darja Isaksson. + + Revision history: + + 44. 2003-05-06 + Added: + Function prototypes: + InbvAcquireDisplayOwnership + InbvCheckDisplayOwnership + InbvDisplayString + InbvEnableBootDriver + InbvEnableDisplayString + InbvInstallDisplayStringFilter + InbvIsBootDriverInstalled + InbvNotifyDisplayOwnershipLost + InbvResetDisplay + InbvSetScrollRegion + InbvSetTextColor + InbvSolidColorFill + + 43. 2003-04-07 + Added: + Data types: + MCB + Function prototypes: + FsRtlAddMcbEntry + FsRtlInitializeMcb + FsRtlLookupLastMcbEntry + FsRtlLookupMcbEntry + FsRtlNotifyFilterChangeDirectory + FsRtlNotifyFilterReportChange + FsRtlNumberOfRunsInMcb + FsRtlRemoveMcbEntry + FsRtlTruncateMcb + FsRtlUninitializeMcb + + 42. 2003-03-30 + Corrected: + SYSTEM_CACHE_INFORMATION + SYSTEM_INFORMATION_CLASS + Added: + Data types: + SYSTEM_XXX_INFORMATION + THREAD_STATE + + 41. 2003-01-03 + Corrected: + CcMapData + PsDereferenceImpersonationToken + PsDereferencePrimaryToken + PsGetProcessExitTime + PsReferencePrimaryToken + Added: + Defines: + MAP_XXX + Function prototypes: + CcMdlWriteAbort + PsAssignImpersonationToken + PsChargeProcessNonPagedPoolQuota + PsChargeProcessPagedPoolQuota + PsChargeProcessPoolQuota + PsDisableImpersonation + PsImpersonateClient + PsIsSystemThread + PsRestoreImpersonation + SeDeleteAccessState + ZwOpenProcessTokenEx + ZwOpenThreadTokenEx + + 40. 2002-10-02 + Corrected: + HANDLE_TABLE_ENTRY + Added: + Defines: + FSRTL_FLAG_ADVANCED_HEADER + FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS + FSRTL_FLAG2_PURGE_WHEN_MAPPED + Data types: + FILE_ID_BOTH_DIR_INFORMATION + FILE_ID_FULL_DIR_INFORMATION + + 39. 2002-08-04 + Added: + Data types: + LARGE_MCB + Function prototypes: + FsRtlAddLargeMcbEntry + FsRtlGetNextLargeMcbEntry + FsRtlInitializeLargeMcb + FsRtlLookupLargeMcbEntry + FsRtlLookupLastLargeMcbEntry + FsRtlLookupLastLargeMcbEntryAndIndex + FsRtlNumberOfRunsInLargeMcb + FsRtlRemoveLargeMcbEntry + FsRtlResetLargeMcb + FsRtlSplitLargeMcb + FsRtlTruncateLargeMcb + FsRtlUninitializeLargeMcb + + 38. 2002-06-30 + Added: + Defines: + FILE_READ_ONLY_VOLUME + Function prototypes: + FsRtlAllocateResource + FsRtlIncrementCcFastReadNotPossible + FsRtlIncrementCcFastReadNoWait + FsRtlIncrementCcFastReadResourceMiss + FsRtlIncrementCcFastReadWait + KeIsAttachedProcess + KeIsExecutingDpc + KeRevertToUserAffinityThread + KeUpdateSystemTime + PsGetCurrentProcessSessionId + PsGetCurrentThreadPreviousMode + PsGetCurrentThreadStackBase + PsGetCurrentThreadStackLimit + RtlGetNtGlobalFlags + + 37. 2002-05-18 + Uppdated for Windows XP: + EPROCESS + ETHREAD + KPROCESS + KTHREAD + MMSUPPORT_FLAGS + MMSUPPORT + PRIVATE_CACHE_MAP_FLAGS + PRIVATE_CACHE_MAP + SHARED_CACHE_MAP + Corrected: + VACB + Added: + Data types: + EPROCESS_QUOTA_ENTRY + EPROCESS_QUOTA_BLOCK + EX_FAST_REF + EX_PUSH_LOCK + EX_RUNDOWN_REF + PAGEFAULT_HISTORY + SE_AUDIT_PROCESS_CREATION_INFO + SECTION_OBJECT + TERMINATION_PORT + + 36. 2002-05-14 + Corrected: + FILE_FS_FULL_SIZE_INFORMATION + + 35. 2002-03-23 + Added: + Defines: + COMPRESSION_XXX + Data types: + COMPRESSED_DATA_INFO + OBJECT_HEADER + VAD_HEADER + Function prototypes: + CcWaitForCurrentLazyWriterActivity + FsRtlCheckOplock + FsRtlCurrentBatchOplock + FsRtlDeregisterUncProvider + FsRtlInitializeOplock + FsRtlOplockFsctrl + FsRtlOplockIsFastIoPossible + FsRtlRegisterUncProvider + FsRtlUninitializeOplock + RtlCompressBuffer + RtlCompressChunks + RtlDecompressBuffer + RtlDecompressChunks + RtlDecompressFragment + RtlDescribeChunk + RtlGetCompressionWorkSpaceSize + RtlReserveChunk + + 34. 2002-02-14 + Corrected: + HARDWARE_PTE + Changed the use of _WIN32_WINNT to VER_PRODUCTBUILD since _WIN32_WINNT + is incorrectly defined in the Windows 2000 build environment included + in the Windows XP DDK. + + 33. 2002-01-20 + Added: + Function prototypes: + PsDereferenceImpersonationToken + PsDereferencePrimaryToken + + 32. 2002-01-18 + Corrected: + ObReferenceObjectByName + FILE_FS_OBJECT_ID_INFORMATION + FILE_OBJECTID_INFORMATION + Added: + Externals: + IoDriverObjectType + SeExports + Defines: + FILE_ACTION_XXX + FSCTL_XXX + IO_FILE_OBJECT_XXX + IRP_BEING_VERIFIED + TOKEN_XXX + Data types: + DEVICE_MAP + FILE_TRACKING_INFORMATION + SE_EXPORTS + Function prototypes: + SeEnableAccessToExports + + 31. 2001-12-23 + Corrected: + QueryQuota in EXTENDED_IO_STACK_LOCATION + FILE_LOCK + CcPinMappedData + CcPinRead + CcPreparePinWrite + FsRtlFastUnlockAll + FsRtlFastUnlockAllByKey + FsRtlFastUnlockSingle + FsRtlInitializeFileLock + FsRtlPrivateLock + FsRtlProcessFileLock + MmForceSectionClosed + MmIsRecursiveIoFault + SeImpersonateClient + SeImpersonateClientEx + Added: + Defines: + More FSRTL_FLAG_XXX + PIN_XXX + VACB_XXX + Data types: + REPARSE_DATA_BUFFER + Function prototypes: + CcCopyWriteWontFlush + CcGetFileSizePointer + CcGetFlushedValidData + CcIsFileCached + CcRemapBcb + ExDisableResourceBoostLite + ExQueryPoolBlockSize + FsRtlAllocateFileLock + FsRtlAreThereCurrentFileLocks + FsRtlFastLock + FsRtlFreeFileLock + IoCheckDesiredAccess + IoCheckEaBufferValidity + IoCheckFunctionAccess + IoCheckQuotaBufferValidity + IoCreateStreamFileObjectLite + IoFastQueryNetworkAttributes + IoGetRequestorProcessId + IoIsFileOpenedExclusively + IoIsSystemThread + IoIsValidNameGraftingBuffer + IoSynchronousPageWrite + IoThreadToProcess + KeInitializeQueue + KeInsertHeadQueue + KeInsertQueue + KeReadStateQueue + KeRemoveQueue + KeRundownQueue + MmSetAddressRangeModified + ObGetObjectPointerCount + ObMakeTemporaryObject + ObQueryObjectAuditingByHandle + PsChargePoolQuota + PsReturnPoolQuota + SeAppendPrivileges + SeAuditingFileEvents + SeAuditingFileOrGlobalEvents + SeCreateClientSecurity + SeCreateClientSecurityFromSubjectContext + SeDeleteClientSecurity + SeDeleteObjectAuditAlarm + SeFreePrivileges + SeLockSubjectContext + SeOpenObjectAuditAlarm + SeOpenObjectForDeleteAuditAlarm + SePrivilegeCheck + SeQueryAuthenticationIdToken + SeQuerySecurityDescriptorInfo + SeQuerySessionIdToken + SeSetAccessStateGenericMapping + SeSetSecurityDescriptorInfo + SeSetSecurityDescriptorInfoEx + SeTokenIsAdmin + SeTokenIsRestricted + SeTokenType + SeUnlockSubjectContext + + 30. 2001-10-24 + Corrected: + KINTERRUPT + OBJECT_TYPE + Added: + Defines: + More FSCTL_XXX + Data types: + BITMAP_RANGE + CreateMailslot in EXTENDED_IO_STACK_LOCATION + CreatePipe in EXTENDED_IO_STACK_LOCATION + QueryQuota in EXTENDED_IO_STACK_LOCATION + MAILSLOT_CREATE_PARAMETERS + MBCB + NAMED_PIPE_CREATE_PARAMETERS + PRIVATE_CACHE_MAP_FLAGS + PRIVATE_CACHE_MAP + SECURITY_CLIENT_CONTEXT + SHARED_CACHE_MAP + VACB + Function prototypes: + HalQueryRealTimeClock + HalSetRealTimeClock + PsGetProcessExitTime + PsIsThreadTerminating + PsLookupProcessThreadByCid + PsLookupThreadByThreadId + SeQueryAuthenticationIdToken + Externals: + KeServiceDescriptorTable + SePublicDefaultDacl + SeSystemDefaultDacl + + 29. 2001-10-06 + Added: + Defines: + FSRTL_VOLUME_XXX + Function prototypes: + FsRtlNotifyChangeDirectory + FsRtlNotifyReportChange + FsRtlNotifyVolumeEvent + + 28. 2001-09-16 + Added: + Function prototypes: + FsRtlNotifyInitializeSync + FsRtlNotifyUninitializeSync + SeImpersonateClientEx + SeReleaseSubjectContext + + 27. 2001-08-25 + Corrected: + KPROCESS + FILE_LOCK_ANCHOR + FsRtlNormalizeNtstatus + RtlSecondsSince1970ToTime + RtlTimeToSecondsSince1970 + SeQueryInformationToken + Added: + Defines: + FS_LFN_APIS + Data types: + FILE_LOCK_ENTRY + FILE_SHARED_LOCK_ENTRY + FILE_EXCLUSIVE_LOCK_ENTRY + Function prototypes: + FsRtlCheckLockForReadAccess + FsRtlCheckLockForWriteAccess + FsRtlFastUnlockAll + FsRtlFastUnlockAllByKey + FsRtlFastUnlockSingle + FsRtlGetFileSize + FsRtlGetNextFileLock + FsRtlInitializeFileLock + FsRtlPrivateLock + FsRtlProcessFileLock + FsRtlUninitializeFileLock + IoUnregisterFsRegistrationChange + PsLookupProcessByProcessId + SeQuerySubjectContextToken + + 26. 2001-04-28 + Added: + Defines: + FSCTL_XXX + Data types: + RTL_SPLAY_LINKS + TUNNEL + Function prototypes: + FsRtlAddToTunnelCache + FsRtlDeleteKeyFromTunnelCache + FsRtlDeleteTunnelCache + FsRtlFindInTunnelCache + FsRtlInitializeTunnelCache + IoSetDeviceToVerify + KeInitializeApc + KeInsertQueueApc + SeQueryInformationToken + + 25. 2001-04-05 + Corrected: + RtlImageNtHeader + LPC_XXX + OBJECT_BASIC_INFO + Added: + Defines: + SID_REVISION + Data types: + DIRECTORY_BASIC_INFORMATION + KINTERRUPT + OBJECT_HANDLE_ATTRIBUTE_INFO + PROCESS_PRIORITY_CLASS + SECTION_BASIC_INFORMATION + SECTION_IMAGE_INFORMATION + SECTION_INFORMATION_CLASS + Function prototypes: + RtlSecondsSince1970ToTime + RtlTimeToSecondsSince1970 + ZwAdjustPrivilegesToken + ZwAlertThread + ZwAccessCheckAndAuditAlarm + ZwClearEvent + ZwCloseObjectAuditAlarm + ZwCreateSection + ZwCreateSymbolicLinkObject + ZwDuplicateToken + ZwFlushInstructionCache + ZwFlushVirtualMemory + ZwInitiatePowerAction + ZwLoadKey + ZwNotifyChangeKey + ZwOpenThread + ZwPowerInformation + ZwPulseEvent + ZwQueryDefaultLocale + ZwQueryDefaultUILanguage + ZwQueryInformationProcess + ZwQueryInstallUILanguage + ZwQuerySection + ZwReplaceKey + ZwResetEvent + ZwRestoreKey + ZwSaveKey + ZwSetDefaultLocale + ZwSetDefaultUILanguage + ZwSetEvent + ZwSetInformationObject + ZwSetInformationProcess + ZwSetSecurityObject + ZwSetSystemTime + ZwTerminateProcess + ZwUnloadKey + ZwWaitForSingleObject + ZwWaitForMultipleObjects + ZwYieldExecution + Removed functions that is not exported in kernel mode: + CcZeroEndOfLastPage + RtlAllocateAndInitializeSid + ZwAcceptConnectPort + ZwCompleteConnectPort + ZwCreatePort + ZwCreateProcess + ZwCreateThread + ZwFlushBuffersFile + ZwGetContextThread + ZwImpersonateClientOfPort + ZwListenPort + ZwLockFile + ZwNotifyChangeDirectoryFile + ZwQueryInformationPort + ZwReadRequestData + ZwReplyPort + ZwReplyWaitReceivePort + ZwReplyWaitReplyPort + ZwRequestPort + ZwUnlockFile + ZwWriteRequestData + + 24. 2001-03-08 + Corrected: + EPROCESS + ETHREAD + FAST_IO_POSSIBLE + QueryEa in EXTENDED_IO_STACK_LOCATION + Added: + Defines: + Some more flags for FileSystemAttributes + Data types: + EXCEPTION_REGISTRATION_RECORD + FILE_FS_FULL_SIZE_INFORMATION + FILE_FS_OBJECT_ID_INFORMATION + HANDLE_TABLE_ENTRY + IO_CLIENT_EXTENSION + PS_IMPERSONATION_INFORMATION + SetEa and SetQuota in EXTENDED_IO_STACK_LOCATION + Function prototypes: + IoPageRead + KeStackAttachProcess + KeUnstackDetachProcess + MmMapViewOfSection + RtlSelfRelativeToAbsoluteSD + SeCreateAccessState + + 23. 2001-01-29 + Corrected: + FSCTL_GET_VOLUME_INFORMATION + FSCTL_READ_MFT_RECORD + HARDWARE_PTE + EPROCESS + ETHREAD + KAPC_STATE + KPROCESS + KTHREAD + MMSUPPORT + Added: + Data types: + KGDTENTRY + KIDTENTRY + MMSUPPORT_FLAGS + + 22. 2000-12-23 + Corrected: + EPROCESS + KPROCESS + Added: + Data types: + HARDWARE_PTE + MMSUPPORT + + 21. 2000-12-12 + Added: + Defines: + IO_TYPE_XXX + OB_TYPE_XXX + THREAD_STATE_XXX + Data types: + EPROCESS + ETHREAD + KAPC_STATE + KEVENT_PAIR + KPROCESS + KTHREAD + KQUEUE + SERVICE_DESCRIPTOR_TABLE + TEB + + 20. 2000-12-03 + Added: + Data types: + OBJECT_TYPE + Function prototypes: + ObCreateObject + ObInsertObject + ObReferenceObjectByName + + 19. 2000-11-25 + Removed a name from credits since the person want to be anonymous. + + 18. 2000-10-13 + Corrected: + PsReferenceImpersonationToken + Added: + Defines: + FILE_PIPE_XXX + LPC_XXX + MAILSLOT_XXX + PORT_XXX + FSCTL_GET_VOLUME_INFORMATION + FSCTL_READ_MFT_RECORD + FSCTL_MAILSLOT_PEEK + FSCTL_PIPE_XXX + Data types: + PORT_INFORMATION_CLASS + BITMAP_DESCRIPTOR + FILE_MAILSLOT_XXX + FILE_PIPE_XXX + MAPPING_PAIR + GET_RETRIEVAL_DESCRIPTOR + LPC_XXX + MOVEFILE_DESCRIPTOR + Function prototypes: + InitializeMessageHeader + MmForceSectionClosed + ZwAcceptConnectPort + ZwCompleteConnectPort + ZwConnectPort + ZwCreateEvent + ZwCreatePort + ZwImpersonateClientOfPort + ZwListenPort + ZwQueryInformationPort + ZwReadRequestData + ZwReplyPort + ZwReplyWaitReceivePort + ZwReplyWaitReplyPort + ZwRequestPort + ZwRequestWaitReplyPort + ZwWriteRequestData + + 17. 2000-05-21 + Added: + Function prototypes: + PsRevertToSelf + SeCreateClientSecurity + SeImpersonateClient + ZwDuplicateObject + + 16. 2000-03-28 + Added: + Defines: + FILE_STORAGE_TYPE_XXX + FILE_VC_XXX + IO_CHECK_CREATE_PARAMETERS + IO_ATTACH_DEVICE + IO_ATTACH_DEVICE_API + IO_COMPLETION_XXX + Data types: + IO_COMPLETION_INFORMATION_CLASS + OBJECT_INFO_CLASS + SYSTEM_INFORMATION_CLASS + FILE_LOCK_ANCHOR + IO_COMPLETION_BASIC_INFORMATION + OBJECT_BASIC_INFO + OBJECT_NAME_INFO + OBJECT_PROTECTION_INFO + OBJECT_TYPE_INFO + OBJECT_ALL_TYPES_INFO + SYSTEM_CACHE_INFORMATION + Function prototypes: + FsRtlAllocatePool + FsRtlAllocatePoolWithQuota + FsRtlAllocatePoolWithQuotaTag + FsRtlAllocatePoolWithTag + FsRtlAreNamesEqual + FsRtlFastCheckLockForRead + FsRtlFastCheckLockForWrite + FsRtlMdlReadComplete + FsRtlMdlWriteComplete + FsRtlNormalizeNtstatus + RtlAllocateHeap + RtlCreateHeap + RtlDestroyHeap + RtlFreeHeap + RtlImageNtHeader + ZwQueryObject + ZwQuerySystemInformation + ZwSetSystemInformation + + 15. 2000-03-15 + Corrected: + Renamed IoQueryFileVolumeInformation to IoQueryVolumeInformation + Comment on: + CcZeroEndOfLastPage + + 14. 2000-03-12 + Corrected: + IoCreateFile + Added: + #if (_WIN32_WINNT < 0x0500)/#endif around stuff that is included in + the Windows 2000 DDK but is missing in the Windows NT 4.0 DDK. + ZwOpenEvent + + 13. 2000-02-08 + Corrected: + PsReferenceImpersonationToken + Comment on: + RtlAllocateAndInitializeSid + + 12. 1999-10-18 + Corrected: + FILE_COMPRESSION_INFORMATION + Added: + Defines: + ACCESS_ALLOWED_ACE_TYPE + ACCESS_DENIED_ACE_TYPE + SYSTEM_AUDIT_ACE_TYPE + SYSTEM_ALARM_ACE_TYPE + ANSI_DOS_STAR/QM/DOT + DOS_STAR/QM/DOT + FILE_EA_TYPE_XXX + FILE_NEED_EA + FILE_OPBATCH_BREAK_UNDERWAY + SECURITY_WORLD_SID_AUTHORITY + SECURITY_WORLD_RID + Data types: + POBJECT + FILE_STORAGE_TYPE + FILE_COMPLETION_INFORMATION + FILE_COPY_ON_WRITE_INFORMATION + FILE_FS_CONTROL_INFORMATION + FILE_GET_EA_INFORMATION + FILE_GET_QUOTA_INFORMATION + FILE_OBJECTID_INFORMATION + FILE_OLE_CLASSID_INFORMATION + FILE_OLE_ALL_INFORMATION + FILE_OLE_DIR_INFORMATION + FILE_OLE_INFORMATION + FILE_OLE_STATE_BITS_INFORMATION + FILE_QUOTA_INFORMATION + Function prototypes: + HalDisplayString + HalMakeBeep + IoGetRequestorProcess + ObQueryNameString + ProbeForWrite + RtlAbsoluteToSelfRelativeSD + RtlGetDaclSecurityDescriptor + RtlGetGroupSecurityDescriptor + RtlGetOwnerSecurityDescriptor + RtlInitializeSid + RtlSetGroupSecurityDescriptor + RtlSetOwnerSecurityDescriptor + RtlSetSaclSecurityDescriptor + ZwDeleteValueKey + ZwDisplayString + ZwQueryDirectoryObject + + 11. 1999-10-13 + Corrected: + ZwOpenProcessToken + ZwOpenThreadToken + Added: + Function prototypes: + RtlAllocateAndInitializeSid + RtlCopySid + RtlEqualSid + RtlFillMemoryUlong + RtlIsNameLegalDOS8Dot3 + RtlLengthRequiredSid + RtlLengthSid + RtlNtStatusToDosError + RtlSubAuthorityCountSid + RtlSubAuthoritySid + RtlValidSid + + 10. 1999-07-15 + Corrected: + RtlConvertSidToUnicodeString + Added: + Externals: + FsRtlLegalAnsiCharacterArray + NtBuildNumber + Defines: + FSRTL_WILD_CHARACTER + FlagOn + FsRtlIsUnicodeCharacterWild + Structures: + FILE_ACCESS_INFORMATION + FILE_MODE_INFORMATION + GENERATE_NAME_CONTEXT + Function prototypes: + FsRtlDoesNameContainWildCards + FsRtlIsNameInExpression + IoSetInformation + RtlGenerate8dot3Name + ZwQuerySecurityObject + + 9. 1999-07-12 + Corrected: + EXTENDED_IO_STACK_LOCATION + QueryDirectory in EXTENDED_IO_STACK_LOCATION + ZwCreateThread + Added: + Structures: + INITIAL_TEB + Function prototypes: + ZwQuerySymbolicLinkObject + + 8. 1999-06-07 + Corrected: + ZwOpenProcessToken + ZwOpenThreadToken + Added: + Defines: + FILE_OPLOCK_BROKEN_TO_LEVEL_2 + FILE_OPLOCK_BROKEN_TO_NONE + FILE_CASE_SENSITIVE_SEARCH + FILE_CASE_PRESERVED_NAMES + FILE_UNICODE_ON_DISK + FILE_PERSISTENT_ACLS + FILE_FILE_COMPRESSION + FILE_VOLUME_IS_COMPRESSED + FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX + FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH + IOCTL_REDIR_QUERY_PATH + Structures: + FILE_FS_LABEL_INFORMATION + PATHNAME_BUFFER + In IO_STACK_LOCATION: + FileSystemControl + LockControl + SetVolume + Function prototypes: + FsRtlCopyRead + FsRtlCopyWrite + IoVerifyVolume + + 7. 1999-06-05 + Added: + defines for TOKEN_XXX + SID_NAME_USE + TOKEN_INFORMATION_CLASS + TOKEN_TYPE + FILE_FS_ATTRIBUTE_INFORMATION + FILE_FS_SIZE_INFORMATION + SID_IDENTIFIER_AUTHORITY + SID + SID_AND_ATTRIBUTES + TOKEN_CONTROL + TOKEN_DEFAULT_DACL + TOKEN_GROUPS + TOKEN_OWNER + TOKEN_PRIMARY_GROUP + TOKEN_PRIVILEGES + TOKEN_SOURCE + TOKEN_STATISTICS + TOKEN_USER + IoCreateFile + IoGetAttachedDevice + IoGetBaseFileSystemDeviceObject + PsReferenceImpersonationToken + PsReferencePrimaryToken + RtlConvertSidToUnicodeString + SeCaptureSubjectContext + SeMarkLogonSessionForTerminationNotification + SeRegisterLogonSessionTerminatedRoutine + SeUnregisterLogonSessionTerminatedRoutine + ZwOpenProcessToken + ZwOpenThreadToken + ZwQueryInformationToken + + 6. 1999-05-10 + Corrected declarations of Zw functions. + Added: + ZwCancelIoFile + ZwDeleteFile + ZwFlushBuffersFile + ZwFsControlFile + ZwLockFile + ZwNotifyChangeDirectoryFile + ZwOpenFile + ZwQueryEaFile + ZwSetEaFile + ZwSetVolumeInformationFile + ZwUnlockFile + + 5. 1999-05-09 + Added: + defines for FILE_ACTION_XXX and FILE_NOTIFY_XXX + FILE_FS_VOLUME_INFORMATION + RETRIEVAL_POINTERS_BUFFER + STARTING_VCN_INPUT_BUFFER + FsRtlNotifyFullReportChange + + 4. 1999-04-11 + Corrected: + ZwCreateThread + Added: + define _GNU_NTIFS_ + + 3. 1999-03-30 + Added: + defines for MAP_XXX, MEM_XXX and SEC_XXX + FILE_BOTH_DIR_INFORMATION + FILE_DIRECTORY_INFORMATION + FILE_FULL_DIR_INFORMATION + FILE_NAMES_INFORMATION + FILE_NOTIFY_INFORMATION + FsRtlNotifyCleanup + KeAttachProcess + KeDetachProcess + MmCreateSection + ZwCreateProcess + ZwCreateThread + ZwDeviceIoControlFile + ZwGetContextThread + ZwLoadDriver + ZwOpenDirectoryObject + ZwOpenProcess + ZwOpenSymbolicLinkObject + ZwQueryDirectoryFile + ZwUnloadDriver + + 2. 1999-03-15 + Added: + FILE_COMPRESSION_INFORMATION + FILE_STREAM_INFORMATION + FILE_LINK_INFORMATION + FILE_RENAME_INFORMATION + EXTENDED_IO_STACK_LOCATION + IoQueryFileInformation + IoQueryFileVolumeInformation + ZwQueryVolumeInformationFile + Moved include of ntddk.h to inside extern "C" block. + + 1. 1999-03-11 + Initial release. +*/ + +#ifndef _NTIFS_ +#define _NTIFS_ +#define _GNU_NTIFS_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <ntddk.h> +#include <ntverp.h> + +typedef struct _SERVICE_DESCRIPTOR_TABLE *PSERVICE_DESCRIPTOR_TABLE; +typedef struct _SE_EXPORTS *PSE_EXPORTS; + +extern PUCHAR *FsRtlLegalAnsiCharacterArray; +extern POBJECT_TYPE *IoDriverObjectType; +extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable; +extern PSHORT NtBuildNumber; +extern PSE_EXPORTS SeExports; +extern PACL SePublicDefaultDacl; +extern PACL SeSystemDefaultDacl; + +#define ACCESS_ALLOWED_ACE_TYPE (0x0) +#define ACCESS_DENIED_ACE_TYPE (0x1) +#define SYSTEM_AUDIT_ACE_TYPE (0x2) +#define SYSTEM_ALARM_ACE_TYPE (0x3) + +#define ANSI_DOS_STAR ('<') +#define ANSI_DOS_QM ('>') +#define ANSI_DOS_DOT ('"') + +#define DOS_STAR (L'<') +#define DOS_QM (L'>') +#define DOS_DOT (L'"') + +#define COMPRESSION_FORMAT_NONE (0x0000) +#define COMPRESSION_FORMAT_DEFAULT (0x0001) +#define COMPRESSION_FORMAT_LZNT1 (0x0002) +#define COMPRESSION_ENGINE_STANDARD (0x0000) +#define COMPRESSION_ENGINE_MAXIMUM (0x0100) +#define COMPRESSION_ENGINE_HIBER (0x0200) + +#define FILE_ACTION_ADDED 0x00000001 +#define FILE_ACTION_REMOVED 0x00000002 +#define FILE_ACTION_MODIFIED 0x00000003 +#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 +#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 +#define FILE_ACTION_ADDED_STREAM 0x00000006 +#define FILE_ACTION_REMOVED_STREAM 0x00000007 +#define FILE_ACTION_MODIFIED_STREAM 0x00000008 +#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 +#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A +#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B + +#define FILE_EA_TYPE_BINARY 0xfffe +#define FILE_EA_TYPE_ASCII 0xfffd +#define FILE_EA_TYPE_BITMAP 0xfffb +#define FILE_EA_TYPE_METAFILE 0xfffa +#define FILE_EA_TYPE_ICON 0xfff9 +#define FILE_EA_TYPE_EA 0xffee +#define FILE_EA_TYPE_MVMT 0xffdf +#define FILE_EA_TYPE_MVST 0xffde +#define FILE_EA_TYPE_ASN1 0xffdd +#define FILE_EA_TYPE_FAMILY_IDS 0xff01 + +#define FILE_NEED_EA 0x00000080 + +#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 +#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 +#define FILE_NOTIFY_CHANGE_NAME 0x00000003 +#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 +#define FILE_NOTIFY_CHANGE_SIZE 0x00000008 +#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 +#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 +#define FILE_NOTIFY_CHANGE_CREATION 0x00000040 +#define FILE_NOTIFY_CHANGE_EA 0x00000080 +#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 +#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 +#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 +#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 +#define FILE_NOTIFY_VALID_MASK 0x00000fff + +#define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007 +#define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008 + +#define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009 + +#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 +#define FILE_CASE_PRESERVED_NAMES 0x00000002 +#define FILE_UNICODE_ON_DISK 0x00000004 +#define FILE_PERSISTENT_ACLS 0x00000008 +#define FILE_FILE_COMPRESSION 0x00000010 +#define FILE_VOLUME_QUOTAS 0x00000020 +#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 +#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 +#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 +#define FS_LFN_APIS 0x00004000 +#define FILE_VOLUME_IS_COMPRESSED 0x00008000 +#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 +#define FILE_SUPPORTS_ENCRYPTION 0x00020000 +#define FILE_NAMED_STREAMS 0x00040000 +#define FILE_READ_ONLY_VOLUME 0x00080000 + +#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000 +#define FILE_PIPE_MESSAGE_TYPE 0x00000001 + +#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 +#define FILE_PIPE_MESSAGE_MODE 0x00000001 + +#define FILE_PIPE_QUEUE_OPERATION 0x00000000 +#define FILE_PIPE_COMPLETE_OPERATION 0x00000001 + +#define FILE_PIPE_INBOUND 0x00000000 +#define FILE_PIPE_OUTBOUND 0x00000001 +#define FILE_PIPE_FULL_DUPLEX 0x00000002 + +#define FILE_PIPE_DISCONNECTED_STATE 0x00000001 +#define FILE_PIPE_LISTENING_STATE 0x00000002 +#define FILE_PIPE_CONNECTED_STATE 0x00000003 +#define FILE_PIPE_CLOSING_STATE 0x00000004 + +#define FILE_PIPE_CLIENT_END 0x00000000 +#define FILE_PIPE_SERVER_END 0x00000001 + +#define FILE_PIPE_READ_DATA 0x00000000 +#define FILE_PIPE_WRITE_SPACE 0x00000001 + +#define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 // FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE +#define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT) +#define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT) +#define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT +#define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM +#define FILE_STORAGE_TYPE_MASK 0x000f0000 +#define FILE_STORAGE_TYPE_SHIFT 16 + +#define FILE_VC_QUOTA_NONE 0x00000000 +#define FILE_VC_QUOTA_TRACK 0x00000001 +#define FILE_VC_QUOTA_ENFORCE 0x00000002 +#define FILE_VC_QUOTA_MASK 0x00000003 + +#define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004 +#define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008 + +#define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010 +#define FILE_VC_LOG_QUOTA_LIMIT 0x00000020 +#define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040 +#define FILE_VC_LOG_VOLUME_LIMIT 0x00000080 + +#define FILE_VC_QUOTAS_INCOMPLETE 0x00000100 +#define FILE_VC_QUOTAS_REBUILDING 0x00000200 + +#define FILE_VC_VALID_MASK 0x000003ff + +#define FSRTL_FLAG_FILE_MODIFIED (0x01) +#define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02) +#define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04) +#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08) +#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10) +#define FSRTL_FLAG_USER_MAPPED_FILE (0x20) +#define FSRTL_FLAG_ADVANCED_HEADER (0x40) +#define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80) + +#define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01) +#define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02) +#define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04) + +#define FSRTL_FSP_TOP_LEVEL_IRP (0x01) +#define FSRTL_CACHE_TOP_LEVEL_IRP (0x02) +#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP (0x03) +#define FSRTL_FAST_IO_TOP_LEVEL_IRP (0x04) +#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG (0x04) + +#define FSRTL_VOLUME_DISMOUNT 1 +#define FSRTL_VOLUME_DISMOUNT_FAILED 2 +#define FSRTL_VOLUME_LOCK 3 +#define FSRTL_VOLUME_LOCK_FAILED 4 +#define FSRTL_VOLUME_UNLOCK 5 +#define FSRTL_VOLUME_MOUNT 6 + +#define FSRTL_WILD_CHARACTER 0x08 + +#ifdef _X86_ +#define HARDWARE_PTE HARDWARE_PTE_X86 +#define PHARDWARE_PTE PHARDWARE_PTE_X86 +#else +#define HARDWARE_PTE ULONG +#define PHARDWARE_PTE PULONG +#endif + +#define IO_CHECK_CREATE_PARAMETERS 0x0200 +#define IO_ATTACH_DEVICE 0x0400 + +#define IO_ATTACH_DEVICE_API 0x80000000 + +#define IO_COMPLETION_QUERY_STATE 0x0001 +#define IO_COMPLETION_MODIFY_STATE 0x0002 +#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) + +#define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64 +#define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024 + +#define IO_TYPE_APC 18 +#define IO_TYPE_DPC 19 +#define IO_TYPE_DEVICE_QUEUE 20 +#define IO_TYPE_EVENT_PAIR 21 +#define IO_TYPE_INTERRUPT 22 +#define IO_TYPE_PROFILE 23 + +#define IRP_BEING_VERIFIED 0x10 + +#define MAILSLOT_CLASS_FIRSTCLASS 1 +#define MAILSLOT_CLASS_SECONDCLASS 2 + +#define MAILSLOT_SIZE_AUTO 0 + +#define MAP_PROCESS 1L +#define MAP_SYSTEM 2L + +#define MEM_DOS_LIM 0x40000000 +#define MEM_IMAGE SEC_IMAGE + +#define OB_TYPE_TYPE 1 +#define OB_TYPE_DIRECTORY 2 +#define OB_TYPE_SYMBOLIC_LINK 3 +#define OB_TYPE_TOKEN 4 +#define OB_TYPE_PROCESS 5 +#define OB_TYPE_THREAD 6 +#define OB_TYPE_EVENT 7 +#define OB_TYPE_EVENT_PAIR 8 +#define OB_TYPE_MUTANT 9 +#define OB_TYPE_SEMAPHORE 10 +#define OB_TYPE_TIMER 11 +#define OB_TYPE_PROFILE 12 +#define OB_TYPE_WINDOW_STATION 13 +#define OB_TYPE_DESKTOP 14 +#define OB_TYPE_SECTION 15 +#define OB_TYPE_KEY 16 +#define OB_TYPE_PORT 17 +#define OB_TYPE_ADAPTER 18 +#define OB_TYPE_CONTROLLER 19 +#define OB_TYPE_DEVICE 20 +#define OB_TYPE_DRIVER 21 +#define OB_TYPE_IO_COMPLETION 22 +#define OB_TYPE_FILE 23 + +#define PIN_WAIT (1) +#define PIN_EXCLUSIVE (2) +#define PIN_NO_READ (4) +#define PIN_IF_BCB (8) + +#define MAP_WAIT (1) +#define MAP_NO_READ (16) + +#define PORT_CONNECT 0x0001 +#define PORT_ALL_ACCESS (STANDARD_RIGHTS_ALL |\ + PORT_CONNECT) + +#define SEC_BASED 0x00200000 +#define SEC_NO_CHANGE 0x00400000 +#define SEC_FILE 0x00800000 +#define SEC_IMAGE 0x01000000 +#define SEC_COMMIT 0x08000000 +#define SEC_NOCACHE 0x10000000 + +#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} +#define SECURITY_WORLD_RID (0x00000000L) + +#define SID_REVISION 1 + +#define THREAD_STATE_INITIALIZED 0 +#define THREAD_STATE_READY 1 +#define THREAD_STATE_RUNNING 2 +#define THREAD_STATE_STANDBY 3 +#define THREAD_STATE_TERMINATED 4 +#define THREAD_STATE_WAIT 5 +#define THREAD_STATE_TRANSITION 6 +#define THREAD_STATE_UNKNOWN 7 + +#define TOKEN_ASSIGN_PRIMARY (0x0001) +#define TOKEN_DUPLICATE (0x0002) +#define TOKEN_IMPERSONATE (0x0004) +#define TOKEN_QUERY (0x0008) +#define TOKEN_QUERY_SOURCE (0x0010) +#define TOKEN_ADJUST_PRIVILEGES (0x0020) +#define TOKEN_ADJUST_GROUPS (0x0040) +#define TOKEN_ADJUST_DEFAULT (0x0080) + +#define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ + TOKEN_ASSIGN_PRIMARY |\ + TOKEN_DUPLICATE |\ + TOKEN_IMPERSONATE |\ + TOKEN_QUERY |\ + TOKEN_QUERY_SOURCE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) + +#define TOKEN_READ (STANDARD_RIGHTS_READ |\ + TOKEN_QUERY) + +#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) + +#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE) + +#define TOKEN_SOURCE_LENGTH 8 + +#define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01 +#define TOKEN_HAS_BACKUP_PRIVILEGE 0x02 +#define TOKEN_HAS_RESTORE_PRIVILEGE 0x04 +#define TOKEN_HAS_ADMIN_GROUP 0x08 +#define TOKEN_IS_RESTRICTED 0x10 + +#define VACB_MAPPING_GRANULARITY (0x40000) +#define VACB_OFFSET_SHIFT (18) + +#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) + + +#define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#if (VER_PRODUCTBUILD >= 1381) + +#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 31, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS) + +#endif // (VER_PRODUCTBUILD >= 1381) + +#if (VER_PRODUCTBUILD >= 2195) + +#define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 33, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 34, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 37, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_ENABLE_UPGRADE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 52, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_READ_DATA) +#define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_NSS_CONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 67, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_NSS_RCONTROL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 70, METHOD_BUFFERED, FILE_READ_DATA) +#define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA) +#define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) + +#endif // (VER_PRODUCTBUILD >= 2195) + +#define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA) + +#define FSCTL_NETWORK_SET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 102, METHOD_IN_DIRECT, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_GET_CONFIGURATION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 103, METHOD_OUT_DIRECT, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_GET_CONNECTION_INFO CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 104, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_ENUMERATE_CONNECTIONS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 105, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_DELETE_CONNECTION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 107, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_GET_STATISTICS CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 116, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_SET_DOMAIN_NAME CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 120, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_NETWORK_REMOTE_BOOT_INIT_SCRT CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 250, METHOD_BUFFERED, FILE_ANY_ACCESS) + +#define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA) +#define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA) +#define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA) + +#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS) + +typedef PVOID PEJOB; +typedef PVOID PNOTIFY_SYNC; +typedef PVOID OPLOCK, *POPLOCK; +typedef PVOID PWOW64_PROCESS; + +typedef ULONG LBN; +typedef LBN *PLBN; + +typedef ULONG VBN; +typedef VBN *PVBN; + +typedef struct _CACHE_MANAGER_CALLBACKS *PCACHE_MANAGER_CALLBACKS; +typedef struct _EPROCESS_QUOTA_BLOCK *PEPROCESS_QUOTA_BLOCK; +typedef struct _FILE_GET_QUOTA_INFORMATION *PFILE_GET_QUOTA_INFORMATION; +typedef struct _HANDLE_TABLE *PHANDLE_TABLE; +typedef struct _KEVENT_PAIR *PKEVENT_PAIR; +typedef struct _KPROCESS *PKPROCESS; +typedef struct _KQUEUE *PKQUEUE; +typedef struct _KTRAP_FRAME *PKTRAP_FRAME; +typedef struct _LPC_MESSAGE *PLPC_MESSAGE; +typedef struct _MAILSLOT_CREATE_PARAMETERS *PMAILSLOT_CREATE_PARAMETERS; +typedef struct _MMWSL *PMMWSL; +typedef struct _NAMED_PIPE_CREATE_PARAMETERS *PNAMED_PIPE_CREATE_PARAMETERS; +typedef struct _OBJECT_DIRECTORY *POBJECT_DIRECTORY; +typedef struct _PAGEFAULT_HISTORY *PPAGEFAULT_HISTORY; +typedef struct _PEB *PPEB; +typedef struct _PS_IMPERSONATION_INFORMATION *PPS_IMPERSONATION_INFORMATION; +typedef struct _SECTION_OBJECT *PSECTION_OBJECT; +typedef struct _SERVICE_DESCRIPTOR_TABLE *PSERVICE_DESCRIPTOR_TABLE; +typedef struct _SHARED_CACHE_MAP *PSHARED_CACHE_MAP; +typedef struct _TERMINATION_PORT *PTERMINATION_PORT; +typedef struct _VACB *PVACB; +typedef struct _VAD_HEADER *PVAD_HEADER; + +#if (VER_PRODUCTBUILD < 2195) +typedef ULONG SIZE_T, *PSIZE_T; +#endif + +typedef enum _FAST_IO_POSSIBLE { + FastIoIsNotPossible, + FastIoIsPossible, + FastIoIsQuestionable +} FAST_IO_POSSIBLE; + +typedef enum _FILE_STORAGE_TYPE { + StorageTypeDefault = 1, + StorageTypeDirectory, + StorageTypeFile, + StorageTypeJunctionPoint, + StorageTypeCatalog, + StorageTypeStructuredStorage, + StorageTypeEmbedding, + StorageTypeStream +} FILE_STORAGE_TYPE; + +typedef enum _IO_COMPLETION_INFORMATION_CLASS { + IoCompletionBasicInformation +} IO_COMPLETION_INFORMATION_CLASS; + +typedef enum _LPC_TYPE { + LPC_NEW_MESSAGE, + LPC_REQUEST, + LPC_REPLY, + LPC_DATAGRAM, + LPC_LOST_REPLY, + LPC_PORT_CLOSED, + LPC_CLIENT_DIED, + LPC_EXCEPTION, + LPC_DEBUG_EVENT, + LPC_ERROR_EVENT, + LPC_CONNECTION_REQUEST +} LPC_TYPE; + +typedef enum _MMFLUSH_TYPE { + MmFlushForDelete, + MmFlushForWrite +} MMFLUSH_TYPE; + +typedef enum _OBJECT_INFO_CLASS { + ObjectBasicInfo, + ObjectNameInfo, + ObjectTypeInfo, + ObjectAllTypesInfo, + ObjectProtectionInfo +} OBJECT_INFO_CLASS; + +typedef enum _PORT_INFORMATION_CLASS { + PortNoInformation +} PORT_INFORMATION_CLASS; + +typedef enum _SECTION_INFORMATION_CLASS { + SectionBasicInformation, + SectionImageInformation +} SECTION_INFORMATION_CLASS; + +typedef enum _SID_NAME_USE { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown +} SID_NAME_USE; + +typedef enum _SYSTEM_INFORMATION_CLASS { + SystemBasicInformation, + SystemProcessorInformation, + SystemPerformanceInformation, + SystemTimeOfDayInformation, + SystemNotImplemented1, + SystemProcessesAndThreadsInformation, + SystemCallCounts, + SystemConfigurationInformation, + SystemProcessorTimes, + SystemGlobalFlag, + SystemNotImplemented2, + SystemModuleInformation, + SystemLockInformation, + SystemNotImplemented3, + SystemNotImplemented4, + SystemNotImplemented5, + SystemHandleInformation, + SystemObjectInformation, + SystemPagefileInformation, + SystemInstructionEmulationCounts, + SystemInvalidInfoClass1, + SystemCacheInformation, + SystemPoolTagInformation, + SystemProcessorStatistics, + SystemDpcInformation, + SystemNotImplemented6, + SystemLoadImage, + SystemUnloadImage, + SystemTimeAdjustment, + SystemNotImplemented7, + SystemNotImplemented8, + SystemNotImplemented9, + SystemCrashDumpInformation, + SystemExceptionInformation, + SystemCrashDumpStateInformation, + SystemKernelDebuggerInformation, + SystemContextSwitchInformation, + SystemRegistryQuotaInformation, + SystemLoadAndCallImage, + SystemPrioritySeparation, + SystemNotImplemented10, + SystemNotImplemented11, + SystemInvalidInfoClass2, + SystemInvalidInfoClass3, + SystemTimeZoneInformation, + SystemLookasideInformation, + SystemSetTimeSlipEvent, + SystemCreateSession, + SystemDeleteSession, + SystemInvalidInfoClass4, + SystemRangeStartInformation, + SystemVerifierInformation, + SystemAddVerifier, + SystemSessionProcessesInformation +} SYSTEM_INFORMATION_CLASS; + +typedef enum _THREAD_STATE { + StateInitialized, + StateReady, + StateRunning, + StateStandby, + StateTerminated, + StateWait, + StateTransition, + StateUnknown +} THREAD_STATE; + +typedef enum _TOKEN_INFORMATION_CLASS { + TokenUser = 1, + TokenGroups, + TokenPrivileges, + TokenOwner, + TokenPrimaryGroup, + TokenDefaultDacl, + TokenSource, + TokenType, + TokenImpersonationLevel, + TokenStatistics, + TokenRestrictedSids +} TOKEN_INFORMATION_CLASS; + +typedef enum _TOKEN_TYPE { + TokenPrimary = 1, + TokenImpersonation +} TOKEN_TYPE; + +typedef struct _HARDWARE_PTE_X86 { + ULONG Valid : 1; + ULONG Write : 1; + ULONG Owner : 1; + ULONG WriteThrough : 1; + ULONG CacheDisable : 1; + ULONG Accessed : 1; + ULONG Dirty : 1; + ULONG LargePage : 1; + ULONG Global : 1; + ULONG CopyOnWrite : 1; + ULONG Prototype : 1; + ULONG reserved : 1; + ULONG PageFrameNumber : 20; +} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86; + +typedef struct _KAPC_STATE { + LIST_ENTRY ApcListHead[2]; + PKPROCESS Process; + BOOLEAN KernelApcInProgress; + BOOLEAN KernelApcPending; + BOOLEAN UserApcPending; +} KAPC_STATE, *PKAPC_STATE; + +typedef struct _KGDTENTRY { + USHORT LimitLow; + USHORT BaseLow; + union { + struct { + UCHAR BaseMid; + UCHAR Flags1; + UCHAR Flags2; + UCHAR BaseHi; + } Bytes; + struct { + ULONG BaseMid : 8; + ULONG Type : 5; + ULONG Dpl : 2; + ULONG Pres : 1; + ULONG LimitHi : 4; + ULONG Sys : 1; + ULONG Reserved_0 : 1; + ULONG Default_Big : 1; + ULONG Granularity : 1; + ULONG BaseHi : 8; + } Bits; + } HighWord; +} KGDTENTRY, *PKGDTENTRY; + +typedef struct _KIDTENTRY { + USHORT Offset; + USHORT Selector; + USHORT Access; + USHORT ExtendedOffset; +} KIDTENTRY, *PKIDTENTRY; + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _KPROCESS { + DISPATCHER_HEADER Header; + LIST_ENTRY ProfileListHead; + ULONG DirectoryTableBase[2]; + KGDTENTRY LdtDescriptor; + KIDTENTRY Int21Descriptor; + USHORT IopmOffset; + UCHAR Iopl; + UCHAR Unused; + ULONG ActiveProcessors; + ULONG KernelTime; + ULONG UserTime; + LIST_ENTRY ReadyListHead; + SINGLE_LIST_ENTRY SwapListEntry; + PVOID VdmTrapcHandler; + LIST_ENTRY ThreadListHead; + KSPIN_LOCK ProcessLock; + KAFFINITY Affinity; + USHORT StackCount; + CHAR BasePriority; + CHAR ThreadQuantum; + BOOLEAN AutoAlignment; + UCHAR State; + UCHAR ThreadSeed; + BOOLEAN DisableBoost; + UCHAR PowerState; + BOOLEAN DisableQuantum; + UCHAR IdealNode; + UCHAR Spare; +} KPROCESS, *PKPROCESS; + +#else + +typedef struct _KPROCESS { + DISPATCHER_HEADER Header; + LIST_ENTRY ProfileListHead; + ULONG DirectoryTableBase[2]; + KGDTENTRY LdtDescriptor; + KIDTENTRY Int21Descriptor; + USHORT IopmOffset; + UCHAR Iopl; + UCHAR VdmFlag; + ULONG ActiveProcessors; + ULONG KernelTime; + ULONG UserTime; + LIST_ENTRY ReadyListHead; + SINGLE_LIST_ENTRY SwapListEntry; + PVOID Reserved1; + LIST_ENTRY ThreadListHead; + KSPIN_LOCK ProcessLock; + KAFFINITY Affinity; + USHORT StackCount; + UCHAR BasePriority; + UCHAR ThreadQuantum; + BOOLEAN AutoAlignment; + UCHAR State; + UCHAR ThreadSeed; + BOOLEAN DisableBoost; +#if (VER_PRODUCTBUILD >= 2195) + UCHAR PowerState; + BOOLEAN DisableQuantum; + UCHAR IdealNode; + UCHAR Spare; +#endif // (VER_PRODUCTBUILD >= 2195) +} KPROCESS, *PKPROCESS; + +#endif + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _KTHREAD { + DISPATCHER_HEADER Header; + LIST_ENTRY MutantListHead; + PVOID InitialStack; + PVOID StackLimit; + struct _TEB *Teb; + PVOID TlsArray; + PVOID KernelStack; + BOOLEAN DebugActive; + UCHAR State; + UCHAR Alerted[2]; + UCHAR Iopl; + UCHAR NpxState; + CHAR Saturation; + CHAR Priority; + KAPC_STATE ApcState; + ULONG ContextSwitches; + UCHAR IdleSwapBlock; + UCHAR Spare0[3]; + NTSTATUS WaitStatus; + UCHAR WaitIrql; + CHAR WaitMode; + UCHAR WaitNext; + UCHAR WaitReason; + PKWAIT_BLOCK WaitBlockList; + union { + LIST_ENTRY WaitListEntry; + SINGLE_LIST_ENTRY SwapListEntry; + }; + ULONG WaitTime; + CHAR BasePriority; + UCHAR DecrementCount; + CHAR PriorityDecrement; + CHAR Quantum; + KWAIT_BLOCK WaitBlock[4]; + PVOID LegoData; + ULONG KernelApcDisable; + ULONG UserAffinity; + BOOLEAN SystemAffinityActive; + UCHAR PowerState; + UCHAR NpxIrql; + UCHAR InitialNode; + PSERVICE_DESCRIPTOR_TABLE ServiceTable; + PKQUEUE Queue; + KSPIN_LOCK ApcQueueLock; + KTIMER Timer; + LIST_ENTRY QueueListEntry; + ULONG SoftAffinity; + ULONG Affinity; + BOOLEAN Preempted; + BOOLEAN ProcessReadyQueue; + BOOLEAN KernelStackResident; + UCHAR NextProcessor; + PVOID CallbackStack; + PVOID Win32Thread; + PKTRAP_FRAME TrapFrame; + PKAPC_STATE ApcStatePointer[2]; + CHAR PreviousMode; + BOOLEAN EnableStackSwap; + BOOLEAN LargeStack; + UCHAR ResourceIndex; + ULONG KernelTime; + ULONG UserTime; + KAPC_STATE SavedApcState; + BOOLEAN Alertable; + UCHAR ApcStateIndex; + BOOLEAN ApcQueueable; + BOOLEAN AutoAlignment; + PVOID StackBase; + KAPC SuspendApc; + KSEMAPHORE SuspendSemaphore; + LIST_ENTRY ThreadListEntry; + CHAR FreezeCount; + CHAR SuspendCount; + UCHAR IdealProcessor; + BOOLEAN DisableBoost; +} KTHREAD, *PKTHREAD; + +#else + +typedef struct _KTHREAD { + DISPATCHER_HEADER Header; + LIST_ENTRY MutantListHead; + PVOID InitialStack; + PVOID StackLimit; + struct _TEB *Teb; + PVOID TlsArray; + PVOID KernelStack; + BOOLEAN DebugActive; + UCHAR State; + USHORT Alerted; + UCHAR Iopl; + UCHAR NpxState; + UCHAR Saturation; + UCHAR Priority; + KAPC_STATE ApcState; + ULONG ContextSwitches; + NTSTATUS WaitStatus; + UCHAR WaitIrql; + UCHAR WaitMode; + UCHAR WaitNext; + UCHAR WaitReason; + PKWAIT_BLOCK WaitBlockList; + LIST_ENTRY WaitListEntry; + ULONG WaitTime; + UCHAR BasePriority; + UCHAR DecrementCount; + UCHAR PriorityDecrement; + UCHAR Quantum; + KWAIT_BLOCK WaitBlock[4]; + ULONG LegoData; + ULONG KernelApcDisable; + ULONG UserAffinity; + BOOLEAN SystemAffinityActive; +#if (VER_PRODUCTBUILD < 2195) + UCHAR Pad[3]; +#else // (VER_PRODUCTBUILD >= 2195) + UCHAR PowerState; + UCHAR NpxIrql; + UCHAR Pad[1]; +#endif // (VER_PRODUCTBUILD >= 2195) + PSERVICE_DESCRIPTOR_TABLE ServiceDescriptorTable; + PKQUEUE Queue; + KSPIN_LOCK ApcQueueLock; + KTIMER Timer; + LIST_ENTRY QueueListEntry; + ULONG Affinity; + BOOLEAN Preempted; + BOOLEAN ProcessReadyQueue; + BOOLEAN KernelStackResident; + UCHAR NextProcessor; + PVOID CallbackStack; + PVOID Win32Thread; + PKTRAP_FRAME TrapFrame; + PKAPC_STATE ApcStatePointer[2]; +#if (VER_PRODUCTBUILD >= 2195) + UCHAR PreviousMode; +#endif // (VER_PRODUCTBUILD >= 2195) + BOOLEAN EnableStackSwap; + BOOLEAN LargeStack; + UCHAR ResourceIndex; +#if (VER_PRODUCTBUILD < 2195) + UCHAR PreviousMode; +#endif // (VER_PRODUCTBUILD < 2195) + ULONG KernelTime; + ULONG UserTime; + KAPC_STATE SavedApcState; + BOOLEAN Alertable; + UCHAR ApcStateIndex; + BOOLEAN ApcQueueable; + BOOLEAN AutoAlignment; + PVOID StackBase; + KAPC SuspendApc; + KSEMAPHORE SuspendSemaphore; + LIST_ENTRY ThreadListEntry; + UCHAR FreezeCount; + UCHAR SuspendCount; + UCHAR IdealProcessor; + BOOLEAN DisableBoost; +} KTHREAD, *PKTHREAD; + +#endif + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _MMSUPPORT_FLAGS { + ULONG SessionSpace : 1; + ULONG BeingTrimmed : 1; + ULONG SessionLeader : 1; + ULONG TrimHard : 1; + ULONG WorkingSetHard : 1; + ULONG AddressSpaceBeingDeleted : 1; + ULONG Available : 10; + ULONG AllowWorkingSetAdjustment : 8; + ULONG MemoryPriority : 8; +} MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS; + +#else + +typedef struct _MMSUPPORT_FLAGS { + ULONG SessionSpace : 1; + ULONG BeingTrimmed : 1; + ULONG ProcessInSession : 1; + ULONG SessionLeader : 1; + ULONG TrimHard : 1; + ULONG WorkingSetHard : 1; + ULONG WriteWatch : 1; + ULONG Filler : 25; +} MMSUPPORT_FLAGS, *PMMSUPPORT_FLAGS; + +#endif + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _MMSUPPORT { + LARGE_INTEGER LastTrimTime; + MMSUPPORT_FLAGS Flags; + ULONG PageFaultCount; + ULONG PeakWorkingSetSize; + ULONG WorkingSetSize; + ULONG MinimumWorkingSetSize; + ULONG MaximumWorkingSetSize; + PMMWSL VmWorkingSetList; + LIST_ENTRY WorkingSetExpansionLinks; + ULONG Claim; + ULONG NextEstimationSlot; + ULONG NextAgingSlot; + ULONG EstimatedAvailable; + ULONG GrowthSinceLastEstimate; +} MMSUPPORT, *PMMSUPPORT; + +#else + +typedef struct _MMSUPPORT { + LARGE_INTEGER LastTrimTime; + ULONG LastTrimFaultCount; + ULONG PageFaultCount; + ULONG PeakWorkingSetSize; + ULONG WorkingSetSize; + ULONG MinimumWorkingSetSize; + ULONG MaximumWorkingSetSize; + PMMWSL VmWorkingSetList; + LIST_ENTRY WorkingSetExpansionLinks; + BOOLEAN AllowWorkingSetAdjustment; + BOOLEAN AddressSpaceBeingDeleted; + UCHAR ForegroundSwitchCount; + UCHAR MemoryPriority; +#if (VER_PRODUCTBUILD >= 2195) + union { + ULONG LongFlags; + MMSUPPORT_FLAGS Flags; + } u; + ULONG Claim; + ULONG NextEstimationSlot; + ULONG NextAgingSlot; + ULONG EstimatedAvailable; + ULONG GrowthSinceLastEstimate; +#endif // (VER_PRODUCTBUILD >= 2195) +} MMSUPPORT, *PMMSUPPORT; + +#endif + +typedef struct _SE_AUDIT_PROCESS_CREATION_INFO { + POBJECT_NAME_INFORMATION ImageFileName; +} SE_AUDIT_PROCESS_CREATION_INFO, *PSE_AUDIT_PROCESS_CREATION_INFO; + +typedef struct _SID_IDENTIFIER_AUTHORITY { + UCHAR Value[6]; +} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; + +typedef struct _SID { + UCHAR Revision; + UCHAR SubAuthorityCount; + SID_IDENTIFIER_AUTHORITY IdentifierAuthority; + ULONG SubAuthority[1]; +} SID, *PREAL_SID; + +typedef struct _BITMAP_DESCRIPTOR { + ULONGLONG StartLcn; + ULONGLONG ClustersToEndOfVol; + UCHAR Map[1]; +} BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR; + +typedef struct _BITMAP_RANGE { + LIST_ENTRY Links; + LARGE_INTEGER BasePage; + ULONG FirstDirtyPage; + ULONG LastDirtyPage; + ULONG DirtyPages; + PULONG Bitmap; +} BITMAP_RANGE, *PBITMAP_RANGE; + +typedef struct _CACHE_UNINITIALIZE_EVENT { + struct _CACHE_UNINITIALIZE_EVENT *Next; + KEVENT Event; +} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT; + +typedef struct _CC_FILE_SIZES { + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; +} CC_FILE_SIZES, *PCC_FILE_SIZES; + +typedef struct _COMPRESSED_DATA_INFO { + USHORT CompressionFormatAndEngine; + UCHAR CompressionUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + UCHAR Reserved; + USHORT NumberOfChunks; + ULONG CompressedChunkSizes[ANYSIZE_ARRAY]; +} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO; + +typedef struct _DEVICE_MAP { + POBJECT_DIRECTORY DosDevicesDirectory; + POBJECT_DIRECTORY GlobalDosDevicesDirectory; + ULONG ReferenceCount; + ULONG DriveMap; + UCHAR DriveType[32]; +} DEVICE_MAP, *PDEVICE_MAP; + +typedef struct _DIRECTORY_BASIC_INFORMATION { + UNICODE_STRING ObjectName; + UNICODE_STRING ObjectTypeName; +} DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION; + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _EX_FAST_REF { + union { + PVOID Object; + ULONG RefCnt : 3; + ULONG Value; + }; +} EX_FAST_REF, *PEX_FAST_REF; + +typedef struct _EX_PUSH_LOCK { + union { + struct { + ULONG Waiting : 1; + ULONG Exclusive : 1; + ULONG Shared : 30; + }; + ULONG Value; + PVOID Ptr; + }; +} EX_PUSH_LOCK, *PEX_PUSH_LOCK; + +typedef struct _EX_RUNDOWN_REF { + union { + ULONG Count; + PVOID Ptr; + }; +} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF; + +typedef struct _EPROCESS { + KPROCESS Pcb; + EX_PUSH_LOCK ProcessLock; + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; + EX_RUNDOWN_REF RundownProtect; + PVOID UniqueProcessId; + LIST_ENTRY ActiveProcessLinks; + ULONG QuotaUsage[3]; + ULONG QuotaPeak[3]; + ULONG CommitCharge; + ULONG PeakVirtualSize; + ULONG VirtualSize; + LIST_ENTRY SessionProcessLinks; + PVOID DebugPort; + PVOID ExceptionPort; + PHANDLE_TABLE ObjectTable; + EX_FAST_REF Token; + FAST_MUTEX WorkingSetLock; + ULONG WorkingSetPage; + FAST_MUTEX AddressCreationLock; + KSPIN_LOCK HyperSpaceLock; + PETHREAD ForkInProgress; + ULONG HardwareTrigger; + PVOID VadRoot; + PVOID VadHint; + PVOID CloneRoot; + ULONG NumberOfPrivatePages; + ULONG NumberOfLockedPages; + PVOID Win32Process; + PEJOB Job; + PSECTION_OBJECT SectionObject; + PVOID SectionBaseAddress; + PEPROCESS_QUOTA_BLOCK QuotaBlock; + PPAGEFAULT_HISTORY WorkingSetWatch; + PVOID Win32WindowStation; + PVOID InheritedFromUniqueProcessId; + PVOID LdtInformation; + PVOID VadFreeHint; + PVOID VdmObjects; + PDEVICE_MAP DeviceMap; + LIST_ENTRY PhysicalVadList; + union { + HARDWARE_PTE PageDirectoryPte; + ULONGLONG Filler; + }; + PVOID Session; + UCHAR ImageFileName[16]; + LIST_ENTRY JobLinks; + PVOID LockedPageList; + LIST_ENTRY ThreadListHead; + PVOID SecurityPort; + PVOID PaeTop; + ULONG ActiveThreads; + ULONG GrantedAccess; + ULONG DefaultHardErrorProcessing; + NTSTATUS LastThreadExitStatus; + PPEB Peb; + EX_FAST_REF PrefetchTrace; + LARGE_INTEGER ReadOperationCount; + LARGE_INTEGER WriteOperationCount; + LARGE_INTEGER OtherOperationCount; + LARGE_INTEGER ReadTransferCount; + LARGE_INTEGER WriteTransferCount; + LARGE_INTEGER OtherTransferCount; + ULONG CommitChargeLimit; + ULONG CommitChargePeek; + PVOID AweInfo; + SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo; + MMSUPPORT Vm; + ULONG LastFaultCount; + ULONG ModifiedPageCount; + ULONG NumberOfVads; + ULONG JobStatus; + union { + ULONG Flags; + struct { + ULONG CreateReported : 1; + ULONG NoDebugInherit : 1; + ULONG ProcessExiting : 1; + ULONG ProcessDelete : 1; + ULONG Wow64SplitPages : 1; + ULONG VmDeleted : 1; + ULONG OutswapEnabled : 1; + ULONG Outswapped : 1; + ULONG ForkFailed : 1; + ULONG HasPhysicalVad : 1; + ULONG AddressSpaceInitialized : 2; + ULONG SetTimerResolution : 1; + ULONG BreakOnTermination : 1; + ULONG SessionCreationUnderway : 1; + ULONG WriteWatch : 1; + ULONG ProcessInSession : 1; + ULONG OverrideAddressSpace : 1; + ULONG HasAddressSpace : 1; + ULONG LaunchPrefetched : 1; + ULONG InjectInpageErrors : 1; + ULONG Unused : 11; + }; + }; + NTSTATUS ExitStatus; + USHORT NextPageColor; + union { + struct { + UCHAR SubSystemMinorVersion; + UCHAR SubSystemMajorVersion; + }; + USHORT SubSystemVersion; + }; + UCHAR PriorityClass; + BOOLEAN WorkingSetAcquiredUnsafe; +} EPROCESS, *PEPROCESS; + +#else + +// +// Added by Matt Wu at Mar. 28, 2004 +// Winnt4 ddk does not define these members. +// + +#if (_WIN32_WINNT < 0x0500) + + typedef _W64 long LONG_PTR, *PLONG_PTR; + typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR; + +// +// BitMap routines. The following structure, routines, and macros are +// for manipulating bitmaps. The user is responsible for allocating a bitmap +// structure (which is really a header) and a buffer (which must be longword +// aligned and multiple longwords in size). +// + +typedef struct _RTL_BITMAP { + ULONG SizeOfBitMap; // Number of bits in bit map + PULONG Buffer; // Pointer to the bit map itself +} RTL_BITMAP; + +typedef RTL_BITMAP *PRTL_BITMAP; + +#define ANSI_NULL ((CHAR)0) // winnt + + +// +// The following routine initializes a new bitmap. It does not alter the +// data currently in the bitmap. This routine must be called before +// any other bitmap routine/macro. +// + +NTSYSAPI +VOID +NTAPI +RtlInitializeBitMap ( + PRTL_BITMAP BitMapHeader, + PULONG BitMapBuffer, + ULONG SizeOfBitMap + ); + +// +// The following two routines either clear or set all of the bits +// in a bitmap. +// + +NTSYSAPI +VOID +NTAPI +RtlClearAllBits ( + PRTL_BITMAP BitMapHeader + ); + +NTSYSAPI +VOID +NTAPI +RtlSetAllBits ( + PRTL_BITMAP BitMapHeader + ); + +// +// The following two routines locate a contiguous region of either +// clear or set bits within the bitmap. The region will be at least +// as large as the number specified, and the search of the bitmap will +// begin at the specified hint index (which is a bit index within the +// bitmap, zero based). The return value is the bit index of the located +// region (zero based) or -1 (i.e., 0xffffffff) if such a region cannot +// be located +// + +NTSYSAPI +ULONG +NTAPI +RtlFindClearBits ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindSetBits ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +// +// The following two routines locate a contiguous region of either +// clear or set bits within the bitmap and either set or clear the bits +// within the located region. The region will be as large as the number +// specified, and the search for the region will begin at the specified +// hint index (which is a bit index within the bitmap, zero based). The +// return value is the bit index of the located region (zero based) or +// -1 (i.e., 0xffffffff) if such a region cannot be located. If a region +// cannot be located then the setting/clearing of the bitmap is not performed. +// + +NTSYSAPI +ULONG +NTAPI +RtlFindClearBitsAndSet ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindSetBitsAndClear ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +// +// The following two routines clear or set bits within a specified region +// of the bitmap. The starting index is zero based. +// + +NTSYSAPI +VOID +NTAPI +RtlClearBits ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG NumberToClear + ); + +NTSYSAPI +VOID +NTAPI +RtlSetBits ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG NumberToSet + ); + +// +// The following routine locates a set of contiguous regions of clear +// bits within the bitmap. The caller specifies whether to return the +// longest runs or just the first found lcoated. The following structure is +// used to denote a contiguous run of bits. The two routines return an array +// of this structure, one for each run located. +// + +typedef struct _RTL_BITMAP_RUN { + + ULONG StartingIndex; + ULONG NumberOfBits; + +} RTL_BITMAP_RUN; +typedef RTL_BITMAP_RUN *PRTL_BITMAP_RUN; + +NTSYSAPI +ULONG +NTAPI +RtlFindClearRuns ( + PRTL_BITMAP BitMapHeader, + PRTL_BITMAP_RUN RunArray, + ULONG SizeOfRunArray, + BOOLEAN LocateLongestRuns + ); + +// +// The following routine locates the longest contiguous region of +// clear bits within the bitmap. The returned starting index value +// denotes the first contiguous region located satisfying our requirements +// The return value is the length (in bits) of the longest region found. +// + +NTSYSAPI +ULONG +NTAPI +RtlFindLongestRunClear ( + PRTL_BITMAP BitMapHeader, + PULONG StartingIndex + ); + +// +// The following routine locates the first contiguous region of +// clear bits within the bitmap. The returned starting index value +// denotes the first contiguous region located satisfying our requirements +// The return value is the length (in bits) of the region found. +// + +NTSYSAPI +ULONG +NTAPI +RtlFindFirstRunClear ( + PRTL_BITMAP BitMapHeader, + PULONG StartingIndex + ); + +// +// The following macro returns the value of the bit stored within the +// bitmap at the specified location. If the bit is set a value of 1 is +// returned otherwise a value of 0 is returned. +// +// ULONG +// RtlCheckBit ( +// PRTL_BITMAP BitMapHeader, +// ULONG BitPosition +// ); +// +// +// To implement CheckBit the macro retrieves the longword containing the +// bit in question, shifts the longword to get the bit in question into the +// low order bit position and masks out all other bits. +// + +#define RtlCheckBit(BMH,BP) ((((BMH)->Buffer[(BP) / 32]) >> ((BP) % 32)) & 0x1) + +// +// The following two procedures return to the caller the total number of +// clear or set bits within the specified bitmap. +// + +NTSYSAPI +ULONG +NTAPI +RtlNumberOfClearBits ( + PRTL_BITMAP BitMapHeader + ); + +NTSYSAPI +ULONG +NTAPI +RtlNumberOfSetBits ( + PRTL_BITMAP BitMapHeader + ); + +// +// The following two procedures return to the caller a boolean value +// indicating if the specified range of bits are all clear or set. +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlAreBitsClear ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG Length + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlAreBitsSet ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG Length + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindNextForwardRunClear ( + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + IN PULONG StartingRunIndex + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindLastBackwardRunClear ( + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + IN PULONG StartingRunIndex + ); + +#endif //(_WIN32_WINNT < 0x0500) + +typedef struct _EPROCESS { + KPROCESS Pcb; + NTSTATUS ExitStatus; + KEVENT LockEvent; + ULONG LockCount; + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; + PKTHREAD LockOwner; + ULONG UniqueProcessId; + LIST_ENTRY ActiveProcessLinks; + ULONGLONG QuotaPeakPoolUsage; + ULONGLONG QuotaPoolUsage; + ULONG PagefileUsage; + ULONG CommitCharge; + ULONG PeakPagefileUsage; + ULONG PeakVirtualSize; + ULONGLONG VirtualSize; + MMSUPPORT Vm; +#if (VER_PRODUCTBUILD < 2195) + ULONG LastProtoPteFault; +#else // (VER_PRODUCTBUILD >= 2195) + LIST_ENTRY SessionProcessLinks; +#endif // (VER_PRODUCTBUILD >= 2195) + ULONG DebugPort; + ULONG ExceptionPort; + PHANDLE_TABLE ObjectTable; + PACCESS_TOKEN Token; + FAST_MUTEX WorkingSetLock; + ULONG WorkingSetPage; + BOOLEAN ProcessOutswapEnabled; + BOOLEAN ProcessOutswapped; + BOOLEAN AddressSpaceInitialized; + BOOLEAN AddressSpaceDeleted; + FAST_MUTEX AddressCreationLock; + KSPIN_LOCK HyperSpaceLock; + PETHREAD ForkInProgress; + USHORT VmOperation; + BOOLEAN ForkWasSuccessful; + UCHAR MmAgressiveWsTrimMask; + PKEVENT VmOperationEvent; +#if (VER_PRODUCTBUILD < 2195) + HARDWARE_PTE PageDirectoryPte; +#else // (VER_PRODUCTBUILD >= 2195) + PVOID PaeTop; +#endif // (VER_PRODUCTBUILD >= 2195) + ULONG LastFaultCount; + ULONG ModifiedPageCount; + PVOID VadRoot; + PVOID VadHint; + ULONG CloneRoot; + ULONG NumberOfPrivatePages; + ULONG NumberOfLockedPages; + USHORT NextPageColor; + BOOLEAN ExitProcessCalled; + BOOLEAN CreateProcessReported; + HANDLE SectionHandle; + PPEB Peb; + PVOID SectionBaseAddress; + PEPROCESS_QUOTA_BLOCK QuotaBlock; + NTSTATUS LastThreadExitStatus; + PPROCESS_WS_WATCH_INFORMATION WorkingSetWatch; + HANDLE Win32WindowStation; + HANDLE InheritedFromUniqueProcessId; + ACCESS_MASK GrantedAccess; + ULONG DefaultHardErrorProcessing; + PVOID LdtInformation; + PVOID VadFreeHint; + PVOID VdmObjects; +#if (VER_PRODUCTBUILD < 2195) + KMUTANT ProcessMutant; +#else // (VER_PRODUCTBUILD >= 2195) + PDEVICE_MAP DeviceMap; + ULONG SessionId; + LIST_ENTRY PhysicalVadList; + HARDWARE_PTE PageDirectoryPte; + ULONG Filler; + ULONG PaePageDirectoryPage; +#endif // (VER_PRODUCTBUILD >= 2195) + UCHAR ImageFileName[16]; + ULONG VmTrimFaultValue; + UCHAR SetTimerResolution; + UCHAR PriorityClass; + union { + struct { + UCHAR SubSystemMinorVersion; + UCHAR SubSystemMajorVersion; + }; + USHORT SubSystemVersion; + }; + PVOID Win32Process; +#if (VER_PRODUCTBUILD >= 2195) + PEJOB Job; + ULONG JobStatus; + LIST_ENTRY JobLinks; + PVOID LockedPageList; + PVOID SecurityPort; + PWOW64_PROCESS Wow64Process; + LARGE_INTEGER ReadOperationCount; + LARGE_INTEGER WriteOperationCount; + LARGE_INTEGER OtherOperationCount; + LARGE_INTEGER ReadTransferCount; + LARGE_INTEGER WriteTransferCount; + LARGE_INTEGER OtherTransferCount; + ULONG CommitChargeLimit; + ULONG CommitChargePeek; + LIST_ENTRY ThreadListHead; + PRTL_BITMAP VadPhysicalPagesBitMap; + ULONG VadPhysicalPages; + ULONG AweLock; +#endif // (VER_PRODUCTBUILD >= 2195) +} EPROCESS, *PEPROCESS; + +#endif + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _ETHREAD { + KTHREAD Tcb; + union { + LARGE_INTEGER CreateTime; + struct { + ULONG NestedFaultCount : 2; + ULONG ApcNeeded : 1; + }; + }; + union { + LARGE_INTEGER ExitTime; + LIST_ENTRY LpcReplyChain; + LIST_ENTRY KeyedWaitChain; + }; + union { + NTSTATUS ExitStatus; + PVOID OfsChain; + }; + LIST_ENTRY PostBlockList; + union { + PTERMINATION_PORT TerminationPort; + PETHREAD ReaperLink; + PVOID KeyedWaitValue; + }; + KSPIN_LOCK ActiveTimerListLock; + LIST_ENTRY ActiveTimerListHead; + CLIENT_ID Cid; + union { + KSEMAPHORE LpcReplySemaphore; + KSEMAPHORE KeyedWaitSemaphore; + }; + union { + PLPC_MESSAGE LpcReplyMessage; + PVOID LpcWaitingOnPort; + }; + PPS_IMPERSONATION_INFORMATION ImpersonationInfo; + LIST_ENTRY IrpList; + ULONG TopLevelIrp; + PDEVICE_OBJECT DeviceToVerify; + PEPROCESS ThreadsProcess; + PKSTART_ROUTINE StartAddress; + union { + PVOID Win32StartAddress; + ULONG LpcReceivedMessageId; + }; + LIST_ENTRY ThreadListEntry; + EX_RUNDOWN_REF RundownProtect; + EX_PUSH_LOCK ThreadLock; + ULONG LpcReplyMessageId; + ULONG ReadClusterSize; + ACCESS_MASK GrantedAccess; + union { + ULONG CrossThreadFlags; + struct { + ULONG Terminated : 1; + ULONG DeadThread : 1; + ULONG HideFromDebugger : 1; + ULONG ActiveImpersonationInfo : 1; + ULONG SystemThread : 1; + ULONG HardErrorsAreDisabled : 1; + ULONG BreakOnTermination : 1; + ULONG SkipCreationMsg : 1; + ULONG SkipTerminationMsg : 1; + }; + }; + union { + ULONG SameThreadPassiveFlags; + struct { + ULONG ActiveExWorker : 1; + ULONG ExWorkerCanWaitUser : 1; + ULONG MemoryMaker : 1; + }; + }; + union { + ULONG SameThreadApcFlags; + struct { + BOOLEAN LpcReceivedMsgIdValid : 1; + BOOLEAN LpcExitThreadCalled : 1; + BOOLEAN AddressSpaceOwner : 1; + }; + }; + BOOLEAN ForwardClusterOnly; + BOOLEAN DisablePageFaultClustering; +} ETHREAD, *PETHREAD; + +#else + +typedef struct _ETHREAD { + KTHREAD Tcb; + LARGE_INTEGER CreateTime; + union { + LARGE_INTEGER ExitTime; + LIST_ENTRY LpcReplyChain; + }; + union { + NTSTATUS ExitStatus; + PVOID OfsChain; + }; + LIST_ENTRY PostBlockList; + LIST_ENTRY TerminationPortList; + KSPIN_LOCK ActiveTimerListLock; + LIST_ENTRY ActiveTimerListHead; + CLIENT_ID Cid; + KSEMAPHORE LpcReplySemaphore; + PLPC_MESSAGE LpcReplyMessage; + ULONG LpcReplyMessageId; + ULONG PerformanceCountLow; + PPS_IMPERSONATION_INFORMATION ImpersonationInfo; + LIST_ENTRY IrpList; + PVOID TopLevelIrp; + PDEVICE_OBJECT DeviceToVerify; + ULONG ReadClusterSize; + BOOLEAN ForwardClusterOnly; + BOOLEAN DisablePageFaultClustering; + BOOLEAN DeadThread; +#if (VER_PRODUCTBUILD >= 2195) + BOOLEAN HideFromDebugger; +#endif // (VER_PRODUCTBUILD >= 2195) +#if (VER_PRODUCTBUILD < 2195) + BOOLEAN HasTerminated; +#else // (VER_PRODUCTBUILD >= 2195) + ULONG HasTerminated; +#endif // (VER_PRODUCTBUILD >= 2195) +#if (VER_PRODUCTBUILD < 2195) + PKEVENT_PAIR EventPair; +#endif // (VER_PRODUCTBUILD < 2195) + ACCESS_MASK GrantedAccess; + PEPROCESS ThreadsProcess; + PKSTART_ROUTINE StartAddress; + union { + PVOID Win32StartAddress; + ULONG LpcReceivedMessageId; + }; + BOOLEAN LpcExitThreadCalled; + BOOLEAN HardErrorsAreDisabled; + BOOLEAN LpcReceivedMsgIdValid; + BOOLEAN ActiveImpersonationInfo; + ULONG PerformanceCountHigh; +#if (VER_PRODUCTBUILD >= 2195) + LIST_ENTRY ThreadListEntry; +#endif // (VER_PRODUCTBUILD >= 2195) +} ETHREAD, *PETHREAD; + +#endif + +typedef struct _EPROCESS_QUOTA_ENTRY { + ULONG Usage; + ULONG Limit; + ULONG Peak; + ULONG Return; +} EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY; + +typedef struct _EPROCESS_QUOTA_BLOCK { + EPROCESS_QUOTA_ENTRY QuotaEntry[3]; + LIST_ENTRY QuotaList; + ULONG ReferenceCount; + ULONG ProcessCount; +} EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK; + +typedef struct _EXCEPTION_REGISTRATION_RECORD { + struct _EXCEPTION_REGISTRATION_RECORD *Next; + PVOID Handler; +} EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD; + +/* + * When needing these parameters cast your PIO_STACK_LOCATION to + * PEXTENDED_IO_STACK_LOCATION + */ +#if !defined(_ALPHA_) +#include <pshpack4.h> +#endif +typedef struct _EXTENDED_IO_STACK_LOCATION { + + /* Included for padding */ + UCHAR MajorFunction; + UCHAR MinorFunction; + UCHAR Flags; + UCHAR Control; + + union { + + struct { + PIO_SECURITY_CONTEXT SecurityContext; + ULONG Options; + USHORT Reserved; + USHORT ShareAccess; + PMAILSLOT_CREATE_PARAMETERS Parameters; + } CreateMailslot; + + struct { + PIO_SECURITY_CONTEXT SecurityContext; + ULONG Options; + USHORT Reserved; + USHORT ShareAccess; + PNAMED_PIPE_CREATE_PARAMETERS Parameters; + } CreatePipe; + + struct { + ULONG OutputBufferLength; + ULONG InputBufferLength; + ULONG FsControlCode; + PVOID Type3InputBuffer; + } FileSystemControl; + + struct { + PLARGE_INTEGER Length; + ULONG Key; + LARGE_INTEGER ByteOffset; + } LockControl; + + struct { + ULONG Length; + ULONG CompletionFilter; + } NotifyDirectory; + + struct { + ULONG Length; + PUNICODE_STRING FileName; + FILE_INFORMATION_CLASS FileInformationClass; + ULONG FileIndex; + } QueryDirectory; + + struct { + ULONG Length; + PVOID EaList; + ULONG EaListLength; + ULONG EaIndex; + } QueryEa; + + struct { + ULONG Length; + PSID StartSid; + PFILE_GET_QUOTA_INFORMATION SidList; + ULONG SidListLength; + } QueryQuota; + + struct { + ULONG Length; + } SetEa; + + struct { + ULONG Length; + } SetQuota; + + struct { + ULONG Length; + FS_INFORMATION_CLASS FsInformationClass; + } SetVolume; + + } Parameters; + +} EXTENDED_IO_STACK_LOCATION, *PEXTENDED_IO_STACK_LOCATION; +#if !defined(_ALPHA_) +#include <poppack.h> +#endif + +typedef struct _FILE_ACCESS_INFORMATION { + ACCESS_MASK AccessFlags; +} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; + +typedef struct _FILE_ALLOCATION_INFORMATION { + LARGE_INTEGER AllocationSize; +} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; + +typedef struct _FILE_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + WCHAR FileName[1]; +} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; + +typedef struct _FILE_COMPLETION_INFORMATION { + HANDLE Port; + ULONG Key; +} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; + +typedef struct _FILE_COMPRESSION_INFORMATION { + LARGE_INTEGER CompressedFileSize; + USHORT CompressionFormat; + UCHAR CompressionUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + UCHAR Reserved[3]; +} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; + +typedef struct _FILE_COPY_ON_WRITE_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION; + +typedef struct _FILE_DIRECTORY_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; + +typedef struct _FILE_EA_INFORMATION { + ULONG EaSize; +} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; + +typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { + ULONG FileSystemAttributes; + ULONG MaximumComponentNameLength; + ULONG FileSystemNameLength; + WCHAR FileSystemName[1]; +} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; + +typedef struct _FILE_FS_CONTROL_INFORMATION { + LARGE_INTEGER FreeSpaceStartFiltering; + LARGE_INTEGER FreeSpaceThreshold; + LARGE_INTEGER FreeSpaceStopFiltering; + LARGE_INTEGER DefaultQuotaThreshold; + LARGE_INTEGER DefaultQuotaLimit; + ULONG FileSystemControlFlags; +} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION; + +typedef struct _FILE_FS_FULL_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER CallerAvailableAllocationUnits; + LARGE_INTEGER ActualAvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; + +typedef struct _FILE_FS_LABEL_INFORMATION { + ULONG VolumeLabelLength; + WCHAR VolumeLabel[1]; +} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; + +#if (VER_PRODUCTBUILD >= 2195) + +typedef struct _FILE_FS_OBJECT_ID_INFORMATION { + UCHAR ObjectId[16]; + UCHAR ExtendedInfo[48]; +} FILE_FS_OBJECT_ID_INFORMATION, *PFILE_FS_OBJECT_ID_INFORMATION; + +#endif // (VER_PRODUCTBUILD >= 2195) + +typedef struct _FILE_FS_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER AvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; + +typedef struct _FILE_FS_VOLUME_INFORMATION { + LARGE_INTEGER VolumeCreationTime; + ULONG VolumeSerialNumber; + ULONG VolumeLabelLength; + BOOLEAN SupportsObjects; + WCHAR VolumeLabel[1]; +} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; + +typedef struct _FILE_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + WCHAR FileName[1]; +} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; + +typedef struct _FILE_GET_EA_INFORMATION { + ULONG NextEntryOffset; + UCHAR EaNameLength; + CHAR EaName[1]; +} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; + +typedef struct _FILE_GET_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + SID Sid; +} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION; + +typedef struct _FILE_ID_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; + +typedef struct _FILE_ID_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION; + +typedef struct _FILE_INTERNAL_INFORMATION { + LARGE_INTEGER IndexNumber; +} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; + +typedef struct _FILE_LINK_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; + +typedef struct _FILE_LOCK_INFO { + LARGE_INTEGER StartingByte; + LARGE_INTEGER Length; + BOOLEAN ExclusiveLock; + ULONG Key; + PFILE_OBJECT FileObject; + PEPROCESS Process; + LARGE_INTEGER EndingByte; +} FILE_LOCK_INFO, *PFILE_LOCK_INFO; + +// raw internal file lock struct returned from FsRtlGetNextFileLock +typedef struct _FILE_SHARED_LOCK_ENTRY { + PVOID Unknown1; + PVOID Unknown2; + FILE_LOCK_INFO FileLock; +} FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY; + +// raw internal file lock struct returned from FsRtlGetNextFileLock +typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY { + LIST_ENTRY ListEntry; + PVOID Unknown1; + PVOID Unknown2; + FILE_LOCK_INFO FileLock; +} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY; + +typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) ( + IN PVOID Context, + IN PIRP Irp +); + +typedef VOID (*PUNLOCK_ROUTINE) ( + IN PVOID Context, + IN PFILE_LOCK_INFO FileLockInfo +); + +typedef struct _FILE_LOCK { + PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine; + PUNLOCK_ROUTINE UnlockRoutine; + BOOLEAN FastIoIsQuestionable; + BOOLEAN Pad[3]; + PVOID LockInformation; + FILE_LOCK_INFO LastReturnedLockInfo; + PVOID LastReturnedLock; +} FILE_LOCK, *PFILE_LOCK; + +typedef struct _FILE_MAILSLOT_PEEK_BUFFER { + ULONG ReadDataAvailable; + ULONG NumberOfMessages; + ULONG MessageLength; +} FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER; + +typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { + ULONG MaximumMessageSize; + ULONG MailslotQuota; + ULONG NextMessageSize; + ULONG MessagesAvailable; + LARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; + +typedef struct _FILE_MAILSLOT_SET_INFORMATION { + PLARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; + +typedef struct _FILE_MODE_INFORMATION { + ULONG Mode; +} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; + +// This structure is included in the Windows 2000 DDK but is missing in the +// Windows NT 4.0 DDK +#if (VER_PRODUCTBUILD < 2195) +typedef struct _FILE_NAME_INFORMATION { + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; +#endif // (VER_PRODUCTBUILD < 2195) + +typedef struct _FILE_ALL_INFORMATION { + FILE_BASIC_INFORMATION BasicInformation; + FILE_STANDARD_INFORMATION StandardInformation; + FILE_INTERNAL_INFORMATION InternalInformation; + FILE_EA_INFORMATION EaInformation; + FILE_ACCESS_INFORMATION AccessInformation; + FILE_POSITION_INFORMATION PositionInformation; + FILE_MODE_INFORMATION ModeInformation; + FILE_ALIGNMENT_INFORMATION AlignmentInformation; + FILE_NAME_INFORMATION NameInformation; +} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; + +typedef struct _FILE_NAMES_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; + +typedef struct _FILE_NOTIFY_INFORMATION { + ULONG NextEntryOffset; + ULONG Action; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; + +typedef struct _FILE_OBJECTID_INFORMATION { + LONGLONG FileReference; + UCHAR ObjectId[16]; + union { + struct { + UCHAR BirthVolumeId[16]; + UCHAR BirthObjectId[16]; + UCHAR DomainId[16]; + } ; + UCHAR ExtendedInfo[48]; + }; +} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION; + +typedef struct _FILE_OLE_CLASSID_INFORMATION { + GUID ClassId; +} FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION; + +typedef struct _FILE_OLE_ALL_INFORMATION { + FILE_BASIC_INFORMATION BasicInformation; + FILE_STANDARD_INFORMATION StandardInformation; + FILE_INTERNAL_INFORMATION InternalInformation; + FILE_EA_INFORMATION EaInformation; + FILE_ACCESS_INFORMATION AccessInformation; + FILE_POSITION_INFORMATION PositionInformation; + FILE_MODE_INFORMATION ModeInformation; + FILE_ALIGNMENT_INFORMATION AlignmentInformation; + USN LastChangeUsn; + USN ReplicationUsn; + LARGE_INTEGER SecurityChangeTime; + FILE_OLE_CLASSID_INFORMATION OleClassIdInformation; + FILE_OBJECTID_INFORMATION ObjectIdInformation; + FILE_STORAGE_TYPE StorageType; + ULONG OleStateBits; + ULONG OleId; + ULONG NumberOfStreamReferences; + ULONG StreamIndex; + ULONG SecurityId; + BOOLEAN ContentIndexDisable; + BOOLEAN InheritContentIndexDisable; + FILE_NAME_INFORMATION NameInformation; +} FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION; + +typedef struct _FILE_OLE_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + FILE_STORAGE_TYPE StorageType; + GUID OleClassId; + ULONG OleStateBits; + BOOLEAN ContentIndexDisable; + BOOLEAN InheritContentIndexDisable; + WCHAR FileName[1]; +} FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION; + +typedef struct _FILE_OLE_INFORMATION { + LARGE_INTEGER SecurityChangeTime; + FILE_OLE_CLASSID_INFORMATION OleClassIdInformation; + FILE_OBJECTID_INFORMATION ObjectIdInformation; + FILE_STORAGE_TYPE StorageType; + ULONG OleStateBits; + BOOLEAN ContentIndexDisable; + BOOLEAN InheritContentIndexDisable; +} FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION; + +typedef struct _FILE_OLE_STATE_BITS_INFORMATION { + ULONG StateBits; + ULONG StateBitsMask; +} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION; + +typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER { + HANDLE EventHandle; + ULONG KeyValue; +} FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER; + +typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER { + PVOID ClientSession; + PVOID ClientProcess; +} FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER; + +typedef struct _FILE_PIPE_EVENT_BUFFER { + ULONG NamedPipeState; + ULONG EntryType; + ULONG ByteCount; + ULONG KeyValue; + ULONG NumberRequests; +} FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER; + +typedef struct _FILE_PIPE_INFORMATION { + ULONG ReadMode; + ULONG CompletionMode; +} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; + +typedef struct _FILE_PIPE_LOCAL_INFORMATION { + ULONG NamedPipeType; + ULONG NamedPipeConfiguration; + ULONG MaximumInstances; + ULONG CurrentInstances; + ULONG InboundQuota; + ULONG ReadDataAvailable; + ULONG OutboundQuota; + ULONG WriteQuotaAvailable; + ULONG NamedPipeState; + ULONG NamedPipeEnd; +} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; + +typedef struct _FILE_PIPE_PEEK_BUFFER { + ULONG NamedPipeState; + ULONG ReadDataAvailable; + ULONG NumberOfMessages; + ULONG MessageLength; + CHAR Data[1]; +} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER; + +typedef struct _FILE_PIPE_REMOTE_INFORMATION { + LARGE_INTEGER CollectDataTime; + ULONG MaximumCollectionCount; +} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION; + +typedef struct _FILE_PIPE_WAIT_FOR_BUFFER { + LARGE_INTEGER Timeout; + ULONG NameLength; + BOOLEAN TimeoutSpecified; + WCHAR Name[1]; +} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER; + +typedef struct _FILE_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER QuotaUsed; + LARGE_INTEGER QuotaThreshold; + LARGE_INTEGER QuotaLimit; + SID Sid; +} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; + +typedef struct _FILE_RENAME_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; + +typedef struct _FILE_STREAM_INFORMATION { + ULONG NextEntryOffset; + ULONG StreamNameLength; + LARGE_INTEGER StreamSize; + LARGE_INTEGER StreamAllocationSize; + WCHAR StreamName[1]; +} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; + +typedef struct _FILE_TRACKING_INFORMATION { + HANDLE DestinationFile; + ULONG ObjectInformationLength; + CHAR ObjectInformation[1]; +} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION; + +typedef struct _FSRTL_COMMON_FCB_HEADER { + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + UCHAR Flags; + UCHAR IsFastIoPossible; +#if (VER_PRODUCTBUILD >= 1381) + UCHAR Flags2; + UCHAR Reserved; +#endif // (VER_PRODUCTBUILD >= 1381) + PERESOURCE Resource; + PERESOURCE PagingIoResource; + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; +} FSRTL_COMMON_FCB_HEADER, *PFSRTL_COMMON_FCB_HEADER; + +// +// This Fcb header is used for files which support caching +// of compressed data, and related new support. +// +// We start out by prefixing this structure with the normal +// FsRtl header from above, which we have to do two different +// ways for c++ or c. +// + +#ifdef __cplusplus +typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER { +#else // __cplusplus + +typedef struct _FSRTL_ADVANCED_FCB_HEADER { + + // + // Put in the standard FsRtl header fields + // + + FSRTL_COMMON_FCB_HEADER ; + +#endif // __cplusplus + + // + // This is a pointer to a Fast Mutex which may be used to + // properly synchronize access to the FsRtl header. The + // Fast Mutex must be nonpaged. + // + + PFAST_MUTEX FastMutex; + + // + // This is a pointer to a list head which may be used to queue + // up advances to EOF (end of file), via calls to the appropriate + // FsRtl routines. This listhead may be paged. + // + + PLIST_ENTRY PendingEofAdvances; + + // + // When FSRTL_FLAG_ADVANCED_HEADER is set, the following fields + // are present in the header. If the compressed stream has not + // been initialized, all of the following fields will be NULL. + // + + // + // This is the FileObect for the stream in which data is cached + // in its compressed form. + // + + PFILE_OBJECT FileObjectC; + + // + // The following field points to the Section Object Pointers for + // the normal data stream used for cache coherency in the fast path. + // + + PSECTION_OBJECT_POINTERS SectionObjectPointers; + +} FSRTL_ADVANCED_FCB_HEADER; +typedef FSRTL_ADVANCED_FCB_HEADER *PFSRTL_ADVANCED_FCB_HEADER; + + +typedef struct _GENERATE_NAME_CONTEXT { + USHORT Checksum; + BOOLEAN CheckSumInserted; + UCHAR NameLength; + WCHAR NameBuffer[8]; + ULONG ExtensionLength; + WCHAR ExtensionBuffer[4]; + ULONG LastIndexValue; +} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT; + +typedef struct _HANDLE_TABLE_ENTRY_INFO { + ULONG AuditMask; +} HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO; + +typedef struct _HANDLE_TABLE_ENTRY { + union { + PVOID Object; + ULONG ObAttributes; + PHANDLE_TABLE_ENTRY_INFO InfoTable; + ULONG Value; + }; + union { + ULONG GrantedAccess; + USHORT GrantedAccessIndex; + LONG NextFreeTableEntry; + }; + USHORT CreatorBackTraceIndex; +} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY; + +typedef struct _MAPPING_PAIR { + ULONGLONG Vcn; + ULONGLONG Lcn; +} MAPPING_PAIR, *PMAPPING_PAIR; + +typedef struct _GET_RETRIEVAL_DESCRIPTOR { + ULONG NumberOfPairs; + ULONGLONG StartVcn; + MAPPING_PAIR Pair[1]; +} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR; + +typedef struct _INITIAL_TEB { + ULONG Unknown_1; + ULONG Unknown_2; + PVOID StackTop; + PVOID StackBase; + PVOID Unknown_3; +} INITIAL_TEB, *PINITIAL_TEB; + +typedef struct _IO_CLIENT_EXTENSION { + struct _IO_CLIENT_EXTENSION *NextExtension; + PVOID ClientIdentificationAddress; +} IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION; + +typedef struct _IO_COMPLETION_BASIC_INFORMATION { + LONG Depth; +} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION; + +typedef struct _KEVENT_PAIR { + USHORT Type; + USHORT Size; + KEVENT Event1; + KEVENT Event2; +} KEVENT_PAIR, *PKEVENT_PAIR; + +typedef struct _KINTERRUPT { + CSHORT Type; + CSHORT Size; + LIST_ENTRY InterruptListEntry; + PKSERVICE_ROUTINE ServiceRoutine; + PVOID ServiceContext; + KSPIN_LOCK SpinLock; + ULONG TickCount; + PKSPIN_LOCK ActualLock; + PVOID DispatchAddress; + ULONG Vector; + KIRQL Irql; + KIRQL SynchronizeIrql; + BOOLEAN FloatingSave; + BOOLEAN Connected; + CHAR Number; + UCHAR ShareVector; + KINTERRUPT_MODE Mode; + ULONG ServiceCount; + ULONG DispatchCount; + ULONG DispatchCode[106]; +} KINTERRUPT, *PKINTERRUPT; + +typedef struct _KQUEUE { + DISPATCHER_HEADER Header; + LIST_ENTRY EntryListHead; + ULONG CurrentCount; + ULONG MaximumCount; + LIST_ENTRY ThreadListHead; +} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE; + +typedef struct _LARGE_MCB { + PFAST_MUTEX FastMutex; + ULONG MaximumPairCount; + ULONG PairCount; + POOL_TYPE PoolType; + PVOID Mapping; +} LARGE_MCB, *PLARGE_MCB; + +typedef struct _LPC_MESSAGE { + USHORT DataSize; + USHORT MessageSize; + USHORT MessageType; + USHORT VirtualRangesOffset; + CLIENT_ID ClientId; + ULONG MessageId; + ULONG SectionSize; + UCHAR Data[1]; +} LPC_MESSAGE, *PLPC_MESSAGE; + +typedef struct _LPC_SECTION_READ { + ULONG Length; + ULONG ViewSize; + PVOID ViewBase; +} LPC_SECTION_READ, *PLPC_SECTION_READ; + +typedef struct _LPC_SECTION_WRITE { + ULONG Length; + HANDLE SectionHandle; + ULONG SectionOffset; + ULONG ViewSize; + PVOID ViewBase; + PVOID TargetViewBase; +} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE; + +typedef struct _MAILSLOT_CREATE_PARAMETERS { + ULONG MailslotQuota; + ULONG MaximumMessageSize; + LARGE_INTEGER ReadTimeout; + BOOLEAN TimeoutSpecified; +} MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS; + +typedef struct _MBCB { + CSHORT NodeTypeCode; + CSHORT NodeIsInZone; + ULONG PagesToWrite; + ULONG DirtyPages; + ULONG Reserved; + LIST_ENTRY BitmapRanges; + LONGLONG ResumeWritePage; + BITMAP_RANGE BitmapRange1; + BITMAP_RANGE BitmapRange2; + BITMAP_RANGE BitmapRange3; +} MBCB, *PMBCB; + +typedef struct _MCB { + LARGE_MCB LargeMcb; +} MCB, *PMCB; + +typedef struct _MOVEFILE_DESCRIPTOR { + HANDLE FileHandle; + ULONG Reserved; + LARGE_INTEGER StartVcn; + LARGE_INTEGER TargetLcn; + ULONG NumVcns; + ULONG Reserved1; +} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR; + +typedef struct _NAMED_PIPE_CREATE_PARAMETERS { + ULONG NamedPipeType; + ULONG ReadMode; + ULONG CompletionMode; + ULONG MaximumInstances; + ULONG InboundQuota; + ULONG OutboundQuota; + LARGE_INTEGER DefaultTimeout; + BOOLEAN TimeoutSpecified; +} NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS; + +typedef struct _OBJECT_BASIC_INFO { + ULONG Attributes; + ACCESS_MASK GrantedAccess; + ULONG HandleCount; + ULONG ReferenceCount; + ULONG PagedPoolUsage; + ULONG NonPagedPoolUsage; + ULONG Reserved[3]; + ULONG NameInformationLength; + ULONG TypeInformationLength; + ULONG SecurityDescriptorLength; + LARGE_INTEGER CreateTime; +} OBJECT_BASIC_INFO, *POBJECT_BASIC_INFO; + +typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFO { + BOOLEAN Inherit; + BOOLEAN ProtectFromClose; +} OBJECT_HANDLE_ATTRIBUTE_INFO, *POBJECT_HANDLE_ATTRIBUTE_INFO; + +typedef struct _OBJECT_HEADER { + ULONG Flags; + PVOID Unknown1; + PVOID DirectoryObject; + UNICODE_STRING ObjectName; + ULONG Reserved; + ULONG HandleCount; + ULONG ReferenceCount; + PVOID ObjectMethods; // (@+0x40 is the unicode type name) + ULONG Unknown2; + ULONG Unknown3; + ULONG Unknown4; +} OBJECT_HEADER, *POBJECT_HEADER; + +typedef struct _OBJECT_NAME_INFO { + UNICODE_STRING ObjectName; + WCHAR ObjectNameBuffer[1]; +} OBJECT_NAME_INFO, *POBJECT_NAME_INFO; + +typedef struct _OBJECT_PROTECTION_INFO { + BOOLEAN Inherit; + BOOLEAN ProtectHandle; +} OBJECT_PROTECTION_INFO, *POBJECT_PROTECTION_INFO; + +typedef struct _OBJECT_TYPE { + ERESOURCE Mutex; + LIST_ENTRY TypeList; + UNICODE_STRING Name; + PVOID DefaultObject; + ULONG Index; + ULONG TotalNumberOfObjects; + ULONG TotalNumberOfHandles; + ULONG HighWaterNumberOfObjects; + ULONG HighWaterNumberOfHandles; + //OBJECT_TYPE_INITIALIZER TypeInfo; + ULONG Key; + ERESOURCE ObjectLocks[4]; +} OBJECT_TYPE, *POBJECT_TYPE; + +typedef struct _OBJECT_TYPE_INFO { + UNICODE_STRING ObjectTypeName; + UCHAR Unknown[0x58]; + WCHAR ObjectTypeNameBuffer[1]; +} OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO; + +typedef struct _OBJECT_ALL_TYPES_INFO { + ULONG NumberOfObjectTypes; + OBJECT_TYPE_INFO ObjectsTypeInfo[1]; +} OBJECT_ALL_TYPES_INFO, *POBJECT_ALL_TYPES_INFO; + +typedef struct _PAGEFAULT_HISTORY { + ULONG CurrentIndex; + ULONG MaxIndex; + KSPIN_LOCK SpinLock; + PVOID Reserved; + PROCESS_WS_WATCH_INFORMATION WatchInfo[1]; +} PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY; + +typedef struct _PATHNAME_BUFFER { + ULONG PathNameLength; + WCHAR Name[1]; +} PATHNAME_BUFFER, *PPATHNAME_BUFFER; + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _PRIVATE_CACHE_MAP_FLAGS { + ULONG DontUse : 16; + ULONG ReadAheadActive : 1; + ULONG ReadAheadEnabled : 1; + ULONG Available : 14; +} PRIVATE_CACHE_MAP_FLAGS, *PPRIVATE_CACHE_MAP_FLAGS; + +typedef struct _PRIVATE_CACHE_MAP { + union { + CSHORT NodeTypeCode; + PRIVATE_CACHE_MAP_FLAGS Flags; + ULONG UlongFlags; + }; + ULONG ReadAheadMask; + PFILE_OBJECT FileObject; + LARGE_INTEGER FileOffset1; + LARGE_INTEGER BeyondLastByte1; + LARGE_INTEGER FileOffset2; + LARGE_INTEGER BeyondLastByte2; + LARGE_INTEGER ReadAheadOffset[2]; + ULONG ReadAheadLength[2]; + KSPIN_LOCK ReadAheadSpinLock; + LIST_ENTRY PrivateLinks; +} PRIVATE_CACHE_MAP, *PPRIVATE_CACHE_MAP; + +#endif + +typedef struct _PROCESS_PRIORITY_CLASS { + BOOLEAN Foreground; + UCHAR PriorityClass; +} PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS; + +typedef struct _PS_IMPERSONATION_INFORMATION { + PACCESS_TOKEN Token; + BOOLEAN CopyOnOpen; + BOOLEAN EffectiveOnly; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; +} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION; + +typedef struct _PUBLIC_BCB { + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + ULONG MappedLength; + LARGE_INTEGER MappedFileOffset; +} PUBLIC_BCB, *PPUBLIC_BCB; + +typedef struct _QUERY_PATH_REQUEST { + ULONG PathNameLength; + PIO_SECURITY_CONTEXT SecurityContext; + WCHAR FilePathName[1]; +} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST; + +typedef struct _QUERY_PATH_RESPONSE { + ULONG LengthAccepted; +} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE; + +typedef struct _REPARSE_DATA_BUFFER { + + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + + union { + + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; + +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +typedef struct _RETRIEVAL_POINTERS_BUFFER { + ULONG ExtentCount; + LARGE_INTEGER StartingVcn; + struct { + LARGE_INTEGER NextVcn; + LARGE_INTEGER Lcn; + } Extents[1]; +} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER; + +typedef struct _RTL_SPLAY_LINKS { + struct _RTL_SPLAY_LINKS *Parent; + struct _RTL_SPLAY_LINKS *LeftChild; + struct _RTL_SPLAY_LINKS *RightChild; +} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS; + +typedef struct _SE_EXPORTS { + + LUID SeCreateTokenPrivilege; + LUID SeAssignPrimaryTokenPrivilege; + LUID SeLockMemoryPrivilege; + LUID SeIncreaseQuotaPrivilege; + LUID SeUnsolicitedInputPrivilege; + LUID SeTcbPrivilege; + LUID SeSecurityPrivilege; + LUID SeTakeOwnershipPrivilege; + LUID SeLoadDriverPrivilege; + LUID SeCreatePagefilePrivilege; + LUID SeIncreaseBasePriorityPrivilege; + LUID SeSystemProfilePrivilege; + LUID SeSystemtimePrivilege; + LUID SeProfileSingleProcessPrivilege; + LUID SeCreatePermanentPrivilege; + LUID SeBackupPrivilege; + LUID SeRestorePrivilege; + LUID SeShutdownPrivilege; + LUID SeDebugPrivilege; + LUID SeAuditPrivilege; + LUID SeSystemEnvironmentPrivilege; + LUID SeChangeNotifyPrivilege; + LUID SeRemoteShutdownPrivilege; + + PSID SeNullSid; + PSID SeWorldSid; + PSID SeLocalSid; + PSID SeCreatorOwnerSid; + PSID SeCreatorGroupSid; + + PSID SeNtAuthoritySid; + PSID SeDialupSid; + PSID SeNetworkSid; + PSID SeBatchSid; + PSID SeInteractiveSid; + PSID SeLocalSystemSid; + PSID SeAliasAdminsSid; + PSID SeAliasUsersSid; + PSID SeAliasGuestsSid; + PSID SeAliasPowerUsersSid; + PSID SeAliasAccountOpsSid; + PSID SeAliasSystemOpsSid; + PSID SeAliasPrintOpsSid; + PSID SeAliasBackupOpsSid; + + PSID SeAuthenticatedUsersSid; + + PSID SeRestrictedSid; + PSID SeAnonymousLogonSid; + + LUID SeUndockPrivilege; + LUID SeSyncAgentPrivilege; + LUID SeEnableDelegationPrivilege; + +} SE_EXPORTS, *PSE_EXPORTS; + +typedef struct _SECTION_BASIC_INFORMATION { + PVOID BaseAddress; + ULONG Attributes; + LARGE_INTEGER Size; +} SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION; + +typedef struct _SECTION_IMAGE_INFORMATION { + PVOID EntryPoint; + ULONG Unknown1; + ULONG StackReserve; + ULONG StackCommit; + ULONG Subsystem; + USHORT MinorSubsystemVersion; + USHORT MajorSubsystemVersion; + ULONG Unknown2; + ULONG Characteristics; + USHORT ImageNumber; + BOOLEAN Executable; + UCHAR Unknown3; + ULONG Unknown4[3]; +} SECTION_IMAGE_INFORMATION, *PSECTION_IMAGE_INFORMATION; + +typedef struct _SECTION_OBJECT { + PVOID StartingVa; + PVOID EndingVa; + struct _SECTION_OBJECT *Parent; + struct _SECTION_OBJECT *LeftChild; + struct _SECTION_OBJECT *RightChild; + PVOID Segment; +} SECTION_OBJECT, *PSECTION_OBJECT; + +typedef struct _SERVICE_DESCRIPTOR_TABLE { + PVOID ServiceTable; + PULONG CounterTable; + ULONG TableSize; + PUCHAR ArgumentTable; +} SERVICE_DESCRIPTOR_TABLE, *PSERVICE_DESCRIPTOR_TABLE; + +#if (VER_PRODUCTBUILD >= 2600) + +typedef struct _SHARED_CACHE_MAP { + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + ULONG OpenCount; + LARGE_INTEGER FileSize; + LIST_ENTRY BcbList; + LARGE_INTEGER SectionSize; + LARGE_INTEGER ValidDataLength; + LARGE_INTEGER ValidDataGoal; + PVACB InitialVacbs[4]; + PVACB *Vacbs; + PFILE_OBJECT FileObject; + PVACB ActiveVacb; + PVOID NeedToZero; + ULONG ActivePage; + ULONG NeedToZeroPage; + KSPIN_LOCK ActiveVacbSpinLock; + ULONG VacbActiveCount; + ULONG DirtyPages; + LIST_ENTRY SharedCacheMapLinks; + ULONG Flags; + NTSTATUS Status; + PMBCB Mbcb; + PVOID Section; + PKEVENT CreateEvent; + PKEVENT WaitOnActiveCount; + ULONG PagesToWrite; + LONGLONG BeyondLastFlush; + PCACHE_MANAGER_CALLBACKS Callbacks; + PVOID LazyWriteContext; + LIST_ENTRY PrivateList; + PVOID LogHandle; + PVOID FlushToLsnRoutine; + ULONG DirtyPageThreshold; + ULONG LazyWritePassCount; + PCACHE_UNINITIALIZE_EVENT UninitializeEvent; + PVACB NeedToZeroVacb; + KSPIN_LOCK BcbSpinLock; + PVOID Reserved; + KEVENT Event; + EX_PUSH_LOCK VacbPushLock; + PRIVATE_CACHE_MAP PrivateCacheMap; +} SHARED_CACHE_MAP, *PSHARED_CACHE_MAP; + +#endif + +typedef struct _SID_AND_ATTRIBUTES { + PSID Sid; + ULONG Attributes; +} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES; + +typedef struct _STARTING_VCN_INPUT_BUFFER { + LARGE_INTEGER StartingVcn; +} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER; + +// SystemBasicInformation +typedef struct _SYSTEM_BASIC_INFORMATION { + ULONG Unknown; + ULONG MaximumIncrement; + ULONG PhysicalPageSize; + ULONG NumberOfPhysicalPages; + ULONG LowestPhysicalPage; + ULONG HighestPhysicalPage; + ULONG AllocationGranularity; + ULONG LowestUserAddress; + ULONG HighestUserAddress; + ULONG ActiveProcessors; + UCHAR NumberProcessors; +} SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; + +// SystemProcessorInformation +typedef struct _SYSTEM_PROCESSOR_INFORMATION { + USHORT ProcessorArchitecture; + USHORT ProcessorLevel; + USHORT ProcessorRevision; + USHORT Unknown; + ULONG FeatureBits; +} SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION; + +// SystemPerformanceInformation +typedef struct _SYSTEM_PERFORMANCE_INFORMATION { + LARGE_INTEGER IdleTime; + LARGE_INTEGER ReadTransferCount; + LARGE_INTEGER WriteTransferCount; + LARGE_INTEGER OtherTransferCount; + ULONG ReadOperationCount; + ULONG WriteOperationCount; + ULONG OtherOperationCount; + ULONG AvailablePages; + ULONG TotalCommittedPages; + ULONG TotalCommitLimit; + ULONG PeakCommitment; + ULONG PageFaults; + ULONG WriteCopyFaults; + ULONG TransistionFaults; + ULONG Reserved1; + ULONG DemandZeroFaults; + ULONG PagesRead; + ULONG PageReadIos; + ULONG Reserved2[2]; + ULONG PagefilePagesWritten; + ULONG PagefilePageWriteIos; + ULONG MappedFilePagesWritten; + ULONG MappedFilePageWriteIos; + ULONG PagedPoolUsage; + ULONG NonPagedPoolUsage; + ULONG PagedPoolAllocs; + ULONG PagedPoolFrees; + ULONG NonPagedPoolAllocs; + ULONG NonPagedPoolFrees; + ULONG TotalFreeSystemPtes; + ULONG SystemCodePage; + ULONG TotalSystemDriverPages; + ULONG TotalSystemCodePages; + ULONG SmallNonPagedLookasideListAllocateHits; + ULONG SmallPagedLookasideListAllocateHits; + ULONG Reserved3; + ULONG MmSystemCachePage; + ULONG PagedPoolPage; + ULONG SystemDriverPage; + ULONG FastReadNoWait; + ULONG FastReadWait; + ULONG FastReadResourceMiss; + ULONG FastReadNotPossible; + ULONG FastMdlReadNoWait; + ULONG FastMdlReadWait; + ULONG FastMdlReadResourceMiss; + ULONG FastMdlReadNotPossible; + ULONG MapDataNoWait; + ULONG MapDataWait; + ULONG MapDataNoWaitMiss; + ULONG MapDataWaitMiss; + ULONG PinMappedDataCount; + ULONG PinReadNoWait; + ULONG PinReadWait; + ULONG PinReadNoWaitMiss; + ULONG PinReadWaitMiss; + ULONG CopyReadNoWait; + ULONG CopyReadWait; + ULONG CopyReadNoWaitMiss; + ULONG CopyReadWaitMiss; + ULONG MdlReadNoWait; + ULONG MdlReadWait; + ULONG MdlReadNoWaitMiss; + ULONG MdlReadWaitMiss; + ULONG ReadAheadIos; + ULONG LazyWriteIos; + ULONG LazyWritePages; + ULONG DataFlushes; + ULONG DataPages; + ULONG ContextSwitches; + ULONG FirstLevelTbFills; + ULONG SecondLevelTbFills; + ULONG SystemCalls; +} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION; + +// SystemTimeOfDayInformation +typedef struct _SYSTEM_TIME_OF_DAY_INFORMATION { + LARGE_INTEGER BootTime; + LARGE_INTEGER CurrentTime; + LARGE_INTEGER TimeZoneBias; + ULONG CurrentTimeZoneId; +} SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION; + +typedef struct _SYSTEM_THREADS_INFORMATION { + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER CreateTime; + ULONG WaitTime; + PVOID StartAddress; + CLIENT_ID ClientId; + KPRIORITY Priority; + KPRIORITY BasePriority; + ULONG ContextSwitchCount; + THREAD_STATE State; + KWAIT_REASON WaitReason; +} SYSTEM_THREADS_INFORMATION, *PSYSTEM_THREADS_INFORMATION; + +// SystemProcessesAndThreadsInformation +typedef struct _SYSTEM_PROCESSES_INFORMATION { + ULONG NextEntryDelta; + ULONG ThreadCount; + ULONG Reserved1[6]; + LARGE_INTEGER CreateTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER KernelTime; + UNICODE_STRING ProcessName; + KPRIORITY BasePriority; + ULONG ProcessId; + ULONG InheritedFromProcessId; + ULONG HandleCount; + ULONG Reserved2[2]; + VM_COUNTERS VmCounters; +#if (VER_PRODUCTBUILD >= 2195) + IO_COUNTERS IoCounters; +#endif // (VER_PRODUCTBUILD >= 2195) + SYSTEM_THREADS_INFORMATION Threads[1]; +} SYSTEM_PROCESSES_INFORMATION, *PSYSTEM_PROCESSES_INFORMATION; + +// SystemCallCounts +typedef struct _SYSTEM_CALL_COUNTS { + ULONG Size; + ULONG NumberOfDescriptorTables; + ULONG NumberOfRoutinesInTable[1]; + // On checked build this is followed by a ULONG CallCounts[1] variable length array. +} SYSTEM_CALL_COUNTS, *PSYSTEM_CALL_COUNTS; + +// SystemConfigurationInformation +typedef struct _SYSTEM_CONFIGURATION_INFORMATION { + ULONG DiskCount; + ULONG FloppyCount; + ULONG CdRomCount; + ULONG TapeCount; + ULONG SerialCount; + ULONG ParallelCount; +} SYSTEM_CONFIGURATION_INFORMATION, *PSYSTEM_CONFIGURATION_INFORMATION; + +// SystemProcessorTimes +typedef struct _SYSTEM_PROCESSOR_TIMES { + LARGE_INTEGER IdleTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; + LARGE_INTEGER DpcTime; + LARGE_INTEGER InterruptTime; + ULONG InterruptCount; +} SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES; + +// SystemGlobalFlag +typedef struct _SYSTEM_GLOBAL_FLAG { + ULONG GlobalFlag; +} SYSTEM_GLOBAL_FLAG, *PSYSTEM_GLOBAL_FLAG; + +// SystemModuleInformation +typedef struct _SYSTEM_MODULE_INFORMATION { + ULONG Reserved[2]; + PVOID Base; + ULONG Size; + ULONG Flags; + USHORT Index; + USHORT Unknown; + USHORT LoadCount; + USHORT ModuleNameOffset; + CHAR ImageName[256]; +} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION; + +// SystemLockInformation +typedef struct _SYSTEM_LOCK_INFORMATION { + PVOID Address; + USHORT Type; + USHORT Reserved1; + ULONG ExclusiveOwnerThreadId; + ULONG ActiveCount; + ULONG ContentionCount; + ULONG Reserved2[2]; + ULONG NumberOfSharedWaiters; + ULONG NumberOfExclusiveWaiters; +} SYSTEM_LOCK_INFORMATION, *PSYSTEM_LOCK_INFORMATION; + +// SystemHandleInformation +typedef struct _SYSTEM_HANDLE_INFORMATION { + ULONG ProcessId; + UCHAR ObjectTypeNumber; + UCHAR Flags; + USHORT Handle; + PVOID Object; + ACCESS_MASK GrantedAccess; +} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION; + +// SystemObjectInformation +typedef struct _SYSTEM_OBJECT_TYPE_INFORMATION { + ULONG NextEntryOffset; + ULONG ObjectCount; + ULONG HandleCount; + ULONG TypeNumber; + ULONG InvalidAttributes; + GENERIC_MAPPING GenericMapping; + ACCESS_MASK ValidAccessMask; + POOL_TYPE PoolType; + UCHAR Unknown; + UNICODE_STRING Name; +} SYSTEM_OBJECT_TYPE_INFORMATION, *PSYSTEM_OBJECT_TYPE_INFORMATION; + +typedef struct _SYSTEM_OBJECT_INFORMATION { + ULONG NextEntryOffset; + PVOID Object; + ULONG CreatorProcessId; + USHORT Unknown; + USHORT Flags; + ULONG PointerCount; + ULONG HandleCount; + ULONG PagedPoolUsage; + ULONG NonPagedPoolUsage; + ULONG ExclusiveProcessId; + PSECURITY_DESCRIPTOR SecurityDescriptor; + UNICODE_STRING Name; +} SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION; + +// SystemPagefileInformation +typedef struct _SYSTEM_PAGEFILE_INFORMATION { + ULONG NextEntryOffset; + ULONG CurrentSize; + ULONG TotalUsed; + ULONG PeakUsed; + UNICODE_STRING FileName; +} SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION; + +// SystemInstructionEmulationCounts +typedef struct _SYSTEM_INSTRUCTION_EMULATION_COUNTS { + ULONG GenericInvalidOpcode; + ULONG TwoByteOpcode; + ULONG ESprefix; + ULONG CSprefix; + ULONG SSprefix; + ULONG DSprefix; + ULONG FSPrefix; + ULONG GSprefix; + ULONG OPER32prefix; + ULONG ADDR32prefix; + ULONG INSB; + ULONG INSW; + ULONG OUTSB; + ULONG OUTSW; + ULONG PUSHFD; + ULONG POPFD; + ULONG INTnn; + ULONG INTO; + ULONG IRETD; + ULONG FloatingPointOpcode; + ULONG INBimm; + ULONG INWimm; + ULONG OUTBimm; + ULONG OUTWimm; + ULONG INB; + ULONG INW; + ULONG OUTB; + ULONG OUTW; + ULONG LOCKprefix; + ULONG REPNEprefix; + ULONG REPprefix; + ULONG CLI; + ULONG STI; + ULONG HLT; +} SYSTEM_INSTRUCTION_EMULATION_COUNTS, *PSYSTEM_INSTRUCTION_EMULATION_COUNTS; + +// SystemCacheInformation +typedef struct _SYSTEM_CACHE_INFORMATION { + ULONG SystemCacheWsSize; + ULONG SystemCacheWsPeakSize; + ULONG SystemCacheWsFaults; + ULONG SystemCacheWsMinimum; + ULONG SystemCacheWsMaximum; + ULONG TransitionSharedPages; + ULONG TransitionSharedPagesPeak; + ULONG Reserved[2]; +} SYSTEM_CACHE_INFORMATION, *PSYSTEM_CACHE_INFORMATION; + +// SystemPoolTagInformation +typedef struct _SYSTEM_POOL_TAG_INFORMATION { + CHAR Tag[4]; + ULONG PagedPoolAllocs; + ULONG PagedPoolFrees; + ULONG PagedPoolUsage; + ULONG NonPagedPoolAllocs; + ULONG NonPagedPoolFrees; + ULONG NonPagedPoolUsage; +} SYSTEM_POOL_TAG_INFORMATION, *PSYSTEM_POOL_TAG_INFORMATION; + +// SystemProcessorStatistics +typedef struct _SYSTEM_PROCESSOR_STATISTICS { + ULONG ContextSwitches; + ULONG DpcCount; + ULONG DpcRequestRate; + ULONG TimeIncrement; + ULONG DpcBypassCount; + ULONG ApcBypassCount; +} SYSTEM_PROCESSOR_STATISTICS, *PSYSTEM_PROCESSOR_STATISTICS; + +// SystemDpcInformation +typedef struct _SYSTEM_DPC_INFORMATION { + ULONG Reserved; + ULONG MaximumDpcQueueDepth; + ULONG MinimumDpcRate; + ULONG AdjustDpcThreshold; + ULONG IdealDpcRate; +} SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION; + +// SystemLoadImage +typedef struct _SYSTEM_LOAD_IMAGE { + UNICODE_STRING ModuleName; + PVOID ModuleBase; + PVOID Unknown; + PVOID EntryPoint; + PVOID ExportDirectory; +} SYSTEM_LOAD_IMAGE, *PSYSTEM_LOAD_IMAGE; + +// SystemUnloadImage +typedef struct _SYSTEM_UNLOAD_IMAGE { + PVOID ModuleBase; +} SYSTEM_UNLOAD_IMAGE, *PSYSTEM_UNLOAD_IMAGE; + +// SystemTimeAdjustment +typedef struct _SYSTEM_QUERY_TIME_ADJUSTMENT { + ULONG TimeAdjustment; + ULONG MaximumIncrement; + BOOLEAN TimeSynchronization; +} SYSTEM_QUERY_TIME_ADJUSTMENT, *PSYSTEM_QUERY_TIME_ADJUSTMENT; + +// SystemTimeAdjustment +typedef struct _SYSTEM_SET_TIME_ADJUSTMENT { + ULONG TimeAdjustment; + BOOLEAN TimeSynchronization; +} SYSTEM_SET_TIME_ADJUSTMENT, *PSYSTEM_SET_TIME_ADJUSTMENT; + +// SystemCrashDumpInformation +typedef struct _SYSTEM_CRASH_DUMP_INFORMATION { + HANDLE CrashDumpSectionHandle; +#if (VER_PRODUCTBUILD >= 2195) + HANDLE Unknown; +#endif // (VER_PRODUCTBUILD >= 2195) +} SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION; + +// SystemExceptionInformation +typedef struct _SYSTEM_EXCEPTION_INFORMATION { + ULONG AlignmentFixupCount; + ULONG ExceptionDispatchCount; + ULONG FloatingEmulationCount; + ULONG Reserved; +} SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION; + +// SystemCrashDumpStateInformation +typedef struct _SYSTEM_CRASH_DUMP_STATE_INFORMATION { + ULONG ValidCrashDump; +#if (VER_PRODUCTBUILD >= 2195) + ULONG Unknown; +#endif // (VER_PRODUCTBUILD >= 2195) +} SYSTEM_CRASH_DUMP_STATE_INFORMATION, *PSYSTEM_CRASH_DUMP_STATE_INFORMATION; + +// SystemKernelDebuggerInformation +typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION { + BOOLEAN DebuggerEnabled; + BOOLEAN DebuggerNotPresent; +} SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION; + +// SystemContextSwitchInformation +typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION { + ULONG ContextSwitches; + ULONG ContextSwitchCounters[11]; +} SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION; + +// SystemRegistryQuotaInformation +typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION { + ULONG RegistryQuota; + ULONG RegistryQuotaInUse; + ULONG PagedPoolSize; +} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION; + +// SystemLoadAndCallImage +typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE { + UNICODE_STRING ModuleName; +} SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE; + +// SystemPrioritySeparation +typedef struct _SYSTEM_PRIORITY_SEPARATION { + ULONG PrioritySeparation; +} SYSTEM_PRIORITY_SEPARATION, *PSYSTEM_PRIORITY_SEPARATION; + +// SystemTimeZoneInformation +typedef struct _SYSTEM_TIME_ZONE_INFORMATION { + LONG Bias; + WCHAR StandardName[32]; + TIME_FIELDS StandardDate; + LONG StandardBias; + WCHAR DaylightName[32]; + TIME_FIELDS DaylightDate; + LONG DaylightBias; +} SYSTEM_TIME_ZONE_INFORMATION, *PSYSTEM_TIME_ZONE_INFORMATION; + +// SystemLookasideInformation +typedef struct _SYSTEM_LOOKASIDE_INFORMATION { + USHORT Depth; + USHORT MaximumDepth; + ULONG TotalAllocates; + ULONG AllocateMisses; + ULONG TotalFrees; + ULONG FreeMisses; + POOL_TYPE Type; + ULONG Tag; + ULONG Size; +} SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION; + +// SystemSetTimeSlipEvent +typedef struct _SYSTEM_SET_TIME_SLIP_EVENT { + HANDLE TimeSlipEvent; +} SYSTEM_SET_TIME_SLIP_EVENT, *PSYSTEM_SET_TIME_SLIP_EVENT; + +// SystemCreateSession +typedef struct _SYSTEM_CREATE_SESSION { + ULONG Session; +} SYSTEM_CREATE_SESSION, *PSYSTEM_CREATE_SESSION; + +// SystemDeleteSession +typedef struct _SYSTEM_DELETE_SESSION { + ULONG Session; +} SYSTEM_DELETE_SESSION, *PSYSTEM_DELETE_SESSION; + +// SystemRangeStartInformation +typedef struct _SYSTEM_RANGE_START_INFORMATION { + PVOID SystemRangeStart; +} SYSTEM_RANGE_START_INFORMATION, *PSYSTEM_RANGE_START_INFORMATION; + +// SystemSessionProcessesInformation +typedef struct _SYSTEM_SESSION_PROCESS_INFORMATION { + ULONG SessionId; + ULONG BufferSize; + PVOID Buffer; +} SYSTEM_SESSION_PROCESS_INFORMATION, *PSYSTEM_SESSION_PROCESS_INFORMATION; + +typedef struct _TEB { + NT_TIB Tib; + PVOID EnvironmentPointer; + CLIENT_ID ClientId; + HANDLE RpcHandle; + PVOID *ThreadLocalStorage; + PVOID Peb; + ULONG LastErrorValue; +} TEB, *PTEB; + +typedef struct _TERMINATION_PORT { + struct _TERMINATION_PORT* Next; + PVOID Port; +} TERMINATION_PORT, *PTERMINATION_PORT; + +typedef struct _TOKEN_SOURCE { + CCHAR SourceName[TOKEN_SOURCE_LENGTH]; + LUID SourceIdentifier; +} TOKEN_SOURCE, *PTOKEN_SOURCE; + +typedef struct _TOKEN_CONTROL { + LUID TokenId; + LUID AuthenticationId; + LUID ModifiedId; + TOKEN_SOURCE TokenSource; +} TOKEN_CONTROL, *PTOKEN_CONTROL; + +typedef struct _TOKEN_DEFAULT_DACL { + PACL DefaultDacl; +} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL; + +typedef struct _TOKEN_GROUPS { + ULONG GroupCount; + SID_AND_ATTRIBUTES Groups[1]; +} TOKEN_GROUPS, *PTOKEN_GROUPS; + +typedef struct _TOKEN_OWNER { + PSID Owner; +} TOKEN_OWNER, *PTOKEN_OWNER; + +typedef struct _TOKEN_PRIMARY_GROUP { + PSID PrimaryGroup; +} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; + +typedef struct _TOKEN_PRIVILEGES { + ULONG PrivilegeCount; + LUID_AND_ATTRIBUTES Privileges[1]; +} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; + +typedef struct _TOKEN_STATISTICS { + LUID TokenId; + LUID AuthenticationId; + LARGE_INTEGER ExpirationTime; + TOKEN_TYPE TokenType; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + ULONG DynamicCharged; + ULONG DynamicAvailable; + ULONG GroupCount; + ULONG PrivilegeCount; + LUID ModifiedId; +} TOKEN_STATISTICS, *PTOKEN_STATISTICS; + +typedef struct _TOKEN_USER { + SID_AND_ATTRIBUTES User; +} TOKEN_USER, *PTOKEN_USER; + +typedef struct _SECURITY_CLIENT_CONTEXT { + SECURITY_QUALITY_OF_SERVICE SecurityQos; + PACCESS_TOKEN ClientToken; + BOOLEAN DirectlyAccessClientToken; + BOOLEAN DirectAccessEffectiveOnly; + BOOLEAN ServerIsRemote; + TOKEN_CONTROL ClientTokenControl; +} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT; + +typedef struct _TUNNEL { + FAST_MUTEX Mutex; + PRTL_SPLAY_LINKS Cache; + LIST_ENTRY TimerQueue; + USHORT NumEntries; +} TUNNEL, *PTUNNEL; + +typedef struct _VACB { + PVOID BaseAddress; + PSHARED_CACHE_MAP SharedCacheMap; + union { + LARGE_INTEGER FileOffset; + USHORT ActiveCount; + } Overlay; + LIST_ENTRY LruList; +} VACB, *PVACB; + +typedef struct _VAD_HEADER { + PVOID StartVPN; + PVOID EndVPN; + PVAD_HEADER ParentLink; + PVAD_HEADER LeftLink; + PVAD_HEADER RightLink; + ULONG Flags; // LSB = CommitCharge + PVOID ControlArea; + PVOID FirstProtoPte; + PVOID LastPTE; + ULONG Unknown; + LIST_ENTRY Secured; +} VAD_HEADER, *PVAD_HEADER; + +NTKERNELAPI +BOOLEAN +CcCanIWrite ( + IN PFILE_OBJECT FileObject, + IN ULONG BytesToWrite, + IN BOOLEAN Wait, + IN BOOLEAN Retrying +); + +NTKERNELAPI +BOOLEAN +CcCopyRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +BOOLEAN +CcCopyWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN PVOID Buffer +); + +#define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000) + +typedef VOID (*PCC_POST_DEFERRED_WRITE) ( + IN PVOID Context1, + IN PVOID Context2 +); + +NTKERNELAPI +VOID +CcDeferWrite ( + IN PFILE_OBJECT FileObject, + IN PCC_POST_DEFERRED_WRITE PostRoutine, + IN PVOID Context1, + IN PVOID Context2, + IN ULONG BytesToWrite, + IN BOOLEAN Retrying +); + +NTKERNELAPI +VOID +CcFastCopyRead ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN ULONG PageCount, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +VOID +CcFastCopyWrite ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN PVOID Buffer +); + +NTKERNELAPI +VOID +CcFlushCache ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + OUT PIO_STATUS_BLOCK IoStatus OPTIONAL +); + +typedef VOID (*PDIRTY_PAGE_ROUTINE) ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN PLARGE_INTEGER OldestLsn, + IN PLARGE_INTEGER NewestLsn, + IN PVOID Context1, + IN PVOID Context2 +); + +NTKERNELAPI +LARGE_INTEGER +CcGetDirtyPages ( + IN PVOID LogHandle, + IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, + IN PVOID Context1, + IN PVOID Context2 +); + +NTKERNELAPI +PFILE_OBJECT +CcGetFileObjectFromBcb ( + IN PVOID Bcb +); + +NTKERNELAPI +PFILE_OBJECT +CcGetFileObjectFromSectionPtrs ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer +); + +#define CcGetFileSizePointer(FO) ( \ + ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \ +) + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +LARGE_INTEGER +CcGetFlushedValidData ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN BOOLEAN BcbListHeld +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +LARGE_INTEGER +CcGetLsnForFileObject ( + IN PFILE_OBJECT FileObject, + OUT PLARGE_INTEGER OldestLsn OPTIONAL +); + +typedef BOOLEAN (*PACQUIRE_FOR_LAZY_WRITE) ( + IN PVOID Context, + IN BOOLEAN Wait +); + +typedef VOID (*PRELEASE_FROM_LAZY_WRITE) ( + IN PVOID Context +); + +typedef BOOLEAN (*PACQUIRE_FOR_READ_AHEAD) ( + IN PVOID Context, + IN BOOLEAN Wait +); + +typedef VOID (*PRELEASE_FROM_READ_AHEAD) ( + IN PVOID Context +); + +typedef struct _CACHE_MANAGER_CALLBACKS { + PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite; + PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite; + PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead; + PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead; +} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS; + +NTKERNELAPI +VOID +CcInitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes, + IN BOOLEAN PinAccess, + IN PCACHE_MANAGER_CALLBACKS Callbacks, + IN PVOID LazyWriteContext +); + +#define CcIsFileCached(FO) ( \ + ((FO)->SectionObjectPointer != NULL) && \ + (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \ +) + +NTKERNELAPI +BOOLEAN +CcIsThereDirtyData ( + IN PVPB Vpb +); + +NTKERNELAPI +BOOLEAN +CcMapData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, +#if (VER_PRODUCTBUILD >= 2600) + IN ULONG Flags, +#else + IN BOOLEAN Wait, +#endif + OUT PVOID *Bcb, + OUT PVOID *Buffer +); + +NTKERNELAPI +VOID +CcMdlRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +VOID +CcMdlReadComplete ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +VOID +CcMdlWriteAbort ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain +); + +#endif + +NTKERNELAPI +VOID +CcMdlWriteComplete ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain +); + +NTKERNELAPI +BOOLEAN +CcPinMappedData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, +#if (VER_PRODUCTBUILD >= 2195) + IN ULONG Flags, +#else + IN BOOLEAN Wait, +#endif + IN OUT PVOID *Bcb +); + +NTKERNELAPI +BOOLEAN +CcPinRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, +#if (VER_PRODUCTBUILD >= 2195) + IN ULONG Flags, +#else + IN BOOLEAN Wait, +#endif + OUT PVOID *Bcb, + OUT PVOID *Buffer +); + +NTKERNELAPI +VOID +CcPrepareMdlWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus +); + +NTKERNELAPI +BOOLEAN +CcPreparePinWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Zero, +#if (VER_PRODUCTBUILD >= 2195) + IN ULONG Flags, +#else + IN BOOLEAN Wait, +#endif + OUT PVOID *Bcb, + OUT PVOID *Buffer +); + +NTKERNELAPI +BOOLEAN +CcPurgeCacheSection ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + IN BOOLEAN UninitializeCacheMaps +); + +#define CcReadAhead(FO, FOFF, LEN) ( \ + if ((LEN) >= 256) { \ + CcScheduleReadAhead((FO), (FOFF), (LEN)); \ + } \ +) + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PVOID +CcRemapBcb ( + IN PVOID Bcb +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +CcRepinBcb ( + IN PVOID Bcb +); + +NTKERNELAPI +VOID +CcScheduleReadAhead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length +); + +NTKERNELAPI +VOID +CcSetAdditionalCacheAttributes ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN DisableReadAhead, + IN BOOLEAN DisableWriteBehind +); + +NTKERNELAPI +VOID +CcSetBcbOwnerPointer ( + IN PVOID Bcb, + IN PVOID OwnerPointer +); + +NTKERNELAPI +VOID +CcSetDirtyPageThreshold ( + IN PFILE_OBJECT FileObject, + IN ULONG DirtyPageThreshold +); + +NTKERNELAPI +VOID +CcSetDirtyPinnedData ( + IN PVOID BcbVoid, + IN PLARGE_INTEGER Lsn OPTIONAL +); + +NTKERNELAPI +VOID +CcSetFileSizes ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes +); + +typedef VOID (*PFLUSH_TO_LSN) ( + IN PVOID LogHandle, + IN PLARGE_INTEGER Lsn +); + +NTKERNELAPI +VOID +CcSetLogHandleForFile ( + IN PFILE_OBJECT FileObject, + IN PVOID LogHandle, + IN PFLUSH_TO_LSN FlushToLsnRoutine +); + +NTKERNELAPI +VOID +CcSetReadAheadGranularity ( + IN PFILE_OBJECT FileObject, + IN ULONG Granularity // default: PAGE_SIZE + // allowed: 2^n * PAGE_SIZE +); + +NTKERNELAPI +BOOLEAN +CcUninitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER TruncateSize OPTIONAL, + IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL +); + +NTKERNELAPI +VOID +CcUnpinData ( + IN PVOID Bcb +); + +NTKERNELAPI +VOID +CcUnpinDataForThread ( + IN PVOID Bcb, + IN ERESOURCE_THREAD ResourceThreadId +); + +NTKERNELAPI +VOID +CcUnpinRepinnedBcb ( + IN PVOID Bcb, + IN BOOLEAN WriteThrough, + OUT PIO_STATUS_BLOCK IoStatus +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +CcWaitForCurrentLazyWriterActivity ( + VOID +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +CcZeroData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER StartOffset, + IN PLARGE_INTEGER EndOffset, + IN BOOLEAN Wait +); + +NTKERNELAPI +VOID +ExDisableResourceBoostLite ( + IN PERESOURCE Resource +); + +NTKERNELAPI +ULONG +ExQueryPoolBlockSize ( + IN PVOID PoolBlock, + OUT PBOOLEAN QuotaCharged +); + +#define FlagOn(x, f) ((x) & (f)) + +NTKERNELAPI +BOOLEAN +FsRtlAddLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Lbn, + IN LONGLONG SectorCount +); + +NTKERNELAPI +BOOLEAN +FsRtlAddMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + IN LBN Lbn, + IN ULONG SectorCount +); + +NTKERNELAPI +VOID +FsRtlAddToTunnelCache ( + IN PTUNNEL Cache, + IN ULONGLONG DirectoryKey, + IN PUNICODE_STRING ShortName, + IN PUNICODE_STRING LongName, + IN BOOLEAN KeyByShortName, + IN ULONG DataLength, + IN PVOID Data +); + +#if (VER_PRODUCTBUILD >= 2195) + +PFILE_LOCK +FsRtlAllocateFileLock ( + IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, + IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PVOID +FsRtlAllocatePool ( + IN POOL_TYPE PoolType, + IN ULONG NumberOfBytes +); + +NTKERNELAPI +PVOID +FsRtlAllocatePoolWithQuota ( + IN POOL_TYPE PoolType, + IN ULONG NumberOfBytes +); + +NTKERNELAPI +PVOID +FsRtlAllocatePoolWithQuotaTag ( + IN POOL_TYPE PoolType, + IN ULONG NumberOfBytes, + IN ULONG Tag +); + +NTKERNELAPI +PVOID +FsRtlAllocatePoolWithTag ( + IN POOL_TYPE PoolType, + IN ULONG NumberOfBytes, + IN ULONG Tag +); + +NTKERNELAPI +PVOID +FsRtlAllocateResource ( + VOID +); + +NTKERNELAPI +BOOLEAN +FsRtlAreNamesEqual ( + IN PUNICODE_STRING Name1, + IN PUNICODE_STRING Name2, + IN BOOLEAN IgnoreCase, + IN PWCHAR UpcaseTable OPTIONAL +); + +#define FsRtlAreThereCurrentFileLocks(FL) ( \ + ((FL)->FastIoIsQuestionable) \ +) + +/* + FsRtlCheckLockForReadAccess: + + All this really does is pick out the lock parameters from the irp (io stack + location?), get IoGetRequestorProcess, and pass values on to + FsRtlFastCheckLockForRead. +*/ +NTKERNELAPI +BOOLEAN +FsRtlCheckLockForReadAccess ( + IN PFILE_LOCK FileLock, + IN PIRP Irp +); + +/* + FsRtlCheckLockForWriteAccess: + + All this really does is pick out the lock parameters from the irp (io stack + location?), get IoGetRequestorProcess, and pass values on to + FsRtlFastCheckLockForWrite. +*/ +NTKERNELAPI +BOOLEAN +FsRtlCheckLockForWriteAccess ( + IN PFILE_LOCK FileLock, + IN PIRP Irp +); + +NTKERNELAPI +VOID +FsRtlDissectName ( + IN UNICODE_STRING Path, + OUT PUNICODE_STRING FirstName, + OUT PUNICODE_STRING RemainingName + ); + +typedef +VOID +(*POPLOCK_WAIT_COMPLETE_ROUTINE) ( + IN PVOID Context, + IN PIRP Irp +); + +typedef +VOID +(*POPLOCK_FS_PREPOST_IRP) ( + IN PVOID Context, + IN PIRP Irp +); + +NTKERNELAPI +NTSTATUS +FsRtlCheckOplock ( + IN POPLOCK Oplock, + IN PIRP Irp, + IN PVOID Context, + IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, + IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL +); + +NTKERNELAPI +BOOLEAN +FsRtlCopyRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject +); + +NTKERNELAPI +BOOLEAN +FsRtlCopyWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject +); + +NTKERNELAPI +BOOLEAN +FsRtlCurrentBatchOplock ( + IN POPLOCK Oplock +); + +NTKERNELAPI +VOID +FsRtlDeleteKeyFromTunnelCache ( + IN PTUNNEL Cache, + IN ULONGLONG DirectoryKey +); + +NTKERNELAPI +VOID +FsRtlDeleteTunnelCache ( + IN PTUNNEL Cache +); + +NTKERNELAPI +VOID +FsRtlDeregisterUncProvider ( + IN HANDLE Handle +); + +NTKERNELAPI +BOOLEAN +FsRtlDoesNameContainWildCards ( + IN PUNICODE_STRING Name +); + +#define FsRtlEnterFileSystem KeEnterCriticalRegion + +#define FsRtlExitFileSystem KeLeaveCriticalRegion + +NTKERNELAPI +BOOLEAN +FsRtlFastCheckLockForRead ( + IN PFILE_LOCK FileLock, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN ULONG Key, + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process +); + +NTKERNELAPI +BOOLEAN +FsRtlFastCheckLockForWrite ( + IN PFILE_LOCK FileLock, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN ULONG Key, + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process +); + +#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) ( \ + FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11) \ +) + +NTKERNELAPI +NTSTATUS +FsRtlFastUnlockAll ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process, + IN PVOID Context OPTIONAL +); +//ret: STATUS_RANGE_NOT_LOCKED + +NTKERNELAPI +NTSTATUS +FsRtlFastUnlockAllByKey ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process, + IN ULONG Key, + IN PVOID Context OPTIONAL +); +//ret: STATUS_RANGE_NOT_LOCKED + +NTKERNELAPI +NTSTATUS +FsRtlFastUnlockSingle ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS Process, + IN ULONG Key, + IN PVOID Context OPTIONAL, + IN BOOLEAN AlreadySynchronized +); +//ret: STATUS_RANGE_NOT_LOCKED + +NTKERNELAPI +BOOLEAN +FsRtlFindInTunnelCache ( + IN PTUNNEL Cache, + IN ULONGLONG DirectoryKey, + IN PUNICODE_STRING Name, + OUT PUNICODE_STRING ShortName, + OUT PUNICODE_STRING LongName, + IN OUT PULONG DataLength, + OUT PVOID Data +); + +#if (VER_PRODUCTBUILD >= 2195) + +VOID +FsRtlFreeFileLock ( + IN PFILE_LOCK FileLock +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +FsRtlGetFileSize ( + IN PFILE_OBJECT FileObject, + IN OUT PLARGE_INTEGER FileSize +); + +/* + FsRtlGetNextFileLock: + + ret: NULL if no more locks + + Internals: + FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and + FileLock->LastReturnedLock as storage. + LastReturnedLock is a pointer to the 'raw' lock inkl. double linked + list, and FsRtlGetNextFileLock needs this to get next lock on subsequent + calls with Restart = FALSE. +*/ +NTKERNELAPI +PFILE_LOCK_INFO +FsRtlGetNextFileLock ( + IN PFILE_LOCK FileLock, + IN BOOLEAN Restart +); + +NTKERNELAPI +BOOLEAN +FsRtlGetNextLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount +); + +NTKERNELAPI +BOOLEAN +FsRtlGetNextMcbEntry ( + IN PMCB Mcb, + IN ULONG RunIndex, + OUT PVBN Vbn, + OUT PLBN Lbn, + OUT PULONG SectorCount +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +VOID +FsRtlIncrementCcFastReadNotPossible ( + VOID +); + +NTKERNELAPI +VOID +FsRtlIncrementCcFastReadNoWait ( + VOID +); + +NTKERNELAPI +VOID +FsRtlIncrementCcFastReadResourceMiss ( + VOID +); + +NTKERNELAPI +VOID +FsRtlIncrementCcFastReadWait ( + VOID +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +VOID +FsRtlInitializeFileLock ( + IN PFILE_LOCK FileLock, + IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, + IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL +); + +NTKERNELAPI +VOID +FsRtlInitializeLargeMcb ( + IN PLARGE_MCB Mcb, + IN POOL_TYPE PoolType +); + +NTKERNELAPI +VOID +FsRtlInitializeMcb ( + IN PMCB Mcb, + IN POOL_TYPE PoolType +); + +NTKERNELAPI +VOID +FsRtlInitializeOplock ( + IN OUT POPLOCK Oplock +); + +NTKERNELAPI +VOID +FsRtlInitializeTunnelCache ( + IN PTUNNEL Cache +); + +NTKERNELAPI +BOOLEAN +FsRtlIsNameInExpression ( + IN PUNICODE_STRING Expression, + IN PUNICODE_STRING Name, + IN BOOLEAN IgnoreCase, + IN PWCHAR UpcaseTable OPTIONAL +); + +NTKERNELAPI +BOOLEAN +FsRtlIsNtstatusExpected ( + IN NTSTATUS Ntstatus +); + +#define FsRtlIsUnicodeCharacterWild(C) ( \ + (((C) >= 0x40) ? \ + FALSE : \ + FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \ +) + +NTKERNELAPI +BOOLEAN +FsRtlLookupLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL +); + +NTKERNELAPI +BOOLEAN +FsRtlLookupLastLargeMcbEntry ( + IN PLARGE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +FsRtlLookupLastLargeMcbEntryAndIndex ( + IN PLARGE_MCB OpaqueMcb, + OUT PLONGLONG LargeVbn, + OUT PLONGLONG LargeLbn, + OUT PULONG Index +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +FsRtlLookupLastMcbEntry ( + IN PMCB Mcb, + OUT PVBN Vbn, + OUT PLBN Lbn +); + +NTKERNELAPI +BOOLEAN +FsRtlLookupMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + OUT PLBN Lbn, + OUT PULONG SectorCount OPTIONAL, + OUT PULONG Index +); + +NTKERNELAPI +BOOLEAN +FsRtlMdlReadComplete ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain +); + +NTKERNELAPI +BOOLEAN +FsRtlMdlReadCompleteDev ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain, + IN PDEVICE_OBJECT DeviceObject +); + +NTKERNELAPI +BOOLEAN +FsRtlMdlWriteComplete ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain +); + +NTKERNELAPI +BOOLEAN +FsRtlMdlWriteCompleteDev ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain, + IN PDEVICE_OBJECT DeviceObject +); + +NTKERNELAPI +NTSTATUS +FsRtlNormalizeNtstatus ( + IN NTSTATUS Exception, + IN NTSTATUS GenericException +); + +NTKERNELAPI +VOID +FsRtlNotifyChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN PLIST_ENTRY NotifyList, + IN BOOLEAN WatchTree, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp +); + +NTKERNELAPI +VOID +FsRtlNotifyCleanup ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext +); + +typedef BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) ( + IN PVOID NotifyContext, + IN PVOID TargetContext, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +#if (VER_PRODUCTBUILD >= 2600) + +typedef BOOLEAN (*PFILTER_REPORT_CHANGE) ( + IN PVOID NotifyContext, + IN PVOID FilterContext +); + +NTKERNELAPI +VOID +FsRtlNotifyFilterChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN BOOLEAN WatchTree, + IN BOOLEAN IgnoreBuffer, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp, + IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL, + IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL +); + +NTKERNELAPI +VOID +FsRtlNotifyFilterReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN USHORT TargetNameOffset, + IN PSTRING StreamName OPTIONAL, + IN PSTRING NormalizedParentName OPTIONAL, + IN ULONG FilterMatch, + IN ULONG Action, + IN PVOID TargetContext, + IN PVOID FilterContext +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +VOID +FsRtlNotifyFullChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN BOOLEAN WatchTree, + IN BOOLEAN IgnoreBuffer, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp, + IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL +); + +NTKERNELAPI +VOID +FsRtlNotifyFullReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN USHORT TargetNameOffset, + IN PSTRING StreamName OPTIONAL, + IN PSTRING NormalizedParentName OPTIONAL, + IN ULONG FilterMatch, + IN ULONG Action, + IN PVOID TargetContext +); + +NTKERNELAPI +VOID +FsRtlNotifyInitializeSync ( + IN PNOTIFY_SYNC *NotifySync +); + +NTKERNELAPI +VOID +FsRtlNotifyReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN PUSHORT FileNamePartLength, + IN ULONG FilterMatch +); + +NTKERNELAPI +VOID +FsRtlNotifyUninitializeSync ( + IN PNOTIFY_SYNC *NotifySync +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +FsRtlNotifyVolumeEvent ( + IN PFILE_OBJECT FileObject, + IN ULONG EventCode +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +ULONG +FsRtlNumberOfRunsInLargeMcb ( + IN PLARGE_MCB Mcb +); + +NTKERNELAPI +ULONG +FsRtlNumberOfRunsInMcb ( + IN PMCB Mcb +); + +NTKERNELAPI +NTSTATUS +FsRtlOplockFsctrl ( + IN POPLOCK Oplock, + IN PIRP Irp, + IN ULONG OpenCount +); + +NTKERNELAPI +BOOLEAN +FsRtlOplockIsFastIoPossible ( + IN POPLOCK Oplock +); + +/* + FsRtlPrivateLock: + + ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED + + Internals: + -Calls IoCompleteRequest if Irp + -Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES +*/ +NTKERNELAPI +BOOLEAN +FsRtlPrivateLock ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS Process, + IN ULONG Key, + IN BOOLEAN FailImmediately, + IN BOOLEAN ExclusiveLock, + OUT PIO_STATUS_BLOCK IoStatus, + IN PIRP Irp OPTIONAL, + IN PVOID Context, + IN BOOLEAN AlreadySynchronized +); + +/* + FsRtlProcessFileLock: + + ret: + -STATUS_INVALID_DEVICE_REQUEST + -STATUS_RANGE_NOT_LOCKED from unlock routines. + -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock + (redirected IoStatus->Status). + + Internals: + -switch ( Irp->CurrentStackLocation->MinorFunction ) + lock: return FsRtlPrivateLock; + unlocksingle: return FsRtlFastUnlockSingle; + unlockall: return FsRtlFastUnlockAll; + unlockallbykey: return FsRtlFastUnlockAllByKey; + default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST; + return STATUS_INVALID_DEVICE_REQUEST; + + -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines. + -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock. +*/ +NTKERNELAPI +NTSTATUS +FsRtlProcessFileLock ( + IN PFILE_LOCK FileLock, + IN PIRP Irp, + IN PVOID Context OPTIONAL +); + +NTKERNELAPI +NTSTATUS +FsRtlRegisterUncProvider ( + IN OUT PHANDLE MupHandle, + IN PUNICODE_STRING RedirectorDeviceName, + IN BOOLEAN MailslotsSupported +); + +NTKERNELAPI +VOID +FsRtlRemoveLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount +); + +NTKERNELAPI +VOID +FsRtlRemoveMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + IN ULONG SectorCount +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +FsRtlResetLargeMcb ( + IN PLARGE_MCB Mcb, + IN BOOLEAN SelfSynchronized +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +FsRtlSplitLargeMcb ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount +); + +NTKERNELAPI +VOID +FsRtlTruncateLargeMcb ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn +); + +NTKERNELAPI +VOID +FsRtlTruncateMcb ( + IN PMCB Mcb, + IN VBN Vbn +); + +NTKERNELAPI +VOID +FsRtlUninitializeFileLock ( + IN PFILE_LOCK FileLock +); + +NTKERNELAPI +VOID +FsRtlUninitializeLargeMcb ( + IN PLARGE_MCB Mcb +); + +NTKERNELAPI +VOID +FsRtlUninitializeMcb ( + IN PMCB Mcb +); + +NTKERNELAPI +VOID +FsRtlUninitializeOplock ( + IN OUT POPLOCK Oplock +); + +// +// If using HalDisplayString during boot on Windows 2000 or later you must +// first call InbvEnableDisplayString. +// +NTSYSAPI +VOID +NTAPI +HalDisplayString ( + IN PCHAR String +); + +NTSYSAPI +VOID +NTAPI +HalQueryRealTimeClock ( + IN OUT PTIME_FIELDS TimeFields +); + +NTSYSAPI +VOID +NTAPI +HalSetRealTimeClock ( + IN PTIME_FIELDS TimeFields +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +InbvAcquireDisplayOwnership ( + VOID +); + +NTKERNELAPI +BOOLEAN +InbvCheckDisplayOwnership ( + VOID +); + +NTKERNELAPI +BOOLEAN +InbvDisplayString ( + IN PCHAR String +); + +NTKERNELAPI +VOID +InbvEnableBootDriver ( + IN BOOLEAN Enable +); + +NTKERNELAPI +BOOLEAN +InbvEnableDisplayString ( + IN BOOLEAN Enable +); + +NTKERNELAPI +VOID +InbvInstallDisplayStringFilter ( + IN PVOID Unknown +); + +NTKERNELAPI +BOOLEAN +InbvIsBootDriverInstalled ( + VOID +); + +NTKERNELAPI +VOID +InbvNotifyDisplayOwnershipLost ( + IN PVOID Callback +); + +NTKERNELAPI +BOOLEAN +InbvResetDisplay ( + VOID +); + +NTKERNELAPI +VOID +InbvSetScrollRegion ( + IN ULONG Left, + IN ULONG Top, + IN ULONG Width, + IN ULONG Height +); + +NTKERNELAPI +VOID +InbvSetTextColor ( + IN ULONG Color +); + +NTKERNELAPI +VOID +InbvSolidColorFill ( + IN ULONG Left, + IN ULONG Top, + IN ULONG Width, + IN ULONG Height, + IN ULONG Color +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +#define InitializeMessageHeader(m, l, t) { \ + (m)->Length = (USHORT)(l); \ + (m)->DataLength = (USHORT)(l - sizeof( LPC_MESSAGE )); \ + (m)->MessageType = (USHORT)(t); \ + (m)->DataInfoOffset = 0; \ +} + +NTKERNELAPI +VOID +IoAcquireVpbSpinLock ( + OUT PKIRQL Irql +); + +NTKERNELAPI +NTSTATUS +IoCheckDesiredAccess ( + IN OUT PACCESS_MASK DesiredAccess, + IN ACCESS_MASK GrantedAccess +); + +NTKERNELAPI +NTSTATUS +IoCheckEaBufferValidity ( + IN PFILE_FULL_EA_INFORMATION EaBuffer, + IN ULONG EaLength, + OUT PULONG ErrorOffset +); + +NTKERNELAPI +NTSTATUS +IoCheckFunctionAccess ( + IN ACCESS_MASK GrantedAccess, + IN UCHAR MajorFunction, + IN UCHAR MinorFunction, + IN ULONG IoControlCode, + IN PFILE_INFORMATION_CLASS FileInformationClass OPTIONAL, + IN PFS_INFORMATION_CLASS FsInformationClass OPTIONAL +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +IoCheckQuotaBufferValidity ( + IN PFILE_QUOTA_INFORMATION QuotaBuffer, + IN ULONG QuotaLength, + OUT PULONG ErrorOffset +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PFILE_OBJECT +IoCreateStreamFileObject ( + IN PFILE_OBJECT FileObject OPTIONAL, + IN PDEVICE_OBJECT DeviceObject OPTIONAL +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PFILE_OBJECT +IoCreateStreamFileObjectLite ( + IN PFILE_OBJECT FileObject OPTIONAL, + IN PDEVICE_OBJECT DeviceObject OPTIONAL +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +IoFastQueryNetworkAttributes ( + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ACCESS_MASK DesiredAccess, + IN ULONG OpenOptions, + OUT PIO_STATUS_BLOCK IoStatus, + OUT PFILE_NETWORK_OPEN_INFORMATION Buffer +); + +NTKERNELAPI +PDEVICE_OBJECT +IoGetAttachedDevice ( + IN PDEVICE_OBJECT DeviceObject +); + +NTKERNELAPI +PDEVICE_OBJECT +IoGetBaseFileSystemDeviceObject ( + IN PFILE_OBJECT FileObject +); + +NTKERNELAPI +PEPROCESS +IoGetRequestorProcess ( + IN PIRP Irp +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +ULONG +IoGetRequestorProcessId ( + IN PIRP Irp +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PIRP +IoGetTopLevelIrp ( + VOID +); + +#define IoIsFileOpenedExclusively(FileObject) ( \ + (BOOLEAN) !( \ + (FileObject)->SharedRead || \ + (FileObject)->SharedWrite || \ + (FileObject)->SharedDelete \ + ) \ +) + +NTKERNELAPI +BOOLEAN +IoIsOperationSynchronous ( + IN PIRP Irp +); + +NTKERNELAPI +BOOLEAN +IoIsSystemThread ( + IN PETHREAD Thread +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +IoIsValidNameGraftingBuffer ( + IN PIRP Irp, + IN PREPARSE_DATA_BUFFER ReparseBuffer +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +IoPageRead ( + IN PFILE_OBJECT FileObject, + IN PMDL Mdl, + IN PLARGE_INTEGER Offset, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock +); + +NTKERNELAPI +NTSTATUS +IoQueryFileInformation ( + IN PFILE_OBJECT FileObject, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN ULONG Length, + OUT PVOID FileInformation, + OUT PULONG ReturnedLength +); + +NTKERNELAPI +NTSTATUS +IoQueryVolumeInformation ( + IN PFILE_OBJECT FileObject, + IN FS_INFORMATION_CLASS FsInformationClass, + IN ULONG Length, + OUT PVOID FsInformation, + OUT PULONG ReturnedLength +); + +NTKERNELAPI +VOID +IoRegisterFileSystem ( + IN OUT PDEVICE_OBJECT DeviceObject +); + +#if (VER_PRODUCTBUILD >= 1381) + +typedef VOID (*PDRIVER_FS_NOTIFICATION) ( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN DriverActive +); + +NTKERNELAPI +NTSTATUS +IoRegisterFsRegistrationChange ( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine +); + +#endif // (VER_PRODUCTBUILD >= 1381) + +NTKERNELAPI +VOID +IoReleaseVpbSpinLock ( + IN KIRQL Irql +); + +NTKERNELAPI +VOID +IoSetDeviceToVerify ( + IN PETHREAD Thread, + IN PDEVICE_OBJECT DeviceObject +); + +NTKERNELAPI +NTSTATUS +IoSetInformation ( + IN PFILE_OBJECT FileObject, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN ULONG Length, + IN PVOID FileInformation +); + +NTKERNELAPI +VOID +IoSetTopLevelIrp ( + IN PIRP Irp +); + +NTKERNELAPI +NTSTATUS +IoSynchronousPageWrite ( + IN PFILE_OBJECT FileObject, + IN PMDL Mdl, + IN PLARGE_INTEGER FileOffset, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock +); + +NTKERNELAPI +PEPROCESS +IoThreadToProcess ( + IN PETHREAD Thread +); + +NTKERNELAPI +VOID +IoUnregisterFileSystem ( + IN OUT PDEVICE_OBJECT DeviceObject +); + +#if (VER_PRODUCTBUILD >= 1381) + +NTKERNELAPI +NTSTATUS +IoUnregisterFsRegistrationChange ( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine +); + +#endif // (VER_PRODUCTBUILD >= 1381) + +NTKERNELAPI +NTSTATUS +IoVerifyVolume ( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN AllowRawMount +); + +NTKERNELAPI +VOID +KeAttachProcess ( + IN PEPROCESS Process +); + +NTKERNELAPI +VOID +KeDetachProcess ( + VOID +); + +NTKERNELAPI +VOID +KeInitializeApc ( + PKAPC Apc, + PKTHREAD Thread, + UCHAR StateIndex, + PKKERNEL_ROUTINE KernelRoutine, + PKRUNDOWN_ROUTINE RundownRoutine, + PKNORMAL_ROUTINE NormalRoutine, + KPROCESSOR_MODE ApcMode, + PVOID NormalContext +); + +NTKERNELAPI +VOID +KeInitializeQueue ( + IN PRKQUEUE Queue, + IN ULONG Count OPTIONAL +); + +NTKERNELAPI +LONG +KeInsertHeadQueue ( + IN PRKQUEUE Queue, + IN PLIST_ENTRY Entry +); + +NTKERNELAPI +LONG +KeInsertQueue ( + IN PRKQUEUE Queue, + IN PLIST_ENTRY Entry +); + +NTKERNELAPI +VOID +KeInsertQueueApc ( + IN PKAPC Apc, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2, + UCHAR Unknown +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +BOOLEAN +KeIsAttachedProcess ( + VOID +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +BOOLEAN +KeIsExecutingDpc ( + VOID +); + +NTKERNELAPI +LONG +KeReadStateQueue ( + IN PRKQUEUE Queue +); + +NTKERNELAPI +PLIST_ENTRY +KeRemoveQueue ( + IN PRKQUEUE Queue, + IN KPROCESSOR_MODE WaitMode, + IN PLARGE_INTEGER Timeout OPTIONAL +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +KeRevertToUserAffinityThread ( + VOID +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +PLIST_ENTRY +KeRundownQueue ( + IN PRKQUEUE Queue +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +KeStackAttachProcess ( + IN PKPROCESS Process, + OUT PKAPC_STATE ApcState +); + +NTKERNELAPI +VOID +KeUnstackDetachProcess ( + IN PKAPC_STATE ApcState +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +KeUpdateSystemTime ( + VOID +); + +NTKERNELAPI +BOOLEAN +MmCanFileBeTruncated ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER NewFileSize +); + +NTKERNELAPI +NTSTATUS +MmCreateSection ( + OUT PVOID *SectionObject, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL, + IN PFILE_OBJECT FileObject OPTIONAL +); + +NTKERNELAPI +BOOLEAN +MmFlushImageSection ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN MMFLUSH_TYPE FlushType +); + +NTKERNELAPI +BOOLEAN +MmForceSectionClosed ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN BOOLEAN DelayClose +); + +#if (VER_PRODUCTBUILD >= 1381) + +NTKERNELAPI +BOOLEAN +MmIsRecursiveIoFault ( + VOID +); + +#else + +#define MmIsRecursiveIoFault() ( \ + (PsGetCurrentThread()->DisablePageFaultClustering) | \ + (PsGetCurrentThread()->ForwardClusterOnly) \ +) + +#endif + +NTKERNELAPI +NTSTATUS +MmMapViewOfSection ( + IN PVOID SectionObject, + IN PEPROCESS Process, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN ULONG CommitSize, + IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, + IN OUT PULONG ViewSize, + IN SECTION_INHERIT InheritDisposition, + IN ULONG AllocationType, + IN ULONG Protect +); + +NTKERNELAPI +BOOLEAN +MmSetAddressRangeModified ( + IN PVOID Address, + IN SIZE_T Length +); + +NTKERNELAPI +NTSTATUS +ObCreateObject ( + IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL, + IN POBJECT_TYPE ObjectType, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN KPROCESSOR_MODE AccessMode, + IN OUT PVOID ParseContext OPTIONAL, + IN ULONG ObjectSize, + IN ULONG PagedPoolCharge OPTIONAL, + IN ULONG NonPagedPoolCharge OPTIONAL, + OUT PVOID *Object +); + +NTKERNELAPI +ULONG +ObGetObjectPointerCount ( + IN PVOID Object +); + +NTKERNELAPI +NTSTATUS +ObInsertObject ( + IN PVOID Object, + IN PACCESS_STATE PassedAccessState OPTIONAL, + IN ACCESS_MASK DesiredAccess, + IN ULONG AdditionalReferences, + OUT PVOID *ReferencedObject OPTIONAL, + OUT PHANDLE Handle +); + +NTKERNELAPI +VOID +ObMakeTemporaryObject ( + IN PVOID Object +); + +NTKERNELAPI +NTSTATUS +ObOpenObjectByPointer ( + IN PVOID Object, + IN ULONG HandleAttributes, + IN PACCESS_STATE PassedAccessState OPTIONAL, + IN ACCESS_MASK DesiredAccess OPTIONAL, + IN POBJECT_TYPE ObjectType OPTIONAL, + IN KPROCESSOR_MODE AccessMode, + OUT PHANDLE Handle +); + +NTKERNELAPI +NTSTATUS +ObQueryNameString ( + IN PVOID Object, + OUT POBJECT_NAME_INFORMATION ObjectNameInfo, + IN ULONG Length, + OUT PULONG ReturnLength +); + +NTKERNELAPI +NTSTATUS +ObQueryObjectAuditingByHandle ( + IN HANDLE Handle, + OUT PBOOLEAN GenerateOnClose +); + +NTKERNELAPI +NTSTATUS +ObReferenceObjectByName ( + IN PUNICODE_STRING ObjectName, + IN ULONG Attributes, + IN PACCESS_STATE PassedAccessState OPTIONAL, + IN ACCESS_MASK DesiredAccess OPTIONAL, + IN POBJECT_TYPE ObjectType, + IN KPROCESSOR_MODE AccessMode, + IN OUT PVOID ParseContext OPTIONAL, + OUT PVOID *Object +); + +NTKERNELAPI +NTSTATUS +PsAssignImpersonationToken ( + IN PETHREAD Thread, + IN HANDLE Token +); + +NTKERNELAPI +VOID +PsChargePoolQuota ( + IN PEPROCESS Process, + IN POOL_TYPE PoolType, + IN ULONG Amount +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +NTSTATUS +PsChargeProcessNonPagedPoolQuota ( + IN PEPROCESS Process, + IN ULONG_PTR Amount +); + +NTKERNELAPI +NTSTATUS +PsChargeProcessPagedPoolQuota ( + IN PEPROCESS Process, + IN ULONG_PTR Amount +); + +NTKERNELAPI +NTSTATUS +PsChargeProcessPoolQuota ( + IN PEPROCESS Process, + IN POOL_TYPE PoolType, + IN ULONG_PTR Amount +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +VOID +PsDereferenceImpersonationToken ( + IN PACCESS_TOKEN ImpersonationToken +); + +NTKERNELAPI +VOID +PsDereferencePrimaryToken ( + IN PACCESS_TOKEN PrimaryToken +); + +#else + +#define PsDereferenceImpersonationToken(T) \ + {if (ARGUMENT_PRESENT(T)) { \ + (ObDereferenceObject((T))); \ + } else { \ + ; \ + } \ +} + +#define PsDereferencePrimaryToken(T) (ObDereferenceObject((T))) + +#endif + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +BOOLEAN +PsDisableImpersonation ( + IN PETHREAD Thread, + IN PSE_IMPERSONATION_STATE ImpersonationState +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +ULONG +PsGetCurrentProcessSessionId ( + VOID +); + +NTKERNELAPI +KPROCESSOR_MODE +PsGetCurrentThreadPreviousMode ( + VOID +); + +NTKERNELAPI +PVOID +PsGetCurrentThreadStackBase ( + VOID +); + +NTKERNELAPI +PVOID +PsGetCurrentThreadStackLimit ( + VOID +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +LARGE_INTEGER +PsGetProcessExitTime ( + VOID +); + +NTKERNELAPI +NTSTATUS +PsImpersonateClient ( + IN PETHREAD Thread, + IN PACCESS_TOKEN Token, + IN BOOLEAN CopyOnOpen, + IN BOOLEAN EffectiveOnly, + IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +BOOLEAN +PsIsSystemThread ( + IN PETHREAD Thread +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +NTKERNELAPI +BOOLEAN +PsIsThreadTerminating ( + IN PETHREAD Thread +); + +// +// PsLookupProcessByProcessId returns a referenced pointer to the process +// that should be dereferenced after use with a call to ObDereferenceObject. +// +NTKERNELAPI +NTSTATUS +PsLookupProcessByProcessId ( + IN PVOID ProcessId, + OUT PEPROCESS *Process +); + +NTKERNELAPI +NTSTATUS +PsLookupProcessThreadByCid ( + IN PCLIENT_ID Cid, + OUT PEPROCESS *Process OPTIONAL, + OUT PETHREAD *Thread +); + +NTKERNELAPI +NTSTATUS +PsLookupThreadByThreadId ( + IN PVOID UniqueThreadId, + OUT PETHREAD *Thread +); + +NTKERNELAPI +PACCESS_TOKEN +PsReferenceImpersonationToken ( + IN PETHREAD Thread, + OUT PBOOLEAN CopyOnOpen, + OUT PBOOLEAN EffectiveOnly, + OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel +); + +NTKERNELAPI +PACCESS_TOKEN +PsReferencePrimaryToken ( + IN PEPROCESS Process +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +PsRestoreImpersonation ( + IN PETHREAD Thread, + IN PSE_IMPERSONATION_STATE ImpersonationState +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +PsReturnPoolQuota ( + IN PEPROCESS Process, + IN POOL_TYPE PoolType, + IN ULONG Amount +); + +NTKERNELAPI +VOID +PsRevertToSelf ( + VOID +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlAbsoluteToSelfRelativeSD ( + IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor, + IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor, + IN PULONG BufferLength +); + +NTSYSAPI +PVOID +NTAPI +RtlAllocateHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN ULONG Size +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCompressBuffer ( + IN USHORT CompressionFormatAndEngine, + IN PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + OUT PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN ULONG UncompressedChunkSize, + OUT PULONG FinalCompressedSize, + IN PVOID WorkSpace +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCompressChunks ( + IN PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + OUT PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo, + IN ULONG CompressedDataInfoLength, + IN PVOID WorkSpace +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlConvertSidToUnicodeString ( + OUT PUNICODE_STRING DestinationString, + IN PSID Sid, + IN BOOLEAN AllocateDestinationString +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCopySid ( + IN ULONG Length, + IN PSID Destination, + IN PSID Source +); + +NTSYSAPI +HANDLE +NTAPI +RtlCreateHeap ( + IN ULONG Flags, + IN PVOID Base, + IN ULONG Reserve, + IN ULONG Commit, + IN ULONG Lock, + IN PVOID RtlHeapParams +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDecompressBuffer ( + IN USHORT CompressionFormat, + OUT PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + IN PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + OUT PULONG FinalUncompressedSize +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDecompressChunks ( + OUT PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + IN PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN PUCHAR CompressedTail, + IN ULONG CompressedTailSize, + IN PCOMPRESSED_DATA_INFO CompressedDataInfo +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDecompressFragment ( + IN USHORT CompressionFormat, + OUT PUCHAR UncompressedFragment, + IN ULONG UncompressedFragmentSize, + IN PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN ULONG FragmentOffset, + OUT PULONG FinalUncompressedSize, + IN PVOID WorkSpace +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDescribeChunk ( + IN USHORT CompressionFormat, + IN OUT PUCHAR *CompressedBuffer, + IN PUCHAR EndOfCompressedBufferPlus1, + OUT PUCHAR *ChunkBuffer, + OUT PULONG ChunkSize +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDestroyHeap ( + IN HANDLE HeapHandle +); + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualSid ( + IN PSID Sid1, + IN PSID Sid2 +); + +NTSYSAPI +VOID +NTAPI +RtlFillMemoryUlong ( + IN PVOID Destination, + IN ULONG Length, + IN ULONG Fill +); + +NTSYSAPI +BOOLEAN +NTAPI +RtlFreeHeap ( + IN HANDLE HeapHandle, + IN ULONG Flags, + IN PVOID P +); + +NTSYSAPI +VOID +NTAPI +RtlGenerate8dot3Name ( + IN PUNICODE_STRING Name, + IN BOOLEAN AllowExtendedCharacters, + IN OUT PGENERATE_NAME_CONTEXT Context, + OUT PUNICODE_STRING Name8dot3 +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetCompressionWorkSpaceSize ( + IN USHORT CompressionFormatAndEngine, + OUT PULONG CompressBufferWorkSpaceSize, + OUT PULONG CompressFragmentWorkSpaceSize +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetDaclSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + OUT PBOOLEAN DaclPresent, + OUT PACL *Dacl, + OUT PBOOLEAN DaclDefaulted +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetGroupSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + OUT PSID *Group, + OUT PBOOLEAN GroupDefaulted +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +ULONG +NTAPI +RtlGetNtGlobalFlags ( + VOID +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetOwnerSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + OUT PSID *Owner, + OUT PBOOLEAN OwnerDefaulted +); + +// +// This function returns a PIMAGE_NT_HEADERS, +// see the standard include file winnt.h +// +NTSYSAPI +PVOID +NTAPI +RtlImageNtHeader ( + IN PVOID BaseAddress +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlInitializeSid ( + IN OUT PSID Sid, + IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + IN UCHAR SubAuthorityCount +); + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsNameLegalDOS8Dot3 ( + IN PUNICODE_STRING UnicodeName, + IN PANSI_STRING AnsiName, + PBOOLEAN Unknown +); + +NTSYSAPI +ULONG +NTAPI +RtlLengthRequiredSid ( + IN UCHAR SubAuthorityCount +); + +NTSYSAPI +ULONG +NTAPI +RtlLengthSid ( + IN PSID Sid +); + +NTSYSAPI +ULONG +NTAPI +RtlNtStatusToDosError ( + IN NTSTATUS Status +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlReserveChunk ( + IN USHORT CompressionFormat, + IN OUT PUCHAR *CompressedBuffer, + IN PUCHAR EndOfCompressedBufferPlus1, + OUT PUCHAR *ChunkBuffer, + IN ULONG ChunkSize +); + +NTSYSAPI +VOID +NTAPI +RtlSecondsSince1970ToTime ( + IN ULONG SecondsSince1970, + OUT PLARGE_INTEGER Time +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +RtlSelfRelativeToAbsoluteSD ( + IN PSECURITY_DESCRIPTOR SelfRelativeSD, + OUT PSECURITY_DESCRIPTOR AbsoluteSD, + IN PULONG AbsoluteSDSize, + IN PACL Dacl, + IN PULONG DaclSize, + IN PACL Sacl, + IN PULONG SaclSize, + IN PSID Owner, + IN PULONG OwnerSize, + IN PSID PrimaryGroup, + IN PULONG PrimaryGroupSize +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetGroupSecurityDescriptor ( + IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSID Group, + IN BOOLEAN GroupDefaulted +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetOwnerSecurityDescriptor ( + IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSID Owner, + IN BOOLEAN OwnerDefaulted +); + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetSaclSecurityDescriptor ( + IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN BOOLEAN SaclPresent, + IN PACL Sacl, + IN BOOLEAN SaclDefaulted +); + +NTSYSAPI +PUCHAR +NTAPI +RtlSubAuthorityCountSid ( + IN PSID Sid +); + +NTSYSAPI +PULONG +NTAPI +RtlSubAuthoritySid ( + IN PSID Sid, + IN ULONG SubAuthority +); + +NTSYSAPI +VOID +NTAPI +RtlTimeToSecondsSince1970 ( + IN PLARGE_INTEGER Time, + OUT PULONG SecondsSince1970 +); + +NTSYSAPI +BOOLEAN +NTAPI +RtlValidSid ( + IN PSID Sid +); + +NTKERNELAPI +NTSTATUS +SeAppendPrivileges ( + PACCESS_STATE AccessState, + PPRIVILEGE_SET Privileges +); + +NTKERNELAPI +BOOLEAN +SeAuditingFileEvents ( + IN BOOLEAN AccessGranted, + IN PSECURITY_DESCRIPTOR SecurityDescriptor +); + +NTKERNELAPI +BOOLEAN +SeAuditingFileOrGlobalEvents ( + IN BOOLEAN AccessGranted, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +NTKERNELAPI +VOID +SeCaptureSubjectContext ( + OUT PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +NTKERNELAPI +NTSTATUS +SeCreateAccessState ( + OUT PACCESS_STATE AccessState, + IN PVOID AuxData, + IN ACCESS_MASK AccessMask, + IN PGENERIC_MAPPING Mapping +); + +NTKERNELAPI +NTSTATUS +SeCreateClientSecurity ( + IN PETHREAD Thread, + IN PSECURITY_QUALITY_OF_SERVICE QualityOfService, + IN BOOLEAN RemoteClient, + OUT PSECURITY_CLIENT_CONTEXT ClientContext +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +SeCreateClientSecurityFromSubjectContext ( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN PSECURITY_QUALITY_OF_SERVICE QualityOfService, + IN BOOLEAN ServerIsRemote, + OUT PSECURITY_CLIENT_CONTEXT ClientContext +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +SeDeleteAccessState ( + IN PACCESS_STATE AccessState +); + +#define SeDeleteClientSecurity(C) { \ + if (SeTokenType((C)->ClientToken) == TokenPrimary) { \ + PsDereferencePrimaryToken( (C)->ClientToken ); \ + } else { \ + PsDereferenceImpersonationToken( (C)->ClientToken ); \ + } \ +} + +VOID +SeDeleteObjectAuditAlarm ( + IN PVOID Object, + IN HANDLE Handle +); + +#define SeEnableAccessToExports() SeExports = *(PSE_EXPORTS *)SeExports; + +NTKERNELAPI +VOID +SeFreePrivileges ( + IN PPRIVILEGE_SET Privileges +); + +NTKERNELAPI +VOID +SeImpersonateClient ( + IN PSECURITY_CLIENT_CONTEXT ClientContext, + IN PETHREAD ServerThread OPTIONAL +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +SeImpersonateClientEx ( + IN PSECURITY_CLIENT_CONTEXT ClientContext, + IN PETHREAD ServerThread OPTIONAL +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +VOID +SeLockSubjectContext ( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +NTKERNELAPI +NTSTATUS +SeMarkLogonSessionForTerminationNotification ( + IN PLUID LogonId +); + +NTKERNELAPI +VOID +SeOpenObjectAuditAlarm ( + IN PUNICODE_STRING ObjectTypeName, + IN PVOID Object OPTIONAL, + IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PACCESS_STATE AccessState, + IN BOOLEAN ObjectCreated, + IN BOOLEAN AccessGranted, + IN KPROCESSOR_MODE AccessMode, + OUT PBOOLEAN GenerateOnClose +); + +NTKERNELAPI +VOID +SeOpenObjectForDeleteAuditAlarm ( + IN PUNICODE_STRING ObjectTypeName, + IN PVOID Object OPTIONAL, + IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PACCESS_STATE AccessState, + IN BOOLEAN ObjectCreated, + IN BOOLEAN AccessGranted, + IN KPROCESSOR_MODE AccessMode, + OUT PBOOLEAN GenerateOnClose +); + +NTKERNELAPI +BOOLEAN +SePrivilegeCheck ( + IN OUT PPRIVILEGE_SET RequiredPrivileges, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN KPROCESSOR_MODE AccessMode +); + +NTKERNELAPI +NTSTATUS +SeQueryAuthenticationIdToken ( + IN PACCESS_TOKEN Token, + OUT PLUID LogonId +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +SeQueryInformationToken ( + IN PACCESS_TOKEN Token, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID *TokenInformation +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +SeQuerySecurityDescriptorInfo ( + IN PSECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN OUT PULONG Length, + IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +SeQuerySessionIdToken ( + IN PACCESS_TOKEN Token, + IN PULONG SessionId +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +#define SeQuerySubjectContextToken( SubjectContext ) \ + ( ARGUMENT_PRESENT( \ + ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken \ + ) ? \ + ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \ + ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken ) + +typedef NTSTATUS (*PSE_LOGON_SESSION_TERMINATED_ROUTINE) ( + IN PLUID LogonId +); + +NTKERNELAPI +NTSTATUS +SeRegisterLogonSessionTerminatedRoutine ( + IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine +); + +NTKERNELAPI +VOID +SeReleaseSubjectContext ( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +NTKERNELAPI +VOID +SeSetAccessStateGenericMapping ( + PACCESS_STATE AccessState, + PGENERIC_MAPPING GenericMapping +); + +NTKERNELAPI +NTSTATUS +SeSetSecurityDescriptorInfo ( + IN PVOID Object OPTIONAL, + IN PSECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + IN POOL_TYPE PoolType, + IN PGENERIC_MAPPING GenericMapping +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +NTSTATUS +SeSetSecurityDescriptorInfoEx ( + IN PVOID Object OPTIONAL, + IN PSECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR ModificationDescriptor, + IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + IN ULONG AutoInheritFlags, + IN POOL_TYPE PoolType, + IN PGENERIC_MAPPING GenericMapping +); + +NTKERNELAPI +BOOLEAN +SeTokenIsAdmin ( + IN PACCESS_TOKEN Token +); + +NTKERNELAPI +BOOLEAN +SeTokenIsRestricted ( + IN PACCESS_TOKEN Token +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTKERNELAPI +TOKEN_TYPE +SeTokenType ( + IN PACCESS_TOKEN Token +); + +NTKERNELAPI +VOID +SeUnlockSubjectContext ( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext +); + +NTKERNELAPI +NTSTATUS +SeUnregisterLogonSessionTerminatedRoutine ( + IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwAdjustPrivilegesToken ( + IN HANDLE TokenHandle, + IN BOOLEAN DisableAllPrivileges, + IN PTOKEN_PRIVILEGES NewState, + IN ULONG BufferLength, + OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL, + OUT PULONG ReturnLength +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwAlertThread ( + IN HANDLE ThreadHandle +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwAllocateVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN OUT PSIZE_T RegionSize, + IN ULONG AllocationType, + IN ULONG Protect +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwAccessCheckAndAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ACCESS_MASK DesiredAccess, + IN PGENERIC_MAPPING GenericMapping, + IN BOOLEAN ObjectCreation, + OUT PACCESS_MASK GrantedAccess, + OUT PBOOLEAN AccessStatus, + OUT PBOOLEAN GenerateOnClose +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwCancelIoFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwClearEvent ( + IN HANDLE EventHandle +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwConnectPort ( + OUT PHANDLE ClientPortHandle, + IN PUNICODE_STRING ServerPortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PLPC_SECTION_WRITE ClientSharedMemory OPTIONAL, + IN OUT PLPC_SECTION_READ ServerSharedMemory OPTIONAL, + OUT PULONG MaximumMessageLength OPTIONAL, + IN OUT PVOID ConnectionInfo OPTIONAL, + IN OUT PULONG ConnectionInfoLength OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCloseObjectAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN BOOLEAN GenerateOnClose +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN EVENT_TYPE EventType, + IN BOOLEAN InitialState +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateSection ( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize OPTIONAL, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateSymbolicLinkObject ( + OUT PHANDLE SymbolicLinkHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PUNICODE_STRING TargetName +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteFile ( + IN POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteValueKey ( + IN HANDLE Handle, + IN PUNICODE_STRING Name +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeviceIoControlFile ( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG IoControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength +); + +// +// If using ZwDisplayString during boot on Windows 2000 or later you must +// first call InbvEnableDisplayString. +// +NTSYSAPI +NTSTATUS +NTAPI +ZwDisplayString ( + IN PUNICODE_STRING String +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDuplicateObject ( + IN HANDLE SourceProcessHandle, + IN HANDLE SourceHandle, + IN HANDLE TargetProcessHandle OPTIONAL, + OUT PHANDLE TargetHandle OPTIONAL, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + IN ULONG Options +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDuplicateToken ( + IN HANDLE ExistingTokenHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN BOOLEAN EffectiveOnly, + IN TOKEN_TYPE TokenType, + OUT PHANDLE NewTokenHandle +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFlushInstructionCache ( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress OPTIONAL, + IN ULONG FlushSize +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwFlushVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + OUT PIO_STATUS_BLOCK IoStatusBlock +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwFreeVirtualMemory ( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + IN ULONG FreeType +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFsControlFile ( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG FsControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwInitiatePowerAction ( + IN POWER_ACTION SystemAction, + IN SYSTEM_POWER_STATE MinSystemState, + IN ULONG Flags, + IN BOOLEAN Asynchronous +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwLoadDriver ( + // "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" + IN PUNICODE_STRING RegistryPath +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwLoadKey ( + IN POBJECT_ATTRIBUTES KeyObjectAttributes, + IN POBJECT_ATTRIBUTES FileObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwNotifyChangeKey ( + IN HANDLE KeyHandle, + IN HANDLE EventHandle OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG NotifyFilter, + IN BOOLEAN WatchSubtree, + IN PVOID Buffer, + IN ULONG BufferLength, + IN BOOLEAN Asynchronous +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenDirectoryObject ( + OUT PHANDLE DirectoryHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenProcess ( + OUT PHANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenProcessToken ( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE TokenHandle +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenProcessTokenEx ( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenThread ( + OUT PHANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenThreadToken ( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + OUT PHANDLE TokenHandle +); + +#if (VER_PRODUCTBUILD >= 2600) + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenThreadTokenEx ( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle +); + +#endif // (VER_PRODUCTBUILD >= 2600) + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwPowerInformation ( + IN POWER_INFORMATION_LEVEL PowerInformationLevel, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwPulseEvent ( + IN HANDLE EventHandle, + OUT PULONG PreviousState OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDefaultLocale ( + IN BOOLEAN ThreadOrSystem, + OUT PLCID Locale +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDefaultUILanguage ( + OUT LANGID *LanguageId +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDirectoryFile ( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN BOOLEAN ReturnSingleEntry, + IN PUNICODE_STRING FileName OPTIONAL, + IN BOOLEAN RestartScan +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDirectoryObject ( + IN HANDLE DirectoryHandle, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN BOOLEAN RestartScan, + IN OUT PULONG Context, + OUT PULONG ReturnLength OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryEaFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN PVOID EaList OPTIONAL, + IN ULONG EaListLength, + IN PULONG EaIndex OPTIONAL, + IN BOOLEAN RestartScan +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInformationProcess ( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + OUT PVOID ProcessInformation, + IN ULONG ProcessInformationLength, + OUT PULONG ReturnLength OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInformationToken ( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID TokenInformation, + IN ULONG TokenInformationLength, + OUT PULONG ReturnLength +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInstallUILanguage ( + OUT LANGID *LanguageId +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryObject ( + IN HANDLE ObjectHandle, + IN OBJECT_INFO_CLASS ObjectInformationClass, + OUT PVOID ObjectInformation, + IN ULONG Length, + OUT PULONG ResultLength +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySection ( + IN HANDLE SectionHandle, + IN SECTION_INFORMATION_CLASS SectionInformationClass, + OUT PVOID SectionInformation, + IN ULONG SectionInformationLength, + OUT PULONG ResultLength OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySecurityObject ( + IN HANDLE FileHandle, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG Length, + OUT PULONG ResultLength +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySystemInformation ( + IN SYSTEM_INFORMATION_CLASS SystemInformationClass, + OUT PVOID SystemInformation, + IN ULONG Length, + OUT PULONG ReturnLength +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryVolumeInformationFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwReplaceKey ( + IN POBJECT_ATTRIBUTES NewFileObjectAttributes, + IN HANDLE KeyHandle, + IN POBJECT_ATTRIBUTES OldFileObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwRequestWaitReplyPort ( + IN HANDLE PortHandle, + IN PLPC_MESSAGE Request, + OUT PLPC_MESSAGE Reply +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwResetEvent ( + IN HANDLE EventHandle, + OUT PULONG PreviousState OPTIONAL +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwRestoreKey ( + IN HANDLE KeyHandle, + IN HANDLE FileHandle, + IN ULONG Flags +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSaveKey ( + IN HANDLE KeyHandle, + IN HANDLE FileHandle +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetDefaultLocale ( + IN BOOLEAN ThreadOrSystem, + IN LCID Locale +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetDefaultUILanguage ( + IN LANGID LanguageId +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEaFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEvent ( + IN HANDLE EventHandle, + OUT PULONG PreviousState OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationObject ( + IN HANDLE ObjectHandle, + IN OBJECT_INFO_CLASS ObjectInformationClass, + IN PVOID ObjectInformation, + IN ULONG ObjectInformationLength +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationProcess ( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + IN PVOID ProcessInformation, + IN ULONG ProcessInformationLength +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetSecurityObject ( + IN HANDLE Handle, + IN SECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetSystemInformation ( + IN SYSTEM_INFORMATION_CLASS SystemInformationClass, + IN PVOID SystemInformation, + IN ULONG Length +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetSystemTime ( + IN PLARGE_INTEGER NewTime, + OUT PLARGE_INTEGER OldTime OPTIONAL +); + +#if (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetVolumeInformationFile ( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass +); + +#endif // (VER_PRODUCTBUILD >= 2195) + +NTSYSAPI +NTSTATUS +NTAPI +ZwTerminateProcess ( + IN HANDLE ProcessHandle OPTIONAL, + IN NTSTATUS ExitStatus +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwUnloadDriver ( + // "\\Registry\\Machine\\System\\CurrentControlSet\\Services\\<DriverName>" + IN PUNICODE_STRING RegistryPath +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwUnloadKey ( + IN POBJECT_ATTRIBUTES KeyObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwWaitForSingleObject ( + IN HANDLE Handle, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwWaitForMultipleObjects ( + IN ULONG HandleCount, + IN PHANDLE Handles, + IN WAIT_TYPE WaitType, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwYieldExecution ( + VOID +); + +// +// Below is stuff that is included in the Windows 2000 DDK but is missing in +// the Windows NT 4.0 DDK +// + +#if (VER_PRODUCTBUILD < 2195) + +NTSYSAPI +VOID +NTAPI +HalMakeBeep ( + IN ULONG Frequency +); + +#ifndef IoCopyCurrentIrpStackLocationToNext +#define IoCopyCurrentIrpStackLocationToNext( Irp ) { \ + PIO_STACK_LOCATION irpSp; \ + PIO_STACK_LOCATION nextIrpSp; \ + irpSp = IoGetCurrentIrpStackLocation( (Irp) ); \ + nextIrpSp = IoGetNextIrpStackLocation( (Irp) ); \ + RtlCopyMemory( \ + nextIrpSp, \ + irpSp, \ + FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine) \ + ); \ + nextIrpSp->Control = 0; } +#endif + +NTKERNELAPI +NTSTATUS +IoCreateFile ( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG CreateDisposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength, + IN CREATE_FILE_TYPE CreateFileType, + IN PVOID ExtraCreateParameters, + IN ULONG Options +); + +#ifndef IoSkipCurrentIrpStackLocation +#define IoSkipCurrentIrpStackLocation( Irp ) \ + (Irp)->CurrentLocation++; \ + (Irp)->Tail.Overlay.CurrentStackLocation++; +#endif + +NTSYSAPI +VOID +NTAPI +ProbeForWrite ( + IN PVOID Address, + IN ULONG Length, + IN ULONG Alignment +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenFile ( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG ShareAccess, + IN ULONG OpenOptions +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenSymbolicLinkObject ( + OUT PHANDLE SymbolicLinkHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes +); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySymbolicLinkObject ( + IN HANDLE LinkHandle, + IN OUT PUNICODE_STRING LinkTarget, + OUT PULONG ReturnedLength OPTIONAL +); + +#endif // (VER_PRODUCTBUILD < 2195) + + + +NTSYSAPI +NTSTATUS +NTAPI +RtlOemStringToUnicodeString( + OUT PUNICODE_STRING DestinationString, + IN POEM_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToOemString( + OUT POEM_STRING DestinationString, + IN PUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +ULONG +NTAPI +RtlxOemStringToUnicodeSize( + POEM_STRING OemString + ); + +#define RtlOemStringToCountedUnicodeSize(STRING) ( \ + (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \ + ) + +#define RtlOemStringToUnicodeSize(STRING) ( \ + NLS_MB_OEM_CODE_PAGE_TAG ? \ + RtlxOemStringToUnicodeSize(STRING) : \ + ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ +) + + +NTSYSAPI +ULONG +NTAPI +RtlxUnicodeStringToOemSize( + PUNICODE_STRING UnicodeString + ); + +#define RtlUnicodeStringToOemSize(STRING) ( \ + NLS_MB_OEM_CODE_PAGE_TAG ? \ + RtlxUnicodeStringToOemSize(STRING) : \ + ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ +) + + + +#ifdef __cplusplus +} +#endif + +#endif // _NTIFS_ Added: vendor/rfsd/current/RFSD/RFSD/pnp.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/pnp.c?rev=2…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/pnp.c (added) +++ vendor/rfsd/current/RFSD/RFSD/pnp.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,427 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: pnp.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +#if (_WIN32_WINNT >= 0x0500) + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#define DBG_PNP DBG_USER + +NTSTATUS +RfsdPnpCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Contxt ); + + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdPnp) +#pragma alloc_text(PAGE, RfsdPnpQueryRemove) +#pragma alloc_text(PAGE, RfsdPnpRemove) +#pragma alloc_text(PAGE, RfsdPnpCancelRemove) +#pragma alloc_text(PAGE, RfsdPnpSurpriseRemove) +#endif + + +/* FUNCTIONS *************************************************************/ + +NTSTATUS +RfsdPnpCompletionRoutine ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Contxt + ) +{ + PKEVENT Event = (PKEVENT) Contxt; + + KeSetEvent( Event, 0, FALSE ); + + return STATUS_MORE_PROCESSING_REQUIRED; + + UNREFERENCED_PARAMETER( DeviceObject ); + UNREFERENCED_PARAMETER( Contxt ); +} + + +NTSTATUS +RfsdPnp (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_INVALID_PARAMETER; + + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + PRFSD_VCB Vcb; + PDEVICE_OBJECT DeviceObject; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + if ( !((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB)))) { + __leave; // Status = STATUS_INVALID_PARAMETER + } + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); + + switch ( IrpSp->MinorFunction ) { + + case IRP_MN_QUERY_REMOVE_DEVICE: + + RfsdPrint((DBG_PNP, "RfsdPnp: RfsdPnpQueryRemove...\n")); + Status = RfsdPnpQueryRemove(IrpContext, Vcb); + + break; + + case IRP_MN_REMOVE_DEVICE: + + RfsdPrint((DBG_PNP, "RfsdPnp: RfsdPnpRemove...\n")); + Status = RfsdPnpRemove(IrpContext, Vcb); + break; + + case IRP_MN_CANCEL_REMOVE_DEVICE: + + RfsdPrint((DBG_PNP, "RfsdPnp: RfsdPnpCancelRemove...\n")); + Status = RfsdPnpCancelRemove(IrpContext, Vcb); + break; + + case IRP_MN_SURPRISE_REMOVAL: + + RfsdPrint((DBG_PNP, "RfsdPnp: RfsdPnpSupriseRemove...\n")); + Status = RfsdPnpSurpriseRemove(IrpContext, Vcb); + break; + + default: + break; + } + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + Irp = IrpContext->Irp; + + if (Irp) { + + // + // Here we need pass the IRP to the disk driver. + // + + IoSkipCurrentIrpStackLocation( Irp ); + + Status = IoCallDriver(Vcb->TargetDeviceObject, Irp); + + IrpContext->Irp = NULL; + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +NTSTATUS +RfsdPnpQueryRemove ( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb + ) + +{ + NTSTATUS Status; + KEVENT Event; + BOOLEAN bDeleted = FALSE; + BOOLEAN VcbAcquired = FALSE; + + __try { + + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove by RfsdPnp ...\n")); + + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove: RfsdFlushVolume ...\n")); + +#if (_WIN32_WINNT >= 0x0500) + CcWaitForCurrentLazyWriterActivity(); +#endif + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + VcbAcquired = TRUE; + + RfsdFlushFiles(Vcb, FALSE); + + RfsdFlushVolume(Vcb, FALSE); + + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove: RfsdLockVcb: Vcb=%xh FileObject=%xh ...\n", + Vcb, IrpContext->FileObject)); + Status = RfsdLockVcb(Vcb, IrpContext->FileObject); + + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove: RfsdPurgeVolume ...\n")); + RfsdPurgeVolume(Vcb, TRUE); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + VcbAcquired = FALSE; + + IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp); + + KeInitializeEvent( &Event, NotificationEvent, FALSE ); + IoSetCompletionRoutine( IrpContext->Irp, + RfsdPnpCompletionRoutine, + &Event, + TRUE, + TRUE, + TRUE ); + + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove: Call lower level driver...\n")); + Status = IoCallDriver( Vcb->TargetDeviceObject, + IrpContext->Irp); + + if (Status == STATUS_PENDING) { + + KeWaitForSingleObject( &Event, + Executive, + KernelMode, + FALSE, + NULL ); + + Status = IrpContext->Irp->IoStatus.Status; + } + + if (NT_SUCCESS(Status)) { + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove: RfsdCheckDismount ...\n")); + bDeleted = RfsdCheckDismount(IrpContext, Vcb, TRUE); + RfsdPrint((DBG_PNP, "RfsdPnpQueryRemove: RfsdFlushVolume bDelted=%xh ...\n", bDeleted)); + } + + ASSERT( !(NT_SUCCESS(Status) && !bDeleted)); + + } __finally { + + if (VcbAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + } + + RfsdCompleteRequest( + IrpContext->Irp, FALSE, (CCHAR)(NT_SUCCESS(Status)? + IO_DISK_INCREMENT : IO_NO_INCREMENT) ); + + IrpContext->Irp = NULL; + } + + return Status; +} + +NTSTATUS +RfsdPnpRemove ( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb ) +{ + NTSTATUS Status; + KEVENT Event; + BOOLEAN bDeleted; + + __try { + + RfsdPrint((DBG_PNP, "RfsdPnpRemove by RfsdPnp ...\n")); +#if (_WIN32_WINNT >= 0x0500) + CcWaitForCurrentLazyWriterActivity(); +#endif + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + Status = RfsdLockVcb(Vcb, IrpContext->FileObject); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + + // + // Setup the Irp. We'll send it to the lower disk driver. + // + + IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp); + + KeInitializeEvent( &Event, NotificationEvent, FALSE ); + IoSetCompletionRoutine( IrpContext->Irp, + RfsdPnpCompletionRoutine, + &Event, + TRUE, + TRUE, + TRUE ); + + Status = IoCallDriver( Vcb->TargetDeviceObject, + IrpContext->Irp); + + if (Status == STATUS_PENDING) { + + KeWaitForSingleObject( &Event, + Executive, + KernelMode, + FALSE, + NULL ); + + Status = IrpContext->Irp->IoStatus.Status; + } + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + RfsdPurgeVolume(Vcb, FALSE); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + + bDeleted = RfsdCheckDismount(IrpContext, Vcb, TRUE); + + } __finally { + RfsdCompleteRequest( + IrpContext->Irp, FALSE, (CCHAR)(NT_SUCCESS(Status)? + IO_DISK_INCREMENT : IO_NO_INCREMENT) ); + + IrpContext->Irp = NULL; + } + + return Status; +} + + +NTSTATUS +RfsdPnpSurpriseRemove ( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb ) +{ + NTSTATUS Status; + KEVENT Event; + BOOLEAN bDeleted; + + __try { + + RfsdPrint((DBG_PNP, "RfsdPnpSupriseRemove by RfsdPnp ...\n")); +#if (_WIN32_WINNT >= 0x0500) + CcWaitForCurrentLazyWriterActivity(); +#endif + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + Status = RfsdLockVcb(Vcb, IrpContext->FileObject); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + + // + // Setup the Irp. We'll send it to the lower disk driver. + // + + IoCopyCurrentIrpStackLocationToNext(IrpContext->Irp); + + KeInitializeEvent( &Event, NotificationEvent, FALSE ); + IoSetCompletionRoutine( IrpContext->Irp, + RfsdPnpCompletionRoutine, + &Event, + TRUE, + TRUE, + TRUE ); + + Status = IoCallDriver( Vcb->TargetDeviceObject, + IrpContext->Irp); + + if (Status == STATUS_PENDING) { + + KeWaitForSingleObject( &Event, + Executive, + KernelMode, + FALSE, + NULL ); + + Status = IrpContext->Irp->IoStatus.Status; + } + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + RfsdPurgeVolume(Vcb, FALSE); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + + bDeleted = RfsdCheckDismount(IrpContext, Vcb, TRUE); + + } __finally { + + RfsdCompleteRequest( + IrpContext->Irp, FALSE, (CCHAR)(NT_SUCCESS(Status)? + IO_DISK_INCREMENT : IO_NO_INCREMENT) ); + + IrpContext->Irp = NULL; + } + + return Status; +} + + +NTSTATUS +RfsdPnpCancelRemove ( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb + ) +{ + NTSTATUS Status; + + RfsdPrint((DBG_PNP, "RfsdPnpCancelRemove by RfsdPnp ...\n")); + + ExAcquireResourceExclusiveLite( + &Vcb->MainResource, TRUE ); + + Status = RfsdUnlockVcb(Vcb, IrpContext->FileObject); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + + IoSkipCurrentIrpStackLocation(IrpContext->Irp); + + Status = IoCallDriver(Vcb->TargetDeviceObject, IrpContext->Irp); + + IrpContext->Irp = NULL; + + return Status; +} + + +#endif //(_WIN32_WINNT >= 0x0500) Added: vendor/rfsd/current/RFSD/RFSD/protos.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/protos.h?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/protos.h (added) +++ vendor/rfsd/current/RFSD/RFSD/protos.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1182 @@ + + +#ifndef max +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#endif + +#ifndef min +#define min(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +// +// RfsdBlock.c +// + +// TODO move allocate and load block here + +NTSTATUS +RfsdFindItemHeaderInBlock( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pKey, // The key to match against + IN PUCHAR pBlockBuffer, // A filled disk block, provided by the caller + OUT PRFSD_ITEM_HEAD* ppTargetItemHeader, // A pointer to a PRFSD_ITEM_HEAD. The PRFSD_ITEM_HEAD will point to the item head matching Key, or NULL if there was no such item head in the given block. + IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY) + ); + +NTSTATUS +RfsdLoadItem( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pItemKey, // The key of the item to find + OUT PRFSD_ITEM_HEAD* ppMatchingItemHeader, + OUT PUCHAR* ppItemBuffer, + OUT PUCHAR* ppBlockBuffer, // Block buffer, which backs the other output data structures. The caller must free this (even in the case of an error)! + OUT PULONG pBlockNumber, // The ordinal disk block number at which the item was found + IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY) + ); +// +// Block.c +// + +NTSTATUS +RfsdLockUserBuffer ( + IN PIRP Irp, + IN ULONG Length, + IN LOCK_OPERATION Operation); +PVOID +RfsdGetUserBuffer (IN PIRP Irp); + + +NTSTATUS +RfsdReadWriteBlocks( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_BDL RfsdBDL, + IN ULONG Length, + IN ULONG Count, + IN BOOLEAN bVerify ); + +PUCHAR +RfsdAllocateAndLoadBlock( + IN PRFSD_VCB Vcb, + IN ULONG BlockIndex ); + +NTSTATUS +RfsdReadSync( + IN PRFSD_VCB Vcb, + IN ULONGLONG Offset, + IN ULONG Length, + OUT PVOID Buffer, + IN BOOLEAN bVerify ); + +NTSTATUS +RfsdReadDisk( + IN PRFSD_VCB Vcb, + IN ULONGLONG Offset, + IN ULONG Size, + IN PVOID Buffer, + IN BOOLEAN bVerify ); + +NTSTATUS +RfsdDiskIoControl ( + IN PDEVICE_OBJECT DeviceOjbect, + IN ULONG IoctlCode, + IN PVOID InputBuffer, + IN ULONG InputBufferSize, + IN OUT PVOID OutputBuffer, + IN OUT PULONG OutputBufferSize ); + +VOID +RfsdMediaEjectControl ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN BOOLEAN bPrevent ); + +NTSTATUS +RfsdDiskShutDown(PRFSD_VCB Vcb); + + +// +// Cleanup.c +// +NTSTATUS +RfsdCleanup (IN PRFSD_IRP_CONTEXT IrpContext); + +// +// Close.c +// +NTSTATUS +RfsdClose (IN PRFSD_IRP_CONTEXT IrpContext); + +VOID +RfsdQueueCloseRequest (IN PRFSD_IRP_CONTEXT IrpContext); + +VOID +RfsdDeQueueCloseRequest (IN PVOID Context); + +// +// Cmcb.c +// + +BOOLEAN +RfsdAcquireForLazyWrite ( + IN PVOID Context, + IN BOOLEAN Wait ); +VOID +RfsdReleaseFromLazyWrite (IN PVOID Context); + +BOOLEAN +RfsdAcquireForReadAhead ( + IN PVOID Context, + IN BOOLEAN Wait ); + +BOOLEAN +RfsdNoOpAcquire ( + IN PVOID Fcb, + IN BOOLEAN Wait ); + +VOID +RfsdNoOpRelease (IN PVOID Fcb ); + +VOID +RfsdReleaseFromReadAhead (IN PVOID Context); + +// +// Create.c +// + +PRFSD_FCB +RfsdSearchFcbList( + IN PRFSD_VCB Vcb, + IN ULONG inode); + +NTSTATUS +RfsdScanDir (IN PRFSD_VCB Vcb, + IN PRFSD_MCB ParentMcb, // Mcb of the directory to be scanned + IN PUNICODE_STRING FileName, // Short file name (not necisarilly null-terminated!) + IN OUT PULONG Index, // Offset (in bytes) of the dentry relative to the start of the directory listing + IN OUT PRFSD_DENTRY_HEAD rfsd_dir); // Directory entry of the found item + +NTSTATUS +RfsdLookupFileName ( + IN PRFSD_VCB Vcb, + IN PUNICODE_STRING FullFileName, + IN PRFSD_MCB ParentMcb, + OUT PRFSD_MCB * RfsdMcb, + IN OUT PRFSD_INODE Inode); + +NTSTATUS +RfsdCreateFile( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb ); + +NTSTATUS +RfsdCreateVolume( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb ); + +NTSTATUS +RfsdCreate (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdCreateInode( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB pParentFcb, + IN ULONG Type, + IN ULONG FileAttr, + IN PUNICODE_STRING FileName); + +#if DISABLED +NTSTATUS +RfsdSupersedeOrOverWriteFile( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb, + IN ULONG Disposition); +#endif + +// +// Debug.c +// + +#define DBG_VITAL 0 +#define DBG_ERROR 1 +#define DBG_USER 2 +#define DBG_TRACE 3 +#define DBG_INFO 4 +#define DBG_FUNC 5 + +#if DBG +#define RfsdPrint(arg) RfsdPrintf arg +#define RfsdPrintNoIndent(arg) RfsdNIPrintf arg + +#define RfsdCompleteRequest(Irp, bPrint, PriorityBoost) \ + RfsdDbgPrintComplete(Irp, bPrint); \ + IoCompleteRequest(Irp, PriorityBoost) + +#else + +#define RfsdPrint(arg) + +#define RfsdCompleteRequest(Irp, bPrint, PriorityBoost) \ + IoCompleteRequest(Irp, PriorityBoost) + +#endif // DBG + +VOID +__cdecl +RfsdPrintf( + LONG DebugPrintLevel, + PCHAR DebugMessage, + ... + ); + +VOID +__cdecl +RfsdNIPrintf( + LONG DebugPrintLevel, + PCHAR DebugMessage, + ... + ); + +extern ULONG ProcessNameOffset; + +#define RfsdGetCurrentProcessName() ( \ + (PUCHAR) PsGetCurrentProcess() + ProcessNameOffset \ +) + +ULONG +RfsdGetProcessNameOffset (VOID); + +VOID +RfsdDbgPrintCall ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp ); + +VOID +RfsdDbgPrintComplete ( + IN PIRP Irp, + IN BOOLEAN bPrint + ); + +PUCHAR +RfsdNtStatusToString (IN NTSTATUS Status ); + +// +// Devctl.c +// + +NTSTATUS +RfsdDeviceControlNormal (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdPrepareToUnload (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdDeviceControl (IN PRFSD_IRP_CONTEXT IrpContext); + +// +// Dirctl.c +// + +ULONG +RfsdGetInfoLength(IN FILE_INFORMATION_CLASS FileInformationClass); + +ULONG +RfsdProcessDirEntry( + IN PRFSD_VCB Vcb, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN __u32 Key_ParentID, + IN __u32 Key_ObjectID, + IN PVOID Buffer, + IN ULONG UsedLength, + IN ULONG Length, + IN ULONG FileIndex, + IN PUNICODE_STRING pName, + IN BOOLEAN Single, + IN PVOID pPreviousEntry ); + +NTSTATUS +RfsdQueryDirectory (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdNotifyChangeDirectory ( + IN PRFSD_IRP_CONTEXT IrpContext + ); + +VOID +RfsdNotifyReportChange ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb, + IN ULONG Filter, + IN ULONG Action + ); + +NTSTATUS +RfsdDirectoryControl (IN PRFSD_IRP_CONTEXT IrpContext); + +BOOLEAN +RfsdIsDirectoryEmpty ( + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb + ); + +// +// Dispatch.c +// + +NTSTATUS +RfsdQueueRequest (IN PRFSD_IRP_CONTEXT IrpContext); + +VOID +RfsdDeQueueRequest (IN PVOID Context); + +NTSTATUS +RfsdDispatchRequest (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdBuildRequest ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +// +// Except.c +// + +NTSTATUS +RfsdExceptionFilter ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PEXCEPTION_POINTERS ExceptionPointer + ); + +NTSTATUS +RfsdExceptionHandler (IN PRFSD_IRP_CONTEXT IrpContext); + + +// +// Rfsd.c +// + +PRFSD_SUPER_BLOCK +RfsdLoadSuper( + IN PRFSD_VCB Vcb, + IN BOOLEAN bVerify + ); + +BOOLEAN +RfsdSaveSuper( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb + ); + +BOOLEAN +RfsdLoadGroup(IN PRFSD_VCB Vcb); + +BOOLEAN +RfsdSaveGroup( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG Group + ); + +BOOLEAN +RfsdGetInodeLba (IN PRFSD_VCB Vcb, + IN __u32 DirectoryID, + IN __u32 ParentID, + OUT PLONGLONG offset); + +BOOLEAN +RfsdLoadInode (IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pKey, + IN OUT PRFSD_INODE Inode); + +BOOLEAN +RfsdLoadInode2 (IN PRFSD_VCB Vcb, + IN __u32 a, + IN __u32 b, + IN OUT PRFSD_INODE Inode); +BOOLEAN +RfsdSaveInode ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG inode, + IN PRFSD_INODE Inode + ); + +BOOLEAN +RfsdLoadBlock ( + IN PRFSD_VCB Vcb, + IN ULONG dwBlk, + IN PVOID Buffer + ); + +BOOLEAN +RfsdSaveBlock ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG dwBlk, + IN PVOID Buf + ); + +BOOLEAN +RfsdSaveBuffer( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN LONGLONG Offset, + IN ULONG Size, + IN PVOID Buf + ); + +NTSTATUS +RfsdGetBlock( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG dwContent, + IN ULONG Index, + IN ULONG Layer, + IN BOOLEAN bAlloc, + OUT PULONG pBlock + ); + +NTSTATUS +RfsdBlockMap( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG InodeNo, + IN PRFSD_INODE Inode, + IN ULONG Index, + IN BOOLEAN bAlloc, + OUT PULONG pBlock + ); + +NTSTATUS +RfsdBuildBDL2( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pKey, + IN PRFSD_INODE pInode, + OUT PULONG out_Count, + OUT PRFSD_BDL* out_ppBdl ); + +NTSTATUS +RfsdBuildBDL( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY InodeNo, + IN PRFSD_INODE Inode, + IN ULONGLONG Offset, + IN ULONG Size, + IN BOOLEAN bAlloc, + OUT PRFSD_BDL * Bdls, + OUT PULONG Count + ); + +NTSTATUS +RfsdNewBlock( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG GroupHint, + ULONG BlockHint, + PULONG dwRet ); + +NTSTATUS +RfsdFreeBlock( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG Block ); + +NTSTATUS +RfsdExpandBlock( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + ULONG dwContent, + ULONG Index, + ULONG layer, + BOOLEAN bNew, + ULONG *dwRet ); + + +NTSTATUS +RfsdExpandInode( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + ULONG *dwRet ); + +NTSTATUS +RfsdNewInode( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG GroupHint, + ULONG mode, + PULONG Inode ); + +BOOLEAN +RfsdFreeInode( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG Inode, + ULONG Type ); + +NTSTATUS +RfsdAddEntry ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Dcb, + IN ULONG FileType, + IN ULONG Inode, + IN PUNICODE_STRING FileName ); + +NTSTATUS +RfsdRemoveEntry ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Dcb, + IN ULONG FileType, + IN ULONG Inode ); + +NTSTATUS +RfsdSetParentEntry ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Dcb, + IN ULONG OldParent, + IN ULONG NewParent ); + + +NTSTATUS +RfsdTruncateBlock( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb, + IN ULONG dwContent, + IN ULONG Index, + IN ULONG layer, + OUT BOOLEAN *bFreed ); + +NTSTATUS +RfsdTruncateInode( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb ); + +BOOLEAN +RfsdAddMcbEntry ( + IN PRFSD_VCB Vcb, + IN LONGLONG Lba, + IN LONGLONG Length ); + +VOID +RfsdRemoveMcbEntry ( + IN PRFSD_VCB Vcb, + IN LONGLONG Lba, + IN LONGLONG Length ); + +BOOLEAN +RfsdLookupMcbEntry ( + IN PRFSD_VCB Vcb, + IN LONGLONG Offset, + OUT PLONGLONG Lba OPTIONAL, + OUT PLONGLONG Length OPTIONAL, + OUT PLONGLONG RunStart OPTIONAL, + OUT PLONGLONG RunLength OPTIONAL, + OUT PULONG Index OPTIONAL ); + +BOOLEAN +SuperblockContainsMagicKey(PRFSD_SUPER_BLOCK sb); + +__u32 +ConvertKeyTypeUniqueness(__u32 k_uniqueness); + +void +FillInMemoryKey( + IN PRFSD_KEY_ON_DISK pKeyOnDisk, + IN RFSD_KEY_VERSION KeyVersion, + IN OUT PRFSD_KEY_IN_MEMORY pKeyInMemory ); + +RFSD_KEY_VERSION DetermineOnDiskKeyFormat(const PRFSD_KEY_ON_DISK key); + +RFSD_KEY_COMPARISON +CompareShortKeys( + IN PRFSD_KEY_IN_MEMORY a, + IN PRFSD_KEY_IN_MEMORY b ); + +RFSD_KEY_COMPARISON +CompareKeysWithoutOffset( + IN PRFSD_KEY_IN_MEMORY a, + IN PRFSD_KEY_IN_MEMORY b ); + +RFSD_KEY_COMPARISON +CompareKeys( + IN PRFSD_KEY_IN_MEMORY a, + IN PRFSD_KEY_IN_MEMORY b ); + +NTSTATUS +NavigateToLeafNode( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, + IN ULONG StartingBlockNumber, + OUT PULONG out_NextBlockNumber ); + +NTSTATUS +RfsdParseFilesystemTree( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, // Key to search for. + IN ULONG StartingBlockNumber, // Block number of an internal or leaf node, to start the search from + IN RFSD_CALLBACK(fpDirectoryCallback), // A function ptr to trigger on hitting a matching leaf block + IN PVOID Context + ); + + +NTSTATUS +_NavigateToLeafNode( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, + IN ULONG StartingBlockNumber, + OUT PULONG out_NextBlockNumber, + IN BOOLEAN ReturnOnFirstMatch, + IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY), + RFSD_CALLBACK(fpDirectoryCallback), + IN PVOID pContext + ); + + +// +// Fastio.c +// + +BOOLEAN +RfsdFastIoCheckIfPossible ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN BOOLEAN CheckForReadOperation, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject ); + + +BOOLEAN +RfsdFastIoRead (IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); + +BOOLEAN +RfsdFastIoWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); + +BOOLEAN +RfsdFastIoQueryBasicInfo ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + OUT PFILE_BASIC_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); + +BOOLEAN +RfsdFastIoQueryStandardInfo ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + OUT PFILE_STANDARD_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); + +BOOLEAN +RfsdFastIoLock ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS Process, + IN ULONG Key, + IN BOOLEAN FailImmediately, + IN BOOLEAN ExclusiveLock, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + +BOOLEAN +RfsdFastIoUnlockSingle ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS Process, + IN ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + +BOOLEAN +RfsdFastIoUnlockAll ( + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + +BOOLEAN +RfsdFastIoUnlockAllByKey ( + IN PFILE_OBJECT FileObject, + IN PEPROCESS Process, + IN ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + + +BOOLEAN +RfsdFastIoQueryNetworkOpenInfo ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + OUT PFILE_NETWORK_OPEN_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject ); + +BOOLEAN +RfsdFastIoQueryNetworkOpenInfo ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Wait, + OUT PFILE_NETWORK_OPEN_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject); + + +// +// FileInfo.c +// + + +NTSTATUS +RfsdQueryInformation (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdSetInformation (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdExpandFile ( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + PLARGE_INTEGER AllocationSize ); + +NTSTATUS +RfsdTruncateFile ( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + PLARGE_INTEGER AllocationSize ); + +NTSTATUS +RfsdSetDispositionInfo( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + BOOLEAN bDelete); + +NTSTATUS +RfsdSetRenameInfo( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb ); + +NTSTATUS +RfsdDeleteFile( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb ); + + +// +// Flush.c +// + +NTSTATUS +RfsdFlushFiles (IN PRFSD_VCB Vcb, BOOLEAN bShutDown); + +NTSTATUS +RfsdFlushVolume (IN PRFSD_VCB Vcb, BOOLEAN bShutDown); + +NTSTATUS +RfsdFlushFile (IN PRFSD_FCB Fcb); + +NTSTATUS +RfsdFlush (IN PRFSD_IRP_CONTEXT IrpContext); + + +// +// Fsctl.c +// + + +VOID +RfsdSetVpbFlag (IN PVPB Vpb, + IN USHORT Flag ); + +VOID +RfsdClearVpbFlag (IN PVPB Vpb, + IN USHORT Flag ); + +BOOLEAN +RfsdCheckDismount ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN BOOLEAN bForce ); + +NTSTATUS +RfsdPurgeVolume (IN PRFSD_VCB Vcb, + IN BOOLEAN FlushBeforePurge); + +NTSTATUS +RfsdPurgeFile (IN PRFSD_FCB Fcb, + IN BOOLEAN FlushBeforePurge); + +BOOLEAN +RfsdIsHandleCountZero(IN PRFSD_VCB Vcb); + +NTSTATUS +RfsdLockVcb (IN PRFSD_VCB Vcb, + IN PFILE_OBJECT FileObject); + +NTSTATUS +RfsdLockVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdUnlockVcb (IN PRFSD_VCB Vcb, + IN PFILE_OBJECT FileObject); + +NTSTATUS +RfsdUnlockVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdAllowExtendedDasdIo(IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdUserFsRequest (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdMountVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdVerifyVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdIsVolumeMounted (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdDismountVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdFileSystemControl (IN PRFSD_IRP_CONTEXT IrpContext); + + +// +// Init.c +// + +BOOLEAN +RfsdQueryParameters (IN PUNICODE_STRING RegistryPath); + +VOID +DriverUnload (IN PDRIVER_OBJECT DriverObject); + + +// +// Lock.c +// + +NTSTATUS +RfsdLockControl (IN PRFSD_IRP_CONTEXT IrpContext); + +// +// Memory.c +// + +PRFSD_IRP_CONTEXT +RfsdAllocateIrpContext (IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp ); + +VOID +RfsdFreeIrpContext (IN PRFSD_IRP_CONTEXT IrpContext); + + +PRFSD_FCB +RfsdAllocateFcb (IN PRFSD_VCB Vcb, + IN PRFSD_MCB RfsdMcb, + IN PRFSD_INODE Inode ); + +VOID +RfsdFreeFcb (IN PRFSD_FCB Fcb); + +PRFSD_CCB +RfsdAllocateCcb (VOID); + +VOID +RfsdFreeMcb (IN PRFSD_MCB Mcb); + +PRFSD_FCB +RfsdCreateFcbFromMcb(PRFSD_VCB Vcb, PRFSD_MCB Mcb); + +VOID +RfsdFreeCcb (IN PRFSD_CCB Ccb); + +PRFSD_MCB +RfsdAllocateMcb ( PRFSD_VCB, + PUNICODE_STRING FileName, + ULONG FileAttr); + +PRFSD_MCB +RfsdSearchMcbTree( PRFSD_VCB Vcb, + PRFSD_MCB RfsdMcb, + PRFSD_KEY_IN_MEMORY Key); + +PRFSD_MCB +RfsdSearchMcb( PRFSD_VCB Vcb, PRFSD_MCB Parent, + PUNICODE_STRING FileName); + +BOOLEAN +RfsdGetFullFileName( PRFSD_MCB Mcb, + PUNICODE_STRING FileName); + +VOID +RfsdRefreshMcb(PRFSD_VCB Vcb, PRFSD_MCB Mcb); + +VOID +RfsdAddMcbNode( PRFSD_VCB Vcb, + PRFSD_MCB Parent, + PRFSD_MCB Child ); + +BOOLEAN +RfsdDeleteMcbNode( + PRFSD_VCB Vcb, + PRFSD_MCB McbTree, + PRFSD_MCB RfsdMcb); + +VOID +RfsdFreeMcbTree(PRFSD_MCB McbTree); + +#if DISABLED +BOOLEAN +RfsdCheckSetBlock( PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, ULONG Block); +#endif + +#if DISABLED +BOOLEAN +RfsdCheckBitmapConsistency( PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb); +#endif + +VOID +RfsdInsertVcb(PRFSD_VCB Vcb); + +VOID +RfsdRemoveVcb(PRFSD_VCB Vcb); + +NTSTATUS +RfsdInitializeVcb( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_SUPER_BLOCK RfsdSb, + PDEVICE_OBJECT TargetDevice, + PDEVICE_OBJECT VolumeDevice, + PVPB Vpb ); + +VOID +RfsdFreeVcb (IN PRFSD_VCB Vcb ); + + +VOID +RfsdRepinBcb ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PBCB Bcb ); + +VOID +RfsdUnpinRepinnedBcbs ( + IN PRFSD_IRP_CONTEXT IrpContext); + + +NTSTATUS +RfsdCompleteIrpContext ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN NTSTATUS Status ); + +VOID +RfsdSyncUninitializeCacheMap ( + IN PFILE_OBJECT FileObject ); + +// +// Misc.c +// + +/** Returns the length of a string (not including a terminating null), or MaximumLength if no terminator is found within MaximumLength characters. */ +static inline USHORT RfsdStringLength(PUCHAR buffer, USHORT MaximumLength) +{ + USHORT i = 0; + while ((buffer[i] != '\0') && (i < MaximumLength)) { i++; } + return i; +} + +ULONG +RfsdLog2(ULONG Value); + +LARGE_INTEGER +RfsdSysTime (IN ULONG i_time); + +ULONG +RfsdInodeTime (IN LARGE_INTEGER SysTime); + +ULONG +RfsdOEMToUnicodeSize( + IN PANSI_STRING Oem + ); + +NTSTATUS +RfsdOEMToUnicode( + IN OUT PUNICODE_STRING Oem, + IN POEM_STRING Unicode + ); + +ULONG +RfsdUnicodeToOEMSize( + IN PUNICODE_STRING Unicode + ); + +NTSTATUS +RfsdUnicodeToOEM ( + IN OUT POEM_STRING Oem, + IN PUNICODE_STRING Unicode + ); + +// +// nls/nls_rtl.c +// + +int +RfsdLoadAllNls(); + +VOID +RfsdUnloadAllNls(); + +// +// Pnp.c +// + +NTSTATUS +RfsdPnp(IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdPnpQueryRemove( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb ); + +NTSTATUS +RfsdPnpRemove( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb ); + +NTSTATUS +RfsdPnpCancelRemove( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb ); + +NTSTATUS +RfsdPnpSurpriseRemove( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb ); + + +// +// Read.c +// + +BOOLEAN +RfsdCopyRead( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus ); + + +NTSTATUS +RfsdReadInode ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, + IN PRFSD_INODE Inode, + IN ULONGLONG Offset, + IN PVOID Buffer, + IN ULONG Size, + OUT PULONG dwReturn + ); + +NTSTATUS +RfsdRead (IN PRFSD_IRP_CONTEXT IrpContext); + +// +// Shutdown.c +// + +NTSTATUS +RfsdShutDown (IN PRFSD_IRP_CONTEXT IrpContext); + +// +// Volinfo.c +// + +NTSTATUS +RfsdQueryVolumeInformation (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdSetVolumeInformation (IN PRFSD_IRP_CONTEXT IrpContext); + + +// +// Write.c +// +#if 0 +NTSTATUS +RfsdWriteInode ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG InodeNo, + IN PRFSD_INODE Inode, + IN ULONGLONG Offset, + IN PVOID Buffer, + IN ULONG Size, + IN BOOLEAN bWriteToDisk, + OUT PULONG dwReturn + ); + +VOID +RfsdStartFloppyFlushDpc ( + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + PFILE_OBJECT FileObject ); + +BOOLEAN +RfsdZeroHoles ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PFILE_OBJECT FileObject, + IN LONGLONG Offset, + IN LONGLONG Count ); + +NTSTATUS +RfsdWrite (IN PRFSD_IRP_CONTEXT IrpContext); +#endif Added: vendor/rfsd/current/RFSD/RFSD/read.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/read.c?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/read.c (added) +++ vendor/rfsd/current/RFSD/RFSD/read.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,955 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: read.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +NTSTATUS +RfsdReadComplete (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdReadFile (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdReadVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdCompleteIrpContext) +#pragma alloc_text(PAGE, RfsdCopyRead) +#pragma alloc_text(PAGE, RfsdRead) +#pragma alloc_text(PAGE, RfsdReadVolume) +#pragma alloc_text(PAGE, RfsdReadInode) +#pragma alloc_text(PAGE, RfsdReadFile) +#pragma alloc_text(PAGE, RfsdReadComplete) + +#endif + +/* FUNCTIONS *************************************************************/ + + +/** Proxy to CcCopyRead, which simply asserts the success of the IoStatus. */ +BOOLEAN +RfsdCopyRead( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus + ) +{ + BOOLEAN bRet; + bRet= CcCopyRead(FileObject, + FileOffset, + Length, + Wait, + Buffer, + IoStatus ); + + if (bRet) { + ASSERT(NT_SUCCESS(IoStatus->Status)); + } + + return bRet; +/* + PVOID Bcb = NULL; + PVOID Buf = NULL; + + if (CcMapData( FileObject, + FileOffset, + Length, + Wait, + &Bcb, + &Buf )) { + RtlCopyMemory(Buffer, Buf, Length); + IoStatus->Status = STATUS_SUCCESS; + IoStatus->Information = Length; + CcUnpinData(Bcb); + return TRUE; + + } else { + // IoStatus->Status = STATUS_ + return FALSE; + } +*/ +} + +NTSTATUS +RfsdReadVolume (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_VCB Vcb; + PRFSD_CCB Ccb; + PRFSD_FCBVCB FcbOrVcb; + PFILE_OBJECT FileObject; + + PDEVICE_OBJECT DeviceObject; + + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + + ULONG Length; + LARGE_INTEGER ByteOffset; + + BOOLEAN PagingIo; + BOOLEAN Nocache; + BOOLEAN SynchronousIo; + BOOLEAN MainResourceAcquired = FALSE; + BOOLEAN PagingIoResourceAcquired = FALSE; + + PUCHAR Buffer = NULL; + PRFSD_BDL rfsd_bdl = NULL; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + FileObject = IrpContext->FileObject; + + FcbOrVcb = (PRFSD_FCBVCB) FileObject->FsContext; + + ASSERT(FcbOrVcb); + + if (!(FcbOrVcb->Identifier.Type == RFSDVCB && (PVOID)FcbOrVcb == (PVOID)Vcb)) { + + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + Irp = IrpContext->Irp; + + Irp->IoStatus.Information = 0; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + Length = IoStackLocation->Parameters.Read.Length; + ByteOffset = IoStackLocation->Parameters.Read.ByteOffset; + + PagingIo = (Irp->Flags & IRP_PAGING_IO ? TRUE : FALSE); + Nocache = (Irp->Flags & IRP_NOCACHE ? TRUE : FALSE); + SynchronousIo = (FileObject->Flags & FO_SYNCHRONOUS_IO ? TRUE : FALSE); + + if (Length == 0) { + + Irp->IoStatus.Information = 0; + Status = STATUS_SUCCESS; + __leave; + } + + if (Ccb != NULL) { + + if(!IsFlagOn(Ccb->Flags, CCB_ALLOW_EXTENDED_DASD_IO)) { + if (ByteOffset.QuadPart + Length > Vcb->Header.FileSize.QuadPart) { + Length = (ULONG)(Vcb->Header.FileSize.QuadPart - ByteOffset.QuadPart); + } + } + + { + RFSD_BDL BlockArray; + + if ((ByteOffset.LowPart & (SECTOR_SIZE - 1)) || + (Length & (SECTOR_SIZE - 1)) ) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoReadAccess ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + BlockArray.Irp = NULL; + BlockArray.Lba = ByteOffset.QuadPart;; + BlockArray.Offset = 0; + BlockArray.Length = Length; + + Status = RfsdReadWriteBlocks(IrpContext, + Vcb, + &BlockArray, + Length, + 1, + FALSE ); + Irp = IrpContext->Irp; + + __leave; + } + } + + if (Nocache && + ( (ByteOffset.LowPart & (SECTOR_SIZE - 1)) || + (Length & (SECTOR_SIZE - 1)) )) { + DbgBreak(); + + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_DPC)) { + ClearFlag(IrpContext->MinorFunction, IRP_MN_DPC); + Status = STATUS_PENDING; + __leave; + } + + if (!PagingIo) { + if (!ExAcquireResourceSharedLite( + &Vcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + MainResourceAcquired = TRUE; + + } else { + + if (!ExAcquireResourceSharedLite( + &Vcb->PagingIoResource, + IrpContext->IsSynchronous )) + { + Status = STATUS_PENDING; + __leave; + } + + PagingIoResourceAcquired = TRUE; + } + + + if (ByteOffset.QuadPart >= + Vcb->PartitionInformation.PartitionLength.QuadPart ) { + Irp->IoStatus.Information = 0; + Status = STATUS_END_OF_FILE; + __leave; + } + + if (!Nocache) { + + if ((ByteOffset.QuadPart + Length) > + Vcb->PartitionInformation.PartitionLength.QuadPart ){ + Length = (ULONG) ( + Vcb->PartitionInformation.PartitionLength.QuadPart - + ByteOffset.QuadPart); + Length &= ~((ULONG)SECTOR_SIZE - 1); + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_MDL)) { + + CcMdlRead( + Vcb->StreamObj, + &ByteOffset, + Length, + &Irp->MdlAddress, + &Irp->IoStatus ); + + Status = Irp->IoStatus.Status; + + } else { + + Buffer = RfsdGetUserBuffer(Irp); + + if (Buffer == NULL) { + DbgBreak(); + Status = STATUS_INVALID_USER_BUFFER; + __leave; + } + + if (!CcCopyRead( + Vcb->StreamObj, + (PLARGE_INTEGER)&ByteOffset, + Length, + IrpContext->IsSynchronous, + Buffer, + &Irp->IoStatus )) { + Status = STATUS_PENDING; + __leave; + } + + Status = Irp->IoStatus.Status; + } + + } else { + + if ((ByteOffset.QuadPart + Length) > + Vcb->PartitionInformation.PartitionLength.QuadPart ) { + Length = (ULONG) ( + Vcb->PartitionInformation.PartitionLength.QuadPart - + ByteOffset.QuadPart); + + Length &= ~((ULONG)SECTOR_SIZE - 1); + } + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoWriteAccess ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + +#if DBG + Buffer = RfsdGetUserBuffer(Irp); +#endif + rfsd_bdl = ExAllocatePool(PagedPool, sizeof(RFSD_BDL)); + + if (!rfsd_bdl) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + rfsd_bdl->Irp = NULL; + rfsd_bdl->Lba = ByteOffset.QuadPart; + rfsd_bdl->Length = Length; + rfsd_bdl->Offset = 0; + + Status = RfsdReadWriteBlocks(IrpContext, + Vcb, + rfsd_bdl, + Length, + 1, + FALSE ); + + if (NT_SUCCESS(Status)) { + Irp->IoStatus.Information = Length; + } + + Irp = IrpContext->Irp; + + if (!Irp) + __leave; + } + + } __finally { + + if (PagingIoResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->PagingIoResource, + ExGetCurrentResourceThread()); + } + + if (MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (rfsd_bdl) + ExFreePool(rfsd_bdl); + + if (!IrpContext->ExceptionInProgress) { + + if (Irp) { + + if (Status == STATUS_PENDING && + !IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED)) { + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoWriteAccess ); + + if (NT_SUCCESS(Status)) { + Status = RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + + } else { + + if (NT_SUCCESS(Status)) { + + if (!PagingIo) { + + if (SynchronousIo) { + + FileObject->CurrentByteOffset.QuadPart = + ByteOffset.QuadPart + Irp->IoStatus.Information; + } + + FileObject->Flags |= FO_FILE_FAST_IO_READ; + } + } + + RfsdCompleteIrpContext(IrpContext, Status);; + } + + } else { + RfsdFreeIrpContext(IrpContext); + } + } + } + + return Status; +} + + +// [mark] read some goop [from the file pt'd to by inode -- from whatever blocks buildbdl makes] into the buffer +NTSTATUS +RfsdReadInode ( + IN PRFSD_IRP_CONTEXT IrpContext, // [may be null] + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, // Key that identifies the data on disk to be read. This is simply forwarded through to BuildBDL. (NOTE: IN THIS CASE, THE OFFSET AND TYPE FIELDS MATTER) + IN PRFSD_INODE Inode, // a filled Inode / stat data structure + IN ULONGLONG Offset, // User's requested offset to read within the file (relative to the file) + IN OUT PVOID Buffer, // buffer to read out to + IN ULONG Size, // size of destination buffer + OUT PULONG dwRet ) // some kind of size [probably bytes read?] +{ + PRFSD_BDL Bdl = NULL; + ULONG blocks, i; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + IO_STATUS_BLOCK IoStatus; + + ULONGLONG FileSize; + ULONGLONG AllocSize; + + if (dwRet) { + *dwRet = 0; + } + + // + // Calculate the inode size + // + + FileSize = (ULONGLONG) Inode->i_size; + + // TODO: temporary hack to get correct alloc size for dir tails... but i doubt 8 works in all cases :-) [what i should really be using is the size of the direct item in the block header!] + // AllocSize = CEILING_ALIGNED(FileSize, (ULONGLONG)Vcb->BlockSize); + // AllocSize = CEILING_ALIGNED(FileSize, (ULONGLONG) 8); + AllocSize = CEILING_ALIGNED(FileSize, (ULONGLONG) 1); // temp hack to ensure that i'll read out EXACTLY the # of bytes he requested + + // + // Check inputed parameters: Offset / Size + // + + if (Offset >= AllocSize) { + + RfsdPrint((DBG_ERROR, "RfsdReadInode: beyond the file range.\n")); + return STATUS_SUCCESS; + } + + if (Offset + Size > AllocSize) { + + Size = (ULONG)(AllocSize - Offset); + } + + +//----------------------------- + + // + // Build the scatterred block ranges to be read + // + + Status = RfsdBuildBDL2( + Vcb, Key, Inode, + &(blocks), &(Bdl) + ); + + if (!NT_SUCCESS(Status)) { + goto errorout; + } + + if (blocks <= 0) { + Status = STATUS_SUCCESS; + goto errorout; + } + + + { + ULONGLONG bufferPos = 0; + + for(i = 0; i < blocks; i++) { + if ( // The block is needed for the user's requested contents + // (The user's requested offset lies within the block, or the block's start is within the user's requested range) + ( (Offset >= Bdl[i].Offset) && (Offset < (Bdl[i].Offset + Bdl[i].Length)) ) || // The user's offset is within the block's range + ( (Bdl[i].Offset >= Offset) && (Bdl[i].Offset < (Offset + Size)) ) // The block's offset is within the user's range + ) + { + ULONGLONG offsetIntoBlock = max(Offset - Bdl[i].Offset, 0); + ULONGLONG offsetFromDisk = Bdl[i].Lba + offsetIntoBlock; + ULONGLONG bufferPos = (Bdl[i].Offset + offsetIntoBlock) - Offset; + ULONGLONG lengthToRead = min(Size - bufferPos, Bdl[i].Length - offsetIntoBlock); + + ASSERT(bufferPos < Size); + + IoStatus.Information = 0; + + RfsdCopyRead( + Vcb->StreamObj, + (PLARGE_INTEGER) (&offsetFromDisk), // offset (relative to partition) + (ULONG) lengthToRead, // length to read + PIN_WAIT, // + (PVOID)((PUCHAR)Buffer + bufferPos), // buffer to read into + &IoStatus ); + + Status = IoStatus.Status; + } + } + + } + +errorout: + + if (Bdl) ExFreePool(Bdl); + + if (NT_SUCCESS(Status)) { + + if (dwRet) *dwRet = Size; + } + + return Status; +} + + +NTSTATUS +RfsdReadFile(IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_VCB Vcb; + PRFSD_FCB Fcb; + PRFSD_CCB Ccb; + PFILE_OBJECT FileObject; + PFILE_OBJECT CacheObject; + + PDEVICE_OBJECT DeviceObject; + + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + + ULONG Length; + ULONG ReturnedLength; + LARGE_INTEGER ByteOffset; + + BOOLEAN PagingIo; + BOOLEAN Nocache; + BOOLEAN SynchronousIo; + BOOLEAN MainResourceAcquired = FALSE; + BOOLEAN PagingIoResourceAcquired = FALSE; + + PUCHAR Buffer; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + Length = IoStackLocation->Parameters.Read.Length; + ByteOffset = IoStackLocation->Parameters.Read.ByteOffset; + + DbgPrint("$$$ " __FUNCTION__ " on key: %x,%xh to read %i bytes at the offset %xh in the file\n", + Fcb->RfsdMcb->Key.k_dir_id, Fcb->RfsdMcb->Key.k_objectid, + Length, ByteOffset.QuadPart); + + PagingIo = (Irp->Flags & IRP_PAGING_IO ? TRUE : FALSE); + Nocache = (Irp->Flags & IRP_NOCACHE ? TRUE : FALSE); + SynchronousIo = (FileObject->Flags & FO_SYNCHRONOUS_IO ? TRUE : FALSE); + +/* + if (IsFlagOn(Fcb->Flags, FCB_FILE_DELETED)) { + Status = STATUS_FILE_DELETED; + __leave; + } + + if (IsFlagOn(Fcb->Flags, FCB_DELETE_PENDING)) { + Status = STATUS_DELETE_PENDING; + __leave; + } +*/ + + if (Length == 0) { + Irp->IoStatus.Information = 0; + Status = STATUS_SUCCESS; + __leave; + } + + if (Nocache && + (ByteOffset.LowPart & (SECTOR_SIZE - 1) || + Length & (SECTOR_SIZE - 1))) { + Status = STATUS_INVALID_PARAMETER; + DbgBreak(); + __leave; + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_DPC)) { + ClearFlag(IrpContext->MinorFunction, IRP_MN_DPC); + Status = STATUS_PENDING; + DbgBreak(); + __leave; + } + + if (!PagingIo) { + if (!ExAcquireResourceSharedLite( + &Fcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + MainResourceAcquired = TRUE; + + if (!FsRtlCheckLockForReadAccess( + &Fcb->FileLockAnchor, + Irp )) { + Status = STATUS_FILE_LOCK_CONFLICT; + __leave; + } + } else { + if (!ExAcquireResourceSharedLite( + &Fcb->PagingIoResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + PagingIoResourceAcquired = TRUE; + } + + if (!Nocache) { + // Attempt cached access... + + if ((ByteOffset.QuadPart + (LONGLONG)Length) > + Fcb->Header.FileSize.QuadPart ) { + if (ByteOffset.QuadPart >= (Fcb->Header.FileSize.QuadPart)) { + Irp->IoStatus.Information = 0; + Status = STATUS_END_OF_FILE; + __leave; + } + + Length = + (ULONG)(Fcb->Header.FileSize.QuadPart - ByteOffset.QuadPart); + + } + + ReturnedLength = Length; + + if (IsDirectory(Fcb)) { + __leave; + } + + { + if (FileObject->PrivateCacheMap == NULL) { + CcInitializeCacheMap( + FileObject, + (PCC_FILE_SIZES)(&Fcb->Header.AllocationSize), + FALSE, + &RfsdGlobal->CacheManagerCallbacks, + Fcb ); + } + + CacheObject = FileObject; + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_MDL)) { + CcMdlRead( + CacheObject, + (&ByteOffset), + Length, + &Irp->MdlAddress, + &Irp->IoStatus ); + + Status = Irp->IoStatus.Status; + + } else { + Buffer = RfsdGetUserBuffer(Irp); + + if (Buffer == NULL) { + Status = STATUS_INVALID_USER_BUFFER; + DbgBreak(); + __leave; + } + + if (!CcCopyRead( + CacheObject, // the file object (representing the open operation performed by the thread) + (PLARGE_INTEGER)&ByteOffset, // starting offset IN THE FILE, from where the read should be performed + Length, // number of bytes requested in the read operation + IrpContext->IsSynchronous, + Buffer, // < buffer to read the contents to + &Irp->IoStatus )) { + Status = STATUS_PENDING; + DbgBreak(); + __leave; + } + + Status = Irp->IoStatus.Status; + } + + } else { + // Attempt access without the cache... + + if ((ByteOffset.QuadPart + (LONGLONG)Length) > Fcb->Header.AllocationSize.QuadPart) { + + if (ByteOffset.QuadPart >= Fcb->Header.AllocationSize.QuadPart) { + Irp->IoStatus.Information = 0; + Status = STATUS_END_OF_FILE; + DbgBreak(); + __leave; + } + + Length = + (ULONG)(Fcb->Header.AllocationSize.QuadPart- ByteOffset.QuadPart); + } + + ReturnedLength = Length; + + /* lock the user buffer into MDL and make them paged-in */ + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoWriteAccess ); + + if (NT_SUCCESS(Status)) { + + /* Zero the total buffer */ + PVOID SystemVA = RfsdGetUserBuffer(IrpContext->Irp); + if (SystemVA) { + + RtlZeroMemory(SystemVA, Length); + + RfsdPrint((DBG_INFO, "RfsdReadFile: Zero read buffer: Offset=%I64xh Size=%xh ... \n", + ByteOffset.QuadPart, Length)); + } + + } else { + __leave; + } + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = Length; + + + Status = RfsdReadInode( + IrpContext, + Vcb, + &(Fcb->RfsdMcb->Key), + Fcb->Inode, + ByteOffset.QuadPart, + RfsdGetUserBuffer(IrpContext->Irp), // NOTE: Ext2fsd just passes NULL for the buffer, and relies on the initial cache call to retrieve tha data. We'll instead be explicitly putting it into the user's buffer, via a much different mechanism. + Length, + &ReturnedLength); + + Irp = IrpContext->Irp; + + } + + } __finally { + + if (PagingIoResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->PagingIoResource, + ExGetCurrentResourceThread()); + } + + if (MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (!IrpContext->ExceptionInProgress) { + if (Irp) { + if (Status == STATUS_PENDING) { + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoWriteAccess ); + + if (NT_SUCCESS(Status)) { + Status = RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } else { + if (NT_SUCCESS(Status)) { + if (!PagingIo) { + if (SynchronousIo) { + FileObject->CurrentByteOffset.QuadPart = + ByteOffset.QuadPart + Irp->IoStatus.Information; + } + + FileObject->Flags |= FO_FILE_FAST_IO_READ; + } + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } else { + RfsdFreeIrpContext(IrpContext); + } + } + } + + return Status; + +} + +NTSTATUS +RfsdReadComplete (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PFILE_OBJECT FileObject; + PIRP Irp; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + FileObject = IrpContext->FileObject; + + Irp = IrpContext->Irp; + + CcMdlReadComplete(FileObject, Irp->MdlAddress); + + Irp->MdlAddress = NULL; + + Status = STATUS_SUCCESS; + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +NTSTATUS +RfsdRead (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + PRFSD_VCB Vcb; + PRFSD_FCBVCB FcbOrVcb; + PDEVICE_OBJECT DeviceObject; + PFILE_OBJECT FileObject; + BOOLEAN bCompleteRequest; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + __try { + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_COMPLETE)) { + // Caller wants to tell the Cache Manager that a previously allocated MDL can be freed. + Status = RfsdReadComplete(IrpContext); + bCompleteRequest = FALSE; + + } else { + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + bCompleteRequest = TRUE; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + if (Vcb->Identifier.Type != RFSDVCB || + Vcb->Identifier.Size != sizeof(RFSD_VCB) ) { + Status = STATUS_INVALID_DEVICE_REQUEST; + bCompleteRequest = TRUE; + + __leave; + } + + if (IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) { + + Status = STATUS_TOO_LATE; + bCompleteRequest = TRUE; + __leave; + } + + FileObject = IrpContext->FileObject; + + FcbOrVcb = (PRFSD_FCBVCB) FileObject->FsContext; + + if (FcbOrVcb->Identifier.Type == RFSDVCB) { + Status = RfsdReadVolume(IrpContext); + bCompleteRequest = FALSE; + } else if (FcbOrVcb->Identifier.Type == RFSDFCB) { + Status = RfsdReadFile(IrpContext); + bCompleteRequest = FALSE; + } else { + RfsdPrint((DBG_ERROR, "RfsdRead: INVALID PARAMETER ... \n")); + DbgBreak(); + + Status = STATUS_INVALID_PARAMETER; + bCompleteRequest = TRUE; + } + } + + } __finally { + if (bCompleteRequest) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/reiserfs.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/reiserfs.h?…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/reiserfs.h (added) +++ vendor/rfsd/current/RFSD/RFSD/reiserfs.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,527 @@ +#ifndef __RFSD_REISER_FS_H__ +#define __RFSD_REISER_FS_H__ + +#include <linux/types.h> + +#ifdef __GCC__ + #define __PACKED __PACKED +#else + #define __PACKED +#endif + +/***************************************************************************/ +/* SUPER BLOCK */ +/***************************************************************************/ + +/* + * Structure of super block on disk, a version of which in RAM is often accessed as REISERFS_SB(s)->s_rs + * the version in RAM is part of a larger structure containing fields never written to disk. + */ +#define UNSET_HASH 0 // read_super will guess about, what hash names + // in directories were sorted with +#define TEA_HASH 1 +#define YURA_HASH 2 +#define R5_HASH 3 +#define DEFAULT_HASH R5_HASH + + +struct journal_params { + // Block number of the block containing the first journal node. + __u32 jp_journal_1st_block; /* where does journal start from on its device */ + + // Journal device number (?? for if the journal is on a seperate drive ??) + __u32 jp_journal_dev; /* journal device st_rdev */ + + // Original journal size. (Needed when using partition on systems w/ different default journal sizes). + __u32 jp_journal_size; /* size of the journal */ + + __u32 jp_journal_trans_max; /* max number of blocks in a transaction. */ + __u32 jp_journal_magic; /* random value made on fs creation (this was sb_journal_block_count) */ + __u32 jp_journal_max_batch; /* max number of blocks to batch into a trans */ + __u32 jp_journal_max_commit_age; /* in seconds, how old can an async commit be */ + __u32 jp_journal_max_trans_age; /* in seconds, how old can a transaction be */ +}; + +/* this is the super from 3.5.X, where X >= 10 */ +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct reiserfs_super_block_v1 +{ + // The number of blocks in the partition + __u32 s_blocks_count; /* blocks count */ //[mark] was _s_blocks_count + + // The number of free blocks in the partition + __u32 s_free_blocks_count; /* free blocks count */ //[mark] was _s_free_blocks + + // Block number of the block containing the root node + __u32 s_root_block; /* root block number */ + + + struct journal_params s_journal; + + // The size (in bytes) of a block + __u16 s_blocksize; /* block size */ + + __u16 s_oid_maxsize; /* max size of object id array, see get_objectid() commentary */ + __u16 s_oid_cursize; /* current size of object id array */ + __u16 s_umount_state; /* this is set to 1 when filesystem was umounted, to 2 - when not */ + char s_magic[10]; /* reiserfs magic string indicates that + * file system is reiserfs: + * "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs" */ + + // State of the partition: valid(1), error (2) + __u16 s_fs_state; /* it is set to used by fsck to mark which phase of rebuilding is done */ + + __u32 s_hash_function_code; /* indicate, what hash function is being use + * to sort names in a directory*/ + __u16 s_tree_height; /* height of disk tree */ + __u16 s_bmap_nr; /* amount of bitmap blocks needed to address + * each block of file system */ + + // The reiserfs version number + __u16 s_version; /* this field is only reliable on filesystem + * with non-standard journal */ + __u16 s_reserved_for_journal; /* size in blocks of journal area on main + * device, we need to keep after + * making fs with non-standard journal */ +} __PACKED; +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +#define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1)) + +/* this is the on disk super block */ +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct reiserfs_super_block +{ + struct reiserfs_super_block_v1 s_v1; + + // Number of the current inode generation (a counter that is increased every time the tree gets re-balanced). + __u32 s_inode_generation; + + __u32 s_flags; /* Right now used only by inode-attributes, if enabled */ + unsigned char s_uuid[16]; /* filesystem unique identifier */ + unsigned char s_label[16]; /* filesystem volume label */ + char s_unused[88] ; /* zero filled by mkreiserfs and + * reiserfs_convert_objectid_map_v1() + * so any additions must be updated + * there as well. */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +#define SB_SIZE (sizeof(struct reiserfs_super_block)) + +#define REISERFS_VERSION_1 0 +#define REISERFS_VERSION_2 2 + +// ... [ommissions] + + + /* used by gcc */ +#define REISERFS_SUPER_MAGIC 0x52654973 + /* used by file system utilities that + look at the superblock, etc. */ +#define REISERFS_SUPER_MAGIC_STRING "ReIsErFs" +#define REISER2FS_SUPER_MAGIC_STRING "ReIsEr2Fs" +#define REISER2FS_JR_SUPER_MAGIC_STRING "ReIsEr3Fs" + +/* ReiserFS leaves the first 64k unused, so that partition labels have + enough space. If someone wants to write a fancy bootloader that + needs more than 64k, let us know, and this will be increased in size. + This number must be larger than than the largest block size on any + platform, or code will break. -Hans */ +#define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) +#define REISERFS_FIRST_BLOCK unused_define +#define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES + +/* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ +#define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) + + + +/***************************************************************************/ +/* STAT DATA */ +/***************************************************************************/ + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +// +// old stat data is 32 bytes long. We are going to distinguish new one by +// different size +// +struct stat_data_v1 +{ + __u16 sd_mode; /* file type, permissions */ + __u16 sd_nlink; /* number of hard links */ + __u16 sd_uid; /* owner */ + __u16 sd_gid; /* group */ + __u32 sd_size; /* file size (in bytes) */ + __u32 sd_atime; /* time of last access */ + __u32 sd_mtime; /* time file was last modified */ + __u32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ + union { + __u32 sd_rdev; + __u32 sd_blocks; /* number of blocks file uses */ //[mark]this is the one filled.. + } __PACKED u; + __u32 sd_first_direct_byte; /* first byte of file which is stored + in a direct item: except that if it + equals 1 it is a symlink and if it + equals ~(__u32)0 there is no + direct item. The existence of this + field really grates on me. Let's + replace it with a macro based on + sd_size and our tail suppression + policy. Someday. -Hans */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +/* inode flags stored in sd_attrs (nee sd_reserved) */ + +/* we want common flags to have the same values as in ext2, + so chattr(1) will work without problems */ +#define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL +#define REISERFS_APPEND_FL EXT2_APPEND_FL +#define REISERFS_SYNC_FL EXT2_SYNC_FL +#define REISERFS_NOATIME_FL EXT2_NOATIME_FL +#define REISERFS_NODUMP_FL EXT2_NODUMP_FL +#define REISERFS_SECRM_FL EXT2_SECRM_FL +#define REISERFS_UNRM_FL EXT2_UNRM_FL +#define REISERFS_COMPR_FL EXT2_COMPR_FL +#define REISERFS_NOTAIL_FL EXT2_NOTAIL_FL + +/* persistent flags that file inherits from the parent directory */ +#define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ + REISERFS_SYNC_FL | \ + REISERFS_NOATIME_FL | \ + REISERFS_NODUMP_FL | \ + REISERFS_SECRM_FL | \ + REISERFS_COMPR_FL | \ + REISERFS_NOTAIL_FL ) + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* Stat Data on disk (reiserfs version of UFS disk inode minus the + address blocks) */ +struct stat_data { + __u16 i_mode; /* file type, permissions */ // The low 9 bits (3 octals) contain world/group/user permissions. The next 3 bits (from lower to higher) are the sticky bit, the set GID bit, and the set UID bit. The high 4 bits are the file type (as defined in stat.h: socket, symlink, regular, block dev, directory, char device, fifo) + __u16 sd_attrs; /* persistent inode flags */ + __u32 i_links_count; /* number of hard links */ //[mark] was sd_nlink + __u64 i_size; /* file size */ + __u32 i_uid; /* owner */ + __u32 i_gid; /* group */ + __u32 i_atime; /* time of last access */ + __u32 i_mtime; /* time file was last modified */ + __u32 i_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ + __u32 sd_blocks; + union { + __u32 sd_rdev; + __u32 i_generation; + //__u32 sd_first_direct_byte; + /* first byte of file which is stored in a + direct item: except that if it equals 1 + it is a symlink and if it equals + ~(__u32)0 there is no direct item. The + existence of this field really grates + on me. Let's replace it with a macro + based on sd_size and our tail + suppression policy? */ + } __PACKED u; +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +// +// this is 44 bytes long +// +#define SD_SIZE (sizeof(struct stat_data)) +#define SD_V2_SIZE SD_SIZE + + + + +/* + * values for s_umount_state field + */ +#define REISERFS_VALID_FS 1 +#define REISERFS_ERROR_FS 2 + +// +// there are 5 item types currently +// + +#define RFSD_KEY_TYPE_v1_STAT_DATA 0 +#define RFSD_KEY_TYPE_v1_INDIRECT 0xFFFFFFFe +#define RFSD_KEY_TYPE_v1_DIRECT 0xFFFFFFFF +#define RFSD_KEY_TYPE_v1_DIRENTRY 500 + +#define RFSD_KEY_TYPE_v2_STAT_DATA 0 +#define RFSD_KEY_TYPE_v2_INDIRECT 1 +#define RFSD_KEY_TYPE_v2_DIRECT 2 +#define RFSD_KEY_TYPE_v2_DIRENTRY 3 + + + + + +/***************************************************************************/ +/* KEY & ITEM HEAD */ +/***************************************************************************/ + +typedef struct reiserfs_cpu_key +{ + __u32 k_dir_id; + __u32 k_objectid; + __u64 k_offset; + __u32 k_type; +}; + +// +// directories use this key as well as old files +// + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct offset_v1 { + __u32 k_offset; + __u32 k_uniqueness; +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct offset_v2 { +#ifdef __LITTLE_ENDIAN + /* little endian version */ + __u64 k_offset:60; + __u64 k_type: 4; +#else + /* big endian version */ + __u64 k_type: 4; + __u64 k_offset:60; +#endif +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +// ... + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* Key of an item determines its location in the S+tree, and + is composed of 4 components */ +struct reiserfs_key { + __u32 k_dir_id; /* packing locality: by default parent directory object id */ + __u32 k_objectid; /* object identifier */ + union { + struct offset_v1 k_offset_v1; + struct offset_v2 k_offset_v2; + } u; +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + +/// ... + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +/* Everything in the filesystem is stored as a set of items. The + item head contains the key of the item, its free space (for + indirect items) and specifies the location of the item itself + within the block. */ +struct item_head +{ + /* Everything in the tree is found by searching for it based on + * its key.*/ + struct reiserfs_key ih_key; + union { + /* The free space in the last unformatted node of an + indirect item if this is an indirect item. This + equals 0xFFFF iff this is a direct item or stat data + item. Note that the key, not this field, is used to + determine the item type, and thus which field this + union contains. */ + __u16 ih_free_space_reserved; + /* Iff this is a directory item, this field equals the + number of directory entries in the directory item. */ + __u16 ih_entry_count; + } u; + __u16 ih_item_len; /* total size of the item body */ + __u16 ih_item_location; /* an offset to the item body within the block */ + __u16 ih_version; /* 0 for all old items, 2 for new + ones. Highest bit is set by fsck + temporary, cleaned after all + done */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + +/// ... + +/* object identifier for root dir */ +#define REISERFS_ROOT_OBJECTID 2 +#define REISERFS_ROOT_PARENT_OBJECTID 1 + +/// ... + + +/* + * Picture represents a leaf of the S+tree + * ______________________________________________________ + * | | Array of | | | + * |Block | Object-Item | F r e e | Objects- | + * | head | Headers | S p a c e | Items | + * |______|_______________|___________________|___________| + */ + +/* Header of a disk block. More precisely, header of a formatted leaf + or internal node, and not the header of an unformatted node. */ + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct block_head { + __u16 blk_level; /* Level of a block in the tree. */ + __u16 blk_nr_item; /* Number of keys/items in a block. */ + __u16 blk_free_space; /* Block free space in bytes. */ + __u16 blk_reserved; + /* dump this in v4/planA */ + struct reiserfs_key blk_right_delim_key; /* kept only for compatibility */ +}; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + + + + + + +/***************************************************************************/ +/* DIRECTORY STRUCTURE */ +/***************************************************************************/ +/* + Picture represents the structure of directory items + ________________________________________________ + | Array of | | | | | | + | directory |N-1| N-2 | .... | 1st |0th| + | entry headers | | | | | | + |_______________|___|_____|________|_______|___| + <---- directory entries ------> + + First directory item has k_offset component 1. We store "." and ".." + in one item, always, we never split "." and ".." into differing + items. This makes, among other things, the code for removing + directories simpler. */ + +// ... + +/* + Q: How to get key of object pointed to by entry from entry? + + A: Each directory entry has its header. This header has deh_dir_id and deh_objectid fields, those are key + of object, entry points to */ + +/* NOT IMPLEMENTED: + Directory will someday contain stat data of object */ + + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct reiserfs_de_head +{ + __u32 deh_offset; /* third component of the directory entry key */ + __u32 deh_dir_id; /* objectid of the parent directory of the object, that is referenced by directory entry */ + __u32 deh_objectid; /* objectid of the object, that is referenced by directory entry */ + __u16 deh_location; /* offset of name in the whole item */ + __u16 deh_state; /* whether 1) entry contains stat data (for future), and 2) whether + entry is hidden (unlinked) */ +} __PACKED; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + + + + + +/* + * Picture represents an internal node of the reiserfs tree + * ______________________________________________________ + * | | Array of | Array of | Free | + * |block | keys | pointers | space | + * | head | N | N+1 | | + * |______|_______________|___________________|___________| + */ + +/***************************************************************************/ +/* DISK CHILD */ +/***************************************************************************/ +/* Disk child pointer: The pointer from an internal node of the tree + to a node that is on disk. */ + +#ifndef __GCC__ + #pragma pack(push, 1) +#endif + +struct disk_child { + __u32 dc_block_number; /* Disk child's block number. */ + __u16 dc_size; /* Disk child's used space. */ + __u16 dc_reserved; +}; + +#ifndef __GCC__ + #pragma pack(pop) +#endif + + + + +#endif // header Added: vendor/rfsd/current/RFSD/RFSD/resource.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/resource.h?…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/resource.h (added) +++ vendor/rfsd/current/RFSD/RFSD/resource.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,15 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by rfsdfsd.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 104 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif Added: vendor/rfsd/current/RFSD/RFSD/rfsd.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/rfsd.c?rev=…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/rfsd.c (added) +++ vendor/rfsd/current/RFSD/RFSD/rfsd.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2968 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: Rfsd.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" +// TODO: turn off (turns off warning about returning without return value, so I could easily disable code sections) +#pragma warning(disable : 4716) + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdLoadSuper) +#pragma alloc_text(PAGE, RfsdSaveSuper) + +#pragma alloc_text(PAGE, RfsdLoadGroup) +#pragma alloc_text(PAGE, RfsdSaveGroup) + +#pragma alloc_text(PAGE, RfsdLoadInode) +#pragma alloc_text(PAGE, RfsdSaveInode) + +#pragma alloc_text(PAGE, RfsdLoadBlock) +#pragma alloc_text(PAGE, RfsdSaveBlock) + +#pragma alloc_text(PAGE, RfsdSaveBuffer) + +#pragma alloc_text(PAGE, RfsdGetBlock) +#pragma alloc_text(PAGE, RfsdBlockMap) + +#pragma alloc_text(PAGE, RfsdBuildBDL) +#pragma alloc_text(PAGE, RfsdBuildBDL2) + +#pragma alloc_text(PAGE, RfsdNewBlock) +#pragma alloc_text(PAGE, RfsdFreeBlock) + +#pragma alloc_text(PAGE, RfsdExpandBlock) +#pragma alloc_text(PAGE, RfsdExpandInode) + +#pragma alloc_text(PAGE, RfsdNewInode) +#pragma alloc_text(PAGE, RfsdFreeInode) + +#pragma alloc_text(PAGE, RfsdAddEntry) +#pragma alloc_text(PAGE, RfsdRemoveEntry) + +#pragma alloc_text(PAGE, RfsdTruncateBlock) +#pragma alloc_text(PAGE, RfsdTruncateInode) + +#pragma alloc_text(PAGE, RfsdAddMcbEntry) +#pragma alloc_text(PAGE, RfsdRemoveMcbEntry) +#pragma alloc_text(PAGE, RfsdLookupMcbEntry) + +#pragma alloc_text(PAGE, SuperblockContainsMagicKey) +#pragma alloc_text(PAGE, DetermineOnDiskKeyFormat) +#pragma alloc_text(PAGE, FillInMemoryKey) +#pragma alloc_text(PAGE, CompareShortKeys) +#pragma alloc_text(PAGE, CompareKeysWithoutOffset) +#pragma alloc_text(PAGE, CompareKeys) +#pragma alloc_text(PAGE, NavigateToLeafNode) +#pragma alloc_text(PAGE, _NavigateToLeafNode) +#pragma alloc_text(PAGE, RfsdParseFilesystemTree) + +#endif + +/* FUNCTIONS ***************************************************************/ + +PRFSD_SUPER_BLOCK +RfsdLoadSuper(IN PRFSD_VCB Vcb, + IN BOOLEAN bVerify ) +{ + NTSTATUS Status; + PRFSD_SUPER_BLOCK RfsdSb = NULL; + + RfsdSb = (PRFSD_SUPER_BLOCK) ExAllocatePool( PagedPool, + SUPER_BLOCK_SIZE); + if (!RfsdSb) { + return NULL; + } + + Status = RfsdReadDisk( + Vcb, + (ULONGLONG) SUPER_BLOCK_OFFSET, + SUPER_BLOCK_SIZE, + (PVOID) RfsdSb, + bVerify ); + + if (!NT_SUCCESS(Status)) { + + RfsdPrint((DBG_ERROR, "RfsdReadDisk: Read Block Device error.\n")); + + ExFreePool(RfsdSb); + return NULL; + } + + return RfsdSb; +} + + +BOOLEAN +RfsdSaveSuper( IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb ) +{ +DbgBreakPoint(); +#if DISABLED + LONGLONG Offset; + BOOLEAN bRet; + + Offset = (LONGLONG) SUPER_BLOCK_OFFSET; + + bRet = RfsdSaveBuffer( IrpContext, + Vcb, + Offset, + SUPER_BLOCK_SIZE, + Vcb->SuperBlock ); + + if (IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { + RfsdStartFloppyFlushDpc(Vcb, NULL, NULL); + } + + return bRet; +#endif +} + + +#if DISABLED +BOOLEAN +RfsdLoadGroup(IN PRFSD_VCB Vcb) +{ + ULONG Size; + PVOID Buffer; + LONGLONG Lba; + NTSTATUS Status; + + PRFSD_SUPER_BLOCK sb; + + sb = Vcb->SuperBlock; + + Vcb->BlockSize = RFSD_MIN_BLOCK << sb->s_log_block_size; + Vcb->SectorBits = RfsdLog2(SECTOR_SIZE); + ASSERT(BLOCK_BITS == RfsdLog2(BLOCK_SIZE)); + + Vcb->NumOfGroups = (sb->s_blocks_count - sb->s_first_data_block + + sb->s_blocks_per_group - 1) / sb->s_blocks_per_group; + + Size = sizeof(RFSD_GROUP_DESC) * Vcb->NumOfGroups; + + if (Vcb->BlockSize == RFSD_MIN_BLOCK) { + Lba = (LONGLONG)2 * Vcb->BlockSize; + } + + if (Vcb->BlockSize > RFSD_MIN_BLOCK) { + Lba = (LONGLONG) (Vcb->BlockSize); + } + + if (Lba == 0) { + return FALSE; + } + + Buffer = ExAllocatePool(PagedPool, Size); + if (!Buffer) { + RfsdPrint((DBG_ERROR, "RfsdLoadSuper: no enough memory.\n")); + return FALSE; + } + + RfsdPrint((DBG_USER, "RfsdLoadGroup: Lba=%I64xh Size=%xh\n", Lba, Size)); + + Status = RfsdReadDisk( Vcb, + Lba, + Size, + Buffer, + FALSE ); + + if (!NT_SUCCESS(Status)) { + ExFreePool(Buffer); + Buffer = NULL; + + return FALSE; + } + +/* + bPinned = CcPinRead( + Vcb->StreamObj, + Lba, + Size, + PIN_WAIT, + &(Vcb->GroupDescBcb), + &(Buffer)); + + if (!bPinned) + { + Vcb->GroupDesc = NULL; + return FALSE; + } +*/ + + Vcb->GroupDesc = (PRFSD_GROUP_DESC) Buffer; + + return TRUE; +} + + +BOOLEAN +RfsdSaveGroup( IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG Group ) +{ + LONGLONG Offset; + BOOLEAN bRet; + + if (Vcb->BlockSize == RFSD_MIN_BLOCK) { + + Offset = (LONGLONG) (2 * Vcb->BlockSize); + + } else { + + Offset = (LONGLONG) (Vcb->BlockSize); + } + + Offset += ((LONGLONG) sizeof(struct rfsd_group_desc) * Group); + + bRet = RfsdSaveBuffer( + IrpContext, + Vcb, + Offset, + sizeof(struct rfsd_group_desc), + &(Vcb->GroupDesc[Group]) ); + + if (IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { + RfsdStartFloppyFlushDpc(Vcb, NULL, NULL); + } + + return bRet; +} +#endif + + +/** Reads an inode structure off disk into the Inode object (which has been allocated, but not filled with any data) */ +BOOLEAN +RfsdLoadInode (IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pKey, + IN OUT PRFSD_INODE Inode) +{ + NTSTATUS Status; + + PRFSD_ITEM_HEAD pItemHeader = NULL; + PUCHAR pItemBuffer = NULL; + PUCHAR pBlockBuffer = NULL; + + // Crate the target key for the stat item (stat items always have an offset of 0) + RFSD_KEY_IN_MEMORY TargetKey; + + TargetKey = *pKey; + TargetKey.k_offset = 0x0; + TargetKey.k_type = RFSD_KEY_TYPE_v2_STAT_DATA; + + RfsdPrint((DBG_FUNC, __FUNCTION__ "on %i, %i\n", TargetKey.k_dir_id, TargetKey.k_objectid)); + + //Load the stat data + Status = RfsdLoadItem(Vcb, &TargetKey, + &(pItemHeader), &(pItemBuffer), &(pBlockBuffer), NULL, //< + &CompareKeys + ); + if (!NT_SUCCESS(Status)) + { if (pBlockBuffer) {ExFreePool(pBlockBuffer);} return FALSE; } + + // Copy the item into the inode / stat data structure + RtlCopyMemory(Inode, pItemBuffer, sizeof(RFSD_INODE)); + + // Cleanup + if (pBlockBuffer) + ExFreePool(pBlockBuffer); + + return TRUE; +} + + +BOOLEAN +RfsdSaveInode ( IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG Inode, + IN PRFSD_INODE RfsdInode) +{ +DbgBreak(); +#if DISABLED + LONGLONG Offset = 0; + LARGE_INTEGER CurrentTime; + BOOLEAN bRet; + + KeQuerySystemTime(&CurrentTime); + RfsdInode->i_mtime = RfsdInode->i_atime = + (ULONG)(RfsdInodeTime(CurrentTime)); + + RfsdPrint((DBG_INFO, "RfsdSaveInode: Saving Inode %xh: Mode=%xh Size=%xh\n", + Inode, RfsdInode->i_mode, RfsdInode->i_size)); + + if (!RfsdGetInodeLba(Vcb, Inode, &Offset)) { + RfsdPrint((DBG_ERROR, "RfsdSaveInode: error get inode(%xh)'s addr.\n", Inode)); + return FALSE; + } + + bRet = RfsdSaveBuffer(IrpContext, Vcb, Offset, sizeof(RFSD_INODE), RfsdInode); + + if (IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { + RfsdStartFloppyFlushDpc(Vcb, NULL, NULL); + } + + return bRet; +#endif +} + +/** Just reads a block into a buffer */ +BOOLEAN +RfsdLoadBlock ( + IN PRFSD_VCB Vcb, + IN ULONG dwBlk, // A disk block ptr (a disk block number) + IN OUT PVOID Buffer ) // A buffer, which must be allocated to contain at least Vcb->BlockSize +{ + IO_STATUS_BLOCK IoStatus; + + LONGLONG Offset; + Offset = (LONGLONG) dwBlk; + Offset = Offset * Vcb->BlockSize; + + if (!RfsdCopyRead( + Vcb->StreamObj, + (PLARGE_INTEGER)&Offset, + Vcb->BlockSize, + PIN_WAIT, + Buffer, + &IoStatus )) { + return FALSE; + } + + if (!NT_SUCCESS(IoStatus.Status)) { + return FALSE; + } + + return TRUE; +} + + +BOOLEAN +RfsdSaveBlock ( IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG dwBlk, + IN PVOID Buf ) +{ +DbgBreak(); +#if DISABLED + LONGLONG Offset; + BOOLEAN bRet; + + Offset = (LONGLONG) dwBlk; + Offset = Offset * Vcb->BlockSize; + + bRet = RfsdSaveBuffer(IrpContext, Vcb, Offset, Vcb->BlockSize, Buf); + + if (IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { + RfsdStartFloppyFlushDpc(Vcb, NULL, NULL); + } + + return bRet; +#endif +} + +BOOLEAN +RfsdSaveBuffer( IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN LONGLONG Offset, + IN ULONG Size, + IN PVOID Buf ) +{ + PBCB Bcb; + PVOID Buffer; + BOOLEAN bRet; + + if( !CcPinRead( Vcb->StreamObj, + (PLARGE_INTEGER) (&Offset), + Size, + PIN_WAIT, + &Bcb, + &Buffer )) { + + RfsdPrint((DBG_ERROR, "RfsdSaveBuffer: PinReading error ...\n")); + return FALSE; + } + + __try { + + RtlCopyMemory(Buffer, Buf, Size); + CcSetDirtyPinnedData(Bcb, NULL ); + RfsdRepinBcb(IrpContext, Bcb); + + SetFlag(Vcb->StreamObj->Flags, FO_FILE_MODIFIED); + + RfsdAddMcbEntry(Vcb, Offset, (LONGLONG)Size); + + bRet = TRUE; + + } __finally { + + if (AbnormalTermination()) { + + CcUnpinData(Bcb); + bRet = FALSE; + } + } + + CcUnpinData(Bcb); + + return bRet; +} + +NTSTATUS +RfsdGetBlock( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG dwContent, // A ptr to a disk block (disk block number) + IN ULONG Index, + IN ULONG Layer, + IN BOOLEAN bAlloc, + OUT PULONG pBlock + ) +{ +DbgBreak(); +#if DISABLED + NTSTATUS Status = STATUS_SUCCESS; + ULONG *pData = NULL; + ULONG i = 0, j = 0, temp = 1; + ULONG dwRet = 0; + ULONG dwBlk = 0; + + if (Layer == 0) { + + dwRet = dwContent; + + } else if (Layer <= 3) { + + /* allocate memory for pData to contain the block */ + pData = (ULONG *)ExAllocatePool(NonPagedPool, Vcb->BlockSize); + if (!pData) { + RfsdPrint((DBG_ERROR, "RfsdGetBlock: no enough memory.\n")); + Status = STATUS_INSUFFICIENT_RESOURCES; + goto errorout; + } + + /* load the block dwContext into pData buffer */ + if (!RfsdLoadBlock(Vcb, dwContent, pData)) { + ExFreePool(pData); + Status = STATUS_INSUFFICIENT_RESOURCES; + goto errorout; + } + + temp = 1 << ((BLOCK_BITS - 2) * (Layer - 1)); + + i = Index / temp; + j = Index % temp; + + dwBlk = pData[i]; + +#if DISABLED // WRITE MODE ONLY + if (dwBlk ==0 ) { + + if (bAlloc) { + + DbgBreak(); + + /* we need allocate new block: dwBlk */ + + Status = RfsdNewBlock( + IrpContext, + Vcb, + 0, + dwContent, + &dwBlk + ); + + if (!NT_SUCCESS(Status)) { + ExFreePool(pData); + goto errorout; + } + + /* we need save pData now */ + pData[i] = dwBlk; + + /* save the block first, before next call */ + if (!RfsdSaveBlock( IrpContext, Vcb, + dwContent, pData)) { + + /* error occurs when saving the block */ + Status = STATUS_INSUFFICIENT_RESOURCES; + + /* we need free newly allocated block */ + RfsdFreeBlock(IrpContext, Vcb, dwBlk); + + /* free the memory of pData */ + ExFreePool(pData); + + goto errorout; + } + + } else { + + /* free the memory of pData */ + ExFreePool(pData); + + goto errorout; + } + } +#endif + + /* free the memory of pData */ + ExFreePool(pData); + + /* transfer to next recursion call */ + Status = RfsdGetBlock( + IrpContext, + Vcb, + dwBlk, + j, + Layer - 1, + bAlloc, + &dwRet + ); + + if (!NT_SUCCESS(Status)) { + dwRet = 0; + } + } + +errorout: + + *pBlock = dwRet; + + return Status; +#endif +} + +/** I think this means it maps the blocks into the cache. +Basically, it goes through and calls GetBlock for each block. +*/ +NTSTATUS +RfsdBlockMap( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG InodeNo, + IN PRFSD_INODE Inode, + IN ULONG Index, // Ordinal index of this block in the BDL + IN BOOLEAN bAlloc, // FALSE + OUT PULONG pBlock // < + ) +{ + DbgBreak(); +#if DISABLED + ULONG i; + + ULONG dwSizes[RFSD_BLOCK_TYPES]; + NTSTATUS Status = STATUS_SUCCESS;; + + *pBlock = 0; + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + dwSizes[i] = Vcb->dwData[i]; + } + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + + if (Index < dwSizes[i]) { + + ULONG dwRet = 0; + ULONG dwBlk = 0; + + // dwBlk will get the ptr to a block. + dwBlk = Inode->i_block[i==0 ? (Index):(i + RFSD_NDIR_BLOCKS - 1)]; + +#if DISABLED // WRITE MODE ONLY + if (dwBlk == 0) { + + if (!bAlloc) { + + goto errorout; + + } else { + + DbgBreak(); + + /* we need allocate new block: dwBlk */ + Status = RfsdNewBlock( + IrpContext, + Vcb, + (InodeNo - 1) / BLOCKS_PER_GROUP, + 0, + &dwBlk + ); + + if (!NT_SUCCESS(Status)) { + goto errorout; + } + + /* save the it into inode*/ + Inode->i_block[i==0 ? (Index):(i + RFSD_NDIR_BLOCKS - 1)] = dwBlk; + + /* save the inode */ + if (!RfsdSaveInode( IrpContext, + Vcb, + InodeNo, + Inode)) { + + Status = STATUS_UNSUCCESSFUL; + + RfsdFreeBlock(IrpContext, Vcb, dwBlk); + + goto errorout; + } + } + } +#endif + Status = RfsdGetBlock( + IrpContext, + Vcb, + dwBlk, + Index, + i, + bAlloc, + &dwRet //< + ); + + RfsdPrint((DBG_INFO, "RfsdBlockMap: i=%xh index=%xh dwBlk=%xh (%xh)\n", + i, Index, dwRet, dwBlk)); + + if (NT_SUCCESS(Status)) { + *pBlock = dwRet; + } + + break; + } + + Index -= dwSizes[i]; + } + +errorout: + + return Status; +#endif +} + +// NOTE: ReiserFS starts it byte offsets at 1, as opposed to 0 (which is used for the buffer -- and therefore, the BDL is also 0-based). +NTSTATUS +RfsdBuildBDL2( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pKey, + IN PRFSD_INODE pInode, + OUT PULONG out_Count, + OUT PRFSD_BDL* out_ppBdl ) +{ + NTSTATUS Status = STATUS_SUCCESS; + BOOLEAN done = FALSE; + + RFSD_KEY_IN_MEMORY CurrentTargetKey = *pKey; + ULONGLONG CurrentOffset = 0; + + PRFSD_ITEM_HEAD pItemHeader = NULL; // The temporary storage for retrieving items from disk + PUCHAR pItemBuffer = NULL; + PUCHAR pBlockBuffer = NULL; + + ULONG idxCurrentBD = 0; + PRFSD_BDL pBdl = NULL; // The block descriptor list, which will be allocated, filled, and assigned to out_Bdl + + // Allocate the BDL for the maximum number of block descriptors that will be needed (including the tail) + // FUTURE: sd_blocks DEFINITELY is not the number of blocks consumed by a file. (at least not the number of 4096-byte blocks) + // However, I'm unsure of how to calculate the number of blocks. Perhaps I should consider using a linked list instead? + DbgPrint("## Allocating %i BD's\n", pInode->i_size / Vcb->BlockSize + 3); + pBdl = ExAllocatePool(NonPagedPool, sizeof(RFSD_BDL) * (SIZE_T) (pInode->i_size / Vcb->BlockSize + 3)); + if (!pBdl) { Status = STATUS_INSUFFICIENT_RESOURCES; goto errorout; } + RtlZeroMemory(pBdl, sizeof(RFSD_BDL) * (pInode->sd_blocks + 1)); + + + // Build descriptors for all of the indirect items associated with the file + while (!done) + { + // Search for an indirect item, corresponding to CurrentOffset... + + // Create the key to search for (note that the key always start with offset 1, even though it is for byte 0) + CurrentTargetKey.k_offset = CurrentOffset + 1; + CurrentTargetKey.k_type = RFSD_KEY_TYPE_v2_INDIRECT; + + // Perform the search + Status = RfsdLoadItem( + Vcb, &CurrentTargetKey, + &(pItemHeader), &(pItemBuffer), &(pBlockBuffer), NULL, + &CompareKeys + ); + + // If there was no such indirect item... + if (Status == STATUS_NO_SUCH_MEMBER) { Status = STATUS_SUCCESS; break; } + if (!NT_SUCCESS(Status)) { goto errorout; } + + // Otherwise, create a block descriptor for each pointer in the indirect item + { + ULONG countBlockRefs = pItemHeader->ih_item_len / sizeof(ULONG); + ULONG idxBlockRef; + + for (idxBlockRef = 0; idxBlockRef < countBlockRefs; idxBlockRef++) + { + PULONG BlockRef = (PULONG) ((PUCHAR) pItemBuffer + sizeof(ULONG) * idxBlockRef); + + // Build a block descriptor for this block reference + pBdl[idxCurrentBD].Lba = (LONGLONG) *BlockRef * (LONGLONG) Vcb->BlockSize; + pBdl[idxCurrentBD].Length = Vcb->BlockSize; + pBdl[idxCurrentBD].Offset = CurrentOffset; + + // If this is the last reference in the indirect item, subtract the free space from the end + // TODO: this may not work, because the ih_free_space_reserved seems to be wrong / not there! + if (idxBlockRef == (countBlockRefs - 1)) + pBdl[idxCurrentBD].Length -= pItemHeader->u.ih_free_space_reserved; + + // Advance to the next block reference + CurrentOffset += Vcb->BlockSize; + idxCurrentBD++; + } + + if (countBlockRefs <= 0) { done = TRUE; } + } + + if (pBlockBuffer) { ExFreePool(pBlockBuffer); pBlockBuffer = NULL; } + } + + // Cleanup the last remaining block buffer, from the indirect items + if (pBlockBuffer) { ExFreePool(pBlockBuffer); pBlockBuffer = NULL; } + + // Search for the tail of the file (its optional direct item), corresponding to CurrentOffset... + { + ULONG BlockNumber = 0; + + // Create the key to search for + CurrentTargetKey.k_offset = CurrentOffset + 1; + CurrentTargetKey.k_type = RFSD_KEY_TYPE_v2_DIRECT; + + // Perform the search + Status = RfsdLoadItem( + Vcb, &CurrentTargetKey, + &(pItemHeader), &(pItemBuffer), &(pBlockBuffer), &(BlockNumber), + &CompareKeys + ); + + if (Status == STATUS_SUCCESS) + { + // If there was a tail, then build a block descriptor for it + pBdl[idxCurrentBD].Lba = (LONGLONG) BlockNumber * (LONGLONG) Vcb->BlockSize + pItemHeader->ih_item_location; + pBdl[idxCurrentBD].Length = pItemHeader->ih_item_len; + pBdl[idxCurrentBD].Offset = CurrentOffset; + + idxCurrentBD++; + } + else + { + if (Status == STATUS_NO_SUCH_MEMBER) { Status = STATUS_SUCCESS; } // If there wasn't a tail, it's fine + else { goto errorout; } // But if there was some other problem, let's report it. + } + } + +errorout: + if (pBlockBuffer) { ExFreePool(pBlockBuffer); pBlockBuffer = NULL; } + + *out_ppBdl = pBdl; + *out_Count = idxCurrentBD; + return Status; +} + + +NTSTATUS +RfsdNewBlock( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG GroupHint, + ULONG BlockHint, + PULONG dwRet ) +{ +DbgBreak(); +#if DISABLED + RTL_BITMAP BlockBitmap; + LARGE_INTEGER Offset; + ULONG Length; + + PBCB BitmapBcb; + PVOID BitmapCache; + + ULONG Group = 0, dwBlk, dwHint = 0; + + *dwRet = 0; + dwBlk = 0XFFFFFFFF; + + if (GroupHint > Vcb->NumOfGroups) + GroupHint = Vcb->NumOfGroups - 1; + + if (BlockHint != 0) { + GroupHint = (BlockHint - RFSD_FIRST_DATA_BLOCK) / BLOCKS_PER_GROUP; + dwHint = (BlockHint - RFSD_FIRST_DATA_BLOCK) % BLOCKS_PER_GROUP; + } + +ScanBitmap: + + // Perform Prefered Group + if (Vcb->GroupDesc[GroupHint].bg_free_blocks_count) { + + Offset.QuadPart = (LONGLONG) Vcb->BlockSize; + Offset.QuadPart = Offset.QuadPart * + Vcb->GroupDesc[GroupHint].bg_block_bitmap; + + if (GroupHint == Vcb->NumOfGroups - 1) { + + Length = TOTAL_BLOCKS % BLOCKS_PER_GROUP; + + /* s_blocks_count is integer multiple of s_blocks_per_group */ + if (Length == 0) { + Length = BLOCKS_PER_GROUP; + } + } else { + Length = BLOCKS_PER_GROUP; + } + + if (!CcPinRead( Vcb->StreamObj, + &Offset, + Vcb->BlockSize, + PIN_WAIT, + &BitmapBcb, + &BitmapCache ) ) { + + RfsdPrint((DBG_ERROR, "RfsdNewBlock: PinReading error ...\n")); + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlInitializeBitMap( &BlockBitmap, + BitmapCache, + Length ); + + Group = GroupHint; + + if (RtlCheckBit(&BlockBitmap, dwHint) == 0) { + dwBlk = dwHint; + } else { + dwBlk = RtlFindClearBits(&BlockBitmap, 1, dwHint); + } + + // We could not get new block in the prefered group. + if (dwBlk == 0xFFFFFFFF) { + + CcUnpinData(BitmapBcb); + BitmapBcb = NULL; + BitmapCache = NULL; + + RtlZeroMemory(&BlockBitmap, sizeof(RTL_BITMAP)); + } + } + + if (dwBlk == 0xFFFFFFFF) { + + for(Group = 0; Group < Vcb->NumOfGroups; Group++) + if (Vcb->GroupDesc[Group].bg_free_blocks_count) { + if (Group == GroupHint) + continue; + + Offset.QuadPart = (LONGLONG) Vcb->BlockSize; + Offset.QuadPart = Offset.QuadPart * Vcb->GroupDesc[Group].bg_block_bitmap; + + if (Vcb->NumOfGroups == 1) { + Length = TOTAL_BLOCKS; + } else { + if (Group == Vcb->NumOfGroups - 1) { + + Length = TOTAL_BLOCKS % BLOCKS_PER_GROUP; + + /* s_blocks_count is integer multiple of s_blocks_per_group */ + if (Length == 0) { + Length = BLOCKS_PER_GROUP; + } + } else { + Length = BLOCKS_PER_GROUP; + } + } + + if (!CcPinRead( Vcb->StreamObj, + &Offset, + Vcb->BlockSize, + PIN_WAIT, + &BitmapBcb, + &BitmapCache ) ) { + RfsdPrint((DBG_ERROR, "RfsdNewBlock: PinReading error ...\n")); + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlInitializeBitMap( &BlockBitmap, + BitmapCache, + Length ); + + dwBlk = RtlFindClearBits(&BlockBitmap, 1, 0); + + if (dwBlk != 0xFFFFFFFF) { + break; + + } else { + + CcUnpinData(BitmapBcb); + BitmapBcb = NULL; + BitmapCache = NULL; + + RtlZeroMemory(&BlockBitmap, sizeof(RTL_BITMAP)); + } + } + } + + if (dwBlk < Length) { + + RtlSetBits(&BlockBitmap, dwBlk, 1); + + CcSetDirtyPinnedData(BitmapBcb, NULL ); + + RfsdRepinBcb(IrpContext, BitmapBcb); + + CcUnpinData(BitmapBcb); + + RfsdAddMcbEntry(Vcb, Offset.QuadPart, (LONGLONG)Vcb->BlockSize); + + *dwRet = dwBlk + RFSD_FIRST_DATA_BLOCK + Group * BLOCKS_PER_GROUP; + + //Updating Group Desc / Superblock + Vcb->GroupDesc[Group].bg_free_blocks_count--; + RfsdSaveGroup(IrpContext, Vcb, Group); + + Vcb->SuperBlock->s_free_blocks_count--; + RfsdSaveSuper(IrpContext, Vcb); + + { + ULONG i=0; + for (i=0; i < Vcb->NumOfGroups; i++) + { + if ((Vcb->GroupDesc[i].bg_block_bitmap == *dwRet) || + (Vcb->GroupDesc[i].bg_inode_bitmap == *dwRet) || + (Vcb->GroupDesc[i].bg_inode_table == *dwRet) ) { + DbgBreak(); + GroupHint = Group; + goto ScanBitmap; + } + } + } + + return STATUS_SUCCESS; + } + + return STATUS_DISK_FULL; +#endif +} + +NTSTATUS +RfsdFreeBlock( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG Block ) +{ +DbgBreak(); +#if DISABLED + + RTL_BITMAP BlockBitmap; + LARGE_INTEGER Offset; + ULONG Length; + + PBCB BitmapBcb; + PVOID BitmapCache; + + ULONG Group, dwBlk; + BOOLEAN bModified = FALSE; + + if ( Block < RFSD_FIRST_DATA_BLOCK || + (Block / BLOCKS_PER_GROUP) >= Vcb->NumOfGroups) { + + DbgBreak(); + return STATUS_INVALID_PARAMETER; + } + + RfsdPrint((DBG_INFO, "RfsdFreeBlock: Block %xh to be freed.\n", Block)); + + Group = (Block - RFSD_FIRST_DATA_BLOCK) / BLOCKS_PER_GROUP; + + dwBlk = (Block - RFSD_FIRST_DATA_BLOCK) % BLOCKS_PER_GROUP; + + { + Offset.QuadPart = (LONGLONG) Vcb->BlockSize; + Offset.QuadPart = Offset.QuadPart * Vcb->GroupDesc[Group].bg_block_bitmap; + + if (Group == Vcb->NumOfGroups - 1) { + + Length = TOTAL_BLOCKS % BLOCKS_PER_GROUP; + + /* s_blocks_count is integer multiple of s_blocks_per_group */ + if (Length == 0) { + Length = BLOCKS_PER_GROUP; + } + + } else { + Length = BLOCKS_PER_GROUP; + } + + if (!CcPinRead( Vcb->StreamObj, + &Offset, + Vcb->BlockSize, + PIN_WAIT, + &BitmapBcb, + &BitmapCache ) ) { + + RfsdPrint((DBG_ERROR, "RfsdDeleteBlock: PinReading error ...\n")); + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlInitializeBitMap( &BlockBitmap, + BitmapCache, + Length ); + + if (RtlCheckBit(&BlockBitmap, dwBlk) == 0) { + + } else { + RtlClearBits(&BlockBitmap, dwBlk, 1); + bModified = TRUE; + } + + if (!bModified) { + + CcUnpinData(BitmapBcb); + BitmapBcb = NULL; + BitmapCache = NULL; + + RtlZeroMemory(&BlockBitmap, sizeof(RTL_BITMAP)); + } + } + + if (bModified) { + + CcSetDirtyPinnedData(BitmapBcb, NULL ); + + RfsdRepinBcb(IrpContext, BitmapBcb); + + CcUnpinData(BitmapBcb); + + RfsdAddMcbEntry(Vcb, Offset.QuadPart, (LONGLONG)Vcb->BlockSize); + + //Updating Group Desc / Superblock + Vcb->GroupDesc[Group].bg_free_blocks_count++; + RfsdSaveGroup(IrpContext, Vcb, Group); + + Vcb->SuperBlock->s_free_blocks_count++; + RfsdSaveSuper(IrpContext, Vcb); + + return STATUS_SUCCESS; + } + + return STATUS_UNSUCCESSFUL; +#endif +} + + +NTSTATUS +RfsdExpandBlock( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + ULONG dwContent, + ULONG Index, + ULONG layer, + BOOLEAN bNew, + ULONG *dwRet ) +{ +DbgBreak(); +#if DISABLED + + ULONG *pData = NULL; + ULONG i = 0, j = 0, temp = 1; + ULONG dwNewBlk = 0, dwBlk = 0; + BOOLEAN bDirty = FALSE; + NTSTATUS Status = STATUS_SUCCESS; + + PRFSD_INODE Inode = Fcb->Inode; + PRFSD_SUPER_BLOCK RfsdSb = Vcb->SuperBlock; + + pData = (ULONG *) ExAllocatePool(PagedPool, Vcb->BlockSize); + + if (!pData) { + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlZeroMemory(pData, Vcb->BlockSize); + + if (bNew) { + + if (layer == 0) { + + if (IsDirectory(Fcb)) { + + PRFSD_DIR_ENTRY2 pEntry; + + pEntry = (PRFSD_DIR_ENTRY2) pData; + pEntry->rec_len = (USHORT)(Vcb->BlockSize); + + if (!RfsdSaveBlock(IrpContext, Vcb, dwContent, (PVOID)pData)) { + + Status = STATUS_UNSUCCESSFUL; + goto errorout; + } + + } else { + + LARGE_INTEGER Offset; + + Offset.QuadPart = (LONGLONG) dwContent; + Offset.QuadPart = Offset.QuadPart * Vcb->BlockSize; + + RfsdRemoveMcbEntry(Vcb, Offset.QuadPart, (LONGLONG)Vcb->BlockSize); + } + } else { + + if (!RfsdSaveBlock(IrpContext, Vcb, dwContent, (PVOID)pData)) { + + Status = STATUS_UNSUCCESSFUL; + goto errorout; + } + } + } + + if (layer == 0) { + + dwNewBlk = dwContent; + + } else if (layer <= 3) { + + if (!bNew) { + + if (!RfsdLoadBlock(Vcb, dwContent, (void *)pData)) { + + Status = STATUS_UNSUCCESSFUL; + goto errorout; + } + } + + temp = 1 << ((BLOCK_BITS - 2) * (layer - 1)); + + i = Index / temp; + j = Index % temp; + + dwBlk = pData[i]; + + if (dwBlk == 0) { + + Status = RfsdNewBlock( + IrpContext, + Vcb, 0, + dwContent, + &dwBlk); + + if (!NT_SUCCESS(Status)) { + + RfsdPrint((DBG_ERROR, "RfsdExpandBlock: get new block error.\n")); + goto errorout; + } + + Inode->i_blocks += (Vcb->BlockSize / SECTOR_SIZE); + + pData[i] = dwBlk; + bDirty = TRUE; + } + + Status = RfsdExpandBlock( + IrpContext, + Vcb, Fcb, + dwBlk, j, + layer - 1, + bDirty, + &dwNewBlk ); + + if (!NT_SUCCESS(Status)) + { + RfsdPrint((DBG_ERROR, "RfsdExpandBlockk: ... error recuise...\n")); + goto errorout; + } + + if (bDirty) + { + RfsdSaveBlock( IrpContext, + Vcb, dwContent, + (void *)pData ); + } + } + +errorout: + + if (pData) + ExFreePool(pData); + + if (NT_SUCCESS(Status) && dwRet) + *dwRet = dwNewBlk; + + return Status; +#endif +} + + +NTSTATUS +RfsdExpandInode( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb, + OUT PULONG dwRet + ) +{ +DbgBreak(); +#if DISABLED + + ULONG dwSizes[RFSD_BLOCK_TYPES]; + ULONG Index = 0; + ULONG dwTotal = 0; + ULONG dwBlk = 0, dwNewBlk = 0; + ULONG i; + NTSTATUS Status = STATUS_SUCCESS; + BOOLEAN bNewBlock = FALSE; + + PRFSD_INODE Inode = Fcb->Inode; + + Index = (ULONG)(Fcb->Header.AllocationSize.QuadPart >> BLOCK_BITS); + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + dwSizes[i] = Vcb->dwData[i]; + dwTotal += dwSizes[i]; + } + + if (Index >= dwTotal) { + + RfsdPrint((DBG_ERROR, "RfsdExpandInode: beyond the maxinum size of an inode.\n")); + return STATUS_UNSUCCESSFUL; + } + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + + if (Index < dwSizes[i]) { + + dwBlk = Inode->i_block[i==0 ? (Index):(i + RFSD_NDIR_BLOCKS - 1)]; + + if (dwBlk == 0) { + + Status = RfsdNewBlock( + IrpContext, + Vcb, + Fcb->BlkHint ? 0 : ((Fcb->RfsdMcb->Inode - 1) / INODES_PER_GROUP), + Fcb->BlkHint, + &dwBlk ); + + if (!NT_SUCCESS(Status) ) { + RfsdPrint((DBG_ERROR, "RfsdExpandInode: get new block error.\n")); + break; + } + + Inode->i_block[i==0 ? (Index):(i + RFSD_NDIR_BLOCKS - 1)] = dwBlk; + + Inode->i_blocks += (Vcb->BlockSize / SECTOR_SIZE); + + bNewBlock = TRUE; + } + + Status = RfsdExpandBlock ( + IrpContext, + Vcb, Fcb, + dwBlk, Index, + i, bNewBlock, + &dwNewBlk ); + + if (NT_SUCCESS(Status)) { + Fcb->Header.AllocationSize.QuadPart += Vcb->BlockSize; + } + + break; + } + + Index -= dwSizes[i]; + } + + RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, Inode); + + if (NT_SUCCESS(Status)) { + if (dwNewBlk) { + if (dwRet) { + Fcb->BlkHint = dwNewBlk+1; + *dwRet = dwNewBlk; + + RfsdPrint((DBG_INFO, "RfsdExpandInode: %S (%xh) i=%2.2xh Index=%8.8xh New Block=%8.8xh\n", + Fcb->RfsdMcb->ShortName.Buffer, Fcb->RfsdMcb->Inode, i, Index, dwNewBlk)); + } + } else { + DbgBreak(); + Status = STATUS_UNSUCCESSFUL; + } + } + + return Status; +#endif +} + +NTSTATUS +RfsdNewInode( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG GroupHint, + ULONG Type, + PULONG Inode ) +{ +DbgBreak(); +#if DISABLED + + RTL_BITMAP InodeBitmap; + PVOID BitmapCache; + PBCB BitmapBcb; + + ULONG Group, i, j; + ULONG Average, Length; + LARGE_INTEGER Offset; + + ULONG dwInode; + + *Inode = dwInode = 0XFFFFFFFF; + +repeat: + + Group = i = 0; + + if (Type == RFSD_FT_DIR) { + + Average = Vcb->SuperBlock->s_free_inodes_count / Vcb->NumOfGroups; + + for (j = 0; j < Vcb->NumOfGroups; j++) { + + i = (j + GroupHint) % (Vcb->NumOfGroups); + + if ((Vcb->GroupDesc[i].bg_used_dirs_count << 8) < + Vcb->GroupDesc[i].bg_free_inodes_count ) { + Group = i + 1; + break; + } + } + + if (!Group) { + + for (j = 0; j < Vcb->NumOfGroups; j++) { + + if (Vcb->GroupDesc[j].bg_free_inodes_count >= Average) { + if (!Group || (Vcb->GroupDesc[j].bg_free_blocks_count > + Vcb->GroupDesc[Group].bg_free_blocks_count )) + Group = j + 1; + } + } + } + + } else { + + /* + * Try to place the inode in its parent directory (GroupHint) + */ + + if (Vcb->GroupDesc[GroupHint].bg_free_inodes_count) { + + Group = GroupHint + 1; + + } else { + + i = GroupHint; + + /* + * Use a quadratic hash to find a group with a + * free inode + */ + + for (j = 1; j < Vcb->NumOfGroups; j <<= 1) { + + i += j; + if (i > Vcb->NumOfGroups) + i -= Vcb->NumOfGroups; + + if (Vcb->GroupDesc[i].bg_free_inodes_count) { + Group = i + 1; + break; + } + } + } + + if (!Group) { + /* + * That failed: try linear search for a free inode + */ + i = GroupHint + 1; + for (j = 2; j < Vcb->NumOfGroups; j++) { + if (++i >= Vcb->NumOfGroups) i = 0; + + if (Vcb->GroupDesc[i].bg_free_inodes_count) { + Group = i + 1; + break; + } + } + } + } + + // Could not find a proper group. + if (!Group) { + + return STATUS_DISK_FULL; + + } else { + + Group--; + + Offset.QuadPart = (LONGLONG) Vcb->BlockSize; + Offset.QuadPart = Offset.QuadPart * Vcb->GroupDesc[Group].bg_inode_bitmap; + + if (Vcb->NumOfGroups == 1) { + Length = INODES_COUNT; + } else { + if (Group == Vcb->NumOfGroups - 1) { + Length = INODES_COUNT % INODES_PER_GROUP; + if (!Length) { + /* INODES_COUNT is integer multiple of INODES_PER_GROUP */ + Length = INODES_PER_GROUP; + } + } else { + Length = INODES_PER_GROUP; + } + } + + if (!CcPinRead( Vcb->StreamObj, + &Offset, + Vcb->BlockSize, + PIN_WAIT, + &BitmapBcb, + &BitmapCache ) ) { + + RfsdPrint((DBG_ERROR, "RfsdNewInode: PinReading error ...\n")); + + return STATUS_UNSUCCESSFUL; + } + + RtlInitializeBitMap( &InodeBitmap, + BitmapCache, + Length ); + + dwInode = RtlFindClearBits(&InodeBitmap, 1, 0); + + if (dwInode == 0xFFFFFFFF) { + CcUnpinData(BitmapBcb); + BitmapBcb = NULL; + BitmapCache = NULL; + + RtlZeroMemory(&InodeBitmap, sizeof(RTL_BITMAP)); + } + } + + if (dwInode == 0xFFFFFFFF || dwInode >= Length) { + + if (Vcb->GroupDesc[Group].bg_free_inodes_count != 0) { + + Vcb->GroupDesc[Group].bg_free_inodes_count = 0; + + RfsdSaveGroup(IrpContext, Vcb, Group); + } + + goto repeat; + + } else { + + RtlSetBits(&InodeBitmap, dwInode, 1); + + CcSetDirtyPinnedData(BitmapBcb, NULL ); + + RfsdRepinBcb(IrpContext, BitmapBcb); + + CcUnpinData(BitmapBcb); + + RfsdAddMcbEntry(Vcb, Offset.QuadPart, (LONGLONG)Vcb->BlockSize); + + *Inode = dwInode + 1 + Group * INODES_PER_GROUP; + + //Updating Group Desc / Superblock + Vcb->GroupDesc[Group].bg_free_inodes_count--; + if (Type == RFSD_FT_DIR) { + Vcb->GroupDesc[Group].bg_used_dirs_count++; + } + + RfsdSaveGroup(IrpContext, Vcb, Group); + + Vcb->SuperBlock->s_free_inodes_count--; + RfsdSaveSuper(IrpContext, Vcb); + + return STATUS_SUCCESS; + } + + return STATUS_DISK_FULL; + +#endif +} + +BOOLEAN +RfsdFreeInode( + PRFSD_IRP_CONTEXT IrpContext, + PRFSD_VCB Vcb, + ULONG Inode, + ULONG Type ) +{ +DbgBreak(); +#if DISABLED + + RTL_BITMAP InodeBitmap; + PVOID BitmapCache; + PBCB BitmapBcb; + + ULONG Group; + ULONG Length; + LARGE_INTEGER Offset; + + ULONG dwIno; + BOOLEAN bModified = FALSE; + + + Group = (Inode - 1) / INODES_PER_GROUP; + dwIno = (Inode - 1) % INODES_PER_GROUP; + + RfsdPrint((DBG_INFO, "RfsdFreeInode: Inode: %xh (Group/Off = %xh/%xh)\n", + Inode, Group, dwIno)); + + { + Offset.QuadPart = (LONGLONG) Vcb->BlockSize; + Offset.QuadPart = Offset.QuadPart * Vcb->GroupDesc[Group].bg_inode_bitmap; + if (Group == Vcb->NumOfGroups - 1) { + + Length = INODES_COUNT % INODES_PER_GROUP; + if (!Length) { + /* s_inodes_count is integer multiple of s_inodes_per_group */ + Length = INODES_PER_GROUP; + } + } else { + Length = INODES_PER_GROUP; + } + + if (!CcPinRead( Vcb->StreamObj, + &Offset, + Vcb->BlockSize, + PIN_WAIT, + &BitmapBcb, + &BitmapCache ) ) { + RfsdPrint((DBG_ERROR, "RfsdFreeInode: PinReading error ...\n")); + return FALSE; + } + + RtlInitializeBitMap( &InodeBitmap, + BitmapCache, + Length ); + + if (RtlCheckBit(&InodeBitmap, dwIno) == 0) { + DbgBreak(); + } else { + RtlClearBits(&InodeBitmap, dwIno, 1); + bModified = TRUE; + } + + if (!bModified) { + + CcUnpinData(BitmapBcb); + BitmapBcb = NULL; + BitmapCache = NULL; + + RtlZeroMemory(&InodeBitmap, sizeof(RTL_BITMAP)); + } + } + + if (bModified) { + + CcSetDirtyPinnedData(BitmapBcb, NULL ); + + RfsdRepinBcb(IrpContext, BitmapBcb); + + CcUnpinData(BitmapBcb); + + RfsdAddMcbEntry(Vcb, Offset.QuadPart, (LONGLONG)Vcb->BlockSize); + + //Updating Group Desc / Superblock + if (Type == RFSD_FT_DIR) { + Vcb->GroupDesc[Group].bg_used_dirs_count--; + } + + Vcb->GroupDesc[Group].bg_free_inodes_count++; + RfsdSaveGroup(IrpContext, Vcb, Group); + + Vcb->SuperBlock->s_free_inodes_count++; + RfsdSaveSuper(IrpContext, Vcb); + + return TRUE; + } + + return FALSE; + +#endif +} + + +NTSTATUS +RfsdAddEntry ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Dcb, + IN ULONG FileType, + IN ULONG Inode, + IN PUNICODE_STRING FileName ) +{ +DbgBreak(); +#if DISABLED + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_DIR_ENTRY2 pDir = NULL; + PRFSD_DIR_ENTRY2 pNewDir = NULL; + PRFSD_DIR_ENTRY2 pTarget = NULL; + + ULONG Length = 0; + ULONG dwBytes = 0; + + BOOLEAN bFound = FALSE; + BOOLEAN bAdding = FALSE; + + BOOLEAN MainResourceAcquired = FALSE; + + ULONG dwRet; + + if (!IsDirectory(Dcb)) { + DbgBreak(); + return STATUS_NOT_A_DIRECTORY; + } + + MainResourceAcquired = ExAcquireResourceExclusiveLite(&Dcb->MainResource, TRUE); + + __try { + + Dcb->ReferenceCount++; + + pDir = (PRFSD_DIR_ENTRY2) ExAllocatePool(PagedPool, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + if (!pDir) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + pTarget = (PRFSD_DIR_ENTRY2) ExAllocatePool(PagedPool, + 2 * RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + if (!pTarget) { + + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + +#if DISABLED // disabled in FFS too + if (IsFlagOn( SUPER_BLOCK->s_feature_incompat, + RFSD_FEATURE_INCOMPAT_FILETYPE)) { + pDir->file_type = (UCHAR) FileType; + } else +#endif + { + pDir->file_type = 0; + } + + { + OEM_STRING OemName; + OemName.Buffer = pDir->name; + OemName.MaximumLength = RFSD_NAME_LEN; + OemName.Length = 0; + + Status = RfsdUnicodeToOEM(&OemName, FileName); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + pDir->name_len = (CCHAR) OemName.Length; + } + + pDir->inode = Inode; + pDir->rec_len = (USHORT) (RFSD_DIR_REC_LEN(pDir->name_len)); + + dwBytes = 0; + +Repeat: + + while ((LONGLONG)dwBytes < Dcb->Header.AllocationSize.QuadPart) { + + RtlZeroMemory(pTarget, RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + + // Reading the DCB contents + Status = RfsdReadInode( + NULL, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes, + (PVOID)pTarget, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN), + &dwRet); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, "RfsdAddDirectory: Reading Directory Content error.\n")); + __leave; + } + + if (((pTarget->inode == 0) && pTarget->rec_len >= pDir->rec_len) || + (pTarget->rec_len >= RFSD_DIR_REC_LEN(pTarget->name_len) + pDir->rec_len)) { + + if (pTarget->inode) { + + RtlZeroMemory(pTarget, 2 * RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + + // Reading the DCB contents + Status = RfsdReadInode( + NULL, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes, + (PVOID)pTarget, + 2 * RFSD_DIR_REC_LEN(RFSD_NAME_LEN), + &dwRet); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, "RfsdAddDirectory: Reading Directory Content error.\n")); + __leave; + } + + Length = RFSD_DIR_REC_LEN(pTarget->name_len); + + pNewDir = (PRFSD_DIR_ENTRY2) ((PUCHAR)pTarget + RFSD_DIR_REC_LEN(pTarget->name_len)); + + pNewDir->rec_len = pTarget->rec_len - RFSD_DIR_REC_LEN(pTarget->name_len); + + pTarget->rec_len = RFSD_DIR_REC_LEN(pTarget->name_len); + + } else { + + Length = 0; + pNewDir = pTarget; + } + + pNewDir->file_type = pDir->file_type; + pNewDir->inode = pDir->inode; + pNewDir->name_len = pDir->name_len; + memcpy(pNewDir->name, pDir->name, pDir->name_len); + Length += RFSD_DIR_REC_LEN(pDir->name_len); + + bFound = TRUE; + break; + } + + dwBytes += pTarget->rec_len; + } + + if (bFound) { + + ULONG dwRet; + + if ( FileType==RFSD_FT_DIR ) { + + if(((pDir->name_len == 1) && (pDir->name[0] == '.')) || + ((pDir->name_len == 2) && (pDir->name[0] == '.') && (pDir->name[1] == '.')) ) { + } else { + Dcb->Inode->i_links_count++; + } + } + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + (ULONGLONG)dwBytes, + pTarget, + Length, + FALSE, + &dwRet ); + } else { + + // We should expand the size of the dir inode + if (!bAdding) { + + ULONG dwRet; + + Status = RfsdExpandInode(IrpContext, Vcb, Dcb, &dwRet); + + if (NT_SUCCESS(Status)) { + + Dcb->Inode->i_size = Dcb->Header.AllocationSize.LowPart; + + RfsdSaveInode(IrpContext, Vcb, Dcb->RfsdMcb->Inode, Dcb->Inode); + + Dcb->Header.FileSize = Dcb->Header.AllocationSize; + + bAdding = TRUE; + + goto Repeat; + } + + __leave; + + } else { // Something must be error! + __leave; + } + } + + } __finally { + + Dcb->ReferenceCount--; + + if(MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Dcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (pTarget != NULL) { + ExFreePool(pTarget); + } + + if (pDir) { + ExFreePool(pDir); + } + } + + return Status; +#endif +} + + +NTSTATUS +RfsdRemoveEntry ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Dcb, + IN ULONG FileType, + IN ULONG Inode ) +{ +DbgBreakPoint(); +#if DISABLED + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_DIR_ENTRY2 pTarget = NULL; + PRFSD_DIR_ENTRY2 pPrevDir = NULL; + + USHORT PrevRecLen = 0; + + ULONG Length = 0; + ULONG dwBytes = 0; + + BOOLEAN MainResourceAcquired = FALSE; + + ULONG dwRet; + + if (!IsDirectory(Dcb)) { + return STATUS_NOT_A_DIRECTORY; + } + + MainResourceAcquired = + ExAcquireResourceExclusiveLite(&Dcb->MainResource, TRUE); + + __try { + + Dcb->ReferenceCount++; + + pTarget = (PRFSD_DIR_ENTRY2) ExAllocatePool(PagedPool, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + if (!pTarget) { + + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + pPrevDir = (PRFSD_DIR_ENTRY2) ExAllocatePool(PagedPool, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + if (!pPrevDir) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + dwBytes = 0; + + while ((LONGLONG)dwBytes < Dcb->Header.AllocationSize.QuadPart) { + + RtlZeroMemory(pTarget, RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + + Status = RfsdReadInode( + NULL, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes, + (PVOID)pTarget, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN), + &dwRet); + + if (!NT_SUCCESS(Status)) { + + RfsdPrint((DBG_ERROR, "RfsdRemoveEntry: Reading Directory Content error.\n")); + __leave; + } + + // + // Find it ! Then remove the entry from Dcb ... + // + + if (pTarget->inode == Inode) { + + ULONG RecLen; + + BOOLEAN bAcross = FALSE; + + if (((ULONG)PrevRecLen + pTarget->rec_len) > BLOCK_SIZE) { + bAcross = TRUE; + } else { + + dwRet = (dwBytes - PrevRecLen) & (~(BLOCK_SIZE - 1)); + if (dwRet != (dwBytes & (~(BLOCK_SIZE - 1)))) + { + bAcross = TRUE; + } + } + + if (!bAcross) { + + pPrevDir->rec_len += pTarget->rec_len; + + RecLen = RFSD_DIR_REC_LEN(pTarget->name_len); + + RtlZeroMemory(pTarget, RecLen); + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes - PrevRecLen, + pPrevDir, + 8, + FALSE, + &dwRet + ); + + ASSERT(NT_SUCCESS(Status)); + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes, + pTarget, + RecLen, + FALSE, + &dwRet + ); + + ASSERT(NT_SUCCESS(Status)); + + } else { + + RecLen = (ULONG)pTarget->rec_len; + if (RecLen > RFSD_DIR_REC_LEN(RFSD_NAME_LEN)) { + + RtlZeroMemory(pTarget, RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + + pTarget->rec_len = (USHORT)RecLen; + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes, + pTarget, + RFSD_DIR_REC_LEN(RFSD_NAME_LEN), + FALSE, + &dwRet + ); + + ASSERT(NT_SUCCESS(Status)); + + } else { + + RtlZeroMemory(pTarget, RecLen); + pTarget->rec_len = (USHORT)RecLen; + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + dwBytes, + pTarget, + RecLen, + FALSE, + &dwRet + ); + + ASSERT(NT_SUCCESS(Status)); + } + } + + // + // Error if it's the entry of dot or dot-dot or drop the parent's refer link + // + + if (FileType == RFSD_FT_DIR) { + + if(((pTarget->name_len == 1) && (pTarget->name[0] == '.')) || + ((pTarget->name_len == 2) && (pTarget->name[0] == '.') && (pTarget->name[1] == '.')) ) { + + DbgBreak(); + } else { + Dcb->Inode->i_links_count--; + } + } + + // + // Update at least mtime/atime if !RFSD_FT_DIR. + // + + if ( !RfsdSaveInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode + ) ) { + Status = STATUS_UNSUCCESSFUL; + } + + break; + + } else { + + RtlCopyMemory(pPrevDir, pTarget, RFSD_DIR_REC_LEN(RFSD_NAME_LEN)); + PrevRecLen = pTarget->rec_len; + } + + dwBytes += pTarget->rec_len; + } + + } __finally { + + Dcb->ReferenceCount--; + + if(MainResourceAcquired) + ExReleaseResourceForThreadLite( + &Dcb->MainResource, + ExGetCurrentResourceThread()); + + if (pTarget != NULL) { + ExFreePool(pTarget); + } + + if (pPrevDir != NULL) { + ExFreePool(pPrevDir); + } + } + + return Status; +#endif +} + +NTSTATUS +RfsdSetParentEntry ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Dcb, + IN ULONG OldParent, + IN ULONG NewParent ) +{ +DbgBreak(); +#if DISABLED + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_DIR_ENTRY2 pSelf = NULL; + PRFSD_DIR_ENTRY2 pParent = NULL; + + ULONG dwBytes = 0; + + BOOLEAN MainResourceAcquired = FALSE; + + ULONG Offset = 0; + + if (!IsDirectory(Dcb)) { + return STATUS_NOT_A_DIRECTORY; + } + + MainResourceAcquired = + ExAcquireResourceExclusiveLite(&Dcb->MainResource, TRUE); + + __try { + + Dcb->ReferenceCount++; + + pSelf = (PRFSD_DIR_ENTRY2) ExAllocatePool(PagedPool, + RFSD_DIR_REC_LEN(1) + RFSD_DIR_REC_LEN(2)); + if (!pSelf) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + dwBytes = 0; + + // + // Reading the DCB contents + // + + Status = RfsdReadInode( + NULL, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + Offset, + (PVOID)pSelf, + RFSD_DIR_REC_LEN(1) + RFSD_DIR_REC_LEN(2), + &dwBytes ); + + if (!NT_SUCCESS(Status)) { + RfsdPrint((DBG_ERROR, "RfsdSetParentEntry: Reading Directory Content error.\n")); + __leave; + } + + ASSERT(dwBytes == RFSD_DIR_REC_LEN(1) + RFSD_DIR_REC_LEN(2)); + + pParent = (PRFSD_DIR_ENTRY2)((PUCHAR)pSelf + pSelf->rec_len); + + if (pParent->inode != OldParent) { + DbgBreak(); + } + + pParent->inode = NewParent; + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Dcb->RfsdMcb->Inode, + Dcb->Inode, + Offset, + pSelf, + dwBytes, + FALSE, + &dwBytes ); + + } __finally { + + Dcb->ReferenceCount--; + + if(MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Dcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (pSelf) { + ExFreePool(pSelf); + } + } + + return Status; +#endif + { return 1; } +} + + +NTSTATUS +RfsdTruncateBlock( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb, + IN ULONG dwContent, + IN ULONG Index, + IN ULONG layer, + OUT BOOLEAN *bFreed ) +{ +DbgBreak(); +#if DISABLED + + ULONG *pData = NULL; + ULONG i = 0, j = 0, temp = 1; + BOOLEAN bDirty = FALSE; + ULONG dwBlk; + + LONGLONG Offset; + + PBCB Bcb; + + NTSTATUS Status = STATUS_SUCCESS; + + PRFSD_INODE Inode = Fcb->Inode; + + *bFreed = FALSE; + + if (layer == 0) { + + if ( dwContent > 0 && (dwContent / BLOCKS_PER_GROUP) < Vcb->NumOfGroups) { + + Status = RfsdFreeBlock(IrpContext, Vcb, dwContent); + + if (NT_SUCCESS(Status)) { + + ASSERT(Inode->i_blocks >= (Vcb->BlockSize / SECTOR_SIZE)); + Inode->i_blocks -= (Vcb->BlockSize / SECTOR_SIZE); + *bFreed = TRUE; + } + + } else if (dwContent == 0) { + Status = STATUS_SUCCESS; + } else { + DbgBreak(); + Status = STATUS_INVALID_PARAMETER; + } + + } else if (layer <= 3) { + + Offset = (LONGLONG) dwContent; + Offset = Offset * Vcb->BlockSize; + + if (!CcPinRead( Vcb->StreamObj, + (PLARGE_INTEGER) (&Offset), + Vcb->BlockSize, + PIN_WAIT, + &Bcb, + &pData )) { + + RfsdPrint((DBG_ERROR, "RfsdSaveBuffer: PinReading error ...\n")); + Status = STATUS_INSUFFICIENT_RESOURCES; + goto errorout; + } + + temp = 1 << ((BLOCK_BITS - 2) * (layer - 1)); + + i = Index / temp; + j = Index % temp; + + dwBlk = pData[i]; + + if (dwBlk) { + + Status = RfsdTruncateBlock( + IrpContext, + Vcb, + Fcb, + dwBlk, + j, + layer - 1, + &bDirty + ); + + if(!NT_SUCCESS(Status)) { + goto errorout; + } + + if (bDirty) { + pData[i] = 0; + } + } + + if (i == 0 && j == 0) { + + CcUnpinData(Bcb); + pData = NULL; + + Status = RfsdFreeBlock(IrpContext, Vcb, dwContent); + + if (NT_SUCCESS(Status)) { + ASSERT(Inode->i_blocks >= (Vcb->BlockSize / SECTOR_SIZE)); + Inode->i_blocks -= (Vcb->BlockSize / SECTOR_SIZE); + + *bFreed = TRUE; + } + + } else { + + if (bDirty) { + CcSetDirtyPinnedData(Bcb, NULL ); + RfsdRepinBcb(IrpContext, Bcb); + + RfsdAddMcbEntry(Vcb, Offset, (LONGLONG)Vcb->BlockSize); + } + } + } + +errorout: + + if (pData) { + CcUnpinData(Bcb); + } + + return Status; + +#endif +} + + +NTSTATUS +RfsdTruncateInode( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PRFSD_FCB Fcb ) +{ +DbgBreak(); +#if DISABLED + + ULONG dwSizes[RFSD_BLOCK_TYPES]; + ULONG Index = 0; + ULONG dwTotal = 0; + ULONG dwBlk = 0; + + ULONG i; + NTSTATUS Status = STATUS_SUCCESS; + BOOLEAN bFreed = FALSE; + + PRFSD_INODE Inode = Fcb->Inode; + + Index = (ULONG)(Fcb->Header.AllocationSize.QuadPart >> BLOCK_BITS); + + if (Index > 0) { + Index--; + } else { + return Status; + } + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + dwSizes[i] = Vcb->dwData[i]; + dwTotal += dwSizes[i]; + } + + if (Index >= dwTotal) { + RfsdPrint((DBG_ERROR, "RfsdTruncateInode: beyond the maxinum size of an inode.\n")); + return Status; + } + + for (i = 0; i < RFSD_BLOCK_TYPES; i++) { + + if (Index < dwSizes[i]) { + + dwBlk = Inode->i_block[i==0 ? (Index):(i + RFSD_NDIR_BLOCKS - 1)]; + + if (dwBlk) { + + Status = RfsdTruncateBlock(IrpContext, Vcb, Fcb, dwBlk, Index , i, &bFreed); + } + + if (NT_SUCCESS(Status)) { + + Fcb->Header.AllocationSize.QuadPart -= Vcb->BlockSize; + + if (bFreed) { + Inode->i_block[i==0 ? (Index):(i + RFSD_NDIR_BLOCKS - 1)] = 0; + } + } + + break; + } + + Index -= dwSizes[i]; + } + + // + // Inode struct saving is done externally. + // + + RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, Inode); + + + return Status; +#endif +} + +BOOLEAN +RfsdAddMcbEntry ( // Mcb = map control block (maps file-relative block offsets to disk-relative block offsets) + IN PRFSD_VCB Vcb, + IN LONGLONG Lba, + IN LONGLONG Length) +{ +DbgBreak(); +#if DISABLED + + BOOLEAN bRet = FALSE; + + LONGLONG Offset; + +#if DBG + LONGLONG DirtyLba; + LONGLONG DirtyLen; +#endif + + + Offset = Lba & (~((LONGLONG)BLOCK_SIZE - 1)); + + Length = (Length + Lba - Offset + BLOCK_SIZE - 1) & + (~((LONGLONG)BLOCK_SIZE - 1)); + + ASSERT ((Offset & (BLOCK_SIZE - 1)) == 0); + ASSERT ((Length & (BLOCK_SIZE - 1)) == 0); + + Offset = (Offset >> BLOCK_BITS) + 1; + Length = (Length >> BLOCK_BITS); + + ExAcquireResourceExclusiveLite( + &(Vcb->McbResource), + TRUE ); + + RfsdPrint((DBG_INFO, "RfsdAddMcbEntry: Lba=%I64xh Length=%I64xh\n", + Offset, Length )); + +#if DBG + bRet = FsRtlLookupLargeMcbEntry( + &(Vcb->DirtyMcbs), + Offset, + &DirtyLba, + &DirtyLen, + NULL, + NULL, + NULL ); + + if (bRet && DirtyLba == Offset && DirtyLen >= Length) { + + RfsdPrint((DBG_INFO, "RfsdAddMcbEntry: this run already exists.\n")); + } +#endif + + __try { + + bRet = FsRtlAddLargeMcbEntry( + &(Vcb->DirtyMcbs), + Offset, Offset, + Length ); + + } __except (EXCEPTION_EXECUTE_HANDLER) { + + DbgBreak(); + bRet = FALSE; + } + +#if DBG + if (bRet) { + + BOOLEAN bFound = FALSE; + LONGLONG RunStart; + LONGLONG RunLength; + ULONG Index; + + bFound = FsRtlLookupLargeMcbEntry( + &(Vcb->DirtyMcbs), + Offset, + &DirtyLba, + &DirtyLen, + &RunStart, + &RunLength, + &Index ); + + if ((!bFound) || (DirtyLba == -1) || + (DirtyLba != Offset) || (DirtyLen < Length)) { + LONGLONG DirtyVba; + LONGLONG DirtyLba; + LONGLONG DirtyLength; + + DbgBreak(); + + for ( Index = 0; + FsRtlGetNextLargeMcbEntry( &(Vcb->DirtyMcbs), + Index, + &DirtyVba, + &DirtyLba, + &DirtyLength); + Index++ ) { + + RfsdPrint((DBG_INFO, "Index = %xh\n", Index)); + RfsdPrint((DBG_INFO, "DirtyVba = %I64xh\n", DirtyVba)); + RfsdPrint((DBG_INFO, "DirtyLba = %I64xh\n", DirtyLba)); + RfsdPrint((DBG_INFO, "DirtyLen = %I64xh\n\n", DirtyLength)); + } + } + } +#endif + + ExReleaseResourceForThreadLite( + &(Vcb->McbResource), + ExGetCurrentResourceThread() ); + + return bRet; +#endif + +} + +VOID +RfsdRemoveMcbEntry ( + IN PRFSD_VCB Vcb, + IN LONGLONG Lba, + IN LONGLONG Length) +{ + DbgBreak(); +#if DISABLED + + LONGLONG Offset; + + Offset = Lba & (~((LONGLONG)BLOCK_SIZE - 1)); + + Length = (Length + Lba - Offset + BLOCK_SIZE - 1) & + (~((LONGLONG)BLOCK_SIZE - 1)); + + ASSERT(Offset == Lba); + + ASSERT ((Offset & (BLOCK_SIZE - 1)) == 0); + ASSERT ((Length & (BLOCK_SIZE - 1)) == 0); + + Offset = (Offset >> BLOCK_BITS) + 1; + Length = (Length >> BLOCK_BITS); + + RfsdPrint((DBG_INFO, "RfsdRemoveMcbEntry: Lba=%I64xh Length=%I64xh\n", + Offset, Length )); + + ExAcquireResourceExclusiveLite( + &(Vcb->McbResource), + TRUE ); + + __try { + FsRtlRemoveLargeMcbEntry( + &(Vcb->DirtyMcbs), + Offset, Length ); + + } __except (EXCEPTION_EXECUTE_HANDLER) { + DbgBreak(); + } + +#if DBG + { + BOOLEAN bFound = FALSE; + LONGLONG DirtyLba, DirtyLen; + + bFound = FsRtlLookupLargeMcbEntry( + &(Vcb->DirtyMcbs), + Offset, + &DirtyLba, + &DirtyLen, + NULL, + NULL, + NULL ); + + if (bFound &&( DirtyLba != -1)) { + DbgBreak(); + } + } +#endif + + ExReleaseResourceForThreadLite( + &(Vcb->McbResource), + ExGetCurrentResourceThread() ); +#endif +} + +BOOLEAN +RfsdLookupMcbEntry ( + IN PRFSD_VCB Vcb, + IN LONGLONG Lba, + OUT PLONGLONG pLba, + OUT PLONGLONG pLength, + OUT PLONGLONG RunStart, + OUT PLONGLONG RunLength, + OUT PULONG Index) +{ +DbgBreak(); +#if DISABLED + + BOOLEAN bRet; + LONGLONG Offset; + + + Offset = Lba & (~((LONGLONG)BLOCK_SIZE - 1)); + ASSERT ((Offset & (BLOCK_SIZE - 1)) == 0); + + ASSERT(Lba == Offset); + + Offset = (Offset >> BLOCK_BITS) + 1; + + ExAcquireResourceExclusiveLite( + &(Vcb->McbResource), + TRUE ); + + bRet = FsRtlLookupLargeMcbEntry( + &(Vcb->DirtyMcbs), + Offset, + pLba, + pLength, + RunStart, + RunLength, + Index ); + + ExReleaseResourceForThreadLite( + &(Vcb->McbResource), + ExGetCurrentResourceThread() ); + + if (bRet) { + + if (pLba && ((*pLba) != -1)) { + + ASSERT((*pLba) > 0); + + (*pLba) = (((*pLba) - 1) << BLOCK_BITS); + (*pLba) += ((Lba) & ((LONGLONG)BLOCK_SIZE - 1)); + } + + if (pLength) { + + (*pLength) <<= BLOCK_BITS; + (*pLength) -= ((Lba) & ((LONGLONG)BLOCK_SIZE - 1)); + } + + if (RunStart && (*RunStart != -1)) { + (*RunStart) = (((*RunStart) - 1) << BLOCK_BITS); + } + + if (RunLength) { + (*RunLength) <<= BLOCK_BITS; + } + } + + return bRet; + +#endif +} + + + +/////////////////////////////////////////////////// +/////////////////////////////////////////////////// + +/** + Invoked by FSCTL.c on mount volume +*/ +BOOLEAN SuperblockContainsMagicKey(PRFSD_SUPER_BLOCK sb) +{ +#define MAGIC_KEY_LENGTH 9 + + UCHAR sz_MagicKey[] = REISER2FS_SUPER_MAGIC_STRING; + BOOLEAN b_KeyMatches = TRUE; + UCHAR currentChar; + int i; + + // If any characters read from disk don't match the expected magic key, we don't have a ReiserFS volume. + for (i = 0; i < MAGIC_KEY_LENGTH; i++) + { + currentChar = sb->s_magic[i]; + if (currentChar != sz_MagicKey[i]) + { return FALSE; } + } + + return TRUE; +} + + + +/* +______________________________________________________________________________ + _ __ _ _ _ _ _ +| |/ /___ _ _ | | | | |_(_) |___ +| ' // _ \ | | | | | | | __| | / __| +| . \ __/ |_| | | |_| | |_| | \__ \ +|_|\_\___|\__, | \___/ \__|_|_|___/ + |___/ +______________________________________________________________________________ +*/ + + +/** + Guess whether a key is v1, or v2, by investigating its type field. + NOTE: I based this off Florian Buchholz's code snippet, which is from reisefs lib. + + Old keys (on i386) have k_offset_v2.k_type == 15 (direct and indirect) or == 0 (dir items and stat data). +*/ + +RFSD_KEY_VERSION DetermineOnDiskKeyFormat(const PRFSD_KEY_ON_DISK key) +{ + int type = (int) key->u.k_offset_v2.k_type; + + if ( type == 0x0 || type == 0xF ) + return RFSD_KEY_VERSION_1; + + return RFSD_KEY_VERSION_2; +} + + +/** Given the uniqueness value from a version 1 KEY_ON_DISK, convert that to the v2 equivalent type (which is used for the KEY_IN_MEMORY structures) */ +__u32 +ConvertKeyTypeUniqueness(__u32 k_uniqueness) +{ + switch (k_uniqueness) + { + case RFSD_KEY_TYPE_v1_STAT_DATA: return RFSD_KEY_TYPE_v2_STAT_DATA; + case RFSD_KEY_TYPE_v1_INDIRECT: return RFSD_KEY_TYPE_v2_INDIRECT; + case RFSD_KEY_TYPE_v1_DIRECT: return RFSD_KEY_TYPE_v2_DIRECT; + case RFSD_KEY_TYPE_v1_DIRENTRY: return RFSD_KEY_TYPE_v2_DIRENTRY; + + default: + RfsdPrint((DBG_ERROR, "Unexpected uniqueness value %i", k_uniqueness)); + // NOTE: If above value is 555, it's the 'any' value, which I'd be surprised to see on disk. + DbgBreak(); + return 0xF; // We'll return v2 'any', just to see what happens... + } +} + +/** Fills an in-memory key structure with equivalent data as that given by an on-disk key, converting any older v1 information ito the new v2 formats. */ +void +FillInMemoryKey( + IN PRFSD_KEY_ON_DISK pKeyOnDisk, + IN RFSD_KEY_VERSION KeyVersion, + IN OUT PRFSD_KEY_IN_MEMORY pKeyInMemory ) +{ + // Sanity check that the input and output locations exist + if (!pKeyOnDisk || !pKeyInMemory) { DbgBreak(); return; } + + // Copy over the fields that are compatible between keys + pKeyInMemory->k_dir_id = pKeyOnDisk->k_dir_id; + pKeyInMemory->k_objectid = pKeyOnDisk->k_objectid; + + if (KeyVersion == RFSD_KEY_VERSION_UNKNOWN) + { KeyVersion = DetermineOnDiskKeyFormat(pKeyOnDisk); } + + // Copy over the fields that are incompatible between keys, converting older type fields to the v2 format + switch (KeyVersion) + { + case RFSD_KEY_VERSION_1: + pKeyInMemory->k_offset = pKeyOnDisk->u.k_offset_v1.k_offset; + pKeyInMemory->k_type = ConvertKeyTypeUniqueness( pKeyOnDisk->u.k_offset_v1.k_uniqueness ); + break; + + case RFSD_KEY_VERSION_2: + pKeyInMemory->k_offset = pKeyOnDisk->u.k_offset_v2.k_offset; + pKeyInMemory->k_type = (__u32) pKeyOnDisk->u.k_offset_v2.k_type; + break; + } +} + +/** Compares two in memory keys, returning KEY_SMALLER, KEY_LARGER, or KEYS_MATCH relative to the first key given. */ +RFSD_KEY_COMPARISON +CompareShortKeys( + IN PRFSD_KEY_IN_MEMORY a, + IN PRFSD_KEY_IN_MEMORY b ) +{ + // compare 1. integer + if( a->k_dir_id < b->k_dir_id ) return RFSD_KEY_SMALLER; + if( a->k_dir_id > b->k_dir_id ) return RFSD_KEY_LARGER; + + // compare 2. integer + if( a->k_objectid < b->k_objectid ) return RFSD_KEY_SMALLER; + if( a->k_objectid > b->k_objectid ) return RFSD_KEY_LARGER; + + return RFSD_KEYS_MATCH; +} + + +/** Compares two in memory keys, returning KEY_SMALLER, KEY_LARGER, or KEYS_MATCH relative to the first key given. */ +RFSD_KEY_COMPARISON +CompareKeysWithoutOffset( + IN PRFSD_KEY_IN_MEMORY a, + IN PRFSD_KEY_IN_MEMORY b ) +{ + // compare 1. integer + if( a->k_dir_id < b->k_dir_id ) return RFSD_KEY_SMALLER; + if( a->k_dir_id > b->k_dir_id ) return RFSD_KEY_LARGER; + + // compare 2. integer + if( a->k_objectid < b->k_objectid ) return RFSD_KEY_SMALLER; + if( a->k_objectid > b->k_objectid ) return RFSD_KEY_LARGER; + + // compare 4. integer + // NOTE: Buchholz says that if we get to here in navigating the file tree, something has gone wrong... + if( a->k_type < b->k_type ) return RFSD_KEY_SMALLER; + if( a->k_type > b->k_type ) return RFSD_KEY_LARGER; + + return RFSD_KEYS_MATCH; +} + + +/** Compares two in memory keys, returning KEY_SMALLER, KEY_LARGER, or KEYS_MATCH relative to the first key given. */ +RFSD_KEY_COMPARISON +CompareKeys( + IN PRFSD_KEY_IN_MEMORY a, + IN PRFSD_KEY_IN_MEMORY b ) +{ + // compare 1. integer + if( a->k_dir_id < b->k_dir_id ) return RFSD_KEY_SMALLER; + if( a->k_dir_id > b->k_dir_id ) return RFSD_KEY_LARGER; + + // compare 2. integer + if( a->k_objectid < b->k_objectid ) return RFSD_KEY_SMALLER; + if( a->k_objectid > b->k_objectid ) return RFSD_KEY_LARGER; + + // compare 3. integer + if( a->k_offset < b->k_offset ) return RFSD_KEY_SMALLER; + if( a->k_offset > b->k_offset ) return RFSD_KEY_LARGER; + + // compare 4. integer + // NOTE: Buchholz says that if we get to here in navigating the file tree, something has gone wrong... + if( a->k_type < b->k_type ) return RFSD_KEY_SMALLER; + if( a->k_type > b->k_type ) return RFSD_KEY_LARGER; + + return RFSD_KEYS_MATCH; +} + + + +/* +______________________________________________________________________________ + _____ _ _ _ _ _ +|_ _| __ ___ ___ | \ | | __ ___ _(_) __ _ __ _| |_(_) ___ _ __ + | || '__/ _ \/ _ \ | \| |/ _` \ \ / / |/ _` |/ _` | __| |/ _ \| '_ \ + | || | | __/ __/ | |\ | (_| |\ V /| | (_| | (_| | |_| | (_) | | | | + |_||_| \___|\___| |_| \_|\__,_| \_/ |_|\__, |\__,_|\__|_|\___/|_| |_| + |___/ +______________________________________________________________________________ +*/ + +NTSTATUS +NavigateToLeafNode( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, // Key to search for. + IN ULONG StartingBlockNumber, // Block number of an internal or leaf node, to start the search from + OUT PULONG out_NextBlockNumber // Block number of the leaf node that contains Key + ) +{ + return _NavigateToLeafNode(Vcb, Key, StartingBlockNumber, out_NextBlockNumber, TRUE, &CompareKeys, NULL, NULL); +} + +NTSTATUS +RfsdParseFilesystemTree( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, // Key to search for. + IN ULONG StartingBlockNumber, // Block number of an internal or leaf node, to start the search from + IN RFSD_CALLBACK(fpDirectoryCallback), // A function ptr to trigger on hitting a matching leaf block + IN PVOID pContext // This context item will simply be passed through to the callback when invoked + ) +{ + ULONG out = 0; + return _NavigateToLeafNode(Vcb, Key, StartingBlockNumber, &out, FALSE, &CompareShortKeys, fpDirectoryCallback, pContext); +} + + +/** + Returns the block number of the leaf node that should contain key (if that key exists at all within the disk tree). + + STATUS_INVALID_HANDLE if a block or block header could not be read + STATUS_INSUFFICIENT_RESOURCES if processing was terminated due to a failure of memory allocation + STATUS_SUCCESS on success + NOTE: the return value can also be anything defined by the invoked callback +**/ +NTSTATUS +_NavigateToLeafNode( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY Key, // Key to search for. + IN ULONG StartingBlockNumber, // Block number of an internal or leaf node, to start the search from + OUT PULONG out_NextBlockNumber, // Block number of the leaf node that contains Key (when a callback is in use, this is typically ignored -- it returns the block number at which the callback was last triggered) + IN BOOLEAN ReturnOnFirstMatch, // Whether or not the function should return upon finding the first leaf node containing the Key + IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY), + RFSD_CALLBACK(fpDirectoryCallback), // A function ptr to trigger on hitting a matching leaf block + IN PVOID pContext // This context item will simply be passed through to the callback when invoked + + + ) +{ + NTSTATUS Status = STATUS_SUCCESS; + ULONG leafNodeBlockNumber; // The result to be calculated + PRFSD_DISK_NODE_REF pTargetDiskNodeReference = NULL; // + + // Read in this disk node's data + PUCHAR pBlockBuffer = RfsdAllocateAndLoadBlock(Vcb, StartingBlockNumber); + + // Read the block header + PRFSD_BLOCK_HEAD pBlockHeader = (PRFSD_BLOCK_HEAD) pBlockBuffer; + + // Sanity check that we could read the block and the header is there + if (!pBlockBuffer) { return STATUS_INVALID_HANDLE; } + + // If this block is a leaf, just return it (or invoke the given callback on the leaf block) + if (pBlockHeader->blk_level == RFSD_LEAF_BLOCK_LEVEL) + { + NTSTATUS CallbackStatus; + + ExFreePool(pBlockBuffer); + + *out_NextBlockNumber = StartingBlockNumber; + + // If a callback should be invoked on finding a matching leaf node, do so... + if (fpDirectoryCallback) return (*fpDirectoryCallback)(StartingBlockNumber, pContext); + else return STATUS_SUCCESS; + } + + // Otherwise, find the next node down in the tree, by obtaining pTargetDiskNodeReference + { + ULONG idxRightKey = 0; + PRFSD_KEY_ON_DISK pLeftKeyOnDisk = NULL; + PRFSD_KEY_ON_DISK pRightKeyOnDisk = NULL; + + RFSD_KEY_IN_MEMORY LeftKeyInMemory, RightKeyInMemory; + RFSD_KEY_COMPARISON leftComparison, rightComparison; + + RightKeyInMemory.k_dir_id = 0; // (Dummy statement to prevent needless warning aboujt using RightKeyInMemory before being initialized) + + // Search (within the increasing list of target Keys), for the target key that Key is <= to. + for (idxRightKey = 0; idxRightKey <= pBlockHeader->blk_nr_item; idxRightKey++) + { + // Advance the left key to become what was the right key, and the right key to become the next key + pLeftKeyOnDisk = pRightKeyOnDisk; + pRightKeyOnDisk = (idxRightKey == pBlockHeader->blk_nr_item) ? + (PRFSD_KEY_ON_DISK) NULL : + (PRFSD_KEY_ON_DISK) (pBlockBuffer + sizeof(RFSD_BLOCK_HEAD) + (idxRightKey * sizeof(RFSD_KEY_ON_DISK))); + + LeftKeyInMemory = RightKeyInMemory; + if (pRightKeyOnDisk) + FillInMemoryKey(pRightKeyOnDisk, RFSD_KEY_VERSION_UNKNOWN, &(RightKeyInMemory)); + + + // Find if the target key falls in the range in between the left and right keys... + { + // We must be smaller than the right key (if it exists). However, we will allow the key to match if short key comparisons are in use. + rightComparison = pRightKeyOnDisk ? ((*fpComparisonFunction)(Key, &RightKeyInMemory)) : RFSD_KEY_SMALLER; + if (fpComparisonFunction == &CompareShortKeys) + { if (rightComparison == RFSD_KEY_LARGER) continue; } + else + { if (rightComparison != RFSD_KEY_SMALLER) continue; } + + // And larger than or equal to the left key. + leftComparison = pLeftKeyOnDisk ? ((*fpComparisonFunction)(Key, &LeftKeyInMemory)) : RFSD_KEY_LARGER; + if ( (leftComparison == RFSD_KEY_LARGER) || (leftComparison == RFSD_KEYS_MATCH) ) + { + // The target range has been found. Read the reference to the disk node child, lower in the tree. + // This returns the pointer preceding the righthand key. + pTargetDiskNodeReference = (PRFSD_DISK_NODE_REF) (pBlockBuffer + + sizeof(RFSD_BLOCK_HEAD) + (pBlockHeader->blk_nr_item * sizeof(RFSD_KEY_ON_DISK)) + (idxRightKey * sizeof(RFSD_DISK_NODE_REF))); + + // Continue recursion downwards; eventually a leaf node will be returned. + Status = _NavigateToLeafNode( + Vcb, Key, pTargetDiskNodeReference->dc_block_number, + &(leafNodeBlockNumber), + ReturnOnFirstMatch, fpComparisonFunction, fpDirectoryCallback, pContext); // < + + if (ReturnOnFirstMatch || Status == STATUS_EVENT_DONE || // Success cases + Status == STATUS_INSUFFICIENT_RESOURCES || Status == STATUS_INVALID_HANDLE) // Error cases + { goto return_results; } + } + } + } + } + +return_results: + + ExFreePool(pBlockBuffer); + *out_NextBlockNumber = leafNodeBlockNumber; + return Status; +} + Added: vendor/rfsd/current/RFSD/RFSD/rfsdblock.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/rfsdblock.c…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/rfsdblock.c (added) +++ vendor/rfsd/current/RFSD/RFSD/rfsdblock.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,170 @@ +#include <ntstatus.h> + +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: rfsdblock.c + * PROGRAMMER: Mark Piper + * HOMEPAGE:
http://rfsd.sf.net
+ * UPDATE HISTORY: + * + * Disk block operations that are specific to ReiserFS. + * + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdAllocateAndLoadBlock) +#pragma alloc_text(PAGE, RfsdFindItemHeaderInBlock) +#pragma alloc_text(PAGE, RfsdLoadItem) +#endif + +/* FUNCTIONS *************************************************************/ + +/** + Returns the address of an allocated buffer (WHICH THE CALLER WILL BE RESPONSIBLE FOR FREEING!), filled with the contents of the given block number on disk. + (This is really just an alternative interface to LoadBlock) +*/ +PUCHAR +RfsdAllocateAndLoadBlock( + IN PRFSD_VCB Vcb, + IN ULONG BlockIndex) // The ordinal block number to read +{ + // Allocate the return buffer (the caller will be responsible for freeing this!) + PUCHAR pReturnBuffer = ExAllocatePool(NonPagedPool, Vcb->BlockSize); // NOTE: for now, I'm switching this to non-paged, because i was getting crashes + if (!pReturnBuffer) + { DbgBreak(); return NULL; } + + // Read the block in from disk, or from cache. + if (!RfsdLoadBlock(Vcb, BlockIndex, pReturnBuffer)) + { DbgBreak(); ExFreePool(pReturnBuffer); return NULL; } + + // Return the result to the caller. + return pReturnBuffer; +} + + +/** + Finds the item header inside a given leaf node block that matches a given key. + + STATUS_INVALID_HANDLE if the block given to search is invalid + STATUS_NO_SUCH_MEMBER if the key is not found in the block given +*/ +NTSTATUS +RfsdFindItemHeaderInBlock( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pTargetKey, // The key to match against + IN PUCHAR pBlockBuffer, // A filled disk block, provided by the caller + OUT PRFSD_ITEM_HEAD* ppMatchingItemHeader, // A pointer to a PRFSD_ITEM_HEAD. The PRFSD_ITEM_HEAD will point to the item head matching Key, or NULL if there was no such item head in the given block. + IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY) + ) +{ + // Read the block header + PRFSD_BLOCK_HEAD pBlockHeader = (PRFSD_BLOCK_HEAD) pBlockBuffer; + PUCHAR pItemHeaderListBuffer = (PUCHAR) pBlockBuffer + sizeof(RFSD_BLOCK_HEAD); + + *ppMatchingItemHeader = NULL; + + // Sanity check that the block (and therefore its header) is there + if (!pBlockHeader) { return STATUS_INVALID_HANDLE; } + ASSERT(pBlockHeader->blk_level == 1); + + // Search through the item headers to find one with a key matching pTargetKey + { + ULONG idxCurrentItemHeader = 0; + PRFSD_ITEM_HEAD pCurrentItemHeader = NULL; + RFSD_KEY_IN_MEMORY CurrentItemKey; + + for(idxCurrentItemHeader = 0; idxCurrentItemHeader < pBlockHeader->blk_nr_item; idxCurrentItemHeader++) + { + // Grab the item header, and its key + pCurrentItemHeader = (PRFSD_ITEM_HEAD) (pItemHeaderListBuffer + idxCurrentItemHeader * sizeof(RFSD_ITEM_HEAD)); + + FillInMemoryKey( + &( pCurrentItemHeader->ih_key ), pCurrentItemHeader->ih_version, + &( CurrentItemKey ) ); // < + + // Check if this item is the one being searched for + if ( RFSD_KEYS_MATCH == (*fpComparisonFunction)( pTargetKey , &CurrentItemKey ) ) + { + *ppMatchingItemHeader = pCurrentItemHeader; + return STATUS_SUCCESS; + } + } + + // If a matching key was never found, simply return + return STATUS_NO_SUCH_MEMBER; + } +} + + +/** +Given an item's key, load the block, the item header, and the item buffer associated with the key. + +STATUS_INTERNAL_ERROR if leaf node could not be reached +STATUS_NO_SUCH_MEMBER if the item header could not be located +STATUS_INSUFFICIENT_RESOURCES if the leaf node buffer could not be allocated + +*/ +NTSTATUS +RfsdLoadItem( + IN PRFSD_VCB Vcb, + IN PRFSD_KEY_IN_MEMORY pItemKey, // The key of the item to find + OUT PRFSD_ITEM_HEAD* ppMatchingItemHeader, + OUT PUCHAR* ppItemBuffer, + OUT PUCHAR* ppBlockBuffer, // Block buffer, which backs the other output data structures. The caller must free this (even in the case of an error)! + OPTIONAL OUT PULONG pBlockNumber, // The ordinal disk block number at which the item was found + IN RFSD_KEY_COMPARISON (*fpComparisonFunction)(PRFSD_KEY_IN_MEMORY, PRFSD_KEY_IN_MEMORY) + ) +{ + NTSTATUS Status; + ULONG LeafNodeBlockNumber; + + // Clear the output pointers + *ppItemBuffer = *ppBlockBuffer = NULL; + *ppMatchingItemHeader = NULL; + if (pBlockNumber) *pBlockNumber = 0; + + + // Find the block number of the leaf node bock (on disk), that should contain the item w/ pItemKey + Status = NavigateToLeafNode( + Vcb, pItemKey, Vcb->SuperBlock->s_root_block, + &(LeafNodeBlockNumber) + ); + if (!NT_SUCCESS(Status)){ DbgBreak(); return STATUS_INTERNAL_ERROR; } + if (pBlockNumber) *pBlockNumber = LeafNodeBlockNumber; + + + // Load the block (which the caller must later free) + *ppBlockBuffer = RfsdAllocateAndLoadBlock(Vcb, LeafNodeBlockNumber); + if (!*ppBlockBuffer) { return STATUS_INSUFFICIENT_RESOURCES; } + + + // Get the item header and its information + Status = RfsdFindItemHeaderInBlock( + Vcb, pItemKey, *ppBlockBuffer, + ( ppMatchingItemHeader ), //< + fpComparisonFunction + ); + if (Status == STATUS_NO_SUCH_MEMBER) { return STATUS_NO_SUCH_MEMBER; } + if (!*ppMatchingItemHeader) { return STATUS_INTERNAL_ERROR; } + + // Setup the item buffer + *ppItemBuffer = (PUCHAR) *ppBlockBuffer + (*ppMatchingItemHeader)->ih_item_location; + + return STATUS_SUCCESS; +} + + + + + Added: vendor/rfsd/current/RFSD/RFSD/rfsdfs.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/rfsdfs.h?re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/rfsdfs.h (added) +++ vendor/rfsd/current/RFSD/RFSD/rfsdfs.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,805 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: Rfsdfs.h + * PURPOSE: Header file: rfsd structures + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +#ifndef _RFSD_HEADER_ +#define _RFSD_HEADER_ + +/* INCLUDES *************************************************************/ + +#include <linux/module.h> + +#include "fsparameters.h" + +#include <ntdddisk.h> + +#pragma pack(1) + +/* DEBUG ****************************************************************/ +#if DBG + //Equivalent to DbgBreakPoint() + #define DbgBreak() __asm { int 3 } +#else + #define DbgBreak() +#endif + +/* STRUCTS & CONSTS******************************************************/ + +#define RFSDFSD_VERSION "0.24" + +// +// RfsdFsd build options +// + +// To build read-only driver + +#define RFSD_READ_ONLY TRUE + + +// To support driver dynamics unload + +#define RFSD_UNLOAD TRUE + +// +// Constants +// + +#define RFSD_BLOCK_TYPES (0x04) + +#define MAXIMUM_RECORD_LENGTH (0x10000) + +#define SECTOR_BITS (Vcb->SectorBits) +#define SECTOR_SIZE (Vcb->DiskGeometry.BytesPerSector) +#define DEFAULT_SECTOR_SIZE (0x200) + +#define READ_AHEAD_GRANULARITY (0x10000) + +#define SUPER_BLOCK (Vcb->SuperBlock) + +#define BLOCK_SIZE (Vcb->BlockSize) +#define BLOCK_BITS (SUPER_BLOCK->s_log_block_size + 10) + +#define INODES_COUNT (Vcb->SuperBlock->s_inodes_count) + +#define INODES_PER_GROUP (SUPER_BLOCK->s_inodes_per_group) +#define BLOCKS_PER_GROUP (SUPER_BLOCK->s_blocks_per_group) +#define TOTAL_BLOCKS (SUPER_BLOCK->s_blocks_count) + +#define RFSD_FIRST_DATA_BLOCK (SUPER_BLOCK->s_first_data_block) + + + +#define CEILING_ALIGNED(A, B) (((A) + (B) - 1) & (~((B) - 1))) + + +// The __SLINE__ macro evaluates to a string with the line of the program from which it is called. +// (Note that this requires two levels of macro indirection...) +#define __STR2__(x) #x +#define __STR1__(x) __STR2__(x) +#define __SLINE__ __STR1__(__LINE__) + + +/* File System Releated *************************************************/ + +#define DRIVER_NAME "RfsdFsd" +#define DEVICE_NAME L"\\RfsdFsd" + +// Registry + +#define PARAMETERS_KEY L"\\Parameters" + +#define WRITING_SUPPORT L"WritingSupport" +#define CHECKING_BITMAP L"CheckingBitmap" +#define EXT3_FORCEWRITING L"Ext3ForceWriting" +#define EXT3_CODEPAGE L"CodePage" + +// To support rfsdfsd unload routine +#if RFSD_UNLOAD + +#define DOS_DEVICE_NAME L"\\DosDevices\\RfsdFsd" + +// +// Private IOCTL to make the driver ready to unload +// +#define IOCTL_PREPARE_TO_UNLOAD \ +CTL_CODE(FILE_DEVICE_UNKNOWN, 2048, METHOD_NEITHER, FILE_WRITE_ACCESS) + +#endif // RFSD_UNLOAD + +#ifndef SetFlag +#define SetFlag(x,f) ((x) |= (f)) +#endif + +#ifndef ClearFlag +#define ClearFlag(x,f) ((x) &= ~(f)) +#endif + +#define IsFlagOn(a,b) ((BOOLEAN)(FlagOn(a,b) == b)) + +#define RfsdRaiseStatus(IRPCONTEXT,STATUS) { \ + (IRPCONTEXT)->ExceptionCode = (STATUS); \ + ExRaiseStatus( (STATUS) ); \ +} + +#define RfsdNormalizeAndRaiseStatus(IRPCONTEXT,STATUS) { \ + /* (IRPCONTEXT)->ExceptionStatus = (STATUS); */ \ + if ((STATUS) == STATUS_VERIFY_REQUIRED) { ExRaiseStatus((STATUS)); } \ + ExRaiseStatus(FsRtlNormalizeNtstatus((STATUS),STATUS_UNEXPECTED_IO_ERROR)); \ +} + +// +// Define IsEndofFile for read and write operations +// + +#define FILE_WRITE_TO_END_OF_FILE 0xffffffff +#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe + +#define IsEndOfFile(Pos) ((Pos.LowPart == FILE_WRITE_TO_END_OF_FILE) && \ + (Pos.HighPart == FILE_USE_FILE_POINTER_POSITION )) + +#define IsDirectory(Fcb) IsFlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY) + +// +// Bug Check Codes Definitions +// + +#define RFSD_FILE_SYSTEM (FILE_SYSTEM) + +#define RFSD_BUGCHK_BLOCK (0x00010000) +#define RFSD_BUGCHK_CLEANUP (0x00020000) +#define RFSD_BUGCHK_CLOSE (0x00030000) +#define RFSD_BUGCHK_CMCB (0x00040000) +#define RFSD_BUGCHK_CREATE (0x00050000) +#define RFSD_BUGCHK_DEBUG (0x00060000) +#define RFSD_BUGCHK_DEVCTL (0x00070000) +#define RFSD_BUGCHK_DIRCTL (0x00080000) +#define RFSD_BUGCHK_DISPATCH (0x00090000) +#define RFSD_BUGCHK_EXCEPT (0x000A0000) +#define RFSD_BUGCHK_RFSD (0x000B0000) +#define RFSD_BUGCHK_FASTIO (0x000C0000) +#define RFSD_BUGCHK_FILEINFO (0x000D0000) +#define RFSD_BUGCHK_FLUSH (0x000E0000) +#define RFSD_BUGCHK_FSCTL (0x000F0000) +#define RFSD_BUGCHK_INIT (0x00100000) +#define RFSD_BUGCHK_LOCK (0x0011000) +#define RFSD_BUGCHK_MEMORY (0x0012000) +#define RFSD_BUGCHK_MISC (0x0013000) +#define RFSD_BUGCHK_READ (0x00140000) +#define RFSD_BUGCHK_SHUTDOWN (0x00150000) +#define RFSD_BUGCHK_VOLINFO (0x00160000) +#define RFSD_BUGCHK_WRITE (0x00170000) + +#define RFSD_BUGCHK_LAST (0x00170000) + +#define RfsdBugCheck(A,B,C,D) { KeBugCheckEx(RFSD_FILE_SYSTEM, A | __LINE__, B, C, D ); } + + +/* Rfsd file system definions *******************************************/ + +// +// The second extended file system magic number +// + +#define RFSD_MIN_BLOCK 1024 +#define RFSD_MIN_FRAG 1024 + +// +// Inode flags (Linux uses octad number, but why ? strange!!!) +// + +#define S_IFMT 0x0F000 /* 017 0000 */ +#define S_IFSOCK 0x0C000 /* 014 0000 */ +#define S_IFLNK 0x0A000 /* 012 0000 */ +#define S_IFREG 0x08000 /* 010 0000 */ +#define S_IFBLK 0x06000 /* 006 0000 */ +#define S_IFDIR 0x04000 /* 004 0000 */ +#define S_IFCHR 0x02000 /* 002 0000 */ +#define S_IFIFO 0x01000 /* 001 0000 */ +#define S_ISUID 0x00800 /* 000 4000 */ +#define S_ISGID 0x00400 /* 000 2000 */ +#define S_ISVTX 0x00200 /* 000 1000 */ + +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISFIL(m) (((m) & S_IFMT) == S_IFFIL) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) + +#define S_IPERMISSION_MASK 0x1FF /* */ + +#define S_IRWXU 0x1C0 /* 0 0700 */ +#define S_IRUSR 0x100 /* 0 0400 */ +#define S_IWUSR 0x080 /* 0 0200 */ +#define S_IXUSR 0x040 /* 0 0100 */ + +#define S_IRWXG 0x038 /* 0 0070 */ +#define S_IRGRP 0x020 /* 0 0040 */ +#define S_IWGRP 0x010 /* 0 0020 */ +#define S_IXGRP 0x008 /* 0 0010 */ + +#define S_IRWXO 0x007 /* 0 0007 */ +#define S_IROTH 0x004 /* 0 0004 */ +#define S_IWOTH 0x002 /* 0 0002 */ +#define S_IXOTH 0x001 /* 0 0001 */ + +#define S_IRWXUGO (S_IRWXU|S_IRWXG|S_IRWXO) +#define S_IALLUGO (S_ISUID|S_ISGID|S_ISVTX|S_IRWXUGO) +#define S_IRUGO (S_IRUSR|S_IRGRP|S_IROTH) +#define S_IWUGO (S_IWUSR|S_IWGRP|S_IWOTH) +#define S_IXUGO (S_IXUSR|S_IXGRP|S_IXOTH) + +#define S_ISREADABLE(m) (((m) & S_IPERMISSION_MASK) == (S_IRUSR | S_IRGRP | S_IROTH)) +#define S_ISWRITABLE(m) (((m) & S_IPERMISSION_MASK) == (S_IWUSR | S_IWGRP | S_IWOTH)) + +#define RfsdSetReadable(m) (m) = ((m) | (S_IRUSR | S_IRGRP | S_IROTH)) +#define RfsdSetWritable(m) (m) = ((m) | (S_IWUSR | S_IWGRP | S_IWOTH)) + +#define RfsdSetReadOnly(m) (m) = ((m) & (~(S_IWUSR | S_IWGRP | S_IWOTH))) +#define RfsdIsReadOnly(m) (!((m) & (S_IWUSR | S_IWGRP | S_IWOTH))) + +// +// Inode state bits +// + +#define I_DIRTY_SYNC 1 /* Not dirty enough for O_DATASYNC */ +#define I_DIRTY_DATASYNC 2 /* Data-related inode changes pending */ +#define I_DIRTY_PAGES 4 /* Data-related inode changes pending */ +#define I_LOCK 8 +#define I_FREEING 16 +#define I_CLEAR 32 + +#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES) + + +// +// RfsdFsd Driver Definitions +// + +// +// RFSD_IDENTIFIER_TYPE +// +// Identifiers used to mark the structures +// + +typedef enum _RFSD_IDENTIFIER_TYPE { + RFSDFGD = ':DGF', + RFSDVCB = ':BCV', + RFSDFCB = ':BCF', + RFSDCCB = ':BCC', + RFSDICX = ':XCI', + RFSDFSD = ':DSF', + RFSDMCB = ':BCM' +} RFSD_IDENTIFIER_TYPE; + +// +// RFSD_IDENTIFIER +// +// Header used to mark the structures +// +typedef struct _RFSD_IDENTIFIER { + RFSD_IDENTIFIER_TYPE Type; + ULONG Size; +} RFSD_IDENTIFIER, *PRFSD_IDENTIFIER; + + +#define NodeType(Ptr) (*((RFSD_IDENTIFIER_TYPE *)(Ptr))) + +typedef struct _RFSD_MCB RFSD_MCB, *PRFSD_MCB; + + +typedef PVOID PBCB; + +// +// REPINNED_BCBS List +// + +#define RFSD_REPINNED_BCBS_ARRAY_SIZE (8) + +typedef struct _RFSD_REPINNED_BCBS { + + // + // A pointer to the next structure contains additional repinned bcbs + // + + struct _RFSD_REPINNED_BCBS *Next; + + // + // A fixed size array of pinned bcbs. Whenever a new bcb is added to + // the repinned bcb structure it is added to this array. If the + // array is already full then another repinned bcb structure is allocated + // and pointed to with Next. + // + + PBCB Bcb[ RFSD_REPINNED_BCBS_ARRAY_SIZE ]; + +} RFSD_REPINNED_BCBS, *PRFSD_REPINNED_BCBS; + + +#define CODEPAGE_MAXLEN 0x20 + +// +// RFSD_GLOBAL_DATA +// +// Data that is not specific to a mounted volume +// + +typedef struct _RFSD_GLOBAL { + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; + + // Syncronization primitive for this structure + ERESOURCE Resource; + + // Syncronization primitive for Counting + ERESOURCE CountResource; + + // Syncronization primitive for LookAside Lists + ERESOURCE LAResource; + + // Table of pointers to the fast I/O entry points + FAST_IO_DISPATCH FastIoDispatch; + + // Table of pointers to the Cache Manager callbacks + CACHE_MANAGER_CALLBACKS CacheManagerCallbacks; + CACHE_MANAGER_CALLBACKS CacheManagerNoOpCallbacks; + + // Pointer to the driver object + PDRIVER_OBJECT DriverObject; + + // Pointer to the main device object + PDEVICE_OBJECT DeviceObject; + + // List of mounted volumes + LIST_ENTRY VcbList; + + // Look Aside table of IRP_CONTEXT, FCB, MCB, CCB + USHORT MaxDepth; + NPAGED_LOOKASIDE_LIST RfsdIrpContextLookasideList; + NPAGED_LOOKASIDE_LIST RfsdFcbLookasideList; + NPAGED_LOOKASIDE_LIST RfsdCcbLookasideList; + PAGED_LOOKASIDE_LIST RfsdMcbLookasideList; + + // Mcb Count ... + USHORT McbAllocated; + +#if DBG + // Fcb Count + USHORT FcbAllocated; + + // IRP_MJ_CLOSE : FCB + USHORT IRPCloseCount; +#endif + + // Global flags for the driver + ULONG Flags; + + // User specified codepage name + struct { + WCHAR UniName[CODEPAGE_MAXLEN]; + UCHAR AnsiName[CODEPAGE_MAXLEN]; + struct nls_table * PageTable; + } CodePage; + +} RFSD_GLOBAL, *PRFSD_GLOBAL; + +#define PAGE_TABLE RfsdGlobal->CodePage.PageTable + +// +// Flags for RFSD_GLOBAL_DATA +// +#define RFSD_UNLOAD_PENDING 0x00000001 +#define RFSD_SUPPORT_WRITING 0x00000002 +#define EXT3_FORCE_WRITING 0x00000004 +#define RFSD_CHECKING_BITMAP 0x00000008 + +// +// Driver Extension define +// +typedef struct { + RFSD_GLOBAL RfsdGlobal; +} RFSDFS_EXT, *PRFSDFS_EXT; + + +typedef struct _RFSD_FCBVCB { + + // FCB header required by NT + FSRTL_COMMON_FCB_HEADER CommonFCBHeader; + SECTION_OBJECT_POINTERS SectionObject; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; + // end FCB header required by NT + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; +} RFSD_FCBVCB, *PRFSD_FCBVCB; + +// +// RFSD_VCB Volume Control Block +// +// Data that represents a mounted logical volume +// It is allocated as the device extension of the volume device object +// +typedef struct _RFSD_VCB { + + // FCB header required by NT + // The VCB is also used as an FCB for file objects + // that represents the volume itself + FSRTL_COMMON_FCB_HEADER Header; + SECTION_OBJECT_POINTERS SectionObject; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; + // end FCB header required by NT + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; + + LIST_ENTRY Next; + + // Share Access for the file object + SHARE_ACCESS ShareAccess; + + // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP + // for files on this volume. + ULONG OpenFileHandleCount; + + // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLOSE + // for both files on this volume and open instances of the + // volume itself. + ULONG ReferenceCount; + ULONG OpenHandleCount; + + // + // Disk change count + // + + ULONG ChangeCount; + + // Pointer to the VPB in the target device object + PVPB Vpb; + + // The FileObject of Volume used to lock the volume + PFILE_OBJECT LockFile; + + // List of FCBs for open files on this volume + LIST_ENTRY FcbList; + + // List of IRPs pending on directory change notify requests + LIST_ENTRY NotifyList; + + // Pointer to syncronization primitive for this list + PNOTIFY_SYNC NotifySync; + + // This volumes device object + PDEVICE_OBJECT DeviceObject; + + // The physical device object (the disk) + PDEVICE_OBJECT TargetDeviceObject; + + // The physical device object (the disk) + PDEVICE_OBJECT RealDevice; + + // Information about the physical device object + DISK_GEOMETRY DiskGeometry; + PARTITION_INFORMATION PartitionInformation; + + PRFSD_SUPER_BLOCK SuperBlock; + PVOID GroupDesc; // (NOTE: unused in ReiserFS, but preserved in order to minimize changes to existing code) +// PVOID GroupDescBcb; + + // Number of Group Decsciptions + ULONG NumOfGroups; +/* + // Bitmap Block per group + PRTL_BITMAP BlockBitMaps; + PRTL_BITMAP InodeBitMaps; +*/ + // Block / Cluster size + ULONG BlockSize; + + // Sector size in bits (NOTE: unused in ReiserFS) + //ULONG SectorBits; + + ULONG dwData[RFSD_BLOCK_TYPES]; + ULONG dwMeta[RFSD_BLOCK_TYPES]; + + // Flags for the volume + ULONG Flags; + + // Streaming File Object + PFILE_OBJECT StreamObj; + + // Resource Lock for Mcb + ERESOURCE McbResource; + + // Dirty Mcbs of modifications for volume stream + LARGE_MCB DirtyMcbs; + + // Entry of Mcb Tree (Root Node) + PRFSD_MCB McbTree; + LIST_ENTRY McbList; + +} RFSD_VCB, *PRFSD_VCB; + +// +// Flags for RFSD_VCB +// +#define VCB_INITIALIZED 0x00000001 +#define VCB_VOLUME_LOCKED 0x00000002 +#define VCB_MOUNTED 0x00000004 +#define VCB_DISMOUNT_PENDING 0x00000008 +#define VCB_READ_ONLY 0x00000010 + +#define VCB_WRITE_PROTECTED 0x10000000 +#define VCB_FLOPPY_DISK 0x20000000 +#define VCB_REMOVAL_PREVENTED 0x40000000 +#define VCB_REMOVABLE_MEDIA 0x80000000 + + +#define IsMounted(Vcb) (IsFlagOn(Vcb->Flags, VCB_MOUNTED)) + +// +// RFSD_FCB File Control Block +// +// Data that represents an open file +// There is a single instance of the FCB for every open file +// +typedef struct _RFSD_FCB { + + // FCB header required by NT + FSRTL_COMMON_FCB_HEADER Header; + SECTION_OBJECT_POINTERS SectionObject; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; + // end FCB header required by NT + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; + + // List of FCBs for this volume + LIST_ENTRY Next; + + // Share Access for the file object + SHARE_ACCESS ShareAccess; + + // List of byte-range locks for this file + FILE_LOCK FileLockAnchor; + + // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP + ULONG OpenHandleCount; + + // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLOSE + ULONG ReferenceCount; + + // Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP + // But only for Files with FO_NO_INTERMEDIATE_BUFFERING flag + ULONG NonCachedOpenCount; + + // Flags for the FCB + ULONG Flags; + + // Pointer to the inode / stat data structure + PRFSD_INODE Inode; + + // Hint block for next allocation + ULONG BlkHint; + + // Vcb + + PRFSD_VCB Vcb; + + // Mcb Node ... + PRFSD_MCB RfsdMcb; + + // Full Path Name + UNICODE_STRING LongName; + +#if DBG + // The Ansi Filename for debugging + OEM_STRING AnsiFileName; +#endif + + +} RFSD_FCB, *PRFSD_FCB; + + +// +// Flags for RFSD_FCB +// +#define FCB_FROM_POOL 0x00000001 +#define FCB_PAGE_FILE 0x00000002 +#define FCB_DELETE_ON_CLOSE 0x00000004 +#define FCB_DELETE_PENDING 0x00000008 +#define FCB_FILE_DELETED 0x00000010 +#define FCB_FILE_MODIFIED 0x00000020 + +// Mcb Node + +struct _RFSD_MCB { + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; + + // Flags + ULONG Flags; + + // Link List Info + + PRFSD_MCB Parent; // Parent + PRFSD_MCB Child; // Children + PRFSD_MCB Next; // Brothers + + // Mcb Node Info + + // -> Fcb + PRFSD_FCB RfsdFcb; + + // Short name + UNICODE_STRING ShortName; + + // Inode number (ReiserFS uses 128-bit keys instead of inode numbers) + RFSD_KEY_IN_MEMORY Key; + + // Dir entry offset in parent (relative to the start of the directory listing) + ULONG DeOffset; + + // File attribute + ULONG FileAttr; + + // List Link to Vcb->McbList + LIST_ENTRY Link; +}; + +// +// Flags for MCB +// +#define MCB_FROM_POOL 0x00000001 +#define MCB_IN_TREE 0x00000002 +#define MCB_IN_USE 0x00000004 + +#define IsMcbUsed(Mcb) IsFlagOn(Mcb->Flags, MCB_IN_USE) + +// +// RFSD_CCB Context Control Block +// +// Data that represents one instance of an open file +// There is one instance of the CCB for every instance of an open file +// +typedef struct _RFSD_CCB { + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; + + // Flags + ULONG Flags; + + // State that may need to be maintained + ULONG CurrentByteOffset; + UNICODE_STRING DirectorySearchPattern; + +} RFSD_CCB, *PRFSD_CCB; + +// +// Flags for CCB +// + +#define CCB_FROM_POOL 0x00000001 + +#define CCB_ALLOW_EXTENDED_DASD_IO 0x80000000 + +// +// RFSD_IRP_CONTEXT +// +// Used to pass information about a request between the drivers functions +// +typedef struct _RFSD_IRP_CONTEXT { + + // Identifier for this structure + RFSD_IDENTIFIER Identifier; + + // Pointer to the IRP this request describes + PIRP Irp; + + // Flags + ULONG Flags; + + // The major and minor function code for the request + UCHAR MajorFunction; + UCHAR MinorFunction; + + // The device object + PDEVICE_OBJECT DeviceObject; + + // The real device object + PDEVICE_OBJECT RealDevice; + + // The file object + PFILE_OBJECT FileObject; + + PRFSD_FCB Fcb; + PRFSD_CCB Ccb; + + // If the request is synchronous (we are allowed to block) + BOOLEAN IsSynchronous; + + // If the request is top level + BOOLEAN IsTopLevel; + + // Used if the request needs to be queued for later processing + WORK_QUEUE_ITEM WorkQueueItem; + + // If an exception is currently in progress + BOOLEAN ExceptionInProgress; + + // The exception code when an exception is in progress + NTSTATUS ExceptionCode; + + // Repinned BCBs List + RFSD_REPINNED_BCBS Repinned; + +} RFSD_IRP_CONTEXT, *PRFSD_IRP_CONTEXT; + + +#define IRP_CONTEXT_FLAG_FROM_POOL (0x00000001) +#define IRP_CONTEXT_FLAG_WAIT (0x00000002) +#define IRP_CONTEXT_FLAG_WRITE_THROUGH (0x00000004) +#define IRP_CONTEXT_FLAG_FLOPPY (0x00000008) +#define IRP_CONTEXT_FLAG_RECURSIVE_CALL (0x00000010) +#define IRP_CONTEXT_FLAG_DISABLE_POPUPS (0x00000020) +#define IRP_CONTEXT_FLAG_DEFERRED (0x00000040) +#define IRP_CONTEXT_FLAG_VERIFY_READ (0x00000080) +#define IRP_CONTEXT_STACK_IO_CONTEXT (0x00000100) +#define IRP_CONTEXT_FLAG_REQUEUED (0x00000200) +#define IRP_CONTEXT_FLAG_USER_IO (0x00000400) +#define IRP_CONTEXT_FLAG_DELAY_CLOSE (0x00000800) + +// +// RFSD_ALLOC_HEADER +// +// In the checked version of the driver this header is put in the beginning of +// every memory allocation +// +typedef struct _RFSD_ALLOC_HEADER { + RFSD_IDENTIFIER Identifier; +} RFSD_ALLOC_HEADER, *PRFSD_ALLOC_HEADER; + +typedef struct _FCB_LIST_ENTRY { + PRFSD_FCB Fcb; + LIST_ENTRY Next; +} FCB_LIST_ENTRY, *PFCB_LIST_ENTRY; + + +// Block Description List +typedef struct _RFSD_BDL { + ULONGLONG Lba; + ULONGLONG Offset; + ULONG Length; + PIRP Irp; +} RFSD_BDL, *PRFSD_BDL; + +#pragma pack() + + +/* FUNCTIONS DECLARATION *****************************************************/ + +// +// The following macro is used to determine if an FSD thread can block +// for I/O or wait for a resource. It returns TRUE if the thread can +// block and FALSE otherwise. This attribute can then be used to call +// the FSD & FSP common work routine with the proper wait value. +// + +#define CanRfsdWait(IRP) IoIsOperationSynchronous(Irp) + +#include "protos.h" + +#endif /* _RFSD_HEADER_ */ Added: vendor/rfsd/current/RFSD/RFSD/rfsdfsd.rc URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/rfsdfsd.rc?…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/rfsdfsd.rc (added) +++ vendor/rfsd/current/RFSD/RFSD/rfsdfsd.rc Fri Apr 14 13:01:12 2006 @@ -1,0 +1,113 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// Chinese (P.R.C.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS) +#ifdef _WIN32 +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(936) +#endif //_WIN32 + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 0,24,3,27 + PRODUCTVERSION 0,24,3,27 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE 0x3L + FILESUBTYPE 0x8L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "Comments", "Matt Wu <
mattwu.163.com
>\0" + VALUE "CompanyName", "RfsdFsd Group (rfsdfsd.sf.net)\0" + VALUE "FileDescription", "Rfsd File System Driver for Windows 2k/xp\0" + VALUE "FileVersion", "0.24\0" + VALUE "InternalName", "RfsdFsd.sys\0" + VALUE "LegalCopyright", "Open Source Project Under GNU GPL\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "RfsdFsd.sys\0" + VALUE "PrivateBuild", "\0" + VALUE "ProductName", "Rfsd File System Driver\0" + VALUE "ProductVersion", "0.24\0" + VALUE "SpecialBuild", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // !_MAC + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // Chinese (P.R.C.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + Added: vendor/rfsd/current/RFSD/RFSD/rfsdfsd.reg URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/rfsdfsd.reg…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/rfsdfsd.reg (added) +++ vendor/rfsd/current/RFSD/RFSD/rfsdfsd.reg Fri Apr 14 13:01:12 2006 @@ -1,0 +1,14 @@ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RfsdFsd] +"ErrorControl"=dword:00000001 +"Group"="File System" +"Start"=dword:00000003 +"Type"=dword:00000002 + +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\RfsdFsd\Parameters] +"WritingSupport"=dword:00000000 +"CheckingBitmap"=dword:00000000 +"Ext3ForceWriting"=dword:00000000 +"CodePage"="default" + Added: vendor/rfsd/current/RFSD/RFSD/run-clean.bat URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/run-clean.b…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/run-clean.bat (added) +++ vendor/rfsd/current/RFSD/RFSD/run-clean.bat Fri Apr 14 13:01:12 2006 @@ -1,0 +1,7 @@ +del /F /Q objchk_wxp_x86\i386\* +del /F /Q chk\i386\* +del /F /Q nls\objchk_wxp_x86\i386\* + +del /F /Q objfre_W2k_x86\i386\* +del /F /Q fre\i386\* +del /F /Q nls\objfre_W2k_x86\i386\* Added: vendor/rfsd/current/RFSD/RFSD/run-make-release.bat URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/run-make-re…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/run-make-release.bat (added) +++ vendor/rfsd/current/RFSD/RFSD/run-make-release.bat Fri Apr 14 13:01:12 2006 @@ -1,0 +1,17 @@ +REM BUILD FOR RFSD + +pushd . +call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat" +call C:\WINDDK\3790\bin\setenv.bat C:\WINDDK\3790 fre W2K +popd + +cd nls +nmake + +cd .. +REM set BUILD_ALLOW_ALL_WARNINGS=1 + +nmake + +echo Build process finished. +copy /Y fre\i386\rfsdfsd.sys Z:\Share Added: vendor/rfsd/current/RFSD/RFSD/run-make.bat URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/run-make.ba…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/run-make.bat (added) +++ vendor/rfsd/current/RFSD/RFSD/run-make.bat Fri Apr 14 13:01:12 2006 @@ -1,0 +1,21 @@ +REM BUILD FOR RFSD + +pushd . +call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat" +call C:\WINDDK\3790\bin\setenv.bat C:\WINDDK\3790 chk WXP +popd + +cd nls +nmake + +cd .. +REM set BUILD_ALLOW_ALL_WARNINGS=1 + +REM prefast nmake +nmake + +REM prefast /filterpreset=winpft list +REM prefast list + +echo Build process finished. +copy /Y chk\i386\rfsdfsd.sys Z:\Share Added: vendor/rfsd/current/RFSD/RFSD/run-rebuild-all-release.bat URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/run-rebuild…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/run-rebuild-all-release.bat (added) +++ vendor/rfsd/current/RFSD/RFSD/run-rebuild-all-release.bat Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +call run-clean.bat +call run-make-release.bat Added: vendor/rfsd/current/RFSD/RFSD/run-rebuild-all.bat URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/run-rebuild…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/run-rebuild-all.bat (added) +++ vendor/rfsd/current/RFSD/RFSD/run-rebuild-all.bat Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +call run-clean.bat +call run-make.bat Added: vendor/rfsd/current/RFSD/RFSD/shutdown.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/shutdown.c?…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/shutdown.c (added) +++ vendor/rfsd/current/RFSD/RFSD/shutdown.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,114 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: shutdown.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdShutDown) +#endif + +NTSTATUS +RfsdShutDown (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + + PKEVENT Event; + + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + + PRFSD_VCB Vcb; + PLIST_ENTRY ListEntry; + + BOOLEAN GlobalResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + Status = STATUS_SUCCESS; + + Irp = IrpContext->Irp; + + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + if (!ExAcquireResourceExclusiveLite( + &RfsdGlobal->Resource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + GlobalResourceAcquired = TRUE; + + Event = ExAllocatePool( NonPagedPool, sizeof(KEVENT)); + KeInitializeEvent(Event, NotificationEvent, FALSE ); + + for (ListEntry = RfsdGlobal->VcbList.Flink; + ListEntry != &(RfsdGlobal->VcbList); + ListEntry = ListEntry->Flink ) { + + Vcb = CONTAINING_RECORD(ListEntry, RFSD_VCB, Next); + + if (ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + TRUE )) { + + Status = RfsdFlushFiles(Vcb, TRUE); + if(!NT_SUCCESS(Status)) { + DbgBreak(); + } + + Status = RfsdFlushVolume(Vcb, TRUE); + + if(!NT_SUCCESS(Status)) { + DbgBreak(); + } + + RfsdDiskShutDown(Vcb); + + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + } + } + +/* + IoUnregisterFileSystem(RfsdGlobal->DeviceObject); +*/ + } __finally { + + if (GlobalResourceAcquired) { + ExReleaseResourceForThreadLite( + &RfsdGlobal->Resource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} Added: vendor/rfsd/current/RFSD/RFSD/volinfo.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/volinfo.c?r…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/volinfo.c (added) +++ vendor/rfsd/current/RFSD/RFSD/volinfo.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,425 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: volinfo.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdQueryVolumeInformation) + +#if DISABLED +#pragma alloc_text(PAGE, RfsdSetVolumeInformation) +#endif + +#endif + + +NTSTATUS +RfsdQueryVolumeInformation (IN PRFSD_IRP_CONTEXT IrpContext) +{ + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_VCB Vcb; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + FS_INFORMATION_CLASS FsInformationClass; + ULONG Length; + PVOID Buffer; + BOOLEAN VcbResourceAcquired = FALSE; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + if (!ExAcquireResourceSharedLite( + &Vcb->MainResource, + IrpContext->IsSynchronous + )) { + + Status = STATUS_PENDING; + __leave; + } + + VcbResourceAcquired = TRUE; + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + FsInformationClass = + IoStackLocation->Parameters.QueryVolume.FsInformationClass; + + Length = IoStackLocation->Parameters.QueryVolume.Length; + + Buffer = Irp->AssociatedIrp.SystemBuffer; + + RtlZeroMemory(Buffer, Length); + + switch (FsInformationClass) { + + case FileFsVolumeInformation: + { + PFILE_FS_VOLUME_INFORMATION FsVolInfo; + ULONG VolumeLabelLength; + ULONG RequiredLength; + + if (Length < sizeof(FILE_FS_VOLUME_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FsVolInfo = (PFILE_FS_VOLUME_INFORMATION) Buffer; + + FsVolInfo->VolumeCreationTime.QuadPart = 0; + + FsVolInfo->VolumeSerialNumber = Vcb->Vpb->SerialNumber; + + VolumeLabelLength = Vcb->Vpb->VolumeLabelLength; + + FsVolInfo->VolumeLabelLength = VolumeLabelLength; + + // I don't know what this means + FsVolInfo->SupportsObjects = FALSE; + + RequiredLength = sizeof(FILE_FS_VOLUME_INFORMATION) + + VolumeLabelLength - sizeof(WCHAR); + + if (Length < RequiredLength) { + Irp->IoStatus.Information = + sizeof(FILE_FS_VOLUME_INFORMATION); + Status = STATUS_BUFFER_OVERFLOW; + __leave; + } + + RtlCopyMemory(FsVolInfo->VolumeLabel, Vcb->Vpb->VolumeLabel, Vcb->Vpb->VolumeLabelLength); + + Irp->IoStatus.Information = RequiredLength; + Status = STATUS_SUCCESS; + __leave; + } + + case FileFsSizeInformation: + { + PFILE_FS_SIZE_INFORMATION FsSizeInfo; + + if (Length < sizeof(FILE_FS_SIZE_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FsSizeInfo = (PFILE_FS_SIZE_INFORMATION) Buffer; + + FsSizeInfo->TotalAllocationUnits.QuadPart = + Vcb->SuperBlock->s_blocks_count; + + FsSizeInfo->AvailableAllocationUnits.QuadPart = + Vcb->SuperBlock->s_free_blocks_count; + + FsSizeInfo->SectorsPerAllocationUnit = + Vcb->BlockSize / Vcb->DiskGeometry.BytesPerSector; + + FsSizeInfo->BytesPerSector = + Vcb->DiskGeometry.BytesPerSector; + + Irp->IoStatus.Information = sizeof(FILE_FS_SIZE_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + case FileFsDeviceInformation: + { + PFILE_FS_DEVICE_INFORMATION FsDevInfo; + + if (Length < sizeof(FILE_FS_DEVICE_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FsDevInfo = (PFILE_FS_DEVICE_INFORMATION) Buffer; + + FsDevInfo->DeviceType = + Vcb->TargetDeviceObject->DeviceType; + + if (FsDevInfo->DeviceType != FILE_DEVICE_DISK) { + DbgBreak(); + } + + FsDevInfo->Characteristics = + Vcb->TargetDeviceObject->Characteristics; + + if (FlagOn(Vcb->Flags, VCB_READ_ONLY)) { + + SetFlag( FsDevInfo->Characteristics, + FILE_READ_ONLY_DEVICE ); + } + + Irp->IoStatus.Information = sizeof(FILE_FS_DEVICE_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + + case FileFsAttributeInformation: + { + PFILE_FS_ATTRIBUTE_INFORMATION FsAttrInfo; + ULONG RequiredLength; + + if (Length < sizeof(FILE_FS_ATTRIBUTE_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + FsAttrInfo = + (PFILE_FS_ATTRIBUTE_INFORMATION) Buffer; + + FsAttrInfo->FileSystemAttributes = + FILE_CASE_SENSITIVE_SEARCH | FILE_CASE_PRESERVED_NAMES; + + FsAttrInfo->MaximumComponentNameLength = RFSD_NAME_LEN; + + FsAttrInfo->FileSystemNameLength = 10; + + RequiredLength = sizeof(FILE_FS_ATTRIBUTE_INFORMATION) + + 10 - sizeof(WCHAR); + + if (Length < RequiredLength) { + Irp->IoStatus.Information = + sizeof(FILE_FS_ATTRIBUTE_INFORMATION); + Status = STATUS_BUFFER_OVERFLOW; + __leave; + } + + RtlCopyMemory( + FsAttrInfo->FileSystemName, + L"RFSD\0", 10); + + Irp->IoStatus.Information = RequiredLength; + Status = STATUS_SUCCESS; + __leave; + } + +#if (_WIN32_WINNT >= 0x0500) + + case FileFsFullSizeInformation: + { + PFILE_FS_FULL_SIZE_INFORMATION PFFFSI; + + if (Length < sizeof(FILE_FS_FULL_SIZE_INFORMATION)) { + Status = STATUS_INFO_LENGTH_MISMATCH; + __leave; + } + + PFFFSI = (PFILE_FS_FULL_SIZE_INFORMATION) Buffer; + +/* + typedef struct _FILE_FS_FULL_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER CallerAvailableAllocationUnits; + LARGE_INTEGER ActualAvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; + } FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; +*/ + + { + PFFFSI->TotalAllocationUnits.QuadPart = + Vcb->SuperBlock->s_blocks_count; + + PFFFSI->CallerAvailableAllocationUnits.QuadPart = + Vcb->SuperBlock->s_free_blocks_count; + + /* - Vcb->SuperBlock->s_r_blocks_count; */ + + PFFFSI->ActualAvailableAllocationUnits.QuadPart = + Vcb->SuperBlock->s_free_blocks_count; + } + + PFFFSI->SectorsPerAllocationUnit = + Vcb->BlockSize / Vcb->DiskGeometry.BytesPerSector; + + PFFFSI->BytesPerSector = Vcb->DiskGeometry.BytesPerSector; + + Irp->IoStatus.Information = sizeof(FILE_FS_FULL_SIZE_INFORMATION); + Status = STATUS_SUCCESS; + __leave; + } + +#endif // (_WIN32_WINNT >= 0x0500) + + default: + Status = STATUS_INVALID_INFO_CLASS; + } + + } __finally { + + if (VcbResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread() ); + } + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} + + +#if DISABLED +NTSTATUS +RfsdSetVolumeInformation (IN PRFSD_IRP_CONTEXT IrpContext) +{ +DbgBreak(); + PDEVICE_OBJECT DeviceObject; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PRFSD_VCB Vcb; + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + FS_INFORMATION_CLASS FsInformationClass; + + __try { + + ASSERT(IrpContext != NULL); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + // + // This request is not allowed on the main device object + // + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + ASSERT(IsMounted(Vcb)); + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + //Notes: SetVolume is not defined in ntddk.h of win2k ddk, + // But it's same to QueryVolume .... + FsInformationClass = + IoStackLocation->Parameters./*SetVolume*/QueryVolume.FsInformationClass; + + switch (FsInformationClass) { + + case FileFsLabelInformation: + { + PFILE_FS_LABEL_INFORMATION VolLabelInfo = NULL; + ULONG VolLabelLen; + UNICODE_STRING LabelName ; + + OEM_STRING OemName; + + VolLabelInfo = (PFILE_FS_LABEL_INFORMATION) Irp->AssociatedIrp.SystemBuffer; + + VolLabelLen = VolLabelInfo->VolumeLabelLength; + + if(VolLabelLen > (16 * sizeof(WCHAR))) { + Status = STATUS_INVALID_VOLUME_LABEL; + __leave; + } + + RtlCopyMemory( Vcb->Vpb->VolumeLabel, + VolLabelInfo->VolumeLabel, + VolLabelLen ); + + RtlZeroMemory(Vcb->SuperBlock->s_volume_name, 16); + + LabelName.Buffer = VolLabelInfo->VolumeLabel; + LabelName.MaximumLength = (USHORT)16 * sizeof(WCHAR); + LabelName.Length = (USHORT)VolLabelLen; + + OemName.Buffer = SUPER_BLOCK->s_volume_name; + OemName.Length = 0; + OemName.MaximumLength = 16; + + RfsdUnicodeToOEM( &OemName, + &LabelName); + + Vcb->Vpb->VolumeLabelLength = + (USHORT) VolLabelLen; + + if (RfsdSaveSuper(IrpContext, Vcb)) { + Status = STATUS_SUCCESS; + } + + Irp->IoStatus.Information = 0; + + } + break; + + default: + Status = STATUS_INVALID_INFO_CLASS; + } + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + if (Status == STATUS_PENDING) { + RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } + + return Status; +} +#endif Added: vendor/rfsd/current/RFSD/RFSD/write.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/RFSD/RFSD/write.c?rev…
============================================================================== --- vendor/rfsd/current/RFSD/RFSD/write.c (added) +++ vendor/rfsd/current/RFSD/RFSD/write.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1416 @@ +/* + * COPYRIGHT: See COPYRIGHT.TXT + * PROJECT: Rfsd File System Driver for WinNT/2K/XP + * FILE: write.c + * PROGRAMMER: Matt Wu <mattwu(a)163.com> + * HOMEPAGE:
http://rfsd.yeah.net
+ * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include "rfsdfs.h" + +/* GLOBALS ***************************************************************/ + +extern PRFSD_GLOBAL RfsdGlobal; + +/* DEFINITIONS *************************************************************/ + +typedef struct _RFSD_FLPFLUSH_CONTEXT { + + PRFSD_VCB Vcb; + PRFSD_FCB Fcb; + PFILE_OBJECT FileObject; + + KDPC Dpc; + KTIMER Timer; + WORK_QUEUE_ITEM Item; + +} RFSD_FLPFLUSH_CONTEXT, *PRFSD_FLPFLUSH_CONTEXT; + +VOID +RfsdFloppyFlush(IN PVOID Parameter); + +VOID +RfsdFloppyFlushDpc ( + IN PKDPC Dpc, + IN PVOID DeferredContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2); + + + +NTSTATUS +RfsdWriteComplete (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdWriteFile (IN PRFSD_IRP_CONTEXT IrpContext); + +NTSTATUS +RfsdWriteVolume (IN PRFSD_IRP_CONTEXT IrpContext); + +VOID +RfsdDeferWrite(IN PRFSD_IRP_CONTEXT, PIRP Irp); + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RfsdFloppyFlush) +#pragma alloc_text(PAGE, RfsdStartFloppyFlushDpc) +#pragma alloc_text(PAGE, RfsdZeroHoles) +#pragma alloc_text(PAGE, RfsdWrite) +#pragma alloc_text(PAGE, RfsdWriteVolume) +#pragma alloc_text(PAGE, RfsdWriteInode) +#pragma alloc_text(PAGE, RfsdWriteFile) +#pragma alloc_text(PAGE, RfsdWriteComplete) +#endif + +/* FUNCTIONS *************************************************************/ + +VOID +RfsdFloppyFlush(IN PVOID Parameter) +{ + PRFSD_FLPFLUSH_CONTEXT Context; + PFILE_OBJECT FileObject; + PRFSD_FCB Fcb; + PRFSD_VCB Vcb; + + Context = (PRFSD_FLPFLUSH_CONTEXT) Parameter; + FileObject = Context->FileObject; + Fcb = Context->Fcb; + Vcb = Context->Vcb; + + RfsdPrint((DBG_USER, "RfsdFloppyFlushing ...\n")); + + IoSetTopLevelIrp((PIRP)FSRTL_FSP_TOP_LEVEL_IRP); + + if (Vcb) { + ExAcquireSharedStarveExclusive(&Vcb->PagingIoResource, TRUE); + ExReleaseResource(&Vcb->PagingIoResource); + + CcFlushCache(&(Vcb->SectionObject), NULL, 0, NULL); + } + + if (FileObject) { + ASSERT(Fcb == (PRFSD_FCB)FileObject->FsContext); + + ExAcquireSharedStarveExclusive(&Fcb->PagingIoResource, TRUE); + ExReleaseResource(&Fcb->PagingIoResource); + + CcFlushCache(&(Fcb->SectionObject), NULL, 0, NULL); + + ObDereferenceObject(FileObject); + } + + IoSetTopLevelIrp(NULL); + + ExFreePool(Parameter); +} + +VOID +RfsdFloppyFlushDpc ( + IN PKDPC Dpc, + IN PVOID DeferredContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2 + ) +{ + PRFSD_FLPFLUSH_CONTEXT Context; + + Context = (PRFSD_FLPFLUSH_CONTEXT) DeferredContext; + + RfsdPrint((DBG_USER, "RfsdFloppyFlushDpc is to be started...\n")); + + ExInitializeWorkItem( &Context->Item, + RfsdFloppyFlush, + Context ); + + ExQueueWorkItem(&Context->Item, CriticalWorkQueue); +} + +VOID +RfsdStartFloppyFlushDpc ( + PRFSD_VCB Vcb, + PRFSD_FCB Fcb, + PFILE_OBJECT FileObject ) +{ + LARGE_INTEGER OneSecond; + PRFSD_FLPFLUSH_CONTEXT Context; + + ASSERT(IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)); + + Context = ExAllocatePool(NonPagedPool,sizeof(PRFSD_FLPFLUSH_CONTEXT)); + + if (!Context) { + DbgBreak(); + return; + } + + KeInitializeTimer(&Context->Timer); + + KeInitializeDpc( &Context->Dpc, + RfsdFloppyFlushDpc, + Context ); + + Context->Vcb = Vcb; + Context->Fcb = Fcb; + Context->FileObject = FileObject; + + if (FileObject) { + ObReferenceObject(FileObject); + } + + OneSecond.QuadPart = (LONGLONG)-1*1000*1000*10; + KeSetTimer( &Context->Timer, + OneSecond, + &Context->Dpc ); +} + +BOOLEAN +RfsdZeroHoles ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN PFILE_OBJECT FileObject, + IN LONGLONG Offset, + IN LONGLONG Count + ) +{ + LARGE_INTEGER StartAddr = {0,0}; + LARGE_INTEGER EndAddr = {0,0}; + + StartAddr.QuadPart = (Offset + (SECTOR_SIZE - 1)) & + ~((LONGLONG)SECTOR_SIZE - 1); + + EndAddr.QuadPart = (Offset + Count + (SECTOR_SIZE - 1)) & + ~((LONGLONG)SECTOR_SIZE - 1); + + if (StartAddr.QuadPart < EndAddr.QuadPart) { + return CcZeroData( FileObject, + &StartAddr, + &EndAddr, + IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT) ); + } + + return TRUE; +} + + +VOID +RfsdDeferWrite(IN PRFSD_IRP_CONTEXT IrpContext, PIRP Irp) +{ + ASSERT(IrpContext->Irp == Irp); + + RfsdQueueRequest(IrpContext); +} + + +NTSTATUS +RfsdWriteVolume (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_VCB Vcb; + PRFSD_CCB Ccb; + PRFSD_FCBVCB FcbOrVcb; + PFILE_OBJECT FileObject; + + PDEVICE_OBJECT DeviceObject; + + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + + ULONG Length; + LARGE_INTEGER ByteOffset; + + BOOLEAN PagingIo; + BOOLEAN Nocache; + BOOLEAN SynchronousIo; + BOOLEAN MainResourceAcquired = FALSE; + BOOLEAN PagingIoResourceAcquired = FALSE; + + BOOLEAN bDeferred = FALSE; + + PUCHAR Buffer; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + FileObject = IrpContext->FileObject; + + FcbOrVcb = (PRFSD_FCBVCB) FileObject->FsContext; + + ASSERT(FcbOrVcb); + + if (!(FcbOrVcb->Identifier.Type == RFSDVCB && (PVOID)FcbOrVcb == (PVOID)Vcb)) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + Length = IoStackLocation->Parameters.Write.Length; + ByteOffset = IoStackLocation->Parameters.Write.ByteOffset; + + PagingIo = (Irp->Flags & IRP_PAGING_IO ? TRUE : FALSE); + Nocache = (Irp->Flags & IRP_NOCACHE ? TRUE : FALSE); + SynchronousIo = (FileObject->Flags & FO_SYNCHRONOUS_IO ? TRUE : FALSE); + + RfsdPrint((DBG_INFO, "RfsdWriteVolume: Off=%I64xh Len=%xh Paging=%xh Nocache=%xh\n", + ByteOffset.QuadPart, Length, PagingIo, Nocache)); + + if (Length == 0) { + Irp->IoStatus.Information = 0; + Status = STATUS_SUCCESS; + __leave; + } + + // For the case of "Direct Access Storage Device", we + // need flush/purge the cache + + if (Ccb != NULL) { + + ExAcquireResourceExclusive(&Vcb->MainResource, TRUE); + MainResourceAcquired = TRUE; + + Status = RfsdPurgeVolume( Vcb, TRUE); + + ExReleaseResource(&Vcb->MainResource); + MainResourceAcquired = FALSE; + + if(!IsFlagOn(Ccb->Flags, CCB_ALLOW_EXTENDED_DASD_IO)) { + if (ByteOffset.QuadPart + Length > Vcb->Header.FileSize.QuadPart) { + Length = (ULONG)(Vcb->Header.FileSize.QuadPart - ByteOffset.QuadPart); + } + } + + { + RFSD_BDL BlockArray; + + if ((ByteOffset.LowPart & (SECTOR_SIZE - 1)) || + (Length & (SECTOR_SIZE - 1)) ) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoReadAccess ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + BlockArray.Irp = NULL; + BlockArray.Lba = ByteOffset.QuadPart;; + BlockArray.Offset = 0; + BlockArray.Length = Length; + + Status = RfsdReadWriteBlocks(IrpContext, + Vcb, + &BlockArray, + Length, + 1, + FALSE ); + Irp = IrpContext->Irp; + + __leave; + } + } + + if (Nocache && + (ByteOffset.LowPart & (SECTOR_SIZE - 1) || + Length & (SECTOR_SIZE - 1))) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_DPC)) { + ClearFlag(IrpContext->MinorFunction, IRP_MN_DPC); + Status = STATUS_PENDING; + __leave; + } + + if (ByteOffset.QuadPart >= + Vcb->PartitionInformation.PartitionLength.QuadPart ) { + Irp->IoStatus.Information = 0; + Status = STATUS_END_OF_FILE; + __leave; + } + +#if FALSE + + if (!Nocache) { + + BOOLEAN bAgain = IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DEFERRED); + BOOLEAN bWait = IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); + BOOLEAN bQueue = IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED); + + if ( !CcCanIWrite( + FileObject, + Length, + (bWait && bQueue), + bAgain ) ) { + + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_DEFERRED); + + CcDeferWrite( FileObject, + (PCC_POST_DEFERRED_WRITE)RfsdDeferWrite, + IrpContext, + Irp, + Length, + bAgain ); + + bDeferred = TRUE; + + DbgBreak(); + + Status = STATUS_PENDING; + + __leave; + } + } + +#endif + + if (Nocache && !PagingIo && (Vcb->SectionObject.DataSectionObject != NULL)) { + + ExAcquireResourceExclusive(&Vcb->MainResource, TRUE); + MainResourceAcquired = TRUE; + + ExAcquireSharedStarveExclusive(&Vcb->PagingIoResource, TRUE); + ExReleaseResource(&Vcb->PagingIoResource); + + CcFlushCache( &(Vcb->SectionObject), + &ByteOffset, + Length, + &(Irp->IoStatus)); + + if (!NT_SUCCESS(Irp->IoStatus.Status)) { + Status = Irp->IoStatus.Status; + __leave; + } + + ExAcquireSharedStarveExclusive(&Vcb->PagingIoResource, TRUE); + ExReleaseResource(&Vcb->PagingIoResource); + + CcPurgeCacheSection( &(Vcb->SectionObject), + (PLARGE_INTEGER)&(ByteOffset), + Length, + FALSE ); + + ExReleaseResource(&Vcb->MainResource); + MainResourceAcquired = FALSE; + } + + if (!PagingIo) { + + if (!ExAcquireResourceExclusiveLite( + &Vcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + MainResourceAcquired = TRUE; + + } else { + +/* + ULONG ResShCnt, ResExCnt; + ResShCnt = ExIsResourceAcquiredSharedLite(&Vcb->PagingIoResource); + ResExCnt = ExIsResourceAcquiredExclusiveLite(&Vcb->PagingIoResource); + + RfsdPrint((DBG_USER, "PagingIoRes: %xh:%xh Synchronous=%xh\n", ResShCnt, ResExCnt, IrpContext->IsSynchronous)); +*/ + + if (Ccb) { + + if (!ExAcquireResourceSharedLite( + &Vcb->PagingIoResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + PagingIoResourceAcquired = TRUE; + } + } + + if (!Nocache) { + + if ( (ByteOffset.QuadPart + Length) > + Vcb->PartitionInformation.PartitionLength.QuadPart ){ + Length = (ULONG) ( + Vcb->PartitionInformation.PartitionLength.QuadPart - + ByteOffset.QuadPart); + + Length &= ~((ULONG)SECTOR_SIZE - 1); + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_MDL)) { + + CcPrepareMdlWrite ( + Vcb->StreamObj, + &ByteOffset, + Length, + &Irp->MdlAddress, + &Irp->IoStatus ); + + Status = Irp->IoStatus.Status; + + } else { + + Buffer = RfsdGetUserBuffer(Irp); + + if (Buffer == NULL) { + DbgBreak(); + + Status = STATUS_INVALID_USER_BUFFER; + __leave; + } + + if (!CcCopyWrite( Vcb->StreamObj, + (PLARGE_INTEGER)(&ByteOffset), + Length, + TRUE, + Buffer )) { + Status = STATUS_PENDING; + __leave; + } + + Status = Irp->IoStatus.Status; + RfsdAddMcbEntry(Vcb, ByteOffset.QuadPart, (LONGLONG)Length); + } + + if (NT_SUCCESS(Status)) { + Irp->IoStatus.Information = Length; + } + + } else { + + PRFSD_BDL rfsd_bdl = NULL; + ULONG Blocks = 0; + + LONGLONG DirtyStart; + LONGLONG DirtyLba; + LONGLONG DirtyLength; + LONGLONG RemainLength; + + if ((ByteOffset.QuadPart + Length) > + Vcb->PartitionInformation.PartitionLength.QuadPart ) { + Length = (ULONG) ( + Vcb->PartitionInformation.PartitionLength.QuadPart - + ByteOffset.QuadPart); + + Length &= ~((ULONG)SECTOR_SIZE - 1); + } + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoReadAccess ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + rfsd_bdl = ExAllocatePool( PagedPool, + (Length / Vcb->BlockSize) * + sizeof(RFSD_BDL) ); + + if (!rfsd_bdl) { + Status = STATUS_INSUFFICIENT_RESOURCES; + __leave; + } + + DirtyLba = ByteOffset.QuadPart; + RemainLength = (LONGLONG) Length; + + while (RemainLength > 0) { + + DirtyStart = DirtyLba; + + if (RfsdLookupMcbEntry( Vcb, + DirtyStart, + &DirtyLba, + &DirtyLength, + (PLONGLONG)NULL, + (PLONGLONG)NULL, + (PULONG)NULL) ) { + + if (DirtyLba == -1) { + DirtyLba = DirtyStart + DirtyLength; + + RemainLength = ByteOffset.QuadPart + + (LONGLONG)Length - + DirtyLba; + continue; + } + + rfsd_bdl[Blocks].Irp = NULL; + rfsd_bdl[Blocks].Lba = DirtyLba; + rfsd_bdl[Blocks].Offset = (ULONG)( (LONGLONG)Length + + DirtyStart - + RemainLength - + DirtyLba ); + + if (DirtyLba + DirtyLength > DirtyStart + RemainLength) { + rfsd_bdl[Blocks].Length = (ULONG)( DirtyStart + + RemainLength - + DirtyLba ); + RemainLength = 0; + } else { + rfsd_bdl[Blocks].Length = (ULONG)DirtyLength; + RemainLength = (DirtyStart + RemainLength) - + (DirtyLba + DirtyLength); + } + + DirtyLba = DirtyStart + DirtyLength; + Blocks++; + + } else { + + if (Blocks == 0) { + + if (rfsd_bdl) + ExFreePool(rfsd_bdl); + + // + // Lookup fails at the first time, ie. + // no dirty blocks in the run + // + + DbgBreak(); + + if (RemainLength == (LONGLONG)Length) + Status = STATUS_SUCCESS; + else + Status = STATUS_UNSUCCESSFUL; + + __leave; + + } else { + break; + } + } + } + + if (Blocks > 0) { + + Status = RfsdReadWriteBlocks(IrpContext, + Vcb, + rfsd_bdl, + Length, + Blocks, + FALSE ); + Irp = IrpContext->Irp; + + if (NT_SUCCESS(Status)) { + ULONG i; + + for (i=0; i<Blocks;i++) { + RfsdRemoveMcbEntry( Vcb, + rfsd_bdl[i].Lba, + rfsd_bdl[i].Length ); + } + } + + if (rfsd_bdl) + ExFreePool(rfsd_bdl); + + if (!Irp) + __leave; + + } else { + + if (rfsd_bdl) + ExFreePool(rfsd_bdl); + + Irp->IoStatus.Information = Length; + + Status = STATUS_SUCCESS; + __leave; + } + } + } __finally { + + if (PagingIoResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->PagingIoResource, + ExGetCurrentResourceThread()); + } + + if (MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Vcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (!IrpContext->ExceptionInProgress) { + if (Irp) { + if (Status == STATUS_PENDING) { + if(!bDeferred) { + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoReadAccess ); + + if (NT_SUCCESS(Status)) { + Status = RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + } else { + + if (NT_SUCCESS(Status)) { + if (SynchronousIo && !PagingIo) { + FileObject->CurrentByteOffset.QuadPart = + ByteOffset.QuadPart + Irp->IoStatus.Information; + } + + if (!PagingIo) { + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + } + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } else { + RfsdFreeIrpContext(IrpContext); + } + } + } + + return Status; +} + +NTSTATUS +RfsdWriteInode ( + IN PRFSD_IRP_CONTEXT IrpContext, + IN PRFSD_VCB Vcb, + IN ULONG InodeNo, + IN PRFSD_INODE Inode, + IN ULONGLONG Offset, + IN PVOID Buffer, + IN ULONG Size, + IN BOOLEAN bWriteToDisk, + OUT PULONG dwRet + ) +{ + PRFSD_BDL rfsd_bdl = NULL; + ULONG blocks, i; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + ULONGLONG FileSize; + ULONGLONG AllocSize; + + BOOLEAN bAlloc = FALSE; + + if (dwRet) { + *dwRet = 0; + } + + // + // For file/non pagingio, we support the allocation on writing. + // + + if (S_ISREG(Inode->i_mode)) { + + if (!(IrpContext->Irp->Flags & IRP_PAGING_IO)) { + bAlloc = TRUE; + } + } + + // + // Initialize the FileSize / AllocationSize ... + // + + FileSize = (ULONGLONG) Inode->i_size; + if (S_ISREG(Inode->i_mode)) + FileSize |= ((ULONGLONG)(Inode->i_size_high) << 32); + AllocSize = CEILING_ALIGNED(FileSize, (ULONGLONG)Vcb->BlockSize); + + + // + // Check the inputed parameters ... + // + + if (!bAlloc) { + + if (Offset >= AllocSize) { + RfsdPrint((DBG_ERROR, "RfsdWritenode: beyond the file range.\n")); + return STATUS_SUCCESS; + } + + if (Offset + Size > AllocSize) { + Size = (ULONG)(AllocSize - Offset); + } + } + + Status = RfsdBuildBDL ( + IrpContext, + Vcb, + InodeNo, + Inode, + Offset, + Size, + bAlloc, + &rfsd_bdl, + &blocks + ); + + if (blocks <= 0) { + Status = STATUS_SUCCESS; + goto errorout; + } + + if (bWriteToDisk) { + + // + // We assume the offset is aligned. + // + + Status = RfsdReadWriteBlocks( + IrpContext, + Vcb, + rfsd_bdl, + Size, + blocks, + FALSE + ); + + } else { + + for(i = 0; i < blocks; i++) { + + if( !RfsdSaveBuffer( + IrpContext, + Vcb, + rfsd_bdl[i].Lba, + rfsd_bdl[i].Length, + (PVOID)((PUCHAR)Buffer + rfsd_bdl[i].Offset) + )) { + goto errorout; + } + } + + if (IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { + + RfsdPrint((DBG_USER, "RfsdWriteInode is starting FlushingDpc...\n")); + RfsdStartFloppyFlushDpc(Vcb, NULL, NULL); + } + + Status = STATUS_SUCCESS; + } + +errorout: + + if (rfsd_bdl) + ExFreePool(rfsd_bdl); + + if (NT_SUCCESS(Status)) { + if (dwRet) *dwRet = Size; + } + + return Status; +} + +NTSTATUS +RfsdWriteFile(IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + + PRFSD_VCB Vcb; + PRFSD_FCB Fcb; + PRFSD_CCB Ccb; + PFILE_OBJECT FileObject; + PFILE_OBJECT CacheObject; + + PDEVICE_OBJECT DeviceObject; + + PIRP Irp; + PIO_STACK_LOCATION IoStackLocation; + + ULONG Length; + ULONG ReturnedLength; + LARGE_INTEGER ByteOffset; + + BOOLEAN PagingIo; + BOOLEAN Nocache; + BOOLEAN SynchronousIo; + BOOLEAN MainResourceAcquired = FALSE; + BOOLEAN PagingIoResourceAcquired = FALSE; + + BOOLEAN bNeedExtending = FALSE; + BOOLEAN bAppendFile = FALSE; + + BOOLEAN bDeferred = FALSE; + + PUCHAR Buffer; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + DeviceObject = IrpContext->DeviceObject; + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + ASSERT(Vcb != NULL); + + ASSERT((Vcb->Identifier.Type == RFSDVCB) && + (Vcb->Identifier.Size == sizeof(RFSD_VCB))); + + FileObject = IrpContext->FileObject; + + Fcb = (PRFSD_FCB) FileObject->FsContext; + + ASSERT(Fcb); + + ASSERT((Fcb->Identifier.Type == RFSDFCB) && + (Fcb->Identifier.Size == sizeof(RFSD_FCB))); + + Ccb = (PRFSD_CCB) FileObject->FsContext2; + + Irp = IrpContext->Irp; + + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + + Length = IoStackLocation->Parameters.Write.Length; + ByteOffset = IoStackLocation->Parameters.Write.ByteOffset; + + PagingIo = (Irp->Flags & IRP_PAGING_IO ? TRUE : FALSE); + Nocache = (Irp->Flags & IRP_NOCACHE ? TRUE : FALSE); + SynchronousIo = (FileObject->Flags & FO_SYNCHRONOUS_IO ? TRUE : FALSE); + + RfsdPrint((DBG_INFO, "RfsdWriteFile: Off=%I64xh Len=%xh Paging=%xh Nocache=%xh\n", + ByteOffset.QuadPart, Length, PagingIo, Nocache)); + +/* + if (IsFlagOn(Fcb->Flags, FCB_FILE_DELETED)) + { + Status = STATUS_FILE_DELETED; + __leave; + } + + if (IsFlagOn(Fcb->Flags, FCB_DELETE_PENDING)) + { + Status = STATUS_DELETE_PENDING; + __leave; + } +*/ + if (Length == 0) { + Irp->IoStatus.Information = 0; + Status = STATUS_SUCCESS; + __leave; + } + + if (Nocache && + (ByteOffset.LowPart & (SECTOR_SIZE - 1) || + Length & (SECTOR_SIZE - 1))) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_DPC)) { + ClearFlag(IrpContext->MinorFunction, IRP_MN_DPC); + Status = STATUS_PENDING; + __leave; + } + +#if FALSE + if (!Nocache) { + + BOOLEAN bAgain = IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_DEFERRED); + BOOLEAN bWait = IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT); + BOOLEAN bQueue = IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_REQUEUED); + + if ( !CcCanIWrite( + FileObject, + Length, + (bWait && bQueue), + bAgain ) ) { + SetFlag(IrpContext->Flags, IRP_CONTEXT_FLAG_DEFERRED); + + CcDeferWrite( FileObject, + (PCC_POST_DEFERRED_WRITE)RfsdDeferWrite, + IrpContext, + Irp, + Length, + bAgain ); + + bDeferred = TRUE; + + DbgBreak(); + + Status = STATUS_PENDING; + __leave; + } + } + +#endif + + if (IsEndOfFile(ByteOffset)) { + bAppendFile = TRUE; + ByteOffset.QuadPart = Fcb->Header.FileSize.QuadPart; + } + + if ( FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY) && !PagingIo) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + // + // Do flushing for such cases + // + if (Nocache && !PagingIo && (Fcb->SectionObject.DataSectionObject != NULL)) { + + ExAcquireResourceExclusive( &Fcb->MainResource, + IsFlagOn(IrpContext->Flags, IRP_CONTEXT_FLAG_WAIT)); + + MainResourceAcquired = TRUE; + + ExAcquireSharedStarveExclusive( &Fcb->PagingIoResource, TRUE); + ExReleaseResource(&Fcb->PagingIoResource); + + CcFlushCache( &(Fcb->SectionObject), + &ByteOffset, + Length, + &(Irp->IoStatus)); + ClearFlag(Fcb->Flags, FCB_FILE_MODIFIED); + + if (!NT_SUCCESS(Irp->IoStatus.Status)) + { + Status = Irp->IoStatus.Status; + __leave; + } + + ExAcquireSharedStarveExclusive( &Fcb->PagingIoResource, TRUE); + ExReleaseResource(&Fcb->PagingIoResource); + + CcPurgeCacheSection( &(Fcb->SectionObject), + (PLARGE_INTEGER)&(ByteOffset), + Length, + FALSE ); + + ExReleaseResource(&Fcb->MainResource); + MainResourceAcquired = FALSE; + } + + if (!PagingIo) { + + if (!ExAcquireResourceExclusiveLite( + &Fcb->MainResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + MainResourceAcquired = TRUE; + + } else { + +/* + ULONG ResShCnt, ResExCnt; + ResShCnt = ExIsResourceAcquiredSharedLite(&Fcb->PagingIoResource); + ResExCnt = ExIsResourceAcquiredExclusiveLite(&Fcb->PagingIoResource); + + RfsdPrint((DBG_USER, "RfsdWriteFile: Inode=%xh %S PagingIo: %xh:%xh Synchronous=%xh\n", + Fcb->RfsdMcb->Inode, Fcb->RfsdMcb->ShortName.Buffer, ResShCnt, ResExCnt, IrpContext->IsSynchronous)); +*/ + if (!ExAcquireResourceSharedLite( + &Fcb->PagingIoResource, + IrpContext->IsSynchronous )) { + Status = STATUS_PENDING; + __leave; + } + + PagingIoResourceAcquired = TRUE; + } + + if (!PagingIo) { + if (!FsRtlCheckLockForWriteAccess( + &Fcb->FileLockAnchor, + Irp )) { + Status = STATUS_FILE_LOCK_CONFLICT; + __leave; + } + } + + if (Nocache) { + + if ( (ByteOffset.QuadPart + Length) > + Fcb->Header.AllocationSize.QuadPart) { + + if ( ByteOffset.QuadPart >= + Fcb->Header.AllocationSize.QuadPart) { + + Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + __leave; + + } else { + + if (Length > (ULONG)(Fcb->Header.AllocationSize.QuadPart + - ByteOffset.QuadPart)) { + Length = (ULONG)(Fcb->Header.AllocationSize.QuadPart + - ByteOffset.QuadPart); + } + } + } + } + + if (!Nocache) { + + if (FlagOn(Fcb->RfsdMcb->FileAttr, FILE_ATTRIBUTE_DIRECTORY)) { + __leave; + } + + if (FileObject->PrivateCacheMap == NULL) { + + CcInitializeCacheMap( + FileObject, + (PCC_FILE_SIZES)(&Fcb->Header.AllocationSize), + FALSE, + &RfsdGlobal->CacheManagerCallbacks, + Fcb ); + + CcSetReadAheadGranularity( + FileObject, + READ_AHEAD_GRANULARITY ); + + CcSetFileSizes( + FileObject, + (PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize))); + } + + CacheObject = FileObject; + + // + // Need extending the size of inode ? + // + if ( (bAppendFile) || ((ByteOffset.QuadPart + Length) > + (Fcb->Header.FileSize.QuadPart)) ) { + + LARGE_INTEGER ExtendSize; + LARGE_INTEGER FileSize; + + bNeedExtending = TRUE; + FileSize = Fcb->Header.FileSize; + ExtendSize.QuadPart = (LONGLONG)(ByteOffset.QuadPart + Length); + + if (ExtendSize.QuadPart > Fcb->Header.AllocationSize.QuadPart) { + Status = RfsdExpandFile(IrpContext, Vcb, Fcb, &ExtendSize); + if (!NT_SUCCESS(Status)) { + __leave; + } + } + + { + Fcb->Header.FileSize.QuadPart = ExtendSize.QuadPart; + Fcb->Inode->i_size = ExtendSize.LowPart; + Fcb->Inode->i_size_high = (ULONG) ExtendSize.HighPart; + } + + if (FileObject->PrivateCacheMap) { + + CcSetFileSizes(FileObject, (PCC_FILE_SIZES)(&(Fcb->Header.AllocationSize))); + + if (ByteOffset.QuadPart > FileSize.QuadPart) { + RfsdZeroHoles( IrpContext, Vcb, FileObject, FileSize.QuadPart, + ByteOffset.QuadPart - FileSize.QuadPart); + } + + if (Fcb->Header.AllocationSize.QuadPart > ExtendSize.QuadPart) { + RfsdZeroHoles(IrpContext, Vcb, FileObject, ExtendSize.QuadPart, + Fcb->Header.AllocationSize.QuadPart - ExtendSize.QuadPart); + } + } + + if (RfsdSaveInode(IrpContext, Vcb, Fcb->RfsdMcb->Inode, Fcb->Inode)) { + Status = STATUS_SUCCESS; + } + + RfsdNotifyReportChange( + IrpContext, + Vcb, + Fcb, + FILE_NOTIFY_CHANGE_SIZE, + FILE_ACTION_MODIFIED ); + } + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_MDL)) { + CcPrepareMdlWrite( + CacheObject, + (&ByteOffset), + Length, + &Irp->MdlAddress, + &Irp->IoStatus ); + + Status = Irp->IoStatus.Status; + + } else { + + Buffer = RfsdGetUserBuffer(Irp); + + if (Buffer == NULL) { + DbgBreak(); + Status = STATUS_INVALID_USER_BUFFER; + __leave; + } + + if (!CcCopyWrite( + CacheObject, + (PLARGE_INTEGER)&ByteOffset, + Length, + IrpContext->IsSynchronous, + Buffer )) { + Status = STATUS_PENDING; + __leave; + } + + Status = Irp->IoStatus.Status; + } + + if (NT_SUCCESS(Status)) { + + Irp->IoStatus.Information = Length; + + if (IsFlagOn(Vcb->Flags, VCB_FLOPPY_DISK)) { + RfsdPrint((DBG_USER, "RfsdWriteFile is starting FlushingDpc...\n")); + RfsdStartFloppyFlushDpc(Vcb, Fcb, FileObject); + } + } + + } else { + + ReturnedLength = Length; + + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoReadAccess ); + + if (!NT_SUCCESS(Status)) { + __leave; + } + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = Length; + + Status = RfsdWriteInode( + IrpContext, + Vcb, + Fcb->RfsdMcb->Inode, + Fcb->Inode, + (ULONGLONG)(ByteOffset.QuadPart), + NULL, + Length, + TRUE, + &ReturnedLength + ); + + Irp = IrpContext->Irp; + + } + + } __finally { + + if (PagingIoResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->PagingIoResource, + ExGetCurrentResourceThread()); + } + + if (MainResourceAcquired) { + ExReleaseResourceForThreadLite( + &Fcb->MainResource, + ExGetCurrentResourceThread()); + } + + if (!IrpContext->ExceptionInProgress) { + if (Irp) { + if (Status == STATUS_PENDING) { + if (!bDeferred) { + Status = RfsdLockUserBuffer( + IrpContext->Irp, + Length, + IoReadAccess ); + + if (NT_SUCCESS(Status)) { + Status = RfsdQueueRequest(IrpContext); + } else { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + } else { + if (NT_SUCCESS(Status)) { + if (SynchronousIo && !PagingIo) { + FileObject->CurrentByteOffset.QuadPart = + ByteOffset.QuadPart + Irp->IoStatus.Information; + } + + if (!PagingIo) + { + SetFlag(FileObject->Flags, FO_FILE_MODIFIED); + SetFlag(Fcb->Flags, FCB_FILE_MODIFIED); + } + } + + RfsdCompleteIrpContext(IrpContext, Status); + } + } else { + RfsdFreeIrpContext(IrpContext); + } + } + } + + return Status; + +} + +NTSTATUS +RfsdWriteComplete (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PFILE_OBJECT FileObject; + PIRP Irp; + PIO_STACK_LOCATION IrpSp; + + __try { + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + FileObject = IrpContext->FileObject; + + Irp = IrpContext->Irp; + IrpSp = IoGetCurrentIrpStackLocation(Irp); + + CcMdlWriteComplete(FileObject, &(IrpSp->Parameters.Write.ByteOffset), Irp->MdlAddress); + + Irp->MdlAddress = NULL; + + Status = STATUS_SUCCESS; + + } __finally { + + if (!IrpContext->ExceptionInProgress) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} + + +NTSTATUS +RfsdWrite (IN PRFSD_IRP_CONTEXT IrpContext) +{ + NTSTATUS Status; + PRFSD_FCBVCB FcbOrVcb; + PDEVICE_OBJECT DeviceObject; + PFILE_OBJECT FileObject; + PRFSD_VCB Vcb; + BOOLEAN bCompleteRequest = TRUE; + + ASSERT(IrpContext); + + ASSERT((IrpContext->Identifier.Type == RFSDICX) && + (IrpContext->Identifier.Size == sizeof(RFSD_IRP_CONTEXT))); + + __try { + + if (FlagOn(IrpContext->MinorFunction, IRP_MN_COMPLETE)) { + + Status = RfsdWriteComplete(IrpContext); + bCompleteRequest = FALSE; + + } else { + + DeviceObject = IrpContext->DeviceObject; + + if (DeviceObject == RfsdGlobal->DeviceObject) { + Status = STATUS_INVALID_DEVICE_REQUEST; + __leave; + } + + Vcb = (PRFSD_VCB) DeviceObject->DeviceExtension; + + if (Vcb->Identifier.Type != RFSDVCB || + Vcb->Identifier.Size != sizeof(RFSD_VCB) ) { + Status = STATUS_INVALID_PARAMETER; + __leave; + } + + ASSERT(IsMounted(Vcb)); + + if (IsFlagOn(Vcb->Flags, VCB_DISMOUNT_PENDING)) { + Status = STATUS_TOO_LATE; + __leave; + } + + if (IsFlagOn(Vcb->Flags, VCB_READ_ONLY)) { + Status = STATUS_MEDIA_WRITE_PROTECTED; + __leave; + } + + FileObject = IrpContext->FileObject; + + FcbOrVcb = (PRFSD_FCBVCB) FileObject->FsContext; + + if (FcbOrVcb->Identifier.Type == RFSDVCB) { + + Status = RfsdWriteVolume(IrpContext); + + if (!NT_SUCCESS(Status)) { + DbgBreak(); + } + + bCompleteRequest = FALSE; + } else if (FcbOrVcb->Identifier.Type == RFSDFCB) { + Status = RfsdWriteFile(IrpContext); + + if (!NT_SUCCESS(Status)) { + DbgBreak(); + } + + bCompleteRequest = FALSE; + } else { + Status = STATUS_INVALID_PARAMETER; + } + } + + } __finally { + + if (bCompleteRequest) { + RfsdCompleteIrpContext(IrpContext, Status); + } + } + + return Status; +} Added: vendor/rfsd/current/SampleFSD/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/SampleFSD/CVS/Entries (added) +++ vendor/rfsd/current/SampleFSD/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +/SampleFSD.sln/1.1/Wed Jul 6 15:02:37 2005// +D/filesys//// Added: vendor/rfsd/current/SampleFSD/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/SampleFSD/CVS/Entries.Extra (added) +++ vendor/rfsd/current/SampleFSD/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +/SampleFSD.sln////*/// +D/filesys/////// Added: vendor/rfsd/current/SampleFSD/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/SampleFSD/CVS/Entries.Extra.Old (added) +++ vendor/rfsd/current/SampleFSD/CVS/Entries.Extra.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +/SampleFSD.sln////*/// Added: vendor/rfsd/current/SampleFSD/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/CVS/Entries…
============================================================================== --- vendor/rfsd/current/SampleFSD/CVS/Entries.Old (added) +++ vendor/rfsd/current/SampleFSD/CVS/Entries.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +/SampleFSD.sln/1.1/Wed Jul 6 15:02:37 2005// +D Added: vendor/rfsd/current/SampleFSD/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/CVS/Reposit…
============================================================================== --- vendor/rfsd/current/SampleFSD/CVS/Repository (added) +++ vendor/rfsd/current/SampleFSD/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/SampleFSD Added: vendor/rfsd/current/SampleFSD/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/CVS/Root?re…
============================================================================== --- vendor/rfsd/current/SampleFSD/CVS/Root (added) +++ vendor/rfsd/current/SampleFSD/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/SampleFSD/SampleFSD.sln URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/SampleFSD.s…
============================================================================== --- vendor/rfsd/current/SampleFSD/SampleFSD.sln (added) +++ vendor/rfsd/current/SampleFSD/SampleFSD.sln Fri Apr 14 13:01:12 2006 @@ -1,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "filesys", "filesys\filesys.vcproj", "{CFDFDC88-7BC4-4670-91C3-2C8D7ED16112}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {CFDFDC88-7BC4-4670-91C3-2C8D7ED16112}.Debug.ActiveCfg = Debug|Win32 + {CFDFDC88-7BC4-4670-91C3-2C8D7ED16112}.Debug.Build.0 = Debug|Win32 + {CFDFDC88-7BC4-4670-91C3-2C8D7ED16112}.Release.ActiveCfg = Release|Win32 + {CFDFDC88-7BC4-4670-91C3-2C8D7ED16112}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal Added: vendor/rfsd/current/SampleFSD/filesys/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/CVS…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/CVS/Entries (added) +++ vendor/rfsd/current/SampleFSD/filesys/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,8 @@ +/filesys.vcproj/1.2/Tue Jul 12 17:29:48 2005// +/readme.txt/1.1/Wed Jul 6 15:02:39 2005// +/readme1.txt/1.3/Tue Jul 12 17:29:48 2005// +/run-make.bat/1.1/Wed Jul 6 15:02:39 2005// +/sfsd.reg/1.1/Wed Jul 6 15:02:39 2005// +D/event//// +D/inc//// +D/src//// Added: vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/CVS…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra (added) +++ vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,8 @@ +/filesys.vcproj////*/// +/readme.txt////*/// +/readme1.txt////*/// +/run-make.bat////*/// +/sfsd.reg////*/// +D/event/////// +D/inc/////// +D/src/////// Added: vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/CVS…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra.Old (added) +++ vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Extra.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,5 @@ +/filesys.vcproj////*/// +/readme.txt////*/// +/readme1.txt////*/// +/run-make.bat////*/// +/sfsd.reg////*/// Added: vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/CVS…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Old (added) +++ vendor/rfsd/current/SampleFSD/filesys/CVS/Entries.Old Fri Apr 14 13:01:12 2006 @@ -1,0 +1,6 @@ +/filesys.vcproj/1.2/Tue Jul 12 17:29:48 2005// +/readme.txt/1.1/Wed Jul 6 15:02:39 2005// +/readme1.txt/1.3/Tue Jul 12 17:29:48 2005// +/run-make.bat/1.1/Wed Jul 6 15:02:39 2005// +/sfsd.reg/1.1/Wed Jul 6 15:02:39 2005// +D Added: vendor/rfsd/current/SampleFSD/filesys/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/CVS…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/CVS/Repository (added) +++ vendor/rfsd/current/SampleFSD/filesys/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/SampleFSD/filesys Added: vendor/rfsd/current/SampleFSD/filesys/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/CVS…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/CVS/Root (added) +++ vendor/rfsd/current/SampleFSD/filesys/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,10 @@ +/MAKE-MC.BAT/1.1/Wed Jul 6 15:02:38 2005/-kb/ +/MAKEFILE/1.1/Wed Jul 6 15:02:38 2005/-kb/ +/MSG00001.bin/1.1/Wed Jul 6 15:02:39 2005/-kb/ +/README.TXT/1.1/Wed Jul 6 15:02:39 2005// +/SOURCES/1.1/Wed Jul 6 15:02:39 2005/-kb/ +/dummy.c/1.1/Wed Jul 6 15:02:39 2005// +/errmsg.msg/1.1/Wed Jul 6 15:02:39 2005/-kb/ +/errmsg.rc/1.1/Wed Jul 6 15:02:39 2005// +/sfsdevnt.def/1.1/Wed Jul 6 15:02:39 2005/-kb/ +D Added: vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Extra (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,9 @@ +/MAKE-MC.BAT////*/// +/MAKEFILE////*/// +/MSG00001.bin////*/// +/README.TXT////*/// +/SOURCES////*/// +/dummy.c////*/// +/errmsg.msg////*/// +/errmsg.rc////*/// +/sfsdevnt.def////*/// Added: vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== (empty) Added: vendor/rfsd/current/SampleFSD/filesys/event/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== (empty) Added: vendor/rfsd/current/SampleFSD/filesys/event/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/CVS/Repository (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/SampleFSD/filesys/event Added: vendor/rfsd/current/SampleFSD/filesys/event/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/CVS/Root (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/SampleFSD/filesys/event/MAKE-MC.BAT URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/MAKE-MC.BAT (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/MAKE-MC.BAT Fri Apr 14 13:01:12 2006 @@ -1,0 +1,10 @@ +@echo off +REM The following explain the options used : +REM v = verbose +REM c = set Customer bit in all message ids. +REM s = insert symbolic name as first line of each message. +REM h <pathname> = pathname where (created) header file should be stored. +REM U = output file should be in Unicode. + +mc -vcs -h ..\inc -U errmsg.msg + Added: vendor/rfsd/current/SampleFSD/filesys/event/MAKEFILE URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/MAKEFILE (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/MAKEFILE Fri Apr 14 13:01:12 2006 @@ -1,0 +1,9 @@ +########################################################################## +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the components of NT. +# +########################################################################## +!INCLUDE $(NTMAKEENV)\makefile.def + Added: vendor/rfsd/current/SampleFSD/filesys/event/MSG00001.bin URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== Binary file - no diff available. Propchange: vendor/rfsd/current/SampleFSD/filesys/event/MSG00001.bin ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: vendor/rfsd/current/SampleFSD/filesys/event/README.TXT URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/README.TXT (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/README.TXT Fri Apr 14 13:01:12 2006 @@ -1,0 +1,4 @@ +Use the MAKE-MC.BAT file to compile the errmsg.msg file using mc.exe, +which is the Microsoft message compiler. Then use build to create the +required dll. + Added: vendor/rfsd/current/SampleFSD/filesys/event/SOURCES URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/SOURCES (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/SOURCES Fri Apr 14 13:01:12 2006 @@ -1,0 +1,38 @@ +# - Execute the "build" command to make the Sample FSD Event-related dll. + +# +# The TARGETNAME variable is defined by the developer. It is the name of +# the target (component) that is being built by this makefile. It +# should NOT include any path or file extension information. +# + +TARGETNAME=sfsdevnt + +TARGETPATH=obj + +TARGETTYPE=DYNLINK + +INCLUDES=..\inc + +# Source files common to multiple platforms + +SOURCES=dummy.c \ + errmsg.rc + +UNICODE=1 + +# +# Next specify any additional options for the compiler. +# + +C_DEFINES=-DUNICODE + +# +# Next specify options for the linker. +# + +DLLBASE=0x62900000 + +UMRES=obj\*\sfsdevnt.res + + Added: vendor/rfsd/current/SampleFSD/filesys/event/dummy.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/dummy.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/dummy.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,4 @@ +void +DummyEntryPoint(void) +{ +} Added: vendor/rfsd/current/SampleFSD/filesys/event/errmsg.msg URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/errmsg.msg (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/errmsg.msg Fri Apr 14 13:01:12 2006 @@ -1,0 +1,37 @@ +;/************************************************************************* +;* +;* File: errmsg.msg +;* +;* Product: Sample FSD +;* +;* Module: Sample FSD Event Log Messages +;* +;* Description: +;* Contains error strings in a format understandable to the message compiler. +;* Please compile (using mc) with the -c option which will set the +;* "Customer" bit in all errors. +;* Use values beginning at 0xA000 (e.g. 0xA001) for the Sample FSD +;* errors. +;* Do NOT use %1 for insertion strings. The I/O manager assumes that +;* the first insertion string is the name of the driver/device. +;* +;* (c) 1996-97 Rajeev Nagar, All Rights Reserved +;* +;*************************************************************************/ +MessageIdTypedef=ULONG + +SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS + Informational=0x1:STATUS_SEVERITY_INFORMATIONAL + Warning=0x2:STATUS_SEVERITY_WARNING + Error=0x3:STATUS_SEVERITY_ERROR + ) + +FacilityNames=(IO=0x004) + +MessageId=0xA001 Facility=IO Severity=Error +SymbolicName=SFSD_ERROR_INTERNAL_ERROR +Language=English +The Sample FSD encountered an internal error. Please check log data information. +. + + Added: vendor/rfsd/current/SampleFSD/filesys/event/errmsg.rc URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/errmsg.rc (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/errmsg.rc Fri Apr 14 13:01:12 2006 @@ -1,0 +1,2 @@ +LANGUAGE 0x9,0x1 +1 11 MSG00001.bin Added: vendor/rfsd/current/SampleFSD/filesys/event/sfsdevnt.def URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/eve…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/event/sfsdevnt.def (added) +++ vendor/rfsd/current/SampleFSD/filesys/event/sfsdevnt.def Fri Apr 14 13:01:12 2006 @@ -1,0 +1,8 @@ +LIBRARY SFSDEVENT + +DESCRIPTION 'Sample FSD Event Log Messages' + +EXPORTS + + DummyEntryPoint + Added: vendor/rfsd/current/SampleFSD/filesys/filesys.vcproj URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/fil…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/filesys.vcproj (added) +++ vendor/rfsd/current/SampleFSD/filesys/filesys.vcproj Fri Apr 14 13:01:12 2006 @@ -1,0 +1,123 @@ +<?xml version="1.0" encoding="Windows-1252"?> +<VisualStudioProject + ProjectType="Visual C++" + Version="7.10" + Name="filesys" + ProjectGUID="{CFDFDC88-7BC4-4670-91C3-2C8D7ED16112}" + Keyword="MakeFileProj"> + <Platforms> + <Platform + Name="Win32"/> + </Platforms> + <Configurations> + <Configuration + Name="Debug|Win32" + OutputDirectory="Debug" + IntermediateDirectory="Debug" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + BuildCommandLine="run-make.bat" + Output="filesys.exe"/> + </Configuration> + <Configuration + Name="Release|Win32" + OutputDirectory="Release" + IntermediateDirectory="Release" + ConfigurationType="0"> + <Tool + Name="VCNMakeTool" + Output="filesys.exe"/> + </Configuration> + </Configurations> + <References> + </References> + <Files> + <Filter + Name="Source Files" + Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" + UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> + <File + RelativePath=".\src\cleanup.c"> + </File> + <File + RelativePath=".\src\close.c"> + </File> + <File + RelativePath=".\src\create.c"> + </File> + <File + RelativePath=".\src\debug.c"> + </File> + <File + RelativePath=".\src\devcntrl.c"> + </File> + <File + RelativePath=".\src\dircntrl.c"> + </File> + <File + RelativePath=".\src\fastio.c"> + </File> + <File + RelativePath=".\src\fileinfo.c"> + </File> + <File + RelativePath=".\src\flush.c"> + </File> + <File + RelativePath=".\src\fscontrol.c"> + </File> + <File + RelativePath=".\src\misc.c"> + </File> + <File + RelativePath=".\src\read.c"> + </File> + <File + RelativePath=".\src\sfsdinit.c"> + </File> + <File + RelativePath=".\src\shutdown.c"> + </File> + <File + RelativePath=".\src\write.c"> + </File> + </Filter> + <Filter + Name="Header Files" + Filter="h;hpp;hxx;hm;inl;inc;xsd" + UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> + <File + RelativePath=".\inc\errmsg.h"> + </File> + <File + RelativePath=".\inc\ntifs.h"> + </File> + <File + RelativePath=".\inc\protos.h"> + </File> + <File + RelativePath=".\inc\sfsd.h"> + </File> + <File + RelativePath=".\inc\struct.h"> + </File> + </Filter> + <Filter + Name="Resource Files" + Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" + UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> + </Filter> + <File + RelativePath=".\readme.txt"> + </File> + <File + RelativePath=".\readme1.txt"> + </File> + <File + RelativePath=".\src\sources"> + </File> + </Files> + <Globals> + </Globals> +</VisualStudioProject> Added: vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,6 @@ +/errmsg.h/1.1/Wed Jul 6 15:02:39 2005// +/ntifs.h/1.1/Wed Jul 6 15:02:39 2005// +/protos.h/1.2/Tue Jul 12 17:29:49 2005// +/sfsd.h/1.2/Tue Jul 12 17:29:49 2005// +/struct.h/1.2/Wed Jul 6 15:51:01 2005// +D Added: vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Extra (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,5 @@ +/errmsg.h////*/// +/ntifs.h////*/// +/protos.h////*/// +/sfsd.h////*/// +/struct.h////*/// Added: vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== (empty) Added: vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== (empty) Added: vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Repository (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/SampleFSD/filesys/inc Added: vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Root (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/SampleFSD/filesys/inc/errmsg.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/errmsg.h (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/errmsg.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,69 @@ +/************************************************************************* +* +* File: errmsg.msg +* +* Product: Sample FSD +* +* Module: Sample FSD Event Log Messages +* +* Description: +* Contains error strings in a format understandable to the message compiler. +* Please compile (using mc) with the -c option which will set the +* "Customer" bit in all errors. +* Use values beginning at 0xA000 (e.g. 0xA001) for the Sample FSD +* errors. +* Do NOT use %1 for insertion strings. The I/O manager assumes that +* the first insertion string is the name of the driver/device. +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ +// +// Values are 32 bit values layed out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---+-+-+-----------------------+-------------------------------+ +// |Sev|C|R| Facility | Code | +// +---+-+-+-----------------------+-------------------------------+ +// +// where +// +// Sev - is the severity code +// +// 00 - Success +// 01 - Informational +// 10 - Warning +// 11 - Error +// +// C - is the Customer code flag +// +// R - is a reserved bit +// +// Facility - is the facility code +// +// Code - is the facility's status code +// +// +// Define the facility codes +// + + +// +// Define the severity codes +// +#define STATUS_SEVERITY_WARNING 0x2 +#define STATUS_SEVERITY_SUCCESS 0x0 +#define STATUS_SEVERITY_INFORMATIONAL 0x1 +#define STATUS_SEVERITY_ERROR 0x3 + + +// +// MessageId: SFSD_ERROR_INTERNAL_ERROR +// +// MessageText: +// +// The Sample FSD encountered an internal error. Please check log data information. +// +#define SFSD_ERROR_INTERNAL_ERROR ((ULONG)0xE004A001L) + Added: vendor/rfsd/current/SampleFSD/filesys/inc/ntifs.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/ntifs.h (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/ntifs.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,29746 @@ +/*++ BUILD Version: 0092 // Increment this if a change has global effects + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + ntifs.h + +Abstract: + + This module defines the NT types, constants, and functions that are + exposed to file system drivers. + +Revision History: + +--*/ + +#ifndef _NTIFS_ +#define _NTIFS_ + +#ifndef RC_INVOKED +#if _MSC_VER < 1300 +#error Compiler version not supported by Windows DDK +#endif +#endif // RC_INVOKED + +#ifndef __cplusplus +#pragma warning(disable:4116) // TYPE_ALIGNMENT generates this - move it + // outside the warning push/pop scope. +#endif + +#define NT_INCLUDED +#define _NTMSV1_0_ +#define _CTYPE_DISABLE_MACROS + +#include <excpt.h> +#include <ntdef.h> +#include <ntnls.h> +#include <ntstatus.h> +#include <bugcodes.h> +#include <ntiologc.h> +// +// Kernel Mutex Level Numbers (must be globallly assigned within executive) +// The third token in the name is the sub-component name that defines and +// uses the level number. +// + +// +// Used by Vdm for protecting io simulation structures +// + +#define MUTEX_LEVEL_VDM_IO (ULONG)0x00000001 + +#define MUTEX_LEVEL_EX_PROFILE (ULONG)0x00000040 + +// +// The LANMAN Redirector uses the file system major function, but defines +// it's own mutex levels. We can do this safely because we know that the +// local filesystem will never call the remote filesystem and vice versa. +// + +#define MUTEX_LEVEL_RDR_FILESYS_DATABASE (ULONG)0x10100000 +#define MUTEX_LEVEL_RDR_FILESYS_SECURITY (ULONG)0x10100001 + +// +// File System levels. +// + +#define MUTEX_LEVEL_FILESYSTEM_RAW_VCB (ULONG)0x11000006 + +// +// In the NT STREAMS environment, a mutex is used to serialize open, close +// and Scheduler threads executing in a subsystem-parallelized stack. +// + +#define MUTEX_LEVEL_STREAMS_SUBSYS (ULONG)0x11001001 + +// +// Mutex level used by LDT support on x86 +// + +#define MUTEX_LEVEL_PS_LDT (ULONG)0x1F000000 + +// +// These macros are used to test, set and clear flags respectivly +// + +#ifndef FlagOn +#define FlagOn(_F,_SF) ((_F) & (_SF)) +#endif + +#ifndef BooleanFlagOn +#define BooleanFlagOn(F,SF) ((BOOLEAN)(((F) & (SF)) != 0)) +#endif + +#ifndef SetFlag +#define SetFlag(_F,_SF) ((_F) |= (_SF)) +#endif + +#ifndef ClearFlag +#define ClearFlag(_F,_SF) ((_F) &= ~(_SF)) +#endif + +// +// Define types that are not exported. +// + +typedef struct _BUS_HANDLER *PBUS_HANDLER; +typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; +typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT; +typedef struct _IO_TIMER *PIO_TIMER; +typedef struct _KINTERRUPT *PKINTERRUPT; +typedef struct _KPROCESS *PKPROCESS ,*PRKPROCESS, *PEPROCESS; +typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD, *PETHREAD; +typedef struct _OBJECT_TYPE *POBJECT_TYPE; +typedef struct _PEB *PPEB; + +#if defined(_M_AMD64) + +PKTHREAD +NTAPI +KeGetCurrentThread( + VOID + ); + +#endif // defined(_M_AMD64) + +#if defined(_M_IX86) +PKTHREAD NTAPI KeGetCurrentThread(); +#endif // defined(_M_IX86) + +#if defined(_M_IA64) + +// +// Define Address of Processor Control Registers. +// + +#define KIPCR ((ULONG_PTR)(KADDRESS_BASE + 0xffff0000)) // kernel address of first PCR + +// +// Define Pointer to Processor Control Registers. +// + +#define PCR ((volatile KPCR * const)KIPCR) + +PKTHREAD NTAPI KeGetCurrentThread(); + +#endif // defined(_M_IA64) + +#define PsGetCurrentProcess() IoGetCurrentProcess() +#define PsGetCurrentThread() ((PETHREAD) (KeGetCurrentThread())) +extern NTSYSAPI CCHAR KeNumberProcessors; +// +// Define an access token from a programmer's viewpoint. The structure is +// completely opaque and the programer is only allowed to have pointers +// to tokens. +// + +typedef PVOID PACCESS_TOKEN; // winnt + +// +// Pointer to a SECURITY_DESCRIPTOR opaque data type. +// + +typedef PVOID PSECURITY_DESCRIPTOR; // winnt + +// +// Define a pointer to the Security ID data type (an opaque data type) +// + +typedef PVOID PSID; // winnt + +typedef ULONG ACCESS_MASK; +typedef ACCESS_MASK *PACCESS_MASK; + +// end_winnt +// +// The following are masks for the predefined standard access types +// + +#define DELETE (0x00010000L) +#define READ_CONTROL (0x00020000L) +#define WRITE_DAC (0x00040000L) +#define WRITE_OWNER (0x00080000L) +#define SYNCHRONIZE (0x00100000L) + +#define STANDARD_RIGHTS_REQUIRED (0x000F0000L) + +#define STANDARD_RIGHTS_READ (READ_CONTROL) +#define STANDARD_RIGHTS_WRITE (READ_CONTROL) +#define STANDARD_RIGHTS_EXECUTE (READ_CONTROL) + +#define STANDARD_RIGHTS_ALL (0x001F0000L) + +#define SPECIFIC_RIGHTS_ALL (0x0000FFFFL) + +// +// AccessSystemAcl access type +// + +#define ACCESS_SYSTEM_SECURITY (0x01000000L) + +// +// MaximumAllowed access type +// + +#define MAXIMUM_ALLOWED (0x02000000L) + +// +// These are the generic rights. +// + +#define GENERIC_READ (0x80000000L) +#define GENERIC_WRITE (0x40000000L) +#define GENERIC_EXECUTE (0x20000000L) +#define GENERIC_ALL (0x10000000L) + + +// +// Define the generic mapping array. This is used to denote the +// mapping of each generic access right to a specific access mask. +// + +typedef struct _GENERIC_MAPPING { + ACCESS_MASK GenericRead; + ACCESS_MASK GenericWrite; + ACCESS_MASK GenericExecute; + ACCESS_MASK GenericAll; +} GENERIC_MAPPING; +typedef GENERIC_MAPPING *PGENERIC_MAPPING; + + + +//////////////////////////////////////////////////////////////////////// +// // +// LUID_AND_ATTRIBUTES // +// // +//////////////////////////////////////////////////////////////////////// +// +// + + +#include <pshpack4.h> + +typedef struct _LUID_AND_ATTRIBUTES { + LUID Luid; + ULONG Attributes; + } LUID_AND_ATTRIBUTES, * PLUID_AND_ATTRIBUTES; +typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; +typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY; + +#include <poppack.h> + + +#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED +#define SID_IDENTIFIER_AUTHORITY_DEFINED +typedef struct _SID_IDENTIFIER_AUTHORITY { + UCHAR Value[6]; +} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; +#endif + + +#ifndef SID_DEFINED +#define SID_DEFINED +typedef struct _SID { + UCHAR Revision; + UCHAR SubAuthorityCount; + SID_IDENTIFIER_AUTHORITY IdentifierAuthority; +#ifdef MIDL_PASS + [size_is(SubAuthorityCount)] ULONG SubAuthority[*]; +#else // MIDL_PASS + ULONG SubAuthority[ANYSIZE_ARRAY]; +#endif // MIDL_PASS +} SID, *PISID; +#endif + +#define SID_REVISION (1) // Current revision level +#define SID_MAX_SUB_AUTHORITIES (15) +#define SID_RECOMMENDED_SUB_AUTHORITIES (1) // Will change to around 6 + + // in a future release. +#ifndef MIDL_PASS +#define SECURITY_MAX_SID_SIZE \ + (sizeof(SID) - sizeof(ULONG) + (SID_MAX_SUB_AUTHORITIES * sizeof(ULONG))) +#endif // MIDL_PASS + + +typedef enum _SID_NAME_USE { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer +} SID_NAME_USE, *PSID_NAME_USE; + +typedef struct _SID_AND_ATTRIBUTES { + PSID Sid; + ULONG Attributes; + } SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES; + +typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY]; +typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY; + + + +///////////////////////////////////////////////////////////////////////////// +// // +// Universal well-known SIDs // +// // +// Null SID S-1-0-0 // +// World S-1-1-0 // +// Local S-1-2-0 // +// Creator Owner ID S-1-3-0 // +// Creator Group ID S-1-3-1 // +// Creator Owner Server ID S-1-3-2 // +// Creator Group Server ID S-1-3-3 // +// // +// (Non-unique IDs) S-1-4 // +// // +///////////////////////////////////////////////////////////////////////////// + +#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0} +#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} +#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2} +#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3} +#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4} +#define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9} + +#define SECURITY_NULL_RID (0x00000000L) +#define SECURITY_WORLD_RID (0x00000000L) +#define SECURITY_LOCAL_RID (0x00000000L) + +#define SECURITY_CREATOR_OWNER_RID (0x00000000L) +#define SECURITY_CREATOR_GROUP_RID (0x00000001L) + +#define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L) +#define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L) + + +///////////////////////////////////////////////////////////////////////////// +// // +// NT well-known SIDs // +// // +// NT Authority S-1-5 // +// Dialup S-1-5-1 // +// // +// Network S-1-5-2 // +// Batch S-1-5-3 // +// Interactive S-1-5-4 // +// Service S-1-5-6 // +// AnonymousLogon S-1-5-7 (aka null logon session) // +// Proxy S-1-5-8 // +// ServerLogon S-1-5-9 (aka domain controller account) // +// Self S-1-5-10 (self RID) // +// Authenticated User S-1-5-11 (Authenticated user somewhere) // +// Restricted Code S-1-5-12 (Running restricted code) // +// Terminal Server S-1-5-13 (Running on Terminal Server) // +// Remote Logon S-1-5-14 (Remote Interactive Logon) // +// // +// (Logon IDs) S-1-5-5-X-Y // +// // +// (NT non-unique IDs) S-1-5-0x15-... // +// // +// (Built-in domain) s-1-5-0x20 // +// // +///////////////////////////////////////////////////////////////////////////// + + +#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} // ntifs + +#define SECURITY_DIALUP_RID (0x00000001L) +#define SECURITY_NETWORK_RID (0x00000002L) +#define SECURITY_BATCH_RID (0x00000003L) +#define SECURITY_INTERACTIVE_RID (0x00000004L) +#define SECURITY_SERVICE_RID (0x00000006L) +#define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L) +#define SECURITY_PROXY_RID (0x00000008L) +#define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L) +#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID +#define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL) +#define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL) +#define SECURITY_RESTRICTED_CODE_RID (0x0000000CL) +#define SECURITY_TERMINAL_SERVER_RID (0x0000000DL) +#define SECURITY_REMOTE_LOGON_RID (0x0000000EL) + + +#define SECURITY_LOGON_IDS_RID (0x00000005L) +#define SECURITY_LOGON_IDS_RID_COUNT (3L) + +#define SECURITY_LOCAL_SYSTEM_RID (0x00000012L) +#define SECURITY_LOCAL_SERVICE_RID (0x00000013L) +#define SECURITY_NETWORK_SERVICE_RID (0x00000014L) + +#define SECURITY_NT_NON_UNIQUE (0x00000015L) +#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L) + +#define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L) + + + + + +///////////////////////////////////////////////////////////////////////////// +// // +// well-known domain relative sub-authority values (RIDs)... // +// // +///////////////////////////////////////////////////////////////////////////// + +// Well-known users ... + +#define DOMAIN_USER_RID_ADMIN (0x000001F4L) +#define DOMAIN_USER_RID_GUEST (0x000001F5L) +#define DOMAIN_USER_RID_KRBTGT (0x000001F6L) + + + +// well-known groups ... + +#define DOMAIN_GROUP_RID_ADMINS (0x00000200L) +#define DOMAIN_GROUP_RID_USERS (0x00000201L) +#define DOMAIN_GROUP_RID_GUESTS (0x00000202L) +#define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L) +#define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L) +#define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L) +#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L) +#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L) +#define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L) + + + + +// well-known aliases ... + +#define DOMAIN_ALIAS_RID_ADMINS (0x00000220L) +#define DOMAIN_ALIAS_RID_USERS (0x00000221L) +#define DOMAIN_ALIAS_RID_GUESTS (0x00000222L) +#define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L) + +#define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L) +#define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L) +#define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L) +#define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L) + +#define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L) +#define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L) +#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL) +#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL) +#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL) + + +// +// Allocate the System Luid. The first 1000 LUIDs are reserved. +// Use #999 here (0x3E7 = 999) +// + +#define SYSTEM_LUID { 0x3E7, 0x0 } +#define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 } +#define LOCALSERVICE_LUID { 0x3e5, 0x0 } +#define NETWORKSERVICE_LUID { 0x3e4, 0x0 } + +// This is the *current* ACL revision + +#define ACL_REVISION (2) +#define ACL_REVISION_DS (4) + +// This is the history of ACL revisions. Add a new one whenever +// ACL_REVISION is updated + +#define ACL_REVISION1 (1) +#define MIN_ACL_REVISION ACL_REVISION2 +#define ACL_REVISION2 (2) +#define ACL_REVISION3 (3) +#define ACL_REVISION4 (4) +#define MAX_ACL_REVISION ACL_REVISION4 + +typedef struct _ACL { + UCHAR AclRevision; + UCHAR Sbz1; + USHORT AclSize; + USHORT AceCount; + USHORT Sbz2; +} ACL; +typedef ACL *PACL; + +// end_ntddk end_wdm + +// +// The structure of an ACE is a common ace header followed by ace type +// specific data. Pictorally the structure of the common ace header is +// as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---------------+-------+-------+---------------+---------------+ +// | AceSize | AceFlags | AceType | +// +---------------+-------+-------+---------------+---------------+ +// +// AceType denotes the type of the ace, there are some predefined ace +// types +// +// AceSize is the size, in bytes, of ace. +// +// AceFlags are the Ace flags for audit and inheritance, defined shortly. + +typedef struct _ACE_HEADER { + UCHAR AceType; + UCHAR AceFlags; + USHORT AceSize; +} ACE_HEADER; +typedef ACE_HEADER *PACE_HEADER; + +// +// The following are the predefined ace types that go into the AceType +// field of an Ace header. +// + +#define ACCESS_MIN_MS_ACE_TYPE (0x0) +#define ACCESS_ALLOWED_ACE_TYPE (0x0) +#define ACCESS_DENIED_ACE_TYPE (0x1) +#define SYSTEM_AUDIT_ACE_TYPE (0x2) +#define SYSTEM_ALARM_ACE_TYPE (0x3) +#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3) + +#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4) +#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4) + +#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5) +#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5) +#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6) +#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7) +#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8) +#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8) + +#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8) +#define ACCESS_MAX_MS_ACE_TYPE (0x8) + +#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9) +#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA) +#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB) +#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC) +#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD) +#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE) +#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF) +#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10) + +#define ACCESS_MAX_MS_V5_ACE_TYPE (0x10) + +// end_winnt + + +// begin_winnt + +// +// The following are the inherit flags that go into the AceFlags field +// of an Ace header. +// + +#define OBJECT_INHERIT_ACE (0x1) +#define CONTAINER_INHERIT_ACE (0x2) +#define NO_PROPAGATE_INHERIT_ACE (0x4) +#define INHERIT_ONLY_ACE (0x8) +#define INHERITED_ACE (0x10) +#define VALID_INHERIT_FLAGS (0x1F) + + +// The following are the currently defined ACE flags that go into the +// AceFlags field of an ACE header. Each ACE type has its own set of +// AceFlags. +// +// SUCCESSFUL_ACCESS_ACE_FLAG - used only with system audit and alarm ACE +// types to indicate that a message is generated for successful accesses. +// +// FAILED_ACCESS_ACE_FLAG - used only with system audit and alarm ACE types +// to indicate that a message is generated for failed accesses. +// + +// +// SYSTEM_AUDIT and SYSTEM_ALARM AceFlags +// +// These control the signaling of audit and alarms for success or failure. +// + +#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40) +#define FAILED_ACCESS_ACE_FLAG (0x80) + + +// +// We'll define the structure of the predefined ACE types. Pictorally +// the structure of the predefined ACE's is as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---------------+-------+-------+---------------+---------------+ +// | AceFlags | Resd |Inherit| AceSize | AceType | +// +---------------+-------+-------+---------------+---------------+ +// | Mask | +// +---------------------------------------------------------------+ +// | | +// + + +// | | +// + Sid + +// | | +// + + +// | | +// +---------------------------------------------------------------+ +// +// Mask is the access mask associated with the ACE. This is either the +// access allowed, access denied, audit, or alarm mask. +// +// Sid is the Sid associated with the ACE. +// + +// The following are the four predefined ACE types. + +// Examine the AceType field in the Header to determine +// which structure is appropriate to use for casting. + + +typedef struct _ACCESS_ALLOWED_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + ULONG SidStart; +} ACCESS_ALLOWED_ACE; + +typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE; + +typedef struct _ACCESS_DENIED_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + ULONG SidStart; +} ACCESS_DENIED_ACE; +typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE; + +typedef struct _SYSTEM_AUDIT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + ULONG SidStart; +} SYSTEM_AUDIT_ACE; +typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE; + +typedef struct _SYSTEM_ALARM_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + ULONG SidStart; +} SYSTEM_ALARM_ACE; +typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE; + +// +// Current security descriptor revision value +// + +#define SECURITY_DESCRIPTOR_REVISION (1) +#define SECURITY_DESCRIPTOR_REVISION1 (1) + +// end_wdm end_ntddk + + +#define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR)) + + +typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; + +#define SE_OWNER_DEFAULTED (0x0001) +#define SE_GROUP_DEFAULTED (0x0002) +#define SE_DACL_PRESENT (0x0004) +#define SE_DACL_DEFAULTED (0x0008) +#define SE_SACL_PRESENT (0x0010) +#define SE_SACL_DEFAULTED (0x0020) +// end_winnt +#define SE_DACL_UNTRUSTED (0x0040) +#define SE_SERVER_SECURITY (0x0080) +// begin_winnt +#define SE_DACL_AUTO_INHERIT_REQ (0x0100) +#define SE_SACL_AUTO_INHERIT_REQ (0x0200) +#define SE_DACL_AUTO_INHERITED (0x0400) +#define SE_SACL_AUTO_INHERITED (0x0800) +#define SE_DACL_PROTECTED (0x1000) +#define SE_SACL_PROTECTED (0x2000) +#define SE_RM_CONTROL_VALID (0x4000) +#define SE_SELF_RELATIVE (0x8000) + +// +// Where: +// +// SE_OWNER_DEFAULTED - This boolean flag, when set, indicates that the +// SID pointed to by the Owner field was provided by a +// defaulting mechanism rather than explicitly provided by the +// original provider of the security descriptor. This may +// affect the treatment of the SID with respect to inheritence +// of an owner. +// +// SE_GROUP_DEFAULTED - This boolean flag, when set, indicates that the +// SID in the Group field was provided by a defaulting mechanism +// rather than explicitly provided by the original provider of +// the security descriptor. This may affect the treatment of +// the SID with respect to inheritence of a primary group. +// +// SE_DACL_PRESENT - This boolean flag, when set, indicates that the +// security descriptor contains a discretionary ACL. If this +// flag is set and the Dacl field of the SECURITY_DESCRIPTOR is +// null, then a null ACL is explicitly being specified. +// +// SE_DACL_DEFAULTED - This boolean flag, when set, indicates that the +// ACL pointed to by the Dacl field was provided by a defaulting +// mechanism rather than explicitly provided by the original +// provider of the security descriptor. This may affect the +// treatment of the ACL with respect to inheritence of an ACL. +// This flag is ignored if the DaclPresent flag is not set. +// +// SE_SACL_PRESENT - This boolean flag, when set, indicates that the +// security descriptor contains a system ACL pointed to by the +// Sacl field. If this flag is set and the Sacl field of the +// SECURITY_DESCRIPTOR is null, then an empty (but present) +// ACL is being specified. +// +// SE_SACL_DEFAULTED - This boolean flag, when set, indicates that the +// ACL pointed to by the Sacl field was provided by a defaulting +// mechanism rather than explicitly provided by the original +// provider of the security descriptor. This may affect the +// treatment of the ACL with respect to inheritence of an ACL. +// This flag is ignored if the SaclPresent flag is not set. +// +// end_winnt +// SE_DACL_TRUSTED - This boolean flag, when set, indicates that the +// ACL pointed to by the Dacl field was provided by a trusted source +// and does not require any editing of compound ACEs. If this flag +// is not set and a compound ACE is encountered, the system will +// substitute known valid SIDs for the server SIDs in the ACEs. +// +// SE_SERVER_SECURITY - This boolean flag, when set, indicates that the +// caller wishes the system to create a Server ACL based on the +// input ACL, regardess of its source (explicit or defaulting. +// This is done by replacing all of the GRANT ACEs with compound +// ACEs granting the current server. This flag is only +// meaningful if the subject is impersonating. +// +// begin_winnt +// SE_SELF_RELATIVE - This boolean flag, when set, indicates that the +// security descriptor is in self-relative form. In this form, +// all fields of the security descriptor are contiguous in memory +// and all pointer fields are expressed as offsets from the +// beginning of the security descriptor. This form is useful +// for treating security descriptors as opaque data structures +// for transmission in communication protocol or for storage on +// secondary media. +// +// +// +// Pictorially the structure of a security descriptor is as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +---------------------------------------------------------------+ +// | Control |Reserved1 (SBZ)| Revision | +// +---------------------------------------------------------------+ +// | Owner | +// +---------------------------------------------------------------+ +// | Group | +// +---------------------------------------------------------------+ +// | Sacl | +// +---------------------------------------------------------------+ +// | Dacl | +// +---------------------------------------------------------------+ +// +// In general, this data structure should be treated opaquely to ensure future +// compatibility. +// +// + +typedef struct _SECURITY_DESCRIPTOR_RELATIVE { + UCHAR Revision; + UCHAR Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + ULONG Owner; + ULONG Group; + ULONG Sacl; + ULONG Dacl; + } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE; + +typedef struct _SECURITY_DESCRIPTOR { + UCHAR Revision; + UCHAR Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PSID Owner; + PSID Group; + PACL Sacl; + PACL Dacl; + + } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; + + + +//////////////////////////////////////////////////////////////////////// +// // +// Object Type list for AccessCheckByType // +// // +//////////////////////////////////////////////////////////////////////// + +typedef struct _OBJECT_TYPE_LIST { + USHORT Level; + USHORT Sbz; + GUID *ObjectType; +} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST; + +// +// DS values for Level +// + +#define ACCESS_OBJECT_GUID 0 +#define ACCESS_PROPERTY_SET_GUID 1 +#define ACCESS_PROPERTY_GUID 2 + +#define ACCESS_MAX_LEVEL 4 + +// +// Parameters to NtAccessCheckByTypeAndAditAlarm +// + +typedef enum _AUDIT_EVENT_TYPE { + AuditEventObjectAccess, + AuditEventDirectoryServiceAccess +} AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE; + +#define AUDIT_ALLOW_NO_PRIVILEGE 0x1 + +// +// DS values for Source and ObjectTypeName +// + +#define ACCESS_DS_SOURCE_A "DS" +#define ACCESS_DS_SOURCE_W L"DS" +#define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object" +#define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object" + + +//////////////////////////////////////////////////////////////////////// +// // +// Privilege Related Data Structures // +// // +//////////////////////////////////////////////////////////////////////// + + +// begin_wdm begin_ntddk begin_nthal +// +// Privilege attributes +// + +#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L) +#define SE_PRIVILEGE_ENABLED (0x00000002L) +#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L) + +// +// Privilege Set Control flags +// + +#define PRIVILEGE_SET_ALL_NECESSARY (1) + +// +// Privilege Set - This is defined for a privilege set of one. +// If more than one privilege is needed, then this structure +// will need to be allocated with more space. +// +// Note: don't change this structure without fixing the INITIAL_PRIVILEGE_SET +// structure (defined in se.h) +// + +typedef struct _PRIVILEGE_SET { + ULONG PrivilegeCount; + ULONG Control; + LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY]; + } PRIVILEGE_SET, * PPRIVILEGE_SET; + +// +// These must be converted to LUIDs before use. +// + +#define SE_MIN_WELL_KNOWN_PRIVILEGE (2L) +#define SE_CREATE_TOKEN_PRIVILEGE (2L) +#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE (3L) +#define SE_LOCK_MEMORY_PRIVILEGE (4L) +#define SE_INCREASE_QUOTA_PRIVILEGE (5L) + +// end_wdm +// +// Unsolicited Input is obsolete and unused. +// + +#define SE_UNSOLICITED_INPUT_PRIVILEGE (6L) + +// begin_wdm +#define SE_MACHINE_ACCOUNT_PRIVILEGE (6L) +#define SE_TCB_PRIVILEGE (7L) +#define SE_SECURITY_PRIVILEGE (8L) +#define SE_TAKE_OWNERSHIP_PRIVILEGE (9L) +#define SE_LOAD_DRIVER_PRIVILEGE (10L) +#define SE_SYSTEM_PROFILE_PRIVILEGE (11L) +#define SE_SYSTEMTIME_PRIVILEGE (12L) +#define SE_PROF_SINGLE_PROCESS_PRIVILEGE (13L) +#define SE_INC_BASE_PRIORITY_PRIVILEGE (14L) +#define SE_CREATE_PAGEFILE_PRIVILEGE (15L) +#define SE_CREATE_PERMANENT_PRIVILEGE (16L) +#define SE_BACKUP_PRIVILEGE (17L) +#define SE_RESTORE_PRIVILEGE (18L) +#define SE_SHUTDOWN_PRIVILEGE (19L) +#define SE_DEBUG_PRIVILEGE (20L) +#define SE_AUDIT_PRIVILEGE (21L) +#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE (22L) +#define SE_CHANGE_NOTIFY_PRIVILEGE (23L) +#define SE_REMOTE_SHUTDOWN_PRIVILEGE (24L) +#define SE_UNDOCK_PRIVILEGE (25L) +#define SE_SYNC_AGENT_PRIVILEGE (26L) +#define SE_ENABLE_DELEGATION_PRIVILEGE (27L) +#define SE_MANAGE_VOLUME_PRIVILEGE (28L) +#define SE_MAX_WELL_KNOWN_PRIVILEGE (SE_MANAGE_VOLUME_PRIVILEGE) + +// +// Impersonation Level +// +// Impersonation level is represented by a pair of bits in Windows. +// If a new impersonation level is added or lowest value is changed from +// 0 to something else, fix the Windows CreateFile call. +// + +typedef enum _SECURITY_IMPERSONATION_LEVEL { + SecurityAnonymous, + SecurityIdentification, + SecurityImpersonation, + SecurityDelegation + } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL; + +#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation +#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous +#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation +#define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL)) + +//////////////////////////////////////////////////////////////////// +// // +// Token Object Definitions // +// // +// // +//////////////////////////////////////////////////////////////////// + + +// +// Token Specific Access Rights. +// + +#define TOKEN_ASSIGN_PRIMARY (0x0001) +#define TOKEN_DUPLICATE (0x0002) +#define TOKEN_IMPERSONATE (0x0004) +#define TOKEN_QUERY (0x0008) +#define TOKEN_QUERY_SOURCE (0x0010) +#define TOKEN_ADJUST_PRIVILEGES (0x0020) +#define TOKEN_ADJUST_GROUPS (0x0040) +#define TOKEN_ADJUST_DEFAULT (0x0080) +#define TOKEN_ADJUST_SESSIONID (0x0100) + +#define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED |\ + TOKEN_ASSIGN_PRIMARY |\ + TOKEN_DUPLICATE |\ + TOKEN_IMPERSONATE |\ + TOKEN_QUERY |\ + TOKEN_QUERY_SOURCE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT ) + +#if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT))) +#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\ + TOKEN_ADJUST_SESSIONID ) +#else +#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P) +#endif + +#define TOKEN_READ (STANDARD_RIGHTS_READ |\ + TOKEN_QUERY) + + +#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\ + TOKEN_ADJUST_PRIVILEGES |\ + TOKEN_ADJUST_GROUPS |\ + TOKEN_ADJUST_DEFAULT) + +#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE) + + +// +// +// Token Types +// + +typedef enum _TOKEN_TYPE { + TokenPrimary = 1, + TokenImpersonation + } TOKEN_TYPE; +typedef TOKEN_TYPE *PTOKEN_TYPE; + + +// +// Token Information Classes. +// + + +typedef enum _TOKEN_INFORMATION_CLASS { + TokenUser = 1, + TokenGroups, + TokenPrivileges, + TokenOwner, + TokenPrimaryGroup, + TokenDefaultDacl, + TokenSource, + TokenType, + TokenImpersonationLevel, + TokenStatistics, + TokenRestrictedSids, + TokenSessionId, + TokenGroupsAndPrivileges, + TokenSessionReference, + TokenSandBoxInert +} TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS; + +// +// Token information class structures +// + + +typedef struct _TOKEN_USER { + SID_AND_ATTRIBUTES User; +} TOKEN_USER, *PTOKEN_USER; + +typedef struct _TOKEN_GROUPS { + ULONG GroupCount; + SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; +} TOKEN_GROUPS, *PTOKEN_GROUPS; + + +typedef struct _TOKEN_PRIVILEGES { + ULONG PrivilegeCount; + LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; +} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; + + +typedef struct _TOKEN_OWNER { + PSID Owner; +} TOKEN_OWNER, *PTOKEN_OWNER; + + +typedef struct _TOKEN_PRIMARY_GROUP { + PSID PrimaryGroup; +} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; + + +typedef struct _TOKEN_DEFAULT_DACL { + PACL DefaultDacl; +} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL; + +typedef struct _TOKEN_GROUPS_AND_PRIVILEGES { + ULONG SidCount; + ULONG SidLength; + PSID_AND_ATTRIBUTES Sids; + ULONG RestrictedSidCount; + ULONG RestrictedSidLength; + PSID_AND_ATTRIBUTES RestrictedSids; + ULONG PrivilegeCount; + ULONG PrivilegeLength; + PLUID_AND_ATTRIBUTES Privileges; + LUID AuthenticationId; +} TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES; + + +#define TOKEN_SOURCE_LENGTH 8 + +typedef struct _TOKEN_SOURCE { + CHAR SourceName[TOKEN_SOURCE_LENGTH]; + LUID SourceIdentifier; +} TOKEN_SOURCE, *PTOKEN_SOURCE; + + +typedef struct _TOKEN_STATISTICS { + LUID TokenId; + LUID AuthenticationId; + LARGE_INTEGER ExpirationTime; + TOKEN_TYPE TokenType; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + ULONG DynamicCharged; + ULONG DynamicAvailable; + ULONG GroupCount; + ULONG PrivilegeCount; + LUID ModifiedId; +} TOKEN_STATISTICS, *PTOKEN_STATISTICS; + + + +typedef struct _TOKEN_CONTROL { + LUID TokenId; + LUID AuthenticationId; + LUID ModifiedId; + TOKEN_SOURCE TokenSource; + } TOKEN_CONTROL, *PTOKEN_CONTROL; + +// end_winnt +// +// Security Tracking Mode +// + +#define SECURITY_DYNAMIC_TRACKING (TRUE) +#define SECURITY_STATIC_TRACKING (FALSE) + +typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, + * PSECURITY_CONTEXT_TRACKING_MODE; + + + +// +// Quality Of Service +// + +typedef struct _SECURITY_QUALITY_OF_SERVICE { + ULONG Length; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; + BOOLEAN EffectiveOnly; + } SECURITY_QUALITY_OF_SERVICE, * PSECURITY_QUALITY_OF_SERVICE; + + +// +// Used to represent information related to a thread impersonation +// + +typedef struct _SE_IMPERSONATION_STATE { + PACCESS_TOKEN Token; + BOOLEAN CopyOnOpen; + BOOLEAN EffectiveOnly; + SECURITY_IMPERSONATION_LEVEL Level; +} SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE; + + +typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION; + +#define OWNER_SECURITY_INFORMATION (0x00000001L) +#define GROUP_SECURITY_INFORMATION (0x00000002L) +#define DACL_SECURITY_INFORMATION (0x00000004L) +#define SACL_SECURITY_INFORMATION (0x00000008L) + +#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L) +#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L) +#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L) +#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L) + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenThreadToken( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + OUT PHANDLE TokenHandle + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenThreadTokenEx( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenProcessToken( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE TokenHandle + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenProcessTokenEx( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +NtOpenJobObjectToken( + IN HANDLE JobHandle, + IN ACCESS_MASK DesiredAccess, + OUT PHANDLE TokenHandle + ); + + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtDuplicateToken( + IN HANDLE ExistingTokenHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN BOOLEAN EffectiveOnly, + IN TOKEN_TYPE TokenType, + OUT PHANDLE NewTokenHandle + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtFilterToken ( + IN HANDLE ExistingTokenHandle, + IN ULONG Flags, + IN PTOKEN_GROUPS SidsToDisable OPTIONAL, + IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL, + IN PTOKEN_GROUPS RestrictedSids OPTIONAL, + OUT PHANDLE NewTokenHandle + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtImpersonateAnonymousToken( + IN HANDLE ThreadHandle + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryInformationToken ( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID TokenInformation, + IN ULONG TokenInformationLength, + OUT PULONG ReturnLength + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSetInformationToken ( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + IN PVOID TokenInformation, + IN ULONG TokenInformationLength + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAdjustPrivilegesToken ( + IN HANDLE TokenHandle, + IN BOOLEAN DisableAllPrivileges, + IN PTOKEN_PRIVILEGES NewState OPTIONAL, + IN ULONG BufferLength OPTIONAL, + OUT PTOKEN_PRIVILEGES PreviousState OPTIONAL, + OUT PULONG ReturnLength + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAdjustGroupsToken ( + IN HANDLE TokenHandle, + IN BOOLEAN ResetToDefault, + IN PTOKEN_GROUPS NewState OPTIONAL, + IN ULONG BufferLength OPTIONAL, + OUT PTOKEN_GROUPS PreviousState OPTIONAL, + OUT PULONG ReturnLength + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtPrivilegeCheck ( + IN HANDLE ClientToken, + IN OUT PPRIVILEGE_SET RequiredPrivileges, + OUT PBOOLEAN Result + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAccessCheckAndAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ACCESS_MASK DesiredAccess, + IN PGENERIC_MAPPING GenericMapping, + IN BOOLEAN ObjectCreation, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus, + OUT PBOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAccessCheckByTypeAndAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSID PrincipalSelfSid, + IN ACCESS_MASK DesiredAccess, + IN AUDIT_EVENT_TYPE AuditType, + IN ULONG Flags, + IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, + IN ULONG ObjectTypeListLength, + IN PGENERIC_MAPPING GenericMapping, + IN BOOLEAN ObjectCreation, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus, + OUT PBOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAccessCheckByTypeResultListAndAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSID PrincipalSelfSid, + IN ACCESS_MASK DesiredAccess, + IN AUDIT_EVENT_TYPE AuditType, + IN ULONG Flags, + IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, + IN ULONG ObjectTypeListLength, + IN PGENERIC_MAPPING GenericMapping, + IN BOOLEAN ObjectCreation, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus, + OUT PBOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAccessCheckByTypeResultListAndAuditAlarmByHandle ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN HANDLE ClientToken, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSID PrincipalSelfSid, + IN ACCESS_MASK DesiredAccess, + IN AUDIT_EVENT_TYPE AuditType, + IN ULONG Flags, + IN POBJECT_TYPE_LIST ObjectTypeList OPTIONAL, + IN ULONG ObjectTypeListLength, + IN PGENERIC_MAPPING GenericMapping, + IN BOOLEAN ObjectCreation, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus, + OUT PBOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenObjectAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId OPTIONAL, + IN PUNICODE_STRING ObjectTypeName, + IN PUNICODE_STRING ObjectName, + IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, + IN HANDLE ClientToken, + IN ACCESS_MASK DesiredAccess, + IN ACCESS_MASK GrantedAccess, + IN PPRIVILEGE_SET Privileges OPTIONAL, + IN BOOLEAN ObjectCreation, + IN BOOLEAN AccessGranted, + OUT PBOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtPrivilegeObjectAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN HANDLE ClientToken, + IN ACCESS_MASK DesiredAccess, + IN PPRIVILEGE_SET Privileges, + IN BOOLEAN AccessGranted + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtCloseObjectAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN BOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtDeleteObjectAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN BOOLEAN GenerateOnClose + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtPrivilegedServiceAuditAlarm ( + IN PUNICODE_STRING SubsystemName, + IN PUNICODE_STRING ServiceName, + IN HANDLE ClientToken, + IN PPRIVILEGE_SET Privileges, + IN BOOLEAN AccessGranted + ); + + +// +// Define alignment macros to align structure sizes and pointers up and down. +// + +#define ALIGN_DOWN(length, type) \ + ((ULONG)(length) & ~(sizeof(type) - 1)) + +#define ALIGN_UP(length, type) \ + (ALIGN_DOWN(((ULONG)(length) + sizeof(type) - 1), type)) + +#define ALIGN_DOWN_POINTER(address, type) \ + ((PVOID)((ULONG_PTR)(address) & ~((ULONG_PTR)sizeof(type) - 1))) + +#define ALIGN_UP_POINTER(address, type) \ + (ALIGN_DOWN_POINTER(((ULONG_PTR)(address) + sizeof(type) - 1), type)) + +#define POOL_TAGGING 1 + +#ifndef DBG +#define DBG 0 +#endif + +#if DBG +#define IF_DEBUG if (TRUE) +#else +#define IF_DEBUG if (FALSE) +#endif + +#if DEVL + + +extern ULONG NtGlobalFlag; + +#define IF_NTOS_DEBUG( FlagName ) \ + if (NtGlobalFlag & (FLG_ ## FlagName)) + +#else +#define IF_NTOS_DEBUG( FlagName ) if (FALSE) +#endif + +// +// Kernel definitions that need to be here for forward reference purposes +// + +// begin_ntndis +// +// Processor modes. +// + +typedef CCHAR KPROCESSOR_MODE; + +typedef enum _MODE { + KernelMode, + UserMode, + MaximumMode +} MODE; + +// end_ntndis +// +// APC function types +// + +// +// Put in an empty definition for the KAPC so that the +// routines can reference it before it is declared. +// + +struct _KAPC; + +typedef +VOID +(*PKNORMAL_ROUTINE) ( + IN PVOID NormalContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2 + ); + +typedef +VOID +(*PKKERNEL_ROUTINE) ( + IN struct _KAPC *Apc, + IN OUT PKNORMAL_ROUTINE *NormalRoutine, + IN OUT PVOID *NormalContext, + IN OUT PVOID *SystemArgument1, + IN OUT PVOID *SystemArgument2 + ); + +typedef +VOID +(*PKRUNDOWN_ROUTINE) ( + IN struct _KAPC *Apc + ); + +typedef +BOOLEAN +(*PKSYNCHRONIZE_ROUTINE) ( + IN PVOID SynchronizeContext + ); + +typedef +BOOLEAN +(*PKTRANSFER_ROUTINE) ( + VOID + ); + +// +// +// Asynchronous Procedure Call (APC) object +// +// + +typedef struct _KAPC { + CSHORT Type; + CSHORT Size; + ULONG Spare0; + struct _KTHREAD *Thread; + LIST_ENTRY ApcListEntry; + PKKERNEL_ROUTINE KernelRoutine; + PKRUNDOWN_ROUTINE RundownRoutine; + PKNORMAL_ROUTINE NormalRoutine; + PVOID NormalContext; + + // + // N.B. The following two members MUST be together. + // + + PVOID SystemArgument1; + PVOID SystemArgument2; + CCHAR ApcStateIndex; + KPROCESSOR_MODE ApcMode; + BOOLEAN Inserted; +} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; + +// begin_ntndis +// +// DPC routine +// + +struct _KDPC; + +typedef +VOID +(*PKDEFERRED_ROUTINE) ( + IN struct _KDPC *Dpc, + IN PVOID DeferredContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2 + ); + +// +// Define DPC importance. +// +// LowImportance - Queue DPC at end of target DPC queue. +// MediumImportance - Queue DPC at end of target DPC queue. +// HighImportance - Queue DPC at front of target DPC DPC queue. +// +// If there is currently a DPC active on the target processor, or a DPC +// interrupt has already been requested on the target processor when a +// DPC is queued, then no further action is necessary. The DPC will be +// executed on the target processor when its queue entry is processed. +// +// If there is not a DPC active on the target processor and a DPC interrupt +// has not been requested on the target processor, then the exact treatment +// of the DPC is dependent on whether the host system is a UP system or an +// MP system. +// +// UP system. +// +// If the DPC is of medium or high importance, the current DPC queue depth +// is greater than the maximum target depth, or current DPC request rate is +// less the minimum target rate, then a DPC interrupt is requested on the +// host processor and the DPC will be processed when the interrupt occurs. +// Otherwise, no DPC interupt is requested and the DPC execution will be +// delayed until the DPC queue depth is greater that the target depth or the +// minimum DPC rate is less than the target rate. +// +// MP system. +// +// If the DPC is being queued to another processor and the depth of the DPC +// queue on the target processor is greater than the maximum target depth or +// the DPC is of high importance, then a DPC interrupt is requested on the +// target processor and the DPC will be processed when the interrupt occurs. +// Otherwise, the DPC execution will be delayed on the target processor until +// the DPC queue depth on the target processor is greater that the maximum +// target depth or the minimum DPC rate on the target processor is less than +// the target mimimum rate. +// +// If the DPC is being queued to the current processor and the DPC is not of +// low importance, the current DPC queue depth is greater than the maximum +// target depth, or the minimum DPC rate is less than the minimum target rate, +// then a DPC interrupt is request on the current processor and the DPV will +// be processed whne the interrupt occurs. Otherwise, no DPC interupt is +// requested and the DPC execution will be delayed until the DPC queue depth +// is greater that the target depth or the minimum DPC rate is less than the +// target rate. +// + +typedef enum _KDPC_IMPORTANCE { + LowImportance, + MediumImportance, + HighImportance +} KDPC_IMPORTANCE; + +// +// Deferred Procedure Call (DPC) object +// + +typedef struct _KDPC { + CSHORT Type; + UCHAR Number; + UCHAR Importance; + LIST_ENTRY DpcListEntry; + PKDEFERRED_ROUTINE DeferredRoutine; + PVOID DeferredContext; + PVOID SystemArgument1; + PVOID SystemArgument2; + PULONG_PTR Lock; +} KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; + + +// +// Interprocessor interrupt worker routine function prototype. +// + +typedef PVOID PKIPI_CONTEXT; + +typedef +VOID +(*PKIPI_WORKER)( + IN PKIPI_CONTEXT PacketContext, + IN PVOID Parameter1, + IN PVOID Parameter2, + IN PVOID Parameter3 + ); + +// +// Define interprocessor interrupt performance counters. +// + +typedef struct _KIPI_COUNTS { + ULONG Freeze; + ULONG Packet; + ULONG DPC; + ULONG APC; + ULONG FlushSingleTb; + ULONG FlushMultipleTb; + ULONG FlushEntireTb; + ULONG GenericCall; + ULONG ChangeColor; + ULONG SweepDcache; + ULONG SweepIcache; + ULONG SweepIcacheRange; + ULONG FlushIoBuffers; + ULONG GratuitousDPC; +} KIPI_COUNTS, *PKIPI_COUNTS; + +#if defined(NT_UP) + +#define HOT_STATISTIC(a) a + +#else + +#define HOT_STATISTIC(a) (KeGetCurrentPrcb()->a) + +#endif + +// +// I/O system definitions. +// +// Define a Memory Descriptor List (MDL) +// +// An MDL describes pages in a virtual buffer in terms of physical pages. The +// pages associated with the buffer are described in an array that is allocated +// just after the MDL header structure itself. In a future compiler this will +// be placed at: +// +// ULONG Pages[]; +// +// Until this declaration is permitted, however, one simply calculates the +// base of the array by adding one to the base MDL pointer: +// +// Pages = (PULONG) (Mdl + 1); +// +// Notice that while in the context of the subject thread, the base virtual +// address of a buffer mapped by an MDL may be referenced using the following: +// +// Mdl->StartVa | Mdl->ByteOffset +// + + +typedef struct _MDL { + struct _MDL *Next; + CSHORT Size; + CSHORT MdlFlags; + struct _EPROCESS *Process; + PVOID MappedSystemVa; + PVOID StartVa; + ULONG ByteCount; + ULONG ByteOffset; +} MDL, *PMDL; + +#define MDL_MAPPED_TO_SYSTEM_VA 0x0001 +#define MDL_PAGES_LOCKED 0x0002 +#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 +#define MDL_ALLOCATED_FIXED_SIZE 0x0008 +#define MDL_PARTIAL 0x0010 +#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 +#define MDL_IO_PAGE_READ 0x0040 +#define MDL_WRITE_OPERATION 0x0080 +#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 +#define MDL_FREE_EXTRA_PTES 0x0200 +#define MDL_IO_SPACE 0x0800 +#define MDL_NETWORK_HEADER 0x1000 +#define MDL_MAPPING_CAN_FAIL 0x2000 +#define MDL_ALLOCATED_MUST_SUCCEED 0x4000 + + +#define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \ + MDL_PAGES_LOCKED | \ + MDL_SOURCE_IS_NONPAGED_POOL | \ + MDL_PARTIAL_HAS_BEEN_MAPPED | \ + MDL_PARENT_MAPPED_SYSTEM_VA | \ + MDL_SYSTEM_VA | \ + MDL_IO_SPACE ) + +// end_ntndis +// +// switch to DBG when appropriate +// + +#if DBG +#define PAGED_CODE() \ + { if (KeGetCurrentIrql() > APC_LEVEL) { \ + KdPrint(( "EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql() )); \ + ASSERT(FALSE); \ + } \ + } +#else +#define PAGED_CODE() NOP_FUNCTION; +#endif + +// +// Data structure used to represent client security context for a thread. +// This data structure is used to support impersonation. +// +// THE FIELDS OF THIS DATA STRUCTURE SHOULD BE CONSIDERED OPAQUE +// BY ALL EXCEPT THE SECURITY ROUTINES. +// + +typedef struct _SECURITY_CLIENT_CONTEXT { + SECURITY_QUALITY_OF_SERVICE SecurityQos; + PACCESS_TOKEN ClientToken; + BOOLEAN DirectlyAccessClientToken; + BOOLEAN DirectAccessEffectiveOnly; + BOOLEAN ServerIsRemote; + TOKEN_CONTROL ClientTokenControl; + } SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT; + +// +// where +// +// SecurityQos - is the security quality of service information in effect +// for this client. This information is used when directly accessing +// the client's token. In this case, the information here over-rides +// the information in the client's token. If a copy of the client's +// token is requested, it must be generated using this information, +// not the information in the client's token. In all cases, this +// information may not provide greater access than the information +// in the client's token. In particular, if the client's token is +// an impersonation token with an impersonation level of +// "SecurityDelegation", but the information in this field indicates +// an impersonation level of "SecurityIdentification", then +// the server may only get a copy of the token with an Identification +// level of impersonation. +// +// ClientToken - If the DirectlyAccessClientToken field is FALSE, +// then this field contains a pointer to a duplicate of the +// client's token. Otherwise, this field points directly to +// the client's token. +// +// DirectlyAccessClientToken - This boolean flag indicates whether the +// token pointed to by ClientToken is a copy of the client's token +// or is a direct reference to the client's token. A value of TRUE +// indicates the client's token is directly accessed, FALSE indicates +// a copy has been made. +// +// DirectAccessEffectiveOnly - This boolean flag indicates whether the +// the disabled portions of the token that is currently directly +// referenced may be enabled. This field is only valid if the +// DirectlyAccessClientToken field is TRUE. In that case, this +// value supersedes the EffectiveOnly value in the SecurityQos +// FOR THE CURRENT TOKEN ONLY! If the client changes to impersonate +// another client, this value may change. This value is always +// minimized by the EffectiveOnly flag in the SecurityQos field. +// +// ServerIsRemote - If TRUE indicates that the server of the client's +// request is remote. This is used for determining the legitimacy +// of certain levels of impersonation and to determine how to +// track context. +// +// ClientTokenControl - If the ServerIsRemote flag is TRUE, and the +// tracking mode is DYNAMIC, then this field contains a copy of +// the TOKEN_SOURCE from the client's token to assist in deciding +// whether the information at the remote server needs to be +// updated to match the current state of the client's security +// context. +// +// +// NOTE: At some point, we may find it worthwhile to keep an array of +// elements in this data structure, where each element of the +// array contains {ClientToken, ClientTokenControl} fields. +// This would allow efficient handling of the case where a client +// thread was constantly switching between a couple different +// contexts - presumably impersonating client's of its own. +// +#define NTKERNELAPI DECLSPEC_IMPORT +#define NTHALAPI DECLSPEC_IMPORT +// +// Common dispatcher object header +// +// N.B. The size field contains the number of dwords in the structure. +// + +typedef struct _DISPATCHER_HEADER { + UCHAR Type; + UCHAR Absolute; + UCHAR Size; + UCHAR Inserted; + LONG SignalState; + LIST_ENTRY WaitListHead; +} DISPATCHER_HEADER; + +// +// Event object +// + +typedef struct _KEVENT { + DISPATCHER_HEADER Header; +} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT; + +// +// Timer object +// + +typedef struct _KTIMER { + DISPATCHER_HEADER Header; + ULARGE_INTEGER DueTime; + LIST_ENTRY TimerListEntry; + struct _KDPC *Dpc; + LONG Period; +} KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; + + +#define LOW_PRIORITY 0 // Lowest thread priority level +#define LOW_REALTIME_PRIORITY 16 // Lowest realtime priority level +#define HIGH_PRIORITY 31 // Highest thread priority level +#define MAXIMUM_PRIORITY 32 // Number of thread priority levels +// begin_winnt +#define MAXIMUM_WAIT_OBJECTS 64 // Maximum number of wait objects + +#define MAXIMUM_SUSPEND_COUNT MAXCHAR // Maximum times thread can be suspended +// end_winnt + +// +// Define system time structure. +// + +typedef struct _KSYSTEM_TIME { + ULONG LowPart; + LONG High1Time; + LONG High2Time; +} KSYSTEM_TIME, *PKSYSTEM_TIME; + +// +// Thread priority +// + +typedef LONG KPRIORITY; + +// +// Spin Lock +// + +// begin_ntndis begin_winnt + +typedef ULONG_PTR KSPIN_LOCK; +typedef KSPIN_LOCK *PKSPIN_LOCK; + +// end_ntndis end_winnt end_wdm + +// +// Define per processor lock queue structure. +// +// N.B. The lock field of the spin lock queue structure contains the address +// of the associated kernel spin lock, an owner bit, and a lock bit. Bit +// 0 of the spin lock address is the wait bit and bit 1 is the owner bit. +// The use of this field is such that the bits can be set and cleared +// noninterlocked, however, the back pointer must be preserved. +// +// The lock wait bit is set when a processor enqueues itself on the lock +// queue and it is not the only entry in the queue. The processor will +// spin on this bit waiting for the lock to be granted. +// +// The owner bit is set when the processor owns the respective lock. +// +// The next field of the spin lock queue structure is used to line the +// queued lock structures together in fifo order. It also can set set and +// cleared noninterlocked. +// + +#define LOCK_QUEUE_WAIT 1 +#define LOCK_QUEUE_OWNER 2 + +typedef enum _KSPIN_LOCK_QUEUE_NUMBER { + LockQueueDispatcherLock, + LockQueueContextSwapLock, + LockQueuePfnLock, + LockQueueSystemSpaceLock, + LockQueueVacbLock, + LockQueueMasterLock, + LockQueueNonPagedPoolLock, + LockQueueIoCancelLock, + LockQueueWorkQueueLock, + LockQueueIoVpbLock, + LockQueueIoDatabaseLock, + LockQueueIoCompletionLock, + LockQueueNtfsStructLock, + LockQueueAfdWorkQueueLock, + LockQueueBcbLock, + LockQueueMaximumLock +} KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; + +typedef struct _KSPIN_LOCK_QUEUE { + struct _KSPIN_LOCK_QUEUE * volatile Next; + PKSPIN_LOCK volatile Lock; +} KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; + +typedef struct _KLOCK_QUEUE_HANDLE { + KSPIN_LOCK_QUEUE LockQueue; + KIRQL OldIrql; +} KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; + +// begin_wdm +// +// Interrupt routine (first level dispatch) +// + +typedef +VOID +(*PKINTERRUPT_ROUTINE) ( + VOID + ); + +// +// Profile source types +// +typedef enum _KPROFILE_SOURCE { + ProfileTime, + ProfileAlignmentFixup, + ProfileTotalIssues, + ProfilePipelineDry, + ProfileLoadInstructions, + ProfilePipelineFrozen, + ProfileBranchInstructions, + ProfileTotalNonissues, + ProfileDcacheMisses, + ProfileIcacheMisses, + ProfileCacheMisses, + ProfileBranchMispredictions, + ProfileStoreInstructions, + ProfileFpInstructions, + ProfileIntegerInstructions, + Profile2Issue, + Profile3Issue, + Profile4Issue, + ProfileSpecialInstructions, + ProfileTotalCycles, + ProfileIcacheIssues, + ProfileDcacheAccesses, + ProfileMemoryBarrierCycles, + ProfileLoadLinkedIssues, + ProfileMaximum +} KPROFILE_SOURCE; + + +#ifdef _X86_ + +// +// Disable these two pragmas that evaluate to "sti" "cli" on x86 so that driver +// writers to not leave them inadvertantly in their code. +// + +#if !defined(MIDL_PASS) +#if !defined(RC_INVOKED) + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4164) // disable C4164 warning so that apps that + // build with /Od don't get weird errors ! +#ifdef _M_IX86 +#pragma function(_enable) +#pragma function(_disable) +#endif + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning(default:4164) // reenable C4164 warning +#endif + +#endif +#endif + +// +// Size of kernel mode stack. +// + +#define KERNEL_STACK_SIZE 12288 + +// +// Define size of large kernel mode stack for callbacks. +// + +#define KERNEL_LARGE_STACK_SIZE 61440 + +// +// Define number of pages to initialize in a large kernel stack. +// + +#define KERNEL_LARGE_STACK_COMMIT 12288 + +#ifdef _X86_ + +// +// Define the size of the 80387 save area, which is in the context frame. +// + +#define SIZE_OF_80387_REGISTERS 80 + +// +// The following flags control the contents of the CONTEXT structure. +// + +#if !defined(RC_INVOKED) + +#define CONTEXT_i386 0x00010000 // this assumes that i386 and +#define CONTEXT_i486 0x00010000 // i486 have identical context records + +// end_wx86 + +#define CONTEXT_CONTROL (CONTEXT_i386 | 0x00000001L) // SS:SP, CS:IP, FLAGS, BP +#define CONTEXT_INTEGER (CONTEXT_i386 | 0x00000002L) // AX, BX, CX, DX, SI, DI +#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x00000004L) // DS, ES, FS, GS +#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x00000008L) // 387 state +#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L) // DB 0-3,6,7 +#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x00000020L) // cpu specific extensions + +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER |\ + CONTEXT_SEGMENTS) + +// begin_wx86 + +#endif + +#define MAXIMUM_SUPPORTED_EXTENSION 512 + +typedef struct _FLOATING_SAVE_AREA { + ULONG ControlWord; + ULONG StatusWord; + ULONG TagWord; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; + ULONG DataSelector; + UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; + ULONG Cr0NpxState; +} FLOATING_SAVE_AREA; + +typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA; + +// +// Context Frame +// +// This frame has a several purposes: 1) it is used as an argument to +// NtContinue, 2) is is used to constuct a call frame for APC delivery, +// and 3) it is used in the user level thread creation routines. +// +// The layout of the record conforms to a standard call frame. +// + +typedef struct _CONTEXT { + + // + // The flags values within this flag control the contents of + // a CONTEXT record. + // + // If the context record is used as an input parameter, then + // for each portion of the context record controlled by a flag + // whose value is set, it is assumed that that portion of the + // context record contains valid context. If the context record + // is being used to modify a threads context, then only that + // portion of the threads context will be modified. + // + // If the context record is used as an IN OUT parameter to capture + // the context of a thread, then only those portions of the thread's + // context corresponding to set flags will be returned. + // + // The context record is never used as an OUT only parameter. + // + + ULONG ContextFlags; + + // + // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is + // set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT + // included in CONTEXT_FULL. + // + + ULONG Dr0; + ULONG Dr1; + ULONG Dr2; + ULONG Dr3; + ULONG Dr6; + ULONG Dr7; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_FLOATING_POINT. + // + + FLOATING_SAVE_AREA FloatSave; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_SEGMENTS. + // + + ULONG SegGs; + ULONG SegFs; + ULONG SegEs; + ULONG SegDs; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_INTEGER. + // + + ULONG Edi; + ULONG Esi; + ULONG Ebx; + ULONG Edx; + ULONG Ecx; + ULONG Eax; + + // + // This section is specified/returned if the + // ContextFlags word contians the flag CONTEXT_CONTROL. + // + + ULONG Ebp; + ULONG Eip; + ULONG SegCs; // MUST BE SANITIZED + ULONG EFlags; // MUST BE SANITIZED + ULONG Esp; + ULONG SegSs; + + // + // This section is specified/returned if the ContextFlags word + // contains the flag CONTEXT_EXTENDED_REGISTERS. + // The format and contexts are processor specific + // + + UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; + +} CONTEXT; + + + +typedef CONTEXT *PCONTEXT; + +// begin_ntminiport + +#endif //_X86_ + +#endif // _X86_ + +#if defined(_AMD64_) + + +#if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) + +// +// Define function to get the caller's EFLAGs value. +// + +#define GetCallersEflags() __getcallerseflags() + +unsigned __int32 +__getcallerseflags ( + VOID + ); + +#pragma intrinsic(__getcallerseflags) + +// +// Define function to read the value of the time stamp counter +// + +#define ReadTimeStampCounter() __rdtsc() + +ULONG64 +__rdtsc ( + VOID + ); + +#pragma intrinsic(__rdtsc) + +// +// Define functions to move strings or bytes, words, dwords, and qwords. +// + +VOID +__movsb ( + IN PUCHAR Destination, + IN PUCHAR Source, + IN ULONG Count + ); + +VOID +__movsw ( + IN PUSHORT Destination, + IN PUSHORT Source, + IN ULONG Count + ); + +VOID +__movsd ( + IN PULONG Destination, + IN PULONG Source, + IN ULONG Count + ); + +VOID +__movsq ( + IN PULONGLONG Destination, + IN PULONGLONG Source, + IN ULONG Count + ); + +#pragma intrinsic(__movsb) +#pragma intrinsic(__movsw) +#pragma intrinsic(__movsd) +#pragma intrinsic(__movsq) + +// +// Define functions to capture the high 64-bits of a 128-bit multiply. +// + +#define MultiplyHigh __mulh +#define UnsignedMultiplyHigh __umulh + +LONGLONG +MultiplyHigh ( + IN LONGLONG Multiplier, + IN LONGLONG Multiplicand + ); + +ULONGLONG +UnsignedMultiplyHigh ( + IN ULONGLONG Multiplier, + IN ULONGLONG Multiplicand + ); + +#pragma intrinsic(__mulh) +#pragma intrinsic(__umulh) + +// +// Define functions to read and write the uer TEB and the system PCR/PRCB. +// + +UCHAR +__readgsbyte ( + IN ULONG Offset + ); + +USHORT +__readgsword ( + IN ULONG Offset + ); + +ULONG +__readgsdword ( + IN ULONG Offset + ); + +ULONG64 +__readgsqword ( + IN ULONG Offset + ); + +VOID +__writegsbyte ( + IN ULONG Offset, + IN UCHAR Data + ); + +VOID +__writegsword ( + IN ULONG Offset, + IN USHORT Data + ); + +VOID +__writegsdword ( + IN ULONG Offset, + IN ULONG Data + ); + +VOID +__writegsqword ( + IN ULONG Offset, + IN ULONG64 Data + ); + +#pragma intrinsic(__readgsbyte) +#pragma intrinsic(__readgsword) +#pragma intrinsic(__readgsdword) +#pragma intrinsic(__readgsqword) +#pragma intrinsic(__writegsbyte) +#pragma intrinsic(__writegsword) +#pragma intrinsic(__writegsdword) +#pragma intrinsic(__writegsqword) + +#endif // defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) + +// +// Size of kernel mode stack. +// + +#define KERNEL_STACK_SIZE 0x5000 + +// +// Define size of large kernel mode stack for callbacks. +// + +#define KERNEL_LARGE_STACK_SIZE 0xf000 + +// +// Define number of pages to initialize in a large kernel stack. +// + +#define KERNEL_LARGE_STACK_COMMIT 0x5000 + +// +// Define the size of the stack used for processing an MCA exception. +// + +#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000 + +// +// The following flags control the contents of the CONTEXT structure. +// + +#if !defined(RC_INVOKED) + +#define CONTEXT_AMD64 0x100000 + +// end_wx86 + +#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L) +#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L) +#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L) +#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L) +#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L) + +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) + +// begin_wx86 + +#endif // !defined(RC_INVOKED) + +// +// Define 128-bit 16-byte aligned xmm register type. +// + +typedef struct DECLSPEC_ALIGN(16) _M128 { + ULONGLONG Low; + LONGLONG High; +} M128, *PM128; + +// +// Format of data for fnsave/frstor instructions. +// +// This structure is used to store the legacy floating point state. +// + +typedef struct _LEGACY_SAVE_AREA { + USHORT ControlWord; + USHORT Reserved0; + USHORT StatusWord; + USHORT Reserved1; + USHORT TagWord; + USHORT Reserved2; + ULONG ErrorOffset; + USHORT ErrorSelector; + USHORT ErrorOpcode; + ULONG DataOffset; + USHORT DataSelector; + USHORT Reserved3; + UCHAR FloatRegisters[8 * 10]; +} LEGACY_SAVE_AREA, *PLEGACY_SAVE_AREA; + +#define LEGACY_SAVE_AREA_LENGTH ((sizeof(LEGACY_SAVE_AREA) + 15) & ~15) + +// +// Context Frame +// +// This frame has a several purposes: 1) it is used as an argument to +// NtContinue, 2) is is used to constuct a call frame for APC delivery, +// and 3) it is used in the user level thread creation routines. +// +// +// The flags field within this record controls the contents of a CONTEXT +// record. +// +// If the context record is used as an input parameter, then for each +// portion of the context record controlled by a flag whose value is +// set, it is assumed that that portion of the context record contains +// valid context. If the context record is being used to modify a threads +// context, then only that portion of the threads context is modified. +// +// If the context record is used as an output parameter to capture the +// context of a thread, then only those portions of the thread's context +// corresponding to set flags will be returned. +// +// CONTEXT_CONTROL specifies SegSs, Rsp, SegCs, Rip, and EFlags. +// +// CONTEXT_INTEGER specifies Rax, Rcx, Rdx, Rbx, Rbp, Rsi, Rdi, and R8-R15. +// +// CONTEXT_SEGMENTS specifies SegDs, SegEs, SegFs, and SegGs. +// +// CONTEXT_DEBUG_REGISTERS specifies Dr0-Dr3 and Dr6-Dr7. +// +// CONTEXT_MMX_REGISTERS specifies the floating point and extended registers +// Mm0/St0-Mm7/St7 and Xmm0-Xmm15). +// + +typedef struct DECLSPEC_ALIGN(16) _CONTEXT { + + // + // Register parameter home addresses. + // + + ULONG64 P1Home; + ULONG64 P2Home; + ULONG64 P3Home; + ULONG64 P4Home; + ULONG64 P5Home; + ULONG64 P6Home; + + // + // Control flags. + // + + ULONG ContextFlags; + ULONG MxCsr; + + // + // Segment Registers and processor flags. + // + + USHORT SegCs; + USHORT SegDs; + USHORT SegEs; + USHORT SegFs; + USHORT SegGs; + USHORT SegSs; + ULONG EFlags; + + // + // Debug registers + // + + ULONG64 Dr0; + ULONG64 Dr1; + ULONG64 Dr2; + ULONG64 Dr3; + ULONG64 Dr6; + ULONG64 Dr7; + + // + // Integer registers. + // + + ULONG64 Rax; + ULONG64 Rcx; + ULONG64 Rdx; + ULONG64 Rbx; + ULONG64 Rsp; + ULONG64 Rbp; + ULONG64 Rsi; + ULONG64 Rdi; + ULONG64 R8; + ULONG64 R9; + ULONG64 R10; + ULONG64 R11; + ULONG64 R12; + ULONG64 R13; + ULONG64 R14; + ULONG64 R15; + + // + // Program counter. + // + + ULONG64 Rip; + + // + // MMX/floating point state. + // + + M128 Xmm0; + M128 Xmm1; + M128 Xmm2; + M128 Xmm3; + M128 Xmm4; + M128 Xmm5; + M128 Xmm6; + M128 Xmm7; + M128 Xmm8; + M128 Xmm9; + M128 Xmm10; + M128 Xmm11; + M128 Xmm12; + M128 Xmm13; + M128 Xmm14; + M128 Xmm15; + + // + // Legacy floating point state. + // + + LEGACY_SAVE_AREA FltSave; + ULONG Fill; +} CONTEXT, *PCONTEXT; + + +#endif // _AMD64_ + + +#ifdef _IA64_ + +// +// Define size of kernel mode stack. +// + +#define KERNEL_STACK_SIZE 0x8000 + +// +// Define size of large kernel mode stack for callbacks. +// + +#define KERNEL_LARGE_STACK_SIZE 0x1A000 + +// +// Define number of pages to initialize in a large kernel stack. +// + +#define KERNEL_LARGE_STACK_COMMIT 0x8000 + +// +// Define size of kernel mode backing store stack. +// + +#define KERNEL_BSTORE_SIZE 0x6000 + +// +// Define size of large kernel mode backing store for callbacks. +// + +#define KERNEL_LARGE_BSTORE_SIZE 0x10000 + +// +// Define number of pages to initialize in a large kernel backing store. +// + +#define KERNEL_LARGE_BSTORE_COMMIT 0x6000 + +// +// Define base address for kernel and user space. +// + +#define UREGION_INDEX 0 + +#define KREGION_INDEX 7 + +#define UADDRESS_BASE ((ULONGLONG)UREGION_INDEX << 61) + + +#define KADDRESS_BASE ((ULONGLONG)KREGION_INDEX << 61) + + +// +// The following flags control the contents of the CONTEXT structure. +// + +#if !defined(RC_INVOKED) + +#define CONTEXT_IA64 0x00080000 + +#define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001L) +#define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002L) +#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004L) +#define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008L) +#define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010L) +#define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020L) // Includes StIPSR + + +#define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT) +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL) + +#endif // !defined(RC_INVOKED) + +// +// Context Frame +// +// This frame has a several purposes: 1) it is used as an argument to +// NtContinue, 2) it is used to construct a call frame for APC delivery, +// 3) it is used to construct a call frame for exception dispatching +// in user mode, 4) it is used in the user level thread creation +// routines, and 5) it is used to to pass thread state to debuggers. +// +// N.B. Because this record is used as a call frame, it must be EXACTLY +// a multiple of 16 bytes in length and aligned on a 16-byte boundary. +// + +typedef struct _CONTEXT { + + // + // The flags values within this flag control the contents of + // a CONTEXT record. + // + // If the context record is used as an input parameter, then + // for each portion of the context record controlled by a flag + // whose value is set, it is assumed that that portion of the + // context record contains valid context. If the context record + // is being used to modify a thread's context, then only that + // portion of the threads context will be modified. + // + // If the context record is used as an IN OUT parameter to capture + // the context of a thread, then only those portions of the thread's + // context corresponding to set flags will be returned. + // + // The context record is never used as an OUT only parameter. + // + + ULONG ContextFlags; + ULONG Fill1[3]; // for alignment of following on 16-byte boundary + + // + // This section is specified/returned if the ContextFlags word contains + // the flag CONTEXT_DEBUG. + // + // N.B. CONTEXT_DEBUG is *not* part of CONTEXT_FULL. + // + + ULONGLONG DbI0; + ULONGLONG DbI1; + ULONGLONG DbI2; + ULONGLONG DbI3; + ULONGLONG DbI4; + ULONGLONG DbI5; + ULONGLONG DbI6; + ULONGLONG DbI7; + + ULONGLONG DbD0; + ULONGLONG DbD1; + ULONGLONG DbD2; + ULONGLONG DbD3; + ULONGLONG DbD4; + ULONGLONG DbD5; + ULONGLONG DbD6; + ULONGLONG DbD7; + + // + // This section is specified/returned if the ContextFlags word contains + // the flag CONTEXT_LOWER_FLOATING_POINT. + // + + FLOAT128 FltS0; + FLOAT128 FltS1; + FLOAT128 FltS2; + FLOAT128 FltS3; + FLOAT128 FltT0; + FLOAT128 FltT1; + FLOAT128 FltT2; + FLOAT128 FltT3; + FLOAT128 FltT4; + FLOAT128 FltT5; + FLOAT128 FltT6; + FLOAT128 FltT7; + FLOAT128 FltT8; + FLOAT128 FltT9; + + // + // This section is specified/returned if the ContextFlags word contains + // the flag CONTEXT_HIGHER_FLOATING_POINT. + // + + FLOAT128 FltS4; + FLOAT128 FltS5; + FLOAT128 FltS6; + FLOAT128 FltS7; + FLOAT128 FltS8; + FLOAT128 FltS9; + FLOAT128 FltS10; + FLOAT128 FltS11; + FLOAT128 FltS12; + FLOAT128 FltS13; + FLOAT128 FltS14; + FLOAT128 FltS15; + FLOAT128 FltS16; + FLOAT128 FltS17; + FLOAT128 FltS18; + FLOAT128 FltS19; + + FLOAT128 FltF32; + FLOAT128 FltF33; + FLOAT128 FltF34; + FLOAT128 FltF35; + FLOAT128 FltF36; + FLOAT128 FltF37; + FLOAT128 FltF38; + FLOAT128 FltF39; + + FLOAT128 FltF40; + FLOAT128 FltF41; + FLOAT128 FltF42; + FLOAT128 FltF43; + FLOAT128 FltF44; + FLOAT128 FltF45; + FLOAT128 FltF46; + FLOAT128 FltF47; + FLOAT128 FltF48; + FLOAT128 FltF49; + + FLOAT128 FltF50; + FLOAT128 FltF51; + FLOAT128 FltF52; + FLOAT128 FltF53; + FLOAT128 FltF54; + FLOAT128 FltF55; + FLOAT128 FltF56; + FLOAT128 FltF57; + FLOAT128 FltF58; + FLOAT128 FltF59; + + FLOAT128 FltF60; + FLOAT128 FltF61; + FLOAT128 FltF62; + FLOAT128 FltF63; + FLOAT128 FltF64; + FLOAT128 FltF65; + FLOAT128 FltF66; + FLOAT128 FltF67; + FLOAT128 FltF68; + FLOAT128 FltF69; + + FLOAT128 FltF70; + FLOAT128 FltF71; + FLOAT128 FltF72; + FLOAT128 FltF73; + FLOAT128 FltF74; + FLOAT128 FltF75; + FLOAT128 FltF76; + FLOAT128 FltF77; + FLOAT128 FltF78; + FLOAT128 FltF79; + + FLOAT128 FltF80; + FLOAT128 FltF81; + FLOAT128 FltF82; + FLOAT128 FltF83; + FLOAT128 FltF84; + FLOAT128 FltF85; + FLOAT128 FltF86; + FLOAT128 FltF87; + FLOAT128 FltF88; + FLOAT128 FltF89; + + FLOAT128 FltF90; + FLOAT128 FltF91; + FLOAT128 FltF92; + FLOAT128 FltF93; + FLOAT128 FltF94; + FLOAT128 FltF95; + FLOAT128 FltF96; + FLOAT128 FltF97; + FLOAT128 FltF98; + FLOAT128 FltF99; + + FLOAT128 FltF100; + FLOAT128 FltF101; + FLOAT128 FltF102; + FLOAT128 FltF103; + FLOAT128 FltF104; + FLOAT128 FltF105; + FLOAT128 FltF106; + FLOAT128 FltF107; + FLOAT128 FltF108; + FLOAT128 FltF109; + + FLOAT128 FltF110; + FLOAT128 FltF111; + FLOAT128 FltF112; + FLOAT128 FltF113; + FLOAT128 FltF114; + FLOAT128 FltF115; + FLOAT128 FltF116; + FLOAT128 FltF117; + FLOAT128 FltF118; + FLOAT128 FltF119; + + FLOAT128 FltF120; + FLOAT128 FltF121; + FLOAT128 FltF122; + FLOAT128 FltF123; + FLOAT128 FltF124; + FLOAT128 FltF125; + FLOAT128 FltF126; + FLOAT128 FltF127; + + // + // This section is specified/returned if the ContextFlags word contains + // the flag CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT | CONTEXT_CONTROL. + // + + ULONGLONG StFPSR; // FP status + + // + // This section is specified/returned if the ContextFlags word contains + // the flag CONTEXT_INTEGER. + // + // N.B. The registers gp, sp, rp are part of the control context + // + + ULONGLONG IntGp; // r1, volatile + ULONGLONG IntT0; // r2-r3, volatile + ULONGLONG IntT1; // + ULONGLONG IntS0; // r4-r7, preserved + ULONGLONG IntS1; + ULONGLONG IntS2; + ULONGLONG IntS3; + ULONGLONG IntV0; // r8, volatile + ULONGLONG IntT2; // r9-r11, volatile + ULONGLONG IntT3; + ULONGLONG IntT4; + ULONGLONG IntSp; // stack pointer (r12), special + ULONGLONG IntTeb; // teb (r13), special + ULONGLONG IntT5; // r14-r31, volatile + ULONGLONG IntT6; + ULONGLONG IntT7; + ULONGLONG IntT8; + ULONGLONG IntT9; + ULONGLONG IntT10; + ULONGLONG IntT11; + ULONGLONG IntT12; + ULONGLONG IntT13; + ULONGLONG IntT14; + ULONGLONG IntT15; + ULONGLONG IntT16; + ULONGLONG IntT17; + ULONGLONG IntT18; + ULONGLONG IntT19; + ULONGLONG IntT20; + ULONGLONG IntT21; + ULONGLONG IntT22; + + ULONGLONG IntNats; // Nat bits for r1-r31 + // r1-r31 in bits 1 thru 31. + ULONGLONG Preds; // predicates, preserved + + ULONGLONG BrRp; // return pointer, b0, preserved + ULONGLONG BrS0; // b1-b5, preserved + ULONGLONG BrS1; + ULONGLONG BrS2; + ULONGLONG BrS3; + ULONGLONG BrS4; + ULONGLONG BrT0; // b6-b7, volatile + ULONGLONG BrT1; + + // + // This section is specified/returned if the ContextFlags word contains + // the flag CONTEXT_CONTROL. + // + + // Other application registers + ULONGLONG ApUNAT; // User Nat collection register, preserved + ULONGLONG ApLC; // Loop counter register, preserved + ULONGLONG ApEC; // Epilog counter register, preserved + ULONGLONG ApCCV; // CMPXCHG value register, volatile + ULONGLONG ApDCR; // Default control register (TBD) + + // Register stack info + ULONGLONG RsPFS; // Previous function state, preserved + ULONGLONG RsBSP; // Backing store pointer, preserved + ULONGLONG RsBSPSTORE; + ULONGLONG RsRSC; // RSE configuration, volatile + ULONGLONG RsRNAT; // RSE Nat collection register, preserved + + // Trap Status Information + ULONGLONG StIPSR; // Interruption Processor Status + ULONGLONG StIIP; // Interruption IP + ULONGLONG StIFS; // Interruption Function State + + // iA32 related control registers + ULONGLONG StFCR; // copy of Ar21 + ULONGLONG Eflag; // Eflag copy of Ar24 + ULONGLONG SegCSD; // iA32 CSDescriptor (Ar25) + ULONGLONG SegSSD; // iA32 SSDescriptor (Ar26) + ULONGLONG Cflag; // Cr0+Cr4 copy of Ar27 + ULONGLONG StFSR; // x86 FP status (copy of AR28) + ULONGLONG StFIR; // x86 FP status (copy of AR29) + ULONGLONG StFDR; // x86 FP status (copy of AR30) + + ULONGLONG UNUSEDPACK; // added to pack StFDR to 16-bytes + +} CONTEXT, *PCONTEXT; + +// begin_winnt + +// +// Plabel descriptor structure definition +// + +typedef struct _PLABEL_DESCRIPTOR { + ULONGLONG EntryPoint; + ULONGLONG GlobalPointer; +} PLABEL_DESCRIPTOR, *PPLABEL_DESCRIPTOR; + +// end_winnt + +#endif // _IA64_ +// +// for move macros +// +#ifdef _MAC +#ifndef _INC_STRING +#include <string.h> +#endif /* _INC_STRING */ +#else +#include <string.h> +#endif // _MAC + + +#ifndef _SLIST_HEADER_ +#define _SLIST_HEADER_ + +#define SLIST_ENTRY SINGLE_LIST_ENTRY +#define _SLIST_ENTRY _SINGLE_LIST_ENTRY +#define PSLIST_ENTRY PSINGLE_LIST_ENTRY + +#if defined(_WIN64) + +typedef struct DECLSPEC_ALIGN(16) _SLIST_HEADER { + ULONGLONG Alignment; + ULONGLONG Region; +} SLIST_HEADER; + +typedef struct _SLIST_HEADER *PSLIST_HEADER; + +#else + +typedef union _SLIST_HEADER { + ULONGLONG Alignment; + struct { + SLIST_ENTRY Next; + USHORT Depth; + USHORT Sequence; + }; +} SLIST_HEADER, *PSLIST_HEADER; + +#endif + +#endif + +// +// If debugging support enabled, define an ASSERT macro that works. Otherwise +// define the ASSERT macro to expand to an empty expression. +// +// The ASSERT macro has been updated to be an expression instead of a statement. +// + +#if DBG +NTSYSAPI +VOID +NTAPI +RtlAssert( + PVOID FailedAssertion, + PVOID FileName, + ULONG LineNumber, + PCHAR Message + ); + +#define ASSERT( exp ) \ + ((!(exp)) ? \ + (RtlAssert( #exp, __FILE__, __LINE__, NULL ),FALSE) : \ + TRUE) + +#define ASSERTMSG( msg, exp ) \ + ((!(exp)) ? \ + (RtlAssert( #exp, __FILE__, __LINE__, msg ),FALSE) : \ + TRUE) + +#define RTL_SOFT_ASSERT(_exp) \ + ((!(_exp)) ? \ + (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #_exp),FALSE) : \ + TRUE) + +#define RTL_SOFT_ASSERTMSG(_msg, _exp) \ + ((!(_exp)) ? \ + (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #_exp, (_msg)),FALSE) : \ + TRUE) + +#define RTL_VERIFY( exp ) ASSERT(exp) +#define RTL_VERIFYMSG( msg, exp ) ASSERT(msg, exp) + +#define RTL_SOFT_VERIFY(_exp) RTL_SOFT_ASSERT(_exp) +#define RTL_SOFT_VERIFYMSG(_msg, _exp) RTL_SOFT_ASSERTMSG(_msg, _exp) + +#else +#define ASSERT( exp ) ((void) 0) +#define ASSERTMSG( msg, exp ) ((void) 0) + +#define RTL_SOFT_ASSERT(_exp) ((void) 0) +#define RTL_SOFT_ASSERTMSG(_msg, _exp) ((void) 0) + +#define RTL_VERIFY( exp ) ((exp) ? TRUE : FALSE) +#define RTL_VERIFYMSG( msg, exp ) ((exp) ? TRUE : FALSE) + +#define RTL_SOFT_VERIFY(_exp) ((_exp) ? TRUE : FALSE) +#define RTL_SOFT_VERIFYMSG(msg, _exp) ((_exp) ? TRUE : FALSE) + +#endif // DBG + +// +// Doubly-linked list manipulation routines. +// + + +// +// VOID +// InitializeListHead32( +// PLIST_ENTRY32 ListHead +// ); +// + +#define InitializeListHead32(ListHead) (\ + (ListHead)->Flink = (ListHead)->Blink = PtrToUlong((ListHead))) + +#if !defined(MIDL_PASS) && !defined(SORTPP_PASS) + + +VOID +FORCEINLINE +InitializeListHead( + IN PLIST_ENTRY ListHead + ) +{ + ListHead->Flink = ListHead->Blink = ListHead; +} + +// +// BOOLEAN +// IsListEmpty( +// PLIST_ENTRY ListHead +// ); +// + +#define IsListEmpty(ListHead) \ + ((ListHead)->Flink == (ListHead)) + + + +VOID +FORCEINLINE +RemoveEntryList( + IN PLIST_ENTRY Entry + ) +{ + PLIST_ENTRY Blink; + PLIST_ENTRY Flink; + + Flink = Entry->Flink; + Blink = Entry->Blink; + Blink->Flink = Flink; + Flink->Blink = Blink; +} + +PLIST_ENTRY +FORCEINLINE +RemoveHeadList( + IN PLIST_ENTRY ListHead + ) +{ + PLIST_ENTRY Flink; + PLIST_ENTRY Entry; + + Entry = ListHead->Flink; + Flink = Entry->Flink; + ListHead->Flink = Flink; + Flink->Blink = ListHead; + return Entry; +} + + + +PLIST_ENTRY +FORCEINLINE +RemoveTailList( + IN PLIST_ENTRY ListHead + ) +{ + PLIST_ENTRY Blink; + PLIST_ENTRY Entry; + + Entry = ListHead->Blink; + Blink = Entry->Blink; + ListHead->Blink = Blink; + Blink->Flink = ListHead; + return Entry; +} + + +VOID +FORCEINLINE +InsertTailList( + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY Entry + ) +{ + PLIST_ENTRY Blink; + + Blink = ListHead->Blink; + Entry->Flink = ListHead; + Entry->Blink = Blink; + Blink->Flink = Entry; + ListHead->Blink = Entry; +} + + +VOID +FORCEINLINE +InsertHeadList( + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY Entry + ) +{ + PLIST_ENTRY Flink; + + Flink = ListHead->Flink; + Entry->Flink = Flink; + Entry->Blink = ListHead; + Flink->Blink = Entry; + ListHead->Flink = Entry; +} + + +// +// +// PSINGLE_LIST_ENTRY +// PopEntryList( +// PSINGLE_LIST_ENTRY ListHead +// ); +// + +#define PopEntryList(ListHead) \ + (ListHead)->Next;\ + {\ + PSINGLE_LIST_ENTRY FirstEntry;\ + FirstEntry = (ListHead)->Next;\ + if (FirstEntry != NULL) { \ + (ListHead)->Next = FirstEntry->Next;\ + } \ + } + + +// +// VOID +// PushEntryList( +// PSINGLE_LIST_ENTRY ListHead, +// PSINGLE_LIST_ENTRY Entry +// ); +// + +#define PushEntryList(ListHead,Entry) \ + (Entry)->Next = (ListHead)->Next; \ + (ListHead)->Next = (Entry) + +#endif // !MIDL_PASS + + +// +// This enumerated type is used as the function return value of the function +// that is used to search the tree for a key. FoundNode indicates that the +// function found the key. Insert as left indicates that the key was not found +// and the node should be inserted as the left child of the parent. Insert as +// right indicates that the key was not found and the node should be inserted +// as the right child of the parent. +// +typedef enum _TABLE_SEARCH_RESULT{ + TableEmptyTree, + TableFoundNode, + TableInsertAsLeft, + TableInsertAsRight +} TABLE_SEARCH_RESULT; + +// +// The results of a compare can be less than, equal, or greater than. +// + +typedef enum _RTL_GENERIC_COMPARE_RESULTS { + GenericLessThan, + GenericGreaterThan, + GenericEqual +} RTL_GENERIC_COMPARE_RESULTS; + +// +// Define the Avl version of the generic table package. Note a generic table +// should really be an opaque type. We provide routines to manipulate the structure. +// +// A generic table is package for inserting, deleting, and looking up elements +// in a table (e.g., in a symbol table). To use this package the user +// defines the structure of the elements stored in the table, provides a +// comparison function, a memory allocation function, and a memory +// deallocation function. +// +// Note: the user compare function must impose a complete ordering among +// all of the elements, and the table does not allow for duplicate entries. +// + +// +// Add an empty typedef so that functions can reference the +// a pointer to the generic table struct before it is declared. +// + +struct _RTL_AVL_TABLE; + +// +// The comparison function takes as input pointers to elements containing +// user defined structures and returns the results of comparing the two +// elements. +// + +typedef +RTL_GENERIC_COMPARE_RESULTS +(NTAPI *PRTL_AVL_COMPARE_ROUTINE) ( + struct _RTL_AVL_TABLE *Table, + PVOID FirstStruct, + PVOID SecondStruct + ); + +// +// The allocation function is called by the generic table package whenever +// it needs to allocate memory for the table. +// + +typedef +PVOID +(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) ( + struct _RTL_AVL_TABLE *Table, + CLONG ByteSize + ); + +// +// The deallocation function is called by the generic table package whenever +// it needs to deallocate memory from the table that was allocated by calling +// the user supplied allocation function. +// + +typedef +VOID +(NTAPI *PRTL_AVL_FREE_ROUTINE) ( + struct _RTL_AVL_TABLE *Table, + PVOID Buffer + ); + +// +// The match function takes as input the user data to be matched and a pointer +// to some match data, which was passed along with the function pointer. It +// returns TRUE for a match and FALSE for no match. +// +// RTL_AVL_MATCH_FUNCTION returns +// STATUS_SUCCESS if the IndexRow matches +// STATUS_NO_MATCH if the IndexRow does not match, but the enumeration should +// continue +// STATUS_NO_MORE_MATCHES if the IndexRow does not match, and the enumeration +// should terminate +// + + +typedef +NTSTATUS +(NTAPI *PRTL_AVL_MATCH_FUNCTION) ( + struct _RTL_AVL_TABLE *Table, + PVOID UserData, + PVOID MatchData + ); + +// +// Define the balanced tree links and Balance field. (No Rank field +// defined at this time.) +// +// Callers should treat this structure as opaque! +// +// The root of a balanced binary tree is not a real node in the tree +// but rather points to a real node which is the root. It is always +// in the table below, and its fields are used as follows: +// +// Parent Pointer to self, to allow for detection of the root. +// LeftChild NULL +// RightChild Pointer to real root +// Balance Undefined, however it is set to a convenient value +// (depending on the algorithm) prior to rebalancing +// in insert and delete routines. +// + +typedef struct _RTL_BALANCED_LINKS { + struct _RTL_BALANCED_LINKS *Parent; + struct _RTL_BALANCED_LINKS *LeftChild; + struct _RTL_BALANCED_LINKS *RightChild; + CHAR Balance; + UCHAR Reserved[3]; +} RTL_BALANCED_LINKS; +typedef RTL_BALANCED_LINKS *PRTL_BALANCED_LINKS; + +// +// To use the generic table package the user declares a variable of type +// GENERIC_TABLE and then uses the routines described below to initialize +// the table and to manipulate the table. Note that the generic table +// should really be an opaque type. +// + +typedef struct _RTL_AVL_TABLE { + RTL_BALANCED_LINKS BalancedRoot; + PVOID OrderedPointer; + ULONG WhichOrderedElement; + ULONG NumberGenericTableElements; + ULONG DepthOfTree; + PRTL_BALANCED_LINKS RestartKey; + ULONG DeleteCount; + PRTL_AVL_COMPARE_ROUTINE CompareRoutine; + PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine; + PRTL_AVL_FREE_ROUTINE FreeRoutine; + PVOID TableContext; +} RTL_AVL_TABLE; +typedef RTL_AVL_TABLE *PRTL_AVL_TABLE; + +// +// The procedure InitializeGenericTable takes as input an uninitialized +// generic table variable and pointers to the three user supplied routines. +// This must be called for every individual generic table variable before +// it can be used. +// + +NTSYSAPI +VOID +NTAPI +RtlInitializeGenericTableAvl ( + PRTL_AVL_TABLE Table, + PRTL_AVL_COMPARE_ROUTINE CompareRoutine, + PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine, + PRTL_AVL_FREE_ROUTINE FreeRoutine, + PVOID TableContext + ); + +// +// The function InsertElementGenericTable will insert a new element +// in a table. It does this by allocating space for the new element +// (this includes AVL links), inserting the element in the table, and +// then returning to the user a pointer to the new element. If an element +// with the same key already exists in the table the return value is a pointer +// to the old element. The optional output parameter NewElement is used +// to indicate if the element previously existed in the table. Note: the user +// supplied Buffer is only used for searching the table, upon insertion its +// contents are copied to the newly created element. This means that +// pointer to the input buffer will not point to the new element. +// + +NTSYSAPI +PVOID +NTAPI +RtlInsertElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer, + CLONG BufferSize, + PBOOLEAN NewElement OPTIONAL + ); + +// +// The function InsertElementGenericTableFull will insert a new element +// in a table. It does this by allocating space for the new element +// (this includes AVL links), inserting the element in the table, and +// then returning to the user a pointer to the new element. If an element +// with the same key already exists in the table the return value is a pointer +// to the old element. The optional output parameter NewElement is used +// to indicate if the element previously existed in the table. Note: the user +// supplied Buffer is only used for searching the table, upon insertion its +// contents are copied to the newly created element. This means that +// pointer to the input buffer will not point to the new element. +// This routine is passed the NodeOrParent and SearchResult from a +// previous RtlLookupElementGenericTableFull. +// + +NTSYSAPI +PVOID +NTAPI +RtlInsertElementGenericTableFullAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer, + CLONG BufferSize, + PBOOLEAN NewElement OPTIONAL, + PVOID NodeOrParent, + TABLE_SEARCH_RESULT SearchResult + ); + +// +// The function DeleteElementGenericTable will find and delete an element +// from a generic table. If the element is located and deleted the return +// value is TRUE, otherwise if the element is not located the return value +// is FALSE. The user supplied input buffer is only used as a key in +// locating the element in the table. +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlDeleteElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer + ); + +// +// The function LookupElementGenericTable will find an element in a generic +// table. If the element is located the return value is a pointer to +// the user defined structure associated with the element, otherwise if +// the element is not located the return value is NULL. The user supplied +// input buffer is only used as a key in locating the element in the table. +// + +NTSYSAPI +PVOID +NTAPI +RtlLookupElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer + ); + +// +// The function LookupElementGenericTableFull will find an element in a generic +// table. If the element is located the return value is a pointer to +// the user defined structure associated with the element. If the element is not +// located then a pointer to the parent for the insert location is returned. The +// user must look at the SearchResult value to determine which is being returned. +// The user can use the SearchResult and parent for a subsequent FullInsertElement +// call to optimize the insert. +// + +NTSYSAPI +PVOID +NTAPI +RtlLookupElementGenericTableFullAvl ( + PRTL_AVL_TABLE Table, + PVOID Buffer, + OUT PVOID *NodeOrParent, + OUT TABLE_SEARCH_RESULT *SearchResult + ); + +// +// The function EnumerateGenericTable will return to the caller one-by-one +// the elements of of a table. The return value is a pointer to the user +// defined structure associated with the element. The input parameter +// Restart indicates if the enumeration should start from the beginning +// or should return the next element. If the are no more new elements to +// return the return value is NULL. As an example of its use, to enumerate +// all of the elements in a table the user would write: +// +// for (ptr = EnumerateGenericTable(Table, TRUE); +// ptr != NULL; +// ptr = EnumerateGenericTable(Table, FALSE)) { +// : +// } +// +// NOTE: This routine does not modify the structure of the tree, but saves +// the last node returned in the generic table itself, and for this +// reason requires exclusive access to the table for the duration of +// the enumeration. +// + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTableAvl ( + PRTL_AVL_TABLE Table, + BOOLEAN Restart + ); + +// +// The function EnumerateGenericTableWithoutSplaying will return to the +// caller one-by-one the elements of of a table. The return value is a +// pointer to the user defined structure associated with the element. +// The input parameter RestartKey indicates if the enumeration should +// start from the beginning or should return the next element. If the +// are no more new elements to return the return value is NULL. As an +// example of its use, to enumerate all of the elements in a table the +// user would write: +// +// RestartKey = NULL; +// for (ptr = EnumerateGenericTableWithoutSplaying(Table, &RestartKey); +// ptr != NULL; +// ptr = EnumerateGenericTableWithoutSplaying(Table, &RestartKey)) { +// : +// } +// +// If RestartKey is NULL, the package will start from the least entry in the +// table, otherwise it will start from the last entry returned. +// +// NOTE: This routine does not modify either the structure of the tree +// or the generic table itself, but must insure that no deletes +// occur for the duration of the enumeration, typically by having +// at least shared access to the table for the duration. +// + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTableWithoutSplayingAvl ( + PRTL_AVL_TABLE Table, + PVOID *RestartKey + ); + +// +// The function EnumerateGenericTableLikeADirectory will return to the +// caller one-by-one the elements of of a table. The return value is a +// pointer to the user defined structure associated with the element. +// The input parameter RestartKey indicates if the enumeration should +// start from the beginning or should return the next element. If the +// are no more new elements to return the return value is NULL. As an +// example of its use, to enumerate all of the elements in a table the +// user would write: +// +// RestartKey = NULL; +// for (ptr = EnumerateGenericTableLikeADirectory(Table, &RestartKey, ...); +// ptr != NULL; +// ptr = EnumerateGenericTableLikeADirectory(Table, &RestartKey, ...)) { +// : +// } +// +// If RestartKey is NULL, the package will start from the least entry in the +// table, otherwise it will start from the last entry returned. +// +// NOTE: This routine does not modify either the structure of the tree +// or the generic table itself. The table must only be acquired +// shared for the duration of this call, and all synchronization +// may optionally be dropped between calls. Enumeration is always +// correctly resumed in the most efficient manner possible via the +// IN OUT parameters provided. +// +// ****** Explain NextFlag. Directory enumeration resumes from a key +// requires more thought. Also need the match pattern and IgnoreCase. +// Should some structure be introduced to carry it all? +// + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTableLikeADirectory ( + IN PRTL_AVL_TABLE Table, + IN PRTL_AVL_MATCH_FUNCTION MatchFunction, + IN PVOID MatchData, + IN ULONG NextFlag, + IN OUT PVOID *RestartKey, + IN OUT PULONG DeleteCount, + IN OUT PVOID Buffer + ); + +// +// The function GetElementGenericTable will return the i'th element +// inserted in the generic table. I = 0 implies the first element, +// I = (RtlNumberGenericTableElements(Table)-1) will return the last element +// inserted into the generic table. The type of I is ULONG. Values +// of I > than (NumberGenericTableElements(Table)-1) will return NULL. If +// an arbitrary element is deleted from the generic table it will cause +// all elements inserted after the deleted element to "move up". + +NTSYSAPI +PVOID +NTAPI +RtlGetElementGenericTableAvl ( + PRTL_AVL_TABLE Table, + ULONG I + ); + +// +// The function NumberGenericTableElements returns a ULONG value +// which is the number of generic table elements currently inserted +// in the generic table. + +NTSYSAPI +ULONG +NTAPI +RtlNumberGenericTableElementsAvl ( + PRTL_AVL_TABLE Table + ); + +// +// The function IsGenericTableEmpty will return to the caller TRUE if +// the input table is empty (i.e., does not contain any elements) and +// FALSE otherwise. +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsGenericTableEmptyAvl ( + PRTL_AVL_TABLE Table + ); + +// +// As an aid to allowing existing generic table users to do (in most +// cases) a single-line edit to switch over to Avl table use, we +// have the following defines and inline routine definitions which +// redirect calls and types. Note that the type override (performed +// by #define below) will not work in the unexpected event that someone +// has used a pointer or type specifier in their own #define, since +// #define processing is one pass and does not nest. The __inline +// declarations below do not have this limitation, however. +// +// To switch to using Avl tables, add the following line before your +// includes: +// +// #define RTL_USE_AVL_TABLES 0 +// + +#ifdef RTL_USE_AVL_TABLES + +#undef PRTL_GENERIC_COMPARE_ROUTINE +#undef PRTL_GENERIC_ALLOCATE_ROUTINE +#undef PRTL_GENERIC_FREE_ROUTINE +#undef RTL_GENERIC_TABLE +#undef PRTL_GENERIC_TABLE + +#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE +#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE +#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE +#define RTL_GENERIC_TABLE RTL_AVL_TABLE +#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE + +#define RtlInitializeGenericTable RtlInitializeGenericTableAvl +#define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl +#define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl +#define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl +#define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl +#define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl +#define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl +#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl +#define RtlGetElementGenericTable RtlGetElementGenericTableAvl +#define RtlNumberGenericTableElement RtlNumberGenericTableElementAvl +#define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl + +#endif // RTL_USE_AVL_TABLES + + +// +// Define the splay links and the associated manipuliation macros and +// routines. Note that the splay_links should be an opaque type. +// Routine are provided to traverse and manipulate the structure. +// + +typedef struct _RTL_SPLAY_LINKS { + struct _RTL_SPLAY_LINKS *Parent; + struct _RTL_SPLAY_LINKS *LeftChild; + struct _RTL_SPLAY_LINKS *RightChild; +} RTL_SPLAY_LINKS; +typedef RTL_SPLAY_LINKS *PRTL_SPLAY_LINKS; + +// +// The macro procedure InitializeSplayLinks takes as input a pointer to +// splay link and initializes its substructure. All splay link nodes must +// be initialized before they are used in the different splay routines and +// macros. +// +// VOID +// RtlInitializeSplayLinks ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlInitializeSplayLinks(Links) { \ + PRTL_SPLAY_LINKS _SplayLinks; \ + _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \ + _SplayLinks->Parent = _SplayLinks; \ + _SplayLinks->LeftChild = NULL; \ + _SplayLinks->RightChild = NULL; \ + } + +// +// The macro function Parent takes as input a pointer to a splay link in a +// tree and returns a pointer to the splay link of the parent of the input +// node. If the input node is the root of the tree the return value is +// equal to the input value. +// +// PRTL_SPLAY_LINKS +// RtlParent ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlParent(Links) ( \ + (PRTL_SPLAY_LINKS)(Links)->Parent \ + ) + +// +// The macro function LeftChild takes as input a pointer to a splay link in +// a tree and returns a pointer to the splay link of the left child of the +// input node. If the left child does not exist, the return value is NULL. +// +// PRTL_SPLAY_LINKS +// RtlLeftChild ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlLeftChild(Links) ( \ + (PRTL_SPLAY_LINKS)(Links)->LeftChild \ + ) + +// +// The macro function RightChild takes as input a pointer to a splay link +// in a tree and returns a pointer to the splay link of the right child of +// the input node. If the right child does not exist, the return value is +// NULL. +// +// PRTL_SPLAY_LINKS +// RtlRightChild ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlRightChild(Links) ( \ + (PRTL_SPLAY_LINKS)(Links)->RightChild \ + ) + +// +// The macro function IsRoot takes as input a pointer to a splay link +// in a tree and returns TRUE if the input node is the root of the tree, +// otherwise it returns FALSE. +// +// BOOLEAN +// RtlIsRoot ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlIsRoot(Links) ( \ + (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links)) \ + ) + +// +// The macro function IsLeftChild takes as input a pointer to a splay link +// in a tree and returns TRUE if the input node is the left child of its +// parent, otherwise it returns FALSE. +// +// BOOLEAN +// RtlIsLeftChild ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlIsLeftChild(Links) ( \ + (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) \ + ) + +// +// The macro function IsRightChild takes as input a pointer to a splay link +// in a tree and returns TRUE if the input node is the right child of its +// parent, otherwise it returns FALSE. +// +// BOOLEAN +// RtlIsRightChild ( +// PRTL_SPLAY_LINKS Links +// ); +// + +#define RtlIsRightChild(Links) ( \ + (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links)) \ + ) + +// +// The macro procedure InsertAsLeftChild takes as input a pointer to a splay +// link in a tree and a pointer to a node not in a tree. It inserts the +// second node as the left child of the first node. The first node must not +// already have a left child, and the second node must not already have a +// parent. +// +// VOID +// RtlInsertAsLeftChild ( +// PRTL_SPLAY_LINKS ParentLinks, +// PRTL_SPLAY_LINKS ChildLinks +// ); +// + +#define RtlInsertAsLeftChild(ParentLinks,ChildLinks) { \ + PRTL_SPLAY_LINKS _SplayParent; \ + PRTL_SPLAY_LINKS _SplayChild; \ + _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ + _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ + _SplayParent->LeftChild = _SplayChild; \ + _SplayChild->Parent = _SplayParent; \ + } + +// +// The macro procedure InsertAsRightChild takes as input a pointer to a splay +// link in a tree and a pointer to a node not in a tree. It inserts the +// second node as the right child of the first node. The first node must not +// already have a right child, and the second node must not already have a +// parent. +// +// VOID +// RtlInsertAsRightChild ( +// PRTL_SPLAY_LINKS ParentLinks, +// PRTL_SPLAY_LINKS ChildLinks +// ); +// + +#define RtlInsertAsRightChild(ParentLinks,ChildLinks) { \ + PRTL_SPLAY_LINKS _SplayParent; \ + PRTL_SPLAY_LINKS _SplayChild; \ + _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \ + _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \ + _SplayParent->RightChild = _SplayChild; \ + _SplayChild->Parent = _SplayParent; \ + } + +// +// The Splay function takes as input a pointer to a splay link in a tree +// and splays the tree. Its function return value is a pointer to the +// root of the splayed tree. +// + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlSplay ( + PRTL_SPLAY_LINKS Links + ); + +// +// The Delete function takes as input a pointer to a splay link in a tree +// and deletes that node from the tree. Its function return value is a +// pointer to the root of the tree. If the tree is now empty, the return +// value is NULL. +// + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlDelete ( + PRTL_SPLAY_LINKS Links + ); + +// +// The DeleteNoSplay function takes as input a pointer to a splay link in a tree, +// the caller's pointer to the root of the tree and deletes that node from the +// tree. Upon return the caller's pointer to the root node will correctly point +// at the root of the tree. +// +// It operationally differs from RtlDelete only in that it will not splay the tree. +// + +NTSYSAPI +VOID +NTAPI +RtlDeleteNoSplay ( + PRTL_SPLAY_LINKS Links, + PRTL_SPLAY_LINKS *Root + ); + +// +// The SubtreeSuccessor function takes as input a pointer to a splay link +// in a tree and returns a pointer to the successor of the input node of +// the substree rooted at the input node. If there is not a successor, the +// return value is NULL. +// + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlSubtreeSuccessor ( + PRTL_SPLAY_LINKS Links + ); + +// +// The SubtreePredecessor function takes as input a pointer to a splay link +// in a tree and returns a pointer to the predecessor of the input node of +// the substree rooted at the input node. If there is not a predecessor, +// the return value is NULL. +// + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlSubtreePredecessor ( + PRTL_SPLAY_LINKS Links + ); + +// +// The RealSuccessor function takes as input a pointer to a splay link +// in a tree and returns a pointer to the successor of the input node within +// the entire tree. If there is not a successor, the return value is NULL. +// + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlRealSuccessor ( + PRTL_SPLAY_LINKS Links + ); + +// +// The RealPredecessor function takes as input a pointer to a splay link +// in a tree and returns a pointer to the predecessor of the input node +// within the entire tree. If there is not a predecessor, the return value +// is NULL. +// + +NTSYSAPI +PRTL_SPLAY_LINKS +NTAPI +RtlRealPredecessor ( + PRTL_SPLAY_LINKS Links + ); + + +// +// Define the generic table package. Note a generic table should really +// be an opaque type. We provide routines to manipulate the structure. +// +// A generic table is package for inserting, deleting, and looking up elements +// in a table (e.g., in a symbol table). To use this package the user +// defines the structure of the elements stored in the table, provides a +// comparison function, a memory allocation function, and a memory +// deallocation function. +// +// Note: the user compare function must impose a complete ordering among +// all of the elements, and the table does not allow for duplicate entries. +// + +// +// Do not do the following defines if using Avl +// + +#ifndef RTL_USE_AVL_TABLES + +// +// Add an empty typedef so that functions can reference the +// a pointer to the generic table struct before it is declared. +// + +struct _RTL_GENERIC_TABLE; + +// +// The comparison function takes as input pointers to elements containing +// user defined structures and returns the results of comparing the two +// elements. +// + +typedef +RTL_GENERIC_COMPARE_RESULTS +(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + PVOID FirstStruct, + PVOID SecondStruct + ); + +// +// The allocation function is called by the generic table package whenever +// it needs to allocate memory for the table. +// + +typedef +PVOID +(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + CLONG ByteSize + ); + +// +// The deallocation function is called by the generic table package whenever +// it needs to deallocate memory from the table that was allocated by calling +// the user supplied allocation function. +// + +typedef +VOID +(NTAPI *PRTL_GENERIC_FREE_ROUTINE) ( + struct _RTL_GENERIC_TABLE *Table, + PVOID Buffer + ); + +// +// To use the generic table package the user declares a variable of type +// GENERIC_TABLE and then uses the routines described below to initialize +// the table and to manipulate the table. Note that the generic table +// should really be an opaque type. +// + +typedef struct _RTL_GENERIC_TABLE { + PRTL_SPLAY_LINKS TableRoot; + LIST_ENTRY InsertOrderList; + PLIST_ENTRY OrderedPointer; + ULONG WhichOrderedElement; + ULONG NumberGenericTableElements; + PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine; + PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine; + PRTL_GENERIC_FREE_ROUTINE FreeRoutine; + PVOID TableContext; +} RTL_GENERIC_TABLE; +typedef RTL_GENERIC_TABLE *PRTL_GENERIC_TABLE; + +// +// The procedure InitializeGenericTable takes as input an uninitialized +// generic table variable and pointers to the three user supplied routines. +// This must be called for every individual generic table variable before +// it can be used. +// + +NTSYSAPI +VOID +NTAPI +RtlInitializeGenericTable ( + PRTL_GENERIC_TABLE Table, + PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine, + PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine, + PRTL_GENERIC_FREE_ROUTINE FreeRoutine, + PVOID TableContext + ); + +// +// The function InsertElementGenericTable will insert a new element +// in a table. It does this by allocating space for the new element +// (this includes splay links), inserting the element in the table, and +// then returning to the user a pointer to the new element. If an element +// with the same key already exists in the table the return value is a pointer +// to the old element. The optional output parameter NewElement is used +// to indicate if the element previously existed in the table. Note: the user +// supplied Buffer is only used for searching the table, upon insertion its +// contents are copied to the newly created element. This means that +// pointer to the input buffer will not point to the new element. +// + +NTSYSAPI +PVOID +NTAPI +RtlInsertElementGenericTable ( + PRTL_GENERIC_TABLE Table, + PVOID Buffer, + CLONG BufferSize, + PBOOLEAN NewElement OPTIONAL + ); + +// +// The function InsertElementGenericTableFull will insert a new element +// in a table. It does this by allocating space for the new element +// (this includes splay links), inserting the element in the table, and +// then returning to the user a pointer to the new element. If an element +// with the same key already exists in the table the return value is a pointer +// to the old element. The optional output parameter NewElement is used +// to indicate if the element previously existed in the table. Note: the user +// supplied Buffer is only used for searching the table, upon insertion its +// contents are copied to the newly created element. This means that +// pointer to the input buffer will not point to the new element. +// This routine is passed the NodeOrParent and SearchResult from a +// previous RtlLookupElementGenericTableFull. +// + +NTSYSAPI +PVOID +NTAPI +RtlInsertElementGenericTableFull ( + PRTL_GENERIC_TABLE Table, + PVOID Buffer, + CLONG BufferSize, + PBOOLEAN NewElement OPTIONAL, + PVOID NodeOrParent, + TABLE_SEARCH_RESULT SearchResult + ); + +// +// The function DeleteElementGenericTable will find and delete an element +// from a generic table. If the element is located and deleted the return +// value is TRUE, otherwise if the element is not located the return value +// is FALSE. The user supplied input buffer is only used as a key in +// locating the element in the table. +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlDeleteElementGenericTable ( + PRTL_GENERIC_TABLE Table, + PVOID Buffer + ); + +// +// The function LookupElementGenericTable will find an element in a generic +// table. If the element is located the return value is a pointer to +// the user defined structure associated with the element, otherwise if +// the element is not located the return value is NULL. The user supplied +// input buffer is only used as a key in locating the element in the table. +// + +NTSYSAPI +PVOID +NTAPI +RtlLookupElementGenericTable ( + PRTL_GENERIC_TABLE Table, + PVOID Buffer + ); + +// +// The function LookupElementGenericTableFull will find an element in a generic +// table. If the element is located the return value is a pointer to +// the user defined structure associated with the element. If the element is not +// located then a pointer to the parent for the insert location is returned. The +// user must look at the SearchResult value to determine which is being returned. +// The user can use the SearchResult and parent for a subsequent FullInsertElement +// call to optimize the insert. +// + +NTSYSAPI +PVOID +NTAPI +RtlLookupElementGenericTableFull ( + PRTL_GENERIC_TABLE Table, + PVOID Buffer, + OUT PVOID *NodeOrParent, + OUT TABLE_SEARCH_RESULT *SearchResult + ); + +// +// The function EnumerateGenericTable will return to the caller one-by-one +// the elements of of a table. The return value is a pointer to the user +// defined structure associated with the element. The input parameter +// Restart indicates if the enumeration should start from the beginning +// or should return the next element. If the are no more new elements to +// return the return value is NULL. As an example of its use, to enumerate +// all of the elements in a table the user would write: +// +// for (ptr = EnumerateGenericTable(Table, TRUE); +// ptr != NULL; +// ptr = EnumerateGenericTable(Table, FALSE)) { +// : +// } +// +// +// PLEASE NOTE: +// +// If you enumerate a GenericTable using RtlEnumerateGenericTable, you +// will flatten the table, turning it into a sorted linked list. +// To enumerate the table without perturbing the splay links, use +// RtlEnumerateGenericTableWithoutSplaying + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTable ( + PRTL_GENERIC_TABLE Table, + BOOLEAN Restart + ); + +// +// The function EnumerateGenericTableWithoutSplaying will return to the +// caller one-by-one the elements of of a table. The return value is a +// pointer to the user defined structure associated with the element. +// The input parameter RestartKey indicates if the enumeration should +// start from the beginning or should return the next element. If the +// are no more new elements to return the return value is NULL. As an +// example of its use, to enumerate all of the elements in a table the +// user would write: +// +// RestartKey = NULL; +// for (ptr = EnumerateGenericTableWithoutSplaying(Table, &RestartKey); +// ptr != NULL; +// ptr = EnumerateGenericTableWithoutSplaying(Table, &RestartKey)) { +// : +// } +// +// If RestartKey is NULL, the package will start from the least entry in the +// table, otherwise it will start from the last entry returned. +// +// +// Note that unlike RtlEnumerateGenericTable, this routine will NOT perturb +// the splay order of the tree. +// + +NTSYSAPI +PVOID +NTAPI +RtlEnumerateGenericTableWithoutSplaying ( + PRTL_GENERIC_TABLE Table, + PVOID *RestartKey + ); + +// +// The function GetElementGenericTable will return the i'th element +// inserted in the generic table. I = 0 implies the first element, +// I = (RtlNumberGenericTableElements(Table)-1) will return the last element +// inserted into the generic table. The type of I is ULONG. Values +// of I > than (NumberGenericTableElements(Table)-1) will return NULL. If +// an arbitrary element is deleted from the generic table it will cause +// all elements inserted after the deleted element to "move up". + +NTSYSAPI +PVOID +NTAPI +RtlGetElementGenericTable( + PRTL_GENERIC_TABLE Table, + ULONG I + ); + +// +// The function NumberGenericTableElements returns a ULONG value +// which is the number of generic table elements currently inserted +// in the generic table. + +NTSYSAPI +ULONG +NTAPI +RtlNumberGenericTableElements( + PRTL_GENERIC_TABLE Table + ); + +// +// The function IsGenericTableEmpty will return to the caller TRUE if +// the input table is empty (i.e., does not contain any elements) and +// FALSE otherwise. +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsGenericTableEmpty ( + PRTL_GENERIC_TABLE Table + ); + +#endif // RTL_USE_AVL_TABLES + + +typedef NTSTATUS +(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)( + IN PVOID Base, + IN OUT PVOID *CommitAddress, + IN OUT PSIZE_T CommitSize + ); + +typedef struct _RTL_HEAP_PARAMETERS { + ULONG Length; + SIZE_T SegmentReserve; + SIZE_T SegmentCommit; + SIZE_T DeCommitFreeBlockThreshold; + SIZE_T DeCommitTotalFreeThreshold; + SIZE_T MaximumAllocationSize; + SIZE_T VirtualMemoryThreshold; + SIZE_T InitialCommit; + SIZE_T InitialReserve; + PRTL_HEAP_COMMIT_ROUTINE CommitRoutine; + SIZE_T Reserved[ 2 ]; +} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS; + +NTSYSAPI +PVOID +NTAPI +RtlCreateHeap( + IN ULONG Flags, + IN PVOID HeapBase OPTIONAL, + IN SIZE_T ReserveSize OPTIONAL, + IN SIZE_T CommitSize OPTIONAL, + IN PVOID Lock OPTIONAL, + IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL + ); + +#define HEAP_NO_SERIALIZE 0x00000001 // winnt +#define HEAP_GROWABLE 0x00000002 // winnt +#define HEAP_GENERATE_EXCEPTIONS 0x00000004 // winnt +#define HEAP_ZERO_MEMORY 0x00000008 // winnt +#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010 // winnt +#define HEAP_TAIL_CHECKING_ENABLED 0x00000020 // winnt +#define HEAP_FREE_CHECKING_ENABLED 0x00000040 // winnt +#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080 // winnt + +#define HEAP_CREATE_ALIGN_16 0x00010000 // winnt Create heap with 16 byte alignment (obsolete) +#define HEAP_CREATE_ENABLE_TRACING 0x00020000 // winnt Create heap call tracing enabled (obsolete) + +#define HEAP_SETTABLE_USER_VALUE 0x00000100 +#define HEAP_SETTABLE_USER_FLAG1 0x00000200 +#define HEAP_SETTABLE_USER_FLAG2 0x00000400 +#define HEAP_SETTABLE_USER_FLAG3 0x00000800 +#define HEAP_SETTABLE_USER_FLAGS 0x00000E00 + +#define HEAP_CLASS_0 0x00000000 // process heap +#define HEAP_CLASS_1 0x00001000 // private heap +#define HEAP_CLASS_2 0x00002000 // Kernel Heap +#define HEAP_CLASS_3 0x00003000 // GDI heap +#define HEAP_CLASS_4 0x00004000 // User heap +#define HEAP_CLASS_5 0x00005000 // Console heap +#define HEAP_CLASS_6 0x00006000 // User Desktop heap +#define HEAP_CLASS_7 0x00007000 // Csrss Shared heap +#define HEAP_CLASS_8 0x00008000 // Csr Port heap +#define HEAP_CLASS_MASK 0x0000F000 + +#define HEAP_MAXIMUM_TAG 0x0FFF // winnt +#define HEAP_GLOBAL_TAG 0x0800 +#define HEAP_PSEUDO_TAG_FLAG 0x8000 // winnt +#define HEAP_TAG_SHIFT 18 // winnt +#define HEAP_MAKE_TAG_FLAGS( b, o ) ((ULONG)((b) + ((o) << 18))) // winnt +#define HEAP_TAG_MASK (HEAP_MAXIMUM_TAG << HEAP_TAG_SHIFT) + +#define HEAP_CREATE_VALID_MASK (HEAP_NO_SERIALIZE | \ + HEAP_GROWABLE | \ + HEAP_GENERATE_EXCEPTIONS | \ + HEAP_ZERO_MEMORY | \ + HEAP_REALLOC_IN_PLACE_ONLY | \ + HEAP_TAIL_CHECKING_ENABLED | \ + HEAP_FREE_CHECKING_ENABLED | \ + HEAP_DISABLE_COALESCE_ON_FREE | \ + HEAP_CLASS_MASK | \ + HEAP_CREATE_ALIGN_16 | \ + HEAP_CREATE_ENABLE_TRACING) + +NTSYSAPI +PVOID +NTAPI +RtlDestroyHeap( + IN PVOID HeapHandle + ); + +NTSYSAPI +PVOID +NTAPI +RtlAllocateHeap( + IN PVOID HeapHandle, + IN ULONG Flags, + IN SIZE_T Size + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlFreeHeap( + IN PVOID HeapHandle, + IN ULONG Flags, + IN PVOID BaseAddress + ); + + +#if defined (_MSC_VER) && ( _MSC_VER >= 900 ) + +PVOID +_ReturnAddress ( + VOID + ); + +#pragma intrinsic(_ReturnAddress) + +#endif + +#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) + +#define RtlGetCallersAddress(CallersAddress, CallersCaller) \ + *CallersAddress = (PVOID)_ReturnAddress(); \ + *CallersCaller = NULL; + +#else + +NTSYSAPI +VOID +NTAPI +RtlGetCallersAddress( + OUT PVOID *CallersAddress, + OUT PVOID *CallersCaller + ); + +#endif + +NTSYSAPI +ULONG +NTAPI +RtlWalkFrameChain ( + OUT PVOID *Callers, + IN ULONG Count, + IN ULONG Flags + ); + + +typedef NTSTATUS (NTAPI * PRTL_QUERY_REGISTRY_ROUTINE)( + IN PWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength, + IN PVOID Context, + IN PVOID EntryContext + ); + +typedef struct _RTL_QUERY_REGISTRY_TABLE { + PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; + ULONG Flags; + PWSTR Name; + PVOID EntryContext; + ULONG DefaultType; + PVOID DefaultData; + ULONG DefaultLength; + +} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; + + +// +// The following flags specify how the Name field of a RTL_QUERY_REGISTRY_TABLE +// entry is interpreted. A NULL name indicates the end of the table. +// + +#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 // Name is a subkey and remainder of + // table or until next subkey are value + // names for that subkey to look at. + +#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 // Reset current key to original key for + // this and all following table entries. + +#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 // Fail if no match found for this table + // entry. + +#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 // Used to mark a table entry that has no + // value name, just wants a call out, not + // an enumeration of all values. + +#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 // Used to suppress the expansion of + // REG_MULTI_SZ into multiple callouts or + // to prevent the expansion of environment + // variable values in REG_EXPAND_SZ + +#define RTL_QUERY_REGISTRY_DIRECT 0x00000020 // QueryRoutine field ignored. EntryContext + // field points to location to store value. + // For null terminated strings, EntryContext + // points to UNICODE_STRING structure that + // that describes maximum size of buffer. + // If .Buffer field is NULL then a buffer is + // allocated. + // + +#define RTL_QUERY_REGISTRY_DELETE 0x00000040 // Used to delete value keys after they + // are queried. + +NTSYSAPI +NTSTATUS +NTAPI +RtlQueryRegistryValues( + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PRTL_QUERY_REGISTRY_TABLE QueryTable, + IN PVOID Context, + IN PVOID Environment OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlWriteRegistryValue( + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PCWSTR ValueName, + IN ULONG ValueType, + IN PVOID ValueData, + IN ULONG ValueLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDeleteRegistryValue( + IN ULONG RelativeTo, + IN PCWSTR Path, + IN PCWSTR ValueName + ); + +// end_wdm + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateRegistryKey( + IN ULONG RelativeTo, + IN PWSTR Path + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCheckRegistryKey( + IN ULONG RelativeTo, + IN PWSTR Path + ); + +// begin_wdm +// +// The following values for the RelativeTo parameter determine what the +// Path parameter to RtlQueryRegistryValues is relative to. +// + +#define RTL_REGISTRY_ABSOLUTE 0 // Path is a full path +#define RTL_REGISTRY_SERVICES 1 // \Registry\Machine\System\CurrentControlSet\Services +#define RTL_REGISTRY_CONTROL 2 // \Registry\Machine\System\CurrentControlSet\Control +#define RTL_REGISTRY_WINDOWS_NT 3 // \Registry\Machine\Software\Microsoft\Windows NT\CurrentVersion +#define RTL_REGISTRY_DEVICEMAP 4 // \Registry\Machine\Hardware\DeviceMap +#define RTL_REGISTRY_USER 5 // \Registry\User\CurrentUser +#define RTL_REGISTRY_MAXIMUM 6 +#define RTL_REGISTRY_HANDLE 0x40000000 // Low order bits are registry handle +#define RTL_REGISTRY_OPTIONAL 0x80000000 // Indicates the key node is optional + +NTSYSAPI +ULONG +NTAPI +RtlRandom ( + PULONG Seed + ); +NTSYSAPI +ULONG +NTAPI +RtlRandomEx ( + PULONG Seed + ); +NTSYSAPI +NTSTATUS +NTAPI +RtlCharToInteger ( + PCSZ String, + ULONG Base, + PULONG Value + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlIntegerToUnicodeString ( + ULONG Value, + ULONG Base, + PUNICODE_STRING String + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlInt64ToUnicodeString ( + IN ULONGLONG Value, + IN ULONG Base OPTIONAL, + IN OUT PUNICODE_STRING String + ); + +#ifdef _WIN64 +#define RtlIntPtrToUnicodeString(Value, Base, String) RtlInt64ToUnicodeString(Value, Base, String) +#else +#define RtlIntPtrToUnicodeString(Value, Base, String) RtlIntegerToUnicodeString(Value, Base, String) +#endif + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToInteger ( + PCUNICODE_STRING String, + ULONG Base, + PULONG Value + ); + + +// +// String manipulation routines +// + +#ifdef _NTSYSTEM_ + +#define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag +#define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag + +#else + +#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) +#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) + +#endif // _NTSYSTEM_ + +extern BOOLEAN NLS_MB_CODE_PAGE_TAG; // TRUE -> Multibyte CP, FALSE -> Singlebyte +extern BOOLEAN NLS_MB_OEM_CODE_PAGE_TAG; // TRUE -> Multibyte CP, FALSE -> Singlebyte + +NTSYSAPI +VOID +NTAPI +RtlInitString( + PSTRING DestinationString, + PCSZ SourceString + ); + +NTSYSAPI +VOID +NTAPI +RtlInitAnsiString( + PANSI_STRING DestinationString, + PCSZ SourceString + ); + +NTSYSAPI +VOID +NTAPI +RtlInitUnicodeString( + PUNICODE_STRING DestinationString, + PCWSTR SourceString + ); + +#define RtlInitEmptyUnicodeString(_ucStr,_buf,_bufSize) \ + ((_ucStr)->Buffer = (_buf), \ + (_ucStr)->Length = 0, \ + (_ucStr)->MaximumLength = (USHORT)(_bufSize)) + +// end_ntddk end_wdm + +NTSYSAPI +NTSTATUS +NTAPI +RtlInitUnicodeStringEx( + PUNICODE_STRING DestinationString, + PCWSTR SourceString + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlCreateUnicodeString( + OUT PUNICODE_STRING DestinationString, + IN PCWSTR SourceString + ); + + +NTSYSAPI +VOID +NTAPI +RtlCopyString( + PSTRING DestinationString, + const STRING * SourceString + ); + +NTSYSAPI +CHAR +NTAPI +RtlUpperChar ( + CHAR Character + ); + +NTSYSAPI +LONG +NTAPI +RtlCompareString( + const STRING * String1, + const STRING * String2, + BOOLEAN CaseInSensitive + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualString( + const STRING * String1, + const STRING * String2, + BOOLEAN CaseInSensitive + ); + + +NTSYSAPI +VOID +NTAPI +RtlUpperString( + PSTRING DestinationString, + const STRING * SourceString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAppendStringToString ( + PSTRING Destination, + const STRING * Source + ); + +// begin_ntddk begin_wdm +// +// NLS String functions +// + +NTSYSAPI +NTSTATUS +NTAPI +RtlAnsiStringToUnicodeString( + PUNICODE_STRING DestinationString, + PCANSI_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToAnsiString( + PANSI_STRING DestinationString, + PCUNICODE_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlOemStringToUnicodeString( + PUNICODE_STRING DestinationString, + PCOEM_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToOemString( + POEM_STRING DestinationString, + PCUNICODE_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeStringToOemString( + POEM_STRING DestinationString, + PCUNICODE_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlOemStringToCountedUnicodeString( + PUNICODE_STRING DestinationString, + PCOEM_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeStringToCountedOemString( + POEM_STRING DestinationString, + PCUNICODE_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeStringToCountedOemString( + POEM_STRING DestinationString, + PCUNICODE_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + +// begin_ntddk begin_wdm begin_ntndis + +NTSYSAPI +LONG +NTAPI +RtlCompareUnicodeString( + PCUNICODE_STRING String1, + PCUNICODE_STRING String2, + BOOLEAN CaseInSensitive + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualUnicodeString( + const UNICODE_STRING *String1, + const UNICODE_STRING *String2, + BOOLEAN CaseInSensitive + ); + +#define HASH_STRING_ALGORITHM_DEFAULT (0) +#define HASH_STRING_ALGORITHM_X65599 (1) +#define HASH_STRING_ALGORITHM_INVALID (0xffffffff) + +NTSYSAPI +NTSTATUS +NTAPI +RtlHashUnicodeString( + IN const UNICODE_STRING *String, + IN BOOLEAN CaseInSensitive, + IN ULONG HashAlgorithm, + OUT PULONG HashValue + ); + +// end_ntddk end_wdm end_ntndis + +NTSYSAPI +NTSTATUS +NTAPI +RtlValidateUnicodeString( + IN ULONG Flags, + IN const UNICODE_STRING *String + ); + +#define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE (0x00000001) +#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING (0x00000002) + +NTSYSAPI +NTSTATUS +NTAPI +RtlDuplicateUnicodeString( + IN ULONG Flags, + IN const UNICODE_STRING *StringIn, + OUT UNICODE_STRING *StringOut + ); + +// begin_ntddk begin_ntndis + +NTSYSAPI +BOOLEAN +NTAPI +RtlPrefixUnicodeString( + IN PUNICODE_STRING String1, + IN PUNICODE_STRING String2, + IN BOOLEAN CaseInSensitive + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeString( + PUNICODE_STRING DestinationString, + PCUNICODE_STRING SourceString, + BOOLEAN AllocateDestinationString + ); + + +NTSTATUS +RtlDowncaseUnicodeString( + OUT PUNICODE_STRING DestinationString, + IN PCUNICODE_STRING SourceString, + IN BOOLEAN AllocateDestinationString + ); + + +NTSYSAPI +VOID +NTAPI +RtlCopyUnicodeString( + PUNICODE_STRING DestinationString, + PCUNICODE_STRING SourceString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlAppendUnicodeStringToString ( + PUNICODE_STRING Destination, + PCUNICODE_STRING Source + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlAppendUnicodeToString ( + PUNICODE_STRING Destination, + PCWSTR Source + ); + +// end_ntndis end_wdm + +NTSYSAPI +WCHAR +NTAPI +RtlUpcaseUnicodeChar( + WCHAR SourceCharacter + ); + +NTSYSAPI +WCHAR +NTAPI +RtlDowncaseUnicodeChar( + WCHAR SourceCharacter + ); + +// begin_wdm + +NTSYSAPI +VOID +NTAPI +RtlFreeUnicodeString( + PUNICODE_STRING UnicodeString + ); + +NTSYSAPI +VOID +NTAPI +RtlFreeAnsiString( + PANSI_STRING AnsiString + ); + +// end_ntddk end_wdm end_nthal + +NTSYSAPI +VOID +NTAPI +RtlFreeOemString( + POEM_STRING OemString + ); + +// begin_wdm +NTSYSAPI +ULONG +NTAPI +RtlxUnicodeStringToAnsiSize( + PCUNICODE_STRING UnicodeString + ); + +// +// NTSYSAPI +// ULONG +// NTAPI +// RtlUnicodeStringToAnsiSize( +// PUNICODE_STRING UnicodeString +// ); +// + +#define RtlUnicodeStringToAnsiSize(STRING) ( \ + NLS_MB_CODE_PAGE_TAG ? \ + RtlxUnicodeStringToAnsiSize(STRING) : \ + ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ +) + +// end_wdm + +NTSYSAPI +ULONG +NTAPI +RtlxUnicodeStringToOemSize( + PCUNICODE_STRING UnicodeString + ); + +// +// NTSYSAPI +// ULONG +// NTAPI +// RtlUnicodeStringToOemSize( +// PUNICODE_STRING UnicodeString +// ); +// + +#define RtlUnicodeStringToOemSize(STRING) ( \ + NLS_MB_OEM_CODE_PAGE_TAG ? \ + RtlxUnicodeStringToOemSize(STRING) : \ + ((STRING)->Length + sizeof(UNICODE_NULL)) / sizeof(WCHAR) \ +) + + +NTSYSAPI +ULONG +NTAPI +RtlxAnsiStringToUnicodeSize( + PCANSI_STRING AnsiString + ); + +// +// NTSYSAPI +// ULONG +// NTAPI +// RtlAnsiStringToUnicodeSize( +// PANSI_STRING AnsiString +// ); +// + +#define RtlAnsiStringToUnicodeSize(STRING) ( \ + NLS_MB_CODE_PAGE_TAG ? \ + RtlxAnsiStringToUnicodeSize(STRING) : \ + ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ +) + +// end_ntddk end_wdm + +NTSYSAPI +ULONG +NTAPI +RtlxOemStringToUnicodeSize( + PCOEM_STRING OemString + ); +// +// NTSYSAPI +// ULONG +// NTAPI +// RtlOemStringToUnicodeSize( +// POEM_STRING OemString +// ); +// + +#define RtlOemStringToUnicodeSize(STRING) ( \ + NLS_MB_OEM_CODE_PAGE_TAG ? \ + RtlxOemStringToUnicodeSize(STRING) : \ + ((STRING)->Length + sizeof(ANSI_NULL)) * sizeof(WCHAR) \ +) + +// +// ULONG +// RtlOemStringToCountedUnicodeSize( +// POEM_STRING OemString +// ); +// + +#define RtlOemStringToCountedUnicodeSize(STRING) ( \ + (ULONG)(RtlOemStringToUnicodeSize(STRING) - sizeof(UNICODE_NULL)) \ + ) + +NTSYSAPI +NTSTATUS +NTAPI +RtlMultiByteToUnicodeN( + PWSTR UnicodeString, + ULONG MaxBytesInUnicodeString, + PULONG BytesInUnicodeString, + PCSTR MultiByteString, + ULONG BytesInMultiByteString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlMultiByteToUnicodeSize( + PULONG BytesInUnicodeString, + PCSTR MultiByteString, + ULONG BytesInMultiByteString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeToMultiByteSize( + PULONG BytesInMultiByteString, + IN PWSTR UnicodeString, + ULONG BytesInUnicodeString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeToMultiByteN( + PCHAR MultiByteString, + ULONG MaxBytesInMultiByteString, + PULONG BytesInMultiByteString, + PWSTR UnicodeString, + ULONG BytesInUnicodeString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeToMultiByteN( + PCHAR MultiByteString, + ULONG MaxBytesInMultiByteString, + PULONG BytesInMultiByteString, + PWSTR UnicodeString, + ULONG BytesInUnicodeString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlOemToUnicodeN( + PWSTR UnicodeString, + ULONG MaxBytesInUnicodeString, + PULONG BytesInUnicodeString, + IN PCHAR OemString, + ULONG BytesInOemString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeToOemN( + PCHAR OemString, + ULONG MaxBytesInOemString, + PULONG BytesInOemString, + PWSTR UnicodeString, + ULONG BytesInUnicodeString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeToOemN( + PCHAR OemString, + ULONG MaxBytesInOemString, + PULONG BytesInOemString, + PWSTR UnicodeString, + ULONG BytesInUnicodeString + ); + + +typedef +PVOID +(NTAPI *PRTL_ALLOCATE_STRING_ROUTINE) ( + SIZE_T NumberOfBytes + ); + +typedef +VOID +(NTAPI *PRTL_FREE_STRING_ROUTINE) ( + PVOID Buffer + ); + +extern const PRTL_ALLOCATE_STRING_ROUTINE RtlAllocateStringRoutine; +extern const PRTL_FREE_STRING_ROUTINE RtlFreeStringRoutine; + + +// +// Defines and Routines for handling GUID's. +// + +// begin_ntddk begin_wdm begin_nthal + +// begin_ntminiport + +#include <guiddef.h> + +// end_ntminiport + +#ifndef DEFINE_GUIDEX + #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name +#endif // !defined(DEFINE_GUIDEX) + +#ifndef STATICGUIDOF + #define STATICGUIDOF(guid) STATIC_##guid +#endif // !defined(STATICGUIDOF) + +#ifndef __IID_ALIGNED__ + #define __IID_ALIGNED__ + #ifdef __cplusplus + inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) + { + return ((*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1))); + } + #else // !__cplusplus + #define IsEqualGUIDAligned(guid1, guid2) \ + ((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1))) + #endif // !__cplusplus +#endif // !__IID_ALIGNED__ + +NTSYSAPI +NTSTATUS +NTAPI +RtlStringFromGUID( + IN REFGUID Guid, + OUT PUNICODE_STRING GuidString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlGUIDFromString( + IN PUNICODE_STRING GuidString, + OUT GUID* Guid + ); + +// end_ntddk end_wdm end_nthal + +// +// Routine for generating 8.3 names from long names. +// + +// +// The context structure is used when generating 8.3 names. The caller must +// always zero out the structure before starting a new generation sequence +// + +typedef struct _GENERATE_NAME_CONTEXT { + + // + // The structure is divided into two strings. The Name, and extension. + // Each part contains the value that was last inserted in the name. + // The length values are in terms of wchars and not bytes. We also + // store the last index value used in the generation collision algorithm. + // + + USHORT Checksum; + BOOLEAN ChecksumInserted; + + UCHAR NameLength; // not including extension + WCHAR NameBuffer[8]; // e.g., "ntoskrnl" + + ULONG ExtensionLength; // including dot + WCHAR ExtensionBuffer[4]; // e.g., ".exe" + + ULONG LastIndexValue; + +} GENERATE_NAME_CONTEXT; +typedef GENERATE_NAME_CONTEXT *PGENERATE_NAME_CONTEXT; + +NTSYSAPI +VOID +NTAPI +RtlGenerate8dot3Name ( + IN PUNICODE_STRING Name, + IN BOOLEAN AllowExtendedCharacters, + IN OUT PGENERATE_NAME_CONTEXT Context, + OUT PUNICODE_STRING Name8dot3 + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlIsNameLegalDOS8Dot3 ( + IN PUNICODE_STRING Name, + IN OUT POEM_STRING OemName OPTIONAL, + IN OUT PBOOLEAN NameContainsSpaces OPTIONAL + ); + +BOOLEAN +RtlIsValidOemCharacter ( + IN PWCHAR Char + ); + +// +// Prefix package types and procedures. +// +// Note that the following two record structures should really be opaque +// to the user of this package. The only information about the two +// structures available for the user should be the size and alignment +// of the structures. +// + +typedef struct _PREFIX_TABLE_ENTRY { + CSHORT NodeTypeCode; + CSHORT NameLength; + struct _PREFIX_TABLE_ENTRY *NextPrefixTree; + RTL_SPLAY_LINKS Links; + PSTRING Prefix; +} PREFIX_TABLE_ENTRY; +typedef PREFIX_TABLE_ENTRY *PPREFIX_TABLE_ENTRY; + +typedef struct _PREFIX_TABLE { + CSHORT NodeTypeCode; + CSHORT NameLength; + PPREFIX_TABLE_ENTRY NextPrefixTree; +} PREFIX_TABLE; +typedef PREFIX_TABLE *PPREFIX_TABLE; + +// +// The procedure prototypes for the prefix package +// + +NTSYSAPI +VOID +NTAPI +PfxInitialize ( + PPREFIX_TABLE PrefixTable + ); + +NTSYSAPI +BOOLEAN +NTAPI +PfxInsertPrefix ( + PPREFIX_TABLE PrefixTable, + PSTRING Prefix, + PPREFIX_TABLE_ENTRY PrefixTableEntry + ); + +NTSYSAPI +VOID +NTAPI +PfxRemovePrefix ( + PPREFIX_TABLE PrefixTable, + PPREFIX_TABLE_ENTRY PrefixTableEntry + ); + +NTSYSAPI +PPREFIX_TABLE_ENTRY +NTAPI +PfxFindPrefix ( + PPREFIX_TABLE PrefixTable, + PSTRING FullName + ); + +// +// The following definitions are for the unicode version of the prefix +// package. +// + +typedef struct _UNICODE_PREFIX_TABLE_ENTRY { + CSHORT NodeTypeCode; + CSHORT NameLength; + struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree; + struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch; + RTL_SPLAY_LINKS Links; + PUNICODE_STRING Prefix; +} UNICODE_PREFIX_TABLE_ENTRY; +typedef UNICODE_PREFIX_TABLE_ENTRY *PUNICODE_PREFIX_TABLE_ENTRY; + +typedef struct _UNICODE_PREFIX_TABLE { + CSHORT NodeTypeCode; + CSHORT NameLength; + PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree; + PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry; +} UNICODE_PREFIX_TABLE; +typedef UNICODE_PREFIX_TABLE *PUNICODE_PREFIX_TABLE; + +NTSYSAPI +VOID +NTAPI +RtlInitializeUnicodePrefix ( + PUNICODE_PREFIX_TABLE PrefixTable + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlInsertUnicodePrefix ( + PUNICODE_PREFIX_TABLE PrefixTable, + PUNICODE_STRING Prefix, + PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry + ); + +NTSYSAPI +VOID +NTAPI +RtlRemoveUnicodePrefix ( + PUNICODE_PREFIX_TABLE PrefixTable, + PUNICODE_PREFIX_TABLE_ENTRY PrefixTableEntry + ); + +NTSYSAPI +PUNICODE_PREFIX_TABLE_ENTRY +NTAPI +RtlFindUnicodePrefix ( + PUNICODE_PREFIX_TABLE PrefixTable, + PUNICODE_STRING FullName, + ULONG CaseInsensitiveIndex + ); + +NTSYSAPI +PUNICODE_PREFIX_TABLE_ENTRY +NTAPI +RtlNextUnicodePrefix ( + PUNICODE_PREFIX_TABLE PrefixTable, + BOOLEAN Restart + ); + +// +// +// Compression package types and procedures. +// + +#define COMPRESSION_FORMAT_NONE (0x0000) // winnt +#define COMPRESSION_FORMAT_DEFAULT (0x0001) // winnt +#define COMPRESSION_FORMAT_LZNT1 (0x0002) // winnt + +#define COMPRESSION_ENGINE_STANDARD (0x0000) // winnt +#define COMPRESSION_ENGINE_MAXIMUM (0x0100) // winnt +#define COMPRESSION_ENGINE_HIBER (0x0200) // winnt + +// +// Compressed Data Information structure. This structure is +// used to describe the state of a compressed data buffer, +// whose uncompressed size is known. All compressed chunks +// described by this structure must be compressed with the +// same format. On compressed reads, this entire structure +// is an output, and on compressed writes the entire structure +// is an input. +// + +typedef struct _COMPRESSED_DATA_INFO { + + // + // Code for the compression format (and engine) as + // defined in ntrtl.h. Note that COMPRESSION_FORMAT_NONE + // and COMPRESSION_FORMAT_DEFAULT are invalid if + // any of the described chunks are compressed. + // + + USHORT CompressionFormatAndEngine; + + // + // Since chunks and compression units are expected to be + // powers of 2 in size, we express then log2. So, for + // example (1 << ChunkShift) == ChunkSizeInBytes. The + // ClusterShift indicates how much space must be saved + // to successfully compress a compression unit - each + // successfully compressed compression unit must occupy + // at least one cluster less in bytes than an uncompressed + // compression unit. + // + + UCHAR CompressionUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + UCHAR Reserved; + + // + // This is the number of entries in the CompressedChunkSizes + // array. + // + + USHORT NumberOfChunks; + + // + // This is an array of the sizes of all chunks resident + // in the compressed data buffer. There must be one entry + // in this array for each chunk possible in the uncompressed + // buffer size. A size of FSRTL_CHUNK_SIZE indicates the + // corresponding chunk is uncompressed and occupies exactly + // that size. A size of 0 indicates that the corresponding + // chunk contains nothing but binary 0's, and occupies no + // space in the compressed data. All other sizes must be + // less than FSRTL_CHUNK_SIZE, and indicate the exact size + // of the compressed data in bytes. + // + + ULONG CompressedChunkSizes[ANYSIZE_ARRAY]; + +} COMPRESSED_DATA_INFO; +typedef COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO; + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetCompressionWorkSpaceSize ( + IN USHORT CompressionFormatAndEngine, + OUT PULONG CompressBufferWorkSpaceSize, + OUT PULONG CompressFragmentWorkSpaceSize + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCompressBuffer ( + IN USHORT CompressionFormatAndEngine, + IN PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + OUT PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN ULONG UncompressedChunkSize, + OUT PULONG FinalCompressedSize, + IN PVOID WorkSpace + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDecompressBuffer ( + IN USHORT CompressionFormat, + OUT PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + IN PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + OUT PULONG FinalUncompressedSize + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDecompressFragment ( + IN USHORT CompressionFormat, + OUT PUCHAR UncompressedFragment, + IN ULONG UncompressedFragmentSize, + IN PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN ULONG FragmentOffset, + OUT PULONG FinalUncompressedSize, + IN PVOID WorkSpace + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDescribeChunk ( + IN USHORT CompressionFormat, + IN OUT PUCHAR *CompressedBuffer, + IN PUCHAR EndOfCompressedBufferPlus1, + OUT PUCHAR *ChunkBuffer, + OUT PULONG ChunkSize + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlReserveChunk ( + IN USHORT CompressionFormat, + IN OUT PUCHAR *CompressedBuffer, + IN PUCHAR EndOfCompressedBufferPlus1, + OUT PUCHAR *ChunkBuffer, + IN ULONG ChunkSize + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlDecompressChunks ( + OUT PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + IN PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN PUCHAR CompressedTail, + IN ULONG CompressedTailSize, + IN PCOMPRESSED_DATA_INFO CompressedDataInfo + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCompressChunks ( + IN PUCHAR UncompressedBuffer, + IN ULONG UncompressedBufferSize, + OUT PUCHAR CompressedBuffer, + IN ULONG CompressedBufferSize, + IN OUT PCOMPRESSED_DATA_INFO CompressedDataInfo, + IN ULONG CompressedDataInfoLength, + IN PVOID WorkSpace + ); + +// +// Fast primitives to compare, move, and zero memory +// + +// begin_winnt begin_ntndis + +NTSYSAPI +SIZE_T +NTAPI +RtlCompareMemory ( + const VOID *Source1, + const VOID *Source2, + SIZE_T Length + ); + +#if defined(_M_AMD64) || defined(_M_IA64) + +#define RtlEqualMemory(Source1, Source2, Length) \ + ((Length) == RtlCompareMemory(Source1, Source2, Length)) + +NTSYSAPI +VOID +NTAPI +RtlCopyMemory ( + VOID UNALIGNED *Destination, + CONST VOID UNALIGNED *Source, + SIZE_T Length + ); + +#if !defined(_M_AMD64) + +NTSYSAPI +VOID +NTAPI +RtlCopyMemory32 ( + VOID UNALIGNED *Destination, + CONST VOID UNALIGNED *Source, + ULONG Length + ); + +#endif + +NTSYSAPI +VOID +NTAPI +RtlMoveMemory ( + VOID UNALIGNED *Destination, + CONST VOID UNALIGNED *Source, + SIZE_T Length + ); + +NTSYSAPI +VOID +NTAPI +RtlFillMemory ( + VOID UNALIGNED *Destination, + SIZE_T Length, + UCHAR Fill + ); + +NTSYSAPI +VOID +NTAPI +RtlZeroMemory ( + VOID UNALIGNED *Destination, + SIZE_T Length + ); + +#else + +#define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length))) +#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length)) +#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length)) +#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length)) +#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length)) + +#endif + +#if !defined(MIDL_PASS) +FORCEINLINE +PVOID +RtlSecureZeroMemory( + IN PVOID ptr, + IN SIZE_T cnt + ) +{ + volatile char *vptr = (volatile char *)ptr; + while (cnt) { + *vptr = 0; + vptr++; + cnt--; + } + return ptr; +} +#endif + +// end_ntndis end_winnt + +#define RtlCopyBytes RtlCopyMemory +#define RtlZeroBytes RtlZeroMemory +#define RtlFillBytes RtlFillMemory + +#if defined(_M_AMD64) + +NTSYSAPI +VOID +NTAPI +RtlCopyMemoryNonTemporal ( + VOID UNALIGNED *Destination, + CONST VOID UNALIGNED *Source, + SIZE_T Length + ); + +#else + +#define RtlCopyMemoryNonTemporal RtlCopyMemory + +#endif + +NTSYSAPI +VOID +FASTCALL +RtlPrefetchMemoryNonTemporal( + IN PVOID Source, + IN SIZE_T Length + ); + +// end_ntddk end_wdm end_nthal + +NTSYSAPI +SIZE_T +NTAPI +RtlCompareMemoryUlong ( + PVOID Source, + SIZE_T Length, + ULONG Pattern + ); + +NTSYSAPI +VOID +NTAPI +RtlFillMemoryUlong ( + PVOID Destination, + SIZE_T Length, + ULONG Pattern + ); + +NTSYSAPI +VOID +NTAPI +RtlFillMemoryUlonglong ( + PVOID Destination, + SIZE_T Length, + ULONGLONG Pattern + ); + +// +// Define kernel debugger print prototypes and macros. +// +// N.B. The following function cannot be directly imported because there are +// a few places in the source tree where this function is redefined. +// + +VOID +NTAPI +DbgBreakPoint( + VOID + ); + +// end_wdm + +NTSYSAPI +VOID +NTAPI +DbgBreakPointWithStatus( + IN ULONG Status + ); + +// begin_wdm + +#define DBG_STATUS_CONTROL_C 1 +#define DBG_STATUS_SYSRQ 2 +#define DBG_STATUS_BUGCHECK_FIRST 3 +#define DBG_STATUS_BUGCHECK_SECOND 4 +#define DBG_STATUS_FATAL 5 +#define DBG_STATUS_DEBUG_CONTROL 6 +#define DBG_STATUS_WORKER 7 + +#if DBG + +#define KdPrint(_x_) DbgPrint _x_ +// end_wdm +#define KdPrintEx(_x_) DbgPrintEx _x_ +#define vKdPrintEx(_x_) vDbgPrintEx _x_ +#define vKdPrintExWithPrefix(_x_) vDbgPrintExWithPrefix _x_ +// begin_wdm +#define KdBreakPoint() DbgBreakPoint() + +// end_wdm + +#define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) + +// begin_wdm + +#else + +#define KdPrint(_x_) +// end_wdm +#define KdPrintEx(_x_) +#define vKdPrintEx(_x_) +#define vKdPrintExWithPrefix(_x_) +// begin_wdm +#define KdBreakPoint() + +// end_wdm + +#define KdBreakPointWithStatus(s) + +// begin_wdm + +#endif + +#ifndef _DBGNT_ + +ULONG +__cdecl +DbgPrint( + PCH Format, + ... + ); + +// end_wdm + +ULONG +__cdecl +DbgPrintEx( + IN ULONG ComponentId, + IN ULONG Level, + IN PCH Format, + ... + ); + +#ifdef _VA_LIST_DEFINED + +ULONG +vDbgPrintEx( + IN ULONG ComponentId, + IN ULONG Level, + IN PCH Format, + va_list arglist + ); + +ULONG +vDbgPrintExWithPrefix( + IN PCH Prefix, + IN ULONG ComponentId, + IN ULONG Level, + IN PCH Format, + va_list arglist + ); + +#endif + +ULONG +__cdecl +DbgPrintReturnControlC( + PCH Format, + ... + ); + +NTSYSAPI +NTSTATUS +DbgQueryDebugFilterState( + IN ULONG ComponentId, + IN ULONG Level + ); + +NTSYSAPI +NTSTATUS +DbgSetDebugFilterState( + IN ULONG ComponentId, + IN ULONG Level, + IN BOOLEAN State + ); + +// begin_wdm + +#endif // _DBGNT_ + +// +// Large integer arithmetic routines. +// + +// +// Large integer add - 64-bits + 64-bits -> 64-bits +// + +#if !defined(MIDL_PASS) + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerAdd ( + LARGE_INTEGER Addend1, + LARGE_INTEGER Addend2 + ) +{ + LARGE_INTEGER Sum; + + Sum.QuadPart = Addend1.QuadPart + Addend2.QuadPart; + return Sum; +} + +// +// Enlarged integer multiply - 32-bits * 32-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlEnlargedIntegerMultiply ( + LONG Multiplicand, + LONG Multiplier + ) +{ + LARGE_INTEGER Product; + + Product.QuadPart = (LONGLONG)Multiplicand * (ULONGLONG)Multiplier; + return Product; +} + +// +// Unsigned enlarged integer multiply - 32-bits * 32-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlEnlargedUnsignedMultiply ( + ULONG Multiplicand, + ULONG Multiplier + ) +{ + LARGE_INTEGER Product; + + Product.QuadPart = (ULONGLONG)Multiplicand * (ULONGLONG)Multiplier; + return Product; +} + +// +// Enlarged integer divide - 64-bits / 32-bits > 32-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +ULONG +NTAPI +RtlEnlargedUnsignedDivide ( + IN ULARGE_INTEGER Dividend, + IN ULONG Divisor, + IN PULONG Remainder OPTIONAL + ) +{ + ULONG Quotient; + + Quotient = (ULONG)(Dividend.QuadPart / Divisor); + if (ARGUMENT_PRESENT(Remainder)) { + *Remainder = (ULONG)(Dividend.QuadPart % Divisor); + } + + return Quotient; +} + +// +// Large integer negation - -(64-bits) +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerNegate ( + LARGE_INTEGER Subtrahend + ) +{ + LARGE_INTEGER Difference; + + Difference.QuadPart = -Subtrahend.QuadPart; + return Difference; +} + +// +// Large integer subtract - 64-bits - 64-bits -> 64-bits. +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerSubtract ( + LARGE_INTEGER Minuend, + LARGE_INTEGER Subtrahend + ) +{ + LARGE_INTEGER Difference; + + Difference.QuadPart = Minuend.QuadPart - Subtrahend.QuadPart; + return Difference; +} + +// +// Extended large integer magic divide - 64-bits / 32-bits -> 64-bits +// + +#if defined(_AMD64_) + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlExtendedMagicDivide ( + LARGE_INTEGER Dividend, + LARGE_INTEGER MagicDivisor, + CCHAR ShiftCount + ) +{ + LARGE_INTEGER Quotient; + + Quotient.QuadPart = UnsignedMultiplyHigh((ULONG64)Dividend.QuadPart, + (ULONG64)MagicDivisor.QuadPart); + + Quotient.QuadPart = (ULONG64)Quotient.QuadPart >> ShiftCount; + return Quotient; +} + +#endif // defined(_AMD64_) + +#if defined(_X86_) || defined(_IA64_) + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +NTSYSAPI +LARGE_INTEGER +NTAPI +RtlExtendedMagicDivide ( + LARGE_INTEGER Dividend, + LARGE_INTEGER MagicDivisor, + CCHAR ShiftCount + ); + +#endif // defined(_X86_) || defined(_IA64_) + +#if defined(_AMD64_) || defined(_IA64_) + +// +// Large Integer divide - 64-bits / 32-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlExtendedLargeIntegerDivide ( + LARGE_INTEGER Dividend, + ULONG Divisor, + PULONG Remainder OPTIONAL + ) +{ + LARGE_INTEGER Quotient; + + Quotient.QuadPart = (ULONG64)Dividend.QuadPart / Divisor; + if (ARGUMENT_PRESENT(Remainder)) { + *Remainder = (ULONG)(Dividend.QuadPart % Divisor); + } + + return Quotient; +} + +// end_wdm +// +// Large Integer divide - 64-bits / 64-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerDivide ( + LARGE_INTEGER Dividend, + LARGE_INTEGER Divisor, + PLARGE_INTEGER Remainder OPTIONAL + ) +{ + LARGE_INTEGER Quotient; + + Quotient.QuadPart = Dividend.QuadPart / Divisor.QuadPart; + if (ARGUMENT_PRESENT(Remainder)) { + Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; + } + + return Quotient; +} + +// begin_wdm +// +// Extended integer multiply - 32-bits * 64-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlExtendedIntegerMultiply ( + LARGE_INTEGER Multiplicand, + LONG Multiplier + ) +{ + LARGE_INTEGER Product; + + Product.QuadPart = Multiplicand.QuadPart * Multiplier; + return Product; +} + +#else + +// +// Large Integer divide - 64-bits / 32-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +NTSYSAPI +LARGE_INTEGER +NTAPI +RtlExtendedLargeIntegerDivide ( + LARGE_INTEGER Dividend, + ULONG Divisor, + PULONG Remainder + ); + +// end_wdm +// +// Large Integer divide - 64-bits / 64-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +NTSYSAPI +LARGE_INTEGER +NTAPI +RtlLargeIntegerDivide ( + LARGE_INTEGER Dividend, + LARGE_INTEGER Divisor, + PLARGE_INTEGER Remainder + ); + +// begin_wdm +// +// Extended integer multiply - 32-bits * 64-bits -> 64-bits +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +NTSYSAPI +LARGE_INTEGER +NTAPI +RtlExtendedIntegerMultiply ( + LARGE_INTEGER Multiplicand, + LONG Multiplier + ); + +#endif // defined(_AMD64_) || defined(_IA64_) + +// +// Large integer and - 64-bite & 64-bits -> 64-bits. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(RtlLargeIntegerAnd) // Use native __int64 math +#endif +#define RtlLargeIntegerAnd(Result, Source, Mask) \ + Result.QuadPart = Source.QuadPart & Mask.QuadPart + +// +// Convert signed integer to large integer. +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlConvertLongToLargeInteger ( + LONG SignedInteger + ) +{ + LARGE_INTEGER Result; + + Result.QuadPart = SignedInteger; + return Result; +} + +// +// Convert unsigned integer to large integer. +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlConvertUlongToLargeInteger ( + ULONG UnsignedInteger + ) +{ + LARGE_INTEGER Result; + + Result.QuadPart = UnsignedInteger; + return Result; +} + +// +// Large integer shift routines. +// + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerShiftLeft ( + LARGE_INTEGER LargeInteger, + CCHAR ShiftCount + ) +{ + LARGE_INTEGER Result; + + Result.QuadPart = LargeInteger.QuadPart << ShiftCount; + return Result; +} + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerShiftRight ( + LARGE_INTEGER LargeInteger, + CCHAR ShiftCount + ) +{ + LARGE_INTEGER Result; + + Result.QuadPart = (ULONG64)LargeInteger.QuadPart >> ShiftCount; + return Result; +} + +DECLSPEC_DEPRECATED_DDK // Use native __int64 math +__inline +LARGE_INTEGER +NTAPI +RtlLargeIntegerArithmeticShift ( + LARGE_INTEGER LargeInteger, + CCHAR ShiftCount + ) +{ + LARGE_INTEGER Result; + + Result.QuadPart = LargeInteger.QuadPart >> ShiftCount; + return Result; +} + + +// +// Large integer comparison routines. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(RtlLargeIntegerGreaterThan) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerGreaterThanOrEqualTo) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerEqualTo) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerNotEqualTo) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerLessThan) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerLessThanOrEqualTo) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerGreaterThanZero) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerGreaterOrEqualToZero) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerEqualToZero) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerNotEqualToZero) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerLessThanZero) // Use native __int64 math +#pragma deprecated(RtlLargeIntegerLessOrEqualToZero) // Use native __int64 math +#endif + +#define RtlLargeIntegerGreaterThan(X,Y) ( \ + (((X).HighPart == (Y).HighPart) && ((X).LowPart > (Y).LowPart)) || \ + ((X).HighPart > (Y).HighPart) \ +) + +#define RtlLargeIntegerGreaterThanOrEqualTo(X,Y) ( \ + (((X).HighPart == (Y).HighPart) && ((X).LowPart >= (Y).LowPart)) || \ + ((X).HighPart > (Y).HighPart) \ +) + +#define RtlLargeIntegerEqualTo(X,Y) ( \ + !(((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \ +) + +#define RtlLargeIntegerNotEqualTo(X,Y) ( \ + (((X).LowPart ^ (Y).LowPart) | ((X).HighPart ^ (Y).HighPart)) \ +) + +#define RtlLargeIntegerLessThan(X,Y) ( \ + (((X).HighPart == (Y).HighPart) && ((X).LowPart < (Y).LowPart)) || \ + ((X).HighPart < (Y).HighPart) \ +) + +#define RtlLargeIntegerLessThanOrEqualTo(X,Y) ( \ + (((X).HighPart == (Y).HighPart) && ((X).LowPart <= (Y).LowPart)) || \ + ((X).HighPart < (Y).HighPart) \ +) + +#define RtlLargeIntegerGreaterThanZero(X) ( \ + (((X).HighPart == 0) && ((X).LowPart > 0)) || \ + ((X).HighPart > 0 ) \ +) + +#define RtlLargeIntegerGreaterOrEqualToZero(X) ( \ + (X).HighPart >= 0 \ +) + +#define RtlLargeIntegerEqualToZero(X) ( \ + !((X).LowPart | (X).HighPart) \ +) + +#define RtlLargeIntegerNotEqualToZero(X) ( \ + ((X).LowPart | (X).HighPart) \ +) + +#define RtlLargeIntegerLessThanZero(X) ( \ + ((X).HighPart < 0) \ +) + +#define RtlLargeIntegerLessOrEqualToZero(X) ( \ + ((X).HighPart < 0) || !((X).LowPart | (X).HighPart) \ +) + +#endif // !defined(MIDL_PASS) + +// +// Time conversion routines +// + +typedef struct _TIME_FIELDS { + CSHORT Year; // range [1601...] + CSHORT Month; // range [1..12] + CSHORT Day; // range [1..31] + CSHORT Hour; // range [0..23] + CSHORT Minute; // range [0..59] + CSHORT Second; // range [0..59] + CSHORT Milliseconds;// range [0..999] + CSHORT Weekday; // range [0..6] == [Sunday..Saturday] +} TIME_FIELDS; +typedef TIME_FIELDS *PTIME_FIELDS; + + +NTSYSAPI +VOID +NTAPI +RtlTimeToTimeFields ( + PLARGE_INTEGER Time, + PTIME_FIELDS TimeFields + ); + +// +// A time field record (Weekday ignored) -> 64 bit Time value +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlTimeFieldsToTime ( + PTIME_FIELDS TimeFields, + PLARGE_INTEGER Time + ); + +// end_ntddk end_wdm + +// +// A 64 bit Time value -> Seconds since the start of 1980 +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlTimeToSecondsSince1980 ( + PLARGE_INTEGER Time, + PULONG ElapsedSeconds + ); + +// +// Seconds since the start of 1980 -> 64 bit Time value +// + +NTSYSAPI +VOID +NTAPI +RtlSecondsSince1980ToTime ( + ULONG ElapsedSeconds, + PLARGE_INTEGER Time + ); + +// +// A 64 bit Time value -> Seconds since the start of 1970 +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlTimeToSecondsSince1970 ( + PLARGE_INTEGER Time, + PULONG ElapsedSeconds + ); + +// +// Seconds since the start of 1970 -> 64 bit Time value +// + +NTSYSAPI +VOID +NTAPI +RtlSecondsSince1970ToTime ( + ULONG ElapsedSeconds, + PLARGE_INTEGER Time + ); + +// +// The following macros store and retrieve USHORTS and ULONGS from potentially +// unaligned addresses, avoiding alignment faults. they should probably be +// rewritten in assembler +// + +#define SHORT_SIZE (sizeof(USHORT)) +#define SHORT_MASK (SHORT_SIZE - 1) +#define LONG_SIZE (sizeof(LONG)) +#define LONGLONG_SIZE (sizeof(LONGLONG)) +#define LONG_MASK (LONG_SIZE - 1) +#define LONGLONG_MASK (LONGLONG_SIZE - 1) +#define LOWBYTE_MASK 0x00FF + +#define FIRSTBYTE(VALUE) ((VALUE) & LOWBYTE_MASK) +#define SECONDBYTE(VALUE) (((VALUE) >> 8) & LOWBYTE_MASK) +#define THIRDBYTE(VALUE) (((VALUE) >> 16) & LOWBYTE_MASK) +#define FOURTHBYTE(VALUE) (((VALUE) >> 24) & LOWBYTE_MASK) + +// +// if MIPS Big Endian, order of bytes is reversed. +// + +#define SHORT_LEAST_SIGNIFICANT_BIT 0 +#define SHORT_MOST_SIGNIFICANT_BIT 1 + +#define LONG_LEAST_SIGNIFICANT_BIT 0 +#define LONG_3RD_MOST_SIGNIFICANT_BIT 1 +#define LONG_2ND_MOST_SIGNIFICANT_BIT 2 +#define LONG_MOST_SIGNIFICANT_BIT 3 + +//++ +// +// VOID +// RtlStoreUshort ( +// PUSHORT ADDRESS +// USHORT VALUE +// ) +// +// Routine Description: +// +// This macro stores a USHORT value in at a particular address, avoiding +// alignment faults. +// +// Arguments: +// +// ADDRESS - where to store USHORT value +// VALUE - USHORT to store +// +// Return Value: +// +// none. +// +//-- + +#define RtlStoreUshort(ADDRESS,VALUE) \ + if ((ULONG_PTR)(ADDRESS) & SHORT_MASK) { \ + ((PUCHAR) (ADDRESS))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)(FIRSTBYTE(VALUE)); \ + ((PUCHAR) (ADDRESS))[SHORT_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(VALUE)); \ + } \ + else { \ + *((PUSHORT) (ADDRESS)) = (USHORT) VALUE; \ + } + + +//++ +// +// VOID +// RtlStoreUlong ( +// PULONG ADDRESS +// ULONG VALUE +// ) +// +// Routine Description: +// +// This macro stores a ULONG value in at a particular address, avoiding +// alignment faults. +// +// Arguments: +// +// ADDRESS - where to store ULONG value +// VALUE - ULONG to store +// +// Return Value: +// +// none. +// +// Note: +// Depending on the machine, we might want to call storeushort in the +// unaligned case. +// +//-- + +#define RtlStoreUlong(ADDRESS,VALUE) \ + if ((ULONG_PTR)(ADDRESS) & LONG_MASK) { \ + ((PUCHAR) (ADDRESS))[LONG_LEAST_SIGNIFICANT_BIT ] = (UCHAR)(FIRSTBYTE(VALUE)); \ + ((PUCHAR) (ADDRESS))[LONG_3RD_MOST_SIGNIFICANT_BIT ] = (UCHAR)(SECONDBYTE(VALUE)); \ + ((PUCHAR) (ADDRESS))[LONG_2ND_MOST_SIGNIFICANT_BIT ] = (UCHAR)(THIRDBYTE(VALUE)); \ + ((PUCHAR) (ADDRESS))[LONG_MOST_SIGNIFICANT_BIT ] = (UCHAR)(FOURTHBYTE(VALUE)); \ + } \ + else { \ + *((PULONG) (ADDRESS)) = (ULONG) (VALUE); \ + } + +//++ +// +// VOID +// RtlStoreUlonglong ( +// PULONGLONG ADDRESS +// ULONG VALUE +// ) +// +// Routine Description: +// +// This macro stores a ULONGLONG value in at a particular address, avoiding +// alignment faults. +// +// Arguments: +// +// ADDRESS - where to store ULONGLONG value +// VALUE - ULONGLONG to store +// +// Return Value: +// +// none. +// +//-- + +#define RtlStoreUlonglong(ADDRESS,VALUE) \ + if ((ULONG_PTR)(ADDRESS) & LONGLONG_MASK) { \ + RtlStoreUlong((ULONG_PTR)(ADDRESS), \ + (ULONGLONG)(VALUE) & 0xFFFFFFFF); \ + RtlStoreUlong((ULONG_PTR)(ADDRESS)+sizeof(ULONG), \ + (ULONGLONG)(VALUE) >> 32); \ + } else { \ + *((PULONGLONG)(ADDRESS)) = (ULONGLONG)(VALUE); \ + } + +//++ +// +// VOID +// RtlStoreUlongPtr ( +// PULONG_PTR ADDRESS +// ULONG_PTR VALUE +// ) +// +// Routine Description: +// +// This macro stores a ULONG_PTR value in at a particular address, avoiding +// alignment faults. +// +// Arguments: +// +// ADDRESS - where to store ULONG_PTR value +// VALUE - ULONG_PTR to store +// +// Return Value: +// +// none. +// +//-- + +#ifdef _WIN64 + +#define RtlStoreUlongPtr(ADDRESS,VALUE) \ + RtlStoreUlonglong(ADDRESS,VALUE) + +#else + +#define RtlStoreUlongPtr(ADDRESS,VALUE) \ + RtlStoreUlong(ADDRESS,VALUE) + +#endif + +//++ +// +// VOID +// RtlRetrieveUshort ( +// PUSHORT DESTINATION_ADDRESS +// PUSHORT SOURCE_ADDRESS +// ) +// +// Routine Description: +// +// This macro retrieves a USHORT value from the SOURCE address, avoiding +// alignment faults. The DESTINATION address is assumed to be aligned. +// +// Arguments: +// +// DESTINATION_ADDRESS - where to store USHORT value +// SOURCE_ADDRESS - where to retrieve USHORT value from +// +// Return Value: +// +// none. +// +//-- + +#define RtlRetrieveUshort(DEST_ADDRESS,SRC_ADDRESS) \ + if ((ULONG_PTR)SRC_ADDRESS & SHORT_MASK) { \ + ((PUCHAR) DEST_ADDRESS)[0] = ((PUCHAR) SRC_ADDRESS)[0]; \ + ((PUCHAR) DEST_ADDRESS)[1] = ((PUCHAR) SRC_ADDRESS)[1]; \ + } \ + else { \ + *((PUSHORT) DEST_ADDRESS) = *((PUSHORT) SRC_ADDRESS); \ + } \ + +//++ +// +// VOID +// RtlRetrieveUlong ( +// PULONG DESTINATION_ADDRESS +// PULONG SOURCE_ADDRESS +// ) +// +// Routine Description: +// +// This macro retrieves a ULONG value from the SOURCE address, avoiding +// alignment faults. The DESTINATION address is assumed to be aligned. +// +// Arguments: +// +// DESTINATION_ADDRESS - where to store ULONG value +// SOURCE_ADDRESS - where to retrieve ULONG value from +// +// Return Value: +// +// none. +// +// Note: +// Depending on the machine, we might want to call retrieveushort in the +// unaligned case. +// +//-- + +#define RtlRetrieveUlong(DEST_ADDRESS,SRC_ADDRESS) \ + if ((ULONG_PTR)SRC_ADDRESS & LONG_MASK) { \ + ((PUCHAR) DEST_ADDRESS)[0] = ((PUCHAR) SRC_ADDRESS)[0]; \ + ((PUCHAR) DEST_ADDRESS)[1] = ((PUCHAR) SRC_ADDRESS)[1]; \ + ((PUCHAR) DEST_ADDRESS)[2] = ((PUCHAR) SRC_ADDRESS)[2]; \ + ((PUCHAR) DEST_ADDRESS)[3] = ((PUCHAR) SRC_ADDRESS)[3]; \ + } \ + else { \ + *((PULONG) DEST_ADDRESS) = *((PULONG) SRC_ADDRESS); \ + } +// end_ntddk end_wdm + +//++ +// +// PCHAR +// RtlOffsetToPointer ( +// PVOID Base, +// ULONG Offset +// ) +// +// Routine Description: +// +// This macro generates a pointer which points to the byte that is 'Offset' +// bytes beyond 'Base'. This is useful for referencing fields within +// self-relative data structures. +// +// Arguments: +// +// Base - The address of the base of the structure. +// +// Offset - An unsigned integer offset of the byte whose address is to +// be generated. +// +// Return Value: +// +// A PCHAR pointer to the byte that is 'Offset' bytes beyond 'Base'. +// +// +//-- + +#define RtlOffsetToPointer(B,O) ((PCHAR)( ((PCHAR)(B)) + ((ULONG_PTR)(O)) )) + + +//++ +// +// ULONG +// RtlPointerToOffset ( +// PVOID Base, +// PVOID Pointer +// ) +// +// Routine Description: +// +// This macro calculates the offset from Base to Pointer. This is useful +// for producing self-relative offsets for structures. +// +// Arguments: +// +// Base - The address of the base of the structure. +// +// Pointer - A pointer to a field, presumably within the structure +// pointed to by Base. This value must be larger than that specified +// for Base. +// +// Return Value: +// +// A ULONG offset from Base to Pointer. +// +// +//-- + +#define RtlPointerToOffset(B,P) ((ULONG)( ((PCHAR)(P)) - ((PCHAR)(B)) )) + +// +// BitMap routines. The following structure, routines, and macros are +// for manipulating bitmaps. The user is responsible for allocating a bitmap +// structure (which is really a header) and a buffer (which must be longword +// aligned and multiple longwords in size). +// + +typedef struct _RTL_BITMAP { + ULONG SizeOfBitMap; // Number of bits in bit map + PULONG Buffer; // Pointer to the bit map itself +} RTL_BITMAP; +typedef RTL_BITMAP *PRTL_BITMAP; + +// +// The following routine initializes a new bitmap. It does not alter the +// data currently in the bitmap. This routine must be called before +// any other bitmap routine/macro. +// + +NTSYSAPI +VOID +NTAPI +RtlInitializeBitMap ( + PRTL_BITMAP BitMapHeader, + PULONG BitMapBuffer, + ULONG SizeOfBitMap + ); + +// +// The following three routines clear, set, and test the state of a +// single bit in a bitmap. +// + +NTSYSAPI +VOID +NTAPI +RtlClearBit ( + PRTL_BITMAP BitMapHeader, + ULONG BitNumber + ); + +NTSYSAPI +VOID +NTAPI +RtlSetBit ( + PRTL_BITMAP BitMapHeader, + ULONG BitNumber + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlTestBit ( + PRTL_BITMAP BitMapHeader, + ULONG BitNumber + ); + +// +// The following two routines either clear or set all of the bits +// in a bitmap. +// + +NTSYSAPI +VOID +NTAPI +RtlClearAllBits ( + PRTL_BITMAP BitMapHeader + ); + +NTSYSAPI +VOID +NTAPI +RtlSetAllBits ( + PRTL_BITMAP BitMapHeader + ); + +// +// The following two routines locate a contiguous region of either +// clear or set bits within the bitmap. The region will be at least +// as large as the number specified, and the search of the bitmap will +// begin at the specified hint index (which is a bit index within the +// bitmap, zero based). The return value is the bit index of the located +// region (zero based) or -1 (i.e., 0xffffffff) if such a region cannot +// be located +// + +NTSYSAPI +ULONG +NTAPI +RtlFindClearBits ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindSetBits ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +// +// The following two routines locate a contiguous region of either +// clear or set bits within the bitmap and either set or clear the bits +// within the located region. The region will be as large as the number +// specified, and the search for the region will begin at the specified +// hint index (which is a bit index within the bitmap, zero based). The +// return value is the bit index of the located region (zero based) or +// -1 (i.e., 0xffffffff) if such a region cannot be located. If a region +// cannot be located then the setting/clearing of the bitmap is not performed. +// + +NTSYSAPI +ULONG +NTAPI +RtlFindClearBitsAndSet ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindSetBitsAndClear ( + PRTL_BITMAP BitMapHeader, + ULONG NumberToFind, + ULONG HintIndex + ); + +// +// The following two routines clear or set bits within a specified region +// of the bitmap. The starting index is zero based. +// + +NTSYSAPI +VOID +NTAPI +RtlClearBits ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG NumberToClear + ); + +NTSYSAPI +VOID +NTAPI +RtlSetBits ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG NumberToSet + ); + +// +// The following routine locates a set of contiguous regions of clear +// bits within the bitmap. The caller specifies whether to return the +// longest runs or just the first found lcoated. The following structure is +// used to denote a contiguous run of bits. The two routines return an array +// of this structure, one for each run located. +// + +typedef struct _RTL_BITMAP_RUN { + + ULONG StartingIndex; + ULONG NumberOfBits; + +} RTL_BITMAP_RUN; +typedef RTL_BITMAP_RUN *PRTL_BITMAP_RUN; + +NTSYSAPI +ULONG +NTAPI +RtlFindClearRuns ( + PRTL_BITMAP BitMapHeader, + PRTL_BITMAP_RUN RunArray, + ULONG SizeOfRunArray, + BOOLEAN LocateLongestRuns + ); + +// +// The following routine locates the longest contiguous region of +// clear bits within the bitmap. The returned starting index value +// denotes the first contiguous region located satisfying our requirements +// The return value is the length (in bits) of the longest region found. +// + +NTSYSAPI +ULONG +NTAPI +RtlFindLongestRunClear ( + PRTL_BITMAP BitMapHeader, + PULONG StartingIndex + ); + +// +// The following routine locates the first contiguous region of +// clear bits within the bitmap. The returned starting index value +// denotes the first contiguous region located satisfying our requirements +// The return value is the length (in bits) of the region found. +// + +NTSYSAPI +ULONG +NTAPI +RtlFindFirstRunClear ( + PRTL_BITMAP BitMapHeader, + PULONG StartingIndex + ); + +// +// The following macro returns the value of the bit stored within the +// bitmap at the specified location. If the bit is set a value of 1 is +// returned otherwise a value of 0 is returned. +// +// ULONG +// RtlCheckBit ( +// PRTL_BITMAP BitMapHeader, +// ULONG BitPosition +// ); +// +// +// To implement CheckBit the macro retrieves the longword containing the +// bit in question, shifts the longword to get the bit in question into the +// low order bit position and masks out all other bits. +// + +#define RtlCheckBit(BMH,BP) ((((BMH)->Buffer[(BP) / 32]) >> ((BP) % 32)) & 0x1) + +// +// The following two procedures return to the caller the total number of +// clear or set bits within the specified bitmap. +// + +NTSYSAPI +ULONG +NTAPI +RtlNumberOfClearBits ( + PRTL_BITMAP BitMapHeader + ); + +NTSYSAPI +ULONG +NTAPI +RtlNumberOfSetBits ( + PRTL_BITMAP BitMapHeader + ); + +// +// The following two procedures return to the caller a boolean value +// indicating if the specified range of bits are all clear or set. +// + +NTSYSAPI +BOOLEAN +NTAPI +RtlAreBitsClear ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG Length + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlAreBitsSet ( + PRTL_BITMAP BitMapHeader, + ULONG StartingIndex, + ULONG Length + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindNextForwardRunClear ( + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + IN PULONG StartingRunIndex + ); + +NTSYSAPI +ULONG +NTAPI +RtlFindLastBackwardRunClear ( + IN PRTL_BITMAP BitMapHeader, + IN ULONG FromIndex, + IN PULONG StartingRunIndex + ); + +// +// The following two procedures return to the caller a value indicating +// the position within a ULONGLONG of the most or least significant non-zero +// bit. A value of zero results in a return value of -1. +// + +NTSYSAPI +CCHAR +NTAPI +RtlFindLeastSignificantBit ( + IN ULONGLONG Set + ); + +NTSYSAPI +CCHAR +NTAPI +RtlFindMostSignificantBit ( + IN ULONGLONG Set + ); + +// +// Security ID RTL routine definitions +// + + +NTSYSAPI +BOOLEAN +NTAPI +RtlValidSid ( + PSID Sid + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualSid ( + PSID Sid1, + PSID Sid2 + ); + + +NTSYSAPI +BOOLEAN +NTAPI +RtlEqualPrefixSid ( + PSID Sid1, + PSID Sid2 + ); + + +NTSYSAPI +ULONG +NTAPI +RtlLengthRequiredSid ( + ULONG SubAuthorityCount + ); + + +NTSYSAPI +PVOID +NTAPI +RtlFreeSid( + IN PSID Sid + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlAllocateAndInitializeSid( + IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, + IN UCHAR SubAuthorityCount, + IN ULONG SubAuthority0, + IN ULONG SubAuthority1, + IN ULONG SubAuthority2, + IN ULONG SubAuthority3, + IN ULONG SubAuthority4, + IN ULONG SubAuthority5, + IN ULONG SubAuthority6, + IN ULONG SubAuthority7, + OUT PSID *Sid + ); + + +NTSYSAPI // ntifs +NTSTATUS // ntifs +NTAPI // ntifs +RtlInitializeSid ( // ntifs + PSID Sid, // ntifs + PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, // ntifs + UCHAR SubAuthorityCount // ntifs + ); // ntifs + +NTSYSAPI +PSID_IDENTIFIER_AUTHORITY +NTAPI +RtlIdentifierAuthoritySid ( + PSID Sid + ); + +NTSYSAPI // ntifs +PULONG // ntifs +NTAPI // ntifs +RtlSubAuthoritySid ( // ntifs + PSID Sid, // ntifs + ULONG SubAuthority // ntifs + ); // ntifs + +NTSYSAPI +PUCHAR +NTAPI +RtlSubAuthorityCountSid ( + PSID Sid + ); + +// begin_ntifs +NTSYSAPI +ULONG +NTAPI +RtlLengthSid ( + PSID Sid + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlCopySid ( + ULONG DestinationSidLength, + PSID DestinationSid, + PSID SourceSid + ); + + +// +// BOOLEAN +// RtlEqualLuid( +// PLUID L1, +// PLUID L2 +// ); + +#define RtlEqualLuid(L1, L2) (((L1)->LowPart == (L2)->LowPart) && \ + ((L1)->HighPart == (L2)->HighPart)) + +// +// BOOLEAN +// RtlIsZeroLuid( +// PLUID L1 +// ); +// +#define RtlIsZeroLuid(L1) ((BOOLEAN) (((L1)->LowPart | (L1)->HighPart) == 0)) + + +#if !defined(MIDL_PASS) + +FORCEINLINE LUID +NTAPI +RtlConvertLongToLuid( + LONG Long + ) +{ + LUID TempLuid; + LARGE_INTEGER TempLi; + + TempLi.QuadPart = Long; + TempLuid.LowPart = TempLi.LowPart; + TempLuid.HighPart = TempLi.HighPart; + return(TempLuid); +} + +FORCEINLINE +LUID +NTAPI +RtlConvertUlongToLuid( + ULONG Ulong + ) +{ + LUID TempLuid; + + TempLuid.LowPart = Ulong; + TempLuid.HighPart = 0; + return(TempLuid); +} +#endif + +// end_ntddk + +NTSYSAPI +VOID +NTAPI +RtlCopyLuid ( + PLUID DestinationLuid, + PLUID SourceLuid + ); + + +NTSYSAPI +VOID +NTAPI +RtlMapGenericMask( + PACCESS_MASK AccessMask, + PGENERIC_MAPPING GenericMapping + ); +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateAcl ( + PACL Acl, + ULONG AclLength, + ULONG AclRevision + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetAce ( + PACL Acl, + ULONG AceIndex, + PVOID *Ace + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlAddAccessAllowedAce ( + PACL Acl, + ULONG AceRevision, + ACCESS_MASK AccessMask, + PSID Sid + ); + +// +// SecurityDescriptor RTL routine definitions +// + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor, + ULONG Revision + ); + +// end_wdm end_ntddk + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateSecurityDescriptorRelative ( + PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptor, + ULONG Revision + ); + +// begin_wdm begin_ntddk + +NTSYSAPI +BOOLEAN +NTAPI +RtlValidSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor + ); + + +NTSYSAPI +ULONG +NTAPI +RtlLengthSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor + ); + +NTSYSAPI +BOOLEAN +NTAPI +RtlValidRelativeSecurityDescriptor ( + IN PSECURITY_DESCRIPTOR SecurityDescriptorInput, + IN ULONG SecurityDescriptorLength, + IN SECURITY_INFORMATION RequiredInformation + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlSetDaclSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor, + BOOLEAN DaclPresent, + PACL Dacl, + BOOLEAN DaclDefaulted + ); + +// end_wdm end_ntddk + +NTSYSAPI +NTSTATUS +NTAPI +RtlGetDaclSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor, + PBOOLEAN DaclPresent, + PACL *Dacl, + PBOOLEAN DaclDefaulted + ); +NTSYSAPI +NTSTATUS +NTAPI +RtlSetOwnerSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor, + PSID Owner, + BOOLEAN OwnerDefaulted + ); +NTSYSAPI +NTSTATUS +NTAPI +RtlGetOwnerSecurityDescriptor ( + PSECURITY_DESCRIPTOR SecurityDescriptor, + PSID *Owner, + PBOOLEAN OwnerDefaulted + ); + +NTSYSAPI +ULONG +NTAPI +RtlNtStatusToDosError ( + NTSTATUS Status + ); + +NTSYSAPI +ULONG +NTAPI +RtlNtStatusToDosErrorNoTeb ( + NTSTATUS Status + ); + + +NTSYSAPI +NTSTATUS +NTAPI +RtlCustomCPToUnicodeN( + IN PCPTABLEINFO CustomCP, + OUT PWCH UnicodeString, + IN ULONG MaxBytesInUnicodeString, + OUT PULONG BytesInUnicodeString OPTIONAL, + IN PCH CustomCPString, + IN ULONG BytesInCustomCPString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUnicodeToCustomCPN( + IN PCPTABLEINFO CustomCP, + OUT PCH CustomCPString, + IN ULONG MaxBytesInCustomCPString, + OUT PULONG BytesInCustomCPString OPTIONAL, + IN PWCH UnicodeString, + IN ULONG BytesInUnicodeString + ); + +NTSYSAPI +NTSTATUS +NTAPI +RtlUpcaseUnicodeToCustomCPN( + IN PCPTABLEINFO CustomCP, + OUT PCH CustomCPString, + IN ULONG MaxBytesInCustomCPString, + OUT PULONG BytesInCustomCPString OPTIONAL, + IN PWCH UnicodeString, + IN ULONG BytesInUnicodeString + ); + +NTSYSAPI +VOID +NTAPI +RtlInitCodePageTable( + IN PUSHORT TableBase, + OUT PCPTABLEINFO CodePageTable + ); + + +// +// Routine for converting from a volume device object to a DOS name. +// + +NTSYSAPI +NTSTATUS +NTAPI +RtlVolumeDeviceToDosName( + IN PVOID VolumeDeviceObject, + OUT PUNICODE_STRING DosName + ); + + +// +// Routine for verifying or creating the "System Volume Information" +// folder on NTFS volumes. +// + +NTSYSAPI +NTSTATUS +NTAPI +RtlCreateSystemVolumeInformationFolder( + IN PUNICODE_STRING VolumeRootPath + ); + +#define RTL_SYSTEM_VOLUME_INFORMATION_FOLDER L"System Volume Information" + +typedef struct _OSVERSIONINFOA { + ULONG dwOSVersionInfoSize; + ULONG dwMajorVersion; + ULONG dwMinorVersion; + ULONG dwBuildNumber; + ULONG dwPlatformId; + CHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage +} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; + +typedef struct _OSVERSIONINFOW { + ULONG dwOSVersionInfoSize; + ULONG dwMajorVersion; + ULONG dwMinorVersion; + ULONG dwBuildNumber; + ULONG dwPlatformId; + WCHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage +} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; +#ifdef UNICODE +typedef OSVERSIONINFOW OSVERSIONINFO; +typedef POSVERSIONINFOW POSVERSIONINFO; +typedef LPOSVERSIONINFOW LPOSVERSIONINFO; +#else +typedef OSVERSIONINFOA OSVERSIONINFO; +typedef POSVERSIONINFOA POSVERSIONINFO; +typedef LPOSVERSIONINFOA LPOSVERSIONINFO; +#endif // UNICODE + +typedef struct _OSVERSIONINFOEXA { + ULONG dwOSVersionInfoSize; + ULONG dwMajorVersion; + ULONG dwMinorVersion; + ULONG dwBuildNumber; + ULONG dwPlatformId; + CHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage + USHORT wServicePackMajor; + USHORT wServicePackMinor; + USHORT wSuiteMask; + UCHAR wProductType; + UCHAR wReserved; +} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; +typedef struct _OSVERSIONINFOEXW { + ULONG dwOSVersionInfoSize; + ULONG dwMajorVersion; + ULONG dwMinorVersion; + ULONG dwBuildNumber; + ULONG dwPlatformId; + WCHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage + USHORT wServicePackMajor; + USHORT wServicePackMinor; + USHORT wSuiteMask; + UCHAR wProductType; + UCHAR wReserved; +} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; +#ifdef UNICODE +typedef OSVERSIONINFOEXW OSVERSIONINFOEX; +typedef POSVERSIONINFOEXW POSVERSIONINFOEX; +typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX; +#else +typedef OSVERSIONINFOEXA OSVERSIONINFOEX; +typedef POSVERSIONINFOEXA POSVERSIONINFOEX; +typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; +#endif // UNICODE + +// +// RtlVerifyVersionInfo() conditions +// + +#define VER_EQUAL 1 +#define VER_GREATER 2 +#define VER_GREATER_EQUAL 3 +#define VER_LESS 4 +#define VER_LESS_EQUAL 5 +#define VER_AND 6 +#define VER_OR 7 + +#define VER_CONDITION_MASK 7 +#define VER_NUM_BITS_PER_CONDITION_MASK 3 + +// +// RtlVerifyVersionInfo() type mask bits +// + +#define VER_MINORVERSION 0x0000001 +#define VER_MAJORVERSION 0x0000002 +#define VER_BUILDNUMBER 0x0000004 +#define VER_PLATFORMID 0x0000008 +#define VER_SERVICEPACKMINOR 0x0000010 +#define VER_SERVICEPACKMAJOR 0x0000020 +#define VER_SUITENAME 0x0000040 +#define VER_PRODUCT_TYPE 0x0000080 + +// +// RtlVerifyVersionInfo() os product type values +// + +#define VER_NT_WORKSTATION 0x0000001 +#define VER_NT_DOMAIN_CONTROLLER 0x0000002 +#define VER_NT_SERVER 0x0000003 + +// +// dwPlatformId defines: +// + +#define VER_PLATFORM_WIN32s 0 +#define VER_PLATFORM_WIN32_WINDOWS 1 +#define VER_PLATFORM_WIN32_NT 2 + + +// +// +// VerifyVersionInfo() macro to set the condition mask +// +// For documentation sakes here's the old version of the macro that got +// changed to call an API +// #define VER_SET_CONDITION(_m_,_t_,_c_) _m_=(_m_|(_c_<<(1<<_t_))) +// + +#define VER_SET_CONDITION(_m_,_t_,_c_) \ + ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_))) + +ULONGLONG +NTAPI +VerSetConditionMask( + IN ULONGLONG ConditionMask, + IN ULONG TypeMask, + IN UCHAR Condition + ); +// +// end_winnt +// + +NTSYSAPI +NTSTATUS +RtlGetVersion( + OUT PRTL_OSVERSIONINFOW lpVersionInformation + ); + +NTSYSAPI +NTSTATUS +RtlVerifyVersionInfo( + IN PRTL_OSVERSIONINFOEXW VersionInfo, + IN ULONG TypeMask, + IN ULONGLONG ConditionMask + ); + +// + +// +// Interlocked bit manipulation interfaces +// + +NTSYSAPI +ULONG +FASTCALL +RtlInterlockedSetBits ( + IN OUT PULONG Flags, + IN ULONG Flag + ); + +NTSYSAPI +ULONG +FASTCALL +RtlInterlockedClearBits ( + IN OUT PULONG Flags, + IN ULONG Flag + ); + +NTSYSAPI +ULONG +FASTCALL +RtlInterlockedSetClearBits ( + IN OUT PULONG Flags, + IN ULONG sFlag, + IN ULONG cFlag + ); + + +// +// These are for when the compiler has fixes in for these intrinsics +// +#if (_MSC_FULL_VER > 13009037) || !defined (_M_IX86) + +#define RtlInterlockedSetBits(Flags, Flag) \ + InterlockedOr ((PLONG) (Flags), Flag) + +#define RtlInterlockedAndBits(Flags, Flag) \ + InterlockedAnd ((PLONG) (Flags), Flag) + +#define RtlInterlockedClearBits(Flags, Flag) \ + RtlInterlockedAndBits (Flags, ~(Flag)) + +#define RtlInterlockedXorBits(Flags, Flag) \ + InterlockedXor (Flags, Flag) + + +#define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \ + (VOID) RtlInterlockedSetBits (Flags, Flag) + +#define RtlInterlockedAndBitsDiscardReturn(Flags, Flag) \ + (VOID) RtlInterlockedAndBits (Flags, Flag) + +#define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \ + RtlInterlockedAndBitsDiscardReturn (Flags, ~(Flag)) + +#else + +#if defined (_X86_) && !defined(MIDL_PASS) + +FORCEINLINE +VOID +RtlInterlockedSetBitsDiscardReturn( + IN OUT PULONG Flags, + IN ULONG Flag + ) +{ + __asm { + mov ecx, Flags + mov eax, Flag +#if defined (NT_UP) + or [ecx], eax +#else + lock or [ecx], eax +#endif + } +} + +FORCEINLINE +VOID +RtlInterlockedAndBitsDiscardReturn( + IN OUT PULONG Flags, + IN ULONG Flag + ) +{ + __asm { + mov ecx, Flags + mov eax, Flag +#if defined (NT_UP) + and [ecx], eax +#else + lock and [ecx], eax +#endif + } +} + +#define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \ + (VOID) RtlInterlockedAndBitsDiscardReturn ((Flags), ~(Flag)) + +#else + +#define RtlInterlockedSetBitsDiscardReturn(Flags, Flag) \ + (VOID) RtlInterlockedSetBits ((Flags), (Flag)) + +#define RtlInterlockedClearBitsDiscardReturn(Flags, Flag) \ + (VOID) RtlInterlockedClearBits ((Flags), (Flag)) + +#endif /* #if defined(_X86_) && !defined(MIDL_PASS) */ + +#endif + +// +// Component name filter id enumeration and levels. +// + +#define DPFLTR_ERROR_LEVEL 0 +#define DPFLTR_WARNING_LEVEL 1 +#define DPFLTR_TRACE_LEVEL 2 +#define DPFLTR_INFO_LEVEL 3 +#define DPFLTR_MASK 0x80000000 + +typedef enum _DPFLTR_TYPE { + DPFLTR_SYSTEM_ID = 0, + DPFLTR_SMSS_ID = 1, + DPFLTR_SETUP_ID = 2, + DPFLTR_NTFS_ID = 3, + DPFLTR_FSTUB_ID = 4, + DPFLTR_CRASHDUMP_ID = 5, + DPFLTR_CDAUDIO_ID = 6, + DPFLTR_CDROM_ID = 7, + DPFLTR_CLASSPNP_ID = 8, + DPFLTR_DISK_ID = 9, + DPFLTR_REDBOOK_ID = 10, + DPFLTR_STORPROP_ID = 11, + DPFLTR_SCSIPORT_ID = 12, + DPFLTR_SCSIMINIPORT_ID = 13, + DPFLTR_CONFIG_ID = 14, + DPFLTR_I8042PRT_ID = 15, + DPFLTR_SERMOUSE_ID = 16, + DPFLTR_LSERMOUS_ID = 17, + DPFLTR_KBDHID_ID = 18, + DPFLTR_MOUHID_ID = 19, + DPFLTR_KBDCLASS_ID = 20, + DPFLTR_MOUCLASS_ID = 21, + DPFLTR_TWOTRACK_ID = 22, + DPFLTR_WMILIB_ID = 23, + DPFLTR_ACPI_ID = 24, + DPFLTR_AMLI_ID = 25, + DPFLTR_HALIA64_ID = 26, + DPFLTR_VIDEO_ID = 27, + DPFLTR_SVCHOST_ID = 28, + DPFLTR_VIDEOPRT_ID = 29, + DPFLTR_TCPIP_ID = 30, + DPFLTR_DMSYNTH_ID = 31, + DPFLTR_NTOSPNP_ID = 32, + DPFLTR_FASTFAT_ID = 33, + DPFLTR_SAMSS_ID = 34, + DPFLTR_PNPMGR_ID = 35, + DPFLTR_NETAPI_ID = 36, + DPFLTR_SCSERVER_ID = 37, + DPFLTR_SCCLIENT_ID = 38, + DPFLTR_SERIAL_ID = 39, + DPFLTR_SERENUM_ID = 40, + DPFLTR_UHCD_ID = 41, + DPFLTR_BOOTOK_ID = 42, + DPFLTR_BOOTVRFY_ID = 43, + DPFLTR_RPCPROXY_ID = 44, + DPFLTR_AUTOCHK_ID = 45, + DPFLTR_DCOMSS_ID = 46, + DPFLTR_UNIMODEM_ID = 47, + DPFLTR_SIS_ID = 48, + DPFLTR_FLTMGR_ID = 49, + DPFLTR_WMICORE_ID = 50, + DPFLTR_BURNENG_ID = 51, + DPFLTR_IMAPI_ID = 52, + DPFLTR_SXS_ID = 53, + DPFLTR_FUSION_ID = 54, + DPFLTR_IDLETASK_ID = 55, + DPFLTR_SOFTPCI_ID = 56, + DPFLTR_TAPE_ID = 57, + DPFLTR_MCHGR_ID = 58, + DPFLTR_IDEP_ID = 59, + DPFLTR_PCIIDE_ID = 60, + DPFLTR_FLOPPY_ID = 61, + DPFLTR_FDC_ID = 62, + DPFLTR_TERMSRV_ID = 63, + DPFLTR_W32TIME_ID = 64, + DPFLTR_PREFETCHER_ID = 65, + DPFLTR_RSFILTER_ID = 66, + DPFLTR_FCPORT_ID = 67, + DPFLTR_PCI_ID = 68, + DPFLTR_DMIO_ID = 69, + DPFLTR_DMCONFIG_ID = 70, + DPFLTR_DMADMIN_ID = 71, + DPFLTR_WSOCKTRANSPORT_ID = 72, + DPFLTR_VSS_ID = 73, + DPFLTR_PNPMEM_ID = 74, + DPFLTR_PROCESSOR_ID = 75, + DPFLTR_DMSERVER_ID = 76, + DPFLTR_SR_ID = 77, + DPFLTR_INFINIBAND_ID = 78, + DPFLTR_IHVDRIVER_ID = 79, + DPFLTR_IHVVIDEO_ID = 80, + DPFLTR_IHVAUDIO_ID = 81, + DPFLTR_IHVNETWORK_ID = 82, + DPFLTR_IHVSTREAMING_ID = 83, + DPFLTR_IHVBUS_ID = 84, + DPFLTR_HPS_ID = 85, + DPFLTR_RTLTHREADPOOL_ID = 86, + DPFLTR_LDR_ID = 87, + DPFLTR_TCPIP6_ID = 88, + DPFLTR_ISAPNP_ID = 89, + DPFLTR_SHPC_ID = 90, + DPFLTR_STORPORT_ID = 91, + DPFLTR_STORMINIPORT_ID = 92, + DPFLTR_PRINTSPOOLER_ID = 93, + DPFLTR_ENDOFTABLE_ID +} DPFLTR_TYPE; + + +#ifndef _PO_DDK_ +#define _PO_DDK_ + +// begin_winnt + +typedef enum _SYSTEM_POWER_STATE { + PowerSystemUnspecified = 0, + PowerSystemWorking = 1, + PowerSystemSleeping1 = 2, + PowerSystemSleeping2 = 3, + PowerSystemSleeping3 = 4, + PowerSystemHibernate = 5, + PowerSystemShutdown = 6, + PowerSystemMaximum = 7 +} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE; + +#define POWER_SYSTEM_MAXIMUM 7 + +typedef enum { + PowerActionNone = 0, + PowerActionReserved, + PowerActionSleep, + PowerActionHibernate, + PowerActionShutdown, + PowerActionShutdownReset, + PowerActionShutdownOff, + PowerActionWarmEject +} POWER_ACTION, *PPOWER_ACTION; + +typedef enum _DEVICE_POWER_STATE { + PowerDeviceUnspecified = 0, + PowerDeviceD0, + PowerDeviceD1, + PowerDeviceD2, + PowerDeviceD3, + PowerDeviceMaximum +} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; + +// end_winnt + +typedef union _POWER_STATE { + SYSTEM_POWER_STATE SystemState; + DEVICE_POWER_STATE DeviceState; +} POWER_STATE, *PPOWER_STATE; + +typedef enum _POWER_STATE_TYPE { + SystemPowerState = 0, + DevicePowerState +} POWER_STATE_TYPE, *PPOWER_STATE_TYPE; + +// +// Generic power related IOCTLs +// + +#define IOCTL_QUERY_DEVICE_POWER_STATE \ + CTL_CODE(FILE_DEVICE_BATTERY, 0x0, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_SET_DEVICE_WAKE \ + CTL_CODE(FILE_DEVICE_BATTERY, 0x1, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_CANCEL_DEVICE_WAKE \ + CTL_CODE(FILE_DEVICE_BATTERY, 0x2, METHOD_BUFFERED, FILE_WRITE_ACCESS) + + +// +// Defines for W32 interfaces +// + +// begin_winnt + +#define ES_SYSTEM_REQUIRED ((ULONG)0x00000001) +#define ES_DISPLAY_REQUIRED ((ULONG)0x00000002) +#define ES_USER_PRESENT ((ULONG)0x00000004) +#define ES_CONTINUOUS ((ULONG)0x80000000) + +typedef ULONG EXECUTION_STATE; + +typedef enum { + LT_DONT_CARE, + LT_LOWEST_LATENCY +} LATENCY_TIME; + + +#endif // !_PO_DDK_ + +// +// Define the various device type values. Note that values used by Microsoft +// Corporation are in the range 0-32767, and 32768-65535 are reserved for use +// by customers. +// + +#define DEVICE_TYPE ULONG + +#define FILE_DEVICE_BEEP 0x00000001 +#define FILE_DEVICE_CD_ROM 0x00000002 +#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 +#define FILE_DEVICE_CONTROLLER 0x00000004 +#define FILE_DEVICE_DATALINK 0x00000005 +#define FILE_DEVICE_DFS 0x00000006 +#define FILE_DEVICE_DISK 0x00000007 +#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 +#define FILE_DEVICE_FILE_SYSTEM 0x00000009 +#define FILE_DEVICE_INPORT_PORT 0x0000000a +#define FILE_DEVICE_KEYBOARD 0x0000000b +#define FILE_DEVICE_MAILSLOT 0x0000000c +#define FILE_DEVICE_MIDI_IN 0x0000000d +#define FILE_DEVICE_MIDI_OUT 0x0000000e +#define FILE_DEVICE_MOUSE 0x0000000f +#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 +#define FILE_DEVICE_NAMED_PIPE 0x00000011 +#define FILE_DEVICE_NETWORK 0x00000012 +#define FILE_DEVICE_NETWORK_BROWSER 0x00000013 +#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 +#define FILE_DEVICE_NULL 0x00000015 +#define FILE_DEVICE_PARALLEL_PORT 0x00000016 +#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 +#define FILE_DEVICE_PRINTER 0x00000018 +#define FILE_DEVICE_SCANNER 0x00000019 +#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a +#define FILE_DEVICE_SERIAL_PORT 0x0000001b +#define FILE_DEVICE_SCREEN 0x0000001c +#define FILE_DEVICE_SOUND 0x0000001d +#define FILE_DEVICE_STREAMS 0x0000001e +#define FILE_DEVICE_TAPE 0x0000001f +#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 +#define FILE_DEVICE_TRANSPORT 0x00000021 +#define FILE_DEVICE_UNKNOWN 0x00000022 +#define FILE_DEVICE_VIDEO 0x00000023 +#define FILE_DEVICE_VIRTUAL_DISK 0x00000024 +#define FILE_DEVICE_WAVE_IN 0x00000025 +#define FILE_DEVICE_WAVE_OUT 0x00000026 +#define FILE_DEVICE_8042_PORT 0x00000027 +#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 +#define FILE_DEVICE_BATTERY 0x00000029 +#define FILE_DEVICE_BUS_EXTENDER 0x0000002a +#define FILE_DEVICE_MODEM 0x0000002b +#define FILE_DEVICE_VDM 0x0000002c +#define FILE_DEVICE_MASS_STORAGE 0x0000002d +#define FILE_DEVICE_SMB 0x0000002e +#define FILE_DEVICE_KS 0x0000002f +#define FILE_DEVICE_CHANGER 0x00000030 +#define FILE_DEVICE_SMARTCARD 0x00000031 +#define FILE_DEVICE_ACPI 0x00000032 +#define FILE_DEVICE_DVD 0x00000033 +#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 +#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 +#define FILE_DEVICE_DFS_VOLUME 0x00000036 +#define FILE_DEVICE_SERENUM 0x00000037 +#define FILE_DEVICE_TERMSRV 0x00000038 +#define FILE_DEVICE_KSEC 0x00000039 +#define FILE_DEVICE_FIPS 0x0000003A + +// +// Macro definition for defining IOCTL and FSCTL function control codes. Note +// that function codes 0-2047 are reserved for Microsoft Corporation, and +// 2048-4095 are reserved for customers. +// + +#define CTL_CODE( DeviceType, Function, Method, Access ) ( \ + ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ +) + +// +// Macro to extract device type out of the device io control code +// +#define DEVICE_TYPE_FROM_CTL_CODE(ctrlCode) (((ULONG)(ctrlCode & 0xffff0000)) >> 16) + +// +// Define the method codes for how buffers are passed for I/O and FS controls +// + +#define METHOD_BUFFERED 0 +#define METHOD_IN_DIRECT 1 +#define METHOD_OUT_DIRECT 2 +#define METHOD_NEITHER 3 + +// +// Define the access check value for any access +// +// +// The FILE_READ_ACCESS and FILE_WRITE_ACCESS constants are also defined in +// ntioapi.h as FILE_READ_DATA and FILE_WRITE_DATA. The values for these +// constants *MUST* always be in sync. +// +// +// FILE_SPECIAL_ACCESS is checked by the NT I/O system the same as FILE_ANY_ACCESS. +// The file systems, however, may add additional access checks for I/O and FS controls +// that use this value. +// + + +#define FILE_ANY_ACCESS 0 +#define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) +#define FILE_READ_ACCESS ( 0x0001 ) // file & pipe +#define FILE_WRITE_ACCESS ( 0x0002 ) // file & pipe + +#define PROCESS_DUP_HANDLE (0x0040) // winnt +#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ + 0xFFF) +// begin_nthal + +#if defined(_WIN64) + +#define MAXIMUM_PROCESSORS 64 + +#else + +#define MAXIMUM_PROCESSORS 32 + +#endif + +// end_nthal + +// end_winnt + +// +// Thread Specific Access Rights +// + +#define THREAD_TERMINATE (0x0001) // winnt +#define THREAD_SET_INFORMATION (0x0020) // winnt + +#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ + 0x3FF) + +// +// ClientId +// + +typedef struct _CLIENT_ID { + HANDLE UniqueProcess; + HANDLE UniqueThread; +} CLIENT_ID; +typedef CLIENT_ID *PCLIENT_ID; + +// +// Thread Environment Block (and portable part of Thread Information Block) +// + +// +// NT_TIB - Thread Information Block - Portable part. +// +// This is the subsystem portable part of the Thread Information Block. +// It appears as the first part of the TEB for all threads which have +// a user mode component. +// +// + +// begin_winnt + +typedef struct _NT_TIB { + struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; + PVOID StackBase; + PVOID StackLimit; + PVOID SubSystemTib; + union { + PVOID FiberData; + ULONG Version; + }; + PVOID ArbitraryUserPointer; + struct _NT_TIB *Self; +} NT_TIB; +typedef NT_TIB *PNT_TIB; + +// +// 32 and 64 bit specific version for wow64 and the debugger +// +typedef struct _NT_TIB32 { + ULONG ExceptionList; + ULONG StackBase; + ULONG StackLimit; + ULONG SubSystemTib; + union { + ULONG FiberData; + ULONG Version; + }; + ULONG ArbitraryUserPointer; + ULONG Self; +} NT_TIB32, *PNT_TIB32; + +typedef struct _NT_TIB64 { + ULONG64 ExceptionList; + ULONG64 StackBase; + ULONG64 StackLimit; + ULONG64 SubSystemTib; + union { + ULONG64 FiberData; + ULONG Version; + }; + ULONG64 ArbitraryUserPointer; + ULONG64 Self; +} NT_TIB64, *PNT_TIB64; + +// +// Process Information Classes +// + +typedef enum _PROCESSINFOCLASS { + ProcessBasicInformation, + ProcessQuotaLimits, + ProcessIoCounters, + ProcessVmCounters, + ProcessTimes, + ProcessBasePriority, + ProcessRaisePriority, + ProcessDebugPort, + ProcessExceptionPort, + ProcessAccessToken, + ProcessLdtInformation, + ProcessLdtSize, + ProcessDefaultHardErrorMode, + ProcessIoPortHandlers, // Note: this is kernel mode only + ProcessPooledUsageAndLimits, + ProcessWorkingSetWatch, + ProcessUserModeIOPL, + ProcessEnableAlignmentFaultFixup, + ProcessPriorityClass, + ProcessWx86Information, + ProcessHandleCount, + ProcessAffinityMask, + ProcessPriorityBoost, + ProcessDeviceMap, + ProcessSessionInformation, + ProcessForegroundInformation, + ProcessWow64Information, + ProcessImageFileName, + ProcessLUIDDeviceMapsEnabled, + ProcessBreakOnTermination, + ProcessDebugObjectHandle, + ProcessDebugFlags, + ProcessHandleTracing, + MaxProcessInfoClass // MaxProcessInfoClass should always be the last enum + } PROCESSINFOCLASS; + +// +// Thread Information Classes +// + +typedef enum _THREADINFOCLASS { + ThreadBasicInformation, + ThreadTimes, + ThreadPriority, + ThreadBasePriority, + ThreadAffinityMask, + ThreadImpersonationToken, + ThreadDescriptorTableEntry, + ThreadEnableAlignmentFaultFixup, + ThreadEventPair_Reusable, + ThreadQuerySetWin32StartAddress, + ThreadZeroTlsCell, + ThreadPerformanceCount, + ThreadAmILastThread, + ThreadIdealProcessor, + ThreadPriorityBoost, + ThreadSetTlsArrayAddress, + ThreadIsIoPending, + ThreadHideFromDebugger, + ThreadBreakOnTermination, + MaxThreadInfoClass + } THREADINFOCLASS; +// +// Process Information Structures +// + +// +// PageFaultHistory Information +// NtQueryInformationProcess using ProcessWorkingSetWatch +// +typedef struct _PROCESS_WS_WATCH_INFORMATION { + PVOID FaultingPc; + PVOID FaultingVa; +} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; + +// +// Basic Process Information +// NtQueryInformationProcess using ProcessBasicInfo +// + +typedef struct _PROCESS_BASIC_INFORMATION { + NTSTATUS ExitStatus; + PPEB PebBaseAddress; + ULONG_PTR AffinityMask; + KPRIORITY BasePriority; + ULONG_PTR UniqueProcessId; + ULONG_PTR InheritedFromUniqueProcessId; +} PROCESS_BASIC_INFORMATION; +typedef PROCESS_BASIC_INFORMATION *PPROCESS_BASIC_INFORMATION; + + +// +// Process Device Map information +// NtQueryInformationProcess using ProcessDeviceMap +// NtSetInformationProcess using ProcessDeviceMap +// + +typedef struct _PROCESS_DEVICEMAP_INFORMATION { + union { + struct { + HANDLE DirectoryHandle; + } Set; + struct { + ULONG DriveMap; + UCHAR DriveType[ 32 ]; + } Query; + }; +} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; + +typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX { + union { + struct { + HANDLE DirectoryHandle; + } Set; + struct { + ULONG DriveMap; + UCHAR DriveType[ 32 ]; + } Query; + }; + ULONG Flags; // specifies that the query type +} PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX; + +// +// PROCESS_DEVICEMAP_INFORMATION_EX flags +// +#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001 + +// +// Multi-User Session specific Process Information +// NtQueryInformationProcess using ProcessSessionInformation +// + +typedef struct _PROCESS_SESSION_INFORMATION { + ULONG SessionId; +} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; + + +typedef struct _PROCESS_HANDLE_TRACING_ENABLE { + ULONG Flags; +} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE; + +#define PROCESS_HANDLE_TRACING_MAX_STACKS 16 + +typedef struct _PROCESS_HANDLE_TRACING_ENTRY { + HANDLE Handle; + CLIENT_ID ClientId; + ULONG Type; + PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS]; +} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY; + +typedef struct _PROCESS_HANDLE_TRACING_QUERY { + HANDLE Handle; + ULONG TotalTraces; + PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1]; +} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY; + +// +// Process Quotas +// NtQueryInformationProcess using ProcessQuotaLimits +// NtQueryInformationProcess using ProcessPooledQuotaLimits +// NtSetInformationProcess using ProcessQuotaLimits +// + +// begin_winnt + +typedef struct _QUOTA_LIMITS { + SIZE_T PagedPoolLimit; + SIZE_T NonPagedPoolLimit; + SIZE_T MinimumWorkingSetSize; + SIZE_T MaximumWorkingSetSize; + SIZE_T PagefileLimit; + LARGE_INTEGER TimeLimit; +} QUOTA_LIMITS; +typedef QUOTA_LIMITS *PQUOTA_LIMITS; + +// end_winnt + +// +// Process I/O Counters +// NtQueryInformationProcess using ProcessIoCounters +// + +// begin_winnt +typedef struct _IO_COUNTERS { + ULONGLONG ReadOperationCount; + ULONGLONG WriteOperationCount; + ULONGLONG OtherOperationCount; + ULONGLONG ReadTransferCount; + ULONGLONG WriteTransferCount; + ULONGLONG OtherTransferCount; +} IO_COUNTERS; +typedef IO_COUNTERS *PIO_COUNTERS; + +// end_winnt + +// +// Process Virtual Memory Counters +// NtQueryInformationProcess using ProcessVmCounters +// + +typedef struct _VM_COUNTERS { + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; + ULONG PageFaultCount; + SIZE_T PeakWorkingSetSize; + SIZE_T WorkingSetSize; + SIZE_T QuotaPeakPagedPoolUsage; + SIZE_T QuotaPagedPoolUsage; + SIZE_T QuotaPeakNonPagedPoolUsage; + SIZE_T QuotaNonPagedPoolUsage; + SIZE_T PagefileUsage; + SIZE_T PeakPagefileUsage; +} VM_COUNTERS; +typedef VM_COUNTERS *PVM_COUNTERS; + +typedef struct _VM_COUNTERS_EX { + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; + ULONG PageFaultCount; + SIZE_T PeakWorkingSetSize; + SIZE_T WorkingSetSize; + SIZE_T QuotaPeakPagedPoolUsage; + SIZE_T QuotaPagedPoolUsage; + SIZE_T QuotaPeakNonPagedPoolUsage; + SIZE_T QuotaNonPagedPoolUsage; + SIZE_T PagefileUsage; + SIZE_T PeakPagefileUsage; + SIZE_T PrivateUsage; +} VM_COUNTERS_EX; +typedef VM_COUNTERS_EX *PVM_COUNTERS_EX; + +// +// Process Pooled Quota Usage and Limits +// NtQueryInformationProcess using ProcessPooledUsageAndLimits +// + +typedef struct _POOLED_USAGE_AND_LIMITS { + SIZE_T PeakPagedPoolUsage; + SIZE_T PagedPoolUsage; + SIZE_T PagedPoolLimit; + SIZE_T PeakNonPagedPoolUsage; + SIZE_T NonPagedPoolUsage; + SIZE_T NonPagedPoolLimit; + SIZE_T PeakPagefileUsage; + SIZE_T PagefileUsage; + SIZE_T PagefileLimit; +} POOLED_USAGE_AND_LIMITS; +typedef POOLED_USAGE_AND_LIMITS *PPOOLED_USAGE_AND_LIMITS; + +// +// Process Security Context Information +// NtSetInformationProcess using ProcessAccessToken +// PROCESS_SET_ACCESS_TOKEN access to the process is needed +// to use this info level. +// + +typedef struct _PROCESS_ACCESS_TOKEN { + + // + // Handle to Primary token to assign to the process. + // TOKEN_ASSIGN_PRIMARY access to this token is needed. + // + + HANDLE Token; + + // + // Handle to the initial thread of the process. + // A process's access token can only be changed if the process has + // no threads or one thread. If the process has no threads, this + // field must be set to NULL. Otherwise, it must contain a handle + // open to the process's only thread. THREAD_QUERY_INFORMATION access + // is needed via this handle. + + HANDLE Thread; + +} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; + +// +// Process/Thread System and User Time +// NtQueryInformationProcess using ProcessTimes +// NtQueryInformationThread using ThreadTimes +// + +typedef struct _KERNEL_USER_TIMES { + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; + LARGE_INTEGER KernelTime; + LARGE_INTEGER UserTime; +} KERNEL_USER_TIMES; +typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES; +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenProcess ( + OUT PHANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN PCLIENT_ID ClientId OPTIONAL + ); +#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 ) +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryInformationProcess( + IN HANDLE ProcessHandle, + IN PROCESSINFOCLASS ProcessInformationClass, + OUT PVOID ProcessInformation, + IN ULONG ProcessInformationLength, + OUT PULONG ReturnLength OPTIONAL + ); +#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSetInformationThread( + IN HANDLE ThreadHandle, + IN THREADINFOCLASS ThreadInformationClass, + IN PVOID ThreadInformation, + IN ULONG ThreadInformationLength + ); + + +// +// Security operation mode of the system is held in a control +// longword. +// + +typedef ULONG LSA_OPERATIONAL_MODE, *PLSA_OPERATIONAL_MODE; + +// +// Used by a logon process to indicate what type of logon is being +// requested. +// + +typedef enum _SECURITY_LOGON_TYPE { + Interactive = 2, // Interactively logged on (locally or remotely) + Network, // Accessing system via network + Batch, // Started via a batch queue + Service, // Service started by service controller + Proxy, // Proxy logon + Unlock, // Unlock workstation + NetworkCleartext, // Network logon with cleartext credentials + NewCredentials, // Clone caller, new default credentials + RemoteInteractive, // Remote, yet interactive. Terminal server + CachedInteractive // Try cached credentials without hitting the net. +} SECURITY_LOGON_TYPE, *PSECURITY_LOGON_TYPE; + +typedef UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; +typedef STRING LSA_STRING, *PLSA_STRING; +typedef OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES, *PLSA_OBJECT_ATTRIBUTES; + +NTSTATUS +NTAPI +LsaRegisterLogonProcess ( + IN PLSA_STRING LogonProcessName, + OUT PHANDLE LsaHandle, + OUT PLSA_OPERATIONAL_MODE SecurityMode + ); + + +NTSTATUS +NTAPI +LsaLogonUser ( + IN HANDLE LsaHandle, + IN PLSA_STRING OriginName, + IN SECURITY_LOGON_TYPE LogonType, + IN ULONG AuthenticationPackage, + IN PVOID AuthenticationInformation, + IN ULONG AuthenticationInformationLength, + IN PTOKEN_GROUPS LocalGroups OPTIONAL, + IN PTOKEN_SOURCE SourceContext, + OUT PVOID *ProfileBuffer, + OUT PULONG ProfileBufferLength, + OUT PLUID LogonId, + OUT PHANDLE Token, + OUT PQUOTA_LIMITS Quotas, + OUT PNTSTATUS SubStatus + ); + + + +NTSTATUS +NTAPI +LsaFreeReturnBuffer ( + IN PVOID Buffer + ); + + +#ifndef _NTLSA_IFS_ +#define _NTLSA_IFS_ +#endif + +///////////////////////////////////////////////////////////////////////// +// // +// Name of the MSV1_0 authentication package // +// // +///////////////////////////////////////////////////////////////////////// + +#define MSV1_0_PACKAGE_NAME "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" +#define MSV1_0_PACKAGE_NAMEW L"MICROSOFT_AUTHENTICATION_PACKAGE_V1_0" +#define MSV1_0_PACKAGE_NAMEW_LENGTH sizeof(MSV1_0_PACKAGE_NAMEW) - sizeof(WCHAR) + +// +// Location of MSV authentication package data +// +#define MSV1_0_SUBAUTHENTICATION_KEY "SYSTEM\\CurrentControlSet\\Control\\Lsa\\MSV1_0" +#define MSV1_0_SUBAUTHENTICATION_VALUE "Auth" + + +///////////////////////////////////////////////////////////////////////// +// // +// Widely used MSV1_0 data types // +// // +///////////////////////////////////////////////////////////////////////// + + + +/////////////////////////////////////////////////////////////////////////////// +// // +// LOGON Related Data Structures +// +// // +/////////////////////////////////////////////////////////////////////////////// + +// +// When a LsaLogonUser() call is dispatched to the MsV1_0 authentication +// package, the beginning of the AuthenticationInformation buffer is +// cast to a MSV1_0_LOGON_SUBMIT_TYPE to determine the type of logon +// being requested. Similarly, upon return, the type of profile buffer +// can be determined by typecasting it to a MSV_1_0_PROFILE_BUFFER_TYPE. +// + +// +// MSV1.0 LsaLogonUser() submission message types. +// + +typedef enum _MSV1_0_LOGON_SUBMIT_TYPE { + MsV1_0InteractiveLogon = 2, + MsV1_0Lm20Logon, + MsV1_0NetworkLogon, + MsV1_0SubAuthLogon, + MsV1_0WorkstationUnlockLogon = 7 +} MSV1_0_LOGON_SUBMIT_TYPE, *PMSV1_0_LOGON_SUBMIT_TYPE; + + +// +// MSV1.0 LsaLogonUser() profile buffer types. +// + +typedef enum _MSV1_0_PROFILE_BUFFER_TYPE { + MsV1_0InteractiveProfile = 2, + MsV1_0Lm20LogonProfile, + MsV1_0SmartCardProfile +} MSV1_0_PROFILE_BUFFER_TYPE, *PMSV1_0_PROFILE_BUFFER_TYPE; + + + + + + +// +// MsV1_0InteractiveLogon +// +// The AuthenticationInformation buffer of an LsaLogonUser() call to +// perform an interactive logon contains the following data structure: +// + +typedef struct _MSV1_0_INTERACTIVE_LOGON { + MSV1_0_LOGON_SUBMIT_TYPE MessageType; + UNICODE_STRING LogonDomainName; + UNICODE_STRING UserName; + UNICODE_STRING Password; +} MSV1_0_INTERACTIVE_LOGON, *PMSV1_0_INTERACTIVE_LOGON; + +// +// Where: +// +// MessageType - Contains the type of logon being requested. This +// field must be set to MsV1_0InteractiveLogon. +// +// UserName - Is a string representing the user's account name. The +// name may be up to 255 characters long. The name is treated case +// insensitive. +// +// Password - Is a string containing the user's cleartext password. +// The password may be up to 255 characters long and contain any +// UNICODE value. +// +// + + +// +// The ProfileBuffer returned upon a successful logon of this type +// contains the following data structure: +// + +typedef struct _MSV1_0_INTERACTIVE_PROFILE { + MSV1_0_PROFILE_BUFFER_TYPE MessageType; + USHORT LogonCount; + USHORT BadPasswordCount; + LARGE_INTEGER LogonTime; + LARGE_INTEGER LogoffTime; + LARGE_INTEGER KickOffTime; + LARGE_INTEGER PasswordLastSet; + LARGE_INTEGER PasswordCanChange; + LARGE_INTEGER PasswordMustChange; + UNICODE_STRING LogonScript; + UNICODE_STRING HomeDirectory; + UNICODE_STRING FullName; + UNICODE_STRING ProfilePath; + UNICODE_STRING HomeDirectoryDrive; + UNICODE_STRING LogonServer; + ULONG UserFlags; +} MSV1_0_INTERACTIVE_PROFILE, *PMSV1_0_INTERACTIVE_PROFILE; + +// +// where: +// +// MessageType - Identifies the type of profile data being returned. +// Contains the type of logon being requested. This field must +// be set to MsV1_0InteractiveProfile. +// +// LogonCount - Number of times the user is currently logged on. +// +// BadPasswordCount - Number of times a bad password was applied to +// the account since last successful logon. +// +// LogonTime - Time when user last logged on. This is an absolute +// format NT standard time value. +// +// LogoffTime - Time when user should log off. This is an absolute +// format NT standard time value. +// +// KickOffTime - Time when system should force user logoff. This is +// an absolute format NT standard time value. +// +// PasswordLastChanged - Time and date the password was last +// changed. This is an absolute format NT standard time +// value. +// +// PasswordCanChange - Time and date when the user can change the +// password. This is an absolute format NT time value. To +// prevent a password from ever changing, set this field to a +// date very far into the future. +// +// PasswordMustChange - Time and date when the user must change the +// password. If the user can never change the password, this +// field is undefined. This is an absolute format NT time +// value. +// +// LogonScript - The (relative) path to the account's logon +// script. +// +// HomeDirectory - The home directory for the user. +// + + +// +// MsV1_0Lm20Logon and MsV1_0NetworkLogon +// +// The AuthenticationInformation buffer of an LsaLogonUser() call to +// perform an network logon contains the following data structure: +// +// MsV1_0NetworkLogon logon differs from MsV1_0Lm20Logon in that the +// ParameterControl field exists. +// + +#define MSV1_0_CHALLENGE_LENGTH 8 +#define MSV1_0_USER_SESSION_KEY_LENGTH 16 +#define MSV1_0_LANMAN_SESSION_KEY_LENGTH 8 + + + +// +// Values for ParameterControl. +// + +#define MSV1_0_CLEARTEXT_PASSWORD_ALLOWED 0x02 +#define MSV1_0_UPDATE_LOGON_STATISTICS 0x04 +#define MSV1_0_RETURN_USER_PARAMETERS 0x08 +#define MSV1_0_DONT_TRY_GUEST_ACCOUNT 0x10 +#define MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT 0x20 +#define MSV1_0_RETURN_PASSWORD_EXPIRY 0x40 +// this next flag says that CaseInsensitiveChallengeResponse +// (aka LmResponse) contains a client challenge in the first 8 bytes +#define MSV1_0_USE_CLIENT_CHALLENGE 0x80 +#define MSV1_0_TRY_GUEST_ACCOUNT_ONLY 0x100 +#define MSV1_0_RETURN_PROFILE_PATH 0x200 +#define MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY 0x400 +#define MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT 0x800 +#define MSV1_0_DISABLE_PERSONAL_FALLBACK 0x00001000 +#define MSV1_0_ALLOW_FORCE_GUEST 0x00002000 +#define MSV1_0_SUBAUTHENTICATION_DLL_EX 0x00100000 + +// +// The high order byte is a value indicating the SubAuthentication DLL. +// Zero indicates no SubAuthentication DLL. +// +#define MSV1_0_SUBAUTHENTICATION_DLL 0xFF000000 +#define MSV1_0_SUBAUTHENTICATION_DLL_SHIFT 24 +#define MSV1_0_MNS_LOGON 0x01000000 + +// +// This is the list of subauthentication dlls used in MS +// + +#define MSV1_0_SUBAUTHENTICATION_DLL_RAS 2 +#define MSV1_0_SUBAUTHENTICATION_DLL_IIS 132 + +typedef struct _MSV1_0_LM20_LOGON { + MSV1_0_LOGON_SUBMIT_TYPE MessageType; + UNICODE_STRING LogonDomainName; + UNICODE_STRING UserName; + UNICODE_STRING Workstation; + UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; + STRING CaseSensitiveChallengeResponse; + STRING CaseInsensitiveChallengeResponse; + ULONG ParameterControl; +} MSV1_0_LM20_LOGON, * PMSV1_0_LM20_LOGON; + + + +// +// NT 5.0 SubAuth dlls can use this struct +// + +typedef struct _MSV1_0_SUBAUTH_LOGON{ + MSV1_0_LOGON_SUBMIT_TYPE MessageType; + UNICODE_STRING LogonDomainName; + UNICODE_STRING UserName; + UNICODE_STRING Workstation; + UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; + STRING AuthenticationInfo1; + STRING AuthenticationInfo2; + ULONG ParameterControl; + ULONG SubAuthPackageId; +} MSV1_0_SUBAUTH_LOGON, * PMSV1_0_SUBAUTH_LOGON; + + +// +// Values for UserFlags. +// + +#define LOGON_GUEST 0x01 +#define LOGON_NOENCRYPTION 0x02 +#define LOGON_CACHED_ACCOUNT 0x04 +#define LOGON_USED_LM_PASSWORD 0x08 +#define LOGON_EXTRA_SIDS 0x20 +#define LOGON_SUBAUTH_SESSION_KEY 0x40 +#define LOGON_SERVER_TRUST_ACCOUNT 0x80 +#define LOGON_NTLMV2_ENABLED 0x100 // says DC understands NTLMv2 +#define LOGON_RESOURCE_GROUPS 0x200 +#define LOGON_PROFILE_PATH_RETURNED 0x400 + +// +// The high order byte is reserved for return by SubAuthentication DLLs. +// + +#define MSV1_0_SUBAUTHENTICATION_FLAGS 0xFF000000 + +// Values returned by the MSV1_0_MNS_LOGON SubAuthentication DLL +#define LOGON_GRACE_LOGON 0x01000000 + +typedef struct _MSV1_0_LM20_LOGON_PROFILE { + MSV1_0_PROFILE_BUFFER_TYPE MessageType; + LARGE_INTEGER KickOffTime; + LARGE_INTEGER LogoffTime; + ULONG UserFlags; + UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; + UNICODE_STRING LogonDomainName; + UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; + UNICODE_STRING LogonServer; + UNICODE_STRING UserParameters; +} MSV1_0_LM20_LOGON_PROFILE, * PMSV1_0_LM20_LOGON_PROFILE; + + +// +// Supplemental credentials structure used for passing credentials into +// MSV1_0 from other packages +// + +#define MSV1_0_OWF_PASSWORD_LENGTH 16 +#define MSV1_0_CRED_LM_PRESENT 0x1 +#define MSV1_0_CRED_NT_PRESENT 0x2 +#define MSV1_0_CRED_VERSION 0 + +typedef struct _MSV1_0_SUPPLEMENTAL_CREDENTIAL { + ULONG Version; + ULONG Flags; + UCHAR LmPassword[MSV1_0_OWF_PASSWORD_LENGTH]; + UCHAR NtPassword[MSV1_0_OWF_PASSWORD_LENGTH]; +} MSV1_0_SUPPLEMENTAL_CREDENTIAL, *PMSV1_0_SUPPLEMENTAL_CREDENTIAL; + + +// +// NTLM3 definitions. +// + +#define MSV1_0_NTLM3_RESPONSE_LENGTH 16 +#define MSV1_0_NTLM3_OWF_LENGTH 16 + +// +// this is the longest amount of time we'll allow challenge response +// pairs to be used. Note that this also has to allow for worst case clock skew +// +#define MSV1_0_MAX_NTLM3_LIFE 129600 // 36 hours (in seconds) +#define MSV1_0_MAX_AVL_SIZE 64000 + +// +// MsvAvFlags bit values +// + +#define MSV1_0_AV_FLAG_FORCE_GUEST 0x00000001 + + +// this is an MSV1_0 private data structure, defining the layout of an NTLM3 response, as sent by a +// client in the NtChallengeResponse field of the NETLOGON_NETWORK_INFO structure. If can be differentiated +// from an old style NT response by its length. This is crude, but it needs to pass through servers and +// the servers' DCs that do not understand NTLM3 but that are willing to pass longer responses. +typedef struct _MSV1_0_NTLM3_RESPONSE { + UCHAR Response[MSV1_0_NTLM3_RESPONSE_LENGTH]; // hash of OWF of password with all the following fields + UCHAR RespType; // id number of response; current is 1 + UCHAR HiRespType; // highest id number understood by client + USHORT Flags; // reserved; must be sent as zero at this version + ULONG MsgWord; // 32 bit message from client to server (for use by auth protocol) + ULONGLONG TimeStamp; // time stamp when client generated response -- NT system time, quad part + UCHAR ChallengeFromClient[MSV1_0_CHALLENGE_LENGTH]; + ULONG AvPairsOff; // offset to start of AvPairs (to allow future expansion) + UCHAR Buffer[1]; // start of buffer with AV pairs (or future stuff -- so use the offset) +} MSV1_0_NTLM3_RESPONSE, *PMSV1_0_NTLM3_RESPONSE; + +#define MSV1_0_NTLM3_INPUT_LENGTH (sizeof(MSV1_0_NTLM3_RESPONSE) - MSV1_0_NTLM3_RESPONSE_LENGTH) + +typedef enum { + MsvAvEOL, // end of list + MsvAvNbComputerName, // server's computer name -- NetBIOS + MsvAvNbDomainName, // server's domain name -- NetBIOS + MsvAvDnsComputerName, // server's computer name -- DNS + MsvAvDnsDomainName, // server's domain name -- DNS + MsvAvDnsTreeName, // server's tree name -- DNS + MsvAvFlags // server's extended flags -- DWORD mask +} MSV1_0_AVID; + +typedef struct _MSV1_0_AV_PAIR { + USHORT AvId; + USHORT AvLen; + // Data is treated as byte array following structure +} MSV1_0_AV_PAIR, *PMSV1_0_AV_PAIR; + + + +/////////////////////////////////////////////////////////////////////////////// +// // +// CALL PACKAGE Related Data Structures // +// // +/////////////////////////////////////////////////////////////////////////////// + + +// +// MSV1.0 LsaCallAuthenticationPackage() submission and response +// message types. +// + +typedef enum _MSV1_0_PROTOCOL_MESSAGE_TYPE { + MsV1_0Lm20ChallengeRequest = 0, // Both submission and response + MsV1_0Lm20GetChallengeResponse, // Both submission and response + MsV1_0EnumerateUsers, // Both submission and response + MsV1_0GetUserInfo, // Both submission and response + MsV1_0ReLogonUsers, // Submission only + MsV1_0ChangePassword, // Both submission and response + MsV1_0ChangeCachedPassword, // Both submission and response + MsV1_0GenericPassthrough, // Both submission and response + MsV1_0CacheLogon, // Submission only, no response + MsV1_0SubAuth, // Both submission and response + MsV1_0DeriveCredential, // Both submission and response + MsV1_0CacheLookup, // Both submission and response + MsV1_0SetProcessOption, // Submission only, no response +} MSV1_0_PROTOCOL_MESSAGE_TYPE, *PMSV1_0_PROTOCOL_MESSAGE_TYPE; + +// end_ntsecapi + +// +// MsV1_0Lm20ChallengeRequest submit buffer and response +// + +typedef struct _MSV1_0_LM20_CHALLENGE_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; +} MSV1_0_LM20_CHALLENGE_REQUEST, *PMSV1_0_LM20_CHALLENGE_REQUEST; + +typedef struct _MSV1_0_LM20_CHALLENGE_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; +} MSV1_0_LM20_CHALLENGE_RESPONSE, *PMSV1_0_LM20_CHALLENGE_RESPONSE; + +// +// MsV1_0Lm20GetChallengeResponse submit buffer and response +// + +#define USE_PRIMARY_PASSWORD 0x01 +#define RETURN_PRIMARY_USERNAME 0x02 +#define RETURN_PRIMARY_LOGON_DOMAINNAME 0x04 +#define RETURN_NON_NT_USER_SESSION_KEY 0x08 +#define GENERATE_CLIENT_CHALLENGE 0x10 +#define GCR_NTLM3_PARMS 0x20 +#define GCR_TARGET_INFO 0x40 // ServerName field contains target info AV pairs +#define RETURN_RESERVED_PARAMETER 0x80 // was 0x10 +#define GCR_ALLOW_NTLM 0x100 +#define GCR_MACHINE_CREDENTIAL 0x400 + +// +// version 1 of the GETCHALLENRESP structure, which was used by RAS and others. +// compiled before the additional fields added to GETCHALLENRESP_REQUEST. +// here to allow sizing operations for backwards compatibility. +// + +typedef struct _MSV1_0_GETCHALLENRESP_REQUEST_V1 { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG ParameterControl; + LUID LogonId; + UNICODE_STRING Password; + UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; +} MSV1_0_GETCHALLENRESP_REQUEST_V1, *PMSV1_0_GETCHALLENRESP_REQUEST_V1; + +typedef struct _MSV1_0_GETCHALLENRESP_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG ParameterControl; + LUID LogonId; + UNICODE_STRING Password; + UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH]; + + // + // the following 3 fields are only present if GCR_NTLM3_PARMS is set in ParameterControl + // + + UNICODE_STRING UserName; + UNICODE_STRING LogonDomainName; + UNICODE_STRING ServerName; // server domain or target info AV pairs +} MSV1_0_GETCHALLENRESP_REQUEST, *PMSV1_0_GETCHALLENRESP_REQUEST; + +typedef struct _MSV1_0_GETCHALLENRESP_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + STRING CaseSensitiveChallengeResponse; + STRING CaseInsensitiveChallengeResponse; + UNICODE_STRING UserName; + UNICODE_STRING LogonDomainName; + UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH]; + UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH]; +} MSV1_0_GETCHALLENRESP_RESPONSE, *PMSV1_0_GETCHALLENRESP_RESPONSE; + +// +// MsV1_0EnumerateUsers submit buffer and response +// + +typedef struct _MSV1_0_ENUMUSERS_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; +} MSV1_0_ENUMUSERS_REQUEST, *PMSV1_0_ENUMUSERS_REQUEST; + +typedef struct _MSV1_0_ENUMUSERS_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG NumberOfLoggedOnUsers; + PLUID LogonIds; + PULONG EnumHandles; +} MSV1_0_ENUMUSERS_RESPONSE, *PMSV1_0_ENUMUSERS_RESPONSE; + +// +// MsV1_0GetUserInfo submit buffer and response +// + +typedef struct _MSV1_0_GETUSERINFO_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + LUID LogonId; +} MSV1_0_GETUSERINFO_REQUEST, *PMSV1_0_GETUSERINFO_REQUEST; + +typedef struct _MSV1_0_GETUSERINFO_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + PSID UserSid; + UNICODE_STRING UserName; + UNICODE_STRING LogonDomainName; + UNICODE_STRING LogonServer; + SECURITY_LOGON_TYPE LogonType; +} MSV1_0_GETUSERINFO_RESPONSE, *PMSV1_0_GETUSERINFO_RESPONSE; + +// begin_winnt + +// +// Define access rights to files and directories +// + +// +// The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in +// devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these +// constants *MUST* always be in sync. +// The values are redefined in devioctl.h because they must be available to +// both DOS and NT. +// + +#define FILE_READ_DATA ( 0x0001 ) // file & pipe +#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory + +#define FILE_WRITE_DATA ( 0x0002 ) // file & pipe +#define FILE_ADD_FILE ( 0x0002 ) // directory + +#define FILE_APPEND_DATA ( 0x0004 ) // file +#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) // directory +#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) // named pipe + + +#define FILE_READ_EA ( 0x0008 ) // file & directory + +#define FILE_WRITE_EA ( 0x0010 ) // file & directory + +#define FILE_EXECUTE ( 0x0020 ) // file +#define FILE_TRAVERSE ( 0x0020 ) // directory + +#define FILE_DELETE_CHILD ( 0x0040 ) // directory + +#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all + +#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) // all + +#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF) + +#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\ + FILE_READ_DATA |\ + FILE_READ_ATTRIBUTES |\ + FILE_READ_EA |\ + SYNCHRONIZE) + + +#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\ + FILE_WRITE_DATA |\ + FILE_WRITE_ATTRIBUTES |\ + FILE_WRITE_EA |\ + FILE_APPEND_DATA |\ + SYNCHRONIZE) + + +#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ + FILE_READ_ATTRIBUTES |\ + FILE_EXECUTE |\ + SYNCHRONIZE) + +// end_winnt + + +// +// Define share access rights to files and directories +// + +#define FILE_SHARE_READ 0x00000001 // winnt +#define FILE_SHARE_WRITE 0x00000002 // winnt +#define FILE_SHARE_DELETE 0x00000004 // winnt +#define FILE_SHARE_VALID_FLAGS 0x00000007 + +// +// Define the file attributes values +// +// Note: 0x00000008 is reserved for use for the old DOS VOLID (volume ID) +// and is therefore not considered valid in NT. +// +// Note: 0x00000010 is reserved for use for the old DOS SUBDIRECTORY flag +// and is therefore not considered valid in NT. This flag has +// been disassociated with file attributes since the other flags are +// protected with READ_ and WRITE_ATTRIBUTES access to the file. +// +// Note: Note also that the order of these flags is set to allow both the +// FAT and the Pinball File Systems to directly set the attributes +// flags in attributes words without having to pick each flag out +// individually. The order of these flags should not be changed! +// + +#define FILE_ATTRIBUTE_READONLY 0x00000001 // winnt +#define FILE_ATTRIBUTE_HIDDEN 0x00000002 // winnt +#define FILE_ATTRIBUTE_SYSTEM 0x00000004 // winnt +//OLD DOS VOLID 0x00000008 + +#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 // winnt +#define FILE_ATTRIBUTE_ARCHIVE 0x00000020 // winnt +#define FILE_ATTRIBUTE_DEVICE 0x00000040 // winnt +#define FILE_ATTRIBUTE_NORMAL 0x00000080 // winnt + +#define FILE_ATTRIBUTE_TEMPORARY 0x00000100 // winnt +#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 // winnt +#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 // winnt +#define FILE_ATTRIBUTE_COMPRESSED 0x00000800 // winnt + +#define FILE_ATTRIBUTE_OFFLINE 0x00001000 // winnt +#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 // winnt +#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 // winnt + +#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 +#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 + +// +// Define the create disposition values +// + +#define FILE_SUPERSEDE 0x00000000 +#define FILE_OPEN 0x00000001 +#define FILE_CREATE 0x00000002 +#define FILE_OPEN_IF 0x00000003 +#define FILE_OVERWRITE 0x00000004 +#define FILE_OVERWRITE_IF 0x00000005 +#define FILE_MAXIMUM_DISPOSITION 0x00000005 + +// +// Define the create/open option flags +// + +#define FILE_DIRECTORY_FILE 0x00000001 +#define FILE_WRITE_THROUGH 0x00000002 +#define FILE_SEQUENTIAL_ONLY 0x00000004 +#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 + +#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 +#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 +#define FILE_NON_DIRECTORY_FILE 0x00000040 +#define FILE_CREATE_TREE_CONNECTION 0x00000080 + +#define FILE_COMPLETE_IF_OPLOCKED 0x00000100 +#define FILE_NO_EA_KNOWLEDGE 0x00000200 +#define FILE_OPEN_FOR_RECOVERY 0x00000400 +#define FILE_RANDOM_ACCESS 0x00000800 + +#define FILE_DELETE_ON_CLOSE 0x00001000 +#define FILE_OPEN_BY_FILE_ID 0x00002000 +#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 +#define FILE_NO_COMPRESSION 0x00008000 + +#define FILE_RESERVE_OPFILTER 0x00100000 +#define FILE_OPEN_REPARSE_POINT 0x00200000 +#define FILE_OPEN_NO_RECALL 0x00400000 +#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 + +#define FILE_COPY_STRUCTURED_STORAGE 0x00000041 +#define FILE_STRUCTURED_STORAGE 0x00000441 + +#define FILE_VALID_OPTION_FLAGS 0x00ffffff +#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 +#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 +#define FILE_VALID_SET_FLAGS 0x00000036 + +// +// Define the I/O status information return values for NtCreateFile/NtOpenFile +// + +#define FILE_SUPERSEDED 0x00000000 +#define FILE_OPENED 0x00000001 +#define FILE_CREATED 0x00000002 +#define FILE_OVERWRITTEN 0x00000003 +#define FILE_EXISTS 0x00000004 +#define FILE_DOES_NOT_EXIST 0x00000005 + +// end_ntddk end_wdm end_nthal + +// +// Define the I/O status information return values for requests for oplocks +// via NtFsControlFile +// + +#define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007 +#define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008 + +// +// Define the I/O status information return values for NtCreateFile/NtOpenFile +// when the sharing access fails but a batch oplock break is in progress +// + +#define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009 + +// +// Define the filter flags for NtNotifyChangeDirectoryFile +// + +#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 // winnt +#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 // winnt +#define FILE_NOTIFY_CHANGE_NAME 0x00000003 +#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 // winnt +#define FILE_NOTIFY_CHANGE_SIZE 0x00000008 // winnt +#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 // winnt +#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 // winnt +#define FILE_NOTIFY_CHANGE_CREATION 0x00000040 // winnt +#define FILE_NOTIFY_CHANGE_EA 0x00000080 +#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 // winnt +#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200 +#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400 +#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800 +#define FILE_NOTIFY_VALID_MASK 0x00000fff + +// +// Define the file action type codes for NtNotifyChangeDirectoryFile +// + +#define FILE_ACTION_ADDED 0x00000001 // winnt +#define FILE_ACTION_REMOVED 0x00000002 // winnt +#define FILE_ACTION_MODIFIED 0x00000003 // winnt +#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 // winnt +#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 // winnt +#define FILE_ACTION_ADDED_STREAM 0x00000006 +#define FILE_ACTION_REMOVED_STREAM 0x00000007 +#define FILE_ACTION_MODIFIED_STREAM 0x00000008 +#define FILE_ACTION_REMOVED_BY_DELETE 0x00000009 +#define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A +#define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B + +// +// Define the NamedPipeType flags for NtCreateNamedPipeFile +// + +#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000 +#define FILE_PIPE_MESSAGE_TYPE 0x00000001 + +// +// Define the CompletionMode flags for NtCreateNamedPipeFile +// + +#define FILE_PIPE_QUEUE_OPERATION 0x00000000 +#define FILE_PIPE_COMPLETE_OPERATION 0x00000001 + +// +// Define the ReadMode flags for NtCreateNamedPipeFile +// + +#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000 +#define FILE_PIPE_MESSAGE_MODE 0x00000001 + +// +// Define the NamedPipeConfiguration flags for NtQueryInformation +// + +#define FILE_PIPE_INBOUND 0x00000000 +#define FILE_PIPE_OUTBOUND 0x00000001 +#define FILE_PIPE_FULL_DUPLEX 0x00000002 + +// +// Define the NamedPipeState flags for NtQueryInformation +// + +#define FILE_PIPE_DISCONNECTED_STATE 0x00000001 +#define FILE_PIPE_LISTENING_STATE 0x00000002 +#define FILE_PIPE_CONNECTED_STATE 0x00000003 +#define FILE_PIPE_CLOSING_STATE 0x00000004 + +// +// Define the NamedPipeEnd flags for NtQueryInformation +// + +#define FILE_PIPE_CLIENT_END 0x00000000 +#define FILE_PIPE_SERVER_END 0x00000001 + +// +// Define special ByteOffset parameters for read and write operations +// + +#define FILE_WRITE_TO_END_OF_FILE 0xffffffff +#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe + +// +// Define alignment requirement values +// + +#define FILE_BYTE_ALIGNMENT 0x00000000 +#define FILE_WORD_ALIGNMENT 0x00000001 +#define FILE_LONG_ALIGNMENT 0x00000003 +#define FILE_QUAD_ALIGNMENT 0x00000007 +#define FILE_OCTA_ALIGNMENT 0x0000000f +#define FILE_32_BYTE_ALIGNMENT 0x0000001f +#define FILE_64_BYTE_ALIGNMENT 0x0000003f +#define FILE_128_BYTE_ALIGNMENT 0x0000007f +#define FILE_256_BYTE_ALIGNMENT 0x000000ff +#define FILE_512_BYTE_ALIGNMENT 0x000001ff + +// +// Define the maximum length of a filename string +// + +#define MAXIMUM_FILENAME_LENGTH 256 + +// end_ntddk end_wdm end_nthal + +// +// Define the file system attributes flags +// + +#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 // winnt +#define FILE_CASE_PRESERVED_NAMES 0x00000002 // winnt +#define FILE_UNICODE_ON_DISK 0x00000004 // winnt +#define FILE_PERSISTENT_ACLS 0x00000008 // winnt +#define FILE_FILE_COMPRESSION 0x00000010 // winnt +#define FILE_VOLUME_QUOTAS 0x00000020 // winnt +#define FILE_SUPPORTS_SPARSE_FILES 0x00000040 // winnt +#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 // winnt +#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 // winnt +#define FILE_VOLUME_IS_COMPRESSED 0x00008000 // winnt +#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 // winnt +#define FILE_SUPPORTS_ENCRYPTION 0x00020000 // winnt +#define FILE_NAMED_STREAMS 0x00040000 // winnt +#define FILE_READ_ONLY_VOLUME 0x00080000 // winnt + +// +// Define the flags for NtSet(Query)EaFile service structure entries +// + +#define FILE_NEED_EA 0x00000080 + +// +// Define EA type values +// + +#define FILE_EA_TYPE_BINARY 0xfffe +#define FILE_EA_TYPE_ASCII 0xfffd +#define FILE_EA_TYPE_BITMAP 0xfffb +#define FILE_EA_TYPE_METAFILE 0xfffa +#define FILE_EA_TYPE_ICON 0xfff9 +#define FILE_EA_TYPE_EA 0xffee +#define FILE_EA_TYPE_MVMT 0xffdf +#define FILE_EA_TYPE_MVST 0xffde +#define FILE_EA_TYPE_ASN1 0xffdd +#define FILE_EA_TYPE_FAMILY_IDS 0xff01 + +// begin_ntddk begin_wdm begin_nthal +// +// Define the various device characteristics flags +// + +#define FILE_REMOVABLE_MEDIA 0x00000001 +#define FILE_READ_ONLY_DEVICE 0x00000002 +#define FILE_FLOPPY_DISKETTE 0x00000004 +#define FILE_WRITE_ONCE_MEDIA 0x00000008 +#define FILE_REMOTE_DEVICE 0x00000010 +#define FILE_DEVICE_IS_MOUNTED 0x00000020 +#define FILE_VIRTUAL_VOLUME 0x00000040 +#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 +#define FILE_DEVICE_SECURE_OPEN 0x00000100 +#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800 + +// end_wdm + +// +// The FILE_EXPECT flags will only exist for WinXP. After that they will be +// ignored and an IRP will be sent in their place. +// +#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200 +#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300 +#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300 + +// +// flags specified here will be propagated up and down a device stack +// after FDO and all filter devices are added, but before the device +// stack is started +// + +#define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \ + FILE_READ_ONLY_DEVICE | \ + FILE_FLOPPY_DISKETTE | \ + FILE_WRITE_ONCE_MEDIA | \ + FILE_DEVICE_SECURE_OPEN ) + +// end_ntddk end_nthal + +// begin_ntddk begin_wdm begin_nthal +// +// Define the base asynchronous I/O argument types +// + +typedef struct _IO_STATUS_BLOCK { + union { + NTSTATUS Status; + PVOID Pointer; + }; + + ULONG_PTR Information; +} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; + +#if defined(_WIN64) +typedef struct _IO_STATUS_BLOCK32 { + NTSTATUS Status; + ULONG Information; +} IO_STATUS_BLOCK32, *PIO_STATUS_BLOCK32; +#endif + + +// +// Define an Asynchronous Procedure Call from I/O viewpoint +// + +typedef +VOID +(NTAPI *PIO_APC_ROUTINE) ( + IN PVOID ApcContext, + IN PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG Reserved + ); +#define PIO_APC_ROUTINE_DEFINED + +// end_ntddk end_wdm end_nthal + +// begin_winnt + +// +// Define the file notification information structure +// + +typedef struct _FILE_NOTIFY_INFORMATION { + ULONG NextEntryOffset; + ULONG Action; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; + +// end_winnt + +// begin_ntddk begin_wdm begin_nthal +// +// Define the file information class values +// +// WARNING: The order of the following values are assumed by the I/O system. +// Any changes made here should be reflected there as well. +// + +typedef enum _FILE_INFORMATION_CLASS { +// end_wdm + FileDirectoryInformation = 1, + FileFullDirectoryInformation, // 2 + FileBothDirectoryInformation, // 3 + FileBasicInformation, // 4 wdm + FileStandardInformation, // 5 wdm + FileInternalInformation, // 6 + FileEaInformation, // 7 + FileAccessInformation, // 8 + FileNameInformation, // 9 + FileRenameInformation, // 10 + FileLinkInformation, // 11 + FileNamesInformation, // 12 + FileDispositionInformation, // 13 + FilePositionInformation, // 14 wdm + FileFullEaInformation, // 15 + FileModeInformation, // 16 + FileAlignmentInformation, // 17 + FileAllInformation, // 18 + FileAllocationInformation, // 19 + FileEndOfFileInformation, // 20 wdm + FileAlternateNameInformation, // 21 + FileStreamInformation, // 22 + FilePipeInformation, // 23 + FilePipeLocalInformation, // 24 + FilePipeRemoteInformation, // 25 + FileMailslotQueryInformation, // 26 + FileMailslotSetInformation, // 27 + FileCompressionInformation, // 28 + FileObjectIdInformation, // 29 + FileCompletionInformation, // 30 + FileMoveClusterInformation, // 31 + FileQuotaInformation, // 32 + FileReparsePointInformation, // 33 + FileNetworkOpenInformation, // 34 + FileAttributeTagInformation, // 35 + FileTrackingInformation, // 36 + FileIdBothDirectoryInformation, // 37 + FileIdFullDirectoryInformation, // 38 + FileValidDataLengthInformation, // 39 + FileShortNameInformation, // 40 + FileMaximumInformation +// begin_wdm +} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; + +// +// Define the various structures which are returned on query operations +// + +// end_ntddk end_wdm end_nthal + +// +// NtQueryDirectoryFile return types: +// +// FILE_DIRECTORY_INFORMATION +// FILE_FULL_DIR_INFORMATION +// FILE_ID_FULL_DIR_INFORMATION +// FILE_BOTH_DIR_INFORMATION +// FILE_ID_BOTH_DIR_INFORMATION +// FILE_NAMES_INFORMATION +// FILE_OBJECTID_INFORMATION +// + +typedef struct _FILE_DIRECTORY_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; + +typedef struct _FILE_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + WCHAR FileName[1]; +} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION; + +typedef struct _FILE_ID_FULL_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_FULL_DIR_INFORMATION, *PFILE_ID_FULL_DIR_INFORMATION; + +typedef struct _FILE_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + WCHAR FileName[1]; +} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION; + +typedef struct _FILE_ID_BOTH_DIR_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER EndOfFile; + LARGE_INTEGER AllocationSize; + ULONG FileAttributes; + ULONG FileNameLength; + ULONG EaSize; + CCHAR ShortNameLength; + WCHAR ShortName[12]; + LARGE_INTEGER FileId; + WCHAR FileName[1]; +} FILE_ID_BOTH_DIR_INFORMATION, *PFILE_ID_BOTH_DIR_INFORMATION; + +typedef struct _FILE_NAMES_INFORMATION { + ULONG NextEntryOffset; + ULONG FileIndex; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION; + +typedef struct _FILE_OBJECTID_INFORMATION { + LONGLONG FileReference; + UCHAR ObjectId[16]; + union { + struct { + UCHAR BirthVolumeId[16]; + UCHAR BirthObjectId[16]; + UCHAR DomainId[16]; + } ; + UCHAR ExtendedInfo[48]; + }; +} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION; + +// +// The following constants provide addition meta characters to fully +// support the more obscure aspects of DOS wild card processing. +// + +#define ANSI_DOS_STAR ('<') +#define ANSI_DOS_QM ('>') +#define ANSI_DOS_DOT ('"') + +#define DOS_STAR (L'<') +#define DOS_QM (L'>') +#define DOS_DOT (L'"') + +// +// NtQuery(Set)InformationFile return types: +// +// FILE_BASIC_INFORMATION +// FILE_STANDARD_INFORMATION +// FILE_INTERNAL_INFORMATION +// FILE_EA_INFORMATION +// FILE_ACCESS_INFORMATION +// FILE_POSITION_INFORMATION +// FILE_MODE_INFORMATION +// FILE_ALIGNMENT_INFORMATION +// FILE_NAME_INFORMATION +// FILE_ALL_INFORMATION +// +// FILE_NETWORK_OPEN_INFORMATION +// +// FILE_ALLOCATION_INFORMATION +// FILE_COMPRESSION_INFORMATION +// FILE_DISPOSITION_INFORMATION +// FILE_END_OF_FILE_INFORMATION +// FILE_LINK_INFORMATION +// FILE_MOVE_CLUSTER_INFORMATION +// FILE_RENAME_INFORMATION +// FILE_SHORT_NAME_INFORMATION +// FILE_STREAM_INFORMATION +// FILE_COMPLETION_INFORMATION +// +// FILE_PIPE_INFORMATION +// FILE_PIPE_LOCAL_INFORMATION +// FILE_PIPE_REMOTE_INFORMATION +// +// FILE_MAILSLOT_QUERY_INFORMATION +// FILE_MAILSLOT_SET_INFORMATION +// FILE_REPARSE_POINT_INFORMATION +// + +typedef struct _FILE_BASIC_INFORMATION { // ntddk wdm nthal + LARGE_INTEGER CreationTime; // ntddk wdm nthal + LARGE_INTEGER LastAccessTime; // ntddk wdm nthal + LARGE_INTEGER LastWriteTime; // ntddk wdm nthal + LARGE_INTEGER ChangeTime; // ntddk wdm nthal + ULONG FileAttributes; // ntddk wdm nthal +} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; // ntddk wdm nthal + // ntddk wdm nthal +typedef struct _FILE_STANDARD_INFORMATION { // ntddk wdm nthal + LARGE_INTEGER AllocationSize; // ntddk wdm nthal + LARGE_INTEGER EndOfFile; // ntddk wdm nthal + ULONG NumberOfLinks; // ntddk wdm nthal + BOOLEAN DeletePending; // ntddk wdm nthal + BOOLEAN Directory; // ntddk wdm nthal +} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; // ntddk wdm nthal + // ntddk wdm nthal +typedef struct _FILE_INTERNAL_INFORMATION { + LARGE_INTEGER IndexNumber; +} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION; + +typedef struct _FILE_EA_INFORMATION { + ULONG EaSize; +} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION; + +typedef struct _FILE_ACCESS_INFORMATION { + ACCESS_MASK AccessFlags; +} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION; + +typedef struct _FILE_POSITION_INFORMATION { // ntddk wdm nthal + LARGE_INTEGER CurrentByteOffset; // ntddk wdm nthal +} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; // ntddk wdm nthal + // ntddk wdm nthal +typedef struct _FILE_MODE_INFORMATION { + ULONG Mode; +} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION; + +typedef struct _FILE_ALIGNMENT_INFORMATION { // ntddk nthal + ULONG AlignmentRequirement; // ntddk nthal +} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; // ntddk nthal + // ntddk nthal +typedef struct _FILE_NAME_INFORMATION { // ntddk + ULONG FileNameLength; // ntddk + WCHAR FileName[1]; // ntddk +} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; // ntddk + // ntddk +typedef struct _FILE_ALL_INFORMATION { + FILE_BASIC_INFORMATION BasicInformation; + FILE_STANDARD_INFORMATION StandardInformation; + FILE_INTERNAL_INFORMATION InternalInformation; + FILE_EA_INFORMATION EaInformation; + FILE_ACCESS_INFORMATION AccessInformation; + FILE_POSITION_INFORMATION PositionInformation; + FILE_MODE_INFORMATION ModeInformation; + FILE_ALIGNMENT_INFORMATION AlignmentInformation; + FILE_NAME_INFORMATION NameInformation; +} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; + +typedef struct _FILE_NETWORK_OPEN_INFORMATION { // ntddk wdm nthal + LARGE_INTEGER CreationTime; // ntddk wdm nthal + LARGE_INTEGER LastAccessTime; // ntddk wdm nthal + LARGE_INTEGER LastWriteTime; // ntddk wdm nthal + LARGE_INTEGER ChangeTime; // ntddk wdm nthal + LARGE_INTEGER AllocationSize; // ntddk wdm nthal + LARGE_INTEGER EndOfFile; // ntddk wdm nthal + ULONG FileAttributes; // ntddk wdm nthal +} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; // ntddk wdm nthal + // ntddk wdm nthal +typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { // ntddk nthal + ULONG FileAttributes; // ntddk nthal + ULONG ReparseTag; // ntddk nthal +} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; // ntddk nthal + // ntddk nthal +typedef struct _FILE_ALLOCATION_INFORMATION { + LARGE_INTEGER AllocationSize; +} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; + + +typedef struct _FILE_COMPRESSION_INFORMATION { + LARGE_INTEGER CompressedFileSize; + USHORT CompressionFormat; + UCHAR CompressionUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + UCHAR Reserved[3]; +} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION; + + +typedef struct _FILE_DISPOSITION_INFORMATION { // ntddk nthal + BOOLEAN DeleteFile; // ntddk nthal +} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; // ntddk nthal + // ntddk nthal +typedef struct _FILE_END_OF_FILE_INFORMATION { // ntddk nthal + LARGE_INTEGER EndOfFile; // ntddk nthal +} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; // ntddk nthal + // ntddk nthal +typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { // ntddk nthal + LARGE_INTEGER ValidDataLength; // ntddk nthal +} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; // ntddk nthal + +#ifdef _MAC +#pragma warning( disable : 4121) +#endif + +typedef struct _FILE_LINK_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION; + + +#ifdef _MAC +#pragma warning( default : 4121 ) +#endif + +typedef struct _FILE_MOVE_CLUSTER_INFORMATION { + ULONG ClusterCount; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION; + +#ifdef _MAC +#pragma warning( disable : 4121) +#endif + + +typedef struct _FILE_RENAME_INFORMATION { + BOOLEAN ReplaceIfExists; + HANDLE RootDirectory; + ULONG FileNameLength; + WCHAR FileName[1]; +} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION; + +#ifdef _MAC +#pragma warning( default : 4121 ) +#endif + +typedef struct _FILE_STREAM_INFORMATION { + ULONG NextEntryOffset; + ULONG StreamNameLength; + LARGE_INTEGER StreamSize; + LARGE_INTEGER StreamAllocationSize; + WCHAR StreamName[1]; +} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION; + +typedef struct _FILE_TRACKING_INFORMATION { + HANDLE DestinationFile; + ULONG ObjectInformationLength; + CHAR ObjectInformation[1]; +} FILE_TRACKING_INFORMATION, *PFILE_TRACKING_INFORMATION; + +typedef struct _FILE_COMPLETION_INFORMATION { + HANDLE Port; + PVOID Key; +} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION; + +typedef struct _FILE_PIPE_INFORMATION { + ULONG ReadMode; + ULONG CompletionMode; +} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION; + +typedef struct _FILE_PIPE_LOCAL_INFORMATION { + ULONG NamedPipeType; + ULONG NamedPipeConfiguration; + ULONG MaximumInstances; + ULONG CurrentInstances; + ULONG InboundQuota; + ULONG ReadDataAvailable; + ULONG OutboundQuota; + ULONG WriteQuotaAvailable; + ULONG NamedPipeState; + ULONG NamedPipeEnd; +} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION; + +typedef struct _FILE_PIPE_REMOTE_INFORMATION { + LARGE_INTEGER CollectDataTime; + ULONG MaximumCollectionCount; +} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION; + + +typedef struct _FILE_MAILSLOT_QUERY_INFORMATION { + ULONG MaximumMessageSize; + ULONG MailslotQuota; + ULONG NextMessageSize; + ULONG MessagesAvailable; + LARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION; + +typedef struct _FILE_MAILSLOT_SET_INFORMATION { + PLARGE_INTEGER ReadTimeout; +} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION; + +typedef struct _FILE_REPARSE_POINT_INFORMATION { + LONGLONG FileReference; + ULONG Tag; +} FILE_REPARSE_POINT_INFORMATION, *PFILE_REPARSE_POINT_INFORMATION; + +// +// NtQuery(Set)EaFile +// +// The offset for the start of EaValue is EaName[EaNameLength + 1] +// + +// begin_ntddk begin_wdm + +typedef struct _FILE_FULL_EA_INFORMATION { + ULONG NextEntryOffset; + UCHAR Flags; + UCHAR EaNameLength; + USHORT EaValueLength; + CHAR EaName[1]; +} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; + +// end_ntddk end_wdm + +typedef struct _FILE_GET_EA_INFORMATION { + ULONG NextEntryOffset; + UCHAR EaNameLength; + CHAR EaName[1]; +} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION; + +// +// NtQuery(Set)QuotaInformationFile +// + +typedef struct _FILE_GET_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + SID Sid; +} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION; + +typedef struct _FILE_QUOTA_INFORMATION { + ULONG NextEntryOffset; + ULONG SidLength; + LARGE_INTEGER ChangeTime; + LARGE_INTEGER QuotaUsed; + LARGE_INTEGER QuotaThreshold; + LARGE_INTEGER QuotaLimit; + SID Sid; +} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION; + +// begin_ntddk begin_wdm begin_nthal +// +// Define the file system information class values +// +// WARNING: The order of the following values are assumed by the I/O system. +// Any changes made here should be reflected there as well. + +typedef enum _FSINFOCLASS { + FileFsVolumeInformation = 1, + FileFsLabelInformation, // 2 + FileFsSizeInformation, // 3 + FileFsDeviceInformation, // 4 + FileFsAttributeInformation, // 5 + FileFsControlInformation, // 6 + FileFsFullSizeInformation, // 7 + FileFsObjectIdInformation, // 8 + FileFsDriverPathInformation, // 9 + FileFsMaximumInformation +} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; + +// end_ntddk end_wdm end_nthal +// +// NtQuery[Set]VolumeInformationFile types: +// +// FILE_FS_LABEL_INFORMATION +// FILE_FS_VOLUME_INFORMATION +// FILE_FS_SIZE_INFORMATION +// FILE_FS_DEVICE_INFORMATION +// FILE_FS_ATTRIBUTE_INFORMATION +// FILE_FS_CONTROL_INFORMATION +// FILE_FS_OBJECTID_INFORMATION +// + +typedef struct _FILE_FS_LABEL_INFORMATION { + ULONG VolumeLabelLength; + WCHAR VolumeLabel[1]; +} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION; + +typedef struct _FILE_FS_VOLUME_INFORMATION { + LARGE_INTEGER VolumeCreationTime; + ULONG VolumeSerialNumber; + ULONG VolumeLabelLength; + BOOLEAN SupportsObjects; + WCHAR VolumeLabel[1]; +} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION; + +typedef struct _FILE_FS_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER AvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION; + +typedef struct _FILE_FS_FULL_SIZE_INFORMATION { + LARGE_INTEGER TotalAllocationUnits; + LARGE_INTEGER CallerAvailableAllocationUnits; + LARGE_INTEGER ActualAvailableAllocationUnits; + ULONG SectorsPerAllocationUnit; + ULONG BytesPerSector; +} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION; + +typedef struct _FILE_FS_OBJECTID_INFORMATION { + UCHAR ObjectId[16]; + UCHAR ExtendedInfo[48]; +} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; + +typedef struct _FILE_FS_DEVICE_INFORMATION { // ntddk wdm nthal + DEVICE_TYPE DeviceType; // ntddk wdm nthal + ULONG Characteristics; // ntddk wdm nthal +} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; // ntddk wdm nthal + // ntddk wdm nthal +typedef struct _FILE_FS_ATTRIBUTE_INFORMATION { + ULONG FileSystemAttributes; + LONG MaximumComponentNameLength; + ULONG FileSystemNameLength; + WCHAR FileSystemName[1]; +} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION; + +typedef struct _FILE_FS_DRIVER_PATH_INFORMATION { + BOOLEAN DriverInPath; + ULONG DriverNameLength; + WCHAR DriverName[1]; +} FILE_FS_DRIVER_PATH_INFORMATION, *PFILE_FS_DRIVER_PATH_INFORMATION; + + +// +// File system control flags +// + +#define FILE_VC_QUOTA_NONE 0x00000000 +#define FILE_VC_QUOTA_TRACK 0x00000001 +#define FILE_VC_QUOTA_ENFORCE 0x00000002 +#define FILE_VC_QUOTA_MASK 0x00000003 + +#define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008 + +#define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010 +#define FILE_VC_LOG_QUOTA_LIMIT 0x00000020 +#define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040 +#define FILE_VC_LOG_VOLUME_LIMIT 0x00000080 + +#define FILE_VC_QUOTAS_INCOMPLETE 0x00000100 +#define FILE_VC_QUOTAS_REBUILDING 0x00000200 + +#define FILE_VC_VALID_MASK 0x000003ff + +typedef struct _FILE_FS_CONTROL_INFORMATION { + LARGE_INTEGER FreeSpaceStartFiltering; + LARGE_INTEGER FreeSpaceThreshold; + LARGE_INTEGER FreeSpaceStopFiltering; + LARGE_INTEGER DefaultQuotaThreshold; + LARGE_INTEGER DefaultQuotaLimit; + ULONG FileSystemControlFlags; +} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION; + +// begin_winnt begin_ntddk begin_nthal + +// +// Define segement buffer structure for scatter/gather read/write. +// + +typedef union _FILE_SEGMENT_ELEMENT { + PVOID64 Buffer; + ULONGLONG Alignment; +}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtCreateFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG CreateDisposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtDeviceIoControlFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG IoControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtFsControlFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG FsControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtLockFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER ByteOffset, + IN PLARGE_INTEGER Length, + IN ULONG Key, + IN BOOLEAN FailImmediately, + IN BOOLEAN ExclusiveLock + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtOpenFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG ShareAccess, + IN ULONG OpenOptions + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryDirectoryFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN BOOLEAN ReturnSingleEntry, + IN PUNICODE_STRING FileName OPTIONAL, + IN BOOLEAN RestartScan + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryQuotaInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN BOOLEAN ReturnSingleEntry, + IN PVOID SidList OPTIONAL, + IN ULONG SidListLength, + IN PSID StartSid OPTIONAL, + IN BOOLEAN RestartScan + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQueryVolumeInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtReadFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSetInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSetQuotaInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSetVolumeInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtWriteFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + +// +// Macro definition for defining IOCTL and FSCTL function control codes. Note +// that function codes 0-2047 are reserved for Microsoft Corporation, and +// 2048-4095 are reserved for customers. +// +// These macros are defined in devioctl.h which contains the portable IO +// definitions (for use by both DOS and NT) +// + +// +// The IoGetFunctionCodeFromCtlCode( ControlCode ) Macro is defined in io.h +// This macro is used to extract the function code from an IOCTL (or FSCTL). +// The macro can only be used in kernel mode code. +// + +// +// General File System control codes - Note that these values are valid +// regardless of the actual file system type +// + +// +// IMPORTANT: These values have been arranged in order of increasing +// control codes. Do NOT breaks this!! Add all new codes +// at end of list regardless of functionality type. +// +// Note: FSCTL_QUERY_RETRIEVAL_POINTER and FSCTL_MARK_AS_SYSTEM_HIVE only +// work from Kernel mode on local paging files or the system hives. +// + +// begin_winioctl +#ifndef _FILESYSTEMFSCTL_ +#define _FILESYSTEMFSCTL_ + +// +// The following is a list of the native file system fsctls followed by +// additional network file system fsctls. Some values have been +// decommissioned. +// + +#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) +// decommissioned fsctl value 9 +#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 10, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 11, METHOD_BUFFERED, FILE_ANY_ACCESS) // PATHNAME_BUFFER, +#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 12, METHOD_BUFFERED, FILE_ANY_ACCESS) +// decommissioned fsctl value 13 +#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 14, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) +// decommissioned fsctl value 17 +// decommissioned fsctl value 18 +#define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 19, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 20, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 21, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 22, METHOD_BUFFERED, FILE_ANY_ACCESS) // FSCTL_QUERY_FAT_BPB_BUFFER +#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 23, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 24, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILESYSTEM_STATISTICS +#if(_WIN32_WINNT >= 0x0400) +#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS) // NTFS_VOLUME_DATA_BUFFER +#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 26, METHOD_BUFFERED, FILE_ANY_ACCESS) // NTFS_FILE_RECORD_INPUT_BUFFER, NTFS_FILE_RECORD_OUTPUT_BUFFER +#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS) // STARTING_LCN_INPUT_BUFFER, VOLUME_BITMAP_BUFFER +#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS) // STARTING_VCN_INPUT_BUFFER, RETRIEVAL_POINTERS_BUFFER +#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // MOVE_FILE_DATA, +#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) +// decomissioned fsctl value 31 +#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 32, METHOD_NEITHER, FILE_ANY_ACCESS) +#endif /* _WIN32_WINNT >= 0x0400 */ + +#if(_WIN32_WINNT >= 0x0500) +// decommissioned fsctl value 33 +// decommissioned fsctl value 34 +#define FSCTL_FIND_FILES_BY_SID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 35, METHOD_NEITHER, FILE_ANY_ACCESS) +// decommissioned fsctl value 36 +// decommissioned fsctl value 37 +#define FSCTL_SET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 38, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // FILE_OBJECTID_BUFFER +#define FSCTL_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 39, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILE_OBJECTID_BUFFER +#define FSCTL_DELETE_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 40, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) +#define FSCTL_SET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // REPARSE_DATA_BUFFER, +#define FSCTL_GET_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS) // REPARSE_DATA_BUFFER +#define FSCTL_DELETE_REPARSE_POINT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // REPARSE_DATA_BUFFER, +#define FSCTL_ENUM_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 44, METHOD_NEITHER, FILE_ANY_ACCESS) // MFT_ENUM_DATA, +#define FSCTL_SECURITY_ID_CHECK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 45, METHOD_NEITHER, FILE_READ_DATA) // BULK_SECURITY_TEST_DATA, +#define FSCTL_READ_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 46, METHOD_NEITHER, FILE_ANY_ACCESS) // READ_USN_JOURNAL_DATA, USN +#define FSCTL_SET_OBJECT_ID_EXTENDED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 47, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) +#define FSCTL_CREATE_OR_GET_OBJECT_ID CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 48, METHOD_BUFFERED, FILE_ANY_ACCESS) // FILE_OBJECTID_BUFFER +#define FSCTL_SET_SPARSE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) +#define FSCTL_SET_ZERO_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 50, METHOD_BUFFERED, FILE_WRITE_DATA) // FILE_ZERO_DATA_INFORMATION, +#define FSCTL_QUERY_ALLOCATED_RANGES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51, METHOD_NEITHER, FILE_READ_DATA) // FILE_ALLOCATED_RANGE_BUFFER, FILE_ALLOCATED_RANGE_BUFFER +// decommissioned fsctl value 52 +#define FSCTL_SET_ENCRYPTION CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 53, METHOD_NEITHER, FILE_ANY_ACCESS) // ENCRYPTION_BUFFER, DECRYPTION_STATUS_BUFFER +#define FSCTL_ENCRYPTION_FSCTL_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 54, METHOD_NEITHER, FILE_ANY_ACCESS) +#define FSCTL_WRITE_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 55, METHOD_NEITHER, FILE_SPECIAL_ACCESS) // ENCRYPTED_DATA_INFO, +#define FSCTL_READ_RAW_ENCRYPTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 56, METHOD_NEITHER, FILE_SPECIAL_ACCESS) // REQUEST_RAW_ENCRYPTED_DATA, ENCRYPTED_DATA_INFO +#define FSCTL_CREATE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 57, METHOD_NEITHER, FILE_ANY_ACCESS) // CREATE_USN_JOURNAL_DATA, +#define FSCTL_READ_FILE_USN_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 58, METHOD_NEITHER, FILE_ANY_ACCESS) // Read the Usn Record for a file +#define FSCTL_WRITE_USN_CLOSE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 59, METHOD_NEITHER, FILE_ANY_ACCESS) // Generate Close Usn Record +#define FSCTL_EXTEND_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 60, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_QUERY_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 61, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_DELETE_USN_JOURNAL CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 62, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_MARK_HANDLE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 63, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SIS_COPYFILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 64, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_SIS_LINK_FILES CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 65, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_HSM_MSG CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 66, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA) +// decommissioned fsctl value 67 +#define FSCTL_HSM_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 68, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_RECALL_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 69, METHOD_NEITHER, FILE_ANY_ACCESS) +// decommissioned fsctl value 70 +#define FSCTL_READ_FROM_PLEX CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 71, METHOD_OUT_DIRECT, FILE_READ_DATA) +#define FSCTL_FILE_PREFETCH CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 72, METHOD_BUFFERED, FILE_SPECIAL_ACCESS) // FILE_PREFETCH +#endif /* _WIN32_WINNT >= 0x0500 */ + +// +// The following long list of structs are associated with the preceeding +// file system fsctls. +// + +// +// Structure for FSCTL_IS_PATHNAME_VALID +// + +typedef struct _PATHNAME_BUFFER { + + ULONG PathNameLength; + WCHAR Name[1]; + +} PATHNAME_BUFFER, *PPATHNAME_BUFFER; + +// +// Structure for FSCTL_QUERY_BPB_INFO +// + +typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER { + + UCHAR First0x24BytesOfBootSector[0x24]; + +} FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER; + +#if(_WIN32_WINNT >= 0x0400) +// +// Structures for FSCTL_GET_NTFS_VOLUME_DATA. +// The user must pass the basic buffer below. Ntfs +// will return as many fields as available in the extended +// buffer which follows immediately after the VOLUME_DATA_BUFFER. +// + +typedef struct { + + LARGE_INTEGER VolumeSerialNumber; + LARGE_INTEGER NumberSectors; + LARGE_INTEGER TotalClusters; + LARGE_INTEGER FreeClusters; + LARGE_INTEGER TotalReserved; + ULONG BytesPerSector; + ULONG BytesPerCluster; + ULONG BytesPerFileRecordSegment; + ULONG ClustersPerFileRecordSegment; + LARGE_INTEGER MftValidDataLength; + LARGE_INTEGER MftStartLcn; + LARGE_INTEGER Mft2StartLcn; + LARGE_INTEGER MftZoneStart; + LARGE_INTEGER MftZoneEnd; + +} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER; + +typedef struct { + + ULONG ByteCount; + + USHORT MajorVersion; + USHORT MinorVersion; + +} NTFS_EXTENDED_VOLUME_DATA, *PNTFS_EXTENDED_VOLUME_DATA; +#endif /* _WIN32_WINNT >= 0x0400 */ + +#if(_WIN32_WINNT >= 0x0400) +// +// Structure for FSCTL_GET_VOLUME_BITMAP +// + +typedef struct { + + LARGE_INTEGER StartingLcn; + +} STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER; + +typedef struct { + + LARGE_INTEGER StartingLcn; + LARGE_INTEGER BitmapSize; + UCHAR Buffer[1]; + +} VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER; +#endif /* _WIN32_WINNT >= 0x0400 */ + +#if(_WIN32_WINNT >= 0x0400) +// +// Structure for FSCTL_GET_RETRIEVAL_POINTERS +// + +typedef struct { + + LARGE_INTEGER StartingVcn; + +} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER; + +typedef struct RETRIEVAL_POINTERS_BUFFER { + + ULONG ExtentCount; + LARGE_INTEGER StartingVcn; + struct { + LARGE_INTEGER NextVcn; + LARGE_INTEGER Lcn; + } Extents[1]; + +} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER; +#endif /* _WIN32_WINNT >= 0x0400 */ + +#if(_WIN32_WINNT >= 0x0400) +// +// Structures for FSCTL_GET_NTFS_FILE_RECORD +// + +typedef struct { + + LARGE_INTEGER FileReferenceNumber; + +} NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER; + +typedef struct { + + LARGE_INTEGER FileReferenceNumber; + ULONG FileRecordLength; + UCHAR FileRecordBuffer[1]; + +} NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER; +#endif /* _WIN32_WINNT >= 0x0400 */ + +#if(_WIN32_WINNT >= 0x0400) +// +// Structure for FSCTL_MOVE_FILE +// + +typedef struct { + + HANDLE FileHandle; + LARGE_INTEGER StartingVcn; + LARGE_INTEGER StartingLcn; + ULONG ClusterCount; + +} MOVE_FILE_DATA, *PMOVE_FILE_DATA; + +#if defined(_WIN64) +// +// 32/64 Bit thunking support structure +// + +typedef struct _MOVE_FILE_DATA32 { + + UINT32 FileHandle; + LARGE_INTEGER StartingVcn; + LARGE_INTEGER StartingLcn; + ULONG ClusterCount; + +} MOVE_FILE_DATA32, *PMOVE_FILE_DATA32; +#endif +#endif /* _WIN32_WINNT >= 0x0400 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// Structure for FSCTL_FIND_FILES_BY_SID +// + +typedef struct { + ULONG Restart; + SID Sid; +} FIND_BY_SID_DATA, *PFIND_BY_SID_DATA; +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// The following structures apply to Usn operations. +// + +// +// Structure for FSCTL_ENUM_USN_DATA +// + +typedef struct { + + ULONGLONG StartFileReferenceNumber; + USN LowUsn; + USN HighUsn; + +} MFT_ENUM_DATA, *PMFT_ENUM_DATA; + +// +// Structure for FSCTL_CREATE_USN_JOURNAL +// + +typedef struct { + + ULONGLONG MaximumSize; + ULONGLONG AllocationDelta; + +} CREATE_USN_JOURNAL_DATA, *PCREATE_USN_JOURNAL_DATA; + +// +// Structure for FSCTL_READ_USN_JOURNAL +// + +typedef struct { + + USN StartUsn; + ULONG ReasonMask; + ULONG ReturnOnlyOnClose; + ULONGLONG Timeout; + ULONGLONG BytesToWaitFor; + ULONGLONG UsnJournalID; + +} READ_USN_JOURNAL_DATA, *PREAD_USN_JOURNAL_DATA; + +// +// The initial Major.Minor version of the Usn record will be 2.0. +// In general, the MinorVersion may be changed if fields are added +// to this structure in such a way that the previous version of the +// software can still correctly the fields it knows about. The +// MajorVersion should only be changed if the previous version of +// any software using this structure would incorrectly handle new +// records due to structure changes. +// +// The first update to this will force the structure to version 2.0. +// This will add the extended information about the source as +// well as indicate the file name offset within the structure. +// +// The following structure is returned with these fsctls. +// +// FSCTL_READ_USN_JOURNAL +// FSCTL_READ_FILE_USN_DATA +// FSCTL_ENUM_USN_DATA +// + +typedef struct { + + ULONG RecordLength; + USHORT MajorVersion; + USHORT MinorVersion; + ULONGLONG FileReferenceNumber; + ULONGLONG ParentFileReferenceNumber; + USN Usn; + LARGE_INTEGER TimeStamp; + ULONG Reason; + ULONG SourceInfo; + ULONG SecurityId; + ULONG FileAttributes; + USHORT FileNameLength; + USHORT FileNameOffset; + WCHAR FileName[1]; + +} USN_RECORD, *PUSN_RECORD; + +#define USN_PAGE_SIZE (0x1000) + +#define USN_REASON_DATA_OVERWRITE (0x00000001) +#define USN_REASON_DATA_EXTEND (0x00000002) +#define USN_REASON_DATA_TRUNCATION (0x00000004) +#define USN_REASON_NAMED_DATA_OVERWRITE (0x00000010) +#define USN_REASON_NAMED_DATA_EXTEND (0x00000020) +#define USN_REASON_NAMED_DATA_TRUNCATION (0x00000040) +#define USN_REASON_FILE_CREATE (0x00000100) +#define USN_REASON_FILE_DELETE (0x00000200) +#define USN_REASON_EA_CHANGE (0x00000400) +#define USN_REASON_SECURITY_CHANGE (0x00000800) +#define USN_REASON_RENAME_OLD_NAME (0x00001000) +#define USN_REASON_RENAME_NEW_NAME (0x00002000) +#define USN_REASON_INDEXABLE_CHANGE (0x00004000) +#define USN_REASON_BASIC_INFO_CHANGE (0x00008000) +#define USN_REASON_HARD_LINK_CHANGE (0x00010000) +#define USN_REASON_COMPRESSION_CHANGE (0x00020000) +#define USN_REASON_ENCRYPTION_CHANGE (0x00040000) +#define USN_REASON_OBJECT_ID_CHANGE (0x00080000) +#define USN_REASON_REPARSE_POINT_CHANGE (0x00100000) +#define USN_REASON_STREAM_CHANGE (0x00200000) + +#define USN_REASON_CLOSE (0x80000000) + +// +// Structure for FSCTL_QUERY_USN_JOUNAL +// + +typedef struct { + + ULONGLONG UsnJournalID; + USN FirstUsn; + USN NextUsn; + USN LowestValidUsn; + USN MaxUsn; + ULONGLONG MaximumSize; + ULONGLONG AllocationDelta; + +} USN_JOURNAL_DATA, *PUSN_JOURNAL_DATA; + +// +// Structure for FSCTL_DELETE_USN_JOURNAL +// + +typedef struct { + + ULONGLONG UsnJournalID; + ULONG DeleteFlags; + +} DELETE_USN_JOURNAL_DATA, *PDELETE_USN_JOURNAL_DATA; + +#define USN_DELETE_FLAG_DELETE (0x00000001) +#define USN_DELETE_FLAG_NOTIFY (0x00000002) + +#define USN_DELETE_VALID_FLAGS (0x00000003) + +// +// Structure for FSCTL_MARK_HANDLE +// + +typedef struct { + + ULONG UsnSourceInfo; + HANDLE VolumeHandle; + ULONG HandleInfo; + +} MARK_HANDLE_INFO, *PMARK_HANDLE_INFO; + +#if defined(_WIN64) +// +// 32/64 Bit thunking support structure +// + +typedef struct { + + ULONG UsnSourceInfo; + UINT32 VolumeHandle; + ULONG HandleInfo; + +} MARK_HANDLE_INFO32, *PMARK_HANDLE_INFO32; +#endif + +// +// Flags for the additional source information above. +// +// USN_SOURCE_DATA_MANAGEMENT - Service is not modifying the external view +// of any part of the file. Typical case is HSM moving data to +// and from external storage. +// +// USN_SOURCE_AUXILIARY_DATA - Service is not modifying the external view +// of the file with regard to the application that created this file. +// Can be used to add private data streams to a file. +// +// USN_SOURCE_REPLICATION_MANAGEMENT - Service is modifying a file to match +// the contents of the same file which exists in another member of the +// replica set. +// + +#define USN_SOURCE_DATA_MANAGEMENT (0x00000001) +#define USN_SOURCE_AUXILIARY_DATA (0x00000002) +#define USN_SOURCE_REPLICATION_MANAGEMENT (0x00000004) + +// +// Flags for the HandleInfo field above +// +// MARK_HANDLE_PROTECT_CLUSTERS - disallow any defragmenting (FSCTL_MOVE_FILE) until the +// the handle is closed +// + +#define MARK_HANDLE_PROTECT_CLUSTERS (0x00000001) + +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// Structure for FSCTL_SECURITY_ID_CHECK +// + +typedef struct { + + ACCESS_MASK DesiredAccess; + ULONG SecurityIds[1]; + +} BULK_SECURITY_TEST_DATA, *PBULK_SECURITY_TEST_DATA; +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// Output flags for the FSCTL_IS_VOLUME_DIRTY +// + +#define VOLUME_IS_DIRTY (0x00000001) +#define VOLUME_UPGRADE_SCHEDULED (0x00000002) +#endif /* _WIN32_WINNT >= 0x0500 */ + +// +// Structures for FSCTL_FILE_PREFETCH +// + +typedef struct _FILE_PREFETCH { + ULONG Type; + ULONG Count; + ULONGLONG Prefetch[1]; +} FILE_PREFETCH, *PFILE_PREFETCH; + +#define FILE_PREFETCH_TYPE_FOR_CREATE 0x1 + +// Structures for FSCTL_FILESYSTEM_GET_STATISTICS +// +// Filesystem performance counters +// + +typedef struct _FILESYSTEM_STATISTICS { + + USHORT FileSystemType; + USHORT Version; // currently version 1 + + ULONG SizeOfCompleteStructure; // must by a mutiple of 64 bytes + + ULONG UserFileReads; + ULONG UserFileReadBytes; + ULONG UserDiskReads; + ULONG UserFileWrites; + ULONG UserFileWriteBytes; + ULONG UserDiskWrites; + + ULONG MetaDataReads; + ULONG MetaDataReadBytes; + ULONG MetaDataDiskReads; + ULONG MetaDataWrites; + ULONG MetaDataWriteBytes; + ULONG MetaDataDiskWrites; + + // + // The file system's private structure is appended here. + // + +} FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS; + +// values for FS_STATISTICS.FileSystemType + +#define FILESYSTEM_STATISTICS_TYPE_NTFS 1 +#define FILESYSTEM_STATISTICS_TYPE_FAT 2 + +// +// File System Specific Statistics Data +// + +typedef struct _FAT_STATISTICS { + ULONG CreateHits; + ULONG SuccessfulCreates; + ULONG FailedCreates; + + ULONG NonCachedReads; + ULONG NonCachedReadBytes; + ULONG NonCachedWrites; + ULONG NonCachedWriteBytes; + + ULONG NonCachedDiskReads; + ULONG NonCachedDiskWrites; +} FAT_STATISTICS, *PFAT_STATISTICS; + +typedef struct _NTFS_STATISTICS { + + ULONG LogFileFullExceptions; + ULONG OtherExceptions; + + // + // Other meta data io's + // + + ULONG MftReads; + ULONG MftReadBytes; + ULONG MftWrites; + ULONG MftWriteBytes; + struct { + USHORT Write; + USHORT Create; + USHORT SetInfo; + USHORT Flush; + } MftWritesUserLevel; + + USHORT MftWritesFlushForLogFileFull; + USHORT MftWritesLazyWriter; + USHORT MftWritesUserRequest; + + ULONG Mft2Writes; + ULONG Mft2WriteBytes; + struct { + USHORT Write; + USHORT Create; + USHORT SetInfo; + USHORT Flush; + } Mft2WritesUserLevel; + + USHORT Mft2WritesFlushForLogFileFull; + USHORT Mft2WritesLazyWriter; + USHORT Mft2WritesUserRequest; + + ULONG RootIndexReads; + ULONG RootIndexReadBytes; + ULONG RootIndexWrites; + ULONG RootIndexWriteBytes; + + ULONG BitmapReads; + ULONG BitmapReadBytes; + ULONG BitmapWrites; + ULONG BitmapWriteBytes; + + USHORT BitmapWritesFlushForLogFileFull; + USHORT BitmapWritesLazyWriter; + USHORT BitmapWritesUserRequest; + + struct { + USHORT Write; + USHORT Create; + USHORT SetInfo; + } BitmapWritesUserLevel; + + ULONG MftBitmapReads; + ULONG MftBitmapReadBytes; + ULONG MftBitmapWrites; + ULONG MftBitmapWriteBytes; + + USHORT MftBitmapWritesFlushForLogFileFull; + USHORT MftBitmapWritesLazyWriter; + USHORT MftBitmapWritesUserRequest; + + struct { + USHORT Write; + USHORT Create; + USHORT SetInfo; + USHORT Flush; + } MftBitmapWritesUserLevel; + + ULONG UserIndexReads; + ULONG UserIndexReadBytes; + ULONG UserIndexWrites; + ULONG UserIndexWriteBytes; + + // + // Additions for NT 5.0 + // + + ULONG LogFileReads; + ULONG LogFileReadBytes; + ULONG LogFileWrites; + ULONG LogFileWriteBytes; + + struct { + ULONG Calls; // number of individual calls to allocate clusters + ULONG Clusters; // number of clusters allocated + ULONG Hints; // number of times a hint was specified + + ULONG RunsReturned; // number of runs used to satisify all the requests + + ULONG HintsHonored; // number of times the hint was useful + ULONG HintsClusters; // number of clusters allocated via the hint + ULONG Cache; // number of times the cache was useful other than the hint + ULONG CacheClusters; // number of clusters allocated via the cache other than the hint + ULONG CacheMiss; // number of times the cache wasn't useful + ULONG CacheMissClusters; // number of clusters allocated without the cache + } Allocate; + +} NTFS_STATISTICS, *PNTFS_STATISTICS; + +#if(_WIN32_WINNT >= 0x0500) +// +// Structure for FSCTL_SET_OBJECT_ID, FSCTL_GET_OBJECT_ID, and FSCTL_CREATE_OR_GET_OBJECT_ID +// + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4201) // unnamed struct + +typedef struct _FILE_OBJECTID_BUFFER { + + // + // This is the portion of the object id that is indexed. + // + + UCHAR ObjectId[16]; + + // + // This portion of the object id is not indexed, it's just + // some metadata for the user's benefit. + // + + union { + struct { + UCHAR BirthVolumeId[16]; + UCHAR BirthObjectId[16]; + UCHAR DomainId[16]; + } ; + UCHAR ExtendedInfo[48]; + }; + +} FILE_OBJECTID_BUFFER, *PFILE_OBJECTID_BUFFER; + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning( default : 4201 ) +#endif + +#endif /* _WIN32_WINNT >= 0x0500 */ + + +#if(_WIN32_WINNT >= 0x0500) +// +// Structure for FSCTL_SET_SPARSE +// + +typedef struct _FILE_SET_SPARSE_BUFFER { + BOOLEAN SetSparse; +} FILE_SET_SPARSE_BUFFER, *PFILE_SET_SPARSE_BUFFER; + + +#endif /* _WIN32_WINNT >= 0x0500 */ + + +#if(_WIN32_WINNT >= 0x0500) +// +// Structure for FSCTL_SET_ZERO_DATA +// + +typedef struct _FILE_ZERO_DATA_INFORMATION { + + LARGE_INTEGER FileOffset; + LARGE_INTEGER BeyondFinalZero; + +} FILE_ZERO_DATA_INFORMATION, *PFILE_ZERO_DATA_INFORMATION; +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// Structure for FSCTL_QUERY_ALLOCATED_RANGES +// + +// +// Querying the allocated ranges requires an output buffer to store the +// allocated ranges and an input buffer to specify the range to query. +// The input buffer contains a single entry, the output buffer is an +// array of the following structure. +// + +typedef struct _FILE_ALLOCATED_RANGE_BUFFER { + + LARGE_INTEGER FileOffset; + LARGE_INTEGER Length; + +} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER; +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// Structures for FSCTL_SET_ENCRYPTION, FSCTL_WRITE_RAW_ENCRYPTED, and FSCTL_READ_RAW_ENCRYPTED +// + +// +// The input buffer to set encryption indicates whether we are to encrypt/decrypt a file +// or an individual stream. +// + +typedef struct _ENCRYPTION_BUFFER { + + ULONG EncryptionOperation; + UCHAR Private[1]; + +} ENCRYPTION_BUFFER, *PENCRYPTION_BUFFER; + +#define FILE_SET_ENCRYPTION 0x00000001 +#define FILE_CLEAR_ENCRYPTION 0x00000002 +#define STREAM_SET_ENCRYPTION 0x00000003 +#define STREAM_CLEAR_ENCRYPTION 0x00000004 + +#define MAXIMUM_ENCRYPTION_VALUE 0x00000004 + +// +// The optional output buffer to set encryption indicates that the last encrypted +// stream in a file has been marked as decrypted. +// + +typedef struct _DECRYPTION_STATUS_BUFFER { + + BOOLEAN NoEncryptedStreams; + +} DECRYPTION_STATUS_BUFFER, *PDECRYPTION_STATUS_BUFFER; + +#define ENCRYPTION_FORMAT_DEFAULT (0x01) + +#define COMPRESSION_FORMAT_SPARSE (0x4000) + +// +// Request Encrypted Data structure. This is used to indicate +// the range of the file to read. It also describes the +// output buffer used to return the data. +// + +typedef struct _REQUEST_RAW_ENCRYPTED_DATA { + + // + // Requested file offset and requested length to read. + // The fsctl will round the starting offset down + // to a file system boundary. It will also + // round the length up to a file system boundary. + // + + LONGLONG FileOffset; + ULONG Length; + +} REQUEST_RAW_ENCRYPTED_DATA, *PREQUEST_RAW_ENCRYPTED_DATA; + +// +// Encrypted Data Information structure. This structure +// is used to return raw encrypted data from a file in +// order to perform off-line recovery. The data will be +// encrypted or encrypted and compressed. The off-line +// service will need to use the encryption and compression +// format information to recover the file data. In the +// event that the data is both encrypted and compressed then +// the decryption must occur before decompression. All +// the data units below must be encrypted and compressed +// with the same format. +// +// The data will be returned in units. The data unit size +// will be fixed per request. If the data is compressed +// then the data unit size will be the compression unit size. +// +// This structure is at the beginning of the buffer used to +// return the encrypted data. The actual raw bytes from +// the file will follow this buffer. The offset of the +// raw bytes from the beginning of this structure is +// specified in the REQUEST_RAW_ENCRYPTED_DATA structure +// described above. +// + +typedef struct _ENCRYPTED_DATA_INFO { + + // + // This is the file offset for the first entry in the + // data block array. The file system will round + // the requested start offset down to a boundary + // that is consistent with the format of the file. + // + + ULONGLONG StartingFileOffset; + + // + // Data offset in output buffer. The output buffer + // begins with an ENCRYPTED_DATA_INFO structure. + // The file system will then store the raw bytes from + // disk beginning at the following offset within the + // output buffer. + // + + ULONG OutputBufferOffset; + + // + // The number of bytes being returned that are within + // the size of the file. If this value is less than + // (NumberOfDataBlocks << DataUnitShift), it means the + // end of the file occurs within this transfer. Any + // data beyond file size is invalid and was never + // passed to the encryption driver. + // + + ULONG BytesWithinFileSize; + + // + // The number of bytes being returned that are below + // valid data length. If this value is less than + // (NumberOfDataBlocks << DataUnitShift), it means the + // end of the valid data occurs within this transfer. + // After decrypting the data from this transfer, any + // byte(s) beyond valid data length must be zeroed. + // + + ULONG BytesWithinValidDataLength; + + // + // Code for the compression format as defined in + // ntrtl.h. Note that COMPRESSION_FORMAT_NONE + // and COMPRESSION_FORMAT_DEFAULT are invalid if + // any of the described chunks are compressed. + // + + USHORT CompressionFormat; + + // + // The DataUnit is the granularity used to access the + // disk. It will be the same as the compression unit + // size for a compressed file. For an uncompressed + // file, it will be some cluster-aligned power of 2 that + // the file system deems convenient. A caller should + // not expect that successive calls will have the + // same data unit shift value as the previous call. + // + // Since chunks and compression units are expected to be + // powers of 2 in size, we express them log2. So, for + // example (1 << ChunkShift) == ChunkSizeInBytes. The + // ClusterShift indicates how much space must be saved + // to successfully compress a compression unit - each + // successfully compressed data unit must occupy + // at least one cluster less in bytes than an uncompressed + // data block unit. + // + + UCHAR DataUnitShift; + UCHAR ChunkShift; + UCHAR ClusterShift; + + // + // The format for the encryption. + // + + UCHAR EncryptionFormat; + + // + // This is the number of entries in the data block size + // array. + // + + USHORT NumberOfDataBlocks; + + // + // This is an array of sizes in the data block array. There + // must be one entry in this array for each data block + // read from disk. The size has a different meaning + // depending on whether the file is compressed. + // + // A size of zero always indicates that the final data consists entirely + // of zeroes. There is no decryption or decompression to + // perform. + // + // If the file is compressed then the data block size indicates + // whether this block is compressed. A size equal to + // the block size indicates that the corresponding block did + // not compress. Any other non-zero size indicates the + // size of the compressed data which needs to be + // decrypted/decompressed. + // + // If the file is not compressed then the data block size + // indicates the amount of data within the block that + // needs to be decrypted. Any other non-zero size indicates + // that the remaining bytes in the data unit within the file + // consists of zeros. An example of this is when the + // the read spans the valid data length of the file. There + // is no data to decrypt past the valid data length. + // + + ULONG DataBlockSize[ANYSIZE_ARRAY]; + +} ENCRYPTED_DATA_INFO; +typedef ENCRYPTED_DATA_INFO *PENCRYPTED_DATA_INFO; +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// FSCTL_READ_FROM_PLEX support +// Request Plex Read Data structure. This is used to indicate +// the range of the file to read. It also describes +// which plex to perform the read from. +// + +typedef struct _PLEX_READ_DATA_REQUEST { + + // + // Requested offset and length to read. + // The offset can be the virtual offset (vbo) in to a file, + // or a volume. In the case of a file offset, + // the fsd will round the starting offset down + // to a file system boundary. It will also + // round the length up to a file system boundary and + // enforce any other applicable limits. + // + + LARGE_INTEGER ByteOffset; + ULONG ByteLength; + ULONG PlexNumber; + +} PLEX_READ_DATA_REQUEST, *PPLEX_READ_DATA_REQUEST; +#endif /* _WIN32_WINNT >= 0x0500 */ + +#if(_WIN32_WINNT >= 0x0500) +// +// FSCTL_SIS_COPYFILE support +// Source and destination file names are passed in the FileNameBuffer. +// Both strings are null terminated, with the source name starting at +// the beginning of FileNameBuffer, and the destination name immediately +// following. Length fields include terminating nulls. +// + +typedef struct _SI_COPYFILE { + ULONG SourceFileNameLength; + ULONG DestinationFileNameLength; + ULONG Flags; + WCHAR FileNameBuffer[1]; +} SI_COPYFILE, *PSI_COPYFILE; + +#define COPYFILE_SIS_LINK 0x0001 // Copy only if source is SIS +#define COPYFILE_SIS_REPLACE 0x0002 // Replace destination if it exists, otherwise don't. +#define COPYFILE_SIS_FLAGS 0x0003 +#endif /* _WIN32_WINNT >= 0x0500 */ + +#endif // _FILESYSTEMFSCTL_ + +// end_winioctl + +// +// Structures for FSCTL_SET_REPARSE_POINT, FSCTL_GET_REPARSE_POINT, and FSCTL_DELETE_REPARSE_POINT +// + +// +// The reparse structure is used by layered drivers to store data in a +// reparse point. The constraints on reparse tags are defined below. +// This version of the reparse data buffer is only for Microsoft tags. +// + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4201) // unnamed struct + +typedef struct _REPARSE_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + union { + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } SymbolicLinkReparseBuffer; + struct { + USHORT SubstituteNameOffset; + USHORT SubstituteNameLength; + USHORT PrintNameOffset; + USHORT PrintNameLength; + WCHAR PathBuffer[1]; + } MountPointReparseBuffer; + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; + }; +} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning( default : 4201 ) +#endif + +#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) + + +// begin_winnt +// +// The reparse GUID structure is used by all 3rd party layered drivers to +// store data in a reparse point. For non-Microsoft tags, The GUID field +// cannot be GUID_NULL. +// The constraints on reparse tags are defined below. +// Microsoft tags can also be used with this format of the reparse point buffer. +// + +typedef struct _REPARSE_GUID_DATA_BUFFER { + ULONG ReparseTag; + USHORT ReparseDataLength; + USHORT Reserved; + GUID ReparseGuid; + struct { + UCHAR DataBuffer[1]; + } GenericReparseBuffer; +} REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER; + +#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer) + + + +// +// Maximum allowed size of the reparse data. +// + +#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 ) + +// +// Predefined reparse tags. +// These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h +// + +#define IO_REPARSE_TAG_RESERVED_ZERO (0) +#define IO_REPARSE_TAG_RESERVED_ONE (1) + +// +// The value of the following constant needs to satisfy the following conditions: +// (1) Be at least as large as the largest of the reserved tags. +// (2) Be strictly smaller than all the tags in use. +// + +#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE + +// +// The reparse tags are a ULONG. The 32 bits are laid out as follows: +// +// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 +// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +// +-+-+-+-+-----------------------+-------------------------------+ +// |M|R|N|R| Reserved bits | Reparse Tag Value | +// +-+-+-+-+-----------------------+-------------------------------+ +// +// M is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft. +// All ISVs must use a tag with a 0 in this position. +// Note: If a Microsoft tag is used by non-Microsoft software, the +// behavior is not defined. +// +// R is reserved. Must be zero for non-Microsoft tags. +// +// N is name surrogate. When set to 1, the file represents another named +// entity in the system. +// +// The M and N bits are OR-able. +// The following macros check for the M and N bit values: +// + +// +// Macro to determine whether a reparse point tag corresponds to a tag +// owned by Microsoft. +// + +#define IsReparseTagMicrosoft(_tag) ( \ + ((_tag) & 0x80000000) \ + ) + +// +// Macro to determine whether a reparse point tag is a name surrogate +// + +#define IsReparseTagNameSurrogate(_tag) ( \ + ((_tag) & 0x20000000) \ + ) + +// end_winnt + +// +// The following constant represents the bits that are valid to use in +// reparse tags. +// + +#define IO_REPARSE_TAG_VALID_VALUES (0xF000FFFF) + +// +// Macro to determine whether a reparse tag is a valid tag. +// + +#define IsReparseTagValid(_tag) ( \ + !((_tag) & ~IO_REPARSE_TAG_VALID_VALUES) && \ + ((_tag) > IO_REPARSE_TAG_RESERVED_RANGE) \ + ) + +// +// Microsoft tags for reparse points. +// + +#define IO_REPARSE_TAG_SYMBOLIC_LINK IO_REPARSE_TAG_RESERVED_ZERO +#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L) // winnt ntifs +#define IO_REPARSE_TAG_HSM (0xC0000004L) // winnt ntifs +#define IO_REPARSE_TAG_SIS (0x80000007L) // winnt ntifs +// +// The reparse tags 0x80000008 thru 0x8000000A are reserved for Microsoft +// internal use (may be published in the future) +// +#define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL) // winnt ntifs + + +// +// Non-Microsoft tags for reparse points +// + +// +// Congruent May 2000. Used by IFSTEST +// +#define IO_REPARSE_TAG_IFSTEST_CONGRUENT (0x00000009L) + + +// +// The following three FSCTLs are placed in this file to facilitate sharing +// between the redirector and the IO subsystem +// +// This FSCTL is used to garner the link tracking information for a file. +// The data structures used for retreving the information are +// LINK_TRACKING_INFORMATION defined further down in this file. +// + +#define FSCTL_LMR_GET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,58,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// +// This FSCTL is used to update the link tracking information on a server for +// an intra machine/ inter volume move on that server +// + +#define FSCTL_LMR_SET_LINK_TRACKING_INFORMATION CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,59,METHOD_BUFFERED,FILE_ANY_ACCESS) + +// +// The following IOCTL is used in link tracking implementation. It determines if the +// two file objects passed in are on the same server. This IOCTL is available in +// kernel mode only since it accepts FILE_OBJECT as parameters +// + +#define IOCTL_LMR_ARE_FILE_OBJECTS_ON_SAME_SERVER CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM,60,METHOD_BUFFERED,FILE_ANY_ACCESS) + + + +// +// Named Pipe file control code and structure declarations +// + +// +// External named pipe file control operations +// + +#define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA) +#define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS) + +// +// Internal named pipe file control operations +// + +#define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA) +#define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA) +#define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA) +#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA) + +// +// Define entry types for query event information +// + +#define FILE_PIPE_READ_DATA 0x00000000 +#define FILE_PIPE_WRITE_SPACE 0x00000001 + +// +// Named pipe file system control structure declarations +// + +// Control structure for FSCTL_PIPE_ASSIGN_EVENT + +typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER { + HANDLE EventHandle; + ULONG KeyValue; +} FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER; + +// Control structure for FSCTL_PIPE_PEEK + +typedef struct _FILE_PIPE_PEEK_BUFFER { + ULONG NamedPipeState; + ULONG ReadDataAvailable; + ULONG NumberOfMessages; + ULONG MessageLength; + CHAR Data[1]; +} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER; + +// Control structure for FSCTL_PIPE_QUERY_EVENT + +typedef struct _FILE_PIPE_EVENT_BUFFER { + ULONG NamedPipeState; + ULONG EntryType; + ULONG ByteCount; + ULONG KeyValue; + ULONG NumberRequests; +} FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER; + +// Control structure for FSCTL_PIPE_WAIT + +typedef struct _FILE_PIPE_WAIT_FOR_BUFFER { + LARGE_INTEGER Timeout; + ULONG NameLength; + BOOLEAN TimeoutSpecified; + WCHAR Name[1]; +} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER; + +// Control structure for FSCTL_PIPE_SET_CLIENT_PROCESS and FSCTL_PIPE_QUERY_CLIENT_PROCESS + +typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER { +#if !defined(BUILD_WOW6432) + PVOID ClientSession; + PVOID ClientProcess; +#else + ULONGLONG ClientSession; + ULONGLONG ClientProcess; +#endif +} FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER; + +// This is an extension to the client process info buffer containing the client +// computer name + +#define FILE_PIPE_COMPUTER_NAME_LENGTH 15 + +typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER_EX { +#if !defined(BUILD_WOW6432) + PVOID ClientSession; + PVOID ClientProcess; +#else + ULONGLONG ClientSession; + ULONGLONG ClientProcess; +#endif + USHORT ClientComputerNameLength; // in bytes + WCHAR ClientComputerBuffer[FILE_PIPE_COMPUTER_NAME_LENGTH+1]; // terminated +} FILE_PIPE_CLIENT_PROCESS_BUFFER_EX, *PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX; + +#define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA) +// +// Control structure for FSCTL_LMR_GET_LINK_TRACKING_INFORMATION +// + +// +// For links on DFS volumes the volume id and machine id are returned for +// link tracking +// + +typedef enum _LINK_TRACKING_INFORMATION_TYPE { + NtfsLinkTrackingInformation, + DfsLinkTrackingInformation +} LINK_TRACKING_INFORMATION_TYPE, *PLINK_TRACKING_INFORMATION_TYPE; + +typedef struct _LINK_TRACKING_INFORMATION { + LINK_TRACKING_INFORMATION_TYPE Type; + UCHAR VolumeId[16]; +} LINK_TRACKING_INFORMATION, *PLINK_TRACKING_INFORMATION; + +// +// Control structure for FSCTL_LMR_SET_LINK_TRACKING_INFORMATION +// + +typedef struct _REMOTE_LINK_TRACKING_INFORMATION_ { + PVOID TargetFileObject; + ULONG TargetLinkTrackingInformationLength; + UCHAR TargetLinkTrackingInformationBuffer[1]; +} REMOTE_LINK_TRACKING_INFORMATION, + *PREMOTE_LINK_TRACKING_INFORMATION; + + +// +// Define the I/O bus interface types. +// + +typedef enum _INTERFACE_TYPE { + InterfaceTypeUndefined = -1, + Internal, + Isa, + Eisa, + MicroChannel, + TurboChannel, + PCIBus, + VMEBus, + NuBus, + PCMCIABus, + CBus, + MPIBus, + MPSABus, + ProcessorInternal, + InternalPowerBus, + PNPISABus, + PNPBus, + MaximumInterfaceType +}INTERFACE_TYPE, *PINTERFACE_TYPE; + +// +// Define the DMA transfer widths. +// + +typedef enum _DMA_WIDTH { + Width8Bits, + Width16Bits, + Width32Bits, + MaximumDmaWidth +}DMA_WIDTH, *PDMA_WIDTH; + +// +// Define DMA transfer speeds. +// + +typedef enum _DMA_SPEED { + Compatible, + TypeA, + TypeB, + TypeC, + TypeF, + MaximumDmaSpeed +}DMA_SPEED, *PDMA_SPEED; + +// +// Define Interface reference/dereference routines for +// Interfaces exported by IRP_MN_QUERY_INTERFACE +// + +typedef VOID (*PINTERFACE_REFERENCE)(PVOID Context); +typedef VOID (*PINTERFACE_DEREFERENCE)(PVOID Context); + +// end_wdm + +// +// Define types of bus information. +// + +typedef enum _BUS_DATA_TYPE { + ConfigurationSpaceUndefined = -1, + Cmos, + EisaConfiguration, + Pos, + CbusConfiguration, + PCIConfiguration, + VMEConfiguration, + NuBusConfiguration, + PCMCIAConfiguration, + MPIConfiguration, + MPSAConfiguration, + PNPISAConfiguration, + SgiInternalConfiguration, + MaximumBusDataType +} BUS_DATA_TYPE, *PBUS_DATA_TYPE; + + +#if defined(USE_LPC6432) +#define LPC_CLIENT_ID CLIENT_ID64 +#define LPC_SIZE_T ULONGLONG +#define LPC_PVOID ULONGLONG +#define LPC_HANDLE ULONGLONG +#else +#define LPC_CLIENT_ID CLIENT_ID +#define LPC_SIZE_T SIZE_T +#define LPC_PVOID PVOID +#define LPC_HANDLE HANDLE +#endif + + +typedef struct _PORT_MESSAGE { + union { + struct { + CSHORT DataLength; + CSHORT TotalLength; + } s1; + ULONG Length; + } u1; + union { + struct { + CSHORT Type; + CSHORT DataInfoOffset; + } s2; + ULONG ZeroInit; + } u2; + union { + LPC_CLIENT_ID ClientId; + double DoNotUseThisField; // Force quadword alignment + }; + ULONG MessageId; + union { + LPC_SIZE_T ClientViewSize; // Only valid on LPC_CONNECTION_REQUEST message + ULONG CallbackId; // Only valid on LPC_REQUEST message + }; +// UCHAR Data[]; +} PORT_MESSAGE, *PPORT_MESSAGE; + + +// +// The following bit may be placed in the Type field of a message +// prior calling NtRequestPort or NtRequestWaitReplyPort. If the +// previous mode is KernelMode, the bit it left as is and passed +// to the receiver of the message. Otherwise the bit is clear. +// + +#define LPC_KERNELMODE_MESSAGE (CSHORT)0x8000 + + +typedef struct _PORT_VIEW { + ULONG Length; + LPC_HANDLE SectionHandle; + ULONG SectionOffset; + LPC_SIZE_T ViewSize; + LPC_PVOID ViewBase; + LPC_PVOID ViewRemoteBase; +} PORT_VIEW, *PPORT_VIEW; + +typedef struct _REMOTE_PORT_VIEW { + ULONG Length; + LPC_SIZE_T ViewSize; + LPC_PVOID ViewBase; +} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW; + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtConnectPort( + OUT PHANDLE PortHandle, + IN PUNICODE_STRING PortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PPORT_VIEW ClientView OPTIONAL, + IN OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, + OUT PULONG MaxMessageLength OPTIONAL, + IN OUT PVOID ConnectionInformation OPTIONAL, + IN OUT PULONG ConnectionInformationLength OPTIONAL + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSecureConnectPort( + OUT PHANDLE PortHandle, + IN PUNICODE_STRING PortName, + IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, + IN OUT PPORT_VIEW ClientView OPTIONAL, + IN PSID RequiredServerSid, + IN OUT PREMOTE_PORT_VIEW ServerView OPTIONAL, + OUT PULONG MaxMessageLength OPTIONAL, + IN OUT PVOID ConnectionInformation OPTIONAL, + IN OUT PULONG ConnectionInformationLength OPTIONAL + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtRequestWaitReplyPort( + IN HANDLE PortHandle, + IN PPORT_MESSAGE RequestMessage, + OUT PPORT_MESSAGE ReplyMessage + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtSetSecurityObject( + IN HANDLE Handle, + IN SECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtQuerySecurityObject( + IN HANDLE Handle, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG Length, + OUT PULONG LengthNeeded + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtClose( + IN HANDLE Handle + ); + +#define SEC_COMMIT 0x8000000 + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtCreateSection ( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize OPTIONAL, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL + ); + + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtAllocateVirtualMemory( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG_PTR ZeroBits, + IN OUT PSIZE_T RegionSize, + IN ULONG AllocationType, + IN ULONG Protect + ); + +NTSYSCALLAPI +NTSTATUS +NTAPI +NtFreeVirtualMemory( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + IN ULONG FreeType + ); + +// +// Priority increment definitions. The comment for each definition gives +// the names of the system services that use the definition when satisfying +// a wait. +// + +// +// Priority increment used when satisfying a wait on an executive event +// (NtPulseEvent and NtSetEvent) +// + +#define EVENT_INCREMENT 1 + +// +// Priority increment when no I/O has been done. This is used by device +// and file system drivers when completing an IRP (IoCompleteRequest). +// + +#define IO_NO_INCREMENT 0 + + +// +// Priority increment for completing CD-ROM I/O. This is used by CD-ROM device +// and file system drivers when completing an IRP (IoCompleteRequest) +// + +#define IO_CD_ROM_INCREMENT 1 + +// +// Priority increment for completing disk I/O. This is used by disk device +// and file system drivers when completing an IRP (IoCompleteRequest) +// + +#define IO_DISK_INCREMENT 1 + +// +// Priority increment for completing mailslot I/O. This is used by the mail- +// slot file system driver when completing an IRP (IoCompleteRequest). +// + +#define IO_MAILSLOT_INCREMENT 2 + +// +// Priority increment for completing named pipe I/O. This is used by the +// named pipe file system driver when completing an IRP (IoCompleteRequest). +// + +#define IO_NAMED_PIPE_INCREMENT 2 + +// +// Priority increment for completing network I/O. This is used by network +// device and network file system drivers when completing an IRP +// (IoCompleteRequest). +// + +#define IO_NETWORK_INCREMENT 2 + +// +// Priority increment used when satisfying a wait on an executive semaphore +// (NtReleaseSemaphore) +// + +#define SEMAPHORE_INCREMENT 1 + + +#if defined(_X86_) + +// +// Types to use to contain PFNs and their counts. +// + +typedef ULONG PFN_COUNT; + +typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; +typedef ULONG PFN_NUMBER, *PPFN_NUMBER; + +// +// Define maximum size of flush multiple TB request. +// + +#define FLUSH_MULTIPLE_MAXIMUM 16 + +// +// Indicate that the i386 compiler supports the pragma textout construct. +// + +#define ALLOC_PRAGMA 1 +// +// Indicate that the i386 compiler supports the DATA_SEG("INIT") and +// DATA_SEG("PAGE") pragmas +// + +#define ALLOC_DATA_PRAGMA 1 + +#define NORMAL_DISPATCH_LENGTH 106 +#define DISPATCH_LENGTH NORMAL_DISPATCH_LENGTH +// +// Interrupt Request Level definitions +// + +#define PASSIVE_LEVEL 0 // Passive release level +#define LOW_LEVEL 0 // Lowest interrupt level +#define APC_LEVEL 1 // APC interrupt level +#define DISPATCH_LEVEL 2 // Dispatcher level + +#define PROFILE_LEVEL 27 // timer used for profiling. +#define CLOCK1_LEVEL 28 // Interval clock 1 level - Not used on x86 +#define CLOCK2_LEVEL 28 // Interval clock 2 level +#define IPI_LEVEL 29 // Interprocessor interrupt level +#define POWER_LEVEL 30 // Power failure level +#define HIGH_LEVEL 31 // Highest interrupt level + +#if defined(NT_UP) + +#define SYNCH_LEVEL DISPATCH_LEVEL // synchronization level - UP system + +#else + +#define SYNCH_LEVEL (IPI_LEVEL-1) // synchronization level - MP system + +#endif + + +// +// I/O space read and write macros. +// +// These have to be actual functions on the 386, because we need +// to use assembler, but cannot return a value if we inline it. +// +// The READ/WRITE_REGISTER_* calls manipulate I/O registers in MEMORY space. +// (Use x86 move instructions, with LOCK prefix to force correct behavior +// w.r.t. caches and write buffers.) +// +// The READ/WRITE_PORT_* calls manipulate I/O registers in PORT space. +// (Use x86 in/out instructions.) +// + +NTKERNELAPI +UCHAR +NTAPI +READ_REGISTER_UCHAR( + PUCHAR Register + ); + +NTKERNELAPI +USHORT +NTAPI +READ_REGISTER_USHORT( + PUSHORT Register + ); + +NTKERNELAPI +ULONG +NTAPI +READ_REGISTER_ULONG( + PULONG Register + ); + +NTKERNELAPI +VOID +NTAPI +READ_REGISTER_BUFFER_UCHAR( + PUCHAR Register, + PUCHAR Buffer, + ULONG Count + ); + +NTKERNELAPI +VOID +NTAPI +READ_REGISTER_BUFFER_USHORT( + PUSHORT Register, + PUSHORT Buffer, + ULONG Count + ); + +NTKERNELAPI +VOID +NTAPI +READ_REGISTER_BUFFER_ULONG( + PULONG Register, + PULONG Buffer, + ULONG Count + ); + + +NTKERNELAPI +VOID +NTAPI +WRITE_REGISTER_UCHAR( + PUCHAR Register, + UCHAR Value + ); + +NTKERNELAPI +VOID +NTAPI +WRITE_REGISTER_USHORT( + PUSHORT Register, + USHORT Value + ); + +NTKERNELAPI +VOID +NTAPI +WRITE_REGISTER_ULONG( + PULONG Register, + ULONG Value + ); + +NTKERNELAPI +VOID +NTAPI +WRITE_REGISTER_BUFFER_UCHAR( + PUCHAR Register, + PUCHAR Buffer, + ULONG Count + ); + +NTKERNELAPI +VOID +NTAPI +WRITE_REGISTER_BUFFER_USHORT( + PUSHORT Register, + PUSHORT Buffer, + ULONG Count + ); + +NTKERNELAPI +VOID +NTAPI +WRITE_REGISTER_BUFFER_ULONG( + PULONG Register, + PULONG Buffer, + ULONG Count + ); + +NTHALAPI +UCHAR +NTAPI +READ_PORT_UCHAR( + PUCHAR Port + ); + +NTHALAPI +USHORT +NTAPI +READ_PORT_USHORT( + PUSHORT Port + ); + +NTHALAPI +ULONG +NTAPI +READ_PORT_ULONG( + PULONG Port + ); + +NTHALAPI +VOID +NTAPI +READ_PORT_BUFFER_UCHAR( + PUCHAR Port, + PUCHAR Buffer, + ULONG Count + ); + +NTHALAPI +VOID +NTAPI +READ_PORT_BUFFER_USHORT( + PUSHORT Port, + PUSHORT Buffer, + ULONG Count + ); + +NTHALAPI +VOID +NTAPI +READ_PORT_BUFFER_ULONG( + PULONG Port, + PULONG Buffer, + ULONG Count + ); + +NTHALAPI +VOID +NTAPI +WRITE_PORT_UCHAR( + PUCHAR Port, + UCHAR Value + ); + +NTHALAPI +VOID +NTAPI +WRITE_PORT_USHORT( + PUSHORT Port, + USHORT Value + ); + +NTHALAPI +VOID +NTAPI +WRITE_PORT_ULONG( + PULONG Port, + ULONG Value + ); + +NTHALAPI +VOID +NTAPI +WRITE_PORT_BUFFER_UCHAR( + PUCHAR Port, + PUCHAR Buffer, + ULONG Count + ); + +NTHALAPI +VOID +NTAPI +WRITE_PORT_BUFFER_USHORT( + PUSHORT Port, + PUSHORT Buffer, + ULONG Count + ); + +NTHALAPI +VOID +NTAPI +WRITE_PORT_BUFFER_ULONG( + PULONG Port, + PULONG Buffer, + ULONG Count + ); + +// end_ntndis +// +// Get data cache fill size. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(KeGetDcacheFillSize) // Use GetDmaAlignment +#endif + +#define KeGetDcacheFillSize() 1L + + +#define KeFlushIoBuffers(Mdl, ReadOperation, DmaOperation) + + +#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) +#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) +#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) +#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) + + +#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) + +// begin_wdm + +#define KeQueryTickCount(CurrentCount ) { \ + volatile PKSYSTEM_TIME _TickCount = *((PKSYSTEM_TIME *)(&KeTickCount)); \ + while (TRUE) { \ + (CurrentCount)->HighPart = _TickCount->High1Time; \ + (CurrentCount)->LowPart = _TickCount->LowPart; \ + if ((CurrentCount)->HighPart == _TickCount->High2Time) break; \ + _asm { rep nop } \ + } \ +} + +// end_wdm + +#else + + +VOID +NTAPI +KeQueryTickCount ( + OUT PLARGE_INTEGER CurrentCount + ); + +#endif // defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) + + +// +// Processor Control Region Structure Definition +// + +#define PCR_MINOR_VERSION 1 +#define PCR_MAJOR_VERSION 1 + +typedef struct _KPCR { + +// +// Start of the architecturally defined section of the PCR. This section +// may be directly addressed by vendor/platform specific HAL code and will +// not change from version to version of NT. +// + + NT_TIB NtTib; + struct _KPCR *SelfPcr; // flat address of this PCR + struct _KPRCB *Prcb; // pointer to Prcb + KIRQL Irql; + ULONG IRR; + ULONG IrrActive; + ULONG IDR; + PVOID KdVersionBlock; + + struct _KIDTENTRY *IDT; + struct _KGDTENTRY *GDT; + struct _KTSS *TSS; + USHORT MajorVersion; + USHORT MinorVersion; + KAFFINITY SetMember; + ULONG StallScaleFactor; + UCHAR DebugActive; + UCHAR Number; + + +} KPCR, *PKPCR; + +// +// The non-volatile 387 state +// + +typedef struct _KFLOATING_SAVE { + ULONG ControlWord; + ULONG StatusWord; + ULONG ErrorOffset; + ULONG ErrorSelector; + ULONG DataOffset; // Not used in wdm + ULONG DataSelector; + ULONG Cr0NpxState; + ULONG Spare1; // Not used in wdm +} KFLOATING_SAVE, *PKFLOATING_SAVE; + +// +// i386 Specific portions of mm component +// + +// +// Define the page size for the Intel 386 as 4096 (0x1000). +// + +#define PAGE_SIZE 0x1000 + +// +// Define the number of trailing zeroes in a page aligned virtual address. +// This is used as the shift count when shifting virtual addresses to +// virtual page numbers. +// + +#define PAGE_SHIFT 12L + +// end_ntndis end_wdm +// +// Define the number of bits to shift to right justify the Page Directory Index +// field of a PTE. +// + +#define PDI_SHIFT_X86 22 +#define PDI_SHIFT_X86PAE 21 + +#if !defined (_X86PAE_) +#define PDI_SHIFT PDI_SHIFT_X86 +#else +#define PDI_SHIFT PDI_SHIFT_X86PAE +#define PPI_SHIFT 30 +#endif + +// +// Define the number of bits to shift to right justify the Page Table Index +// field of a PTE. +// + +#define PTI_SHIFT 12 + +// +// Define the highest user address and user probe address. +// + + +extern PVOID *MmHighestUserAddress; +extern PVOID *MmSystemRangeStart; +extern ULONG *MmUserProbeAddress; + +#define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress +#define MM_SYSTEM_RANGE_START *MmSystemRangeStart +#define MM_USER_PROBE_ADDRESS *MmUserProbeAddress + +// +// The lowest user address reserves the low 64k. +// + +#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 + +// +// The lowest address for system space. +// + +#if !defined (_X86PAE_) +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000 +#else +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 +#endif + +// begin_wdm + +#define MmGetProcedureAddress(Address) (Address) +#define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address) + +#define KIP0PCRADDRESS 0xffdff000 + +#define KI_USER_SHARED_DATA 0xffdf0000 +#define SharedUserData ((KUSER_SHARED_DATA * const) KI_USER_SHARED_DATA) + +// +// Result type definition for i386. (Machine specific enumerate type +// which is return type for portable exinterlockedincrement/decrement +// procedures.) In general, you should use the enumerated type defined +// in ex.h instead of directly referencing these constants. +// + +// Flags loaded into AH by LAHF instruction + +#define EFLAG_SIGN 0x8000 +#define EFLAG_ZERO 0x4000 +#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) + +#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) +#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) +#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) + +// +// Convert various portable ExInterlock APIs into their architectural +// equivalents. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInterlockedIncrementLong) // Use InterlockedIncrement +#pragma deprecated(ExInterlockedDecrementLong) // Use InterlockedDecrement +#pragma deprecated(ExInterlockedExchangeUlong) // Use InterlockedExchange +#endif + +#define ExInterlockedIncrementLong(Addend,Lock) \ + Exfi386InterlockedIncrementLong(Addend) + +#define ExInterlockedDecrementLong(Addend,Lock) \ + Exfi386InterlockedDecrementLong(Addend) + +#define ExInterlockedExchangeUlong(Target,Value,Lock) \ + Exfi386InterlockedExchangeUlong(Target,Value) + +// begin_wdm + +#define ExInterlockedAddUlong ExfInterlockedAddUlong +#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList +#define ExInterlockedInsertTailList ExfInterlockedInsertTailList +#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList +#define ExInterlockedPopEntryList ExfInterlockedPopEntryList +#define ExInterlockedPushEntryList ExfInterlockedPushEntryList + +// end_wdm + +// +// Prototypes for architectural specific versions of Exi386 Api +// + +// +// Interlocked result type is portable, but its values are machine specific. +// Constants for value are in i386.h, mips.h, etc. +// + +typedef enum _INTERLOCKED_RESULT { + ResultNegative = RESULT_NEGATIVE, + ResultZero = RESULT_ZERO, + ResultPositive = RESULT_POSITIVE +} INTERLOCKED_RESULT; + +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedIncrementLong ( + IN PLONG Addend + ); + +NTKERNELAPI +INTERLOCKED_RESULT +FASTCALL +Exfi386InterlockedDecrementLong ( + IN PLONG Addend + ); + +NTKERNELAPI +ULONG +FASTCALL +Exfi386InterlockedExchangeUlong ( + IN PULONG Target, + IN ULONG Value + ); + +#if !defined(_WINBASE_) && !defined(NONTOSPINTERLOCK) +#if !defined(MIDL_PASS) // wdm +#if defined(NO_INTERLOCKED_INTRINSICS) || defined(_CROSS_PLATFORM_) +// begin_wdm + +NTKERNELAPI +LONG +FASTCALL +InterlockedIncrement( + IN LONG volatile *Addend + ); + +NTKERNELAPI +LONG +FASTCALL +InterlockedDecrement( + IN LONG volatile *Addend + ); + +NTKERNELAPI +LONG +FASTCALL +InterlockedExchange( + IN OUT LONG volatile *Target, + IN LONG Value + ); + +#define InterlockedExchangePointer(Target, Value) \ + (PVOID)InterlockedExchange((PLONG)(Target), (LONG)(Value)) + +LONG +FASTCALL +InterlockedExchangeAdd( + IN OUT LONG volatile *Addend, + IN LONG Increment + ); + +NTKERNELAPI +LONG +FASTCALL +InterlockedCompareExchange( + IN OUT LONG volatile *Destination, + IN LONG ExChange, + IN LONG Comperand + ); + +#define InterlockedCompareExchangePointer(Destination, ExChange, Comperand) \ + (PVOID)InterlockedCompareExchange((PLONG)Destination, (LONG)ExChange, (LONG)Comperand) + +#define InterlockedCompareExchange64(Destination, ExChange, Comperand) \ + ExfInterlockedCompareExchange64(Destination, &(ExChange), &(Comperand)) + +NTKERNELAPI +LONGLONG +FASTCALL +ExfInterlockedCompareExchange64( + IN OUT LONGLONG volatile *Destination, + IN PLONGLONG ExChange, + IN PLONGLONG Comperand + ); + +// end_wdm + +#else // NO_INTERLOCKED_INCREMENTS || _CROSS_PLATFORM_ + +#define InterlockedExchangePointer(Target, Value) \ + (PVOID)InterlockedExchange((PLONG)Target, (LONG)Value) + + +#if (_MSC_FULL_VER > 13009037) +LONG +__cdecl +_InterlockedExchange( + IN OUT LONG volatile *Target, + IN LONG Value + ); + +#pragma intrinsic (_InterlockedExchange) +#define InterlockedExchange _InterlockedExchange +#else +FORCEINLINE +LONG +FASTCALL +InterlockedExchange( + IN OUT LONG volatile *Target, + IN LONG Value + ) +{ + __asm { + mov eax, Value + mov ecx, Target + xchg [ecx], eax + } +} +#endif + +#if (_MSC_FULL_VER > 13009037) +LONG +__cdecl +_InterlockedIncrement( + IN LONG volatile *Addend + ); + +#pragma intrinsic (_InterlockedIncrement) +#define InterlockedIncrement _InterlockedIncrement +#else +#define InterlockedIncrement(Addend) (InterlockedExchangeAdd (Addend, 1)+1) +#endif + +#if (_MSC_FULL_VER > 13009037) +LONG +__cdecl +_InterlockedDecrement( + IN LONG volatile *Addend + ); + +#pragma intrinsic (_InterlockedDecrement) +#define InterlockedDecrement _InterlockedDecrement +#else +#define InterlockedDecrement(Addend) (InterlockedExchangeAdd (Addend, -1)-1) +#endif + +#if (_MSC_FULL_VER > 13009037) +LONG +__cdecl +_InterlockedExchangeAdd( + IN OUT LONG volatile *Addend, + IN LONG Increment + ); + +#pragma intrinsic (_InterlockedExchangeAdd) +#define InterlockedExchangeAdd _InterlockedExchangeAdd +#else +// begin_wdm +FORCEINLINE +LONG +FASTCALL +InterlockedExchangeAdd( + IN OUT LONG volatile *Addend, + IN LONG Increment + ) +{ + __asm { + mov eax, Increment + mov ecx, Addend + lock xadd [ecx], eax + } +} +// end_wdm +#endif + +#if (_MSC_FULL_VER > 13009037) +LONG +__cdecl +_InterlockedCompareExchange ( + IN OUT LONG volatile *Destination, + IN LONG ExChange, + IN LONG Comperand + ); + +#pragma intrinsic (_InterlockedCompareExchange) +#define InterlockedCompareExchange (LONG)_InterlockedCompareExchange +#else +FORCEINLINE +LONG +FASTCALL +InterlockedCompareExchange( + IN OUT LONG volatile *Destination, + IN LONG Exchange, + IN LONG Comperand + ) +{ + __asm { + mov eax, Comperand + mov ecx, Destination + mov edx, Exchange + lock cmpxchg [ecx], edx + } +} +#endif + +#define InterlockedCompareExchangePointer(Destination, ExChange, Comperand) \ + (PVOID)InterlockedCompareExchange((PLONG)Destination, (LONG)ExChange, (LONG)Comperand) + +#define InterlockedCompareExchange64(Destination, ExChange, Comperand) \ + ExfInterlockedCompareExchange64(Destination, &(ExChange), &(Comperand)) + +NTKERNELAPI +LONGLONG +FASTCALL +ExfInterlockedCompareExchange64( + IN OUT LONGLONG volatile *Destination, + IN PLONGLONG ExChange, + IN PLONGLONG Comperand + ); + +#endif // INTERLOCKED_INTRINSICS || _CROSS_PLATFORM_ +// begin_wdm +#endif // MIDL_PASS +#endif // __WINBASE__ && !NONTOSPINTERLOCK + +// +// Turn these instrinsics off until the compiler can handle them +// +#if (_MSC_FULL_VER > 13009037) + +LONG +_InterlockedOr ( + IN OUT PLONG Target, + IN LONG Set + ); + +#pragma intrinsic (_InterlockedOr) + +#define InterlockedOr _InterlockedOr + +LONG +_InterlockedAnd ( + IN OUT LONG volatile *Target, + IN LONG Set + ); + +#pragma intrinsic (_InterlockedAnd) + +#define InterlockedAnd _InterlockedAnd + +LONG +_InterlockedXor ( + IN OUT LONG volatile Target, + IN LONG Set + ); + +#pragma intrinsic (_InterlockedXor) + +#define InterlockedXor _InterlockedXor + +#else // compiler version + +FORCEINLINE +LONG +InterlockedAnd ( + IN OUT LONG volatile *Target, + LONG Set + ) +{ + LONG i; + LONG j; + + j = *Target; + do { + i = j; + j = InterlockedCompareExchange(Target, + i & Set, + i); + + } while (i != j); + + return j; +} + +FORCEINLINE +LONG +InterlockedOr ( + IN OUT LONG volatile *Target, + IN LONG Set + ) +{ + LONG i; + LONG j; + + j = *Target; + do { + i = j; + j = InterlockedCompareExchange(Target, + i | Set, + i); + + } while (i != j); + + return j; +} + +#endif // compiler version + + + +#if !defined(MIDL_PASS) && defined(_M_IX86) + +// +// i386 function definitions +// + +#pragma warning(disable:4035) // re-enable below + +// end_wdm + +#if NT_UP + #define _PCR ds:[KIP0PCRADDRESS] +#else + #define _PCR fs:[0] +#endif + + +// +// Get current IRQL. +// +// On x86 this function resides in the HAL +// + +NTHALAPI +KIRQL +NTAPI +KeGetCurrentIrql(); + +// end_wdm +// +// Get the current processor number +// + +FORCEINLINE +ULONG +NTAPI +KeGetCurrentProcessorNumber(VOID) +{ + __asm { movzx eax, _PCR KPCR.Number } +} + + +#pragma warning(default:4035) + +// begin_wdm +#endif // !defined(MIDL_PASS) && defined(_M_IX86) + + +NTKERNELAPI +NTSTATUS +NTAPI +KeSaveFloatingPointState ( + OUT PKFLOATING_SAVE FloatSave + ); + +NTKERNELAPI +NTSTATUS +NTAPI +KeRestoreFloatingPointState ( + IN PKFLOATING_SAVE FloatSave + ); + + +#endif // defined(_X86_) + + +// Use the following for kernel mode runtime checks of X86 system architecture + +#ifdef _X86_ + +#ifdef IsNEC_98 +#undef IsNEC_98 +#endif + +#ifdef IsNotNEC_98 +#undef IsNotNEC_98 +#endif + +#ifdef SetNEC_98 +#undef SetNEC_98 +#endif + +#ifdef SetNotNEC_98 +#undef SetNotNEC_98 +#endif + +#define IsNEC_98 (SharedUserData->AlternativeArchitecture == NEC98x86) +#define IsNotNEC_98 (SharedUserData->AlternativeArchitecture != NEC98x86) +#define SetNEC_98 SharedUserData->AlternativeArchitecture = NEC98x86 +#define SetNotNEC_98 SharedUserData->AlternativeArchitecture = StandardDesign + +#endif + + +#if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) + +// +// Define intrinsic function to do in's and out's. +// + +#ifdef __cplusplus +extern "C" { +#endif + +UCHAR +__inbyte ( + IN USHORT Port + ); + +USHORT +__inword ( + IN USHORT Port + ); + +ULONG +__indword ( + IN USHORT Port + ); + +VOID +__outbyte ( + IN USHORT Port, + IN UCHAR Data + ); + +VOID +__outword ( + IN USHORT Port, + IN USHORT Data + ); + +VOID +__outdword ( + IN USHORT Port, + IN ULONG Data + ); + +VOID +__inbytestring ( + IN USHORT Port, + IN PUCHAR Buffer, + IN ULONG Count + ); + +VOID +__inwordstring ( + IN USHORT Port, + IN PUSHORT Buffer, + IN ULONG Count + ); + +VOID +__indwordstring ( + IN USHORT Port, + IN PULONG Buffer, + IN ULONG Count + ); + +VOID +__outbytestring ( + IN USHORT Port, + IN PUCHAR Buffer, + IN ULONG Count + ); + +VOID +__outwordstring ( + IN USHORT Port, + IN PUSHORT Buffer, + IN ULONG Count + ); + +VOID +__outdwordstring ( + IN USHORT Port, + IN PULONG Buffer, + IN ULONG Count + ); + +#ifdef __cplusplus +} +#endif + +#pragma intrinsic(__inbyte) +#pragma intrinsic(__inword) +#pragma intrinsic(__indword) +#pragma intrinsic(__outbyte) +#pragma intrinsic(__outword) +#pragma intrinsic(__outdword) +#pragma intrinsic(__inbytestring) +#pragma intrinsic(__inwordstring) +#pragma intrinsic(__indwordstring) +#pragma intrinsic(__outbytestring) +#pragma intrinsic(__outwordstring) +#pragma intrinsic(__outdwordstring) + +// +// Interlocked intrinsic functions. +// + +#define InterlockedAnd _InterlockedAnd +#define InterlockedOr _InterlockedOr +#define InterlockedXor _InterlockedXor +#define InterlockedIncrement _InterlockedIncrement +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedAdd _InterlockedAdd +#define InterlockedExchange _InterlockedExchange +#define InterlockedExchangeAdd _InterlockedExchangeAdd +#define InterlockedCompareExchange _InterlockedCompareExchange + +#define InterlockedAnd64 _InterlockedAnd64 +#define InterlockedOr64 _InterlockedOr64 +#define InterlockedXor64 _InterlockedXor64 +#define InterlockedIncrement64 _InterlockedIncrement64 +#define InterlockedDecrement64 _InterlockedDecrement64 +#define InterlockedAdd64 _InterlockedAdd64 +#define InterlockedExchange64 _InterlockedExchange64 +#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64 +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 + +#define InterlockedExchangePointer _InterlockedExchangePointer +#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer + +#ifdef __cplusplus +extern "C" { +#endif + +LONG +InterlockedAnd ( + IN OUT LONG volatile *Destination, + IN LONG Value + ); + +LONG +InterlockedOr ( + IN OUT LONG volatile *Destination, + IN LONG Value + ); + +LONG +InterlockedXor ( + IN OUT LONG volatile *Destination, + IN LONG Value + ); + +LONG64 +InterlockedAnd64 ( + IN OUT LONG64 volatile *Destination, + IN LONG64 Value + ); + +LONG64 +InterlockedOr64 ( + IN OUT LONG64 volatile *Destination, + IN LONG64 Value + ); + +LONG64 +InterlockedXor64 ( + IN OUT LONG64 volatile *Destination, + IN LONG64 Value + ); + +LONG +InterlockedIncrement( + IN OUT LONG volatile *Addend + ); + +LONG +InterlockedDecrement( + IN OUT LONG volatile *Addend + ); + +LONG +InterlockedExchange( + IN OUT LONG volatile *Target, + IN LONG Value + ); + +LONG +InterlockedExchangeAdd( + IN OUT LONG volatile *Addend, + IN LONG Value + ); + +#if !defined(_X86AMD64_) + +__forceinline +LONG +InterlockedAdd( + IN OUT LONG volatile *Addend, + IN LONG Value + ) + +{ + return InterlockedExchangeAdd(Addend, Value) + Value; +} + +#endif + +LONG +InterlockedCompareExchange ( + IN OUT LONG volatile *Destination, + IN LONG ExChange, + IN LONG Comperand + ); + +LONG64 +InterlockedIncrement64( + IN OUT LONG64 volatile *Addend + ); + +LONG64 +InterlockedDecrement64( + IN OUT LONG64 volatile *Addend + ); + +LONG64 +InterlockedExchange64( + IN OUT LONG64 volatile *Target, + IN LONG64 Value + ); + +LONG64 +InterlockedExchangeAdd64( + IN OUT LONG64 volatile *Addend, + IN LONG64 Value + ); + +#if !defined(_X86AMD64_) + +__forceinline +LONG64 +InterlockedAdd64( + IN OUT LONG64 volatile *Addend, + IN LONG64 Value + ) + +{ + return InterlockedExchangeAdd64(Addend, Value) + Value; +} + +#endif + +LONG64 +InterlockedCompareExchange64 ( + IN OUT LONG64 volatile *Destination, + IN LONG64 ExChange, + IN LONG64 Comperand + ); + +PVOID +InterlockedCompareExchangePointer ( + IN OUT PVOID volatile *Destination, + IN PVOID Exchange, + IN PVOID Comperand + ); + +PVOID +InterlockedExchangePointer( + IN OUT PVOID volatile *Target, + IN PVOID Value + ); + +#pragma intrinsic(_InterlockedAnd) +#pragma intrinsic(_InterlockedOr) +#pragma intrinsic(_InterlockedXor) +#pragma intrinsic(_InterlockedIncrement) +#pragma intrinsic(_InterlockedDecrement) +#pragma intrinsic(_InterlockedExchange) +#pragma intrinsic(_InterlockedExchangeAdd) +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedAnd64) +#pragma intrinsic(_InterlockedOr64) +#pragma intrinsic(_InterlockedXor64) +#pragma intrinsic(_InterlockedIncrement64) +#pragma intrinsic(_InterlockedDecrement64) +#pragma intrinsic(_InterlockedExchange64) +#pragma intrinsic(_InterlockedExchangeAdd64) +#pragma intrinsic(_InterlockedCompareExchange64) +#pragma intrinsic(_InterlockedExchangePointer) +#pragma intrinsic(_InterlockedCompareExchangePointer) + +#ifdef __cplusplus +} +#endif + +#endif // defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) + +#if defined(_AMD64_) + +// +// Types to use to contain PFNs and their counts. +// + +typedef ULONG PFN_COUNT; + +typedef LONG64 SPFN_NUMBER, *PSPFN_NUMBER; +typedef ULONG64 PFN_NUMBER, *PPFN_NUMBER; + +// +// Define maximum size of flush multiple TB request. +// + +#define FLUSH_MULTIPLE_MAXIMUM 16 + +// +// Indicate that the AMD64 compiler supports the allocate pragmas. +// + +#define ALLOC_PRAGMA 1 +#define ALLOC_DATA_PRAGMA 1 + +#define NORMAL_DISPATCH_LENGTH 106 +#define DISPATCH_LENGTH NORMAL_DISPATCH_LENGTH + +// +// Interrupt Request Level definitions +// + +#define PASSIVE_LEVEL 0 // Passive release level +#define LOW_LEVEL 0 // Lowest interrupt level +#define APC_LEVEL 1 // APC interrupt level +#define DISPATCH_LEVEL 2 // Dispatcher level + +#define CLOCK_LEVEL 13 // Interval clock level +#define IPI_LEVEL 14 // Interprocessor interrupt level +#define POWER_LEVEL 14 // Power failure level +#define PROFILE_LEVEL 15 // timer used for profiling. +#define HIGH_LEVEL 15 // Highest interrupt level + +#if defined(NT_UP) + +#define SYNCH_LEVEL DISPATCH_LEVEL // synchronization level + +#else + +#define SYNCH_LEVEL (IPI_LEVEL - 1) // synchronization level + +#endif + +#define IRQL_VECTOR_OFFSET 2 // offset from IRQL to vector / 16 + + +// +// I/O space read and write macros. +// +// The READ/WRITE_REGISTER_* calls manipulate I/O registers in MEMORY space. +// (Use move instructions, with LOCK prefix to force correct behavior +// w.r.t. caches and write buffers.) +// +// The READ/WRITE_PORT_* calls manipulate I/O registers in PORT space. +// (Use in/out instructions.) +// + +__forceinline +UCHAR +READ_REGISTER_UCHAR ( + volatile UCHAR *Register + ) +{ + return *Register; +} + +__forceinline +USHORT +READ_REGISTER_USHORT ( + volatile USHORT *Register + ) +{ + return *Register; +} + +__forceinline +ULONG +READ_REGISTER_ULONG ( + volatile ULONG *Register + ) +{ + return *Register; +} + +__forceinline +VOID +READ_REGISTER_BUFFER_UCHAR ( + PUCHAR Register, + PUCHAR Buffer, + ULONG Count + ) +{ + __movsb(Register, Buffer, Count); + return; +} + +__forceinline +VOID +READ_REGISTER_BUFFER_USHORT ( + PUSHORT Register, + PUSHORT Buffer, + ULONG Count + ) +{ + __movsw(Register, Buffer, Count); + return; +} + +__forceinline +VOID +READ_REGISTER_BUFFER_ULONG ( + PULONG Register, + PULONG Buffer, + ULONG Count + ) +{ + __movsd(Register, Buffer, Count); + return; +} + +__forceinline +VOID +WRITE_REGISTER_UCHAR ( + PUCHAR Register, + UCHAR Value + ) +{ + LONG Synch; + + *Register = Value; + InterlockedOr(&Synch, 1); + return; +} + +__forceinline +VOID +WRITE_REGISTER_USHORT ( + PUSHORT Register, + USHORT Value + ) +{ + LONG Synch; + + *Register = Value; + InterlockedOr(&Synch, 1); + return; +} + +__forceinline +VOID +WRITE_REGISTER_ULONG ( + PULONG Register, + ULONG Value + ) +{ + LONG Synch; + + *Register = Value; + InterlockedOr(&Synch, 1); + return; +} + +__forceinline +VOID +WRITE_REGISTER_BUFFER_UCHAR ( + PUCHAR Register, + PUCHAR Buffer, + ULONG Count + ) +{ + LONG Synch; + + __movsb(Register, Buffer, Count); + InterlockedOr(&Synch, 1); + return; +} + +__forceinline +VOID +WRITE_REGISTER_BUFFER_USHORT ( + PUSHORT Register, + PUSHORT Buffer, + ULONG Count + ) +{ + LONG Synch; + + __movsw(Register, Buffer, Count); + InterlockedOr(&Synch, 1); + return; +} + +__forceinline +VOID +WRITE_REGISTER_BUFFER_ULONG ( + PULONG Register, + PULONG Buffer, + ULONG Count + ) +{ + LONG Synch; + + __movsd(Register, Buffer, Count); + InterlockedOr(&Synch, 1); + return; +} + +__forceinline +UCHAR +READ_PORT_UCHAR ( + PUCHAR Port + ) + +{ + return __inbyte((USHORT)((ULONG64)Port)); +} + +__forceinline +USHORT +READ_PORT_USHORT ( + PUSHORT Port + ) + +{ + return __inword((USHORT)((ULONG64)Port)); +} + +__forceinline +ULONG +READ_PORT_ULONG ( + PULONG Port + ) + +{ + return __indword((USHORT)((ULONG64)Port)); +} + + +__forceinline +VOID +READ_PORT_BUFFER_UCHAR ( + PUCHAR Port, + PUCHAR Buffer, + ULONG Count + ) + +{ + __inbytestring((USHORT)((ULONG64)Port), Buffer, Count); + return; +} + +__forceinline +VOID +READ_PORT_BUFFER_USHORT ( + PUSHORT Port, + PUSHORT Buffer, + ULONG Count + ) + +{ + __inwordstring((USHORT)((ULONG64)Port), Buffer, Count); + return; +} + +__forceinline +VOID +READ_PORT_BUFFER_ULONG ( + PULONG Port, + PULONG Buffer, + ULONG Count + ) + +{ + __indwordstring((USHORT)((ULONG64)Port), Buffer, Count); + return; +} + +__forceinline +VOID +WRITE_PORT_UCHAR ( + PUCHAR Port, + UCHAR Value + ) + +{ + __outbyte((USHORT)((ULONG64)Port), Value); + return; +} + +__forceinline +VOID +WRITE_PORT_USHORT ( + PUSHORT Port, + USHORT Value + ) + +{ + __outword((USHORT)((ULONG64)Port), Value); + return; +} + +__forceinline +VOID +WRITE_PORT_ULONG ( + PULONG Port, + ULONG Value + ) + +{ + __outdword((USHORT)((ULONG64)Port), Value); + return; +} + +__forceinline +VOID +WRITE_PORT_BUFFER_UCHAR ( + PUCHAR Port, + PUCHAR Buffer, + ULONG Count + ) + +{ + __outbytestring((USHORT)((ULONG64)Port), Buffer, Count); + return; +} + +__forceinline +VOID +WRITE_PORT_BUFFER_USHORT ( + PUSHORT Port, + PUSHORT Buffer, + ULONG Count + ) + +{ + __outwordstring((USHORT)((ULONG64)Port), Buffer, Count); + return; +} + +__forceinline +VOID +WRITE_PORT_BUFFER_ULONG ( + PULONG Port, + PULONG Buffer, + ULONG Count + ) + +{ + __outdwordstring((USHORT)((ULONG64)Port), Buffer, Count); + return; +} + +// end_ntndis +// +// Get data cache fill size. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(KeGetDcacheFillSize) // Use GetDmaAlignment +#endif + +#define KeGetDcacheFillSize() 1L + + +#define KeFlushIoBuffers(Mdl, ReadOperation, DmaOperation) + + +#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) +#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) +#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) +#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) + + +#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) + +// begin_wdm + +#define KeQueryTickCount(CurrentCount ) \ + *(PULONG64)(CurrentCount) = **((volatile ULONG64 **)(&KeTickCount)); + +// end_wdm + +#else + + +VOID +KeQueryTickCount ( + OUT PLARGE_INTEGER CurrentCount + ); + +#endif // defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) + + +// +// Processor Control Region Structure Definition +// + +#define PCR_MINOR_VERSION 1 +#define PCR_MAJOR_VERSION 1 + +typedef struct _KPCR { + +// +// Start of the architecturally defined section of the PCR. This section +// may be directly addressed by vendor/platform specific HAL code and will +// not change from version to version of NT. +// + + NT_TIB NtTib; + struct _KPRCB *CurrentPrcb; + ULONG64 SavedRcx; + ULONG64 SavedR11; + KIRQL Irql; + UCHAR SecondLevelCacheAssociativity; + UCHAR Number; + UCHAR Fill0; + ULONG Irr; + ULONG IrrActive; + ULONG Idr; + USHORT MajorVersion; + USHORT MinorVersion; + ULONG StallScaleFactor; + union _KIDTENTRY64 *IdtBase; + union _KGDTENTRY64 *GdtBase; + struct _KTSS64 *TssBase; + + +} KPCR, *PKPCR; + +// +// The nonvolatile floating state +// + +typedef struct _KFLOATING_SAVE { + ULONG MxCsr; +} KFLOATING_SAVE, *PKFLOATING_SAVE; + +// +// AMD64 Specific portions of mm component. +// +// Define the page size for the AMD64 as 4096 (0x1000). +// + +#define PAGE_SIZE 0x1000 + +// +// Define the number of trailing zeroes in a page aligned virtual address. +// This is used as the shift count when shifting virtual addresses to +// virtual page numbers. +// + +#define PAGE_SHIFT 12L + +// end_ntndis end_wdm + +#define PXE_BASE 0xFFFFF6FB7DBED000UI64 +#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68UI64 +#define PPE_BASE 0xFFFFF6FB7DA00000UI64 +#define PDE_BASE 0xFFFFF6FB40000000UI64 +#define PTE_BASE 0xFFFFF68000000000UI64 + +#define PXE_TOP 0xFFFFF6FB7DBEDFFFUI64 +#define PPE_TOP 0xFFFFF6FB7DBFFFFFUI64 +#define PDE_TOP 0xFFFFF6FB7FFFFFFFUI64 +#define PTE_TOP 0xFFFFF6FFFFFFFFFFUI64 + +#define PDE_KTBASE_AMD64 PPE_BASE + +#define PTI_SHIFT 12 +#define PDI_SHIFT 21 +#define PPI_SHIFT 30 +#define PXI_SHIFT 39 + +#define PTE_PER_PAGE 512 +#define PDE_PER_PAGE 512 +#define PPE_PER_PAGE 512 +#define PXE_PER_PAGE 512 + +#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1) +#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1) +#define PPI_MASK (PPE_PER_PAGE - 1) +#define PXI_MASK (PXE_PER_PAGE - 1) + +// +// Define the highest user address and user probe address. +// + + +extern PVOID *MmHighestUserAddress; +extern PVOID *MmSystemRangeStart; +extern ULONG64 *MmUserProbeAddress; + +#define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress +#define MM_SYSTEM_RANGE_START *MmSystemRangeStart +#define MM_USER_PROBE_ADDRESS *MmUserProbeAddress + +// +// The lowest user address reserves the low 64k. +// + +#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 + +// +// The lowest address for system space. +// + +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000 + +// begin_wdm + +#define MmGetProcedureAddress(Address) (Address) +#define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address) + + +#define KI_USER_SHARED_DATA 0xFFFFF78000000000UI64 + +#define SharedUserData ((KUSER_SHARED_DATA * const) KI_USER_SHARED_DATA) + +// +// Intrinsic functions +// + +// begin_wdm + +#if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) + +// end_wdm + +// +// The following routines are provided for backward compatibility with old +// code. They are no longer the preferred way to accomplish these functions. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInterlockedIncrementLong) // Use InterlockedIncrement +#pragma deprecated(ExInterlockedDecrementLong) // Use InterlockedDecrement +#pragma deprecated(ExInterlockedExchangeUlong) // Use InterlockedExchange +#endif + +#define RESULT_ZERO 0 +#define RESULT_NEGATIVE 1 +#define RESULT_POSITIVE 2 + +typedef enum _INTERLOCKED_RESULT { + ResultNegative = RESULT_NEGATIVE, + ResultZero = RESULT_ZERO, + ResultPositive = RESULT_POSITIVE +} INTERLOCKED_RESULT; + +#define ExInterlockedDecrementLong(Addend, Lock) \ + _ExInterlockedDecrementLong(Addend) + +__forceinline +LONG +_ExInterlockedDecrementLong ( + IN OUT PLONG Addend + ) + +{ + + LONG Result; + + Result = InterlockedDecrement(Addend); + if (Result < 0) { + return ResultNegative; + + } else if (Result > 0) { + return ResultPositive; + + } else { + return ResultZero; + } +} + +#define ExInterlockedIncrementLong(Addend, Lock) \ + _ExInterlockedIncrementLong(Addend) + +__forceinline +LONG +_ExInterlockedIncrementLong ( + IN OUT PLONG Addend + ) + +{ + + LONG Result; + + Result = InterlockedIncrement(Addend); + if (Result < 0) { + return ResultNegative; + + } else if (Result > 0) { + return ResultPositive; + + } else { + return ResultZero; + } +} + +#define ExInterlockedExchangeUlong(Target, Value, Lock) \ + _ExInterlockedExchangeUlong(Target, Value) + +__forceinline +_ExInterlockedExchangeUlong ( + IN OUT PULONG Target, + IN ULONG Value + ) + +{ + + return (ULONG)InterlockedExchange((PLONG)Target, (LONG)Value); +} + +// begin_wdm + +#endif // defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) + + +#if !defined(MIDL_PASS) && defined(_M_AMD64) + +// +// AMD646 function prototype definitions +// + +// end_wdm + + +// +// Get the current processor number +// + +__forceinline +ULONG +KeGetCurrentProcessorNumber ( + VOID + ) + +{ + + return (ULONG)__readgsbyte(FIELD_OFFSET(KPCR, Number)); +} + + +// begin_wdm + +#endif // !defined(MIDL_PASS) && defined(_M_AMD64) + + +NTKERNELAPI +NTSTATUS +KeSaveFloatingPointState ( + OUT PKFLOATING_SAVE SaveArea + ); + +NTKERNELAPI +NTSTATUS +KeRestoreFloatingPointState ( + IN PKFLOATING_SAVE SaveArea + ); + + +#endif // defined(_AMD64_) + + + +#if defined(_AMD64_) + +NTKERNELAPI +KIRQL +KeGetCurrentIrql ( + VOID + ); + +NTKERNELAPI +VOID +KeLowerIrql ( + IN KIRQL NewIrql + ); + +#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) + +NTKERNELAPI +KIRQL +KfRaiseIrql ( + IN KIRQL NewIrql + ); + +// end_wdm + +NTKERNELAPI +KIRQL +KeRaiseIrqlToDpcLevel ( + VOID + ); + +NTKERNELAPI +KIRQL +KeRaiseIrqlToSynchLevel ( + VOID + ); + +// begin_wdm + +#endif // defined(_AMD64_) + + +#if defined(_IA64_) + +// +// Types to use to contain PFNs and their counts. +// + +typedef ULONG PFN_COUNT; + +typedef LONG_PTR SPFN_NUMBER, *PSPFN_NUMBER; +typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER; + +// +// Define maximum size of flush multiple TB request. +// + +#define FLUSH_MULTIPLE_MAXIMUM 100 + +// +// Indicate that the IA64 compiler supports the pragma textout construct. +// + +#define ALLOC_PRAGMA 1 + +// +// Define intrinsic calls and their prototypes +// + +#include "ia64reg.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +unsigned __int64 __getReg (int); +void __setReg (int, unsigned __int64); +void __isrlz (void); +void __dsrlz (void); +void __fwb (void); +void __mf (void); +void __mfa (void); +void __synci (void); +__int64 __thash (__int64); +__int64 __ttag (__int64); +void __ptcl (__int64, __int64); +void __ptcg (__int64, __int64); +void __ptcga (__int64, __int64); +void __ptri (__int64, __int64); +void __ptrd (__int64, __int64); +void __invalat (void); +void __break (int); +void __fc (__int64); +void __sum (int); +void __rsm (int); +void _ReleaseSpinLock( unsigned __int64 *); + +#ifdef _M_IA64 +#pragma intrinsic (__getReg) +#pragma intrinsic (__setReg) +#pragma intrinsic (__isrlz) +#pragma intrinsic (__dsrlz) +#pragma intrinsic (__fwb) +#pragma intrinsic (__mf) +#pragma intrinsic (__mfa) +#pragma intrinsic (__synci) +#pragma intrinsic (__thash) +#pragma intrinsic (__ttag) +#pragma intrinsic (__ptcl) +#pragma intrinsic (__ptcg) +#pragma intrinsic (__ptcga) +#pragma intrinsic (__ptri) +#pragma intrinsic (__ptrd) +#pragma intrinsic (__invalat) +#pragma intrinsic (__break) +#pragma intrinsic (__fc) +#pragma intrinsic (__sum) +#pragma intrinsic (__rsm) +#pragma intrinsic (_ReleaseSpinLock) + +#endif // _M_IA64 + +#ifdef __cplusplus +} +#endif + + +// end_wdm end_ntndis + +// +// Define macro to generate import names. +// + +#define IMPORT_NAME(name) __imp_##name + +// begin_wdm + +// +// Define length of interrupt vector table. +// + +#define MAXIMUM_VECTOR 256 + +// end_wdm + + +// +// IA64 specific interlocked operation result values. +// + +#define RESULT_ZERO 0 +#define RESULT_NEGATIVE 1 +#define RESULT_POSITIVE 2 + +// +// Interlocked result type is portable, but its values are machine specific. +// Constants for values are in i386.h, mips.h, etc. +// + +typedef enum _INTERLOCKED_RESULT { + ResultNegative = RESULT_NEGATIVE, + ResultZero = RESULT_ZERO, + ResultPositive = RESULT_POSITIVE +} INTERLOCKED_RESULT; + +// +// Convert portable interlock interfaces to architecture specific interfaces. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInterlockedIncrementLong) // Use InterlockedIncrement +#pragma deprecated(ExInterlockedDecrementLong) // Use InterlockedDecrement +#pragma deprecated(ExInterlockedExchangeUlong) // Use InterlockedExchange +#endif + +#define ExInterlockedIncrementLong(Addend, Lock) \ + ExIa64InterlockedIncrementLong(Addend) + +#define ExInterlockedDecrementLong(Addend, Lock) \ + ExIa64InterlockedDecrementLong(Addend) + +#define ExInterlockedExchangeUlong(Target, Value, Lock) \ + ExIa64InterlockedExchangeUlong(Target, Value) + +NTKERNELAPI +INTERLOCKED_RESULT +ExIa64InterlockedIncrementLong ( + IN PLONG Addend + ); + +NTKERNELAPI +INTERLOCKED_RESULT +ExIa64InterlockedDecrementLong ( + IN PLONG Addend + ); + +NTKERNELAPI +ULONG +ExIa64InterlockedExchangeUlong ( + IN PULONG Target, + IN ULONG Value + ); + +// begin_wdm + +// +// IA64 Interrupt Definitions. +// +// Define length of interrupt object dispatch code in longwords. +// + +#define DISPATCH_LENGTH 2*2 // Length of dispatch code template in 32-bit words + +// +// Begin of a block of definitions that must be synchronized with kxia64.h. +// + +// +// Define Interrupt Request Levels. +// + +#define PASSIVE_LEVEL 0 // Passive release level +#define LOW_LEVEL 0 // Lowest interrupt level +#define APC_LEVEL 1 // APC interrupt level +#define DISPATCH_LEVEL 2 // Dispatcher level +#define CMC_LEVEL 3 // Correctable machine check level +#define DEVICE_LEVEL_BASE 4 // 4 - 11 - Device IRQLs +#define PC_LEVEL 12 // Performance Counter IRQL +#define IPI_LEVEL 14 // IPI IRQL +#define CLOCK_LEVEL 13 // Clock Timer IRQL +#define POWER_LEVEL 15 // Power failure level +#define PROFILE_LEVEL 15 // Profiling level +#define HIGH_LEVEL 15 // Highest interrupt level + +#if defined(NT_UP) + +#define SYNCH_LEVEL DISPATCH_LEVEL // Synchronization level - UP + +#else + +#define SYNCH_LEVEL (IPI_LEVEL-1) // Synchronization level - MP + +#endif + +// +// The current IRQL is maintained in the TPR.mic field. The +// shift count is the number of bits to shift right to extract the +// IRQL from the TPR. See the GET/SET_IRQL macros. +// + +#define TPR_MIC 4 +#define TPR_IRQL_SHIFT TPR_MIC + +// To go from vector number <-> IRQL we just do a shift +#define VECTOR_IRQL_SHIFT TPR_IRQL_SHIFT + +// +// Interrupt Vector Definitions +// + +#define APC_VECTOR APC_LEVEL << VECTOR_IRQL_SHIFT +#define DISPATCH_VECTOR DISPATCH_LEVEL << VECTOR_IRQL_SHIFT + + +// +// End of a block of definitions that must be synchronized with kxia64.h. +// + +// +// Define profile intervals. +// + +#define DEFAULT_PROFILE_COUNT 0x40000000 // ~= 20 seconds @50mhz +#define DEFAULT_PROFILE_INTERVAL (10 * 500) // 500 microseconds +#define MAXIMUM_PROFILE_INTERVAL (10 * 1000 * 1000) // 1 second +#define MINIMUM_PROFILE_INTERVAL (10 * 40) // 40 microseconds + +#if defined(_M_IA64) && !defined(RC_INVOKED) + +#define InterlockedAdd _InterlockedAdd +#define InterlockedIncrement _InterlockedIncrement +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedExchange _InterlockedExchange +#define InterlockedExchangeAdd _InterlockedExchangeAdd + +#define InterlockedAdd64 _InterlockedAdd64 +#define InterlockedIncrement64 _InterlockedIncrement64 +#define InterlockedDecrement64 _InterlockedDecrement64 +#define InterlockedExchange64 _InterlockedExchange64 +#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64 +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 + +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedExchangePointer _InterlockedExchangePointer +#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer + +#ifdef __cplusplus +extern "C" { +#endif + +LONG +__cdecl +InterlockedAdd ( + LONG volatile *Addend, + LONG Value + ); + +LONGLONG +__cdecl +InterlockedAdd64 ( + LONGLONG volatile *Addend, + LONGLONG Value + ); + +LONG +__cdecl +InterlockedIncrement( + IN OUT LONG volatile *Addend + ); + +LONG +__cdecl +InterlockedDecrement( + IN OUT LONG volatile *Addend + ); + +LONG +__cdecl +InterlockedExchange( + IN OUT LONG volatile *Target, + IN LONG Value + ); + +LONG +__cdecl +InterlockedExchangeAdd( + IN OUT LONG volatile *Addend, + IN LONG Value + ); + +LONG +__cdecl +InterlockedCompareExchange ( + IN OUT LONG volatile *Destination, + IN LONG ExChange, + IN LONG Comperand + ); + +LONGLONG +__cdecl +InterlockedIncrement64( + IN OUT LONGLONG volatile *Addend + ); + +LONGLONG +__cdecl +InterlockedDecrement64( + IN OUT LONGLONG volatile *Addend + ); + +LONGLONG +__cdecl +InterlockedExchange64( + IN OUT LONGLONG volatile *Target, + IN LONGLONG Value + ); + +LONGLONG +__cdecl +InterlockedExchangeAdd64( + IN OUT LONGLONG volatile *Addend, + IN LONGLONG Value + ); + +LONGLONG +__cdecl +InterlockedCompareExchange64 ( + IN OUT LONGLONG volatile *Destination, + IN LONGLONG ExChange, + IN LONGLONG Comperand + ); + +PVOID +__cdecl +InterlockedCompareExchangePointer ( + IN OUT PVOID volatile *Destination, + IN PVOID Exchange, + IN PVOID Comperand + ); + +PVOID +__cdecl +InterlockedExchangePointer( + IN OUT PVOID volatile *Target, + IN PVOID Value + ); + +#pragma intrinsic(_InterlockedAdd) +#pragma intrinsic(_InterlockedIncrement) +#pragma intrinsic(_InterlockedDecrement) +#pragma intrinsic(_InterlockedExchange) +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedExchangeAdd) +#pragma intrinsic(_InterlockedAdd64) +#pragma intrinsic(_InterlockedIncrement64) +#pragma intrinsic(_InterlockedDecrement64) +#pragma intrinsic(_InterlockedExchange64) +#pragma intrinsic(_InterlockedCompareExchange64) +#pragma intrinsic(_InterlockedExchangeAdd64) +#pragma intrinsic(_InterlockedExchangePointer) +#pragma intrinsic(_InterlockedCompareExchangePointer) + +#ifdef __cplusplus +} +#endif + +#endif // defined(_M_IA64) && !defined(RC_INVOKED) + + +__inline +LONG +InterlockedAnd ( + IN OUT LONG volatile *Target, + LONG Set + ) +{ + LONG i; + LONG j; + + j = *Target; + do { + i = j; + j = InterlockedCompareExchange(Target, + i & Set, + i); + + } while (i != j); + + return j; +} + +__inline +LONG +InterlockedOr ( + IN OUT LONG volatile *Target, + IN LONG Set + ) +{ + LONG i; + LONG j; + + j = *Target; + do { + i = j; + j = InterlockedCompareExchange(Target, + i | Set, + i); + + } while (i != j); + + return j; +} + + +#define KI_USER_SHARED_DATA ((ULONG_PTR)(KADDRESS_BASE + 0xFFFE0000)) +#define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA) + +// +// Prototype for get current IRQL. **** TBD (read TPR) +// + +NTKERNELAPI +KIRQL +KeGetCurrentIrql(); + +// end_wdm + +// +// Get address of current processor block. +// + +#define KeGetCurrentPrcb() PCR->Prcb + +// +// Get address of processor control region. +// + +#define KeGetPcr() PCR + +// +// Get address of current kernel thread object. +// + +#if defined(_M_IA64) +#define KeGetCurrentThread() PCR->CurrentThread +#endif + +// +// Get current processor number. +// + +#define KeGetCurrentProcessorNumber() PCR->Number + +// +// Get data cache fill size. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(KeGetDcacheFillSize) // Use GetDmaAlignment +#endif + +#define KeGetDcacheFillSize() PCR->DcacheFillSize + + +#define KeSaveFloatingPointState(a) STATUS_SUCCESS +#define KeRestoreFloatingPointState(a) STATUS_SUCCESS + + +// +// Define the page size +// + +#define PAGE_SIZE 0x2000 + +// +// Define the number of trailing zeroes in a page aligned virtual address. +// This is used as the shift count when shifting virtual addresses to +// virtual page numbers. +// + +#define PAGE_SHIFT 13L + +// +// Cache and write buffer flush functions. +// + +NTKERNELAPI +VOID +KeFlushIoBuffers ( + IN PMDL Mdl, + IN BOOLEAN ReadOperation, + IN BOOLEAN DmaOperation + ); + + +// +// Kernel breakin breakpoint +// + +VOID +KeBreakinBreakpoint ( + VOID + ); + + +#define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) +#define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) +#define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) +#define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) + + +#if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) + +// begin_wdm + +#define KeQueryTickCount(CurrentCount ) \ + *(PULONGLONG)(CurrentCount) = **((volatile ULONGLONG **)(&KeTickCount)); + +// end_wdm + +#else + + +NTKERNELAPI +VOID +KeQueryTickCount ( + OUT PLARGE_INTEGER CurrentCount + ); + +#endif // defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) + +// +// I/O space read and write macros. +// + +NTHALAPI +UCHAR +READ_PORT_UCHAR ( + PUCHAR RegisterAddress + ); + +NTHALAPI +USHORT +READ_PORT_USHORT ( + PUSHORT RegisterAddress + ); + +NTHALAPI +ULONG +READ_PORT_ULONG ( + PULONG RegisterAddress + ); + +NTHALAPI +VOID +READ_PORT_BUFFER_UCHAR ( + PUCHAR portAddress, + PUCHAR readBuffer, + ULONG readCount + ); + +NTHALAPI +VOID +READ_PORT_BUFFER_USHORT ( + PUSHORT portAddress, + PUSHORT readBuffer, + ULONG readCount + ); + +NTHALAPI +VOID +READ_PORT_BUFFER_ULONG ( + PULONG portAddress, + PULONG readBuffer, + ULONG readCount + ); + +NTHALAPI +VOID +WRITE_PORT_UCHAR ( + PUCHAR portAddress, + UCHAR Data + ); + +NTHALAPI +VOID +WRITE_PORT_USHORT ( + PUSHORT portAddress, + USHORT Data + ); + +NTHALAPI +VOID +WRITE_PORT_ULONG ( + PULONG portAddress, + ULONG Data + ); + +NTHALAPI +VOID +WRITE_PORT_BUFFER_UCHAR ( + PUCHAR portAddress, + PUCHAR writeBuffer, + ULONG writeCount + ); + +NTHALAPI +VOID +WRITE_PORT_BUFFER_USHORT ( + PUSHORT portAddress, + PUSHORT writeBuffer, + ULONG writeCount + ); + +NTHALAPI +VOID +WRITE_PORT_BUFFER_ULONG ( + PULONG portAddress, + PULONG writeBuffer, + ULONG writeCount + ); + + +#define READ_REGISTER_UCHAR(x) \ + (__mf(), *(volatile UCHAR * const)(x)) + +#define READ_REGISTER_USHORT(x) \ + (__mf(), *(volatile USHORT * const)(x)) + +#define READ_REGISTER_ULONG(x) \ + (__mf(), *(volatile ULONG * const)(x)) + +#define READ_REGISTER_BUFFER_UCHAR(x, y, z) { \ + PUCHAR registerBuffer = x; \ + PUCHAR readBuffer = y; \ + ULONG readCount; \ + __mf(); \ + for (readCount = z; readCount--; readBuffer++, registerBuffer++) { \ + *readBuffer = *(volatile UCHAR * const)(registerBuffer); \ + } \ +} + +#define READ_REGISTER_BUFFER_USHORT(x, y, z) { \ + PUSHORT registerBuffer = x; \ + PUSHORT readBuffer = y; \ + ULONG readCount; \ + __mf(); \ + for (readCount = z; readCount--; readBuffer++, registerBuffer++) { \ + *readBuffer = *(volatile USHORT * const)(registerBuffer); \ + } \ +} + +#define READ_REGISTER_BUFFER_ULONG(x, y, z) { \ + PULONG registerBuffer = x; \ + PULONG readBuffer = y; \ + ULONG readCount; \ + __mf(); \ + for (readCount = z; readCount--; readBuffer++, registerBuffer++) { \ + *readBuffer = *(volatile ULONG * const)(registerBuffer); \ + } \ +} + +#define WRITE_REGISTER_UCHAR(x, y) { \ + *(volatile UCHAR * const)(x) = y; \ + KeFlushWriteBuffer(); \ +} + +#define WRITE_REGISTER_USHORT(x, y) { \ + *(volatile USHORT * const)(x) = y; \ + KeFlushWriteBuffer(); \ +} + +#define WRITE_REGISTER_ULONG(x, y) { \ + *(volatile ULONG * const)(x) = y; \ + KeFlushWriteBuffer(); \ +} + +#define WRITE_REGISTER_BUFFER_UCHAR(x, y, z) { \ + PUCHAR registerBuffer = x; \ + PUCHAR writeBuffer = y; \ + ULONG writeCount; \ + for (writeCount = z; writeCount--; writeBuffer++, registerBuffer++) { \ + *(volatile UCHAR * const)(registerBuffer) = *writeBuffer; \ + } \ + KeFlushWriteBuffer(); \ +} + +#define WRITE_REGISTER_BUFFER_USHORT(x, y, z) { \ + PUSHORT registerBuffer = x; \ + PUSHORT writeBuffer = y; \ + ULONG writeCount; \ + for (writeCount = z; writeCount--; writeBuffer++, registerBuffer++) { \ + *(volatile USHORT * const)(registerBuffer) = *writeBuffer; \ + } \ + KeFlushWriteBuffer(); \ +} + +#define WRITE_REGISTER_BUFFER_ULONG(x, y, z) { \ + PULONG registerBuffer = x; \ + PULONG writeBuffer = y; \ + ULONG writeCount; \ + for (writeCount = z; writeCount--; writeBuffer++, registerBuffer++) { \ + *(volatile ULONG * const)(registerBuffer) = *writeBuffer; \ + } \ + KeFlushWriteBuffer(); \ +} + +// +// Non-volatile floating point state +// + +typedef struct _KFLOATING_SAVE { + ULONG Reserved; +} KFLOATING_SAVE, *PKFLOATING_SAVE; + + +// +// Processor Control Block (PRCB) +// + +#define PRCB_MINOR_VERSION 1 +#define PRCB_MAJOR_VERSION 1 +#define PRCB_BUILD_DEBUG 0x0001 +#define PRCB_BUILD_UNIPROCESSOR 0x0002 + +struct _RESTART_BLOCK; + +typedef struct _KPRCB { + +// +// Major and minor version numbers of the PCR. +// + + USHORT MinorVersion; + USHORT MajorVersion; + +// +// Start of the architecturally defined section of the PRCB. This section +// may be directly addressed by vendor/platform specific HAL code and will +// not change from version to version of NT. +// +// + + struct _KTHREAD *CurrentThread; + struct _KTHREAD *RESTRICTED_POINTER NextThread; + struct _KTHREAD *IdleThread; + CCHAR Number; + CCHAR WakeIdle; + USHORT BuildType; + KAFFINITY SetMember; + struct _RESTART_BLOCK *RestartBlock; + ULONG_PTR PcrPage; + ULONG Spare0[4]; + +// +// Processor Idendification Registers. +// + + ULONG ProcessorModel; + ULONG ProcessorRevision; + ULONG ProcessorFamily; + ULONG ProcessorArchRev; + ULONGLONG ProcessorSerialNumber; + ULONGLONG ProcessorFeatureBits; + UCHAR ProcessorVendorString[16]; + +// +// Space reserved for the system. +// + + ULONGLONG SystemReserved[8]; + +// +// Space reserved for the HAL. +// + + ULONGLONG HalReserved[16]; + +// +// End of the architecturally defined section of the PRCB. +} KPRCB, *PKPRCB, *RESTRICTED_POINTER PRKPRCB; + +// begin_ntndis + +// +// OS_MCA, OS_INIT HandOff State definitions +// +// Note: The following definitions *must* match the definiions of the +// corresponding SAL Revision Hand-Off structures. +// + +typedef struct _SAL_HANDOFF_STATE { + ULONGLONG PalProcEntryPoint; + ULONGLONG SalProcEntryPoint; + ULONGLONG SalGlobalPointer; + LONGLONG RendezVousResult; + ULONGLONG SalReturnAddress; + ULONGLONG MinStateSavePtr; +} SAL_HANDOFF_STATE, *PSAL_HANDOFF_STATE; + +typedef struct _OS_HANDOFF_STATE { + ULONGLONG Result; + ULONGLONG SalGlobalPointer; + ULONGLONG MinStateSavePtr; + ULONGLONG SalReturnAddress; + ULONGLONG NewContextFlag; +} OS_HANDOFF_STATE, *POS_HANDOFF_STATE; + +// +// per processor OS_MCA and OS_INIT resource structure +// + + +#define SER_EVENT_STACK_FRAME_ENTRIES 8 + +typedef struct _SAL_EVENT_RESOURCES { + + SAL_HANDOFF_STATE SalToOsHandOff; + OS_HANDOFF_STATE OsToSalHandOff; + PVOID StateDump; + ULONGLONG StateDumpPhysical; + PVOID BackStore; + ULONGLONG BackStoreLimit; + PVOID Stack; + ULONGLONG StackLimit; + PULONGLONG PTOM; + ULONGLONG StackFrame[SER_EVENT_STACK_FRAME_ENTRIES]; + PVOID EventPool; + ULONG EventPoolSize; +} SAL_EVENT_RESOURCES, *PSAL_EVENT_RESOURCES; + +// +// PAL Mini-save area, used by MCA and INIT +// + +typedef struct _PAL_MINI_SAVE_AREA { + ULONGLONG IntNats; // Nat bits for r1-r31 + // r1-r31 in bits 1 thru 31. + ULONGLONG IntGp; // r1, volatile + ULONGLONG IntT0; // r2-r3, volatile + ULONGLONG IntT1; // + ULONGLONG IntS0; // r4-r7, preserved + ULONGLONG IntS1; + ULONGLONG IntS2; + ULONGLONG IntS3; + ULONGLONG IntV0; // r8, volatile + ULONGLONG IntT2; // r9-r11, volatile + ULONGLONG IntT3; + ULONGLONG IntT4; + ULONGLONG IntSp; // stack pointer (r12), special + ULONGLONG IntTeb; // teb (r13), special + ULONGLONG IntT5; // r14-r31, volatile + ULONGLONG IntT6; + + ULONGLONG B0R16; // Bank 0 registers 16-31 + ULONGLONG B0R17; + ULONGLONG B0R18; + ULONGLONG B0R19; + ULONGLONG B0R20; + ULONGLONG B0R21; + ULONGLONG B0R22; + ULONGLONG B0R23; + ULONGLONG B0R24; + ULONGLONG B0R25; + ULONGLONG B0R26; + ULONGLONG B0R27; + ULONGLONG B0R28; + ULONGLONG B0R29; + ULONGLONG B0R30; + ULONGLONG B0R31; + + ULONGLONG IntT7; // Bank 1 registers 16-31 + ULONGLONG IntT8; + ULONGLONG IntT9; + ULONGLONG IntT10; + ULONGLONG IntT11; + ULONGLONG IntT12; + ULONGLONG IntT13; + ULONGLONG IntT14; + ULONGLONG IntT15; + ULONGLONG IntT16; + ULONGLONG IntT17; + ULONGLONG IntT18; + ULONGLONG IntT19; + ULONGLONG IntT20; + ULONGLONG IntT21; + ULONGLONG IntT22; + + ULONGLONG Preds; // predicates, preserved + ULONGLONG BrRp; // return pointer, b0, preserved + ULONGLONG RsRSC; // RSE configuration, volatile + ULONGLONG StIIP; // Interruption IP + ULONGLONG StIPSR; // Interruption Processor Status + ULONGLONG StIFS; // Interruption Function State + ULONGLONG XIP; // Event IP + ULONGLONG XPSR; // Event Processor Status + ULONGLONG XFS; // Event Function State + +} PAL_MINI_SAVE_AREA, *PPAL_MINI_SAVE_AREA; + +// +// Define Processor Control Region Structure. +// + +#define PCR_MINOR_VERSION 1 +#define PCR_MAJOR_VERSION 1 + +typedef struct _KPCR { + +// +// Major and minor version numbers of the PCR. +// + ULONG MinorVersion; + ULONG MajorVersion; + +// +// Start of the architecturally defined section of the PCR. This section +// may be directly addressed by vendor/platform specific HAL code and will +// not change from version to version of NT. +// + +// +// First and second level cache parameters. +// + + ULONG FirstLevelDcacheSize; + ULONG FirstLevelDcacheFillSize; + ULONG FirstLevelIcacheSize; + ULONG FirstLevelIcacheFillSize; + ULONG SecondLevelDcacheSize; + ULONG SecondLevelDcacheFillSize; + ULONG SecondLevelIcacheSize; + ULONG SecondLevelIcacheFillSize; + +// +// Data cache alignment and fill size used for cache flushing and alignment. +// These fields are set to the larger of the first and second level data +// cache fill sizes. +// + + ULONG DcacheAlignment; + ULONG DcacheFillSize; + +// +// Instruction cache alignment and fill size used for cache flushing and +// alignment. These fields are set to the larger of the first and second +// level data cache fill sizes. +// + + ULONG IcacheAlignment; + ULONG IcacheFillSize; + +// +// Processor identification from PrId register. +// + + ULONG ProcessorId; + +// +// Profiling data. +// + + ULONG ProfileInterval; + ULONG ProfileCount; + +// +// Stall execution count and scale factor. +// + + ULONG StallExecutionCount; + ULONG StallScaleFactor; + + ULONG InterruptionCount; + +// +// Space reserved for the system. +// + + ULONGLONG SystemReserved[6]; + +// +// Space reserved for the HAL +// + + ULONGLONG HalReserved[64]; + +// +// IRQL mapping tables. +// + + UCHAR IrqlMask[64]; + UCHAR IrqlTable[64]; + +// +// External Interrupt vectors. +// + + PKINTERRUPT_ROUTINE InterruptRoutine[MAXIMUM_VECTOR]; + +// +// Reserved interrupt vector mask. +// + + ULONG ReservedVectors; + +// +// Processor affinity mask. +// + + KAFFINITY SetMember; + +// +// Complement of the processor affinity mask. +// + + KAFFINITY NotMember; + +// +// Pointer to processor control block. +// + + struct _KPRCB *Prcb; + +// +// Shadow copy of Prcb->CurrentThread for fast access +// + + struct _KTHREAD *CurrentThread; + +// +// Processor number. +// + + CCHAR Number; // Processor Number + UCHAR DebugActive; // debug register active in user flag + UCHAR KernelDebugActive; // debug register active in kernel flag + UCHAR CurrentIrql; // Current IRQL + union { + USHORT SoftwareInterruptPending; // Software Interrupt Pending Flag + struct { + UCHAR ApcInterrupt; // 0x01 if APC int pending + UCHAR DispatchInterrupt; // 0x01 if dispatch int pending + }; + }; + +// +// Address of per processor SAPIC EOI Table +// + + PVOID EOITable; + +// +// IA-64 Machine Check Events trackers +// + + UCHAR InOsMca; + UCHAR InOsInit; + UCHAR InOsCmc; + UCHAR InOsCpe; + ULONG InOsULONG_Spare; // Spare ULONG + PSAL_EVENT_RESOURCES OsMcaResourcePtr; + PSAL_EVENT_RESOURCES OsInitResourcePtr; + +// +// End of the architecturally defined section of the PCR. This section +// may be directly addressed by vendor/platform specific HAL code and will +// not change from version to version of NT. +// + + +} KPCR, *PKPCR; + + +// +// The highest user address reserves 64K bytes for a guard page. This +// the probing of address from kernel mode to only have to check the +// starting address for structures of 64k bytes or less. +// + +extern NTKERNELAPI PVOID MmHighestUserAddress; +extern NTKERNELAPI PVOID MmSystemRangeStart; +extern NTKERNELAPI ULONG_PTR MmUserProbeAddress; + + +#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress +#define MM_USER_PROBE_ADDRESS MmUserProbeAddress +#define MM_SYSTEM_RANGE_START MmSystemRangeStart + +// +// The lowest user address reserves the low 64k. +// + +#define MM_LOWEST_USER_ADDRESS (PVOID)((ULONG_PTR)(UADDRESS_BASE+0x00010000)) + +// begin_wdm + +#define MmGetProcedureAddress(Address) (Address) +#define MmLockPagableCodeSection(PLabelAddress) \ + MmLockPagableDataSection((PVOID)(*((PULONGLONG)PLabelAddress))) + +#define VRN_MASK 0xE000000000000000UI64 // Virtual Region Number mask + +// +// The lowest address for system space. +// + +#define MM_LOWEST_SYSTEM_ADDRESS ((PVOID)((ULONG_PTR)(KADDRESS_BASE + 0xC0C00000))) +#endif // defined(_IA64_) +// +// Define configuration routine types. +// +// Configuration information. +// + +typedef enum _CONFIGURATION_TYPE { + ArcSystem, + CentralProcessor, + FloatingPointProcessor, + PrimaryIcache, + PrimaryDcache, + SecondaryIcache, + SecondaryDcache, + SecondaryCache, + EisaAdapter, + TcAdapter, + ScsiAdapter, + DtiAdapter, + MultiFunctionAdapter, + DiskController, + TapeController, + CdromController, + WormController, + SerialController, + NetworkController, + DisplayController, + ParallelController, + PointerController, + KeyboardController, + AudioController, + OtherController, + DiskPeripheral, + FloppyDiskPeripheral, + TapePeripheral, + ModemPeripheral, + MonitorPeripheral, + PrinterPeripheral, + PointerPeripheral, + KeyboardPeripheral, + TerminalPeripheral, + OtherPeripheral, + LinePeripheral, + NetworkPeripheral, + SystemMemory, + DockingInformation, + RealModeIrqRoutingTable, + RealModePCIEnumeration, + MaximumType +} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; + + +#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') + +// +// Object Manager Object Type Specific Access Rights. +// + +#define OBJECT_TYPE_CREATE (0x0001) + +#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +// +// Object Manager Directory Specific Access Rights. +// + +#define DIRECTORY_QUERY (0x0001) +#define DIRECTORY_TRAVERSE (0x0002) +#define DIRECTORY_CREATE_OBJECT (0x0004) +#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) + +#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) + +// +// Object Manager Symbolic Link Specific Access Rights. +// + +#define SYMBOLIC_LINK_QUERY (0x0001) + +#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) + +typedef struct _OBJECT_NAME_INFORMATION { + UNICODE_STRING Name; +} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; +#define DUPLICATE_CLOSE_SOURCE 0x00000001 // winnt +#define DUPLICATE_SAME_ACCESS 0x00000002 // winnt +#define DUPLICATE_SAME_ATTRIBUTES 0x00000004 +// begin_winnt +// +// Predefined Value Types. +// + +#define REG_NONE ( 0 ) // No value type +#define REG_SZ ( 1 ) // Unicode nul terminated string +#define REG_EXPAND_SZ ( 2 ) // Unicode nul terminated string + // (with environment variable references) +#define REG_BINARY ( 3 ) // Free form binary +#define REG_DWORD ( 4 ) // 32-bit number +#define REG_DWORD_LITTLE_ENDIAN ( 4 ) // 32-bit number (same as REG_DWORD) +#define REG_DWORD_BIG_ENDIAN ( 5 ) // 32-bit number +#define REG_LINK ( 6 ) // Symbolic Link (unicode) +#define REG_MULTI_SZ ( 7 ) // Multiple Unicode strings +#define REG_RESOURCE_LIST ( 8 ) // Resource list in the resource map +#define REG_FULL_RESOURCE_DESCRIPTOR ( 9 ) // Resource list in the hardware description +#define REG_RESOURCE_REQUIREMENTS_LIST ( 10 ) +#define REG_QWORD ( 11 ) // 64-bit number +#define REG_QWORD_LITTLE_ENDIAN ( 11 ) // 64-bit number (same as REG_QWORD) + +// +// Service Types (Bit Mask) +// +#define SERVICE_KERNEL_DRIVER 0x00000001 +#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002 +#define SERVICE_ADAPTER 0x00000004 +#define SERVICE_RECOGNIZER_DRIVER 0x00000008 + +#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \ + SERVICE_FILE_SYSTEM_DRIVER | \ + SERVICE_RECOGNIZER_DRIVER) + +#define SERVICE_WIN32_OWN_PROCESS 0x00000010 +#define SERVICE_WIN32_SHARE_PROCESS 0x00000020 +#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \ + SERVICE_WIN32_SHARE_PROCESS) + +#define SERVICE_INTERACTIVE_PROCESS 0x00000100 + +#define SERVICE_TYPE_ALL (SERVICE_WIN32 | \ + SERVICE_ADAPTER | \ + SERVICE_DRIVER | \ + SERVICE_INTERACTIVE_PROCESS) + +// +// Start Type +// + +#define SERVICE_BOOT_START 0x00000000 +#define SERVICE_SYSTEM_START 0x00000001 +#define SERVICE_AUTO_START 0x00000002 +#define SERVICE_DEMAND_START 0x00000003 +#define SERVICE_DISABLED 0x00000004 + +// +// Error control type +// +#define SERVICE_ERROR_IGNORE 0x00000000 +#define SERVICE_ERROR_NORMAL 0x00000001 +#define SERVICE_ERROR_SEVERE 0x00000002 +#define SERVICE_ERROR_CRITICAL 0x00000003 + +// +// +// Define the registry driver node enumerations +// + +typedef enum _CM_SERVICE_NODE_TYPE { + DriverType = SERVICE_KERNEL_DRIVER, + FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, + Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, + Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, + AdapterType = SERVICE_ADAPTER, + RecognizerType = SERVICE_RECOGNIZER_DRIVER +} SERVICE_NODE_TYPE; + +typedef enum _CM_SERVICE_LOAD_TYPE { + BootLoad = SERVICE_BOOT_START, + SystemLoad = SERVICE_SYSTEM_START, + AutoLoad = SERVICE_AUTO_START, + DemandLoad = SERVICE_DEMAND_START, + DisableLoad = SERVICE_DISABLED +} SERVICE_LOAD_TYPE; + +typedef enum _CM_ERROR_CONTROL_TYPE { + IgnoreError = SERVICE_ERROR_IGNORE, + NormalError = SERVICE_ERROR_NORMAL, + SevereError = SERVICE_ERROR_SEVERE, + CriticalError = SERVICE_ERROR_CRITICAL +} SERVICE_ERROR_TYPE; + +// end_winnt + +// +// Resource List definitions +// + +// begin_ntminiport begin_ntndis + +// +// Defines the Type in the RESOURCE_DESCRIPTOR +// +// NOTE: For all CM_RESOURCE_TYPE values, there must be a +// corresponding ResType value in the 32-bit ConfigMgr headerfile +// (cfgmgr32.h). Values in the range [0x6,0x80) use the same values +// as their ConfigMgr counterparts. CM_RESOURCE_TYPE values with +// the high bit set (i.e., in the range [0x80,0xFF]), are +// non-arbitrated resources. These correspond to the same values +// in cfgmgr32.h that have their high bit set (however, since +// cfgmgr32.h uses 16 bits for ResType values, these values are in +// the range [0x8000,0x807F). Note that ConfigMgr ResType values +// cannot be in the range [0x8080,0xFFFF), because they would not +// be able to map into CM_RESOURCE_TYPE values. (0xFFFF itself is +// a special value, because it maps to CmResourceTypeDeviceSpecific.) +// + +typedef int CM_RESOURCE_TYPE; + +// CmResourceTypeNull is reserved + +#define CmResourceTypeNull 0 // ResType_All or ResType_None (0x0000) +#define CmResourceTypePort 1 // ResType_IO (0x0002) +#define CmResourceTypeInterrupt 2 // ResType_IRQ (0x0004) +#define CmResourceTypeMemory 3 // ResType_Mem (0x0001) +#define CmResourceTypeDma 4 // ResType_DMA (0x0003) +#define CmResourceTypeDeviceSpecific 5 // ResType_ClassSpecific (0xFFFF) +#define CmResourceTypeBusNumber 6 // ResType_BusNumber (0x0006) +// end_wdm +#define CmResourceTypeMaximum 7 +// begin_wdm +#define CmResourceTypeNonArbitrated 128 // Not arbitrated if 0x80 bit set +#define CmResourceTypeConfigData 128 // ResType_Reserved (0x8000) +#define CmResourceTypeDevicePrivate 129 // ResType_DevicePrivate (0x8001) +#define CmResourceTypePcCardConfig 130 // ResType_PcCardConfig (0x8002) +#define CmResourceTypeMfCardConfig 131 // ResType_MfCardConfig (0x8003) + +// +// Defines the ShareDisposition in the RESOURCE_DESCRIPTOR +// + +typedef enum _CM_SHARE_DISPOSITION { + CmResourceShareUndetermined = 0, // Reserved + CmResourceShareDeviceExclusive, + CmResourceShareDriverExclusive, + CmResourceShareShared +} CM_SHARE_DISPOSITION; + +// +// Define the bit masks for Flags when type is CmResourceTypeInterrupt +// + +#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0 +#define CM_RESOURCE_INTERRUPT_LATCHED 1 + +// +// Define the bit masks for Flags when type is CmResourceTypeMemory +// + +#define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 +#define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 +#define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 +#define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 + +#define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 +#define CM_RESOURCE_MEMORY_24 0x0010 +#define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 + +// +// Define the bit masks for Flags when type is CmResourceTypePort +// + +#define CM_RESOURCE_PORT_MEMORY 0x0000 +#define CM_RESOURCE_PORT_IO 0x0001 +#define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 +#define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 +#define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 +#define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 +#define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 +#define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 + +// +// Define the bit masks for Flags when type is CmResourceTypeDma +// + +#define CM_RESOURCE_DMA_8 0x0000 +#define CM_RESOURCE_DMA_16 0x0001 +#define CM_RESOURCE_DMA_32 0x0002 +#define CM_RESOURCE_DMA_8_AND_16 0x0004 +#define CM_RESOURCE_DMA_BUS_MASTER 0x0008 +#define CM_RESOURCE_DMA_TYPE_A 0x0010 +#define CM_RESOURCE_DMA_TYPE_B 0x0020 +#define CM_RESOURCE_DMA_TYPE_F 0x0040 + +// end_ntminiport end_ntndis + +// +// This structure defines one type of resource used by a driver. +// +// There can only be *1* DeviceSpecificData block. It must be located at +// the end of all resource descriptors in a full descriptor block. +// + +// +// Make sure alignment is made properly by compiler; otherwise move +// flags back to the top of the structure (common to all members of the +// union). +// +// begin_ntndis + +#include "pshpack4.h" +typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { + UCHAR Type; + UCHAR ShareDisposition; + USHORT Flags; + union { + + // + // Range of resources, inclusive. These are physical, bus relative. + // It is known that Port and Memory below have the exact same layout + // as Generic. + // + + struct { + PHYSICAL_ADDRESS Start; + ULONG Length; + } Generic; + + // + // end_wdm + // Range of port numbers, inclusive. These are physical, bus + // relative. The value should be the same as the one passed to + // HalTranslateBusAddress(). + // begin_wdm + // + + struct { + PHYSICAL_ADDRESS Start; + ULONG Length; + } Port; + + // + // end_wdm + // IRQL and vector. Should be same values as were passed to + // HalGetInterruptVector(). + // begin_wdm + // + + struct { + ULONG Level; + ULONG Vector; + KAFFINITY Affinity; + } Interrupt; + + // + // Range of memory addresses, inclusive. These are physical, bus + // relative. The value should be the same as the one passed to + // HalTranslateBusAddress(). + // + + struct { + PHYSICAL_ADDRESS Start; // 64 bit physical addresses. + ULONG Length; + } Memory; + + // + // Physical DMA channel. + // + + struct { + ULONG Channel; + ULONG Port; + ULONG Reserved1; + } Dma; + + // + // Device driver private data, usually used to help it figure + // what the resource assignments decisions that were made. + // + + struct { + ULONG Data[3]; + } DevicePrivate; + + // + // Bus Number information. + // + + struct { + ULONG Start; + ULONG Length; + ULONG Reserved; + } BusNumber; + + // + // Device Specific information defined by the driver. + // The DataSize field indicates the size of the data in bytes. The + // data is located immediately after the DeviceSpecificData field in + // the structure. + // + + struct { + ULONG DataSize; + ULONG Reserved1; + ULONG Reserved2; + } DeviceSpecificData; + } u; +} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; +#include "poppack.h" + +// +// A Partial Resource List is what can be found in the ARC firmware +// or will be generated by
ntdetect.com
. +// The configuration manager will transform this structure into a Full +// resource descriptor when it is about to store it in the regsitry. +// +// Note: There must a be a convention to the order of fields of same type, +// (defined on a device by device basis) so that the fields can make sense +// to a driver (i.e. when multiple memory ranges are necessary). +// + +typedef struct _CM_PARTIAL_RESOURCE_LIST { + USHORT Version; + USHORT Revision; + ULONG Count; + CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; +} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; + +// +// A Full Resource Descriptor is what can be found in the registry. +// This is what will be returned to a driver when it queries the registry +// to get device information; it will be stored under a key in the hardware +// description tree. +// +// end_wdm +// Note: The BusNumber and Type are redundant information, but we will keep +// it since it allows the driver _not_ to append it when it is creating +// a resource list which could possibly span multiple buses. +// +// begin_wdm +// Note: There must a be a convention to the order of fields of same type, +// (defined on a device by device basis) so that the fields can make sense +// to a driver (i.e. when multiple memory ranges are necessary). +// + +typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { + INTERFACE_TYPE InterfaceType; // unused for WDM + ULONG BusNumber; // unused for WDM + CM_PARTIAL_RESOURCE_LIST PartialResourceList; +} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; + +// +// The Resource list is what will be stored by the drivers into the +// resource map via the IO API. +// + +typedef struct _CM_RESOURCE_LIST { + ULONG Count; + CM_FULL_RESOURCE_DESCRIPTOR List[1]; +} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; + +// end_ntndis +// +// Define the structures used to interpret configuration data of +// \\Registry\machine\hardware\description tree. +// Basically, these structures are used to interpret component +// sepcific data. +// + +// +// Define DEVICE_FLAGS +// + +typedef struct _DEVICE_FLAGS { + ULONG Failed : 1; + ULONG ReadOnly : 1; + ULONG Removable : 1; + ULONG ConsoleIn : 1; + ULONG ConsoleOut : 1; + ULONG Input : 1; + ULONG Output : 1; +} DEVICE_FLAGS, *PDEVICE_FLAGS; + +// +// Define Component Information structure +// + +typedef struct _CM_COMPONENT_INFORMATION { + DEVICE_FLAGS Flags; + ULONG Version; + ULONG Key; + KAFFINITY AffinityMask; +} CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION; + +// +// The following structures are used to interpret x86 +// DeviceSpecificData of CM_PARTIAL_RESOURCE_DESCRIPTOR. +// (Most of the structures are defined by BIOS. They are +// not aligned on word (or dword) boundary. +// + +// +// Define the Rom Block structure +// + +typedef struct _CM_ROM_BLOCK { + ULONG Address; + ULONG Size; +} CM_ROM_BLOCK, *PCM_ROM_BLOCK; + +// begin_ntminiport begin_ntndis + +#include "pshpack1.h" + +// end_ntminiport end_ntndis + +// +// Define INT13 driver parameter block +// + +typedef struct _CM_INT13_DRIVE_PARAMETER { + USHORT DriveSelect; + ULONG MaxCylinders; + USHORT SectorsPerTrack; + USHORT MaxHeads; + USHORT NumberDrives; +} CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; + +// begin_ntminiport begin_ntndis + +// +// Define Mca POS data block for slot +// + +typedef struct _CM_MCA_POS_DATA { + USHORT AdapterId; + UCHAR PosData1; + UCHAR PosData2; + UCHAR PosData3; + UCHAR PosData4; +} CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; + +// +// Memory configuration of eisa data block structure +// + +typedef struct _EISA_MEMORY_TYPE { + UCHAR ReadWrite: 1; + UCHAR Cached : 1; + UCHAR Reserved0 :1; + UCHAR Type:2; + UCHAR Shared:1; + UCHAR Reserved1 :1; + UCHAR MoreEntries : 1; +} EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; + +typedef struct _EISA_MEMORY_CONFIGURATION { + EISA_MEMORY_TYPE ConfigurationByte; + UCHAR DataSize; + USHORT AddressLowWord; + UCHAR AddressHighByte; + USHORT MemorySize; +} EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; + + +// +// Interrupt configurationn of eisa data block structure +// + +typedef struct _EISA_IRQ_DESCRIPTOR { + UCHAR Interrupt : 4; + UCHAR Reserved :1; + UCHAR LevelTriggered :1; + UCHAR Shared : 1; + UCHAR MoreEntries : 1; +} EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; + +typedef struct _EISA_IRQ_CONFIGURATION { + EISA_IRQ_DESCRIPTOR ConfigurationByte; + UCHAR Reserved; +} EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; + + +// +// DMA description of eisa data block structure +// + +typedef struct _DMA_CONFIGURATION_BYTE0 { + UCHAR Channel : 3; + UCHAR Reserved : 3; + UCHAR Shared :1; + UCHAR MoreEntries :1; +} DMA_CONFIGURATION_BYTE0; + +typedef struct _DMA_CONFIGURATION_BYTE1 { + UCHAR Reserved0 : 2; + UCHAR TransferSize : 2; + UCHAR Timing : 2; + UCHAR Reserved1 : 2; +} DMA_CONFIGURATION_BYTE1; + +typedef struct _EISA_DMA_CONFIGURATION { + DMA_CONFIGURATION_BYTE0 ConfigurationByte0; + DMA_CONFIGURATION_BYTE1 ConfigurationByte1; +} EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; + + +// +// Port description of eisa data block structure +// + +typedef struct _EISA_PORT_DESCRIPTOR { + UCHAR NumberPorts : 5; + UCHAR Reserved :1; + UCHAR Shared :1; + UCHAR MoreEntries : 1; +} EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; + +typedef struct _EISA_PORT_CONFIGURATION { + EISA_PORT_DESCRIPTOR Configuration; + USHORT PortAddress; +} EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; + + +// +// Eisa slot information definition +// N.B. This structure is different from the one defined +// in ARC eisa addendum. +// + +typedef struct _CM_EISA_SLOT_INFORMATION { + UCHAR ReturnCode; + UCHAR ReturnFlags; + UCHAR MajorRevision; + UCHAR MinorRevision; + USHORT Checksum; + UCHAR NumberFunctions; + UCHAR FunctionInformation; + ULONG CompressedId; +} CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; + + +// +// Eisa function information definition +// + +typedef struct _CM_EISA_FUNCTION_INFORMATION { + ULONG CompressedId; + UCHAR IdSlotFlags1; + UCHAR IdSlotFlags2; + UCHAR MinorRevision; + UCHAR MajorRevision; + UCHAR Selections[26]; + UCHAR FunctionFlags; + UCHAR TypeString[80]; + EISA_MEMORY_CONFIGURATION EisaMemory[9]; + EISA_IRQ_CONFIGURATION EisaIrq[7]; + EISA_DMA_CONFIGURATION EisaDma[4]; + EISA_PORT_CONFIGURATION EisaPort[20]; + UCHAR InitializationData[60]; +} CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; + +// +// The following defines the way pnp bios information is stored in +// the registry \\HKEY_LOCAL_MACHINE\HARDWARE\Description\System\MultifunctionAdapter\x +// key, where x is an integer number indicating adapter instance. The +// "Identifier" of the key must equal to "PNP BIOS" and the +// "ConfigurationData" is organized as follow: +// +// CM_PNP_BIOS_INSTALLATION_CHECK + +// CM_PNP_BIOS_DEVICE_NODE for device 1 + +// CM_PNP_BIOS_DEVICE_NODE for device 2 + +// ... +// CM_PNP_BIOS_DEVICE_NODE for device n +// + +// +// Pnp BIOS device node structure +// + +typedef struct _CM_PNP_BIOS_DEVICE_NODE { + USHORT Size; + UCHAR Node; + ULONG ProductId; + UCHAR DeviceType[3]; + USHORT DeviceAttributes; + // followed by AllocatedResourceBlock, PossibleResourceBlock + // and CompatibleDeviceId +} CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE; + +// +// Pnp BIOS Installation check +// + +typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK { + UCHAR Signature[4]; // $PnP (ascii) + UCHAR Revision; + UCHAR Length; + USHORT ControlField; + UCHAR Checksum; + ULONG EventFlagAddress; // Physical address + USHORT RealModeEntryOffset; + USHORT RealModeEntrySegment; + USHORT ProtectedModeEntryOffset; + ULONG ProtectedModeCodeBaseAddress; + ULONG OemDeviceId; + USHORT RealModeDataBaseAddress; + ULONG ProtectedModeDataBaseAddress; +} CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK; + +#include "poppack.h" + +// +// Masks for EISA function information +// + +#define EISA_FUNCTION_ENABLED 0x80 +#define EISA_FREE_FORM_DATA 0x40 +#define EISA_HAS_PORT_INIT_ENTRY 0x20 +#define EISA_HAS_PORT_RANGE 0x10 +#define EISA_HAS_DMA_ENTRY 0x08 +#define EISA_HAS_IRQ_ENTRY 0x04 +#define EISA_HAS_MEMORY_ENTRY 0x02 +#define EISA_HAS_TYPE_ENTRY 0x01 +#define EISA_HAS_INFORMATION EISA_HAS_PORT_RANGE + \ + EISA_HAS_DMA_ENTRY + \ + EISA_HAS_IRQ_ENTRY + \ + EISA_HAS_MEMORY_ENTRY + \ + EISA_HAS_TYPE_ENTRY + +// +// Masks for EISA memory configuration +// + +#define EISA_MORE_ENTRIES 0x80 +#define EISA_SYSTEM_MEMORY 0x00 +#define EISA_MEMORY_TYPE_RAM 0x01 + +// +// Returned error code for EISA bios call +// + +#define EISA_INVALID_SLOT 0x80 +#define EISA_INVALID_FUNCTION 0x81 +#define EISA_INVALID_CONFIGURATION 0x82 +#define EISA_EMPTY_SLOT 0x83 +#define EISA_INVALID_BIOS_CALL 0x86 + +// end_ntminiport end_ntndis + +// +// The following structures are used to interpret mips +// DeviceSpecificData of CM_PARTIAL_RESOURCE_DESCRIPTOR. +// + +// +// Device data records for adapters. +// + +// +// The device data record for the Emulex SCSI controller. +// + +typedef struct _CM_SCSI_DEVICE_DATA { + USHORT Version; + USHORT Revision; + UCHAR HostIdentifier; +} CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; + +// +// Device data records for controllers. +// + +// +// The device data record for the Video controller. +// + +typedef struct _CM_VIDEO_DEVICE_DATA { + USHORT Version; + USHORT Revision; + ULONG VideoClock; +} CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA; + +// +// The device data record for the SONIC network controller. +// + +typedef struct _CM_SONIC_DEVICE_DATA { + USHORT Version; + USHORT Revision; + USHORT DataConfigurationRegister; + UCHAR EthernetAddress[8]; +} CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA; + +// +// The device data record for the serial controller. +// + +typedef struct _CM_SERIAL_DEVICE_DATA { + USHORT Version; + USHORT Revision; + ULONG BaudClock; +} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; + +// +// Device data records for peripherals. +// + +// +// The device data record for the Monitor peripheral. +// + +typedef struct _CM_MONITOR_DEVICE_DATA { + USHORT Version; + USHORT Revision; + USHORT HorizontalScreenSize; + USHORT VerticalScreenSize; + USHORT HorizontalResolution; + USHORT VerticalResolution; + USHORT HorizontalDisplayTimeLow; + USHORT HorizontalDisplayTime; + USHORT HorizontalDisplayTimeHigh; + USHORT HorizontalBackPorchLow; + USHORT HorizontalBackPorch; + USHORT HorizontalBackPorchHigh; + USHORT HorizontalFrontPorchLow; + USHORT HorizontalFrontPorch; + USHORT HorizontalFrontPorchHigh; + USHORT HorizontalSyncLow; + USHORT HorizontalSync; + USHORT HorizontalSyncHigh; + USHORT VerticalBackPorchLow; + USHORT VerticalBackPorch; + USHORT VerticalBackPorchHigh; + USHORT VerticalFrontPorchLow; + USHORT VerticalFrontPorch; + USHORT VerticalFrontPorchHigh; + USHORT VerticalSyncLow; + USHORT VerticalSync; + USHORT VerticalSyncHigh; +} CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA; + +// +// The device data record for the Floppy peripheral. +// + +typedef struct _CM_FLOPPY_DEVICE_DATA { + USHORT Version; + USHORT Revision; + CHAR Size[8]; + ULONG MaxDensity; + ULONG MountDensity; + // + // New data fields for version >= 2.0 + // + UCHAR StepRateHeadUnloadTime; + UCHAR HeadLoadTime; + UCHAR MotorOffTime; + UCHAR SectorLengthCode; + UCHAR SectorPerTrack; + UCHAR ReadWriteGapLength; + UCHAR DataTransferLength; + UCHAR FormatGapLength; + UCHAR FormatFillCharacter; + UCHAR HeadSettleTime; + UCHAR MotorSettleTime; + UCHAR MaximumTrackValue; + UCHAR DataTransferRate; +} CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; + +// +// The device data record for the Keyboard peripheral. +// The KeyboardFlags is defined (by x86 BIOS INT 16h, function 02) as: +// bit 7 : Insert on +// bit 6 : Caps Lock on +// bit 5 : Num Lock on +// bit 4 : Scroll Lock on +// bit 3 : Alt Key is down +// bit 2 : Ctrl Key is down +// bit 1 : Left shift key is down +// bit 0 : Right shift key is down +// + +typedef struct _CM_KEYBOARD_DEVICE_DATA { + USHORT Version; + USHORT Revision; + UCHAR Type; + UCHAR Subtype; + USHORT KeyboardFlags; +} CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; + +// +// Declaration of the structure for disk geometries +// + +typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA { + ULONG BytesPerSector; + ULONG NumberOfCylinders; + ULONG SectorsPerTrack; + ULONG NumberOfHeads; +} CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA; + +// end_wdm +// +// Declaration of the structure for the PcCard ISA IRQ map +// + +typedef struct _CM_PCCARD_DEVICE_DATA { + UCHAR Flags; + UCHAR ErrorCode; + USHORT Reserved; + ULONG BusData; + ULONG DeviceId; + ULONG LegacyBaseAddress; + UCHAR IRQMap[16]; +} CM_PCCARD_DEVICE_DATA, *PCM_PCCARD_DEVICE_DATA; + +// Definitions for Flags + +#define PCCARD_MAP_ERROR 0x01 +#define PCCARD_DEVICE_PCI 0x10 + +#define PCCARD_SCAN_DISABLED 0x01 +#define PCCARD_MAP_ZERO 0x02 +#define PCCARD_NO_TIMER 0x03 +#define PCCARD_NO_PIC 0x04 +#define PCCARD_NO_LEGACY_BASE 0x05 +#define PCCARD_DUP_LEGACY_BASE 0x06 +#define PCCARD_NO_CONTROLLERS 0x07 + +// begin_wdm +// begin_ntminiport + +// +// Defines Resource Options +// + +#define IO_RESOURCE_PREFERRED 0x01 +#define IO_RESOURCE_DEFAULT 0x02 +#define IO_RESOURCE_ALTERNATIVE 0x08 + + +// +// This structure defines one type of resource requested by the driver +// + +typedef struct _IO_RESOURCE_DESCRIPTOR { + UCHAR Option; + UCHAR Type; // use CM_RESOURCE_TYPE + UCHAR ShareDisposition; // use CM_SHARE_DISPOSITION + UCHAR Spare1; + USHORT Flags; // use CM resource flag defines + USHORT Spare2; // align + + union { + struct { + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Port; + + struct { + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Memory; + + struct { + ULONG MinimumVector; + ULONG MaximumVector; + } Interrupt; + + struct { + ULONG MinimumChannel; + ULONG MaximumChannel; + } Dma; + + struct { + ULONG Length; + ULONG Alignment; + PHYSICAL_ADDRESS MinimumAddress; + PHYSICAL_ADDRESS MaximumAddress; + } Generic; + + struct { + ULONG Data[3]; + } DevicePrivate; + + // + // Bus Number information. + // + + struct { + ULONG Length; + ULONG MinBusNumber; + ULONG MaxBusNumber; + ULONG Reserved; + } BusNumber; + + struct { + ULONG Priority; // use LCPRI_Xxx values in cfg.h + ULONG Reserved1; + ULONG Reserved2; + } ConfigData; + + } u; + +} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; + +// end_ntminiport + + +typedef struct _IO_RESOURCE_LIST { + USHORT Version; + USHORT Revision; + + ULONG Count; + IO_RESOURCE_DESCRIPTOR Descriptors[1]; +} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; + + +typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { + ULONG ListSize; + INTERFACE_TYPE InterfaceType; // unused for WDM + ULONG BusNumber; // unused for WDM + ULONG SlotNumber; + ULONG Reserved[3]; + ULONG AlternativeLists; + IO_RESOURCE_LIST List[1]; +} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; + +// +// Registry Specific Access Rights. +// + +#define KEY_QUERY_VALUE (0x0001) +#define KEY_SET_VALUE (0x0002) +#define KEY_CREATE_SUB_KEY (0x0004) +#define KEY_ENUMERATE_SUB_KEYS (0x0008) +#define KEY_NOTIFY (0x0010) +#define KEY_CREATE_LINK (0x0020) +#define KEY_WOW64_32KEY (0x0200) +#define KEY_WOW64_64KEY (0x0100) +#define KEY_WOW64_RES (0x0300) + +#define KEY_READ ((STANDARD_RIGHTS_READ |\ + KEY_QUERY_VALUE |\ + KEY_ENUMERATE_SUB_KEYS |\ + KEY_NOTIFY) \ + & \ + (~SYNCHRONIZE)) + + +#define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\ + KEY_SET_VALUE |\ + KEY_CREATE_SUB_KEY) \ + & \ + (~SYNCHRONIZE)) + +#define KEY_EXECUTE ((KEY_READ) \ + & \ + (~SYNCHRONIZE)) + +#define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\ + KEY_QUERY_VALUE |\ + KEY_SET_VALUE |\ + KEY_CREATE_SUB_KEY |\ + KEY_ENUMERATE_SUB_KEYS |\ + KEY_NOTIFY |\ + KEY_CREATE_LINK) \ + & \ + (~SYNCHRONIZE)) + +// +// Open/Create Options +// + +#define REG_OPTION_RESERVED (0x00000000L) // Parameter is reserved + +#define REG_OPTION_NON_VOLATILE (0x00000000L) // Key is preserved + // when system is rebooted + +#define REG_OPTION_VOLATILE (0x00000001L) // Key is not preserved + // when system is rebooted + +#define REG_OPTION_CREATE_LINK (0x00000002L) // Created key is a + // symbolic link + +#define REG_OPTION_BACKUP_RESTORE (0x00000004L) // open for backup or restore + // special access rules + // privilege required + +#define REG_OPTION_OPEN_LINK (0x00000008L) // Open symbolic link + +#define REG_LEGAL_OPTION \ + (REG_OPTION_RESERVED |\ + REG_OPTION_NON_VOLATILE |\ + REG_OPTION_VOLATILE |\ + REG_OPTION_CREATE_LINK |\ + REG_OPTION_BACKUP_RESTORE |\ + REG_OPTION_OPEN_LINK) + +// +// Key creation/open disposition +// + +#define REG_CREATED_NEW_KEY (0x00000001L) // New Registry Key created +#define REG_OPENED_EXISTING_KEY (0x00000002L) // Existing Key opened + +// +// hive format to be used by Reg(Nt)SaveKeyEx +// +#define REG_STANDARD_FORMAT 1 +#define REG_LATEST_FORMAT 2 +#define REG_NO_COMPRESSION 4 + +// +// Key restore flags +// + +#define REG_WHOLE_HIVE_VOLATILE (0x00000001L) // Restore whole hive volatile +#define REG_REFRESH_HIVE (0x00000002L) // Unwind changes to last flush +#define REG_NO_LAZY_FLUSH (0x00000004L) // Never lazy flush this hive +#define REG_FORCE_RESTORE (0x00000008L) // Force the restore process even when we have open handles on subkeys + +// +// Key query structures +// + +typedef struct _KEY_BASIC_INFORMATION { + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG NameLength; + WCHAR Name[1]; // Variable length string +} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; + +typedef struct _KEY_NODE_INFORMATION { + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG NameLength; + WCHAR Name[1]; // Variable length string +// Class[1]; // Variable length string not declared +} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; + +typedef struct _KEY_FULL_INFORMATION { + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG ClassOffset; + ULONG ClassLength; + ULONG SubKeys; + ULONG MaxNameLen; + ULONG MaxClassLen; + ULONG Values; + ULONG MaxValueNameLen; + ULONG MaxValueDataLen; + WCHAR Class[1]; // Variable length +} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; + +// end_wdm +typedef struct _KEY_NAME_INFORMATION { + ULONG NameLength; + WCHAR Name[1]; // Variable length string +} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION; + +typedef struct _KEY_CACHED_INFORMATION { + LARGE_INTEGER LastWriteTime; + ULONG TitleIndex; + ULONG SubKeys; + ULONG MaxNameLen; + ULONG Values; + ULONG MaxValueNameLen; + ULONG MaxValueDataLen; + ULONG NameLength; + WCHAR Name[1]; // Variable length string +} KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION; + +typedef struct _KEY_FLAGS_INFORMATION { + ULONG UserFlags; +} KEY_FLAGS_INFORMATION, *PKEY_FLAGS_INFORMATION; + +// begin_wdm +typedef enum _KEY_INFORMATION_CLASS { + KeyBasicInformation, + KeyNodeInformation, + KeyFullInformation +// end_wdm + , + KeyNameInformation, + KeyCachedInformation, + KeyFlagsInformation +// begin_wdm +} KEY_INFORMATION_CLASS; + +typedef struct _KEY_WRITE_TIME_INFORMATION { + LARGE_INTEGER LastWriteTime; +} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION; + +typedef struct _KEY_USER_FLAGS_INFORMATION { + ULONG UserFlags; +} KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION; + +typedef enum _KEY_SET_INFORMATION_CLASS { + KeyWriteTimeInformation, + KeyUserFlagsInformation +} KEY_SET_INFORMATION_CLASS; + +// +// Value entry query structures +// + +typedef struct _KEY_VALUE_BASIC_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG NameLength; + WCHAR Name[1]; // Variable size +} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; + +typedef struct _KEY_VALUE_FULL_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG DataOffset; + ULONG DataLength; + ULONG NameLength; + WCHAR Name[1]; // Variable size +// Data[1]; // Variable size data not declared +} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; + +typedef struct _KEY_VALUE_PARTIAL_INFORMATION { + ULONG TitleIndex; + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; // Variable size +} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; + +typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; // Variable size +} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; + +typedef struct _KEY_VALUE_ENTRY { + PUNICODE_STRING ValueName; + ULONG DataLength; + ULONG DataOffset; + ULONG Type; +} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; + +typedef enum _KEY_VALUE_INFORMATION_CLASS { + KeyValueBasicInformation, + KeyValueFullInformation, + KeyValuePartialInformation, + KeyValueFullInformationAlign64, + KeyValuePartialInformationAlign64 +} KEY_VALUE_INFORMATION_CLASS; + + + +// +// Section Information Structures. +// + +typedef enum _SECTION_INHERIT { + ViewShare = 1, + ViewUnmap = 2 +} SECTION_INHERIT; + +// +// Section Access Rights. +// + +// begin_winnt +#define SECTION_QUERY 0x0001 +#define SECTION_MAP_WRITE 0x0002 +#define SECTION_MAP_READ 0x0004 +#define SECTION_MAP_EXECUTE 0x0008 +#define SECTION_EXTEND_SIZE 0x0010 + +#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\ + SECTION_MAP_WRITE | \ + SECTION_MAP_READ | \ + SECTION_MAP_EXECUTE | \ + SECTION_EXTEND_SIZE) +// end_winnt + +#define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS + +#define PAGE_NOACCESS 0x01 // winnt +#define PAGE_READONLY 0x02 // winnt +#define PAGE_READWRITE 0x04 // winnt +#define PAGE_WRITECOPY 0x08 // winnt +#define PAGE_EXECUTE 0x10 // winnt +#define PAGE_EXECUTE_READ 0x20 // winnt +#define PAGE_EXECUTE_READWRITE 0x40 // winnt +#define PAGE_EXECUTE_WRITECOPY 0x80 // winnt +#define PAGE_GUARD 0x100 // winnt +#define PAGE_NOCACHE 0x200 // winnt +#define PAGE_WRITECOMBINE 0x400 // winnt + +#define MEM_COMMIT 0x1000 +#define MEM_RESERVE 0x2000 +#define MEM_DECOMMIT 0x4000 +#define MEM_RELEASE 0x8000 +#define MEM_FREE 0x10000 +#define MEM_PRIVATE 0x20000 +#define MEM_MAPPED 0x40000 +#define MEM_RESET 0x80000 +#define MEM_TOP_DOWN 0x100000 +#define MEM_LARGE_PAGES 0x20000000 +#define MEM_4MB_PAGES 0x80000000 +#define SEC_RESERVE 0x4000000 +// +// Exception flag definitions. +// + +// begin_winnt +#define EXCEPTION_NONCONTINUABLE 0x1 // Noncontinuable exception +// end_winnt + +// +// Define maximum number of exception parameters. +// + +// begin_winnt +#define EXCEPTION_MAXIMUM_PARAMETERS 15 // maximum number of exception parameters + +// +// Exception record definition. +// + +typedef struct _EXCEPTION_RECORD { + NTSTATUS ExceptionCode; + ULONG ExceptionFlags; + struct _EXCEPTION_RECORD *ExceptionRecord; + PVOID ExceptionAddress; + ULONG NumberParameters; + ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; + } EXCEPTION_RECORD; + +typedef EXCEPTION_RECORD *PEXCEPTION_RECORD; + +typedef struct _EXCEPTION_RECORD32 { + NTSTATUS ExceptionCode; + ULONG ExceptionFlags; + ULONG ExceptionRecord; + ULONG ExceptionAddress; + ULONG NumberParameters; + ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; +} EXCEPTION_RECORD32, *PEXCEPTION_RECORD32; + +typedef struct _EXCEPTION_RECORD64 { + NTSTATUS ExceptionCode; + ULONG ExceptionFlags; + ULONG64 ExceptionRecord; + ULONG64 ExceptionAddress; + ULONG NumberParameters; + ULONG __unusedAlignment; + ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; +} EXCEPTION_RECORD64, *PEXCEPTION_RECORD64; + +// +// Typedef for pointer returned by exception_info() +// + +typedef struct _EXCEPTION_POINTERS { + PEXCEPTION_RECORD ExceptionRecord; + PCONTEXT ContextRecord; +} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS; +// end_winnt + +#ifdef _WIN64 +#define PORT_MAXIMUM_MESSAGE_LENGTH 512 +#else +#define PORT_MAXIMUM_MESSAGE_LENGTH 256 +#endif +// +// Define I/O Driver error log packet structure. This structure is filled in +// by the driver. +// + +typedef struct _IO_ERROR_LOG_PACKET { + UCHAR MajorFunctionCode; + UCHAR RetryCount; + USHORT DumpDataSize; + USHORT NumberOfStrings; + USHORT StringOffset; + USHORT EventCategory; + NTSTATUS ErrorCode; + ULONG UniqueErrorValue; + NTSTATUS FinalStatus; + ULONG SequenceNumber; + ULONG IoControlCode; + LARGE_INTEGER DeviceOffset; + ULONG DumpData[1]; +}IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; + +// +// Define the I/O error log message. This message is sent by the error log +// thread over the lpc port. +// + +typedef struct _IO_ERROR_LOG_MESSAGE { + USHORT Type; + USHORT Size; + USHORT DriverNameLength; + LARGE_INTEGER TimeStamp; + ULONG DriverNameOffset; + IO_ERROR_LOG_PACKET EntryData; +}IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; + +// +// Define the maximum message size that will be sent over the LPC to the +// application reading the error log entries. +// + +// +// Regardless of LPC size restrictions, ERROR_LOG_MAXIMUM_SIZE must remain +// a value that can fit in a UCHAR. +// + +#define ERROR_LOG_LIMIT_SIZE (256-16) + +// +// This limit, exclusive of IO_ERROR_LOG_MESSAGE_HEADER_LENGTH, also applies +// to IO_ERROR_LOG_MESSAGE_LENGTH +// + +#define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \ + sizeof(IO_ERROR_LOG_PACKET) + \ + (sizeof(WCHAR) * 40)) + +#define ERROR_LOG_MESSAGE_LIMIT_SIZE \ + (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) + +// +// IO_ERROR_LOG_MESSAGE_LENGTH is +// min(PORT_MAXIMUM_MESSAGE_LENGTH, ERROR_LOG_MESSAGE_LIMIT_SIZE) +// + +#define IO_ERROR_LOG_MESSAGE_LENGTH \ + ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \ + ERROR_LOG_MESSAGE_LIMIT_SIZE : \ + PORT_MAXIMUM_MESSAGE_LENGTH) + +// +// Define the maximum packet size a driver can allocate. +// + +#define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \ + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) + +// +// Event Specific Access Rights. +// + +#define EVENT_QUERY_STATE 0x0001 +#define EVENT_MODIFY_STATE 0x0002 // winnt +#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) // winnt + +// +// Semaphore Specific Access Rights. +// + +#define SEMAPHORE_QUERY_STATE 0x0001 +#define SEMAPHORE_MODIFY_STATE 0x0002 // winnt + +#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) // winnt + + +// +// Driver Verifier Definitions +// + +typedef ULONG_PTR (*PDRIVER_VERIFIER_THUNK_ROUTINE) ( + IN PVOID Context + ); + +// +// This structure is passed in by drivers that want to thunk callers of +// their exports. +// + +typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { + PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; + PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; +} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; + +// +// Driver Verifier flags. +// + +#define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 +#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 +#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 +#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 +#define DRIVER_VERIFIER_IO_CHECKING 0x0010 + + +// +// Defined processor features +// + +#define PF_FLOATING_POINT_PRECISION_ERRATA 0 // winnt +#define PF_FLOATING_POINT_EMULATED 1 // winnt +#define PF_COMPARE_EXCHANGE_DOUBLE 2 // winnt +#define PF_MMX_INSTRUCTIONS_AVAILABLE 3 // winnt +#define PF_PPC_MOVEMEM_64BIT_OK 4 // winnt +#define PF_ALPHA_BYTE_INSTRUCTIONS 5 // winnt +#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 // winnt +#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 // winnt +#define PF_RDTSC_INSTRUCTION_AVAILABLE 8 // winnt +#define PF_PAE_ENABLED 9 // winnt +#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 // winnt + +typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE { + StandardDesign, // None == 0 == standard design + NEC98x86, // NEC PC98xx series on X86 + EndAlternatives // past end of known alternatives +} ALTERNATIVE_ARCHITECTURE_TYPE; + +// correctly define these run-time definitions for non X86 machines + +#ifndef _X86_ + +#ifndef IsNEC_98 +#define IsNEC_98 (FALSE) +#endif + +#ifndef IsNotNEC_98 +#define IsNotNEC_98 (TRUE) +#endif + +#ifndef SetNEC_98 +#define SetNEC_98 +#endif + +#ifndef SetNotNEC_98 +#define SetNotNEC_98 +#endif + +#endif + +#define PROCESSOR_FEATURE_MAX 64 + +// end_wdm + +#if defined(REMOTE_BOOT) +// +// Defined system flags. +// + +/* the following two lines should be tagged with "winnt" when REMOTE_BOOT is on. */ +#define SYSTEM_FLAG_REMOTE_BOOT_CLIENT 0x00000001 +#define SYSTEM_FLAG_DISKLESS_CLIENT 0x00000002 +#endif // defined(REMOTE_BOOT) + +// +// Define data shared between kernel and user mode. +// +// N.B. User mode has read only access to this data +// +#ifdef _MAC +#pragma warning( disable : 4121) +#endif + +// +// Note: When adding a new field that's processor-architecture-specific (for example, bound with #if i386), +// then place this field to be the last element in the KUSER_SHARED_DATA so that offsets into common +// fields are the same for Wow6432 and Win64. +// + +typedef struct _KUSER_SHARED_DATA { + + // + // Current low 32-bit of tick count and tick count multiplier. + // + // N.B. The tick count is updated each time the clock ticks. + // + + volatile ULONG TickCountLow; + ULONG TickCountMultiplier; + + // + // Current 64-bit interrupt time in 100ns units. + // + + volatile KSYSTEM_TIME InterruptTime; + + // + // Current 64-bit system time in 100ns units. + // + + volatile KSYSTEM_TIME SystemTime; + + // + // Current 64-bit time zone bias. + // + + volatile KSYSTEM_TIME TimeZoneBias; + + // + // Support image magic number range for the host system. + // + // N.B. This is an inclusive range. + // + + USHORT ImageNumberLow; + USHORT ImageNumberHigh; + + // + // Copy of system root in Unicode + // + + WCHAR NtSystemRoot[ 260 ]; + + // + // Maximum stack trace depth if tracing enabled. + // + + ULONG MaxStackTraceDepth; + + // + // Crypto Exponent + // + + ULONG CryptoExponent; + + // + // TimeZoneId + // + + ULONG TimeZoneId; + + ULONG Reserved2[ 8 ]; + + // + // product type + // + + NT_PRODUCT_TYPE NtProductType; + BOOLEAN ProductTypeIsValid; + + // + // NT Version. Note that each process sees a version from its PEB, but + // if the process is running with an altered view of the system version, + // the following two fields are used to correctly identify the version + // + + ULONG NtMajorVersion; + ULONG NtMinorVersion; + + // + // Processor Feature Bits + // + + BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; + + // + // Reserved fields - do not use + // + ULONG Reserved1; + ULONG Reserved3; + + // + // Time slippage while in debugger + // + + volatile ULONG TimeSlip; + + // + // Alternative system architecture. Example: NEC PC98xx on x86 + // + + ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; + + // + // If the system is an evaluation unit, the following field contains the + // date and time that the evaluation unit expires. A value of 0 indicates + // that there is no expiration. A non-zero value is the UTC absolute time + // that the system expires. + // + + LARGE_INTEGER SystemExpirationDate; + + // + // Suite Support + // + + ULONG SuiteMask; + + // + // TRUE if a kernel debugger is connected/enabled + // + + BOOLEAN KdDebuggerEnabled; + + + // + // Current console session Id. Always zero on non-TS systems + // + volatile ULONG ActiveConsoleId; + + // + // Force-dismounts cause handles to become invalid. Rather than + // always probe handles, we maintain a serial number of + // dismounts that clients can use to see if they need to probe + // handles. + // + + volatile ULONG DismountCount; + + // + // This field indicates the status of the 64-bit COM+ package on the system. + // It indicates whether the Itermediate Language (IL) COM+ images need to + // use the 64-bit COM+ runtime or the 32-bit COM+ runtime. + // + + ULONG ComPlusPackage; + + // + // Time in tick count for system-wide last user input across all + // terminal sessions. For MP performance, it is not updated all + // the time (e.g. once a minute per session). It is used for idle + // detection. + // + + ULONG LastSystemRITEventTickCount; + + // + // Number of physical pages in the system. This can dynamically + // change as physical memory can be added or removed from a running + // system. + // + + ULONG NumberOfPhysicalPages; + + // + // True if the system was booted in safe boot mode. + // + + BOOLEAN SafeBootMode; + + // + // The following field is used for Heap and CritSec Tracing + // The last bit is set for Critical Sec Collision tracing and + // second Last bit is for Heap Tracing + // Also the first 16 bits are used as counter. + // + + ULONG TraceLogging; + +#if defined(i386) + + // + // Depending on the processor, the code for fast system call + // will differ, the following buffer is filled with the appropriate + // code sequence and user mode code will branch through it. + // + // (32 bytes, using ULONGLONG for alignment). + // + + ULONGLONG Fill0; // alignment + ULONGLONG SystemCall[4]; + +#endif + +} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; + +#ifdef _MAC +#pragma warning( default : 4121 ) +#endif + +// + +#if defined(_X86_) + +#define PAUSE_PROCESSOR _asm { rep nop } + +#else + +#define PAUSE_PROCESSOR + +#endif + + +// +// Interrupt modes. +// + +typedef enum _KINTERRUPT_MODE { + LevelSensitive, + Latched + } KINTERRUPT_MODE; + +// +// Wait reasons +// + +typedef enum _KWAIT_REASON { + Executive, + FreePage, + PageIn, + PoolAllocation, + DelayExecution, + Suspended, + UserRequest, + WrExecutive, + WrFreePage, + WrPageIn, + WrPoolAllocation, + WrDelayExecution, + WrSuspended, + WrUserRequest, + WrEventPair, + WrQueue, + WrLpcReceive, + WrLpcReply, + WrVirtualMemory, + WrPageOut, + WrRendezvous, + Spare2, + Spare3, + Spare4, + Spare5, + Spare6, + WrKernel, + MaximumWaitReason + } KWAIT_REASON; + +// end_ntddk end_wdm end_nthal + +// +// Miscellaneous type definitions +// +// APC state +// + +typedef struct _KAPC_STATE { + LIST_ENTRY ApcListHead[MaximumMode]; + struct _KPROCESS *Process; + BOOLEAN KernelApcInProgress; + BOOLEAN KernelApcPending; + BOOLEAN UserApcPending; +} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE; + + +typedef struct _KWAIT_BLOCK { + LIST_ENTRY WaitListEntry; + struct _KTHREAD *RESTRICTED_POINTER Thread; + PVOID Object; + struct _KWAIT_BLOCK *RESTRICTED_POINTER NextWaitBlock; + USHORT WaitKey; + USHORT WaitType; +} KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK; + +// +// Thread start function +// + +typedef +VOID +(*PKSTART_ROUTINE) ( + IN PVOID StartContext + ); + +// +// Kernel object structure definitions +// + +// +// Device Queue object and entry +// + +typedef struct _KDEVICE_QUEUE { + CSHORT Type; + CSHORT Size; + LIST_ENTRY DeviceListHead; + KSPIN_LOCK Lock; + BOOLEAN Busy; +} KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; + +typedef struct _KDEVICE_QUEUE_ENTRY { + LIST_ENTRY DeviceListEntry; + ULONG SortKey; + BOOLEAN Inserted; +} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; + +// +// Define the interrupt service function type and the empty struct +// type. +// +typedef +BOOLEAN +(*PKSERVICE_ROUTINE) ( + IN struct _KINTERRUPT *Interrupt, + IN PVOID ServiceContext + ); +// +// Mutant object +// + +typedef struct _KMUTANT { + DISPATCHER_HEADER Header; + LIST_ENTRY MutantListEntry; + struct _KTHREAD *RESTRICTED_POINTER OwnerThread; + BOOLEAN Abandoned; + UCHAR ApcDisable; +} KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; + +// end_ntddk end_wdm end_ntosp +// +// Queue object +// + +// begin_ntosp +typedef struct _KQUEUE { + DISPATCHER_HEADER Header; + LIST_ENTRY EntryListHead; + ULONG CurrentCount; + ULONG MaximumCount; + LIST_ENTRY ThreadListHead; +} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE; +// end_ntosp + +// begin_ntddk begin_wdm begin_ntosp +// +// +// Semaphore object +// + +typedef struct _KSEMAPHORE { + DISPATCHER_HEADER Header; + LONG Limit; +} KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE; + +// +// DPC object +// + +NTKERNELAPI +VOID +KeInitializeDpc ( + IN PRKDPC Dpc, + IN PKDEFERRED_ROUTINE DeferredRoutine, + IN PVOID DeferredContext + ); + +NTKERNELAPI +BOOLEAN +KeInsertQueueDpc ( + IN PRKDPC Dpc, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2 + ); + +NTKERNELAPI +BOOLEAN +KeRemoveQueueDpc ( + IN PRKDPC Dpc + ); + +// end_wdm + +NTKERNELAPI +VOID +KeSetImportanceDpc ( + IN PRKDPC Dpc, + IN KDPC_IMPORTANCE Importance + ); + +NTKERNELAPI +VOID +KeSetTargetProcessorDpc ( + IN PRKDPC Dpc, + IN CCHAR Number + ); + +// begin_wdm + +NTKERNELAPI +VOID +KeFlushQueuedDpcs ( + VOID + ); + +// +// Device queue object +// + +NTKERNELAPI +VOID +KeInitializeDeviceQueue ( + IN PKDEVICE_QUEUE DeviceQueue + ); + +NTKERNELAPI +BOOLEAN +KeInsertDeviceQueue ( + IN PKDEVICE_QUEUE DeviceQueue, + IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry + ); + +NTKERNELAPI +BOOLEAN +KeInsertByKeyDeviceQueue ( + IN PKDEVICE_QUEUE DeviceQueue, + IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, + IN ULONG SortKey + ); + +NTKERNELAPI +PKDEVICE_QUEUE_ENTRY +KeRemoveDeviceQueue ( + IN PKDEVICE_QUEUE DeviceQueue + ); + +NTKERNELAPI +PKDEVICE_QUEUE_ENTRY +KeRemoveByKeyDeviceQueue ( + IN PKDEVICE_QUEUE DeviceQueue, + IN ULONG SortKey + ); + +NTKERNELAPI +PKDEVICE_QUEUE_ENTRY +KeRemoveByKeyDeviceQueueIfBusy ( + IN PKDEVICE_QUEUE DeviceQueue, + IN ULONG SortKey + ); + +NTKERNELAPI +BOOLEAN +KeRemoveEntryDeviceQueue ( + IN PKDEVICE_QUEUE DeviceQueue, + IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry + ); + +// +// Kernel dispatcher object functions +// +// Event Object +// + + +NTKERNELAPI +VOID +KeInitializeEvent ( + IN PRKEVENT Event, + IN EVENT_TYPE Type, + IN BOOLEAN State + ); + +NTKERNELAPI +VOID +KeClearEvent ( + IN PRKEVENT Event + ); + +NTKERNELAPI +LONG +KePulseEvent ( + IN PRKEVENT Event, + IN KPRIORITY Increment, + IN BOOLEAN Wait + ); + +NTKERNELAPI +LONG +KeReadStateEvent ( + IN PRKEVENT Event + ); + +NTKERNELAPI +LONG +KeResetEvent ( + IN PRKEVENT Event + ); + + +NTKERNELAPI +LONG +KeSetEvent ( + IN PRKEVENT Event, + IN KPRIORITY Increment, + IN BOOLEAN Wait + ); + + +NTKERNELAPI +VOID +KeInitializeMutant ( + IN PRKMUTANT Mutant, + IN BOOLEAN InitialOwner + ); + +LONG +KeReadStateMutant ( + IN PRKMUTANT Mutant + ); + +NTKERNELAPI +LONG +KeReleaseMutant ( + IN PRKMUTANT Mutant, + IN KPRIORITY Increment, + IN BOOLEAN Abandoned, + IN BOOLEAN Wait + ); + +// begin_ntddk begin_wdm begin_nthal begin_ntosp +// +// Mutex object +// + +NTKERNELAPI +VOID +KeInitializeMutex ( + IN PRKMUTEX Mutex, + IN ULONG Level + ); + +NTKERNELAPI +LONG +KeReadStateMutex ( + IN PRKMUTEX Mutex + ); + +NTKERNELAPI +LONG +KeReleaseMutex ( + IN PRKMUTEX Mutex, + IN BOOLEAN Wait + ); + +// end_ntddk end_wdm +// +// Queue Object. +// + +NTKERNELAPI +VOID +KeInitializeQueue ( + IN PRKQUEUE Queue, + IN ULONG Count OPTIONAL + ); + +NTKERNELAPI +LONG +KeReadStateQueue ( + IN PRKQUEUE Queue + ); + +NTKERNELAPI +LONG +KeInsertQueue ( + IN PRKQUEUE Queue, + IN PLIST_ENTRY Entry + ); + +NTKERNELAPI +LONG +KeInsertHeadQueue ( + IN PRKQUEUE Queue, + IN PLIST_ENTRY Entry + ); + +NTKERNELAPI +PLIST_ENTRY +KeRemoveQueue ( + IN PRKQUEUE Queue, + IN KPROCESSOR_MODE WaitMode, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + +PLIST_ENTRY +KeRundownQueue ( + IN PRKQUEUE Queue + ); + +// begin_ntddk begin_wdm +// +// Semaphore object +// + +NTKERNELAPI +VOID +KeInitializeSemaphore ( + IN PRKSEMAPHORE Semaphore, + IN LONG Count, + IN LONG Limit + ); + +NTKERNELAPI +LONG +KeReadStateSemaphore ( + IN PRKSEMAPHORE Semaphore + ); + +NTKERNELAPI +LONG +KeReleaseSemaphore ( + IN PRKSEMAPHORE Semaphore, + IN KPRIORITY Increment, + IN LONG Adjustment, + IN BOOLEAN Wait + ); + + +NTKERNELAPI +VOID +KeAttachProcess ( + IN PRKPROCESS Process + ); + +NTKERNELAPI +VOID +KeDetachProcess ( + VOID + ); + + +NTKERNELAPI +VOID +KeStackAttachProcess ( + IN PRKPROCESS PROCESS, + OUT PRKAPC_STATE ApcState + ); + +NTKERNELAPI +VOID +KeUnstackDetachProcess ( + IN PRKAPC_STATE ApcState + ); + +NTKERNELAPI +NTSTATUS +KeDelayExecutionThread ( + IN KPROCESSOR_MODE WaitMode, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Interval + ); + +NTKERNELAPI +KPRIORITY +KeQueryPriorityThread ( + IN PKTHREAD Thread + ); + +NTKERNELAPI +ULONG +KeQueryRuntimeThread ( + IN PKTHREAD Thread, + OUT PULONG UserTime + ); + +NTKERNELAPI +LONG +KeSetBasePriorityThread ( + IN PKTHREAD Thread, + IN LONG Increment + ); + + +NTKERNELAPI +CCHAR +KeSetIdealProcessorThread ( + IN PKTHREAD Thread, + IN CCHAR Processor + ); + +// begin_ntosp +NTKERNELAPI +BOOLEAN +KeSetKernelStackSwapEnable ( + IN BOOLEAN Enable + ); + +NTKERNELAPI +KPRIORITY +KeSetPriorityThread ( + IN PKTHREAD Thread, + IN KPRIORITY Priority + ); + + +#if ((defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) ||defined(_NTHAL_)) && !defined(_NTSYSTEM_DRIVER_) || defined(_NTOSP_)) + +// begin_wdm + +NTKERNELAPI +VOID +KeEnterCriticalRegion ( + VOID + ); + +NTKERNELAPI +VOID +KeLeaveCriticalRegion ( + VOID + ); + +NTKERNELAPI +BOOLEAN +KeAreApcsDisabled( + VOID + ); + +// end_wdm + +#else + +//++ +// +// VOID +// KeEnterCriticalRegion ( +// VOID +// ) +// +// +// Routine Description: +// +// This function disables kernel APC's. +// +// N.B. The following code does not require any interlocks. There are +// two cases of interest: 1) On an MP system, the thread cannot +// be running on two processors as once, and 2) if the thread is +// is interrupted to deliver a kernel mode APC which also calls +// this routine, the values read and stored will stack and unstack +// properly. +// +// Arguments: +// +// None. +// +// Return Value: +// +// None. +//-- + +#define KeEnterCriticalRegion() KeGetCurrentThread()->KernelApcDisable -= 1 + +//++ +// +// VOID +// KeEnterCriticalRegionThread ( +// PKTHREAD CurrentThread +// ) +// +// +// Routine Description: +// +// This function disables kernel APC's for the current thread only. +// +// N.B. The following code does not require any interlocks. There are +// two cases of interest: 1) On an MP system, the thread cannot +// be running on two processors as once, and 2) if the thread is +// is interrupted to deliver a kernel mode APC which also calls +// this routine, the values read and stored will stack and unstack +// properly. +// +// Arguments: +// +// CurrentThread - Current thread thats executing. This must be the +// current thread. +// +// Return Value: +// +// None. +//-- + +#define KeEnterCriticalRegionThread(CurrentThread) { \ + ASSERT (CurrentThread == KeGetCurrentThread ()); \ + (CurrentThread)->KernelApcDisable -= 1; \ +} + +//++ +// +// VOID +// KeLeaveCriticalRegion ( +// VOID +// ) +// +// +// Routine Description: +// +// This function enables kernel APC's. +// +// N.B. The following code does not require any interlocks. There are +// two cases of interest: 1) On an MP system, the thread cannot +// be running on two processors as once, and 2) if the thread is +// is interrupted to deliver a kernel mode APC which also calls +// this routine, the values read and stored will stack and unstack +// properly. +// +// Arguments: +// +// None. +// +// Return Value: +// +// None. +//-- + +#define KeLeaveCriticalRegion() KiLeaveCriticalRegion() + +//++ +// +// VOID +// KeLeaveCriticalRegionThread ( +// PKTHREAD CurrentThread +// ) +// +// +// Routine Description: +// +// This function enables kernel APC's for the current thread. +// +// N.B. The following code does not require any interlocks. There are +// two cases of interest: 1) On an MP system, the thread cannot +// be running on two processors as once, and 2) if the thread is +// is interrupted to deliver a kernel mode APC which also calls +// this routine, the values read and stored will stack and unstack +// properly. +// +// Arguments: +// +// CurrentThread - Current thread thats executing. This must be the +// current thread. +// +// Return Value: +// +// None. +//-- + +#define KeLeaveCriticalRegionThread(CurrentThread) { \ + ASSERT (CurrentThread == KeGetCurrentThread ()); \ + KiLeaveCriticalRegionThread(CurrentThread); \ +} + +#define KeAreApcsDisabled() (KeGetCurrentThread()->KernelApcDisable != 0); + +//++ +// +// KPROCESSOR_MODE +// KeGetPReviousMode ( +// VOID +// ) +// +// +// Routine Description: +// +// This function gets the threads previous mode from the trap frame +// +// +// Arguments: +// +// None. +// +// Return Value: +// +// KPROCESSOR_MODE - Previous mode for this thread +//-- +#define KeGetPreviousMode() (KeGetCurrentThread()->PreviousMode) + +//++ +// +// KPROCESSOR_MODE +// KeGetPReviousModeByThread ( +// PKTHREAD xxCurrentThread +// ) +// +// +// Routine Description: +// +// This function gets the threads previous mode from the trap frame. +// +// +// Arguments: +// +// xxCurrentThread - Current thread. This can not be a cross thread reference +// +// Return Value: +// +// KPROCESSOR_MODE - Previous mode for this thread +//-- +#define KeGetPreviousModeByThread(xxCurrentThread) (ASSERT (xxCurrentThread == KeGetCurrentThread ()),\ + (xxCurrentThread)->PreviousMode) + + +#endif + +// begin_wdm + +// +// Timer object +// + +NTKERNELAPI +VOID +KeInitializeTimer ( + IN PKTIMER Timer + ); + +NTKERNELAPI +VOID +KeInitializeTimerEx ( + IN PKTIMER Timer, + IN TIMER_TYPE Type + ); + +NTKERNELAPI +BOOLEAN +KeCancelTimer ( + IN PKTIMER + ); + +NTKERNELAPI +BOOLEAN +KeReadStateTimer ( + PKTIMER Timer + ); + +NTKERNELAPI +BOOLEAN +KeSetTimer ( + IN PKTIMER Timer, + IN LARGE_INTEGER DueTime, + IN PKDPC Dpc OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +KeSetTimerEx ( + IN PKTIMER Timer, + IN LARGE_INTEGER DueTime, + IN LONG Period OPTIONAL, + IN PKDPC Dpc OPTIONAL + ); + + +#define KeWaitForMutexObject KeWaitForSingleObject + +NTKERNELAPI +NTSTATUS +KeWaitForMultipleObjects ( + IN ULONG Count, + IN PVOID Object[], + IN WAIT_TYPE WaitType, + IN KWAIT_REASON WaitReason, + IN KPROCESSOR_MODE WaitMode, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL, + IN PKWAIT_BLOCK WaitBlockArray OPTIONAL + ); + +NTKERNELAPI +NTSTATUS +KeWaitForSingleObject ( + IN PVOID Object, + IN KWAIT_REASON WaitReason, + IN KPROCESSOR_MODE WaitMode, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + + +// +// On X86 the following routines are defined in the HAL and imported by +// all other modules. +// + +#if defined(_X86_) && !defined(_NTHAL_) + +#define _DECL_HAL_KE_IMPORT __declspec(dllimport) + +#else + +#define _DECL_HAL_KE_IMPORT + +#endif + + +_DECL_HAL_KE_IMPORT +KIRQL +FASTCALL +KeAcquireQueuedSpinLock ( + IN KSPIN_LOCK_QUEUE_NUMBER Number + ); + +_DECL_HAL_KE_IMPORT +VOID +FASTCALL +KeReleaseQueuedSpinLock ( + IN KSPIN_LOCK_QUEUE_NUMBER Number, + IN KIRQL OldIrql + ); + +_DECL_HAL_KE_IMPORT +LOGICAL +FASTCALL +KeTryToAcquireQueuedSpinLock( + IN KSPIN_LOCK_QUEUE_NUMBER Number, + IN PKIRQL OldIrql + ); + +// +// spin lock functions +// + +NTKERNELAPI +VOID +NTAPI +KeInitializeSpinLock ( + IN PKSPIN_LOCK SpinLock + ); + +#if defined(_X86_) + +NTKERNELAPI +VOID +FASTCALL +KefAcquireSpinLockAtDpcLevel ( + IN PKSPIN_LOCK SpinLock + ); + +NTKERNELAPI +VOID +FASTCALL +KefReleaseSpinLockFromDpcLevel ( + IN PKSPIN_LOCK SpinLock + ); + +#define KeAcquireSpinLockAtDpcLevel(a) KefAcquireSpinLockAtDpcLevel(a) +#define KeReleaseSpinLockFromDpcLevel(a) KefReleaseSpinLockFromDpcLevel(a) + +_DECL_HAL_KE_IMPORT +KIRQL +FASTCALL +KfAcquireSpinLock ( + IN PKSPIN_LOCK SpinLock + ); + +_DECL_HAL_KE_IMPORT +VOID +FASTCALL +KfReleaseSpinLock ( + IN PKSPIN_LOCK SpinLock, + IN KIRQL NewIrql + ); + +// end_wdm + +_DECL_HAL_KE_IMPORT +KIRQL +FASTCALL +KeAcquireSpinLockRaiseToSynch ( + IN PKSPIN_LOCK SpinLock + ); + +// begin_wdm + +#define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) +#define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) + +#else + +NTKERNELAPI +KIRQL +FASTCALL +KeAcquireSpinLockRaiseToSynch ( + IN PKSPIN_LOCK SpinLock + ); + +NTKERNELAPI +VOID +KeAcquireSpinLockAtDpcLevel ( + IN PKSPIN_LOCK SpinLock + ); + +NTKERNELAPI +VOID +KeReleaseSpinLockFromDpcLevel ( + IN PKSPIN_LOCK SpinLock + ); + +NTKERNELAPI +KIRQL +KeAcquireSpinLockRaiseToDpc ( + IN PKSPIN_LOCK SpinLock + ); + +#define KeAcquireSpinLock(SpinLock, OldIrql) \ + *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) + +NTKERNELAPI +VOID +KeReleaseSpinLock ( + IN PKSPIN_LOCK SpinLock, + IN KIRQL NewIrql + ); + +#endif + +NTKERNELAPI +BOOLEAN +FASTCALL +KeTryToAcquireSpinLockAtDpcLevel ( + IN PKSPIN_LOCK SpinLock + ); + + +#if defined(_X86_) + +_DECL_HAL_KE_IMPORT +VOID +FASTCALL +KfLowerIrql ( + IN KIRQL NewIrql + ); + +_DECL_HAL_KE_IMPORT +KIRQL +FASTCALL +KfRaiseIrql ( + IN KIRQL NewIrql + ); + +// end_wdm + +_DECL_HAL_KE_IMPORT +KIRQL +KeRaiseIrqlToDpcLevel( + VOID + ); + +_DECL_HAL_KE_IMPORT +KIRQL +KeRaiseIrqlToSynchLevel( + VOID + ); + +// begin_wdm + +#define KeLowerIrql(a) KfLowerIrql(a) +#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) + +// end_wdm + +// begin_wdm + +#elif defined(_ALPHA_) + +#define KeLowerIrql(a) __swpirql(a) +#define KeRaiseIrql(a,b) *(b) = __swpirql(a) + +// end_wdm + +extern ULONG KiSynchIrql; + +#define KfRaiseIrql(a) __swpirql(a) +#define KeRaiseIrqlToDpcLevel() __swpirql(DISPATCH_LEVEL) +#define KeRaiseIrqlToSynchLevel() __swpirql((UCHAR)KiSynchIrql) + +// begin_wdm + +#elif defined(_IA64_) + +VOID +KeLowerIrql ( + IN KIRQL NewIrql + ); + +VOID +KeRaiseIrql ( + IN KIRQL NewIrql, + OUT PKIRQL OldIrql + ); + +// end_wdm + +KIRQL +KfRaiseIrql ( + IN KIRQL NewIrql + ); + +KIRQL +KeRaiseIrqlToDpcLevel ( + VOID + ); + +KIRQL +KeRaiseIrqlToSynchLevel ( + VOID + ); + +// begin_wdm + +#elif defined(_AMD64_) + +// +// These function are defined in amd64.h for the AMD64 platform. +// + +#else + +#error "no target architecture" + +#endif + +// +// Queued spin lock functions for "in stack" lock handles. +// +// The following three functions RAISE and LOWER IRQL when a queued +// in stack spin lock is acquired or released using these routines. +// + +_DECL_HAL_KE_IMPORT +VOID +FASTCALL +KeAcquireInStackQueuedSpinLock ( + IN PKSPIN_LOCK SpinLock, + IN PKLOCK_QUEUE_HANDLE LockHandle + ); + + +_DECL_HAL_KE_IMPORT +VOID +FASTCALL +KeReleaseInStackQueuedSpinLock ( + IN PKLOCK_QUEUE_HANDLE LockHandle + ); + +// +// The following two functions do NOT raise or lower IRQL when a queued +// in stack spin lock is acquired or released using these functions. +// + +NTKERNELAPI +VOID +FASTCALL +KeAcquireInStackQueuedSpinLockAtDpcLevel ( + IN PKSPIN_LOCK SpinLock, + IN PKLOCK_QUEUE_HANDLE LockHandle + ); + +NTKERNELAPI +VOID +FASTCALL +KeReleaseInStackQueuedSpinLockFromDpcLevel ( + IN PKLOCK_QUEUE_HANDLE LockHandle + ); + +// +// Miscellaneous kernel functions +// + +typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { + BufferEmpty, + BufferInserted, + BufferStarted, + BufferFinished, + BufferIncomplete +} KBUGCHECK_BUFFER_DUMP_STATE; + +typedef +VOID +(*PKBUGCHECK_CALLBACK_ROUTINE) ( + IN PVOID Buffer, + IN ULONG Length + ); + +typedef struct _KBUGCHECK_CALLBACK_RECORD { + LIST_ENTRY Entry; + PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; + PVOID Buffer; + ULONG Length; + PUCHAR Component; + ULONG_PTR Checksum; + UCHAR State; +} KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; + +#define KeInitializeCallbackRecord(CallbackRecord) \ + (CallbackRecord)->State = BufferEmpty + +NTKERNELAPI +BOOLEAN +KeDeregisterBugCheckCallback ( + IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord + ); + +NTKERNELAPI +BOOLEAN +KeRegisterBugCheckCallback ( + IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord, + IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, + IN PVOID Buffer, + IN ULONG Length, + IN PUCHAR Component + ); + +typedef enum _KBUGCHECK_CALLBACK_REASON { + KbCallbackInvalid, + KbCallbackReserved1, + KbCallbackSecondaryDumpData, + KbCallbackDumpIo, +} KBUGCHECK_CALLBACK_REASON; + +typedef +VOID +(*PKBUGCHECK_REASON_CALLBACK_ROUTINE) ( + IN KBUGCHECK_CALLBACK_REASON Reason, + IN struct _KBUGCHECK_REASON_CALLBACK_RECORD* Record, + IN OUT PVOID ReasonSpecificData, + IN ULONG ReasonSpecificDataLength + ); + +typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD { + LIST_ENTRY Entry; + PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine; + PUCHAR Component; + ULONG_PTR Checksum; + KBUGCHECK_CALLBACK_REASON Reason; + UCHAR State; +} KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD; + +typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA { + IN PVOID InBuffer; + IN ULONG InBufferLength; + IN ULONG MaximumAllowed; + OUT GUID Guid; + OUT PVOID OutBuffer; + OUT ULONG OutBufferLength; +} KBUGCHECK_SECONDARY_DUMP_DATA, *PKBUGCHECK_SECONDARY_DUMP_DATA; + +typedef enum _KBUGCHECK_DUMP_IO_TYPE +{ + KbDumpIoInvalid, + KbDumpIoHeader, + KbDumpIoBody, + KbDumpIoSecondaryData, + KbDumpIoComplete +} KBUGCHECK_DUMP_IO_TYPE; + +typedef struct _KBUGCHECK_DUMP_IO { + IN ULONG64 Offset; + IN PVOID Buffer; + IN ULONG BufferLength; + IN KBUGCHECK_DUMP_IO_TYPE Type; +} KBUGCHECK_DUMP_IO, *PKBUGCHECK_DUMP_IO; + +NTKERNELAPI +BOOLEAN +KeDeregisterBugCheckReasonCallback ( + IN PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord + ); + +NTKERNELAPI +BOOLEAN +KeRegisterBugCheckReasonCallback ( + IN PKBUGCHECK_REASON_CALLBACK_RECORD CallbackRecord, + IN PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine, + IN KBUGCHECK_CALLBACK_REASON Reason, + IN PUCHAR Component + ); + +// end_wdm + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +NTAPI +KeBugCheck ( + IN ULONG BugCheckCode + ); + + +NTKERNELAPI +DECLSPEC_NORETURN +VOID +KeBugCheckEx( + IN ULONG BugCheckCode, + IN ULONG_PTR BugCheckParameter1, + IN ULONG_PTR BugCheckParameter2, + IN ULONG_PTR BugCheckParameter3, + IN ULONG_PTR BugCheckParameter4 + ); + + +NTKERNELAPI +ULONGLONG +KeQueryInterruptTime ( + VOID + ); + +NTKERNELAPI +VOID +KeQuerySystemTime ( + OUT PLARGE_INTEGER CurrentTime + ); + +NTKERNELAPI +ULONG +KeQueryTimeIncrement ( + VOID + ); + +NTKERNELAPI +ULONG +KeGetRecommendedSharedDataAlignment ( + VOID + ); + +// end_wdm +NTKERNELAPI +KAFFINITY +KeQueryActiveProcessors ( + VOID + ); + +// +// Time update notify routine. +// + +typedef +VOID +(FASTCALL *PTIME_UPDATE_NOTIFY_ROUTINE)( + IN HANDLE ThreadId, + IN KPROCESSOR_MODE Mode + ); + +NTKERNELAPI +VOID +FASTCALL +KeSetTimeUpdateNotifyRoutine( + IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine + ); + + +#if defined(_AMD64_) || defined(_ALPHA_) || defined(_IA64_) + +extern volatile LARGE_INTEGER KeTickCount; + +#else + +extern volatile KSYSTEM_TIME KeTickCount; + +#endif + + +typedef enum _MEMORY_CACHING_TYPE_ORIG { + MmFrameBufferCached = 2 +} MEMORY_CACHING_TYPE_ORIG; + +typedef enum _MEMORY_CACHING_TYPE { + MmNonCached = FALSE, + MmCached = TRUE, + MmWriteCombined = MmFrameBufferCached, + MmHardwareCoherentCached, + MmNonCachedUnordered, // IA64 + MmUSWCCached, + MmMaximumCacheType +} MEMORY_CACHING_TYPE; + +// +// Pool Allocation routines (in pool.c) +// + +typedef enum _POOL_TYPE { + NonPagedPool, + PagedPool, + NonPagedPoolMustSucceed, + DontUseThisType, + NonPagedPoolCacheAligned, + PagedPoolCacheAligned, + NonPagedPoolCacheAlignedMustS, + MaxPoolType + + // end_wdm + , + // + // Note these per session types are carefully chosen so that the appropriate + // masking still applies as well as MaxPoolType above. + // + + NonPagedPoolSession = 32, + PagedPoolSession = NonPagedPoolSession + 1, + NonPagedPoolMustSucceedSession = PagedPoolSession + 1, + DontUseThisTypeSession = NonPagedPoolMustSucceedSession + 1, + NonPagedPoolCacheAlignedSession = DontUseThisTypeSession + 1, + PagedPoolCacheAlignedSession = NonPagedPoolCacheAlignedSession + 1, + NonPagedPoolCacheAlignedMustSSession = PagedPoolCacheAlignedSession + 1, + + // begin_wdm + + } POOL_TYPE; + +#define POOL_COLD_ALLOCATION 256 // Note this cannot encode into the header. + +#define POOL_RAISE_IF_ALLOCATION_FAILURE 16 + +NTKERNELAPI +PVOID +ExAllocatePool( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes + ); + +NTKERNELAPI +PVOID +ExAllocatePoolWithQuota( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes + ); + +NTKERNELAPI +PVOID +NTAPI +ExAllocatePoolWithTag( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag + ); + +// +// _EX_POOL_PRIORITY_ provides a method for the system to handle requests +// intelligently in low resource conditions. +// +// LowPoolPriority should be used when it is acceptable to the driver for the +// mapping request to fail if the system is low on resources. An example of +// this could be for a non-critical network connection where the driver can +// handle the failure case when system resources are close to being depleted. +// +// NormalPoolPriority should be used when it is acceptable to the driver for the +// mapping request to fail if the system is very low on resources. An example +// of this could be for a non-critical local filesystem request. +// +// HighPoolPriority should be used when it is unacceptable to the driver for the +// mapping request to fail unless the system is completely out of resources. +// An example of this would be the paging file path in a driver. +// +// SpecialPool can be specified to bound the allocation at a page end (or +// beginning). This should only be done on systems being debugged as the +// memory cost is expensive. +// +// N.B. These values are very carefully chosen so that the pool allocation +// code can quickly crack the priority request. +// + +typedef enum _EX_POOL_PRIORITY { + LowPoolPriority, + LowPoolPrioritySpecialPoolOverrun = 8, + LowPoolPrioritySpecialPoolUnderrun = 9, + NormalPoolPriority = 16, + NormalPoolPrioritySpecialPoolOverrun = 24, + NormalPoolPrioritySpecialPoolUnderrun = 25, + HighPoolPriority = 32, + HighPoolPrioritySpecialPoolOverrun = 40, + HighPoolPrioritySpecialPoolUnderrun = 41 + + } EX_POOL_PRIORITY; + +NTKERNELAPI +PVOID +NTAPI +ExAllocatePoolWithTagPriority( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag, + IN EX_POOL_PRIORITY Priority + ); + +#ifndef POOL_TAGGING +#define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b) +#endif //POOL_TAGGING + +NTKERNELAPI +PVOID +ExAllocatePoolWithQuotaTag( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag + ); + +#ifndef POOL_TAGGING +#define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b) +#endif //POOL_TAGGING + +NTKERNELAPI +VOID +NTAPI +ExFreePool( + IN PVOID P + ); + +// end_wdm +#if defined(POOL_TAGGING) +#define ExFreePool(a) ExFreePoolWithTag(a,0) +#endif + +// +// If high order bit in Pool tag is set, then must use ExFreePoolWithTag to free +// + +#define PROTECTED_POOL 0x80000000 + +// begin_wdm +NTKERNELAPI +VOID +ExFreePoolWithTag( + IN PVOID P, + IN ULONG Tag + ); + +NTKERNELAPI +SIZE_T +ExQueryPoolBlockSize ( + IN PVOID PoolBlock, + OUT PBOOLEAN QuotaCharged + ); +// +// Routines to support fast mutexes. +// + +typedef struct _FAST_MUTEX { + LONG Count; + PKTHREAD Owner; + ULONG Contention; + KEVENT Event; + ULONG OldIrql; +} FAST_MUTEX, *PFAST_MUTEX; + +#define ExInitializeFastMutex(_FastMutex) \ + (_FastMutex)->Count = 1; \ + (_FastMutex)->Owner = NULL; \ + (_FastMutex)->Contention = 0; \ + KeInitializeEvent(&(_FastMutex)->Event, \ + SynchronizationEvent, \ + FALSE); + +NTKERNELAPI +VOID +FASTCALL +ExAcquireFastMutexUnsafe ( + IN PFAST_MUTEX FastMutex + ); + +NTKERNELAPI +VOID +FASTCALL +ExReleaseFastMutexUnsafe ( + IN PFAST_MUTEX FastMutex + ); + +#if defined(_ALPHA_) || defined(_IA64_) || defined(_AMD64_) + +NTKERNELAPI +VOID +FASTCALL +ExAcquireFastMutex ( + IN PFAST_MUTEX FastMutex + ); + +NTKERNELAPI +VOID +FASTCALL +ExReleaseFastMutex ( + IN PFAST_MUTEX FastMutex + ); + +NTKERNELAPI +BOOLEAN +FASTCALL +ExTryToAcquireFastMutex ( + IN PFAST_MUTEX FastMutex + ); + +#elif defined(_X86_) + +NTHALAPI +VOID +FASTCALL +ExAcquireFastMutex ( + IN PFAST_MUTEX FastMutex + ); + +NTHALAPI +VOID +FASTCALL +ExReleaseFastMutex ( + IN PFAST_MUTEX FastMutex + ); + +NTHALAPI +BOOLEAN +FASTCALL +ExTryToAcquireFastMutex ( + IN PFAST_MUTEX FastMutex + ); + +#else + +#error "Target architecture not defined" + +#endif + +// + +NTKERNELAPI +VOID +FASTCALL +ExInterlockedAddLargeStatistic ( + IN PLARGE_INTEGER Addend, + IN ULONG Increment + ); + +// end_ntndis + +NTKERNELAPI +LARGE_INTEGER +ExInterlockedAddLargeInteger ( + IN PLARGE_INTEGER Addend, + IN LARGE_INTEGER Increment, + IN PKSPIN_LOCK Lock + ); + + +NTKERNELAPI +ULONG +FASTCALL +ExInterlockedAddUlong ( + IN PULONG Addend, + IN ULONG Increment, + IN PKSPIN_LOCK Lock + ); + + +#if defined(_AMD64_) || defined(_AXP64_) || defined(_IA64_) + +#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ + InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand)) + +#elif defined(_ALPHA_) + +#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ + ExpInterlockedCompareExchange64(Destination, Exchange, Comperand) + +#else + +#define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \ + ExfInterlockedCompareExchange64(Destination, Exchange, Comperand) + +#endif + +NTKERNELAPI +PLIST_ENTRY +FASTCALL +ExInterlockedInsertHeadList ( + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock + ); + +NTKERNELAPI +PLIST_ENTRY +FASTCALL +ExInterlockedInsertTailList ( + IN PLIST_ENTRY ListHead, + IN PLIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock + ); + +NTKERNELAPI +PLIST_ENTRY +FASTCALL +ExInterlockedRemoveHeadList ( + IN PLIST_ENTRY ListHead, + IN PKSPIN_LOCK Lock + ); + +NTKERNELAPI +PSINGLE_LIST_ENTRY +FASTCALL +ExInterlockedPopEntryList ( + IN PSINGLE_LIST_ENTRY ListHead, + IN PKSPIN_LOCK Lock + ); + +NTKERNELAPI +PSINGLE_LIST_ENTRY +FASTCALL +ExInterlockedPushEntryList ( + IN PSINGLE_LIST_ENTRY ListHead, + IN PSINGLE_LIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock + ); + +// +// Define interlocked sequenced listhead functions. +// +// A sequenced interlocked list is a singly linked list with a header that +// contains the current depth and a sequence number. Each time an entry is +// inserted or removed from the list the depth is updated and the sequence +// number is incremented. This enables AMD64, IA64, and Pentium and later +// machines to insert and remove from the list without the use of spinlocks. +// + +#if !defined(_WINBASE_) + +/*++ + +Routine Description: + + This function initializes a sequenced singly linked listhead. + +Arguments: + + SListHead - Supplies a pointer to a sequenced singly linked listhead. + +Return Value: + + None. + +--*/ + +#if defined(_WIN64) && (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_)) + +NTKERNELAPI +VOID +InitializeSListHead ( + IN PSLIST_HEADER SListHead + ); + +#else + +__inline +VOID +InitializeSListHead ( + IN PSLIST_HEADER SListHead + ) + +{ + +#ifdef _WIN64 + + // + // Slist headers must be 16 byte aligned. + // + + if ((ULONG_PTR) SListHead & 0x0f) { + + DbgPrint( "InitializeSListHead unaligned Slist header. Address = %p, Caller = %p\n", SListHead, _ReturnAddress()); + RtlRaiseStatus(STATUS_DATATYPE_MISALIGNMENT); + } + +#endif + + SListHead->Alignment = 0; + + // + // For IA-64 we save the region number of the elements of the list in a + // separate field. This imposes the requirement that all elements stored + // in the list are from the same region. + +#if defined(_IA64_) + + SListHead->Region = (ULONG_PTR)SListHead & VRN_MASK; + +#elif defined(_AMD64_) + + SListHead->Region = 0; + +#endif + + return; +} + +#endif + +#endif // !defined(_WINBASE_) + +#define ExInitializeSListHead InitializeSListHead + +PSLIST_ENTRY +FirstEntrySList ( + IN const SLIST_HEADER *SListHead + ); + +/*++ + +Routine Description: + + This function queries the current number of entries contained in a + sequenced single linked list. + +Arguments: + + SListHead - Supplies a pointer to the sequenced listhead which is + be queried. + +Return Value: + + The current number of entries in the sequenced singly linked list is + returned as the function value. + +--*/ + +#if defined(_WIN64) + +#if (defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_NTOSP_)) + +NTKERNELAPI +USHORT +ExQueryDepthSList ( + IN PSLIST_HEADER SListHead + ); + +#else + +__inline +USHORT +ExQueryDepthSList ( + IN PSLIST_HEADER SListHead + ) + +{ + + return (USHORT)(SListHead->Alignment & 0xffff); +} + +#endif + +#else + +#define ExQueryDepthSList(_listhead_) (_listhead_)->Depth + +#endif + +#if defined(_WIN64) + +#define ExInterlockedPopEntrySList(Head, Lock) \ + ExpInterlockedPopEntrySList(Head) + +#define ExInterlockedPushEntrySList(Head, Entry, Lock) \ + ExpInterlockedPushEntrySList(Head, Entry) + +#define ExInterlockedFlushSList(Head) \ + ExpInterlockedFlushSList(Head) + +#if !defined(_WINBASE_) + +#define InterlockedPopEntrySList(Head) \ + ExpInterlockedPopEntrySList(Head) + +#define InterlockedPushEntrySList(Head, Entry) \ + ExpInterlockedPushEntrySList(Head, Entry) + +#define InterlockedFlushSList(Head) \ + ExpInterlockedFlushSList(Head) + +#define QueryDepthSList(Head) \ + ExQueryDepthSList(Head) + +#endif // !defined(_WINBASE_) + +NTKERNELAPI +PSLIST_ENTRY +ExpInterlockedPopEntrySList ( + IN PSLIST_HEADER ListHead + ); + +NTKERNELAPI +PSLIST_ENTRY +ExpInterlockedPushEntrySList ( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry + ); + +NTKERNELAPI +PSLIST_ENTRY +ExpInterlockedFlushSList ( + IN PSLIST_HEADER ListHead + ); + +#else + +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + +NTKERNELAPI +PSLIST_ENTRY +FASTCALL +ExInterlockedPopEntrySList ( + IN PSLIST_HEADER ListHead, + IN PKSPIN_LOCK Lock + ); + +NTKERNELAPI +PSLIST_ENTRY +FASTCALL +ExInterlockedPushEntrySList ( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry, + IN PKSPIN_LOCK Lock + ); + +#else + +#define ExInterlockedPopEntrySList(ListHead, Lock) \ + InterlockedPopEntrySList(ListHead) + +#define ExInterlockedPushEntrySList(ListHead, ListEntry, Lock) \ + InterlockedPushEntrySList(ListHead, ListEntry) + +#endif + +NTKERNELAPI +PSLIST_ENTRY +FASTCALL +ExInterlockedFlushSList ( + IN PSLIST_HEADER ListHead + ); + +#if !defined(_WINBASE_) + +NTKERNELAPI +PSLIST_ENTRY +FASTCALL +InterlockedPopEntrySList ( + IN PSLIST_HEADER ListHead + ); + +NTKERNELAPI +PSLIST_ENTRY +FASTCALL +InterlockedPushEntrySList ( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY ListEntry + ); + +#define InterlockedFlushSList(Head) \ + ExInterlockedFlushSList(Head) + +#define QueryDepthSList(Head) \ + ExQueryDepthSList(Head) + +#endif // !defined(_WINBASE_) + +#endif // defined(_WIN64) + +// end_ntddk end_wdm end_ntosp + + +PSLIST_ENTRY +FASTCALL +InterlockedPushListSList ( + IN PSLIST_HEADER ListHead, + IN PSLIST_ENTRY List, + IN PSLIST_ENTRY ListEnd, + IN ULONG Count + ); + + +// +// Define interlocked lookaside list structure and allocation functions. +// + +VOID +ExAdjustLookasideDepth ( + VOID + ); + +// begin_ntddk begin_wdm begin_ntosp + +typedef +PVOID +(*PALLOCATE_FUNCTION) ( + IN POOL_TYPE PoolType, + IN SIZE_T NumberOfBytes, + IN ULONG Tag + ); + +typedef +VOID +(*PFREE_FUNCTION) ( + IN PVOID Buffer + ); + +#if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_)) + +typedef struct _GENERAL_LOOKASIDE { + +#else + +typedef struct DECLSPEC_CACHEALIGN _GENERAL_LOOKASIDE { + +#endif + + SLIST_HEADER ListHead; + USHORT Depth; + USHORT MaximumDepth; + ULONG TotalAllocates; + union { + ULONG AllocateMisses; + ULONG AllocateHits; + }; + + ULONG TotalFrees; + union { + ULONG FreeMisses; + ULONG FreeHits; + }; + + POOL_TYPE Type; + ULONG Tag; + ULONG Size; + PALLOCATE_FUNCTION Allocate; + PFREE_FUNCTION Free; + LIST_ENTRY ListEntry; + ULONG LastTotalAllocates; + union { + ULONG LastAllocateMisses; + ULONG LastAllocateHits; + }; + + ULONG Future[2]; +} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; + +#if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_)) + +typedef struct _NPAGED_LOOKASIDE_LIST { + +#else + +typedef struct DECLSPEC_CACHEALIGN _NPAGED_LOOKASIDE_LIST { + +#endif + + GENERAL_LOOKASIDE L; + +#if !defined(_AMD64_) && !defined(_IA64_) + + KSPIN_LOCK Lock__ObsoleteButDoNotDelete; + +#endif + +} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; + +NTKERNELAPI +VOID +ExInitializeNPagedLookasideList ( + IN PNPAGED_LOOKASIDE_LIST Lookaside, + IN PALLOCATE_FUNCTION Allocate, + IN PFREE_FUNCTION Free, + IN ULONG Flags, + IN SIZE_T Size, + IN ULONG Tag, + IN USHORT Depth + ); + +NTKERNELAPI +VOID +ExDeleteNPagedLookasideList ( + IN PNPAGED_LOOKASIDE_LIST Lookaside + ); + +__inline +PVOID +ExAllocateFromNPagedLookasideList( + IN PNPAGED_LOOKASIDE_LIST Lookaside + ) + +/*++ + +Routine Description: + + This function removes (pops) the first entry from the specified + nonpaged lookaside list. + +Arguments: + + Lookaside - Supplies a pointer to a nonpaged lookaside list structure. + +Return Value: + + If an entry is removed from the specified lookaside list, then the + address of the entry is returned as the function value. Otherwise, + NULL is returned. + +--*/ + +{ + + PVOID Entry; + + Lookaside->L.TotalAllocates += 1; + +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + + Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead, + &Lookaside->Lock__ObsoleteButDoNotDelete); + + +#else + + Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); + +#endif + + if (Entry == NULL) { + Lookaside->L.AllocateMisses += 1; + Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } + + return Entry; +} + +__inline +VOID +ExFreeToNPagedLookasideList( + IN PNPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry + ) + +/*++ + +Routine Description: + + This function inserts (pushes) the specified entry into the specified + nonpaged lookaside list. + +Arguments: + + Lookaside - Supplies a pointer to a nonpaged lookaside list structure. + + Entry - Supples a pointer to the entry that is inserted in the + lookaside list. + +Return Value: + + None. + +--*/ + +{ + + Lookaside->L.TotalFrees += 1; + if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.FreeMisses += 1; + (Lookaside->L.Free)(Entry); + + } else { + +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + + ExInterlockedPushEntrySList(&Lookaside->L.ListHead, + (PSLIST_ENTRY)Entry, + &Lookaside->Lock__ObsoleteButDoNotDelete); + +#else + + InterlockedPushEntrySList(&Lookaside->L.ListHead, + (PSLIST_ENTRY)Entry); + +#endif + + } + return; +} + +// end_ntndis + +#if !defined(_WIN64) && (defined(_NTDDK_) || defined(_NTIFS_) || defined(_NDIS_)) + +typedef struct _PAGED_LOOKASIDE_LIST { + +#else + +typedef struct DECLSPEC_CACHEALIGN _PAGED_LOOKASIDE_LIST { + +#endif + + GENERAL_LOOKASIDE L; + +#if !defined(_AMD64_) && !defined(_IA64_) + + FAST_MUTEX Lock__ObsoleteButDoNotDelete; + +#endif + +} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; + + +NTKERNELAPI +VOID +ExInitializePagedLookasideList ( + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PALLOCATE_FUNCTION Allocate, + IN PFREE_FUNCTION Free, + IN ULONG Flags, + IN SIZE_T Size, + IN ULONG Tag, + IN USHORT Depth + ); + +NTKERNELAPI +VOID +ExDeletePagedLookasideList ( + IN PPAGED_LOOKASIDE_LIST Lookaside + ); + +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + +NTKERNELAPI +PVOID +ExAllocateFromPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside + ); + +#else + +__inline +PVOID +ExAllocateFromPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside + ) + +/*++ + +Routine Description: + + This function removes (pops) the first entry from the specified + paged lookaside list. + +Arguments: + + Lookaside - Supplies a pointer to a paged lookaside list structure. + +Return Value: + + If an entry is removed from the specified lookaside list, then the + address of the entry is returned as the function value. Otherwise, + NULL is returned. + +--*/ + +{ + + PVOID Entry; + + Lookaside->L.TotalAllocates += 1; + Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead); + if (Entry == NULL) { + Lookaside->L.AllocateMisses += 1; + Entry = (Lookaside->L.Allocate)(Lookaside->L.Type, + Lookaside->L.Size, + Lookaside->L.Tag); + } + + return Entry; +} + +#endif + +#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_) + +NTKERNELAPI +VOID +ExFreeToPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry + ); + +#else + +__inline +VOID +ExFreeToPagedLookasideList( + IN PPAGED_LOOKASIDE_LIST Lookaside, + IN PVOID Entry + ) + +/*++ + +Routine Description: + + This function inserts (pushes) the specified entry into the specified + paged lookaside list. + +Arguments: + + Lookaside - Supplies a pointer to a nonpaged lookaside list structure. + + Entry - Supples a pointer to the entry that is inserted in the + lookaside list. + +Return Value: + + None. + +--*/ + +{ + + Lookaside->L.TotalFrees += 1; + if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) { + Lookaside->L.FreeMisses += 1; + (Lookaside->L.Free)(Entry); + + } else { + InterlockedPushEntrySList(&Lookaside->L.ListHead, + (PSLIST_ENTRY)Entry); + } + + return; +} + +#endif + + +NTKERNELAPI +VOID +NTAPI +ProbeForRead( + IN CONST VOID *Address, + IN SIZE_T Length, + IN ULONG Alignment + ); + +// +// Common probe for write functions. +// + +NTKERNELAPI +VOID +NTAPI +ProbeForWrite ( + IN PVOID Address, + IN SIZE_T Length, + IN ULONG Alignment + ); + +// +// Worker Thread +// + +typedef enum _WORK_QUEUE_TYPE { + CriticalWorkQueue, + DelayedWorkQueue, + HyperCriticalWorkQueue, + MaximumWorkQueue +} WORK_QUEUE_TYPE; + +typedef +VOID +(*PWORKER_THREAD_ROUTINE)( + IN PVOID Parameter + ); + +typedef struct _WORK_QUEUE_ITEM { + LIST_ENTRY List; + PWORKER_THREAD_ROUTINE WorkerRoutine; + PVOID Parameter; +} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInitializeWorkItem) // Use IoAllocateWorkItem +#endif +#define ExInitializeWorkItem(Item, Routine, Context) \ + (Item)->WorkerRoutine = (Routine); \ + (Item)->Parameter = (Context); \ + (Item)->List.Flink = NULL; + +DECLSPEC_DEPRECATED_DDK // Use IoQueueWorkItem +NTKERNELAPI +VOID +ExQueueWorkItem( + IN PWORK_QUEUE_ITEM WorkItem, + IN WORK_QUEUE_TYPE QueueType + ); + + +NTKERNELAPI +BOOLEAN +ExIsProcessorFeaturePresent( + ULONG ProcessorFeature + ); + +// +// Zone Allocation +// + +typedef struct _ZONE_SEGMENT_HEADER { + SINGLE_LIST_ENTRY SegmentList; + PVOID Reserved; +} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; + +typedef struct _ZONE_HEADER { + SINGLE_LIST_ENTRY FreeList; + SINGLE_LIST_ENTRY SegmentList; + ULONG BlockSize; + ULONG TotalSegmentSize; +} ZONE_HEADER, *PZONE_HEADER; + + +DECLSPEC_DEPRECATED_DDK +NTKERNELAPI +NTSTATUS +ExInitializeZone( + IN PZONE_HEADER Zone, + IN ULONG BlockSize, + IN PVOID InitialSegment, + IN ULONG InitialSegmentSize + ); + +DECLSPEC_DEPRECATED_DDK +NTKERNELAPI +NTSTATUS +ExExtendZone( + IN PZONE_HEADER Zone, + IN PVOID Segment, + IN ULONG SegmentSize + ); + +DECLSPEC_DEPRECATED_DDK +NTKERNELAPI +NTSTATUS +ExInterlockedExtendZone( + IN PZONE_HEADER Zone, + IN PVOID Segment, + IN ULONG SegmentSize, + IN PKSPIN_LOCK Lock + ); + +//++ +// +// PVOID +// ExAllocateFromZone( +// IN PZONE_HEADER Zone +// ) +// +// Routine Description: +// +// This routine removes an entry from the zone and returns a pointer to it. +// +// Arguments: +// +// Zone - Pointer to the zone header controlling the storage from which the +// entry is to be allocated. +// +// Return Value: +// +// The function value is a pointer to the storage allocated from the zone. +// +//-- +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExAllocateFromZone) +#endif +#define ExAllocateFromZone(Zone) \ + (PVOID)((Zone)->FreeList.Next); \ + if ( (Zone)->FreeList.Next ) (Zone)->FreeList.Next = (Zone)->FreeList.Next->Next + + +//++ +// +// PVOID +// ExFreeToZone( +// IN PZONE_HEADER Zone, +// IN PVOID Block +// ) +// +// Routine Description: +// +// This routine places the specified block of storage back onto the free +// list in the specified zone. +// +// Arguments: +// +// Zone - Pointer to the zone header controlling the storage to which the +// entry is to be inserted. +// +// Block - Pointer to the block of storage to be freed back to the zone. +// +// Return Value: +// +// Pointer to previous block of storage that was at the head of the free +// list. NULL implies the zone went from no available free blocks to +// at least one free block. +// +//-- + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExFreeToZone) +#endif +#define ExFreeToZone(Zone,Block) \ + ( ((PSINGLE_LIST_ENTRY)(Block))->Next = (Zone)->FreeList.Next, \ + (Zone)->FreeList.Next = ((PSINGLE_LIST_ENTRY)(Block)), \ + ((PSINGLE_LIST_ENTRY)(Block))->Next \ + ) + +//++ +// +// BOOLEAN +// ExIsFullZone( +// IN PZONE_HEADER Zone +// ) +// +// Routine Description: +// +// This routine determines if the specified zone is full or not. A zone +// is considered full if the free list is empty. +// +// Arguments: +// +// Zone - Pointer to the zone header to be tested. +// +// Return Value: +// +// TRUE if the zone is full and FALSE otherwise. +// +//-- + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExIsFullZone) +#endif +#define ExIsFullZone(Zone) \ + ( (Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY)NULL ) + +//++ +// +// PVOID +// ExInterlockedAllocateFromZone( +// IN PZONE_HEADER Zone, +// IN PKSPIN_LOCK Lock +// ) +// +// Routine Description: +// +// This routine removes an entry from the zone and returns a pointer to it. +// The removal is performed with the specified lock owned for the sequence +// to make it MP-safe. +// +// Arguments: +// +// Zone - Pointer to the zone header controlling the storage from which the +// entry is to be allocated. +// +// Lock - Pointer to the spin lock which should be obtained before removing +// the entry from the allocation list. The lock is released before +// returning to the caller. +// +// Return Value: +// +// The function value is a pointer to the storage allocated from the zone. +// +//-- + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInterlockedAllocateFromZone) +#endif +#define ExInterlockedAllocateFromZone(Zone,Lock) \ + (PVOID) ExInterlockedPopEntryList( &(Zone)->FreeList, Lock ) + +//++ +// +// PVOID +// ExInterlockedFreeToZone( +// IN PZONE_HEADER Zone, +// IN PVOID Block, +// IN PKSPIN_LOCK Lock +// ) +// +// Routine Description: +// +// This routine places the specified block of storage back onto the free +// list in the specified zone. The insertion is performed with the lock +// owned for the sequence to make it MP-safe. +// +// Arguments: +// +// Zone - Pointer to the zone header controlling the storage to which the +// entry is to be inserted. +// +// Block - Pointer to the block of storage to be freed back to the zone. +// +// Lock - Pointer to the spin lock which should be obtained before inserting +// the entry onto the free list. The lock is released before returning +// to the caller. +// +// Return Value: +// +// Pointer to previous block of storage that was at the head of the free +// list. NULL implies the zone went from no available free blocks to +// at least one free block. +// +//-- + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInterlockedFreeToZone) +#endif +#define ExInterlockedFreeToZone(Zone,Block,Lock) \ + ExInterlockedPushEntryList( &(Zone)->FreeList, ((PSINGLE_LIST_ENTRY) (Block)), Lock ) + + +//++ +// +// BOOLEAN +// ExIsObjectInFirstZoneSegment( +// IN PZONE_HEADER Zone, +// IN PVOID Object +// ) +// +// Routine Description: +// +// This routine determines if the specified pointer lives in the zone. +// +// Arguments: +// +// Zone - Pointer to the zone header controlling the storage to which the +// object may belong. +// +// Object - Pointer to the object in question. +// +// Return Value: +// +// TRUE if the Object came from the first segment of zone. +// +//-- + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExIsObjectInFirstZoneSegment) +#endif +#define ExIsObjectInFirstZoneSegment(Zone,Object) ((BOOLEAN) \ + (((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \ + ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \ + (Zone)->TotalSegmentSize)) \ +) + +// +// Define executive resource data structures. +// + +typedef ULONG_PTR ERESOURCE_THREAD; +typedef ERESOURCE_THREAD *PERESOURCE_THREAD; + +typedef struct _OWNER_ENTRY { + ERESOURCE_THREAD OwnerThread; + union { + LONG OwnerCount; + ULONG TableSize; + }; + +} OWNER_ENTRY, *POWNER_ENTRY; + +typedef struct _ERESOURCE { + LIST_ENTRY SystemResourcesList; + POWNER_ENTRY OwnerTable; + SHORT ActiveCount; + USHORT Flag; + PKSEMAPHORE SharedWaiters; + PKEVENT ExclusiveWaiters; + OWNER_ENTRY OwnerThreads[2]; + ULONG ContentionCount; + USHORT NumberOfSharedWaiters; + USHORT NumberOfExclusiveWaiters; + union { + PVOID Address; + ULONG_PTR CreatorBackTraceIndex; + }; + + KSPIN_LOCK SpinLock; +} ERESOURCE, *PERESOURCE; +// +// Values for ERESOURCE.Flag +// + +#define ResourceNeverExclusive 0x10 +#define ResourceReleaseByOtherThread 0x20 +#define ResourceOwnedExclusive 0x80 + +#define RESOURCE_HASH_TABLE_SIZE 64 + +typedef struct _RESOURCE_HASH_ENTRY { + LIST_ENTRY ListEntry; + PVOID Address; + ULONG ContentionCount; + ULONG Number; +} RESOURCE_HASH_ENTRY, *PRESOURCE_HASH_ENTRY; + +typedef struct _RESOURCE_PERFORMANCE_DATA { + ULONG ActiveResourceCount; + ULONG TotalResourceCount; + ULONG ExclusiveAcquire; + ULONG SharedFirstLevel; + ULONG SharedSecondLevel; + ULONG StarveFirstLevel; + ULONG StarveSecondLevel; + ULONG WaitForExclusive; + ULONG OwnerTableExpands; + ULONG MaximumTableExpand; + LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE]; +} RESOURCE_PERFORMANCE_DATA, *PRESOURCE_PERFORMANCE_DATA; + +// +// Define executive resource function prototypes. +// +NTKERNELAPI +NTSTATUS +ExInitializeResourceLite( + IN PERESOURCE Resource + ); + +NTKERNELAPI +NTSTATUS +ExReinitializeResourceLite( + IN PERESOURCE Resource + ); + +NTKERNELAPI +BOOLEAN +ExAcquireResourceSharedLite( + IN PERESOURCE Resource, + IN BOOLEAN Wait + ); + +NTKERNELAPI +BOOLEAN +ExAcquireResourceExclusiveLite( + IN PERESOURCE Resource, + IN BOOLEAN Wait + ); + +NTKERNELAPI +BOOLEAN +ExAcquireSharedStarveExclusive( + IN PERESOURCE Resource, + IN BOOLEAN Wait + ); + +NTKERNELAPI +BOOLEAN +ExAcquireSharedWaitForExclusive( + IN PERESOURCE Resource, + IN BOOLEAN Wait + ); + +NTKERNELAPI +BOOLEAN +ExTryToAcquireResourceExclusiveLite( + IN PERESOURCE Resource + ); + +// +// VOID +// ExReleaseResource( +// IN PERESOURCE Resource +// ); +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExReleaseResource) // Use ExReleaseResourceLite +#endif +#define ExReleaseResource(R) (ExReleaseResourceLite(R)) + +NTKERNELAPI +VOID +FASTCALL +ExReleaseResourceLite( + IN PERESOURCE Resource + ); + +NTKERNELAPI +VOID +ExReleaseResourceForThreadLite( + IN PERESOURCE Resource, + IN ERESOURCE_THREAD ResourceThreadId + ); + +NTKERNELAPI +VOID +ExSetResourceOwnerPointer( + IN PERESOURCE Resource, + IN PVOID OwnerPointer + ); + +NTKERNELAPI +VOID +ExConvertExclusiveToSharedLite( + IN PERESOURCE Resource + ); + +NTKERNELAPI +NTSTATUS +ExDeleteResourceLite ( + IN PERESOURCE Resource + ); + +NTKERNELAPI +ULONG +ExGetExclusiveWaiterCount ( + IN PERESOURCE Resource + ); + +NTKERNELAPI +ULONG +ExGetSharedWaiterCount ( + IN PERESOURCE Resource + ); + +// end_ntddk end_wdm end_ntosp + +NTKERNELAPI +VOID +ExDisableResourceBoostLite ( + IN PERESOURCE Resource + ); + +// begin_ntddk begin_wdm begin_ntosp +// +// ERESOURCE_THREAD +// ExGetCurrentResourceThread( +// ); +// + +#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread()) + +NTKERNELAPI +BOOLEAN +ExIsResourceAcquiredExclusiveLite ( + IN PERESOURCE Resource + ); + +NTKERNELAPI +ULONG +ExIsResourceAcquiredSharedLite ( + IN PERESOURCE Resource + ); + +// +// An acquired resource is always owned shared, as shared ownership is a subset +// of exclusive ownership. +// +#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite + +// end_wdm +// +// ntddk.h stole the entrypoints we wanted so fix them up here. +// + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(ExInitializeResource) // use ExInitializeResourceLite +#pragma deprecated(ExAcquireResourceShared) // use ExAcquireResourceSharedLite +#pragma deprecated(ExAcquireResourceExclusive) // use ExAcquireResourceExclusiveLite +#pragma deprecated(ExReleaseResourceForThread) // use ExReleaseResourceForThreadLite +#pragma deprecated(ExConvertExclusiveToShared) // use ExConvertExclusiveToSharedLite +#pragma deprecated(ExDeleteResource) // use ExDeleteResourceLite +#pragma deprecated(ExIsResourceAcquiredExclusive) // use ExIsResourceAcquiredExclusiveLite +#pragma deprecated(ExIsResourceAcquiredShared) // use ExIsResourceAcquiredSharedLite +#pragma deprecated(ExIsResourceAcquired) // use ExIsResourceAcquiredSharedLite +#endif +#define ExInitializeResource ExInitializeResourceLite +#define ExAcquireResourceShared ExAcquireResourceSharedLite +#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite +#define ExReleaseResourceForThread ExReleaseResourceForThreadLite +#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite +#define ExDeleteResource ExDeleteResourceLite +#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite +#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite +#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite + +// end_ntddk end_ntosp +#define ExDisableResourceBoost ExDisableResourceBoostLite +// +// Get previous mode +// + +NTKERNELAPI +KPROCESSOR_MODE +ExGetPreviousMode( + VOID + ); +// +// Raise status from kernel mode. +// + +NTKERNELAPI +VOID +NTAPI +ExRaiseStatus ( + IN NTSTATUS Status + ); + +// end_wdm + +NTKERNELAPI +VOID +ExRaiseDatatypeMisalignment ( + VOID + ); + +NTKERNELAPI +VOID +ExRaiseAccessViolation ( + VOID + ); + +// +// Set timer resolution. +// + +NTKERNELAPI +ULONG +ExSetTimerResolution ( + IN ULONG DesiredTime, + IN BOOLEAN SetResolution + ); + +// +// Subtract time zone bias from system time to get local time. +// + +NTKERNELAPI +VOID +ExSystemTimeToLocalTime ( + IN PLARGE_INTEGER SystemTime, + OUT PLARGE_INTEGER LocalTime + ); + +// +// Add time zone bias to local time to get system time. +// + +NTKERNELAPI +VOID +ExLocalTimeToSystemTime ( + IN PLARGE_INTEGER LocalTime, + OUT PLARGE_INTEGER SystemTime + ); + + +// +// Define the type for Callback function. +// + +typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; + +typedef VOID (*PCALLBACK_FUNCTION ) ( + IN PVOID CallbackContext, + IN PVOID Argument1, + IN PVOID Argument2 + ); + + +NTKERNELAPI +NTSTATUS +ExCreateCallback ( + OUT PCALLBACK_OBJECT *CallbackObject, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN BOOLEAN Create, + IN BOOLEAN AllowMultipleCallbacks + ); + +NTKERNELAPI +PVOID +ExRegisterCallback ( + IN PCALLBACK_OBJECT CallbackObject, + IN PCALLBACK_FUNCTION CallbackFunction, + IN PVOID CallbackContext + ); + +NTKERNELAPI +VOID +ExUnregisterCallback ( + IN PVOID CallbackRegistration + ); + +NTKERNELAPI +VOID +ExNotifyCallback ( + IN PVOID CallbackObject, + IN PVOID Argument1, + IN PVOID Argument2 + ); + + + +// +// UUID Generation +// + +typedef GUID UUID; + +NTKERNELAPI +NTSTATUS +ExUuidCreate( + OUT UUID *Uuid + ); + +// +// suite support +// + +NTKERNELAPI +BOOLEAN +ExVerifySuite( + SUITE_TYPE SuiteType + ); + +// +// Security operation codes +// + +typedef enum _SECURITY_OPERATION_CODE { + SetSecurityDescriptor, + QuerySecurityDescriptor, + DeleteSecurityDescriptor, + AssignSecurityDescriptor + } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE; + +// +// Token Flags +// +// Flags that may be defined in the TokenFlags field of the token object, +// or in an ACCESS_STATE structure +// + +#define TOKEN_HAS_TRAVERSE_PRIVILEGE 0x01 +#define TOKEN_HAS_BACKUP_PRIVILEGE 0x02 +#define TOKEN_HAS_RESTORE_PRIVILEGE 0x04 +#define TOKEN_HAS_ADMIN_GROUP 0x08 +#define TOKEN_IS_RESTRICTED 0x10 +#define TOKEN_SESSION_NOT_REFERENCED 0x20 +#define TOKEN_SANDBOX_INERT 0x40 + +// +// Data structure used to capture subject security context +// for access validations and auditing. +// +// THE FIELDS OF THIS DATA STRUCTURE SHOULD BE CONSIDERED OPAQUE +// BY ALL EXCEPT THE SECURITY ROUTINES. +// + +typedef struct _SECURITY_SUBJECT_CONTEXT { + PACCESS_TOKEN ClientToken; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + PACCESS_TOKEN PrimaryToken; + PVOID ProcessAuditId; + } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; + +/////////////////////////////////////////////////////////////////////////////// +// // +// ACCESS_STATE and related structures // +// // +/////////////////////////////////////////////////////////////////////////////// + +// +// Initial Privilege Set - Room for three privileges, which should +// be enough for most applications. This structure exists so that +// it can be imbedded in an ACCESS_STATE structure. Use PRIVILEGE_SET +// for all other references to Privilege sets. +// + +#define INITIAL_PRIVILEGE_COUNT 3 + +typedef struct _INITIAL_PRIVILEGE_SET { + ULONG PrivilegeCount; + ULONG Control; + LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; + } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; + + + +// +// Combine the information that describes the state +// of an access-in-progress into a single structure +// + + +typedef struct _ACCESS_STATE { + LUID OperationID; + BOOLEAN SecurityEvaluated; + BOOLEAN GenerateAudit; + BOOLEAN GenerateOnClose; + BOOLEAN PrivilegesAllocated; + ULONG Flags; + ACCESS_MASK RemainingDesiredAccess; + ACCESS_MASK PreviouslyGrantedAccess; + ACCESS_MASK OriginalDesiredAccess; + SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; + PSECURITY_DESCRIPTOR SecurityDescriptor; + PVOID AuxData; + union { + INITIAL_PRIVILEGE_SET InitialPrivilegeSet; + PRIVILEGE_SET PrivilegeSet; + } Privileges; + + BOOLEAN AuditPrivileges; + UNICODE_STRING ObjectName; + UNICODE_STRING ObjectTypeName; + + } ACCESS_STATE, *PACCESS_STATE; + + +typedef struct _SE_EXPORTS { + + // + // Privilege values + // + + LUID SeCreateTokenPrivilege; + LUID SeAssignPrimaryTokenPrivilege; + LUID SeLockMemoryPrivilege; + LUID SeIncreaseQuotaPrivilege; + LUID SeUnsolicitedInputPrivilege; + LUID SeTcbPrivilege; + LUID SeSecurityPrivilege; + LUID SeTakeOwnershipPrivilege; + LUID SeLoadDriverPrivilege; + LUID SeCreatePagefilePrivilege; + LUID SeIncreaseBasePriorityPrivilege; + LUID SeSystemProfilePrivilege; + LUID SeSystemtimePrivilege; + LUID SeProfileSingleProcessPrivilege; + LUID SeCreatePermanentPrivilege; + LUID SeBackupPrivilege; + LUID SeRestorePrivilege; + LUID SeShutdownPrivilege; + LUID SeDebugPrivilege; + LUID SeAuditPrivilege; + LUID SeSystemEnvironmentPrivilege; + LUID SeChangeNotifyPrivilege; + LUID SeRemoteShutdownPrivilege; + + + // + // Universally defined Sids + // + + + PSID SeNullSid; + PSID SeWorldSid; + PSID SeLocalSid; + PSID SeCreatorOwnerSid; + PSID SeCreatorGroupSid; + + + // + // Nt defined Sids + // + + + PSID SeNtAuthoritySid; + PSID SeDialupSid; + PSID SeNetworkSid; + PSID SeBatchSid; + PSID SeInteractiveSid; + PSID SeLocalSystemSid; + PSID SeAliasAdminsSid; + PSID SeAliasUsersSid; + PSID SeAliasGuestsSid; + PSID SeAliasPowerUsersSid; + PSID SeAliasAccountOpsSid; + PSID SeAliasSystemOpsSid; + PSID SeAliasPrintOpsSid; + PSID SeAliasBackupOpsSid; + + // + // New Sids defined for NT5 + // + + PSID SeAuthenticatedUsersSid; + + PSID SeRestrictedSid; + PSID SeAnonymousLogonSid; + + // + // New Privileges defined for NT5 + // + + LUID SeUndockPrivilege; + LUID SeSyncAgentPrivilege; + LUID SeEnableDelegationPrivilege; + + // + // New Sids defined for post-Windows 2000 + + PSID SeLocalServiceSid; + PSID SeNetworkServiceSid; + + // + // New Privileges defined for post-Windows 2000 + // + + LUID SeManageVolumePrivilege; + +} SE_EXPORTS, *PSE_EXPORTS; + +/////////////////////////////////////////////////////////////////////////////// +// // +// Logon session notification callback routines // +// // +/////////////////////////////////////////////////////////////////////////////// + +// +// These callback routines are used to notify file systems that have +// registered of logon sessions being terminated, so they can cleanup state +// associated with this logon session +// + +typedef NTSTATUS +(*PSE_LOGON_SESSION_TERMINATED_ROUTINE)( + IN PLUID LogonId); + +//++ +// +// ULONG +// SeLengthSid( +// IN PSID Sid +// ); +// +// Routine Description: +// +// This routine computes the length of a SID. +// +// Arguments: +// +// Sid - Points to the SID whose length is to be returned. +// +// Return Value: +// +// The length, in bytes of the SID. +// +//-- + +#define SeLengthSid( Sid ) \ + (8 + (4 * ((SID *)Sid)->SubAuthorityCount)) + +// +//VOID +//SeDeleteClientSecurity( +// IN PSECURITY_CLIENT_CONTEXT ClientContext +// ) +// +///*++ +// +//Routine Description: +// +// This service deletes a client security context block, +// performing whatever cleanup might be necessary to do so. In +// particular, reference to any client token is removed. +// +//Arguments: +// +// ClientContext - Points to the client security context block to be +// deleted. +// +// +//Return Value: +// +// +// +//--*/ +//-- + +// begin_ntosp +#define SeDeleteClientSecurity(C) { \ + if (SeTokenType((C)->ClientToken) == TokenPrimary) { \ + PsDereferencePrimaryToken( (C)->ClientToken ); \ + } else { \ + PsDereferenceImpersonationToken( (C)->ClientToken ); \ + } \ + } + + +//++ +// +// PACCESS_TOKEN +// SeQuerySubjectContextToken( +// IN PSECURITY_SUBJECT_CONTEXT SubjectContext +// ); +// +// Routine Description: +// +// This routine returns the effective token from the subject context, +// either the client token, if present, or the process token. +// +// Arguments: +// +// SubjectContext - Context to query +// +// Return Value: +// +// This routine returns the PACCESS_TOKEN for the effective token. +// The pointer may be passed to SeQueryInformationToken. This routine +// does not affect the lock status of the token, i.e. the token is not +// locked. If the SubjectContext has been locked, the token remains locked, +// if not, the token remains unlocked. +// +//-- + +#define SeQuerySubjectContextToken( SubjectContext ) \ + ( ARGUMENT_PRESENT( ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken) ? \ + ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->ClientToken : \ + ((PSECURITY_SUBJECT_CONTEXT) SubjectContext)->PrimaryToken ) + + +NTKERNELAPI +VOID +SeCaptureSubjectContext ( + OUT PSECURITY_SUBJECT_CONTEXT SubjectContext + ); + +NTKERNELAPI +VOID +SeLockSubjectContext( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext + ); + +NTKERNELAPI +VOID +SeUnlockSubjectContext( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext + ); + +NTKERNELAPI +VOID +SeReleaseSubjectContext ( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext + ); + + +NTKERNELAPI +NTSTATUS +SeAssignSecurity ( + IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, + IN PSECURITY_DESCRIPTOR ExplicitDescriptor, + OUT PSECURITY_DESCRIPTOR *NewDescriptor, + IN BOOLEAN IsDirectoryObject, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN PGENERIC_MAPPING GenericMapping, + IN POOL_TYPE PoolType + ); + +NTKERNELAPI +NTSTATUS +SeAssignSecurityEx ( + IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, + IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, + OUT PSECURITY_DESCRIPTOR *NewDescriptor, + IN GUID *ObjectType OPTIONAL, + IN BOOLEAN IsDirectoryObject, + IN ULONG AutoInheritFlags, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN PGENERIC_MAPPING GenericMapping, + IN POOL_TYPE PoolType + ); + +NTKERNELAPI +NTSTATUS +SeDeassignSecurity ( + IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor + ); + +NTKERNELAPI +BOOLEAN +SeAccessCheck ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, + IN BOOLEAN SubjectContextLocked, + IN ACCESS_MASK DesiredAccess, + IN ACCESS_MASK PreviouslyGrantedAccess, + OUT PPRIVILEGE_SET *Privileges OPTIONAL, + IN PGENERIC_MAPPING GenericMapping, + IN KPROCESSOR_MODE AccessMode, + OUT PACCESS_MASK GrantedAccess, + OUT PNTSTATUS AccessStatus + ); + + +#ifdef SE_NTFS_WORLD_CACHE + +VOID +SeGetWorldRights ( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PGENERIC_MAPPING GenericMapping, + OUT PACCESS_MASK GrantedAccess + ); + +#endif + + +NTKERNELAPI +BOOLEAN +SePrivilegeCheck( + IN OUT PPRIVILEGE_SET RequiredPrivileges, + IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, + IN KPROCESSOR_MODE AccessMode + ); + +NTKERNELAPI +VOID +SeFreePrivileges( + IN PPRIVILEGE_SET Privileges + ); + + +NTKERNELAPI +VOID +SeOpenObjectAuditAlarm ( + IN PUNICODE_STRING ObjectTypeName, + IN PVOID Object OPTIONAL, + IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PACCESS_STATE AccessState, + IN BOOLEAN ObjectCreated, + IN BOOLEAN AccessGranted, + IN KPROCESSOR_MODE AccessMode, + OUT PBOOLEAN GenerateOnClose + ); + +NTKERNELAPI +VOID +SeOpenObjectForDeleteAuditAlarm ( + IN PUNICODE_STRING ObjectTypeName, + IN PVOID Object OPTIONAL, + IN PUNICODE_STRING AbsoluteObjectName OPTIONAL, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PACCESS_STATE AccessState, + IN BOOLEAN ObjectCreated, + IN BOOLEAN AccessGranted, + IN KPROCESSOR_MODE AccessMode, + OUT PBOOLEAN GenerateOnClose + ); + +VOID +SeDeleteObjectAuditAlarm( + IN PVOID Object, + IN HANDLE Handle + ); + + + +NTKERNELAPI +BOOLEAN +SeValidSecurityDescriptor( + IN ULONG Length, + IN PSECURITY_DESCRIPTOR SecurityDescriptor + ); + +NTKERNELAPI +TOKEN_TYPE +SeTokenType( + IN PACCESS_TOKEN Token + ); +NTKERNELAPI +BOOLEAN +SeTokenIsAdmin( + IN PACCESS_TOKEN Token + ); +NTKERNELAPI +BOOLEAN +SeTokenIsRestricted( + IN PACCESS_TOKEN Token + ); +NTSTATUS +SeFilterToken ( + IN PACCESS_TOKEN ExistingToken, + IN ULONG Flags, + IN PTOKEN_GROUPS SidsToDisable OPTIONAL, + IN PTOKEN_PRIVILEGES PrivilegesToDelete OPTIONAL, + IN PTOKEN_GROUPS RestrictedSids OPTIONAL, + OUT PACCESS_TOKEN * FilteredToken + ); + +// begin_ntosp +NTKERNELAPI +NTSTATUS +SeQueryAuthenticationIdToken( + IN PACCESS_TOKEN Token, + OUT PLUID AuthenticationId + ); + +// end_ntosp +NTKERNELAPI +NTSTATUS +SeQuerySessionIdToken( + IN PACCESS_TOKEN, + IN PULONG pSessionId + ); + +NTKERNELAPI +NTSTATUS +SeSetSessionIdToken( + IN PACCESS_TOKEN, + IN ULONG SessionId + ); + +// begin_ntosp +NTKERNELAPI +NTSTATUS +SeCreateClientSecurity ( + IN PETHREAD ClientThread, + IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos, + IN BOOLEAN RemoteSession, + OUT PSECURITY_CLIENT_CONTEXT ClientContext + ); +// end_ntosp + +NTKERNELAPI +VOID +SeImpersonateClient( + IN PSECURITY_CLIENT_CONTEXT ClientContext, + IN PETHREAD ServerThread OPTIONAL + ); + +// begin_ntosp +NTKERNELAPI +NTSTATUS +SeImpersonateClientEx( + IN PSECURITY_CLIENT_CONTEXT ClientContext, + IN PETHREAD ServerThread OPTIONAL + ); +// end_ntosp + +NTKERNELAPI +NTSTATUS +SeCreateClientSecurityFromSubjectContext ( + IN PSECURITY_SUBJECT_CONTEXT SubjectContext, + IN PSECURITY_QUALITY_OF_SERVICE ClientSecurityQos, + IN BOOLEAN ServerIsRemote, + OUT PSECURITY_CLIENT_CONTEXT ClientContext + ); + + +NTKERNELAPI +NTSTATUS +SeQuerySecurityDescriptorInfo ( + IN PSECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN OUT PULONG Length, + IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor + ); + +NTKERNELAPI +NTSTATUS +SeSetSecurityDescriptorInfo ( + IN PVOID Object OPTIONAL, + IN PSECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + IN POOL_TYPE PoolType, + IN PGENERIC_MAPPING GenericMapping + ); + +NTKERNELAPI +NTSTATUS +SeSetSecurityDescriptorInfoEx ( + IN PVOID Object OPTIONAL, + IN PSECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR ModificationDescriptor, + IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor, + IN ULONG AutoInheritFlags, + IN POOL_TYPE PoolType, + IN PGENERIC_MAPPING GenericMapping + ); + +NTKERNELAPI +NTSTATUS +SeAppendPrivileges( + PACCESS_STATE AccessState, + PPRIVILEGE_SET Privileges + ); + +NTKERNELAPI +BOOLEAN +SeSinglePrivilegeCheck( + LUID PrivilegeValue, + KPROCESSOR_MODE PreviousMode + ); + +NTKERNELAPI +BOOLEAN +SeAuditingFileEvents( + IN BOOLEAN AccessGranted, + IN PSECURITY_DESCRIPTOR SecurityDescriptor + ); + +BOOLEAN +SeAuditingHardLinkEvents( + IN BOOLEAN AccessGranted, + IN PSECURITY_DESCRIPTOR SecurityDescriptor + ); + +NTKERNELAPI +BOOLEAN +SeAuditingFileOrGlobalEvents( + IN BOOLEAN AccessGranted, + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext + ); + +VOID +SeAuditHardLinkCreation( + IN PUNICODE_STRING FileName, + IN PUNICODE_STRING LinkName, + IN BOOLEAN bSuccess + ); + +VOID +SeSetAccessStateGenericMapping ( + PACCESS_STATE AccessState, + PGENERIC_MAPPING GenericMapping + ); + + +NTKERNELAPI +NTSTATUS +SeRegisterLogonSessionTerminatedRoutine( + IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine + ); + +NTKERNELAPI +NTSTATUS +SeUnregisterLogonSessionTerminatedRoutine( + IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine + ); + +NTKERNELAPI +NTSTATUS +SeMarkLogonSessionForTerminationNotification( + IN PLUID LogonId + ); + +// begin_ntosp + +NTKERNELAPI +NTSTATUS +SeQueryInformationToken ( + IN PACCESS_TOKEN Token, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID *TokenInformation + ); + +// +// Grants access to SeExports structure +// + +extern NTKERNELAPI PSE_EXPORTS SeExports; + +// +// System Thread and Process Creation and Termination +// + +NTKERNELAPI +NTSTATUS +PsCreateSystemThread( + OUT PHANDLE ThreadHandle, + IN ULONG DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN HANDLE ProcessHandle OPTIONAL, + OUT PCLIENT_ID ClientId OPTIONAL, + IN PKSTART_ROUTINE StartRoutine, + IN PVOID StartContext + ); + +NTKERNELAPI +NTSTATUS +PsTerminateSystemThread( + IN NTSTATUS ExitStatus + ); + + +typedef +VOID +(*PCREATE_PROCESS_NOTIFY_ROUTINE)( + IN HANDLE ParentId, + IN HANDLE ProcessId, + IN BOOLEAN Create + ); + +NTSTATUS +PsSetCreateProcessNotifyRoutine( + IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, + IN BOOLEAN Remove + ); + +typedef +VOID +(*PCREATE_THREAD_NOTIFY_ROUTINE)( + IN HANDLE ProcessId, + IN HANDLE ThreadId, + IN BOOLEAN Create + ); + +NTSTATUS +PsSetCreateThreadNotifyRoutine( + IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine + ); + +NTSTATUS +PsRemoveCreateThreadNotifyRoutine ( + IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine + ); + +// +// Structures for Load Image Notify +// + +typedef struct _IMAGE_INFO { + union { + ULONG Properties; + struct { + ULONG ImageAddressingMode : 8; // code addressing mode + ULONG SystemModeImage : 1; // system mode image + ULONG ImageMappedToAllPids : 1; // image mapped into all processes + ULONG Reserved : 22; + }; + }; + PVOID ImageBase; + ULONG ImageSelector; + SIZE_T ImageSize; + ULONG ImageSectionNumber; +} IMAGE_INFO, *PIMAGE_INFO; + +#define IMAGE_ADDRESSING_MODE_32BIT 3 + +typedef +VOID +(*PLOAD_IMAGE_NOTIFY_ROUTINE)( + IN PUNICODE_STRING FullImageName, + IN HANDLE ProcessId, // pid into which image is being mapped + IN PIMAGE_INFO ImageInfo + ); + +NTSTATUS +PsSetLoadImageNotifyRoutine( + IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine + ); + +NTSTATUS +PsRemoveLoadImageNotifyRoutine( + IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine + ); + +// end_ntddk + +// +// Security Support +// + +NTSTATUS +PsAssignImpersonationToken( + IN PETHREAD Thread, + IN HANDLE Token + ); + +// begin_ntosp + +NTKERNELAPI +PACCESS_TOKEN +PsReferencePrimaryToken( + IN PEPROCESS Process + ); + +VOID +PsDereferencePrimaryToken( + IN PACCESS_TOKEN PrimaryToken + ); + +VOID +PsDereferenceImpersonationToken( + IN PACCESS_TOKEN ImpersonationToken + ); + + +NTKERNELAPI +PACCESS_TOKEN +PsReferenceImpersonationToken( + IN PETHREAD Thread, + OUT PBOOLEAN CopyOnOpen, + OUT PBOOLEAN EffectiveOnly, + OUT PSECURITY_IMPERSONATION_LEVEL ImpersonationLevel + ); + + + + +LARGE_INTEGER +PsGetProcessExitTime( + VOID + ); + +BOOLEAN +PsIsThreadTerminating( + IN PETHREAD Thread + ); + +// begin_ntosp + +NTSTATUS +PsImpersonateClient( + IN PETHREAD Thread, + IN PACCESS_TOKEN Token, + IN BOOLEAN CopyOnOpen, + IN BOOLEAN EffectiveOnly, + IN SECURITY_IMPERSONATION_LEVEL ImpersonationLevel + ); + +// end_ntosp + +BOOLEAN +PsDisableImpersonation( + IN PETHREAD Thread, + IN PSE_IMPERSONATION_STATE ImpersonationState + ); + +VOID +PsRestoreImpersonation( + IN PETHREAD Thread, + IN PSE_IMPERSONATION_STATE ImpersonationState + ); + +// +// Quota Operations +// + +VOID +PsChargePoolQuota( + IN PEPROCESS Process, + IN POOL_TYPE PoolType, + IN ULONG_PTR Amount + ); + +NTSTATUS +PsChargeProcessPoolQuota( + IN PEPROCESS Process, + IN POOL_TYPE PoolType, + IN ULONG_PTR Amount + ); + +VOID +PsReturnPoolQuota( + IN PEPROCESS Process, + IN POOL_TYPE PoolType, + IN ULONG_PTR Amount + ); + + + +HANDLE +PsGetCurrentProcessId( VOID ); + +HANDLE +PsGetCurrentThreadId( VOID ); + + +// end_ntosp + +BOOLEAN +PsGetVersion( + PULONG MajorVersion OPTIONAL, + PULONG MinorVersion OPTIONAL, + PULONG BuildNumber OPTIONAL, + PUNICODE_STRING CSDVersion OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +PsIsSystemThread( + PETHREAD Thread + ); +// +// Define I/O system data structure type codes. Each major data structure in +// the I/O system has a type code The type field in each structure is at the +// same offset. The following values can be used to determine which type of +// data structure a pointer refers to. +// + +#define IO_TYPE_ADAPTER 0x00000001 +#define IO_TYPE_CONTROLLER 0x00000002 +#define IO_TYPE_DEVICE 0x00000003 +#define IO_TYPE_DRIVER 0x00000004 +#define IO_TYPE_FILE 0x00000005 +#define IO_TYPE_IRP 0x00000006 +#define IO_TYPE_MASTER_ADAPTER 0x00000007 +#define IO_TYPE_OPEN_PACKET 0x00000008 +#define IO_TYPE_TIMER 0x00000009 +#define IO_TYPE_VPB 0x0000000a +#define IO_TYPE_ERROR_LOG 0x0000000b +#define IO_TYPE_ERROR_MESSAGE 0x0000000c +#define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0000000d + + +// +// Define the major function codes for IRPs. +// + + +#define IRP_MJ_CREATE 0x00 +#define IRP_MJ_CREATE_NAMED_PIPE 0x01 +#define IRP_MJ_CLOSE 0x02 +#define IRP_MJ_READ 0x03 +#define IRP_MJ_WRITE 0x04 +#define IRP_MJ_QUERY_INFORMATION 0x05 +#define IRP_MJ_SET_INFORMATION 0x06 +#define IRP_MJ_QUERY_EA 0x07 +#define IRP_MJ_SET_EA 0x08 +#define IRP_MJ_FLUSH_BUFFERS 0x09 +#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a +#define IRP_MJ_SET_VOLUME_INFORMATION 0x0b +#define IRP_MJ_DIRECTORY_CONTROL 0x0c +#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d +#define IRP_MJ_DEVICE_CONTROL 0x0e +#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f +#define IRP_MJ_SHUTDOWN 0x10 +#define IRP_MJ_LOCK_CONTROL 0x11 +#define IRP_MJ_CLEANUP 0x12 +#define IRP_MJ_CREATE_MAILSLOT 0x13 +#define IRP_MJ_QUERY_SECURITY 0x14 +#define IRP_MJ_SET_SECURITY 0x15 +#define IRP_MJ_POWER 0x16 +#define IRP_MJ_SYSTEM_CONTROL 0x17 +#define IRP_MJ_DEVICE_CHANGE 0x18 +#define IRP_MJ_QUERY_QUOTA 0x19 +#define IRP_MJ_SET_QUOTA 0x1a +#define IRP_MJ_PNP 0x1b +#define IRP_MJ_PNP_POWER IRP_MJ_PNP // Obsolete.... +#define IRP_MJ_MAXIMUM_FUNCTION 0x1b + +// +// Make the Scsi major code the same as internal device control. +// + +#define IRP_MJ_SCSI IRP_MJ_INTERNAL_DEVICE_CONTROL + +// +// Define the minor function codes for IRPs. The lower 128 codes, from 0x00 to +// 0x7f are reserved to Microsoft. The upper 128 codes, from 0x80 to 0xff, are +// reserved to customers of Microsoft. +// + +// end_wdm end_ntndis +// +// Directory control minor function codes +// + +#define IRP_MN_QUERY_DIRECTORY 0x01 +#define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 + +// +// File system control minor function codes. Note that "user request" is +// assumed to be zero by both the I/O system and file systems. Do not change +// this value. +// + +#define IRP_MN_USER_FS_REQUEST 0x00 +#define IRP_MN_MOUNT_VOLUME 0x01 +#define IRP_MN_VERIFY_VOLUME 0x02 +#define IRP_MN_LOAD_FILE_SYSTEM 0x03 +#define IRP_MN_TRACK_LINK 0x04 // To be obsoleted soon +#define IRP_MN_KERNEL_CALL 0x04 + +// +// Lock control minor function codes +// + +#define IRP_MN_LOCK 0x01 +#define IRP_MN_UNLOCK_SINGLE 0x02 +#define IRP_MN_UNLOCK_ALL 0x03 +#define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 + +// +// Read and Write minor function codes for file systems supporting Lan Manager +// software. All of these subfunction codes are invalid if the file has been +// opened with FO_NO_INTERMEDIATE_BUFFERING. They are also invalid in combi- +// nation with synchronous calls (Irp Flag or file open option). +// +// Note that "normal" is assumed to be zero by both the I/O system and file +// systems. Do not change this value. +// + +#define IRP_MN_NORMAL 0x00 +#define IRP_MN_DPC 0x01 +#define IRP_MN_MDL 0x02 +#define IRP_MN_COMPLETE 0x04 +#define IRP_MN_COMPRESSED 0x08 + +#define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) +#define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) +#define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) + +// begin_wdm +// +// Device Control Request minor function codes for SCSI support. Note that +// user requests are assumed to be zero. +// + +#define IRP_MN_SCSI_CLASS 0x01 + +// +// PNP minor function codes. +// + +#define IRP_MN_START_DEVICE 0x00 +#define IRP_MN_QUERY_REMOVE_DEVICE 0x01 +#define IRP_MN_REMOVE_DEVICE 0x02 +#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 +#define IRP_MN_STOP_DEVICE 0x04 +#define IRP_MN_QUERY_STOP_DEVICE 0x05 +#define IRP_MN_CANCEL_STOP_DEVICE 0x06 + +#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 +#define IRP_MN_QUERY_INTERFACE 0x08 +#define IRP_MN_QUERY_CAPABILITIES 0x09 +#define IRP_MN_QUERY_RESOURCES 0x0A +#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B +#define IRP_MN_QUERY_DEVICE_TEXT 0x0C +#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D + +#define IRP_MN_READ_CONFIG 0x0F +#define IRP_MN_WRITE_CONFIG 0x10 +#define IRP_MN_EJECT 0x11 +#define IRP_MN_SET_LOCK 0x12 +#define IRP_MN_QUERY_ID 0x13 +#define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 +#define IRP_MN_QUERY_BUS_INFORMATION 0x15 +#define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 +#define IRP_MN_SURPRISE_REMOVAL 0x17 +// end_wdm +#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 +// begin_wdm + +// +// POWER minor function codes +// +#define IRP_MN_WAIT_WAKE 0x00 +#define IRP_MN_POWER_SEQUENCE 0x01 +#define IRP_MN_SET_POWER 0x02 +#define IRP_MN_QUERY_POWER 0x03 + +// begin_ntminiport +// +// WMI minor function codes under IRP_MJ_SYSTEM_CONTROL +// + +#define IRP_MN_QUERY_ALL_DATA 0x00 +#define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 +#define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 +#define IRP_MN_CHANGE_SINGLE_ITEM 0x03 +#define IRP_MN_ENABLE_EVENTS 0x04 +#define IRP_MN_DISABLE_EVENTS 0x05 +#define IRP_MN_ENABLE_COLLECTION 0x06 +#define IRP_MN_DISABLE_COLLECTION 0x07 +#define IRP_MN_REGINFO 0x08 +#define IRP_MN_EXECUTE_METHOD 0x09 +// Minor code 0x0a is reserved +#define IRP_MN_REGINFO_EX 0x0b + +// end_ntminiport + +// +// Define option flags for IoCreateFile. Note that these values must be +// exactly the same as the SL_... flags for a create function. Note also +// that there are flags that may be passed to IoCreateFile that are not +// placed in the stack location for the create IRP. These flags start in +// the next byte. +// + +#define IO_FORCE_ACCESS_CHECK 0x0001 +// end_ntddk end_wdm end_nthal end_ntosp + +#define IO_OPEN_PAGING_FILE 0x0002 +#define IO_OPEN_TARGET_DIRECTORY 0x0004 + +// +// Flags not passed to driver +// + +// begin_ntddk begin_wdm begin_ntosp +#define IO_NO_PARAMETER_CHECKING 0x0100 + +// +// Define Information fields for whether or not a REPARSE or a REMOUNT has +// occurred in the file system. +// + +#define IO_REPARSE 0x0 +#define IO_REMOUNT 0x1 + +// end_ntddk end_wdm + +#define IO_CHECK_CREATE_PARAMETERS 0x0200 +#define IO_ATTACH_DEVICE 0x0400 + +// end_ntosp + +// begin_ntifs begin_ntosp + +// +// This flag is only meaning full to IoCreateFileSpecifyDeviceObjectHint. +// FileHandles created using IoCreateFileSpecifyDeviceObjectHint with this +// flag set will bypass ShareAccess checks on this file. +// + +#define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800 // Ignores share access checks on opens. + + +// +// Define the objects that can be created by IoCreateFile. +// + +typedef enum _CREATE_FILE_TYPE { + CreateFileTypeNone, + CreateFileTypeNamedPipe, + CreateFileTypeMailslot +} CREATE_FILE_TYPE; + +// +// Define the structures used by the I/O system +// + +// +// Define empty typedefs for the _IRP, _DEVICE_OBJECT, and _DRIVER_OBJECT +// structures so they may be referenced by function types before they are +// actually defined. +// +struct _DEVICE_DESCRIPTION; +struct _DEVICE_OBJECT; +struct _DMA_ADAPTER; +struct _DRIVER_OBJECT; +struct _DRIVE_LAYOUT_INFORMATION; +struct _DISK_PARTITION; +struct _FILE_OBJECT; +struct _IRP; +struct _SCSI_REQUEST_BLOCK; +struct _SCATTER_GATHER_LIST; + +// +// Define the I/O version of a DPC routine. +// + +typedef +VOID +(*PIO_DPC_ROUTINE) ( + IN PKDPC Dpc, + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp, + IN PVOID Context + ); + +// +// Define driver timer routine type. +// + +typedef +VOID +(*PIO_TIMER_ROUTINE) ( + IN struct _DEVICE_OBJECT *DeviceObject, + IN PVOID Context + ); + +// +// Define driver initialization routine type. +// +typedef +NTSTATUS +(*PDRIVER_INITIALIZE) ( + IN struct _DRIVER_OBJECT *DriverObject, + IN PUNICODE_STRING RegistryPath + ); + +// end_wdm +// +// Define driver reinitialization routine type. +// + +typedef +VOID +(*PDRIVER_REINITIALIZE) ( + IN struct _DRIVER_OBJECT *DriverObject, + IN PVOID Context, + IN ULONG Count + ); + +// begin_wdm begin_ntndis +// +// Define driver cancel routine type. +// + +typedef +VOID +(*PDRIVER_CANCEL) ( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp + ); + +// +// Define driver dispatch routine type. +// + +typedef +NTSTATUS +(*PDRIVER_DISPATCH) ( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp + ); + +// +// Define driver start I/O routine type. +// + +typedef +VOID +(*PDRIVER_STARTIO) ( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp + ); + +// +// Define driver unload routine type. +// +typedef +VOID +(*PDRIVER_UNLOAD) ( + IN struct _DRIVER_OBJECT *DriverObject + ); +// +// Define driver AddDevice routine type. +// + +typedef +NTSTATUS +(*PDRIVER_ADD_DEVICE) ( + IN struct _DRIVER_OBJECT *DriverObject, + IN struct _DEVICE_OBJECT *PhysicalDeviceObject + ); + +// end_ntddk end_wdm end_nthal end_ntndis end_ntosp + +// +// Define driver FS notification change routine type. +// + +typedef +VOID +(*PDRIVER_FS_NOTIFICATION) ( + IN struct _DEVICE_OBJECT *DeviceObject, + IN BOOLEAN FsActive + ); + +// begin_ntddk begin_wdm begin_ntosp + +// +// Define fast I/O procedure prototypes. +// +// Fast I/O read and write procedures. +// + +typedef +BOOLEAN +(*PFAST_IO_CHECK_IF_POSSIBLE) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN BOOLEAN CheckForReadOperation, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_READ) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_WRITE) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// Fast I/O query basic and standard information procedures. +// + +typedef +BOOLEAN +(*PFAST_IO_QUERY_BASIC_INFO) ( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + OUT PFILE_BASIC_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_QUERY_STANDARD_INFO) ( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + OUT PFILE_STANDARD_INFORMATION Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// Fast I/O lock and unlock procedures. +// + +typedef +BOOLEAN +(*PFAST_IO_LOCK) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + PEPROCESS ProcessId, + ULONG Key, + BOOLEAN FailImmediately, + BOOLEAN ExclusiveLock, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_UNLOCK_SINGLE) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + PEPROCESS ProcessId, + ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_UNLOCK_ALL) ( + IN struct _FILE_OBJECT *FileObject, + PEPROCESS ProcessId, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_UNLOCK_ALL_BY_KEY) ( + IN struct _FILE_OBJECT *FileObject, + PVOID ProcessId, + ULONG Key, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// Fast I/O device control procedure. +// + +typedef +BOOLEAN +(*PFAST_IO_DEVICE_CONTROL) ( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength, + IN ULONG IoControlCode, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// Define callbacks for NtCreateSection to synchronize correctly with +// the file system. It pre-acquires the resources that will be needed +// when calling to query and set file/allocation size in the file system. +// + +typedef +VOID +(*PFAST_IO_ACQUIRE_FILE) ( + IN struct _FILE_OBJECT *FileObject + ); + +typedef +VOID +(*PFAST_IO_RELEASE_FILE) ( + IN struct _FILE_OBJECT *FileObject + ); + +// +// Define callback for drivers that have device objects attached to lower- +// level drivers' device objects. This callback is made when the lower-level +// driver is deleting its device object. +// + +typedef +VOID +(*PFAST_IO_DETACH_DEVICE) ( + IN struct _DEVICE_OBJECT *SourceDevice, + IN struct _DEVICE_OBJECT *TargetDevice + ); + +// +// This structure is used by the server to quickly get the information needed +// to service a server open call. It is takes what would be two fast io calls +// one for basic information and the other for standard information and makes +// it into one call. +// + +typedef +BOOLEAN +(*PFAST_IO_QUERY_NETWORK_OPEN_INFO) ( + IN struct _FILE_OBJECT *FileObject, + IN BOOLEAN Wait, + OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, + OUT struct _IO_STATUS_BLOCK *IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// Define Mdl-based routines for the server to call +// + +typedef +BOOLEAN +(*PFAST_IO_MDL_READ) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_MDL_READ_COMPLETE) ( + IN struct _FILE_OBJECT *FileObject, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_PREPARE_MDL_WRITE) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_MDL_WRITE_COMPLETE) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// If this routine is present, it will be called by FsRtl +// to acquire the file for the mapped page writer. +// + +typedef +NTSTATUS +(*PFAST_IO_ACQUIRE_FOR_MOD_WRITE) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER EndingOffset, + OUT struct _ERESOURCE **ResourceToRelease, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +NTSTATUS +(*PFAST_IO_RELEASE_FOR_MOD_WRITE) ( + IN struct _FILE_OBJECT *FileObject, + IN struct _ERESOURCE *ResourceToRelease, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// If this routine is present, it will be called by FsRtl +// to acquire the file for the mapped page writer. +// + +typedef +NTSTATUS +(*PFAST_IO_ACQUIRE_FOR_CCFLUSH) ( + IN struct _FILE_OBJECT *FileObject, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +NTSTATUS +(*PFAST_IO_RELEASE_FOR_CCFLUSH) ( + IN struct _FILE_OBJECT *FileObject, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_READ_COMPRESSED) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo, + IN ULONG CompressedDataInfoLength, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_WRITE_COMPRESSED) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + IN PVOID Buffer, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo, + IN ULONG CompressedDataInfoLength, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED) ( + IN struct _FILE_OBJECT *FileObject, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED) ( + IN struct _FILE_OBJECT *FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +typedef +BOOLEAN +(*PFAST_IO_QUERY_OPEN) ( + IN struct _IRP *Irp, + OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, + IN struct _DEVICE_OBJECT *DeviceObject + ); + +// +// Define the structure to describe the Fast I/O dispatch routines. Any +// additions made to this structure MUST be added monotonically to the end +// of the structure, and fields CANNOT be removed from the middle. +// + +typedef struct _FAST_IO_DISPATCH { + ULONG SizeOfFastIoDispatch; + PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; + PFAST_IO_READ FastIoRead; + PFAST_IO_WRITE FastIoWrite; + PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; + PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; + PFAST_IO_LOCK FastIoLock; + PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; + PFAST_IO_UNLOCK_ALL FastIoUnlockAll; + PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; + PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; + PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; + PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; + PFAST_IO_DETACH_DEVICE FastIoDetachDevice; + PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; + PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; + PFAST_IO_MDL_READ MdlRead; + PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; + PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; + PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; + PFAST_IO_READ_COMPRESSED FastIoReadCompressed; + PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; + PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; + PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; + PFAST_IO_QUERY_OPEN FastIoQueryOpen; + PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; + PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; + PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; +} FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; + +// end_ntddk end_wdm end_ntosp + +// +// Valid values for FS_FILTER_PARAMETERS.AcquireForSectionSynchronization.SyncType +// + +typedef enum _FS_FILTER_SECTION_SYNC_TYPE { + SyncTypeOther = 0, + SyncTypeCreateSection +} FS_FILTER_SECTION_SYNC_TYPE, *PFS_FILTER_SECTION_SYNC_TYPE; + +// +// Parameters union for the operations that +// are exposed to the filters through the +// FsFilterCallbacks registration mechanism. +// + +typedef union _FS_FILTER_PARAMETERS { + + // + // AcquireForModifiedPageWriter + // + + struct { + PLARGE_INTEGER EndingOffset; + } AcquireForModifiedPageWriter; + + // + // ReleaseForModifiedPageWriter + // + + struct { + PERESOURCE ResourceToRelease; + } ReleaseForModifiedPageWriter; + + // + // AcquireForSectionSynchronization + // + + struct { + FS_FILTER_SECTION_SYNC_TYPE SyncType; + ULONG PageProtection; + } AcquireForSectionSynchronization; + + // + // Other + // + + struct { + PVOID Argument1; + PVOID Argument2; + PVOID Argument3; + PVOID Argument4; + PVOID Argument5; + } Others; + +} FS_FILTER_PARAMETERS, *PFS_FILTER_PARAMETERS; + +// +// These are the valid values for the Operation field +// of the FS_FILTER_CALLBACK_DATA structure. +// + +#define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-1 +#define FS_FILTER_RELEASE_FOR_SECTION_SYNCHRONIZATION (UCHAR)-2 +#define FS_FILTER_ACQUIRE_FOR_MOD_WRITE (UCHAR)-3 +#define FS_FILTER_RELEASE_FOR_MOD_WRITE (UCHAR)-4 +#define FS_FILTER_ACQUIRE_FOR_CC_FLUSH (UCHAR)-5 +#define FS_FILTER_RELEASE_FOR_CC_FLUSH (UCHAR)-6 + +typedef struct _FS_FILTER_CALLBACK_DATA { + + ULONG SizeOfFsFilterCallbackData; + UCHAR Operation; + UCHAR Reserved; + + struct _DEVICE_OBJECT *DeviceObject; + struct _FILE_OBJECT *FileObject; + + FS_FILTER_PARAMETERS Parameters; + +} FS_FILTER_CALLBACK_DATA, *PFS_FILTER_CALLBACK_DATA; + +// +// Prototype for the callbacks received before an operation +// is passed to the base file system. +// +// A filter can fail this operation, but consistant failure +// will halt system progress. +// + +typedef +NTSTATUS +(*PFS_FILTER_CALLBACK) ( + IN PFS_FILTER_CALLBACK_DATA Data, + OUT PVOID *CompletionContext + ); + +// +// Prototype for the completion callback received after an +// operation is completed. +// + +typedef +VOID +(*PFS_FILTER_COMPLETION_CALLBACK) ( + IN PFS_FILTER_CALLBACK_DATA Data, + IN NTSTATUS OperationStatus, + IN PVOID CompletionContext + ); + +// +// This is the structure that the file system filter fills in to +// receive notifications for these locking operations. +// +// A filter should set the field to NULL for any notification callback +// it doesn't wish to receive. +// + +typedef struct _FS_FILTER_CALLBACKS { + + ULONG SizeOfFsFilterCallbacks; + ULONG Reserved; // For alignment + + PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization; + PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization; + PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization; + PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization; + PFS_FILTER_CALLBACK PreAcquireForCcFlush; + PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush; + PFS_FILTER_CALLBACK PreReleaseForCcFlush; + PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush; + PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter; + PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter; + PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter; + PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter; + +} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS; + +NTKERNELAPI +NTSTATUS +FsRtlRegisterFileSystemFilterCallbacks ( + IN struct _DRIVER_OBJECT *FilterDriverObject, + IN PFS_FILTER_CALLBACKS Callbacks + ); + +// begin_ntddk begin_wdm begin_nthal begin_ntosp +// +// Define the actions that a driver execution routine may request of the +// adapter/controller allocation routines upon return. +// + +typedef enum _IO_ALLOCATION_ACTION { + KeepObject = 1, + DeallocateObject, + DeallocateObjectKeepRegisters +} IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; + +// +// Define device driver adapter/controller execution routine. +// + +typedef +IO_ALLOCATION_ACTION +(*PDRIVER_CONTROL) ( + IN struct _DEVICE_OBJECT *DeviceObject, + IN struct _IRP *Irp, + IN PVOID MapRegisterBase, + IN PVOID Context + ); + +// +// Define the I/O system's security context type for use by file system's +// when checking access to volumes, files, and directories. +// + +typedef struct _IO_SECURITY_CONTEXT { + PSECURITY_QUALITY_OF_SERVICE SecurityQos; + PACCESS_STATE AccessState; + ACCESS_MASK DesiredAccess; + ULONG FullCreateOptions; +} IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; + +// +// Define Volume Parameter Block (VPB) flags. +// + +#define VPB_MOUNTED 0x00000001 +#define VPB_LOCKED 0x00000002 +#define VPB_PERSISTENT 0x00000004 +#define VPB_REMOVE_PENDING 0x00000008 +#define VPB_RAW_MOUNT 0x00000010 + + +// +// Volume Parameter Block (VPB) +// + +#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) // 32 characters + +typedef struct _VPB { + CSHORT Type; + CSHORT Size; + USHORT Flags; + USHORT VolumeLabelLength; // in bytes + struct _DEVICE_OBJECT *DeviceObject; + struct _DEVICE_OBJECT *RealDevice; + ULONG SerialNumber; + ULONG ReferenceCount; + WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; +} VPB, *PVPB; + + +#if defined(_WIN64) + +// +// Use __inline DMA macros (hal.h) +// +#ifndef USE_DMA_MACROS +#define USE_DMA_MACROS +#endif + +// +// Only PnP drivers! +// +#ifndef NO_LEGACY_DRIVERS +#define NO_LEGACY_DRIVERS +#endif + +#endif // _WIN64 + + +#if defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_)) + +// begin_wdm +// +// Define object type specific fields of various objects used by the I/O system +// + +typedef struct _DMA_ADAPTER *PADAPTER_OBJECT; + +// end_wdm +#else + +// +// Define object type specific fields of various objects used by the I/O system +// + +typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; // ntndis + +#endif // USE_DMA_MACROS && (_NTDDK_ || _NTDRIVER_ || _NTOSP_) + +// begin_wdm +// +// Define Wait Context Block (WCB) +// + +typedef struct _WAIT_CONTEXT_BLOCK { + KDEVICE_QUEUE_ENTRY WaitQueueEntry; + PDRIVER_CONTROL DeviceRoutine; + PVOID DeviceContext; + ULONG NumberOfMapRegisters; + PVOID DeviceObject; + PVOID CurrentIrp; + PKDPC BufferChainingDpc; +} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; + +// end_wdm + +typedef struct _CONTROLLER_OBJECT { + CSHORT Type; + CSHORT Size; + PVOID ControllerExtension; + KDEVICE_QUEUE DeviceWaitQueue; + + ULONG Spare1; + LARGE_INTEGER Spare2; + +} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; + +// begin_wdm +// +// Define Device Object (DO) flags +// +#define DO_VERIFY_VOLUME 0x00000002 +#define DO_BUFFERED_IO 0x00000004 +#define DO_EXCLUSIVE 0x00000008 +#define DO_DIRECT_IO 0x00000010 +#define DO_MAP_IO_BUFFER 0x00000020 +#define DO_DEVICE_HAS_NAME 0x00000040 +#define DO_DEVICE_INITIALIZING 0x00000080 +#define DO_SYSTEM_BOOT_PARTITION 0x00000100 +#define DO_LONG_TERM_REQUESTS 0x00000200 +#define DO_NEVER_LAST_DEVICE 0x00000400 +#define DO_SHUTDOWN_REGISTERED 0x00000800 +#define DO_BUS_ENUMERATED_DEVICE 0x00001000 +#define DO_POWER_PAGABLE 0x00002000 +#define DO_POWER_INRUSH 0x00004000 +#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 +// +// Device Object structure definition +// + +typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { + CSHORT Type; + USHORT Size; + LONG ReferenceCount; + struct _DRIVER_OBJECT *DriverObject; + struct _DEVICE_OBJECT *NextDevice; + struct _DEVICE_OBJECT *AttachedDevice; + struct _IRP *CurrentIrp; + PIO_TIMER Timer; + ULONG Flags; // See above: DO_... + ULONG Characteristics; // See ntioapi: FILE_... + PVPB Vpb; + PVOID DeviceExtension; + DEVICE_TYPE DeviceType; + CCHAR StackSize; + union { + LIST_ENTRY ListEntry; + WAIT_CONTEXT_BLOCK Wcb; + } Queue; + ULONG AlignmentRequirement; + KDEVICE_QUEUE DeviceQueue; + KDPC Dpc; + + // + // The following field is for exclusive use by the filesystem to keep + // track of the number of Fsp threads currently using the device + // + + ULONG ActiveThreadCount; + PSECURITY_DESCRIPTOR SecurityDescriptor; + KEVENT DeviceLock; + + USHORT SectorSize; + USHORT Spare1; + + struct _DEVOBJ_EXTENSION *DeviceObjectExtension; + PVOID Reserved; +} DEVICE_OBJECT; + +typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT; // ntndis + + +struct _DEVICE_OBJECT_POWER_EXTENSION; + +typedef struct _DEVOBJ_EXTENSION { + + CSHORT Type; + USHORT Size; + + // + // Public part of the DeviceObjectExtension structure + // + + PDEVICE_OBJECT DeviceObject; // owning device object + + +} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; + +// +// Define Driver Object (DRVO) flags +// + +#define DRVO_UNLOAD_INVOKED 0x00000001 +#define DRVO_LEGACY_DRIVER 0x00000002 +#define DRVO_BUILTIN_DRIVER 0x00000004 // Driver objects for Hal, PnP Mgr +// end_wdm +#define DRVO_REINIT_REGISTERED 0x00000008 +#define DRVO_INITIALIZED 0x00000010 +#define DRVO_BOOTREINIT_REGISTERED 0x00000020 +#define DRVO_LEGACY_RESOURCES 0x00000040 + +// begin_wdm + +typedef struct _DRIVER_EXTENSION { + + // + // Back pointer to Driver Object + // + + struct _DRIVER_OBJECT *DriverObject; + + // + // The AddDevice entry point is called by the Plug & Play manager + // to inform the driver when a new device instance arrives that this + // driver must control. + // + + PDRIVER_ADD_DEVICE AddDevice; + + // + // The count field is used to count the number of times the driver has + // had its registered reinitialization routine invoked. + // + + ULONG Count; + + // + // The service name field is used by the pnp manager to determine + // where the driver related info is stored in the registry. + // + + UNICODE_STRING ServiceKeyName; + + // + // Note: any new shared fields get added here. + // + + +} DRIVER_EXTENSION, *PDRIVER_EXTENSION; + + +typedef struct _DRIVER_OBJECT { + CSHORT Type; + CSHORT Size; + + // + // The following links all of the devices created by a single driver + // together on a list, and the Flags word provides an extensible flag + // location for driver objects. + // + + PDEVICE_OBJECT DeviceObject; + ULONG Flags; + + // + // The following section describes where the driver is loaded. The count + // field is used to count the number of times the driver has had its + // registered reinitialization routine invoked. + // + + PVOID DriverStart; + ULONG DriverSize; + PVOID DriverSection; + PDRIVER_EXTENSION DriverExtension; + + // + // The driver name field is used by the error log thread + // determine the name of the driver that an I/O request is/was bound. + // + + UNICODE_STRING DriverName; + + // + // The following section is for registry support. Thise is a pointer + // to the path to the hardware information in the registry + // + + PUNICODE_STRING HardwareDatabase; + + // + // The following section contains the optional pointer to an array of + // alternate entry points to a driver for "fast I/O" support. Fast I/O + // is performed by invoking the driver routine directly with separate + // parameters, rather than using the standard IRP call mechanism. Note + // that these functions may only be used for synchronous I/O, and when + // the file is cached. + // + + PFAST_IO_DISPATCH FastIoDispatch; + + // + // The following section describes the entry points to this particular + // driver. Note that the major function dispatch table must be the last + // field in the object so that it remains extensible. + // + + PDRIVER_INITIALIZE DriverInit; + PDRIVER_STARTIO DriverStartIo; + PDRIVER_UNLOAD DriverUnload; + PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; + +} DRIVER_OBJECT; +typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; // ntndis + + + +// +// The following structure is pointed to by the SectionObject pointer field +// of a file object, and is allocated by the various NT file systems. +// + +typedef struct _SECTION_OBJECT_POINTERS { + PVOID DataSectionObject; + PVOID SharedCacheMap; + PVOID ImageSectionObject; +} SECTION_OBJECT_POINTERS; +typedef SECTION_OBJECT_POINTERS *PSECTION_OBJECT_POINTERS; + +// +// Define the format of a completion message. +// + +typedef struct _IO_COMPLETION_CONTEXT { + PVOID Port; + PVOID Key; +} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; + +// +// Define File Object (FO) flags +// + +#define FO_FILE_OPEN 0x00000001 +#define FO_SYNCHRONOUS_IO 0x00000002 +#define FO_ALERTABLE_IO 0x00000004 +#define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 +#define FO_WRITE_THROUGH 0x00000010 +#define FO_SEQUENTIAL_ONLY 0x00000020 +#define FO_CACHE_SUPPORTED 0x00000040 +#define FO_NAMED_PIPE 0x00000080 +#define FO_STREAM_FILE 0x00000100 +#define FO_MAILSLOT 0x00000200 +#define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 +#define FO_DIRECT_DEVICE_OPEN 0x00000800 +#define FO_FILE_MODIFIED 0x00001000 +#define FO_FILE_SIZE_CHANGED 0x00002000 +#define FO_CLEANUP_COMPLETE 0x00004000 +#define FO_TEMPORARY_FILE 0x00008000 +#define FO_DELETE_ON_CLOSE 0x00010000 +#define FO_OPENED_CASE_SENSITIVE 0x00020000 +#define FO_HANDLE_CREATED 0x00040000 +#define FO_FILE_FAST_IO_READ 0x00080000 +#define FO_RANDOM_ACCESS 0x00100000 +#define FO_FILE_OPEN_CANCELLED 0x00200000 +#define FO_VOLUME_OPEN 0x00400000 +#define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000 +#define FO_REMOTE_ORIGIN 0x01000000 + +typedef struct _FILE_OBJECT { + CSHORT Type; + CSHORT Size; + PDEVICE_OBJECT DeviceObject; + PVPB Vpb; + PVOID FsContext; + PVOID FsContext2; + PSECTION_OBJECT_POINTERS SectionObjectPointer; + PVOID PrivateCacheMap; + NTSTATUS FinalStatus; + struct _FILE_OBJECT *RelatedFileObject; + BOOLEAN LockOperation; + BOOLEAN DeletePending; + BOOLEAN ReadAccess; + BOOLEAN WriteAccess; + BOOLEAN DeleteAccess; + BOOLEAN SharedRead; + BOOLEAN SharedWrite; + BOOLEAN SharedDelete; + ULONG Flags; + UNICODE_STRING FileName; + LARGE_INTEGER CurrentByteOffset; + ULONG Waiters; + ULONG Busy; + PVOID LastLock; + KEVENT Lock; + KEVENT Event; + PIO_COMPLETION_CONTEXT CompletionContext; +} FILE_OBJECT; +typedef struct _FILE_OBJECT *PFILE_OBJECT; // ntndis + +// +// Define I/O Request Packet (IRP) flags +// + +#define IRP_NOCACHE 0x00000001 +#define IRP_PAGING_IO 0x00000002 +#define IRP_MOUNT_COMPLETION 0x00000002 +#define IRP_SYNCHRONOUS_API 0x00000004 +#define IRP_ASSOCIATED_IRP 0x00000008 +#define IRP_BUFFERED_IO 0x00000010 +#define IRP_DEALLOCATE_BUFFER 0x00000020 +#define IRP_INPUT_OPERATION 0x00000040 +#define IRP_SYNCHRONOUS_PAGING_IO 0x00000040 +#define IRP_CREATE_OPERATION 0x00000080 +#define IRP_READ_OPERATION 0x00000100 +#define IRP_WRITE_OPERATION 0x00000200 +#define IRP_CLOSE_OPERATION 0x00000400 +// end_wdm + +#define IRP_DEFER_IO_COMPLETION 0x00000800 +#define IRP_OB_QUERY_NAME 0x00001000 +#define IRP_HOLD_DEVICE_QUEUE 0x00002000 +#define IRP_RETRY_IO_COMPLETION 0x00004000 +#define IRP_CLASS_CACHE_OPERATION 0x00008000 + +#define IRP_SET_USER_EVENT IRP_CLOSE_OPERATION + +// begin_wdm +// +// Define I/O request packet (IRP) alternate flags for allocation control. +// + +#define IRP_QUOTA_CHARGED 0x01 +#define IRP_ALLOCATED_MUST_SUCCEED 0x02 +#define IRP_ALLOCATED_FIXED_SIZE 0x04 +#define IRP_LOOKASIDE_ALLOCATION 0x08 + +// +// I/O Request Packet (IRP) definition +// + +typedef struct _IRP { + CSHORT Type; + USHORT Size; + + // + // Define the common fields used to control the IRP. + // + + // + // Define a pointer to the Memory Descriptor List (MDL) for this I/O + // request. This field is only used if the I/O is "direct I/O". + // + + PMDL MdlAddress; + + // + // Flags word - used to remember various flags. + // + + ULONG Flags; + + // + // The following union is used for one of three purposes: + // + // 1. This IRP is an associated IRP. The field is a pointer to a master + // IRP. + // + // 2. This is the master IRP. The field is the count of the number of + // IRPs which must complete (associated IRPs) before the master can + // complete. + // + // 3. This operation is being buffered and the field is the address of + // the system space buffer. + // + + union { + struct _IRP *MasterIrp; + LONG IrpCount; + PVOID SystemBuffer; + } AssociatedIrp; + + // + // Thread list entry - allows queueing the IRP to the thread pending I/O + // request packet list. + // + + LIST_ENTRY ThreadListEntry; + + // + // I/O status - final status of operation. + // + + IO_STATUS_BLOCK IoStatus; + + // + // Requestor mode - mode of the original requestor of this operation. + // + + KPROCESSOR_MODE RequestorMode; + + // + // Pending returned - TRUE if pending was initially returned as the + // status for this packet. + // + + BOOLEAN PendingReturned; + + // + // Stack state information. + // + + CHAR StackCount; + CHAR CurrentLocation; + + // + // Cancel - packet has been canceled. + // + + BOOLEAN Cancel; + + // + // Cancel Irql - Irql at which the cancel spinlock was acquired. + // + + KIRQL CancelIrql; + + // + // ApcEnvironment - Used to save the APC environment at the time that the + // packet was initialized. + // + + CCHAR ApcEnvironment; + + // + // Allocation control flags. + // + + UCHAR AllocationFlags; + + // + // User parameters. + // + + PIO_STATUS_BLOCK UserIosb; + PKEVENT UserEvent; + union { + struct { + PIO_APC_ROUTINE UserApcRoutine; + PVOID UserApcContext; + } AsynchronousParameters; + LARGE_INTEGER AllocationSize; + } Overlay; + + // + // CancelRoutine - Used to contain the address of a cancel routine supplied + // by a device driver when the IRP is in a cancelable state. + // + + PDRIVER_CANCEL CancelRoutine; + + // + // Note that the UserBuffer parameter is outside of the stack so that I/O + // completion can copy data back into the user's address space without + // having to know exactly which service was being invoked. The length + // of the copy is stored in the second half of the I/O status block. If + // the UserBuffer field is NULL, then no copy is performed. + // + + PVOID UserBuffer; + + // + // Kernel structures + // + // The following section contains kernel structures which the IRP needs + // in order to place various work information in kernel controller system + // queues. Because the size and alignment cannot be controlled, they are + // placed here at the end so they just hang off and do not affect the + // alignment of other fields in the IRP. + // + + union { + + struct { + + union { + + // + // DeviceQueueEntry - The device queue entry field is used to + // queue the IRP to the device driver device queue. + // + + KDEVICE_QUEUE_ENTRY DeviceQueueEntry; + + struct { + + // + // The following are available to the driver to use in + // whatever manner is desired, while the driver owns the + // packet. + // + + PVOID DriverContext[4]; + + } ; + + } ; + + // + // Thread - pointer to caller's Thread Control Block. + // + + PETHREAD Thread; + + // + // Auxiliary buffer - pointer to any auxiliary buffer that is + // required to pass information to a driver that is not contained + // in a normal buffer. + // + + PCHAR AuxiliaryBuffer; + + // + // The following unnamed structure must be exactly identical + // to the unnamed structure used in the minipacket header used + // for completion queue entries. + // + + struct { + + // + // List entry - used to queue the packet to completion queue, among + // others. + // + + LIST_ENTRY ListEntry; + + union { + + // + // Current stack location - contains a pointer to the current + // IO_STACK_LOCATION structure in the IRP stack. This field + // should never be directly accessed by drivers. They should + // use the standard functions. + // + + struct _IO_STACK_LOCATION *CurrentStackLocation; + + // + // Minipacket type. + // + + ULONG PacketType; + }; + }; + + // + // Original file object - pointer to the original file object + // that was used to open the file. This field is owned by the + // I/O system and should not be used by any other drivers. + // + + PFILE_OBJECT OriginalFileObject; + + } Overlay; + + // + // APC - This APC control block is used for the special kernel APC as + // well as for the caller's APC, if one was specified in the original + // argument list. If so, then the APC is reused for the normal APC for + // whatever mode the caller was in and the "special" routine that is + // invoked before the APC gets control simply deallocates the IRP. + // + + KAPC Apc; + + // + // CompletionKey - This is the key that is used to distinguish + // individual I/O operations initiated on a single file handle. + // + + PVOID CompletionKey; + + } Tail; + +} IRP, *PIRP; + +// +// Define completion routine types for use in stack locations in an IRP +// + +typedef +NTSTATUS +(*PIO_COMPLETION_ROUTINE) ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PVOID Context + ); + +// +// Define stack location control flags +// + +#define SL_PENDING_RETURNED 0x01 +#define SL_INVOKE_ON_CANCEL 0x20 +#define SL_INVOKE_ON_SUCCESS 0x40 +#define SL_INVOKE_ON_ERROR 0x80 + +// +// Define flags for various functions +// + +// +// Create / Create Named Pipe +// +// The following flags must exactly match those in the IoCreateFile call's +// options. The case sensitive flag is added in later, by the parse routine, +// and is not an actual option to open. Rather, it is part of the object +// manager's attributes structure. +// + +#define SL_FORCE_ACCESS_CHECK 0x01 +#define SL_OPEN_PAGING_FILE 0x02 +#define SL_OPEN_TARGET_DIRECTORY 0x04 + +#define SL_CASE_SENSITIVE 0x80 + +// +// Read / Write +// + +#define SL_KEY_SPECIFIED 0x01 +#define SL_OVERRIDE_VERIFY_VOLUME 0x02 +#define SL_WRITE_THROUGH 0x04 +#define SL_FT_SEQUENTIAL_WRITE 0x08 + +// +// Device I/O Control +// +// +// Same SL_OVERRIDE_VERIFY_VOLUME as for read/write above. +// + +#define SL_READ_ACCESS_GRANTED 0x01 +#define SL_WRITE_ACCESS_GRANTED 0x04 // Gap for SL_OVERRIDE_VERIFY_VOLUME + +// +// Lock +// + +#define SL_FAIL_IMMEDIATELY 0x01 +#define SL_EXCLUSIVE_LOCK 0x02 + +// +// QueryDirectory / QueryEa / QueryQuota +// + +#define SL_RESTART_SCAN 0x01 +#define SL_RETURN_SINGLE_ENTRY 0x02 +#define SL_INDEX_SPECIFIED 0x04 + +// +// NotifyDirectory +// + +#define SL_WATCH_TREE 0x01 + +// +// FileSystemControl +// +// minor: mount/verify volume +// + +#define SL_ALLOW_RAW_MOUNT 0x01 + +// +// Define PNP/POWER types required by IRP_MJ_PNP/IRP_MJ_POWER. +// + +typedef enum _DEVICE_RELATION_TYPE { + BusRelations, + EjectionRelations, + PowerRelations, + RemovalRelations, + TargetDeviceRelation, + SingleBusRelations +} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; + +typedef struct _DEVICE_RELATIONS { + ULONG Count; + PDEVICE_OBJECT Objects[1]; // variable length +} DEVICE_RELATIONS, *PDEVICE_RELATIONS; + +typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { + DeviceUsageTypeUndefined, + DeviceUsageTypePaging, + DeviceUsageTypeHibernation, + DeviceUsageTypeDumpFile +} DEVICE_USAGE_NOTIFICATION_TYPE; + +// begin_ntminiport + +// workaround overloaded definition (rpc generated headers all define INTERFACE +// to match the class name). +#undef INTERFACE + +typedef struct _INTERFACE { + USHORT Size; + USHORT Version; + PVOID Context; + PINTERFACE_REFERENCE InterfaceReference; + PINTERFACE_DEREFERENCE InterfaceDereference; + // interface specific entries go here +} INTERFACE, *PINTERFACE; + +// end_ntminiport + +typedef struct _DEVICE_CAPABILITIES { + USHORT Size; + USHORT Version; // the version documented here is version 1 + ULONG DeviceD1:1; + ULONG DeviceD2:1; + ULONG LockSupported:1; + ULONG EjectSupported:1; // Ejectable in S0 + ULONG Removable:1; + ULONG DockDevice:1; + ULONG UniqueID:1; + ULONG SilentInstall:1; + ULONG RawDeviceOK:1; + ULONG SurpriseRemovalOK:1; + ULONG WakeFromD0:1; + ULONG WakeFromD1:1; + ULONG WakeFromD2:1; + ULONG WakeFromD3:1; + ULONG HardwareDisabled:1; + ULONG NonDynamic:1; + ULONG WarmEjectSupported:1; + ULONG NoDisplayInUI:1; + ULONG Reserved:14; + + ULONG Address; + ULONG UINumber; + + DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM]; + SYSTEM_POWER_STATE SystemWake; + DEVICE_POWER_STATE DeviceWake; + ULONG D1Latency; + ULONG D2Latency; + ULONG D3Latency; +} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; + +typedef struct _POWER_SEQUENCE { + ULONG SequenceD1; + ULONG SequenceD2; + ULONG SequenceD3; +} POWER_SEQUENCE, *PPOWER_SEQUENCE; + +typedef enum { + BusQueryDeviceID = 0, // <Enumerator>\<Enumerator-specific device id> + BusQueryHardwareIDs = 1, // Hardware ids + BusQueryCompatibleIDs = 2, // compatible device ids + BusQueryInstanceID = 3, // persistent id for this instance of the device + BusQueryDeviceSerialNumber = 4 // serial number for this device +} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; + +typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; + +#define PNP_DEVICE_DISABLED 0x00000001 +#define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 +#define PNP_DEVICE_FAILED 0x00000004 +#define PNP_DEVICE_REMOVED 0x00000008 +#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 +#define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 + +typedef enum { + DeviceTextDescription = 0, // DeviceDesc property + DeviceTextLocationInformation = 1 // DeviceLocation property +} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; + +// +// Define I/O Request Packet (IRP) stack locations +// + +#if !defined(_AMD64_) && !defined(_IA64_) +#include "pshpack4.h" +#endif + +// begin_ntndis + +#if defined(_WIN64) +#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8) +#else +#define POINTER_ALIGNMENT +#endif + +// end_ntndis + +typedef struct _IO_STACK_LOCATION { + UCHAR MajorFunction; + UCHAR MinorFunction; + UCHAR Flags; + UCHAR Control; + + // + // The following user parameters are based on the service that is being + // invoked. Drivers and file systems can determine which set to use based + // on the above major and minor function codes. + // + + union { + + // + // System service parameters for: NtCreateFile + // + + struct { + PIO_SECURITY_CONTEXT SecurityContext; + ULONG Options; + USHORT POINTER_ALIGNMENT FileAttributes; + USHORT ShareAccess; + ULONG POINTER_ALIGNMENT EaLength; + } Create; + + + // + // System service parameters for: NtReadFile + // + + struct { + ULONG Length; + ULONG POINTER_ALIGNMENT Key; + LARGE_INTEGER ByteOffset; + } Read; + + // + // System service parameters for: NtWriteFile + // + + struct { + ULONG Length; + ULONG POINTER_ALIGNMENT Key; + LARGE_INTEGER ByteOffset; + } Write; + +// end_ntddk end_wdm end_nthal + + // + // System service parameters for: NtQueryDirectoryFile + // + + struct { + ULONG Length; + PSTRING FileName; + FILE_INFORMATION_CLASS FileInformationClass; + ULONG POINTER_ALIGNMENT FileIndex; + } QueryDirectory; + + // + // System service parameters for: NtNotifyChangeDirectoryFile + // + + struct { + ULONG Length; + ULONG POINTER_ALIGNMENT CompletionFilter; + } NotifyDirectory; + +// begin_ntddk begin_wdm begin_nthal + + // + // System service parameters for: NtQueryInformationFile + // + + struct { + ULONG Length; + FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; + } QueryFile; + + // + // System service parameters for: NtSetInformationFile + // + + struct { + ULONG Length; + FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; + PFILE_OBJECT FileObject; + union { + struct { + BOOLEAN ReplaceIfExists; + BOOLEAN AdvanceOnly; + }; + ULONG ClusterCount; + HANDLE DeleteHandle; + }; + } SetFile; + +// end_ntddk end_wdm end_nthal end_ntosp + + // + // System service parameters for: NtQueryEaFile + // + + struct { + ULONG Length; + PVOID EaList; + ULONG EaListLength; + ULONG POINTER_ALIGNMENT EaIndex; + } QueryEa; + + // + // System service parameters for: NtSetEaFile + // + + struct { + ULONG Length; + } SetEa; + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + + // + // System service parameters for: NtQueryVolumeInformationFile + // + + struct { + ULONG Length; + FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; + } QueryVolume; + +// end_ntddk end_wdm end_nthal end_ntosp + + // + // System service parameters for: NtSetVolumeInformationFile + // + + struct { + ULONG Length; + FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; + } SetVolume; +// begin_ntosp + // + // System service parameters for: NtFsControlFile + // + // Note that the user's output buffer is stored in the UserBuffer field + // and the user's input buffer is stored in the SystemBuffer field. + // + + struct { + ULONG OutputBufferLength; + ULONG POINTER_ALIGNMENT InputBufferLength; + ULONG POINTER_ALIGNMENT FsControlCode; + PVOID Type3InputBuffer; + } FileSystemControl; + // + // System service parameters for: NtLockFile/NtUnlockFile + // + + struct { + PLARGE_INTEGER Length; + ULONG POINTER_ALIGNMENT Key; + LARGE_INTEGER ByteOffset; + } LockControl; + +// begin_ntddk begin_wdm begin_nthal + + // + // System service parameters for: NtFlushBuffersFile + // + // No extra user-supplied parameters. + // + +// end_ntddk end_wdm end_nthal +// end_ntosp + + // + // System service parameters for: NtCancelIoFile + // + // No extra user-supplied parameters. + // + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + + // + // System service parameters for: NtDeviceIoControlFile + // + // Note that the user's output buffer is stored in the UserBuffer field + // and the user's input buffer is stored in the SystemBuffer field. + // + + struct { + ULONG OutputBufferLength; + ULONG POINTER_ALIGNMENT InputBufferLength; + ULONG POINTER_ALIGNMENT IoControlCode; + PVOID Type3InputBuffer; + } DeviceIoControl; + +// end_wdm + // + // System service parameters for: NtQuerySecurityObject + // + + struct { + SECURITY_INFORMATION SecurityInformation; + ULONG POINTER_ALIGNMENT Length; + } QuerySecurity; + + // + // System service parameters for: NtSetSecurityObject + // + + struct { + SECURITY_INFORMATION SecurityInformation; + PSECURITY_DESCRIPTOR SecurityDescriptor; + } SetSecurity; + +// begin_wdm + // + // Non-system service parameters. + // + // Parameters for MountVolume + // + + struct { + PVPB Vpb; + PDEVICE_OBJECT DeviceObject; + } MountVolume; + + // + // Parameters for VerifyVolume + // + + struct { + PVPB Vpb; + PDEVICE_OBJECT DeviceObject; + } VerifyVolume; + + // + // Parameters for Scsi with internal device contorl. + // + + struct { + struct _SCSI_REQUEST_BLOCK *Srb; + } Scsi; + +// end_ntddk end_wdm end_nthal end_ntosp + + // + // System service parameters for: NtQueryQuotaInformationFile + // + + struct { + ULONG Length; + PSID StartSid; + PFILE_GET_QUOTA_INFORMATION SidList; + ULONG SidListLength; + } QueryQuota; + + // + // System service parameters for: NtSetQuotaInformationFile + // + + struct { + ULONG Length; + } SetQuota; + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + + // + // Parameters for IRP_MN_QUERY_DEVICE_RELATIONS + // + + struct { + DEVICE_RELATION_TYPE Type; + } QueryDeviceRelations; + + // + // Parameters for IRP_MN_QUERY_INTERFACE + // + + struct { + CONST GUID *InterfaceType; + USHORT Size; + USHORT Version; + PINTERFACE Interface; + PVOID InterfaceSpecificData; + } QueryInterface; + + // + // Parameters for Cleanup + // + // No extra parameters supplied + // + + // + // WMI Irps + // + + struct { + ULONG_PTR ProviderId; + PVOID DataPath; + ULONG BufferSize; + PVOID Buffer; + } WMI; + + // + // Others - driver-specific + // + + struct { + PVOID Argument1; + PVOID Argument2; + PVOID Argument3; + PVOID Argument4; + } Others; + + } Parameters; + + // + // Save a pointer to this device driver's device object for this request + // so it can be passed to the completion routine if needed. + // + + PDEVICE_OBJECT DeviceObject; + + // + // The following location contains a pointer to the file object for this + // + + PFILE_OBJECT FileObject; + + // + // The following routine is invoked depending on the flags in the above + // flags field. + // + + PIO_COMPLETION_ROUTINE CompletionRoutine; + + // + // The following is used to store the address of the context parameter + // that should be passed to the CompletionRoutine. + // + + PVOID Context; + +} IO_STACK_LOCATION, *PIO_STACK_LOCATION; +#if !defined(_AMD64_) && !defined(_IA64_) +#include "poppack.h" +#endif + +// +// Define the share access structure used by file systems to determine +// whether or not another accessor may open the file. +// + +typedef struct _SHARE_ACCESS { + ULONG OpenCount; + ULONG Readers; + ULONG Writers; + ULONG Deleters; + ULONG SharedRead; + ULONG SharedWrite; + ULONG SharedDelete; +} SHARE_ACCESS, *PSHARE_ACCESS; + +// end_wdm + +// +// The following structure is used by drivers that are initializing to +// determine the number of devices of a particular type that have already +// been initialized. It is also used to track whether or not the AtDisk +// address range has already been claimed. Finally, it is used by the +// NtQuerySystemInformation system service to return device type counts. +// + +typedef struct _CONFIGURATION_INFORMATION { + + // + // This field indicates the total number of disks in the system. This + // number should be used by the driver to determine the name of new + // disks. This field should be updated by the driver as it finds new + // disks. + // + + ULONG DiskCount; // Count of hard disks thus far + ULONG FloppyCount; // Count of floppy disks thus far + ULONG CdRomCount; // Count of CD-ROM drives thus far + ULONG TapeCount; // Count of tape drives thus far + ULONG ScsiPortCount; // Count of SCSI port adapters thus far + ULONG SerialCount; // Count of serial devices thus far + ULONG ParallelCount; // Count of parallel devices thus far + + // + // These next two fields indicate ownership of one of the two IO address + // spaces that are used by WD1003-compatable disk controllers. + // + + BOOLEAN AtDiskPrimaryAddressClaimed; // 0x1F0 - 0x1FF + BOOLEAN AtDiskSecondaryAddressClaimed; // 0x170 - 0x17F + + // + // Indicates the structure version, as anything value belong this will have been added. + // Use the structure size as the version. + // + + ULONG Version; + + // + // Indicates the total number of medium changer devices in the system. + // This field will be updated by the drivers as it determines that + // new devices have been found and will be supported. + // + + ULONG MediumChangerCount; + +} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; + +// end_ntddk end_nthal end_ntosp + +// +// The following are global counters used by the I/O system to indicate the +// amount of I/O being performed in the system. The first three counters +// are just that, counts of operations that have been requested, while the +// last three counters track the amount of data transferred for each type +// of I/O request. +// + +extern KSPIN_LOCK IoStatisticsLock; +extern ULONG IoReadOperationCount; +extern ULONG IoWriteOperationCount; +extern ULONG IoOtherOperationCount; +extern LARGE_INTEGER IoReadTransferCount; +extern LARGE_INTEGER IoWriteTransferCount; +extern LARGE_INTEGER IoOtherTransferCount; + +// +// It is difficult for cached file systems to properly charge quota +// for the storage that they allocate on behalf of user file handles, +// so the following amount of additional quota is charged against each +// handle as a "best guess" as to the amount of quota the file system +// will allocate on behalf of this handle. +// + +// +// These numbers are totally arbitrary, and can be changed if it turns out +// that the file systems actually allocate more (or less) on behalf of +// their file objects. The non-paged pool charge constant is added to the +// size of a FILE_OBJECT to get the actual charge amount. +// + +#define IO_FILE_OBJECT_NON_PAGED_POOL_CHARGE 64 +#define IO_FILE_OBJECT_PAGED_POOL_CHARGE 1024 + + +// begin_ntddk begin_wdm begin_nthal begin_ntosp +// +// Public I/O routine definitions +// + +NTKERNELAPI +VOID +IoAcquireCancelSpinLock( + OUT PKIRQL Irql + ); + +// end_ntddk end_wdm end_nthal end_ntosp + +NTKERNELAPI +VOID +IoAcquireVpbSpinLock( + OUT PKIRQL Irql + ); + + +NTKERNELAPI +PVOID +IoAllocateErrorLogEntry( + IN PVOID IoObject, + IN UCHAR EntrySize + ); + +NTKERNELAPI +PIRP +IoAllocateIrp( + IN CCHAR StackSize, + IN BOOLEAN ChargeQuota + ); + +NTKERNELAPI +PMDL +IoAllocateMdl( + IN PVOID VirtualAddress, + IN ULONG Length, + IN BOOLEAN SecondaryBuffer, + IN BOOLEAN ChargeQuota, + IN OUT PIRP Irp OPTIONAL + ); + + +NTKERNELAPI +NTSTATUS +IoAttachDevice( + IN PDEVICE_OBJECT SourceDevice, + IN PUNICODE_STRING TargetDevice, + OUT PDEVICE_OBJECT *AttachedDevice + ); + +// end_wdm + +DECLSPEC_DEPRECATED_DDK // Use IoAttachDeviceToDeviceStack +NTKERNELAPI +NTSTATUS +IoAttachDeviceByPointer( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice + ); + +// begin_wdm + +NTKERNELAPI +PDEVICE_OBJECT +IoAttachDeviceToDeviceStack( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice + ); + +NTKERNELAPI +PIRP +IoBuildAsynchronousFsdRequest( + IN ULONG MajorFunction, + IN PDEVICE_OBJECT DeviceObject, + IN OUT PVOID Buffer OPTIONAL, + IN ULONG Length OPTIONAL, + IN PLARGE_INTEGER StartingOffset OPTIONAL, + IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL + ); + +NTKERNELAPI +PIRP +IoBuildDeviceIoControlRequest( + IN ULONG IoControlCode, + IN PDEVICE_OBJECT DeviceObject, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength, + IN BOOLEAN InternalDeviceIoControl, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + +NTKERNELAPI +VOID +IoBuildPartialMdl( + IN PMDL SourceMdl, + IN OUT PMDL TargetMdl, + IN PVOID VirtualAddress, + IN ULONG Length + ); + +typedef struct _BOOTDISK_INFORMATION { + LONGLONG BootPartitionOffset; + LONGLONG SystemPartitionOffset; + ULONG BootDeviceSignature; + ULONG SystemDeviceSignature; +} BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; + +// +// This structure should follow the previous structure field for field. +// +typedef struct _BOOTDISK_INFORMATION_EX { + LONGLONG BootPartitionOffset; + LONGLONG SystemPartitionOffset; + ULONG BootDeviceSignature; + ULONG SystemDeviceSignature; + GUID BootDeviceGuid; + GUID SystemDeviceGuid; + BOOLEAN BootDeviceIsGpt; + BOOLEAN SystemDeviceIsGpt; +} BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; + +NTKERNELAPI +NTSTATUS +IoGetBootDiskInformation( + IN OUT PBOOTDISK_INFORMATION BootDiskInformation, + IN ULONG Size + ); + + +NTKERNELAPI +PIRP +IoBuildSynchronousFsdRequest( + IN ULONG MajorFunction, + IN PDEVICE_OBJECT DeviceObject, + IN OUT PVOID Buffer OPTIONAL, + IN ULONG Length OPTIONAL, + IN PLARGE_INTEGER StartingOffset OPTIONAL, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + +NTKERNELAPI +NTSTATUS +FASTCALL +IofCallDriver( + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp + ); + +#define IoCallDriver(a,b) \ + IofCallDriver(a,b) + +NTKERNELAPI +BOOLEAN +IoCancelIrp( + IN PIRP Irp + ); + + +NTKERNELAPI +NTSTATUS +IoCheckDesiredAccess( + IN OUT PACCESS_MASK DesiredAccess, + IN ACCESS_MASK GrantedAccess + ); + +NTKERNELAPI +NTSTATUS +IoCheckEaBufferValidity( + IN PFILE_FULL_EA_INFORMATION EaBuffer, + IN ULONG EaLength, + OUT PULONG ErrorOffset + ); + +NTKERNELAPI +NTSTATUS +IoCheckFunctionAccess( + IN ACCESS_MASK GrantedAccess, + IN UCHAR MajorFunction, + IN UCHAR MinorFunction, + IN ULONG IoControlCode, + IN PVOID Arg1 OPTIONAL, + IN PVOID Arg2 OPTIONAL + ); + + +NTKERNELAPI +NTSTATUS +IoCheckQuerySetFileInformation( + IN FILE_INFORMATION_CLASS FileInformationClass, + IN ULONG Length, + IN BOOLEAN SetOperation + ); + +NTKERNELAPI +NTSTATUS +IoCheckQuerySetVolumeInformation( + IN FS_INFORMATION_CLASS FsInformationClass, + IN ULONG Length, + IN BOOLEAN SetOperation + ); + + +NTKERNELAPI +NTSTATUS +IoCheckQuotaBufferValidity( + IN PFILE_QUOTA_INFORMATION QuotaBuffer, + IN ULONG QuotaLength, + OUT PULONG ErrorOffset + ); + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + +NTKERNELAPI +NTSTATUS +IoCheckShareAccess( + IN ACCESS_MASK DesiredAccess, + IN ULONG DesiredShareAccess, + IN OUT PFILE_OBJECT FileObject, + IN OUT PSHARE_ACCESS ShareAccess, + IN BOOLEAN Update + ); + +// +// This value should be returned from completion routines to continue +// completing the IRP upwards. Otherwise, STATUS_MORE_PROCESSING_REQUIRED +// should be returned. +// +#define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS + +// +// Completion routines can also use this enumeration in place of status codes. +// +typedef enum _IO_COMPLETION_ROUTINE_RESULT { + + ContinueCompletion = STATUS_CONTINUE_COMPLETION, + StopCompletion = STATUS_MORE_PROCESSING_REQUIRED + +} IO_COMPLETION_ROUTINE_RESULT, *PIO_COMPLETION_ROUTINE_RESULT; + +NTKERNELAPI +VOID +FASTCALL +IofCompleteRequest( + IN PIRP Irp, + IN CCHAR PriorityBoost + ); + +#define IoCompleteRequest(a,b) \ + IofCompleteRequest(a,b) + + +NTKERNELAPI +NTSTATUS +IoCreateDevice( + IN PDRIVER_OBJECT DriverObject, + IN ULONG DeviceExtensionSize, + IN PUNICODE_STRING DeviceName OPTIONAL, + IN DEVICE_TYPE DeviceType, + IN ULONG DeviceCharacteristics, + IN BOOLEAN Exclusive, + OUT PDEVICE_OBJECT *DeviceObject + ); + +#define WDM_MAJORVERSION 0x01 +#define WDM_MINORVERSION 0x20 + +NTKERNELAPI +BOOLEAN +IoIsWdmVersionAvailable( + IN UCHAR MajorVersion, + IN UCHAR MinorVersion + ); + +// end_nthal + +NTKERNELAPI +NTSTATUS +IoCreateFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG Disposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength, + IN CREATE_FILE_TYPE CreateFileType, + IN PVOID ExtraCreateParameters OPTIONAL, + IN ULONG Options + ); + +// end_ntddk end_wdm end_ntosp + +NTKERNELAPI +PFILE_OBJECT +IoCreateStreamFileObject( + IN PFILE_OBJECT FileObject OPTIONAL, + IN PDEVICE_OBJECT DeviceObject OPTIONAL + ); + +NTKERNELAPI +PFILE_OBJECT +IoCreateStreamFileObjectEx( + IN PFILE_OBJECT FileObject OPTIONAL, + IN PDEVICE_OBJECT DeviceObject OPTIONAL, + OUT PHANDLE FileObjectHandle OPTIONAL + ); + +NTKERNELAPI +PFILE_OBJECT +IoCreateStreamFileObjectLite( + IN PFILE_OBJECT FileObject OPTIONAL, + IN PDEVICE_OBJECT DeviceObject OPTIONAL + ); + +// begin_nthal begin_ntddk begin_wdm begin_ntosp + +NTKERNELAPI +PKEVENT +IoCreateNotificationEvent( + IN PUNICODE_STRING EventName, + OUT PHANDLE EventHandle + ); + +NTKERNELAPI +NTSTATUS +IoCreateSymbolicLink( + IN PUNICODE_STRING SymbolicLinkName, + IN PUNICODE_STRING DeviceName + ); + +NTKERNELAPI +PKEVENT +IoCreateSynchronizationEvent( + IN PUNICODE_STRING EventName, + OUT PHANDLE EventHandle + ); + +NTKERNELAPI +NTSTATUS +IoCreateUnprotectedSymbolicLink( + IN PUNICODE_STRING SymbolicLinkName, + IN PUNICODE_STRING DeviceName + ); + +// end_wdm + +//++ +// +// VOID +// IoDeassignArcName( +// IN PUNICODE_STRING ArcName +// ) +// +// Routine Description: +// +// This routine is invoked by drivers to deassign an ARC name that they +// created to a device. This is generally only called if the driver is +// deleting the device object, which means that the driver is probably +// unloading. +// +// Arguments: +// +// ArcName - Supplies the ARC name to be removed. +// +// Return Value: +// +// None. +// +//-- + +#define IoDeassignArcName( ArcName ) ( \ + IoDeleteSymbolicLink( (ArcName) ) ) + + +NTKERNELAPI +VOID +IoDeleteDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +NTSTATUS +IoDeleteSymbolicLink( + IN PUNICODE_STRING SymbolicLinkName + ); + +NTKERNELAPI +VOID +IoDetachDevice( + IN OUT PDEVICE_OBJECT TargetDevice + ); + +NTKERNELAPI +BOOLEAN +IoFastQueryNetworkAttributes( + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ACCESS_MASK DesiredAccess, + IN ULONG OpenOptions, + OUT PIO_STATUS_BLOCK IoStatus, + OUT PFILE_NETWORK_OPEN_INFORMATION Buffer + ); + +NTKERNELAPI +VOID +IoFreeIrp( + IN PIRP Irp + ); + +NTKERNELAPI +VOID +IoFreeMdl( + IN PMDL Mdl + ); + + +NTKERNELAPI +PDEVICE_OBJECT +IoGetAttachedDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI // ntddk wdm nthal +PDEVICE_OBJECT // ntddk wdm nthal +IoGetAttachedDeviceReference( // ntddk wdm nthal + IN PDEVICE_OBJECT DeviceObject // ntddk wdm nthal + ); // ntddk wdm nthal + // ntddk wdm nthal +NTKERNELAPI +PDEVICE_OBJECT +IoGetBaseFileSystemDeviceObject( + IN PFILE_OBJECT FileObject + ); + +NTKERNELAPI // ntddk nthal ntosp +PCONFIGURATION_INFORMATION // ntddk nthal ntosp +IoGetConfigurationInformation( VOID ); // ntddk nthal ntosp + +// begin_ntddk begin_wdm begin_nthal + +//++ +// +// PIO_STACK_LOCATION +// IoGetCurrentIrpStackLocation( +// IN PIRP Irp +// ) +// +// Routine Description: +// +// This routine is invoked to return a pointer to the current stack location +// in an I/O Request Packet (IRP). +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet. +// +// Return Value: +// +// The function value is a pointer to the current stack location in the +// packet. +// +//-- + +#define IoGetCurrentIrpStackLocation( Irp ) ( (Irp)->Tail.Overlay.CurrentStackLocation ) + +// end_nthal end_wdm + +NTKERNELAPI +PDEVICE_OBJECT +IoGetDeviceToVerify( + IN PETHREAD Thread + ); + +// begin_wdm + +NTKERNELAPI +PVOID +IoGetDriverObjectExtension( + IN PDRIVER_OBJECT DriverObject, + IN PVOID ClientIdentificationAddress + ); + +NTKERNELAPI +PEPROCESS +IoGetCurrentProcess( + VOID + ); + +// begin_nthal + +NTKERNELAPI +NTSTATUS +IoGetDeviceObjectPointer( + IN PUNICODE_STRING ObjectName, + IN ACCESS_MASK DesiredAccess, + OUT PFILE_OBJECT *FileObject, + OUT PDEVICE_OBJECT *DeviceObject + ); + +NTKERNELAPI +struct _DMA_ADAPTER * +IoGetDmaAdapter( + IN PDEVICE_OBJECT PhysicalDeviceObject, OPTIONAL // required for PnP drivers + IN struct _DEVICE_DESCRIPTION *DeviceDescription, + IN OUT PULONG NumberOfMapRegisters + ); + +NTKERNELAPI +BOOLEAN +IoForwardIrpSynchronously( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +#define IoForwardAndCatchIrp IoForwardIrpSynchronously + +// end_wdm + +NTKERNELAPI +PGENERIC_MAPPING +IoGetFileObjectGenericMapping( + VOID + ); + +// end_nthal + + +// begin_wdm + +//++ +// +// ULONG +// IoGetFunctionCodeFromCtlCode( +// IN ULONG ControlCode +// ) +// +// Routine Description: +// +// This routine extracts the function code from IOCTL and FSCTL function +// control codes. +// This routine should only be used by kernel mode code. +// +// Arguments: +// +// ControlCode - A function control code (IOCTL or FSCTL) from which the +// function code must be extracted. +// +// Return Value: +// +// The extracted function code. +// +// Note: +// +// The CTL_CODE macro, used to create IOCTL and FSCTL function control +// codes, is defined in ntioapi.h +// +//-- + +#define IoGetFunctionCodeFromCtlCode( ControlCode ) (\ + ( ControlCode >> 2) & 0x00000FFF ) + +// begin_nthal + +NTKERNELAPI +PVOID +IoGetInitialStack( + VOID + ); + +NTKERNELAPI +VOID +IoGetStackLimits ( + OUT PULONG_PTR LowLimit, + OUT PULONG_PTR HighLimit + ); + +// +// The following function is used to tell the caller how much stack is available +// + +FORCEINLINE +ULONG_PTR +IoGetRemainingStackSize ( + VOID + ) +{ + ULONG_PTR Top; + ULONG_PTR Bottom; + + IoGetStackLimits( &Bottom, &Top ); + return((ULONG_PTR)(&Top) - Bottom ); +} + +//++ +// +// PIO_STACK_LOCATION +// IoGetNextIrpStackLocation( +// IN PIRP Irp +// ) +// +// Routine Description: +// +// This routine is invoked to return a pointer to the next stack location +// in an I/O Request Packet (IRP). +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet. +// +// Return Value: +// +// The function value is a pointer to the next stack location in the packet. +// +//-- + +#define IoGetNextIrpStackLocation( Irp ) (\ + (Irp)->Tail.Overlay.CurrentStackLocation - 1 ) + +NTKERNELAPI +PDEVICE_OBJECT +IoGetRelatedDeviceObject( + IN PFILE_OBJECT FileObject + ); + +// end_ntddk end_wdm end_nthal + +NTKERNELAPI +ULONG +IoGetRequestorProcessId( + IN PIRP Irp + ); + +NTKERNELAPI +PEPROCESS +IoGetRequestorProcess( + IN PIRP Irp + ); + +// end_ntosp + +NTKERNELAPI +PIRP +IoGetTopLevelIrp( + VOID + ); + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + +//++ +// +// VOID +// IoInitializeDpcRequest( +// IN PDEVICE_OBJECT DeviceObject, +// IN PIO_DPC_ROUTINE DpcRoutine +// ) +// +// Routine Description: +// +// This routine is invoked to initialize the DPC in a device object for a +// device driver during its initialization routine. The DPC is used later +// when the driver interrupt service routine requests that a DPC routine +// be queued for later execution. +// +// Arguments: +// +// DeviceObject - Pointer to the device object that the request is for. +// +// DpcRoutine - Address of the driver's DPC routine to be executed when +// the DPC is dequeued for processing. +// +// Return Value: +// +// None. +// +//-- + +#define IoInitializeDpcRequest( DeviceObject, DpcRoutine ) (\ + KeInitializeDpc( &(DeviceObject)->Dpc, \ + (PKDEFERRED_ROUTINE) (DpcRoutine), \ + (DeviceObject) ) ) + +NTKERNELAPI +VOID +IoInitializeIrp( + IN OUT PIRP Irp, + IN USHORT PacketSize, + IN CCHAR StackSize + ); + +NTKERNELAPI +NTSTATUS +IoInitializeTimer( + IN PDEVICE_OBJECT DeviceObject, + IN PIO_TIMER_ROUTINE TimerRoutine, + IN PVOID Context + ); + + +NTKERNELAPI +VOID +IoReuseIrp( + IN OUT PIRP Irp, + IN NTSTATUS Iostatus + ); + +// end_wdm + +NTKERNELAPI +VOID +IoCancelFileOpen( + IN PDEVICE_OBJECT DeviceObject, + IN PFILE_OBJECT FileObject + ); + +//++ +// +// BOOLEAN +// IoIsErrorUserInduced( +// IN NTSTATUS Status +// ) +// +// Routine Description: +// +// This routine is invoked to determine if an error was as a +// result of user actions. Typically these error are related +// to removable media and will result in a pop-up. +// +// Arguments: +// +// Status - The status value to check. +// +// Return Value: +// The function value is TRUE if the user induced the error, +// otherwise FALSE is returned. +// +//-- +#define IoIsErrorUserInduced( Status ) ((BOOLEAN) \ + (((Status) == STATUS_DEVICE_NOT_READY) || \ + ((Status) == STATUS_IO_TIMEOUT) || \ + ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \ + ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \ + ((Status) == STATUS_VERIFY_REQUIRED) || \ + ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \ + ((Status) == STATUS_WRONG_VOLUME))) + +// end_ntddk end_wdm end_nthal end_ntosp + +//++ +// +// BOOLEAN +// IoIsFileOpenedExclusively( +// IN PFILE_OBJECT FileObject +// ) +// +// Routine Description: +// +// This routine is invoked to determine whether the file open represented +// by the specified file object is opened exclusively. +// +// Arguments: +// +// FileObject - Pointer to the file object that represents the open instance +// of the target file to be tested for exclusive access. +// +// Return Value: +// +// The function value is TRUE if the open instance of the file is exclusive; +// otherwise FALSE is returned. +// +//-- + +#define IoIsFileOpenedExclusively( FileObject ) (\ + (BOOLEAN) !((FileObject)->SharedRead || (FileObject)->SharedWrite || (FileObject)->SharedDelete)) + +NTKERNELAPI +BOOLEAN +IoIsOperationSynchronous( + IN PIRP Irp + ); + +NTKERNELAPI +BOOLEAN +IoIsSystemThread( + IN PETHREAD Thread + ); + +NTKERNELAPI +BOOLEAN +IoIsValidNameGraftingBuffer( + IN PIRP Irp, + IN PREPARSE_DATA_BUFFER ReparseBuffer + ); + +// begin_ntddk begin_nthal begin_ntosp + +NTKERNELAPI +PIRP +IoMakeAssociatedIrp( + IN PIRP Irp, + IN CCHAR StackSize + ); + +// begin_wdm + +//++ +// +// VOID +// IoMarkIrpPending( +// IN OUT PIRP Irp +// ) +// +// Routine Description: +// +// This routine marks the specified I/O Request Packet (IRP) to indicate +// that an initial status of STATUS_PENDING was returned to the caller. +// This is used so that I/O completion can determine whether or not to +// fully complete the I/O operation requested by the packet. +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet to be marked pending. +// +// Return Value: +// +// None. +// +//-- + +#define IoMarkIrpPending( Irp ) ( \ + IoGetCurrentIrpStackLocation( (Irp) )->Control |= SL_PENDING_RETURNED ) + +NTKERNELAPI +NTSTATUS +IoPageRead( + IN PFILE_OBJECT FileObject, + IN PMDL MemoryDescriptorList, + IN PLARGE_INTEGER StartingOffset, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + +NTSTATUS +IoQueryFileDosDeviceName( + IN PFILE_OBJECT FileObject, + OUT POBJECT_NAME_INFORMATION *ObjectNameInformation + ); + +NTKERNELAPI +NTSTATUS +IoQueryFileInformation( + IN PFILE_OBJECT FileObject, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN ULONG Length, + OUT PVOID FileInformation, + OUT PULONG ReturnedLength + ); + +NTKERNELAPI +NTSTATUS +IoQueryVolumeInformation( + IN PFILE_OBJECT FileObject, + IN FS_INFORMATION_CLASS FsInformationClass, + IN ULONG Length, + OUT PVOID FsInformation, + OUT PULONG ReturnedLength + ); + +// begin_ntosp +NTKERNELAPI +VOID +IoQueueThreadIrp( + IN PIRP Irp + ); +// end_ntosp + +// begin_ntddk begin_nthal begin_ntosp + +NTKERNELAPI +VOID +IoRaiseHardError( + IN PIRP Irp, + IN PVPB Vpb OPTIONAL, + IN PDEVICE_OBJECT RealDeviceObject + ); + +NTKERNELAPI +BOOLEAN +IoRaiseInformationalHardError( + IN NTSTATUS ErrorStatus, + IN PUNICODE_STRING String OPTIONAL, + IN PKTHREAD Thread OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +IoSetThreadHardErrorMode( + IN BOOLEAN EnableHardErrors + ); + +NTKERNELAPI +VOID +IoRegisterBootDriverReinitialization( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, + IN PVOID Context + ); + +NTKERNELAPI +VOID +IoRegisterDriverReinitialization( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, + IN PVOID Context + ); + +// end_ntddk end_nthal end_ntosp + +NTKERNELAPI +VOID +IoRegisterFileSystem( + IN OUT PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +NTSTATUS +IoRegisterFsRegistrationChange( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine + ); + +// begin_ntddk begin_nthal begin_ntosp + +NTKERNELAPI +NTSTATUS +IoRegisterShutdownNotification( + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +NTSTATUS +IoRegisterLastChanceShutdownNotification( + IN PDEVICE_OBJECT DeviceObject + ); + +// begin_wdm + +NTKERNELAPI +VOID +IoReleaseCancelSpinLock( + IN KIRQL Irql + ); + +// end_ntddk end_nthal end_wdm end_ntosp + +NTKERNELAPI +VOID +IoReleaseVpbSpinLock( + IN KIRQL Irql + ); + +// begin_ntddk begin_nthal begin_ntosp + +NTKERNELAPI +VOID +IoRemoveShareAccess( + IN PFILE_OBJECT FileObject, + IN OUT PSHARE_ACCESS ShareAccess + ); + + +DECLSPEC_DEPRECATED_DDK // Use IoReportResourceForDetection +NTKERNELAPI +NTSTATUS +IoReportResourceUsage( + IN PUNICODE_STRING DriverClassName OPTIONAL, + IN PDRIVER_OBJECT DriverObject, + IN PCM_RESOURCE_LIST DriverList OPTIONAL, + IN ULONG DriverListSize OPTIONAL, + IN PDEVICE_OBJECT DeviceObject, + IN PCM_RESOURCE_LIST DeviceList OPTIONAL, + IN ULONG DeviceListSize OPTIONAL, + IN BOOLEAN OverrideConflict, + OUT PBOOLEAN ConflictDetected + ); + +// begin_wdm + +//++ +// +// VOID +// IoRequestDpc( +// IN PDEVICE_OBJECT DeviceObject, +// IN PIRP Irp, +// IN PVOID Context +// ) +// +// Routine Description: +// +// This routine is invoked by the device driver's interrupt service routine +// to request that a DPC routine be queued for later execution at a lower +// IRQL. +// +// Arguments: +// +// DeviceObject - Device object for which the request is being processed. +// +// Irp - Pointer to the current I/O Request Packet (IRP) for the specified +// device. +// +// Context - Provides a general context parameter to be passed to the +// DPC routine. +// +// Return Value: +// +// None. +// +//-- + +#define IoRequestDpc( DeviceObject, Irp, Context ) ( \ + KeInsertQueueDpc( &(DeviceObject)->Dpc, (Irp), (Context) ) ) + +//++ +// +// PDRIVER_CANCEL +// IoSetCancelRoutine( +// IN PIRP Irp, +// IN PDRIVER_CANCEL CancelRoutine +// ) +// +// Routine Description: +// +// This routine is invoked to set the address of a cancel routine which +// is to be invoked when an I/O packet has been canceled. +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet itself. +// +// CancelRoutine - Address of the cancel routine that is to be invoked +// if the IRP is cancelled. +// +// Return Value: +// +// Previous value of CancelRoutine field in the IRP. +// +//-- + +#define IoSetCancelRoutine( Irp, NewCancelRoutine ) ( \ + (PDRIVER_CANCEL) InterlockedExchangePointer( (PVOID *) &(Irp)->CancelRoutine, (PVOID) (NewCancelRoutine) ) ) + +//++ +// +// VOID +// IoSetCompletionRoutine( +// IN PIRP Irp, +// IN PIO_COMPLETION_ROUTINE CompletionRoutine, +// IN PVOID Context, +// IN BOOLEAN InvokeOnSuccess, +// IN BOOLEAN InvokeOnError, +// IN BOOLEAN InvokeOnCancel +// ) +// +// Routine Description: +// +// This routine is invoked to set the address of a completion routine which +// is to be invoked when an I/O packet has been completed by a lower-level +// driver. +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet itself. +// +// CompletionRoutine - Address of the completion routine that is to be +// invoked once the next level driver completes the packet. +// +// Context - Specifies a context parameter to be passed to the completion +// routine. +// +// InvokeOnSuccess - Specifies that the completion routine is invoked when the +// operation is successfully completed. +// +// InvokeOnError - Specifies that the completion routine is invoked when the +// operation completes with an error status. +// +// InvokeOnCancel - Specifies that the completion routine is invoked when the +// operation is being canceled. +// +// Return Value: +// +// None. +// +//-- + +#define IoSetCompletionRoutine( Irp, Routine, CompletionContext, Success, Error, Cancel ) { \ + PIO_STACK_LOCATION __irpSp; \ + ASSERT( (Success) | (Error) | (Cancel) ? (Routine) != NULL : TRUE ); \ + __irpSp = IoGetNextIrpStackLocation( (Irp) ); \ + __irpSp->CompletionRoutine = (Routine); \ + __irpSp->Context = (CompletionContext); \ + __irpSp->Control = 0; \ + if ((Success)) { __irpSp->Control = SL_INVOKE_ON_SUCCESS; } \ + if ((Error)) { __irpSp->Control |= SL_INVOKE_ON_ERROR; } \ + if ((Cancel)) { __irpSp->Control |= SL_INVOKE_ON_CANCEL; } } + +NTSTATUS +IoSetCompletionRoutineEx( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PIO_COMPLETION_ROUTINE CompletionRoutine, + IN PVOID Context, + IN BOOLEAN InvokeOnSuccess, + IN BOOLEAN InvokeOnError, + IN BOOLEAN InvokeOnCancel + ); + + +// end_ntddk end_wdm end_nthal end_ntosp + +NTKERNELAPI +VOID +IoSetDeviceToVerify( + IN PETHREAD Thread, + IN PDEVICE_OBJECT DeviceObject + ); + +// begin_ntddk begin_nthal begin_ntosp + +NTKERNELAPI +VOID +IoSetHardErrorOrVerifyDevice( + IN PIRP Irp, + IN PDEVICE_OBJECT DeviceObject + ); + +// end_ntddk end_nthal + +NTKERNELAPI +NTSTATUS +IoSetInformation( + IN PFILE_OBJECT FileObject, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN ULONG Length, + IN PVOID FileInformation + ); + +// end_ntosp + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + +//++ +// +// VOID +// IoSetNextIrpStackLocation ( +// IN OUT PIRP Irp +// ) +// +// Routine Description: +// +// This routine is invoked to set the current IRP stack location to +// the next stack location, i.e. it "pushes" the stack. +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet (IRP). +// +// Return Value: +// +// None. +// +//-- + +#define IoSetNextIrpStackLocation( Irp ) { \ + (Irp)->CurrentLocation--; \ + (Irp)->Tail.Overlay.CurrentStackLocation--; } + +//++ +// +// VOID +// IoCopyCurrentIrpStackLocationToNext( +// IN PIRP Irp +// ) +// +// Routine Description: +// +// This routine is invoked to copy the IRP stack arguments and file +// pointer from the current IrpStackLocation to the next +// in an I/O Request Packet (IRP). +// +// If the caller wants to call IoCallDriver with a completion routine +// but does not wish to change the arguments otherwise, +// the caller first calls IoCopyCurrentIrpStackLocationToNext, +// then IoSetCompletionRoutine, then IoCallDriver. +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet. +// +// Return Value: +// +// None. +// +//-- + +#define IoCopyCurrentIrpStackLocationToNext( Irp ) { \ + PIO_STACK_LOCATION __irpSp; \ + PIO_STACK_LOCATION __nextIrpSp; \ + __irpSp = IoGetCurrentIrpStackLocation( (Irp) ); \ + __nextIrpSp = IoGetNextIrpStackLocation( (Irp) ); \ + RtlCopyMemory( __nextIrpSp, __irpSp, FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \ + __nextIrpSp->Control = 0; } + +//++ +// +// VOID +// IoSkipCurrentIrpStackLocation ( +// IN PIRP Irp +// ) +// +// Routine Description: +// +// This routine is invoked to increment the current stack location of +// a given IRP. +// +// If the caller wishes to call the next driver in a stack, and does not +// wish to change the arguments, nor does he wish to set a completion +// routine, then the caller first calls IoSkipCurrentIrpStackLocation +// and the calls IoCallDriver. +// +// Arguments: +// +// Irp - Pointer to the I/O Request Packet. +// +// Return Value: +// +// None +// +//-- + +#define IoSkipCurrentIrpStackLocation( Irp ) { \ + (Irp)->CurrentLocation++; \ + (Irp)->Tail.Overlay.CurrentStackLocation++; } + + +NTKERNELAPI +VOID +IoSetShareAccess( + IN ACCESS_MASK DesiredAccess, + IN ULONG DesiredShareAccess, + IN OUT PFILE_OBJECT FileObject, + OUT PSHARE_ACCESS ShareAccess + ); + +// end_ntddk end_wdm end_nthal end_ntosp + +NTKERNELAPI +VOID +IoSetTopLevelIrp( + IN PIRP Irp + ); + + +//++ +// +// USHORT +// IoSizeOfIrp( +// IN CCHAR StackSize +// ) +// +// Routine Description: +// +// Determines the size of an IRP given the number of stack locations +// the IRP will have. +// +// Arguments: +// +// StackSize - Number of stack locations for the IRP. +// +// Return Value: +// +// Size in bytes of the IRP. +// +//-- + +#define IoSizeOfIrp( StackSize ) \ + ((USHORT) (sizeof( IRP ) + ((StackSize) * (sizeof( IO_STACK_LOCATION ))))) + + +NTKERNELAPI +VOID +IoStartTimer( + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +VOID +IoStopTimer( + IN PDEVICE_OBJECT DeviceObject + ); + +// end_ntddk end_wdm end_nthal end_ntosp + +NTKERNELAPI +NTSTATUS +IoSynchronousPageWrite( + IN PFILE_OBJECT FileObject, + IN PMDL MemoryDescriptorList, + IN PLARGE_INTEGER StartingOffset, + IN PKEVENT Event, + OUT PIO_STATUS_BLOCK IoStatusBlock + ); + +// begin_ntosp + +NTKERNELAPI +PEPROCESS +IoThreadToProcess( + IN PETHREAD Thread + ); + +// end_ntosp + +NTKERNELAPI +VOID +IoUnregisterFileSystem( + IN OUT PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +VOID +IoUnregisterFsRegistrationChange( + IN PDRIVER_OBJECT DriverObject, + IN PDRIVER_FS_NOTIFICATION DriverNotificationRoutine + ); + +// begin_ntddk begin_wdm begin_nthal begin_ntosp + +NTKERNELAPI +VOID +IoUnregisterShutdownNotification( + IN PDEVICE_OBJECT DeviceObject + ); + +// end_wdm + +NTKERNELAPI +VOID +IoUpdateShareAccess( + IN PFILE_OBJECT FileObject, + IN OUT PSHARE_ACCESS ShareAccess + ); + +// end_ntddk end_nthal + +NTKERNELAPI +NTSTATUS +IoVerifyVolume( + IN PDEVICE_OBJECT DeviceObject, + IN BOOLEAN AllowRawMount + ); + + +NTKERNELAPI // ntddk wdm nthal +VOID // ntddk wdm nthal +IoWriteErrorLogEntry( // ntddk wdm nthal + IN PVOID ElEntry // ntddk wdm nthal + ); // ntddk wdm nthal + + +typedef struct _IO_WORKITEM *PIO_WORKITEM; + +typedef +VOID +(*PIO_WORKITEM_ROUTINE) ( + IN PDEVICE_OBJECT DeviceObject, + IN PVOID Context + ); + +PIO_WORKITEM +IoAllocateWorkItem( + PDEVICE_OBJECT DeviceObject + ); + +VOID +IoFreeWorkItem( + PIO_WORKITEM IoWorkItem + ); + +VOID +IoQueueWorkItem( + IN PIO_WORKITEM IoWorkItem, + IN PIO_WORKITEM_ROUTINE WorkerRoutine, + IN WORK_QUEUE_TYPE QueueType, + IN PVOID Context + ); + + +NTKERNELAPI +NTSTATUS +IoWMIRegistrationControl( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG Action +); + +// +// Action code for IoWMIRegistrationControl api +// + +#define WMIREG_ACTION_REGISTER 1 +#define WMIREG_ACTION_DEREGISTER 2 +#define WMIREG_ACTION_REREGISTER 3 +#define WMIREG_ACTION_UPDATE_GUIDS 4 +#define WMIREG_ACTION_BLOCK_IRPS 5 + +// +// Code passed in IRP_MN_REGINFO WMI irp +// + +#define WMIREGISTER 0 +#define WMIUPDATE 1 + +NTKERNELAPI +NTSTATUS +IoWMIAllocateInstanceIds( + IN GUID *Guid, + IN ULONG InstanceCount, + OUT ULONG *FirstInstanceId + ); + +NTKERNELAPI +NTSTATUS +IoWMISuggestInstanceName( + IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, + IN PUNICODE_STRING SymbolicLinkName OPTIONAL, + IN BOOLEAN CombineNames, + OUT PUNICODE_STRING SuggestedInstanceName + ); + +NTKERNELAPI +NTSTATUS +IoWMIWriteEvent( + IN PVOID WnodeEventItem + ); + +#if defined(_WIN64) +NTKERNELAPI +ULONG IoWMIDeviceObjectToProviderId( + PDEVICE_OBJECT DeviceObject + ); +#else +#define IoWMIDeviceObjectToProviderId(DeviceObject) ((ULONG)(DeviceObject)) +#endif + +NTKERNELAPI +NTSTATUS IoWMIOpenBlock( + IN GUID *DataBlockGuid, + IN ULONG DesiredAccess, + OUT PVOID *DataBlockObject + ); + + +NTKERNELAPI +NTSTATUS IoWMIQueryAllData( + IN PVOID DataBlockObject, + IN OUT ULONG *InOutBufferSize, + OUT /* non paged */ PVOID OutBuffer +); + + +NTKERNELAPI +NTSTATUS +IoWMIQueryAllDataMultiple( + IN PVOID *DataBlockObjectList, + IN ULONG ObjectCount, + IN OUT ULONG *InOutBufferSize, + OUT /* non paged */ PVOID OutBuffer +); + + +NTKERNELAPI +NTSTATUS +IoWMIQuerySingleInstance( + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN OUT ULONG *InOutBufferSize, + OUT /* non paged */ PVOID OutBuffer +); + +NTKERNELAPI +NTSTATUS +IoWMIQuerySingleInstanceMultiple( + IN PVOID *DataBlockObjectList, + IN PUNICODE_STRING InstanceNames, + IN ULONG ObjectCount, + IN OUT ULONG *InOutBufferSize, + OUT /* non paged */ PVOID OutBuffer +); + +NTKERNELAPI +NTSTATUS +IoWMISetSingleInstance( + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN ULONG Version, + IN ULONG ValueBufferSize, + IN PVOID ValueBuffer + ); + +NTKERNELAPI +NTSTATUS +IoWMISetSingleItem( + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN ULONG DataItemId, + IN ULONG Version, + IN ULONG ValueBufferSize, + IN PVOID ValueBuffer + ); + +NTKERNELAPI +NTSTATUS +IoWMIExecuteMethod( + IN PVOID DataBlockObject, + IN PUNICODE_STRING InstanceName, + IN ULONG MethodId, + IN ULONG InBufferSize, + IN OUT PULONG OutBufferSize, + IN OUT PUCHAR InOutBuffer + ); + + + +typedef VOID (*WMI_NOTIFICATION_CALLBACK)( + PVOID Wnode, + PVOID Context + ); + +NTKERNELAPI +NTSTATUS +IoWMISetNotificationCallback( + IN PVOID Object, + IN WMI_NOTIFICATION_CALLBACK Callback, + IN PVOID Context + ); + +NTKERNELAPI +NTSTATUS +IoWMIHandleToInstanceName( + IN PVOID DataBlockObject, + IN HANDLE FileHandle, + OUT PUNICODE_STRING InstanceName + ); + +NTKERNELAPI +NTSTATUS +IoWMIDeviceObjectToInstanceName( + IN PVOID DataBlockObject, + IN PDEVICE_OBJECT DeviceObject, + OUT PUNICODE_STRING InstanceName + ); + +#if defined(_WIN64) +BOOLEAN +IoIs32bitProcess( + IN PIRP Irp + ); +#endif + +NTSTATUS +IoVolumeDeviceToDosName( + IN PVOID VolumeDeviceObject, + OUT PUNICODE_STRING DosName + ); +NTSTATUS +IoEnumerateDeviceObjectList( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT *DeviceObjectList, + IN ULONG DeviceObjectListSize, + OUT PULONG ActualNumberDeviceObjects + ); + +PDEVICE_OBJECT +IoGetLowerDeviceObject( + IN PDEVICE_OBJECT DeviceObject + ); + +PDEVICE_OBJECT +IoGetDeviceAttachmentBaseRef( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +IoGetDiskDeviceObject( + IN PDEVICE_OBJECT FileSystemDeviceObject, + OUT PDEVICE_OBJECT *DiskDeviceObject + ); + + +NTSTATUS +IoSetSystemPartition( + PUNICODE_STRING VolumeNameString + ); + +// begin_wdm +VOID +IoFreeErrorLogEntry( + PVOID ElEntry + ); + +// Cancel SAFE API set start +// +// The following APIs are to help ease the pain of writing queue packages that +// handle the cancellation race well. The idea of this set of APIs is to not +// force a single queue data structure but allow the cancel logic to be hidden +// from the drivers. A driver implements a queue and as part of its header +// includes the IO_CSQ structure. In its initialization routine it calls +// IoInitializeCsq. Then in the dispatch routine when the driver wants to +// insert an IRP into the queue it calls IoCsqInsertIrp. When the driver wants +// to remove something from the queue it calls IoCsqRemoveIrp. Note that Insert +// can fail if the IRP was cancelled in the meantime. Remove can also fail if +// the IRP was already cancelled. +// +// There are typically two modes where drivers queue IRPs. These two modes are +// covered by the cancel safe queue API set. +// +// Mode 1: +// One is where the driver queues the IRP and at some later +// point in time dequeues an IRP and issues the IO request. +// For this mode the driver should use IoCsqInsertIrp and IoCsqRemoveNextIrp. +// The driver in this case is expected to pass NULL to the irp context +// parameter in IoInsertIrp. +// +// Mode 2: +// In this the driver queues theIRP, issues the IO request (like issuing a DMA +// request or writing to a register) and when the IO request completes (either +// using a DPC or timer) the driver dequeues the IRP and completes it. For this +// mode the driver should use IoCsqInsertIrp and IoCsqRemoveIrp. In this case +// the driver should allocate an IRP context and pass it in to IoCsqInsertIrp. +// The cancel API code creates an association between the IRP and the context +// and thus ensures that when the time comes to remove the IRP it can ascertain +// correctly. +// +// Note that the cancel API set assumes that the field DriverContext[3] is +// always available for use and that the driver does not use it. +// + + +// +// Bookkeeping structure. This should be opaque to drivers. +// Drivers typically include this as part of their queue headers. +// Given a CSQ pointer the driver should be able to get its +// queue header using CONTAINING_RECORD macro +// + +typedef struct _IO_CSQ IO_CSQ, *PIO_CSQ; + +#define IO_TYPE_CSQ_IRP_CONTEXT 1 +#define IO_TYPE_CSQ 2 + +// +// IRP context structure. This structure is necessary if the driver is using +// the second mode. +// + + +typedef struct _IO_CSQ_IRP_CONTEXT { + ULONG Type; + PIRP Irp; + PIO_CSQ Csq; +} IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; + +// +// Routines that insert/remove IRP +// + +typedef VOID +(*PIO_CSQ_INSERT_IRP)( + IN struct _IO_CSQ *Csq, + IN PIRP Irp + ); + +typedef VOID +(*PIO_CSQ_REMOVE_IRP)( + IN PIO_CSQ Csq, + IN PIRP Irp + ); + +// +// Retrieves next entry after Irp from the queue. +// Returns NULL if there are no entries in the queue. +// If Irp is NUL, returns the entry in the head of the queue. +// This routine does not remove the IRP from the queue. +// + + +typedef PIRP +(*PIO_CSQ_PEEK_NEXT_IRP)( + IN PIO_CSQ Csq, + IN PIRP Irp, + IN PVOID PeekContext + ); + +// +// Lock routine that protects the cancel safe queue. +// + +typedef VOID +(*PIO_CSQ_ACQUIRE_LOCK)( + IN PIO_CSQ Csq, + OUT PKIRQL Irql + ); + +typedef VOID +(*PIO_CSQ_RELEASE_LOCK)( + IN PIO_CSQ Csq, + IN KIRQL Irql + ); + + +// +// Completes the IRP with STATUS_CANCELLED. IRP is guaranteed to be valid +// In most cases this routine just calls IoCompleteRequest(Irp, STATUS_CANCELLED); +// + +typedef VOID +(*PIO_CSQ_COMPLETE_CANCELED_IRP)( + IN PIO_CSQ Csq, + IN PIRP Irp + ); + +// +// Bookkeeping structure. This should be opaque to drivers. +// Drivers typically include this as part of their queue headers. +// Given a CSQ pointer the driver should be able to get its +// queue header using CONTAINING_RECORD macro +// + +typedef struct _IO_CSQ { + ULONG Type; + PIO_CSQ_INSERT_IRP CsqInsertIrp; + PIO_CSQ_REMOVE_IRP CsqRemoveIrp; + PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; + PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; + PIO_CSQ_RELEASE_LOCK CsqReleaseLock; + PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; + PVOID ReservePointer; // Future expansion +} IO_CSQ, *PIO_CSQ; + +// +// Initializes the cancel queue structure. +// + +NTSTATUS +IoCsqInitialize( + IN PIO_CSQ Csq, + IN PIO_CSQ_INSERT_IRP CsqInsertIrp, + IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, + IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, + IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, + IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, + IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp + ); + + +// +// The caller calls this routine to insert the IRP and return STATUS_PENDING. +// + +VOID +IoCsqInsertIrp( + IN PIO_CSQ Csq, + IN PIRP Irp, + IN PIO_CSQ_IRP_CONTEXT Context + ); + +// +// Returns an IRP if one can be found. NULL otherwise. +// + +PIRP +IoCsqRemoveNextIrp( + IN PIO_CSQ Csq, + IN PVOID PeekContext + ); + +// +// This routine is called from timeout or DPCs. +// The context is presumably part of the DPC or timer context. +// If succesfull returns the IRP associated with context. +// + +PIRP +IoCsqRemoveIrp( + IN PIO_CSQ Csq, + IN PIO_CSQ_IRP_CONTEXT Context + ); + +// Cancel SAFE API set end + + +NTSTATUS +IoCreateFileSpecifyDeviceObjectHint( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG Disposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength, + IN CREATE_FILE_TYPE CreateFileType, + IN PVOID ExtraCreateParameters OPTIONAL, + IN ULONG Options, + IN PVOID DeviceObject + ); + +NTSTATUS +IoAttachDeviceToDeviceStackSafe( + IN PDEVICE_OBJECT SourceDevice, + IN PDEVICE_OBJECT TargetDevice, + OUT PDEVICE_OBJECT *AttachedToDeviceObject + ); + +// end_ntosp + +NTKERNELAPI +BOOLEAN +IoIsFileOriginRemote( + IN PFILE_OBJECT FileObject + ); + +NTKERNELAPI +NTSTATUS +IoSetFileOrigin( + IN PFILE_OBJECT FileObject, + IN BOOLEAN Remote + ); + + +NTSTATUS +IoValidateDeviceIoControlAccess( + IN PIRP Irp, + IN ULONG RequiredAccess + ); + +NTKERNELAPI +PVOID +PoRegisterSystemState ( + IN PVOID StateHandle, + IN EXECUTION_STATE Flags + ); + + +NTKERNELAPI +VOID +PoUnregisterSystemState ( + IN PVOID StateHandle + ); + +// begin_nthal + +NTKERNELAPI +POWER_STATE +PoSetPowerState ( + IN PDEVICE_OBJECT DeviceObject, + IN POWER_STATE_TYPE Type, + IN POWER_STATE State + ); + +NTKERNELAPI +NTSTATUS +PoCallDriver ( + IN PDEVICE_OBJECT DeviceObject, + IN OUT PIRP Irp + ); + +NTKERNELAPI +VOID +PoStartNextPowerIrp( + IN PIRP Irp + ); + + +NTKERNELAPI +PULONG +PoRegisterDeviceForIdleDetection ( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG ConservationIdleTime, + IN ULONG PerformanceIdleTime, + IN DEVICE_POWER_STATE State + ); + +#define PoSetDeviceBusy(IdlePointer) \ + *IdlePointer = 0 + +// +// \Callback\PowerState values +// + +#define PO_CB_SYSTEM_POWER_POLICY 0 +#define PO_CB_AC_STATUS 1 +#define PO_CB_BUTTON_COLLISION 2 +#define PO_CB_SYSTEM_STATE_LOCK 3 +#define PO_CB_LID_SWITCH_STATE 4 +#define PO_CB_PROCESSOR_POWER_POLICY 5 + +// end_ntddk end_wdm end_nthal + +// Used for queuing work items to be performed at shutdown time. Same +// rules apply as per Ex work queues. +NTKERNELAPI +NTSTATUS +PoQueueShutdownWorkItem( + IN PWORK_QUEUE_ITEM WorkItem + ); + +#if defined(_ALPHA_) || defined(_IA64_) + +DECLSPEC_DEPRECATED_DDK // Use GetDmaRequirement +NTHALAPI +ULONG +HalGetDmaAlignmentRequirement ( + VOID + ); + +#endif + +#if defined(_M_IX86) || defined(_M_AMD64) + +#define HalGetDmaAlignmentRequirement() 1L +#endif + +NTHALAPI +VOID +KeFlushWriteBuffer ( + VOID + ); + +// +// Performance counter function. +// + +NTHALAPI +LARGE_INTEGER +KeQueryPerformanceCounter ( + OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL + ); + +// begin_ntndis +// +// Stall processor execution function. +// + +NTHALAPI +VOID +KeStallExecutionProcessor ( + IN ULONG MicroSeconds + ); + +// +// Indicates the system may do I/O to physical addresses above 4 GB. +// + +extern PBOOLEAN Mm64BitPhysicalAddress; + + +// +// Define maximum disk transfer size to be used by MM and Cache Manager, +// so that packet-oriented disk drivers can optimize their packet allocation +// to this size. +// + +#define MM_MAXIMUM_DISK_IO_SIZE (0x10000) + +//++ +// +// ULONG_PTR +// ROUND_TO_PAGES ( +// IN ULONG_PTR Size +// ) +// +// Routine Description: +// +// The ROUND_TO_PAGES macro takes a size in bytes and rounds it up to a +// multiple of the page size. +// +// NOTE: This macro fails for values 0xFFFFFFFF - (PAGE_SIZE - 1). +// +// Arguments: +// +// Size - Size in bytes to round up to a page multiple. +// +// Return Value: +// +// Returns the size rounded up to a multiple of the page size. +// +//-- + +#define ROUND_TO_PAGES(Size) (((ULONG_PTR)(Size) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)) + +//++ +// +// ULONG +// BYTES_TO_PAGES ( +// IN ULONG Size +// ) +// +// Routine Description: +// +// The BYTES_TO_PAGES macro takes the size in bytes and calculates the +// number of pages required to contain the bytes. +// +// Arguments: +// +// Size - Size in bytes. +// +// Return Value: +// +// Returns the number of pages required to contain the specified size. +// +//-- + +#define BYTES_TO_PAGES(Size) ((ULONG)((ULONG_PTR)(Size) >> PAGE_SHIFT) + \ + (((ULONG)(Size) & (PAGE_SIZE - 1)) != 0)) + +//++ +// +// ULONG +// BYTE_OFFSET ( +// IN PVOID Va +// ) +// +// Routine Description: +// +// The BYTE_OFFSET macro takes a virtual address and returns the byte offset +// of that address within the page. +// +// Arguments: +// +// Va - Virtual address. +// +// Return Value: +// +// Returns the byte offset portion of the virtual address. +// +//-- + +#define BYTE_OFFSET(Va) ((ULONG)((LONG_PTR)(Va) & (PAGE_SIZE - 1))) + +//++ +// +// PVOID +// PAGE_ALIGN ( +// IN PVOID Va +// ) +// +// Routine Description: +// +// The PAGE_ALIGN macro takes a virtual address and returns a page-aligned +// virtual address for that page. +// +// Arguments: +// +// Va - Virtual address. +// +// Return Value: +// +// Returns the page aligned virtual address. +// +//-- + +#define PAGE_ALIGN(Va) ((PVOID)((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) + +//++ +// +// ULONG +// ADDRESS_AND_SIZE_TO_SPAN_PAGES ( +// IN PVOID Va, +// IN ULONG Size +// ) +// +// Routine Description: +// +// The ADDRESS_AND_SIZE_TO_SPAN_PAGES macro takes a virtual address and +// size and returns the number of pages spanned by the size. +// +// Arguments: +// +// Va - Virtual address. +// +// Size - Size in bytes. +// +// Return Value: +// +// Returns the number of pages spanned by the size. +// +//-- + +#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size) \ + ((ULONG)((((ULONG_PTR)(Va) & (PAGE_SIZE -1)) + (Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(COMPUTE_PAGES_SPANNED) // Use ADDRESS_AND_SIZE_TO_SPAN_PAGES +#endif + +#define COMPUTE_PAGES_SPANNED(Va, Size) ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va,Size) + + +//++ +// PPFN_NUMBER +// MmGetMdlPfnArray ( +// IN PMDL Mdl +// ) +// +// Routine Description: +// +// The MmGetMdlPfnArray routine returns the virtual address of the +// first element of the array of physical page numbers associated with +// the MDL. +// +// Arguments: +// +// Mdl - Pointer to an MDL. +// +// Return Value: +// +// Returns the virtual address of the first element of the array of +// physical page numbers associated with the MDL. +// +//-- + +#define MmGetMdlPfnArray(Mdl) ((PPFN_NUMBER)(Mdl + 1)) + +//++ +// +// PVOID +// MmGetMdlVirtualAddress ( +// IN PMDL Mdl +// ) +// +// Routine Description: +// +// The MmGetMdlVirtualAddress returns the virtual address of the buffer +// described by the Mdl. +// +// Arguments: +// +// Mdl - Pointer to an MDL. +// +// Return Value: +// +// Returns the virtual address of the buffer described by the Mdl +// +//-- + +#define MmGetMdlVirtualAddress(Mdl) \ + ((PVOID) ((PCHAR) ((Mdl)->StartVa) + (Mdl)->ByteOffset)) + +//++ +// +// ULONG +// MmGetMdlByteCount ( +// IN PMDL Mdl +// ) +// +// Routine Description: +// +// The MmGetMdlByteCount returns the length in bytes of the buffer +// described by the Mdl. +// +// Arguments: +// +// Mdl - Pointer to an MDL. +// +// Return Value: +// +// Returns the byte count of the buffer described by the Mdl +// +//-- + +#define MmGetMdlByteCount(Mdl) ((Mdl)->ByteCount) + +//++ +// +// ULONG +// MmGetMdlByteOffset ( +// IN PMDL Mdl +// ) +// +// Routine Description: +// +// The MmGetMdlByteOffset returns the byte offset within the page +// of the buffer described by the Mdl. +// +// Arguments: +// +// Mdl - Pointer to an MDL. +// +// Return Value: +// +// Returns the byte offset within the page of the buffer described by the Mdl +// +//-- + +#define MmGetMdlByteOffset(Mdl) ((Mdl)->ByteOffset) + +//++ +// +// PVOID +// MmGetMdlStartVa ( +// IN PMDL Mdl +// ) +// +// Routine Description: +// +// The MmGetMdlBaseVa returns the virtual address of the buffer +// described by the Mdl rounded down to the nearest page. +// +// Arguments: +// +// Mdl - Pointer to an MDL. +// +// Return Value: +// +// Returns the returns the starting virtual address of the MDL. +// +// +//-- + +#define MmGetMdlBaseVa(Mdl) ((Mdl)->StartVa) + +typedef enum _MM_SYSTEM_SIZE { + MmSmallSystem, + MmMediumSystem, + MmLargeSystem +} MM_SYSTEMSIZE; + +NTKERNELAPI +MM_SYSTEMSIZE +MmQuerySystemSize( + VOID + ); + +// end_wdm + +NTKERNELAPI +BOOLEAN +MmIsThisAnNtAsSystem( + VOID + ); + +// begin_wdm + +typedef enum _LOCK_OPERATION { + IoReadAccess, + IoWriteAccess, + IoModifyAccess +} LOCK_OPERATION; + + +NTKERNELAPI +BOOLEAN +MmIsRecursiveIoFault( + VOID + ); + + +BOOLEAN +MmForceSectionClosed ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN BOOLEAN DelayClose + ); + + +NTSTATUS +MmIsVerifierEnabled ( + OUT PULONG VerifierFlags + ); + +NTSTATUS +MmAddVerifierThunks ( + IN PVOID ThunkBuffer, + IN ULONG ThunkBufferSize + ); + + +typedef enum _MMFLUSH_TYPE { + MmFlushForDelete, + MmFlushForWrite +} MMFLUSH_TYPE; + + +BOOLEAN +MmFlushImageSection ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN MMFLUSH_TYPE FlushType + ); + +BOOLEAN +MmCanFileBeTruncated ( + IN PSECTION_OBJECT_POINTERS SectionPointer, + IN PLARGE_INTEGER NewFileSize + ); + + +BOOLEAN +MmSetAddressRangeModified ( + IN PVOID Address, + IN SIZE_T Length + ); + +NTKERNELAPI +VOID +MmProbeAndLockProcessPages ( + IN OUT PMDL MemoryDescriptorList, + IN PEPROCESS Process, + IN KPROCESSOR_MODE AccessMode, + IN LOCK_OPERATION Operation + ); + + +// begin_nthal +// +// I/O support routines. +// + +NTKERNELAPI +VOID +MmProbeAndLockPages ( + IN OUT PMDL MemoryDescriptorList, + IN KPROCESSOR_MODE AccessMode, + IN LOCK_OPERATION Operation + ); + + +NTKERNELAPI +VOID +MmUnlockPages ( + IN PMDL MemoryDescriptorList + ); + + +NTKERNELAPI +VOID +MmBuildMdlForNonPagedPool ( + IN OUT PMDL MemoryDescriptorList + ); + +NTKERNELAPI +PVOID +MmMapLockedPages ( + IN PMDL MemoryDescriptorList, + IN KPROCESSOR_MODE AccessMode + ); + +NTKERNELAPI +PVOID +MmGetSystemRoutineAddress ( + IN PUNICODE_STRING SystemRoutineName + ); + +NTKERNELAPI +NTSTATUS +MmAdvanceMdl ( + IN PMDL Mdl, + IN ULONG NumberOfBytes + ); + +// end_wdm + +NTKERNELAPI +NTSTATUS +MmMapUserAddressesToPage ( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes, + IN PVOID PageAddress + ); + +// begin_wdm +NTKERNELAPI +NTSTATUS +MmProtectMdlSystemAddress ( + IN PMDL MemoryDescriptorList, + IN ULONG NewProtect + ); + +// +// _MM_PAGE_PRIORITY_ provides a method for the system to handle requests +// intelligently in low resource conditions. +// +// LowPagePriority should be used when it is acceptable to the driver for the +// mapping request to fail if the system is low on resources. An example of +// this could be for a non-critical network connection where the driver can +// handle the failure case when system resources are close to being depleted. +// +// NormalPagePriority should be used when it is acceptable to the driver for the +// mapping request to fail if the system is very low on resources. An example +// of this could be for a non-critical local filesystem request. +// +// HighPagePriority should be used when it is unacceptable to the driver for the +// mapping request to fail unless the system is completely out of resources. +// An example of this would be the paging file path in a driver. +// + +// begin_ntndis + +typedef enum _MM_PAGE_PRIORITY { + LowPagePriority, + NormalPagePriority = 16, + HighPagePriority = 32 +} MM_PAGE_PRIORITY; + +// end_ntndis + +// +// Note: This function is not available in WDM 1.0 +// +NTKERNELAPI +PVOID +MmMapLockedPagesSpecifyCache ( + IN PMDL MemoryDescriptorList, + IN KPROCESSOR_MODE AccessMode, + IN MEMORY_CACHING_TYPE CacheType, + IN PVOID BaseAddress, + IN ULONG BugCheckOnFailure, + IN MM_PAGE_PRIORITY Priority + ); + +NTKERNELAPI +VOID +MmUnmapLockedPages ( + IN PVOID BaseAddress, + IN PMDL MemoryDescriptorList + ); + +PVOID +MmAllocateMappingAddress ( + IN SIZE_T NumberOfBytes, + IN ULONG PoolTag + ); + +VOID +MmFreeMappingAddress ( + IN PVOID BaseAddress, + IN ULONG PoolTag + ); + +PVOID +MmMapLockedPagesWithReservedMapping ( + IN PVOID MappingAddress, + IN ULONG PoolTag, + IN PMDL MemoryDescriptorList, + IN MEMORY_CACHING_TYPE CacheType + ); + +VOID +MmUnmapReservedMapping ( + IN PVOID BaseAddress, + IN ULONG PoolTag, + IN PMDL MemoryDescriptorList + ); + +// end_wdm + +typedef struct _PHYSICAL_MEMORY_RANGE { + PHYSICAL_ADDRESS BaseAddress; + LARGE_INTEGER NumberOfBytes; +} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; + +NTKERNELAPI +NTSTATUS +MmAddPhysicalMemory ( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes + ); + +NTKERNELAPI +NTSTATUS +MmAddPhysicalMemoryEx ( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes, + IN ULONG Flags + ); + +NTKERNELAPI +NTSTATUS +MmRemovePhysicalMemory ( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes + ); + +NTKERNELAPI +NTSTATUS +MmRemovePhysicalMemoryEx ( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes, + IN ULONG Flags + ); + +NTKERNELAPI +PPHYSICAL_MEMORY_RANGE +MmGetPhysicalMemoryRanges ( + VOID + ); + +NTSTATUS +MmMarkPhysicalMemoryAsGood ( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes + ); + +NTSTATUS +MmMarkPhysicalMemoryAsBad ( + IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes + ); + +// begin_wdm + +NTKERNELAPI +PMDL +MmAllocatePagesForMdl ( + IN PHYSICAL_ADDRESS LowAddress, + IN PHYSICAL_ADDRESS HighAddress, + IN PHYSICAL_ADDRESS SkipBytes, + IN SIZE_T TotalBytes + ); + +NTKERNELAPI +VOID +MmFreePagesFromMdl ( + IN PMDL MemoryDescriptorList + ); + +NTKERNELAPI +PVOID +MmMapIoSpace ( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN SIZE_T NumberOfBytes, + IN MEMORY_CACHING_TYPE CacheType + ); + +NTKERNELAPI +VOID +MmUnmapIoSpace ( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes + ); + + +NTKERNELAPI +PVOID +MmMapVideoDisplay ( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN SIZE_T NumberOfBytes, + IN MEMORY_CACHING_TYPE CacheType + ); + +NTKERNELAPI +VOID +MmUnmapVideoDisplay ( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes + ); + +NTKERNELAPI +PHYSICAL_ADDRESS +MmGetPhysicalAddress ( + IN PVOID BaseAddress + ); + +NTKERNELAPI +PVOID +MmGetVirtualForPhysical ( + IN PHYSICAL_ADDRESS PhysicalAddress + ); + +NTKERNELAPI +PVOID +MmAllocateContiguousMemory ( + IN SIZE_T NumberOfBytes, + IN PHYSICAL_ADDRESS HighestAcceptableAddress + ); + +NTKERNELAPI +PVOID +MmAllocateContiguousMemorySpecifyCache ( + IN SIZE_T NumberOfBytes, + IN PHYSICAL_ADDRESS LowestAcceptableAddress, + IN PHYSICAL_ADDRESS HighestAcceptableAddress, + IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, + IN MEMORY_CACHING_TYPE CacheType + ); + +NTKERNELAPI +VOID +MmFreeContiguousMemory ( + IN PVOID BaseAddress + ); + +NTKERNELAPI +VOID +MmFreeContiguousMemorySpecifyCache ( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes, + IN MEMORY_CACHING_TYPE CacheType + ); + + +NTKERNELAPI +PVOID +MmAllocateNonCachedMemory ( + IN SIZE_T NumberOfBytes + ); + +NTKERNELAPI +VOID +MmFreeNonCachedMemory ( + IN PVOID BaseAddress, + IN SIZE_T NumberOfBytes + ); + +NTKERNELAPI +BOOLEAN +MmIsAddressValid ( + IN PVOID VirtualAddress + ); + +DECLSPEC_DEPRECATED_DDK +NTKERNELAPI +BOOLEAN +MmIsNonPagedSystemAddressValid ( + IN PVOID VirtualAddress + ); + +// begin_wdm + +NTKERNELAPI +SIZE_T +MmSizeOfMdl( + IN PVOID Base, + IN SIZE_T Length + ); + +DECLSPEC_DEPRECATED_DDK // Use IoCreateMdl +NTKERNELAPI +PMDL +MmCreateMdl( + IN PMDL MemoryDescriptorList OPTIONAL, + IN PVOID Base, + IN SIZE_T Length + ); + +NTKERNELAPI +PVOID +MmLockPagableDataSection( + IN PVOID AddressWithinSection + ); + +// end_wdm + +NTKERNELAPI +VOID +MmLockPagableSectionByHandle ( + IN PVOID ImageSectionHandle + ); + +NTKERNELAPI +VOID +MmResetDriverPaging ( + IN PVOID AddressWithinSection + ); + + +NTKERNELAPI +PVOID +MmPageEntireDriver ( + IN PVOID AddressWithinSection + ); + +NTKERNELAPI +VOID +MmUnlockPagableImageSection( + IN PVOID ImageSectionHandle + ); + +// end_wdm end_ntosp + +// begin_ntosp +NTKERNELAPI +HANDLE +MmSecureVirtualMemory ( + IN PVOID Address, + IN SIZE_T Size, + IN ULONG ProbeMode + ); + +NTKERNELAPI +VOID +MmUnsecureVirtualMemory ( + IN HANDLE SecureHandle + ); + +// end_ntosp + +NTKERNELAPI +NTSTATUS +MmMapViewInSystemSpace ( + IN PVOID Section, + OUT PVOID *MappedBase, + IN PSIZE_T ViewSize + ); + +NTKERNELAPI +NTSTATUS +MmUnmapViewInSystemSpace ( + IN PVOID MappedBase + ); + +// begin_ntosp +NTKERNELAPI +NTSTATUS +MmMapViewInSessionSpace ( + IN PVOID Section, + OUT PVOID *MappedBase, + IN OUT PSIZE_T ViewSize + ); + +NTKERNELAPI +NTSTATUS +MmUnmapViewInSessionSpace ( + IN PVOID MappedBase + ); +// end_ntosp + +// begin_wdm begin_ntosp + +//++ +// +// VOID +// MmInitializeMdl ( +// IN PMDL MemoryDescriptorList, +// IN PVOID BaseVa, +// IN SIZE_T Length +// ) +// +// Routine Description: +// +// This routine initializes the header of a Memory Descriptor List (MDL). +// +// Arguments: +// +// MemoryDescriptorList - Pointer to the MDL to initialize. +// +// BaseVa - Base virtual address mapped by the MDL. +// +// Length - Length, in bytes, of the buffer mapped by the MDL. +// +// Return Value: +// +// None. +// +//-- + +#define MmInitializeMdl(MemoryDescriptorList, BaseVa, Length) { \ + (MemoryDescriptorList)->Next = (PMDL) NULL; \ + (MemoryDescriptorList)->Size = (CSHORT)(sizeof(MDL) + \ + (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES((BaseVa), (Length)))); \ + (MemoryDescriptorList)->MdlFlags = 0; \ + (MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN((BaseVa)); \ + (MemoryDescriptorList)->ByteOffset = BYTE_OFFSET((BaseVa)); \ + (MemoryDescriptorList)->ByteCount = (ULONG)(Length); \ + } + +//++ +// +// PVOID +// MmGetSystemAddressForMdlSafe ( +// IN PMDL MDL, +// IN MM_PAGE_PRIORITY PRIORITY +// ) +// +// Routine Description: +// +// This routine returns the mapped address of an MDL. If the +// Mdl is not already mapped or a system address, it is mapped. +// +// Arguments: +// +// MemoryDescriptorList - Pointer to the MDL to map. +// +// Priority - Supplies an indication as to how important it is that this +// request succeed under low available PTE conditions. +// +// Return Value: +// +// Returns the base address where the pages are mapped. The base address +// has the same offset as the virtual address in the MDL. +// +// Unlike MmGetSystemAddressForMdl, Safe guarantees that it will always +// return NULL on failure instead of bugchecking the system. +// +// This macro is not usable by WDM 1.0 drivers as 1.0 did not include +// MmMapLockedPagesSpecifyCache. The solution for WDM 1.0 drivers is to +// provide synchronization and set/reset the MDL_MAPPING_CAN_FAIL bit. +// +//-- + +#define MmGetSystemAddressForMdlSafe(MDL, PRIORITY) \ + (((MDL)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \ + MDL_SOURCE_IS_NONPAGED_POOL)) ? \ + ((MDL)->MappedSystemVa) : \ + (MmMapLockedPagesSpecifyCache((MDL), \ + KernelMode, \ + MmCached, \ + NULL, \ + FALSE, \ + (PRIORITY)))) + +//++ +// +// PVOID +// MmGetSystemAddressForMdl ( +// IN PMDL MDL +// ) +// +// Routine Description: +// +// This routine returns the mapped address of an MDL, if the +// Mdl is not already mapped or a system address, it is mapped. +// +// Arguments: +// +// MemoryDescriptorList - Pointer to the MDL to map. +// +// Return Value: +// +// Returns the base address where the pages are mapped. The base address +// has the same offset as the virtual address in the MDL. +// +//-- + +//#define MmGetSystemAddressForMdl(MDL) +// (((MDL)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA)) ? +// ((MDL)->MappedSystemVa) : +// ((((MDL)->MdlFlags & (MDL_SOURCE_IS_NONPAGED_POOL)) ? +// ((PVOID)((ULONG)(MDL)->StartVa | (MDL)->ByteOffset)) : +// (MmMapLockedPages((MDL),KernelMode))))) + +#if PRAGMA_DEPRECATED_DDK +#pragma deprecated(MmGetSystemAddressForMdl) // Use MmGetSystemAddressForMdlSafe +#endif + +#define MmGetSystemAddressForMdl(MDL) \ + (((MDL)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | \ + MDL_SOURCE_IS_NONPAGED_POOL)) ? \ + ((MDL)->MappedSystemVa) : \ + (MmMapLockedPages((MDL),KernelMode))) + +//++ +// +// VOID +// MmPrepareMdlForReuse ( +// IN PMDL MDL +// ) +// +// Routine Description: +// +// This routine will take all of the steps necessary to allow an MDL to be +// re-used. +// +// Arguments: +// +// MemoryDescriptorList - Pointer to the MDL that will be re-used. +// +// Return Value: +// +// None. +// +//-- + +#define MmPrepareMdlForReuse(MDL) \ + if (((MDL)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ + ASSERT(((MDL)->MdlFlags & MDL_PARTIAL) != 0); \ + MmUnmapLockedPages( (MDL)->MappedSystemVa, (MDL) ); \ + } else if (((MDL)->MdlFlags & MDL_PARTIAL) == 0) { \ + ASSERT(((MDL)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ + } + +typedef NTSTATUS (*PMM_DLL_INITIALIZE)( + IN PUNICODE_STRING RegistryPath + ); + +typedef NTSTATUS (*PMM_DLL_UNLOAD)( + VOID + ); + + + +// +// Prefetch public interface. +// + +typedef struct _READ_LIST { + PFILE_OBJECT FileObject; + ULONG NumberOfEntries; + LOGICAL IsImage; + FILE_SEGMENT_ELEMENT List[ANYSIZE_ARRAY]; +} READ_LIST, *PREAD_LIST; + +NTSTATUS +MmPrefetchPages ( + IN ULONG NumberOfLists, + IN PREAD_LIST *ReadLists + ); + +// +// Object Manager types +// + +typedef struct _OBJECT_HANDLE_INFORMATION { + ULONG HandleAttributes; + ACCESS_MASK GrantedAccess; +} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; + +NTKERNELAPI +NTSTATUS +ObReferenceObjectByHandle( + IN HANDLE Handle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_TYPE ObjectType OPTIONAL, + IN KPROCESSOR_MODE AccessMode, + OUT PVOID *Object, + OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL + ); +NTKERNELAPI +NTSTATUS +ObOpenObjectByPointer( + IN PVOID Object, + IN ULONG HandleAttributes, + IN PACCESS_STATE PassedAccessState OPTIONAL, + IN ACCESS_MASK DesiredAccess OPTIONAL, + IN POBJECT_TYPE ObjectType OPTIONAL, + IN KPROCESSOR_MODE AccessMode, + OUT PHANDLE Handle + ); +NTKERNELAPI +VOID +ObMakeTemporaryObject( + IN PVOID Object + ); + +#define ObDereferenceObject(a) \ + ObfDereferenceObject(a) + +#define ObReferenceObject(Object) ObfReferenceObject(Object) + +NTKERNELAPI +LONG +FASTCALL +ObfReferenceObject( + IN PVOID Object + ); + +NTKERNELAPI +NTSTATUS +ObReferenceObjectByPointer( + IN PVOID Object, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_TYPE ObjectType, + IN KPROCESSOR_MODE AccessMode + ); + +NTKERNELAPI +LONG +FASTCALL +ObfDereferenceObject( + IN PVOID Object + ); + +NTKERNELAPI +NTSTATUS +ObQueryNameString( + IN PVOID Object, + OUT POBJECT_NAME_INFORMATION ObjectNameInfo, + IN ULONG Length, + OUT PULONG ReturnLength + ); + +NTSTATUS +ObGetObjectSecurity( + IN PVOID Object, + OUT PSECURITY_DESCRIPTOR *SecurityDescriptor, + OUT PBOOLEAN MemoryAllocated + ); + +VOID +ObReleaseObjectSecurity( + IN PSECURITY_DESCRIPTOR SecurityDescriptor, + IN BOOLEAN MemoryAllocated + ); + +NTSTATUS +ObQueryObjectAuditingByHandle( + IN HANDLE Handle, + OUT PBOOLEAN GenerateOnClose + ); +// +// The following are globally used definitions for an LBN and a VBN +// + +typedef ULONG LBN; +typedef LBN *PLBN; + +typedef ULONG VBN; +typedef VBN *PVBN; + + +// +// Every file system that uses the cache manager must have FsContext +// of the file object point to a common fcb header structure. +// + +typedef enum _FAST_IO_POSSIBLE { + FastIoIsNotPossible = 0, + FastIoIsPossible, + FastIoIsQuestionable +} FAST_IO_POSSIBLE; + + +typedef struct _FSRTL_COMMON_FCB_HEADER { + + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + + // + // General flags available to FsRtl. + // + + UCHAR Flags; + + // + // Indicates if fast I/O is possible or if we should be calling + // the check for fast I/O routine which is found via the driver + // object. + // + + UCHAR IsFastIoPossible; // really type FAST_IO_POSSIBLE + + // + // Second Flags Field + // + + UCHAR Flags2; + + // + // The following reserved field should always be 0 + // + + UCHAR Reserved; + + PERESOURCE Resource; + + PERESOURCE PagingIoResource; + + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; + +} FSRTL_COMMON_FCB_HEADER; +typedef FSRTL_COMMON_FCB_HEADER *PFSRTL_COMMON_FCB_HEADER; + +// +// This Fcb header is used for files which support caching +// of compressed data, and related new support. +// +// We start out by prefixing this structure with the normal +// FsRtl header from above, which we have to do two different +// ways for c++ or c. +// + +#ifdef __cplusplus +typedef struct _FSRTL_ADVANCED_FCB_HEADER:FSRTL_COMMON_FCB_HEADER { +#else // __cplusplus + +typedef struct _FSRTL_ADVANCED_FCB_HEADER { + + // + // Put in the standard FsRtl header fields + // + + FSRTL_COMMON_FCB_HEADER ; + +#endif // __cplusplus + + // + // The following two fields are supported only if + // Flags2 contains FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS + // + + // + // This is a pointer to a Fast Mutex which may be used to + // properly synchronize access to the FsRtl header. The + // Fast Mutex must be nonpaged. + // + + PFAST_MUTEX FastMutex; + + // + // This is a pointer to a list of context structures belonging to + // filesystem filter drivers that are linked above the filesystem. + // Each structure is headed by FSRTL_FILTER_CONTEXT. + // + + LIST_ENTRY FilterContexts; + +} FSRTL_ADVANCED_FCB_HEADER; +typedef FSRTL_ADVANCED_FCB_HEADER *PFSRTL_ADVANCED_FCB_HEADER; + +// +// Define FsRtl common header flags +// + +#define FSRTL_FLAG_FILE_MODIFIED (0x01) +#define FSRTL_FLAG_FILE_LENGTH_CHANGED (0x02) +#define FSRTL_FLAG_LIMIT_MODIFIED_PAGES (0x04) + +// +// Following flags determine how the modified page writer should +// acquire the file. These flags can't change while either resource +// is acquired. If neither of these flags is set then the +// modified/mapped page writer will attempt to acquire the paging io +// resource shared. +// + +#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_EX (0x08) +#define FSRTL_FLAG_ACQUIRE_MAIN_RSRC_SH (0x10) + +// +// This flag will be set by the Cache Manager if a view is mapped +// to a file. +// + +#define FSRTL_FLAG_USER_MAPPED_FILE (0x20) + +// This flag indicates that the file system is using the +// FSRTL_ADVANCED_FCB_HEADER structure instead of the FSRTL_COMMON_FCB_HEADER +// structure. +// + +#define FSRTL_FLAG_ADVANCED_HEADER (0x40) + +// This flag determines whether there currently is an Eof advance +// in progress. All such advances must be serialized. +// + +#define FSRTL_FLAG_EOF_ADVANCE_ACTIVE (0x80) + +// +// Flag values for Flags2 +// +// All unused bits are reserved and should NOT be modified. +// + +// +// If this flag is set, the Cache Manager will allow modified writing +// in spite of the value of FsContext2. +// + +#define FSRTL_FLAG2_DO_MODIFIED_WRITE (0x01) + +// +// If this flag is set, the additional fields FilterContexts and FastMutex +// are supported in FSRTL_COMMON_HEADER, and can be used to associate +// context for filesystem filters with streams. +// + +#define FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS (0x02) + +// +// If this flag is set, the cache manager will flush and purge the cache map when +// a user first maps a file +// + +#define FSRTL_FLAG2_PURGE_WHEN_MAPPED (0x04) + +// +// The following constants are used to block top level Irp processing when +// (in either the fast io or cc case) file system resources have been +// acquired above the file system, or we are in an Fsp thread. +// + +#define FSRTL_FSP_TOP_LEVEL_IRP 0x01 +#define FSRTL_CACHE_TOP_LEVEL_IRP 0x02 +#define FSRTL_MOD_WRITE_TOP_LEVEL_IRP 0x03 +#define FSRTL_FAST_IO_TOP_LEVEL_IRP 0x04 +#define FSRTL_MAX_TOP_LEVEL_IRP_FLAG 0x04 + +// +// The following structure is used to synchronize Eof extends. +// + +typedef struct _EOF_WAIT_BLOCK { + + LIST_ENTRY EofWaitLinks; + KEVENT Event; + +} EOF_WAIT_BLOCK; + +typedef EOF_WAIT_BLOCK *PEOF_WAIT_BLOCK; + +// begin_ntosp +// +// Normal uncompressed Copy and Mdl Apis +// + +NTKERNELAPI +BOOLEAN +FsRtlCopyRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +BOOLEAN +FsRtlCopyWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN ULONG LockKey, + IN PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + + +NTKERNELAPI +BOOLEAN +FsRtlMdlReadDev ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +BOOLEAN +FsRtlMdlReadCompleteDev ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain, + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +BOOLEAN +FsRtlPrepareMdlWriteDev ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG LockKey, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus, + IN PDEVICE_OBJECT DeviceObject + ); + +NTKERNELAPI +BOOLEAN +FsRtlMdlWriteCompleteDev ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain, + IN PDEVICE_OBJECT DeviceObject + ); + +// +// In Irps, compressed reads and writes are designated by the +// subfunction IRP_MN_COMPRESSED must be set and the Compressed +// Data Info buffer must be described by the following structure +// pointed to by Irp->Tail.Overlay.AuxiliaryBuffer. +// + +typedef struct _FSRTL_AUXILIARY_BUFFER { + + // + // Buffer description with length. + // + + PVOID Buffer; + ULONG Length; + + // + // Flags + // + + ULONG Flags; + + // + // Pointer to optional Mdl mapping buffer for file system use + // + + PMDL Mdl; + +} FSRTL_AUXILIARY_BUFFER; +typedef FSRTL_AUXILIARY_BUFFER *PFSRTL_AUXILIARY_BUFFER; + +// +// If this flag is set, the auxiliary buffer structure is +// deallocated on Irp completion. The caller has the +// option in this case of appending this structure to the +// structure being described, causing it all to be +// deallocated at once. If this flag is clear, no deallocate +// occurs. +// + +#define FSRTL_AUXILIARY_FLAG_DEALLOCATE 0x00000001 + +// +// The following two routines are called from NtCreateSection to avoid +// deadlocks with the file systems. +// + +NTKERNELAPI +VOID +FsRtlAcquireFileExclusive ( + IN PFILE_OBJECT FileObject + ); + +NTKERNELAPI +VOID +FsRtlReleaseFile ( + IN PFILE_OBJECT FileObject + ); + +// +// These routines provide a simple interface for the common operations +// of query/set file size. +// + +NTSTATUS +FsRtlGetFileSize( + IN PFILE_OBJECT FileObject, + IN OUT PLARGE_INTEGER FileSize + ); + +// +// Determine if there is a complete device failure on an error. +// + +NTKERNELAPI +BOOLEAN +FsRtlIsTotalDeviceFailure( + IN NTSTATUS Status + ); + +// end_ntddk + +// +// Byte range file lock routines, implemented in FileLock.c +// +// The file lock info record is used to return enumerated information +// about a file lock +// + +typedef struct _FILE_LOCK_INFO { + + // + // A description of the current locked range, and if the lock + // is exclusive or shared + // + + LARGE_INTEGER StartingByte; + LARGE_INTEGER Length; + BOOLEAN ExclusiveLock; + + // + // The following fields describe the owner of the lock. + // + + ULONG Key; + PFILE_OBJECT FileObject; + PVOID ProcessId; + + // + // The following field is used internally by FsRtl + // + + LARGE_INTEGER EndingByte; + +} FILE_LOCK_INFO; +typedef FILE_LOCK_INFO *PFILE_LOCK_INFO; + +// +// The following two procedure prototypes are used by the caller of the +// file lock package to supply an alternate routine to call when +// completing an IRP and when unlocking a byte range. Note that the only +// utility to us this interface is currently the redirector, all other file +// system will probably let the IRP complete normally with IoCompleteRequest. +// The user supplied routine returns any value other than success then the +// lock package will remove any lock that we just inserted. +// + +typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) ( + IN PVOID Context, + IN PIRP Irp + ); + +typedef VOID (*PUNLOCK_ROUTINE) ( + IN PVOID Context, + IN PFILE_LOCK_INFO FileLockInfo + ); + +// +// A FILE_LOCK is an opaque structure but we need to declare the size of +// it here so that users can allocate space for one. +// + +typedef struct _FILE_LOCK { + + // + // The optional procedure to call to complete a request + // + + PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine; + + // + // The optional procedure to call when unlocking a byte range + // + + PUNLOCK_ROUTINE UnlockRoutine; + + // + // FastIoIsQuestionable is set to true whenever the filesystem require + // additional checking about whether the fast path can be taken. As an + // example Ntfs requires checking for disk space before the writes can + // occur. + // + + BOOLEAN FastIoIsQuestionable; + BOOLEAN SpareC[3]; + + // + // FsRtl lock information + // + + PVOID LockInformation; + + // + // Contains continuation information for FsRtlGetNextFileLock + // + + FILE_LOCK_INFO LastReturnedLockInfo; + PVOID LastReturnedLock; + +} FILE_LOCK; +typedef FILE_LOCK *PFILE_LOCK; + +PFILE_LOCK +FsRtlAllocateFileLock ( + IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, + IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL + ); + +VOID +FsRtlFreeFileLock ( + IN PFILE_LOCK FileLock + ); + +NTKERNELAPI +VOID +FsRtlInitializeFileLock ( + IN PFILE_LOCK FileLock, + IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL, + IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL + ); + +NTKERNELAPI +VOID +FsRtlUninitializeFileLock ( + IN PFILE_LOCK FileLock + ); + +NTKERNELAPI +NTSTATUS +FsRtlProcessFileLock ( + IN PFILE_LOCK FileLock, + IN PIRP Irp, + IN PVOID Context OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +FsRtlCheckLockForReadAccess ( + IN PFILE_LOCK FileLock, + IN PIRP Irp + ); + +NTKERNELAPI +BOOLEAN +FsRtlCheckLockForWriteAccess ( + IN PFILE_LOCK FileLock, + IN PIRP Irp + ); + +NTKERNELAPI +BOOLEAN +FsRtlFastCheckLockForRead ( + IN PFILE_LOCK FileLock, + IN PLARGE_INTEGER StartingByte, + IN PLARGE_INTEGER Length, + IN ULONG Key, + IN PFILE_OBJECT FileObject, + IN PVOID ProcessId + ); + +NTKERNELAPI +BOOLEAN +FsRtlFastCheckLockForWrite ( + IN PFILE_LOCK FileLock, + IN PLARGE_INTEGER StartingByte, + IN PLARGE_INTEGER Length, + IN ULONG Key, + IN PVOID FileObject, + IN PVOID ProcessId + ); + +NTKERNELAPI +PFILE_LOCK_INFO +FsRtlGetNextFileLock ( + IN PFILE_LOCK FileLock, + IN BOOLEAN Restart + ); + +NTKERNELAPI +NTSTATUS +FsRtlFastUnlockSingle ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN LARGE_INTEGER UNALIGNED *FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS ProcessId, + IN ULONG Key, + IN PVOID Context OPTIONAL, + IN BOOLEAN AlreadySynchronized + ); + +NTKERNELAPI +NTSTATUS +FsRtlFastUnlockAll ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PEPROCESS ProcessId, + IN PVOID Context OPTIONAL + ); + +NTKERNELAPI +NTSTATUS +FsRtlFastUnlockAllByKey ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PEPROCESS ProcessId, + IN ULONG Key, + IN PVOID Context OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +FsRtlPrivateLock ( + IN PFILE_LOCK FileLock, + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PLARGE_INTEGER Length, + IN PEPROCESS ProcessId, + IN ULONG Key, + IN BOOLEAN FailImmediately, + IN BOOLEAN ExclusiveLock, + OUT PIO_STATUS_BLOCK Iosb, + IN PIRP Irp, + IN PVOID Context, + IN BOOLEAN AlreadySynchronized + ); + +// +// BOOLEAN +// FsRtlFastLock ( +// IN PFILE_LOCK FileLock, +// IN PFILE_OBJECT FileObject, +// IN PLARGE_INTEGER FileOffset, +// IN PLARGE_INTEGER Length, +// IN PEPROCESS ProcessId, +// IN ULONG Key, +// IN BOOLEAN FailImmediately, +// IN BOOLEAN ExclusiveLock, +// OUT PIO_STATUS_BLOCK Iosb, +// IN PVOID Context OPTIONAL, +// IN BOOLEAN AlreadySynchronized +// ); +// + +#define FsRtlFastLock(A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11) ( \ + FsRtlPrivateLock( A1, /* FileLock */ \ + A2, /* FileObject */ \ + A3, /* FileOffset */ \ + A4, /* Length */ \ + A5, /* ProcessId */ \ + A6, /* Key */ \ + A7, /* FailImmediately */ \ + A8, /* ExclusiveLock */ \ + A9, /* Iosb */ \ + NULL, /* Irp */ \ + A10, /* Context */ \ + A11 /* AlreadySynchronized */ ) \ +) + +// +// BOOLEAN +// FsRtlAreThereCurrentFileLocks ( +// IN PFILE_LOCK FileLock +// ); +// + +#define FsRtlAreThereCurrentFileLocks(FL) ( \ + ((FL)->FastIoIsQuestionable)) + + + +// +// Filesystem property tunneling, implemented in tunnel.c +// + +// +// Tunnel cache structure +// + +typedef struct { + + // + // Mutex for cache manipulation + // + + FAST_MUTEX Mutex; + + // + // Splay Tree of tunneled information keyed by + // DirKey ## Name + // + + PRTL_SPLAY_LINKS Cache; + + // + // Timer queue used to age entries out of the main cache + // + + LIST_ENTRY TimerQueue; + + // + // Keep track of the number of entries in the cache to prevent + // excessive use of memory + // + + USHORT NumEntries; + +} TUNNEL, *PTUNNEL; + +NTKERNELAPI +VOID +FsRtlInitializeTunnelCache ( + IN TUNNEL *Cache); + +NTKERNELAPI +VOID +FsRtlAddToTunnelCache ( + IN TUNNEL *Cache, + IN ULONGLONG DirectoryKey, + IN UNICODE_STRING *ShortName, + IN UNICODE_STRING *LongName, + IN BOOLEAN KeyByShortName, + IN ULONG DataLength, + IN VOID *Data); + +NTKERNELAPI +BOOLEAN +FsRtlFindInTunnelCache ( + IN TUNNEL *Cache, + IN ULONGLONG DirectoryKey, + IN UNICODE_STRING *Name, + OUT UNICODE_STRING *ShortName, + OUT UNICODE_STRING *LongName, + IN OUT ULONG *DataLength, + OUT VOID *Data); + + +NTKERNELAPI +VOID +FsRtlDeleteKeyFromTunnelCache ( + IN TUNNEL *Cache, + IN ULONGLONG DirectoryKey); + + +NTKERNELAPI +VOID +FsRtlDeleteTunnelCache ( + IN TUNNEL *Cache); + + +// +// Dbcs name support routines, implemented in DbcsName.c +// + +// +// The following enumerated type is used to denote the result of name +// comparisons +// + +typedef enum _FSRTL_COMPARISON_RESULT { + LessThan = -1, + EqualTo = 0, + GreaterThan = 1 +} FSRTL_COMPARISON_RESULT; + +#ifdef NLS_MB_CODE_PAGE_TAG +#undef NLS_MB_CODE_PAGE_TAG +#endif // NLS_MB_CODE_PAGE_TAG + + +#define LEGAL_ANSI_CHARACTER_ARRAY (*FsRtlLegalAnsiCharacterArray) // ntosp +#define NLS_MB_CODE_PAGE_TAG (*NlsMbOemCodePageTag) +#define NLS_OEM_LEAD_BYTE_INFO (*NlsOemLeadByteInfo) // ntosp + + +extern UCHAR const* const LEGAL_ANSI_CHARACTER_ARRAY; +extern PUSHORT NLS_OEM_LEAD_BYTE_INFO; // Lead byte info. for ACP + +// +// These following bit values are set in the FsRtlLegalDbcsCharacterArray +// + +#define FSRTL_FAT_LEGAL 0x01 +#define FSRTL_HPFS_LEGAL 0x02 +#define FSRTL_NTFS_LEGAL 0x04 +#define FSRTL_WILD_CHARACTER 0x08 +#define FSRTL_OLE_LEGAL 0x10 +#define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL) + +// +// The following macro is used to determine if an Ansi character is wild. +// + +#define FsRtlIsAnsiCharacterWild(C) ( \ + FsRtlTestAnsiCharacter((C), FALSE, FALSE, FSRTL_WILD_CHARACTER) \ +) + +// +// The following macro is used to determine if an Ansi character is Fat legal. +// + +#define FsRtlIsAnsiCharacterLegalFat(C,WILD_OK) ( \ + FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_FAT_LEGAL) \ +) + +// +// The following macro is used to determine if an Ansi character is Hpfs legal. +// + +#define FsRtlIsAnsiCharacterLegalHpfs(C,WILD_OK) ( \ + FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_HPFS_LEGAL) \ +) + +// +// The following macro is used to determine if an Ansi character is Ntfs legal. +// + +#define FsRtlIsAnsiCharacterLegalNtfs(C,WILD_OK) ( \ + FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_LEGAL) \ +) + +// +// The following macro is used to determine if an Ansi character is +// legal in an Ntfs stream name +// + +#define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) ( \ + FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL) \ +) + +// +// The following macro is used to determine if an Ansi character is legal, +// according to the caller's specification. +// + +#define FsRtlIsAnsiCharacterLegal(C,FLAGS) ( \ + FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS)) \ +) + +// +// The following macro is used to test attributes of an Ansi character, +// according to the caller's specified flags. +// + +#define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) ( \ + ((SCHAR)(C) < 0) ? DEFAULT_RET : \ + FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \ + (FLAGS) | \ + ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0) ) \ +) + + +// +// The following two macros use global data defined in ntos\rtl\nlsdata.c +// +// BOOLEAN +// FsRtlIsLeadDbcsCharacter ( +// IN UCHAR DbcsCharacter +// ); +// +// /*++ +// +// Routine Description: +// +// This routine takes the first bytes of a Dbcs character and +// returns whether it is a lead byte in the system code page. +// +// Arguments: +// +// DbcsCharacter - Supplies the input character being examined +// +// Return Value: +// +// BOOLEAN - TRUE if the input character is a dbcs lead and +// FALSE otherwise +// +// --*/ +// +// + +#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) ( \ + (BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \ + (NLS_MB_CODE_PAGE_TAG && \ + (NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))) \ +) + +NTKERNELAPI +VOID +FsRtlDissectDbcs ( + IN ANSI_STRING InputName, + OUT PANSI_STRING FirstPart, + OUT PANSI_STRING RemainingPart + ); + +NTKERNELAPI +BOOLEAN +FsRtlDoesDbcsContainWildCards ( + IN PANSI_STRING Name + ); + +NTKERNELAPI +BOOLEAN +FsRtlIsDbcsInExpression ( + IN PANSI_STRING Expression, + IN PANSI_STRING Name + ); + +NTKERNELAPI +BOOLEAN +FsRtlIsFatDbcsLegal ( + IN ANSI_STRING DbcsName, + IN BOOLEAN WildCardsPermissible, + IN BOOLEAN PathNamePermissible, + IN BOOLEAN LeadingBackslashPermissible + ); + +// end_ntosp + +NTKERNELAPI +BOOLEAN +FsRtlIsHpfsDbcsLegal ( + IN ANSI_STRING DbcsName, + IN BOOLEAN WildCardsPermissible, + IN BOOLEAN PathNamePermissible, + IN BOOLEAN LeadingBackslashPermissible + ); + + +// +// Exception filter routines, implemented in Filter.c +// + +NTKERNELAPI +NTSTATUS +FsRtlNormalizeNtstatus ( + IN NTSTATUS Exception, + IN NTSTATUS GenericException + ); + +NTKERNELAPI +BOOLEAN +FsRtlIsNtstatusExpected ( + IN NTSTATUS Exception + ); + +// +// The following procedures are used to allocate executive pool and raise +// insufficient resource status if pool isn't currently available. +// + +#define FsRtlAllocatePoolWithTag(PoolType, NumberOfBytes, Tag) \ + ExAllocatePoolWithTag((POOL_TYPE)((PoolType) | POOL_RAISE_IF_ALLOCATION_FAILURE), \ + NumberOfBytes, \ + Tag) + + +#define FsRtlAllocatePoolWithQuotaTag(PoolType, NumberOfBytes, Tag) \ + ExAllocatePoolWithQuotaTag((POOL_TYPE)((PoolType) | POOL_RAISE_IF_ALLOCATION_FAILURE), \ + NumberOfBytes, \ + Tag) + +// +// The following function allocates a resource from the FsRtl pool. +// + +NTKERNELAPI +PERESOURCE +FsRtlAllocateResource ( + ); + + +// +// Large Integer Mapped Control Blocks routines, implemented in LargeMcb.c +// +// Originally this structure was truly opaque and code outside largemcb was +// never allowed to examine or alter the structures. However, for performance +// reasons we want to allow ntfs the ability to quickly truncate down the +// mcb without the overhead of an actual call to largemcb.c. So to do that we +// need to export the structure. This structure is not exact. The Mapping field +// is declared here as a pvoid but largemcb.c it is a pointer to mapping pairs. +// + +typedef struct _LARGE_MCB { + PFAST_MUTEX FastMutex; + ULONG MaximumPairCount; + ULONG PairCount; + POOL_TYPE PoolType; + PVOID Mapping; +} LARGE_MCB; +typedef LARGE_MCB *PLARGE_MCB; + +NTKERNELAPI +VOID +FsRtlInitializeLargeMcb ( + IN PLARGE_MCB Mcb, + IN POOL_TYPE PoolType + ); + +NTKERNELAPI +VOID +FsRtlUninitializeLargeMcb ( + IN PLARGE_MCB Mcb + ); + +NTKERNELAPI +VOID +FsRtlResetLargeMcb ( + IN PLARGE_MCB Mcb, + IN BOOLEAN SelfSynchronized + ); + +NTKERNELAPI +VOID +FsRtlTruncateLargeMcb ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn + ); + +NTKERNELAPI +BOOLEAN +FsRtlAddLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Lbn, + IN LONGLONG SectorCount + ); + +NTKERNELAPI +VOID +FsRtlRemoveLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount + ); + +NTKERNELAPI +BOOLEAN +FsRtlLookupLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +FsRtlLookupLastLargeMcbEntry ( + IN PLARGE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn + ); + +NTKERNELAPI +BOOLEAN +FsRtlLookupLastLargeMcbEntryAndIndex ( + IN PLARGE_MCB OpaqueMcb, + OUT PLONGLONG LargeVbn, + OUT PLONGLONG LargeLbn, + OUT PULONG Index + ); + +NTKERNELAPI +ULONG +FsRtlNumberOfRunsInLargeMcb ( + IN PLARGE_MCB Mcb + ); + +NTKERNELAPI +BOOLEAN +FsRtlGetNextLargeMcbEntry ( + IN PLARGE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount + ); + +NTKERNELAPI +BOOLEAN +FsRtlSplitLargeMcb ( + IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount + ); + + +// +// Mapped Control Blocks routines, implemented in Mcb.c +// +// An MCB is an opaque structure but we need to declare the size of +// it here so that users can allocate space for one. Consequently the +// size computation here must be updated by hand if the MCB changes. +// + +typedef struct _MCB { + LARGE_MCB DummyFieldThatSizesThisStructureCorrectly; +} MCB; +typedef MCB *PMCB; + +NTKERNELAPI +VOID +FsRtlInitializeMcb ( + IN PMCB Mcb, + IN POOL_TYPE PoolType + ); + +NTKERNELAPI +VOID +FsRtlUninitializeMcb ( + IN PMCB Mcb + ); + +NTKERNELAPI +VOID +FsRtlTruncateMcb ( + IN PMCB Mcb, + IN VBN Vbn + ); + +NTKERNELAPI +BOOLEAN +FsRtlAddMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + IN LBN Lbn, + IN ULONG SectorCount + ); + +NTKERNELAPI +VOID +FsRtlRemoveMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + IN ULONG SectorCount + ); + +NTKERNELAPI +BOOLEAN +FsRtlLookupMcbEntry ( + IN PMCB Mcb, + IN VBN Vbn, + OUT PLBN Lbn, + OUT PULONG SectorCount OPTIONAL, + OUT PULONG Index + ); + +NTKERNELAPI +BOOLEAN +FsRtlLookupLastMcbEntry ( + IN PMCB Mcb, + OUT PVBN Vbn, + OUT PLBN Lbn + ); + +NTKERNELAPI +ULONG +FsRtlNumberOfRunsInMcb ( + IN PMCB Mcb + ); + +NTKERNELAPI +BOOLEAN +FsRtlGetNextMcbEntry ( + IN PMCB Mcb, + IN ULONG RunIndex, + OUT PVBN Vbn, + OUT PLBN Lbn, + OUT PULONG SectorCount + ); + +// +// Fault Tolerance routines, implemented in FaultTol.c +// +// The routines in this package implement routines that help file +// systems interact with the FT device drivers. +// + +NTKERNELAPI +NTSTATUS +FsRtlBalanceReads ( + IN PDEVICE_OBJECT TargetDevice + ); + + +// +// Oplock routines, implemented in Oplock.c +// +// An OPLOCK is an opaque structure, we declare it as a PVOID and +// allocate the actual memory only when needed. +// + +typedef PVOID OPLOCK, *POPLOCK; + +typedef +VOID +(*POPLOCK_WAIT_COMPLETE_ROUTINE) ( + IN PVOID Context, + IN PIRP Irp + ); + +typedef +VOID +(*POPLOCK_FS_PREPOST_IRP) ( + IN PVOID Context, + IN PIRP Irp + ); + +NTKERNELAPI +VOID +FsRtlInitializeOplock ( + IN OUT POPLOCK Oplock + ); + +NTKERNELAPI +VOID +FsRtlUninitializeOplock ( + IN OUT POPLOCK Oplock + ); + +NTKERNELAPI +NTSTATUS +FsRtlOplockFsctrl ( + IN POPLOCK Oplock, + IN PIRP Irp, + IN ULONG OpenCount + ); + +NTKERNELAPI +NTSTATUS +FsRtlCheckOplock ( + IN POPLOCK Oplock, + IN PIRP Irp, + IN PVOID Context, + IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL, + IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +FsRtlOplockIsFastIoPossible ( + IN POPLOCK Oplock + ); + +NTKERNELAPI +BOOLEAN +FsRtlCurrentBatchOplock ( + IN POPLOCK Oplock + ); + + +// +// Volume lock/unlock notification routines, implemented in PnP.c +// +// These routines provide PnP volume lock notification support +// for all filesystems. +// + +#define FSRTL_VOLUME_DISMOUNT 1 +#define FSRTL_VOLUME_DISMOUNT_FAILED 2 +#define FSRTL_VOLUME_LOCK 3 +#define FSRTL_VOLUME_LOCK_FAILED 4 +#define FSRTL_VOLUME_UNLOCK 5 +#define FSRTL_VOLUME_MOUNT 6 + +NTKERNELAPI +NTSTATUS +FsRtlNotifyVolumeEvent ( + IN PFILE_OBJECT FileObject, + IN ULONG EventCode + ); + +// +// Notify Change routines, implemented in Notify.c +// +// These routines provide Notify Change support for all filesystems. +// Any of the 'Full' notify routines will support returning the +// change information into the user's buffer. +// + +typedef PVOID PNOTIFY_SYNC; + +typedef +BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) ( + IN PVOID NotifyContext, + IN PVOID TargetContext, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext + ); + +typedef +BOOLEAN (*PFILTER_REPORT_CHANGE) ( + IN PVOID NotifyContext, + IN PVOID FilterContext + ); + +NTKERNELAPI +VOID +FsRtlNotifyInitializeSync ( + IN PNOTIFY_SYNC *NotifySync + ); + +NTKERNELAPI +VOID +FsRtlNotifyUninitializeSync ( + IN PNOTIFY_SYNC *NotifySync + ); + +NTKERNELAPI +VOID +FsRtlNotifyFullChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN BOOLEAN WatchTree, + IN BOOLEAN IgnoreBuffer, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp, + IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL + ); + +NTKERNELAPI +VOID +FsRtlNotifyFilterChangeDirectory ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext, + IN PSTRING FullDirectoryName, + IN BOOLEAN WatchTree, + IN BOOLEAN IgnoreBuffer, + IN ULONG CompletionFilter, + IN PIRP NotifyIrp, + IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL, + IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL, + IN PFILTER_REPORT_CHANGE FilterCallback OPTIONAL + ); + +NTKERNELAPI +VOID +FsRtlNotifyFilterReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN USHORT TargetNameOffset, + IN PSTRING StreamName OPTIONAL, + IN PSTRING NormalizedParentName OPTIONAL, + IN ULONG FilterMatch, + IN ULONG Action, + IN PVOID TargetContext, + IN PVOID FilterContext + ); + +NTKERNELAPI +VOID +FsRtlNotifyFullReportChange ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PSTRING FullTargetName, + IN USHORT TargetNameOffset, + IN PSTRING StreamName OPTIONAL, + IN PSTRING NormalizedParentName OPTIONAL, + IN ULONG FilterMatch, + IN ULONG Action, + IN PVOID TargetContext + ); + +NTKERNELAPI +VOID +FsRtlNotifyCleanup ( + IN PNOTIFY_SYNC NotifySync, + IN PLIST_ENTRY NotifyList, + IN PVOID FsContext + ); + + +// +// Unicode Name support routines, implemented in Name.c +// +// The routines here are used to manipulate unicode names +// + +// +// The following macro is used to determine if a character is wild. +// + +#define FsRtlIsUnicodeCharacterWild(C) ( \ + (((C) >= 0x40) ? FALSE : FlagOn( LEGAL_ANSI_CHARACTER_ARRAY[(C)], \ + FSRTL_WILD_CHARACTER ) ) \ +) + +NTKERNELAPI +VOID +FsRtlDissectName ( + IN UNICODE_STRING Path, + OUT PUNICODE_STRING FirstName, + OUT PUNICODE_STRING RemainingName + ); + +NTKERNELAPI +BOOLEAN +FsRtlDoesNameContainWildCards ( + IN PUNICODE_STRING Name + ); + +NTKERNELAPI +BOOLEAN +FsRtlAreNamesEqual ( + PCUNICODE_STRING ConstantNameA, + PCUNICODE_STRING ConstantNameB, + IN BOOLEAN IgnoreCase, + IN PCWCH UpcaseTable OPTIONAL + ); + +NTKERNELAPI +BOOLEAN +FsRtlIsNameInExpression ( + IN PUNICODE_STRING Expression, + IN PUNICODE_STRING Name, + IN BOOLEAN IgnoreCase, + IN PWCH UpcaseTable OPTIONAL + ); + + +// +// Stack Overflow support routine, implemented in StackOvf.c +// + +typedef +VOID +(*PFSRTL_STACK_OVERFLOW_ROUTINE) ( + IN PVOID Context, + IN PKEVENT Event + ); + +NTKERNELAPI +VOID +FsRtlPostStackOverflow ( + IN PVOID Context, + IN PKEVENT Event, + IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine + ); + +NTKERNELAPI +VOID +FsRtlPostPagingFileStackOverflow ( + IN PVOID Context, + IN PKEVENT Event, + IN PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine + ); + +// +// UNC Provider support +// + +NTKERNELAPI +NTSTATUS +FsRtlRegisterUncProvider( + IN OUT PHANDLE MupHandle, + IN PUNICODE_STRING RedirectorDeviceName, + IN BOOLEAN MailslotsSupported + ); + +NTKERNELAPI +VOID +FsRtlDeregisterUncProvider( + IN HANDLE Handle + ); + +// +// File System Filter PerStream Context Support +// + +// +// Filesystem filter drivers use these APIs to associate context +// with open streams (for filesystems that support this). +// + +// +// OwnerId should uniquely identify a particular filter driver +// (e.g. the address of the driver's device object). +// InstanceId can be used to distinguish distinct contexts associated +// by a filter driver with a single stream (e.g. the address of the +// PerStream Context structure). +// + +// +// This structure needs to be embedded within the users context that +// they want to associate with a given stream +// + +typedef struct _FSRTL_PER_STREAM_CONTEXT { + // + // This is linked into the StreamContext list inside the + // FSRTL_ADVANCED_FCB_HEADER structure. + // + + LIST_ENTRY Links; + + // + // A Unique ID for this filter (ex: address of Driver Object, Device + // Object, or Device Extension) + // + + PVOID OwnerId; + + // + // An optional ID to differentiate different contexts for the same + // filter. + // + + PVOID InstanceId; + + // + // A callback routine which is called by the underlying file system + // when the stream is being torn down. When this routine is called + // the given context has already been removed from the context linked + // list. The callback routine cannot recursively call down into the + // filesystem or acquire any of their resources which they might hold + // when calling the filesystem outside of the callback. This must + // be defined. + // + + PFREE_FUNCTION FreeCallback; + +} FSRTL_PER_STREAM_CONTEXT, *PFSRTL_PER_STREAM_CONTEXT; + + +// +// This will initialize the given FSRTL_PER_STREAM_CONTEXT structure. This +// should be used before calling "FsRtlInsertPerStreamContext". +// + +#define FsRtlInitPerStreamContext( _fc, _owner, _inst, _cb) \ + ((_fc)->OwnerId = (_owner), \ + (_fc)->InstanceId = (_inst), \ + (_fc)->FreeCallback = (_cb)) + +// +// Given a FileObject this will return the StreamContext pointer that +// needs to be passed into the other FsRtl PerStream Context routines. +// + +#define FsRtlGetPerStreamContextPointer(_fo) \ + ((PFSRTL_ADVANCED_FCB_HEADER)((_fo)->FsContext)) + +// +// This will test to see if PerStream contexts are supported for the given +// FileObject +// + +#define FsRtlSupportsPerStreamContexts(_fo) \ + ((NULL != FsRtlGetPerStreamContextPointer(_fo)) && \ + FlagOn(FsRtlGetPerStreamContextPointer(_fo)->Flags2, \ + FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)) + +// +// Associate the context at Ptr with the given stream. The Ptr structure +// should be filled in by the caller before calling this routine (see +// FsRtlInitPerStreamContext). If the underlying filesystem does not support +// filter contexts, STATUS_INVALID_DEVICE_REQUEST will be returned. +// + +NTKERNELAPI +NTSTATUS +FsRtlInsertPerStreamContext ( + IN PFSRTL_ADVANCED_FCB_HEADER PerStreamContext, + IN PFSRTL_PER_STREAM_CONTEXT Ptr + ); + +// +// Lookup a filter context associated with the stream specified. The first +// context matching OwnerId (and InstanceId, if present) is returned. By not +// specifying InstanceId, a filter driver can search for any context that it +// has previously associated with a stream. If no matching context is found, +// NULL is returned. If the file system does not support filter contexts, +// NULL is returned. +// + +NTKERNELAPI +PFSRTL_PER_STREAM_CONTEXT +FsRtlLookupPerStreamContextInternal ( + IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, + IN PVOID OwnerId OPTIONAL, + IN PVOID InstanceId OPTIONAL + ); + +#define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \ + (((NULL != (_sc)) && \ + FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \ + !IsListEmpty(&(_sc)->FilterContexts)) ? \ + FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : \ + NULL) + +// +// Normally, contexts should be deleted when the file system notifies the +// filter that the stream is being closed. There are cases when a filter +// may want to remove all existing contexts for a specific volume. This +// routine should be called at those times. This routine should NOT be +// called for the following cases: +// - Inside your FreeCallback handler - The underlying file system has +// already removed it from the linked list). +// - Inside your IRP_CLOSE handler - If you do this then you will not +// be notified when the stream is torn down. +// +// This functions identically to FsRtlLookupPerStreamContext, except that the +// returned context has been removed from the list. +// + +NTKERNELAPI +PFSRTL_PER_STREAM_CONTEXT +FsRtlRemovePerStreamContext ( + IN PFSRTL_ADVANCED_FCB_HEADER StreamContext, + IN PVOID OwnerId OPTIONAL, + IN PVOID InstanceId OPTIONAL + ); + + +// +// APIs for file systems to use for initializing and cleaning up +// the Advaned FCB Header fields for PerStreamContext support +// + +// +// This will properly initialize the advanced header so that it can be +// used with PerStream contexts. +// Note: A fast mutex must be placed in an advanced header. It is the +// caller's responsibility to properly create and initialize this +// mutex before calling this macro. The mutex field is only set +// if a non-NULL value is passed in. +// + +#define FsRtlSetupAdvancedHeader( _advhdr, _fmutx ) \ +{ \ + SetFlag( (_advhdr)->Flags, FSRTL_FLAG_ADVANCED_HEADER ); \ + SetFlag( (_advhdr)->Flags2, FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS ); \ + InitializeListHead( &(_advhdr)->FilterContexts ); \ + if ((_fmutx) != NULL) { \ + (_advhdr)->FastMutex = (_fmutx); \ + } \ +} + +// +// File systems call this API to free any filter contexts still associated +// with an FSRTL_COMMON_FCB_HEADER that they are tearing down. +// The FreeCallback routine for each filter context will be called. +// + +NTKERNELAPI +VOID +FsRtlTeardownPerStreamContexts ( + IN PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader + ); + +//++ +// +// VOID +// FsRtlCompleteRequest ( +// IN PIRP Irp, +// IN NTSTATUS Status +// ); +// +// Routine Description: +// +// This routine is used to complete an IRP with the indicated +// status. It does the necessary raise and lower of IRQL. +// +// Arguments: +// +// Irp - Supplies a pointer to the Irp to complete +// +// Status - Supplies the completion status for the Irp +// +// Return Value: +// +// None. +// +//-- + +#define FsRtlCompleteRequest(IRP,STATUS) { \ + (IRP)->IoStatus.Status = (STATUS); \ + IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \ +} + + +//++ +// +// VOID +// FsRtlEnterFileSystem ( +// ); +// +// Routine Description: +// +// This routine is used when entering a file system (e.g., through its +// Fsd entry point). It ensures that the file system cannot be suspended +// while running and thus block other file I/O requests. Upon exit +// the file system must call FsRtlExitFileSystem. +// +// Arguments: +// +// Return Value: +// +// None. +// +//-- + +#define FsRtlEnterFileSystem() { \ + KeEnterCriticalRegion(); \ +} + +//++ +// +// VOID +// FsRtlExitFileSystem ( +// ); +// +// Routine Description: +// +// This routine is used when exiting a file system (e.g., through its +// Fsd entry point). +// +// Arguments: +// +// Return Value: +// +// None. +// +//-- + +#define FsRtlExitFileSystem() { \ + KeLeaveCriticalRegion(); \ +} + + +VOID +FsRtlIncrementCcFastReadNotPossible( VOID ); + +VOID +FsRtlIncrementCcFastReadWait( VOID ); + +VOID +FsRtlIncrementCcFastReadNoWait( VOID ); + +VOID +FsRtlIncrementCcFastReadResourceMiss( VOID ); + +// +// Returns TRUE if the given fileObject represents a paging file, returns +// FALSE otherwise. +// + +LOGICAL +FsRtlIsPagingFile ( + IN PFILE_OBJECT FileObject + ); + +// +// Define two constants describing the view size (and alignment) +// that the Cache Manager uses to map files. +// + +#define VACB_MAPPING_GRANULARITY (0x40000) +#define VACB_OFFSET_SHIFT (18) + +// +// Public portion of BCB +// + +typedef struct _PUBLIC_BCB { + + // + // Type and size of this record + // + // NOTE: The first four fields must be the same as the BCB in cc.h. + // + + CSHORT NodeTypeCode; + CSHORT NodeByteSize; + + // + // Description of range of file which is currently mapped. + // + + ULONG MappedLength; + LARGE_INTEGER MappedFileOffset; +} PUBLIC_BCB, *PPUBLIC_BCB; + +// +// File Sizes structure. +// + +typedef struct _CC_FILE_SIZES { + + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; + +} CC_FILE_SIZES, *PCC_FILE_SIZES; + +// +// Define a Cache Manager callback structure. These routines are required +// by the Lazy Writer, so that it can acquire resources in the right order +// to avoid deadlocks. Note that otherwise you would have most FS requests +// acquiring FS resources first and caching structures second, while the +// Lazy Writer needs to acquire its own resources first, and then FS +// structures later as it calls the file system. +// + +// +// First define the procedure pointer typedefs +// + +// +// This routine is called by the Lazy Writer prior to doing a write, +// since this will require some file system resources associated with +// this cached file. The context parameter supplied is whatever the FS +// passed as the LazyWriteContext parameter when is called +// CcInitializeCacheMap. +// + +typedef +BOOLEAN (*PACQUIRE_FOR_LAZY_WRITE) ( + IN PVOID Context, + IN BOOLEAN Wait + ); + +// +// This routine releases the Context acquired above. +// + +typedef +VOID (*PRELEASE_FROM_LAZY_WRITE) ( + IN PVOID Context + ); + +// +// This routine is called by the Lazy Writer prior to doing a readahead. +// + +typedef +BOOLEAN (*PACQUIRE_FOR_READ_AHEAD) ( + IN PVOID Context, + IN BOOLEAN Wait + ); + +// +// This routine releases the Context acquired above. +// + +typedef +VOID (*PRELEASE_FROM_READ_AHEAD) ( + IN PVOID Context + ); + +typedef struct _CACHE_MANAGER_CALLBACKS { + + PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite; + PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite; + PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead; + PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead; + +} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS; + +// +// This structure is passed into CcUninitializeCacheMap +// if the caller wants to know when the cache map is deleted. +// + +typedef struct _CACHE_UNINITIALIZE_EVENT { + struct _CACHE_UNINITIALIZE_EVENT *Next; + KEVENT Event; +} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT; + +// +// Callback routine for retrieving dirty pages from Cache Manager. +// + +typedef +VOID (*PDIRTY_PAGE_ROUTINE) ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN PLARGE_INTEGER OldestLsn, + IN PLARGE_INTEGER NewestLsn, + IN PVOID Context1, + IN PVOID Context2 + ); + +// +// Callback routine for doing log file flushes to Lsn. +// + +typedef +VOID (*PFLUSH_TO_LSN) ( + IN PVOID LogHandle, + IN LARGE_INTEGER Lsn + ); + +// +// Macro to test whether a file is cached or not. +// + +#define CcIsFileCached(FO) ( \ + ((FO)->SectionObjectPointer != NULL) && \ + (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \ +) + +extern ULONG CcFastMdlReadWait; +// +// The following routines are intended for use by File Systems Only. +// + +NTKERNELAPI +VOID +CcInitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes, + IN BOOLEAN PinAccess, + IN PCACHE_MANAGER_CALLBACKS Callbacks, + IN PVOID LazyWriteContext + ); + +NTKERNELAPI +BOOLEAN +CcUninitializeCacheMap ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER TruncateSize OPTIONAL, + IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL + ); + +NTKERNELAPI +VOID +CcSetFileSizes ( + IN PFILE_OBJECT FileObject, + IN PCC_FILE_SIZES FileSizes + ); + +// +// VOID +// CcFastIoSetFileSizes ( +// IN PFILE_OBJECT FileObject, +// IN PCC_FILE_SIZES FileSizes +// ); +// + +#define CcGetFileSizePointer(FO) ( \ + ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \ +) + +NTKERNELAPI +BOOLEAN +CcPurgeCacheSection ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + IN BOOLEAN UninitializeCacheMaps + ); + +NTKERNELAPI +VOID +CcSetDirtyPageThreshold ( + IN PFILE_OBJECT FileObject, + IN ULONG DirtyPageThreshold + ); + +NTKERNELAPI +VOID +CcFlushCache ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN PLARGE_INTEGER FileOffset OPTIONAL, + IN ULONG Length, + OUT PIO_STATUS_BLOCK IoStatus OPTIONAL + ); + +NTKERNELAPI +LARGE_INTEGER +CcGetFlushedValidData ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer, + IN BOOLEAN BcbListHeld + ); + +NTKERNELAPI +BOOLEAN +CcZeroData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER StartOffset, + IN PLARGE_INTEGER EndOffset, + IN BOOLEAN Wait + ); + +NTKERNELAPI +PVOID +CcRemapBcb ( + IN PVOID Bcb + ); + +NTKERNELAPI +VOID +CcRepinBcb ( + IN PVOID Bcb + ); + +NTKERNELAPI +VOID +CcUnpinRepinnedBcb ( + IN PVOID Bcb, + IN BOOLEAN WriteThrough, + OUT PIO_STATUS_BLOCK IoStatus + ); + +NTKERNELAPI +PFILE_OBJECT +CcGetFileObjectFromSectionPtrs ( + IN PSECTION_OBJECT_POINTERS SectionObjectPointer + ); + +NTKERNELAPI +PFILE_OBJECT +CcGetFileObjectFromBcb ( + IN PVOID Bcb + ); + +// +// These routines are implemented to support write throttling. +// + +// +// BOOLEAN +// CcCopyWriteWontFlush ( +// IN PFILE_OBJECT FileObject, +// IN PLARGE_INTEGER FileOffset, +// IN ULONG Length +// ); +// + +#define CcCopyWriteWontFlush(FO,FOFF,LEN) ((LEN) <= 0X10000) + +NTKERNELAPI +BOOLEAN +CcCanIWrite ( + IN PFILE_OBJECT FileObject, + IN ULONG BytesToWrite, + IN BOOLEAN Wait, + IN BOOLEAN Retrying + ); + +typedef +VOID (*PCC_POST_DEFERRED_WRITE) ( + IN PVOID Context1, + IN PVOID Context2 + ); + +NTKERNELAPI +VOID +CcDeferWrite ( + IN PFILE_OBJECT FileObject, + IN PCC_POST_DEFERRED_WRITE PostRoutine, + IN PVOID Context1, + IN PVOID Context2, + IN ULONG BytesToWrite, + IN BOOLEAN Retrying + ); + +// +// The following routines provide a data copy interface to the cache, and +// are intended for use by File Servers and File Systems. +// + +NTKERNELAPI +BOOLEAN +CcCopyRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus + ); + +NTKERNELAPI +VOID +CcFastCopyRead ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN ULONG PageCount, + OUT PVOID Buffer, + OUT PIO_STATUS_BLOCK IoStatus + ); + +NTKERNELAPI +BOOLEAN +CcCopyWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Wait, + IN PVOID Buffer + ); + +NTKERNELAPI +VOID +CcFastCopyWrite ( + IN PFILE_OBJECT FileObject, + IN ULONG FileOffset, + IN ULONG Length, + IN PVOID Buffer + ); + +// +// The following routines provide an Mdl interface for transfers to and +// from the cache, and are primarily intended for File Servers. +// +// NOBODY SHOULD BE CALLING THESE MDL ROUTINES DIRECTLY, USE FSRTL AND +// FASTIO INTERFACES. +// + +NTKERNELAPI +VOID +CcMdlRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus + ); + +// +// This routine is now a wrapper for FastIo if present or CcMdlReadComplete2 +// + +NTKERNELAPI +VOID +CcMdlReadComplete ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain + ); + + +NTKERNELAPI +VOID +CcPrepareMdlWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + OUT PMDL *MdlChain, + OUT PIO_STATUS_BLOCK IoStatus + ); + +// +// This routine is now a wrapper for FastIo if present or CcMdlWriteComplete2 +// + +NTKERNELAPI +VOID +CcMdlWriteComplete ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN PMDL MdlChain + ); + +VOID +CcMdlWriteAbort ( + IN PFILE_OBJECT FileObject, + IN PMDL MdlChain + ); + +// +// Common ReadAhead call for Copy Read and Mdl Read. +// +// ReadAhead should always be invoked by calling the CcReadAhead macro, +// which tests first to see if the read is large enough to warrant read +// ahead. Measurements have shown that, calling the read ahead routine +// actually decreases performance for small reads, such as issued by +// many compilers and linkers. Compilers simply want all of the include +// files to stay in memory after being read the first time. +// + +#define CcReadAhead(FO,FOFF,LEN) { \ + if ((LEN) >= 256) { \ + CcScheduleReadAhead((FO),(FOFF),(LEN)); \ + } \ +} + +NTKERNELAPI +VOID +CcScheduleReadAhead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length + ); + +// +// The following routine allows a caller to wait for the next batch +// of lazy writer work to complete. In particular, this provides a +// mechanism for a caller to be sure that all avaliable lazy closes +// at the time of this call have issued. +// + +NTSTATUS +CcWaitForCurrentLazyWriterActivity ( + VOID + ); + +// +// This routine changes the read ahead granularity for a file, which is +// PAGE_SIZE by default. +// + +NTKERNELAPI +VOID +CcSetReadAheadGranularity ( + IN PFILE_OBJECT FileObject, + IN ULONG Granularity + ); + +// +// The following routines provide direct access data which is pinned in the +// cache, and is primarily intended for use by File Systems. In particular, +// this mode of access is ideal for dealing with volume structures. +// + +// +// Flags for pinning +// + +// +// Synchronous Wait - normally specified. This pattern may be specified as TRUE. +// + +#define PIN_WAIT (1) + +// +// Acquire metadata Bcb exclusive (default is shared, Lazy Writer uses exclusive). +// +// Must be set with PIN_WAIT. +// + +#define PIN_EXCLUSIVE (2) + +// +// Acquire metadata Bcb but do not fault data in. Default is to fault the data in. +// This unusual flag is only used by Ntfs for cache coherency synchronization between +// compressed and uncompressed streams for the same compressed file. +// +// Must be set with PIN_WAIT. +// + +#define PIN_NO_READ (4) + +// +// This option may be used to pin data only if the Bcb already exists. If the Bcb +// does not already exist - the pin is unsuccessful and no Bcb is returned. This routine +// provides a way to see if data is already pinned (and possibly dirty) in the cache, +// without forcing a fault if the data is not there. +// + +#define PIN_IF_BCB (8) + +// +// Flags for mapping +// + +// +// Synchronous Wait - normally specified. This pattern may be specified as TRUE. +// + +#define MAP_WAIT (1) + +// +// Acquire metadata Bcb but do not fault data in. Default is to fault the data in. +// This should not overlap with any of the PIN_ flags so they can be passed down to +// CcPinFileData +// + +#define MAP_NO_READ (16) + + + +NTKERNELAPI +BOOLEAN +CcPinRead ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG Flags, + OUT PVOID *Bcb, + OUT PVOID *Buffer + ); + +NTKERNELAPI +BOOLEAN +CcMapData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG Flags, + OUT PVOID *Bcb, + OUT PVOID *Buffer + ); + +NTKERNELAPI +BOOLEAN +CcPinMappedData ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN ULONG Flags, + IN OUT PVOID *Bcb + ); + +NTKERNELAPI +BOOLEAN +CcPreparePinWrite ( + IN PFILE_OBJECT FileObject, + IN PLARGE_INTEGER FileOffset, + IN ULONG Length, + IN BOOLEAN Zero, + IN ULONG Flags, + OUT PVOID *Bcb, + OUT PVOID *Buffer + ); + +NTKERNELAPI +VOID +CcSetDirtyPinnedData ( + IN PVOID BcbVoid, + IN PLARGE_INTEGER Lsn OPTIONAL + ); + +NTKERNELAPI +VOID +CcUnpinData ( + IN PVOID Bcb + ); + +NTKERNELAPI +VOID +CcSetBcbOwnerPointer ( + IN PVOID Bcb, + IN PVOID OwnerPointer + ); + +NTKERNELAPI +VOID +CcUnpinDataForThread ( + IN PVOID Bcb, + IN ERESOURCE_THREAD ResourceThreadId + ); + + +NTKERNELAPI +VOID +CcSetAdditionalCacheAttributes ( + IN PFILE_OBJECT FileObject, + IN BOOLEAN DisableReadAhead, + IN BOOLEAN DisableWriteBehind + ); + +NTKERNELAPI +VOID +CcSetLogHandleForFile ( + IN PFILE_OBJECT FileObject, + IN PVOID LogHandle, + IN PFLUSH_TO_LSN FlushToLsnRoutine + ); + +NTKERNELAPI +LARGE_INTEGER +CcGetDirtyPages ( + IN PVOID LogHandle, + IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine, + IN PVOID Context1, + IN PVOID Context2 + ); + +NTKERNELAPI +BOOLEAN +CcIsThereDirtyData ( + IN PVPB Vpb + ); + +#ifndef __SSPI_H__ +#define __SSPI_H__ +#define ISSP_LEVEL 32 +#define ISSP_MODE 0 + +typedef WCHAR SEC_WCHAR; +typedef CHAR SEC_CHAR; + +#ifndef __SECSTATUS_DEFINED__ +typedef LONG SECURITY_STATUS; +#define __SECSTATUS_DEFINED__ +#endif + +#define SEC_TEXT TEXT +#define SEC_FAR +#define SEC_ENTRY __stdcall + + +#ifndef __SECHANDLE_DEFINED__ +typedef struct _SecHandle +{ + ULONG_PTR dwLower ; + ULONG_PTR dwUpper ; +} SecHandle, * PSecHandle ; + +#define __SECHANDLE_DEFINED__ +#endif // __SECHANDLE_DEFINED__ + +#define SecInvalidateHandle( x ) \ + ((PSecHandle) x)->dwLower = ((ULONG_PTR) ((INT_PTR)-1)) ; \ + ((PSecHandle) x)->dwUpper = ((ULONG_PTR) ((INT_PTR)-1)) ; \ + +#define SecIsValidHandle( x ) \ + ( ( ((PSecHandle) x)->dwLower != ((ULONG_PTR) ((INT_PTR) -1 ))) && \ + ( ((PSecHandle) x)->dwUpper != ((ULONG_PTR) ((INT_PTR) -1 ))) ) + +typedef SecHandle CredHandle; +typedef PSecHandle PCredHandle; + +typedef SecHandle CtxtHandle; +typedef PSecHandle PCtxtHandle; + +typedef LARGE_INTEGER _SECURITY_INTEGER, SECURITY_INTEGER, *PSECURITY_INTEGER; +typedef SECURITY_INTEGER TimeStamp; +typedef SECURITY_INTEGER SEC_FAR * PTimeStamp; +typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING; + +// +// SecPkgInfo structure +// +// Provides general information about a security provider +// + +typedef struct _SecPkgInfoW +{ + unsigned long fCapabilities; // Capability bitmask + unsigned short wVersion; // Version of driver + unsigned short wRPCID; // ID for RPC Runtime + unsigned long cbMaxToken; // Size of authentication token (max) +#ifdef MIDL_PASS + [string] +#endif + SEC_WCHAR SEC_FAR * Name; // Text name + +#ifdef MIDL_PASS + [string] +#endif + SEC_WCHAR SEC_FAR * Comment; // Comment +} SecPkgInfoW, SEC_FAR * PSecPkgInfoW; + +# define SecPkgInfo SecPkgInfoW +# define PSecPkgInfo PSecPkgInfoW + +// +// Security Package Capabilities +// +#define SECPKG_FLAG_INTEGRITY 0x00000001 // Supports integrity on messages +#define SECPKG_FLAG_PRIVACY 0x00000002 // Supports privacy (confidentiality) +#define SECPKG_FLAG_TOKEN_ONLY 0x00000004 // Only security token needed +#define SECPKG_FLAG_DATAGRAM 0x00000008 // Datagram RPC support +#define SECPKG_FLAG_CONNECTION 0x00000010 // Connection oriented RPC support +#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020 // Full 3-leg required for re-auth. +#define SECPKG_FLAG_CLIENT_ONLY 0x00000040 // Server side functionality not available +#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080 // Supports extended error msgs +#define SECPKG_FLAG_IMPERSONATION 0x00000100 // Supports impersonation +#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200 // Accepts Win32 names +#define SECPKG_FLAG_STREAM 0x00000400 // Supports stream semantics +#define SECPKG_FLAG_NEGOTIABLE 0x00000800 // Can be used by the negotiate package +#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000 // GSS Compatibility Available +#define SECPKG_FLAG_LOGON 0x00002000 // Supports common LsaLogonUser +#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000 // Token Buffers are in ASCII +#define SECPKG_FLAG_FRAGMENT 0x00008000 // Package can fragment to fit +#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000 // Package can perform mutual authentication +#define SECPKG_FLAG_DELEGATION 0x00020000 // Package can delegate + + +#define SECPKG_ID_NONE 0xFFFF + + +// +// SecBuffer +// +// Generic memory descriptors for buffers passed in to the security +// API +// + +typedef struct _SecBuffer { + unsigned long cbBuffer; // Size of the buffer, in bytes + unsigned long BufferType; // Type of the buffer (below) + void SEC_FAR * pvBuffer; // Pointer to the buffer +} SecBuffer, SEC_FAR * PSecBuffer; + +typedef struct _SecBufferDesc { + unsigned long ulVersion; // Version number + unsigned long cBuffers; // Number of buffers +#ifdef MIDL_PASS + [size_is(cBuffers)] +#endif + PSecBuffer pBuffers; // Pointer to array of buffers +} SecBufferDesc, SEC_FAR * PSecBufferDesc; + +#define SECBUFFER_VERSION 0 + +#define SECBUFFER_EMPTY 0 // Undefined, replaced by provider +#define SECBUFFER_DATA 1 // Packet data +#define SECBUFFER_TOKEN 2 // Security token +#define SECBUFFER_PKG_PARAMS 3 // Package specific parameters +#define SECBUFFER_MISSING 4 // Missing Data indicator +#define SECBUFFER_EXTRA 5 // Extra data +#define SECBUFFER_STREAM_TRAILER 6 // Security Trailer +#define SECBUFFER_STREAM_HEADER 7 // Security Header +#define SECBUFFER_NEGOTIATION_INFO 8 // Hints from the negotiation pkg +#define SECBUFFER_PADDING 9 // non-data padding +#define SECBUFFER_STREAM 10 // whole encrypted message +#define SECBUFFER_MECHLIST 11 +#define SECBUFFER_MECHLIST_SIGNATURE 12 +#define SECBUFFER_TARGET 13 +#define SECBUFFER_CHANNEL_BINDINGS 14 + +#define SECBUFFER_ATTRMASK 0xF0000000 +#define SECBUFFER_READONLY 0x80000000 // Buffer is read-only +#define SECBUFFER_RESERVED 0x60000000 // Flags reserved to security system + + +typedef struct _SEC_NEGOTIATION_INFO { + unsigned long Size; // Size of this structure + unsigned long NameLength; // Length of name hint + SEC_WCHAR SEC_FAR * Name; // Name hint + void SEC_FAR * Reserved; // Reserved +} SEC_NEGOTIATION_INFO, SEC_FAR * PSEC_NEGOTIATION_INFO ; + +typedef struct _SEC_CHANNEL_BINDINGS { + unsigned long dwInitiatorAddrType; + unsigned long cbInitiatorLength; + unsigned long dwInitiatorOffset; + unsigned long dwAcceptorAddrType; + unsigned long cbAcceptorLength; + unsigned long dwAcceptorOffset; + unsigned long cbApplicationDataLength; + unsigned long dwApplicationDataOffset; +} SEC_CHANNEL_BINDINGS, SEC_FAR * PSEC_CHANNEL_BINDINGS ; + + +// +// Data Representation Constant: +// +#define SECURITY_NATIVE_DREP 0x00000010 +#define SECURITY_NETWORK_DREP 0x00000000 + +// +// Credential Use Flags +// +#define SECPKG_CRED_INBOUND 0x00000001 +#define SECPKG_CRED_OUTBOUND 0x00000002 +#define SECPKG_CRED_BOTH 0x00000003 +#define SECPKG_CRED_DEFAULT 0x00000004 +#define SECPKG_CRED_RESERVED 0xF0000000 + +// +// InitializeSecurityContext Requirement and return flags: +// + +#define ISC_REQ_DELEGATE 0x00000001 +#define ISC_REQ_MUTUAL_AUTH 0x00000002 +#define ISC_REQ_REPLAY_DETECT 0x00000004 +#define ISC_REQ_SEQUENCE_DETECT 0x00000008 +#define ISC_REQ_CONFIDENTIALITY 0x00000010 +#define ISC_REQ_USE_SESSION_KEY 0x00000020 +#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040 +#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080 +#define ISC_REQ_ALLOCATE_MEMORY 0x00000100 +#define ISC_REQ_USE_DCE_STYLE 0x00000200 +#define ISC_REQ_DATAGRAM 0x00000400 +#define ISC_REQ_CONNECTION 0x00000800 +#define ISC_REQ_CALL_LEVEL 0x00001000 +#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000 +#define ISC_REQ_EXTENDED_ERROR 0x00004000 +#define ISC_REQ_STREAM 0x00008000 +#define ISC_REQ_INTEGRITY 0x00010000 +#define ISC_REQ_IDENTIFY 0x00020000 +#define ISC_REQ_NULL_SESSION 0x00040000 +#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000 +#define ISC_REQ_RESERVED1 0x00100000 +#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000 + +#define ISC_RET_DELEGATE 0x00000001 +#define ISC_RET_MUTUAL_AUTH 0x00000002 +#define ISC_RET_REPLAY_DETECT 0x00000004 +#define ISC_RET_SEQUENCE_DETECT 0x00000008 +#define ISC_RET_CONFIDENTIALITY 0x00000010 +#define ISC_RET_USE_SESSION_KEY 0x00000020 +#define ISC_RET_USED_COLLECTED_CREDS 0x00000040 +#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080 +#define ISC_RET_ALLOCATED_MEMORY 0x00000100 +#define ISC_RET_USED_DCE_STYLE 0x00000200 +#define ISC_RET_DATAGRAM 0x00000400 +#define ISC_RET_CONNECTION 0x00000800 +#define ISC_RET_INTERMEDIATE_RETURN 0x00001000 +#define ISC_RET_CALL_LEVEL 0x00002000 +#define ISC_RET_EXTENDED_ERROR 0x00004000 +#define ISC_RET_STREAM 0x00008000 +#define ISC_RET_INTEGRITY 0x00010000 +#define ISC_RET_IDENTIFY 0x00020000 +#define ISC_RET_NULL_SESSION 0x00040000 +#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000 +#define ISC_RET_RESERVED1 0x00100000 +#define ISC_RET_FRAGMENT_ONLY 0x00200000 + +#define ASC_REQ_DELEGATE 0x00000001 +#define ASC_REQ_MUTUAL_AUTH 0x00000002 +#define ASC_REQ_REPLAY_DETECT 0x00000004 +#define ASC_REQ_SEQUENCE_DETECT 0x00000008 +#define ASC_REQ_CONFIDENTIALITY 0x00000010 +#define ASC_REQ_USE_SESSION_KEY 0x00000020 +#define ASC_REQ_ALLOCATE_MEMORY 0x00000100 +#define ASC_REQ_USE_DCE_STYLE 0x00000200 +#define ASC_REQ_DATAGRAM 0x00000400 +#define ASC_REQ_CONNECTION 0x00000800 +#define ASC_REQ_CALL_LEVEL 0x00001000 +#define ASC_REQ_EXTENDED_ERROR 0x00008000 +#define ASC_REQ_STREAM 0x00010000 +#define ASC_REQ_INTEGRITY 0x00020000 +#define ASC_REQ_LICENSING 0x00040000 +#define ASC_REQ_IDENTIFY 0x00080000 +#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000 +#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000 +#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000 +#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000 +#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000 + +#define ASC_RET_DELEGATE 0x00000001 +#define ASC_RET_MUTUAL_AUTH 0x00000002 +#define ASC_RET_REPLAY_DETECT 0x00000004 +#define ASC_RET_SEQUENCE_DETECT 0x00000008 +#define ASC_RET_CONFIDENTIALITY 0x00000010 +#define ASC_RET_USE_SESSION_KEY 0x00000020 +#define ASC_RET_ALLOCATED_MEMORY 0x00000100 +#define ASC_RET_USED_DCE_STYLE 0x00000200 +#define ASC_RET_DATAGRAM 0x00000400 +#define ASC_RET_CONNECTION 0x00000800 +#define ASC_RET_CALL_LEVEL 0x00002000 // skipped 1000 to be like ISC_ +#define ASC_RET_THIRD_LEG_FAILED 0x00004000 +#define ASC_RET_EXTENDED_ERROR 0x00008000 +#define ASC_RET_STREAM 0x00010000 +#define ASC_RET_INTEGRITY 0x00020000 +#define ASC_RET_LICENSING 0x00040000 +#define ASC_RET_IDENTIFY 0x00080000 +#define ASC_RET_NULL_SESSION 0x00100000 +#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000 +#define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000 +#define ASC_RET_FRAGMENT_ONLY 0x00800000 + +// +// Security Credentials Attributes: +// + +#define SECPKG_CRED_ATTR_NAMES 1 + +typedef struct _SecPkgCredentials_NamesW +{ + SEC_WCHAR SEC_FAR * sUserName; +} SecPkgCredentials_NamesW, SEC_FAR * PSecPkgCredentials_NamesW; + +# define SecPkgCredentials_Names SecPkgCredentials_NamesW +# define PSecPkgCredentials_Names PSecPkgCredentials_NamesW + +// +// Security Context Attributes: +// + +#define SECPKG_ATTR_SIZES 0 +#define SECPKG_ATTR_NAMES 1 +#define SECPKG_ATTR_LIFESPAN 2 +#define SECPKG_ATTR_DCE_INFO 3 +#define SECPKG_ATTR_STREAM_SIZES 4 +#define SECPKG_ATTR_KEY_INFO 5 +#define SECPKG_ATTR_AUTHORITY 6 +#define SECPKG_ATTR_PROTO_INFO 7 +#define SECPKG_ATTR_PASSWORD_EXPIRY 8 +#define SECPKG_ATTR_SESSION_KEY 9 +#define SECPKG_ATTR_PACKAGE_INFO 10 +#define SECPKG_ATTR_USER_FLAGS 11 +#define SECPKG_ATTR_NEGOTIATION_INFO 12 +#define SECPKG_ATTR_NATIVE_NAMES 13 +#define SECPKG_ATTR_FLAGS 14 +#define SECPKG_ATTR_USE_VALIDATED 15 +#define SECPKG_ATTR_CREDENTIAL_NAME 16 +#define SECPKG_ATTR_TARGET_INFORMATION 17 +#define SECPKG_ATTR_ACCESS_TOKEN 18 + +typedef struct _SecPkgContext_Sizes +{ + unsigned long cbMaxToken; + unsigned long cbMaxSignature; + unsigned long cbBlockSize; + unsigned long cbSecurityTrailer; +} SecPkgContext_Sizes, SEC_FAR * PSecPkgContext_Sizes; + +typedef struct _SecPkgContext_StreamSizes +{ + unsigned long cbHeader; + unsigned long cbTrailer; + unsigned long cbMaximumMessage; + unsigned long cBuffers; + unsigned long cbBlockSize; +} SecPkgContext_StreamSizes, * PSecPkgContext_StreamSizes; + +typedef struct _SecPkgContext_NamesW +{ + SEC_WCHAR SEC_FAR * sUserName; +} SecPkgContext_NamesW, SEC_FAR * PSecPkgContext_NamesW; + +# define SecPkgContext_Names SecPkgContext_NamesW +# define PSecPkgContext_Names PSecPkgContext_NamesW + +typedef struct _SecPkgContext_Lifespan +{ + TimeStamp tsStart; + TimeStamp tsExpiry; +} SecPkgContext_Lifespan, SEC_FAR * PSecPkgContext_Lifespan; + +typedef struct _SecPkgContext_DceInfo +{ + unsigned long AuthzSvc; + void SEC_FAR * pPac; +} SecPkgContext_DceInfo, SEC_FAR * PSecPkgContext_DceInfo; + + +typedef struct _SecPkgContext_KeyInfoW +{ + SEC_WCHAR SEC_FAR * sSignatureAlgorithmName; + SEC_WCHAR SEC_FAR * sEncryptAlgorithmName; + unsigned long KeySize; + unsigned long SignatureAlgorithm; + unsigned long EncryptAlgorithm; +} SecPkgContext_KeyInfoW, SEC_FAR * PSecPkgContext_KeyInfoW; + +#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW +#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW + +typedef struct _SecPkgContext_AuthorityW +{ + SEC_WCHAR SEC_FAR * sAuthorityName; +} SecPkgContext_AuthorityW, * PSecPkgContext_AuthorityW; + +#define SecPkgContext_Authority SecPkgContext_AuthorityW +#define PSecPkgContext_Authority PSecPkgContext_AuthorityW + +typedef struct _SecPkgContext_ProtoInfoW +{ + SEC_WCHAR SEC_FAR * sProtocolName; + unsigned long majorVersion; + unsigned long minorVersion; +} SecPkgContext_ProtoInfoW, SEC_FAR * PSecPkgContext_ProtoInfoW; + +#define SecPkgContext_ProtoInfo SecPkgContext_ProtoInfoW +#define PSecPkgContext_ProtoInfo PSecPkgContext_ProtoInfoW + +typedef struct _SecPkgContext_PasswordExpiry +{ + TimeStamp tsPasswordExpires; +} SecPkgContext_PasswordExpiry, SEC_FAR * PSecPkgContext_PasswordExpiry; + +typedef struct _SecPkgContext_SessionKey +{ + unsigned long SessionKeyLength; + unsigned char SEC_FAR * SessionKey; +} SecPkgContext_SessionKey, *PSecPkgContext_SessionKey; + + +typedef struct _SecPkgContext_PackageInfoW +{ + PSecPkgInfoW PackageInfo; +} SecPkgContext_PackageInfoW, SEC_FAR * PSecPkgContext_PackageInfoW; + + +typedef struct _SecPkgContext_UserFlags +{ + unsigned long UserFlags; +} SecPkgContext_UserFlags, SEC_FAR * PSecPkgContext_UserFlags; + +typedef struct _SecPkgContext_Flags +{ + unsigned long Flags; +} SecPkgContext_Flags, SEC_FAR * PSecPkgContext_Flags; + +#define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW +#define PSecPkgContext_PackageInfo PSecPkgContext_PackageInfoW +typedef struct _SecPkgContext_NegotiationInfoW +{ + PSecPkgInfoW PackageInfo ; + unsigned long NegotiationState ; +} SecPkgContext_NegotiationInfoW, SEC_FAR * PSecPkgContext_NegotiationInfoW ; + +# define SecPkgContext_NativeNames SecPkgContext_NativeNamesW +# define PSecPkgContext_NativeNames PSecPkgContext_NativeNamesW +typedef struct _SecPkgContext_CredentialNameW +{ + unsigned long CredentialType; + SEC_WCHAR SEC_FAR *sCredentialName; +} SecPkgContext_CredentialNameW, SEC_FAR * PSecPkgContext_CredentialNameW; + +# define SecPkgContext_CredentialName SecPkgContext_CredentialNameW +# define PSecPkgContext_CredentialName PSecPkgContext_CredentialNameW + +typedef void +(SEC_ENTRY SEC_FAR * SEC_GET_KEY_FN) ( + void SEC_FAR * Arg, // Argument passed in + void SEC_FAR * Principal, // Principal ID + unsigned long KeyVer, // Key Version + void SEC_FAR * SEC_FAR * Key, // Returned ptr to key + SECURITY_STATUS SEC_FAR * Status // returned status + ); + +// +// Flags for ExportSecurityContext +// + +#define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001 // New context is reset to initial state +#define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002 // Old context is deleted during export + + +SECURITY_STATUS SEC_ENTRY +AcquireCredentialsHandleW( +#if ISSP_MODE == 0 // For Kernel mode + PSECURITY_STRING pPrincipal, + PSECURITY_STRING pPackage, +#else + SEC_WCHAR SEC_FAR * pszPrincipal, // Name of principal + SEC_WCHAR SEC_FAR * pszPackage, // Name of package +#endif + unsigned long fCredentialUse, // Flags indicating use + void SEC_FAR * pvLogonId, // Pointer to logon ID + void SEC_FAR * pAuthData, // Package specific data + SEC_GET_KEY_FN pGetKeyFn, // Pointer to GetKey() func + void SEC_FAR * pvGetKeyArgument, // Value to pass to GetKey() + PCredHandle phCredential, // (out) Cred Handle + PTimeStamp ptsExpiry // (out) Lifetime (optional) + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * ACQUIRE_CREDENTIALS_HANDLE_FN_W)( +#if ISSP_MODE == 0 + PSECURITY_STRING, + PSECURITY_STRING, +#else + SEC_WCHAR SEC_FAR *, + SEC_WCHAR SEC_FAR *, +#endif + unsigned long, + void SEC_FAR *, + void SEC_FAR *, + SEC_GET_KEY_FN, + void SEC_FAR *, + PCredHandle, + PTimeStamp); + +# define AcquireCredentialsHandle AcquireCredentialsHandleW +# define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W + +SECURITY_STATUS SEC_ENTRY +FreeCredentialsHandle( + PCredHandle phCredential // Handle to free + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * FREE_CREDENTIALS_HANDLE_FN)( + PCredHandle ); + +SECURITY_STATUS SEC_ENTRY +AddCredentialsW( + PCredHandle hCredentials, +#if ISSP_MODE == 0 // For Kernel mode + PSECURITY_STRING pPrincipal, + PSECURITY_STRING pPackage, +#else + SEC_WCHAR SEC_FAR * pszPrincipal, // Name of principal + SEC_WCHAR SEC_FAR * pszPackage, // Name of package +#endif + unsigned long fCredentialUse, // Flags indicating use + void SEC_FAR * pAuthData, // Package specific data + SEC_GET_KEY_FN pGetKeyFn, // Pointer to GetKey() func + void SEC_FAR * pvGetKeyArgument, // Value to pass to GetKey() + PTimeStamp ptsExpiry // (out) Lifetime (optional) + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * ADD_CREDENTIALS_FN_W)( + PCredHandle, +#if ISSP_MODE == 0 + PSECURITY_STRING, + PSECURITY_STRING, +#else + SEC_WCHAR SEC_FAR *, + SEC_WCHAR SEC_FAR *, +#endif + unsigned long, + void SEC_FAR *, + SEC_GET_KEY_FN, + void SEC_FAR *, + PTimeStamp); + +SECURITY_STATUS SEC_ENTRY +AddCredentialsA( + PCredHandle hCredentials, + SEC_CHAR SEC_FAR * pszPrincipal, // Name of principal + SEC_CHAR SEC_FAR * pszPackage, // Name of package + unsigned long fCredentialUse, // Flags indicating use + void SEC_FAR * pAuthData, // Package specific data + SEC_GET_KEY_FN pGetKeyFn, // Pointer to GetKey() func + void SEC_FAR * pvGetKeyArgument, // Value to pass to GetKey() + PTimeStamp ptsExpiry // (out) Lifetime (optional) + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * ADD_CREDENTIALS_FN_A)( + PCredHandle, + SEC_CHAR SEC_FAR *, + SEC_CHAR SEC_FAR *, + unsigned long, + void SEC_FAR *, + SEC_GET_KEY_FN, + void SEC_FAR *, + PTimeStamp); + +#ifdef UNICODE +#define AddCredentials AddCredentialsW +#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_W +#else +#define AddCredentials AddCredentialsA +#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A +#endif + +#define SspiLogonUser SspiLogonUserW + +//////////////////////////////////////////////////////////////////////// +/// +/// Context Management Functions +/// +//////////////////////////////////////////////////////////////////////// + +SECURITY_STATUS SEC_ENTRY +InitializeSecurityContextW( + PCredHandle phCredential, // Cred to base context + PCtxtHandle phContext, // Existing context (OPT) +#if ISSP_MODE == 0 + PSECURITY_STRING pTargetName, +#else + SEC_WCHAR SEC_FAR * pszTargetName, // Name of target +#endif + unsigned long fContextReq, // Context Requirements + unsigned long Reserved1, // Reserved, MBZ + unsigned long TargetDataRep, // Data rep of target + PSecBufferDesc pInput, // Input Buffers + unsigned long Reserved2, // Reserved, MBZ + PCtxtHandle phNewContext, // (out) New Context handle + PSecBufferDesc pOutput, // (inout) Output Buffers + unsigned long SEC_FAR * pfContextAttr, // (out) Context attrs + PTimeStamp ptsExpiry // (out) Life span (OPT) + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * INITIALIZE_SECURITY_CONTEXT_FN_W)( + PCredHandle, + PCtxtHandle, +#if ISSP_MODE == 0 + PSECURITY_STRING, +#else + SEC_WCHAR SEC_FAR *, +#endif + unsigned long, + unsigned long, + unsigned long, + PSecBufferDesc, + unsigned long, + PCtxtHandle, + PSecBufferDesc, + unsigned long SEC_FAR *, + PTimeStamp); + +# define InitializeSecurityContext InitializeSecurityContextW +# define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W + +SECURITY_STATUS SEC_ENTRY +AcceptSecurityContext( + PCredHandle phCredential, // Cred to base context + PCtxtHandle phContext, // Existing context (OPT) + PSecBufferDesc pInput, // Input buffer + unsigned long fContextReq, // Context Requirements + unsigned long TargetDataRep, // Target Data Rep + PCtxtHandle phNewContext, // (out) New context handle + PSecBufferDesc pOutput, // (inout) Output buffers + unsigned long SEC_FAR * pfContextAttr, // (out) Context attributes + PTimeStamp ptsExpiry // (out) Life span (OPT) + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * ACCEPT_SECURITY_CONTEXT_FN)( + PCredHandle, + PCtxtHandle, + PSecBufferDesc, + unsigned long, + unsigned long, + PCtxtHandle, + PSecBufferDesc, + unsigned long SEC_FAR *, + PTimeStamp); + + + +SECURITY_STATUS SEC_ENTRY +CompleteAuthToken( + PCtxtHandle phContext, // Context to complete + PSecBufferDesc pToken // Token to complete + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * COMPLETE_AUTH_TOKEN_FN)( + PCtxtHandle, + PSecBufferDesc); + + +SECURITY_STATUS SEC_ENTRY +ImpersonateSecurityContext( + PCtxtHandle phContext // Context to impersonate + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * IMPERSONATE_SECURITY_CONTEXT_FN)( + PCtxtHandle); + + + +SECURITY_STATUS SEC_ENTRY +RevertSecurityContext( + PCtxtHandle phContext // Context from which to re + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * REVERT_SECURITY_CONTEXT_FN)( + PCtxtHandle); + + +SECURITY_STATUS SEC_ENTRY +QuerySecurityContextToken( + PCtxtHandle phContext, + void SEC_FAR * SEC_FAR * Token + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * QUERY_SECURITY_CONTEXT_TOKEN_FN)( + PCtxtHandle, void SEC_FAR * SEC_FAR *); + + + +SECURITY_STATUS SEC_ENTRY +DeleteSecurityContext( + PCtxtHandle phContext // Context to delete + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * DELETE_SECURITY_CONTEXT_FN)( + PCtxtHandle); + + + +SECURITY_STATUS SEC_ENTRY +ApplyControlToken( + PCtxtHandle phContext, // Context to modify + PSecBufferDesc pInput // Input token to apply + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * APPLY_CONTROL_TOKEN_FN)( + PCtxtHandle, PSecBufferDesc); + + + +SECURITY_STATUS SEC_ENTRY +QueryContextAttributesW( + PCtxtHandle phContext, // Context to query + unsigned long ulAttribute, // Attribute to query + void SEC_FAR * pBuffer // Buffer for attributes + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * QUERY_CONTEXT_ATTRIBUTES_FN_W)( + PCtxtHandle, + unsigned long, + void SEC_FAR *); + +# define QueryContextAttributes QueryContextAttributesW +# define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W +SECURITY_STATUS SEC_ENTRY +SetContextAttributesW( + PCtxtHandle phContext, // Context to Set + unsigned long ulAttribute, // Attribute to Set + void SEC_FAR * pBuffer, // Buffer for attributes + unsigned long cbBuffer // Size (in bytes) of Buffer + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * SET_CONTEXT_ATTRIBUTES_FN_W)( + PCtxtHandle, + unsigned long, + void SEC_FAR *, + unsigned long ); + +# define SetContextAttributes SetContextAttributesW +# define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W + +SECURITY_STATUS SEC_ENTRY +QueryCredentialsAttributesW( + PCredHandle phCredential, // Credential to query + unsigned long ulAttribute, // Attribute to query + void SEC_FAR * pBuffer // Buffer for attributes + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * QUERY_CREDENTIALS_ATTRIBUTES_FN_W)( + PCredHandle, + unsigned long, + void SEC_FAR *); + +# define QueryCredentialsAttributes QueryCredentialsAttributesW +# define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W + +SECURITY_STATUS SEC_ENTRY +FreeContextBuffer( + void SEC_FAR * pvContextBuffer // buffer to free + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * FREE_CONTEXT_BUFFER_FN)( + void SEC_FAR *); + +/////////////////////////////////////////////////////////////////// +//// +//// Message Support API +//// +////////////////////////////////////////////////////////////////// + +SECURITY_STATUS SEC_ENTRY +MakeSignature( + PCtxtHandle phContext, // Context to use + unsigned long fQOP, // Quality of Protection + PSecBufferDesc pMessage, // Message to sign + unsigned long MessageSeqNo // Message Sequence Num. + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * MAKE_SIGNATURE_FN)( + PCtxtHandle, + unsigned long, + PSecBufferDesc, + unsigned long); + + + +SECURITY_STATUS SEC_ENTRY +VerifySignature( + PCtxtHandle phContext, // Context to use + PSecBufferDesc pMessage, // Message to verify + unsigned long MessageSeqNo, // Sequence Num. + unsigned long SEC_FAR * pfQOP // QOP used + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * VERIFY_SIGNATURE_FN)( + PCtxtHandle, + PSecBufferDesc, + unsigned long, + unsigned long SEC_FAR *); + + +SECURITY_STATUS SEC_ENTRY +EncryptMessage( PCtxtHandle phContext, + unsigned long fQOP, + PSecBufferDesc pMessage, + unsigned long MessageSeqNo); + +typedef SECURITY_STATUS +(SEC_ENTRY * ENCRYPT_MESSAGE_FN)( + PCtxtHandle, unsigned long, PSecBufferDesc, unsigned long); + + +SECURITY_STATUS SEC_ENTRY +DecryptMessage( PCtxtHandle phContext, + PSecBufferDesc pMessage, + unsigned long MessageSeqNo, + unsigned long * pfQOP); + + +typedef SECURITY_STATUS +(SEC_ENTRY * DECRYPT_MESSAGE_FN)( + PCtxtHandle, PSecBufferDesc, unsigned long, + unsigned long SEC_FAR *); + + +/////////////////////////////////////////////////////////////////////////// +//// +//// Misc. +//// +/////////////////////////////////////////////////////////////////////////// + + +SECURITY_STATUS SEC_ENTRY +EnumerateSecurityPackagesW( + unsigned long SEC_FAR * pcPackages, // Receives num. packages + PSecPkgInfoW SEC_FAR * ppPackageInfo // Receives array of info + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * ENUMERATE_SECURITY_PACKAGES_FN_W)( + unsigned long SEC_FAR *, + PSecPkgInfoW SEC_FAR *); + +# define EnumerateSecurityPackages EnumerateSecurityPackagesW +# define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W + +SECURITY_STATUS SEC_ENTRY +QuerySecurityPackageInfoW( +#if ISSP_MODE == 0 + PSECURITY_STRING pPackageName, +#else + SEC_WCHAR SEC_FAR * pszPackageName, // Name of package +#endif + PSecPkgInfoW SEC_FAR *ppPackageInfo // Receives package info + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * QUERY_SECURITY_PACKAGE_INFO_FN_W)( +#if ISSP_MODE == 0 + PSECURITY_STRING, +#else + SEC_WCHAR SEC_FAR *, +#endif + PSecPkgInfoW SEC_FAR *); + +# define QuerySecurityPackageInfo QuerySecurityPackageInfoW +# define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W + +/////////////////////////////////////////////////////////////////////////// +//// +//// Context export/import +//// +/////////////////////////////////////////////////////////////////////////// + + + +SECURITY_STATUS SEC_ENTRY +ExportSecurityContext( + PCtxtHandle phContext, // (in) context to export + ULONG fFlags, // (in) option flags + PSecBuffer pPackedContext, // (out) marshalled context + void SEC_FAR * SEC_FAR * pToken // (out, optional) token handle for impersonation + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * EXPORT_SECURITY_CONTEXT_FN)( + PCtxtHandle, + ULONG, + PSecBuffer, + void SEC_FAR * SEC_FAR * + ); + +SECURITY_STATUS SEC_ENTRY +ImportSecurityContextW( +#if ISSP_MODE == 0 + PSECURITY_STRING pszPackage, +#else + SEC_WCHAR SEC_FAR * pszPackage, +#endif + PSecBuffer pPackedContext, // (in) marshalled context + void SEC_FAR * Token, // (in, optional) handle to token for context + PCtxtHandle phContext // (out) new context handle + ); + +typedef SECURITY_STATUS +(SEC_ENTRY * IMPORT_SECURITY_CONTEXT_FN_W)( +#if ISSP_MODE == 0 + PSECURITY_STRING, +#else + SEC_WCHAR SEC_FAR *, +#endif + PSecBuffer, + VOID SEC_FAR *, + PCtxtHandle + ); + +# define ImportSecurityContext ImportSecurityContextW +# define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W + +#if ISSP_MODE == 0 +NTSTATUS +NTAPI +SecMakeSPN( + IN PUNICODE_STRING ServiceClass, + IN PUNICODE_STRING ServiceName, + IN PUNICODE_STRING InstanceName OPTIONAL, + IN USHORT InstancePort OPTIONAL, + IN PUNICODE_STRING Referrer OPTIONAL, + IN OUT PUNICODE_STRING Spn, + OUT PULONG Length OPTIONAL, + IN BOOLEAN Allocate + ); + +NTSTATUS +NTAPI +SecMakeSPNEx( + IN PUNICODE_STRING ServiceClass, + IN PUNICODE_STRING ServiceName, + IN PUNICODE_STRING InstanceName OPTIONAL, + IN USHORT InstancePort OPTIONAL, + IN PUNICODE_STRING Referrer OPTIONAL, + IN PUNICODE_STRING TargetInfo OPTIONAL, + IN OUT PUNICODE_STRING Spn, + OUT PULONG Length OPTIONAL, + IN BOOLEAN Allocate + ); + +NTSTATUS +SEC_ENTRY +SecLookupAccountSid( + IN PSID Sid, + IN OUT PULONG NameSize, + OUT PUNICODE_STRING NameBuffer, + IN OUT PULONG DomainSize OPTIONAL, + OUT PUNICODE_STRING DomainBuffer OPTIONAL, + OUT PSID_NAME_USE NameUse + ); + +NTSTATUS +SEC_ENTRY +SecLookupAccountName( + IN PUNICODE_STRING Name, + IN OUT PULONG SidSize, + OUT PSID Sid, + OUT PSID_NAME_USE NameUse, + IN OUT PULONG DomainSize OPTIONAL, + OUT PUNICODE_STRING ReferencedDomain OPTIONAL + ); + +#endif + +#define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW") +# define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW + +#define FreeCredentialHandle FreeCredentialsHandle + +typedef struct _SECURITY_FUNCTION_TABLE_W { + unsigned long dwVersion; + ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW; + QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW; + ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW; + FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle; +#ifndef WIN32_CHICAGO + void SEC_FAR * Reserved2; +#else // WIN32_CHICAGO + SSPI_LOGON_USER_FN SspiLogonUserW; +#endif // WIN32_CHICAGO + INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW; + ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext; + COMPLETE_AUTH_TOKEN_FN CompleteAuthToken; + DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext; + APPLY_CONTROL_TOKEN_FN ApplyControlToken; + QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW; + IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext; + REVERT_SECURITY_CONTEXT_FN RevertSecurityContext; + MAKE_SIGNATURE_FN MakeSignature; + VERIFY_SIGNATURE_FN VerifySignature; + FREE_CONTEXT_BUFFER_FN FreeContextBuffer; + QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW; + void SEC_FAR * Reserved3; + void SEC_FAR * Reserved4; + EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext; + IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW; + ADD_CREDENTIALS_FN_W AddCredentialsW ; + void SEC_FAR * Reserved8; + QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken; + ENCRYPT_MESSAGE_FN EncryptMessage; + DECRYPT_MESSAGE_FN DecryptMessage; + SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW; +} SecurityFunctionTableW, SEC_FAR * PSecurityFunctionTableW; + +# define SecurityFunctionTable SecurityFunctionTableW +# define PSecurityFunctionTable PSecurityFunctionTableW +#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1 +#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2 + +PSecurityFunctionTableW SEC_ENTRY +InitSecurityInterfaceW( + void + ); + +typedef PSecurityFunctionTableW +(SEC_ENTRY * INIT_SECURITY_INTERFACE_W)(void); + +# define InitSecurityInterface InitSecurityInterfaceW +# define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W +#ifndef _AUTH_IDENTITY_DEFINED +#define _AUTH_IDENTITY_DEFINED + +#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1 +#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2 + +typedef struct _SEC_WINNT_AUTH_IDENTITY_W { + unsigned short *User; + unsigned long UserLength; + unsigned short *Domain; + unsigned long DomainLength; + unsigned short *Password; + unsigned long PasswordLength; + unsigned long Flags; +} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W; + +#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W +#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W +#define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W +#endif +// +// This is the combined authentication identity structure that may be +// used with the negotiate package, NTLM, Kerberos, or SCHANNEL +// + + +#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION +#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200 + +typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW { + unsigned long Version; + unsigned long Length; + unsigned short SEC_FAR *User; + unsigned long UserLength; + unsigned short SEC_FAR *Domain; + unsigned long DomainLength; + unsigned short SEC_FAR *Password; + unsigned long PasswordLength; + unsigned long Flags; + unsigned short SEC_FAR * PackageList; + unsigned long PackageListLength; +} SEC_WINNT_AUTH_IDENTITY_EXW, *PSEC_WINNT_AUTH_IDENTITY_EXW; + +#define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXW +#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW +#endif // SEC_WINNT_AUTH_IDENTITY_VERSION + + +// +// Common types used by negotiable security packages +// + +#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4 // all data is in one buffer +#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x8 // these credentials are for identity only - no PAC needed + +#endif // __SSPI_H__ + +#ifndef SECURITY_USER_DATA_DEFINED +#define SECURITY_USER_DATA_DEFINED + +typedef struct _SECURITY_USER_DATA { + SECURITY_STRING UserName; // User name + SECURITY_STRING LogonDomainName; // Domain the user logged on to + SECURITY_STRING LogonServer; // Server that logged the user on + PSID pSid; // SID of user +} SECURITY_USER_DATA, *PSECURITY_USER_DATA; + +typedef SECURITY_USER_DATA SecurityUserData, * PSecurityUserData; + + +#define UNDERSTANDS_LONG_NAMES 1 +#define NO_LONG_NAMES 2 + +#endif // SECURITY_USER_DATA_DEFINED + +HRESULT SEC_ENTRY +GetSecurityUserInfo( + IN PLUID LogonId, + IN ULONG Flags, + OUT PSecurityUserData * UserInformation + ); + +SECURITY_STATUS SEC_ENTRY +MapSecurityError( SECURITY_STATUS SecStatus ); + +// +// Define external data. +// because of indirection for all drivers external to ntoskrnl these are actually ptrs +// + +#if defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) + +extern PBOOLEAN KdDebuggerNotPresent; +extern PBOOLEAN KdDebuggerEnabled; +#define KD_DEBUGGER_ENABLED *KdDebuggerEnabled +#define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent + +#else + +extern BOOLEAN KdDebuggerNotPresent; +extern BOOLEAN KdDebuggerEnabled; +#define KD_DEBUGGER_ENABLED KdDebuggerEnabled +#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent + +#endif + + + + +VOID +KdDisableDebugger( + VOID + ); + +VOID +KdEnableDebugger( + VOID + ); + +#define VOLSNAPCONTROLTYPE ((ULONG) 'S') +#define IOCTL_VOLSNAP_FLUSH_AND_HOLD_WRITES CTL_CODE(VOLSNAPCONTROLTYPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) + +// +// Runtime Library function prototypes. +// + +NTSYSAPI +VOID +NTAPI +RtlCaptureContext ( + OUT PCONTEXT ContextRecord + ); + +#ifdef POOL_TAGGING +#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,' sfI') +#define ExAllocatePoolWithQuota(a,b) ExAllocatePoolWithQuotaTag(a,b,' sfI') +#endif + +extern POBJECT_TYPE *PsThreadType; +extern POBJECT_TYPE *IoFileObjectType; +extern POBJECT_TYPE *ExEventObjectType; +extern POBJECT_TYPE *ExSemaphoreObjectType; + +// +// Define exported ZwXxx routines to device drivers. +// + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateEvent ( + OUT PHANDLE EventHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN EVENT_TYPE EventType, + IN BOOLEAN InitialState + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PLARGE_INTEGER AllocationSize OPTIONAL, + IN ULONG FileAttributes, + IN ULONG ShareAccess, + IN ULONG CreateDisposition, + IN ULONG CreateOptions, + IN PVOID EaBuffer OPTIONAL, + IN ULONG EaLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteFile( + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeviceIoControlFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG IoControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenFile( + OUT PHANDLE FileHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG ShareAccess, + IN ULONG OpenOptions + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryDirectoryFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass, + IN BOOLEAN ReturnSingleEntry, + IN PUNICODE_STRING FileName OPTIONAL, + IN BOOLEAN RestartScan + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID FileInformation, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInformationClass + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryVolumeInformationFile( + IN HANDLE FileHandle, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID FsInformation, + IN ULONG Length, + IN FS_INFORMATION_CLASS FsInformationClass + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwReadFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + OUT PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwWriteFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN PVOID Buffer, + IN ULONG Length, + IN PLARGE_INTEGER ByteOffset OPTIONAL, + IN PULONG Key OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFsControlFile( + IN HANDLE FileHandle, + IN HANDLE Event OPTIONAL, + IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, + IN PVOID ApcContext OPTIONAL, + OUT PIO_STATUS_BLOCK IoStatusBlock, + IN ULONG FsControlCode, + IN PVOID InputBuffer OPTIONAL, + IN ULONG InputBufferLength, + OUT PVOID OutputBuffer OPTIONAL, + IN ULONG OutputBufferLength + ); + + +NTSYSAPI +NTSTATUS +NTAPI +ZwClose( + IN HANDLE Handle + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDuplicateObject( + IN HANDLE SourceProcessHandle, + IN HANDLE SourceHandle, + IN HANDLE TargetProcessHandle OPTIONAL, + OUT PHANDLE TargetHandle OPTIONAL, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + IN ULONG Options + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateDirectoryObject( + OUT PHANDLE DirectoryHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenDirectoryObject( + OUT PHANDLE DirectoryHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenSymbolicLinkObject( + OUT PHANDLE LinkHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySymbolicLinkObject( + IN HANDLE LinkHandle, + IN OUT PUNICODE_STRING LinkTarget, + OUT PULONG ReturnedLength OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwMakeTemporaryObject( + IN HANDLE Handle + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateKey( + OUT PHANDLE KeyHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes, + IN ULONG TitleIndex, + IN PUNICODE_STRING Class OPTIONAL, + IN ULONG CreateOptions, + OUT PULONG Disposition OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenKey( + OUT PHANDLE KeyHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteKey( + IN HANDLE KeyHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwDeleteValueKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwEnumerateKey( + IN HANDLE KeyHandle, + IN ULONG Index, + IN KEY_INFORMATION_CLASS KeyInformationClass, + OUT PVOID KeyInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwEnumerateValueKey( + IN HANDLE KeyHandle, + IN ULONG Index, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + OUT PVOID KeyValueInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFlushKey( + IN HANDLE KeyHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryKey( + IN HANDLE KeyHandle, + IN KEY_INFORMATION_CLASS KeyInformationClass, + OUT PVOID KeyInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryValueKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName, + IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, + OUT PVOID KeyValueInformation, + IN ULONG Length, + OUT PULONG ResultLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetValueKey( + IN HANDLE KeyHandle, + IN PUNICODE_STRING ValueName, + IN ULONG TitleIndex OPTIONAL, + IN ULONG Type, + IN PVOID Data, + IN ULONG DataSize + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenSection( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwMapViewOfSection( + IN HANDLE SectionHandle, + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN ULONG CommitSize, + IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, + IN OUT PSIZE_T ViewSize, + IN SECTION_INHERIT InheritDisposition, + IN ULONG AllocationType, + IN ULONG Protect + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwUnmapViewOfSection( + IN HANDLE ProcessHandle, + IN PVOID BaseAddress + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationThread( + IN HANDLE ThreadHandle, + IN THREADINFOCLASS ThreadInformationClass, + IN PVOID ThreadInformation, + IN ULONG ThreadInformationLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwCreateSection ( + OUT PHANDLE SectionHandle, + IN ACCESS_MASK DesiredAccess, + IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, + IN PLARGE_INTEGER MaximumSize OPTIONAL, + IN ULONG SectionPageProtection, + IN ULONG AllocationAttributes, + IN HANDLE FileHandle OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwAllocateVirtualMemory( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN ULONG ZeroBits, + IN OUT PSIZE_T RegionSize, + IN ULONG AllocationType, + IN ULONG Protect + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFreeVirtualMemory( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + IN ULONG FreeType + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwWaitForSingleObject( + IN HANDLE Handle, + IN BOOLEAN Alertable, + IN PLARGE_INTEGER Timeout OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetEvent ( + IN HANDLE Handle, + OUT PLONG PreviousState OPTIONAL + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwFlushVirtualMemory( + IN HANDLE ProcessHandle, + IN OUT PVOID *BaseAddress, + IN OUT PSIZE_T RegionSize, + OUT PIO_STATUS_BLOCK IoStatus + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenProcessTokenEx( + IN HANDLE ProcessHandle, + IN ACCESS_MASK DesiredAccess, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwOpenThreadTokenEx( + IN HANDLE ThreadHandle, + IN ACCESS_MASK DesiredAccess, + IN BOOLEAN OpenAsSelf, + IN ULONG HandleAttributes, + OUT PHANDLE TokenHandle + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetInformationToken ( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + IN PVOID TokenInformation, + IN ULONG TokenInformationLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQueryInformationToken ( + IN HANDLE TokenHandle, + IN TOKEN_INFORMATION_CLASS TokenInformationClass, + OUT PVOID TokenInformation, + IN ULONG TokenInformationLength, + OUT PULONG ReturnLength + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwSetSecurityObject( + IN HANDLE Handle, + IN SECURITY_INFORMATION SecurityInformation, + IN PSECURITY_DESCRIPTOR SecurityDescriptor + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwQuerySecurityObject( + IN HANDLE Handle, + IN SECURITY_INFORMATION SecurityInformation, + OUT PSECURITY_DESCRIPTOR SecurityDescriptor, + IN ULONG Length, + OUT PULONG LengthNeeded + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwLoadDriver( + IN PUNICODE_STRING DriverServiceName + ); + +NTSYSAPI +NTSTATUS +NTAPI +ZwUnloadDriver( + IN PUNICODE_STRING DriverServiceName + ); +#endif // _NTIFS_ Added: vendor/rfsd/current/SampleFSD/filesys/inc/protos.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/protos.h (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/protos.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,483 @@ +/************************************************************************* +* +* File: protos.h +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains the prototypes for functions in this sample FSD. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#ifndef _SFSD_PROTOS_H_ +#define _SFSD_PROTOS_H_ + +extern VOID FsdDbgPrintCall ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +/************************************************************************* +* Prototypes for the file sfsdinit.c +*************************************************************************/ +extern NTSTATUS DriverEntry( +PDRIVER_OBJECT DriverObject, // created by the I/O sub-system +PUNICODE_STRING RegistryPath); // path to the registry key + +extern void SFsdInitializeFunctionPointers( +PDRIVER_OBJECT DriverObject); // created by the I/O sub-system + +extern NTSTATUS SFsdFSControl( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +/************************************************************************* +* Prototypes for the file create.c +*************************************************************************/ +extern NTSTATUS SFsdCreate( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonCreate( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern NTSTATUS SFsdOpenVolume( +PtrSFsdVCB PtrVCB, // volume to be opened +PtrSFsdIrpContext PtrIrpContext, // IRP context +PIRP PtrIrp, // original/user IRP +unsigned short ShareAccess, // share access +PIO_SECURITY_CONTEXT PtrSecurityContext, // caller's context (incl access) +PFILE_OBJECT PtrNewFileObject); // I/O Mgr. created file object + +extern void SFsdInitializeFCB( +PtrSFsdFCB PtrNewFCB, // FCB structure to be initialized +PtrSFsdVCB PtrVCB, // logical volume (VCB) pointer +PtrSFsdObjectName PtrObjectName, // name of the object +uint32 Flags, // is this a file/directory, etc. +PFILE_OBJECT PtrFileObject);// optional file object to be initialized + +/************************************************************************* +* Prototypes for the file misc.c +*************************************************************************/ +extern NTSTATUS SFsdInitializeZones( +void); + +extern void SFsdDestroyZones( +void); + +extern BOOLEAN SFsdIsIrpTopLevel( +PIRP Irp); // the IRP sent to our dispatch routine + +extern long SFsdExceptionFilter( +PtrSFsdIrpContext PtrIrpContext, +PEXCEPTION_POINTERS PtrExceptionPointers); + +extern NTSTATUS SFsdExceptionHandler( +PtrSFsdIrpContext PtrIrpContext, +PIRP Irp); + +extern void SFsdLogEvent( +NTSTATUS SFsdEventLogId, // the SFsd private message id +NTSTATUS RC); // any NT error code we wish to log ... + +extern PtrSFsdObjectName SFsdAllocateObjectName( +void); + +extern void SFsdReleaseObjectName( +PtrSFsdObjectName PtrObjectName); + +extern PtrSFsdCCB SFsdAllocateCCB( +void); + +extern void SFsdReleaseCCB( +PtrSFsdCCB PtrCCB); + +extern PtrSFsdFCB SFsdAllocateFCB( +void); + +extern NTSTATUS SFsdCreateNewFCB( +PtrSFsdFCB *ReturnedFCB, +PLARGE_INTEGER AllocationSize, +PLARGE_INTEGER EndOfFile, +PFILE_OBJECT PtrFileObject, +PtrSFsdVCB PtrVCB); + +extern void SFsdReleaseFCB( +PtrSFsdFCB PtrFCB); + +extern PtrSFsdFileLockInfo SFsdAllocateByteLocks( +void); + +extern void SFsdReleaseByteLocks( +PtrSFsdFileLockInfo PtrByteLocks); + +extern PtrSFsdIrpContext SFsdAllocateIrpContext( +PIRP Irp, +PDEVICE_OBJECT PtrTargetDeviceObject); + +extern void SFsdReleaseIrpContext( +PtrSFsdIrpContext PtrIrpContext); + +extern NTSTATUS SFsdPostRequest( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern void SFsdCommonDispatch( +void *Context); // actually an IRPContext structure + +extern void SFsdInitializeVCB( +PDEVICE_OBJECT PtrVolumeDeviceObject, +PDEVICE_OBJECT PtrTargetDeviceObject, +PVPB PtrVPB); + +/************************************************************************* +* Prototypes for the file cleanup.c +*************************************************************************/ +extern NTSTATUS SFsdCleanup( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonCleanup( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +/************************************************************************* +* Prototypes for the file close.c +*************************************************************************/ +extern NTSTATUS SFsdClose( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonClose( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +/************************************************************************* +* Prototypes for the file read.c +*************************************************************************/ +extern NTSTATUS SFsdRead( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonRead( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern void *SFsdGetCallersBuffer( +PIRP PtrIrp); + +extern NTSTATUS SFsdLockCallersBuffer( +PIRP PtrIrp, +BOOLEAN IsReadOperation, +uint32 Length); + +extern void SFsdMdlComplete( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PIO_STACK_LOCATION PtrIoStackLocation, +BOOLEAN ReadCompletion); + +/************************************************************************* +* Prototypes for the file write.c +*************************************************************************/ +extern NTSTATUS SFsdWrite( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonWrite( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern void SFsdDeferredWriteCallBack ( +void *Context1, // Should be PtrIrpContext +void *Context2); // Should be PtrIrp + +/************************************************************************* +* Prototypes for the file fileinfo.c +*************************************************************************/ +extern NTSTATUS SFsdFileInfo( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonFileInfo( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern NTSTATUS SFsdGetBasicInformation( +PtrSFsdFCB PtrFCB, +PFILE_BASIC_INFORMATION PtrBuffer, +long *PtrReturnedLength); + +extern NTSTATUS SFsdSetBasicInformation( +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB, +PFILE_OBJECT PtrFileObject, +PFILE_BASIC_INFORMATION PtrBuffer); + +extern NTSTATUS SFsdSetDispositionInformation( +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB, +PtrSFsdVCB PtrVCB, +PFILE_OBJECT PtrFileObject, +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PFILE_DISPOSITION_INFORMATION PtrBuffer); + +extern NTSTATUS SFsdSetAllocationInformation( +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB, +PtrSFsdVCB PtrVCB, +PFILE_OBJECT PtrFileObject, +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PFILE_ALLOCATION_INFORMATION PtrBuffer); + +/************************************************************************* +* Prototypes for the file flush.c +*************************************************************************/ +extern NTSTATUS SFsdFlush( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonFlush( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern void SFsdFlushAFile( +PtrSFsdNTRequiredFCB PtrReqdFCB, +PIO_STATUS_BLOCK PtrIoStatus); + +extern void SFsdFlushLogicalVolume( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PtrSFsdVCB PtrVCB); + +extern NTSTATUS SFsdFlushCompletion( +PDEVICE_OBJECT PtrDeviceObject, +PIRP PtrIrp, +PVOID Context); + +/************************************************************************* +* Prototypes for the file dircntrl.c +*************************************************************************/ +extern NTSTATUS SFsdDirControl( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonDirControl( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern NTSTATUS SFsdQueryDirectory( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PIO_STACK_LOCATION PtrIoStackLocation, +PFILE_OBJECT PtrFileObject, +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB); + +extern NTSTATUS SFsdNotifyChangeDirectory( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PIO_STACK_LOCATION PtrIoStackLocation, +PFILE_OBJECT PtrFileObject, +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB); + +/************************************************************************* +* Prototypes for the file devcntrl.c +*************************************************************************/ +extern NTSTATUS SFsdDeviceControl( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonDeviceControl( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +extern NTSTATUS SFsdDevIoctlCompletion( +PDEVICE_OBJECT PtrDeviceObject, +PIRP PtrIrp, +void *Context); + +extern NTSTATUS SFsdHandleQueryPath( +void *BufferPointer); + +/************************************************************************* +* Prototypes for the file shutdown.c +*************************************************************************/ +extern NTSTATUS SFsdShutdown( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp); // I/O Request Packet + +extern NTSTATUS SFsdCommonShutdown( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp); + +/************************************************************************* +* Prototypes for the file fastio.c +*************************************************************************/ +extern BOOLEAN SFsdFastIoCheckIfPossible( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN BOOLEAN Wait, +IN ULONG LockKey, +IN BOOLEAN CheckForReadOperation, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoRead( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN BOOLEAN Wait, +IN ULONG LockKey, +OUT PVOID Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoWrite( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN BOOLEAN Wait, +IN ULONG LockKey, +OUT PVOID Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoQueryBasicInfo( +IN PFILE_OBJECT FileObject, +IN BOOLEAN Wait, +OUT PFILE_BASIC_INFORMATION Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoQueryStdInfo( +IN PFILE_OBJECT FileObject, +IN BOOLEAN Wait, +OUT PFILE_STANDARD_INFORMATION Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoLock( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN PLARGE_INTEGER Length, +PEPROCESS ProcessId, +ULONG Key, +BOOLEAN FailImmediately, +BOOLEAN ExclusiveLock, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoUnlockSingle( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN PLARGE_INTEGER Length, +PEPROCESS ProcessId, +ULONG Key, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoUnlockAll( +IN PFILE_OBJECT FileObject, +PEPROCESS ProcessId, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoUnlockAllByKey( +IN PFILE_OBJECT FileObject, +PEPROCESS ProcessId, +ULONG Key, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern void SFsdFastIoAcqCreateSec( +IN PFILE_OBJECT FileObject); + +extern void SFsdFastIoRelCreateSec( +IN PFILE_OBJECT FileObject); + +extern BOOLEAN SFsdAcqLazyWrite( +IN PVOID Context, +IN BOOLEAN Wait); + +extern void SFsdRelLazyWrite( +IN PVOID Context); + +extern BOOLEAN SFsdAcqReadAhead( +IN PVOID Context, +IN BOOLEAN Wait); + +extern void SFsdRelReadAhead( +IN PVOID Context); + +// the remaining are only valid under NT Version 4.0 and later +#if(_WIN32_WINNT >= 0x0400) + +extern BOOLEAN SFsdFastIoQueryNetInfo( +IN PFILE_OBJECT FileObject, +IN BOOLEAN Wait, +OUT PFILE_NETWORK_OPEN_INFORMATION Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoMdlRead( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN ULONG LockKey, +OUT PMDL *MdlChain, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoMdlReadComplete( +IN PFILE_OBJECT FileObject, +OUT PMDL MdlChain, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoPrepareMdlWrite( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN ULONG LockKey, +OUT PMDL *MdlChain, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject); + +extern BOOLEAN SFsdFastIoMdlWriteComplete( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +OUT PMDL MdlChain, +IN PDEVICE_OBJECT DeviceObject); + +extern NTSTATUS SFsdFastIoAcqModWrite( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER EndingOffset, +OUT PERESOURCE *ResourceToRelease, +IN PDEVICE_OBJECT DeviceObject); + +extern NTSTATUS SFsdFastIoRelModWrite( +IN PFILE_OBJECT FileObject, +IN PERESOURCE ResourceToRelease, +IN PDEVICE_OBJECT DeviceObject); + +extern NTSTATUS SFsdFastIoAcqCcFlush( +IN PFILE_OBJECT FileObject, +IN PDEVICE_OBJECT DeviceObject); + +extern NTSTATUS SFsdFastIoRelCcFlush( +IN PFILE_OBJECT FileObject, +IN PDEVICE_OBJECT DeviceObject); + +#endif // (_WIN32_WINNT >= 0x0400) + +#endif // _SFSD_PROTOS_H_ + Added: vendor/rfsd/current/SampleFSD/filesys/inc/sfsd.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/sfsd.h (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/sfsd.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,92 @@ +/************************************************************************* +* +* File: sfsd.h +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* The main include file for the sample file system driver. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#ifndef _SFSD_SFSD_H_ +#define _SFSD_SFSD_H_ + +// Name for the driver and it's main device +#define DRIVER_NAME "SFSD" +#define DEVICE_NAME L"\\SFSD" +#define DOS_DEVICE_NAME L"\\DosDevices\\SFSD" + + +// some constant definitions +#define SFSD_PANIC_IDENTIFIER (0x86427531) + +// any directory information SFSD obtains from the local file system +// will use a buffer of the following size ... (in KB) +#define SFSD_READ_DIR_BUFFER_LENGTH (512) + +// Common include files - should be in the include dir of the MS supplied IFS Kit +#include <ntifs.h> + +// the following include files should be in the inc sub-dir associated with this driver +#include "struct.h" +#include "protos.h" +#include "errmsg.h" + +// global variables - minimize these +extern SFsdData SFsdGlobalData; + +// try-finally simulation +#define try_return(S) { S; goto try_exit; } +#define try_return1(S) { S; goto try_exit1; } +#define try_return2(S) { S; goto try_exit2; } + +// some global (helpful) macros +#define SFsdSetFlag(Flag, Value) ((Flag) |= (Value)) +#define SFsdClearFlag(Flag, Value) ((Flag) &= ~(Value)) + +#define SFsdQuadAlign(Value) ((((uint32)(Value)) + 7) & 0xfffffff8) + +// to perform a bug-check (panic), the following macro is used +#define SFsdPanic(arg1, arg2, arg3) \ + (KeBugCheckEx(SFSD_PANIC_IDENTIFIER, SFSD_BUG_CHECK_ID | __LINE__, (uint32)(arg1), (uint32)(arg2), (uint32)(arg3))) + +// a convenient macro (must be invoked in the context of the thread that acquired the resource) +#define SFsdReleaseResource(Resource) \ + (ExReleaseResourceForThreadLite((Resource), ExGetCurrentResourceThread())) + +// each file has a unique bug-check identifier associated with it. +// Here is a list of constant definitions for these identifiers +#define SFSD_FILE_INIT (0x00000001) +#define SFSD_FILE_REGISTRY (0x00000002) +#define SFSD_FILE_CREATE (0x00000003) +#define SFSD_FILE_CLEANUP (0x00000004) +#define SFSD_FILE_CLOSE (0x00000005) +#define SFSD_FILE_READ (0x00000006) +#define SFSD_FILE_WRITE (0x00000007) +#define SFSD_FILE_INFORMATION (0x00000008) +#define SFSD_FILE_FLUSH (0x00000009) +#define SFSD_FILE_VOL_INFORMATION (0x0000000A) +#define SFSD_FILE_DIR_CONTROL (0x0000000B) +#define SFSD_FILE_FILE_CONTROL (0x0000000C) +#define SFSD_FILE_DEVICE_CONTROL (0x0000000D) +#define SFSD_FILE_SHUTDOWN (0x0000000E) +#define SFSD_FILE_LOCK_CONTROL (0x0000000F) +#define SFSD_FILE_SECURITY (0x00000010) +#define SFSD_FILE_EXT_ATTR (0x00000011) +#define SFSD_FILE_MISC (0x00000012) +#define SFSD_FILE_FAST_IO (0x00000013) +#define SFSD_FILE_FSCONTROL (0X00000014) + +#if DBG +#define SFsdBreakPoint() DbgBreakPoint() +#else +#define SFsdBreakPoint() +#endif + +#endif // _SFSD_SFSD_H_ + Added: vendor/rfsd/current/SampleFSD/filesys/inc/struct.h URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/inc…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/inc/struct.h (added) +++ vendor/rfsd/current/SampleFSD/filesys/inc/struct.h Fri Apr 14 13:01:12 2006 @@ -1,0 +1,505 @@ +/************************************************************************* +* +* File: struct.h +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* This file contains structure definitions for the sample file system +* driver. Note that all structures are prefixed with the letters +* "SFsd". The structures are all aligned using normal alignment +* used by the compiler (typically quad-word aligned). +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#ifndef _SFSD_STRUCTURES_H_ +#define _SFSD_STRUCTURES_H_ + +/************************************************************************** + some useful definitions +**************************************************************************/ +#ifdef _CPU_X86_ +typedef char int8; +typedef short int16; +typedef int int32; + +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; + +// we will use the LARGE_INTEGER structure as defined by NT + +#else // Please define appropriate types here + +!!!! You must define your types here for compilation to proceed !!!! + +#endif // if _CPU_X86_ + +/************************************************************************** + some empty typedefs defined here so we can reference them easily +**************************************************************************/ +struct _SFsdIdentifier; +struct _SFsdObjectName; +struct _SFsdContextControlBlock; +struct _SFsdNTRequiredFCB; +struct _SFsdDiskDependentFCB; +struct _SFsdFileControlBlock; +struct _SFsdFileByteLocks; +struct _SFsdVolumeControlBlock; +struct _SFsdIrpContext; +struct _SFsdData; + +/************************************************************************** + each structure has a unique "node type" or signature associated with it +**************************************************************************/ +#define SFSD_NODE_TYPE_OBJECT_NAME (0xfdecba01) +#define SFSD_NODE_TYPE_CCB (0xfdecba02) +#define SFSD_NODE_TYPE_FCB (0xfdecba03) +#define SFSD_NODE_TYPE_LOCKS (0xfdecba04) +#define SFSD_NODE_TYPE_VCB (0xfdecba05) +#define SFSD_NODE_TYPE_IRP_CONTEXT (0xfdecba06) +#define SFSD_NODE_TYPE_GLOBAL_DATA (0xfdecba07) + +/************************************************************************** + every structure has a node type, and a node size associated with it. + The node type serves as a signature field. The size is used for + consistency checking ... +**************************************************************************/ +typedef struct _SFsdIdentifier { + uint32 NodeType; // a 32 bit identifier for the structure + uint32 NodeSize; // computed as sizeof(structure) +} SFsdIdentifier, *PtrSFsdIdentifier; + +/************************************************************************** + Structures for byte-range lock support. +**************************************************************************/ +typedef struct SFsdFileLockAnchor { + LIST_ENTRY GrantedFileLockList; + LIST_ENTRY PendingFileLockList; +} SFsdFileLockAnchor, *PtrSFsdFileLockAnchor; + +typedef struct SFsdFileLockInfo { + SFsdIdentifier NodeIdentifier; + uint32 FileLockFlags; + PVOID OwningProcess; + LARGE_INTEGER StartingOffset; + LARGE_INTEGER Length; + LARGE_INTEGER EndingOffset; + ULONG Key; + BOOLEAN ExclusiveLock; + PIRP PendingIRP; + LIST_ENTRY NextFileLockEntry; +} SFsdFileLockInfo, *PtrSFsdFileLockInfo; + +#define SFSD_BYTE_LOCK_NOT_FROM_ZONE (0x80000000) +#define SFSD_BYTE_LOCK_IS_PENDING (0x00000001) + +/************************************************************************** + Every open on-disk object must have a name associated with it + This name has two components: + (a) the path-name (prefix) that leads to this on-disk object + (b) the name of the object itself + Note that with multiply linked objects, a single object might be + associated with more than one name structure. + This sample FSD does not correctly support multiply linked objects. + + This structure must be quad-word aligned because it is zone allocated. +**************************************************************************/ +typedef struct _SFsdObjectName { + SFsdIdentifier NodeIdentifier; + uint32 ObjectNameFlags; + // an absolute pathname of the object is stored below + UNICODE_STRING ObjectName; +} SFsdObjectName, *PtrSFsdObjectName; + +#define SFSD_OB_NAME_NOT_FROM_ZONE (0x80000000) + +/************************************************************************** + Each file open instance is represented by a context control block. + For each successful create/open request; a file object and a CCB will + be created. + For open operations performed internally by the FSD, there may not + exist file objects; but a CCB will definitely be created. + + This structure must be quad-word aligned because it is zone allocated. +**************************************************************************/ +typedef struct _SFsdContextControlBlock { + SFsdIdentifier NodeIdentifier; + // ptr to the associated FCB + struct _SFsdFileControlBlock *PtrFCB; + // all CCB structures for a FCB are linked together + LIST_ENTRY NextCCB; + // each CCB is associated with a file object + PFILE_OBJECT PtrFileObject; + // flags (see below) associated with this CCB + uint32 CCBFlags; + // current byte offset is required sometimes + LARGE_INTEGER CurrentByteOffset; + // if this CCB represents a directory object open, we may + // need to maintain a search pattern + PSTRING DirectorySearchPattern; + // we must maintain user specified file time values + uint32 UserSpecifiedTime; +} SFsdCCB, *PtrSFsdCCB; + + +/************************************************************************** + the following CCBFlags values are relevant. These flag + values are bit fields; therefore we can test whether + a bit position is set (1) or not set (0). +**************************************************************************/ + +// some on-disk file/directories are opened by SFSD itself +// as opposed to being opened on behalf of a user process +#define SFSD_CCB_OPENED_BY_SFSD (0x00000001) +// the file object specified synchronous access at create/open time. +// this implies that SFSD must maintain the current byte offset +#define SFSD_CCB_OPENED_FOR_SYNC_ACCESS (0x00000002) +// file object specified sequential access for this file +#define SFSD_CCB_OPENED_FOR_SEQ_ACCESS (0x00000004) +// the CCB has had an IRP_MJ_CLEANUP issued on it. we must +// no longer allow the file object / CCB to be used in I/O requests. +#define SFSD_CCB_CLEANED (0x00000008) +// if we were invoked via the fast i/o path to perform file i/o; +// we should set the CCB access/modification time at cleanup +#define SFSD_CCB_ACCESSED (0x00000010) +#define SFSD_CCB_MODIFIED (0x00000020) +// if an application process set the file date time, we must +// honor that request and *not* overwrite the values at cleanup +#define SFSD_CCB_ACCESS_TIME_SET (0x00000040) +#define SFSD_CCB_MODIFY_TIME_SET (0x00000080) +#define SFSD_CCB_CREATE_TIME_SET (0x00000100) + +#define SFSD_CCB_NOT_FROM_ZONE (0x80000000) + +// this CCB was allocated for a "volume open" operation +#define SFSD_CCB_VOLUME_OPEN (0x00000100) + +/************************************************************************** + each open file/directory/volume is represented by a file control block. + NOTE: Currently, SFSD does not handle multiply linked files correctly. + In your FSD implementation, you must be careful about handling + such on-disk files correctly i.e. a single (unique) FCB must + represent an on-disk file/directory regardless of the path used + to access the on-disk object. + With the current SFSD implementation, an on-disk file object + with more than a single (hard) link will be treated incorrectly! + + Each FCB can logically be divided into two: + (a) a structure that must have a field of type FSRTL_COMMON_FCB_HEADER + as the first field in the structure. + This portion should also contain other structures/resources required + by the NT Cache Manager + We will call this structure the "NT Required" FCB. Note that this + portion of the FCB must be allocated from non-paged pool. + (b) the remainder of the FCB is dependent upon the particular FSD + requirements. + This portion of the FCB could possibly be allocated from paged + memory, though in the sample FSD, it will always be allocated + from non-paged pool. + + FCB structures are protected by the MainResource as well as the + PagingIoResource. Of course, if your FSD implementation requires + it, you can associate other syncronization structures with the + FCB. + + This structure must be quad-word aligned because it is zone allocated. +**************************************************************************/ +typedef struct _SFsdNTRequiredFCB { + // see Chapters 6-8 for an explanation of the fields here + FSRTL_COMMON_FCB_HEADER CommonFCBHeader; + SECTION_OBJECT_POINTERS SectionObject; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; +} SFsdNTRequiredFCB, *PtrSFsdNTRequiredFCB; + +typedef struct _SFsdDiskDependentFCB { + // although the sample FSD does not maintain on-disk data structures, + // this structure serves as a reminder of the logical separation that + // your FSD can maintain between the disk dependent and the disk + // independent portions of the FCB. + uint16 DummyField; // placeholder +} SFsdDiskDependentFCB, *PtrSFsdDiskDependentFCB; + +typedef struct _SFsdFileControlBlock { + SFsdIdentifier NodeIdentifier; + // we will go ahead and embed the "NT Required FCB" right here. + // Note though that it is just as acceptable to simply allocate + // memory separately for the other half of the FCB and store a + // pointer to the "NT Required" portion here instead of embedding + // it ... + SFsdNTRequiredFCB NTRequiredFCB; + // the disk dependent portion of the FCB is embedded right here + SFsdDiskDependentFCB DiskDependentFCB; + // this FCB belongs to some mounted logical volume + struct _SFsdVolumeControlBlock *PtrVCB; + // to be able to access all open file(s) for a volume, we will + // link all FCB structures for a logical volume together + LIST_ENTRY NextFCB; + // some state information for the FCB is maintained using the + // flags field + uint32 FCBFlags; + // all CCB's for this particular FCB are linked off the following + // list head. + LIST_ENTRY NextCCB; + // NT requires that a file system maintain and honor the various + // SHARE_ACCESS modes ... + SHARE_ACCESS FCBShareAccess; + // to identify the lazy writer thread(s) we will grab and store + // the thread id here when a request to acquire resource(s) + // arrives .. + uint32 LazyWriterThreadID; + // whenever a file stream has a create/open operation performed, + // the Reference count below is incremented AND the OpenHandle count + // below is also incremented. + // When an IRP_MJ_CLEANUP is received, the OpenHandle count below + // is decremented. + // When an IRP_MJ_CLOSE is received, the Reference count below is + // decremented. + // When the Reference count goes down to zero, the FCB can be de-allocated. + // Note that a zero Reference count implies a zero OpenHandle count. + // This invariant must always hold true ... (if it is really an invariant, + // shoudn't the previous statement be redundant ... hmmm!!!) + uint32 ReferenceCount; + uint32 OpenHandleCount; + // for the sample fsd, there exists a 1-1 correspondence between an + // object name structure and a FCB + PtrSFsdObjectName FCBName; + // we will maintain some time information here to make our life easier + LARGE_INTEGER CreationTime; + LARGE_INTEGER LastAccessTime; + LARGE_INTEGER LastWriteTime; + // Byte-range file lock support (we roll our own) + SFsdFileLockAnchor FCBByteRangeLock; + // The OPLOCK support package requires the following structure + OPLOCK FCBOplock; +} SFsdFCB, *PtrSFsdFCB; + +/************************************************************************** + the following FCBFlags values are relevant. These flag + values are bit fields; therefore we can test whether + a bit position is set (1) or not set (0). +**************************************************************************/ +#define SFSD_FCB_IN_INIT (0x00000001) +#define SFSD_FCB_IN_TEARDOWN (0x00000002) +#define SFSD_FCB_PAGE_FILE (0x00000004) +#define SFSD_FCB_DIRECTORY (0x00000008) +#define SFSD_FCB_ROOT_DIRECTORY (0x00000018) +#define SFSD_FCB_WRITE_THROUGH (0x00000020) +#define SFSD_FCB_MAPPED (0x00000040) +#define SFSD_FCB_FAST_IO_READ_IN_PROGESS (0x00000080) +#define SFSD_FCB_FAST_IO_WRITE_IN_PROGESS (0x00000100) +#define SFSD_FCB_DELETE_ON_CLOSE (0x00000200) +#define SFSD_FCB_MODIFIED (0x00000400) +#define SFSD_FCB_ACCESSED (0x00000800) +#define SFSD_FCB_READ_ONLY (0x00001000) + +#define SFSD_INITIALIZED_MAIN_RESOURCE (0x00002000) +#define SFSD_INITIALIZED_PAGING_IO_RESOURCE (0x00004000) + +#define SFSD_FCB_NOT_FROM_ZONE (0x80000000) + +/************************************************************************** + A logical volume is represented using the following structure. + This structure is allocated as part of the device extension + for a device object that this sample FSD will create, to represent + the mounted logical volume. + + NOTE: If you were to extend this sample FSD to be a "real" FSD, + you would be worried about allocated clusters/sectiors, + bitmaps providing such information for the mounted volume, + dirty/modified clusters/sectiors etc. + This sample FSD does not maintain such information in the + in-memory VCB, though you may wish to consider it. +**************************************************************************/ +typedef struct _SFsdVolumeControlBlock { + SFsdIdentifier NodeIdentifier; + // a resource to protect the fields contained within the VCB + ERESOURCE VCBResource; + // each VCB is accessible off a global linked list + LIST_ENTRY NextVCB; + // each VCB points to a VPB structure created by the NT I/O Manager + PVPB PtrVPB; + // a set of flags that might mean something useful + uint32 VCBFlags; + // A count of the number of open files/directories + // As long as the count is != 0, the volume cannot + // be dismounted or locked. + uint32 VCBOpenCount; + // a global list of all FCB structures associated with the VCB + LIST_ENTRY NextFCB; + // we will maintain a global list of IRP's that are pending + // because of a directory notify request. + LIST_ENTRY NextNotifyIRP; + // the above list is protected only by the mutex declared below + KMUTEX NotifyIRPMutex; + // for each mounted volume, we create a device object. Here then + // is a back pointer to that device object + PDEVICE_OBJECT VCBDeviceObject; + // We also retain a pointer to the physical device object on which we + // have mounted ourselves. The I/O Manager passes us a pointer to this + // device object when requesting a mount operation. + PDEVICE_OBJECT TargetDeviceObject; + // the volume structure contains a pointer to the root directory FCB + PtrSFsdFCB PtrRootDirectoryFCB; + // the complete name of the user visible drive letter we serve + uint8 *PtrVolumePath; + // For volume open operations, we do not create a FCB (we use the VCB + // directly instead). Therefore, all CCB structures for the volume + // open operation are linked directly off the VCB + LIST_ENTRY VolumeOpenListHead; + // Pointer to a stream file object created for the volume information + // to be more easily read from secondary storage (with the support of + // the NT Cache Manager). + PFILE_OBJECT PtrStreamFileObject; + // Required to use the Cache Manager. + SECTION_OBJECT_POINTERS SectionObject; + // File sizes required to use the Cache Manager. + LARGE_INTEGER AllocationSize; + LARGE_INTEGER FileSize; + LARGE_INTEGER ValidDataLength; +} SFsdVCB, *PtrSFsdVCB; + +// some valid flags for the VCB +#define SFSD_VCB_FLAGS_VOLUME_MOUNTED (0x00000001) +#define SFSD_VCB_FLAGS_VOLUME_LOCKED (0x00000002) +#define SFSD_VCB_FLAGS_BEING_DISMOUNTED (0x00000004) +#define SFSD_VCB_FLAGS_SHUTDOWN (0x00000008) +#define SFSD_VCB_FLAGS_VOLUME_READ_ONLY (0x00000010) + +#define SFSD_VCB_FLAGS_VCB_INITIALIZED (0x00000020) + +/************************************************************************** + The IRP context encapsulates the current request. This structure is + used in the "common" dispatch routines invoked either directly in + the context of the original requestor, or indirectly in the context + of a system worker thread. +**************************************************************************/ +typedef struct _SFsdIrpContext { + SFsdIdentifier NodeIdentifier; + uint32 IrpContextFlags; + // copied from the IRP + uint8 MajorFunction; + // copied from the IRP + uint8 MinorFunction; + // to queue this IRP for asynchronous processing + WORK_QUEUE_ITEM WorkQueueItem; + // the IRP for which this context structure was created + PIRP Irp; + // the target of the request (obtained from the IRP) + PDEVICE_OBJECT TargetDeviceObject; + // if an exception occurs, we will store the code here + NTSTATUS SavedExceptionCode; +} SFsdIrpContext, *PtrSFsdIrpContext; + +#define SFSD_IRP_CONTEXT_CAN_BLOCK (0x00000001) +#define SFSD_IRP_CONTEXT_WRITE_THROUGH (0x00000002) +#define SFSD_IRP_CONTEXT_EXCEPTION (0x00000004) +#define SFSD_IRP_CONTEXT_DEFERRED_WRITE (0x00000008) +#define SFSD_IRP_CONTEXT_ASYNC_PROCESSING (0x00000010) +#define SFSD_IRP_CONTEXT_NOT_TOP_LEVEL (0x00000020) + +#define SFSD_IRP_CONTEXT_NOT_FROM_ZONE (0x80000000) + +/************************************************************************** + we will store all of our global variables in one structure. + Global variables are not specific to any mounted volume BUT + by definition are required for successful operation of the + FSD implementation. +**************************************************************************/ +typedef struct _SFsdData { + SFsdIdentifier NodeIdentifier; + // the fields in this list are protected by the following resource + ERESOURCE GlobalDataResource; + // each driver has a driver object created for it by the NT I/O Mgr. + // we are no exception to this rule. + PDRIVER_OBJECT SFsdDriverObject; + // we will create a device object for our FSD as well ... + // Although not really required, it helps if a helper application + // writen by us wishes to send us control information via + // IOCTL requests ... + PDEVICE_OBJECT SFsdDeviceObject; + // we will keep a list of all logical volumes for our sample FSD + LIST_ENTRY NextVCB; + // the NT Cache Manager, the I/O Manager and we will conspire + // to bypass IRP usage using the function pointers contained + // in the following structure + FAST_IO_DISPATCH SFsdFastIoDispatch; + // The NT Cache Manager uses the following call backs to ensure + // correct locking hierarchy is maintained + CACHE_MANAGER_CALLBACKS CacheMgrCallBacks; + // structures allocated from a zone need some fields here. Note + // that under version 4.0, it might be better to use lookaside + // lists + KSPIN_LOCK ZoneAllocationSpinLock; + NPAGED_LOOKASIDE_LIST ObjectNameLLHeader; + NPAGED_LOOKASIDE_LIST CCBLLHeader; + NPAGED_LOOKASIDE_LIST FCBLLHeader; + NPAGED_LOOKASIDE_LIST ByteLockLLHeader; + NPAGED_LOOKASIDE_LIST IrpContextLLHeader; + void *ObjectNameZone; + void *CCBZone; + void *FCBZone; + void *ByteLockZone; + void *IrpContextZone; + // currently, there is a single default zone size value used for + // all zones. This should ideally be changed by you to be 1 per + // type of zone (e.g. a default size for the FCB zone might be + // different from the default size for the ByteLock zone). + + // Of course, you will need to use different values (min/max) + // for lookaside lists (if you decide to use them instead) + uint32 DefaultZoneSizeInNumStructs; + // some state information is maintained in the flags field + uint32 SFsdFlags; + // Handle returned by the MUP is stored here. + HANDLE MupHandle; +} SFsdData, *PtrSFsdData; + +// valid flag values for the global data structure +#define SFSD_DATA_FLAGS_RESOURCE_INITIALIZED (0x00000001) +#define SFSD_DATA_FLAGS_ZONES_INITIALIZED (0x00000002) + +// a default size of the number of pages of non-paged pool allocated +// for each of the zones ... + +// Note that the values are absolutely arbitrary, the only information +// worth using from the values themselves is that they increase for +// larger systems (i.e. systems with more memory) +#define SFSD_DEFAULT_ZONE_SIZE_SMALL_SYSTEM (0x4) +#define SFSD_DEFAULT_ZONE_SIZE_MEDIUM_SYSTEM (0x8) +#define SFSD_DEFAULT_ZONE_SIZE_LARGE_SYSTEM (0xc) + +// another simplistic (brain dead ? :-) method used is to simply double +// the values for a "server" machine + +// So, for all you guys who "modified" the registry ;-) to change the +// wkstation into a server, tough luck ! +#define SFSD_NTAS_MULTIPLE (0x2) + +/*************************************************************************** +The following locking hierarchy is maintained in this sample filesystem +driver: + +(a) the global structure resource can be acquired at any time. However, + it is an "end resource" i.e. once acquired, no other resource can + be obtained until the global structure resource is released. +(b) the logical volume resource must be acquired (if required) before + any of the other resources are acquired. +(c) a file control block can be acquired next (if required). If two + FCB structures need to be acquired, the FCB "higher" in the directory + tree must be acquired first. + For a FCB, the "main resource" must be acquired first before a + "paging i/o" resource is acquired. + +Whenever a file is opened, the logical volume structure is referenced. +This ensures that the volume cannot be dismounted while any file is open. + +***************************************************************************/ + +#endif _SFSD_STRUCTURES_H_ // has this file been included? + Added: vendor/rfsd/current/SampleFSD/filesys/readme.txt URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/rea…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/readme.txt (added) +++ vendor/rfsd/current/SampleFSD/filesys/readme.txt Fri Apr 14 13:01:12 2006 @@ -1,0 +1,22 @@ +======================================================================== + MAKEFILE PROJECT : filesys Project Overview +======================================================================== + +AppWizard has created this filesys project for you. + +This file contains a summary of what you will find in each of the files that +make up your filesys project. + + +filesys.vcproj + This is the main project file for VC++ projects generated using an Application Wizard. + It contains information about the version of Visual C++ that generated the file, and + information about the platforms, configurations, and project features selected with the + Application Wizard. + +This project allows you to build/clean/rebuild from within Visual Studio by calling the commands you have input +in the wizard. The build command can be nmake or any other tool you use. + +This project does not contain any files, so there are none displayed in Solution Explorer. + +///////////////////////////////////////////////////////////////////////////// Added: vendor/rfsd/current/SampleFSD/filesys/readme1.txt URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/rea…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/readme1.txt (added) +++ vendor/rfsd/current/SampleFSD/filesys/readme1.txt Fri Apr 14 13:01:12 2006 @@ -1,0 +1,57 @@ +Sample File System Driver +------------------------ + +The sample file system driver code provided here can be used to +design and implement your own file system driver product. + +!!!!!!!!!!!!!!!!!!!!!!!WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +The code provided here is for illustration purposes only. It is not +to be used as-is. Substantial modifications, enhancements, and testing +are required before installing any portion of the code on any machine. + +DO NOT EXPECT THIS CODE TO WORK. IT IS ONLY TO BE USED AS A GUIDE +IN CONJUNCTION WITH THE TEXT CONTAINED IN THE BOOK IN DESIGNING YOUR +OWN FSD. IT IS SEVERELY LACKING IN FUNCTIONALITY AND HAS NEVER BEEN +INSTALLED OR TESTED AS IS COMMONLY REQUIRED. + +TO COMPILE THE SOURCES PROVIDED HERE, YOU MUST HAVE A COPY OF THE +"ntifs.h" HEADER FILE PROVIDED BY MICROSOFT AS PART OF THE WINDOWS NT +IFS KIT. + +!!!!!!!!!!!!!!!!!!!!!!!WARNING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +Files provided: +-------------- + +src\sfsdinit.c - File system driver initialization functions +src\create.c - Routines to support create/open requests +src\read.c - Support for the read dispatch routine +src\write.c - Support for the write dispatch routine + +src\fileinfo.c - Query/modify file attributes +src\dircntrl.c - Routines to support directory control requests +src\cleanup.c - Stub functions for the cleanup dispatch entry point +src\close.c - Stub functions for the close dispatch entry point + +src\fastio.c - The fast I/O entry points (and Cache Manager callbacks) +src\flush.c - Support for the flush entry point +src\devcntrl.c - Device IOCTL support + +src\shutdown.c - Support for the shutdown notification call +src\misc.c - Everything that didn't fit into the above, but was required + for compilation purposes + + +inc\protos.h - Prototypes for all functions in files listed above +inc\sfsd.h - The "main" include file; also contains useful macros +inc\struct.h - Structure type definitions +inc\errmsg.h - Automatically generated include file + (by the message compiler) that allows reporting of + FSD-specific error/warning/informational + messages in the event log (see the event subdirectory) + +src\makefile - makefile! +src\sources - Contains list of files to be built; used by build.exe +README.TXT - What you are reading + Added: vendor/rfsd/current/SampleFSD/filesys/run-make.bat URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/run…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/run-make.bat (added) +++ vendor/rfsd/current/SampleFSD/filesys/run-make.bat Fri Apr 14 13:01:12 2006 @@ -1,0 +1,6 @@ +pushd . +call C:\WINDDK\3790\bin\setenv.bat C:\WINDDK\3790 chk WXP +popd +set BUILD_ALLOW_ALL_WARNINGS=1 +cd src +nmake Added: vendor/rfsd/current/SampleFSD/filesys/sfsd.reg URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/sfs…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/sfsd.reg (added) +++ vendor/rfsd/current/SampleFSD/filesys/sfsd.reg Fri Apr 14 13:01:12 2006 @@ -1,0 +1,30 @@ +REGEDIT4 + +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SampleFSD] + +"ErrorControl"=dword:00000001 + +"Group"="File System" + +# +# If the driver is somewhere else than %systemroot%\system32\drivers\. +# +# "ImagePath"="\\??\\c:\\romfs\\sys\\bin\\xp\\chk\\i386\\romfs.sys" + +# +# When to start the driver: +# At boot: Start=1 +# Manually: Start=3 +# +"Start"=dword:00000003 + +"Type"=dword:00000002 + +# +# Assign drive letters to the romfs partitions if any. +# (/dev/hda1 in Linux = \\Device\\Harddisk0\\Partition1 in NT, an extended +# partition is skipped in the enumeration) +# +[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices] + +# "R:"="\\Device\\Harddisk0\\Partition1" Added: vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries Fri Apr 14 13:01:12 2006 @@ -1,0 +1,18 @@ +/cleanup.c/1.2/Tue Jul 12 17:29:49 2005// +/close.c/1.2/Tue Jul 12 17:29:50 2005// +/create.c/1.2/Tue Jul 12 17:29:50 2005// +/debug.c/1.1/Tue Jul 12 17:29:50 2005// +/devcntrl.c/1.2/Tue Jul 12 17:29:50 2005// +/dircntrl.c/1.2/Tue Jul 12 17:29:50 2005// +/fastio.c/1.1/Wed Jul 6 15:02:53 2005// +/fileinfo.c/1.2/Tue Jul 12 17:29:50 2005// +/flush.c/1.2/Tue Jul 12 17:29:50 2005// +/fscontrol.c/1.1/Tue Jul 12 17:29:50 2005// +/makefile/1.1/Wed Jul 6 15:02:53 2005// +/misc.c/1.3/Wed Jul 6 22:34:29 2005// +/read.c/1.2/Tue Jul 12 17:29:50 2005// +/sfsdinit.c/1.2/Tue Jul 12 17:29:50 2005// +/shutdown.c/1.3/Tue Jul 12 17:29:50 2005// +/sources/1.2/Tue Jul 12 17:29:50 2005/-kb/ +/write.c/1.2/Tue Jul 12 17:29:50 2005// +D Added: vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Extra URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Extra (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Extra Fri Apr 14 13:01:12 2006 @@ -1,0 +1,17 @@ +/cleanup.c////*/// +/close.c////*/// +/create.c////*/// +/debug.c////*/// +/devcntrl.c////*/// +/dircntrl.c////*/// +/fastio.c////*/// +/fileinfo.c////*/// +/flush.c////*/// +/fscontrol.c////*/// +/makefile////*/// +/misc.c////*/// +/read.c////*/// +/sfsdinit.c////*/// +/shutdown.c////*/// +/sources////*/// +/write.c////*/// Added: vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Extra.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== (empty) Added: vendor/rfsd/current/SampleFSD/filesys/src/CVS/Entries.Old URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== (empty) Added: vendor/rfsd/current/SampleFSD/filesys/src/CVS/Repository URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/CVS/Repository (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/CVS/Repository Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +code/SampleFSD/filesys/src Added: vendor/rfsd/current/SampleFSD/filesys/src/CVS/Root URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/CVS/Root (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/CVS/Root Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1 @@ +:pserver:anonymous@cvs.sourceforge.net:/cvsroot/rfsd Added: vendor/rfsd/current/SampleFSD/filesys/src/cleanup.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/cleanup.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/cleanup.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,161 @@ +/************************************************************************* +* +* File: cleanup.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Should contain code to handle the "Cleanup" dispatch entry point. +* This file serves as a placeholder. Please update this file as part +* of designing and implementing your FSD. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_CLEANUP + + + +/************************************************************************* +* +* Function: SFsdCleanup() +* +* Description: +* The I/O Manager will invoke this routine to handle a cleanup +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: Does not matter! +* +*************************************************************************/ +NTSTATUS SFsdCleanup( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonCleanup(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonCleanup() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: Does not matter! +* +*************************************************************************/ +NTSTATUS SFsdCommonCleanup( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + PERESOURCE PtrResourceAcquired = NULL; + IO_STATUS_BLOCK LocalIoStatus; + + BOOLEAN CompleteIrp = TRUE; + BOOLEAN PostRequest = FALSE; + + BOOLEAN CanWait = FALSE; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Get the FCB and CCB pointers + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + PtrVCB = (PtrSFsdVCB)(PtrIrpContext->TargetDeviceObject->DeviceExtension); + ASSERT(PtrVCB); + ASSERT(PtrVCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB); + + // Steps you will probably take at this point are: + // (a) Acquire the VCB exclusively + // (b) Acquire the file (FCB) exclusively + // (c) Flush file data to disk + // (d) Talk to the FSRTL package (if you use it) about pending oplocks. + // (e) Notify the FSRTL package (if you use it) for use with pending + // notification IRPs + // (f) Unlock byte-range locks (if any were acquired by process) + // (g) Update time stamp values (e.g. fast-IO had been performed) + // (h) Inform the Cache Manager to uninitialize Cache Maps ... + // and other similar stuff. Chapter 10 in the book describes in further + // detail the list of functionality expected from a typical cleanup routine. + + try_exit: NOTHING; + + } finally { + + // See the read/write examples for how to fill in this portion + + } // end of "finally" processing + + return(RC); +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/close.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/close.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/close.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,163 @@ +/************************************************************************* +* +* File: close.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Should contain code to handle the "Close" dispatch entry point. +* This file serves as a placeholder. Please update this file as part +* of designing and implementing your FSD. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_CLOSE + + + +/************************************************************************* +* +* Function: SFsdClose() +* +* Description: +* The I/O Manager will invoke this routine to handle a close +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: Does not matter! +* +*************************************************************************/ +NTSTATUS SFsdClose( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonClose(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + + +/************************************************************************* +* +* Function: SFsdCommonClose() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: Does not matter! +* +*************************************************************************/ +NTSTATUS SFsdCommonClose( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + PERESOURCE PtrResourceAcquired = NULL; + IO_STATUS_BLOCK LocalIoStatus; + + BOOLEAN CompleteIrp = TRUE; + BOOLEAN PostRequest = FALSE; + + BOOLEAN CanWait = FALSE; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Get the FCB and CCB pointers + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + PtrVCB = (PtrSFsdVCB)(PtrIrpContext->TargetDeviceObject->DeviceExtension); + ASSERT(PtrVCB); + ASSERT(PtrVCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB); + + // Steps you will probably take at this point are: + // (a) Acquire the VCB exclusively + // (b) Acquire the file (FCB) exclusively + // (c) Delete the CCB structure (free memory) + // (d) If this is the last close, release the FCB structure (unless you keep these + // around for "delayed close" functionality. + // Note that it is often the case that the close dispatch entry point is invoked + // in the most inconvenient of situations (when it is not possible, for example, + // to safely acquire certain required resources without deadlocking or waiting). + // Therefore, be extremely careful in implementing this close dispatch entry point. + // Also note that you do not have the option of returning a failure code from the + // close dispatch entry point; the system expects that the close will always succeed. + + try_exit: NOTHING; + + } finally { + + // See the read/write examples for how to fill in this portion + + } // end of "finally" processing + + return(RC); +} + + Added: vendor/rfsd/current/SampleFSD/filesys/src/create.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/create.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/create.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,906 @@ +/************************************************************************* +* +* File: create.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "Create"/"Open" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_CREATE + + + +/************************************************************************* +* +* Function: SFsdCreate() +* +* Description: +* The I/O Manager will invoke this routine to handle a create/open +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCreate( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // sometimes, we may be called here with the device object representing + // the file system (instead of the device object created for a logical + // volume. In this case, there is not much we wish to do (this create + // typically will happen 'cause some process has to open the FSD device + // object so as to be able to send an IOCTL to the FSD) + + // All of the logical volume device objects we create have a device + // extension whereas the device object representing the FSD has no + // device extension. This seems like a good enough method to identify + // between the two device objects ... + if (DeviceObject->Size == (unsigned short)(sizeof(DEVICE_OBJECT))) { + // this is an open of the FSD itself + Irp->IoStatus.Status = RC; + Irp->IoStatus.Information = FILE_OPENED; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + return(RC); + } + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonCreate(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonCreate() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonCreate( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PIO_SECURITY_CONTEXT PtrSecurityContext = NULL; + PFILE_OBJECT PtrNewFileObject = NULL; + PFILE_OBJECT PtrRelatedFileObject = NULL; + uint32 AllocationSize = 0; // if we create a new file + PFILE_FULL_EA_INFORMATION PtrExtAttrBuffer = NULL; + unsigned long RequestedOptions = 0; + unsigned long RequestedDisposition = 0; + uint8 FileAttributes = 0; + unsigned short ShareAccess = 0; + unsigned long ExtAttrLength = 0; + ACCESS_MASK DesiredAccess; + + BOOLEAN DeferredProcessing = FALSE; + + PtrSFsdVCB PtrVCB = NULL; + BOOLEAN AcquiredVCB = FALSE; + + BOOLEAN DirectoryOnlyRequested = FALSE; + BOOLEAN FileOnlyRequested = FALSE; + BOOLEAN NoBufferingSpecified = FALSE; + BOOLEAN WriteThroughRequested = FALSE; + BOOLEAN DeleteOnCloseSpecified = FALSE; + BOOLEAN NoExtAttrKnowledge = FALSE; + BOOLEAN CreateTreeConnection = FALSE; + BOOLEAN OpenByFileId = FALSE; + + // Are we dealing with a page file? + BOOLEAN PageFileManipulation = FALSE; + + // Is this open for a target directory (used in rename operations)? + BOOLEAN OpenTargetDirectory = FALSE; + + // Should we ignore case when attempting to locate the object? + BOOLEAN IgnoreCaseWhenChecking = FALSE; + + PtrSFsdCCB PtrRelatedCCB = NULL, PtrNewCCB = NULL; + PtrSFsdFCB PtrRelatedFCB = NULL, PtrNewFCB = NULL; + + unsigned long ReturnedInformation; + + UNICODE_STRING TargetObjectName; + UNICODE_STRING RelatedObjectName; + + UNICODE_STRING AbsolutePathName; + + LARGE_INTEGER FileAllocationSize, FileEndOfFile; + + + ASSERT(PtrIrpContext); + ASSERT(PtrIrp); + + try { + + AbsolutePathName.Buffer = NULL; + AbsolutePathName.Length = AbsolutePathName.MaximumLength = 0; + + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + // If the caller cannot block, post the request to be handled + // asynchronously + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK)) { + // We must defer processing of this request since we could + // block anytime while performing the create/open ... + RC = SFsdPostRequest(PtrIrpContext, PtrIrp); + DeferredProcessing = TRUE; + try_return(RC); + } + + // Now, we can obtain the parameters specified by the user. + // Note that the file object is the new object created by the + // I/O Manager in anticipation that this create/open request + // will succeed. + PtrNewFileObject = PtrIoStackLocation->FileObject; + TargetObjectName = PtrNewFileObject->FileName; + PtrRelatedFileObject = PtrNewFileObject->RelatedFileObject; + + // If a related file object is present, get the pointers + // to the CCB and the FCB for the related file object + if (PtrRelatedFileObject) { + PtrRelatedCCB = (PtrSFsdCCB)(PtrRelatedFileObject->FsContext2); + ASSERT(PtrRelatedCCB); + ASSERT(PtrRelatedCCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_CCB); + // each CCB in turn points to a FCB + PtrRelatedFCB = PtrRelatedCCB->PtrFCB; + ASSERT(PtrRelatedFCB); + ASSERT((PtrRelatedFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_FCB) + || + (PtrRelatedFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB)); + RelatedObjectName = PtrRelatedFileObject->FileName; + } + + // Allocation size is only used if a new file is created + // or a file is superseded. + AllocationSize = PtrIrp->Overlay.AllocationSize.LowPart; + // Note: Some FSD implementations support file sizes > 2 GB. + // The following check is only valid if your FSD does not support + // a large file size. With NT version 5.0, 64 bit support will + // become available and your FSD should ideally support large files ... + if (PtrIrp->Overlay.AllocationSize.HighPart) { + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + // Get a ptr to the supplied security context + PtrSecurityContext = PtrIoStackLocation->Parameters.Create.SecurityContext; + + // The desired access can be obtained from the SecurityContext + DesiredAccess = PtrSecurityContext->DesiredAccess; + + // Two values are supplied in the Create.Options field: + // (a) the actual user supplied options + // (b) the create disposition + RequestedOptions = (PtrIoStackLocation->Parameters.Create.Options & FILE_VALID_OPTION_FLAGS); + + // The file disposition is packed with the user options ... + // Disposition includes FILE_SUPERSEDE, FILE_OPEN_IF, etc. + RequestedDisposition = ((PtrIoStackLocation->Parameters.Create.Options >> 24) && 0xFF); + + FileAttributes = (uint8)(PtrIoStackLocation->Parameters.Create.FileAttributes & FILE_ATTRIBUTE_VALID_FLAGS); + ShareAccess = PtrIoStackLocation->Parameters.Create.ShareAccess; + + // If your FSD does not support EA manipulation, you might return + // invalid parameter if the following are supplied. + // EA arguments are only used if a new file is created or a file is + // superseded + PtrExtAttrBuffer = PtrIrp->AssociatedIrp.SystemBuffer; + ExtAttrLength = PtrIoStackLocation->Parameters.Create.EaLength; + + // Get the options supplied by the user + + // User specifies that returned object MUST be a directory. + // Lack of presence of this flag does not mean it *cannot* be a + // directory *unless* FileOnlyRequested is set (see below) + + // Presence of the flag however, does require that the returned object be + // a directory (container) object. + DirectoryOnlyRequested = ((RequestedOptions & FILE_DIRECTORY_FILE) ? TRUE : FALSE); + + // User specifies that returned object MUST NOT be a directory. + // Lack of presence of this flag does not mean it *cannot* be a + // file *unless* DirectoryOnlyRequested is set (see above). + + // Presence of the flag however does require that the returned object be + // a simple file (non-container) object. + FileOnlyRequested = ((RequestedOptions & FILE_NON_DIRECTORY_FILE) ? TRUE : FALSE); + + // We cannot cache the file if the following flag is set. + // However, things do get a little bit interesting if caching + // has been already initiated due to a previous open ... + // (maintaining consistency then becomes a little bit more + // of a headache - see read/write file descriptions) + NoBufferingSpecified = ((RequestedOptions & FILE_NO_INTERMEDIATE_BUFFERING) ? TRUE : FALSE); + + // Write-through simply means that the FSD must *not* return from + // a user write request until the data has been flushed to secondary + // storage (either to disks directly connected to the node or across + // the network in the case of a redirector) + WriteThroughRequested = ((RequestedOptions & FILE_WRITE_THROUGH) ? TRUE : FALSE); + + // Not all of the native file system implementations support + // the delete-on-close option. All this means is that after the + // last close on the FCB has been performed, your FSD should + // delete the file. It simply saves the caller from issuing a + // separate delete request. Also, some FSD implementations might choose + // to implement a Windows NT idiosyncratic behavior wherein you + // could create such "delete-on-close" marked files under directories + // marked for deletion. Ordinarily, a FSD will not allow you to create + // a new file under a directory that has been marked for deletion. + DeleteOnCloseSpecified = ((RequestedOptions & FILE_DELETE_ON_CLOSE) ? TRUE : FALSE); + + NoExtAttrKnowledge = ((RequestedOptions & FILE_NO_EA_KNOWLEDGE) ? TRUE : FALSE); + + // The following flag is only used by the LAN Manager redirector + // to initiate a "new mapping" to a remote share. Typically, + // a FSD will not see this flag (especially disk based FSD's) + CreateTreeConnection = ((RequestedOptions & FILE_CREATE_TREE_CONNECTION) ? TRUE : FALSE); + + // The NTFS file system for exmaple supports the OpenByFileId option. + // Your FSD may also be able to associate a unique numerical ID with + // an on-disk object. The caller would get this ID in a "query file + // information" call. + + // Later, the caller might decide to reopen the object, this time + // though it may supply your FSD with the file identifier instead of + // a file/path name. + OpenByFileId = ((RequestedOptions & FILE_OPEN_BY_FILE_ID) ? TRUE : FALSE); + + // Are we dealing with a page file? + PageFileManipulation = ((PtrIoStackLocation->Flags & SL_OPEN_PAGING_FILE) ? TRUE : FALSE); + + // The open target directory flag is used as part of the sequence of + // operations performed by the I/O Manager is response to a file/dir + // rename operation. See the explanation in the book for details. + OpenTargetDirectory = ((PtrIoStackLocation->Flags & SL_OPEN_TARGET_DIRECTORY) ? TRUE : FALSE); + + // If your FSD supports case-sensitive file name checks, you may + // choose to honor the following flag ... + IgnoreCaseWhenChecking = ((PtrIoStackLocation->Flags & SL_CASE_SENSITIVE) ? TRUE : FALSE); + + // Ensure that the operation has been directed to a valid VCB ... + PtrVCB = (PtrSFsdVCB)(PtrIrpContext->TargetDeviceObject->DeviceExtension); + ASSERT(PtrVCB); + ASSERT(PtrVCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB); + + // Use coarse grained locking and acquire the VCB exclusively. This + // will lock out all other concurrent create/open requests + // If the VCB is also acquired by the cleanup/close dispatch routines, + // you can count on create/opens being synchronized with these functions + // as well. + ExAcquireResourceExclusiveLite(&(PtrVCB->VCBResource), TRUE); + AcquiredVCB = TRUE; + + // Disk based file systems might decide to verify the logical volume + // (if required and only if removable media are supported) at this time + + // Implement your own volume verification routine ... + // Read the DDK for more information on when a FSD must verify a + // volume ... + // if (!NT_SUCCESS(RC = SFsdVerifyVolume(PtrVCB))) { + // try_return(RC); + // } + + // If the volume has been locked, fail the request + if (PtrVCB->VCBFlags & SFSD_VCB_FLAGS_VOLUME_LOCKED) { + RC = STATUS_ACCESS_DENIED; + try_return(RC); + } + + // If a volume open is requested, satisfy it now + if ((PtrNewFileObject->FileName.Length == 0) && ((PtrRelatedFileObject == NULL) || + (PtrRelatedFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB))) { + // If the supplied file name is NULL *and* either there exists + // no related file object *or* if a related file object was supplied + // but it too refers to a previously opened instance of a logical + // volume, this open must be for a logical volume. + + // Note: your FSD might decide to do "special" things (whatever they + // might be) in response to an open request for the logical volume. + + // Logical volume open requests are done primarily to get/set volume + // information, lock the volume, dismount the volume (using the IOCTL + // FSCTL_DISMOUNT_VOLUME) etc. + + // If a volume open is requested, perform checks to ensure that + // invalid options have not also been specified ... + if ((OpenTargetDirectory) || (PtrExtAttrBuffer)) { + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + if (DirectoryOnlyRequested) { + // a volume is not a directory + RC = STATUS_NOT_A_DIRECTORY; + try_return(RC); + } + + if ((RequestedDisposition != FILE_OPEN) && (RequestedDisposition != FILE_OPEN_IF)) { + // cannot create a new volume, I'm afraid ... + RC = STATUS_ACCESS_DENIED; + try_return(RC); + } + + RC = SFsdOpenVolume(PtrVCB, PtrIrpContext, PtrIrp, ShareAccess, PtrSecurityContext, PtrNewFileObject); + ReturnedInformation = PtrIrp->IoStatus.Information; + + try_return(RC); + } + + // Your FSD might wish to implement the open-by-id option. The "id" + // is some unique numerical representation of the on-disk object. + // The caller then therefore give you this file id and your FSD + // should be completely capable of "opening" the object (it must + // exist since the caller received an id for the object from your + // FSD in a "query file" call ... + + // If the file has been deleted in the meantime, you can return + // "not found" + if (OpenByFileId) { + // perform the open ... + // RC = SFsdOpenByFileId(PtrIrpContext, PtrIrp ....); + // try_return(RC); + } + + // Now determine the starting point from which to begin the parsing + if (PtrRelatedFileObject) { + // We have a user supplied related file object. + // This implies a "relative" open i.e. relative to the directory + // represented by the related file object ... + + // Note: The only purpose FSD implementations ever have for + // the related file object is to determine whether this + // is a relative open or not. At all other times (including + // during I/O operations), this field is meaningless from + // the FSD's perspective. + if (!(PtrRelatedFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // we must have a directory as the "related" object + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + // So we have a directory, ensure that the name begins with + // a "\" i.e. begins at the root and does *not* begin with a "\\" + // NOTE: This is just an example of the kind of path-name string + // validation that a FSD must do. Although the remainder of + // the code may not include such checks, any commercial + // FSD *must* include such checking (no one else, including + // the I/O Manager will perform checks on your FSD's behalf) + if ((RelatedObjectName.Length == 0) || (RelatedObjectName.Buffer[0] != L'\\')) { + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + // similarly, if the target file name starts with a "\", it + // is wrong since the target file name can no longer be absolute + if ((TargetObjectName.Length != 0) && (TargetObjectName.Buffer[0] == L'\\')) { + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + // Create an absolute path-name. You could potentially use + // the absolute path-name if you cache previously opened + // file/directory object names. + { + AbsolutePathName.MaximumLength = TargetObjectName.Length + RelatedObjectName.Length + sizeof(WCHAR); + if (!(AbsolutePathName.Buffer = ExAllocatePool(PagedPool, AbsolutePathName.MaximumLength))) { + RC = STATUS_INSUFFICIENT_RESOURCES; + try_return(RC); + } + + RtlZeroMemory(AbsolutePathName.Buffer, AbsolutePathName.MaximumLength); + + RtlCopyMemory((void *)(AbsolutePathName.Buffer), (void *)(RelatedObjectName.Buffer), RelatedObjectName.Length); + AbsolutePathName.Length = RelatedObjectName.Length; + RtlAppendUnicodeToString(&AbsolutePathName, L"\\"); + RtlAppendUnicodeToString(&AbsolutePathName, TargetObjectName.Buffer); + } + + } else { + + // The suplied path-name must be an absolute path-name i.e. + // starting at the root of the file system tree + if (TargetObjectName.Buffer[0] != L'\\') { + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + { + AbsolutePathName.MaximumLength = TargetObjectName.Length; + if (!(AbsolutePathName.Buffer = ExAllocatePool(PagedPool, AbsolutePathName.MaximumLength))) { + RC = STATUS_INSUFFICIENT_RESOURCES; + try_return(RC); + } + + RtlZeroMemory(AbsolutePathName.Buffer, AbsolutePathName.MaximumLength); + + RtlCopyMemory((void *)(AbsolutePathName.Buffer), (void *)(TargetObjectName.Buffer), TargetObjectName.Length); + AbsolutePathName.Length = TargetObjectName.Length; + } + } + + // go into a loop parsing the supplied name + + // Use the algorithm supplied in the book to implement this + // loop. + + // Note that you may have to "open" intermediate directory objects + // while traversing the path. You should try to reuse existing code + // whenever possible therefore you should consider using a common + // open routine regardless of whether the open is on behalf of the + // caller or an intermediate (internal) open performed by your driver. + + // But first, check if the caller simply wishes to open the root + // of the file system tree. + if (AbsolutePathName.Length == 2) { + // this is an open of the root directory, ensure that the caller has not requested a file only + if (FileOnlyRequested || (RequestedDisposition == FILE_SUPERSEDE) || (RequestedDisposition == FILE_OVERWRITE) || + (RequestedDisposition == FILE_OVERWRITE_IF)) { + RC = STATUS_FILE_IS_A_DIRECTORY; + try_return(RC); + } + + // Insert code to open root directory here. Include creation of a new CCB structure. + // e.g. RC = SFsdOpenRootDirectory(...); + + try_return(RC); + } + + if (PtrRelatedFileObject) { + // Insert code such that your "start directory" is + // the one identified by the related file object + } else { + // Insert code to start at the root of the file system + } + + // NOTE: If your FSD does not support access checking i.e. + // your FSD does not check "traversal" privileges, + // you could easily maintain a "prefix" cache containing + // path-names and open FCB pointers. Then, if the requested + // path-name is already present in the cache i.e. someone + // had opened it earlier, you can avoid the tedious traversal + // of the entire path-name performed below and described in + // the book ... + + // If you do not maintain such a prefix table cache of previously + // opened object names or if you do not find the name to be opened + // in the cache, then: + + // Get the "next" component in the name to be parsed. Note that + // obtaining the next string component is similar to the strtok + // library routine where the separator is a "\" + + // Your FSD should also always check the validity of the token + // to ensure that only valid characters comprise the path/file name + + // Insert code to open the starting directory here. + + while (TRUE) { + // Insert code to perform the following tasks here: + + // (a) acquire the parent directory FCB MainResource exclusively + // (b) ensure that the parent directory in which you will perform + // a lookup operation is indeed a directory + // (c) if there are no more components left after this one in the + // pathname supplied by the user, break; + // (d) attempt to lookup the sub-directory in the parent + // (e) if not found, return STATUS_OBJECT_PATH_NOT_FOUND + // (f) Otherwise, open the new sub-directory and make it + // the "parent" + // (g) go back and repeat the loop for the next component in + // the path + + // NOTE: If your FSD supports it, you should always check + // that the caller has appropriate privileges to traverse + // the directories being searched. + } + + // Now we are down to the last component, check it out to see if it exists ... + + // If "open target directory" was specified + if (OpenTargetDirectory) { + if (NT_SUCCESS(RC)) { + // file exists, set this information in the Information field + ReturnedInformation = FILE_EXISTS; + } else { + RC = STATUS_SUCCESS; + + // Tell the I/O Manager that file does not exit + ReturnedInformation = FILE_DOES_NOT_EXIST; + } + + // Now, do the following: + + // (a) Replace the string in the FileName field in the + // PtrNewFileObject to identify the "target name" + // only (sans the path leading to the object) + { + unsigned int Index = (AbsolutePathName.Length - 1); + + // Back up until we come to the last '\' + // But first, skip any trailing '\' characters + + while (AbsolutePathName.Buffer[Index] == L'\\') { + ASSERT(Index >= sizeof(WCHAR)); + Index -= sizeof(WCHAR); + // Skip this length also + PtrNewFileObject->FileName.Length -= sizeof(WCHAR); + } + + while (AbsolutePathName.Buffer[Index] != L'\\') { + // Keep backing up until we hit one + ASSERT(Index >= sizeof(WCHAR)); + Index -= sizeof(WCHAR); + } + + // We must be at a '\' character + ASSERT(AbsolutePathName.Buffer[Index] == L'\\'); + Index++; + + // We can now determine the new length of the filename + // and copy the name over + PtrNewFileObject->FileName.Length -= (unsigned short)(Index*sizeof(WCHAR)); + RtlCopyMemory(&(PtrNewFileObject->FileName.Buffer[0]), + &(PtrNewFileObject->FileName.Buffer[Index]), + PtrNewFileObject->FileName.Length); + } + + // (b) Return with the target's parent directory opened + // (c) Update the file object FsContext and FsContext2 fields + // to reflect the fact that the parent directory of the + // target has been opened + + try_return(RC); + } + + if (!NT_SUCCESS(RC)) { + // Object was not found, create if requested + if ((RequestedDisposition == FILE_CREATE) || (RequestedDisposition == FILE_OPEN_IF) || + (RequestedDisposition == FILE_OVERWRITE_IF)) { + // Create a new file/directory here ... + // Note that a FCB structure will be allocated at this time + // and so will a CCB structure. Assume that these are called + // PtrNewFCB and PtrNewCCB respectively. + // Further, note that since the file is being created, no other + // thread can have the file stream open at this time. + + // Open the newly created object + + // Set the allocation size for the object is specified + + // Set extended attributes for the file ... + + // Set the Share Access for the file stream. + // The FCBShareAccess field will be set by the I/O Manager. + IoSetShareAccess(DesiredAccess, ShareAccess, PtrNewFileObject, &(PtrNewFCB->FCBShareAccess)); + + RC = STATUS_SUCCESS; + ReturnedInformation = FILE_CREATED; + } + + try_return(RC); + + } else { + if (RequestedDisposition == FILE_CREATE) { + ReturnedInformation = FILE_EXISTS; + RC = STATUS_OBJECT_NAME_COLLISION; + try_return(RC); + } + + // Insert code to open the target here, return if failed + + // The FSD will allocate a new FCB structure if no such structure + // currently exists in memory for the file stream. + // A new CCB will always be allocated. + // Assume that these structures are named PtrNewFCB and PtrNewCCB + // respectively. + // Further, you should obtain the FCB MainResource exclusively + // at this time. + + // Check if caller wanted a directory only and target object + // not a directory, or caller wanted a file only and target + // object not a file ... + if (FileOnlyRequested && (PtrNewFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // Close the new FCB and leave. + // SFsdCloseCCB(PtrNewCCB); + RC = STATUS_FILE_IS_A_DIRECTORY; + try_return(RC); + } + + if ((PtrNewFCB->FCBFlags & SFSD_FCB_DIRECTORY) && ((RequestedDisposition == FILE_SUPERSEDE) || + (RequestedDisposition == FILE_OVERWRITE) || (RequestedDisposition == FILE_OVERWRITE_IF))) { + RC = STATUS_FILE_IS_A_DIRECTORY; + try_return(RC); + } + + if (DirectoryOnlyRequested && !(PtrNewFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // Close the new FCB and leave. + // SFsdCloseCCB(PtrNewCCB); + RC = STATUS_NOT_A_DIRECTORY; + try_return(RC); + } + + // Check share access and fail if the share conflicts with an existing + // open. + if (PtrNewFCB->OpenHandleCount > 0) { + // The FCB is currently in use by some thread. + // We must check whether the requested access/share access + // conflicts with the existing open operations. + + if (!NT_SUCCESS(RC = IoCheckShareAccess(DesiredAccess, ShareAccess, PtrNewFileObject, + &(PtrNewFCB->FCBShareAccess), TRUE))) { + // SFsdCloseCCB(PtrNewCCB); + try_return(RC); + } + } else { + IoSetShareAccess(DesiredAccess, ShareAccess, PtrNewFileObject, &(PtrNewFCB->FCBShareAccess)); + } + + ReturnedInformation = FILE_OPENED; + + // If a supersede or overwrite was requested, do so now ... + if (RequestedDisposition == FILE_SUPERSEDE) { + // Attempt the operation here ... + // RC = SFsdSupersede(...); + if (NT_SUCCESS(RC)) { + ReturnedInformation = FILE_SUPERSEDED; + } + } else if ((RequestedDisposition == FILE_OVERWRITE) || (RequestedDisposition == FILE_OVERWRITE_IF)){ + // Attempt the operation here ... + // RC = SFsdOverwrite(...); + if (NT_SUCCESS(RC)) { + ReturnedInformation = FILE_OVERWRITTEN; + } + } + } + + try_exit: NOTHING; + + } finally { + // Complete the request unless we are here as part of unwinding + // when an exception condition was encountered, OR + // if the request has been deferred (i.e. posted for later handling) + if (RC != STATUS_PENDING) { + // If we acquired any FCB resources, release them now ... + + // If any intermediate (directory) open operations were performed, + // implement the corresponding close (do *not* however close + // the target you have opened on behalf of the caller ...). + + if (NT_SUCCESS(RC)) { + // Update the file object such that: + // (a) the FsContext field points to the NTRequiredFCB field + // in the FCB + // (b) the FsContext2 field points to the CCB created as a + // result of the open operation + + // If write-through was requested, then mark the file object + // appropriately + if (WriteThroughRequested) { + PtrNewFileObject->Flags |= FO_WRITE_THROUGH; + } + + } else { + // Perform failure related post-processing now + } + + // As long as this unwinding is not being performed as a result of + // an exception condition, complete the IRP ... + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_EXCEPTION)) { + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = ReturnedInformation; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } + } + + if (AcquiredVCB) { + ASSERT(PtrVCB); + SFsdReleaseResource(&(PtrVCB->VCBResource)); + AcquiredVCB = FALSE; + } + + if (AbsolutePathName.Buffer != NULL) { + ExFreePool(AbsolutePathName.Buffer); + } + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdOpenVolume() +* +* Description: +* Open a logical volume for the caller. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdOpenVolume( +PtrSFsdVCB PtrVCB, // volume to be opened +PtrSFsdIrpContext PtrIrpContext, // IRP context +PIRP PtrIrp, // original/user IRP +unsigned short ShareAccess, // share access +PIO_SECURITY_CONTEXT PtrSecurityContext, // caller's context (incl access) +PFILE_OBJECT PtrNewFileObject) // I/O Mgr. created file object +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdCCB PtrCCB = NULL; + + try { + // check for exclusive open requests (using share modes supplied) + // and determine whether it is even possible to open the volume + // with the specified share modes (e.g. if caller does not + // wish to share read or share write ...) + + // Use IoCheckShareAccess() and IoSetShareAccess() here ... + // They are defined in the DDK. + + // You might also wish to check the caller's security context + // to see whether you wish to allow the volume open or not. + // Use the SeAccessCheck() routine described in the DDK for this purpose. + + // create a new CCB structure + if (!(PtrCCB = SFsdAllocateCCB())) { + RC = STATUS_INSUFFICIENT_RESOURCES; + try_return(RC); + } + + // initialize the CCB + PtrCCB->PtrFCB = (PtrSFsdFCB)(PtrVCB); + InsertTailList(&(PtrVCB->VolumeOpenListHead), &(PtrCCB->NextCCB)); + + // initialize the CCB to point to the file object + PtrCCB->PtrFileObject = PtrNewFileObject; + + SFsdSetFlag(PtrCCB->CCBFlags, SFSD_CCB_VOLUME_OPEN); + + // initialize the file object appropriately + PtrNewFileObject->FsContext = (void *)(PtrVCB); + PtrNewFileObject->FsContext2 = (void *)(PtrCCB); + + // increment the number of outstanding open operations on this + // logical volume (i.e. volume cannot be dismounted) + + // You might be concerned about 32 bit wrap-around though I would + // argue that it is unlikely ... :-) + (PtrVCB->VCBOpenCount)++; + + // now set the IoStatus Information value correctly in the IRP + // (caller will set the status field) + PtrIrp->IoStatus.Information = FILE_OPENED; + + try_exit: NOTHING; + } finally { + NOTHING; + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdInitializeFCB() +* +* Description: +* Initialize a new FCB structure and also the sent-in file object +* (if supplied) +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdInitializeFCB( +PtrSFsdFCB PtrNewFCB, // FCB structure to be initialized +PtrSFsdVCB PtrVCB, // logical volume (VCB) pointer +PtrSFsdObjectName PtrObjectName, // name of the object +uint32 Flags, // is this a file/directory, etc. +PFILE_OBJECT PtrFileObject) // optional file object to be initialized +{ + // Initialize the disk dependent portion as you see fit + + // Initialize the two ERESOURCE objects + ExInitializeResourceLite(&(PtrNewFCB->NTRequiredFCB.MainResource)); + ExInitializeResourceLite(&(PtrNewFCB->NTRequiredFCB.PagingIoResource)); + + PtrNewFCB->PtrVCB = PtrVCB; + + // caller MUST ensure that VCB has been acquired exclusively + InsertTailList(&(PtrVCB->NextFCB), &(PtrNewFCB->NextFCB)); + + // initialize the various list heads + InitializeListHead(&(PtrNewFCB->NextCCB)); + + PtrNewFCB->ReferenceCount = 1; + PtrNewFCB->OpenHandleCount = 1; + + PtrNewFCB->FCBFlags = Flags; + + PtrNewFCB->FCBName = PtrObjectName; + + if (PtrFileObject) { + PtrFileObject->FsContext = (void *)(&(PtrNewFCB->NTRequiredFCB)); + } + + return; +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/debug.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/debug.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/debug.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,51 @@ +#include "ntifs.h" +#include "sfsd.h" + +static PUCHAR IrpMjStrings[] = { + "CREATE", + "CREATE_NAMED_PIPE", + "CLOSE", + "READ", + "WRITE", + "QUERY_INFORMATION", + "SET_INFORMATION", + "QUERY_EA", + "SET_EA", + "FLUSH_BUFFERS", + "QUERY_VOLUME_INFORMATION", + "SET_VOLUME_INFORMATION", + "DIRECTORY_CONTROL", + "FILE_SYSTEM_CONTROL", + "DEVICE_CONTROL", + "INTERNAL_DEVICE_CONTROL", + "SHUTDOWN", + "LOCK_CONTROL", + "CLEANUP", + "CREATE_MAILSLOT", + "QUERY_SECURITY", + "SET_SECURITY", + "POWER", + "SYSTEM_CONTROL", + "DEVICE_CHANGE", + "QUERY_QUOTA", + "SET_QUOTA", + "PNP" +}; + + +VOID +FsdDbgPrintCall ( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ) +{ + PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); + PFILE_OBJECT FileObject = IrpSp->FileObject; + PUCHAR FileName = "Unknown"; + + //- [ file name prefix ] + + DbgPrint( DRIVER_NAME ": %s\n", + IrpMjStrings[IrpSp->MajorFunction] + ); +} Added: vendor/rfsd/current/SampleFSD/filesys/src/devcntrl.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/devcntrl.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/devcntrl.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,264 @@ +/************************************************************************* +* +* File: devcntrl.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "Device IOCTL" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_DEVICE_CONTROL + +#if(_WIN32_WINNT < 0x0400) +#define IOCTL_REDIR_QUERY_PATH CTL_CODE(FILE_DEVICE_NETWORK_FILE_SYSTEM, 99, METHOD_NEITHER, FILE_ANY_ACCESS) + +#endif +// Used to be w/in IF + +typedef struct _QUERY_PATH_REQUEST { + ULONG PathNameLength; + PIO_SECURITY_CONTEXT SecurityContext; + WCHAR FilePathName[1]; +} QUERY_PATH_REQUEST, *PQUERY_PATH_REQUEST; + +typedef struct _QUERY_PATH_RESPONSE { + ULONG LengthAccepted; +} QUERY_PATH_RESPONSE, *PQUERY_PATH_RESPONSE; + + +/************************************************************************* +* +* Function: SFsdDeviceControl() +* +* Description: +* The I/O Manager will invoke this routine to handle a Device IOCTL +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdDeviceControl( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonDeviceControl(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonDeviceControl() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonDeviceControl( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PIO_STACK_LOCATION PtrNextIoStackLocation = NULL; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + BOOLEAN CompleteIrp = FALSE; + ULONG IoControlCode = 0; + void *BufferPointer = NULL; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + if (PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) { + PtrVCB = (PtrSFsdVCB)(PtrFCB); + } else { + PtrVCB = PtrFCB->PtrVCB; + } + + // Get the IoControlCode value + IoControlCode = PtrIoStackLocation->Parameters.DeviceIoControl.IoControlCode; + + // You may wish to allow only volume open operations. + + switch (IoControlCode) { +#ifdef __THIS_IS_A_NETWORK_REDIR_ + case IOCTL_REDIR_QUERY_PATH: + // Only for network redirectors. + BufferPointer = (void *)(PtrIoStackLocation->Parameters.DeviceIoControl.Type3InputBuffer); + // Invoke the handler for this IOCTL. + RC = SFsdHandleQueryPath(BufferPointer); + CompleteIrp = TRUE; + try_return(RC); + break; +#endif // _THIS_IS_A_NETWORK_REDIR_ + default: + // Invoke the lower level driver in the chain. + PtrNextIoStackLocation = IoGetNextIrpStackLocation(PtrIrp); + *PtrNextIoStackLocation = *PtrIoStackLocation; + // Set a completion routine. + IoSetCompletionRoutine(PtrIrp, SFsdDevIoctlCompletion, NULL, TRUE, TRUE, TRUE); + // Send the request. + RC = IoCallDriver(PtrVCB->TargetDeviceObject, PtrIrp); + break; + } + + try_exit: NOTHING; + + } finally { + + // Release the IRP context + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_EXCEPTION)) { + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + if (CompleteIrp) { + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = 0; + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } + } + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdDevIoctlCompletion() +* +* Description: +* Completion routine. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS +* +*************************************************************************/ +NTSTATUS SFsdDevIoctlCompletion( +PDEVICE_OBJECT PtrDeviceObject, +PIRP PtrIrp, +void *Context) +{ + if (PtrIrp->PendingReturned) { + IoMarkIrpPending(PtrIrp); + } + + return(STATUS_SUCCESS); +} + + +/************************************************************************* +* +* Function: SFsdHandleQueryPath() +* +* Description: +* Handle the MUP request. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS +* +*************************************************************************/ +NTSTATUS SFsdHandleQueryPath( +void *BufferPointer) +{ + NTSTATUS RC = STATUS_SUCCESS; + PQUERY_PATH_REQUEST RequestBuffer = (PQUERY_PATH_REQUEST)BufferPointer; + PQUERY_PATH_RESPONSE ReplyBuffer = (PQUERY_PATH_RESPONSE)BufferPointer; + ULONG LengthOfNameToBeMatched = RequestBuffer->PathNameLength; + ULONG LengthOfMatchedName = 0; + WCHAR *NameToBeMatched = RequestBuffer->FilePathName; + + // So here we are. Simply check the name supplied. + // You can use whatever algorithm you like to determine whether the + // sent in name is acceptable. + // The first character in the name is always a "\" + // If you like the name sent in (probably, you will like a subset + // of the name), set the matching length value in LengthOfMatchedName. + + // if (FoundMatch) { + // ReplyBuffer->LengthAccepted = LengthOfMatchedName; + // } else { + // RC = STATUS_OBJECT_NAME_NOT_FOUND; + // } + + return(RC); +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/dircntrl.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/dircntrl.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/dircntrl.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,479 @@ +/************************************************************************* +* +* File: dircntrl.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "directory control" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_DIR_CONTROL + + + +/************************************************************************* +* +* Function: SFsdDirControl() +* +* Description: +* The I/O Manager will invoke this routine to handle a directory control +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdDirControl( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonDirControl(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonDirControl() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonDirControl( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Get the FCB and CCB pointers + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + // Get some of the parameters supplied to us + switch (PtrIoStackLocation->MinorFunction) { + case IRP_MN_QUERY_DIRECTORY: + RC = SFsdQueryDirectory(PtrIrpContext, PtrIrp, PtrIoStackLocation, PtrFileObject, PtrFCB, PtrCCB); + break; + case IRP_MN_NOTIFY_CHANGE_DIRECTORY: + RC = SFsdNotifyChangeDirectory(PtrIrpContext, PtrIrp, PtrIoStackLocation, PtrFileObject, PtrFCB, PtrCCB); + break; + default: + // This should not happen. + RC = STATUS_INVALID_DEVICE_REQUEST; + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = 0; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_NO_INCREMENT); + break; + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdQueryDirectory() +* +* Description: +* Query directory request. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdQueryDirectory( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PIO_STACK_LOCATION PtrIoStackLocation, +PFILE_OBJECT PtrFileObject, +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB) +{ + NTSTATUS RC = STATUS_SUCCESS; + BOOLEAN CompleteRequest = TRUE; + BOOLEAN PostRequest = FALSE; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + BOOLEAN CanWait = FALSE; + PtrSFsdVCB PtrVCB = NULL; + BOOLEAN AcquiredFCB = FALSE; + unsigned long BufferLength = 0; + PSTRING PtrSearchPattern = NULL; + FILE_INFORMATION_CLASS FileInformationClass; + unsigned long FileIndex = 0; + BOOLEAN RestartScan = FALSE; + BOOLEAN ReturnSingleEntry = FALSE; + BOOLEAN IndexSpecified = FALSE; + unsigned char *Buffer = NULL; + BOOLEAN FirstTimeQuery = FALSE; + unsigned long StartingIndexForSearch = 0; + unsigned int BytesReturned = 0; + + try { + + // Validate the sent-in FCB + if ((PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) || !(PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // We will only allow notify requests on directories. + RC = STATUS_INVALID_PARAMETER; + } + + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + CanWait = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK) ? TRUE : FALSE); + PtrVCB = PtrFCB->PtrVCB; + + // If the caller does not wish to block, it would be easier to + // simply post the request now. + if (!CanWait) { + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + + // Obtain the callers parameters + BufferLength = PtrIoStackLocation->Parameters.QueryDirectory.Length; + PtrSearchPattern = PtrIoStackLocation->Parameters.QueryDirectory.FileName; + FileInformationClass = PtrIoStackLocation->Parameters.QueryDirectory.FileInformationClass; + FileIndex = PtrIoStackLocation->Parameters.QueryDirectory.FileIndex; + + // Some additional arguments that affect the FSD behavior + RestartScan = (PtrIoStackLocation->Flags & SL_RESTART_SCAN); + ReturnSingleEntry = (PtrIoStackLocation->Flags & SL_RETURN_SINGLE_ENTRY); + IndexSpecified = (PtrIoStackLocation->Flags & SL_INDEX_SPECIFIED); + + // I will acquire exclusive access to the FCB. + // This is not mandatory, however, and your FSD could choose to acquire + // the resource shared for increased parallelism. + ExAcquireResourceExclusiveLite(&(PtrReqdFCB->MainResource), TRUE); + AcquiredFCB = TRUE; + + // We must determine the buffer pointer to be used. Since this + // routine could either be invoked directly in the context of the + // calling thread, or in the context of a worker thread, here is + // a general way of determining what we should use. + if (PtrIrp->MdlAddress) { + Buffer = MmGetSystemAddressForMdl(PtrIrp->MdlAddress); + } else { + Buffer = PtrIrp->UserBuffer; + } + + // The method of determining where to look from and what to look for is + // unfortunately extremely confusing. However, here is a methodology you + // you can broadly adopt: + // (a) You have to maintain a search buffer per CCB structure. + // (b) This search buffer is initialized the very first time + // a query directory operation is performed using the file object. + // (For the sample FSD, the search buffer is stored in the + // DirectorySearchPattern field) + // However, the caller still has the option of "overriding" this stored + // search pattern by supplying a new one in a query directory operation. + // + if (PtrSearchPattern == NULL) { + // User has supplied a search pattern + // Now validate that the search pattern is legitimate; this is + // dependent upon the character set acceptable to your FSD. + + // Once you have validated the search pattern, you must + // check whether you need to store this search pattern in + // the CCB. + if (PtrCCB->DirectorySearchPattern == NULL) { + // This must be the very first query request. + FirstTimeQuery = TRUE; + + // Now, allocate enough memory to contain the caller + // supplied search pattern and fill in the DirectorySearchPattern + // field in the CCB + // PtrCCB->DirectorySearchPattern = ExAllocatePool(...); + } else { + // We should ignore the search pattern in the CCB and instead, + // use the user-supplied pattern for this particular query + // directory request. + } + + } else if (PtrCCB->DirectorySearchPattern == NULL) { + // This MUST be the first directory query operation (else the + // DirectorySearchPattern field would never be NULL. Also, the caller + // has neglected to provide a pattern so we MUST invent one. + // Use "*" (following NT conventions) as your search pattern + // and store it in the PtrCCB->DirectorySearchPattern field. + + PtrCCB->DirectorySearchPattern = ExAllocatePool(PagedPool, sizeof(L"*")); + ASSERT(PtrCCB->DirectorySearchPattern); + + FirstTimeQuery = TRUE; + } else { + // The caller has not supplied any search pattern that we are + // forced to use. However, the caller had previously supplied + // a pattern (or we must have invented one) and we will use it. + // This is definitely not the first query operation on this + // directory using this particular file object. + + PtrSearchPattern = PtrCCB->DirectorySearchPattern; + } + + // There is one other piece of information that your FSD must store + // in the CCB structure for query directory support. This is the index + // value (i.e. the offset in your on-disk directory structure) from + // which you should start searching. + // However, the flags supplied with the IRP can make us override this + // as well. + + if (FileIndex) { + // Caller has told us wherefrom to begin. + // You may need to round this to an appropriate directory entry + // entry alignment value. + StartingIndexForSearch = FileIndex; + } else if (RestartScan) { + StartingIndexForSearch = 0; + } else { + // Get the starting offset from the CCB. + // Remember to update this value on your way out from this function. + // But, do not update the CCB CurrentByteOffset field if you reach + // the end of the directory (or get an error reading the directory) + // while performing the search. + StartingIndexForSearch = PtrCCB->CurrentByteOffset.LowPart; + } + + // Now, your FSD must determine the best way to read the directory + // contents from disk and search through them. + + // If ReturnSingleEntry is TRUE, please return information on only + // one matching entry. + + // One final note though: + // If you do not find a directory entry OR while searching you reach the + // end of the directory, then the return code should be set as follows: + + // (a) If any files have been returned (i.e. ReturnSingleEntry was FALSE + // and you did find at least one match), then return STATUS_SUCCESS + // (b) If no entry is being returned then: + // (i) If this is the first query i.e. FirstTimeQuery is TRUE + // then return STATUS_NO_SUCH_FILE + // (ii) Otherwise, return STATUS_NO_MORE_FILES + + try_exit: NOTHING; + + // Remember to update the CurrentByteOffset field in the CCB if required. + + // You should also set a flag in the FCB indicating that the directory + // contents were accessed. + + } finally { + if (PostRequest) { + if (AcquiredFCB) { + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + } + + // Map the users buffer and then post the request. + RC = SFsdLockCallersBuffer(PtrIrp, TRUE, BufferLength); + ASSERT(NT_SUCCESS(RC)); + + RC = SFsdPostRequest(PtrIrpContext, PtrIrp); + + } else if (!(PtrIrpContext->IrpContextFlags & + SFSD_IRP_CONTEXT_EXCEPTION)) { + if (AcquiredFCB) { + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + } + + // Complete the request. + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = BytesReturned; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } + } + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdNotifyChangeDirectory() +* +* Description: +* Handle the notify request. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdNotifyChangeDirectory( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PIO_STACK_LOCATION PtrIoStackLocation, +PFILE_OBJECT PtrFileObject, +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB) +{ + NTSTATUS RC = STATUS_SUCCESS; + BOOLEAN CompleteRequest = FALSE; + BOOLEAN PostRequest = FALSE; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + BOOLEAN CanWait = FALSE; + ULONG CompletionFilter = 0; + BOOLEAN WatchTree = FALSE; + PtrSFsdVCB PtrVCB = NULL; + BOOLEAN AcquiredFCB = FALSE; + + try { + + // Validate the sent-in FCB + if ((PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) || !(PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // We will only allow notify requests on directories. + RC = STATUS_INVALID_PARAMETER; + CompleteRequest = TRUE; + } + + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + CanWait = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK) ? TRUE : FALSE); + PtrVCB = PtrFCB->PtrVCB; + + // Acquire the FCB resource shared + if (!ExAcquireResourceSharedLite(&(PtrReqdFCB->MainResource), CanWait)) { + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + AcquiredFCB = TRUE; + + // Obtain some parameters sent by the caller + CompletionFilter = PtrIoStackLocation->Parameters.NotifyDirectory.CompletionFilter; + WatchTree = (PtrIoStackLocation->Flags & SL_WATCH_TREE ? TRUE : FALSE); + + // If you wish to capture the subject context, you can do so as + // follows: + // { + // PSECURITY_SUBJECT_CONTEXT SubjectContext; + // SubjectContext = ExAllocatePool(PagedPool, + // sizeof(SECURITY_SUBJECT_CONTEXT)); + // SeCaptureSubjectContext(SubjectContext); + // } + + FsRtlNotifyFullChangeDirectory(&(PtrVCB->NotifyIRPMutex), &(PtrVCB->NextNotifyIRP), (void *)PtrCCB, + (PSTRING)(PtrFCB->FCBName->ObjectName.Buffer), WatchTree, FALSE, CompletionFilter, PtrIrp, + NULL, // SFsdTraverseAccessCheck(...) ? + NULL); // SubjectContext ? + + RC = STATUS_PENDING; + + try_exit: NOTHING; + + } finally { + + if (PostRequest) { + // Perform appropriate post related processing here + if (AcquiredFCB) { + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + AcquiredFCB = FALSE; + } + RC = SFsdPostRequest(PtrIrpContext, PtrIrp); + } else if (CompleteRequest) { + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = 0; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } else { + // Simply free up the IrpContext since the IRP has been queued + SFsdReleaseIrpContext(PtrIrpContext); + } + + // Release the FCB resources if acquired. + if (AcquiredFCB) { + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + AcquiredFCB = FALSE; + } + + } + + return(RC); +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/fastio.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/fastio.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/fastio.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1387 @@ +/************************************************************************* +* +* File: fastio.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the various "fast-io" calls. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_FAST_IO + + + +/************************************************************************* +* +* Function: SFsdFastIoCheckIfPossible() +* +* Description: +* To fast-io or not to fast-io, that is the question ... +* This routine helps the I/O Manager determine whether the FSD wishes +* to permit fast-io on a specific file stream. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoCheckIfPossible( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN BOOLEAN Wait, +IN ULONG LockKey, +IN BOOLEAN CheckForReadOperation, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + LARGE_INTEGER IoLength; + + // Obtain a pointer to the FCB and CCB for the file stream. + PtrCCB = (PtrSFsdCCB)(FileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + // Validate that this is a fast-IO request to a regular file. + // The sample FSD for example, will not allow fast-IO requests + // to volume objects, or to directories. + if ((PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) || + (PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // This is not allowed. + return(ReturnedStatus); + } + + IoLength = RtlConvertUlongToLargeInteger(Length); + + // Your FSD can determine the checks that it needs to perform. + // Typically, a FSD will check whether there exist any byte-range + // locks that would prevent a fast-IO operation from proceeding. + + // ... (FSD specific checks go here). + + if (CheckForReadOperation) { + // Chapter 11 describes how to use the FSRTL package for byte-range + // lock requests. The following routine is exported by the FSRTL + // package and it returns TRUE if the read operation should be + // allowed to proceed based on the status of the current byte-range + // locks on the file stream. If you do not use the FSRTL package + // for byte-range locking support, then you must substitute your + // own checks over here. + // ReturnedStatus = FsRtlFastCheckLockForRead(&(PtrFCB->FCBByteRangeLock), + // FileOffset, &IoLength, LockKey, FileObject, + // PsGetCurrentProcess()); + } else { + // This is a write request. Invoke the FSRTL byte-range lock package + // to see whether the write should be allowed to proceed. + // ReturnedStatus = FsRtlFastCheckLockForWrite(&(PtrFCB->FCBByteRangeLock), + // FileOffset, &IoLength, LockKey, FileObject, + // PsGetCurrentProcess()); + } + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoRead() +* +* Description: +* Bypass the traditional IRP method to perform a read operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoRead( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN BOOLEAN Wait, +IN ULONG LockKey, +OUT PVOID Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // Chapter 11 describes how to roll your own fast-IO entry points. + // Typically, you will acquire appropriate resources here and + // then (maybe) forward the request to FsRtlCopyRead(). + // If you are a suitably complex file system, you may even choose + // to do some pre-processing (e.g. prefetching data from someplace) + // before passing on the request to the FSRTL package. + + // Of course, you also have the option of bypassing the FSRTL + // package completely and simply forwarding the request directly + // to the NT Cache Manager. + + // Bottom line is that you have complete flexibility on determining + // what you decide to do here. Read Chapter 11 well (and obviously + // other related issues) before filling in this and other fast-IO + // dispatch entry points. + + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoWrite() +* +* Description: +* Bypass the traditional IRP method to perform a write operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoWrite( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN BOOLEAN Wait, +IN ULONG LockKey, +OUT PVOID Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoQueryBasicInfo() +* +* Description: +* Bypass the traditional IRP method to perform a query basic +* information operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoQueryBasicInfo( +IN PFILE_OBJECT FileObject, +IN BOOLEAN Wait, +OUT PFILE_BASIC_INFORMATION Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoQueryStdInfo() +* +* Description: +* Bypass the traditional IRP method to perform a query standard +* information operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoQueryStdInfo( +IN PFILE_OBJECT FileObject, +IN BOOLEAN Wait, +OUT PFILE_STANDARD_INFORMATION Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoLock() +* +* Description: +* Bypass the traditional IRP method to perform a byte range lock +* operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoLock( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN PLARGE_INTEGER Length, +PEPROCESS ProcessId, +ULONG Key, +BOOLEAN FailImmediately, +BOOLEAN ExclusiveLock, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoUnlockSingle() +* +* Description: +* Bypass the traditional IRP method to perform a byte range unlock +* operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoUnlockSingle( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN PLARGE_INTEGER Length, +PEPROCESS ProcessId, +ULONG Key, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoUnlockAll() +* +* Description: +* Bypass the traditional IRP method to perform multiple byte range unlock +* operations. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoUnlockAll( +IN PFILE_OBJECT FileObject, +PEPROCESS ProcessId, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoUnlockAllByKey() +* +* Description: +* Bypass the traditional IRP method to perform multiple byte range unlock +* operations. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoUnlockAllByKey( +IN PFILE_OBJECT FileObject, +PEPROCESS ProcessId, +ULONG Key, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoAcqCreateSec() +* +* Description: +* Not really a fast-io operation. Used by the VMM to acquire FSD resources +* before processing a file map (create section object) request. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None (we must be prepared to handle VMM initiated calls) +* +*************************************************************************/ +void SFsdFastIoAcqCreateSec( +IN PFILE_OBJECT FileObject) +{ + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + + // Obtain a pointer to the FCB and CCB for the file stream. + PtrCCB = (PtrSFsdCCB)(FileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Acquire the MainResource exclusively for the file stream + ExAcquireResourceExclusiveLite(&(PtrReqdFCB->MainResource), TRUE); + + // Although this is typically not required, the sample FSD will + // also acquire the PagingIoResource exclusively at this time + // to conform with the resource acquisition described in the set + // file information routine. Once again though, you will probably + // not need to do this. + ExAcquireResourceExclusiveLite(&(PtrReqdFCB->PagingIoResource), TRUE); + + return; +} + + +/************************************************************************* +* +* Function: SFsdFastIoRelCreateSec() +* +* Description: +* Not really a fast-io operation. Used by the VMM to release FSD resources +* after processing a file map (create section object) request. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdFastIoRelCreateSec( +IN PFILE_OBJECT FileObject) +{ + + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + + // Obtain a pointer to the FCB and CCB for the file stream. + PtrCCB = (PtrSFsdCCB)(FileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Release the PagingIoResource for the file stream + SFsdReleaseResource(&(PtrReqdFCB->PagingIoResource)); + + // Release the MainResource for the file stream + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + + return; +} + + +/************************************************************************* +* +* Function: SFsdAcqLazyWrite() +* +* Description: +* Not really a fast-io operation. Used by the NT Cache Mgr to acquire FSD +* resources before performing a delayed write (write behind/lazy write) +* operation. +* NOTE: this function really must succeed since the Cache Manager will +* typically ignore failure and continue on ... +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE (Cache Manager does not tolerate FALSE well) +* +*************************************************************************/ +BOOLEAN SFsdAcqLazyWrite( +IN PVOID Context, +IN BOOLEAN Wait) +{ + BOOLEAN ReturnedStatus = TRUE; + + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + + // The context is whatever we passed to the Cache Manager when invoking + // the CcInitializeCacheMaps() function. In the case of the sample FSD + // implementation, this context is a pointer to the CCB structure. + + ASSERT(Context); + PtrCCB = (PtrSFsdCCB)(Context); + ASSERT(PtrCCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_CCB); + + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Acquire the MainResource in the FCB exclusively. Then, set the + // lazy-writer thread id in the FCB structure for identification when + // an actual write request is received by the FSD. + // Note: The lazy-writer typically always supplies WAIT set to TRUE. + if (!ExAcquireResourceExclusiveLite(&(PtrReqdFCB->MainResource), + Wait)) { + ReturnedStatus = FALSE; + } else { + // Now, set the lazy-writer thread id. + ASSERT(!(PtrFCB->LazyWriterThreadID)); + PtrFCB->LazyWriterThreadID = (unsigned int)(PsGetCurrentThread()); + } + + // If your FSD needs to perform some special preparations in anticipation + // of receving a lazy-writer request, do so now. + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdRelLazyWrite() +* +* Description: +* Not really a fast-io operation. Used by the NT Cache Mgr to release FSD +* resources after performing a delayed write (write behind/lazy write) +* operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdRelLazyWrite( +IN PVOID Context) +{ + BOOLEAN ReturnedStatus = TRUE; + + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + + // The context is whatever we passed to the Cache Manager when invoking + // the CcInitializeCacheMaps() function. In the case of the sample FSD + // implementation, this context is a pointer to the CCB structure. + + ASSERT(Context); + PtrCCB = (PtrSFsdCCB)(Context); + ASSERT(PtrCCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_CCB); + + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Remove the current thread-id from the FCB and release the MainResource. + ASSERT((PtrFCB->LazyWriterThreadID) == (unsigned int)PsGetCurrentThread()); + PtrFCB->LazyWriterThreadID = 0; + + // Release the acquired resource. + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + + // Of course, your FSD should undo whatever else seems appropriate at this + // time. + + return; +} + + +/************************************************************************* +* +* Function: SFsdAcqReadAhead() +* +* Description: +* Not really a fast-io operation. Used by the NT Cache Mgr to acquire FSD +* resources before performing a read-ahead operation. +* NOTE: this function really must succeed since the Cache Manager will +* typically ignore failure and continue on ... +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE (Cache Manager does not tolerate FALSE well) +* +*************************************************************************/ +BOOLEAN SFsdAcqReadAhead( +IN PVOID Context, +IN BOOLEAN Wait) +{ + + BOOLEAN ReturnedStatus = TRUE; + + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + + // The context is whatever we passed to the Cache Manager when invoking + // the CcInitializeCacheMaps() function. In the case of the sample FSD + // implementation, this context is a pointer to the CCB structure. + + ASSERT(Context); + PtrCCB = (PtrSFsdCCB)(Context); + ASSERT(PtrCCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_CCB); + + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Acquire the MainResource in the FCB shared. + // Note: The read-ahead thread typically always supplies WAIT set to TRUE. + if (!ExAcquireResourceSharedLite(&(PtrReqdFCB->MainResource), + Wait)) { + ReturnedStatus = FALSE; + } + + // If your FSD needs to perform some special preparations in anticipation + // of receving a read-ahead request, do so now. + + return(ReturnedStatus); +} + + + +/************************************************************************* +* +* Function: SFsdRelReadAhead() +* +* Description: +* Not really a fast-io operation. Used by the NT Cache Mgr to release FSD +* resources after performing a read-ahead operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdRelReadAhead( +IN PVOID Context) +{ + BOOLEAN ReturnedStatus = TRUE; + + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + + // The context is whatever we passed to the Cache Manager when invoking + // the CcInitializeCacheMaps() function. In the case of the sample FSD + // implementation, this context is a pointer to the CCB structure. + + ASSERT(Context); + PtrCCB = (PtrSFsdCCB)(Context); + ASSERT(PtrCCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_CCB); + + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Release the acquired resource. + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + + // Of course, your FSD should undo whatever else seems appropriate at this + // time. + + return; +} + + +/* the remaining are only valid under NT Version 4.0 and later */ +#if(_WIN32_WINNT >= 0x0400) + + +/************************************************************************* +* +* Function: SFsdFastIoQueryNetInfo() +* +* Description: +* Get information requested by a redirector across the network. This call +* will originate from the LAN Manager server. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoQueryNetInfo( +IN PFILE_OBJECT FileObject, +IN BOOLEAN Wait, +OUT PFILE_NETWORK_OPEN_INFORMATION Buffer, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoMdlRead() +* +* Description: +* Bypass the traditional IRP method to perform a MDL read operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoMdlRead( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN ULONG LockKey, +OUT PMDL *MdlChain, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoMdlReadComplete() +* +* Description: +* Bypass the traditional IRP method to inform the NT Cache Manager and the +* FSD that the caller no longer requires the data locked in the system cache +* or the MDL to stay around anymore .. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoMdlReadComplete( +IN PFILE_OBJECT FileObject, +OUT PMDL MdlChain, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoPrepareMdlWrite() +* +* Description: +* Bypass the traditional IRP method to prepare for a MDL write operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoPrepareMdlWrite( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +IN ULONG Length, +IN ULONG LockKey, +OUT PMDL *MdlChain, +OUT PIO_STATUS_BLOCK IoStatus, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoMdlWriteComplete() +* +* Description: +* Bypass the traditional IRP method to inform the NT Cache Manager and the +* FSD that the caller has updated the contents of the MDL. This data can +* now be asynchronously written out to secondary storage by the Cache Mgr. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: TRUE/FALSE +* +*************************************************************************/ +BOOLEAN SFsdFastIoMdlWriteComplete( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER FileOffset, +OUT PMDL MdlChain, +IN PDEVICE_OBJECT DeviceObject) +{ + BOOLEAN ReturnedStatus = FALSE; // fast i/o failed/not allowed + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // See description in SFsdFastIoRead() before filling-in the + // stub here. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(ReturnedStatus); +} + + +/************************************************************************* +* +* Function: SFsdFastIoAcqModWrite() +* +* Description: +* Not really a fast-io operation. Used by the VMM to acquire FSD resources +* before initiating a write operation via the Modified Page/Block Writer. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error (try not to return an error, will 'ya ? :-) +* +*************************************************************************/ +NTSTATUS SFsdFastIoAcqModWrite( +IN PFILE_OBJECT FileObject, +IN PLARGE_INTEGER EndingOffset, +OUT PERESOURCE *ResourceToRelease, +IN PDEVICE_OBJECT DeviceObject) +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // You must determine which resource(s) you would like to + // acquire at this time. You know that a write is imminent; + // you will probably therefore acquire appropriate resources + // exclusively. + + // You must first get the FCB and CCB pointers from the file object + // that is passed in to this function (as an argument). Note that + // the ending offset (when examined in conjunction with current valid data + // length) may help you in determining the appropriate resource(s) to acquire. + + // For example, if the ending offset is beyond current valid data length, + // you may decide to acquire *both* the MainResource and the PagingIoResource + // exclusively; otherwise, you may decide simply to acquire the PagingIoResource. + + // Consult the text for more information on synchronization in FSDs. + + // One final note; the VMM expects that you will return a pointer to + // the resource that you acquired (single return value). This pointer + // will be returned back to you in the release call (below). + + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdFastIoRelModWrite() +* +* Description: +* Not really a fast-io operation. Used by the VMM to release FSD resources +* after processing a modified page/block write operation. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error (an error returned here is really not expected!) +* +*************************************************************************/ +NTSTATUS SFsdFastIoRelModWrite( +IN PFILE_OBJECT FileObject, +IN PERESOURCE ResourceToRelease, +IN PDEVICE_OBJECT DeviceObject) +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // The MPW has complete the write for modified pages and therefore + // wants you to release pre-acquired resource(s). + + // You must undo here whatever it is that you did in the + // SFsdFastIoAcqModWrite() call above. + + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdFastIoAcqCcFlush() +* +* Description: +* Not really a fast-io operation. Used by the NT Cache Mgr to acquire FSD +* resources before performing a CcFlush() operation on a specific file +* stream. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdFastIoAcqCcFlush( +IN PFILE_OBJECT FileObject, +IN PDEVICE_OBJECT DeviceObject) +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // Acquire appropriate resources that will allow correct synchronization + // with a flush call (and avoid deadlock). + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdFastIoRelCcFlush() +* +* Description: +* Not really a fast-io operation. Used by the NT Cache Mgr to acquire FSD +* resources before performing a CcFlush() operation on a specific file +* stream. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdFastIoRelCcFlush( +IN PFILE_OBJECT FileObject, +IN PDEVICE_OBJECT DeviceObject) +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + + FsRtlEnterFileSystem(); + + try { + + try { + + // Release resources acquired in SFsdFastIoAcqCcFlush() above. + NOTHING; + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, NULL); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + + } + + try_exit: NOTHING; + + } finally { + + } + + FsRtlExitFileSystem(); + + return(RC); +} + +#endif //_WIN32_WINNT >= 0x0400 + Added: vendor/rfsd/current/SampleFSD/filesys/src/fileinfo.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/fileinfo.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/fileinfo.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,814 @@ +/************************************************************************* +* +* File: fileinfo.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "set/query file information" dispatch +* entry points. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_INFORMATION + + + +/************************************************************************* +* +* Function: SFsdFileInfo() +* +* Description: +* The I/O Manager will invoke this routine to handle a set/query file +* information request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdFileInfo( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonFileInfo(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonFileInfo() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonFileInfo( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + BOOLEAN MainResourceAcquired = FALSE; + BOOLEAN VCBResourceAcquired = FALSE; + BOOLEAN PagingIoResourceAcquired = FALSE; + IO_STATUS_BLOCK LocalIoStatus; + void *PtrSystemBuffer = NULL; + long BufferLength = 0; + FILE_INFORMATION_CLASS FunctionalityRequested; + BOOLEAN CanWait = FALSE; + BOOLEAN PostRequest = FALSE; + + try { + // First, get a pointer to the current I/O stack location. + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Get the FCB and CCB pointers. + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + CanWait = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK) ? TRUE : FALSE); + + // If the caller has opened a logical volume and is attempting to + // query information for it as a file stream, return an error. + if (PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) { + // This is not allowed. Caller must use get/set volume information instead. + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + ASSERT(PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_FCB); + + // The NT I/O Manager always allocates and supplies a system + // buffer for query and set file information calls. + // Copying information to/from the user buffer and the system + // buffer is performed by the I/O Manager and the FSD need not worry about it. + PtrSystemBuffer = PtrIrp->AssociatedIrp.SystemBuffer; + + if (PtrIoStackLocation->MajorFunction == IRP_MJ_QUERY_INFORMATION) { + // Now, obtain some parameters. + BufferLength = PtrIoStackLocation->Parameters.QueryFile.Length; + FunctionalityRequested = PtrIoStackLocation->Parameters.QueryFile.FileInformationClass; + + // Acquire the MainResource shared (NOTE: for paging-IO on a + // page file, we should avoid acquiring any resources and simply + // trust the VMM to do the right thing, else we could possibly + // run into deadlocks). + if (!(PtrFCB->FCBFlags & SFSD_FCB_PAGE_FILE)) { + // Acquire the MainResource shared. + if (!ExAcquireResourceSharedLite(&(PtrReqdFCB->MainResource), CanWait)) { + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + MainResourceAcquired = TRUE; + } + + // Do whatever the caller asked us to do + switch (FunctionalityRequested) { + case FileBasicInformation: + RC = SFsdGetBasicInformation(PtrFCB, (PFILE_BASIC_INFORMATION)PtrSystemBuffer, &BufferLength); + break; + case FileStandardInformation: + // RC = SFsdGetStandardInformation(PtrFCB, PtrCCB, ...); + break; + // Similarly, implement all of the other query information routines + // that your FSD can support. +#if(_WIN32_WINNT >= 0x0400) + case FileNetworkOpenInformation: + // RC = SFsdGetNetworkOpenInformation(...); + break; +#endif // _WIN32_WINNT >= 0x0400 + case FileInternalInformation: + // RC = SFsdGetInternalInformation(...); + break; + case FileEaInformation: + // RC = SFsdGetEaInformation(...); + break; + case FileNameInformation: + // RC = SFsdGetFullNameInformation(...); + break; + case FileAlternateNameInformation: + // RC = SFsdGetAltNameInformation(...); + break; + case FileCompressionInformation: + // RC = SFsdGetCompressionInformation(...); + break; + case FilePositionInformation: + // This is fairly simple. Copy over the information from the + // file object. + { + PFILE_POSITION_INFORMATION PtrFileInfoBuffer; + + PtrFileInfoBuffer = (PFILE_POSITION_INFORMATION)PtrSystemBuffer; + + ASSERT(BufferLength >= sizeof(FILE_POSITION_INFORMATION)); + PtrFileInfoBuffer->CurrentByteOffset = PtrFileObject->CurrentByteOffset; + // Modify the local variable for BufferLength appropriately. + BufferLength -= sizeof(FILE_POSITION_INFORMATION); + } + break; + case FileStreamInformation: + // RC = SFsdGetFileStreamInformation(...); + break; + case FileAllInformation: + // The I/O Manager supplies the Mode, Access, and Alignment + // information. The rest is up to us to provide. + // Therefore, decrement the BufferLength appropriately (assuming + // that the above 3 types on information are already in the + // buffer) + { + + PFILE_POSITION_INFORMATION PtrFileInfoBuffer; + PFILE_ALL_INFORMATION PtrAllInfo = (PFILE_ALL_INFORMATION)PtrSystemBuffer; + + BufferLength -= (sizeof(FILE_MODE_INFORMATION) + sizeof(FILE_ACCESS_INFORMATION) + sizeof(FILE_ALIGNMENT_INFORMATION)); + + // Fill in the position information. + + PtrFileInfoBuffer = (PFILE_POSITION_INFORMATION)&(PtrAllInfo->PositionInformation); + + PtrFileInfoBuffer->CurrentByteOffset = PtrFileObject->CurrentByteOffset; + + // Modify the local variable for BufferLength appropriately. + ASSERT(BufferLength >= sizeof(FILE_POSITION_INFORMATION)); + BufferLength -= sizeof(FILE_POSITION_INFORMATION); + + // Get the remaining stuff. + if (!NT_SUCCESS(RC = SFsdGetBasicInformation(PtrFCB, (PFILE_BASIC_INFORMATION)&(PtrAllInfo->BasicInformation), + &BufferLength))) { + // Another method you may wish to use to avoid the + // multiple checks for success/failure is to have the + // called routine simply raise an exception instead. + try_return(RC); + } + // Similarly, get all of the others ... + } + break; + default: + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + + // If we completed successfully, the return the amount of information transferred. + if (NT_SUCCESS(RC)) { + PtrIrp->IoStatus.Information = PtrIoStackLocation->Parameters.QueryFile.Length - BufferLength; + } else { + PtrIrp->IoStatus.Information = 0; + } + + } else { + ASSERT(PtrIoStackLocation->MajorFunction == IRP_MJ_SET_INFORMATION); + + // Now, obtain some parameters. + FunctionalityRequested = PtrIoStackLocation->Parameters.SetFile.FileInformationClass; + + // If your FSD supports opportunistic locking (described in + // Chapter 11), then you should check whether the oplock state + // allows the caller to proceed. + + // Rename, and link operations require creation of a directory + // entry and possibly deletion of another directory entry. Since, + // we acquire the VCB resource exclusively during create operations, + // we should acquire it exclusively for link and/or rename operations + // as well. + + // Similarly, marking a directory entry for deletion should cause us + // to acquire the VCB exclusively as well. + + if ((FunctionalityRequested == FileDispositionInformation) || (FunctionalityRequested == FileRenameInformation) || + (FunctionalityRequested == FileLinkInformation)) { + if (!ExAcquireResourceExclusiveLite(&(PtrVCB->VCBResource), CanWait)) { + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + // We have the VCB acquired exclusively. + VCBResourceAcquired = TRUE; + } + + // Unless this is an operation on a page file, we should go ahead and + // acquire the FCB exclusively at this time. Note that we will pretty + // much block out anything being done to the FCB from this point on. + if (!(PtrFCB->FCBFlags & SFSD_FCB_PAGE_FILE)) { + // Acquire the MainResource shared. + if (!ExAcquireResourceExclusiveLite(&(PtrReqdFCB->MainResource), CanWait)) { + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + MainResourceAcquired = TRUE; + } + + // The only operations that could conceivably proceed from this point + // on are paging-IO read/write operations. For delete link (rename), + // set allocation size, and set EOF, should also acquire the paging-IO + // resource, thereby synchronizing with paging-IO requests. In your + // FSD, you should ideally acquire the resource only when processing + // such requests; here however, I will go ahead and block out all + // paging-IO read/write operations at this time (for convenience). + if (!ExAcquireResourceExclusiveLite(&(PtrReqdFCB->PagingIoResource), CanWait)) { + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + + // Do whatever the caller asked us to do + switch (FunctionalityRequested) { + case FileBasicInformation: + RC = SFsdSetBasicInformation(PtrFCB, PtrCCB, PtrFileObject, (PFILE_BASIC_INFORMATION)PtrSystemBuffer); + break; + case FilePositionInformation: + // Check if no intermediate buffering has been specified. + // If it was specified, do not allow non-aligned set file + // position requests to succeed. + { + PFILE_POSITION_INFORMATION PtrFileInfoBuffer; + + PtrFileInfoBuffer = (PFILE_POSITION_INFORMATION)PtrSystemBuffer; + + if (PtrFileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING) { + if (PtrFileInfoBuffer->CurrentByteOffset.LowPart & PtrIoStackLocation->DeviceObject->AlignmentRequirement) { + // Invalid alignment. + try_return(RC = STATUS_INVALID_PARAMETER); + } + } + + PtrFileObject->CurrentByteOffset = PtrFileInfoBuffer->CurrentByteOffset; + } + break; + case FileDispositionInformation: + RC = SFsdSetDispositionInformation(PtrFCB, PtrCCB, PtrVCB, PtrFileObject, PtrIrpContext, PtrIrp, + (PFILE_DISPOSITION_INFORMATION)PtrSystemBuffer); + break; + case FileRenameInformation: + case FileLinkInformation: + // When you implement your rename/link routine, be careful to + // check the following two arguments: + // TargetFileObject = PtrIoStackLocation->Parameters.SetFile.FileObject; + // ReplaceExistingFile = PtrIoStackLocation->Parameters.SetFile.ReplaceIfExists; + // + // The TargetFileObject argument is a pointer to the "target + // directory" file object obtained during the "create" routine + // invoked by the NT I/O Manager with the SL_OPEN_TARGET_DIRECTORY + // flag specified. Remember that it is quite possible that if the + // rename/link is contained within a single directory, the target + // and source directories will be the same. + // The ReplaceExistingFile argument should be used by you to + // determine if the caller wishes to replace the target (if it + // currently exists) with the new link/renamed file. If this + // value is FALSE, and if the target directory entry (being + // renamed-to, or the target of the link) exists, you should + // return a STATUS_OBJECT_NAME_COLLISION error to the caller. + + // RC = SFsdRenameOrLinkFile(PtrFCB, PtrCCB, PtrFileObject, PtrIrpContext, + // PtrIrp, (PFILE_RENAME_INFORMATION)PtrSystemBuffer); + + // Once you have completed the rename/link operation, do not + // forget to notify any "notify IRPs" about the actions you have + // performed. + // An example is if you renamed across directories, you should + // report that a new entry was added with the FILE_ACTION_ADDED + // action type. The actual modification would then be reported + // as either FILE_NOTIFY_CHANGE_FILE_NAME (if a file was renamed) + // or FILE_NOTIFY_CHANGE_DIR_NAME (if a directory was renamed). + break; + case FileAllocationInformation: + RC = SFsdSetAllocationInformation(PtrFCB, PtrCCB, PtrVCB, PtrFileObject, + PtrIrpContext, PtrIrp, PtrSystemBuffer); + break; + case FileEndOfFileInformation: + // RC = SFsdSetEOF(...); + break; + default: + RC = STATUS_INVALID_PARAMETER; + try_return(RC); + } + } + + try_exit: NOTHING; + + } finally { + + if (PagingIoResourceAcquired) { + SFsdReleaseResource(&(PtrReqdFCB->PagingIoResource)); + PagingIoResourceAcquired = FALSE; + } + + if (MainResourceAcquired) { + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + MainResourceAcquired = FALSE; + } + + if (VCBResourceAcquired) { + SFsdReleaseResource(&(PtrVCB->VCBResource)); + VCBResourceAcquired = FALSE; + } + + // Post IRP if required + if (PostRequest) { + + // Since, the I/O Manager gave us a system buffer, we do not + // need to "lock" anything. + + // Perform the post operation which will mark the IRP pending + // and will return STATUS_PENDING back to us + RC = SFsdPostRequest(PtrIrpContext, PtrIrp); + + } else { + + // Can complete the IRP here if no exception was encountered + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_EXCEPTION)) { + PtrIrp->IoStatus.Status = RC; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } + } // can we complete the IRP ? + } // end of "finally" processing + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdGetBasicInformation() +* +* Description: +* Return some time-stamps and file attributes to the caller. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdGetBasicInformation( +PtrSFsdFCB PtrFCB, +PFILE_BASIC_INFORMATION PtrBuffer, +long *PtrReturnedLength) +{ + NTSTATUS RC = STATUS_SUCCESS; + + try { + if (*PtrReturnedLength < sizeof(FILE_BASIC_INFORMATION)) { + try_return(RC = STATUS_BUFFER_OVERFLOW); + } + + // Zero out the supplied buffer. + RtlZeroMemory(PtrBuffer, sizeof(FILE_BASIC_INFORMATION)); + + // Note: If your FSD wishes to be even more precise about time + // stamps, you may wish to consider the effects of fast-IO on the + // file stream. Typically, the FSD simply states a flag indicating + // that fast-IO read/write has occured. Time stamps are then updated + // when a cleanup is received for the file stream. However, if the + // user performs fast-IO and subsequently issues a request to query + // basic information, your FSD could query the current system time + // using KeQuerySystemTime(), and update the FCB time-stamps before + // returning the values to the caller. This gives the caller a slightly + // more accurate value. + + // Get information from the FCB. + PtrBuffer->CreationTime = PtrFCB->CreationTime; + PtrBuffer->LastAccessTime = PtrFCB->LastAccessTime; + PtrBuffer->LastWriteTime = PtrFCB->LastWriteTime; + // Assume that the sample FSD does not support a "change time". + + // Now fill in the attributes. + PtrBuffer->FileAttributes = FILE_ATTRIBUTE_NORMAL; + + if (PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY) { + PtrBuffer->FileAttributes |= FILE_ATTRIBUTE_DIRECTORY; + } + + // Similarly, fill in attributes indicating a hidden file, system + // file, compressed file, temporary file, etc. if your FSD supports + // such file attribute values. + + try_exit: NOTHING; + } finally { + if (NT_SUCCESS(RC)) { + // Return the amount of information filled in. + *PtrReturnedLength -= sizeof(FILE_BASIC_INFORMATION); + } + } + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdSetBasicInformation() +* +* Description: +* Set some time-stamps and file attributes supplied by the caller. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdSetBasicInformation( +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB, +PFILE_OBJECT PtrFileObject, +PFILE_BASIC_INFORMATION PtrBuffer) +{ + NTSTATUS RC = STATUS_SUCCESS; + BOOLEAN CreationTimeChanged = FALSE; + BOOLEAN AttributesChanged = FALSE; + + try { + + // Obtain a pointer to the directory entry associated with + // the FCB being modifed. The directory entry is obviously + // part of the data associated with the parent directory that + // contains this particular file stream. + // Note well that no other modifications + // are currently allowed to the directory entry since we have + // the VCB resource exclusively acquired (as a matter of fact, + // NO directory on the logical volume can be currently modified). + // PtrDirectoryEntry = SFsdGetDirectoryEntryPtr(...); + + if (RtlLargeIntegerNotEqualToZero(PtrBuffer->CreationTime)) { + // Modify the directory entry timestamp. + // ... + + // Also note that fact that the timestamp has changed + // so that any directory notifications can be performed. + CreationTimeChanged = TRUE; + + // The interesting thing here is that the user has set certain time + // fields. However, before doing this, the user may have performed + // I/O which in turn would have caused your FSD to mark the fact that + // write/access time should be modifed at cleanup. + // You might wish to mark the fact that such updates are no longer + // required since the user has explicitly specified the values she + // wishes to see associated with the file stream. + SFsdSetFlag(PtrCCB->CCBFlags, SFSD_CCB_CREATE_TIME_SET); + } + + // Similarly, check for all the time-stamp values that your + // FSD cares about. Ignore the ones that you do not support. + // ... + + + // Now come the attributes. + if (PtrBuffer->FileAttributes) { + // We have a non-zero attribute value. + // The presence of a particular attribute indicates that the + // user wishes to set the attribute value. The absence indicates + // the user wishes to clear the particular attribute. + + // Before we start examining attribute values, you may wish + // to clear any unsupported attribute flags to reduce confusion. + + SFsdClearFlag(PtrBuffer->FileAttributes, ~FILE_ATTRIBUTE_VALID_SET_FLAGS); + SFsdClearFlag(PtrBuffer->FileAttributes, FILE_ATTRIBUTE_NORMAL); + + // Similarly, you should pick out other invalid flag values. + // SFsdClearFlag(PtrBuffer->FileAttributes, FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ATOMIC_WRITE ...); + + + if (PtrBuffer->FileAttributes & FILE_ATTRIBUTE_TEMPORARY) { + SFsdSetFlag(PtrFileObject->Flags, FO_TEMPORARY_FILE); + } else { + SFsdClearFlag(PtrFileObject->Flags, FO_TEMPORARY_FILE); + } + + // If your FSD supports file compression, you may wish to + // note the user's preferences for compressing/not compressing + // the file at this time. + } + + try_exit: NOTHING; + } finally { + ; + } + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdSetDispositionInformation() +* +* Description: +* Mark/Unmark a file for deletion. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdSetDispositionInformation( +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB, +PtrSFsdVCB PtrVCB, +PFILE_OBJECT PtrFileObject, +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PFILE_DISPOSITION_INFORMATION PtrBuffer) +{ + NTSTATUS RC = STATUS_SUCCESS; + + try { + if (!PtrBuffer->DeleteFile) { + // "un-delete" the file. + SFsdClearFlag(PtrFCB->FCBFlags, SFSD_FCB_DELETE_ON_CLOSE); + PtrFileObject->DeletePending = FALSE; + try_return(RC); + } + + // The easy part is over. Now, we know that the user wishes to + // delete the corresponding directory entry (of course, if this + // is the only link to the file stream, any on-disk storage space + // associated with the file stream will also be released when the + // (only) link is deleted!) + + // Do some checking to see if the file can even be deleted. + + if (PtrFCB->FCBFlags & SFSD_FCB_DELETE_ON_CLOSE) { + // All done! + try_return(RC); + } + + if (PtrFCB->FCBFlags & SFSD_FCB_READ_ONLY) { + try_return(RC = STATUS_CANNOT_DELETE); + } + + if (PtrVCB->VCBFlags & SFSD_VCB_FLAGS_VOLUME_READ_ONLY) { + try_return(RC = STATUS_CANNOT_DELETE); + } + + // An important step is to check if the file stream has been + // mapped by any process. The delete cannot be allowed to proceed + // in this case. + if (!MmFlushImageSection(&(PtrFCB->NTRequiredFCB.SectionObject), MmFlushForDelete)) { + try_return(RC = STATUS_CANNOT_DELETE); + } + + // It would not be prudent to allow deletion of either a root + // directory or a directory that is not empty. + if (PtrFCB->FCBFlags & SFSD_FCB_ROOT_DIRECTORY) { + try_return(RC = STATUS_CANNOT_DELETE); + } + + if (PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY) { + // Perform your check to determine whether the directory + // is empty or not. + // if (!SFsdIsDirectoryEmpty(PtrFCB, PtrCCB, PtrIrpContext)) { + // try_return(RC = STATUS_DIRECTORY_NOT_EMPTY); + // } + } + + // Set a flag to indicate that this directory entry will become history + // at cleanup. + SFsdSetFlag(PtrFCB->FCBFlags, SFSD_FCB_DELETE_ON_CLOSE); + PtrFileObject->DeletePending = TRUE; + + try_exit: NOTHING; + } finally { + ; + } + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdSetAllocationInformation() +* +* Description: +* Mark/Unmark a file for deletion. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdSetAllocationInformation( +PtrSFsdFCB PtrFCB, +PtrSFsdCCB PtrCCB, +PtrSFsdVCB PtrVCB, +PFILE_OBJECT PtrFileObject, +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PFILE_ALLOCATION_INFORMATION PtrBuffer) +{ + NTSTATUS RC = STATUS_SUCCESS; + BOOLEAN TruncatedFile = FALSE; + BOOLEAN ModifiedAllocSize = FALSE; + + try { + // Increasing the allocation size associated with a file stream + // is relatively easy. All you have to do is execute some FSD + // specific code to check whether you have enough space available + // (and if your FSD supports user/volume quotas, whether the user + // is not exceeding quota), and then increase the file size in the + // corresponding on-disk and in-memory structures. + // Then, all you should do is inform the Cache Manager about the + // increased allocation size. + + // First, do whatever error checking is appropriate here (e.g. whether + // the caller is trying the change size for a directory, etc.). + + // Are we increasing the allocation size? + if (RtlLargeIntegerLessThan( + PtrFCB->NTRequiredFCB.CommonFCBHeader.AllocationSize, + PtrBuffer->AllocationSize)) { + + // Yes. Do the FSD specific stuff i.e. increase reserved + // space on disk. + // RC = SFsdTruncateFileAllocationSize(...) + + ModifiedAllocSize = TRUE; + + } else if (RtlLargeIntegerGreaterThan(PtrFCB->NTRequiredFCB.CommonFCBHeader.AllocationSize, + PtrBuffer->AllocationSize)) { + // This is the painful part. See if the VMM will allow us to proceed. + // The VMM will deny the request if: + // (a) any image section exists OR + // (b) a data section exists and the size of the user mapped view + // is greater than the new size + // Otherwise, the VMM should allow the request to proceed. + if (!MmCanFileBeTruncated(&(PtrFCB->NTRequiredFCB.SectionObject), &(PtrBuffer->AllocationSize))) { + // VMM said no way! + try_return(RC = STATUS_USER_MAPPED_FILE); + } + + // Perform your directory entry modifications. Release any on-disk + // space you may need to in the process. + // RC = SFsdTruncateFileAllocationSize(...); + + ModifiedAllocSize = TRUE; + TruncatedFile = TRUE; + } + + try_exit: + + // This is a good place to check if we have performed a truncate + // operation. If we have perform a truncate (whether we extended + // or reduced file size), you should update file time stamps. + + // Last, but not the lease, you must inform the Cache Manager of file size changes. + if (ModifiedAllocSize && NT_SUCCESS(RC)) { + // Update the FCB Header with the new allocation size. + PtrFCB->NTRequiredFCB.CommonFCBHeader.AllocationSize = PtrBuffer->AllocationSize; + + // If we decreased the allocation size to less than the + // current file size, modify the file size value. + // Similarly, if we decreased the value to less than the + // current valid data length, modify that value as well. + if (TruncatedFile) { + if (RtlLargeIntegerLessThan(PtrFCB->NTRequiredFCB.CommonFCBHeader.FileSize, PtrBuffer->AllocationSize)) { + // Decrease the file size value. + PtrFCB->NTRequiredFCB.CommonFCBHeader.FileSize = PtrBuffer->AllocationSize; + } + + if (RtlLargeIntegerLessThan(PtrFCB->NTRequiredFCB.CommonFCBHeader.ValidDataLength, PtrBuffer->AllocationSize)) { + // Decrease the valid data length value. + PtrFCB->NTRequiredFCB.CommonFCBHeader.ValidDataLength = PtrBuffer->AllocationSize; + } + } + + + // If the FCB has not had caching initiated, it is still valid + // for you to invoke the NT Cache Manager. It is possible in such + // situations for the call to be no'oped (unless some user has + // mapped in the file) + + // NOTE: The invocation to CcSetFileSizes() will quite possibly + // result in a recursive call back into the file system. + // This is because the NT Cache Manager will typically + // perform a flush before telling the VMM to purge pages + // especially when caching has not been initiated on the + // file stream, but the user has mapped the file into + // the process' virtual address space. + CcSetFileSizes(PtrFileObject, (PCC_FILE_SIZES)&(PtrFCB->NTRequiredFCB.CommonFCBHeader.AllocationSize)); + + // Inform any pending IRPs (notify change directory). + } + + } finally { + ; + } + return(RC); +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/flush.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/flush.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/flush.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,324 @@ +/************************************************************************* +* +* File: flush.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "Flush Buffers" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_FLUSH + + + +/************************************************************************* +* +* Function: SFsdFlush() +* +* Description: +* The I/O Manager will invoke this routine to handle a flush buffers +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdFlush( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonFlush(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonFlush() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonFlush( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + BOOLEAN AcquiredFCB = FALSE; + BOOLEAN PostRequest = FALSE; + BOOLEAN CanWait = TRUE; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Get the FCB and CCB pointers + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Get some of the parameters supplied to us + CanWait = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK) ? TRUE : FALSE); + + // If we cannot wait, post the request immediately since a flush is inherently blocking/synchronous. + if (!CanWait) { + PostRequest = TRUE; + try_return(RC); + } + + // Check the type of object passed-in. That will determine the course of + // action we take. + if ((PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) || (PtrFCB->FCBFlags & SFSD_FCB_ROOT_DIRECTORY)) { + + if (PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) { + PtrVCB = (PtrSFsdVCB)(PtrFCB); + } else { + PtrVCB = PtrFCB->PtrVCB; + } + + // The caller wishes to flush all files for the mounted + // logical volume. The flush volume routine below should simply + // walk through all of the open file streams, acquire the + // FCB resource, and request the flush operation from the Cache + // Manager. Basically, the sequence of operations listed below + // for a single file should be executed on all open files. + + SFsdFlushLogicalVolume(PtrIrpContext, PtrIrp, PtrVCB); + + try_return(RC); + } + + if (!(PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY)) { + // This is a regular file. + ExAcquireResourceExclusiveLite(&(PtrReqdFCB->MainResource), TRUE); + AcquiredFCB = TRUE; + + // Request the Cache Manager to perform a flush operation. + // Further, instruct the Cache Manager that we wish to flush the + // entire file stream. + SFsdFlushAFile(PtrReqdFCB, &(PtrIrp->IoStatus)); + RC = PtrIrp->IoStatus.Status; + // All done. You may want to also flush the directory entry for the + // file stream at this time. + + // Some log-based FSD implementations may wish to flush their + // log files at this time. Finally, you should update the time-stamp + // values for the file stream appropriately. This would involve + // obtaining the current time and modifying the appropriate directory + // entry fields. + } + + try_exit: + + if (AcquiredFCB) { + SFsdReleaseResource(&(PtrReqdFCB->MainResource)); + AcquiredFCB = FALSE; + } + + if (!PostRequest) { + PIO_STACK_LOCATION PtrNextIoStackLocation = NULL; + NTSTATUS RC1 = STATUS_SUCCESS; + + // Send the request down at this point. + // To do this, you must set the next IRP stack location, and + // maybe set a completion routine. + // Be careful about marking the IRP pending if the lower level + // driver returned pending and you do have a completion routine! + PtrNextIoStackLocation = IoGetNextIrpStackLocation(PtrIrp); + *PtrNextIoStackLocation = *PtrIoStackLocation; + + // Set the completion routine to "eat-up" any + // STATUS_INVALID_DEVICE_REQUEST error code returned by the lower + // level driver. + IoSetCompletionRoutine(PtrIrp, SFsdFlushCompletion, NULL, TRUE, TRUE, TRUE); + + RC1 = IoCallDriver(PtrVCB->TargetDeviceObject, PtrIrp); + + RC = ((RC1 == STATUS_INVALID_DEVICE_REQUEST) ? RC : RC1); + } + + } finally { + if (PostRequest) { + // Nothing to lock now. + RC = SFsdPostRequest(PtrIrpContext, PtrIrp); + } else { + // Release the IRP context at this time. + SFsdReleaseIrpContext(PtrIrpContext); + } + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdFlushAFile() +* +* Description: +* Tell the Cache Manager to perform a flush. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdFlushAFile( +PtrSFsdNTRequiredFCB PtrReqdFCB, +PIO_STATUS_BLOCK PtrIoStatus) +{ + CcFlushCache(&(PtrReqdFCB->SectionObject), NULL, 0, PtrIoStatus); + return; +} + + +/************************************************************************* +* +* Function: SFsdFlushLogicalVolume() +* +* Description: +* Flush everything beginning at root directory. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdFlushLogicalVolume( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PtrSFsdVCB PtrVCB) +{ + BOOLEAN AcquiredVCB = FALSE; + PtrSFsdFCB PtrFCB = NULL; + PLIST_ENTRY PtrNextFCB = NULL; + + try { + ExAcquireResourceExclusiveLite(&(PtrVCB->VCBResource), TRUE); + AcquiredVCB = TRUE; + + // Go through the list of FCB's. You would probably + // flush all of the files. Then, you could flush the + // directories that you may have have pinned into memory. + + // NOTE: This function may also be invoked internally as part of + // processing a shutdown request. + + } finally { + + if (AcquiredVCB) { + SFsdReleaseResource(&(PtrVCB->VCBResource)); + } + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdFlushCompletion() +* +* Description: +* Eat up any bad errors. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +NTSTATUS SFsdFlushCompletion( +PDEVICE_OBJECT PtrDeviceObject, +PIRP PtrIrp, +PVOID Context) +{ + NTSTATUS RC = STATUS_SUCCESS; + + if (PtrIrp->PendingReturned) { + IoMarkIrpPending(PtrIrp); + } + + if (PtrIrp->IoStatus.Status == STATUS_INVALID_DEVICE_REQUEST) { + // cannot do much here, can we? + PtrIrp->IoStatus.Status = STATUS_SUCCESS; + } + + return(STATUS_SUCCESS); +} + + Added: vendor/rfsd/current/SampleFSD/filesys/src/fscontrol.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/fscontrol.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/fscontrol.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,60 @@ +/************************************************************************* +* +* File: cleanup.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Should contain code to handle the "Cleanup" dispatch entry point. +* This file serves as a placeholder. Please update this file as part +* of designing and implementing your FSD. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" +#include "ntifs.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_FSCONTROL + + + +/************************************************************************* +* TODOC: +* Function: SFsdCleanup() +* +* Description: +* The I/O Manager will invoke this routine to handle a cleanup +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: Does not matter! +* +*************************************************************************/ +NTSTATUS SFsdFSControl( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + DbgPrint("MADE IT TO FS CONTROL!\n"); + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + FsRtlExitFileSystem(); + + return(RC); +} Added: vendor/rfsd/current/SampleFSD/filesys/src/makefile URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/makefile (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/makefile Fri Apr 14 13:01:12 2006 @@ -1,0 +1,7 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the driver components of the Windows NT DDK +# + +!INCLUDE $(NTMAKEENV)\makefile.def Added: vendor/rfsd/current/SampleFSD/filesys/src/misc.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/misc.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/misc.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,1186 @@ +/************************************************************************* +* +* File: misc.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* This file contains some miscellaneous support routines. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_MISC + +#define NO_ALLOCATION_FUNCTION NULL +#define NO_FREE_FUNCTION NULL +#define NO_FLAGS 0 +#define DEFAULT_LL_DEPTH 0 + +/************************************************************************* +* +* Function: SFsdInitializeZones() +* +* Description: +* Allocates some memory for global zones used to allocate FSD structures. +* Either all memory will be allocated or we will back out gracefully. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdInitializeZones( +void) +{ + NTSTATUS RC = STATUS_SUCCESS; + uint32 SizeOfZone = SFsdGlobalData.DefaultZoneSizeInNumStructs; + uint32 SizeOfObjectNameZone = 0; + uint32 SizeOfCCBZone = 0; + uint32 SizeOfFCBZone = 0; + uint32 SizeOfByteLockZone = 0; + uint32 SizeOfIrpContextZone = 0; + + try { + + // initialize the spinlock protecting the zones + KeInitializeSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock)); + + // determine memory requirements + switch (MmQuerySystemSize()) { + case MmSmallSystem: + // this is just for illustration purposes. I will multiply + // number of structures with some arbitrary amount depending + // upon available memory in the system ... You should choose a + // more intelligent method suitable to your memory consumption + // and the amount of memory available. + SizeOfObjectNameZone = (2 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdObjectName))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfCCBZone = (2 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdCCB))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfFCBZone = (2 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdFCB))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfByteLockZone = (2 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdFileLockInfo))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfIrpContextZone = (2 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdIrpContext))) + sizeof(ZONE_SEGMENT_HEADER); + break; + case MmMediumSystem: + SizeOfObjectNameZone = (4 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdObjectName))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfCCBZone = (4 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdCCB))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfFCBZone = (4 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdFCB))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfByteLockZone = (4 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdFileLockInfo))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfIrpContextZone = (4 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdIrpContext))) + sizeof(ZONE_SEGMENT_HEADER); + break; + case MmLargeSystem: + SizeOfObjectNameZone = (8 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdObjectName))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfCCBZone = (8 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdCCB))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfFCBZone = (8 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdFCB))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfByteLockZone = (8 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdFileLockInfo))) + sizeof(ZONE_SEGMENT_HEADER); + SizeOfIrpContextZone = (8 * SizeOfZone * SFsdQuadAlign(sizeof(SFsdIrpContext))) + sizeof(ZONE_SEGMENT_HEADER); + break; + } + + // typical NT methodology (at least until *someone* exposed the "difference" between a server and workstation ;-) + if (MmIsThisAnNtAsSystem()) { + SizeOfObjectNameZone *= SFSD_NTAS_MULTIPLE; + SizeOfCCBZone *= SFSD_NTAS_MULTIPLE; + SizeOfFCBZone *= SFSD_NTAS_MULTIPLE; + SizeOfByteLockZone *= SFSD_NTAS_MULTIPLE; + SizeOfIrpContextZone *= SFSD_NTAS_MULTIPLE; + } + + // initialize each of the lookaside list headers ... + ExInitializeNPagedLookasideList( &(SFsdGlobalData.ObjectNameLLHeader), + NO_ALLOCATION_FUNCTION, NO_FREE_FUNCTION, NO_FLAGS, + SFsdQuadAlign(sizeof(SFsdObjectName)), 'Ljbo', DEFAULT_LL_DEPTH); + + DbgPrint("Init ObjectName LL succeeded.\n"); + + + ExInitializeNPagedLookasideList( &(SFsdGlobalData.CCBLLHeader), + NO_ALLOCATION_FUNCTION, NO_FREE_FUNCTION, NO_FLAGS, + SFsdQuadAlign(sizeof(SFsdCCB)), 'Lbcc', DEFAULT_LL_DEPTH); + + DbgPrint("Init CCB LL succeeded.\n"); + + + ExInitializeNPagedLookasideList( &(SFsdGlobalData.FCBLLHeader), + NO_ALLOCATION_FUNCTION, NO_FREE_FUNCTION, NO_FLAGS, + SFsdQuadAlign(sizeof(SFsdFCB)), 'Lbcf', DEFAULT_LL_DEPTH); + + DbgPrint("Init FCB LL succeeded.\n"); + + + ExInitializeNPagedLookasideList( &(SFsdGlobalData.ByteLockLLHeader), + NO_ALLOCATION_FUNCTION, NO_FREE_FUNCTION, NO_FLAGS, + SFsdQuadAlign(sizeof(SFsdFileLockInfo)), 'Llyb', DEFAULT_LL_DEPTH); + + DbgPrint("Init ByteLock LL succeeded.\n"); + + + ExInitializeNPagedLookasideList( &(SFsdGlobalData.IrpContextLLHeader), + NO_ALLOCATION_FUNCTION, NO_FREE_FUNCTION, NO_FLAGS, + SFsdQuadAlign(sizeof(SFsdIrpContext)), 'Lpri', DEFAULT_LL_DEPTH); + + DbgPrint("Init IrpContext LL succeeded.\n"); + + + try_exit: NOTHING; + + } finally { + if (!NT_SUCCESS(RC)) { + // invoke the destroy routine now ... + SFsdDestroyZones(); + } else { + // mark the fact that we have allocated zones ... + SFsdSetFlag(SFsdGlobalData.SFsdFlags, SFSD_DATA_FLAGS_ZONES_INITIALIZED); + } + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdDestroyZones() +* +* Description: +* Free up the previously allocated memory. NEVER do this once the +* driver has been successfully loaded. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdDestroyZones( +void) +{ + try { + // free up each of the pools + ExDeleteNPagedLookasideList(&(SFsdGlobalData.ObjectNameLLHeader)); + ExDeleteNPagedLookasideList(&(SFsdGlobalData.CCBLLHeader)); + ExDeleteNPagedLookasideList(&(SFsdGlobalData.FCBLLHeader)); + ExDeleteNPagedLookasideList(&(SFsdGlobalData.ByteLockLLHeader)); + ExDeleteNPagedLookasideList(&(SFsdGlobalData.IrpContextLLHeader)); + + try_exit: NOTHING; + + } finally { + SFsdClearFlag(SFsdGlobalData.SFsdFlags, SFSD_DATA_FLAGS_ZONES_INITIALIZED); + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdIsIrpTopLevel() +* +* Description: +* Helps the FSD determine who the "top level" caller is for this +* request. A request can originate directly from a user process +* (in which case, the "top level" will be NULL when this routine +* is invoked), OR the user may have originated either from the NT +* Cache Manager/VMM ("top level" may be set), or this could be a +* recursion into our code in which we would have set the "top level" +* field the last time around. +* +* Expected Interrupt Level (for execution) : +* +* whatever level a particular dispatch routine is invoked at. +* +* Return Value: TRUE/FALSE (TRUE if top level was NULL when routine invoked) +* +*************************************************************************/ +BOOLEAN SFsdIsIrpTopLevel( +PIRP Irp) // the IRP sent to our dispatch routine +{ + BOOLEAN ReturnCode = FALSE; + + if (IoGetTopLevelIrp() == NULL) { + // OK, so we can set ourselves to become the "top level" component + IoSetTopLevelIrp(Irp); + ReturnCode = TRUE; + } + + return(ReturnCode); +} + + +/************************************************************************* +* +* Function: SFsdExceptionFilter() +* +* Description: +* This routines allows the driver to determine whether the exception +* is an "allowed" exception i.e. one we should not-so-quietly consume +* ourselves, or one which should be propagated onwards in which case +* we will most likely bring down the machine. +* +* This routine employs the services of FsRtlIsNtstatusExpected(). This +* routine returns a BOOLEAN result. A RC of FALSE will cause us to return +* EXCEPTION_CONTINUE_SEARCH which will probably cause a panic. +* The FsRtl.. routine returns FALSE iff exception values are (currently) : +* STATUS_DATATYPE_MISALIGNMENT || STATUS_ACCESS_VIOLATION || +* STATUS_ILLEGAL_INSTRUCTION || STATUS_INSTRUCTION_MISALIGNMENT +* +* Expected Interrupt Level (for execution) : +* +* ? +* +* Return Value: EXCEPTION_EXECUTE_HANDLER/EXECEPTION_CONTINUE_SEARCH +* +*************************************************************************/ +long SFsdExceptionFilter( +PtrSFsdIrpContext PtrIrpContext, +PEXCEPTION_POINTERS PtrExceptionPointers) +{ + long ReturnCode = EXCEPTION_EXECUTE_HANDLER; + NTSTATUS ExceptionCode = STATUS_SUCCESS; + + // figure out the exception code + ExceptionCode = PtrExceptionPointers->ExceptionRecord->ExceptionCode; + + if ((ExceptionCode == STATUS_IN_PAGE_ERROR) && (PtrExceptionPointers->ExceptionRecord->NumberParameters >= 3)) { + ExceptionCode = PtrExceptionPointers->ExceptionRecord->ExceptionInformation[2]; + } + + if (PtrIrpContext) { + PtrIrpContext->SavedExceptionCode = ExceptionCode; + SFsdSetFlag(PtrIrpContext->IrpContextFlags, SFSD_IRP_CONTEXT_EXCEPTION); + } + + // check if we should propagate this exception or not + if (!(FsRtlIsNtstatusExpected(ExceptionCode))) { + // we are not ok, propagate this exception. + // NOTE: we will bring down the machine ... + ReturnCode = EXCEPTION_CONTINUE_SEARCH; + + // better free up the IrpContext now ... + if (PtrIrpContext) { + SFsdReleaseIrpContext(PtrIrpContext); + } + } + + // if you wish to perform some special processing when + // not propagating the exception, set up the state for + // special processing now ... + + // return the appropriate code + return(ReturnCode); +} + + +/************************************************************************* +* +* Function: SFsdExceptionHandler() +* +* Description: +* One of the routines in the FSD or in the modules we invoked encountered +* an exception. We have decided that we will "handle" the exception. +* Therefore we will prevent the machine from a panic ... +* You can do pretty much anything you choose to in your commercial +* driver at this point to ensure a graceful exit. In the sample +* driver, I will simply free up the IrpContext (if any), set the +* error code in the IRP and complete the IRP at this time ... +* +* Expected Interrupt Level (for execution) : +* +* ? +* +* Return Value: Error code +* +*************************************************************************/ +NTSTATUS SFsdExceptionHandler( +PtrSFsdIrpContext PtrIrpContext, +PIRP Irp) +{ + NTSTATUS RC; + + ASSERT(Irp); + + if (PtrIrpContext) { + RC = PtrIrpContext->SavedExceptionCode; + // Free irp context here + SFsdReleaseIrpContext(PtrIrpContext); + } else { + // must be insufficient resources ...? + RC = STATUS_INSUFFICIENT_RESOURCES; + } + + // set the error code in the IRP + Irp->IoStatus.Status = RC; + Irp->IoStatus.Information = 0; + + // complete the IRP + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdLogEvent() +* +* Description: +* Log a message in the NT Event Log. This is a rather simplistic log +* methodology since you can potentially utilize the event log to +* provide a lot of information to the user (and you should too!) +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdLogEvent( +NTSTATUS SFsdEventLogId, // the SFsd private message id +NTSTATUS RC) // any NT error code we wish to log ... +{ + try { + + // Implement a call to IoAllocateErrorLogEntry() followed by a call + // to IoWriteErrorLogEntry(). You should note that the call to IoWriteErrorLogEntry() + // will free memory for the entry once the write completes (which in actuality + // is an asynchronous operation). + + } except (EXCEPTION_EXECUTE_HANDLER) { + // nothing really we can do here, just do not wish to crash ... + NOTHING; + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdAllocateObjectName() +* +* Description: +* Allocate a new ObjectName structure to represent an open on-disk object. +* Also initialize the ObjectName structure to NULL. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: A pointer to the ObjectName structure OR NULL. +* +*************************************************************************/ +PtrSFsdObjectName SFsdAllocateObjectName( +void) +{ + PtrSFsdObjectName PtrObjectName = NULL; + BOOLEAN AllocatedFromZone = TRUE; + KIRQL CurrentIrql; + + // first, try to allocate out of the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + PtrObjectName = (PtrSFsdObjectName) ExAllocateFromNPagedLookasideList(&(SFsdGlobalData.ObjectNameLLHeader)); + + // release the spinlock + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + + // if we could not obtain the required memory, bug-check. + // Do NOT do this in your commercial driver, instead handle the error gracefully ... + if (!PtrObjectName) { + SFsdPanic(STATUS_INSUFFICIENT_RESOURCES, SFsdQuadAlign(sizeof(SFsdObjectName)), 0); + } + + // zero out the allocated memory block + RtlZeroMemory(PtrObjectName, SFsdQuadAlign(sizeof(SFsdObjectName))); + + // set up some fields ... + PtrObjectName->NodeIdentifier.NodeType = SFSD_NODE_TYPE_OBJECT_NAME; + PtrObjectName->NodeIdentifier.NodeSize = SFsdQuadAlign(sizeof(SFsdObjectName)); + + + if (!AllocatedFromZone) { + SFsdSetFlag(PtrObjectName->ObjectNameFlags, SFSD_OB_NAME_NOT_FROM_ZONE); + } + + return(PtrObjectName); +} + + +/************************************************************************* +* +* Function: SFsdReleaseObjectName() +* +* Description: +* Deallocate a previously allocated structure. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdReleaseObjectName( +PtrSFsdObjectName PtrObjectName) +{ + KIRQL CurrentIrql; + + ASSERT(PtrObjectName); + + // give back memory either to the zone or to the VMM + if (!(PtrObjectName->ObjectNameFlags & SFSD_OB_NAME_NOT_FROM_ZONE)) { + // back to the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + ExFreeToNPagedLookasideList(&(SFsdGlobalData.ObjectNameLLHeader), PtrObjectName); + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + } else { + ExFreePool(PtrObjectName); + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdAllocateCCB() +* +* Description: +* Allocate a new CCB structure to represent an open on-disk object. +* Also initialize the CCB structure to NULL. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: A pointer to the CCB structure OR NULL. +* +*************************************************************************/ +PtrSFsdCCB SFsdAllocateCCB( +void) +{ + PtrSFsdCCB PtrCCB = NULL; + BOOLEAN AllocatedFromZone = TRUE; + KIRQL CurrentIrql; + + // first, try to allocate out of the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + + PtrCCB = (PtrSFsdCCB) ExAllocateFromNPagedLookasideList(&(SFsdGlobalData.CCBLLHeader)); + + // release the spinlock + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + + + // if we could not obtain the required memory, bug-check. + // Do NOT do this in your commercial driver, instead handle the error gracefully ... + if (!PtrCCB) { + SFsdPanic(STATUS_INSUFFICIENT_RESOURCES, SFsdQuadAlign(sizeof(SFsdCCB)), 0); + } + + // zero out the allocated memory block + RtlZeroMemory(PtrCCB, SFsdQuadAlign(sizeof(SFsdCCB))); + + // set up some fields ... + PtrCCB->NodeIdentifier.NodeType = SFSD_NODE_TYPE_CCB; + PtrCCB->NodeIdentifier.NodeSize = SFsdQuadAlign(sizeof(SFsdCCB)); + + + if (!AllocatedFromZone) { + SFsdSetFlag(PtrCCB->CCBFlags, SFSD_CCB_NOT_FROM_ZONE); + } + + return(PtrCCB); +} + + +/************************************************************************* +* +* Function: SFsdReleaseCCB() +* +* Description: +* Deallocate a previously allocated structure. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdReleaseCCB( +PtrSFsdCCB PtrCCB) +{ + KIRQL CurrentIrql; + + ASSERT(PtrCCB); + + // give back memory either to the zone or to the VMM + if (!(PtrCCB->CCBFlags & SFSD_CCB_NOT_FROM_ZONE)) { + // back to the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + ExFreeToNPagedLookasideList(&(SFsdGlobalData.CCBLLHeader), PtrCCB); + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + } else { + ExFreePool(PtrCCB); + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdAllocateFCB() +* +* Description: +* Allocate a new FCB structure to represent an open on-disk object. +* Also initialize the FCB structure to NULL. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: A pointer to the FCB structure OR NULL. +* +*************************************************************************/ +PtrSFsdFCB SFsdAllocateFCB( +void) +{ + PtrSFsdFCB PtrFCB = NULL; + BOOLEAN AllocatedFromZone = TRUE; + KIRQL CurrentIrql; + + // first, try to allocate out of the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + + PtrFCB = (PtrSFsdFCB) ExAllocateFromNPagedLookasideList(&(SFsdGlobalData.FCBLLHeader)); + + // release the spinlock + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + + // if we could not obtain the required memory, bug-check. + // Do NOT do this in your commercial driver, instead handle the error gracefully ... + if (!PtrFCB) { + SFsdPanic(STATUS_INSUFFICIENT_RESOURCES, SFsdQuadAlign(sizeof(SFsdFCB)), 0); + } + + // zero out the allocated memory block + RtlZeroMemory(PtrFCB, SFsdQuadAlign(sizeof(SFsdFCB))); + + // set up some fields ... + PtrFCB->NodeIdentifier.NodeType = SFSD_NODE_TYPE_FCB; + PtrFCB->NodeIdentifier.NodeSize = SFsdQuadAlign(sizeof(SFsdFCB)); + + + if (!AllocatedFromZone) { + SFsdSetFlag(PtrFCB->FCBFlags, SFSD_FCB_NOT_FROM_ZONE); + } + + return(PtrFCB); +} + + + +/************************************************************************* +* +* Function: SFsdCreateNewFCB() +* +* Description: +* We want to create a new FCB. We will also create a new CCB (presumably) +* later. Simply allocate a new FCB structure and initialize fields +* appropriately. +* This function also takes the file size values that the caller must +* have obtained and will set the file size fields appropriately in the +* CommonFCBHeader. +* Finally, this routine will initialize the FileObject structure passed +* in to this function. If you decide to fail the call later, remember +* to uninitialize the fields. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: A pointer to the FCB structure OR NULL. +* +*************************************************************************/ +NTSTATUS SFsdCreateNewFCB( +PtrSFsdFCB *ReturnedFCB, +PLARGE_INTEGER AllocationSize, +PLARGE_INTEGER EndOfFile, +PFILE_OBJECT PtrFileObject, +PtrSFsdVCB PtrVCB) +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + PFSRTL_COMMON_FCB_HEADER PtrCommonFCBHeader = NULL; + + try { + // Obtain a new FCB structure. + // The function SFsdAllocateFCB() will obtain a new structure either + // from a zone or from memory requested directly from the VMM. + PtrFCB = SFsdAllocateFCB(); + if (!PtrFCB) { + // Assume lack of memory. + try_return(RC = STATUS_INSUFFICIENT_RESOURCES); + } + + // Initialize fields required to interface with the NT Cache Manager. + // Note that the returned structure has already been zeroed. This means + // that the SectionObject structure has been zeroed which is a + // requirement for newly created FCB structures. + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Initialize the MainResource and PagingIoResource structures now. + ExInitializeResourceLite(&(PtrReqdFCB->MainResource)); + SFsdSetFlag(PtrFCB->FCBFlags, SFSD_INITIALIZED_MAIN_RESOURCE); + + ExInitializeResourceLite(&(PtrReqdFCB->PagingIoResource)); + SFsdSetFlag(PtrFCB->FCBFlags, SFSD_INITIALIZED_PAGING_IO_RESOURCE); + + // Start initializing the fields contained in the CommonFCBHeader. + PtrCommonFCBHeader = &(PtrReqdFCB->CommonFCBHeader); + + // Allow fast-IO for now. + PtrCommonFCBHeader->IsFastIoPossible = FastIoIsPossible; + + // Initialize the MainResource and PagingIoResource pointers in + // the CommonFCBHeader structure to point to the ERESOURCE structures we + // have allocated and already initialized above. + PtrCommonFCBHeader->Resource = &(PtrReqdFCB->MainResource); + PtrCommonFCBHeader->PagingIoResource = &(PtrReqdFCB->PagingIoResource); + + // Ignore the Flags field in the CommonFCBHeader for now. Part 3 + // of the book describes it in greater detail. + + // Initialize the file size values here. + PtrCommonFCBHeader->AllocationSize = *(AllocationSize); + PtrCommonFCBHeader->FileSize = *(EndOfFile); + + // The following will disable ValidDataLength support. However, your + // FSD may choose to support this concept. + PtrCommonFCBHeader->ValidDataLength.LowPart = 0xFFFFFFFF; + PtrCommonFCBHeader->ValidDataLength.HighPart = 0x7FFFFFFF; + + // Initialize other fields for the FCB here ... + PtrFCB->PtrVCB = PtrVCB; + InitializeListHead(&(PtrFCB->NextCCB)); + + // Initialize fields contained in the file object now. + PtrFileObject->PrivateCacheMap = NULL; + // Note that we could have just as well taken the value of PtrReqdFCB + // directly below. The bottom line however is that the FsContext + // field must point to a FSRTL_COMMON_FCB_HEADER structure. + PtrFileObject->FsContext = (void *)(PtrCommonFCBHeader); + + // Other initialization continues here ... + + try_exit: NOTHING; + } finally { + ; + } + + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdReleaseFCB() +* +* Description: +* Deallocate a previously allocated structure. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdReleaseFCB( +PtrSFsdFCB PtrFCB) +{ + KIRQL CurrentIrql; + + ASSERT(PtrFCB); + + // give back memory either to the zone or to the VMM + if (!(PtrFCB->FCBFlags & SFSD_FCB_NOT_FROM_ZONE)) { + // back to the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + ExFreeToNPagedLookasideList(&(SFsdGlobalData.FCBLLHeader), PtrFCB); + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + } else { + ExFreePool(PtrFCB); + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdAllocateByteLocks() +* +* Description: +* Allocate a new byte range lock structure and initialize it to NULL. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: A pointer to the SFsdByteLocks structure OR NULL. +* +*************************************************************************/ +PtrSFsdFileLockInfo SFsdAllocateByteLocks( +void) +{ + PtrSFsdFileLockInfo PtrByteLocks = NULL; + BOOLEAN AllocatedFromZone = TRUE; + KIRQL CurrentIrql; + + // first, try to allocate out of the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + + PtrByteLocks = (PtrSFsdFileLockInfo) ExAllocateFromNPagedLookasideList(&(SFsdGlobalData.ByteLockLLHeader)); + + // release the spinlock + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + + + // if we could not obtain the required memory, bug-check. + // Do NOT do this in your commercial driver, instead handle the error gracefully ... + if (!PtrByteLocks) { + SFsdPanic(STATUS_INSUFFICIENT_RESOURCES, SFsdQuadAlign(sizeof(SFsdFileLockInfo)), 0); + } + + // zero out the allocated memory block + RtlZeroMemory(PtrByteLocks, SFsdQuadAlign(sizeof(PtrSFsdFileLockInfo))); + + if (!AllocatedFromZone) { + SFsdSetFlag(PtrByteLocks->FileLockFlags, SFSD_BYTE_LOCK_NOT_FROM_ZONE); + } + + return(PtrByteLocks); +} + + +/************************************************************************* +* +* Function: SFsdReleaseByteLocks() +* +* Description: +* Deallocate a previously allocated structure. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdReleaseByteLocks( +PtrSFsdFileLockInfo PtrByteLocks) +{ + KIRQL CurrentIrql; + + ASSERT(PtrByteLocks); + + // give back memory either to the zone or to the VMM + if (!(PtrByteLocks->FileLockFlags & SFSD_BYTE_LOCK_NOT_FROM_ZONE)) { + // back to the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + ExFreeToNPagedLookasideList(&(SFsdGlobalData.ByteLockLLHeader), PtrByteLocks); + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + } else { + ExFreePool(PtrByteLocks); + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdAllocateIrpContext() +* +* Description: +* The sample FSD creates an IRP context for each request received. This +* routine simply allocates (and initializes to NULL) a SFsdIrpContext +* structure. +* Most of the fields in the context structure are then initialized here. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: A pointer to the IrpContext structure OR NULL. +* +*************************************************************************/ +PtrSFsdIrpContext SFsdAllocateIrpContext( +PIRP Irp, +PDEVICE_OBJECT PtrTargetDeviceObject) +{ + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AllocatedFromZone = TRUE; + KIRQL CurrentIrql; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + + // first, try to allocate out of the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + + PtrIrpContext = (PtrSFsdIrpContext) ExAllocateFromNPagedLookasideList(&(SFsdGlobalData.IrpContextLLHeader)); +//? + // release the spinlock + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + + + // if we could not obtain the required memory, bug-check. + // Do NOT do this in your commercial driver, instead handle the error gracefully ... + if (!PtrIrpContext) { + SFsdPanic(STATUS_INSUFFICIENT_RESOURCES, SFsdQuadAlign(sizeof(SFsdIrpContext)), 0); + } + + // zero out the allocated memory block + RtlZeroMemory(PtrIrpContext, SFsdQuadAlign(sizeof(SFsdIrpContext))); + + // set up some fields ... + PtrIrpContext->NodeIdentifier.NodeType = SFSD_NODE_TYPE_IRP_CONTEXT; + PtrIrpContext->NodeIdentifier.NodeSize = SFsdQuadAlign(sizeof(SFsdIrpContext)); + + + PtrIrpContext->Irp = Irp; + PtrIrpContext->TargetDeviceObject = PtrTargetDeviceObject; + + // copy over some fields from the IRP and set appropriate flag values + if (Irp) { + PtrIoStackLocation = IoGetCurrentIrpStackLocation(Irp); + ASSERT(PtrIoStackLocation); + + PtrIrpContext->MajorFunction = PtrIoStackLocation->MajorFunction; + PtrIrpContext->MinorFunction = PtrIoStackLocation->MinorFunction; + DbgPrint("AllocateIrpContext with major %x and minor %x", PtrIoStackLocation->MajorFunction, PtrIoStackLocation->MinorFunction); + + // Often, a FSD cannot honor a request for asynchronous processing + // of certain critical requests. For example, a "close" request on + // a file object can typically never be deferred. Therefore, do not + // be surprised if sometimes your FSD (just like all other FSD + // implementations on the Windows NT system) has to override the flag + // below. + + try { + // From
http://www.osronline.com/lists_archive/ntfsd/thread1966.html
+ // IoIsOperationSynchronous will die if there is no file object in the + // IRP's current stack location. I believe this may be the case with IRP_MJ_SHUTDOWN. + + if (IoIsOperationSynchronous(Irp)) { + SFsdSetFlag(PtrIrpContext->IrpContextFlags, SFSD_IRP_CONTEXT_CAN_BLOCK); + } + } + except( EXCEPTION_EXECUTE_HANDLER ) { // Intended to catch SYSTEM_THREAD_EXCEPTION_NOT_HANDLED = 7e? + NTSTATUS RC = GetExceptionCode(); + DbgPrint("[WARN] Exception 0x%x in IoIsOperationSynchronous of SFsdAllocateIrpContext\n", RC); + } + + + } + + if (!AllocatedFromZone) { + SFsdSetFlag(PtrIrpContext->IrpContextFlags, SFSD_IRP_CONTEXT_NOT_FROM_ZONE); + } + + // Are we top-level ? This information is used by the dispatching code + // later (and also by the FSD dispatch routine) + if (IoGetTopLevelIrp() != Irp) { + // We are not top-level. Note this fact in the context structure + SFsdSetFlag(PtrIrpContext->IrpContextFlags, SFSD_IRP_CONTEXT_NOT_TOP_LEVEL); + } + + return(PtrIrpContext); +} + + +/************************************************************************* +* +* Function: SFsdReleaseIrpContext() +* +* Description: +* Deallocate a previously allocated structure. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdReleaseIrpContext( +PtrSFsdIrpContext PtrIrpContext) +{ + KIRQL CurrentIrql; + + ASSERT(PtrIrpContext); + + // give back memory either to the zone or to the VMM + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_NOT_FROM_ZONE)) { + // back to the zone + KeAcquireSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), &CurrentIrql); + ExFreeToNPagedLookasideList(&(SFsdGlobalData.IrpContextLLHeader), PtrIrpContext); + KeReleaseSpinLock(&(SFsdGlobalData.ZoneAllocationSpinLock), CurrentIrql); + } else { + ExFreePool(PtrIrpContext); + } + + return; +} + + +/************************************************************************* +* +* Function: SFsdPostRequest() +* +* Description: +* Queue up a request for deferred processing (in the context of a system +* worker thread). The caller must have locked the user buffer (if required) +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_PENDING +* +*************************************************************************/ +NTSTATUS SFsdPostRequest( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_PENDING; + + // mark the IRP pending + IoMarkIrpPending(PtrIrp); + + // queue up the request + ExInitializeWorkItem(&(PtrIrpContext->WorkQueueItem), SFsdCommonDispatch, PtrIrpContext); + + ExQueueWorkItem(&(PtrIrpContext->WorkQueueItem), CriticalWorkQueue); + + // return status pending + return(RC); +} + + +/************************************************************************* +* +* Function: SFsdCommonDispatch() +* +* Description: +* The common dispatch routine invoked in the context of a system worker +* thread. All we do here is pretty much case off the major function +* code and invoke the appropriate FSD dispatch routine for further +* processing. +* +* Expected Interrupt Level (for execution) : +* +* IRQL PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdCommonDispatch( +void *Context) // actually an IRPContext structure +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + PIRP PtrIrp = NULL; + + // The context must be a pointer to an IrpContext structure + PtrIrpContext = (PtrSFsdIrpContext)Context; + ASSERT(PtrIrpContext); + + // Assert that the Context is legitimate + if ((PtrIrpContext->NodeIdentifier.NodeType != SFSD_NODE_TYPE_IRP_CONTEXT) || (PtrIrpContext->NodeIdentifier.NodeSize != SFsdQuadAlign(sizeof(SFsdIrpContext)))) { + // This does not look good + SFsdPanic(SFSD_ERROR_INTERNAL_ERROR, PtrIrpContext->NodeIdentifier.NodeType, PtrIrpContext->NodeIdentifier.NodeSize); + } + + // Get a pointer to the IRP structure + PtrIrp = PtrIrpContext->Irp; + ASSERT(PtrIrp); + + // Now, check if the FSD was top level when the IRP was originally invoked + // and set the thread context (for the worker thread) appropriately + if (PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_NOT_TOP_LEVEL) { + // The FSD is not top level for the original request + // Set a constant value in TLS to reflect this fact + IoSetTopLevelIrp((PIRP)FSRTL_FSP_TOP_LEVEL_IRP); + } + + // Since the FSD routine will now be invoked in the context of this worker + // thread, we should inform the FSD that it is perfectly OK to block in + // the context of this thread + SFsdSetFlag(PtrIrpContext->IrpContextFlags, SFSD_IRP_CONTEXT_CAN_BLOCK); + + FsRtlEnterFileSystem(); + + try { + + // Pre-processing has been completed; check the Major Function code value + // either in the IrpContext (copied from the IRP), or directly from the + // IRP itself (we will need a pointer to the stack location to do that), + // Then, switch based on the value on the Major Function code + switch (PtrIrpContext->MajorFunction) { + case IRP_MJ_CREATE: + // Invoke the common create routine + (void)SFsdCommonCreate(PtrIrpContext, PtrIrp); + break; + case IRP_MJ_READ: + // Invoke the common read routine + (void)SFsdCommonRead(PtrIrpContext, PtrIrp); + break; + // Continue with the remaining possible dispatch routines below ... + default: + // This is the case where we have an invalid major function + PtrIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; + PtrIrp->IoStatus.Information = 0; + + IoCompleteRequest(PtrIrp, IO_NO_INCREMENT); + break; + } + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, PtrIrp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + // Enable preemption + FsRtlExitFileSystem(); + + // Ensure that the "top-level" field is cleared + IoSetTopLevelIrp(NULL); + + return; +} + + +/************************************************************************* +* +* Function: SFsdInitializeVCB() +* +* Description: +* Perform the initialization for a VCB structure. +* +* Expected Interrupt Level (for execution) : +* +* IRQL PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdInitializeVCB( +PDEVICE_OBJECT PtrVolumeDeviceObject, +PDEVICE_OBJECT PtrTargetDeviceObject, +PVPB PtrVPB) +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdVCB PtrVCB = NULL; + BOOLEAN VCBResourceInitialized = FALSE; + + PtrVCB = (PtrSFsdVCB)(PtrVolumeDeviceObject->DeviceExtension); + + // Zero it out (typically this has already been done by the I/O + // Manager but it does not hurt to do it again)! + RtlZeroMemory(PtrVCB, sizeof(SFsdVCB)); + + // Initialize the signature fields + PtrVCB->NodeIdentifier.NodeType = SFSD_NODE_TYPE_VCB; + PtrVCB->NodeIdentifier.NodeSize = sizeof(SFsdVCB); + + // Initialize the ERESOURCE object. + RC = ExInitializeResourceLite(&(PtrVCB->VCBResource)); + ASSERT(NT_SUCCESS(RC)); + VCBResourceInitialized = TRUE; + + // We know the target device object. + // Note that this is not neccessarily a pointer to the actual + // physical/virtual device on which the logical volume should + // be mounted. This is actually a pointer to either the actual + // (real) device or to any device object that may have been + // attached to it. Any IRPs that we send down should be sent to this + // device object. However, the "real" physical/virtual device object + // on which we perform our mount operation can be determined from the + // RealDevice field in the VPB sent to us. + PtrVCB->TargetDeviceObject = PtrTargetDeviceObject; + + // We also have a pointer to the newly created device object representing + // this logical volume (remember that this VCB structure is simply an + // extension of the created device object). + PtrVCB->VCBDeviceObject = PtrVolumeDeviceObject; + + // We also have the VPB pointer. This was obtained from the + // Parameters.MountVolume.Vpb field in the current I/O stack location + // for the mount IRP. + PtrVCB->PtrVPB = PtrVPB; + + // Initialize the list anchor (head) for some lists in this VCB. + InitializeListHead(&(PtrVCB->NextFCB)); + InitializeListHead(&(PtrVCB->NextNotifyIRP)); + InitializeListHead(&(PtrVCB->VolumeOpenListHead)); + + // Initialize the notify IRP list mutex + KeInitializeMutex(&(PtrVCB->NotifyIRPMutex), 0); + + // Set the initial file size values appropriately. Note that your FSD may + // wish to guess at the initial amount of information you would like to + // read from the disk until you have really determined that this a valid + // logical volume (on disk) that you wish to mount. + // PtrVCB->FileSize = PtrVCB->AllocationSize = ?? + + // You typically do not want to bother with valid data length callbacks + // from the Cache Manager for the file stream opened for volume metadata + // information + PtrVCB->ValidDataLength.LowPart = 0xFFFFFFFF; + PtrVCB->ValidDataLength.HighPart = 0x7FFFFFFF; + + // Create a stream file object for this volume. + PtrVCB->PtrStreamFileObject = IoCreateStreamFileObject(NULL, + PtrVCB->PtrVPB->RealDevice); + ASSERT(PtrVCB->PtrStreamFileObject); + + // Initialize some important fields in the newly created file object. + PtrVCB->PtrStreamFileObject->FsContext = (void *)PtrVCB; + PtrVCB->PtrStreamFileObject->FsContext2 = NULL; + PtrVCB->PtrStreamFileObject->SectionObjectPointer = &(PtrVCB->SectionObject); + + PtrVCB->PtrStreamFileObject->Vpb = PtrVPB; + + // Link this chap onto the global linked list of all VCB structures. + ExAcquireResourceExclusiveLite(&(SFsdGlobalData.GlobalDataResource), TRUE); + InsertTailList(&(SFsdGlobalData.NextVCB), &(PtrVCB->NextVCB)); + + // Initialize caching for the stream file object. + CcInitializeCacheMap(PtrVCB->PtrStreamFileObject, (PCC_FILE_SIZES)(&(PtrVCB->AllocationSize)), + TRUE, // We will use pinned access. + &(SFsdGlobalData.CacheMgrCallBacks), PtrVCB); + + SFsdReleaseResource(&(SFsdGlobalData.GlobalDataResource)); + + // Mark the fact that this VCB structure is initialized. + SFsdSetFlag(PtrVCB->VCBFlags, SFSD_VCB_FLAGS_VCB_INITIALIZED); + + return; +} + + Added: vendor/rfsd/current/SampleFSD/filesys/src/read.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/read.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/read.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,615 @@ +/************************************************************************* +* +* File: read.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "Read" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_READ + + + +/************************************************************************* +* +* Function: SFsdRead() +* +* Description: +* The I/O Manager will invoke this routine to handle a read +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdRead( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonRead(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonRead() +* +* Description: +* The actual work is performed here. This routine may be invoked in one +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonRead( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + LARGE_INTEGER ByteOffset; + uint32 ReadLength = 0, TruncatedReadLength = 0; + uint32 NumberBytesRead = 0; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + PERESOURCE PtrResourceAcquired = NULL; + IO_STATUS_BLOCK LocalIoStatus; + void *PtrSystemBuffer = NULL; + uint32 KeyValue = 0; + + BOOLEAN CompleteIrp = TRUE; + BOOLEAN PostRequest = FALSE; + + BOOLEAN CanWait = FALSE; + BOOLEAN PagingIo = FALSE; + BOOLEAN NonBufferedIo = FALSE; + BOOLEAN SynchronousIo = FALSE; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + // If this happens to be a MDL read complete request, then + // there is not much processing that the FSD has to do. + if (PtrIoStackLocation->MinorFunction & IRP_MN_COMPLETE) { + // Caller wants to tell the Cache Manager that a previously + // allocated MDL can be freed. + SFsdMdlComplete(PtrIrpContext, PtrIrp, PtrIoStackLocation, TRUE); + // The IRP has been completed. + CompleteIrp = FALSE; + try_return(RC = STATUS_SUCCESS); + } + + // If this is a request at IRQL DISPATCH_LEVEL, then post + // the request (your FSD may choose to process it synchronously + // if you implement the support correctly; obviously you will be + // quite constrained in what you can do at such IRQL). + if (PtrIoStackLocation->MinorFunction & IRP_MN_DPC) { + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Get the FCB and CCB pointers + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + // Get some of the parameters supplied to us + ByteOffset = PtrIoStackLocation->Parameters.Read.ByteOffset; + ReadLength = PtrIoStackLocation->Parameters.Read.Length; + + CanWait = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK) ? TRUE : FALSE); + PagingIo = ((PtrIrp->Flags & IRP_PAGING_IO) ? TRUE : FALSE); + NonBufferedIo = ((PtrIrp->Flags & IRP_NOCACHE) ? TRUE : FALSE); + SynchronousIo = ((PtrFileObject->Flags & FO_SYNCHRONOUS_IO) ? TRUE : FALSE); + + if (ReadLength == 0) { + // a 0 byte read can be immediately succeeded + try_return(RC); + } + + // NOTE: if your FSD does not support file sizes > 2 GB, you + // could validate the start offset here and return end-of-file + // if the offset begins beyond the maximum supported length. + + // Is this a read of the volume itself ? + if (PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) { + // Yup, we need to send this on to the disk driver after + // validation of the offset and length. + PtrVCB = (PtrSFsdVCB)(PtrFCB); + + // Acquire the volume resource shared ... + if (!ExAcquireResourceSharedLite(&(PtrVCB->VCBResource), CanWait)) { + // post the request to be processed in the context of a worker thread + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + PtrResourceAcquired = &(PtrVCB->VCBResource); + + // Insert code to validate the caller supplied offset here + + // Lock the callers buffer + if (!NT_SUCCESS(RC = SFsdLockCallersBuffer(PtrIrp, TRUE, ReadLength))) { + try_return(RC); + } + + // Forward the request to the lower level driver + // For synchronous I/O wait here, else return STATUS_PENDING + // For asynchronous I/O support, read the discussion in Chapter 10 + + try_return(RC); + } + + // If the read request is directed to a page file (if your FSD + // supports paging files), send the request directly to the disk + // driver. For requests directed to a page file, you have to trust + // that the offsets will be set correctly by the VMM. You should not + // attempt to acquire any FSD resources either. + if (PtrFCB->FCBFlags & SFSD_FCB_PAGE_FILE) { + IoMarkIrpPending(PtrIrp); + // You will need to set a completion routine before invoking + // a lower level driver + // forward request directly to disk driver + // SFsdPageFileIo(PtrIrpContext, PtrIrp); + + CompleteIrp = FALSE; + + try_return(RC = STATUS_PENDING); + } + + + // If this read is directed to a directory, it is not allowed + // by the sample FSD. Note that you may choose to create a stream + // file for FSD (internal) directory read/write operations in which + // case you should modify the check below to allow reading (directly + // from disk) directories as long as the read originated from within your FSD + if (PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY) { + RC = STATUS_INVALID_DEVICE_REQUEST; + try_return(RC); + } + + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // This is a good place for oplock related processing. + // Chapter 11 expands upon this topic in greater detail. + + // Check whether the desired read can be allowed depending + // on any byte range locks that might exist. Note that for + // paging-io, no such checks should be performed. + if (!PagingIo) { + // Insert code to perform the check here ... + // if (!SFsdCheckForByteLock(PtrFCB, PtrCCB, PtrIrp, PtrCurrentIoStackLocation)) { + // try_return(RC = STATUS_FILE_LOCK_CONFLICT); + // } + } + + // There are certain complications that arise when the same file stream + // has been opened for cached and non-cached access. The FSD is then + // responsible for maintaining a consistent view of the data seen by + // the caller. + // Also, it is possible for file streams to be mapped in both as data files + // and as an executable. This could also lead to consistency problems since + // there now exist two separate sections (and pages) containing file + // information. + // Read Chapter 10 for more information on the issues involved in + // maintaining data consistency. + // The test below flushes the data cached in system memory if the current + // request madates non-cached access (file stream must be cached) and + // (a) the current request is not paging-io which indicates it is not + // a recursive I/O operation OR originating in the Cache Manager + // (b) OR the current request is paging-io BUT it did not originate via + // the Cache Manager (or is a recursive I/O operation) and we do + // have an image section that has been initialized. +#define SFSD_REQ_NOT_VIA_CACHE_MGR(ptr) (!MmIsRecursiveIoFault() && ((ptr)->ImageSectionObject != NULL)) + + if (NonBufferedIo && (PtrReqdFCB->SectionObject.DataSectionObject != NULL)) { + if (!PagingIo || (SFSD_REQ_NOT_VIA_CACHE_MGR(&(PtrReqdFCB->SectionObject)))) { + CcFlushCache(&(PtrReqdFCB->SectionObject), &ByteOffset, ReadLength, &(PtrIrp->IoStatus)); + // If the flush failed, return error to the caller + if (!NT_SUCCESS(RC = PtrIrp->IoStatus.Status)) { + try_return(RC); + } + } + } + + // Acquire the appropriate FCB resource shared + if (PagingIo) { + // Try to acquire the FCB PagingIoResource shared + if (!ExAcquireResourceSharedLite(&(PtrReqdFCB->PagingIoResource), CanWait)) { + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + // Remember the resource that was acquired + PtrResourceAcquired = &(PtrReqdFCB->PagingIoResource); + } else { + // Try to acquire the FCB MainResource shared + if (!ExAcquireResourceSharedLite(&(PtrReqdFCB->MainResource), CanWait)) { + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + // Remember the resource that was acquired + PtrResourceAcquired = &(PtrReqdFCB->MainResource); + } + + // Validate start offset and length supplied. + // If start offset is > end-of-file, return an appropriate error. Note + // that since a FCB resource has already been acquired, and since all + // file size changes require acquisition of both FCB resources (see + // Chapter 10), the contents of the FCB and associated data structures + // can safely be examined. + + // Also note that I am using the file size in the "Common FCB Header" + // to perform the check. However, your FSD might decide to keep a + // separate copy in the FCB (or some other representation of the + // file associated with the FCB). + if (RtlLargeIntegerGreaterThan(ByteOffset, PtrReqdFCB->CommonFCBHeader.FileSize)) { + // Starting offset is > file size + try_return(RC = STATUS_END_OF_FILE); + } + + // We can also go ahead and truncate the read length here + // such that it is contained within the file size + + // This is also a good place to set whether fast-io can be performed + // on this particular file or not. Your FSD must make it's own + // determination on whether or not to allow fast-io operations. + // Commonly, fast-io is not allowed if any byte range locks exist + // on the file or if oplocks prevent fast-io. Practically any reason + // choosen by your FSD could result in your setting FastIoIsNotPossible + // OR FastIoIsQuestionable instead of FastIoIsPossible. + // + // PtrReqdFCB->CommonFCBHeader.IsFastIoPossible = FastIoIsPossible; + + + // Branch here for cached vs non-cached I/O + if (!NonBufferedIo) { + + // The caller wishes to perform cached I/O. Initiate caching if + // this is the first cached I/O operation using this file object + if (PtrFileObject->PrivateCacheMap == NULL) { + // This is the first cached I/O operation. You must ensure + // that the FCB Common FCB Header contains valid sizes at this time + CcInitializeCacheMap(PtrFileObject, (PCC_FILE_SIZES)(&(PtrReqdFCB->CommonFCBHeader.AllocationSize)), + FALSE, // We will not utilize pin access for this file + &(SFsdGlobalData.CacheMgrCallBacks), // callbacks + PtrCCB); // The context used in callbacks + } + + // Check and see if this request requires a MDL returned to the caller + if (PtrIoStackLocation->MinorFunction & IRP_MN_MDL) { + // Caller does want a MDL returned. Note that this mode + // implies that the caller is prepared to block + CcMdlRead(PtrFileObject, &ByteOffset, TruncatedReadLength, &(PtrIrp->MdlAddress), &(PtrIrp->IoStatus)); + NumberBytesRead = PtrIrp->IoStatus.Information; + RC = PtrIrp->IoStatus.Status; + + try_return(RC); + } + + // This is a regular run-of-the-mill cached I/O request. Let the + // Cache Manager worry about it! + // First though, we need a buffer pointer (address) that is valid + // More on this in Chapter 10 + PtrSystemBuffer = SFsdGetCallersBuffer(PtrIrp); + ASSERT(PtrSystemBuffer); + if (!CcCopyRead(PtrFileObject, &(ByteOffset), ReadLength, CanWait, PtrSystemBuffer, &(PtrIrp->IoStatus))) { + // The caller was not prepared to block and data is not immediately + // available in the system cache + CompleteIrp = FALSE; + PostRequest = TRUE; + // Mark Irp Pending ... + try_return(RC = STATUS_PENDING); + } + + // We have the data + RC = PtrIrp->IoStatus.Status; + NumberBytesRead = PtrIrp->IoStatus.Information; + + try_return(RC); + + } else { + + // Send the request to lower level drivers + + // For paging-io, the FSD has to trust the VMM to do the right thing + + // Here is a common method used by Windows NT native file systems + // that are in the process of sending a request to the disk driver. + // First, mark the IRP as pending, then invoke the lower level driver + // after setting a completion routine. + // Meanwhile, this particular thread can immediately return a + // STATUS_PENDING return code. + // The completion routine is then responsible for completing the IRP + // and unlocking appropriate resources + + // Also, at this point, your FSD might choose to utilize the + // information contained in the ValidDataLength field to simply + // return zeroes to the caller for reads extending beyond current + // valid data length. + + IoMarkIrpPending(PtrIrp); + + // Invoke a routine to read disk information at this time + // You will need to set a completion routine before invoking + // a lower level driver + + CompleteIrp = FALSE; + + try_return(RC = STATUS_PENDING); + } + + try_exit: NOTHING; + + } finally { + // Post IRP if required + if (PostRequest) { + + // Release any resources acquired here ... + if (PtrResourceAcquired) { + SFsdReleaseResource(PtrResourceAcquired); + } + + // Implement a routine that will queue up the request to be executed + // later (asynchronously) in the context of a system worker thread. + // See Chapter 10 for details. + + // Lock the callers buffer here. Then invoke a common routine to + // perform the post operation. + if (!(PtrIoStackLocation->MinorFunction & IRP_MN_MDL)) { + RC = SFsdLockCallersBuffer(PtrIrp, TRUE, ReadLength); + ASSERT(NT_SUCCESS(RC)); + } + + // Perform the post operation which will mark the IRP pending + // and will return STATUS_PENDING back to us + RC = SFsdPostRequest(PtrIrpContext, PtrIrp); + + } else if (CompleteIrp && !(RC == STATUS_PENDING)) { + // For synchronous I/O, the FSD must maintain the current byte offset + // Do not do this however, if I/O is marked as paging-io + if (SynchronousIo && !PagingIo && NT_SUCCESS(RC)) { + PtrFileObject->CurrentByteOffset = RtlLargeIntegerAdd(ByteOffset, RtlConvertUlongToLargeInteger((unsigned long)NumberBytesRead)); + } + + // If the read completed successfully and this was not a paging-io + // operation, set a flag in the CCB that indicates that a read was + // performed and that the file time should be updated at cleanup + if (NT_SUCCESS(RC) && !PagingIo) { + SFsdSetFlag(PtrCCB->CCBFlags, SFSD_CCB_ACCESSED); + } + + if (PtrResourceAcquired) { + SFsdReleaseResource(PtrResourceAcquired); + } + + // Can complete the IRP here if no exception was encountered + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_EXCEPTION)) { + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = NumberBytesRead; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } + } // can we complete the IRP ? + } // end of "finally" processing + + return(RC); +} + + + + +/************************************************************************* +* +* Function: SFsdGetCallersBuffer() +* +* Description: +* Obtain a pointer to the caller's buffer. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +void *SFsdGetCallersBuffer( +PIRP PtrIrp) +{ + void *ReturnedBuffer = NULL; + + // If an MDL is supplied, use it. + if (PtrIrp->MdlAddress) { + ReturnedBuffer = MmGetSystemAddressForMdl(PtrIrp->MdlAddress); + } else { + ReturnedBuffer = PtrIrp->UserBuffer; + } + + return(ReturnedBuffer); +} + + + +/************************************************************************* +* +* Function: SFsdLockCallersBuffer() +* +* Description: +* Obtain a MDL that describes the buffer. Lock pages for I/O +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdLockCallersBuffer( +PIRP PtrIrp, +BOOLEAN IsReadOperation, +uint32 Length) +{ + NTSTATUS RC = STATUS_SUCCESS; + PMDL PtrMdl = NULL; + + ASSERT(PtrIrp); + + try { + // Is a MDL already present in the IRP + if (!(PtrIrp->MdlAddress)) { + // Allocate a MDL + if (!(PtrMdl = IoAllocateMdl(PtrIrp->UserBuffer, Length, FALSE, FALSE, PtrIrp))) { + RC = STATUS_INSUFFICIENT_RESOURCES; + try_return(RC); + } + + // Probe and lock the pages described by the MDL + // We could encounter an exception doing so, swallow the exception + // NOTE: The exception could be due to an unexpected (from our + // perspective), invalidation of the virtual addresses that comprise + // the passed in buffer + try { + MmProbeAndLockPages(PtrMdl, PtrIrp->RequestorMode, (IsReadOperation ? IoWriteAccess:IoReadAccess)); + } except(EXCEPTION_EXECUTE_HANDLER) { + RC = STATUS_INVALID_USER_BUFFER; + } + } + + try_exit: NOTHING; + + } finally { + if (!NT_SUCCESS(RC) && PtrMdl) { + IoFreeMdl(PtrMdl); + // You MUST NULL out the MdlAddress field in the IRP after freeing + // the MDL, else the I/O Manager will also attempt to free the MDL + // pointed to by that field during I/O completion. Obviously, the + // pointer becomes invalid once you free the allocated MDL and hence + // you will encounter a system crash during IRP completion. + PtrIrp->MdlAddress = NULL; + } + } + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdMdlComplete() +* +* Description: +* Tell Cache Manager to release MDL (and possibly flush). +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None. +* +*************************************************************************/ +void SFsdMdlComplete( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp, +PIO_STACK_LOCATION PtrIoStackLocation, +BOOLEAN ReadCompletion) +{ + NTSTATUS RC = STATUS_SUCCESS; + PFILE_OBJECT PtrFileObject = NULL; + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // Not much to do here. + if (ReadCompletion) { + CcMdlReadComplete(PtrFileObject, PtrIrp->MdlAddress); + } else { + // The Cache Manager needs the byte offset in the I/O stack location. + CcMdlWriteComplete(PtrFileObject, &(PtrIoStackLocation->Parameters.Write.ByteOffset), PtrIrp->MdlAddress); + } + + // Clear the MDL address field in the IRP so the IoCompleteRequest() + // does not try to play around with the MDL. + PtrIrp->MdlAddress = NULL; + + // Free up the Irp Context. + SFsdReleaseIrpContext(PtrIrpContext); + + // Complete the IRP. + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = 0; + IoCompleteRequest(PtrIrp, IO_NO_INCREMENT); + + return; +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/sfsdinit.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/sfsdinit.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/sfsdinit.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,332 @@ +/************************************************************************* +* +* File: sfsdinit.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* This file contains the initialization code for the kernel mode +* Sample FSD module. The DriverEntry() routine is called by the I/O +* sub-system to initialize the FSD. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_INIT + +#define SFSD_FS_NAME L"\\SampleFSD" + +// global variables are declared here +SFsdData SFsdGlobalData; + +#define __STR2__(x) #x +#define __STR1__(x) __STR2__(x) +#define __SLINE__ __STR1__(__LINE__) + +/************************************************************************* +* +* Function: DriverEntry() +* +* Description: +* This routine is the standard entry point for all kernel mode drivers. +* The routine is invoked at IRQL PASSIVE_LEVEL in the context of a +* system worker thread. +* All FSD specific data structures etc. are initialized here. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error (will cause driver to be unloaded). +* +*************************************************************************/ +NTSTATUS DriverEntry( +PDRIVER_OBJECT DriverObject, // created by the I/O sub-system +PUNICODE_STRING RegistryPath) // path to the registry key +{ + NTSTATUS RC = STATUS_SUCCESS; + UNICODE_STRING DriverDeviceName; + BOOLEAN RegisteredShutdown = FALSE; + + DbgPrint(__FUNCTION__); + DbgPrint("Beginning initialization of SFsd in " __FUNCTION__ " of " __FILE__ "at " __SLINE__ "\n" ); + //- SFsdBreakPoint(); + DbgPrint("Past initial break point"); + + try { + try { + // initialize the global data structure + RtlZeroMemory(&SFsdGlobalData, sizeof(SFsdGlobalData)); + + // initialize some required fields + SFsdGlobalData.NodeIdentifier.NodeType = SFSD_NODE_TYPE_GLOBAL_DATA; + SFsdGlobalData.NodeIdentifier.NodeSize = sizeof(SFsdGlobalData); + + // initialize the global data resource and remember the fact that + // the resource has been initialized + RC = ExInitializeResourceLite(&(SFsdGlobalData.GlobalDataResource)); + ASSERT(NT_SUCCESS(RC)); + SFsdSetFlag(SFsdGlobalData.SFsdFlags, SFSD_DATA_FLAGS_RESOURCE_INITIALIZED); + + // keep a ptr to the driver object sent to us by the I/O Mgr + SFsdGlobalData.SFsdDriverObject = DriverObject; + + // initialize the mounted logical volume list head + InitializeListHead(&(SFsdGlobalData.NextVCB)); + + // before we proceed with any more initialization, read in + // user supplied configurable values ... + // if (!NT_SUCCESS(RC = SFsdObtainRegistryValues(RegistryPath))) { + // in your commercial driver implementation, it would be + // advisable for your driver to print an appropriate error + // message to the system error log before leaving + // try_return(RC); + // } + + // we should have the registry data (if any), allocate zone memory ... + // This is an example of when FSD implementations try to pre-allocate + // some fixed amount of memory to avoid internal fragmentation and/or waiting + // later during run-time ... + if (!NT_SUCCESS(RC = SFsdInitializeZones())) { + // we failed, print a message and leave ... + try_return(RC); + } + + // initialize the IRP major function table, and the fast I/O table + SFsdInitializeFunctionPointers(DriverObject); + + // create a device object representing the driver itself + // so that requests can be targeted to the driver ... + // e.g. for a disk-based FSD, "mount" requests will be sent to + // this device object by the I/O Manager.\ + // For a redirector/server, you may have applications + // send "special" IOCTL's using this device object ... + RtlInitUnicodeString(&DriverDeviceName, SFSD_FS_NAME); + if (!NT_SUCCESS(RC = IoCreateDevice( + DriverObject, // our driver object + 0, // don't need an extension for this object + &DriverDeviceName,// name - can be used to "open" the driver + // see the book for alternate choices + FILE_DEVICE_DISK_FILE_SYSTEM, + 0, // no special characteristics + // do not want this as an exclusive device, though you might + FALSE, + &(SFsdGlobalData.SFsdDeviceObject)))) { + // failed to create a device object, leave ... + try_return(RC); + } + +#ifdef _THIS_IS_A_NETWORK_REDIR_OR_SERVER_ + + // since network redirectors/servers do not register themselves as + // "file systems", the I/O Manager does not ordinarily request the + // FSD to flush logical volumes at shutdown. To get some notification + // at shutdown, use the IoRegisterShutdownNotification() instead ... + if (!NT_SUCCESS(RC = IoRegisterShutdownNotification(SFsdGlobalData.SFsdDeviceObject))) { + // failed to register shutdown notification ... + try_return(RC); + } + RegisteredShutdown = TRUE; + + // Register the network FSD with the MUP component. + if (!NT_SUCCESS(RC = FsRtlRegisterUncProvider(&(SFsdGlobalData.MupHandle), &DriverDeviceName, FALSE))) { + try_return(RC); + } + +#else // This is a disk based FSD + + // register the driver with the I/O Manager, pretend as if this is + // a physical disk based FSD (or in order words, this FSD manages + // logical volumes residing on physical disk drives) + IoRegisterFileSystem(SFsdGlobalData.SFsdDeviceObject); + DbgPrint("IoRegisterFileSystem successful.\n"); + +#endif // _THIS_IS_A_NETWORK_REDIR_OR_SERVER_ + + } except (EXCEPTION_EXECUTE_HANDLER) { + // we encountered an exception somewhere, eat it up + RC = GetExceptionCode(); + DbgPrint("Exception in Init! %x\n", RC); + + } + + try_exit: NOTHING; + } finally { + // start unwinding if we were unsuccessful + if (!NT_SUCCESS(RC)) { +#ifdef _THIS_IS_A_NETWORK_REDIR_OR_SERVER_ + if (RegisteredShutdown) { + IoUnregisterShutdownNotification(SFsdGlobalData.SFsdDeviceObject); + } +#endif // _THIS_IS_A_NETWORK_REDIR_OR_SERVER_ + + // Now, delete any device objects, etc. we may have created + if (SFsdGlobalData.SFsdDeviceObject) { + DbgPrint("Deleting IO Device\n"); + IoDeleteDevice(SFsdGlobalData.SFsdDeviceObject); + SFsdGlobalData.SFsdDeviceObject = NULL; + } + + // free up any memory we might have reserved for zones/lookaside + // lists + if (SFsdGlobalData.SFsdFlags & SFSD_DATA_FLAGS_ZONES_INITIALIZED) { + SFsdDestroyZones(); + } + + // delete the resource we may have initialized + if (SFsdGlobalData.SFsdFlags & SFSD_DATA_FLAGS_RESOURCE_INITIALIZED) { + // un-initialize this resource + ExDeleteResourceLite(&(SFsdGlobalData.GlobalDataResource)); + SFsdClearFlag(SFsdGlobalData.SFsdFlags, SFSD_DATA_FLAGS_RESOURCE_INITIALIZED); + } + } + } + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdInitializeFunctionPointers() +* +* Description: +* Initialize the IRP... function pointer array in the driver object +* structure. Also initialize the fast-io function ptr array ... +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdInitializeFunctionPointers( +PDRIVER_OBJECT DriverObject) // created by the I/O sub-system +{ + PFAST_IO_DISPATCH PtrFastIoDispatch = NULL; + + + // initialize the function pointers for the IRP major + // functions that this FSD is prepared to handle ... + // NT Version 4.0 has 28 possible functions that a + // kernel mode driver can handle. + // NT Version 3.51 and before has only 22 such functions, + // of which 18 are typically interesting to most FSD's. + + // The only interesting new functions that a FSD might + // want to respond to beginning with Version 4.0 are the + // IRP_MJ_QUERY_QUOTA and the IRP_MJ_SET_QUOTA requests. + + // The code below does not handle quota manipulation, neither + // does the NT Version 4.0 operating system (or I/O Manager). + // However, you should be on the lookout for any such new + // functionality that your FSD might have to implement in + // the near future. + + DriverObject->MajorFunction[IRP_MJ_CREATE] = SFsdCreate; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = SFsdClose; + DriverObject->MajorFunction[IRP_MJ_READ] = SFsdRead; + DriverObject->MajorFunction[IRP_MJ_WRITE] = SFsdWrite; + + DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = SFsdFSControl; //+ + DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = SFsdFileInfo; + DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = SFsdFileInfo; + + DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = SFsdFlush; + + // To implement support for querying and modifying volume attributes + // (volume information query/set operations), enable initialization + // of the following two function pointers and then implement the supporting + // functions. Use Chapter 11 in the text to assist you in your efforts. + // DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = SFsdVolInfo; + // DriverObject->MajorFunction[IRP_MJ_SET_VOLUME_INFORMATION] = SFsdVolInfo; + + + DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = SFsdDirControl; + + // To implement support for file system IOCTL calls, enable initialization + // of the following function pointer and implement appropriate support. Use + // Chapter 11 in the text to assist you in your efforts. + // DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = SFsdFSControl; + + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = SFsdDeviceControl; + DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = SFsdShutdown; + + // For byte-range lock support, enable initialization of the following + // function pointer and implement appropriate support. Use Chapter 10 + // in the text to assist you in your efforts. + // DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = SFsdLockControl; + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = SFsdCleanup; + + // If your FSD supports security attributes, you should provide appropriate + // dispatch entry points and initialize the function pointers as given below. + // DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = SFsdSecurity; + // DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = SFsdSecurity; + + // If you support extended attributes, you should provide appropriate + // dispatch entry points and initialize the function pointers as given below. + // DriverObject->MajorFunction[IRP_MJ_QUERY_EA] = SFsdExtendedAttr; + // DriverObject->MajorFunction[IRP_MJ_SET_EA] = SFsdExtendedAttr; + + + + ////////////////////////////////////////////////////// + // Now, it is time to initialize the fast-io stuff ... + PtrFastIoDispatch = DriverObject->FastIoDispatch = &(SFsdGlobalData.SFsdFastIoDispatch); + + // initialize the global fast-io structure + // NOTE: The fast-io structure has undergone a substantial revision + // in Windows NT Version 4.0. The structure has been extensively expanded. + // Therefore, if your driver needs to work on both V3.51 and V4.0+, + // you will have to be able to distinguish between the two versions at compile time. + PtrFastIoDispatch->SizeOfFastIoDispatch = sizeof(FAST_IO_DISPATCH); + PtrFastIoDispatch->FastIoCheckIfPossible = SFsdFastIoCheckIfPossible; + PtrFastIoDispatch->FastIoRead = SFsdFastIoRead; + PtrFastIoDispatch->FastIoWrite = SFsdFastIoWrite; + PtrFastIoDispatch->FastIoQueryBasicInfo = SFsdFastIoQueryBasicInfo; + PtrFastIoDispatch->FastIoQueryStandardInfo = SFsdFastIoQueryStdInfo; + PtrFastIoDispatch->FastIoLock = SFsdFastIoLock; + PtrFastIoDispatch->FastIoUnlockSingle = SFsdFastIoUnlockSingle; + PtrFastIoDispatch->FastIoUnlockAll = SFsdFastIoUnlockAll; + PtrFastIoDispatch->FastIoUnlockAllByKey = SFsdFastIoUnlockAllByKey; + PtrFastIoDispatch->AcquireFileForNtCreateSection = SFsdFastIoAcqCreateSec; + PtrFastIoDispatch->ReleaseFileForNtCreateSection = SFsdFastIoRelCreateSec; + + // the remaining are only valid under NT Version 4.0 and later +#if(_WIN32_WINNT >= 0x0400) + PtrFastIoDispatch->FastIoQueryNetworkOpenInfo = SFsdFastIoQueryNetInfo; + PtrFastIoDispatch->AcquireForModWrite = SFsdFastIoAcqModWrite; + PtrFastIoDispatch->ReleaseForModWrite = SFsdFastIoRelModWrite; + PtrFastIoDispatch->AcquireForCcFlush = SFsdFastIoAcqCcFlush; + PtrFastIoDispatch->ReleaseForCcFlush = SFsdFastIoRelCcFlush; + + // MDL functionality + PtrFastIoDispatch->MdlRead = SFsdFastIoMdlRead; + PtrFastIoDispatch->MdlReadComplete = SFsdFastIoMdlReadComplete; + PtrFastIoDispatch->PrepareMdlWrite = SFsdFastIoPrepareMdlWrite; + PtrFastIoDispatch->MdlWriteComplete = SFsdFastIoMdlWriteComplete; + + // although this FSD does not support compressed read/write functionality, + // NTFS does, and if you design a FSD that can provide such functionality, + // you should consider initializing the fast io entry points for reading + // and/or writing compressed data ... +#endif // (_WIN32_WINNT >= 0x0400) + + // last but not least, initialize the Cache Manager callback functions + // which are used in CcInitializeCacheMap() + SFsdGlobalData.CacheMgrCallBacks.AcquireForLazyWrite = SFsdAcqLazyWrite; + SFsdGlobalData.CacheMgrCallBacks.ReleaseFromLazyWrite = SFsdRelLazyWrite; + SFsdGlobalData.CacheMgrCallBacks.AcquireForReadAhead = SFsdAcqReadAhead; + SFsdGlobalData.CacheMgrCallBacks.ReleaseFromReadAhead = SFsdRelReadAhead; + + return; +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/shutdown.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/shutdown.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/shutdown.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,151 @@ +/************************************************************************* +* +* File: shutdown.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "shutdown notification" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_SHUTDOWN + + + +/************************************************************************* +* +* Function: SFsdShutdown() +* +* Description: +* All disk-based FSDs can expect to receive this shutdown notification +* request whenever the system is about to be halted gracefully. If you +* design and implement a network redirector, you must register explicitly +* for shutdown notification by invoking the IoRegisterShutdownNotification() +* routine from your driver entry. +* +* Note that drivers that register to receive shutdown notification get +* invoked BEFORE disk-based FSDs are told about the shutdown notification. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: Irrelevant. +* +*************************************************************************/ +NTSTATUS SFsdShutdown( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonShutdown(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonShutdown() +* +* Description: +* The actual work is performed here. Basically, all we do here is +* internally invoke a flush on all mounted logical volumes. This, in +* turn, will result in all open file streams being flushed to disk. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: Irrelevant +* +*************************************************************************/ +NTSTATUS SFsdCommonShutdown( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + IO_STATUS_BLOCK LocalIoStatus; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + // Here is the algorithm you can follow in implementing your shutdown + // functionality. Note, of course, that it is quite possible that you + // may wish to do much more specialized processing in your specific + // (commercial) FSD at shutdown time; the steps listed below, however, + // are those that you should implement at a minimum: + // (a) Block all new "mount volume" requests by acquiring an appropriate + // global resource/lock. + // (b) Go through your linked list of mounted logical volumes and for + // each such volume, do the following: + // (i) acquire the volume resource exclusively + // (ii) invoke SFsdFlushLogicalVolume() (internally) to flush the + // open data streams belonging to the volume from the system + // cache + // (iii) Invoke the physical/virtual/logical target device object + // on which the volume is mounted and inform this device + // about the shutdown request (Use IoBuildSynchronousFsdRequest() + // to create an IRP with MajorFunction = IRP_MJ_SHUTDOWN that you + // will then issue to the target device object). + // (iv) Wait for the completion of the shutdown processing by the target + // device object + // (v) Release the VCB resource you will have acquired in (i) above. + + // Once you have processed all the mounted logical volumes, you can release + // all acquired global resources and leave (in peace :-) + + try_exit: NOTHING; + + } finally { + + // See the read/write examples for how to fill in this portion + + } // end of "finally" processing + + return(RC); +} + Added: vendor/rfsd/current/SampleFSD/filesys/src/sources URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/sources (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/sources Fri Apr 14 13:01:12 2006 @@ -1,0 +1,65 @@ +# - Execute the "build" command to make the sample FSD driver + +# The TARGETNAME variable is defined by the developer. It is the name of +# the target (component) that is being built by this makefile. It +# should NOT include any path or file extension information. + +TARGETNAME=sfsd + +# The TARGETPATH and TARGETTYPE variables are defined by the developer. +# The first specifies where the target is to be build. The second specifies +# the type of target (either PROGRAM, DYNLINK, LIBRARY, UMAPPL_NOLIB or +# BOOTPGM). UMAPPL_NOLIB is used when you're only building user-mode +# apps and don't need to build a library. + +TARGETPATH=obj + +TARGETTYPE=DRIVER + +# The INCLUDES variable specifies any include paths that are specific to +# this source directory. Separate multiple directory paths with single +# semicolons. Relative path specifications are okay. The INCLUDES +# variable is not required. Specifying an empty INCLUDES variable +# (i.e. INCLUDES= ) indicates no include paths are to be searched. +# +# NOTE: The "fsdk\inc" refers to the Microsoft supplied Installable File Systems +# Developers Kit. +INCLUDES=..\inc; +#\ddk-40\inc;\fsdk\inc-40; + +# The SOURCES variable is defined by the developer. It is a list of all the +# source files for this component. Each source file should be on a separate +# line using the line continuation character. This will minimize merge +# conflicts if two developers adding source files to the same component. +# The SOURCES variable is required. If there are no platform common source +# files, an empty SOURCES variable should be used. (i.e. SOURCES= ) + +# Source files common to multiple platforms + +SOURCES=sfsdinit.c \ + create.c \ + debug.c \ + misc.c \ + cleanup.c \ + close.c \ + read.c \ + write.c \ + fscontrol.c \ + fileinfo.c \ + flush.c \ + dircntrl.c \ + devcntrl.c \ + shutdown.c \ + fastio.c + +# Next specify any additional options for the compiler. +# Define the appropriate CPU type (and insert defines +# in the appropriate header file) to get the right +# values for "uint8", "uint16" etc. typedefs. + +C_DEFINES= -DUNICODE -D_CPU_X86_ + +# The type of product being built - NT = kernel mode + +UMTYPE=nt + Added: vendor/rfsd/current/SampleFSD/filesys/src/write.c URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/SampleFSD/filesys/src…
============================================================================== --- vendor/rfsd/current/SampleFSD/filesys/src/write.c (added) +++ vendor/rfsd/current/SampleFSD/filesys/src/write.c Fri Apr 14 13:01:12 2006 @@ -1,0 +1,543 @@ +/************************************************************************* +* +* File: write.c +* +* Module: Sample File System Driver (Kernel mode execution only) +* +* Description: +* Contains code to handle the "Write" dispatch entry point. +* +* Author: R. Nagar +* +* (c) 1996-97 Rajeev Nagar, All Rights Reserved +* +*************************************************************************/ + +#include "sfsd.h" + +// define the file specific bug-check id +#define SFSD_BUG_CHECK_ID SFSD_FILE_WRITE + + + +/************************************************************************* +* +* Function: SFsdWrite() +* +* Description: +* The I/O Manager will invoke this routine to handle a write +* request +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL (invocation at higher IRQL will cause execution +* to be deferred to a worker thread context) +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdWrite( +PDEVICE_OBJECT DeviceObject, // the logical volume device object +PIRP Irp) // I/O Request Packet +{ + NTSTATUS RC = STATUS_SUCCESS; + PtrSFsdIrpContext PtrIrpContext = NULL; + BOOLEAN AreWeTopLevel = FALSE; + + FsdDbgPrintCall(DeviceObject, Irp); + + FsRtlEnterFileSystem(); + ASSERT(DeviceObject); + ASSERT(Irp); + + // set the top level context + AreWeTopLevel = SFsdIsIrpTopLevel(Irp); + + try { + + // get an IRP context structure and issue the request + PtrIrpContext = SFsdAllocateIrpContext(Irp, DeviceObject); + ASSERT(PtrIrpContext); + + RC = SFsdCommonWrite(PtrIrpContext, Irp); + + } except (SFsdExceptionFilter(PtrIrpContext, GetExceptionInformation())) { + + RC = SFsdExceptionHandler(PtrIrpContext, Irp); + + SFsdLogEvent(SFSD_ERROR_INTERNAL_ERROR, RC); + } + + if (AreWeTopLevel) { + IoSetTopLevelIrp(NULL); + } + + FsRtlExitFileSystem(); + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdCommonWrite() +* +* Description: +* The actual work is performed here. This routine may be invoked in one' +* of the two possible contexts: +* (a) in the context of a system worker thread +* (b) in the context of the original caller +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: STATUS_SUCCESS/Error +* +*************************************************************************/ +NTSTATUS SFsdCommonWrite( +PtrSFsdIrpContext PtrIrpContext, +PIRP PtrIrp) +{ + NTSTATUS RC = STATUS_SUCCESS; + PIO_STACK_LOCATION PtrIoStackLocation = NULL; + LARGE_INTEGER ByteOffset; + uint32 WriteLength = 0, TruncatedWriteLength = 0; + uint32 NumberBytesWritten = 0; + PFILE_OBJECT PtrFileObject = NULL; + PtrSFsdFCB PtrFCB = NULL; + PtrSFsdCCB PtrCCB = NULL; + PtrSFsdVCB PtrVCB = NULL; + PtrSFsdNTRequiredFCB PtrReqdFCB = NULL; + PERESOURCE PtrResourceAcquired = NULL; + IO_STATUS_BLOCK LocalIoStatus; + void *PtrSystemBuffer = NULL; + uint32 KeyValue = 0; + + BOOLEAN CompleteIrp = TRUE; + BOOLEAN PostRequest = FALSE; + + BOOLEAN CanWait = FALSE; + BOOLEAN PagingIo = FALSE; + BOOLEAN NonBufferedIo = FALSE; + BOOLEAN SynchronousIo = FALSE; + BOOLEAN IsThisADeferredWrite = FALSE; + BOOLEAN WritingAtEndOfFile = FALSE; + + try { + // First, get a pointer to the current I/O stack location + PtrIoStackLocation = IoGetCurrentIrpStackLocation(PtrIrp); + ASSERT(PtrIoStackLocation); + + PtrFileObject = PtrIoStackLocation->FileObject; + ASSERT(PtrFileObject); + + // If this happens to be a MDL write complete request, then + // allocated MDL can be freed. This may cause a recursive write + // back into the FSD. + if (PtrIoStackLocation->MinorFunction & IRP_MN_COMPLETE) { + // Caller wants to tell the Cache Manager that a previously + // allocated MDL can be freed. + SFsdMdlComplete(PtrIrpContext, PtrIrp, PtrIoStackLocation, FALSE); + // The IRP has been completed. + CompleteIrp = FALSE; + try_return(RC = STATUS_SUCCESS); + } + + // If this is a request at IRQL DISPATCH_LEVEL, then post + // the request (your FSD may choose to process it synchronously + // if you implement the support correctly). + if (PtrIoStackLocation->MinorFunction & IRP_MN_DPC) { + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + + // Get the FCB and CCB pointers + PtrCCB = (PtrSFsdCCB)(PtrFileObject->FsContext2); + ASSERT(PtrCCB); + PtrFCB = PtrCCB->PtrFCB; + ASSERT(PtrFCB); + + // Get some of the parameters supplied to us + ByteOffset = PtrIoStackLocation->Parameters.Write.ByteOffset; + WriteLength = PtrIoStackLocation->Parameters.Write.Length; + + CanWait = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_CAN_BLOCK) ? TRUE : FALSE); + PagingIo = ((PtrIrp->Flags & IRP_PAGING_IO) ? TRUE : FALSE); + NonBufferedIo = ((PtrIrp->Flags & IRP_NOCACHE) ? TRUE : FALSE); + SynchronousIo = ((PtrFileObject->Flags & FO_SYNCHRONOUS_IO) ? TRUE : FALSE); + + // You might wish to check at this point whether the file object being + // used for write really did have write permission requested when the + // create/open operation was performed. Of course, for paging-io write + // operations, the check is not valid since paging-io (via the VMM) could + // use any file object (likely the first one with which caching was + // initiated on the FCB) to perform the write operation + + if (WriteLength == 0) { + // a 0 byte write can be immediately succeeded + try_return(RC); + } + + // NOTE: if your FSD does not support file sizes > 2 GB, you + // could validate the start offset here and return end-of-file + // if the offset begins beyond the maximum supported length. + + // Is this a write of the volume itself ? + if (PtrFCB->NodeIdentifier.NodeType == SFSD_NODE_TYPE_VCB) { + // Yup, we need to send this on to the disk driver after + // validation of the offset and length. + PtrVCB = (PtrSFsdVCB)(PtrFCB); + + // Acquire the volume resource exclusively + if (!ExAcquireResourceSharedLite(&(PtrVCB->VCBResource), CanWait)) { + // post the request to be processed in the context of a worker thread + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + PtrResourceAcquired = &(PtrVCB->VCBResource); + + // Insert code to validate the caller supplied offset here + + // Lock the callers buffer + if (!NT_SUCCESS(RC = SFsdLockCallersBuffer(PtrIrp, TRUE, WriteLength))) { + try_return(RC); + } + + // Forward the request to the lower level driver + + // For synchronous I/O wait here, else return STATUS_PENDING + // For asynchronous I/O support, read the discussion in Chapter 10 + + try_return(RC); + } + + // Your FSD (if it is a "nice" FSD) should check whether it is + // convenient to allow the write to proceed by utilizing the + // CcCanIWrite() function call. If it is not convenient to perform + // the write at this time, you should defer the request for a while. + // The check should not however be performed for non-cached write + // operations. To determine whether we are retrying the operation + // or now, use the IrpContext structure we have created (See the + // appendix to this book for a definition of the structure) + IsThisADeferredWrite = ((PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_DEFERRED_WRITE) ? TRUE : FALSE); + if (!NonBufferedIo) { + if (!CcCanIWrite(PtrFileObject, WriteLength, CanWait, IsThisADeferredWrite)) { + // Cache Manager and/or the VMM does not want us to perform + // the write at this time. Post the request. + SFsdSetFlag(PtrIrpContext->IrpContextFlags, SFSD_IRP_CONTEXT_DEFERRED_WRITE); + CcDeferWrite(PtrFileObject, SFsdDeferredWriteCallBack, PtrIrpContext, PtrIrp, WriteLength, IsThisADeferredWrite); + CompleteIrp = FALSE; + try_return(RC = STATUS_PENDING); + } + } + + // If the write request is directed to a page file (if your FSD + // supports paging files), send the request directly to the disk + // driver. For requests directed to a page file, you have to trust + // that the offsets will be set correctly by the VMM. You should not + // attempt to acquire any FSD resources either. + if (PtrFCB->FCBFlags & SFSD_FCB_PAGE_FILE) { + IoMarkIrpPending(PtrIrp); + // You will need to set a completion routine before invoking a lower level driver. + // Forward request directly to disk driver. + // SFsdPageFileIo(PtrIrpContext, PtrIrp); + + CompleteIrp = FALSE; + + try_return(RC = STATUS_PENDING); + } + + // We can continue. Check whether this write operation is targeted + // to a directory object in which case the sample FSD will disallow + // the write request. Once again though, if you create a stream file + // object to represent a directory in memory, you could come to this + // point as a result of modifying the directory contents internally + // by the FSD itself. In that case, you should be able to differentiate + // the directory write as being an internal, non-cached write operation + // and allow it to proceed. + if (PtrFCB->FCBFlags & SFSD_FCB_DIRECTORY) { + RC = STATUS_INVALID_DEVICE_REQUEST; + try_return(RC); + } + + PtrReqdFCB = &(PtrFCB->NTRequiredFCB); + + // Acquire the appropriate FCB resource exclusively + if (PagingIo) { + // Try to acquire the FCB PagingIoResource exclusively + if (!ExAcquireResourceExclusiveLite(&(PtrReqdFCB->PagingIoResource), CanWait)) { + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + // Remember the resource that was acquired + PtrResourceAcquired = &(PtrReqdFCB->PagingIoResource); + } else { + // Try to acquire the FCB MainResource exclusively + if (!ExAcquireResourceExclusiveLite(&(PtrReqdFCB->MainResource), CanWait)) { + CompleteIrp = FALSE; + PostRequest = TRUE; + try_return(RC = STATUS_PENDING); + } + // Remember the resource that was acquired + PtrResourceAcquired = &(PtrReqdFCB->MainResource); + } + + // Validate start offset and length supplied. + // Here is a special check that determines whether the caller wishes to + // begin the write at current end-of-file (whatever the value of that + // offset might be) + if ((ByteOffset.LowPart == FILE_WRITE_TO_END_OF_FILE) && (ByteOffset.HighPart == 0xFFFFFFFF)) { + WritingAtEndOfFile = TRUE; + } + + // There are certain complications that arise when the same file stream + // has been opened for cached and non-cached access. The FSD is then + // responsible for maintaining a consistent view of the data seen by + // the caller. + // If this happens to be a non-buffered I/O, you should try to flush the + // cached data (if some other file object has already initiated caching + // on the file stream). You should also try to purge the cached + // information though the purge will probably fail if the file has been + // mapped into some process' virtual address space + // Read Chapter 10 for more information on the issues involved in + // maintaining data consistency. + if (NonBufferedIo && !PagingIo && (PtrReqdFCB->SectionObject.DataSectionObject != NULL)) { + // Flush and then attempt to purge the cache + CcFlushCache(&(PtrReqdFCB->SectionObject), &ByteOffset, WriteLength, &(PtrIrp->IoStatus)); + // If the flush failed, return error to the caller + if (!NT_SUCCESS(RC = PtrIrp->IoStatus.Status)) { + try_return(RC); + } + + // Attempt the purge and ignore the return code + CcPurgeCacheSection(&(PtrReqdFCB->SectionObject), (WritingAtEndOfFile ? &(PtrReqdFCB->CommonFCBHeader.FileSize) : &(ByteOffset)), + WriteLength, FALSE); + // We are finished with our flushing and purging + } + + // Paging I/O write operations are special. If paging i/o write + // requests begin beyond end-of-file, the request should be no-oped + // (see the next two chapters for more information). If paging i/o + // requests extend beyond current end of file, they should be truncated + // to current end-of-file. + // Insert code to do this here. + + // This is also a good place to set whether fast-io can be performed + // on this particular file or not. Your FSD must make it's own + // determination on whether or not to allow fast-io operations. + // Commonly, fast-io is not allowed if any byte range locks exist + // on the file or if oplocks prevent fast-io. Practically any reason + // choosen by your FSD could result in your setting FastIoIsNotPossible + // OR FastIoIsQuestionable instead of FastIoIsPossible. + // + // PtrReqdFCB->CommonFCBHeader.IsFastIoPossible = FastIoIsPossible; + + // This is a good place for oplock related processing. + // Chapter 11 expands upon this topic in greater detail. + + // Check whether the desired write can be allowed depending + // on any byte range locks that might exist. Note that for + // paging-io, no such checks should be performed. + if (!PagingIo) { + // Insert code to perform the check here ... + // if (!SFsdCheckForByteLock(PtrFCB, PtrCCB, PtrIrp, + // PtrCurrentIoStackLocation)) { + // try_return(RC = STATUS_FILE_LOCK_CONFLICT); + // } + } + + // Check whether the current request will extend the file size, + // or the valid data length (if your FSD supports the concept of a + // valid data length associated with the file stream). In either case, + // inform the Cache Manager at this time using CcSetFileSizes() about + // the new file length. Note that real FSD implementations will have to + // first allocate enough on-disk space at this point (before they + // inform the Cache Manager about the new size) to ensure that the write + // will subsequently not fail due to lack of disk space. + + // if ((WritingAtEndOfFile) || ((ByteOffset + TruncatedWriteLength) > PtrReqdFCB->CommonFCBHeader.FileSize)) { + // we are extending the file; + // allocate space and inform the Cache Manager; + // } else if (same test as above for valid data length) { + // we are extending valid data length, inform Cache Manager; + // } + + + // Branch here for cached vs non-cached I/O + if (!NonBufferedIo) { + + // The caller wishes to perform cached I/O. Initiate caching if + // this is the first cached I/O operation using this file object + if (PtrFileObject->PrivateCacheMap == NULL) { + // This is the first cached I/O operation. You must ensure + // that the FCB Common FCB Header contains valid sizes at this time + CcInitializeCacheMap(PtrFileObject, (PCC_FILE_SIZES)(&(PtrReqdFCB->CommonFCBHeader.AllocationSize)), + FALSE, // We will not utilize pin access for this file + &(SFsdGlobalData.CacheMgrCallBacks), // callbacks + PtrCCB); // The context used in callbacks + } + + // Check and see if this request requires a MDL returned to the caller + if (PtrIoStackLocation->MinorFunction & IRP_MN_MDL) { + // Caller does want a MDL returned. Note that this mode + // implies that the caller is prepared to block + CcPrepareMdlWrite(PtrFileObject, &ByteOffset, TruncatedWriteLength, &(PtrIrp->MdlAddress), &(PtrIrp->IoStatus)); + NumberBytesWritten = PtrIrp->IoStatus.Information; + RC = PtrIrp->IoStatus.Status; + + try_return(RC); + } + + // This is a regular run-of-the-mill cached I/O request. Let the + // Cache Manager worry about it! + // First though, we need a buffer pointer (address) that is valid + // More on this in Chapter 10 + + // Also, if the request extends the ValidDataLength, use CcZeroData() + // first to zero out the gap (if any) between current valid data + // length and the start of the request + PtrSystemBuffer = SFsdGetCallersBuffer(PtrIrp); + ASSERT(PtrSystemBuffer); + if (!CcCopyWrite(PtrFileObject, &(ByteOffset), TruncatedWriteLength, CanWait, PtrSystemBuffer)) { + // The caller was not prepared to block and data is not immediately + // available in the system cache + CompleteIrp = FALSE; + PostRequest = TRUE; + // Mark Irp Pending ... + try_return(RC = STATUS_PENDING); + } else { + // We have the data + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = NumberBytesWritten = WriteLength; + } + + } else { + + // If the request extends beyond valid data length, and if the caller + // is not the lazy writer, then utilize CcZeroData() to zero out any + // blocks between current ValidDataLength and the start of the write + // operation. This method of zeroing data is convenient since it avoids + // any unneccessary writes to disk. Of course, if your FSD makes no + // guarantees about reading uninitialized data (native NT FSD + // implementations guarantee that read operations will receive zeroes + // if the sectors were not written to, thereby ensuring that old data + // cannot be re-read unintentionally or maliciously), you can avoid + // performing the zeroing operation altogether. + // You must however be careful about correctly determining the + // top-level component for the IRP so as to be able to extend valid + // data length only when appropriate and also avoid any + // infinite, recursive loops. + // See Chapter 10 for a discussion on this topic. + + // Here is a common method used by Windows NT file system drivers + // that are in the process of sending a request to the disk driver. + // First, mark the IRP as pending, then invoke the lower level driver + // after setting a completion routine. + // Meanwhile, this particular thread can immediately return a + // STATUS_PENDING return code. + // The completion routine is then responsible for completing the IRP + // and unlocking appropriate resources + + IoMarkIrpPending(PtrIrp); + + // Invoke a routine to write information to disk at this time + // You will need to set a completion routine before invoking + // a lower level driver + + CompleteIrp = FALSE; + + try_return(RC = STATUS_PENDING); + } + + try_exit: NOTHING; + + } finally { + // Post IRP if required + if (PostRequest) { + // Implement a routine that will queue up the request to be executed + // later (asynchronously) in the context of a system worker thread. + // See Chapter 10 for details. + + if (PtrResourceAcquired) { + SFsdReleaseResource(PtrResourceAcquired); + } + } else if (CompleteIrp && !(RC == STATUS_PENDING)) { + // For synchronous I/O, the FSD must maintain the current byte offset + // Do not do this however, if I/O is marked as paging-io + if (SynchronousIo && !PagingIo && NT_SUCCESS(RC)) { + PtrFileObject->CurrentByteOffset = RtlLargeIntegerAdd(ByteOffset, + RtlConvertUlongToLargeInteger((unsigned long)NumberBytesWritten)); + } + + // If the write completed successfully and this was not a paging-io + // operation, set a flag in the CCB that indicates that a write was + // performed and that the file time should be updated at cleanup + if (NT_SUCCESS(RC) && !PagingIo) { + SFsdSetFlag(PtrCCB->CCBFlags, SFSD_CCB_MODIFIED); + } + + // If the file size was changed, set a flag in the FCB indicating that + // this occurred. + + // If the request failed, and we had done some nasty stuff like + // extending the file size (including informing the Cache Manager + // about the new file size), and allocating on-disk space etc., undo + // it at this time. + + // Release resources ... + if (PtrResourceAcquired) { + SFsdReleaseResource(PtrResourceAcquired); + } + + // Can complete the IRP here if no exception was encountered + if (!(PtrIrpContext->IrpContextFlags & SFSD_IRP_CONTEXT_EXCEPTION)) { + PtrIrp->IoStatus.Status = RC; + PtrIrp->IoStatus.Information = NumberBytesWritten; + + // Free up the Irp Context + SFsdReleaseIrpContext(PtrIrpContext); + + // complete the IRP + IoCompleteRequest(PtrIrp, IO_DISK_INCREMENT); + } + } // can we complete the IRP ? + } // end of "finally" processing + + return(RC); +} + + + +/************************************************************************* +* +* Function: SFsdDeferredWriteCallBack() +* +* Description: +* Invoked by the cache manager in the context of a worker thread. +* Typically, you can simply post the request at this point (just +* as you would have if the original request could not block) to +* perform the write in the context of a system worker thread. +* +* Expected Interrupt Level (for execution) : +* +* IRQL_PASSIVE_LEVEL +* +* Return Value: None +* +*************************************************************************/ +void SFsdDeferredWriteCallBack ( +void *Context1, // Should be PtrIrpContext +void *Context2) // Should be PtrIrp +{ + // You should typically simply post the request to your internal + // queue of posted requests (just as you would if the original write + // could not be completed because the caller could not block). + // Once you post the request, return from this routine. The write + // will then be retried in the context of a system worker thread +} + Added: vendor/rfsd/current/readme.txt URL:
http://svn.reactos.ru/svn/reactos/vendor/rfsd/current/readme.txt?rev=21585&…
============================================================================== --- vendor/rfsd/current/readme.txt (added) +++ vendor/rfsd/current/readme.txt Fri Apr 14 13:01:12 2006 @@ -1,0 +1,3 @@ +================================== + rfsd:ReiserDriver Project Readme +==================================
19 years, 4 months
1
0
0
0
[tretiakov] 21584: [AUDIT] \trunk\reactos\dll\cpl\ncpa (Unlocked) I reviewed code and found no signs of reverse engeneering. All api functions used are documented in msdn. DhcpNotifyConfigChange is not documented by msdn, but there is a lot information about it on the net. google returns many results.
by tretiakov@svn.reactos.org
Author: tretiakov Date: Thu Apr 13 19:44:18 2006 New Revision: 21584 URL:
http://svn.reactos.ru/svn/reactos?rev=21584&view=rev
Log: [AUDIT] \trunk\reactos\dll\cpl\ncpa (Unlocked) I reviewed code and found no signs of reverse engeneering. All api functions used are documented in msdn. DhcpNotifyConfigChange is not documented by msdn, but there is a lot information about it on the net. google returns many results. Modified: trunk/reactos/dll/cpl/ncpa/ncpa.c (props changed) trunk/reactos/dll/cpl/ncpa/ncpa.h (props changed) trunk/reactos/dll/cpl/ncpa/resource.h (props changed) trunk/reactos/dll/cpl/ncpa/resources/HORIZ.ICO (props changed) trunk/reactos/dll/cpl/ncpa/resources/NETCONN.ICO (props changed) trunk/reactos/dll/cpl/ncpa/resources/VERTIC.ICO (props changed) trunk/reactos/dll/cpl/ncpa/resources/applet.ico (props changed) trunk/reactos/dll/cpl/ncpa/tcpip_properties.c (props changed) Propchange: trunk/reactos/dll/cpl/ncpa/ncpa.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/ncpa.h ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/resource.h ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/resources/HORIZ.ICO ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/resources/NETCONN.ICO ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/resources/VERTIC.ICO ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/resources/applet.ico ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -* Propchange: trunk/reactos/dll/cpl/ncpa/tcpip_properties.c ------------------------------------------------------------------------------ --- svn:needs-lock (original) +++ svn:needs-lock (removed) @@ -1,1 +1,0 @@ -*
19 years, 4 months
1
0
0
0
[amunger] 21583: INF fix committed for hpoussin. Fixes networking (for everyone but encoded).
by amunger@svn.reactos.org
Author: amunger Date: Thu Apr 13 19:44:08 2006 New Revision: 21583 URL:
http://svn.reactos.ru/svn/reactos?rev=21583&view=rev
Log: INF fix committed for hpoussin. Fixes networking (for everyone but encoded). Modified: trunk/reactos/media/inf/nettcpip.inf Modified: trunk/reactos/media/inf/nettcpip.inf URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/media/inf/nettcpip.inf?rev=…
============================================================================== --- trunk/reactos/media/inf/nettcpip.inf (original) +++ trunk/reactos/media/inf/nettcpip.inf Thu Apr 13 19:44:08 2006 @@ -13,7 +13,7 @@ ;----------------------------- TCP/IP DRIVER ---------------------------- -[MS_TCPIP.PrimaryInstall.NT] +[MS_TCPIP.PrimaryInstall] AddReg = TCPIP_AddReg.NT [TCPIP_AddReg.NT]
19 years, 4 months
1
0
0
0
[tretiakov] 21582: Add more stubs
by tretiakov@svn.reactos.org
Author: tretiakov Date: Thu Apr 13 19:23:34 2006 New Revision: 21582 URL:
http://svn.reactos.ru/svn/reactos?rev=21582&view=rev
Log: Add more stubs Modified: trunk/reactos/dll/win32/rpcrt4/ndr_contexth.c trunk/reactos/dll/win32/rpcrt4/rpcrt4.spec Modified: trunk/reactos/dll/win32/rpcrt4/ndr_contexth.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/rpcrt4/ndr_contex…
============================================================================== --- trunk/reactos/dll/win32/rpcrt4/ndr_contexth.c (original) +++ trunk/reactos/dll/win32/rpcrt4/ndr_contexth.c Thu Apr 13 19:23:34 2006 @@ -31,10 +31,10 @@ */ RPC_BINDING_HANDLE WINAPI NDRCContextBinding(NDR_CCONTEXT CContext) { - if(!CContext) + if(!CContext) RpcRaiseException(ERROR_INVALID_HANDLE); - return (RPC_BINDING_HANDLE)((CContextHandle*)CContext)->Binding; + return (RPC_BINDING_HANDLE)((CContextHandle*)CContext)->Binding; } /*********************************************************************** @@ -53,7 +53,6 @@ NDR_CCONTEXT ContextHandle, int fCheck) { - if(!ContextHandle) RpcRaiseException(ERROR_INVALID_HANDLE); @@ -146,25 +145,6 @@ } /*********************************************************************** - * NdrServerContextMarshall - */ -void WINAPI NdrServerContextMarshall(PMIDL_STUB_MESSAGE pStubMsg, - NDR_SCONTEXT ContextHandle, - NDR_RUNDOWN RundownRoutine ) -{ - FIXME("(%p, %p, %p): stub\n", pStubMsg, ContextHandle, RundownRoutine); -} - -/*********************************************************************** - * NdrServerContextUnmarshall - */ -NDR_SCONTEXT WINAPI NdrServerContextUnmarshall(PMIDL_STUB_MESSAGE pStubMsg) -{ - FIXME("(%p): stub\n", pStubMsg); - return NULL; -} - -/*********************************************************************** * NdrContextHandleSize */ void WINAPI NdrContextHandleSize(PMIDL_STUB_MESSAGE pStubMsg, @@ -181,6 +161,51 @@ PFORMAT_STRING pFormat) { FIXME("(%p, %p): stub\n", pStubMsg, pFormat); + return NULL; +} + +/*********************************************************************** + * NDRSContextMarshall2 + */ +void WINAPI NDRSContextMarshall2(IN RPC_BINDING_HANDLE BindingHandle, + IN NDR_SCONTEXT CContext, + OUT void *pBuff, + IN NDR_RUNDOWN userRunDownIn, + IN void *CtxGuard, + IN unsigned long Flags) +{ + FIXME("stub\n"); +} + +/*********************************************************************** + * NDRSContextUnmarshall2 + */ +NDR_SCONTEXT WINAPI NDRSContextUnmarshall2(IN RPC_BINDING_HANDLE BindingHandle, + IN void *pBuff, + IN unsigned long DataRepresentation, + IN void *CtxGuard, + IN unsigned long Flags) +{ + FIXME("stub\n"); + return NULL; +} + +/*********************************************************************** + * NdrServerContextMarshall + */ +void WINAPI NdrServerContextMarshall(PMIDL_STUB_MESSAGE pStubMsg, + NDR_SCONTEXT ContextHandle, + NDR_RUNDOWN RundownRoutine) +{ + FIXME("(%p, %p, %p): stub\n", pStubMsg, ContextHandle, RundownRoutine); +} + +/*********************************************************************** + * NdrServerContextUnmarshall + */ +NDR_SCONTEXT WINAPI NdrServerContextUnmarshall(PMIDL_STUB_MESSAGE pStubMsg) +{ + FIXME("(%p): stub\n", pStubMsg); return NULL; } @@ -204,3 +229,45 @@ FIXME("(%p, %p): stub\n", pStubMsg, pFormat); return NULL; } + +/*********************************************************************** + * NDRSContextMarshall + */ +void WINAPI NDRSContextMarshall(IN NDR_SCONTEXT CContext, + OUT void *pBuff, + IN NDR_RUNDOWN userRunDownIn) +{ + FIXME("stub\n"); +} + +/*********************************************************************** + * NDRSContextUnmarshall + */ +NDR_SCONTEXT WINAPI NDRSContextUnmarshall(IN void *pBuff, + IN unsigned long DataRepresentation) +{ + FIXME("stub\n"); + return NULL; +} + +/*********************************************************************** + * NDRSContextMarshallEx + */ +void WINAPI NDRSContextMarshallEx(IN RPC_BINDING_HANDLE BindingHandle, + IN NDR_SCONTEXT CContext, + OUT void *pBuff, + IN NDR_RUNDOWN userRunDownIn) +{ + FIXME("stub\n"); +} + +/*********************************************************************** + * NDRSContextUnmarshallEx + */ +NDR_SCONTEXT WINAPI NDRSContextUnmarshallEx(IN RPC_BINDING_HANDLE BindingHandle, + IN void *pBuff, + IN unsigned long DataRepresentation) +{ + FIXME("stub\n"); + return NULL; +} Modified: trunk/reactos/dll/win32/rpcrt4/rpcrt4.spec URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/rpcrt4/rpcrt4.spe…
============================================================================== --- trunk/reactos/dll/win32/rpcrt4/rpcrt4.spec (original) +++ trunk/reactos/dll/win32/rpcrt4/rpcrt4.spec Thu Apr 13 19:23:34 2006 @@ -140,12 +140,12 @@ @ stdcall NDRCContextBinding(ptr) @ stdcall NDRCContextMarshall(ptr ptr) @ stdcall NDRCContextUnmarshall(ptr ptr ptr long) -@ stub NDRSContextMarshall2 -@ stub NDRSContextMarshall -@ stub NDRSContextMarshallEx -@ stub NDRSContextUnmarshall2 -@ stub NDRSContextUnmarshall -@ stub NDRSContextUnmarshallEx +@ stdcall NDRSContextMarshall2(ptr ptr ptr ptr ptr long) +@ stdcall NDRSContextMarshall(ptr ptr ptr) +@ stdcall NDRSContextMarshallEx(ptr ptr ptr ptr) +@ stdcall NDRSContextUnmarshall2(ptr ptr ptr ptr long) +@ stdcall NDRSContextUnmarshall(ptr long) +@ stdcall NDRSContextUnmarshallEx(ptr ptr long) @ stub NDRcopy @ stdcall NdrAllocate(ptr long) @ stub NdrAsyncClientCall
19 years, 4 months
1
0
0
0
[greatlrd] 21581: Fixing some bugs in create overlay. it works now to create a overlay but it does not show it yet
by greatlrd@svn.reactos.org
Author: greatlrd Date: Thu Apr 13 18:12:20 2006 New Revision: 21581 URL:
http://svn.reactos.ru/svn/reactos?rev=21581&view=rev
Log: Fixing some bugs in create overlay. it works now to create a overlay but it does not show it yet Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c trunk/reactos/dll/directx/ddraw/main/surface_main.c Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/ddra…
============================================================================== --- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original) +++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Thu Apr 13 18:12:20 2006 @@ -357,7 +357,7 @@ DdReenableDirectDrawObject(&This->mDDrawGlobal, &dummy); /* FIXME fill the This->DirectDrawGlobal.vmiData right */ } - + //This->mDDrawGlobal.lpExclusiveOwner->hDC = (ULONG_PTR)GetDC( (HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd); @@ -469,8 +469,7 @@ if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) - { - OutputDebugStringA("Create DDSCAPS_PRIMARYSURFACE\n"); + { memcpy(&That->Owner->mddsdPrimary,pDDSD,sizeof(DDSURFACEDESC)); That->Owner->mddsdPrimary.dwSize = sizeof(DDSURFACEDESC); This->mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; @@ -582,45 +581,36 @@ } else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY) - { - // DX_STUB_str( "Can not create overlay surface"); - OutputDebugStringA("Create DDSCAPS_OVERLAY\n"); - + { memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC)); memcpy(&That->Surf->mddsdOverlay, pDDSD, sizeof(DDSURFACEDESC)); That->Surf->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC); That->Surf->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT; That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP; - - -// - That->Surf->mddsdOverlay.dwWidth = pDDSD->dwWidth; //pels; That->Surf->mddsdOverlay.dwHeight = pDDSD->dwHeight; // lines; That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers; - That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB; - That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32; -// -// + That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize = pDDSD->ddpfPixelFormat.dwSize; + That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = pDDSD->ddpfPixelFormat.dwFlags; + That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount; + DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface; mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat; mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay; // pDDSD; - if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) - { - // derr(L"DirectDrawImpl[%08x]::__createPrimary Cannot create primary [%08x]", this, rv); - return DDERR_NOTINITIALIZED; - } - - if (mDdCanCreateSurface.ddRVal != DD_OK) - { - return DDERR_NOTINITIALIZED; - } + if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) + { + return DDERR_NOTINITIALIZED; + } + + if (mDdCanCreateSurface.ddRVal != DD_OK) + { + return DDERR_NOTINITIALIZED; + } memset(&That->Surf->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); @@ -631,46 +621,24 @@ That->Surf->mOverlayGlobal.wHeight = (WORD)That->Surf->mddsdOverlay.dwHeight; That->Surf->mOverlayGlobal.lPitch = -1; That->Surf->mOverlayGlobal.ddpfSurface = That->Surf->mddsdOverlay.ddpfPixelFormat; -// -// // setup front- and backbuffer surfaces - UINT cSurfaces = That->Surf->mddsdOverlay.dwBackBufferCount + 1; - UINT i; - for ( i = 0; i < cSurfaces; i++) - { - memset(&That->Surf->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - That->Surf->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); - - memset(&That->Surf->mOverlayLocal[i], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); - That->Surf->mOverlayLocal[i].lpGbl = &That->Surf->mOverlayGlobal; - That->Surf->mOverlayLocal[i].lpSurfMore = &That->Surf->mOverlayMore[i]; - That->Surf-> mOverlayLocal[i].dwProcessId = GetCurrentProcessId(); - That->Surf->mOverlayLocal[i].dwFlags = (i == 0) ? - (DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER): - (DDRAWISURF_IMPLICITCREATE|DDRAWISURF_BACKBUFFER); - - That->Surf->mOverlayLocal[i].dwFlags |= + + memset(&That->Surf->mOverlayMore[0], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); + That->Surf->mOverlayMore[0].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); + + memset(&That->Surf->mOverlayLocal[0], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); + That->Surf->mOverlayLocal[0].lpGbl = &That->Surf->mOverlayGlobal; + That->Surf->mOverlayLocal[0].lpSurfMore = &That->Surf->mOverlayMore[0]; + That->Surf-> mOverlayLocal[0].dwProcessId = GetCurrentProcessId(); + That->Surf->mOverlayLocal[0].dwFlags = DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER; + + That->Surf->mOverlayLocal[0].dwFlags |= DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT| DDRAWISURF_HASOVERLAYDATA; - That->Surf->mOverlayLocal[i].ddsCaps.dwCaps = That->Surf->mddsdOverlay.ddsCaps.dwCaps; - That->Surf->mpOverlayLocals[i] = &That->Surf->mOverlayLocal[i]; - } - - for ( i = 0; i < cSurfaces; i++) - { - UINT j = (i + 1) % cSurfaces; - - - - - if (!DdAttachSurface(That->Surf->mpOverlayLocals[i], That->Surf->mpOverlayLocals[j])) - { - return DD_FALSE; - } - - } - + That->Surf->mOverlayLocal[0].ddsCaps.dwCaps = That->Surf->mddsdOverlay.ddsCaps.dwCaps; + That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0]; + DDHAL_CREATESURFACEDATA mDdCreateSurface; mDdCreateSurface.lpDD = &This->mDDrawGlobal; @@ -690,6 +658,7 @@ return mDdCreateSurface.ddRVal; } +/* DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay; mDdUpdateOverlay.lpDD = &This->mDDrawGlobal; mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay; @@ -717,9 +686,9 @@ { return mDdUpdateOverlay.ddRVal; } - - That->Surf->mpInUseSurfaceLocals[0] = That->Surf->mpOverlayLocals[0]; - //That->Surf->mpInUseSurfaceLocals[0] = &That->Owner->mPrimaryLocal; +*/ + + That->Surf->mpInUseSurfaceLocals[0] = That->Surf->mpOverlayLocals[0]; return DD_OK; } else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER) Modified: trunk/reactos/dll/directx/ddraw/main/surface_main.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/surf…
============================================================================== --- trunk/reactos/dll/directx/ddraw/main/surface_main.c (original) +++ trunk/reactos/dll/directx/ddraw/main/surface_main.c Thu Apr 13 18:12:20 2006 @@ -440,7 +440,9 @@ { DX_WINDBG_trace(); - DX_STUB; + //DX_STUB; + DX_STUB_str("not implement return not lost\n"); + return DD_OK; } HRESULT WINAPI
19 years, 4 months
1
0
0
0
[hpoussin] 21580: Replace ReactOS implementation of SetupGetInfInformationW by Wine one (much more complete) Merge from Wine (Patches by James Hawkins (<truiken@gmail.com>)) - Store the full name to the INF file in the inf_file structure - Implement SetupGetInfInformationA - Implement SetupQueryInfFileInformationA/W (James Hawkins <truiken@gmail.com>)
by hpoussin@svn.reactos.org
Author: hpoussin Date: Thu Apr 13 16:16:50 2006 New Revision: 21580 URL:
http://svn.reactos.ru/svn/reactos?rev=21580&view=rev
Log: Replace ReactOS implementation of SetupGetInfInformationW by Wine one (much more complete) Merge from Wine (Patches by James Hawkins (<truiken(a)gmail.com>)) - Store the full name to the INF file in the inf_file structure - Implement SetupGetInfInformationA - Implement SetupQueryInfFileInformationA/W (James Hawkins <truiken(a)gmail.com>) Added: trunk/reactos/dll/win32/setupapi/query.c (with props) Modified: trunk/reactos/dll/win32/setupapi/ (props changed) trunk/reactos/dll/win32/setupapi/dirid.c trunk/reactos/dll/win32/setupapi/parser.c trunk/reactos/dll/win32/setupapi/queue.c trunk/reactos/dll/win32/setupapi/setupapi.rbuild trunk/reactos/dll/win32/setupapi/setupapi.spec trunk/reactos/dll/win32/setupapi/setupapi_private.h trunk/reactos/dll/win32/setupapi/stubs.c Propchange: trunk/reactos/dll/win32/setupapi/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Thu Apr 13 16:16:50 2006 @@ -11,3 +11,4 @@ pnp.h pnp_c.c GNUmakefile +*.bak Modified: trunk/reactos/dll/win32/setupapi/dirid.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/dirid.c?…
============================================================================== --- trunk/reactos/dll/win32/setupapi/dirid.c (original) +++ trunk/reactos/dll/win32/setupapi/dirid.c Thu Apr 13 16:16:50 2006 @@ -151,7 +151,7 @@ } /* retrieve the string corresponding to a dirid, or NULL if none */ -const WCHAR *DIRID_get_string( HINF hinf, int dirid ) +const WCHAR *DIRID_get_string( int dirid ) { int i; @@ -161,7 +161,7 @@ { for (i = 0; i < nb_user_dirids; i++) if (user_dirids[i].id == dirid) return user_dirids[i].str; - ERR("user id %d not found\n", dirid ); + WARN("user id %d not found\n", dirid ); return NULL; } else if (dirid >= MIN_CSIDL_DIRID) @@ -174,7 +174,6 @@ else { if (dirid > MAX_SYSTEM_DIRID) return get_unknown_dirid(); - if (dirid == DIRID_SRCPATH) return PARSER_get_src_root( hinf ); if (!system_dirids[dirid]) system_dirids[dirid] = create_system_dirid( dirid ); return system_dirids[dirid]; } Modified: trunk/reactos/dll/win32/setupapi/parser.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/parser.c…
============================================================================== --- trunk/reactos/dll/win32/setupapi/parser.c (original) +++ trunk/reactos/dll/win32/setupapi/parser.c Thu Apr 13 16:16:50 2006 @@ -68,7 +68,7 @@ unsigned int alloc_fields; struct field *fields; int strings_section; /* index of [Strings] section or -1 if none */ - WCHAR *src_root; /* source root directory */ + WCHAR *filename; /* filename of the INF */ }; /* parser definitions */ @@ -159,6 +159,15 @@ } +/* get the directory of the inf file (as counted string, not null-terminated) */ +static const WCHAR *get_inf_dir( struct inf_file *file, unsigned int *len ) +{ + const WCHAR *p = strrchrW( file->filename, '\\' ); + *len = p ? (p + 1 - file->filename) : 0; + return file->filename; +} + + /* find a section by name */ static int find_section( struct inf_file *file, const WCHAR *name ) { @@ -279,10 +288,12 @@ /* retrieve the string substitution for a directory id */ -static const WCHAR *get_dirid_subst( int dirid, unsigned int *len ) -{ - extern const WCHAR *DIRID_get_string( HINF hinf, int dirid ); - const WCHAR *ret = DIRID_get_string( 0, dirid ); +static const WCHAR *get_dirid_subst( struct inf_file *file, int dirid, unsigned int *len ) +{ + const WCHAR *ret; + + if (dirid == DIRID_SRCPATH) return get_inf_dir( file, len ); + ret = DIRID_get_string( dirid ); if (ret) *len = strlenW(ret); return ret; } @@ -326,7 +337,7 @@ memcpy( dirid_str, str, *len * sizeof(WCHAR) ); dirid_str[*len] = 0; dirid = strtolW( dirid_str, &end, 10 ); - if (!*end) ret = get_dirid_subst( dirid, len ); + if (!*end) ret = get_dirid_subst( file, dirid, len ); HeapFree( GetProcessHeap(), 0, dirid_str ); return ret; } @@ -979,14 +990,33 @@ /*********************************************************************** + * PARSER_get_inf_filename + * + * Retrieve the filename of an inf file. + */ +const WCHAR *PARSER_get_inf_filename( HINF hinf ) +{ + struct inf_file *file = hinf; + return file->filename; +} + + +/*********************************************************************** * PARSER_get_src_root * * Retrieve the source directory of an inf file. */ -const WCHAR *PARSER_get_src_root( HINF hinf ) -{ - struct inf_file *file = hinf; - return file->src_root; +WCHAR *PARSER_get_src_root( HINF hinf ) +{ + unsigned int len; + const WCHAR *dir = get_inf_dir( hinf, &len ); + WCHAR *ret = HeapAlloc( GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR) ); + if (ret) + { + memcpy( ret, dir, len * sizeof(WCHAR) ); + ret[len] = 0; + } + return ret; } @@ -1001,15 +1031,15 @@ const WCHAR *dir; WCHAR *ptr, *ret; INT dirid; - DWORD len1, len2; + unsigned int len1; + DWORD len2; if (!SetupGetIntField( context, 1, &dirid )) return NULL; - if (!(dir = DIRID_get_string( context->Inf, dirid ))) return NULL; - len1 = strlenW(dir) + 1; + if (!(dir = get_dirid_subst( context->Inf, dirid, &len1 ))) return NULL; if (!SetupGetStringFieldW( context, 2, NULL, 0, &len2 )) len2 = 0; - if (!(ret = HeapAlloc( GetProcessHeap(), 0, (len1+len2) * sizeof(WCHAR) ))) return NULL; - strcpyW( ret, dir ); - ptr = ret + strlenW(ret); + if (!(ret = HeapAlloc( GetProcessHeap(), 0, (len1+len2+1) * sizeof(WCHAR) ))) return NULL; + memcpy( ret, dir, len1 * sizeof(WCHAR) ); + ptr = ret + len1; if (len2 && ptr > ret && ptr[-1] != '\\') *ptr++ = '\\'; if (!SetupGetStringFieldW( context, 2, ptr, len2, NULL )) *ptr = 0; return ret; @@ -1164,8 +1194,7 @@ return (HINF)INVALID_HANDLE_VALUE; } TRACE( "%s -> %p\n", debugstr_w(path), file ); - file->src_root = path; - if ((p = strrchrW( path, '\\' ))) p[1] = 0; /* remove file name */ + file->filename = path; if (class) { @@ -1274,7 +1303,7 @@ unsigned int i; for (i = 0; i < file->nb_sections; i++) HeapFree( GetProcessHeap(), 0, file->sections[i] ); - HeapFree( GetProcessHeap(), 0, file->src_root ); + HeapFree( GetProcessHeap(), 0, file->filename ); HeapFree( GetProcessHeap(), 0, file->sections ); HeapFree( GetProcessHeap(), 0, file->fields ); HeapFree( GetProcessHeap(), 0, file->strings ); @@ -1925,65 +1954,6 @@ } *buffer = 0; /* add final null */ return TRUE; -} - -/*********************************************************************** - * SetupGetInfInformationW (SETUPAPI.@) - */ -BOOL WINAPI -SetupGetInfInformationW( - IN LPCVOID InfSpec, - IN DWORD SearchControl, - IN PSP_INF_INFORMATION ReturnBuffer, - IN DWORD ReturnBufferSize, - IN PDWORD RequiredSize) -{ - HINF hInf; - DWORD requiredSize; - BOOL Ret = FALSE; - - TRACE("%p %lx %p %ld %p\n", InfSpec, SearchControl, ReturnBuffer, - ReturnBufferSize, RequiredSize); - - if (SearchControl != INFINFO_INF_SPEC_IS_HINF - && SearchControl != INFINFO_INF_NAME_IS_ABSOLUTE - && SearchControl != INFINFO_DEFAULT_SEARCH - && SearchControl != INFINFO_REVERSE_DEFAULT_SEARCH - && SearchControl != INFINFO_INF_PATH_LIST_SEARCH) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } - - if (SearchControl == INFINFO_INF_SPEC_IS_HINF) - hInf = (HINF)InfSpec; - else - { - /* open .inf file and put its handle to hInf */ - FIXME("SearchControl 0x%lx not implemented\n", SearchControl); - SetLastError(ERROR_GEN_FAILURE); - return FALSE; - } - - /* FIXME: add size of [Version] section */ - requiredSize = sizeof(SP_INF_INFORMATION); - - if (requiredSize <= ReturnBufferSize) - { - ReturnBuffer->InfStyle = INF_STYLE_WIN4; /* FIXME */ - ReturnBuffer->InfCount = 1; /* FIXME */ - /* FIXME: memcpy(ReturnBuffer->VersionData, ...); */ - Ret = TRUE; - } - else - SetLastError(ERROR_INSUFFICIENT_BUFFER); - - if (RequiredSize) - *RequiredSize = requiredSize; - - if (SearchControl != INFINFO_INF_SPEC_IS_HINF) - SetupCloseInfFile(hInf); - return Ret; } /*********************************************************************** Added: trunk/reactos/dll/win32/setupapi/query.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/query.c?…
============================================================================== --- trunk/reactos/dll/win32/setupapi/query.c (added) +++ trunk/reactos/dll/win32/setupapi/query.c Thu Apr 13 16:16:50 2006 @@ -1,0 +1,271 @@ +/* + * setupapi query functions + * + * Copyright 2006 James Hawkins + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "setupapi_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(setupapi); + +/* fills the PSP_INF_INFORMATION struct fill_info is TRUE + * always returns the required size of the information + */ +static BOOL fill_inf_info(HINF inf, PSP_INF_INFORMATION buffer, DWORD size, DWORD *required) +{ + LPCWSTR filename = PARSER_get_inf_filename(inf); + DWORD total_size = FIELD_OFFSET(SP_INF_INFORMATION, VersionData) + + (lstrlenW(filename) + 1) * sizeof(WCHAR); + + if (required) *required = total_size; + + /* FIXME: we need to parse the INF file to find the correct version info */ + if (buffer) + { + if (size < total_size) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return FALSE; + } + buffer->InfStyle = INF_STYLE_WIN4; + buffer->InfCount = 1; + /* put the filename in buffer->VersionData */ + lstrcpyW((LPWSTR)&buffer->VersionData[0], filename); + } + return TRUE; +} + +static HINF search_for_inf(LPCVOID InfSpec, DWORD SearchControl) +{ + HINF hInf = INVALID_HANDLE_VALUE; + WCHAR inf_path[MAX_PATH]; + + static const WCHAR infW[] = {'\\','i','n','f','\\',0}; + static const WCHAR system32W[] = {'\\','s','y','s','t','e','m','3','2','\\',0}; + + if (SearchControl == INFINFO_REVERSE_DEFAULT_SEARCH) + { + GetWindowsDirectoryW(inf_path, MAX_PATH); + lstrcatW(inf_path, system32W); + lstrcatW(inf_path, InfSpec); + + hInf = SetupOpenInfFileW(inf_path, NULL, + INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL); + if (hInf != INVALID_HANDLE_VALUE) + return hInf; + + GetWindowsDirectoryW(inf_path, MAX_PATH); + lstrcpyW(inf_path, infW); + lstrcatW(inf_path, InfSpec); + + return SetupOpenInfFileW(inf_path, NULL, + INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL); + } + + return INVALID_HANDLE_VALUE; +} + +/*********************************************************************** + * SetupGetInfInformationA (SETUPAPI.@) + * + */ +BOOL WINAPI SetupGetInfInformationA(LPCVOID InfSpec, DWORD SearchControl, + PSP_INF_INFORMATION ReturnBuffer, + DWORD ReturnBufferSize, PDWORD RequiredSize) +{ + LPWSTR inf = (LPWSTR)InfSpec; + DWORD len; + BOOL ret; + + if (InfSpec && SearchControl >= INFINFO_INF_NAME_IS_ABSOLUTE) + { + len = lstrlenA(InfSpec) + 1; + inf = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, InfSpec, -1, inf, len); + } + + ret = SetupGetInfInformationW(inf, SearchControl, ReturnBuffer, + ReturnBufferSize, RequiredSize); + + if (SearchControl >= INFINFO_INF_NAME_IS_ABSOLUTE) + HeapFree(GetProcessHeap(), 0, inf); + + return ret; +} + +/*********************************************************************** + * SetupGetInfInformationW (SETUPAPI.@) + * + * BUGS + * Only handles the case when InfSpec is an INF handle. + */ +BOOL WINAPI SetupGetInfInformationW(LPCVOID InfSpec, DWORD SearchControl, + PSP_INF_INFORMATION ReturnBuffer, + DWORD ReturnBufferSize, PDWORD RequiredSize) +{ + HINF inf; + BOOL ret; + + TRACE("(%p, %ld, %p, %ld, %p)\n", InfSpec, SearchControl, ReturnBuffer, + ReturnBufferSize, RequiredSize); + + if (!InfSpec) + { + if (SearchControl == INFINFO_INF_SPEC_IS_HINF) + SetLastError(ERROR_INVALID_HANDLE); + else + SetLastError(ERROR_INVALID_PARAMETER); + + return FALSE; + } + + if (!ReturnBuffer && ReturnBufferSize) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + switch (SearchControl) + { + case INFINFO_INF_SPEC_IS_HINF: + inf = (HINF)InfSpec; + break; + case INFINFO_INF_NAME_IS_ABSOLUTE: + case INFINFO_DEFAULT_SEARCH: + inf = SetupOpenInfFileW(InfSpec, NULL, + INF_STYLE_OLDNT | INF_STYLE_WIN4, NULL); + break; + case INFINFO_REVERSE_DEFAULT_SEARCH: + inf = search_for_inf(InfSpec, SearchControl); + break; + case INFINFO_INF_PATH_LIST_SEARCH: + FIXME("Unhandled search control: %ld\n", SearchControl); + + if (RequiredSize) + *RequiredSize = 0; + + return FALSE; + default: + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (inf == INVALID_HANDLE_VALUE) + { + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + ret = fill_inf_info(inf, ReturnBuffer, ReturnBufferSize, RequiredSize); + + if (SearchControl >= INFINFO_INF_NAME_IS_ABSOLUTE) + SetupCloseInfFile(inf); + + return ret; +} + +/*********************************************************************** + * SetupQueryInfFileInformationA (SETUPAPI.@) + */ +BOOL WINAPI SetupQueryInfFileInformationA(PSP_INF_INFORMATION InfInformation, + UINT InfIndex, PSTR ReturnBuffer, + DWORD ReturnBufferSize, PDWORD RequiredSize) +{ + LPWSTR filenameW; + DWORD size; + BOOL ret; + + ret = SetupQueryInfFileInformationW(InfInformation, InfIndex, NULL, 0, &size); + if (!ret) + return FALSE; + + filenameW = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)); + + ret = SetupQueryInfFileInformationW(InfInformation, InfIndex, + filenameW, size, &size); + if (!ret) + { + HeapFree(GetProcessHeap(), 0, filenameW); + return FALSE; + } + + if (RequiredSize) + *RequiredSize = size; + + if (!ReturnBuffer) + { + if (ReturnBufferSize) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + return TRUE; + } + + if (size > ReturnBufferSize) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return FALSE; + } + + WideCharToMultiByte(CP_ACP, 0, filenameW, -1, ReturnBuffer, size, NULL, NULL); + HeapFree(GetProcessHeap(), 0, filenameW); + + return ret; +} + +/*********************************************************************** + * SetupQueryInfFileInformationW (SETUPAPI.@) + */ +BOOL WINAPI SetupQueryInfFileInformationW(PSP_INF_INFORMATION InfInformation, + UINT InfIndex, PWSTR ReturnBuffer, + DWORD ReturnBufferSize, PDWORD RequiredSize) +{ + DWORD len; + LPWSTR ptr; + + TRACE("(%p, %u, %p, %ld, %p) Stub!\n", InfInformation, InfIndex, + ReturnBuffer, ReturnBufferSize, RequiredSize); + + if (!InfInformation) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (InfIndex != 0) + FIXME("Appended INF files are not handled\n"); + + ptr = (LPWSTR)&InfInformation->VersionData[0]; + len = lstrlenW(ptr); + + if (RequiredSize) + *RequiredSize = len + 1; + + if (!ReturnBuffer) + return TRUE; + + if (ReturnBufferSize < len) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return FALSE; + } + + lstrcpyW(ReturnBuffer, ptr); + return TRUE; +} Propchange: trunk/reactos/dll/win32/setupapi/query.c ------------------------------------------------------------------------------ svn:eol-style = native Propchange: trunk/reactos/dll/win32/setupapi/query.c ------------------------------------------------------------------------------ svn:keywords = author date revision Modified: trunk/reactos/dll/win32/setupapi/queue.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/queue.c?…
============================================================================== --- trunk/reactos/dll/win32/setupapi/queue.c (original) +++ trunk/reactos/dll/win32/setupapi/queue.c Thu Apr 13 16:16:50 2006 @@ -282,12 +282,9 @@ /* find the SourceDisksFiles entry */ if (!SetupFindFirstLineW( hinf, SourceDisksFiles, op->src_file, &file_ctx )) { - const WCHAR *dir; - if ((op->style & (SP_COPY_SOURCE_ABSOLUTE|SP_COPY_SOURCEPATH_ABSOLUTE))) return; /* no specific info, use .inf file source directory */ - if (!op->src_root && (dir = DIRID_get_string( hinf, DIRID_SRCPATH ))) - op->src_root = strdupW( dir ); + if (!op->src_root) op->src_root = PARSER_get_src_root( hinf ); return; } if (!SetupGetIntField( &file_ctx, 1, &diskid )) return; @@ -337,7 +334,7 @@ if (!SetupGetStringFieldW( &disk_ctx, 4, ptr, len2, NULL )) *ptr = 0; } } - if (!op->src_root) op->src_root = strdupW( PARSER_get_src_root(hinf) ); + if (!op->src_root) op->src_root = PARSER_get_src_root(hinf); } Modified: trunk/reactos/dll/win32/setupapi/setupapi.rbuild URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/setupapi…
============================================================================== --- trunk/reactos/dll/win32/setupapi/setupapi.rbuild (original) +++ trunk/reactos/dll/win32/setupapi/setupapi.rbuild Thu Apr 13 16:16:50 2006 @@ -1,4 +1,4 @@ -<module name="setupapi" type="win32dll" baseaddress="${BASEADDRESS_SETUPAPI}" installbase="system32" installname="setupapi.dll" allowwarnings="true"> +<module name="setupapi" type="win32dll" baseaddress="${BASEADDRESS_SETUPAPI}" installbase="system32" installname="setupapi.dll"> <importlibrary definition="setupapi.spec.def" /> <include base="setupapi">.</include> <include base="ReactOS">include/reactos/wine</include> @@ -29,6 +29,7 @@ <file>install.c</file> <file>misc.c</file> <file>parser.c</file> + <file>query.c</file> <file>queue.c</file> <file>setupcab.c</file> <file>stringtable.c</file> Modified: trunk/reactos/dll/win32/setupapi/setupapi.spec URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/setupapi…
============================================================================== --- trunk/reactos/dll/win32/setupapi/setupapi.spec (original) +++ trunk/reactos/dll/win32/setupapi/setupapi.spec Thu Apr 13 16:16:50 2006 @@ -462,8 +462,8 @@ @ stub SetupQueryDrivesInDiskSpaceListW @ stub SetupQueryFileLogA @ stub SetupQueryFileLogW -@ stub SetupQueryInfFileInformationA -@ stub SetupQueryInfFileInformationW +@ stdcall SetupQueryInfFileInformationA(ptr long str long ptr) +@ stdcall SetupQueryInfFileInformationW(ptr long wstr long ptr) @ stub SetupQueryInfOriginalFileInformationA @ stub SetupQueryInfOriginalFileInformationW @ stub SetupQueryInfVersionInformationA Modified: trunk/reactos/dll/win32/setupapi/setupapi_private.h URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/setupapi…
============================================================================== --- trunk/reactos/dll/win32/setupapi/setupapi_private.h (original) +++ trunk/reactos/dll/win32/setupapi/setupapi_private.h Thu Apr 13 16:16:50 2006 @@ -189,12 +189,13 @@ /* string substitutions */ struct inf_file; -extern const WCHAR *DIRID_get_string( HINF hinf, int dirid ); +extern const WCHAR *DIRID_get_string( int dirid ); +extern const WCHAR *PARSER_get_inf_filename( HINF hinf ); extern unsigned int PARSER_string_substA( struct inf_file *file, const WCHAR *text, char *buffer, unsigned int size ); extern unsigned int PARSER_string_substW( struct inf_file *file, const WCHAR *text, WCHAR *buffer, unsigned int size ); -extern const WCHAR *PARSER_get_src_root( HINF hinf ); +extern WCHAR *PARSER_get_src_root( HINF hinf ); extern WCHAR *PARSER_get_dest_dir( INFCONTEXT *context ); /* support for Ascii queue callback functions */ Modified: trunk/reactos/dll/win32/setupapi/stubs.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/stubs.c?…
============================================================================== --- trunk/reactos/dll/win32/setupapi/stubs.c (original) +++ trunk/reactos/dll/win32/setupapi/stubs.c Thu Apr 13 16:16:50 2006 @@ -62,18 +62,6 @@ debugstr_w(sourcemedialoc)); //return FALSE; return TRUE; -} - -/*********************************************************************** - * SetupGetInfInformationA (SETUPAPI.@) - */ -BOOL WINAPI SetupGetInfInformationA( LPCVOID InfSpec, DWORD SearchControl, - PSP_INF_INFORMATION ReturnBuffer, - DWORD ReturnBufferSize, PDWORD RequiredSize) -{ - FIXME("(%p, %ld, %p, %ld, %p) Stub!\n", - InfSpec, SearchControl, ReturnBuffer, ReturnBufferSize, RequiredSize ); - return TRUE; } /***********************************************************************
19 years, 4 months
1
0
0
0
[hpoussin] 21579: Fix 2nd stage setup. Patch by w3seek
by hpoussin@svn.reactos.org
Author: hpoussin Date: Thu Apr 13 15:39:25 2006 New Revision: 21579 URL:
http://svn.reactos.ru/svn/reactos?rev=21579&view=rev
Log: Fix 2nd stage setup. Patch by w3seek Modified: trunk/reactos/dll/win32/setupapi/devinst.c Modified: trunk/reactos/dll/win32/setupapi/devinst.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/win32/setupapi/devinst.…
============================================================================== --- trunk/reactos/dll/win32/setupapi/devinst.c (original) +++ trunk/reactos/dll/win32/setupapi/devinst.c Thu Apr 13 15:39:25 2006 @@ -3155,9 +3155,9 @@ FIXME("Case not implemented: InfFileName NULL\n"); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); } - else if (Flags & ~(DI_NOVCP | DI_NOBROWSE | DI_FORCECOPY)) - { - TRACE("Unknown flags: 0x%08lx\n", Flags & ~(DI_NOVCP | DI_NOBROWSE | DI_FORCECOPY)); + else if (Flags & ~(DI_NOVCP | DI_NOBROWSE | DI_FORCECOPY | DI_QUIETINSTALL)) + { + TRACE("Unknown flags: 0x%08lx\n", Flags & ~(DI_NOVCP | DI_NOBROWSE | DI_FORCECOPY | DI_QUIETINSTALL)); SetLastError(ERROR_INVALID_FLAGS); } else if ((Flags & DI_NOVCP) && FileQueue == NULL)
19 years, 4 months
1
0
0
0
[greatlrd] 21578: one more redisg adding a member that tells whih destions it is. it work pretty well.
by greatlrd@svn.reactos.org
Author: greatlrd Date: Thu Apr 13 15:03:19 2006 New Revision: 21578 URL:
http://svn.reactos.ru/svn/reactos?rev=21578&view=rev
Log: one more redisg adding a member that tells whih destions it is. it work pretty well. Modified: trunk/reactos/dll/directx/ddraw/hal/surface_hal.c trunk/reactos/dll/directx/ddraw/main/ddraw_main.c trunk/reactos/dll/directx/ddraw/rosdraw.h Modified: trunk/reactos/dll/directx/ddraw/hal/surface_hal.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/hal/surfa…
============================================================================== --- trunk/reactos/dll/directx/ddraw/hal/surface_hal.c (original) +++ trunk/reactos/dll/directx/ddraw/hal/surface_hal.c Thu Apr 13 15:03:19 2006 @@ -67,7 +67,7 @@ mDdBlt.lpDD = &This->Owner->mDDrawGlobal; mDdBlt.Blt = This->Owner->mCallbacks.HALDDSurface.Blt; - mDdBlt.lpDDDestSurface = This->Owner->mpPrimaryLocals[0]; + mDdBlt.lpDDDestSurface = This->Surf->mpInUseSurfaceLocals[0]; mDdBlt.dwFlags = dwFlags; @@ -109,7 +109,7 @@ Lock.ddRVal = DDERR_NOTPALETTIZED; Lock.Lock = This->Owner->mCallbacks.HALDDSurface.Lock; Lock.dwFlags = flags; - Lock.lpDDSurface = &This->Owner->mPrimaryLocal; + Lock.lpDDSurface = This->Surf->mpInUseSurfaceLocals[0]; Lock.lpDD = &This->Owner->mDDrawGlobal; Lock.lpSurfData = NULL; @@ -160,7 +160,7 @@ DDHAL_UNLOCKDATA unLock; unLock.ddRVal = DDERR_NOTPALETTIZED; unLock.lpDD = &This->Owner->mDDrawGlobal; - unLock.lpDDSurface = &This->Owner->mPrimaryLocal; + unLock.lpDDSurface = This->Surf->mpInUseSurfaceLocals[0]; unLock.Unlock = This->Owner->mCallbacks.HALDDSurface.Unlock; Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/ddra…
============================================================================== --- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original) +++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Thu Apr 13 15:03:19 2006 @@ -577,6 +577,7 @@ That->Owner->mddsdPrimary.dwAlphaBitDepth = This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth; } + That->Surf->mpInUseSurfaceLocals[0] = &That->Owner->mPrimaryLocal; return DD_OK; } @@ -586,18 +587,23 @@ OutputDebugStringA("Create DDSCAPS_OVERLAY\n"); memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC)); + memcpy(&That->Surf->mddsdOverlay, pDDSD, sizeof(DDSURFACEDESC)); That->Surf->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC); That->Surf->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT; That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP; + + + // - That->Surf->mddsdOverlay.dwWidth = 100; //pels; - That->Surf->mddsdOverlay.dwHeight = 100; // lines; + + That->Surf->mddsdOverlay.dwWidth = pDDSD->dwWidth; //pels; + That->Surf->mddsdOverlay.dwHeight = pDDSD->dwHeight; // lines; That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers; That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB; That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32; -// +// // DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; @@ -712,6 +718,8 @@ return mDdUpdateOverlay.ddRVal; } + That->Surf->mpInUseSurfaceLocals[0] = That->Surf->mpOverlayLocals[0]; + //That->Surf->mpInUseSurfaceLocals[0] = &That->Owner->mPrimaryLocal; return DD_OK; } else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER) Modified: trunk/reactos/dll/directx/ddraw/rosdraw.h URL:
http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/rosdraw.h…
============================================================================== --- trunk/reactos/dll/directx/ddraw/rosdraw.h (original) +++ trunk/reactos/dll/directx/ddraw/rosdraw.h Thu Apr 13 15:03:19 2006 @@ -98,6 +98,8 @@ typedef struct { + DDRAWI_DDRAWSURFACE_LCL *mpInUseSurfaceLocals[1]; + DDRAWI_DDRAWSURFACE_GBL mSurfGlobal; DDRAWI_DDRAWSURFACE_MORE mSurfMore; DDRAWI_DDRAWSURFACE_LCL mSurfLocal;
19 years, 4 months
1
0
0
0
← Newer
1
...
15
16
17
18
19
20
21
...
33
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Results per page:
10
25
50
100
200